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

Drew Schmitt commented on CALCITE-3987:
---------------------------------------

Thanks Julian. I like the idea of going with the conformance approach. However, 
I'm having difficulty figuring out how to make that work.

It looks like the SqlStdOperatorTable.PLUS operator is being assigned during 
parsing here:
https://github.com/apache/calcite/blob/master/core/src/main/codegen/templates/Parser.jj#L6652

which is using the OperandTypes.PLUS_OPERATOR operand type checker here:
https://github.com/apache/calcite/blob/master/core/src/main/java/org/apache/calcite/sql/fun/SqlStdOperatorTable.java#L542

So, my initial thought was to add something like DATE_NUMERIC and NUMERIC_DATE 
to the PLUS_OPERATOR here:
https://github.com/apache/calcite/blob/master/core/src/main/java/org/apache/calcite/sql/type/OperandTypes.java#L478

If we want to only enable this functionality for certain conformance values 
(e.g. SqlConformanceEnum.BABEL), is the recommended approach to edit Parser.jj 
to conditionally return a different operator at parsing time (instead of 
SqlStdOperatorTable.PLUS) which supports numeric and date operands? Or is there 
a way to replace/overload the PLUS operator with our own custom one that 
supports numeric and date operands during the validation stage?

I came across OracleSqlOperatorTable, which looked like a promising model to 
follow for a new class which extends ReflectiveSqlOperatorTable to support our 
new PLUS operator. However, that appears to be deprecated.

Any recommendations would be greatly appreciated!

> Allow addition and subtraction operations between DATE and NUMERIC types.
> -------------------------------------------------------------------------
>
>                 Key: CALCITE-3987
>                 URL: https://issues.apache.org/jira/browse/CALCITE-3987
>             Project: Calcite
>          Issue Type: Improvement
>            Reporter: Drew Schmitt
>            Priority: Minor
>
> We should allow addition (PLUS operator) and subtraction (MINUS operator) 
> between DATE and NUMERIC types to be valid during the validation phase.
> Downstream, the result of the operation can be interpreted differently 
> depending on the dialect. For example, some dialects would interpret any 
> arithmetic with a DATE as implying adding/subtracting a number of days.
> Example query:
> CREATE TABLE foo (bar DATE);
> SELECT bar - 1 FROM foo;



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to