@@ -1284,12 +1284,12 @@ public void testMapVectorWithExtensionType() throws Exception {
12841284 writer .startEntry ();
12851285 writer .key ().bigInt ().writeBigInt (0 );
12861286 ExtensionWriter extensionWriter = writer .value ().extension (UuidType .INSTANCE );
1287- extensionWriter .writeExtension (u1 );
1287+ extensionWriter .writeExtension (u1 , UuidType . INSTANCE );
12881288 writer .endEntry ();
12891289 writer .startEntry ();
12901290 writer .key ().bigInt ().writeBigInt (1 );
12911291 extensionWriter = writer .value ().extension (UuidType .INSTANCE );
1292- extensionWriter .writeExtension (u2 );
1292+ extensionWriter .writeExtension (u2 , UuidType . INSTANCE );
12931293 writer .endEntry ();
12941294 writer .endMap ();
12951295
@@ -1326,12 +1326,11 @@ public void testCopyFromForExtensionType() throws Exception {
13261326 writer .startEntry ();
13271327 writer .key ().bigInt ().writeBigInt (0 );
13281328 ExtensionWriter extensionWriter = writer .value ().extension (UuidType .INSTANCE );
1329- extensionWriter .writeExtension (u1 );
1329+ extensionWriter .writeExtension (u1 , UuidType . INSTANCE );
13301330 writer .endEntry ();
13311331 writer .startEntry ();
13321332 writer .key ().bigInt ().writeBigInt (1 );
1333- extensionWriter = writer .value ().extension (UuidType .INSTANCE );
1334- extensionWriter .writeExtension (u2 );
1333+ extensionWriter .writeExtension (u2 , UuidType .INSTANCE );
13351334 writer .endEntry ();
13361335 writer .endMap ();
13371336
@@ -1575,4 +1574,105 @@ public void testFixedSizeBinaryFirstInitialization() {
15751574 assertArrayEquals (new byte [] {32 , 21 }, (byte []) resultStruct .get (MapVector .VALUE_NAME ));
15761575 }
15771576 }
1577+
1578+ @ Test
1579+ public void testMapWithUuidKeyAndListUuidValue () throws Exception {
1580+ try (final MapVector mapVector = MapVector .empty ("map" , allocator , false )) {
1581+ mapVector .allocateNew ();
1582+ UnionMapWriter writer = mapVector .getWriter ();
1583+
1584+ // Create test UUIDs
1585+ UUID key1 = UUID .randomUUID ();
1586+ UUID key2 = UUID .randomUUID ();
1587+ UUID value1a = UUID .randomUUID ();
1588+ UUID value1b = UUID .randomUUID ();
1589+ UUID value2a = UUID .randomUUID ();
1590+ UUID value2b = UUID .randomUUID ();
1591+ UUID value2c = UUID .randomUUID ();
1592+
1593+ // Write first map entry: {key1 -> [value1a, value1b]}
1594+ writer .setPosition (0 );
1595+ writer .startMap ();
1596+
1597+ writer .startEntry ();
1598+ ExtensionWriter keyWriter = writer .key ().extension (UuidType .INSTANCE );
1599+ keyWriter .writeExtension (key1 , UuidType .INSTANCE );
1600+ ListWriter valueWriter = writer .value ().list ();
1601+ valueWriter .startList ();
1602+ ExtensionWriter listItemWriter = valueWriter .extension (UuidType .INSTANCE );
1603+ listItemWriter .writeExtension (value1a , UuidType .INSTANCE );
1604+ listItemWriter = valueWriter .extension (UuidType .INSTANCE );
1605+ listItemWriter .writeExtension (value1b , UuidType .INSTANCE );
1606+ valueWriter .endList ();
1607+ writer .endEntry ();
1608+
1609+ writer .startEntry ();
1610+ keyWriter = writer .key ().extension (UuidType .INSTANCE );
1611+ keyWriter .writeExtension (key2 , UuidType .INSTANCE );
1612+ valueWriter = writer .value ().list ();
1613+ valueWriter .startList ();
1614+ listItemWriter = valueWriter .extension (UuidType .INSTANCE );
1615+ listItemWriter .writeExtension (value2a , UuidType .INSTANCE );
1616+ listItemWriter = valueWriter .extension (UuidType .INSTANCE );
1617+ listItemWriter .writeExtension (value2b , UuidType .INSTANCE );
1618+ listItemWriter = valueWriter .extension (UuidType .INSTANCE );
1619+ listItemWriter .writeExtension (value2c , UuidType .INSTANCE );
1620+ valueWriter .endList ();
1621+ writer .endEntry ();
1622+
1623+ writer .endMap ();
1624+ writer .setValueCount (1 );
1625+
1626+ // Read and verify the data
1627+ UnionMapReader mapReader = mapVector .getReader ();
1628+ mapReader .setPosition (0 );
1629+
1630+ // Read first entry
1631+ mapReader .next ();
1632+ FieldReader keyReader = mapReader .key ();
1633+ UuidHolder keyHolder = new UuidHolder ();
1634+ keyReader .read (keyHolder );
1635+ ByteBuffer bb = ByteBuffer .wrap (keyHolder .value );
1636+ UUID actualKey = new UUID (bb .getLong (), bb .getLong ());
1637+ assertEquals (key1 , actualKey );
1638+
1639+ FieldReader valueReader = mapReader .value ();
1640+ assertTrue (valueReader .isSet ());
1641+ List <?> listValue = (List <?>) valueReader .readObject ();
1642+ assertEquals (2 , listValue .size ());
1643+
1644+ // Verify first list item - readObject() returns UUID objects for extension types
1645+ UUID actualValue1a = (UUID ) listValue .get (0 );
1646+ assertEquals (value1a , actualValue1a );
1647+
1648+ // Verify second list item
1649+ UUID actualValue1b = (UUID ) listValue .get (1 );
1650+ assertEquals (value1b , actualValue1b );
1651+
1652+ // Read second entry
1653+ mapReader .next ();
1654+ keyReader = mapReader .key ();
1655+ keyReader .read (keyHolder );
1656+ bb = ByteBuffer .wrap (keyHolder .value );
1657+ actualKey = new UUID (bb .getLong (), bb .getLong ());
1658+ assertEquals (key2 , actualKey );
1659+
1660+ valueReader = mapReader .value ();
1661+ assertTrue (valueReader .isSet ());
1662+ listValue = (List <?>) valueReader .readObject ();
1663+ assertEquals (3 , listValue .size ());
1664+
1665+ // Verify first list item - readObject() returns UUID objects for extension types
1666+ UUID actualValue2a = (UUID ) listValue .get (0 );
1667+ assertEquals (value2a , actualValue2a );
1668+
1669+ // Verify second list item
1670+ UUID actualValue2b = (UUID ) listValue .get (1 );
1671+ assertEquals (value2b , actualValue2b );
1672+
1673+ // Verify third list item
1674+ UUID actualValue2c = (UUID ) listValue .get (2 );
1675+ assertEquals (value2c , actualValue2c );
1676+ }
1677+ }
15781678}
0 commit comments