File tree 2 files changed +76
-5
lines changed
2 files changed +76
-5
lines changed Original file line number Diff line number Diff line change @@ -188,13 +188,20 @@ Table.createSchemaFromString_ = function(str) {
188
188
* @return {array } Fields using their matching names from the table's schema.
189
189
*/
190
190
Table . mergeSchemaWithRows_ = function ( schema , rows ) {
191
- return rows . map ( mergeSchema ) . map ( flattenRows ) ;
191
+ return arrify ( rows ) . map ( mergeSchema ) . map ( flattenRows ) ;
192
192
193
193
function mergeSchema ( row ) {
194
194
return row . f . map ( function ( field , index ) {
195
195
var schemaField = schema . fields [ index ] ;
196
196
var value = field . v ;
197
197
198
+ var fieldObject = { } ;
199
+
200
+ if ( value === null ) {
201
+ fieldObject [ schemaField . name ] = null ;
202
+ return fieldObject ;
203
+ }
204
+
198
205
switch ( schemaField . type ) {
199
206
case 'BOOLEAN' : {
200
207
value = value === 'true' ;
@@ -212,13 +219,23 @@ Table.mergeSchemaWithRows_ = function(schema, rows) {
212
219
}
213
220
break ;
214
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
+ }
215
233
case 'TIMESTAMP' : {
216
234
value = new Date ( value * 1000 ) ;
217
235
break ;
218
236
}
219
237
}
220
238
221
- var fieldObject = { } ;
222
239
fieldObject [ schemaField . name ] = value ;
223
240
return fieldObject ;
224
241
} ) ;
Original file line number Diff line number Diff line change @@ -180,21 +180,75 @@ describe('BigQuery/Table', function() {
180
180
{ v : 'Milo' } ,
181
181
{ v : String ( now . valueOf ( ) / 1000 ) } ,
182
182
{ v : 'false' } ,
183
- { v : '5.222330009847' }
183
+ { v : '5.222330009847' } ,
184
+ { v : null } ,
185
+ {
186
+ v : [
187
+ {
188
+ v : {
189
+ f : [
190
+ {
191
+ v : {
192
+ f : [
193
+ {
194
+ v : 'nested_value'
195
+ }
196
+ ]
197
+ }
198
+ }
199
+ ]
200
+ }
201
+ }
202
+ ]
203
+ }
184
204
]
185
205
} ,
186
206
expected : {
187
207
id : 3 ,
188
208
name : 'Milo' ,
189
209
dob : now ,
190
210
has_claws : false ,
191
- hair_count : 5.222330009847
211
+ hair_count : 5.222330009847 ,
212
+ nullable : null ,
213
+ objects : [
214
+ {
215
+ nested_object : {
216
+ nested_property : 'nested_value'
217
+ }
218
+ }
219
+ ]
192
220
}
193
221
}
194
222
] ;
195
223
224
+ var schemaObject = extend ( true , SCHEMA_OBJECT , { } ) ;
225
+
226
+ schemaObject . fields . push ( {
227
+ name : 'nullable' ,
228
+ type : 'STRING' ,
229
+ mode : 'NULLABLE'
230
+ } ) ;
231
+
232
+ schemaObject . fields . push ( {
233
+ name : 'objects' ,
234
+ type : 'RECORD' ,
235
+ mode : 'REPEATED' ,
236
+ fields : [
237
+ {
238
+ name : 'nested_object' ,
239
+ type : 'RECORD' ,
240
+ fields : [
241
+ {
242
+ name : 'nested_property' ,
243
+ type : 'STRING'
244
+ }
245
+ ]
246
+ }
247
+ ]
248
+ } ) ;
249
+
196
250
var rawRows = rows . map ( prop ( 'raw' ) ) ;
197
- var mergedRows = Table . mergeSchemaWithRows_ ( SCHEMA_OBJECT , rawRows ) ;
251
+ var mergedRows = Table . mergeSchemaWithRows_ ( schemaObject , rawRows ) ;
198
252
199
253
mergedRows . forEach ( function ( mergedRow , index ) {
200
254
assert . deepEqual ( mergedRow , rows [ index ] . expected ) ;
You can’t perform that action at this time.
0 commit comments