> On Oct. 20, 2018, 8:57 p.m., Ashutosh Chauhan wrote:
> > ql/src/test/queries/clientpositive/in_typecheck_pointlook.q
> > Lines 2 (patched)
> > <https://reviews.apache.org/r/69019/diff/2/?file=2101641#file2101641line2>
> >
> >     Any reason for this?

not needed


> On Oct. 20, 2018, 8:57 p.m., Ashutosh Chauhan wrote:
> > ql/src/test/results/clientpositive/in_typecheck_pointlook.q.out
> > Lines 56 (patched)
> > <https://reviews.apache.org/r/69019/diff/2/?file=2101646#file2101646line56>
> >
> >     I expected 'Unknown' should have been char of length 6. Is there a 
> > reason to expand the length to 10?
> >     As I mentioned previously if constant is of smaller length, then it 
> > doesn't make a difference, but is unnecessary, but if constant is of bigger 
> > length then LHS, then char::compare() actually truncates constant, so it 
> > better to create char with original length of constant.

It worked before the other way around; constants are expanded to the target 
type - the addition I've made is that if the constant is longer; then its made 
invalid


> On Oct. 20, 2018, 8:57 p.m., Ashutosh Chauhan wrote:
> > ql/src/test/results/clientpositive/in_typecheck_varchar.q.out
> > Lines 42 (patched)
> > <https://reviews.apache.org/r/69019/diff/2/?file=2101647#file2101647line42>
> >
> >     This is inconsistent. Char and string comparison happens in char. But, 
> > varchar and string comparison happens in String. Was this behavior present 
> > before this patch too?

yes; only char is handled differently


> On Oct. 20, 2018, 8:57 p.m., Ashutosh Chauhan wrote:
> > ql/src/test/results/clientpositive/infer_const_type.q.out
> > Line 145 (original), 145 (patched)
> > <https://reviews.apache.org/r/69019/diff/2/?file=2101648#file2101648line145>
> >
> >     Is 'or null'  because of fl  = 'float' OR
> >       db  = 'double' ? I expected that to become " or false". Though "or 
> > null" will evaluate to same but "or false" is what I would expect.

the appearance of " or null" is because of the TODO fix in UDFOPEquals:

https://github.com/kgyrtkirk/hive/blob/93f5a429fe5eb26f0b720fcef729efebe0549d76/ql/src/java/org/apache/hadoop/hive/ql/parse/TypeCheckProcFactory.java#L1179

I'm not sure why it wasn't removed in this case.

should I change it back and address it later?


> On Oct. 20, 2018, 8:57 p.m., Ashutosh Chauhan wrote:
> > ql/src/test/results/clientpositive/join45.q.out
> > Line 717 (original), 717 (patched)
> > <https://reviews.apache.org/r/69019/diff/2/?file=2101649#file2101649line717>
> >
> >     As discussed this should have been
> >     (struct(cast (_col0 as double), cast(_col2 as double))) IN (const 
> > struct(100.0D,100.0D), const struct(101.0D,101.0D), const 
> > struct(102.0D,102.0D))

* column has type string.
* the IN statement may have the same type for all element in this case it's 
int...
* in this case to change the left hand side to double: it may work


but what should happen in case the IN operands contain 1 int, 1 decimal and 1 
string ?

note: during UDF evaluations there is a Set with all the values; and "contains" 
is used - so if the inferred type is not a numeric: 

I've just checked that even the standard IN doesn't work like this:

```
create table t (a string);

insert into t values ('1'),('x'),('2.0');

select * from t where a in (1.0,'x',2);
1
2.0
-- it doesn't return 'x' because it's casted to double

```

I'm starting to think that it would be better to do this with the IN unwinded 
into ORs: so that we could do the one-on-one constant checks and then 
pointlookupoptimizer might collapse them if the types are the same - in this 
case I think we would not loose 'x' in the above case - and it would also make 
this whole recursive typecheck unneccessary.


- Zoltan


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/69019/#review209827
-----------------------------------------------------------


