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