LakeShen commented on code in PR #3316:
URL: https://github.com/apache/calcite/pull/3316#discussion_r1278577508
##########
core/src/test/java/org/apache/calcite/rex/RexProgramTest.java:
##########
@@ -801,6 +808,40 @@ private void checkExponentialCnf(int n) {
and(eRef,
or(fRef,
and(gRef, or(trueLiteral, falseLiteral)))))))));
+
+ // In order to test the pullFactors RexNode operands in deterministic order
+ checkPullFactors(
+ or(
+ and(eq(aRef, bRef), eq(jRef, literal("Brand#12")), ge(hRef,
literal(1)),
+ le(hRef, literal(11)), cRef, rexBuilder.makeIn(
+ iRef, ImmutableList.of(literal("AIR"), literal("AIR
REG"))),
+ rexBuilder.makeIn(
+ kRef, ImmutableList.of(literal("SM BOX"),
+ literal("SM CASE"), literal("SM PACK"), literal("SM
PKG")))),
+
+ and(eq(aRef, bRef), eq(jRef, literal("Brand#13")), ge(hRef,
literal(10)),
+ le(hRef, literal(20)), cRef, rexBuilder.makeIn(
+ iRef, ImmutableList.of(literal("AIR"), literal("AIR
REG"))),
+ rexBuilder.makeIn(
+ kRef, ImmutableList.of(literal("MED BOX"),
+ literal("MED CASE"), literal("MED PACK"), literal("MED
PKG")))),
+
+ and(eq(aRef, bRef), eq(jRef, literal("Brand#14")), ge(hRef,
literal(20)),
+ le(hRef, literal(30)), cRef, rexBuilder.makeIn(
+ iRef, ImmutableList.of(literal("AIR"), literal("AIR
REG"))),
+ rexBuilder.makeIn(
+ kRef, ImmutableList.of(literal("LG BOX"),
+ literal("LG CASE"), literal("LG PACK"), literal("LG
PKG"))))),
+
+ "AND(=(?0.a, ?0.b), ?0.c, "
+ + "SEARCH(?0.i, Sarg['AIR':CHAR(7), 'AIR REG']:CHAR(7)), "
+ + "OR(AND(=(?0.j, 'Brand#12'), >=(?0.h, 1), <=(?0.h, 11),"
Review Comment:
> The PR looks good.
>
> @LakeShen I have a small question. If it's out of order, what might it
look like?
Hi @JiajunBernoulli ,thank you very much for reviewing my pr.
Let me explain this using tpc-h q19.
Sometimes the sql plan is :
```sql
LogicalAggregate(group=[{}], revenue=[SUM($0)])
LogicalProject($f0=[*($5, -(1, $6))])
LogicalFilter(condition=[AND(=($16, $1), SEARCH($14, Sarg['AIR':CHAR(7),
'AIR REG']:CHAR(7)), =($13, 'DELIVER IN PERSON'), OR(AND(=($19, 'Brand#12'),
SEARCH($22, Sarg['SM BOX':CHAR(7), 'SM CASE', 'SM PACK', 'SM
PKG':CHAR(7)]:CHAR(7)), >=($4, 1), <=($4, +(1, 10)), SEARCH($21,
Sarg[[1..5]])), AND(=($19, 'Brand#23'), SEARCH($22, Sarg['MED BAG':CHAR(8),
'MED BOX':CHAR(8), 'MED PACK', 'MED PKG':CHAR(8)]:CHAR(8)), >=($4, 10), <=($4,
+(10, 10)), SEARCH($21, Sarg[[1..10]])), AND(=($19, 'Brand#34'), SEARCH($22,
Sarg['LG BOX':CHAR(7), 'LG CASE', 'LG PACK', 'LG PKG':CHAR(7)]:CHAR(7)), >=($4,
20), <=($4, +(20, 10)), SEARCH($21, Sarg[[1..15]]))))])
LogicalJoin(condition=[true], joinType=[inner])
LogicalTableScan(table=[[tpch, LINEITEM]])
LogicalTableScan(table=[[tpch, PART]])
```
Sometimes the sql plan is :
```sql
LogicalAggregate(group=[{}], revenue=[SUM($0)])
LogicalProject($f0=[*($5, -(1, $6))])
LogicalFilter(condition=[AND(=($16, $1), =($13, 'DELIVER IN PERSON'),
SEARCH($14, Sarg['AIR':CHAR(7), 'AIR REG']:CHAR(7)), OR(AND(=($19, 'Brand#12'),
SEARCH($22, Sarg['SM BOX':CHAR(7), 'SM CASE', 'SM PACK', 'SM
PKG':CHAR(7)]:CHAR(7)), >=($4, 1), <=($4, +(1, 10)), SEARCH($21,
Sarg[[1..5]])), AND(=($19, 'Brand#23'), SEARCH($22, Sarg['MED BAG':CHAR(8),
'MED BOX':CHAR(8), 'MED PACK', 'MED PKG':CHAR(8)]:CHAR(8)), >=($4, 10), <=($4,
+(10, 10)), SEARCH($21, Sarg[[1..10]])), AND(=($19, 'Brand#34'), SEARCH($22,
Sarg['LG BOX':CHAR(7), 'LG CASE', 'LG PACK', 'LG PKG':CHAR(7)]:CHAR(7)), >=($4,
20), <=($4, +(20, 10)), SEARCH($21, Sarg[[1..15]]))))])
LogicalJoin(condition=[true], joinType=[inner])
LogicalTableScan(table=[[tpch, LINEITEM]])
LogicalTableScan(table=[[tpch, PART]])
```
Although the content of the conditions in the calcite single test and the
tpch q19 conditions above were not 100% identical in text, the overall
conditions were in the same format.
This has no effect on the SQL execution results, but it is difficult for me
to monitor my plan because of the variability of the plan.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]