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

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


The following commit(s) were added to refs/heads/36.0.0 by this push:
     new 1e7da512237 fix issue with projection schema deserialization from 
existing v9 segment metadata (#18916) (#18917)
1e7da512237 is described below

commit 1e7da5122371e3add9aa9e27f19cd66e4c00fefd
Author: Clint Wylie <[email protected]>
AuthorDate: Tue Jan 20 03:16:50 2026 -0800

    fix issue with projection schema deserialization from existing v9 segment 
metadata (#18916) (#18917)
---
 .../segment/projections/ProjectionSchema.java      |  3 +-
 .../segment/AggregateProjectionMetadataTest.java   | 50 +++++++++++++++++++++-
 2 files changed, 51 insertions(+), 2 deletions(-)

diff --git 
a/processing/src/main/java/org/apache/druid/segment/projections/ProjectionSchema.java
 
b/processing/src/main/java/org/apache/druid/segment/projections/ProjectionSchema.java
index 71e56abac54..e8c6b249de6 100644
--- 
a/processing/src/main/java/org/apache/druid/segment/projections/ProjectionSchema.java
+++ 
b/processing/src/main/java/org/apache/druid/segment/projections/ProjectionSchema.java
@@ -21,6 +21,7 @@ package org.apache.druid.segment.projections;
 
 import com.fasterxml.jackson.annotation.JsonSubTypes;
 import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import com.fasterxml.jackson.annotation.OptBoolean;
 import org.apache.druid.data.input.impl.AggregateProjectionSpec;
 import org.apache.druid.java.util.common.granularity.Granularity;
 import org.apache.druid.query.OrderBy;
@@ -38,7 +39,7 @@ import java.util.List;
  *
  * For V10 segment format {@link 
org.apache.druid.segment.file.SegmentFileMetadata}
  */
-@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type")
+@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type", 
requireTypeIdForSubtypes = OptBoolean.FALSE)
 @JsonSubTypes(value = {
     @JsonSubTypes.Type(name = AggregateProjectionSpec.TYPE_NAME, value = 
AggregateProjectionSchema.class),
     @JsonSubTypes.Type(name = TableProjectionSchema.TYPE_NAME, value = 
TableProjectionSchema.class),
diff --git 
a/processing/src/test/java/org/apache/druid/segment/AggregateProjectionMetadataTest.java
 
b/processing/src/test/java/org/apache/druid/segment/AggregateProjectionMetadataTest.java
index 7bc751df46a..df0e4c2e3eb 100644
--- 
a/processing/src/test/java/org/apache/druid/segment/AggregateProjectionMetadataTest.java
+++ 
b/processing/src/test/java/org/apache/druid/segment/AggregateProjectionMetadataTest.java
@@ -72,9 +72,57 @@ class AggregateProjectionMetadataTest extends 
InitializedNullHandlingTest
         spec,
         JSON_MAPPER.readValue(JSON_MAPPER.writeValueAsString(spec), 
AggregateProjectionMetadata.class)
     );
+    String legacy = "{\n"
+                    + "  \"type\" : \"aggregate\",\n"
+                    + "  \"schema\" : {\n"
+                    + "    \"name\" : \"some_projection\",\n"
+                    + "    \"timeColumnName\" : \"time\",\n"
+                    + "    \"filter\" : {\n"
+                    + "      \"type\" : \"equals\",\n"
+                    + "      \"column\" : \"a\",\n"
+                    + "      \"matchValueType\" : \"STRING\",\n"
+                    + "      \"matchValue\" : \"a\"\n"
+                    + "    },\n"
+                    + "    \"virtualColumns\" : [ {\n"
+                    + "      \"type\" : \"expression\",\n"
+                    + "      \"name\" : \"time\",\n"
+                    + "      \"expression\" : 
\"timestamp_floor(__time,'PT1H',null,'UTC')\",\n"
+                    + "      \"outputType\" : \"LONG\"\n"
+                    + "    } ],\n"
+                    + "    \"groupingColumns\" : [ \"a\", \"b\", \"time\", 
\"c\", \"d\" ],\n"
+                    + "    \"aggregators\" : [ {\n"
+                    + "      \"type\" : \"count\",\n"
+                    + "      \"name\" : \"count\"\n"
+                    + "    }, {\n"
+                    + "      \"type\" : \"longSum\",\n"
+                    + "      \"name\" : \"e\",\n"
+                    + "      \"fieldName\" : \"e\"\n"
+                    + "    } ],\n"
+                    + "    \"ordering\" : [ {\n"
+                    + "      \"columnName\" : \"a\",\n"
+                    + "      \"order\" : \"ascending\"\n"
+                    + "    }, {\n"
+                    + "      \"columnName\" : \"b\",\n"
+                    + "      \"order\" : \"ascending\"\n"
+                    + "    }, {\n"
+                    + "      \"columnName\" : \"time\",\n"
+                    + "      \"order\" : \"ascending\"\n"
+                    + "    }, {\n"
+                    + "      \"columnName\" : \"c\",\n"
+                    + "      \"order\" : \"ascending\"\n"
+                    + "    }, {\n"
+                    + "      \"columnName\" : \"d\",\n"
+                    + "      \"order\" : \"ascending\"\n"
+                    + "    } ]\n"
+                    + "  },\n"
+                    + "  \"numRows\" : 12345\n"
+                    + "}";
+    Assertions.assertEquals(
+        spec,
+        JSON_MAPPER.readValue(legacy, AggregateProjectionMetadata.class)
+    );
   }
 
-
   @Test
   void testComparator()
   {


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

Reply via email to