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