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

Sergey Shelukhin commented on HIVE-12473:
-----------------------------------------

The comment is not actually correct, as I realized later; we only receive one 
expression currently, so there's no chance of getting a wrong value.
The reason it does the right thing now is that the top-level expression does 
not need to be cast in general case, Hive already takes care of comparing 
correctly.
What needs to be cast is the partition column string. It needs to be cast to 
argument type of whatever it's passed to. Most of the time the partition column 
is the top-level expression and is passed into UDFCompareBlahBlah, but it's not 
always the case; it's different if it's wrapped in, and passed into, most UDFs 
(e.g. YEAR(date)). The patch changes the code to take the type of the argument, 
instead of taking the type of the top-level expression. 


> DPP: UDFs on the partition column side does not evaluate correctly
> ------------------------------------------------------------------
>
>                 Key: HIVE-12473
>                 URL: https://issues.apache.org/jira/browse/HIVE-12473
>             Project: Hive
>          Issue Type: Bug
>          Components: Tez
>    Affects Versions: 1.3.0, 1.2.1, 2.0.0
>            Reporter: Gopal V
>            Assignee: Sergey Shelukhin
>            Priority: Blocker
>             Fix For: 1.3.0, 2.0.0
>
>         Attachments: HIVE-12473.patch
>
>
> Related to HIVE-12462
> {code}
> select count(1) from accounts a, transactions t where year(a.dt) = year(t.dt) 
> and account_id = 22;
> $hdt$_0:$hdt$_1:a
>   TableScan (TS_2)
>     alias: a
>     filterExpr: (((account_id = 22) and year(dt) is not null) and (year(dt)) 
> IN (RS[6])) (type: boolean)
> {code}
> Ends up being evaluated as {{year(cast(dt as int))}} because the pruner only 
> checks for final type, not the column type.
> {code}
>     ObjectInspector oi =
>         
> PrimitiveObjectInspectorFactory.getPrimitiveWritableObjectInspector(TypeInfoFactory
>             .getPrimitiveTypeInfo(si.fieldInspector.getTypeName()));
>     Converter converter =
>         ObjectInspectorConverters.getConverter(
>             PrimitiveObjectInspectorFactory.javaStringObjectInspector, oi);
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to