Index: build.xml
===================================================================
--- build.xml (revision 1520169)
+++ build.xml (working copy)
@@ -517,6 +517,7 @@
+
Index: data/files/pw17.txt
===================================================================
--- data/files/pw17.txt (revision 0)
+++ data/files/pw17.txt (revision 0)
@@ -0,0 +1,4 @@
+1 12 1
+2 23 2
+4 56 3
+6 8 4
Index: data/files/CustomSerDes.jar
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: data/files/CustomSerDes.jar
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/NonSettableStructObjectInspector.java
===================================================================
--- serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/NonSettableStructObjectInspector.java (revision 0)
+++ serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/NonSettableStructObjectInspector.java (revision 0)
@@ -0,0 +1,174 @@
+package org.apache.hadoop.hive.serde2.objectinspector;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+public class NonSettableStructObjectInspector extends
+StructObjectInspector {
+ public static final Log LOG = LogFactory
+ .getLog(NonSettableStructObjectInspector.class.getName());
+
+ protected static class MyField implements StructField {
+ protected int fieldID;
+ protected String fieldName;
+ protected ObjectInspector fieldObjectInspector;
+ protected String fieldComment;
+
+ public MyField(int fieldID, String fieldName,
+ ObjectInspector fieldObjectInspector) {
+ this.fieldID = fieldID;
+ this.fieldName = fieldName.toLowerCase();
+ this.fieldObjectInspector = fieldObjectInspector;
+ }
+
+ public MyField(int fieldID, String fieldName,
+ ObjectInspector fieldObjectInspector, String fieldComment) {
+ this(fieldID, fieldName, fieldObjectInspector);
+ this.fieldComment = fieldComment;
+ }
+
+ public int getFieldID() {
+ return fieldID;
+ }
+
+ public String getFieldName() {
+ return fieldName;
+ }
+
+ public ObjectInspector getFieldObjectInspector() {
+ return fieldObjectInspector;
+ }
+
+ public String getFieldComment() {
+ return fieldComment;
+ }
+
+ @Override
+ public String toString() {
+ return "" + fieldID + ":" + fieldName;
+ }
+ }
+
+ protected List fields;
+
+ public String getTypeName() {
+ return ObjectInspectorUtils.getStandardStructTypeName(this);
+ }
+
+ /**
+ * Call ObjectInspectorFactory.getNonSettableStructObjectInspector instead.
+ */
+ protected NonSettableStructObjectInspector(List structFieldNames,
+ List structFieldObjectInspectors) {
+ init(structFieldNames, structFieldObjectInspectors, null);
+ }
+
+ /**
+ * Call ObjectInspectorFactory.getNonSettableStructObjectInspector instead.
+ */
+ protected NonSettableStructObjectInspector(List structFieldNames,
+ List structFieldObjectInspectors,
+ List structFieldComments) {
+ init(structFieldNames, structFieldObjectInspectors, structFieldComments);
+ }
+
+ protected void init(List structFieldNames,
+ List structFieldObjectInspectors,
+ List structFieldComments) {
+ assert (structFieldNames.size() == structFieldObjectInspectors.size());
+ assert (structFieldComments == null ||
+ (structFieldNames.size() == structFieldComments.size()));
+
+ fields = new ArrayList(structFieldNames.size());
+ for (int i = 0; i < structFieldNames.size(); i++) {
+ fields.add(new MyField(i, structFieldNames.get(i),
+ structFieldObjectInspectors.get(i),
+ structFieldComments == null ? null : structFieldComments.get(i)));
+ }
+ }
+
+ protected NonSettableStructObjectInspector(List fields) {
+ init(fields);
+ }
+
+ protected void init(List fields) {
+ this.fields = new ArrayList(fields.size());
+ for (int i = 0; i < fields.size(); i++) {
+ this.fields.add(new MyField(i, fields.get(i).getFieldName(), fields
+ .get(i).getFieldObjectInspector()));
+ }
+ }
+
+ public final Category getCategory() {
+ return Category.STRUCT;
+ }
+
+ // Without Data
+ @Override
+ public StructField getStructFieldRef(String fieldName) {
+ return ObjectInspectorUtils.getStandardStructFieldRef(fieldName, fields);
+ }
+
+ @Override
+ public List extends StructField> getAllStructFieldRefs() {
+ return fields;
+ }
+
+ boolean warned = false;
+
+ // With Data
+ @Override
+ @SuppressWarnings("unchecked")
+ public Object getStructFieldData(Object data, StructField fieldRef) {
+ if (data == null) {
+ return null;
+ }
+ // We support both List