@@ -174,4 +174,38 @@ public void testAvroKeyPayloadSchemaPrimitiveKey() {
174
174
assertEquals ("field1" , result .getValue ().getFields ().get (0 ).name ());
175
175
assertEquals ("string" , result .getValue ().getFields ().get (0 ).schema ().getType ().getName ());
176
176
}
177
+
178
+ @ Test
179
+ public void convertsNestedArray () {
180
+ // Create a RelDataType with an array of structs
181
+ RelDataTypeFactory typeFactory = new SqlTypeFactoryImpl (RelDataTypeSystem .DEFAULT );
182
+
183
+ // Create a struct type for array elements
184
+ RelDataTypeFactory .Builder elementBuilder = new RelDataTypeFactory .Builder (typeFactory );
185
+ elementBuilder .add ("field1" , typeFactory .createSqlType (SqlTypeName .VARCHAR ));
186
+ elementBuilder .add ("field2" , typeFactory .createSqlType (SqlTypeName .INTEGER ));
187
+ RelDataType structType = elementBuilder .build ();
188
+
189
+ // Create array of structs type
190
+ RelDataType arrayOfStructsType = typeFactory .createArrayType (structType , -1 );
191
+
192
+ // Test with a struct containing an array of structs field
193
+ RelDataTypeFactory .Builder containerBuilder = new RelDataTypeFactory .Builder (typeFactory );
194
+ containerBuilder .add ("arrayOfStructsField" , arrayOfStructsType );
195
+ RelDataType containerType = containerBuilder .build ();
196
+
197
+ Schema containerSchema = AvroConverter .avro ("test" , "Record" , containerType );
198
+ assertNotNull (containerSchema );
199
+ assertEquals (1 , containerSchema .getFields ().size ());
200
+ assertEquals ("arrayOfStructsField" , containerSchema .getFields ().get (0 ).name ());
201
+
202
+ Schema arrayFieldSchema = containerSchema .getFields ().get (0 ).schema ();
203
+ assertEquals (Schema .Type .ARRAY , arrayFieldSchema .getType ());
204
+
205
+ Schema structElementSchema = arrayFieldSchema .getElementType ();
206
+ assertEquals (Schema .Type .RECORD , structElementSchema .getType ());
207
+ assertEquals (2 , structElementSchema .getFields ().size ());
208
+ assertEquals ("field1" , structElementSchema .getFields ().get (0 ).name ());
209
+ assertEquals ("field2" , structElementSchema .getFields ().get (1 ).name ());
210
+ }
177
211
}
0 commit comments