@@ -42,7 +42,7 @@ private void AssertInvalidValueWithListCheck<T>(string name, T value)
4242 var list = new List < T > ( ) ;
4343 var row = new BigQueryInsertRow { { name , list } } ;
4444 list . Add ( value ) ;
45- Assert . Throws < InvalidOperationException > ( ( ) => row . ToRowsData ( ) ) ;
45+ Assert . Throws < InvalidOperationException > ( ( ) => row . ToRowsData ( false ) ) ;
4646 }
4747
4848 private void AssertInvalid ( string name , object value )
@@ -54,7 +54,7 @@ private void AssertInvalid(string name, object value)
5454 }
5555
5656 [ Fact ]
57- public void ToRowsData_NoSpecifiedInsertId ( )
57+ public void ToRowsData_NoSpecifiedInsertId_NoEmptyInsertIdAllowed ( )
5858 {
5959 var row = new BigQueryInsertRow
6060 {
@@ -63,22 +63,40 @@ public void ToRowsData_NoSpecifiedInsertId()
6363 } ;
6464 Assert . Equal ( "value1" , row [ "field1" ] ) ;
6565 row [ "field3" ] = 2 ;
66- var rowData = row . ToRowsData ( ) ;
66+ var rowData = row . ToRowsData ( false ) ;
6767 Assert . Equal ( "value1" , rowData . Json [ "field1" ] ) ;
6868 Assert . Null ( rowData . Json [ "field2" ] ) ;
6969 Assert . Equal ( 2 , rowData . Json [ "field3" ] ) ;
7070 // The insert ID should be populated automatically if not supplied by the user.
7171 Assert . NotNull ( rowData . InsertId ) ;
7272 }
7373
74+ [ Fact ]
75+ public void ToRowsData_NoSpecifiedInsertId_EmptyInsertIdAllowed ( )
76+ {
77+ var row = new BigQueryInsertRow
78+ {
79+ { "field1" , "value1" } ,
80+ { "field2" , null }
81+ } ;
82+ Assert . Equal ( "value1" , row [ "field1" ] ) ;
83+ row [ "field3" ] = 2 ;
84+ var rowData = row . ToRowsData ( true ) ;
85+ Assert . Equal ( "value1" , rowData . Json [ "field1" ] ) ;
86+ Assert . Null ( rowData . Json [ "field2" ] ) ;
87+ Assert . Equal ( 2 , rowData . Json [ "field3" ] ) ;
88+ // The insert ID won't be populated automatically.
89+ Assert . Null ( rowData . InsertId ) ;
90+ }
91+
7492 [ Fact ]
7593 public void ToRowsData_WithInsertId ( )
7694 {
7795 var row = new BigQueryInsertRow ( "my-id" )
7896 {
7997 { "field1" , "value1" } ,
8098 } ;
81- var rowData = row . ToRowsData ( ) ;
99+ var rowData = row . ToRowsData ( false ) ;
82100 Assert . Equal ( "value1" , rowData . Json [ "field1" ] ) ;
83101 Assert . Equal ( "my-id" , rowData . InsertId ) ;
84102 }
@@ -115,7 +133,7 @@ public void SupportedValueTypes_Passthrough(Type type)
115133 {
116134 object value = Activator . CreateInstance ( type ) ;
117135 var row = new BigQueryInsertRow { { "field" , value } } ;
118- var rowData = row . ToRowsData ( ) ;
136+ var rowData = row . ToRowsData ( false ) ;
119137 Assert . Equal ( value , rowData . Json [ "field" ] ) ;
120138 }
121139
@@ -124,7 +142,7 @@ public void Numeric_Json()
124142 {
125143 object value = BigQueryNumeric . Parse ( "123.456" ) ;
126144 var row = new BigQueryInsertRow { { "field" , value } } ;
127- var rowData = row . ToRowsData ( ) ;
145+ var rowData = row . ToRowsData ( false ) ;
128146 Assert . Equal ( "123.456" , rowData . Json [ "field" ] ) ;
129147 }
130148
@@ -136,7 +154,7 @@ public void DateTimeOffsetFormatting()
136154 // 3am UTC
137155 { "field" , new DateTimeOffset ( 2000 , 1 , 1 , 5 , 0 , 0 , TimeSpan . FromHours ( 2 ) ) } ,
138156 } ;
139- var rowData = row . ToRowsData ( ) ;
157+ var rowData = row . ToRowsData ( false ) ;
140158 Assert . Equal ( "2000-01-01T03:00:00Z" , rowData . Json [ "field" ] ) ;
141159 }
142160
@@ -160,7 +178,7 @@ public void UnspecifiedDateTimeFormatting()
160178 {
161179 { "field" , new DateTime ( 2000 , 1 , 1 , 5 , 0 , 0 , DateTimeKind . Unspecified ) } ,
162180 } ;
163- var rowData = row . ToRowsData ( ) ;
181+ var rowData = row . ToRowsData ( false ) ;
164182 Assert . Equal ( "2000-01-01T05:00:00" , rowData . Json [ "field" ] ) ;
165183 }
166184
@@ -171,7 +189,7 @@ public void UtcDateTimeFormatting()
171189 {
172190 { "field" , new DateTime ( 2000 , 1 , 1 , 5 , 0 , 0 , DateTimeKind . Utc ) } ,
173191 } ;
174- var rowData = row . ToRowsData ( ) ;
192+ var rowData = row . ToRowsData ( false ) ;
175193 Assert . Equal ( "2000-01-01T05:00:00Z" , rowData . Json [ "field" ] ) ;
176194 }
177195
@@ -182,7 +200,7 @@ public void TimespanFormatting()
182200 {
183201 { "field" , new TimeSpan ( 1 , 2 , 3 ) } ,
184202 } ;
185- var rowData = row . ToRowsData ( ) ;
203+ var rowData = row . ToRowsData ( false ) ;
186204 Assert . Equal ( "01:02:03" , rowData . Json [ "field" ] ) ;
187205 }
188206
@@ -191,7 +209,7 @@ public void NestedRecordFormatting()
191209 {
192210 var nested = new BigQueryInsertRow { { "inner" , "value" } } ;
193211 var outer = new BigQueryInsertRow { { "outer" , nested } } ;
194- var rowData = outer . ToRowsData ( ) ;
212+ var rowData = outer . ToRowsData ( false ) ;
195213 var obj = ( IDictionary < string , object > ) rowData . Json [ "outer" ] ;
196214 Assert . Equal ( "value" , obj [ "inner" ] ) ;
197215 }
@@ -200,15 +218,15 @@ public void NestedRecordFormatting()
200218 public void RepeatedValue ( )
201219 {
202220 var row = new BigQueryInsertRow { { "numbers" , new [ ] { 1 , 2 } } } ;
203- var rowData = row . ToRowsData ( ) ;
221+ var rowData = row . ToRowsData ( false ) ;
204222 Assert . Equal ( new object [ ] { 1 , 2 } , rowData . Json [ "numbers" ] ) ;
205223 }
206224
207225 [ Fact ]
208226 public void RepeatedValue_NullRejectedOnConversion ( )
209227 {
210228 var row = new BigQueryInsertRow { { "names" , new [ ] { "a" , null , "b" } } } ;
211- Assert . Throws < InvalidOperationException > ( ( ) => row . ToRowsData ( ) ) ;
229+ Assert . Throws < InvalidOperationException > ( ( ) => row . ToRowsData ( false ) ) ;
212230 }
213231
214232 [ Fact ]
0 commit comments