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

Stamatis Zampetakis commented on CALCITE-7264:
----------------------------------------------

I was convinced that the existing {{SqlOperator#isSafeOperator}} introduced by 
CALCITE-7032 was sufficient for making the behavior in simplifier configurable. 
Why do need additional APIs?

> New API for determining if an operator may throw
> ------------------------------------------------
>
>                 Key: CALCITE-7264
>                 URL: https://issues.apache.org/jira/browse/CALCITE-7264
>             Project: Calcite
>          Issue Type: New Feature
>            Reporter: Thomas Rebele
>            Priority: Major
>
> The SQL standard defines that 1/0 throws an exception. Calcite follows the 
> standard here. However, some projects that use Calcite (e.g., Hive) define 
> the result of 1/0 as NULL. This may lead to different results in RexSimplify: 
> E.g., IS NULL(1/0) would throw for the SQL standard semantics, but would 
> return TRUE for the Hive semantics.
> RexSimplify handles this with a concept called "safe" defined in 
> [RexSimplify#isSafeExpression|https://github.com/apache/calcite/blob/34989b0ed7793cedf713c2f159de6247a730458c/core/src/main/java/org/apache/calcite/rex/RexSimplify.java#L1631].
>  The safe operators are defined in 
> [RexSimplify.SafeRexVisitor|https://github.com/apache/calcite/blob/34989b0ed7793cedf713c2f159de6247a730458c/core/src/main/java/org/apache/calcite/rex/RexSimplify.java#L1490].
>  The goal of this ticket is to make the behavior configurable. We can 
> continue to attach the safeness to the operators, so we could move the 
> safeOps set somewhere else. Here some examples:
>  * boolean RelDataTypeSystem#canOperatorThrow(SqlKind op)
>  * boolean RelDataTypeSystem#canOperatorThrow(SqlOperator op)
>  * boolean RelDataTypeSystem#isNoExceptOperator(...) //noexcept notion 
> borrowed from C++
>  * boolean RelDataTypeSystem#isSafeOperator
>  * Set<SqlKind> RelDataTypeSystem#noexceptOperators()
> The safeness information would be useful for other parts of the code as well, 
> e.g., CALCITE-5315.
> See the related discussions:
>  * 
> https://issues.apache.org/jira/browse/CALCITE-7145?focusedCommentId=18016030#comment-18016030
>  * [http://lists.apache.org/thread/cp7h28k1yfxv421q12y1wopbwgrzdzrx]



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

Reply via email to