diff --git a/serde/src/java/org/apache/hadoop/hive/serde2/columnar/ColumnarStructBase.java b/serde/src/java/org/apache/hadoop/hive/serde2/columnar/ColumnarStructBase.java index cc8ebf3f87..439db8f941 100644 --- a/serde/src/java/org/apache/hadoop/hive/serde2/columnar/ColumnarStructBase.java +++ b/serde/src/java/org/apache/hadoop/hive/serde2/columnar/ColumnarStructBase.java @@ -43,8 +43,11 @@ boolean inited; boolean fieldSkipped; ObjectInspector objectInspector; + ColumnarStructBase target; - public FieldInfo(LazyObjectBase lazyObject, boolean fieldSkipped, ObjectInspector oi) { + public FieldInfo(LazyObjectBase lazyObject, boolean fieldSkipped, ObjectInspector oi, + ColumnarStructBase target) { + this.target = target; field = lazyObject; cachedByteArrayRef = new ByteArrayRef(); objectInspector = oi; @@ -102,7 +105,7 @@ protected Object uncheckedGetField() { throw new RuntimeException(e); } inited = true; - int byteLength = getLength(objectInspector, cachedByteArrayRef, rawBytesField.getStart(), + int byteLength = target.getLength(objectInspector, cachedByteArrayRef, rawBytesField.getStart(), rawBytesField.getLength()); if (byteLength == -1) { return null; @@ -111,13 +114,14 @@ protected Object uncheckedGetField() { field.init(cachedByteArrayRef, rawBytesField.getStart(), byteLength); return field.getObject(); } else { - if (getLength(objectInspector, cachedByteArrayRef, rawBytesField.getStart(), + if (target.getLength(objectInspector, cachedByteArrayRef, rawBytesField.getStart(), rawBytesField.getLength()) == -1) { return null; } return field.getObject(); } } + } protected int[] prjColIDs = null; @@ -136,7 +140,7 @@ public ColumnarStructBase(ObjectInspector oi, List notSkippedColumnIDs) fieldInfoList[i] = new FieldInfo( createLazyObjectBase(foi), !notSkippedColumnIDs.contains(i), - foi); + foi, this); } // maintain a list of non-NULL column IDs