Is this also for varchar ?

Le lun. 20 juil. 2015 à 1:14, Thomas Friedrich (JIRA) <[email protected]> a
écrit :

> Thomas Friedrich created HIVE-11312:
> ---------------------------------------
>
>              Summary: ORC format: where clause with CHAR data type not
> returning any rows
>                  Key: HIVE-11312
>                  URL: https://issues.apache.org/jira/browse/HIVE-11312
>              Project: Hive
>           Issue Type: Bug
>           Components: Query Processor
>     Affects Versions: 1.2.0, 1.2.1
>             Reporter: Thomas Friedrich
>             Assignee: Thomas Friedrich
>
>
> Test case:
> Setup:
> create table orc_test( col1 string, col2 char(10)) stored as orc
> tblproperties ("orc.compress"="NONE");
> insert into orc_test values ('val1', '1');
> Query:
> select * from orc_test where col2='1';
>
> Query returns no row.
>
> Problem is introduced with HIVE-10286, class RecordReaderImpl.java, method
> evaluatePredicateRange.
> Old code:
> - Object baseObj = predicate.getLiteral(PredicateLeaf.FileFormat.ORC);
> - Object minValue = getConvertedStatsObj(min, baseObj);
> - Object maxValue = getConvertedStatsObj(max, baseObj);
> - Object predObj = getBaseObjectForComparison(baseObj, minValue);
>
> New code:
> + Object baseObj = predicate.getLiteral();
> + Object minValue = getBaseObjectForComparison(predicate.getType(), min);
> + Object maxValue = getBaseObjectForComparison(predicate.getType(), max);
> + Object predObj = getBaseObjectForComparison(predicate.getType(),
> baseObj);
>
> The values for min and max are of type String which contain as many
> characters as the CHAR column indicated. For example if the type is
> CHAR(10), and the row has value 1, the value of String min is "1         ";
>
> Before Hive 1.2, the method getConvertedStatsObj would call
> StringUtils.stripEnd(statsObj.toString(), null); which would remove the
> trailing spaces from min and max. Later in the compareToRange method, it
> was able to compare "1" with "1".
>
> In Hive 1.2 with the use getBaseObjectForComparison method, it simply
> returns obj.String if the data type is String, which means minValue and
> maxValue are still "1         ".
> As a result, the compareToRange method will return a wrong value
> ("1".compareTo("1         ")  -9 instead of 0.
>
>
>
> --
> This message was sent by Atlassian JIRA
> (v6.3.4#6332)
>

Reply via email to