[ 
https://issues.apache.org/jira/browse/CALCITE-6122?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17787606#comment-17787606
 ] 

Steve Carlin commented on CALCITE-6122:
---------------------------------------

Thoughts while I was sleeping on this...

It's possible that I'm "abusing the system" since I'm doing type coercion in my 
own OperandTypeChecker rather than through the TypeCoercion code.  It seems to 
work fine on scalar operations, but this is specific for aggregates.  I did see 
a "select sum(varchar_col) from mytbl" test in the TypeCoercionTest java file, 
so it does seem to be working for some code.

Let me investigate this further.

> 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
>            Priority: Major
>
> 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