From 9ae781d332c0a61f943461b4abbd614112923734 Mon Sep 17 00:00:00 2001 From: "chenweiguo.vc" Date: Tue, 18 Feb 2025 19:55:23 +0800 Subject: [PATCH] testFilterProjectTransposeExpandFalse --- .../apache/calcite/test/RelOptRulesTest.java | 54 +++++++++++++------ .../apache/calcite/test/RelOptRulesTest.xml | 30 +++++++++++ 2 files changed, 69 insertions(+), 15 deletions(-) diff --git a/core/src/test/java/org/apache/calcite/test/RelOptRulesTest.java b/core/src/test/java/org/apache/calcite/test/RelOptRulesTest.java index 3e5335ab1ac..2bc6635300d 100644 --- a/core/src/test/java/org/apache/calcite/test/RelOptRulesTest.java +++ b/core/src/test/java/org/apache/calcite/test/RelOptRulesTest.java @@ -2689,21 +2689,6 @@ private void checkProjectCorrelateTransposeRuleSemiOrAntiCorrelate(JoinRelType t .checkUnchanged(); } - @Test void testFilterProjectTransposePreventedByCorrelationWithExpandFalse() { - final String sql = "SELECT e.deptno\n" - + "FROM emp as e\n" - + "WHERE exists (\n" - + " SELECT *\n" - + " FROM dept AS d\n" - + " WHERE e.deptno = d.deptno)"; - sql(sql) - .withDecorrelate(false) - .withTrim(true) - .withExpand(false) - .withRule(CoreRules.FILTER_PROJECT_TRANSPOSE) - .checkUnchanged(); - } - /** Tests a variant of {@link FilterProjectTransposeRule} * that pushes a Filter that contains a correlating variable. */ @Test void testFilterProjectTranspose() { @@ -2733,6 +2718,45 @@ private void checkProjectCorrelateTransposeRuleSemiOrAntiCorrelate(JoinRelType t .check(); } + @Test void testFilterProjectTransposePreventedByCorrelationWithExpandFalse() { + final String sql = "SELECT e.deptno\n" + + "FROM emp as e\n" + + "WHERE exists (\n" + + " SELECT *\n" + + " FROM dept AS d\n" + + " WHERE e.deptno = d.deptno)"; + sql(sql) + .withDecorrelate(false) + .withTrim(true) + .withRule(CoreRules.FILTER_PROJECT_TRANSPOSE) + .checkUnchanged(); + } + + @Test void testFilterProjectTransposeExpandFalse() { + final String sql = "SELECT e.deptno\n" + + "FROM emp as e\n" + + "WHERE exists (\n" + + " SELECT *\n" + + " FROM dept AS d\n" + + " WHERE e.deptno = d.deptno)"; + final FilterProjectTransposeRule filterProjectTransposeRule = + CoreRules.FILTER_PROJECT_TRANSPOSE.config + .withOperandSupplier(b0 -> + b0.operand(Filter.class).predicate(filter -> true) + .oneInput(b1 -> + b1.operand(Project.class).predicate(project -> true) + .anyInputs())) + .as(FilterProjectTransposeRule.Config.class) + .withCopyFilter(true) + .withCopyProject(true) + .toRule(); + sql(sql) + .withDecorrelate(false) + .withTrim(true) + .withRule(filterProjectTransposeRule) + .check(); + } + /** Test case for * [CALCITE-6513] * FilterProjectTransposeRule may cause OOM when Project expressions are diff --git a/core/src/test/resources/org/apache/calcite/test/RelOptRulesTest.xml b/core/src/test/resources/org/apache/calcite/test/RelOptRulesTest.xml index 4b108f42185..730a3b4e4b3 100644 --- a/core/src/test/resources/org/apache/calcite/test/RelOptRulesTest.xml +++ b/core/src/test/resources/org/apache/calcite/test/RelOptRulesTest.xml @@ -4707,6 +4707,36 @@ LogicalProject(X1=[$0]) LogicalFilter(condition=[=(||(||(||(||('L1', $0), $0), $0), $0), 'Something')]) LogicalProject(X0=[||(||(||(||('L0', $1), $1), $1), $1)]) LogicalTableScan(table=[[CATALOG, SALES, EMP]]) +]]> + + + + + + + + + + +