Skip to content

Commit 1e468f6

Browse files
allow repeated fields for any type
1 parent 6301b95 commit 1e468f6

2 files changed

Lines changed: 51 additions & 32 deletions

File tree

packages/bigquery/src/table.js

Lines changed: 37 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -202,45 +202,50 @@ Table.mergeSchemaWithRows_ = function(schema, rows) {
202202
return fieldObject;
203203
}
204204

205-
switch (schemaField.type) {
206-
case 'BOOLEAN': {
207-
value = value === 'true';
208-
break;
209-
}
210-
case 'FLOAT': {
211-
if (!is.nil(value)) {
212-
value = parseFloat(value);
213-
}
214-
break;
215-
}
216-
case 'INTEGER': {
217-
if (!is.nil(value)) {
218-
value = parseInt(value, 10);
219-
}
220-
break;
221-
}
222-
case 'RECORD': {
223-
if (schemaField.mode === 'REPEATED') {
224-
value = value.map(function(val) {
225-
return Table.mergeSchemaWithRows_(schemaField, val.v).pop();
226-
});
227-
} else {
228-
value = Table.mergeSchemaWithRows_(schemaField, value).pop();
229-
}
230-
231-
break;
232-
}
233-
case 'TIMESTAMP': {
234-
value = new Date(value * 1000);
235-
break;
236-
}
205+
if (schemaField.mode === 'REPEATED') {
206+
value = value.map(function(val) {
207+
return convert(schemaField, val.v);
208+
});
209+
} else {
210+
value = convert(schemaField, value);
237211
}
238212

239213
fieldObject[schemaField.name] = value;
240214
return fieldObject;
241215
});
242216
}
243217

218+
function convert(schemaField, value) {
219+
switch (schemaField.type) {
220+
case 'BOOLEAN': {
221+
value = value === 'true';
222+
break;
223+
}
224+
case 'FLOAT': {
225+
if (!is.nil(value)) {
226+
value = parseFloat(value);
227+
}
228+
break;
229+
}
230+
case 'INTEGER': {
231+
if (!is.nil(value)) {
232+
value = parseInt(value, 10);
233+
}
234+
break;
235+
}
236+
case 'RECORD': {
237+
value = Table.mergeSchemaWithRows_(schemaField, value).pop();
238+
break;
239+
}
240+
case 'TIMESTAMP': {
241+
value = new Date(value * 1000);
242+
break;
243+
}
244+
}
245+
246+
return value;
247+
}
248+
244249
function flattenRows(rows) {
245250
return rows.reduce(function(acc, row) {
246251
var key = Object.keys(row)[0];

packages/bigquery/test/table.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,13 @@ describe('BigQuery/Table', function() {
181181
{ v: String(now.valueOf() / 1000) },
182182
{ v: 'false' },
183183
{ v: '5.222330009847' },
184+
{
185+
v: [
186+
{
187+
v: '10'
188+
}
189+
]
190+
},
184191
{ v: null },
185192
{
186193
v: [
@@ -209,6 +216,7 @@ describe('BigQuery/Table', function() {
209216
dob: now,
210217
has_claws: false,
211218
hair_count: 5.222330009847,
219+
arr: [10],
212220
nullable: null,
213221
objects: [
214222
{
@@ -223,6 +231,12 @@ describe('BigQuery/Table', function() {
223231

224232
var schemaObject = extend(true, SCHEMA_OBJECT, {});
225233

234+
schemaObject.fields.push({
235+
name: 'arr',
236+
type: 'INTEGER',
237+
mode: 'REPEATED'
238+
});
239+
226240
schemaObject.fields.push({
227241
name: 'nullable',
228242
type: 'STRING',

0 commit comments

Comments
 (0)