xuzifu666 commented on code in PR #4371:
URL: https://github.com/apache/calcite/pull/4371#discussion_r2097803937
##########
core/src/test/java/org/apache/calcite/test/RelOptRulesTest.java:
##########
@@ -354,6 +354,72 @@ private static boolean skipItem(RexNode expr) {
.check();
}
+ /** Test case for
+ * <a
href="https://issues.apache.org/jira/browse/CALCITE-6887">[CALCITE-6887]
+ * ReduceExpressionsRule applied to 'IN subquery' should make the values
distinct
+ * if the subquery is a constant Values</a>. */
+ @Test void testAggregateValuesRuleWithInRepeatingValues() {
+ final String sql = "SELECT deptno, sal "
+ + "FROM EMP "
+ + "WHERE deptno IN (1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1)";
+ sql(sql)
+ .withPreRule(CoreRules.FILTER_SUB_QUERY_TO_CORRELATE)
+ .withRule(CoreRules.AGGREGATE_VALUES_REDUCE)
+ .check();
+ }
+
+ @Test void testReduceInValuesWithNonOrder() {
+ final String sql = "SELECT deptno, sal "
+ + "FROM EMP "
+ + "WHERE deptno IN (1,1,3,1,2)";
+
+ sql(sql)
+ .withPreRule(CoreRules.FILTER_SUB_QUERY_TO_CORRELATE)
+ .withRule(CoreRules.AGGREGATE_VALUES_REDUCE)
+ .checkUnchanged();
+ }
+
+ @Test void testAggregateValuesRuleWithRepeatingValues() {
+ final Function<RelBuilder, RelNode> relFn = b -> b
+ .values(new String[]{"v"}, 1, 1, 3, null, null)
+ .distinct()
+ .build();
+ relFn(relFn)
+ .withRule(CoreRules.AGGREGATE_VALUES_REDUCE)
+ .check();
+ }
+
+ @Test void testAggregateValuesRuleWithAggCall() {
Review Comment:
Done
##########
core/src/test/java/org/apache/calcite/test/RelOptRulesTest.java:
##########
@@ -354,6 +354,72 @@ private static boolean skipItem(RexNode expr) {
.check();
}
+ /** Test case for
+ * <a
href="https://issues.apache.org/jira/browse/CALCITE-6887">[CALCITE-6887]
+ * ReduceExpressionsRule applied to 'IN subquery' should make the values
distinct
+ * if the subquery is a constant Values</a>. */
+ @Test void testAggregateValuesRuleWithInRepeatingValues() {
+ final String sql = "SELECT deptno, sal "
+ + "FROM EMP "
+ + "WHERE deptno IN (1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1)";
+ sql(sql)
+ .withPreRule(CoreRules.FILTER_SUB_QUERY_TO_CORRELATE)
+ .withRule(CoreRules.AGGREGATE_VALUES_REDUCE)
+ .check();
+ }
+
+ @Test void testReduceInValuesWithNonOrder() {
+ final String sql = "SELECT deptno, sal "
+ + "FROM EMP "
+ + "WHERE deptno IN (1,1,3,1,2)";
+
+ sql(sql)
+ .withPreRule(CoreRules.FILTER_SUB_QUERY_TO_CORRELATE)
+ .withRule(CoreRules.AGGREGATE_VALUES_REDUCE)
+ .checkUnchanged();
+ }
+
+ @Test void testAggregateValuesRuleWithRepeatingValues() {
+ final Function<RelBuilder, RelNode> relFn = b -> b
+ .values(new String[]{"v"}, 1, 1, 3, null, null)
+ .distinct()
+ .build();
+ relFn(relFn)
+ .withRule(CoreRules.AGGREGATE_VALUES_REDUCE)
+ .check();
+ }
+
+ @Test void testAggregateValuesRuleWithAggCall() {
+ final Function<RelBuilder, RelNode> relFn = b -> b
+ .values(new String[]{"v1", "v2"}, 1, "a", 2, "b", 1, "a", 1, "b")
+ .aggregate(b.groupKey(ImmutableBitSet.of(0, 1)),
+ b.count(b.field(0)).as("V1_COUNT"))
+ .build();
+ relFn(relFn)
+ .withRule(CoreRules.AGGREGATE_VALUES_REDUCE)
+ .checkUnchanged();
+ }
+
+ @Test void testAggregateValuesRuleWithSameRowType() {
+ final Function<RelBuilder, RelNode> relFn = b -> b
+ .values(new String[]{"v1", "v2"}, 1, "a", 2, "b", 1, "a", 1, "b")
+ .aggregate(b.groupKey(ImmutableBitSet.of(0, 1)))
+ .build();
+ relFn(relFn)
+ .withRule(CoreRules.AGGREGATE_VALUES_REDUCE)
+ .check();
+ }
+
+ @Test void testAggregateValuesRuleWithDifferentRowType() {
Review Comment:
Done
##########
core/src/test/java/org/apache/calcite/test/RelOptRulesTest.java:
##########
@@ -354,6 +354,72 @@ private static boolean skipItem(RexNode expr) {
.check();
}
+ /** Test case for
+ * <a
href="https://issues.apache.org/jira/browse/CALCITE-6887">[CALCITE-6887]
+ * ReduceExpressionsRule applied to 'IN subquery' should make the values
distinct
+ * if the subquery is a constant Values</a>. */
+ @Test void testAggregateValuesRuleWithInRepeatingValues() {
+ final String sql = "SELECT deptno, sal "
+ + "FROM EMP "
+ + "WHERE deptno IN (1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1)";
+ sql(sql)
+ .withPreRule(CoreRules.FILTER_SUB_QUERY_TO_CORRELATE)
+ .withRule(CoreRules.AGGREGATE_VALUES_REDUCE)
+ .check();
+ }
+
+ @Test void testReduceInValuesWithNonOrder() {
+ final String sql = "SELECT deptno, sal "
+ + "FROM EMP "
+ + "WHERE deptno IN (1,1,3,1,2)";
+
+ sql(sql)
+ .withPreRule(CoreRules.FILTER_SUB_QUERY_TO_CORRELATE)
+ .withRule(CoreRules.AGGREGATE_VALUES_REDUCE)
+ .checkUnchanged();
+ }
+
+ @Test void testAggregateValuesRuleWithRepeatingValues() {
+ final Function<RelBuilder, RelNode> relFn = b -> b
+ .values(new String[]{"v"}, 1, 1, 3, null, null)
+ .distinct()
+ .build();
+ relFn(relFn)
+ .withRule(CoreRules.AGGREGATE_VALUES_REDUCE)
+ .check();
+ }
+
+ @Test void testAggregateValuesRuleWithAggCall() {
+ final Function<RelBuilder, RelNode> relFn = b -> b
+ .values(new String[]{"v1", "v2"}, 1, "a", 2, "b", 1, "a", 1, "b")
+ .aggregate(b.groupKey(ImmutableBitSet.of(0, 1)),
+ b.count(b.field(0)).as("V1_COUNT"))
+ .build();
+ relFn(relFn)
+ .withRule(CoreRules.AGGREGATE_VALUES_REDUCE)
+ .checkUnchanged();
+ }
+
+ @Test void testAggregateValuesRuleWithSameRowType() {
+ final Function<RelBuilder, RelNode> relFn = b -> b
+ .values(new String[]{"v1", "v2"}, 1, "a", 2, "b", 1, "a", 1, "b")
+ .aggregate(b.groupKey(ImmutableBitSet.of(0, 1)))
+ .build();
+ relFn(relFn)
+ .withRule(CoreRules.AGGREGATE_VALUES_REDUCE)
+ .check();
+ }
+
+ @Test void testAggregateValuesRuleWithDifferentRowType() {
+ final Function<RelBuilder, RelNode> relFn = b -> b
+ .values(new String[]{"v1", "v2"}, 1, "a", 2, "b", 1, "a", 1, "b")
Review Comment:
Done
--
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]