You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by jc...@apache.org on 2018/09/11 16:41:21 UTC
hive git commit: HIVE-20520: length(CHAR) doesn't consider trailing
space (Jesus Camacho Rodriguez, reviewed by Ashutosh Chauhan)
Repository: hive
Updated Branches:
refs/heads/master cd715e7f4 -> c8b3f9aa0
HIVE-20520: length(CHAR) doesn't consider trailing space (Jesus Camacho Rodriguez, reviewed by Ashutosh Chauhan)
Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/c8b3f9aa
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/c8b3f9aa
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/c8b3f9aa
Branch: refs/heads/master
Commit: c8b3f9aa08be15546844ef6d5be6871b6d5a76db
Parents: cd715e7
Author: Jesus Camacho Rodriguez <jc...@apache.org>
Authored: Fri Sep 7 16:01:52 2018 -0700
Committer: Jesus Camacho Rodriguez <jc...@apache.org>
Committed: Tue Sep 11 09:40:45 2018 -0700
----------------------------------------------------------------------
.../test/resources/testconfiguration.properties | 1 +
.../ql/exec/vector/expressions/OctetLength.java | 20 +++++---
.../exec/vector/expressions/StringLength.java | 21 +++++---
.../udf/generic/GenericUDFCharacterLength.java | 9 ++++
.../hive/ql/udf/generic/GenericUDFLength.java | 9 ++++
.../ql/udf/generic/GenericUDFOctetLength.java | 9 ++++
.../TestVectorStringExpressions.java | 8 ++-
.../clientpositive/char_trailing_space.q | 8 +++
.../results/clientpositive/alter_char2.q.out | 8 +--
.../test/results/clientpositive/char_udf1.q.out | 2 +-
.../llap/char_trailing_space.q.out | 53 ++++++++++++++++++++
.../clientpositive/llap/parquet_types.q.out | 8 +--
.../llap/vector_char_varchar_1.q.out | 2 +-
.../llap/vectorized_parquet_types.q.out | 16 +++---
.../vectorized_parquet_types.q.out | 16 +++---
15 files changed, 151 insertions(+), 39 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/c8b3f9aa/itests/src/test/resources/testconfiguration.properties
----------------------------------------------------------------------
diff --git a/itests/src/test/resources/testconfiguration.properties b/itests/src/test/resources/testconfiguration.properties
index 3a5aec7..146f630 100644
--- a/itests/src/test/resources/testconfiguration.properties
+++ b/itests/src/test/resources/testconfiguration.properties
@@ -469,6 +469,7 @@ minillaplocal.query.files=\
runtime_stats_hs2.q,\
bucketsortoptimize_insert_2.q,\
change_allowincompatible_vectorization_false_date.q,\
+ char_trailing_space.q,\
check_constraint.q,\
cbo_gby.q,\
cbo_join.q,\
http://git-wip-us.apache.org/repos/asf/hive/blob/c8b3f9aa/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/OctetLength.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/OctetLength.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/OctetLength.java
index ebea38d..59583c5 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/OctetLength.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/OctetLength.java
@@ -25,6 +25,10 @@ import org.apache.hadoop.hive.ql.exec.vector.LongColumnVector;
import org.apache.hadoop.hive.ql.exec.vector.VectorExpressionDescriptor;
import org.apache.hadoop.hive.ql.exec.vector.VectorizedRowBatch;
import org.apache.hadoop.hive.ql.metadata.HiveException;
+import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector.Category;
+import org.apache.hadoop.hive.serde2.objectinspector.PrimitiveObjectInspector.PrimitiveCategory;
+import org.apache.hadoop.hive.serde2.typeinfo.CharTypeInfo;
+import org.apache.hadoop.hive.serde2.typeinfo.PrimitiveTypeInfo;
public class OctetLength extends VectorExpression {
private static final long serialVersionUID = 1L;
@@ -65,6 +69,10 @@ public class OctetLength extends VectorExpression {
return;
}
+ boolean isFixedLength = inputTypeInfos[0].getCategory() == Category.PRIMITIVE &&
+ ((PrimitiveTypeInfo) inputTypeInfos[0]).getPrimitiveCategory() == PrimitiveCategory.CHAR;
+ int fixedLength = isFixedLength ? ((CharTypeInfo) inputTypeInfos[0]).getLength() : -1;
+
// We do not need to do a column reset since we are carefully changing the output.
outputColVector.isRepeating = false;
@@ -72,7 +80,7 @@ public class OctetLength extends VectorExpression {
if (inputColVector.noNulls || !inputIsNull[0]) {
// Set isNull before call in case it changes it mind.
outputIsNull[0] = false;
- resultLen[0] = length[0];
+ resultLen[0] = isFixedLength ? fixedLength : length[0];
} else {
outputIsNull[0] = true;
outputColVector.noNulls = false;
@@ -95,12 +103,12 @@ public class OctetLength extends VectorExpression {
final int i = sel[j];
// Set isNull before call in case it changes it mind.
outputIsNull[i] = false;
- resultLen[i] = length[i];
+ resultLen[i] = isFixedLength ? fixedLength : length[i];
}
} else {
for(int j = 0; j != n; j++) {
final int i = sel[j];
- resultLen[i] = length[i];
+ resultLen[i] = isFixedLength ? fixedLength : length[i];
}
}
} else {
@@ -112,7 +120,7 @@ public class OctetLength extends VectorExpression {
outputColVector.noNulls = true;
}
for(int i = 0; i != n; i++) {
- resultLen[i] = length[i];
+ resultLen[i] = isFixedLength ? fixedLength : length[i];
}
}
} else {
@@ -128,14 +136,14 @@ public class OctetLength extends VectorExpression {
int i = sel[j];
outputIsNull[i] = inputIsNull[i];
if (!inputIsNull[i]) {
- resultLen[i] = length[i];
+ resultLen[i] = isFixedLength ? fixedLength : length[i];
}
}
} else {
System.arraycopy(inputIsNull, 0, outputIsNull, 0, n);
for(int i = 0; i != n; i++) {
if (!inputIsNull[i]) {
- resultLen[i] = length[i];
+ resultLen[i] = isFixedLength ? fixedLength : length[i];
}
}
}
http://git-wip-us.apache.org/repos/asf/hive/blob/c8b3f9aa/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/StringLength.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/StringLength.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/StringLength.java
index 956fd7b..ea33843 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/StringLength.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/StringLength.java
@@ -25,6 +25,11 @@ import org.apache.hadoop.hive.ql.exec.vector.LongColumnVector;
import org.apache.hadoop.hive.ql.exec.vector.VectorExpressionDescriptor;
import org.apache.hadoop.hive.ql.exec.vector.VectorizedRowBatch;
import org.apache.hadoop.hive.ql.metadata.HiveException;
+import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector.Category;
+import org.apache.hadoop.hive.serde2.objectinspector.PrimitiveObjectInspector.PrimitiveCategory;
+import org.apache.hadoop.hive.serde2.typeinfo.CharTypeInfo;
+import org.apache.hadoop.hive.serde2.typeinfo.PrimitiveTypeInfo;
+import org.apache.hadoop.hive.serde2.typeinfo.TypeInfo;
/**
* Calculate the length of the strings in the input column vector, and store
@@ -71,6 +76,10 @@ public class StringLength extends VectorExpression {
return;
}
+ boolean isFixedLength = inputTypeInfos[0].getCategory() == Category.PRIMITIVE &&
+ ((PrimitiveTypeInfo) inputTypeInfos[0]).getPrimitiveCategory() == PrimitiveCategory.CHAR;
+ int fixedLength = isFixedLength ? ((CharTypeInfo) inputTypeInfos[0]).getLength() : -1;
+
// We do not need to do a column reset since we are carefully changing the output.
outputColVector.isRepeating = false;
@@ -78,7 +87,7 @@ public class StringLength extends VectorExpression {
if (inputColVector.noNulls || !inputIsNull[0]) {
// Set isNull before call in case it changes it mind.
outputIsNull[0] = false;
- resultLen[0] = utf8StringLength(vector[0], start[0], length[0]);
+ resultLen[0] = isFixedLength ? fixedLength : utf8StringLength(vector[0], start[0], length[0]);
} else {
outputIsNull[0] = true;
outputColVector.noNulls = false;
@@ -97,12 +106,12 @@ public class StringLength extends VectorExpression {
final int i = sel[j];
// Set isNull before call in case it changes it mind.
outputIsNull[i] = false;
- resultLen[i] = utf8StringLength(vector[i], start[i], length[i]);
+ resultLen[i] = isFixedLength ? fixedLength : utf8StringLength(vector[i], start[i], length[i]);
}
} else {
for(int j = 0; j != n; j++) {
final int i = sel[j];
- resultLen[i] = utf8StringLength(vector[i], start[i], length[i]);
+ resultLen[i] = isFixedLength ? fixedLength : utf8StringLength(vector[i], start[i], length[i]);
}
}
} else {
@@ -114,7 +123,7 @@ public class StringLength extends VectorExpression {
outputColVector.noNulls = true;
}
for(int i = 0; i != n; i++) {
- resultLen[i] = utf8StringLength(vector[i], start[i], length[i]);
+ resultLen[i] = isFixedLength ? fixedLength : utf8StringLength(vector[i], start[i], length[i]);
}
}
} else /* there are nulls in the inputColVector */ {
@@ -127,7 +136,7 @@ public class StringLength extends VectorExpression {
int i = sel[j];
outputColVector.isNull[i] = inputColVector.isNull[i];
if (!inputColVector.isNull[i]) {
- resultLen[i] = utf8StringLength(vector[i], start[i], length[i]);
+ resultLen[i] = isFixedLength ? fixedLength : utf8StringLength(vector[i], start[i], length[i]);
}
}
outputColVector.isRepeating = false;
@@ -135,7 +144,7 @@ public class StringLength extends VectorExpression {
for(int i = 0; i != n; i++) {
outputColVector.isNull[i] = inputColVector.isNull[i];
if (!inputColVector.isNull[i]) {
- resultLen[i] = utf8StringLength(vector[i], start[i], length[i]);
+ resultLen[i] = isFixedLength ? fixedLength : utf8StringLength(vector[i], start[i], length[i]);
}
}
}
http://git-wip-us.apache.org/repos/asf/hive/blob/c8b3f9aa/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFCharacterLength.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFCharacterLength.java b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFCharacterLength.java
index ce6cd30..30c40d3 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFCharacterLength.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFCharacterLength.java
@@ -27,6 +27,7 @@ import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.PrimitiveObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorConverter;
import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorFactory;
+import org.apache.hadoop.hive.serde2.typeinfo.CharTypeInfo;
import org.apache.hadoop.io.BytesWritable;
import org.apache.hadoop.io.IntWritable;
@@ -40,6 +41,7 @@ public class GenericUDFCharacterLength extends GenericUDF {
private transient PrimitiveObjectInspector argumentOI;
private transient PrimitiveObjectInspectorConverter.StringConverter stringConverter;
private transient boolean isInputString;
+ private transient boolean isInputFixedLength;
@Override
public ObjectInspector initialize(ObjectInspector[] arguments) throws UDFArgumentException {
@@ -59,6 +61,8 @@ public class GenericUDFCharacterLength extends GenericUDF {
ObjectInspector outputOI = null;
switch (inputType) {
case CHAR:
+ isInputFixedLength = true;
+ result.set(((CharTypeInfo) argumentOI.getTypeInfo()).getLength());
case VARCHAR:
case STRING:
isInputString = true;
@@ -90,6 +94,11 @@ public class GenericUDFCharacterLength extends GenericUDF {
return null;
}
+ // For char, we do not need to explore the data
+ if (isInputFixedLength) {
+ return result;
+ }
+
data = val.getBytes();
} else {
BytesWritable val = null;
http://git-wip-us.apache.org/repos/asf/hive/blob/c8b3f9aa/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFLength.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFLength.java b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFLength.java
index f4ac350..f9ca15d 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFLength.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFLength.java
@@ -28,6 +28,7 @@ import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.PrimitiveObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorConverter;
import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorFactory;
+import org.apache.hadoop.hive.serde2.typeinfo.CharTypeInfo;
import org.apache.hadoop.io.BytesWritable;
import org.apache.hadoop.io.IntWritable;
@@ -46,6 +47,7 @@ public class GenericUDFLength extends GenericUDF {
private transient PrimitiveObjectInspectorConverter.StringConverter stringConverter;
private transient PrimitiveObjectInspectorConverter.BinaryConverter binaryConverter;
private transient boolean isInputString;
+ private transient boolean isInputFixedLength;
@Override
public ObjectInspector initialize(ObjectInspector[] arguments) throws UDFArgumentException {
@@ -64,6 +66,8 @@ public class GenericUDFLength extends GenericUDF {
ObjectInspector outputOI = null;
switch (inputType) {
case CHAR:
+ isInputFixedLength = true;
+ result.set(((CharTypeInfo) argumentOI.getTypeInfo()).getLength());
case VARCHAR:
case STRING:
isInputString = true;
@@ -98,6 +102,11 @@ public class GenericUDFLength extends GenericUDF {
return null;
}
+ // For char, we do not need to explore the data
+ if (isInputFixedLength) {
+ return result;
+ }
+
data = val.getBytes();
int len = 0;
http://git-wip-us.apache.org/repos/asf/hive/blob/c8b3f9aa/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFOctetLength.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFOctetLength.java b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFOctetLength.java
index 825066f..2a39ebb 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFOctetLength.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDFOctetLength.java
@@ -27,6 +27,7 @@ import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.PrimitiveObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorConverter;
import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorFactory;
+import org.apache.hadoop.hive.serde2.typeinfo.CharTypeInfo;
import org.apache.hadoop.io.BytesWritable;
import org.apache.hadoop.io.IntWritable;
@@ -40,6 +41,7 @@ public class GenericUDFOctetLength extends GenericUDF {
private transient PrimitiveObjectInspector argumentOI;
private transient PrimitiveObjectInspectorConverter.StringConverter stringConverter;
private transient boolean isInputString;
+ private transient boolean isInputFixedLength;
@Override
public ObjectInspector initialize(ObjectInspector[] arguments) throws UDFArgumentException {
@@ -59,6 +61,8 @@ public class GenericUDFOctetLength extends GenericUDF {
ObjectInspector outputOI = null;
switch (inputType) {
case CHAR:
+ isInputFixedLength = true;
+ result.set(((CharTypeInfo) argumentOI.getTypeInfo()).getLength());
case VARCHAR:
case STRING:
isInputString = true;
@@ -90,6 +94,11 @@ public class GenericUDFOctetLength extends GenericUDF {
return null;
}
+ // For char, we do not need to explore the data
+ if (isInputFixedLength) {
+ return result;
+ }
+
data = val.getBytes();
} else {
BytesWritable val = null;
http://git-wip-us.apache.org/repos/asf/hive/blob/c8b3f9aa/ql/src/test/org/apache/hadoop/hive/ql/exec/vector/expressions/TestVectorStringExpressions.java
----------------------------------------------------------------------
diff --git a/ql/src/test/org/apache/hadoop/hive/ql/exec/vector/expressions/TestVectorStringExpressions.java b/ql/src/test/org/apache/hadoop/hive/ql/exec/vector/expressions/TestVectorStringExpressions.java
index 902f29e..8a521f9 100644
--- a/ql/src/test/org/apache/hadoop/hive/ql/exec/vector/expressions/TestVectorStringExpressions.java
+++ b/ql/src/test/org/apache/hadoop/hive/ql/exec/vector/expressions/TestVectorStringExpressions.java
@@ -63,6 +63,9 @@ import org.apache.hadoop.hive.ql.exec.vector.expressions.gen.VarCharScalarEqualS
import org.apache.hadoop.hive.ql.exec.vector.util.VectorizedRowGroupGenUtil;
import org.apache.hadoop.hive.ql.metadata.HiveException;
import org.apache.hadoop.hive.ql.udf.UDFLike;
+import org.apache.hadoop.hive.serde2.typeinfo.TypeInfo;
+import org.apache.hadoop.hive.serde2.typeinfo.TypeInfoFactory;
+import org.apache.hadoop.hive.serde2.typeinfo.TypeInfoUtils;
import org.apache.hadoop.io.BooleanWritable;
import org.apache.hadoop.io.Text;
import org.junit.Test;
@@ -4138,9 +4141,12 @@ public class TestVectorStringExpressions {
@Test
public void testStringLength() throws HiveException {
+ StringLength expr = new StringLength(0, 1);
+ expr.inputTypeInfos = new TypeInfo[1];
+ expr.inputTypeInfos[0] = TypeInfoFactory.stringTypeInfo;
+
// has nulls, not repeating
VectorizedRowBatch batch = makeStringBatchMixedCharSize();
- StringLength expr = new StringLength(0, 1);
expr.evaluate(batch);
LongColumnVector outCol = (LongColumnVector) batch.cols[1];
Assert.assertEquals(5, outCol.vector[1]); // length of green is 5
http://git-wip-us.apache.org/repos/asf/hive/blob/c8b3f9aa/ql/src/test/queries/clientpositive/char_trailing_space.q
----------------------------------------------------------------------
diff --git a/ql/src/test/queries/clientpositive/char_trailing_space.q b/ql/src/test/queries/clientpositive/char_trailing_space.q
new file mode 100644
index 0000000..a8fb6d0
--- /dev/null
+++ b/ql/src/test/queries/clientpositive/char_trailing_space.q
@@ -0,0 +1,8 @@
+create table char_trailing_space(a char(2), b varchar(2));
+insert into char_trailing_space values('L ', 'L ');
+
+select length(a),length(b) from char_trailing_space;
+select character_length(a),character_length(b) from char_trailing_space;
+select octet_length(a),octet_length(b) from char_trailing_space;
+
+drop table char_trailing_space;
http://git-wip-us.apache.org/repos/asf/hive/blob/c8b3f9aa/ql/src/test/results/clientpositive/alter_char2.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/alter_char2.q.out b/ql/src/test/results/clientpositive/alter_char2.q.out
index 2084477..76d7234 100644
--- a/ql/src/test/results/clientpositive/alter_char2.q.out
+++ b/ql/src/test/results/clientpositive/alter_char2.q.out
@@ -35,7 +35,7 @@ POSTHOOK: type: QUERY
POSTHOOK: Input: default@alter_char2
POSTHOOK: Input: default@alter_char2@hr=1
#### A masked pattern was here ####
-val_238 7
+val_238 255
PREHOOK: query: alter table alter_char2 change column c1 c1 char(10)
PREHOOK: type: ALTERTABLE_RENAMECOL
PREHOOK: Input: default@alter_char2
@@ -54,7 +54,7 @@ POSTHOOK: type: QUERY
POSTHOOK: Input: default@alter_char2
POSTHOOK: Input: default@alter_char2@hr=1
#### A masked pattern was here ####
-1 val_238 7
+1 val_238 10
PREHOOK: query: insert overwrite table alter_char2 partition (hr=2)
select key from src limit 1
PREHOOK: type: QUERY
@@ -76,7 +76,7 @@ POSTHOOK: type: QUERY
POSTHOOK: Input: default@alter_char2
POSTHOOK: Input: default@alter_char2@hr=1
#### A masked pattern was here ####
-1 val_238 7
+1 val_238 10
PREHOOK: query: select hr, c1, length(c1) from alter_char2 where hr = 2
PREHOOK: type: QUERY
PREHOOK: Input: default@alter_char2
@@ -87,4 +87,4 @@ POSTHOOK: type: QUERY
POSTHOOK: Input: default@alter_char2
POSTHOOK: Input: default@alter_char2@hr=2
#### A masked pattern was here ####
-2 238 3
+2 238 10
http://git-wip-us.apache.org/repos/asf/hive/blob/c8b3f9aa/ql/src/test/results/clientpositive/char_udf1.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/char_udf1.q.out b/ql/src/test/results/clientpositive/char_udf1.q.out
index 09fb697..f5d1acf 100644
--- a/ql/src/test/results/clientpositive/char_udf1.q.out
+++ b/ql/src/test/results/clientpositive/char_udf1.q.out
@@ -159,7 +159,7 @@ from char_udf_1 limit 1
POSTHOOK: type: QUERY
POSTHOOK: Input: default@char_udf_1
#### A masked pattern was here ####
-7 7 true
+7 20 false
PREHOOK: query: select
locate('a', 'abcdabcd', 3),
locate(cast('a' as char(1)), cast('abcdabcd' as char(10)), 3),
http://git-wip-us.apache.org/repos/asf/hive/blob/c8b3f9aa/ql/src/test/results/clientpositive/llap/char_trailing_space.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/llap/char_trailing_space.q.out b/ql/src/test/results/clientpositive/llap/char_trailing_space.q.out
new file mode 100644
index 0000000..cea90f7
--- /dev/null
+++ b/ql/src/test/results/clientpositive/llap/char_trailing_space.q.out
@@ -0,0 +1,53 @@
+PREHOOK: query: create table char_trailing_space(a char(2), b varchar(2))
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@char_trailing_space
+POSTHOOK: query: create table char_trailing_space(a char(2), b varchar(2))
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@char_trailing_space
+PREHOOK: query: insert into char_trailing_space values('L ', 'L ')
+PREHOOK: type: QUERY
+PREHOOK: Input: _dummy_database@_dummy_table
+PREHOOK: Output: default@char_trailing_space
+POSTHOOK: query: insert into char_trailing_space values('L ', 'L ')
+POSTHOOK: type: QUERY
+POSTHOOK: Input: _dummy_database@_dummy_table
+POSTHOOK: Output: default@char_trailing_space
+POSTHOOK: Lineage: char_trailing_space.a SCRIPT []
+POSTHOOK: Lineage: char_trailing_space.b SCRIPT []
+PREHOOK: query: select length(a),length(b) from char_trailing_space
+PREHOOK: type: QUERY
+PREHOOK: Input: default@char_trailing_space
+#### A masked pattern was here ####
+POSTHOOK: query: select length(a),length(b) from char_trailing_space
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@char_trailing_space
+#### A masked pattern was here ####
+2 2
+PREHOOK: query: select character_length(a),character_length(b) from char_trailing_space
+PREHOOK: type: QUERY
+PREHOOK: Input: default@char_trailing_space
+#### A masked pattern was here ####
+POSTHOOK: query: select character_length(a),character_length(b) from char_trailing_space
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@char_trailing_space
+#### A masked pattern was here ####
+2 2
+PREHOOK: query: select octet_length(a),octet_length(b) from char_trailing_space
+PREHOOK: type: QUERY
+PREHOOK: Input: default@char_trailing_space
+#### A masked pattern was here ####
+POSTHOOK: query: select octet_length(a),octet_length(b) from char_trailing_space
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@char_trailing_space
+#### A masked pattern was here ####
+2 2
+PREHOOK: query: drop table char_trailing_space
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@char_trailing_space
+PREHOOK: Output: default@char_trailing_space
+POSTHOOK: query: drop table char_trailing_space
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@char_trailing_space
+POSTHOOK: Output: default@char_trailing_space
http://git-wip-us.apache.org/repos/asf/hive/blob/c8b3f9aa/ql/src/test/results/clientpositive/llap/parquet_types.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/llap/parquet_types.q.out b/ql/src/test/results/clientpositive/llap/parquet_types.q.out
index 508ac16..9678bb4 100644
--- a/ql/src/test/results/clientpositive/llap/parquet_types.q.out
+++ b/ql/src/test/results/clientpositive/llap/parquet_types.q.out
@@ -192,10 +192,10 @@ POSTHOOK: query: SELECT cchar, LENGTH(cchar), cvarchar, LENGTH(cvarchar) FROM pa
POSTHOOK: type: QUERY
POSTHOOK: Input: default@parquet_types
#### A masked pattern was here ####
-a 1 a 3
-ab 2 ab 3
-abc 3 abc 3
-abcd 4 abcd 4
+a 5 a 3
+ab 5 ab 3
+abc 5 abc 3
+abcd 5 abcd 4
abcde 5 abcde 5
abcde 5 abcdef 6
abcde 5 abcdefg 7
http://git-wip-us.apache.org/repos/asf/hive/blob/c8b3f9aa/ql/src/test/results/clientpositive/llap/vector_char_varchar_1.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/llap/vector_char_varchar_1.q.out b/ql/src/test/results/clientpositive/llap/vector_char_varchar_1.q.out
index 5a23539..0ba2755 100644
--- a/ql/src/test/results/clientpositive/llap/vector_char_varchar_1.q.out
+++ b/ql/src/test/results/clientpositive/llap/vector_char_varchar_1.q.out
@@ -291,4 +291,4 @@ char_ctas_1._c0 char_ctas_1._c1
10 m thgilnus
10 sdrow emos
10 t eht sgeb
-8 wolley
+10 wolley
http://git-wip-us.apache.org/repos/asf/hive/blob/c8b3f9aa/ql/src/test/results/clientpositive/llap/vectorized_parquet_types.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/llap/vectorized_parquet_types.q.out b/ql/src/test/results/clientpositive/llap/vectorized_parquet_types.q.out
index d0d13ba..cf45c90 100644
--- a/ql/src/test/results/clientpositive/llap/vectorized_parquet_types.q.out
+++ b/ql/src/test/results/clientpositive/llap/vectorized_parquet_types.q.out
@@ -211,10 +211,10 @@ POSTHOOK: query: SELECT cchar, LENGTH(cchar), cvarchar, LENGTH(cvarchar), cdecim
POSTHOOK: type: QUERY
POSTHOOK: Input: default@parquet_types_n2
#### A masked pattern was here ####
-a 1 a 3 48.88 1
-ab 2 ab 3 8.72 1
-abc 3 abc 3 90.21 1
-abcd 4 abcd 4 3.89 1
+a 5 a 3 48.88 1
+ab 5 ab 3 8.72 1
+abc 5 abc 3 90.21 1
+abcd 5 abcd 4 3.89 1
abcde 5 abcde 5 56.23 1
abcde 5 abcdef 6 90.21 1
abcde 5 abcdefg 7 6.09 1
@@ -552,10 +552,10 @@ POSTHOOK: query: SELECT cchar, LENGTH(cchar), cvarchar, LENGTH(cvarchar), cdecim
POSTHOOK: type: QUERY
POSTHOOK: Input: default@parquet_type_nodict
#### A masked pattern was here ####
-a 1 a 3 48.88 1
-ab 2 ab 3 8.72 1
-abc 3 abc 3 90.21 1
-abcd 4 abcd 4 3.89 1
+a 5 a 3 48.88 1
+ab 5 ab 3 8.72 1
+abc 5 abc 3 90.21 1
+abcd 5 abcd 4 3.89 1
abcde 5 abcde 5 56.23 1
abcde 5 abcdef 6 90.21 1
abcde 5 abcdefg 7 6.09 1
http://git-wip-us.apache.org/repos/asf/hive/blob/c8b3f9aa/ql/src/test/results/clientpositive/vectorized_parquet_types.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/vectorized_parquet_types.q.out b/ql/src/test/results/clientpositive/vectorized_parquet_types.q.out
index c1f2d54..772e5b0 100644
--- a/ql/src/test/results/clientpositive/vectorized_parquet_types.q.out
+++ b/ql/src/test/results/clientpositive/vectorized_parquet_types.q.out
@@ -279,10 +279,10 @@ POSTHOOK: query: SELECT cchar, LENGTH(cchar), cvarchar, LENGTH(cvarchar), cdecim
POSTHOOK: type: QUERY
POSTHOOK: Input: default@parquet_types_n2
#### A masked pattern was here ####
-a 1 a 3 48.88 1
-ab 2 ab 3 8.72 1
-abc 3 abc 3 90.21 1
-abcd 4 abcd 4 3.89 1
+a 5 a 3 48.88 1
+ab 5 ab 3 8.72 1
+abc 5 abc 3 90.21 1
+abcd 5 abcd 4 3.89 1
abcde 5 abcde 5 56.23 1
abcde 5 abcdef 6 90.21 1
abcde 5 abcdefg 7 6.09 1
@@ -678,10 +678,10 @@ POSTHOOK: query: SELECT cchar, LENGTH(cchar), cvarchar, LENGTH(cvarchar), cdecim
POSTHOOK: type: QUERY
POSTHOOK: Input: default@parquet_type_nodict
#### A masked pattern was here ####
-a 1 a 3 48.88 1
-ab 2 ab 3 8.72 1
-abc 3 abc 3 90.21 1
-abcd 4 abcd 4 3.89 1
+a 5 a 3 48.88 1
+ab 5 ab 3 8.72 1
+abc 5 abc 3 90.21 1
+abcd 5 abcd 4 3.89 1
abcde 5 abcde 5 56.23 1
abcde 5 abcdef 6 90.21 1
abcde 5 abcdefg 7 6.09 1