[
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)