This is an automated email from the ASF dual-hosted git repository.

karan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/druid.git


The following commit(s) were added to refs/heads/master by this push:
     new 72c9f0c2d68 fix bug in NestedComplexColumn.getFieldLogicalType when 
handling array element paths (#18059)
72c9f0c2d68 is described below

commit 72c9f0c2d6825a7fc625766f4814081579c5ac5d
Author: Clint Wylie <[email protected]>
AuthorDate: Mon Jun 2 08:30:32 2025 -0700

    fix bug in NestedComplexColumn.getFieldLogicalType when handling array 
element paths (#18059)
    
    Fixes a regression in the getFieldLogicalType method introduced in #18053, 
which forgot to add the array element adjustment that is present in 
getFieldTypes, so it was incorrectly returning the array type instead of the 
array element type when dealing with a path like $.foo[1] (where $.foo is 
ARRAY<STRING> or whatever).
---
 .../nested/CompressedNestedDataComplexColumn.java      | 18 ++++++++++++++----
 .../segment/nested/NestedDataColumnSupplierTest.java   |  7 +++++++
 2 files changed, 21 insertions(+), 4 deletions(-)

diff --git 
a/processing/src/main/java/org/apache/druid/segment/nested/CompressedNestedDataComplexColumn.java
 
b/processing/src/main/java/org/apache/druid/segment/nested/CompressedNestedDataComplexColumn.java
index 472c7a21a7c..a7c6f9df921 100644
--- 
a/processing/src/main/java/org/apache/druid/segment/nested/CompressedNestedDataComplexColumn.java
+++ 
b/processing/src/main/java/org/apache/druid/segment/nested/CompressedNestedDataComplexColumn.java
@@ -878,6 +878,7 @@ public abstract class 
CompressedNestedDataComplexColumn<TStringDictionary extend
     final String field = getField(path);
     final Set<ColumnType> fieldTypes;
     int index = fields.indexOf(field);
+    ColumnType leastRestrictiveType = null;
     if (index < 0) {
       if (!path.isEmpty() && path.get(path.size() - 1) instanceof 
NestedPathArrayElement) {
         final String arrayField = getField(path.subList(0, path.size() - 1));
@@ -887,12 +888,21 @@ public abstract class 
CompressedNestedDataComplexColumn<TStringDictionary extend
         return null;
       }
       fieldTypes = 
FieldTypeInfo.convertToSet(fieldInfo.getTypes(index).getByteValue());
+      for (ColumnType type : fieldTypes) {
+        if (type.isArray()) {
+          leastRestrictiveType = ColumnType.leastRestrictiveType(
+              leastRestrictiveType,
+              (ColumnType) type.getElementType()
+          );
+        } else {
+          leastRestrictiveType = 
ColumnType.leastRestrictiveType(leastRestrictiveType, type);
+        }
+      }
     } else {
       fieldTypes = 
FieldTypeInfo.convertToSet(fieldInfo.getTypes(index).getByteValue());
-    }
-    ColumnType leastRestrictiveType = null;
-    for (ColumnType type : fieldTypes) {
-      leastRestrictiveType = 
ColumnType.leastRestrictiveType(leastRestrictiveType, type);
+      for (ColumnType type : fieldTypes) {
+        leastRestrictiveType = 
ColumnType.leastRestrictiveType(leastRestrictiveType, type);
+      }
     }
     return leastRestrictiveType;
   }
diff --git 
a/processing/src/test/java/org/apache/druid/segment/nested/NestedDataColumnSupplierTest.java
 
b/processing/src/test/java/org/apache/druid/segment/nested/NestedDataColumnSupplierTest.java
index dfc68aaf8bb..007fe572b84 100644
--- 
a/processing/src/test/java/org/apache/druid/segment/nested/NestedDataColumnSupplierTest.java
+++ 
b/processing/src/test/java/org/apache/druid/segment/nested/NestedDataColumnSupplierTest.java
@@ -84,6 +84,7 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.util.SortedMap;
 import java.util.TreeMap;
 import java.util.TreeSet;
@@ -455,6 +456,8 @@ public class NestedDataColumnSupplierTest extends 
InitializedNullHandlingTest
     NullValueIndex sNulls = sIndexSupplier.as(NullValueIndex.class);
 
     final List<NestedPathPart> sElementPath = 
NestedPathFinder.parseJsonPath("$.s[1]");
+    Assert.assertEquals(Set.of(ColumnType.STRING), 
column.getFieldTypes(sElementPath));
+    Assert.assertEquals(ColumnType.STRING, 
column.getFieldLogicalType(sElementPath));
     ColumnValueSelector<?> sElementSelector = 
column.makeColumnValueSelector(sElementPath, offset);
     VectorObjectSelector sElementVectorSelector = 
column.makeVectorObjectSelector(sElementPath, vectorOffset);
     VectorObjectSelector sElementFilteredVectorSelector = 
column.makeVectorObjectSelector(
@@ -480,6 +483,8 @@ public class NestedDataColumnSupplierTest extends 
InitializedNullHandlingTest
     NullValueIndex lNulls = lIndexSupplier.as(NullValueIndex.class);
 
     final List<NestedPathPart> lElementPath = 
NestedPathFinder.parseJsonPath("$.l[1]");
+    Assert.assertEquals(Set.of(ColumnType.LONG), 
column.getFieldTypes(lElementPath));
+    Assert.assertEquals(ColumnType.LONG, 
column.getFieldLogicalType(lElementPath));
     ColumnValueSelector<?> lElementSelector = 
column.makeColumnValueSelector(lElementPath, offset);
     VectorValueSelector lElementVectorSelector = 
column.makeVectorValueSelector(lElementPath, vectorOffset);
     VectorObjectSelector lElementVectorObjectSelector = 
column.makeVectorObjectSelector(lElementPath, vectorOffset);
@@ -506,6 +511,8 @@ public class NestedDataColumnSupplierTest extends 
InitializedNullHandlingTest
     NullValueIndex dNulls = dIndexSupplier.as(NullValueIndex.class);
 
     final List<NestedPathPart> dElementPath = 
NestedPathFinder.parseJsonPath("$.d[1]");
+    Assert.assertEquals(Set.of(ColumnType.DOUBLE), 
column.getFieldTypes(dElementPath));
+    Assert.assertEquals(ColumnType.DOUBLE, 
column.getFieldLogicalType(dElementPath));
     ColumnValueSelector<?> dElementSelector = 
column.makeColumnValueSelector(dElementPath, offset);
     VectorValueSelector dElementVectorSelector = 
column.makeVectorValueSelector(dElementPath, vectorOffset);
     VectorObjectSelector dElementVectorObjectSelector = 
column.makeVectorObjectSelector(dElementPath, vectorOffset);


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

Reply via email to