[ 
https://issues.apache.org/jira/browse/HIVE-2249?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13194968#comment-13194968
 ] 

Phabricator commented on HIVE-2249:
-----------------------------------

kevinwilfong has commented on the revision "HIVE-2249 [jira] When creating 
constant expression for numbers, try to infer type from another comparison 
operand, instead of trying to use integer first, and then long and double".

INLINE COMMENTS
  ql/src/java/org/apache/hadoop/hive/ql/parse/TypeCheckProcFactory.java:739 I 
agree. Looking at the implementation of ExprNodeGenericFuncDesc.newInstance, 
comparing a string and a bigint will either throw an exception, or display a 
warning depending on configuration settings, but that functionality will be 
lost for the case of comparing a column and a constant if false is returned.

REVISION DETAIL
  https://reviews.facebook.net/D1383

                
> When creating constant expression for numbers, try to infer type from another 
> comparison operand, instead of trying to use integer first, and then long and 
> double
> ------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: HIVE-2249
>                 URL: https://issues.apache.org/jira/browse/HIVE-2249
>             Project: Hive
>          Issue Type: Improvement
>            Reporter: Siying Dong
>            Assignee: Joseph Barillari
>         Attachments: HIVE-2249.1.patch.txt, HIVE-2249.2.patch.txt, 
> HIVE-2249.D1383.1.patch, HIVE-2249.D1383.2.patch
>
>
> The current code to build constant expression for numbers, here is the code:
>      try {
>         v = Double.valueOf(expr.getText());
>         v = Long.valueOf(expr.getText());
>         v = Integer.valueOf(expr.getText());
>       } catch (NumberFormatException e) {
>         // do nothing here, we will throw an exception in the following block
>       }
>       if (v == null) {
>         throw new SemanticException(ErrorMsg.INVALID_NUMERICAL_CONSTANT
>             .getMsg(expr));
>       }
>       return new ExprNodeConstantDesc(v);
> The for the case that "WHERE <BIG_INT_COLUMN> = 0", or "WHERE <DOUBLE_COLUMN> 
> = 0", we always have to do a type conversion when comparing, which is 
> unnecessary if it is slightly smarter to choose type when creating the 
> constant expression. We can simply walk one level up the tree, find another 
> comparison party and use the same type with that one if it is possible. For 
> user's wrong query like '<INT_COLUMN>=1.1', we can even do more.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to