This is an automated email from the ASF dual-hosted git repository.

jhyde pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/calcite.git

commit 357cb741f70f9c9d541dfc77fa0b813ee4dfe959
Author: Vineet Garg <[email protected]>
AuthorDate: Wed Jul 31 15:11:07 2019 -0700

    [CALCITE-3222] Fix code style issues introduced by [CALCITE-3031] (Vineet 
Garg)
    
    Close apache/calcite#1345
---
 .../calcite/rel/rules/SubQueryRemoveRule.java      | 62 ++++++++++++++--------
 1 file changed, 39 insertions(+), 23 deletions(-)

diff --git 
a/core/src/main/java/org/apache/calcite/rel/rules/SubQueryRemoveRule.java 
b/core/src/main/java/org/apache/calcite/rel/rules/SubQueryRemoveRule.java
index 3763d19..eb1ae08 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/SubQueryRemoveRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/SubQueryRemoveRule.java
@@ -39,6 +39,7 @@ import org.apache.calcite.rex.RexUtil;
 import org.apache.calcite.sql.SqlKind;
 import org.apache.calcite.sql.fun.SqlQuantifyOperator;
 import org.apache.calcite.sql.fun.SqlStdOperatorTable;
+import org.apache.calcite.sql.type.SqlTypeName;
 import org.apache.calcite.sql2rel.RelDecorrelator;
 import org.apache.calcite.tools.RelBuilder;
 import org.apache.calcite.tools.RelBuilderFactory;
@@ -167,6 +168,9 @@ public abstract class SubQueryRemoveRule extends RelOptRule 
{
         || op == SqlStdOperatorTable.SOME_LT || op == 
SqlStdOperatorTable.SOME_GT;
 
     RexNode caseRexNode = null;
+    boolean useMin = op.comparisonKind == SqlKind.GREATER_THAN
+        || op.comparisonKind == SqlKind.GREATER_THAN_OR_EQUAL;
+
     if (variablesSet.isEmpty()) {
       // for non-correlated case queries such as
       // select e.deptno, e.deptno < some (select deptno from emp) as v
@@ -185,20 +189,27 @@ public abstract class SubQueryRemoveRule extends 
RelOptRule {
       // cross join (
       //   select max(deptno) as m, count(*) as c, count(deptno) as d
       //   from emp) as q
-      builder.push(e.rel).aggregate(builder.groupKey(), op.comparisonKind == 
SqlKind.GREATER_THAN
-              || op.comparisonKind == SqlKind.GREATER_THAN_OR_EQUAL ? builder
-              .min("m", builder.field(0)) : builder.max("m", builder.field(0)),
-          builder.count(false, "c"), builder.count(false, "d", 
builder.field(0))).as("q")
+      builder.push(e.rel).
+          aggregate(builder.groupKey(),
+              useMin ? builder.min("m", builder.field(0))
+                  : builder.max("m", builder.field(0)),
+              builder.count(false, "c"),
+              builder.count(false, "d", builder.field(0)))
+          .as("q")
           .join(JoinRelType.INNER);
       caseRexNode = builder.call(SqlStdOperatorTable.CASE,
-          builder.call(SqlStdOperatorTable.EQUALS, builder.field("q", "c"), 
builder.literal(0)),
-          builder.literal(false), builder.call(SqlStdOperatorTable.IS_TRUE, 
builder
-              .call(RelOptUtil.op(op.comparisonKind, null), e.operands.get(0),
-                  builder.field("q", "m"))), builder.literal(true), builder
-              .call(SqlStdOperatorTable.GREATER_THAN, builder.field("q", "c"),
+          builder.call(SqlStdOperatorTable.EQUALS, builder.field("q", "c"),
+              builder.literal(0)),
+          builder.literal(false),
+          builder.call(SqlStdOperatorTable.IS_TRUE,
+              builder.call(RelOptUtil.op(op.comparisonKind, null), 
e.operands.get(0),
+                  builder.field("q", "m"))),
+          builder.literal(true),
+          builder.call(SqlStdOperatorTable.GREATER_THAN, builder.field("q", 
"c"),
                   builder.field("q", "d")),
-          builder.getRexBuilder().constantNull(), builder
-              .call(RelOptUtil.op(op.comparisonKind, null), e.operands.get(0),
+          e.rel.getCluster().getRexBuilder().makeNullLiteral(
+              builder.getTypeFactory().createSqlType(SqlTypeName.BOOLEAN)),
+          builder.call(RelOptUtil.op(op.comparisonKind, null), 
e.operands.get(0),
                   builder.field("q", "m")));
     } else {
       // for correlated case queries such as
@@ -219,11 +230,12 @@ public abstract class SubQueryRemoveRule extends 
RelOptRule {
       // left outer join (
       //   select max(deptno) as m, count(*) as c, count(deptno) as d, 
"alwaysTrue" as indicator
       //   group by name from emp) as q on e.name = q.name
-      builder.push(e.rel);
-      builder.aggregate(builder.groupKey(), op.comparisonKind == 
SqlKind.GREATER_THAN
-              || op.comparisonKind == SqlKind.GREATER_THAN_OR_EQUAL ? builder
-              .min("m", builder.field(0)) : builder.max("m", builder.field(0)),
-          builder.count(false, "c"), builder.count(false, "d", 
builder.field(0)));
+      builder.push(e.rel)
+          .aggregate(builder.groupKey(),
+              useMin ? builder.min("m", builder.field(0))
+                  : builder.max("m", builder.field(0)),
+              builder.count(false, "c"),
+              builder.count(false, "d", builder.field(0)));
 
       final List<RexNode> parentQueryFields = new ArrayList<>();
       parentQueryFields.addAll(builder.fields());
@@ -234,14 +246,18 @@ public abstract class SubQueryRemoveRule extends 
RelOptRule {
       caseRexNode = builder.call(SqlStdOperatorTable.CASE,
           builder.call(SqlStdOperatorTable.IS_NULL, builder.field("q", 
indicator)),
           builder.literal(false),
-          builder.call(SqlStdOperatorTable.EQUALS, builder.field("q", "c"), 
builder.literal(0)),
-          builder.literal(false), builder.call(SqlStdOperatorTable.IS_TRUE, 
builder
-              .call(RelOptUtil.op(op.comparisonKind, null), e.operands.get(0),
-                  builder.field("q", "m"))), builder.literal(true), builder
-              .call(SqlStdOperatorTable.GREATER_THAN, builder.field("q", "c"),
+          builder.call(SqlStdOperatorTable.EQUALS, builder.field("q", "c"),
+              builder.literal(0)),
+          builder.literal(false),
+          builder.call(SqlStdOperatorTable.IS_TRUE,
+              builder.call(RelOptUtil.op(op.comparisonKind, null), 
e.operands.get(0),
+                  builder.field("q", "m"))),
+          builder.literal(true),
+          builder.call(SqlStdOperatorTable.GREATER_THAN, builder.field("q", 
"c"),
                   builder.field("q", "d")),
-          builder.getRexBuilder().constantNull(), builder
-              .call(RelOptUtil.op(op.comparisonKind, null), e.operands.get(0),
+          e.rel.getCluster().getRexBuilder().makeNullLiteral(
+              builder.getTypeFactory().createSqlType(SqlTypeName.BOOLEAN)),
+          builder.call(RelOptUtil.op(op.comparisonKind, null), 
e.operands.get(0),
                   builder.field("q", "m")));
     }
 

Reply via email to