clintropolis commented on code in PR #13653:
URL: https://github.com/apache/druid/pull/13653#discussion_r1068857229


##########
processing/src/test/java/org/apache/druid/segment/NestedDataColumnIndexerTest.java:
##########
@@ -83,4 +126,459 @@ public void testStuff()
       Assert.assertEquals(6, indexer.getCardinality());
     }
   }
+
+  @Test
+  public void testNestedColumnIndexerSchemaDiscoveryRootString() throws 
IndexSizeExceededException
+  {
+    long minTimestamp = System.currentTimeMillis();
+    IncrementalIndex index = makeIncrementalIndex(minTimestamp);
+
+    index.add(makeInputRow(minTimestamp + 1, true, STRING_COL, "a"));
+    index.add(makeInputRow(minTimestamp + 2, true, STRING_COL, "b"));
+    index.add(makeInputRow(minTimestamp + 3, true, STRING_COL, "c"));
+    index.add(makeInputRow(minTimestamp + 4, true, STRING_COL, null));
+    index.add(makeInputRow(minTimestamp + 5, false, STRING_COL, null));
+
+    IncrementalIndexStorageAdapter storageAdapter = new 
IncrementalIndexStorageAdapter(index);
+    Sequence<Cursor> cursorSequence = storageAdapter.makeCursors(
+        null,
+        Intervals.ETERNITY,
+        VirtualColumns.EMPTY,
+        Granularities.NONE,
+        false,
+        null
+    );
+    final DimensionSpec dimensionSpec = new DefaultDimensionSpec(STRING_COL, 
STRING_COL, ColumnType.STRING);
+    List<Cursor> cursorList = cursorSequence.toList();
+    ColumnSelectorFactory columnSelectorFactory = 
cursorList.get(0).getColumnSelectorFactory();
+
+    ColumnValueSelector valueSelector = 
columnSelectorFactory.makeColumnValueSelector(STRING_COL);
+    DimensionSelector dimensionSelector = 
columnSelectorFactory.makeDimensionSelector(dimensionSpec);
+    Assert.assertEquals("a", valueSelector.getObject());
+    Assert.assertEquals(1, dimensionSelector.getRow().size());
+    Assert.assertEquals("a", 
dimensionSelector.lookupName(dimensionSelector.getRow().get(0)));
+    Assert.assertEquals("a", dimensionSelector.getObject());
+
+    columnSelectorFactory = cursorList.get(1).getColumnSelectorFactory();
+    valueSelector = columnSelectorFactory.makeColumnValueSelector(STRING_COL);
+    dimensionSelector = 
columnSelectorFactory.makeDimensionSelector(dimensionSpec);
+    Assert.assertEquals("b", valueSelector.getObject());
+    Assert.assertEquals(1, dimensionSelector.getRow().size());
+    Assert.assertEquals("b", 
dimensionSelector.lookupName(dimensionSelector.getRow().get(0)));
+    Assert.assertEquals("b", dimensionSelector.getObject());
+
+    columnSelectorFactory = cursorList.get(2).getColumnSelectorFactory();
+    valueSelector = columnSelectorFactory.makeColumnValueSelector(STRING_COL);
+    dimensionSelector = 
columnSelectorFactory.makeDimensionSelector(dimensionSpec);
+    Assert.assertEquals("c", valueSelector.getObject());
+    Assert.assertEquals(1, dimensionSelector.getRow().size());
+    Assert.assertEquals("c", 
dimensionSelector.lookupName(dimensionSelector.getRow().get(0)));
+    Assert.assertEquals("c", dimensionSelector.getObject());
+
+    columnSelectorFactory = cursorList.get(3).getColumnSelectorFactory();
+    valueSelector = columnSelectorFactory.makeColumnValueSelector(STRING_COL);
+    dimensionSelector = 
columnSelectorFactory.makeDimensionSelector(dimensionSpec);
+    Assert.assertNull(valueSelector.getObject());
+    Assert.assertEquals(1, dimensionSelector.getRow().size());
+    
Assert.assertNull(dimensionSelector.lookupName(dimensionSelector.getRow().get(0)));
+    Assert.assertNull(dimensionSelector.getObject());
+
+    columnSelectorFactory = cursorList.get(4).getColumnSelectorFactory();
+    valueSelector = columnSelectorFactory.makeColumnValueSelector(STRING_COL);
+    dimensionSelector = 
columnSelectorFactory.makeDimensionSelector(dimensionSpec);
+    Assert.assertNull(valueSelector.getObject());
+    Assert.assertEquals(1, dimensionSelector.getRow().size());
+    
Assert.assertNull(dimensionSelector.lookupName(dimensionSelector.getRow().get(0)));
+    Assert.assertNull(dimensionSelector.getObject());
+  }
+
+  @Test
+  public void testNestedColumnIndexerSchemaDiscoveryRootLong() throws 
IndexSizeExceededException
+  {
+    long minTimestamp = System.currentTimeMillis();
+    IncrementalIndex index = makeIncrementalIndex(minTimestamp);
+
+    index.add(makeInputRow(minTimestamp + 1, true, LONG_COL, 1L));
+    index.add(makeInputRow(minTimestamp + 2, true, LONG_COL, 2L));
+    index.add(makeInputRow(minTimestamp + 3, true, LONG_COL, 3L));
+    index.add(makeInputRow(minTimestamp + 4, true, LONG_COL, null));
+    index.add(makeInputRow(minTimestamp + 5, false, LONG_COL, null));
+
+    IncrementalIndexStorageAdapter storageAdapter = new 
IncrementalIndexStorageAdapter(index);
+    Sequence<Cursor> cursorSequence = storageAdapter.makeCursors(
+        null,
+        Intervals.ETERNITY,
+        VirtualColumns.EMPTY,
+        Granularities.NONE,
+        false,
+        null
+    );
+    final DimensionSpec dimensionSpec = new DefaultDimensionSpec(LONG_COL, 
LONG_COL, ColumnType.LONG);
+    List<Cursor> cursorList = cursorSequence.toList();
+    ColumnSelectorFactory columnSelectorFactory = 
cursorList.get(0).getColumnSelectorFactory();
+
+    ColumnValueSelector valueSelector = 
columnSelectorFactory.makeColumnValueSelector(LONG_COL);
+    DimensionSelector dimensionSelector = 
columnSelectorFactory.makeDimensionSelector(dimensionSpec);
+    Assert.assertEquals(1L, valueSelector.getObject());
+    Assert.assertEquals(1L, valueSelector.getLong());
+    Assert.assertFalse(valueSelector.isNull());
+    Assert.assertEquals(1, dimensionSelector.getRow().size());
+    Assert.assertEquals("1", 
dimensionSelector.lookupName(dimensionSelector.getRow().get(0)));
+    Assert.assertEquals("1", dimensionSelector.getObject());
+
+    columnSelectorFactory = cursorList.get(1).getColumnSelectorFactory();
+    valueSelector = columnSelectorFactory.makeColumnValueSelector(LONG_COL);
+    dimensionSelector = 
columnSelectorFactory.makeDimensionSelector(dimensionSpec);
+    Assert.assertEquals(2L, valueSelector.getObject());
+    Assert.assertEquals(2L, valueSelector.getLong());
+    Assert.assertFalse(valueSelector.isNull());
+    Assert.assertEquals(1, dimensionSelector.getRow().size());
+    Assert.assertEquals("2", 
dimensionSelector.lookupName(dimensionSelector.getRow().get(0)));
+    Assert.assertEquals("2", dimensionSelector.getObject());
+
+    columnSelectorFactory = cursorList.get(2).getColumnSelectorFactory();
+    valueSelector = columnSelectorFactory.makeColumnValueSelector(LONG_COL);
+    dimensionSelector = 
columnSelectorFactory.makeDimensionSelector(dimensionSpec);
+    Assert.assertEquals(3L, valueSelector.getObject());
+    Assert.assertEquals(3L, valueSelector.getLong());
+    Assert.assertFalse(valueSelector.isNull());
+    Assert.assertEquals(1, dimensionSelector.getRow().size());
+    Assert.assertEquals("3", 
dimensionSelector.lookupName(dimensionSelector.getRow().get(0)));
+    Assert.assertEquals("3", dimensionSelector.getObject());
+
+    columnSelectorFactory = cursorList.get(3).getColumnSelectorFactory();
+    valueSelector = columnSelectorFactory.makeColumnValueSelector(LONG_COL);
+    dimensionSelector = 
columnSelectorFactory.makeDimensionSelector(dimensionSpec);
+    Assert.assertNull(valueSelector.getObject());
+    Assert.assertTrue(valueSelector.isNull());
+    Assert.assertEquals(1, dimensionSelector.getRow().size());
+    
Assert.assertNull(dimensionSelector.lookupName(dimensionSelector.getRow().get(0)));
+    Assert.assertNull(dimensionSelector.getObject());
+
+    columnSelectorFactory = cursorList.get(4).getColumnSelectorFactory();
+    valueSelector = columnSelectorFactory.makeColumnValueSelector(LONG_COL);
+    dimensionSelector = 
columnSelectorFactory.makeDimensionSelector(dimensionSpec);
+    Assert.assertNull(valueSelector.getObject());
+    Assert.assertTrue(valueSelector.isNull());
+    Assert.assertEquals(1, dimensionSelector.getRow().size());
+    
Assert.assertNull(dimensionSelector.lookupName(dimensionSelector.getRow().get(0)));
+    Assert.assertNull(dimensionSelector.getObject());
+  }
+
+  @Test
+  public void testNestedColumnIndexerSchemaDiscoveryRootDouble() throws 
IndexSizeExceededException
+  {
+    long minTimestamp = System.currentTimeMillis();
+    IncrementalIndex index = makeIncrementalIndex(minTimestamp);
+
+    index.add(makeInputRow(minTimestamp + 1, true, DOUBLE_COL, 1.1));
+    index.add(makeInputRow(minTimestamp + 2, true, DOUBLE_COL, 2.2));
+    index.add(makeInputRow(minTimestamp + 3, true, DOUBLE_COL, 3.3));
+    index.add(makeInputRow(minTimestamp + 4, true, DOUBLE_COL, null));
+    index.add(makeInputRow(minTimestamp + 5, false, DOUBLE_COL, null));
+
+    IncrementalIndexStorageAdapter storageAdapter = new 
IncrementalIndexStorageAdapter(index);
+    Sequence<Cursor> cursorSequence = storageAdapter.makeCursors(
+        null,
+        Intervals.ETERNITY,
+        VirtualColumns.EMPTY,
+        Granularities.NONE,
+        false,
+        null
+    );
+    final DimensionSpec dimensionSpec = new DefaultDimensionSpec(DOUBLE_COL, 
DOUBLE_COL, ColumnType.DOUBLE);
+    List<Cursor> cursorList = cursorSequence.toList();
+    ColumnSelectorFactory columnSelectorFactory = 
cursorList.get(0).getColumnSelectorFactory();
+
+    ColumnValueSelector valueSelector = 
columnSelectorFactory.makeColumnValueSelector(DOUBLE_COL);
+    DimensionSelector dimensionSelector = 
columnSelectorFactory.makeDimensionSelector(dimensionSpec);
+    Assert.assertEquals(1.1, valueSelector.getObject());
+    Assert.assertEquals(1.1, valueSelector.getDouble(), 0.0);
+    Assert.assertFalse(valueSelector.isNull());
+    Assert.assertEquals(1, dimensionSelector.getRow().size());
+    Assert.assertEquals("1.1", 
dimensionSelector.lookupName(dimensionSelector.getRow().get(0)));
+    Assert.assertEquals("1.1", dimensionSelector.getObject());
+
+    columnSelectorFactory = cursorList.get(1).getColumnSelectorFactory();
+    valueSelector = columnSelectorFactory.makeColumnValueSelector(DOUBLE_COL);
+    dimensionSelector = 
columnSelectorFactory.makeDimensionSelector(dimensionSpec);
+    Assert.assertEquals(2.2, valueSelector.getObject());
+    Assert.assertEquals(2.2, valueSelector.getDouble(), 0.0);
+    Assert.assertFalse(valueSelector.isNull());
+    Assert.assertEquals(1, dimensionSelector.getRow().size());
+    Assert.assertEquals("2.2", 
dimensionSelector.lookupName(dimensionSelector.getRow().get(0)));
+    Assert.assertEquals("2.2", dimensionSelector.getObject());
+
+    columnSelectorFactory = cursorList.get(2).getColumnSelectorFactory();
+    valueSelector = columnSelectorFactory.makeColumnValueSelector(DOUBLE_COL);
+    dimensionSelector = 
columnSelectorFactory.makeDimensionSelector(dimensionSpec);
+    Assert.assertEquals(3.3, valueSelector.getObject());
+    Assert.assertEquals(3.3, valueSelector.getDouble(), 0.0);
+    Assert.assertFalse(valueSelector.isNull());
+    Assert.assertEquals(1, dimensionSelector.getRow().size());
+    Assert.assertEquals("3.3", 
dimensionSelector.lookupName(dimensionSelector.getRow().get(0)));
+    Assert.assertEquals("3.3", dimensionSelector.getObject());
+
+    columnSelectorFactory = cursorList.get(3).getColumnSelectorFactory();
+    valueSelector = columnSelectorFactory.makeColumnValueSelector(DOUBLE_COL);
+    dimensionSelector = 
columnSelectorFactory.makeDimensionSelector(dimensionSpec);
+    Assert.assertNull(valueSelector.getObject());
+    Assert.assertEquals(1, dimensionSelector.getRow().size());
+    
Assert.assertNull(dimensionSelector.lookupName(dimensionSelector.getRow().get(0)));
+    Assert.assertNull(dimensionSelector.getObject());
+
+    columnSelectorFactory = cursorList.get(4).getColumnSelectorFactory();
+    valueSelector = columnSelectorFactory.makeColumnValueSelector(DOUBLE_COL);
+    dimensionSelector = 
columnSelectorFactory.makeDimensionSelector(dimensionSpec);
+    Assert.assertNull(valueSelector.getObject());
+    Assert.assertEquals(1, dimensionSelector.getRow().size());
+    
Assert.assertNull(dimensionSelector.lookupName(dimensionSelector.getRow().get(0)));
+    Assert.assertNull(dimensionSelector.getObject());
+  }
+
+  @Test
+  public void testNestedColumnIndexerSchemaDiscoveryRootStringArray() throws 
IndexSizeExceededException
+  {
+    long minTimestamp = System.currentTimeMillis();
+    IncrementalIndex index = makeIncrementalIndex(minTimestamp);
+
+    index.add(makeInputRow(minTimestamp + 1, true, STRING_ARRAY_COL, new 
String[]{"a"}));
+    index.add(makeInputRow(minTimestamp + 2, true, STRING_ARRAY_COL, new 
Object[]{"b", "c"}));
+    index.add(makeInputRow(minTimestamp + 3, true, STRING_ARRAY_COL, 
ImmutableList.of("d", "e")));
+    index.add(makeInputRow(minTimestamp + 4, true, STRING_ARRAY_COL, null));
+    index.add(makeInputRow(minTimestamp + 5, false, STRING_ARRAY_COL, null));
+
+    IncrementalIndexStorageAdapter storageAdapter = new 
IncrementalIndexStorageAdapter(index);
+    Sequence<Cursor> cursorSequence = storageAdapter.makeCursors(
+        null,
+        Intervals.ETERNITY,
+        VirtualColumns.EMPTY,
+        Granularities.NONE,
+        false,
+        null
+    );
+    final DimensionSpec dimensionSpec = new 
DefaultDimensionSpec(STRING_ARRAY_COL, STRING_ARRAY_COL, ColumnType.STRING);
+    List<Cursor> cursorList = cursorSequence.toList();
+    ColumnSelectorFactory columnSelectorFactory = 
cursorList.get(0).getColumnSelectorFactory();
+
+    ColumnValueSelector valueSelector = 
columnSelectorFactory.makeColumnValueSelector(STRING_ARRAY_COL);
+    Assert.assertThrows(
+        UnsupportedOperationException.class,
+        () -> 
cursorList.get(0).getColumnSelectorFactory().makeDimensionSelector(dimensionSpec)
+    );
+    Assert.assertEquals(StructuredData.wrap(new Object[]{"a"}), 
valueSelector.getObject());
+
+    columnSelectorFactory = cursorList.get(1).getColumnSelectorFactory();
+    valueSelector = 
columnSelectorFactory.makeColumnValueSelector(STRING_ARRAY_COL);
+    Assert.assertThrows(
+        UnsupportedOperationException.class,
+        () -> 
cursorList.get(1).getColumnSelectorFactory().makeDimensionSelector(dimensionSpec)
+    );
+    Assert.assertEquals(StructuredData.wrap(new Object[]{"b", "c"}), 
valueSelector.getObject());
+    Assert.assertFalse(valueSelector.isNull());
+
+    columnSelectorFactory = cursorList.get(2).getColumnSelectorFactory();
+    valueSelector = 
columnSelectorFactory.makeColumnValueSelector(STRING_ARRAY_COL);
+    Assert.assertThrows(
+        UnsupportedOperationException.class,
+        () -> 
cursorList.get(2).getColumnSelectorFactory().makeDimensionSelector(dimensionSpec)
+    );
+    // raw data is left as is, so is currently still a list while in 
incremental index...
+    Assert.assertEquals(StructuredData.wrap(ImmutableList.of("d", "e")), 
valueSelector.getObject());
+    Assert.assertFalse(valueSelector.isNull());
+
+    columnSelectorFactory = cursorList.get(3).getColumnSelectorFactory();
+    valueSelector = 
columnSelectorFactory.makeColumnValueSelector(STRING_ARRAY_COL);
+    Assert.assertThrows(
+        UnsupportedOperationException.class,
+        () -> 
cursorList.get(3).getColumnSelectorFactory().makeDimensionSelector(dimensionSpec)
+    );
+    Assert.assertNull(valueSelector.getObject());
+
+    columnSelectorFactory = cursorList.get(4).getColumnSelectorFactory();
+    valueSelector = 
columnSelectorFactory.makeColumnValueSelector(STRING_ARRAY_COL);
+    Assert.assertThrows(
+        UnsupportedOperationException.class,
+        () -> 
cursorList.get(4).getColumnSelectorFactory().makeDimensionSelector(dimensionSpec)
+    );
+    Assert.assertNull(valueSelector.getObject());
+  }
+
+  @Test
+  public void testNestedColumnIndexerSchemaDiscoveryRootVariant() throws 
IndexSizeExceededException
+  {
+    long minTimestamp = System.currentTimeMillis();
+    IncrementalIndex index = makeIncrementalIndex(minTimestamp);
+
+    index.add(makeInputRow(minTimestamp + 1, true, VARIANT_COL, "a"));
+    index.add(makeInputRow(minTimestamp + 2, true, VARIANT_COL, 2L));
+    index.add(makeInputRow(minTimestamp + 3, true, VARIANT_COL, 3.3));
+    index.add(makeInputRow(minTimestamp + 4, true, VARIANT_COL, null));
+    index.add(makeInputRow(minTimestamp + 5, false, VARIANT_COL, null));
+
+    IncrementalIndexStorageAdapter storageAdapter = new 
IncrementalIndexStorageAdapter(index);
+    Sequence<Cursor> cursorSequence = storageAdapter.makeCursors(
+        null,
+        Intervals.ETERNITY,
+        VirtualColumns.EMPTY,
+        Granularities.NONE,
+        false,
+        null
+    );
+    final DimensionSpec dimensionSpec = new DefaultDimensionSpec(VARIANT_COL, 
VARIANT_COL, ColumnType.STRING);
+    List<Cursor> cursorList = cursorSequence.toList();
+    ColumnSelectorFactory columnSelectorFactory = 
cursorList.get(0).getColumnSelectorFactory();
+
+    ColumnValueSelector valueSelector = 
columnSelectorFactory.makeColumnValueSelector(VARIANT_COL);
+    Assert.assertThrows(
+        UnsupportedOperationException.class,
+        () -> 
cursorList.get(0).getColumnSelectorFactory().makeDimensionSelector(dimensionSpec)
+    );
+    Assert.assertEquals(StructuredData.wrap("a"), valueSelector.getObject());
+
+    columnSelectorFactory = cursorList.get(1).getColumnSelectorFactory();
+    valueSelector = columnSelectorFactory.makeColumnValueSelector(VARIANT_COL);
+    Assert.assertThrows(
+        UnsupportedOperationException.class,
+        () -> 
cursorList.get(1).getColumnSelectorFactory().makeDimensionSelector(dimensionSpec)
+    );
+    Assert.assertEquals(StructuredData.wrap(2L), valueSelector.getObject());
+    Assert.assertFalse(valueSelector.isNull());
+
+    columnSelectorFactory = cursorList.get(2).getColumnSelectorFactory();
+    valueSelector = columnSelectorFactory.makeColumnValueSelector(VARIANT_COL);
+    Assert.assertThrows(
+        UnsupportedOperationException.class,
+        () -> 
cursorList.get(2).getColumnSelectorFactory().makeDimensionSelector(dimensionSpec)
+    );
+    Assert.assertEquals(StructuredData.wrap(3.3), valueSelector.getObject());
+    Assert.assertFalse(valueSelector.isNull());
+
+    columnSelectorFactory = cursorList.get(3).getColumnSelectorFactory();
+    valueSelector = columnSelectorFactory.makeColumnValueSelector(VARIANT_COL);
+    Assert.assertThrows(
+        UnsupportedOperationException.class,
+        () -> 
cursorList.get(3).getColumnSelectorFactory().makeDimensionSelector(dimensionSpec)
+    );
+    Assert.assertNull(valueSelector.getObject());
+
+    columnSelectorFactory = cursorList.get(4).getColumnSelectorFactory();
+    valueSelector = columnSelectorFactory.makeColumnValueSelector(VARIANT_COL);
+    Assert.assertThrows(
+        UnsupportedOperationException.class,
+        () -> 
cursorList.get(4).getColumnSelectorFactory().makeDimensionSelector(dimensionSpec)
+    );
+    Assert.assertNull(valueSelector.getObject());
+  }
+
+  @Test
+  public void testNestedColumnIndexerSchemaDiscoveryNested() throws 
IndexSizeExceededException
+  {
+    long minTimestamp = System.currentTimeMillis();
+    IncrementalIndex index = makeIncrementalIndex(minTimestamp);
+
+    index.add(makeInputRow(minTimestamp + 1, true, NESTED_COL, "a"));
+    index.add(makeInputRow(minTimestamp + 2, true, NESTED_COL, 2L));
+    index.add(makeInputRow(minTimestamp + 3, true, NESTED_COL, 
ImmutableMap.of("x", 1.1, "y", 2L)));
+    index.add(makeInputRow(minTimestamp + 4, true, NESTED_COL, null));
+    index.add(makeInputRow(minTimestamp + 5, false, NESTED_COL, null));
+
+    IncrementalIndexStorageAdapter storageAdapter = new 
IncrementalIndexStorageAdapter(index);
+    Sequence<Cursor> cursorSequence = storageAdapter.makeCursors(
+        null,
+        Intervals.ETERNITY,
+        VirtualColumns.EMPTY,
+        Granularities.NONE,
+        false,
+        null
+    );
+    final DimensionSpec dimensionSpec = new DefaultDimensionSpec(NESTED_COL, 
NESTED_COL, ColumnType.STRING);
+    List<Cursor> cursorList = cursorSequence.toList();
+    ColumnSelectorFactory columnSelectorFactory = 
cursorList.get(0).getColumnSelectorFactory();
+
+    ColumnValueSelector valueSelector = 
columnSelectorFactory.makeColumnValueSelector(NESTED_COL);
+    Assert.assertThrows(
+        UnsupportedOperationException.class,
+        () -> 
cursorList.get(0).getColumnSelectorFactory().makeDimensionSelector(dimensionSpec)
+    );
+    Assert.assertEquals(StructuredData.wrap("a"), valueSelector.getObject());
+
+    columnSelectorFactory = cursorList.get(1).getColumnSelectorFactory();
+    valueSelector = columnSelectorFactory.makeColumnValueSelector(NESTED_COL);
+    Assert.assertThrows(
+        UnsupportedOperationException.class,
+        () -> 
cursorList.get(1).getColumnSelectorFactory().makeDimensionSelector(dimensionSpec)
+    );
+    Assert.assertEquals(StructuredData.wrap(2L), valueSelector.getObject());
+    Assert.assertFalse(valueSelector.isNull());
+
+    columnSelectorFactory = cursorList.get(2).getColumnSelectorFactory();
+    valueSelector = columnSelectorFactory.makeColumnValueSelector(NESTED_COL);
+    Assert.assertThrows(
+        UnsupportedOperationException.class,
+        () -> 
cursorList.get(2).getColumnSelectorFactory().makeDimensionSelector(dimensionSpec)
+    );
+    Assert.assertEquals(StructuredData.wrap(ImmutableMap.of("x", 1.1, "y", 
2L)), valueSelector.getObject());
+    Assert.assertFalse(valueSelector.isNull());
+
+    columnSelectorFactory = cursorList.get(3).getColumnSelectorFactory();
+    valueSelector = columnSelectorFactory.makeColumnValueSelector(NESTED_COL);
+    Assert.assertThrows(
+        UnsupportedOperationException.class,
+        () -> 
cursorList.get(3).getColumnSelectorFactory().makeDimensionSelector(dimensionSpec)
+    );
+    Assert.assertNull(valueSelector.getObject());
+
+    columnSelectorFactory = cursorList.get(4).getColumnSelectorFactory();
+    valueSelector = columnSelectorFactory.makeColumnValueSelector(NESTED_COL);
+    Assert.assertThrows(
+        UnsupportedOperationException.class,
+        () -> 
cursorList.get(4).getColumnSelectorFactory().makeDimensionSelector(dimensionSpec)
+    );
+    Assert.assertNull(valueSelector.getObject());
+  }
+
+  @Nonnull
+  private static IncrementalIndex makeIncrementalIndex(long minTimestamp)
+  {
+    IncrementalIndex index = new OnheapIncrementalIndex.Builder()
+        .setIndexSchema(
+            new IncrementalIndexSchema(
+                minTimestamp,
+                new TimestampSpec(TIME_COL, "millis", null),
+                Granularities.NONE,
+                VirtualColumns.EMPTY,
+                new DimensionsSpec(Collections.emptyList()),
+                new AggregatorFactory[0],
+                false
+            )
+        )
+        .setMaxRowCount(1000)
+        .setUseNestedColumnIndexerForSchemaDiscovery(true)
+        .build();
+    return index;
+  }
+
+  private MapBasedInputRow makeInputRow(

Review Comment:
   will move in a future PR



##########
processing/src/main/java/org/apache/druid/segment/nested/NestedDataColumnSupplier.java:
##########
@@ -91,6 +95,15 @@ public NestedDataColumnSupplier(
         fields = GenericIndexed.read(bb, GenericIndexed.STRING_STRATEGY, 
mapper);
         fieldInfo = NestedLiteralTypeInfo.read(bb, fields.size());
 
+        if (fields.size() == 1 &&
+            ((version == 0x03 && 
NestedPathFinder.JQ_PATH_ROOT.equals(fields.get(0))) ||
+             (version == 0x04 && 
NestedPathFinder.JSON_PATH_ROOT.equals(fields.get(0))))
+        ) {
+          simpleType = fieldInfo.getTypes(0).getSingleType();
+        } else {
+          simpleType = null;
+        }

Review Comment:
   agree, will rework this in a follow-up PR



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to