@@ -1281,12 +1281,12 @@ public void testMapVectorWithExtensionType() throws Exception {
12811281 writer .startEntry ();
12821282 writer .key ().bigInt ().writeBigInt (0 );
12831283 ExtensionWriter extensionWriter = writer .value ().extension (UuidType .INSTANCE );
1284- extensionWriter .writeExtension (u1 );
1284+ extensionWriter .writeExtension (u1 , UuidType . INSTANCE );
12851285 writer .endEntry ();
12861286 writer .startEntry ();
12871287 writer .key ().bigInt ().writeBigInt (1 );
12881288 extensionWriter = writer .value ().extension (UuidType .INSTANCE );
1289- extensionWriter .writeExtension (u2 );
1289+ extensionWriter .writeExtension (u2 , UuidType . INSTANCE );
12901290 writer .endEntry ();
12911291 writer .endMap ();
12921292
@@ -1323,12 +1323,11 @@ public void testCopyFromForExtensionType() throws Exception {
13231323 writer .startEntry ();
13241324 writer .key ().bigInt ().writeBigInt (0 );
13251325 ExtensionWriter extensionWriter = writer .value ().extension (UuidType .INSTANCE );
1326- extensionWriter .writeExtension (u1 );
1326+ extensionWriter .writeExtension (u1 , UuidType . INSTANCE );
13271327 writer .endEntry ();
13281328 writer .startEntry ();
13291329 writer .key ().bigInt ().writeBigInt (1 );
1330- extensionWriter = writer .value ().extension (UuidType .INSTANCE );
1331- extensionWriter .writeExtension (u2 );
1330+ extensionWriter .writeExtension (u2 , UuidType .INSTANCE );
13321331 writer .endEntry ();
13331332 writer .endMap ();
13341333
@@ -1354,4 +1353,105 @@ public void testCopyFromForExtensionType() throws Exception {
13541353 assertEquals (u2 , actualUuid );
13551354 }
13561355 }
1356+
1357+ @ Test
1358+ public void testMapWithUuidKeyAndListUuidValue () throws Exception {
1359+ try (final MapVector mapVector = MapVector .empty ("map" , allocator , false )) {
1360+ mapVector .allocateNew ();
1361+ UnionMapWriter writer = mapVector .getWriter ();
1362+
1363+ // Create test UUIDs
1364+ UUID key1 = UUID .randomUUID ();
1365+ UUID key2 = UUID .randomUUID ();
1366+ UUID value1a = UUID .randomUUID ();
1367+ UUID value1b = UUID .randomUUID ();
1368+ UUID value2a = UUID .randomUUID ();
1369+ UUID value2b = UUID .randomUUID ();
1370+ UUID value2c = UUID .randomUUID ();
1371+
1372+ // Write first map entry: {key1 -> [value1a, value1b]}
1373+ writer .setPosition (0 );
1374+ writer .startMap ();
1375+
1376+ writer .startEntry ();
1377+ ExtensionWriter keyWriter = writer .key ().extension (UuidType .INSTANCE );
1378+ keyWriter .writeExtension (key1 , UuidType .INSTANCE );
1379+ ListWriter valueWriter = writer .value ().list ();
1380+ valueWriter .startList ();
1381+ ExtensionWriter listItemWriter = valueWriter .extension (UuidType .INSTANCE );
1382+ listItemWriter .writeExtension (value1a , UuidType .INSTANCE );
1383+ listItemWriter = valueWriter .extension (UuidType .INSTANCE );
1384+ listItemWriter .writeExtension (value1b , UuidType .INSTANCE );
1385+ valueWriter .endList ();
1386+ writer .endEntry ();
1387+
1388+ writer .startEntry ();
1389+ keyWriter = writer .key ().extension (UuidType .INSTANCE );
1390+ keyWriter .writeExtension (key2 , UuidType .INSTANCE );
1391+ valueWriter = writer .value ().list ();
1392+ valueWriter .startList ();
1393+ listItemWriter = valueWriter .extension (UuidType .INSTANCE );
1394+ listItemWriter .writeExtension (value2a , UuidType .INSTANCE );
1395+ listItemWriter = valueWriter .extension (UuidType .INSTANCE );
1396+ listItemWriter .writeExtension (value2b , UuidType .INSTANCE );
1397+ listItemWriter = valueWriter .extension (UuidType .INSTANCE );
1398+ listItemWriter .writeExtension (value2c , UuidType .INSTANCE );
1399+ valueWriter .endList ();
1400+ writer .endEntry ();
1401+
1402+ writer .endMap ();
1403+ writer .setValueCount (1 );
1404+
1405+ // Read and verify the data
1406+ UnionMapReader mapReader = mapVector .getReader ();
1407+ mapReader .setPosition (0 );
1408+
1409+ // Read first entry
1410+ mapReader .next ();
1411+ FieldReader keyReader = mapReader .key ();
1412+ UuidHolder keyHolder = new UuidHolder ();
1413+ keyReader .read (keyHolder );
1414+ ByteBuffer bb = ByteBuffer .wrap (keyHolder .value );
1415+ UUID actualKey = new UUID (bb .getLong (), bb .getLong ());
1416+ assertEquals (key1 , actualKey );
1417+
1418+ FieldReader valueReader = mapReader .value ();
1419+ assertTrue (valueReader .isSet ());
1420+ List <?> listValue = (List <?>) valueReader .readObject ();
1421+ assertEquals (2 , listValue .size ());
1422+
1423+ // Verify first list item - readObject() returns UUID objects for extension types
1424+ UUID actualValue1a = (UUID ) listValue .get (0 );
1425+ assertEquals (value1a , actualValue1a );
1426+
1427+ // Verify second list item
1428+ UUID actualValue1b = (UUID ) listValue .get (1 );
1429+ assertEquals (value1b , actualValue1b );
1430+
1431+ // Read second entry
1432+ mapReader .next ();
1433+ keyReader = mapReader .key ();
1434+ keyReader .read (keyHolder );
1435+ bb = ByteBuffer .wrap (keyHolder .value );
1436+ actualKey = new UUID (bb .getLong (), bb .getLong ());
1437+ assertEquals (key2 , actualKey );
1438+
1439+ valueReader = mapReader .value ();
1440+ assertTrue (valueReader .isSet ());
1441+ listValue = (List <?>) valueReader .readObject ();
1442+ assertEquals (3 , listValue .size ());
1443+
1444+ // Verify first list item - readObject() returns UUID objects for extension types
1445+ UUID actualValue2a = (UUID ) listValue .get (0 );
1446+ assertEquals (value2a , actualValue2a );
1447+
1448+ // Verify second list item
1449+ UUID actualValue2b = (UUID ) listValue .get (1 );
1450+ assertEquals (value2b , actualValue2b );
1451+
1452+ // Verify third list item
1453+ UUID actualValue2c = (UUID ) listValue .get (2 );
1454+ assertEquals (value2c , actualValue2c );
1455+ }
1456+ }
13571457}
0 commit comments