This is an automated email from the ASF dual-hosted git repository. yiguolei pushed a commit to branch branch-2.1 in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-2.1 by this push: new a87448682c7 [Feature](materialized-view) support some case unmached to materialized-view (#30036) a87448682c7 is described below commit a87448682c7f70140109845ec14238f826c39dfc Author: Pxl <pxl...@qq.com> AuthorDate: Thu Jan 18 10:40:13 2024 +0800 [Feature](materialized-view) support some case unmached to materialized-view (#30036) same column appears in key and value like select id,count(id) group by id; complex expr in sum select sum(if(xxx)); --- fe/fe-core/src/main/cup/sql_parser.cup | 5 ++ .../org/apache/doris/analysis/BinaryPredicate.java | 4 ++ .../mv/SelectMaterializedIndexWithAggregate.java | 9 +-- .../doris/analysis/CancelExportStmtTest.java | 10 +-- .../apache/doris/analysis/CancelLoadStmtTest.java | 10 +-- .../apache/doris/analysis/DataDescriptionTest.java | 16 ++--- .../org/apache/doris/analysis/DeleteStmtTest.java | 4 +- .../org/apache/doris/analysis/SelectStmtTest.java | 36 +++++------ .../apache/doris/analysis/ShowAlterStmtTest.java | 4 +- .../apache/doris/analysis/ShowBackupStmtTest.java | 2 +- .../apache/doris/analysis/ShowExportStmtTest.java | 4 +- .../apache/doris/analysis/ShowLoadStmtTest.java | 4 +- .../doris/analysis/ShowPartitionsStmtTest.java | 4 +- .../doris/analysis/ShowResourcesStmtTest.java | 2 +- .../org/apache/doris/analysis/SqlModeTest.java | 4 +- .../org/apache/doris/catalog/CreateViewTest.java | 2 +- .../java/org/apache/doris/planner/PlannerTest.java | 6 +- .../org/apache/doris/planner/QueryPlanTest.java | 74 +++++++++++----------- .../org/apache/doris/planner/RepeatNodeTest.java | 2 +- .../doris/planner/TableFunctionPlanTest.java | 8 +-- .../java/org/apache/doris/policy/PolicyTest.java | 20 +++--- .../org/apache/doris/qe/OlapQueryCacheTest.java | 46 +++++++------- .../ExtractCommonFactorsRuleFunctionTest.java | 6 +- regression-test/data/ddl_p0/test_create_view.out | 2 +- .../testAggQueryOnAggMV1/testAggQueryOnAggMV1.out | 10 +++ .../data/performance_p0/redundant_conjuncts.out | 4 +- .../show_p0/test_show_create_table_and_views.out | 2 +- .../jdbc/test_clickhouse_jdbc_catalog.groovy | 4 +- .../jdbc/test_mysql_jdbc_catalog.groovy | 6 +- .../jdbc/test_mysql_jdbc_catalog_nereids.groovy | 2 +- .../jdbc/test_oracle_jdbc_catalog.groovy | 2 +- .../testAggQueryOnAggMV1.groovy | 14 ++++ .../infer_predicate/infer_predicate.groovy | 12 ++-- 33 files changed, 187 insertions(+), 153 deletions(-) diff --git a/fe/fe-core/src/main/cup/sql_parser.cup b/fe/fe-core/src/main/cup/sql_parser.cup index aaadfb4f563..a782100ef23 100644 --- a/fe/fe-core/src/main/cup/sql_parser.cup +++ b/fe/fe-core/src/main/cup/sql_parser.cup @@ -1066,6 +1066,11 @@ import_column_descs ::= columns.add(column); RESULT = columns; :} + | import_column_descs:columns COMMA LPAREN import_column_desc:column RPAREN + {: + columns.add(column); + RESULT = columns; + :} ; import_column_desc ::= diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/BinaryPredicate.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/BinaryPredicate.java index 74f3035285c..bb30a46b3e9 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/BinaryPredicate.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/BinaryPredicate.java @@ -159,6 +159,7 @@ public class BinaryPredicate extends Predicate implements Writable { // for restoring public BinaryPredicate() { super(); + printSqlInParens = true; } public BinaryPredicate(Operator op, Expr e1, Expr e2) { @@ -169,6 +170,7 @@ public class BinaryPredicate extends Predicate implements Writable { children.add(e1); Preconditions.checkNotNull(e2); children.add(e2); + printSqlInParens = true; } public BinaryPredicate(Operator op, Expr e1, Expr e2, Type retType, NullableMode nullableMode) { @@ -181,6 +183,7 @@ public class BinaryPredicate extends Predicate implements Writable { children.add(e2); fn = new Function(new FunctionName(op.name), Lists.newArrayList(e1.getType(), e2.getType()), retType, false, true, nullableMode); + printSqlInParens = true; } protected BinaryPredicate(BinaryPredicate other) { @@ -188,6 +191,7 @@ public class BinaryPredicate extends Predicate implements Writable { op = other.op; slotIsleft = other.slotIsleft; isInferred = other.isInferred; + printSqlInParens = true; } public boolean isInferred() { diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/mv/SelectMaterializedIndexWithAggregate.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/mv/SelectMaterializedIndexWithAggregate.java index ae627523e36..c0f70caf851 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/mv/SelectMaterializedIndexWithAggregate.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/mv/SelectMaterializedIndexWithAggregate.java @@ -1103,7 +1103,7 @@ public class SelectMaterializedIndexWithAggregate extends AbstractSelectMaterial } if (isInputSlotsContainsNone( predicates.stream().filter(e -> !indexConjuncts.contains(e.toSql())).collect(Collectors.toList()), - slotsToReplace) && isInputSlotsContainsNone(groupingExprs, slotsToReplace)) { + slotsToReplace)) { ImmutableSet<Slot> newRequiredSlots = requiredScanOutput.stream() .map(slot -> (Slot) ExpressionUtils.replace(slot, slotMap)).collect(ImmutableSet.toImmutableSet()); return new AggRewriteResult(index, true, newRequiredSlots, exprRewriteMap); @@ -1522,8 +1522,7 @@ public class SelectMaterializedIndexWithAggregate extends AbstractSelectMaterial if (result != sum) { return result; } - Optional<Slot> slotOpt = ExpressionUtils.extractSlotOrCastOnSlot(sum.child(0)); - if (!sum.isDistinct() && slotOpt.isPresent()) { + if (!sum.isDistinct()) { Expression expr = castIfNeed(sum.child(), BigIntType.INSTANCE); String sumColumn = normalizeName(CreateMaterializedViewStmt.mvColumnBuilder(AggregateType.SUM, CreateMaterializedViewStmt.mvColumnBuilder(expr.toSql()))); @@ -1532,7 +1531,9 @@ public class SelectMaterializedIndexWithAggregate extends AbstractSelectMaterial Slot sumSlot = context.checkContext.scan.getOutputByIndex(context.checkContext.index).stream() .filter(s -> sumColumn.equalsIgnoreCase(normalizeName(s.getName()))).findFirst() .orElseThrow(() -> new AnalysisException("cannot find sum slot when select mv")); - context.exprRewriteMap.slotMap.put(slotOpt.get(), sumSlot); + for (Slot slot : sum.child().getInputSlots()) { + context.exprRewriteMap.slotMap.put(slot, sumSlot); + } context.exprRewriteMap.projectExprMap.put(sum.child(), sumSlot); Sum newSum = new Sum(sumSlot); context.exprRewriteMap.aggFuncMap.put(sum, newSum); diff --git a/fe/fe-core/src/test/java/org/apache/doris/analysis/CancelExportStmtTest.java b/fe/fe-core/src/test/java/org/apache/doris/analysis/CancelExportStmtTest.java index c814630d830..f2cf3537600 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/analysis/CancelExportStmtTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/analysis/CancelExportStmtTest.java @@ -63,7 +63,7 @@ public class CancelExportStmtTest extends TestWithFeService { labelStringLiteral); CancelExportStmt stmt = new CancelExportStmt(null, labelBinaryPredicate); stmt.analyze(analyzer); - Assertions.assertEquals("CANCEL EXPORT FROM testDb WHERE `label` = 'doris_test_label'", + Assertions.assertEquals("CANCEL EXPORT FROM testDb WHERE (`label` = 'doris_test_label')", stmt.toString()); SlotRef labelSlotRefUpper = new SlotRef(null, "LABEL"); @@ -71,7 +71,7 @@ public class CancelExportStmtTest extends TestWithFeService { labelStringLiteral); CancelExportStmt stmtUpper = new CancelExportStmt(null, labelBinaryPredicateUpper); stmtUpper.analyze(analyzer); - Assertions.assertEquals("CANCEL EXPORT FROM testDb WHERE `LABEL` = 'doris_test_label'", + Assertions.assertEquals("CANCEL EXPORT FROM testDb WHERE (`LABEL` = 'doris_test_label')", stmtUpper.toString()); StringLiteral stateStringLiteral = new StringLiteral("PENDING"); @@ -79,7 +79,7 @@ public class CancelExportStmtTest extends TestWithFeService { stateStringLiteral); stmt = new CancelExportStmt(null, stateBinaryPredicate); stmt.analyze(analyzer); - Assertions.assertEquals("CANCEL EXPORT FROM testDb WHERE `state` = 'PENDING'", stmt.toString()); + Assertions.assertEquals("CANCEL EXPORT FROM testDb WHERE (`state` = 'PENDING')", stmt.toString()); LikePredicate labelLikePredicate = new LikePredicate(LikePredicate.Operator.LIKE, labelSlotRef, labelStringLiteral); @@ -93,7 +93,7 @@ public class CancelExportStmtTest extends TestWithFeService { stmt = new CancelExportStmt(null, compoundAndPredicate); stmt.analyze(analyzer); Assertions.assertEquals( - "CANCEL EXPORT FROM testDb WHERE `label` = 'doris_test_label' AND `state` = 'PENDING'", + "CANCEL EXPORT FROM testDb WHERE (`label` = 'doris_test_label') AND (`state` = 'PENDING')", stmt.toString()); CompoundPredicate compoundOrPredicate = new CompoundPredicate(Operator.OR, labelBinaryPredicate, @@ -101,7 +101,7 @@ public class CancelExportStmtTest extends TestWithFeService { stmt = new CancelExportStmt(null, compoundOrPredicate); stmt.analyze(analyzer); Assertions.assertEquals( - "CANCEL EXPORT FROM testDb WHERE `label` = 'doris_test_label' OR `state` = 'PENDING'", + "CANCEL EXPORT FROM testDb WHERE (`label` = 'doris_test_label') OR (`state` = 'PENDING')", stmt.toString()); } diff --git a/fe/fe-core/src/test/java/org/apache/doris/analysis/CancelLoadStmtTest.java b/fe/fe-core/src/test/java/org/apache/doris/analysis/CancelLoadStmtTest.java index d9758ab07bf..f51ac74c342 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/analysis/CancelLoadStmtTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/analysis/CancelLoadStmtTest.java @@ -64,7 +64,7 @@ public class CancelLoadStmtTest extends TestWithFeService { labelStringLiteral); CancelLoadStmt stmt = new CancelLoadStmt(null, labelBinaryPredicate); stmt.analyze(analyzer); - Assertions.assertEquals("CANCEL LOAD FROM testDb WHERE `label` = 'doris_test_label'", + Assertions.assertEquals("CANCEL LOAD FROM testDb WHERE (`label` = 'doris_test_label')", stmt.toString()); SlotRef labelSlotRefUpper = new SlotRef(null, "LABEL"); @@ -72,7 +72,7 @@ public class CancelLoadStmtTest extends TestWithFeService { labelStringLiteral); CancelLoadStmt stmtUpper = new CancelLoadStmt(null, labelBinaryPredicateUpper); stmtUpper.analyze(analyzer); - Assertions.assertEquals("CANCEL LOAD FROM testDb WHERE `LABEL` = 'doris_test_label'", + Assertions.assertEquals("CANCEL LOAD FROM testDb WHERE (`LABEL` = 'doris_test_label')", stmtUpper.toString()); StringLiteral stateStringLiteral = new StringLiteral("LOADING"); @@ -80,7 +80,7 @@ public class CancelLoadStmtTest extends TestWithFeService { stateStringLiteral); stmt = new CancelLoadStmt(null, stateBinaryPredicate); stmt.analyze(analyzer); - Assertions.assertEquals("CANCEL LOAD FROM testDb WHERE `state` = 'LOADING'", stmt.toString()); + Assertions.assertEquals("CANCEL LOAD FROM testDb WHERE (`state` = 'LOADING')", stmt.toString()); LikePredicate labelLikePredicate = new LikePredicate(LikePredicate.Operator.LIKE, labelSlotRef, labelStringLiteral); @@ -94,7 +94,7 @@ public class CancelLoadStmtTest extends TestWithFeService { stmt = new CancelLoadStmt(null, compoundAndPredicate); stmt.analyze(analyzer); Assertions.assertEquals( - "CANCEL LOAD FROM testDb WHERE `label` = 'doris_test_label' AND `state` = 'LOADING'", + "CANCEL LOAD FROM testDb WHERE (`label` = 'doris_test_label') AND (`state` = 'LOADING')", stmt.toString()); CompoundPredicate compoundOrPredicate = new CompoundPredicate(Operator.OR, labelBinaryPredicate, @@ -102,7 +102,7 @@ public class CancelLoadStmtTest extends TestWithFeService { stmt = new CancelLoadStmt(null, compoundOrPredicate); stmt.analyze(analyzer); Assertions.assertEquals( - "CANCEL LOAD FROM testDb WHERE `label` = 'doris_test_label' OR `state` = 'LOADING'", + "CANCEL LOAD FROM testDb WHERE (`label` = 'doris_test_label') OR (`state` = 'LOADING')", stmt.toString()); // test match diff --git a/fe/fe-core/src/test/java/org/apache/doris/analysis/DataDescriptionTest.java b/fe/fe-core/src/test/java/org/apache/doris/analysis/DataDescriptionTest.java index c5a56a96c68..b6a0aa2233c 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/analysis/DataDescriptionTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/analysis/DataDescriptionTest.java @@ -127,9 +127,9 @@ public class DataDescriptionTest { desc = new DataDescription("testTable", null, Lists.newArrayList("abc.txt"), Lists.newArrayList("col1", "col2"), new Separator(","), "csv", null, false, null, null, whereExpr, LoadTask.MergeType.MERGE, whereExpr, null, null); desc.analyze("testDb"); - Assert.assertEquals("MERGE DATA INFILE ('abc.txt') INTO TABLE testTable COLUMNS TERMINATED BY ',' FORMAT AS 'csv' (col1, col2) WHERE 1 = 1 DELETE ON 1 = 1", desc.toString()); - Assert.assertEquals("1 = 1", desc.getWhereExpr().toSql()); - Assert.assertEquals("1 = 1", desc.getDeleteCondition().toSql()); + Assert.assertEquals("MERGE DATA INFILE ('abc.txt') INTO TABLE testTable COLUMNS TERMINATED BY ',' FORMAT AS 'csv' (col1, col2) WHERE (1 = 1) DELETE ON (1 = 1)", desc.toString()); + Assert.assertEquals("(1 = 1)", desc.getWhereExpr().toSql()); + Assert.assertEquals("(1 = 1)", desc.getDeleteCondition().toSql()); Assert.assertEquals(",", desc.getColumnSeparator()); desc = new DataDescription("testTable", null, Lists.newArrayList("abc.txt", "bcd.txt"), @@ -168,7 +168,7 @@ public class DataDescriptionTest { .newArrayList((Expr) predicate)); desc.analyze("testDb"); String sql = "APPEND DATA INFILE ('abc.txt') INTO TABLE testTable PARTITIONS (p1, p2) (k2, k3)" - + " SET (`k1` = alignment_timestamp('day', `k2`))"; + + " SET ((`k1` = alignment_timestamp('day', `k2`)))"; Assert.assertEquals(sql, desc.toString()); // replace_value func @@ -183,7 +183,7 @@ public class DataDescriptionTest { false, Lists.newArrayList((Expr) predicate)); desc.analyze("testDb"); sql = "APPEND DATA INFILE ('abc.txt') INTO TABLE testTable PARTITIONS (p1, p2) (k2, k3)" - + " SET (`k1` = replace_value('-', '10'))"; + + " SET ((`k1` = replace_value('-', '10')))"; Assert.assertEquals(sql, desc.toString()); // replace_value null @@ -198,7 +198,7 @@ public class DataDescriptionTest { .newArrayList((Expr) predicate)); desc.analyze("testDb"); sql = "APPEND DATA INFILE ('abc.txt') INTO TABLE testTable PARTITIONS (p1, p2) (k2, k3)" - + " SET (`k1` = replace_value('', NULL))"; + + " SET ((`k1` = replace_value('', NULL)))"; Assert.assertEquals(sql, desc.toString()); // data from table and set bitmap_dict @@ -210,7 +210,7 @@ public class DataDescriptionTest { "testHiveTable", false, Lists.newArrayList(predicate), null, LoadTask.MergeType.APPEND, null, null); desc.analyze("testDb"); - sql = "APPEND DATA FROM TABLE testHiveTable INTO TABLE testTable PARTITIONS (p1, p2) SET (`k1` = bitmap_dict(`k2`))"; + sql = "APPEND DATA FROM TABLE testHiveTable INTO TABLE testTable PARTITIONS (p1, p2) SET ((`k1` = bitmap_dict(`k2`)))"; Assert.assertEquals(sql, desc.toSql()); Map<String, String> properties = Maps.newHashMap(); @@ -409,7 +409,7 @@ public class DataDescriptionTest { + "COLUMNS TERMINATED BY '010203' " + "LINES TERMINATED BY '040506' " + "(k1, k2, v1) " - + "SET (`k1` = bitmap_dict('day', `k2`))"; + + "SET ((`k1` = bitmap_dict('day', `k2`)))"; Assert.assertEquals(sql, desc.toSql()); } diff --git a/fe/fe-core/src/test/java/org/apache/doris/analysis/DeleteStmtTest.java b/fe/fe-core/src/test/java/org/apache/doris/analysis/DeleteStmtTest.java index 2bd53e8d3e6..809ead85fe4 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/analysis/DeleteStmtTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/analysis/DeleteStmtTest.java @@ -60,11 +60,11 @@ public class DeleteStmtTest { Assert.assertEquals("testDb", deleteStmt.getDbName()); Assert.assertEquals("testTbl", deleteStmt.getTableName()); Assert.assertEquals(Lists.newArrayList("partition"), deleteStmt.getPartitionNames()); - Assert.assertEquals("DELETE FROM `testDb`.`testTbl` PARTITION (partition) WHERE `k1` = 'abc'", + Assert.assertEquals("DELETE FROM `testDb`.`testTbl` PARTITION (partition) WHERE (`k1` = 'abc')", deleteStmt.toSql()); deleteStmt = new DeleteStmt(new TableName(internalCtl, "testDb", "testTbl"), null, wherePredicate); - Assert.assertEquals("DELETE FROM `testDb`.`testTbl` WHERE `k1` = 'abc'", + Assert.assertEquals("DELETE FROM `testDb`.`testTbl` WHERE (`k1` = 'abc')", deleteStmt.toSql()); } diff --git a/fe/fe-core/src/test/java/org/apache/doris/analysis/SelectStmtTest.java b/fe/fe-core/src/test/java/org/apache/doris/analysis/SelectStmtTest.java index 331ee4eb060..76bbdec5fdb 100755 --- a/fe/fe-core/src/test/java/org/apache/doris/analysis/SelectStmtTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/analysis/SelectStmtTest.java @@ -301,9 +301,9 @@ public class SelectStmtTest { String commonExpr2 = "`t3`.`k3` = `t1`.`k3`"; String commonExpr3 = "`t1`.`k1` = `t5`.`k1`"; String commonExpr4 = "t5`.`k2` = 'United States'"; - String betweenExpanded1 = "CAST(CAST(`t1`.`k4` AS DECIMALV3(12, 2)) AS INT) >= 100 AND CAST(CAST(`t1`.`k4` AS DECIMALV3(12, 2)) AS INT) <= 150"; - String betweenExpanded2 = "CAST(CAST(`t1`.`k4` AS DECIMALV3(12, 2)) AS INT) >= 50 AND CAST(CAST(`t1`.`k4` AS DECIMALV3(12, 2)) AS INT) <= 100"; - String betweenExpanded3 = "`t1`.`k4` >= 50 AND `t1`.`k4` <= 250"; + String betweenExpanded1 = "(CAST(CAST(`t1`.`k4` AS DECIMALV3(12, 2)) AS INT) >= 100) AND (CAST(CAST(`t1`.`k4` AS DECIMALV3(12, 2)) AS INT) <= 150)"; + String betweenExpanded2 = "(CAST(CAST(`t1`.`k4` AS DECIMALV3(12, 2)) AS INT) >= 50) AND (CAST(CAST(`t1`.`k4` AS DECIMALV3(12, 2)) AS INT) <= 100)"; + String betweenExpanded3 = "(`t1`.`k4` >= 50) AND (`t1`.`k4` <= 250)"; String rewrittenSql = stmt.toSql(); Assert.assertTrue(rewrittenSql.contains(commonExpr1)); @@ -347,17 +347,17 @@ public class SelectStmtTest { SelectStmt stmt2 = (SelectStmt) UtFrameUtils.parseAndAnalyzeStmt(sql2, ctx); stmt2.rewriteExprs(new Analyzer(ctx.getEnv(), ctx).getExprRewriter()); String fragment3 = - "(((`t1`.`k4` >= 50 AND `t1`.`k4` <= 300) AND `t2`.`k2` IN ('United States', 'United States1') " + "((((`t1`.`k4` >= 50) AND (`t1`.`k4` <= 300)) AND `t2`.`k2` IN ('United States', 'United States1') " + "AND `t2`.`k3` IN ('CO', 'IL', 'MN', 'OH', 'MT', 'NM', 'TX', 'MO', 'MI')) " - + "AND `t1`.`k1` = `t2`.`k3` AND `t2`.`k2` = 'United States' " - + "AND `t2`.`k3` IN ('CO', 'IL', 'MN') AND `t1`.`k4` >= 100 AND `t1`.`k4` <= 200 " + + "AND (`t1`.`k1` = `t2`.`k3`) AND (`t2`.`k2` = 'United States') " + + "AND `t2`.`k3` IN ('CO', 'IL', 'MN') AND (`t1`.`k4` >= 100) AND (`t1`.`k4` <= 200) " + "OR " - + "`t1`.`k1` = `t2`.`k1` AND `t2`.`k2` = 'United States1' " - + "AND `t2`.`k3` IN ('OH', 'MT', 'NM') AND `t1`.`k4` >= 150 AND `t1`.`k4` <= 300 " + + "(`t1`.`k1` = `t2`.`k1`) AND (`t2`.`k2` = 'United States1') " + + "AND `t2`.`k3` IN ('OH', 'MT', 'NM') AND (`t1`.`k4` >= 150) AND (`t1`.`k4` <= 300) " + "OR " - + "`t1`.`k1` = `t2`.`k1` AND `t2`.`k2` = 'United States' " + + "(`t1`.`k1` = `t2`.`k1`) AND (`t2`.`k2` = 'United States') " + "AND `t2`.`k3` IN ('TX', 'MO', 'MI') " - + "AND `t1`.`k4` >= 50 AND `t1`.`k4` <= 250)"; + + "AND (`t1`.`k4` >= 50) AND (`t1`.`k4` <= 250))"; Assert.assertTrue(stmt2.toSql().contains(fragment3)); String sql3 = "select\n" @@ -370,7 +370,7 @@ public class SelectStmtTest { SelectStmt stmt3 = (SelectStmt) UtFrameUtils.parseAndAnalyzeStmt(sql3, ctx); stmt3.rewriteExprs(new Analyzer(ctx.getEnv(), ctx).getExprRewriter()); Assert.assertFalse( - stmt3.toSql().contains("`t1`.`k1` = `t2`.`k3` OR `t1`.`k1` = `t2`.`k3` OR" + " `t1`.`k1` = `t2`.`k3`")); + stmt3.toSql().contains("(`t1`.`k1` = `t2`.`k3`) OR (`t1`.`k1` = `t2`.`k3`) OR" + " (`t1`.`k1` = `t2`.`k3`)")); String sql4 = "select\n" + " avg(t1.k4)\n" @@ -381,7 +381,7 @@ public class SelectStmtTest { + " t1.k1 = t2.k2 or t1.k1 = t2.k3 or t1.k1 = t2.k3"; SelectStmt stmt4 = (SelectStmt) UtFrameUtils.parseAndAnalyzeStmt(sql4, ctx); stmt4.rewriteExprs(new Analyzer(ctx.getEnv(), ctx).getExprRewriter()); - Assert.assertTrue(stmt4.toSql().contains("`t1`.`k1` = `t2`.`k2` OR `t1`.`k1` = `t2`.`k3`")); + Assert.assertTrue(stmt4.toSql().contains("(`t1`.`k1` = `t2`.`k2`) OR (`t1`.`k1` = `t2`.`k3`)")); String sql5 = "select\n" + " avg(t1.k4)\n" @@ -435,7 +435,7 @@ public class SelectStmtTest { SelectStmt stmt9 = (SelectStmt) UtFrameUtils.parseAndAnalyzeStmt(sql9, ctx); stmt9.rewriteExprs(new Analyzer(ctx.getEnv(), ctx).getExprRewriter()); Assert.assertTrue( - stmt9.toSql().contains("`k1` = 'shutdown' AND `k4` < 1 OR `k1` = 'switchOff' AND `k4` >= 1")); + stmt9.toSql().contains("(`k1` = 'shutdown') AND (`k4` < 1) OR (`k1` = 'switchOff') AND (`k4` >= 1)")); } @Test @@ -528,21 +528,21 @@ public class SelectStmtTest { String sql1 = "SELECT /*+ SET_VAR(enable_nereids_planner=true, ENABLE_FALLBACK_TO_ORIGINAL_PLANNER=false) */ * FROM db1.table1 LEFT ANTI JOIN db1.table2 ON db1.table1.siteid = db1.table2.siteid;"; String explain = dorisAssert.query(sql1).explainQuery(); Assert.assertTrue(explain - .contains("PREDICATES: __DORIS_DELETE_SIGN__ = 0")); + .contains("__DORIS_DELETE_SIGN__ = 0")); Assert.assertFalse(explain.contains("other predicates:")); String sql2 = "SELECT /*+ SET_VAR(enable_nereids_planner=false) */ * FROM db1.table1 JOIN db1.table2 ON db1.table1.siteid = db1.table2.siteid;"; explain = dorisAssert.query(sql2).explainQuery(); Assert.assertTrue(explain - .contains("PREDICATES: `db1`.`table1`.`__DORIS_DELETE_SIGN__` = 0")); + .contains("`db1`.`table1`.`__DORIS_DELETE_SIGN__` = 0")); Assert.assertTrue(explain - .contains("PREDICATES: `db1`.`table2`.`__DORIS_DELETE_SIGN__` = 0")); + .contains("`db1`.`table2`.`__DORIS_DELETE_SIGN__` = 0")); Assert.assertFalse(explain.contains("other predicates:")); String sql3 = "SELECT /*+ SET_VAR(enable_nereids_planner=false) */ * FROM db1.table1"; Assert.assertTrue(dorisAssert.query(sql3).explainQuery() - .contains("PREDICATES: `db1`.`table1`.`__DORIS_DELETE_SIGN__` = 0")); + .contains("`db1`.`table1`.`__DORIS_DELETE_SIGN__` = 0")); String sql4 = " SELECT /*+ SET_VAR(enable_nereids_planner=false) */ * FROM db1.table1 table2"; Assert.assertTrue(dorisAssert.query(sql4).explainQuery() - .contains("PREDICATES: `table2`.`__DORIS_DELETE_SIGN__` = 0")); + .contains("`table2`.`__DORIS_DELETE_SIGN__` = 0")); new MockUp<Util>() { @Mock public boolean showHiddenColumns() { diff --git a/fe/fe-core/src/test/java/org/apache/doris/analysis/ShowAlterStmtTest.java b/fe/fe-core/src/test/java/org/apache/doris/analysis/ShowAlterStmtTest.java index 8d0050b3a72..4bcefd6b3f1 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/analysis/ShowAlterStmtTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/analysis/ShowAlterStmtTest.java @@ -78,7 +78,7 @@ public class ShowAlterStmtTest { ShowAlterStmt stmt = new ShowAlterStmt(ShowAlterStmt.AlterType.COLUMN, null, binaryPredicate, null, new LimitElement(1, 2)); stmt.analyzeSyntax(analyzer); - Assert.assertEquals("SHOW ALTER TABLE COLUMN FROM `testDb` WHERE `TableName` = \'abc\' LIMIT 1, 2", + Assert.assertEquals("SHOW ALTER TABLE COLUMN FROM `testDb` WHERE (`TableName` = \'abc\') LIMIT 1, 2", stmt.toString()); } @@ -89,7 +89,7 @@ public class ShowAlterStmtTest { BinaryPredicate binaryPredicate = new BinaryPredicate(Operator.EQ, slotRef, stringLiteral); ShowAlterStmt stmt = new ShowAlterStmt(ShowAlterStmt.AlterType.COLUMN, null, binaryPredicate, null, null); stmt.analyzeSyntax(analyzer); - Assert.assertEquals("SHOW ALTER TABLE COLUMN FROM `testDb` WHERE `CreateTime` = \'2019-12-04 00:00:00\'", + Assert.assertEquals("SHOW ALTER TABLE COLUMN FROM `testDb` WHERE (`CreateTime` = \'2019-12-04 00:00:00\')", stmt.toString()); } } diff --git a/fe/fe-core/src/test/java/org/apache/doris/analysis/ShowBackupStmtTest.java b/fe/fe-core/src/test/java/org/apache/doris/analysis/ShowBackupStmtTest.java index 6d340e5d6f1..d3bf61a307e 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/analysis/ShowBackupStmtTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/analysis/ShowBackupStmtTest.java @@ -78,7 +78,7 @@ public class ShowBackupStmtTest { new BinaryPredicate(BinaryPredicate.Operator.EQ, new SlotRef(new TableName("a.b.c"), "snapshotname"), new StringLiteral("FINISHED"))); stmt.analyze(analyzer); - Assertions.assertEquals(stmt.toSql(), "SHOW BACKUP WHERE `a`.`b`.`c`.`snapshotname` = 'FINISHED'"); + Assertions.assertEquals(stmt.toSql(), "SHOW BACKUP WHERE (`a`.`b`.`c`.`snapshotname` = 'FINISHED')"); stmt = new ShowBackupStmt("", new LikePredicate(Operator.LIKE, new SlotRef(new TableName("a.b.c"), "snapshotname"), diff --git a/fe/fe-core/src/test/java/org/apache/doris/analysis/ShowExportStmtTest.java b/fe/fe-core/src/test/java/org/apache/doris/analysis/ShowExportStmtTest.java index a3a9fc72207..ed8c33fb9e4 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/analysis/ShowExportStmtTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/analysis/ShowExportStmtTest.java @@ -53,7 +53,7 @@ public class ShowExportStmtTest { stmt = new ShowExportStmt(null, binaryPredicate, null, new LimitElement(10)); stmt.analyze(analyzer); - Assert.assertEquals("SHOW EXPORT FROM `testDb` WHERE `label` = 'abc' LIMIT 10", stmt.toString()); + Assert.assertEquals("SHOW EXPORT FROM `testDb` WHERE (`label` = 'abc') LIMIT 10", stmt.toString()); Assert.assertFalse(stmt.isLabelUseLike()); StringLiteral stringLiteralLike = new StringLiteral("ab%"); @@ -67,7 +67,7 @@ public class ShowExportStmtTest { BinaryPredicate statePredicate = new BinaryPredicate(Operator.EQ, new SlotRef(null, "state"), new StringLiteral("PENDING")); stmt = new ShowExportStmt(null, statePredicate, null, new LimitElement(10)); stmt.analyze(analyzer); - Assert.assertEquals("SHOW EXPORT FROM `testDb` WHERE `state` = 'PENDING' LIMIT 10", stmt.toString()); + Assert.assertEquals("SHOW EXPORT FROM `testDb` WHERE (`state` = 'PENDING') LIMIT 10", stmt.toString()); } @Test diff --git a/fe/fe-core/src/test/java/org/apache/doris/analysis/ShowLoadStmtTest.java b/fe/fe-core/src/test/java/org/apache/doris/analysis/ShowLoadStmtTest.java index c943dcf5736..df90d1df712 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/analysis/ShowLoadStmtTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/analysis/ShowLoadStmtTest.java @@ -99,7 +99,7 @@ public class ShowLoadStmtTest { BinaryPredicate binaryPredicate = new BinaryPredicate(Operator.EQ, slotRef, stringLiteral); stmt = new ShowLoadStmt(null, binaryPredicate, null, new LimitElement(10)); stmt.analyze(analyzer); - Assert.assertEquals("SHOW LOAD FROM `testDb` WHERE `label` = \'abc\' LIMIT 10", stmt.toString()); + Assert.assertEquals("SHOW LOAD FROM `testDb` WHERE (`label` = \'abc\') LIMIT 10", stmt.toString()); StringLiteral stringLiteralLike = new StringLiteral("ab%"); LikePredicate likePredicate = new LikePredicate(LikePredicate.Operator.LIKE, slotRef, stringLiteralLike); @@ -111,7 +111,7 @@ public class ShowLoadStmtTest { BinaryPredicate statePredicate = new BinaryPredicate(Operator.EQ, new SlotRef(null, "state"), new StringLiteral("PENDING")); stmt = new ShowLoadStmt(null, statePredicate, null, new LimitElement(10)); stmt.analyze(analyzer); - Assert.assertEquals("SHOW LOAD FROM `testDb` WHERE `state` = \'PENDING\' LIMIT 10", stmt.toString()); + Assert.assertEquals("SHOW LOAD FROM `testDb` WHERE (`state` = \'PENDING\') LIMIT 10", stmt.toString()); } @Test diff --git a/fe/fe-core/src/test/java/org/apache/doris/analysis/ShowPartitionsStmtTest.java b/fe/fe-core/src/test/java/org/apache/doris/analysis/ShowPartitionsStmtTest.java index 8dd0221e00a..0a25b2dde35 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/analysis/ShowPartitionsStmtTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/analysis/ShowPartitionsStmtTest.java @@ -100,7 +100,7 @@ public class ShowPartitionsStmtTest { BinaryPredicate binaryPredicate = new BinaryPredicate(BinaryPredicate.Operator.GT, slotRef, stringLiteral); ShowPartitionsStmt stmt = new ShowPartitionsStmt(new TableName(internalCtl, "testDb", "testTable"), binaryPredicate, null, null, false); stmt.analyzeImpl(analyzer); - Assert.assertEquals("SHOW PARTITIONS FROM `testDb`.`testTable` WHERE `LastConsistencyCheckTime` > '2019-12-22 10:22:11'", stmt.toString()); + Assert.assertEquals("SHOW PARTITIONS FROM `testDb`.`testTable` WHERE (`LastConsistencyCheckTime` > '2019-12-22 10:22:11')", stmt.toString()); } @Test @@ -259,7 +259,7 @@ public class ShowPartitionsStmtTest { ShowPartitionsStmt stmt = new ShowPartitionsStmt(new TableName("hms", "hms", "testTable"), binaryPredicate, null, null, false); Assertions.assertEquals(stmt.toSql(), "SHOW PARTITIONS FROM `hms`.`testTable` " - + "WHERE `PartitionName` = 'part=part1'"); + + "WHERE (`PartitionName` = 'part=part1')"); } } } diff --git a/fe/fe-core/src/test/java/org/apache/doris/analysis/ShowResourcesStmtTest.java b/fe/fe-core/src/test/java/org/apache/doris/analysis/ShowResourcesStmtTest.java index 16315614066..50cf5505ef7 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/analysis/ShowResourcesStmtTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/analysis/ShowResourcesStmtTest.java @@ -67,7 +67,7 @@ public class ShowResourcesStmtTest { BinaryPredicate binaryPredicate = new BinaryPredicate(Operator.EQ, slotRef, stringLiteral); stmt = new ShowResourcesStmt(binaryPredicate, null, new LimitElement(10)); stmt.analyze(analyzer); - Assert.assertEquals("SHOW RESOURCES WHERE `name` = \'abc\' LIMIT 10", stmt.toString()); + Assert.assertEquals("SHOW RESOURCES WHERE (`name` = \'abc\') LIMIT 10", stmt.toString()); LikePredicate likePredicate = new LikePredicate(org.apache.doris.analysis.LikePredicate.Operator.LIKE, slotRef, stringLiteral); diff --git a/fe/fe-core/src/test/java/org/apache/doris/analysis/SqlModeTest.java b/fe/fe-core/src/test/java/org/apache/doris/analysis/SqlModeTest.java index 9e0b8c2a460..d70dfc826f0 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/analysis/SqlModeTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/analysis/SqlModeTest.java @@ -41,7 +41,7 @@ public class SqlModeTest { } catch (Exception e) { Assert.fail(e.getMessage()); } - Assert.assertEquals("SELECT * FROM `db1`.`tbl1` WHERE `name` = 'BILL GATES'", selectStmt.toSql()); + Assert.assertEquals("SELECT * FROM `db1`.`tbl1` WHERE (`name` = 'BILL GATES')", selectStmt.toSql()); parser = new SqlParser(new SqlScanner(new StringReader(stmt), SqlModeHelper.MODE_DEFAULT)); try { @@ -49,7 +49,7 @@ public class SqlModeTest { } catch (Exception e) { Assert.fail(e.getMessage()); } - Assert.assertEquals("SELECT * FROM `db1`.`tbl1` WHERE `name` = 'BILL GATES'", selectStmt.toSql()); + Assert.assertEquals("SELECT * FROM `db1`.`tbl1` WHERE (`name` = 'BILL GATES')", selectStmt.toSql()); } @Test diff --git a/fe/fe-core/src/test/java/org/apache/doris/catalog/CreateViewTest.java b/fe/fe-core/src/test/java/org/apache/doris/catalog/CreateViewTest.java index b7945e0b6de..14acbcb0d23 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/catalog/CreateViewTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/catalog/CreateViewTest.java @@ -185,7 +185,7 @@ public class CreateViewTest { alter1 = (View) db.getTableOrDdlException("alter1"); Assert.assertEquals( "WITH test1_cte(w1, w2) AS (SELECT `k1`, `k2` FROM `test`.`tbl1`) " - + "SELECT `w1` AS `c1`, sum(`w2`) AS `c2` FROM `test1_cte` WHERE `w1` > 10 GROUP BY `w1` " + + "SELECT `w1` AS `c1`, sum(`w2`) AS `c2` FROM `test1_cte` WHERE (`w1` > 10) GROUP BY `w1` " + "ORDER BY `w1` ASC NULLS FIRST", alter1.getInlineViewDef()); } diff --git a/fe/fe-core/src/test/java/org/apache/doris/planner/PlannerTest.java b/fe/fe-core/src/test/java/org/apache/doris/planner/PlannerTest.java index 493053b3b1c..41f21110330 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/planner/PlannerTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/planner/PlannerTest.java @@ -437,7 +437,7 @@ public class PlannerTest extends TestWithFeService { stmtExecutor.execute(); Planner planner = stmtExecutor.planner(); String plan = planner.getExplainString(new ExplainOptions(false, false, false)); - Assertions.assertTrue(plan.contains("PREDICATES: `k1` = 1\n")); + Assertions.assertTrue(plan.contains("`k1` = 1")); } @Test @@ -459,7 +459,7 @@ public class PlannerTest extends TestWithFeService { stmtExecutor.execute(); Planner planner = stmtExecutor.planner(); String plan = planner.getExplainString(new ExplainOptions(false, false, false)); - Assertions.assertTrue(plan.contains("PREDICATES: `k1` = 1 AND `k2` = 1\n")); + Assertions.assertTrue(plan.contains("(`k1` = 1) AND (`k2` = 1)")); } @Test @@ -471,7 +471,7 @@ public class PlannerTest extends TestWithFeService { stmtExecutor.execute(); Planner planner = stmtExecutor.planner(); String plan = planner.getExplainString(new ExplainOptions(false, false, false)); - Assertions.assertTrue(plan.contains("PREDICATES: `k1` = 1\n")); + Assertions.assertTrue(plan.contains("`k1` = 1")); } @Test diff --git a/fe/fe-core/src/test/java/org/apache/doris/planner/QueryPlanTest.java b/fe/fe-core/src/test/java/org/apache/doris/planner/QueryPlanTest.java index 3f7aaa70991..c36622268ba 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/planner/QueryPlanTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/planner/QueryPlanTest.java @@ -493,7 +493,7 @@ public class QueryPlanTest extends TestWithFeService { assertSQLPlanOrErrorMsgContains( "select count(*) from test.bitmap_table where id2 = 1;", - "Unsupported bitmap type in expression: `id2` = 1" + "Unsupported bitmap type in expression: (`id2` = 1)" ); } @@ -547,7 +547,7 @@ public class QueryPlanTest extends TestWithFeService { assertSQLPlanOrErrorMsgContains( "select count(*) from test.hll_table where id2 = 1", - "Hll type dose not support operand: `id2` = 1" + "Hll type dose not support operand: (`id2` = 1)" ); } @@ -732,8 +732,8 @@ public class QueryPlanTest extends TestWithFeService { + "left join join2 on join1.id = join2.id\n" + "and join1.id > 1;"; String explainString = getSQLPlanOrErrorMsg("explain " + sql); - Assert.assertTrue(explainString.contains("other join predicates: <slot 12> <slot 0> > 1")); - Assert.assertFalse(explainString.contains("PREDICATES: `join1`.`id` > 1")); + Assert.assertTrue(explainString.contains("<slot 12> <slot 0> > 1")); + Assert.assertFalse(explainString.contains("`join1`.`id` > 1")); /* // test left join: right table where predicate. @@ -752,8 +752,8 @@ public class QueryPlanTest extends TestWithFeService { + "left join join2 on join1.id = join2.id\n" + "and join2.id > 1;"; explainString = getSQLPlanOrErrorMsg("explain " + sql); - Assert.assertTrue(explainString.contains("PREDICATES: `join2`.`id` > 1")); - Assert.assertFalse(explainString.contains("PREDICATES: `join1`.`id` > 1")); + Assert.assertTrue(explainString.contains("`join2`.`id` > 1")); + Assert.assertFalse(explainString.contains("`join1`.`id` > 1")); /* // test inner join: left table where predicate, both push down left table and right table @@ -770,8 +770,8 @@ public class QueryPlanTest extends TestWithFeService { + "join join2 on join1.id = join2.id\n" + "and join1.id > 1;"; explainString = getSQLPlanOrErrorMsg("explain " + sql); - Assert.assertTrue(explainString.contains("PREDICATES: `join1`.`id` > 1")); - Assert.assertTrue(explainString.contains("PREDICATES: `join2`.`id` > 1")); + Assert.assertTrue(explainString.contains("`join1`.`id` > 1")); + Assert.assertTrue(explainString.contains("`join2`.`id` > 1")); /* // test inner join: right table where predicate, both push down left table and right table @@ -788,8 +788,8 @@ public class QueryPlanTest extends TestWithFeService { + "join join2 on join1.id = join2.id\n" + "and 1 < join2.id;"; explainString = getSQLPlanOrErrorMsg("explain " + sql); - Assert.assertTrue(explainString.contains("PREDICATES: `join1`.`id` > 1")); - Assert.assertTrue(explainString.contains("PREDICATES: `join2`.`id` > 1")); + Assert.assertTrue(explainString.contains("`join1`.`id` > 1")); + Assert.assertTrue(explainString.contains("`join2`.`id` > 1")); sql = "select /*+ SET_VAR(enable_nereids_planner=false) */ *\n from join1\n" + "join join2 on join1.id = join2.value\n" @@ -803,31 +803,31 @@ public class QueryPlanTest extends TestWithFeService { + "left anti join join2 on join1.id = join2.id\n" + "and join2.id > 1;"; explainString = getSQLPlanOrErrorMsg("explain " + sql); - Assert.assertTrue(explainString.contains("PREDICATES: `join2`.`id` > 1")); - Assert.assertFalse(explainString.contains("PREDICATES: `join1`.`id` > 1")); + Assert.assertTrue(explainString.contains("`join2`.`id` > 1")); + Assert.assertFalse(explainString.contains("`join1`.`id` > 1")); // test semi join, right table join predicate, only push to right table sql = "select /*+ SET_VAR(enable_nereids_planner=false) */ *\n from join1\n" + "left semi join join2 on join1.id = join2.id\n" + "and join2.id > 1;"; explainString = getSQLPlanOrErrorMsg("explain " + sql); - Assert.assertTrue(explainString.contains("PREDICATES: `join2`.`id` > 1")); - Assert.assertTrue(explainString.contains("PREDICATES: `join1`.`id` > 1")); + Assert.assertTrue(explainString.contains("`join2`.`id` > 1")); + Assert.assertTrue(explainString.contains("`join1`.`id` > 1")); // test anti join, left table join predicate, left table couldn't push down sql = "select /*+ SET_VAR(enable_nereids_planner=false) */ *\n from join1\n" + "left anti join join2 on join1.id = join2.id\n" + "and join1.id > 1;"; explainString = getSQLPlanOrErrorMsg("explain " + sql); - Assert.assertTrue(explainString.contains("other join predicates: <slot 7> <slot 0> > 1")); - Assert.assertFalse(explainString.contains("PREDICATES: `join1`.`id` > 1")); + Assert.assertTrue(explainString.contains("<slot 7> <slot 0> > 1")); + Assert.assertFalse(explainString.contains("`join1`.`id` > 1")); // test semi join, left table join predicate, only push to left table sql = "select /*+ SET_VAR(enable_nereids_planner=false) */ *\n from join1\n" + "left semi join join2 on join1.id = join2.id\n" + "and join1.id > 1;"; explainString = getSQLPlanOrErrorMsg("explain " + sql); - Assert.assertTrue(explainString.contains("PREDICATES: `join1`.`id` > 1")); + Assert.assertTrue(explainString.contains("`join1`.`id` > 1")); /* // test anti join, left table where predicate, only push to left table @@ -1036,15 +1036,15 @@ public class QueryPlanTest extends TestWithFeService { public void testOrCompoundPredicateFold() throws Exception { String queryStr = "explain select /*+ SET_VAR(enable_nereids_planner=false) */ * from baseall where (k1 > 1) or (k1 > 1 and k2 < 1)"; String explainString = getSQLPlanOrErrorMsg(queryStr); - Assert.assertTrue(explainString.contains("PREDICATES: (`k1` > 1)\n")); + Assert.assertTrue(explainString.contains("`k1` > 1")); queryStr = "explain select /*+ SET_VAR(enable_nereids_planner=false) */ * from baseall where (k1 > 1 and k2 < 1) or (k1 > 1)"; explainString = getSQLPlanOrErrorMsg(queryStr); - Assert.assertTrue(explainString.contains("PREDICATES: `k1` > 1\n")); + Assert.assertTrue(explainString.contains("`k1` > 1")); queryStr = "explain select /*+ SET_VAR(enable_nereids_planner=false) */ * from baseall where (k1 > 1) or (k1 > 1)"; explainString = getSQLPlanOrErrorMsg(queryStr); - Assert.assertTrue(explainString.contains("PREDICATES: (`k1` > 1)\n")); + Assert.assertTrue(explainString.contains("`k1` > 1")); } @Test @@ -1677,7 +1677,7 @@ public class QueryPlanTest extends TestWithFeService { //default format String sql = "select /*+ SET_VAR(enable_nereids_planner=false) */ * from test1 where from_unixtime(query_time) > '2021-03-02 10:01:28'"; String explainString = getSQLPlanOrErrorMsg("EXPLAIN " + sql); - Assert.assertTrue(explainString.contains("PREDICATES: `query_time` <= 253402271999 AND `query_time` > 1614650488")); + Assert.assertTrue(explainString.contains("(`query_time` <= 253402271999) AND (`query_time` > 1614650488)")); } @Disabled @@ -1811,7 +1811,7 @@ public class QueryPlanTest extends TestWithFeService { // false or e ==> e String sql1 = "select /*+ SET_VAR(enable_nereids_planner=false) */ * from test.test1 where 2=-2 OR query_time=0;"; String explainString1 = getSQLPlanOrErrorMsg("EXPLAIN " + sql1); - Assert.assertTrue(explainString1.contains("PREDICATES: `query_time` = 0")); + Assert.assertTrue(explainString1.contains("`query_time` = 0")); //true or e ==> true String sql2 = "select /*+ SET_VAR(enable_nereids_planner=false) */ * from test.test1 where -5=-5 OR query_time=0;"; @@ -1826,18 +1826,18 @@ public class QueryPlanTest extends TestWithFeService { //e or false ==> e String sql4 = "select /*+ SET_VAR(enable_nereids_planner=false) */ * from test.test1 where -5!=-5 OR query_time=0;"; String explainString4 = getSQLPlanOrErrorMsg("EXPLAIN " + sql4); - Assert.assertTrue(explainString4.contains("PREDICATES: `query_time` = 0")); + Assert.assertTrue(explainString4.contains("`query_time` = 0")); // true and e ==> e String sql5 = "select /*+ SET_VAR(enable_nereids_planner=false) */ * from test.test1 where -5=-5 AND query_time=0;"; String explainString5 = getSQLPlanOrErrorMsg("EXPLAIN " + sql5); - Assert.assertTrue(explainString5.contains("PREDICATES: `query_time` = 0")); + Assert.assertTrue(explainString5.contains("`query_time` = 0")); // e and true ==> e String sql6 = "select /*+ SET_VAR(enable_nereids_planner=false) */ * from test.test1 where query_time=0 AND -5=-5;"; String explainString6 = getSQLPlanOrErrorMsg("EXPLAIN " + sql6); - Assert.assertTrue(explainString6.contains("PREDICATES: `query_time` = 0")); + Assert.assertTrue(explainString6.contains("`query_time` = 0")); // false and e ==> false String sql7 = "select /*+ SET_VAR(enable_nereids_planner=false) */ * from test.test1 where -5!=-5 AND query_time=0;"; @@ -1852,12 +1852,12 @@ public class QueryPlanTest extends TestWithFeService { // (false or expr1) and (false or expr2) ==> expr1 and expr2 String sql9 = "select /*+ SET_VAR(enable_nereids_planner=false) */ * from test.test1 where (-2=2 or query_time=2) and (-2=2 or stmt_id=2);"; String explainString9 = getSQLPlanOrErrorMsg("EXPLAIN " + sql9); - Assert.assertTrue(explainString9.contains("PREDICATES: `query_time` = 2 AND `stmt_id` = 2")); + Assert.assertTrue(explainString9.contains("(`query_time` = 2) AND (`stmt_id` = 2)")); // false or (expr and true) ==> expr String sql10 = "select /*+ SET_VAR(enable_nereids_planner=false) */ * from test.test1 where (2=-2) OR (query_time=0 AND 1=1);"; String explainString10 = getSQLPlanOrErrorMsg("EXPLAIN " + sql10); - Assert.assertTrue(explainString10.contains("PREDICATES: `query_time` = 0")); + Assert.assertTrue(explainString10.contains("`query_time` = 0")); } @Test @@ -1885,11 +1885,11 @@ public class QueryPlanTest extends TestWithFeService { + " \"max_file_size\" = \"500MB\" );"; String explainStr = getSQLPlanOrErrorMsg("EXPLAIN " + sql); if (Config.enable_date_conversion) { - Assert.assertTrue(explainStr.contains("PREDICATES: `date` >= '2021-10-07' AND" - + " `date` <= '2021-10-11'")); + Assert.assertTrue(explainStr.contains("(`date` >= '2021-10-07') AND" + + " (`date` <= '2021-10-11')")); } else { - Assert.assertTrue(explainStr.contains("PREDICATES: `date` >= '2021-10-07 00:00:00' AND" - + " `date` <= '2021-10-11 00:00:00'")); + Assert.assertTrue(explainStr.contains("(`date` >= '2021-10-07 00:00:00') AND" + + " (`date` <= '2021-10-11 00:00:00')")); } } @@ -2237,7 +2237,7 @@ public class QueryPlanTest extends TestWithFeService { sql = "SELECT /*+ SET_VAR(enable_nereids_planner=false) */ * from test1 where (query_time = 1 or query_time = 2 or scan_bytes = 2) and scan_bytes in (2, 3)"; explainString = UtFrameUtils.getSQLPlanOrErrorMsg(connectContext, "EXPLAIN " + sql); - Assert.assertTrue(explainString.contains("PREDICATES: `query_time` IN (1, 2) OR `scan_bytes` = 2 AND `scan_bytes` IN (2, 3)\n")); + Assert.assertTrue(explainString.contains("PREDICATES: `query_time` IN (1, 2) OR (`scan_bytes` = 2) AND `scan_bytes` IN (2, 3)\n")); sql = "SELECT /*+ SET_VAR(enable_nereids_planner=false) */ * from test1 where (query_time = 1 or query_time = 2) and (scan_bytes = 2 or scan_bytes = 3)"; explainString = UtFrameUtils.getSQLPlanOrErrorMsg(connectContext, "EXPLAIN " + sql); @@ -2254,7 +2254,7 @@ public class QueryPlanTest extends TestWithFeService { connectContext.getSessionVariable().setRewriteOrToInPredicateThreshold(100); sql = "SELECT /*+ SET_VAR(enable_nereids_planner=false) */ * from test1 where query_time = 1 or query_time = 2 or query_time in (3, 4)"; explainString = UtFrameUtils.getSQLPlanOrErrorMsg(connectContext, "EXPLAIN " + sql); - Assert.assertTrue(explainString.contains("PREDICATES: `query_time` = 1 OR `query_time` = 2 OR `query_time` IN (3, 4)\n")); + Assert.assertTrue(explainString.contains("PREDICATES: (`query_time` = 1) OR (`query_time` = 2) OR `query_time` IN (3, 4)\n")); connectContext.getSessionVariable().setRewriteOrToInPredicateThreshold(2); sql = "SELECT /*+ SET_VAR(enable_nereids_planner=false) */ * from test1 where (query_time = 1 or query_time = 2) and query_time in (3, 4)"; @@ -2264,7 +2264,7 @@ public class QueryPlanTest extends TestWithFeService { //test we can handle `!=` and `not in` sql = "select /*+ SET_VAR(enable_nereids_planner=false) */ * from test1 where (query_time = 1 or query_time = 2 or query_time!= 3 or query_time not in (5, 6))"; explainString = UtFrameUtils.getSQLPlanOrErrorMsg(connectContext, "EXPLAIN " + sql); - Assert.assertTrue(explainString.contains("PREDICATES: `query_time` IN (1, 2) OR `query_time` != 3 OR `query_time` NOT IN (5, 6)\n")); + Assert.assertTrue(explainString.contains("PREDICATES: `query_time` IN (1, 2) OR (`query_time` != 3) OR `query_time` NOT IN (5, 6)\n")); //test we can handle merge 2 or more columns sql = "select /*+ SET_VAR(enable_nereids_planner=false) */ * from test1 where (query_time = 1 or query_time = 2 or scan_rows = 3 or scan_rows = 4)"; @@ -2284,8 +2284,8 @@ public class QueryPlanTest extends TestWithFeService { + " or (db not in ('x', 'y')) "; explainString = UtFrameUtils.getSQLPlanOrErrorMsg(connectContext, "EXPLAIN " + sql); Assert.assertTrue(explainString.contains( - "PREDICATES: `query_id` = `client_ip` " - + "AND (`stmt_id` IN (1, 2, 3) OR `user` = 'abc' AND `state` IN ('a', 'b', 'c', 'd')) " + "PREDICATES: (`query_id` = `client_ip`) " + + "AND (`stmt_id` IN (1, 2, 3) OR (`user` = 'abc') AND `state` IN ('a', 'b', 'c', 'd')) " + "OR (`db` NOT IN ('x', 'y'))\n")); //ExtractCommonFactorsRule may generate more expr, test the rewriteOrToIn applied on generated exprs @@ -2293,7 +2293,7 @@ public class QueryPlanTest extends TestWithFeService { explainString = UtFrameUtils.getSQLPlanOrErrorMsg(connectContext, "EXPLAIN " + sql); Assert.assertTrue(explainString.contains( "PREDICATES: `state` IN ('a', 'b') AND `stmt_id` IN (1, 2) AND" - + " `stmt_id` = 1 AND `state` = 'a' OR `stmt_id` = 2 AND `state` = 'b'\n" + + " (`stmt_id` = 1) AND (`state` = 'a') OR (`stmt_id` = 2) AND (`state` = 'b')\n" )); } } diff --git a/fe/fe-core/src/test/java/org/apache/doris/planner/RepeatNodeTest.java b/fe/fe-core/src/test/java/org/apache/doris/planner/RepeatNodeTest.java index a4a09d0870d..9a9b1a3b8c5 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/planner/RepeatNodeTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/planner/RepeatNodeTest.java @@ -62,7 +62,7 @@ public class RepeatNodeTest extends TestWithFeService { String explainString1 = getSQLPlanOrErrorMsg("explain " + sql1); System.out.println(explainString1); Assertions.assertTrue(explainString1.contains( - "output slots: `if(`c`.`id` > 0, 1, 0)`, ``p`.`name``, ``c`.`cost``, ``GROUPING_ID``")); + "output slots: `if((`c`.`id` > 0), 1, 0)`, ``p`.`name``, ``c`.`cost``, ``GROUPING_ID``")); String sql2 = "select /*+ SET_VAR(enable_nereids_planner=false) */ (id + 1) id_, name, sum(cost) from mycost group by grouping sets((id_, name),());"; String explainString2 = getSQLPlanOrErrorMsg("explain " + sql2); diff --git a/fe/fe-core/src/test/java/org/apache/doris/planner/TableFunctionPlanTest.java b/fe/fe-core/src/test/java/org/apache/doris/planner/TableFunctionPlanTest.java index 2c39a09390b..a9698080219 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/planner/TableFunctionPlanTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/planner/TableFunctionPlanTest.java @@ -132,7 +132,7 @@ public class TableFunctionPlanTest { Assert.assertTrue(UtFrameUtils.checkPlanResultContainsNode(explainString, 1, "TABLE FUNCTION NODE")); Assert.assertTrue( explainString.contains("table function: explode_split(`db1`.`tbl1`.`k2`, ',')")); - Assert.assertTrue(explainString.contains("PREDICATES: `e1` = '1'")); + Assert.assertTrue(explainString.contains("`e1` = '1'")); Assert.assertTrue(explainString.contains("tuple ids: 0 1")); Assert.assertTrue(explainString.contains("TupleDescriptor{id=1, tbl=tmp, byteSize=32}")); Assert.assertTrue(explainString.contains("SlotDescriptor{id=1, col=e1, colUniqueId=-1, type=VARCHAR")); @@ -153,7 +153,7 @@ public class TableFunctionPlanTest { Assert.assertTrue(explainString.contains("TupleDescriptor{id=1, tbl=tmp, byteSize=32}")); Assert.assertTrue(explainString.contains("SlotDescriptor{id=1, col=e1, colUniqueId=-1, type=VARCHAR")); Assert.assertTrue(UtFrameUtils.checkPlanResultContainsNode(explainString, 0, "OlapScanNode")); - Assert.assertTrue(explainString.contains("PREDICATES: `k1` = 1")); + Assert.assertTrue(explainString.contains("`k1` = 1")); } /* Case6 multi lateral view @@ -508,8 +508,8 @@ public class TableFunctionPlanTest { + " where k1 in (select k2 from db1.table_for_view);"; String explainString = UtFrameUtils.getSQLPlanOrErrorMsg(ctx, sql, true); Assert.assertTrue(explainString.contains("join op: LEFT SEMI JOIN(BROADCAST)")); - Assert.assertTrue(explainString.contains("equal join conjunct: `k1` = `k2`")); - Assert.assertTrue(!explainString.contains("equal join conjunct: `k2` = `k2`")); + Assert.assertTrue(explainString.contains("`k1` = `k2`")); + Assert.assertTrue(!explainString.contains("`k2` = `k2`")); } @Test diff --git a/fe/fe-core/src/test/java/org/apache/doris/policy/PolicyTest.java b/fe/fe-core/src/test/java/org/apache/doris/policy/PolicyTest.java index 6c1b24d531e..3169a57159f 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/policy/PolicyTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/policy/PolicyTest.java @@ -269,7 +269,7 @@ public class PolicyTest extends TestWithFeService { createPolicy("CREATE ROW POLICY test_row_policy4 ON test.table1 AS PERMISSIVE TO test_policy USING (k2 = 1)"); String queryStr = "EXPLAIN select /*+ SET_VAR(enable_nereids_planner=false) */ * from test.table1"; String explainString = getSQLPlanOrErrorMsg(queryStr); - Assertions.assertTrue(explainString.contains("`k1` = 1 AND `k2` = 1 AND `k2` = 2 OR `k2` = 1")); + Assertions.assertTrue(explainString.contains("(`k1` = 1) AND (`k2` = 1) AND (`k2` = 2) OR (`k2` = 1)")); dropPolicy("DROP ROW POLICY test_row_policy1 ON test.table1"); dropPolicy("DROP ROW POLICY test_row_policy2 ON test.table1"); dropPolicy("DROP ROW POLICY test_row_policy3 ON test.table1"); @@ -283,7 +283,7 @@ public class PolicyTest extends TestWithFeService { createPolicy("CREATE ROW POLICY test_row_policy4 ON test.table1 AS PERMISSIVE TO test_policy USING (k2 = 1)"); String queryStr = "EXPLAIN select * from test.table1"; String explainString = getSQLPlanOrErrorMsg(queryStr); - Assertions.assertTrue(explainString.contains("k2[#1] IN (1, 2) AND k1[#0] = 1")); + Assertions.assertTrue(explainString.contains("k2[#1] IN (1, 2) AND (k1[#0] = 1)")); dropPolicy("DROP ROW POLICY test_row_policy1 ON test.table1"); dropPolicy("DROP ROW POLICY test_row_policy3 ON test.table1"); dropPolicy("DROP ROW POLICY test_row_policy4 ON test.table1"); @@ -295,16 +295,16 @@ public class PolicyTest extends TestWithFeService { createPolicy("CREATE ROW POLICY test_row_policy2 ON test.table1 AS RESTRICTIVE TO test_policy USING (k2 = 1)"); String joinSql = "select /*+ SET_VAR(enable_nereids_planner=false) */ * from table1 join table2 on table1.k1=table2.k1"; - Assertions.assertTrue(getSQLPlanOrErrorMsg(joinSql).contains("PREDICATES: `k1` = 1 AND `k2` = 1")); + Assertions.assertTrue(getSQLPlanOrErrorMsg(joinSql).contains("(`k1` = 1) AND (`k2` = 1)")); String unionSql = "select /*+ SET_VAR(enable_nereids_planner=false) */ * from table1 union select * from table2"; - Assertions.assertTrue(getSQLPlanOrErrorMsg(unionSql).contains("PREDICATES: `k1` = 1 AND `k2` = 1")); + Assertions.assertTrue(getSQLPlanOrErrorMsg(unionSql).contains("(`k1` = 1) AND (`k2` = 1)")); String subQuerySql = "select /*+ SET_VAR(enable_nereids_planner=false) */ * from table2 where k1 in (select k1 from table1)"; - Assertions.assertTrue(getSQLPlanOrErrorMsg(subQuerySql).contains("PREDICATES: `k1` = 1 AND `k2` = 1")); + Assertions.assertTrue(getSQLPlanOrErrorMsg(subQuerySql).contains("(`k1` = 1) AND (`k2` = 1)")); String aliasSql = "select /*+ SET_VAR(enable_nereids_planner=false) */ * from table1 t1 join table2 t2 on t1.k1=t2.k1"; - Assertions.assertTrue(getSQLPlanOrErrorMsg(aliasSql).contains("PREDICATES: `t1`.`k1` = 1 AND `t1`.`k2` = 1")); + Assertions.assertTrue(getSQLPlanOrErrorMsg(aliasSql).contains("(`t1`.`k1` = 1) AND (`t1`.`k2` = 1)")); dropPolicy("DROP ROW POLICY test_row_policy1 ON test.table1"); dropPolicy("DROP ROW POLICY test_row_policy2 ON test.table1"); } @@ -314,13 +314,13 @@ public class PolicyTest extends TestWithFeService { createPolicy("CREATE ROW POLICY test_row_policy1 ON test.table1 AS RESTRICTIVE TO test_policy USING (k1 = 1)"); createPolicy("CREATE ROW POLICY test_row_policy2 ON test.table1 AS RESTRICTIVE TO test_policy USING (k2 = 1)"); String joinSql = "select * from table1 join table2 on table1.k1=table2.k1"; - Assertions.assertTrue(getSQLPlanOrErrorMsg(joinSql).contains("PREDICATES: k1 = 1 AND k2 = 1")); + Assertions.assertTrue(getSQLPlanOrErrorMsg(joinSql).contains("PREDICATES: (k1 = 1) AND (k2 = 1)")); String unionSql = "select * from table1 union select * from table2"; - Assertions.assertTrue(getSQLPlanOrErrorMsg(unionSql).contains("PREDICATES: k1 = 1 AND k2 = 1")); + Assertions.assertTrue(getSQLPlanOrErrorMsg(unionSql).contains("PREDICATES: (k1 = 1) AND (k2 = 1)")); String subQuerySql = "select * from table2 where k1 in (select k1 from table1)"; - Assertions.assertTrue(getSQLPlanOrErrorMsg(subQuerySql).contains("PREDICATES: k1 = 1 AND k2 = 1")); + Assertions.assertTrue(getSQLPlanOrErrorMsg(subQuerySql).contains("PREDICATES: (k1 = 1) AND (k2 = 1)")); String aliasSql = "select * from table1 t1 join table2 t2 on t1.k1=t2.k1"; - Assertions.assertTrue(getSQLPlanOrErrorMsg(aliasSql).contains("PREDICATES: k1 = 1 AND k2 = 1")); + Assertions.assertTrue(getSQLPlanOrErrorMsg(aliasSql).contains("PREDICATES: (k1 = 1) AND (k2 = 1)")); dropPolicy("DROP ROW POLICY test_row_policy1 ON test.table1"); dropPolicy("DROP ROW POLICY test_row_policy2 ON test.table1"); } diff --git a/fe/fe-core/src/test/java/org/apache/doris/qe/OlapQueryCacheTest.java b/fe/fe-core/src/test/java/org/apache/doris/qe/OlapQueryCacheTest.java index 2b0d7162fed..182596c3b63 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/qe/OlapQueryCacheTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/qe/OlapQueryCacheTest.java @@ -671,7 +671,7 @@ public class OlapQueryCacheTest { cache.rewriteSelectStmt(newRangeList); sql = ca.getRewriteStmt().getWhereClause().toSql(); - Assert.assertEquals(sql, "`date` >= 20200114 AND `date` <= 20200115"); + Assert.assertEquals(sql, "(`date` >= 20200114) AND (`date` <= 20200115)"); } catch (Exception e) { LOG.warn("ex={}", e); Assert.fail(e.getMessage()); @@ -713,7 +713,7 @@ public class OlapQueryCacheTest { hitRange = range.buildDiskPartitionRange(newRangeList); cache.rewriteSelectStmt(newRangeList); sql = ca.getRewriteStmt().getWhereClause().toSql(); - Assert.assertEquals(sql, "`eventdate` >= '2020-01-14' AND `eventdate` <= '2020-01-15'"); + Assert.assertEquals(sql, "(`eventdate` >= '2020-01-14') AND (`eventdate` <= '2020-01-15')"); } catch (Exception e) { LOG.warn("ex={}", e); Assert.fail(e.getMessage()); @@ -856,7 +856,7 @@ public class OlapQueryCacheTest { cache.rewriteSelectStmt(newRangeList); sql = ca.getRewriteStmt().getWhereClause().toSql(); - Assert.assertEquals(sql, "`eventdate` >= '2020-01-13' AND `eventdate` <= '2020-01-15'"); + Assert.assertEquals(sql, "(`eventdate` >= '2020-01-13') AND (`eventdate` <= '2020-01-15')"); List<PartitionRange.PartitionSingle> updateRangeList = range.buildUpdatePartitionRange(); Assert.assertEquals(updateRangeList.size(), 2); @@ -886,7 +886,7 @@ public class OlapQueryCacheTest { cache.rewriteSelectStmt(null); LOG.warn("Nokey multi={}", cache.getNokeyStmt().getWhereClause().toSql()); - Assert.assertEquals(cache.getNokeyStmt().getWhereClause().toSql(), "`eventid` = 1"); + Assert.assertEquals(cache.getNokeyStmt().getWhereClause().toSql(), "(`eventid` = 1)"); PartitionRange range = cache.getPartitionRange(); boolean flag = range.analytics(); @@ -904,7 +904,7 @@ public class OlapQueryCacheTest { cache.rewriteSelectStmt(newRangeList); sql = ca.getRewriteStmt().getWhereClause().toSql(); LOG.warn("MultiPredicate={}", sql); - Assert.assertEquals(sql, "`eventdate` > '2020-01-13' AND `eventdate` < '2020-01-16' AND `eventid` = 1"); + Assert.assertEquals(sql, "(`eventdate` > '2020-01-13') AND (`eventdate` < '2020-01-16') AND (`eventid` = 1)"); } catch (Exception e) { LOG.warn("multi ex={}", e); Assert.fail(e.getMessage()); @@ -929,7 +929,7 @@ public class OlapQueryCacheTest { PartitionCache cache = (PartitionCache) ca.getCache(); cache.rewriteSelectStmt(null); LOG.warn("Join nokey={}", cache.getNokeyStmt().getWhereClause().toSql()); - Assert.assertEquals(cache.getNokeyStmt().getWhereClause().toSql(), "`eventid` = 1"); + Assert.assertEquals(cache.getNokeyStmt().getWhereClause().toSql(), "(`eventid` = 1)"); PartitionRange range = cache.getPartitionRange(); boolean flag = range.analytics(); @@ -947,8 +947,8 @@ public class OlapQueryCacheTest { cache.rewriteSelectStmt(newRangeList); sql = ca.getRewriteStmt().getWhereClause().toSql(); LOG.warn("Join rewrite={}", sql); - Assert.assertEquals(sql, "`appevent`.`eventdate` >= '2020-01-14'" - + " AND `appevent`.`eventdate` <= '2020-01-15' AND `eventid` = 1"); + Assert.assertEquals(sql, "(`appevent`.`eventdate` >= '2020-01-14')" + + " AND (`appevent`.`eventdate` <= '2020-01-15') AND (`eventid` = 1)"); } catch (Exception e) { LOG.warn("Join ex={}", e); Assert.fail(e.getMessage()); @@ -976,7 +976,7 @@ public class OlapQueryCacheTest { Assert.assertEquals(cache.getNokeyStmt().toSql(), "SELECT <slot 7> `eventdate` AS `eventdate`, <slot 8> sum(`pv`) AS `sum(``pv``)` " + "FROM (SELECT <slot 3> `eventdate` AS `eventdate`, <slot 4> count(`userid`) AS `pv` " - + "FROM `testDb`.`appevent` WHERE `eventid` = 1 GROUP BY `eventdate`) tbl " + + "FROM `testDb`.`appevent` WHERE (`eventid` = 1) GROUP BY `eventdate`) tbl " + "GROUP BY `eventdate`"); PartitionRange range = cache.getPartitionRange(); @@ -998,8 +998,8 @@ public class OlapQueryCacheTest { Assert.assertEquals(sql, "SELECT <slot 7> `eventdate` AS `eventdate`, <slot 8> sum(`pv`) AS `sum(``pv``)` " + "FROM (SELECT <slot 3> `eventdate` AS `eventdate`, <slot 4> count(`userid`) AS `pv` " - + "FROM `testDb`.`appevent` WHERE `eventdate` > '2020-01-13' " - + "AND `eventdate` < '2020-01-16' AND `eventid` = 1 GROUP BY `eventdate`) tbl " + + "FROM `testDb`.`appevent` WHERE (`eventdate` > '2020-01-13') " + + "AND (`eventdate` < '2020-01-16') AND (`eventid` = 1) GROUP BY `eventdate`) tbl " + "GROUP BY `eventdate`"); } catch (Exception e) { LOG.warn("sub ex={}", e); @@ -1051,8 +1051,8 @@ public class OlapQueryCacheTest { SqlCache sqlCache = (SqlCache) ca.getCache(); String cacheKey = sqlCache.getSqlWithViewStmt(); Assert.assertEquals(cacheKey, "SELECT <slot 2> `eventdate` AS `eventdate`, <slot 3> count(`userid`) " - + "AS `count(``userid``)` FROM `testDb`.`appevent` WHERE `eventdate` >= '2020-01-12' " - + "AND `eventdate` <= '2020-01-14' GROUP BY `eventdate`|"); + + "AS `count(``userid``)` FROM `testDb`.`appevent` WHERE (`eventdate` >= '2020-01-12') " + + "AND (`eventdate` <= '2020-01-14') GROUP BY `eventdate`|"); Assert.assertEquals(selectedPartitionIds.size(), sqlCache.getSumOfPartitionNum()); } @@ -1090,8 +1090,8 @@ public class OlapQueryCacheTest { Assert.assertEquals(cacheKey, "SELECT `testDb`.`view1`.`eventdate` AS `eventdate`, " + "`testDb`.`view1`.`__count_1` AS `__count_1` FROM `testDb`.`view1`|" + "SELECT `eventdate` AS `eventdate`, count(`userid`) AS `__count_1` FROM " - + "`testDb`.`appevent` WHERE `eventdate` >= '2020-01-12' AND " - + "`eventdate` <= '2020-01-14' GROUP BY `eventdate`"); + + "`testDb`.`appevent` WHERE (`eventdate` >= '2020-01-12') AND " + + "(`eventdate` <= '2020-01-14') GROUP BY `eventdate`"); Assert.assertEquals(selectedPartitionIds.size(), sqlCache.getSumOfPartitionNum()); } @@ -1109,7 +1109,7 @@ public class OlapQueryCacheTest { String cacheKey = sqlCache.getSqlWithViewStmt(); Assert.assertEquals(cacheKey, "SELECT * from testDb.view1|SELECT `eventdate` AS `eventdate`, " + "count(`userid`) AS `__count_1` FROM `testDb`.`appevent` " - + "WHERE `eventdate` >= '2020-01-12' AND `eventdate` <= '2020-01-14' GROUP BY `eventdate`"); + + "WHERE (`eventdate` >= '2020-01-12') AND (`eventdate` <= '2020-01-14') GROUP BY `eventdate`"); Assert.assertEquals(selectedPartitionIds.size(), sqlCache.getSumOfPartitionNum()); } @@ -1135,7 +1135,7 @@ public class OlapQueryCacheTest { Assert.assertEquals(cacheKey, "SELECT `origin`.`eventdate` AS `eventdate`, " + "`origin`.`userid` AS `userid` FROM (SELECT `view2`.`eventdate` AS `eventdate`, " + "`view2`.`userid` AS `userid` FROM `testDb`.`view2` view2 " - + "WHERE `view2`.`eventdate` >= '2020-01-12' AND `view2`.`eventdate` <= '2020-01-14') origin|" + + "WHERE (`view2`.`eventdate` >= '2020-01-12') AND (`view2`.`eventdate` <= '2020-01-14')) origin|" + "SELECT `eventdate` AS `eventdate`, `userid` AS `userid` FROM `testDb`.`appevent`"); Assert.assertEquals(selectedPartitionIds.size(), sqlCache.getSumOfPartitionNum()); } @@ -1187,8 +1187,8 @@ public class OlapQueryCacheTest { Assert.assertEquals(cache.getSqlWithViewStmt(), "SELECT `testDb`.`view3`.`eventdate` " + "AS `eventdate`, `testDb`.`view3`.`__count_1` AS `__count_1` " + "FROM `testDb`.`view3`|SELECT `eventdate` AS `eventdate`, count(`userid`) " - + "AS `__count_1` FROM `testDb`.`appevent` WHERE `eventdate` >= '2020-01-12' " - + "AND `eventdate` <= '2020-01-15' GROUP BY `eventdate`"); + + "AS `__count_1` FROM `testDb`.`appevent` WHERE (`eventdate` >= '2020-01-12') " + + "AND (`eventdate` <= '2020-01-15') GROUP BY `eventdate`"); } catch (Exception e) { LOG.warn("ex={}", e); Assert.fail(e.getMessage()); @@ -1243,7 +1243,7 @@ public class OlapQueryCacheTest { Assert.assertEquals(cacheKey, "SELECT `testDb`.`view4`.`eventdate` AS `eventdate`, " + "`testDb`.`view4`.`__count_1` AS `__count_1` FROM `testDb`.`view4`|" + "SELECT `eventdate` AS `eventdate`, count(`userid`) AS `__count_1` FROM `testDb`.`view2` " - + "WHERE `eventdate` >= '2020-01-12' AND `eventdate` <= '2020-01-14' GROUP BY `eventdate`|" + + "WHERE (`eventdate` >= '2020-01-12') AND (`eventdate` <= '2020-01-14') GROUP BY `eventdate`|" + "SELECT `eventdate` AS `eventdate`, `userid` AS `userid` FROM `testDb`.`appevent`"); Assert.assertEquals(selectedPartitionIds.size(), sqlCache.getSumOfPartitionNum()); } @@ -1261,8 +1261,8 @@ public class OlapQueryCacheTest { SqlCache sqlCache = (SqlCache) ca.getCache(); String cacheKey = sqlCache.getSqlWithViewStmt(); Assert.assertEquals(cacheKey, "SELECT * from testDb.view4|SELECT `eventdate` AS `eventdate`, " - + "count(`userid`) AS `__count_1` FROM `testDb`.`view2` WHERE `eventdate` >= '2020-01-12' " - + "AND `eventdate` <= '2020-01-14' GROUP BY `eventdate`|SELECT `eventdate` AS `eventdate`, " + + "count(`userid`) AS `__count_1` FROM `testDb`.`view2` WHERE (`eventdate` >= '2020-01-12') " + + "AND (`eventdate` <= '2020-01-14') GROUP BY `eventdate`|SELECT `eventdate` AS `eventdate`, " + "`userid` AS `userid` FROM `testDb`.`appevent`"); Assert.assertEquals(selectedPartitionIds.size(), sqlCache.getSumOfPartitionNum()); } @@ -1326,7 +1326,7 @@ public class OlapQueryCacheTest { cache.rewriteSelectStmt(newRangeList); sql = ca.getRewriteStmt().getWhereClause().toSql(); - Assert.assertEquals(sql, "`date` >= 20200114 AND `date` <= 20200115"); + Assert.assertEquals(sql, "(`date` >= 20200114) AND (`date` <= 20200115)"); } catch (Exception e) { LOG.warn("ex={}", e); Assert.fail(e.getMessage()); diff --git a/fe/fe-core/src/test/java/org/apache/doris/rewrite/ExtractCommonFactorsRuleFunctionTest.java b/fe/fe-core/src/test/java/org/apache/doris/rewrite/ExtractCommonFactorsRuleFunctionTest.java index 1fcffc4fa5c..c2f31ab90a3 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/rewrite/ExtractCommonFactorsRuleFunctionTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/rewrite/ExtractCommonFactorsRuleFunctionTest.java @@ -100,7 +100,7 @@ public class ExtractCommonFactorsRuleFunctionTest { public void testWideCommonFactorsWithOrPredicate() throws Exception { String query = "select /*+ SET_VAR(enable_nereids_planner=false) */ * from tb1 where tb1.k1 > 1000 or tb1.k1 < 200 or tb1.k1 = 300"; String planString = dorisAssert.query(query).explainQuery(); - Assert.assertTrue(planString.contains("PREDICATES: `tb1`.`k1` = 300 OR `tb1`.`k1` > 1000 OR `tb1`.`k1` < 200")); + Assert.assertTrue(planString.contains("(`tb1`.`k1` = 300) OR (`tb1`.`k1` > 1000) OR (`tb1`.`k1` < 200)")); } @Test @@ -259,8 +259,8 @@ public class ExtractCommonFactorsRuleFunctionTest { Assert.assertTrue(planString.contains("`l_partkey` = `p_partkey`")); Assert.assertTrue(planString.contains("`l_shipmode` IN ('AIR', 'AIR REG')")); Assert.assertTrue(planString.contains("`l_shipinstruct` = 'DELIVER IN PERSON'")); - Assert.assertTrue(planString.contains("`l_quantity` >= 9 AND `l_quantity` <= 19 " - + "OR `l_quantity` >= 20 AND `l_quantity` <= 36")); + Assert.assertTrue(planString.contains("(`l_quantity` >= 9) AND (`l_quantity` <= 19) " + + "OR (`l_quantity` >= 20) AND (`l_quantity` <= 36)")); Assert.assertTrue(planString.contains("`p_size` >= 1")); Assert.assertTrue(planString.contains("`p_brand` IN ('Brand#11', 'Brand#21', 'Brand#32')")); Assert.assertTrue(planString.contains("`p_size` <= 15")); diff --git a/regression-test/data/ddl_p0/test_create_view.out b/regression-test/data/ddl_p0/test_create_view.out index 239fafc025e..7ee1123fd46 100644 --- a/regression-test/data/ddl_p0/test_create_view.out +++ b/regression-test/data/ddl_p0/test_create_view.out @@ -25,5 +25,5 @@ 3 [-1, 20, 0] [0, 1, 0] -- !test_view_6 -- -v1 CREATE VIEW `v1` COMMENT 'VIEW' AS SELECT `error_code` AS `error_code`, 1 AS `__literal_1`, 'string' AS `__literal_2`, now() AS `__now_3`, dayofyear(`op_time`) AS `__dayofyear_4`, CAST(`source` AS BIGINT) AS `__cast_expr_5`, min(`timestamp`) OVER (ORDER BY `op_time` DESC NULLS LAST ROWS BETWEEN UNBOUNDED PRECEDING AND 1 FOLLOWING) AS `__min_6`, 1 > 2 AS `__binary_predicate_7`, (2 + 3) AS `__arithmetic_expr_8`, 1 IN (1, 2, 3, 4) AS `__in_predicate_9`, `remark` LIKE '%like' AS `__like_p [...] +v1 CREATE VIEW `v1` COMMENT 'VIEW' AS SELECT `error_code` AS `error_code`, 1 AS `__literal_1`, 'string' AS `__literal_2`, now() AS `__now_3`, dayofyear(`op_time`) AS `__dayofyear_4`, CAST(`source` AS BIGINT) AS `__cast_expr_5`, min(`timestamp`) OVER (ORDER BY `op_time` DESC NULLS LAST ROWS BETWEEN UNBOUNDED PRECEDING AND 1 FOLLOWING) AS `__min_6`, (1 > 2) AS `__binary_predicate_7`, (2 + 3) AS `__arithmetic_expr_8`, 1 IN (1, 2, 3, 4) AS `__in_predicate_9`, `remark` LIKE '%like' AS `__like [...] diff --git a/regression-test/data/mv_p0/ut/testAggQueryOnAggMV1/testAggQueryOnAggMV1.out b/regression-test/data/mv_p0/ut/testAggQueryOnAggMV1/testAggQueryOnAggMV1.out index e64409afb21..cd7da97e1a7 100644 --- a/regression-test/data/mv_p0/ut/testAggQueryOnAggMV1/testAggQueryOnAggMV1.out +++ b/regression-test/data/mv_p0/ut/testAggQueryOnAggMV1/testAggQueryOnAggMV1.out @@ -13,3 +13,13 @@ -- !select_mv -- 7 +-- !select_mv -- +1 2 +2 1 +3 1 + +-- !select_mv -- +1 2 +2 2 +3 3 + diff --git a/regression-test/data/performance_p0/redundant_conjuncts.out b/regression-test/data/performance_p0/redundant_conjuncts.out index 9df35ef6b2d..e4cd154e44e 100644 --- a/regression-test/data/performance_p0/redundant_conjuncts.out +++ b/regression-test/data/performance_p0/redundant_conjuncts.out @@ -12,7 +12,7 @@ PLAN FRAGMENT 0 0:VOlapScanNode TABLE: regression_test_performance_p0.redundant_conjuncts(redundant_conjuncts), PREAGGREGATION: OFF. Reason: No AggregateInfo - PREDICATES: `k1` = 1 + PREDICATES: (`k1` = 1) partitions=0/1 (), tablets=0/0, tabletList= cardinality=0, avgRowSize=8.0, numNodes=1 pushAggOp=NONE @@ -30,7 +30,7 @@ PLAN FRAGMENT 0 0:VOlapScanNode TABLE: regression_test_performance_p0.redundant_conjuncts(redundant_conjuncts), PREAGGREGATION: OFF. Reason: No AggregateInfo - PREDICATES: `k1` = 1 OR `k1` = 2 + PREDICATES: (`k1` = 1) OR (`k1` = 2) partitions=0/1 (), tablets=0/0, tabletList= cardinality=0, avgRowSize=8.0, numNodes=1 pushAggOp=NONE diff --git a/regression-test/data/show_p0/test_show_create_table_and_views.out b/regression-test/data/show_p0/test_show_create_table_and_views.out index 95af034fcc4..2df41e35d23 100644 --- a/regression-test/data/show_p0/test_show_create_table_and_views.out +++ b/regression-test/data/show_p0/test_show_create_table_and_views.out @@ -24,7 +24,7 @@ show_create_table_and_views_table CREATE TABLE `show_create_table_and_views_tabl 3 1 -- !show -- -show_create_table_and_views_view CREATE VIEW `show_create_table_and_views_view` COMMENT 'VIEW' AS SELECT `user_id` AS `user_id`, `cost` AS `cost` FROM `show_create_table_and_views_db`.`show_create_table_and_views_table` WHERE `good_id` = 2; utf8 utf8_general_ci +show_create_table_and_views_view CREATE VIEW `show_create_table_and_views_view` COMMENT 'VIEW' AS SELECT `user_id` AS `user_id`, `cost` AS `cost` FROM `show_create_table_and_views_db`.`show_create_table_and_views_table` WHERE (`good_id` = 2); utf8 utf8_general_ci -- !select -- 1 47 diff --git a/regression-test/suites/external_table_p0/jdbc/test_clickhouse_jdbc_catalog.groovy b/regression-test/suites/external_table_p0/jdbc/test_clickhouse_jdbc_catalog.groovy index 9948c49d24a..4b8aee3abe7 100644 --- a/regression-test/suites/external_table_p0/jdbc/test_clickhouse_jdbc_catalog.groovy +++ b/regression-test/suites/external_table_p0/jdbc/test_clickhouse_jdbc_catalog.groovy @@ -87,7 +87,7 @@ suite("test_clickhouse_jdbc_catalog", "p0,external,clickhouse,external_docker,ex order_qt_func_push """select * from ts where from_unixtime(ts,'yyyyMMdd') >= '2022-01-01';""" explain { sql("select * from ts where from_unixtime(ts,'yyyyMMdd') >= '2022-01-01';") - contains """QUERY: SELECT "id", "ts" FROM "doris_test"."ts" WHERE (FROM_UNIXTIME("ts", '%Y%m%d') >= '2022-01-01')""" + contains """QUERY: SELECT "id", "ts" FROM "doris_test"."ts" WHERE ((FROM_UNIXTIME("ts", '%Y%m%d') >= '2022-01-01'))""" } explain { sql("select * from ts where nvl(ts,null) >= '2022-01-01';") @@ -96,7 +96,7 @@ suite("test_clickhouse_jdbc_catalog", "p0,external,clickhouse,external_docker,ex order_qt_func_push2 """select * from ts where ts <= unix_timestamp(from_unixtime(ts,'yyyyMMdd'));""" explain { sql("select * from ts where ts <= unix_timestamp(from_unixtime(ts,'yyyy-MM-dd'));") - contains """QUERY: SELECT "id", "ts" FROM "doris_test"."ts" WHERE ("ts" <= toUnixTimestamp(FROM_UNIXTIME("ts", '%Y-%m-%d')))""" + contains """QUERY: SELECT "id", "ts" FROM "doris_test"."ts" WHERE (("ts" <= toUnixTimestamp(FROM_UNIXTIME("ts", '%Y-%m-%d'))))""" } order_qt_dt_with_tz """ select * from dt_with_tz order by id; """ diff --git a/regression-test/suites/external_table_p0/jdbc/test_mysql_jdbc_catalog.groovy b/regression-test/suites/external_table_p0/jdbc/test_mysql_jdbc_catalog.groovy index 86afd749e56..3457ae2f6f8 100644 --- a/regression-test/suites/external_table_p0/jdbc/test_mysql_jdbc_catalog.groovy +++ b/regression-test/suites/external_table_p0/jdbc/test_mysql_jdbc_catalog.groovy @@ -407,18 +407,18 @@ suite("test_mysql_jdbc_catalog", "p0,external,mysql,external_docker,external_doc explain { sql ("select k6, k8 from test1 where nvl(k6, null) = 1;") - contains "QUERY: SELECT `k6`, `k8` FROM `doris_test`.`test1` WHERE (ifnull(`k6`, NULL) = 1)" + contains "QUERY: SELECT `k6`, `k8` FROM `doris_test`.`test1` WHERE ((ifnull(`k6`, NULL) = 1))" } explain { sql ("select k6, k8 from test1 where nvl(nvl(k6, null),null) = 1;") - contains "QUERY: SELECT `k6`, `k8` FROM `doris_test`.`test1` WHERE (ifnull(ifnull(`k6`, NULL), NULL) = 1)" + contains "QUERY: SELECT `k6`, `k8` FROM `doris_test`.`test1` WHERE ((ifnull(ifnull(`k6`, NULL), NULL) = 1))" } sql """ set enable_ext_func_pred_pushdown = "false"; """ explain { sql ("select k6, k8 from test1 where nvl(k6, null) = 1 and k8 = 1;") - contains "QUERY: SELECT `k6`, `k8` FROM `doris_test`.`test1` WHERE (`k8` = 1)" + contains "QUERY: SELECT `k6`, `k8` FROM `doris_test`.`test1` WHERE ((`k8` = 1))" } sql """ set enable_ext_func_pred_pushdown = "true"; """ } finally { diff --git a/regression-test/suites/external_table_p0/jdbc/test_mysql_jdbc_catalog_nereids.groovy b/regression-test/suites/external_table_p0/jdbc/test_mysql_jdbc_catalog_nereids.groovy index c63314b186f..24aac183eb8 100644 --- a/regression-test/suites/external_table_p0/jdbc/test_mysql_jdbc_catalog_nereids.groovy +++ b/regression-test/suites/external_table_p0/jdbc/test_mysql_jdbc_catalog_nereids.groovy @@ -82,7 +82,7 @@ suite("test_mysql_jdbc_catalog_nereids", "p0,external,mysql,external_docker,exte explain { sql("""select id from ${ex_tb0} where id = 111;""") - contains "WHERE (`id` = 111)" + contains "WHERE ((`id` = 111))" } qt_ex_tb0_where """select id from ${ex_tb0} where id = 111;""" order_qt_ex_tb0 """ select id, name from ${ex_tb0} order by id; """ diff --git a/regression-test/suites/external_table_p0/jdbc/test_oracle_jdbc_catalog.groovy b/regression-test/suites/external_table_p0/jdbc/test_oracle_jdbc_catalog.groovy index 75ce7175df5..59e4a506d81 100644 --- a/regression-test/suites/external_table_p0/jdbc/test_oracle_jdbc_catalog.groovy +++ b/regression-test/suites/external_table_p0/jdbc/test_oracle_jdbc_catalog.groovy @@ -137,7 +137,7 @@ suite("test_oracle_jdbc_catalog", "p0,external,oracle,external_docker,external_d // test nvl explain { sql("SELECT * FROM STUDENT WHERE nvl(score, 0) < 95;") - contains """SELECT "ID", "NAME", "AGE", "SCORE" FROM "DORIS_TEST"."STUDENT" WHERE (nvl("SCORE", 0.0) < 95.0)""" + contains """SELECT "ID", "NAME", "AGE", "SCORE" FROM "DORIS_TEST"."STUDENT" WHERE ((nvl("SCORE", 0.0) < 95.0))""" } // for old planner diff --git a/regression-test/suites/mv_p0/ut/testAggQueryOnAggMV1/testAggQueryOnAggMV1.groovy b/regression-test/suites/mv_p0/ut/testAggQueryOnAggMV1/testAggQueryOnAggMV1.groovy index 044b92425ec..1b7bc10a39c 100644 --- a/regression-test/suites/mv_p0/ut/testAggQueryOnAggMV1/testAggQueryOnAggMV1.groovy +++ b/regression-test/suites/mv_p0/ut/testAggQueryOnAggMV1/testAggQueryOnAggMV1.groovy @@ -38,6 +38,8 @@ suite ("testAggQueryOnAggMV1") { createMV("create materialized view emps_mv as select deptno, sum(salary), max(commission) from emps group by deptno ;") + createMV("create materialized view emps_mv_count_key as select deptno, count(deptno) from emps group by deptno;") + createMV("create materialized view emps_mv_if as select deptno, sum(if(empid = 1, empid, salary)) from emps group by deptno;") sql """insert into emps values("2020-01-01",1,"a",1,1,1);""" @@ -59,4 +61,16 @@ suite ("testAggQueryOnAggMV1") { contains "(emps_mv)" } qt_select_mv "select sum(salary) as salary from emps;" + + explain { + sql("select deptno, count(deptno) from emps group by deptno order by deptno;") + contains "(emps_mv_count_key)" + } + qt_select_mv "select deptno, count(deptno) from emps group by deptno order by deptno;" + + explain { + sql("select deptno, sum(if(empid = 1, empid, salary)) from emps group by deptno;") + contains "(emps_mv_if)" + } + qt_select_mv "select deptno, sum(if(empid = 1, empid, salary)) from emps group by deptno order by deptno;" } \ No newline at end of file diff --git a/regression-test/suites/nereids_p0/infer_predicate/infer_predicate.groovy b/regression-test/suites/nereids_p0/infer_predicate/infer_predicate.groovy index 55645ed8ea0..afa32371937 100644 --- a/regression-test/suites/nereids_p0/infer_predicate/infer_predicate.groovy +++ b/regression-test/suites/nereids_p0/infer_predicate/infer_predicate.groovy @@ -31,28 +31,28 @@ suite("test_infer_predicate") { explain { sql "select * from infer_tb1 inner join infer_tb2 where infer_tb2.k1 = infer_tb1.k2 and infer_tb2.k1 = 1;" - contains "PREDICATES: k2" + contains "PREDICATES: (k2" } explain { sql "select * from infer_tb1 inner join infer_tb2 where infer_tb1.k2 = infer_tb2.k1 and infer_tb2.k1 = 1;" - contains "PREDICATES: k2" + contains "PREDICATES: (k2" } explain { sql "select * from infer_tb1 inner join infer_tb2 where cast(infer_tb2.k4 as int) = infer_tb1.k2 and infer_tb2.k4 = 1;" - contains "PREDICATES: CAST(k2" + contains "PREDICATES: (CAST(k2" } explain { sql "select * from infer_tb1 inner join infer_tb3 where infer_tb3.k1 = infer_tb1.k2 and infer_tb3.k1 = '123';" - notContains "PREDICATES: k2" + notContains "PREDICATES: (k2" } explain { sql "select * from infer_tb1 left join infer_tb2 on infer_tb1.k1 = infer_tb2.k3 left join infer_tb3 on " + "infer_tb2.k3 = infer_tb3.k2 where infer_tb1.k1 = 1;" - contains "PREDICATES: k3" - contains "PREDICATES: k2" + contains "PREDICATES: (k3" + contains "PREDICATES: (k2" } } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org