On Oct. 20, 2018, 7:51 a.m., Zoltan Haindrich wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/69019/
> -----------------------------------------------------------
> 
> (Updated Oct. 20, 2018, 7:51 a.m.)
> 
> 
> Review request for hive, Ashutosh Chauhan and Vineet Garg.
> 
> 
> Bugs: HIVE-20617
>     https://issues.apache.org/jira/browse/HIVE-20617
> 
> 
> Repository: hive-git
> 
> 
> Description
> -------
> 
> For IN expressions the types were never corrected; and pointlookupoptimizer 
> was probably leaving behind fields already which were uncomparable; 
> HIVE-20296 exposed it further by changing the minimal number from  32 to 2.
> 
> This change generalizes the retyping of constants to also run it for the IN 
> operator ; and also for struct-s.
> 
> 
> Diffs
> -----
> 
>   common/src/java/org/apache/hadoop/hive/common/type/HiveChar.java 29dc06dca1 
>   ql/src/java/org/apache/hadoop/hive/ql/ErrorMsg.java e7d71595c7 
>   ql/src/java/org/apache/hadoop/hive/ql/parse/TypeCheckProcFactory.java 
> 4968d16876 
>   ql/src/java/org/apache/hadoop/hive/ql/plan/ExprNodeDescUtils.java 
> c274fd7cc9 
>   ql/src/test/queries/clientpositive/in_typecheck_char.q PRE-CREATION 
>   ql/src/test/queries/clientpositive/in_typecheck_pointlook.q PRE-CREATION 
>   ql/src/test/queries/clientpositive/in_typecheck_varchar.q PRE-CREATION 
>   ql/src/test/results/clientpositive/alter_partition_coltype.q.out f6c3c5642e 
>   ql/src/test/results/clientpositive/in_typecheck2.q.out PRE-CREATION 
>   ql/src/test/results/clientpositive/in_typecheck_char.q.out PRE-CREATION 
>   ql/src/test/results/clientpositive/in_typecheck_pointlook.q.out 
> PRE-CREATION 
>   ql/src/test/results/clientpositive/in_typecheck_varchar.q.out PRE-CREATION 
>   ql/src/test/results/clientpositive/infer_const_type.q.out e1d7de5422 
>   ql/src/test/results/clientpositive/join45.q.out 47aaf7d0ab 
>   ql/src/test/results/clientpositive/join47.q.out 4d9e937815 
>   ql/src/test/results/clientpositive/llap/dec_str.q.out 554031e952 
>   ql/src/test/results/clientpositive/llap/explainuser_1.q.out f240468558 
>   ql/src/test/results/clientpositive/llap/lineage3.q.out cf38816127 
>   ql/src/test/results/clientpositive/llap/vectorization_13.q.out 4ce654f960 
>   ql/src/test/results/clientpositive/llap/vectorization_6.q.out a2f730beca 
>   ql/src/test/results/clientpositive/llap/vectorization_8.q.out 21ce7b8ebd 
>   ql/src/test/results/clientpositive/llap/vectorization_short_regress.q.out 
> 7f1c6a295e 
>   ql/src/test/results/clientpositive/mapjoin47.q.out 294dd69de5 
>   ql/src/test/results/clientpositive/parquet_vectorization_13.q.out 
> 0efce98b55 
>   ql/src/test/results/clientpositive/parquet_vectorization_6.q.out 0bb6888364 
>   ql/src/test/results/clientpositive/parquet_vectorization_8.q.out 957bd7b264 
>   ql/src/test/results/clientpositive/ppd_udf_col.q.out 814fb5afcf 
>   ql/src/test/results/clientpositive/spark/cbo_simple_select.q.out acf91bf178 
>   ql/src/test/results/clientpositive/spark/parquet_vectorization_13.q.out 
> 3812239343 
>   ql/src/test/results/clientpositive/spark/parquet_vectorization_6.q.out 
> 6108457aad 
>   ql/src/test/results/clientpositive/spark/parquet_vectorization_8.q.out 
> 3352dedc58 
>   ql/src/test/results/clientpositive/spark/spark_explainuser_1.q.out 
> f5a4c9ad86 
>   ql/src/test/results/clientpositive/spark/subquery_scalar.q.out b3252f5415 
>   ql/src/test/results/clientpositive/spark/vectorization_13.q.out 34ec9c42dd 
>   ql/src/test/results/clientpositive/spark/vectorization_6.q.out 5679bb8cfa 
>   ql/src/test/results/clientpositive/spark/vectorization_short_regress.q.out 
> 231dea6de3 
>   ql/src/test/results/clientpositive/vectorization_13.q.out 8897f8427f 
>   ql/src/test/results/clientpositive/vectorization_6.q.out 8dedb63e7d 
>   ql/src/test/results/clientpositive/vectorization_8.q.out d81df76a2f 
> 
> 
> Diff: https://reviews.apache.org/r/69019/diff/2/
> 
> 
> Testing
> -------
> 
> 
> Thanks,
> 
> Zoltan Haindrich
> 
>

Reply via email to