Steve Carlin created CALCITE-6122:
-------------------------------------

             Summary: In SqlToRelConverter, AggConverter doesn't use coerced 
SqlNodes
                 Key: CALCITE-6122
                 URL: https://issues.apache.org/jira/browse/CALCITE-6122
             Project: Calcite
          Issue Type: Bug
          Components: core
    Affects Versions: 1.36.0
            Reporter: Steve Carlin


I hope I'm describing this right.

I'm coercing an operand in my handmade OperandTypeChecker. Specifically, I'm 
changing a {color:#de350b}SUM(tinyint_col){color} to a 
{color:#de350b}SUM(CAST(tinyint_col as BIGINT)){color} because my database can 
only handle a bigint operand.

The eventual logical plan does not keep the CAST operand.

I had this problem in 1.34.0.  I noticed that the code changed quite a bit 
going up to 1.36.0, so I say this to mention that this is not a regression.

I hacked a fix in my environment, but it's too hacky to commit.  To fix the 
problem, I changed to the following code in SqlToRelConverter.convertAgg():



 
{code:java}
@@ -3369,7 +3372,11 @@ protected void convertAgg(Blackboard bb, SqlSelect 
select,
     final AggConverter aggConverter =
         AggConverter.create(bb,
             (AggregatingSelectScope) validator().getSelectScope(select));
-    createAggImpl(bb, aggConverter, selectList, groupList, having,
+    selectList.accept(aggConverter);
+    final AggConverter aggConverter2 =
+        AggConverter.create(bb,
+            (AggregatingSelectScope) validator().getSelectScope(select));
+    createAggImpl(bb, aggConverter2, selectList, groupList, having,
         orderExprList);
   }
{code}
Note that I had the selectList go through the aggConverter visitor.  After 
this, the selectList contains the coerced operands.  If the aggConverter is 
created based on this new selectList, it will contain the proper information in 
the aggConverter.convertedInputExprs list

(One other note: There is an assertion in createAggImpl that i had to disable 
in order to get this hack to work where it checks that bb.agg == null)

I can probably work on this, but I'm not sure how to create a proper test for 
it, as I've never committed anything to Calcite before.

 



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to