You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pinot.apache.org by ya...@apache.org on 2026/07/15 18:03:55 UTC
(pinot) branch master updated: Add regression test for unsatisfiable map-key predicates collapsing the scan to empty Values (#18995)
This is an automated email from the ASF dual-hosted git repository.
yashmayya pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pinot.git
The following commit(s) were added to refs/heads/master by this push:
new fd772eedd5f Add regression test for unsatisfiable map-key predicates collapsing the scan to empty Values (#18995)
fd772eedd5f is described below
commit fd772eedd5fb849f6aee5067f3509c768a326ece
Author: Yash Mayya <ya...@gmail.com>
AuthorDate: Wed Jul 15 11:03:49 2026 -0700
Add regression test for unsatisfiable map-key predicates collapsing the scan to empty Values (#18995)
---
.../integration/tests/custom/MapFieldTypeTest.java | 37 ++++++++++++++++++++++
1 file changed, 37 insertions(+)
diff --git a/pinot-integration-tests/src/test/java/org/apache/pinot/integration/tests/custom/MapFieldTypeTest.java b/pinot-integration-tests/src/test/java/org/apache/pinot/integration/tests/custom/MapFieldTypeTest.java
index 7c8a3904485..5c9c50f550d 100644
--- a/pinot-integration-tests/src/test/java/org/apache/pinot/integration/tests/custom/MapFieldTypeTest.java
+++ b/pinot-integration-tests/src/test/java/org/apache/pinot/integration/tests/custom/MapFieldTypeTest.java
@@ -449,6 +449,43 @@ public class MapFieldTypeTest extends CustomDataQueryClusterIntegrationTest {
assertEquals(pinotResponse.get("exceptions").size(), 0);
}
+ @Test(dataProvider = "useBothQueryEngines")
+ public void testUnsatisfiablePredicatesOnSameMapKey(boolean useMultiStageQueryEngine)
+ throws Exception {
+ setUseMultiStageQueryEngine(useMultiStageQueryEngine);
+
+ // Mutually exclusive predicates on the same map key reduce the filter to false, and the planner collapses the
+ // scan to empty Values while the ITEM (map subscript) projections remain on top. With Calcite 1.40 the
+ // projection over the empty Values leaked into the runtime plan and failed with "Unsupported function: ITEM";
+ // the query should instead return an empty result.
+ String query = "SELECT stringMap['k2'], stringMap['k1'] FROM " + getTableName()
+ + " WHERE (stringMap['k1'] = 'v1' OR stringMap['k1'] = 'v2') AND stringMap['k1'] = 'v3'";
+ JsonNode pinotResponse = postQuery(query);
+ assertEquals(pinotResponse.get("exceptions").size(), 0);
+ assertEquals(pinotResponse.get("resultTable").get("rows").size(), 0);
+
+ // Same shape with IN + EQ (as reported originally)
+ query = "SELECT stringMap['k2'], stringMap['k1'] FROM " + getTableName()
+ + " WHERE stringMap['k1'] IN ('v1', 'v2') AND stringMap['k1'] = 'v3'";
+ pinotResponse = postQuery(query);
+ assertEquals(pinotResponse.get("exceptions").size(), 0);
+ assertEquals(pinotResponse.get("resultTable").get("rows").size(), 0);
+
+ // Same shape with an int map
+ query = "SELECT intMap['k2'], intMap['k1'] FROM " + getTableName()
+ + " WHERE intMap['k1'] IN (1, 2) AND intMap['k1'] = 3";
+ pinotResponse = postQuery(query);
+ assertEquals(pinotResponse.get("exceptions").size(), 0);
+ assertEquals(pinotResponse.get("resultTable").get("rows").size(), 0);
+
+ // Unsatisfiable filter under a group-by over map subscripts
+ query = "SELECT stringMap['k1'], COUNT(*) FROM " + getTableName()
+ + " WHERE stringMap['k1'] IN ('v1', 'v2') AND stringMap['k1'] = 'v3' GROUP BY stringMap['k1']";
+ pinotResponse = postQuery(query);
+ assertEquals(pinotResponse.get("exceptions").size(), 0);
+ assertEquals(pinotResponse.get("resultTable").get("rows").size(), 0);
+ }
+
@Override
protected void setUseMultiStageQueryEngine(boolean useMultiStageQueryEngine) {
super.setUseMultiStageQueryEngine(useMultiStageQueryEngine);
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@pinot.apache.org
For additional commands, e-mail: commits-help@pinot.apache.org