This is an automated email from the ASF dual-hosted git repository.
zabetak pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hive.git
The following commit(s) were added to refs/heads/master by this push:
new 70562437d36 HIVE-26320: Incorrect results for IN UDF on Parquet column
of CHAR/VARCHAR type (John Sherman reviewed by Aman Sinha, Krisztian Kasa,
Stamatis Zampetakis, Alessandro Solimando, Dayakar)
70562437d36 is described below
commit 70562437d369c2f4ab3e879bae519f81d386da3b
Author: John Sherman <[email protected]>
AuthorDate: Tue Sep 27 09:42:51 2022 -0700
HIVE-26320: Incorrect results for IN UDF on Parquet column of CHAR/VARCHAR
type (John Sherman reviewed by Aman Sinha, Krisztian Kasa, Stamatis Zampetakis,
Alessandro Solimando, Dayakar)
Closes #3628
---
.../hive/ql/io/parquet/convert/ETypeConverter.java | 32 +++-
.../ql/io/parquet/convert/TestETypeConverter.java | 65 +++++--
ql/src/test/queries/clientpositive/pointlookup.q | 33 ++++
ql/src/test/queries/clientpositive/udf_in.q | 6 +
.../results/clientpositive/llap/pointlookup.q.out | 193 +++++++++++++++++++++
.../test/results/clientpositive/llap/udf_in.q.out | 37 ++++
.../hadoop/hive/serde2/io/HiveCharWritable.java | 9 +
.../hadoop/hive/serde2/io/HiveVarcharWritable.java | 9 +
8 files changed, 372 insertions(+), 12 deletions(-)
diff --git
a/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/convert/ETypeConverter.java
b/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/convert/ETypeConverter.java
index 40069cf8b0c..28207714e3c 100644
---
a/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/convert/ETypeConverter.java
+++
b/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/convert/ETypeConverter.java
@@ -36,12 +36,17 @@ import
org.apache.hadoop.hive.ql.io.parquet.write.DataWritableWriteSupport;
import org.apache.hadoop.hive.serde.serdeConstants;
import org.apache.hadoop.hive.serde2.io.DateWritableV2;
import org.apache.hadoop.hive.serde2.io.DoubleWritable;
+import org.apache.hadoop.hive.serde2.io.HiveCharWritable;
import org.apache.hadoop.hive.serde2.io.HiveDecimalWritable;
+import org.apache.hadoop.hive.serde2.io.HiveVarcharWritable;
import org.apache.hadoop.hive.serde2.io.TimestampWritableV2;
+import org.apache.hadoop.hive.serde2.typeinfo.CharTypeInfo;
import org.apache.hadoop.hive.serde2.typeinfo.DecimalTypeInfo;
import org.apache.hadoop.hive.serde2.typeinfo.HiveDecimalUtils;
+import org.apache.hadoop.hive.serde2.typeinfo.PrimitiveTypeInfo;
import org.apache.hadoop.hive.serde2.typeinfo.TypeInfo;
import org.apache.hadoop.hive.serde2.typeinfo.TypeInfoUtils;
+import org.apache.hadoop.hive.serde2.typeinfo.VarcharTypeInfo;
import org.apache.hadoop.io.BooleanWritable;
import org.apache.hadoop.io.BytesWritable;
import org.apache.hadoop.io.FloatWritable;
@@ -481,7 +486,32 @@ public enum ETypeConverter {
},
ESTRING_CONVERTER(String.class) {
@Override
- PrimitiveConverter getConverter(final PrimitiveType type, final int index,
final ConverterParent parent, TypeInfo hiveTypeInfo) {
+ PrimitiveConverter getConverter(final PrimitiveType type, final int index,
final ConverterParent parent,
+ TypeInfo hiveTypeInfo) {
+ // If we have type information, we should return properly typed strings.
However, there are a variety
+ // of code paths that do not provide the typeInfo in those cases we
default to Text. This idiom is also
+ // followed by for example the BigDecimal converter in which if there is
no type information,
+ // it defaults to the widest representation
+ if (hiveTypeInfo instanceof PrimitiveTypeInfo) {
+ PrimitiveTypeInfo t = (PrimitiveTypeInfo) hiveTypeInfo;
+ switch (t.getPrimitiveCategory()) {
+ case CHAR:
+ return new BinaryConverter<HiveCharWritable>(type, parent, index) {
+ @Override
+ protected HiveCharWritable convert(Binary binary) {
+ return new HiveCharWritable(binary.getBytes(), ((CharTypeInfo)
hiveTypeInfo).getLength());
+ }
+ };
+ case VARCHAR:
+ return new BinaryConverter<HiveVarcharWritable>(type, parent,
index) {
+ @Override
+ protected HiveVarcharWritable convert(Binary binary) {
+ return new HiveVarcharWritable(binary.getBytes(),
((VarcharTypeInfo) hiveTypeInfo).getLength());
+ }
+ };
+ }
+ }
+ // STRING type
return new BinaryConverter<Text>(type, parent, index) {
@Override
protected Text convert(Binary binary) {
diff --git
a/ql/src/test/org/apache/hadoop/hive/ql/io/parquet/convert/TestETypeConverter.java
b/ql/src/test/org/apache/hadoop/hive/ql/io/parquet/convert/TestETypeConverter.java
index 8161430a501..fcfb5c7782c 100644
---
a/ql/src/test/org/apache/hadoop/hive/ql/io/parquet/convert/TestETypeConverter.java
+++
b/ql/src/test/org/apache/hadoop/hive/ql/io/parquet/convert/TestETypeConverter.java
@@ -18,6 +18,7 @@
package org.apache.hadoop.hive.ql.io.parquet.convert;
+import static
org.apache.hadoop.hive.serde2.typeinfo.TypeInfoFactory.stringTypeInfo;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
@@ -30,8 +31,11 @@ import org.apache.hadoop.hive.common.type.Timestamp;
import
org.apache.hadoop.hive.ql.io.parquet.convert.ETypeConverter.BinaryConverter;
import org.apache.hadoop.hive.ql.io.parquet.timestamp.NanoTime;
import org.apache.hadoop.hive.ql.io.parquet.timestamp.NanoTimeUtils;
+import org.apache.hadoop.hive.serde2.io.HiveCharWritable;
import org.apache.hadoop.hive.serde2.io.HiveDecimalWritable;
+import org.apache.hadoop.hive.serde2.io.HiveVarcharWritable;
import org.apache.hadoop.hive.serde2.io.TimestampWritableV2;
+import org.apache.hadoop.hive.serde2.typeinfo.CharTypeInfo;
import org.apache.hadoop.hive.serde2.typeinfo.DecimalTypeInfo;
import org.apache.hadoop.hive.serde2.typeinfo.PrimitiveTypeInfo;
import org.apache.hadoop.hive.serde2.typeinfo.TypeInfo;
@@ -212,23 +216,62 @@ public class TestETypeConverter {
}
@Test
- public void testGetTextConverter() throws Exception {
+ public void testGetTextConverterForString() throws Exception {
PrimitiveType primitiveType = Types.optional(PrimitiveTypeName.BINARY)
- .as(LogicalTypeAnnotation.stringType()).named("value");
- Writable writable = getWritableFromBinaryConverter(new VarcharTypeInfo(),
primitiveType,
- Binary.fromString("this_is_a_value"));
- Text textWritable = (Text) writable;
- assertEquals("this_is_a_value", textWritable.toString());
+ .as(LogicalTypeAnnotation.stringType()).named("value");
+ String value = "this_is_a_value";
+ Text textWritable = (Text) getWritableFromBinaryConverter(stringTypeInfo,
primitiveType,
+ Binary.fromString(value));
+ assertEquals(value, textWritable.toString());
+ }
+
+ @Test
+ public void testGetTextConverterForCharPadsValueWithSpacesTillLen() {
+ PrimitiveType primitiveType = Types.optional(PrimitiveTypeName.BINARY)
+ .as(LogicalTypeAnnotation.stringType()).named("value");
+ String value = "this_is_a_value";
+ HiveCharWritable textWritable = (HiveCharWritable)
getWritableFromBinaryConverter(
+ new CharTypeInfo(value.length() + 2), primitiveType,
Binary.fromString(value));
+ assertEquals(value + " ", textWritable.toString());
+ }
+
+ @Test
+ public void testGetTextConverterForCharTruncatesValueExceedingLen() {
+ PrimitiveType primitiveType = Types.optional(PrimitiveTypeName.BINARY)
+ .as(LogicalTypeAnnotation.stringType()).named("value");
+ String value = "this_is_a_value";
+ HiveCharWritable textWritable = (HiveCharWritable)
getWritableFromBinaryConverter(
+ new CharTypeInfo(6), primitiveType, Binary.fromString(value));
+ assertEquals(value.substring(0, 6), textWritable.toString());
}
@Test
- public void testGetTextConverterNoHiveTypeInfo() throws Exception {
+ public void testGetTextConverterForVarcharTruncatesValueExceedingLen() {
+ PrimitiveType primitiveType = Types.optional(PrimitiveTypeName.BINARY)
+ .as(LogicalTypeAnnotation.stringType()).named("value");
+ String value = "this_is_a_value";
+ HiveVarcharWritable textWritable = (HiveVarcharWritable)
getWritableFromBinaryConverter(
+ new VarcharTypeInfo(6), primitiveType, Binary.fromString(value));
+ assertEquals(value.substring(0, 6), textWritable.toString());
+ }
+
+ @Test
+ public void testGetTextConverterForVarchar() {
+ PrimitiveType primitiveType = Types.optional(PrimitiveTypeName.BINARY)
+ .as(LogicalTypeAnnotation.stringType()).named("value");
+ String value = "this_is_a_value";
+ HiveVarcharWritable textWritable = (HiveVarcharWritable)
getWritableFromBinaryConverter(
+ new VarcharTypeInfo(34), primitiveType, Binary.fromString(value));
+ assertEquals(value, textWritable.toString());
+ }
+
+ @Test
+ public void testGetTextConverterNoHiveTypeInfo() {
PrimitiveType primitiveType = Types.optional(PrimitiveTypeName.BINARY)
.as(LogicalTypeAnnotation.stringType()).named("value");
- Writable writable =
- getWritableFromBinaryConverter(null, primitiveType,
Binary.fromString("this_is_a_value"));
- Text textWritable = (Text) writable;
- assertEquals("this_is_a_value", textWritable.toString());
+ String value = "this_is_a_value";
+ Text textWritable = (Text) getWritableFromBinaryConverter(null,
primitiveType, Binary.fromString(value));
+ assertEquals(value, textWritable.toString());
}
@Test
diff --git a/ql/src/test/queries/clientpositive/pointlookup.q
b/ql/src/test/queries/clientpositive/pointlookup.q
index a808a51cbfc..0853db0b69e 100644
--- a/ql/src/test/queries/clientpositive/pointlookup.q
+++ b/ql/src/test/queries/clientpositive/pointlookup.q
@@ -127,3 +127,36 @@ or inOutputOpt.key = null;
drop table orOutput;
drop table inOutput;
drop table inOutputOpt;
+
+-- test case(s) for HIVE-26320 for ORC
+SET hive.optimize.point.lookup=true;
+SET hive.optimize.point.lookup.min=2;
+CREATE EXTERNAL TABLE hive26230_orc(kob varchar(2), enhanced_type_code int)
STORED AS ORC;
+INSERT INTO hive26230_orc VALUES('BB',18),('BC',18),('AB',18);
+SELECT CASE WHEN ((kob='BB' AND enhanced_type_code=18) OR (kob='BC' AND
enhanced_type_code=18)) THEN 1 ELSE 0 END AS logic_check
+FROM hive26230_orc;
+DROP TABLE hive26230_orc;
+
+CREATE EXTERNAL TABLE hive26230_char_orc(kob char(2), enhanced_type_code int)
STORED AS ORC;
+INSERT INTO hive26230_char_orc VALUES('B',18),('BC',18),('AB',18);
+SELECT CASE WHEN ((kob='B' AND enhanced_type_code=18) OR (kob='BC' AND
enhanced_type_code=18)) THEN 1 ELSE 0 END AS logic_check
+FROM hive26230_char_orc;
+DROP TABLE hive26230_char_orc;
+
+-- test case(s) for HIVE-26320 for PARQUET
+CREATE EXTERNAL TABLE hive26230_parq(kob varchar(2), enhanced_type_code int)
STORED AS PARQUET;
+INSERT INTO hive26230_parq VALUES('BB',18),('BC',18),('AB',18);
+SELECT CASE WHEN ((kob='BB' AND enhanced_type_code=18) OR (kob='BC' AND
enhanced_type_code=18)) THEN 1 ELSE 0 END AS logic_check
+FROM hive26230_parq;
+DROP TABLE hive26230_parq;
+
+CREATE EXTERNAL TABLE hive26230_char_parq(kob char(2), enhanced_type_code int)
STORED AS PARQUET;
+INSERT INTO hive26230_char_parq VALUES('B',18),('BC',18),('AB',18);
+SELECT CASE WHEN ((kob='B' AND enhanced_type_code=18) OR (kob='BC' AND
enhanced_type_code=18)) THEN 1 ELSE 0 END AS logic_check
+FROM hive26230_char_parq;
+DROP TABLE hive26230_char_parq;
+
+CREATE EXTERNAL TABLE hive26230_int_parq(kob int, enhanced_type_code int)
STORED AS PARQUET;
+INSERT INTO hive26230_int_parq VALUES(2,18),(23,18),(12,18);
+SELECT CASE WHEN ((kob=2 AND enhanced_type_code=18) OR (kob=23 AND
enhanced_type_code=18)) THEN 1 ELSE 0 END AS logic_check FROM
hive26230_int_parq;
+DROP TABLE hive26230_int_parq;
diff --git a/ql/src/test/queries/clientpositive/udf_in.q
b/ql/src/test/queries/clientpositive/udf_in.q
index 99fafd44bfa..7a6e98f2ca5 100644
--- a/ql/src/test/queries/clientpositive/udf_in.q
+++ b/ql/src/test/queries/clientpositive/udf_in.q
@@ -14,3 +14,9 @@ SELECT 1 IN (1, 2, 3),
(1+3) IN (5, 6, (1+2) + 1) FROM src tablesample (1 rows);
SELECT key FROM src WHERE key IN ("238", 86);
+
+-- test case(s) for HIVE-26320
+CREATE EXTERNAL TABLE hive26230_parq_in(kob varchar(2), code int) STORED AS
PARQUET;
+INSERT INTO hive26230_parq_in VALUES('BB',18),('BC',18),('AB',18);
+SELECT (kob, code) IN ((cast('BB' as varchar(2)), 18), (cast('BC' as
varchar(2)), 18)) FROM hive26230_parq_in;
+DROP TABLE hive26230_parq_in;
diff --git a/ql/src/test/results/clientpositive/llap/pointlookup.q.out
b/ql/src/test/results/clientpositive/llap/pointlookup.q.out
index d4aef2f7a81..25de4bb82ba 100644
--- a/ql/src/test/results/clientpositive/llap/pointlookup.q.out
+++ b/ql/src/test/results/clientpositive/llap/pointlookup.q.out
@@ -362,3 +362,196 @@ POSTHOOK: query: drop table inOutputOpt
POSTHOOK: type: DROPTABLE
POSTHOOK: Input: default@inoutputopt
POSTHOOK: Output: default@inoutputopt
+PREHOOK: query: CREATE EXTERNAL TABLE hive26230_orc(kob varchar(2),
enhanced_type_code int) STORED AS ORC
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@hive26230_orc
+POSTHOOK: query: CREATE EXTERNAL TABLE hive26230_orc(kob varchar(2),
enhanced_type_code int) STORED AS ORC
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@hive26230_orc
+PREHOOK: query: INSERT INTO hive26230_orc VALUES('BB',18),('BC',18),('AB',18)
+PREHOOK: type: QUERY
+PREHOOK: Input: _dummy_database@_dummy_table
+PREHOOK: Output: default@hive26230_orc
+POSTHOOK: query: INSERT INTO hive26230_orc VALUES('BB',18),('BC',18),('AB',18)
+POSTHOOK: type: QUERY
+POSTHOOK: Input: _dummy_database@_dummy_table
+POSTHOOK: Output: default@hive26230_orc
+POSTHOOK: Lineage: hive26230_orc.enhanced_type_code SCRIPT []
+POSTHOOK: Lineage: hive26230_orc.kob SCRIPT []
+PREHOOK: query: SELECT CASE WHEN ((kob='BB' AND enhanced_type_code=18) OR
(kob='BC' AND enhanced_type_code=18)) THEN 1 ELSE 0 END AS logic_check
+FROM hive26230_orc
+PREHOOK: type: QUERY
+PREHOOK: Input: default@hive26230_orc
+#### A masked pattern was here ####
+POSTHOOK: query: SELECT CASE WHEN ((kob='BB' AND enhanced_type_code=18) OR
(kob='BC' AND enhanced_type_code=18)) THEN 1 ELSE 0 END AS logic_check
+FROM hive26230_orc
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@hive26230_orc
+#### A masked pattern was here ####
+1
+1
+0
+PREHOOK: query: DROP TABLE hive26230_orc
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@hive26230_orc
+PREHOOK: Output: default@hive26230_orc
+POSTHOOK: query: DROP TABLE hive26230_orc
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@hive26230_orc
+POSTHOOK: Output: default@hive26230_orc
+PREHOOK: query: CREATE EXTERNAL TABLE hive26230_char_orc(kob char(2),
enhanced_type_code int) STORED AS ORC
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@hive26230_char_orc
+POSTHOOK: query: CREATE EXTERNAL TABLE hive26230_char_orc(kob char(2),
enhanced_type_code int) STORED AS ORC
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@hive26230_char_orc
+PREHOOK: query: INSERT INTO hive26230_char_orc
VALUES('B',18),('BC',18),('AB',18)
+PREHOOK: type: QUERY
+PREHOOK: Input: _dummy_database@_dummy_table
+PREHOOK: Output: default@hive26230_char_orc
+POSTHOOK: query: INSERT INTO hive26230_char_orc
VALUES('B',18),('BC',18),('AB',18)
+POSTHOOK: type: QUERY
+POSTHOOK: Input: _dummy_database@_dummy_table
+POSTHOOK: Output: default@hive26230_char_orc
+POSTHOOK: Lineage: hive26230_char_orc.enhanced_type_code SCRIPT []
+POSTHOOK: Lineage: hive26230_char_orc.kob SCRIPT []
+PREHOOK: query: SELECT CASE WHEN ((kob='B' AND enhanced_type_code=18) OR
(kob='BC' AND enhanced_type_code=18)) THEN 1 ELSE 0 END AS logic_check
+FROM hive26230_char_orc
+PREHOOK: type: QUERY
+PREHOOK: Input: default@hive26230_char_orc
+#### A masked pattern was here ####
+POSTHOOK: query: SELECT CASE WHEN ((kob='B' AND enhanced_type_code=18) OR
(kob='BC' AND enhanced_type_code=18)) THEN 1 ELSE 0 END AS logic_check
+FROM hive26230_char_orc
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@hive26230_char_orc
+#### A masked pattern was here ####
+1
+1
+0
+PREHOOK: query: DROP TABLE hive26230_char_orc
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@hive26230_char_orc
+PREHOOK: Output: default@hive26230_char_orc
+POSTHOOK: query: DROP TABLE hive26230_char_orc
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@hive26230_char_orc
+POSTHOOK: Output: default@hive26230_char_orc
+PREHOOK: query: CREATE EXTERNAL TABLE hive26230_parq(kob varchar(2),
enhanced_type_code int) STORED AS PARQUET
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@hive26230_parq
+POSTHOOK: query: CREATE EXTERNAL TABLE hive26230_parq(kob varchar(2),
enhanced_type_code int) STORED AS PARQUET
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@hive26230_parq
+PREHOOK: query: INSERT INTO hive26230_parq VALUES('BB',18),('BC',18),('AB',18)
+PREHOOK: type: QUERY
+PREHOOK: Input: _dummy_database@_dummy_table
+PREHOOK: Output: default@hive26230_parq
+POSTHOOK: query: INSERT INTO hive26230_parq VALUES('BB',18),('BC',18),('AB',18)
+POSTHOOK: type: QUERY
+POSTHOOK: Input: _dummy_database@_dummy_table
+POSTHOOK: Output: default@hive26230_parq
+POSTHOOK: Lineage: hive26230_parq.enhanced_type_code SCRIPT []
+POSTHOOK: Lineage: hive26230_parq.kob SCRIPT []
+PREHOOK: query: SELECT CASE WHEN ((kob='BB' AND enhanced_type_code=18) OR
(kob='BC' AND enhanced_type_code=18)) THEN 1 ELSE 0 END AS logic_check
+FROM hive26230_parq
+PREHOOK: type: QUERY
+PREHOOK: Input: default@hive26230_parq
+#### A masked pattern was here ####
+POSTHOOK: query: SELECT CASE WHEN ((kob='BB' AND enhanced_type_code=18) OR
(kob='BC' AND enhanced_type_code=18)) THEN 1 ELSE 0 END AS logic_check
+FROM hive26230_parq
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@hive26230_parq
+#### A masked pattern was here ####
+1
+1
+0
+PREHOOK: query: DROP TABLE hive26230_parq
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@hive26230_parq
+PREHOOK: Output: default@hive26230_parq
+POSTHOOK: query: DROP TABLE hive26230_parq
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@hive26230_parq
+POSTHOOK: Output: default@hive26230_parq
+PREHOOK: query: CREATE EXTERNAL TABLE hive26230_char_parq(kob char(2),
enhanced_type_code int) STORED AS PARQUET
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@hive26230_char_parq
+POSTHOOK: query: CREATE EXTERNAL TABLE hive26230_char_parq(kob char(2),
enhanced_type_code int) STORED AS PARQUET
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@hive26230_char_parq
+PREHOOK: query: INSERT INTO hive26230_char_parq
VALUES('B',18),('BC',18),('AB',18)
+PREHOOK: type: QUERY
+PREHOOK: Input: _dummy_database@_dummy_table
+PREHOOK: Output: default@hive26230_char_parq
+POSTHOOK: query: INSERT INTO hive26230_char_parq
VALUES('B',18),('BC',18),('AB',18)
+POSTHOOK: type: QUERY
+POSTHOOK: Input: _dummy_database@_dummy_table
+POSTHOOK: Output: default@hive26230_char_parq
+POSTHOOK: Lineage: hive26230_char_parq.enhanced_type_code SCRIPT []
+POSTHOOK: Lineage: hive26230_char_parq.kob SCRIPT []
+PREHOOK: query: SELECT CASE WHEN ((kob='B' AND enhanced_type_code=18) OR
(kob='BC' AND enhanced_type_code=18)) THEN 1 ELSE 0 END AS logic_check
+FROM hive26230_char_parq
+PREHOOK: type: QUERY
+PREHOOK: Input: default@hive26230_char_parq
+#### A masked pattern was here ####
+POSTHOOK: query: SELECT CASE WHEN ((kob='B' AND enhanced_type_code=18) OR
(kob='BC' AND enhanced_type_code=18)) THEN 1 ELSE 0 END AS logic_check
+FROM hive26230_char_parq
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@hive26230_char_parq
+#### A masked pattern was here ####
+1
+1
+0
+PREHOOK: query: DROP TABLE hive26230_char_parq
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@hive26230_char_parq
+PREHOOK: Output: default@hive26230_char_parq
+POSTHOOK: query: DROP TABLE hive26230_char_parq
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@hive26230_char_parq
+POSTHOOK: Output: default@hive26230_char_parq
+PREHOOK: query: CREATE EXTERNAL TABLE hive26230_int_parq(kob int,
enhanced_type_code int) STORED AS PARQUET
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@hive26230_int_parq
+POSTHOOK: query: CREATE EXTERNAL TABLE hive26230_int_parq(kob int,
enhanced_type_code int) STORED AS PARQUET
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@hive26230_int_parq
+PREHOOK: query: INSERT INTO hive26230_int_parq VALUES(2,18),(23,18),(12,18)
+PREHOOK: type: QUERY
+PREHOOK: Input: _dummy_database@_dummy_table
+PREHOOK: Output: default@hive26230_int_parq
+POSTHOOK: query: INSERT INTO hive26230_int_parq VALUES(2,18),(23,18),(12,18)
+POSTHOOK: type: QUERY
+POSTHOOK: Input: _dummy_database@_dummy_table
+POSTHOOK: Output: default@hive26230_int_parq
+POSTHOOK: Lineage: hive26230_int_parq.enhanced_type_code SCRIPT []
+POSTHOOK: Lineage: hive26230_int_parq.kob SCRIPT []
+PREHOOK: query: SELECT CASE WHEN ((kob=2 AND enhanced_type_code=18) OR (kob=23
AND enhanced_type_code=18)) THEN 1 ELSE 0 END AS logic_check FROM
hive26230_int_parq
+PREHOOK: type: QUERY
+PREHOOK: Input: default@hive26230_int_parq
+#### A masked pattern was here ####
+POSTHOOK: query: SELECT CASE WHEN ((kob=2 AND enhanced_type_code=18) OR
(kob=23 AND enhanced_type_code=18)) THEN 1 ELSE 0 END AS logic_check FROM
hive26230_int_parq
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@hive26230_int_parq
+#### A masked pattern was here ####
+1
+1
+0
+PREHOOK: query: DROP TABLE hive26230_int_parq
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@hive26230_int_parq
+PREHOOK: Output: default@hive26230_int_parq
+POSTHOOK: query: DROP TABLE hive26230_int_parq
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@hive26230_int_parq
+POSTHOOK: Output: default@hive26230_int_parq
diff --git a/ql/src/test/results/clientpositive/llap/udf_in.q.out
b/ql/src/test/results/clientpositive/llap/udf_in.q.out
index 85ee95108a8..8c840eda218 100644
--- a/ql/src/test/results/clientpositive/llap/udf_in.q.out
+++ b/ql/src/test/results/clientpositive/llap/udf_in.q.out
@@ -38,3 +38,40 @@ POSTHOOK: Input: default@src
238
86
238
+PREHOOK: query: CREATE EXTERNAL TABLE hive26230_parq_in(kob varchar(2), code
int) STORED AS PARQUET
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@hive26230_parq_in
+POSTHOOK: query: CREATE EXTERNAL TABLE hive26230_parq_in(kob varchar(2), code
int) STORED AS PARQUET
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@hive26230_parq_in
+PREHOOK: query: INSERT INTO hive26230_parq_in
VALUES('BB',18),('BC',18),('AB',18)
+PREHOOK: type: QUERY
+PREHOOK: Input: _dummy_database@_dummy_table
+PREHOOK: Output: default@hive26230_parq_in
+POSTHOOK: query: INSERT INTO hive26230_parq_in
VALUES('BB',18),('BC',18),('AB',18)
+POSTHOOK: type: QUERY
+POSTHOOK: Input: _dummy_database@_dummy_table
+POSTHOOK: Output: default@hive26230_parq_in
+POSTHOOK: Lineage: hive26230_parq_in.code SCRIPT []
+POSTHOOK: Lineage: hive26230_parq_in.kob SCRIPT []
+PREHOOK: query: SELECT (kob, code) IN ((cast('BB' as varchar(2)), 18),
(cast('BC' as varchar(2)), 18)) FROM hive26230_parq_in
+PREHOOK: type: QUERY
+PREHOOK: Input: default@hive26230_parq_in
+#### A masked pattern was here ####
+POSTHOOK: query: SELECT (kob, code) IN ((cast('BB' as varchar(2)), 18),
(cast('BC' as varchar(2)), 18)) FROM hive26230_parq_in
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@hive26230_parq_in
+#### A masked pattern was here ####
+true
+true
+false
+PREHOOK: query: DROP TABLE hive26230_parq_in
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@hive26230_parq_in
+PREHOOK: Output: default@hive26230_parq_in
+POSTHOOK: query: DROP TABLE hive26230_parq_in
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@hive26230_parq_in
+POSTHOOK: Output: default@hive26230_parq_in
diff --git
a/serde/src/java/org/apache/hadoop/hive/serde2/io/HiveCharWritable.java
b/serde/src/java/org/apache/hadoop/hive/serde2/io/HiveCharWritable.java
index fcd14e5ec87..01448ebe8a5 100644
--- a/serde/src/java/org/apache/hadoop/hive/serde2/io/HiveCharWritable.java
+++ b/serde/src/java/org/apache/hadoop/hive/serde2/io/HiveCharWritable.java
@@ -42,6 +42,15 @@ public class HiveCharWritable extends HiveBaseCharWritable
set(hcw);
}
+ public HiveCharWritable(byte[] bytes, int maxLength) {
+ set(bytes, maxLength);
+ }
+
+ public void set(byte[] bytes, int maxLength) {
+ value.set(bytes);
+ enforceMaxLength(maxLength);
+ }
+
public void set(HiveChar val) {
set(val.getValue(), -1);
}
diff --git
a/serde/src/java/org/apache/hadoop/hive/serde2/io/HiveVarcharWritable.java
b/serde/src/java/org/apache/hadoop/hive/serde2/io/HiveVarcharWritable.java
index c3812d62e11..8c247105ad8 100644
--- a/serde/src/java/org/apache/hadoop/hive/serde2/io/HiveVarcharWritable.java
+++ b/serde/src/java/org/apache/hadoop/hive/serde2/io/HiveVarcharWritable.java
@@ -35,6 +35,15 @@ public class HiveVarcharWritable extends HiveBaseCharWritable
set(hcw);
}
+ public HiveVarcharWritable(byte[] bytes, int maxLength) {
+ set(bytes, maxLength);
+ }
+
+ public void set(byte[] bytes, int maxLength) {
+ value.set(bytes);
+ enforceMaxLength(maxLength);
+ }
+
public void set(HiveVarchar val) {
set(val.getValue());
}