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

Stamatis Zampetakis commented on HIVE-25952:
--------------------------------------------

Regarding the isConstant logic, my previous comment claiming that Hive is 
incomplete/wrong is not correct.
{quote}In Hive the check is incomplete/wrong cause the last argument of the 
call determines the result, while in Calcite all call arguments must be 
constants.
{quote}
The code between Calcite and Hive is slightly different but both will verify 
that all arguments are constants/literals.

All in all, it seems that we can safely use the isConstant logic present in 
Calcite and drop the respective code from Hive. The differences in handling 
DynamicParameter and FieldAccess are insignificant. DynamicParameters are not 
extensively used in Hive and FieldAccess is rather rare (or impossible) to lead 
to a literal.

> Drop HiveRelMdPredicates::getPredicates(Project...) to use that of 
> RelMdPredicates
> ----------------------------------------------------------------------------------
>
>                 Key: HIVE-25952
>                 URL: https://issues.apache.org/jira/browse/HIVE-25952
>             Project: Hive
>          Issue Type: Sub-task
>          Components: CBO
>    Affects Versions: 4.0.0
>            Reporter: Alessandro Solimando
>            Assignee: Alessandro Solimando
>            Priority: Major
>              Labels: pull-request-available
>         Attachments: 6061-plan-changes.txt
>
>          Time Spent: 1h 20m
>  Remaining Estimate: 0h
>
> There are some differences on this method between Hive and Calcite, the idea 
> of this ticket is to unify the two methods, and then drop the override in 
> HiveRelMdPredicates in favour of the method of RelMdPredicates.
> After applying HIVE-25966, the only difference is in the test for constant 
> expressions, which can be summarized as follows:
> ||Expression Type|Is Constant for Hive?||Is Constant for Calcite?||
> |InputRef|False|False|
> |Call|True if function is deterministic (arguments are not checked), false 
> otherwise|True if function is deterministic and all operands are constants, 
> false otherwise|
> |CorrelatedVariable|False|False|
> |LocalRef|False|False|
> |Over|False|False|
> |DymanicParameter|False|True|
> |RangeRef|False|False|
> |FieldAccess|False|Given expr.field, true if expr is constant, false 
> otherwise|



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

Reply via email to