kasakrisz opened a new pull request, #5681:
URL: https://github.com/apache/hive/pull/5681

   <!--
   Thanks for sending a pull request!  Here are some tips for you:
     1. If this is your first time, please read our contributor guidelines: 
https://cwiki.apache.org/confluence/display/Hive/HowToContribute
     2. Ensure that you have created an issue on the Hive project JIRA: 
https://issues.apache.org/jira/projects/HIVE/summary
     3. Ensure you have added or run the appropriate tests for your PR: 
     4. If the PR is unfinished, add '[WIP]' in your PR title, e.g., 
'[WIP]HIVE-XXXXX:  Your PR title ...'.
     5. Be sure to keep the PR description updated to reflect all changes.
     6. Please write your PR title to summarize what this PR proposes.
     7. If possible, provide a concise example to reproduce the issue for a 
faster review.
   
   -->
   
   ### What changes were proposed in this pull request?
   Change the parser rule parses case expression like
   ```
    CASE a
      WHEN b THEN c
      [WHEN d THEN e]* [ELSE f]
    END
   ```
   to
   ```
   CASE
     WHEN a=b THEN c
     [WHEN a=d THEN e]* [ELSE f]
   END
   ```
   to build a similar AST like `whenExpression`.
   
   * Remove `GenericUDFCase` because all type of case expressions are handled 
by `GenericUDFWhen`
   
   ### Why are the changes needed?
   When the operand in the case clause has fixed length char type extra 
trailing spaces are added to literals in the operands of the when branches. The 
current logic always converts the literals in the WHEN branches to the type of 
the expression in the CASE clause.
   
   During the AST conversion, type information is lost, and in the second 
non-CBO compiler phase, these literals are treated as STRING instead of CHAR. 
At execution, the expression in the CASE clause is converted to STRING, and 
during this conversion, whitespace characters are trimmed. As a result, the 
values are never equal to the literals, leading to data corruption.
   
   ### Does this PR introduce _any_ user-facing change?
   Yes. Such queries will return correct results.
   
   ### Is the change a dependency upgrade?
   No
   
   ### How was this patch tested?
   ```
   mvn test -Dtest.output.overwrite -Dtest=TestMiniLlapLocalCliDriver 
-Dqfile=cbo_case_when_type_conversion.q,cbo_case_when_wrong_type.q -pl 
itests/qtest -Pitests
   ```


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: gitbox-unsubscr...@hive.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: gitbox-unsubscr...@hive.apache.org
For additional commands, e-mail: gitbox-h...@hive.apache.org

Reply via email to