File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -188,13 +188,20 @@ Table.createSchemaFromString_ = function(str) {
188188 * @return {array } Fields using their matching names from the table's schema.
189189 */
190190Table . mergeSchemaWithRows_ = function ( schema , rows ) {
191- return rows . map ( mergeSchema ) . map ( flattenRows ) ;
191+ return arrify ( rows ) . map ( mergeSchema ) . map ( flattenRows ) ;
192192
193193 function mergeSchema ( row ) {
194194 return row . f . map ( function ( field , index ) {
195195 var schemaField = schema . fields [ index ] ;
196196 var value = field . v ;
197197
198+ var fieldObject = { } ;
199+
200+ if ( value === null ) {
201+ fieldObject [ schemaField . name ] = null ;
202+ return fieldObject ;
203+ }
204+
198205 switch ( schemaField . type ) {
199206 case 'BOOLEAN' : {
200207 value = value === 'true' ;
@@ -212,13 +219,23 @@ Table.mergeSchemaWithRows_ = function(schema, rows) {
212219 }
213220 break ;
214221 }
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+ }
215233 case 'TIMESTAMP' : {
216234 value = new Date ( value * 1000 ) ;
217235 break ;
218236 }
219237 }
220238
221- var fieldObject = { } ;
222239 fieldObject [ schemaField . name ] = value ;
223240 return fieldObject ;
224241 } ) ;
Original file line number Diff line number Diff line change @@ -180,21 +180,75 @@ describe('BigQuery/Table', function() {
180180 { v : 'Milo' } ,
181181 { v : String ( now . valueOf ( ) / 1000 ) } ,
182182 { 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+ }
184204 ]
185205 } ,
186206 expected : {
187207 id : 3 ,
188208 name : 'Milo' ,
189209 dob : now ,
190210 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+ ]
192220 }
193221 }
194222 ] ;
195223
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+
196250 var rawRows = rows . map ( prop ( 'raw' ) ) ;
197- var mergedRows = Table . mergeSchemaWithRows_ ( SCHEMA_OBJECT , rawRows ) ;
251+ var mergedRows = Table . mergeSchemaWithRows_ ( schemaObject , rawRows ) ;
198252
199253 mergedRows . forEach ( function ( mergedRow , index ) {
200254 assert . deepEqual ( mergedRow , rows [ index ] . expected ) ;
You can’t perform that action at this time.
0 commit comments