You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@hive.apache.org by "ASF GitHub Bot (Jira)" <ji...@apache.org> on 2023/01/15 00:22:00 UTC

[jira] [Work logged] (HIVE-26733) Not safe to use '=' for predicates on constant expressions that might be NULL

     [ 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 dev@hive.apache.org 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)