This is an automated email from the ASF dual-hosted git repository.
lakshsingla 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 080476f9ea3 WINDOWING - Fix 2 nodes with same digest causing mapping
issue (#16301)
080476f9ea3 is described below
commit 080476f9ea3b4fba23408efbda4cdb5f14190897
Author: Sree Charan Manamala <[email protected]>
AuthorDate: Wed Apr 24 16:45:02 2024 +0530
WINDOWING - Fix 2 nodes with same digest causing mapping issue (#16301)
Fixes the mapping issue in window fucntions where 2 nodes get the same
reference.
---
.../org/apache/druid/msq/exec/MSQWindowTest.java | 32 ++++++++++++++++++++++
.../apache/druid/sql/calcite/rel/Windowing.java | 13 ++++++---
.../druid/sql/calcite/CalciteWindowQueryTest.java | 21 ++++++++++++++
.../druid/sql/calcite/DrillWindowQueryTest.java | 3 --
.../apache/druid/sql/calcite/NotYetSupported.java | 1 -
5 files changed, 62 insertions(+), 8 deletions(-)
diff --git
a/extensions-core/multi-stage-query/src/test/java/org/apache/druid/msq/exec/MSQWindowTest.java
b/extensions-core/multi-stage-query/src/test/java/org/apache/druid/msq/exec/MSQWindowTest.java
index 74b04138a74..1ffa89ab247 100644
---
a/extensions-core/multi-stage-query/src/test/java/org/apache/druid/msq/exec/MSQWindowTest.java
+++
b/extensions-core/multi-stage-query/src/test/java/org/apache/druid/msq/exec/MSQWindowTest.java
@@ -1724,6 +1724,38 @@ public class MSQWindowTest extends MSQTestBase
.verifyResults();
}
+ @MethodSource("data")
+ @ParameterizedTest(name = "{index}:with context {0}")
+ public void testSimpleWindowWithDuplicateSelectNode(String contextName,
Map<String, Object> context)
+ {
+ RowSignature rowSignature = RowSignature.builder()
+ .add("__time", ColumnType.LONG)
+ .add("m1", ColumnType.FLOAT)
+ .add("cc", ColumnType.DOUBLE)
+ .add("cc_dup", ColumnType.DOUBLE)
+ .build();
+
+ testIngestQuery().setSql(" REPLACE INTO foo OVERWRITE ALL\n"
+ + "select __time, m1,SUM(m1) OVER() cc,SUM(m1)
OVER() cc_dup from foo\n"
+ + "PARTITIONED BY ALL CLUSTERED BY m1")
+ .setExpectedDataSource("foo")
+ .setExpectedRowSignature(rowSignature)
+ .setQueryContext(context)
+ .setExpectedDestinationIntervals(Intervals.ONLY_ETERNITY)
+ .setExpectedResultRows(
+ ImmutableList.of(
+ new Object[]{946684800000L, 1.0f, 21.0, 21.0},
+ new Object[]{946771200000L, 2.0f, 21.0, 21.0},
+ new Object[]{946857600000L, 3.0f, 21.0, 21.0},
+ new Object[]{978307200000L, 4.0f, 21.0, 21.0},
+ new Object[]{978393600000L, 5.0f, 21.0, 21.0},
+ new Object[]{978480000000L, 6.0f, 21.0, 21.0}
+ )
+ )
+ .setExpectedSegment(ImmutableSet.of(SegmentId.of("foo",
Intervals.ETERNITY, "test", 0)))
+ .verifyResults();
+ }
+
@MethodSource("data")
@ParameterizedTest(name = "{index}:with context {0}")
public void testSimpleWindowWithJoins(String contextName, Map<String,
Object> context)
diff --git a/sql/src/main/java/org/apache/druid/sql/calcite/rel/Windowing.java
b/sql/src/main/java/org/apache/druid/sql/calcite/rel/Windowing.java
index 0a4f3226d7e..20c672ce924 100644
--- a/sql/src/main/java/org/apache/druid/sql/calcite/rel/Windowing.java
+++ b/sql/src/main/java/org/apache/druid/sql/calcite/rel/Windowing.java
@@ -240,11 +240,16 @@ public class Windowing
// Apply windowProject, if present.
if (partialQuery.getWindowProject() != null) {
- // We know windowProject is a mapping due to the isMapping() check in
DruidRules. Check for null anyway,
- // as defensive programming.
+ // We know windowProject is a mapping due to the isMapping() check in
DruidRules.
+ // check anyway as defensive programming.
+ Preconditions.checkArgument(partialQuery.getWindowProject().isMapping());
final Mappings.TargetMapping mapping = Preconditions.checkNotNull(
- partialQuery.getWindowProject().getMapping(),
- "mapping for windowProject[%s]", partialQuery.getWindowProject()
+ Project.getPartialMapping(
+
partialQuery.getWindowProject().getInput().getRowType().getFieldCount(),
+ partialQuery.getWindowProject().getProjects()
+ ),
+ "mapping for windowProject[%s]",
+ partialQuery.getWindowProject()
);
final List<String> windowProjectOutputColumns = new ArrayList<>();
diff --git
a/sql/src/test/java/org/apache/druid/sql/calcite/CalciteWindowQueryTest.java
b/sql/src/test/java/org/apache/druid/sql/calcite/CalciteWindowQueryTest.java
index c869cb8e44f..16706335515 100644
--- a/sql/src/test/java/org/apache/druid/sql/calcite/CalciteWindowQueryTest.java
+++ b/sql/src/test/java/org/apache/druid/sql/calcite/CalciteWindowQueryTest.java
@@ -22,6 +22,7 @@ package org.apache.druid.sql.calcite;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
+import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import org.apache.druid.jackson.DefaultObjectMapper;
import org.apache.druid.java.util.common.ISE;
@@ -37,6 +38,7 @@ import
org.apache.druid.sql.calcite.QueryTestRunner.QueryResults;
import org.apache.druid.sql.calcite.QueryVerification.QueryResultsVerifier;
import org.apache.druid.sql.calcite.planner.PlannerContext;
import org.junit.Assert;
+import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.MethodSource;
@@ -231,6 +233,25 @@ public class CalciteWindowQueryTest extends
BaseCalciteQueryTest
}
}
+ @Test
+ public void testWindow()
+ {
+ testBuilder()
+ .sql("SELECT\n" +
+ "(rank() over (order by count(*) desc)),\n" +
+ "(rank() over (order by count(*) desc))\n" +
+ "FROM \"wikipedia\"")
+ .queryContext(ImmutableMap.of(
+ PlannerContext.CTX_ENABLE_WINDOW_FNS, true,
+ QueryContexts.ENABLE_DEBUG, true,
+ QueryContexts.WINDOWING_STRICT_VALIDATION, false
+ ))
+ .expectedResults(ImmutableList.of(
+ new Object[]{1L, 1L}
+ ))
+ .run();
+ }
+
private WindowOperatorQuery getWindowOperatorQuery(List<Query<?>> queries)
{
assertEquals(1, queries.size());
diff --git
a/sql/src/test/java/org/apache/druid/sql/calcite/DrillWindowQueryTest.java
b/sql/src/test/java/org/apache/druid/sql/calcite/DrillWindowQueryTest.java
index 2236a7d71a8..59f7de2ad17 100644
--- a/sql/src/test/java/org/apache/druid/sql/calcite/DrillWindowQueryTest.java
+++ b/sql/src/test/java/org/apache/druid/sql/calcite/DrillWindowQueryTest.java
@@ -4698,7 +4698,6 @@ public class DrillWindowQueryTest extends
BaseCalciteQueryTest
windowQueryTest();
}
- @NotYetSupported(Modes.NPE)
@DrillTest("first_val/firstValFn_5")
@Test
public void test_first_val_firstValFn_5()
@@ -4922,7 +4921,6 @@ public class DrillWindowQueryTest extends
BaseCalciteQueryTest
windowQueryTest();
}
- @NotYetSupported(Modes.NPE)
@DrillTest("lag_func/lag_Fn_82")
@Test
public void test_lag_func_lag_Fn_82()
@@ -4930,7 +4928,6 @@ public class DrillWindowQueryTest extends
BaseCalciteQueryTest
windowQueryTest();
}
- @NotYetSupported(Modes.NPE)
@DrillTest("last_val/lastValFn_5")
@Test
public void test_last_val_lastValFn_5()
diff --git
a/sql/src/test/java/org/apache/druid/sql/calcite/NotYetSupported.java
b/sql/src/test/java/org/apache/druid/sql/calcite/NotYetSupported.java
index 43f2faa3f0c..de94a264976 100644
--- a/sql/src/test/java/org/apache/druid/sql/calcite/NotYetSupported.java
+++ b/sql/src/test/java/org/apache/druid/sql/calcite/NotYetSupported.java
@@ -83,7 +83,6 @@ public @interface NotYetSupported
COLUMN_NOT_FOUND(DruidException.class,
"CalciteContextException.*Column.*not found in any table"),
NULLS_FIRST_LAST(DruidException.class, "NULLS (FIRST|LAST)"),
BIGINT_TO_DATE(DruidException.class, "BIGINT to type (DATE|TIME)"),
- NPE(DruidException.class, "java.lang.NullPointerException"),
AGGREGATION_NOT_SUPPORT_TYPE(DruidException.class, "Aggregation
\\[(MIN|MAX)\\] does not support type \\[STRING\\]"),
ALLDATA_CSV(DruidException.class, "allData.csv"),
BIGINT_TIME_COMPARE(DruidException.class, "Cannot apply '.' to arguments
of type"),
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]