[
https://issues.apache.org/jira/browse/HIVE-26733?focusedWorklogId=839250&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-839250
]
ASF GitHub Bot logged work on HIVE-26733:
-----------------------------------------
Author: ASF GitHub Bot
Created on: 15/Jan/23 00:21
Start Date: 15/Jan/23 00:21
Worklog Time Spent: 10m
Work Description: github-actions[bot] commented on PR #3757:
URL: https://github.com/apache/hive/pull/3757#issuecomment-1382978798
This pull request has been automatically marked as stale because it has not
had recent activity. It will be closed if no further activity occurs.
Feel free to reach out on the [email protected] list if the patch is in
need of reviews.
Issue Time Tracking
-------------------
Worklog Id: (was: 839250)
Time Spent: 1h 10m (was: 1h)
> Not safe to use '=' for predicates on constant expressions that might be NULL
> -----------------------------------------------------------------------------
>
> Key: HIVE-26733
> URL: https://issues.apache.org/jira/browse/HIVE-26733
> Project: Hive
> Issue Type: Bug
> Components: CBO
> Affects Versions: 4.0.0-alpha-1
> Reporter: Alessandro Solimando
> Assignee: Alessandro Solimando
> Priority: Major
> Labels: pull-request-available
> Time Spent: 1h 10m
> Remaining Estimate: 0h
>
> HiveRelMdPredicates was forked from Calcite's RelMdPredicates long time ago.
> Hive's version lacks this commit
> [https://github.com/apache/calcite/commit/8281668f] which introduced the use
> of "IS NOT DISTINCT FROM" in place of "EQUAL" when a constant expression can
> be NULL.
> There is no Calcite ticket for this change, so I am briefly explaining the
> issue here.
> Consider the following input as argument of
> HiveRelMdPredicates::pullUpPredicates(Project) method:
> {code:java}
> SELECT char_length(NULL) FROM t{code}
> The method currently infers the predicate (=($0, CHAR_LENGTH(null:NULL)))
> which translates to "=(NULL, NULL)", which turns simplifies to FALSE under
> the unknownAsFalse semantics.
> The change will make this methods return "IS NOT DISTINCT FROM($0,
> CHAR_LENGTH(null:NULL))", which translates to IS NOT DISTINCT FROM(NULL,
> NULL), which is TRUE.
> For reference, we have the truth table below (from [1]):
> ||{{A}}||{{B}}||{{A = B}}||{{A IS NOT DISTINCT FROM B}}||
> |{{0}}|{{0}}|_true_|_true_|
> |{{0}}|{{1}}|_false_|_false_|
> |{{0}}|{{null}}|_*unknown*_|_*false*_|
> |{{null}}|{{null}}|_*unknown*_|_*true*_|
> [1] https://modern-sql.com/feature/is-distinct-from
--
This message was sent by Atlassian Jira
(v8.20.10#820010)