@@ -193,6 +193,97 @@ public void CreateTable_UseModelBuilder_WithFieldAsStruct()
193
193
Headers ARRAY<STRUCT<Key VARCHAR, Value BYTES>>
194
194
) WITH ( KAFKA_TOPIC='my_topic', VALUE_FORMAT='Json', PARTITIONS='3' );" . ReplaceLineEndings ( ) ) ;
195
195
}
196
+
197
+ private record Child : Record
198
+ {
199
+ public First [ ] Firsts { get ; init ; } = null ! ;
200
+ }
201
+
202
+ private record First
203
+ {
204
+ public Second [ ] Seconds { get ; init ; } = null ! ;
205
+ }
206
+
207
+ private record Second
208
+ {
209
+ public string Test { get ; init ; } = null ! ;
210
+ }
211
+
212
+ [ Test ]
213
+ public void CreateTable_UseModelBuilder_WithNestedArrayFieldAsStruct ( )
214
+ {
215
+ //Arrange
216
+ var modelBuilder = new ModelBuilder ( ) ;
217
+ modelBuilder . Entity < Child > ( ) . Property ( b => b . Headers ) . AsStruct ( ) ;
218
+ modelBuilder . Entity < Child > ( ) . Property ( b => b . Firsts ) . AsStruct ( ) ;
219
+ modelBuilder . Entity < Child > ( ) . Property ( b => b . Firsts . FirstOrDefault ( ) ! . Seconds ) . AsStruct ( ) ;
220
+
221
+ var creationMetadata = new EntityCreationMetadata ( "my_topic" , partitions : 3 ) ;
222
+
223
+ //Act
224
+ var statement = new StatementGenerator ( modelBuilder ) . CreateTable < Child > (
225
+ creationMetadata ,
226
+ ifNotExists : true
227
+ ) ;
228
+
229
+ //Assert
230
+ statement
231
+ . Should ( )
232
+ . Be (
233
+ @"CREATE TABLE IF NOT EXISTS Children (
234
+ Firsts ARRAY<STRUCT<Seconds ARRAY<STRUCT<Test VARCHAR>>>>,
235
+ Headers ARRAY<STRUCT<Key VARCHAR, Value BYTES>>
236
+ ) WITH ( KAFKA_TOPIC='my_topic', VALUE_FORMAT='Json', PARTITIONS='3' );" . ReplaceLineEndings ( )
237
+ ) ;
238
+ }
239
+
240
+ private class Child2
241
+ {
242
+ public First2 [ ] Firsts { get ; set ; }
243
+ }
244
+
245
+ private class First2
246
+ {
247
+ public Second2 [ ] Seconds { get ; set ; }
248
+ }
249
+
250
+ private class Second2
251
+ {
252
+ public Third [ ] Thirds { get ; set ; }
253
+ }
254
+
255
+ private class Third
256
+ {
257
+ public string Test1 { get ; set ; }
258
+ public string Test2 { get ; set ; }
259
+ }
260
+
261
+ [ Test ]
262
+ public void CreateTable_UseModelBuilder_WithNestedArrayFieldAsStruct_2 ( )
263
+ {
264
+ //Arrange
265
+ var modelBuilder = new ModelBuilder ( ) ;
266
+ modelBuilder . Entity < Child2 > ( ) . Property ( b => b . Firsts ) . AsStruct ( ) ;
267
+ modelBuilder . Entity < Child2 > ( ) . Property ( b => b . Firsts . FirstOrDefault ( ) ! . Seconds ) . AsStruct ( ) ;
268
+ modelBuilder . Entity < Child2 > ( ) . Property ( b => b . Firsts . FirstOrDefault ( ) ! . Seconds . FirstOrDefault ( ) ! . Thirds ) . AsStruct ( ) ;
269
+
270
+ var creationMetadata = new EntityCreationMetadata ( "my_topic" , partitions : 3 ) ;
271
+
272
+ //Act
273
+ var statement = new StatementGenerator ( modelBuilder ) . CreateTable < Child2 > (
274
+ creationMetadata ,
275
+ ifNotExists : true
276
+ ) ;
277
+
278
+ //Assert
279
+ statement
280
+ . Should ( )
281
+ . Be (
282
+ @"CREATE TABLE IF NOT EXISTS Child2s (
283
+ Firsts ARRAY<STRUCT<Seconds ARRAY<STRUCT<Thirds ARRAY<STRUCT<Test1 VARCHAR, Test2 VARCHAR>>>>>>
284
+ ) WITH ( KAFKA_TOPIC='my_topic', VALUE_FORMAT='Json', PARTITIONS='3' );" . ReplaceLineEndings ( )
285
+ ) ;
286
+ }
196
287
}
197
288
198
289
internal class Port
0 commit comments