diff --git a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/ObjectInspectorFactory.java b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/ObjectInspectorFactory.java index c0f9d08e48..352cbcef26 100644 --- a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/ObjectInspectorFactory.java +++ b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/ObjectInspectorFactory.java @@ -21,7 +21,6 @@ import java.lang.reflect.GenericArrayType; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; -import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.List; @@ -29,7 +28,6 @@ import java.util.Set; import java.util.concurrent.ConcurrentHashMap; -import org.apache.hadoop.hive.common.StringInternUtils; import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorFactory; import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorUtils; import org.apache.thrift.TUnion; @@ -230,22 +228,9 @@ private static ObjectInspector getReflectionObjectInspectorNoCache(Type t, } - static ConcurrentHashMap - cachedStandardListObjectInspector = new ConcurrentHashMap(); - public static StandardListObjectInspector getStandardListObjectInspector( ObjectInspector listElementObjectInspector) { - StandardListObjectInspector result = cachedStandardListObjectInspector - .get(listElementObjectInspector); - if (result == null) { - result = new StandardListObjectInspector(listElementObjectInspector); - StandardListObjectInspector prev = - cachedStandardListObjectInspector.putIfAbsent(listElementObjectInspector, result); - if (prev != null) { - result = prev; - } - } - return result; + return new StandardListObjectInspector(listElementObjectInspector); } public static StandardConstantListObjectInspector getStandardConstantListObjectInspector( @@ -253,27 +238,10 @@ public static StandardConstantListObjectInspector getStandardConstantListObjectI return new StandardConstantListObjectInspector(listElementObjectInspector, constantValue); } - static ConcurrentHashMap, StandardMapObjectInspector> cachedStandardMapObjectInspector = - new ConcurrentHashMap, StandardMapObjectInspector>(); - public static StandardMapObjectInspector getStandardMapObjectInspector( ObjectInspector mapKeyObjectInspector, ObjectInspector mapValueObjectInspector) { - ArrayList signature = new ArrayList(2); - signature.add(mapKeyObjectInspector); - signature.add(mapValueObjectInspector); - StandardMapObjectInspector result = cachedStandardMapObjectInspector - .get(signature); - if (result == null) { - result = new StandardMapObjectInspector(mapKeyObjectInspector, - mapValueObjectInspector); - StandardMapObjectInspector prev = - cachedStandardMapObjectInspector.putIfAbsent(signature, result); - if (prev != null) { - result = prev; - } - } - return result; + return new StandardMapObjectInspector(mapKeyObjectInspector, mapValueObjectInspector); } public static StandardConstantMapObjectInspector getStandardConstantMapObjectInspector( @@ -284,28 +252,11 @@ public static StandardConstantMapObjectInspector getStandardConstantMapObjectIns mapValueObjectInspector, constantValue); } - static ConcurrentHashMap, StandardUnionObjectInspector> - cachedStandardUnionObjectInspector = - new ConcurrentHashMap, StandardUnionObjectInspector>(); - public static StandardUnionObjectInspector getStandardUnionObjectInspector( List unionObjectInspectors) { - StandardUnionObjectInspector result = cachedStandardUnionObjectInspector - .get(unionObjectInspectors); - if (result == null) { - result = new StandardUnionObjectInspector(unionObjectInspectors); - StandardUnionObjectInspector prev = - cachedStandardUnionObjectInspector.putIfAbsent(unionObjectInspectors, result); - if (prev != null) { - result = prev; - } - } - return result; + return new StandardUnionObjectInspector(unionObjectInspectors); } - static ConcurrentHashMap>, StandardStructObjectInspector> cachedStandardStructObjectInspector = - new ConcurrentHashMap>, StandardStructObjectInspector>(); - public static StandardStructObjectInspector getStandardStructObjectInspector( List structFieldNames, List structFieldObjectInspectors) { @@ -316,24 +267,7 @@ public static StandardStructObjectInspector getStandardStructObjectInspector( List structFieldNames, List structFieldObjectInspectors, List structComments) { - ArrayList> signature = new ArrayList>(3); - StringInternUtils.internStringsInList(structFieldNames); - signature.add(structFieldNames); - signature.add(structFieldObjectInspectors); - if (structComments != null) { - StringInternUtils.internStringsInList(structComments); - signature.add(structComments); - } - StandardStructObjectInspector result = cachedStandardStructObjectInspector.get(signature); - if (result == null) { - result = new StandardStructObjectInspector(structFieldNames, structFieldObjectInspectors, structComments); - StandardStructObjectInspector prev = - cachedStandardStructObjectInspector.putIfAbsent(signature, result); - if (prev != null) { - result = prev; - } - } - return result; + return new StandardStructObjectInspector(structFieldNames, structFieldObjectInspectors, structComments); } public static StandardConstantStructObjectInspector getStandardConstantStructObjectInspector( @@ -342,27 +276,11 @@ public static StandardConstantStructObjectInspector getStandardConstantStructObj return new StandardConstantStructObjectInspector(structFieldNames, structFieldObjectInspectors, value); } - static ConcurrentHashMap, UnionStructObjectInspector> cachedUnionStructObjectInspector = - new ConcurrentHashMap, UnionStructObjectInspector>(); - public static UnionStructObjectInspector getUnionStructObjectInspector( List structObjectInspectors) { - UnionStructObjectInspector result = cachedUnionStructObjectInspector - .get(structObjectInspectors); - if (result == null) { - result = new UnionStructObjectInspector(structObjectInspectors); - UnionStructObjectInspector prev = - cachedUnionStructObjectInspector.putIfAbsent(structObjectInspectors, result); - if (prev != null) { - result = prev; - } - } - return result; + return new UnionStructObjectInspector(structObjectInspectors); } - static ConcurrentHashMap, ColumnarStructObjectInspector> cachedColumnarStructObjectInspector = - new ConcurrentHashMap, ColumnarStructObjectInspector>(); - public static ColumnarStructObjectInspector getColumnarStructObjectInspector( List structFieldNames, List structFieldObjectInspectors) { @@ -372,24 +290,8 @@ public static ColumnarStructObjectInspector getColumnarStructObjectInspector( public static ColumnarStructObjectInspector getColumnarStructObjectInspector( List structFieldNames, List structFieldObjectInspectors, List structFieldComments) { - ArrayList signature = new ArrayList(3); - signature.add(structFieldNames); - signature.add(structFieldObjectInspectors); - if(structFieldComments != null) { - signature.add(structFieldComments); - } - ColumnarStructObjectInspector result = cachedColumnarStructObjectInspector - .get(signature); - if (result == null) { - result = new ColumnarStructObjectInspector(structFieldNames, - structFieldObjectInspectors, structFieldComments); - ColumnarStructObjectInspector prev = - cachedColumnarStructObjectInspector.putIfAbsent(signature, result); - if (prev != null) { - result = prev; - } - } - return result; + return new ColumnarStructObjectInspector(structFieldNames, + structFieldObjectInspectors, structFieldComments); } private ObjectInspectorFactory() { diff --git a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/StandardConstantListObjectInspector.java b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/StandardConstantListObjectInspector.java index c0cdae4d32..087278895d 100644 --- a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/StandardConstantListObjectInspector.java +++ b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/StandardConstantListObjectInspector.java @@ -48,4 +48,18 @@ protected StandardConstantListObjectInspector( public List getWritableConstantValue() { return value; } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + return obj instanceof StandardConstantListObjectInspector && + value.equals(((StandardConstantListObjectInspector) obj).value); + } + + @Override + public int hashCode() { + return value.hashCode(); + } } diff --git a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/StandardConstantMapObjectInspector.java b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/StandardConstantMapObjectInspector.java index 55b9fc8c2f..65b72d50cc 100644 --- a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/StandardConstantMapObjectInspector.java +++ b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/StandardConstantMapObjectInspector.java @@ -48,4 +48,18 @@ protected StandardConstantMapObjectInspector(ObjectInspector mapKeyObjectInspect public Map getWritableConstantValue() { return value; } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + return obj instanceof StandardConstantMapObjectInspector && + value.equals(((StandardConstantMapObjectInspector) obj).value); + } + + @Override + public int hashCode() { + return value.hashCode(); + } } diff --git a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/StandardConstantStructObjectInspector.java b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/StandardConstantStructObjectInspector.java index cf0be75d48..9531ea2eb6 100644 --- a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/StandardConstantStructObjectInspector.java +++ b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/StandardConstantStructObjectInspector.java @@ -48,4 +48,18 @@ protected StandardConstantStructObjectInspector(List structFieldNames, public List getWritableConstantValue() { return value; } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + return obj instanceof StandardConstantStructObjectInspector && + value.equals(((StandardConstantStructObjectInspector) obj).value); + } + + @Override + public int hashCode() { + return value.hashCode(); + } } diff --git a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/StandardListObjectInspector.java b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/StandardListObjectInspector.java index da35c5c901..07a108730f 100644 --- a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/StandardListObjectInspector.java +++ b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/StandardListObjectInspector.java @@ -19,6 +19,7 @@ package org.apache.hadoop.hive.serde2.objectinspector; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.Set; @@ -152,4 +153,20 @@ public Object set(Object list, int index, Object element) { return a; } + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (!(obj instanceof StandardListObjectInspector)) { + return false; + } + StandardListObjectInspector other = (StandardListObjectInspector) obj; + return listElementObjectInspector.equals(other.listElementObjectInspector); + } + + @Override + public int hashCode() { + return listElementObjectInspector.hashCode(); + } } diff --git a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/StandardMapObjectInspector.java b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/StandardMapObjectInspector.java index de41b97bbd..321431ed98 100644 --- a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/StandardMapObjectInspector.java +++ b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/StandardMapObjectInspector.java @@ -18,6 +18,7 @@ package org.apache.hadoop.hive.serde2.objectinspector; +import java.util.Arrays; import java.util.HashMap; import java.util.Map; @@ -125,4 +126,21 @@ public Object remove(Object map, Object key) { return m; } + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (!(obj instanceof StandardMapObjectInspector)) { + return false; + } + StandardMapObjectInspector other = (StandardMapObjectInspector) obj; + return mapKeyObjectInspector.equals(other.mapKeyObjectInspector) && + mapValueObjectInspector.equals(other.mapValueObjectInspector); + } + + @Override + public int hashCode() { + return Arrays.hashCode(new Object[] { mapKeyObjectInspector, mapValueObjectInspector }); + } } diff --git a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/StandardStructObjectInspector.java b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/StandardStructObjectInspector.java index 3de9a2ee31..3bbfa20606 100644 --- a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/StandardStructObjectInspector.java +++ b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/StandardStructObjectInspector.java @@ -85,6 +85,25 @@ public String getFieldComment() { public String toString() { return "" + fieldID + ":" + fieldName; } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (!(obj instanceof MyField)) { + return false; + } + MyField other = (MyField) obj; + return fieldID == other.fieldID && + fieldName.equals(other.fieldName) && + fieldObjectInspector.equals(other.fieldObjectInspector); + } + + @Override + public int hashCode() { + return Arrays.hashCode(new Object[] { fieldName, fieldObjectInspector }); + } } protected List fields; @@ -239,4 +258,20 @@ public Object setStructFieldData(Object struct, StructField field, return a; } + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (!(obj instanceof StandardStructObjectInspector)) { + return false; + } + StandardStructObjectInspector other = (StandardStructObjectInspector) obj; + return fields.equals(other.fields); + } + + @Override + public int hashCode() { + return fields.hashCode(); + } } diff --git a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/StandardUnionObjectInspector.java b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/StandardUnionObjectInspector.java index 002514f304..2e20ea439e 100644 --- a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/StandardUnionObjectInspector.java +++ b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/StandardUnionObjectInspector.java @@ -159,4 +159,20 @@ public Object setFieldAndTag(Object union, Object field, byte tag) { return unionObject; } + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (!(obj instanceof StandardUnionObjectInspector)) { + return false; + } + StandardUnionObjectInspector other = (StandardUnionObjectInspector) obj; + return ois.equals(other.ois); + } + + @Override + public int hashCode() { + return ois.hashCode(); + } } diff --git a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaConstantBinaryObjectInspector.java b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaConstantBinaryObjectInspector.java index 2a4c6d9577..6c4d39e1fd 100644 --- a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaConstantBinaryObjectInspector.java +++ b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaConstantBinaryObjectInspector.java @@ -17,6 +17,8 @@ */ package org.apache.hadoop.hive.serde2.objectinspector.primitive; +import java.util.Arrays; + import org.apache.hadoop.hive.serde2.objectinspector.ConstantObjectInspector; import org.apache.hadoop.io.BytesWritable; @@ -36,4 +38,18 @@ public Object getWritableConstantValue() { } return new BytesWritable(value); } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + return obj instanceof JavaConstantBinaryObjectInspector && + Arrays.equals(((JavaConstantBinaryObjectInspector) obj).value, value); + } + + @Override + public int hashCode() { + return Arrays.hashCode(value); + } } diff --git a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaConstantBooleanObjectInspector.java b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaConstantBooleanObjectInspector.java index d52b278bcc..cea423e9c0 100644 --- a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaConstantBooleanObjectInspector.java +++ b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaConstantBooleanObjectInspector.java @@ -36,4 +36,18 @@ public Object getWritableConstantValue() { } return new BooleanWritable(value); } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + return obj instanceof JavaConstantBooleanObjectInspector && + value.equals(((JavaConstantBooleanObjectInspector) obj).value); + } + + @Override + public int hashCode() { + return value.hashCode(); + } } diff --git a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaConstantByteObjectInspector.java b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaConstantByteObjectInspector.java index e24ed7c480..19b5d81967 100644 --- a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaConstantByteObjectInspector.java +++ b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaConstantByteObjectInspector.java @@ -36,4 +36,18 @@ public Object getWritableConstantValue() { } return new ByteWritable(value); } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + return obj instanceof JavaConstantByteObjectInspector && + value.equals(((JavaConstantByteObjectInspector) obj).value); + } + + @Override + public int hashCode() { + return value.hashCode(); + } } diff --git a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaConstantDateObjectInspector.java b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaConstantDateObjectInspector.java index bd86c2225d..bef15861b9 100644 --- a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaConstantDateObjectInspector.java +++ b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaConstantDateObjectInspector.java @@ -38,4 +38,18 @@ public Object getWritableConstantValue() { } return new DateWritable(value); } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + return obj instanceof JavaConstantDateObjectInspector && + value.equals(((JavaConstantDateObjectInspector) obj).value); + } + + @Override + public int hashCode() { + return value.hashCode(); + } } diff --git a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaConstantDoubleObjectInspector.java b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaConstantDoubleObjectInspector.java index dcfdc142f6..ea4f463aa6 100644 --- a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaConstantDoubleObjectInspector.java +++ b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaConstantDoubleObjectInspector.java @@ -36,4 +36,18 @@ public Object getWritableConstantValue() { } return new DoubleWritable(value); } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + return obj instanceof JavaConstantDoubleObjectInspector && + value.equals(((JavaConstantDoubleObjectInspector) obj).value); + } + + @Override + public int hashCode() { + return value.hashCode(); + } } diff --git a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaConstantFloatObjectInspector.java b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaConstantFloatObjectInspector.java index c1bd97689c..3fb265edcc 100644 --- a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaConstantFloatObjectInspector.java +++ b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaConstantFloatObjectInspector.java @@ -36,4 +36,18 @@ public Object getWritableConstantValue() { } return new FloatWritable(value); } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + return obj instanceof JavaConstantFloatObjectInspector && + value.equals(((JavaConstantFloatObjectInspector) obj).value); + } + + @Override + public int hashCode() { + return value.hashCode(); + } } diff --git a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaConstantHiveCharObjectInspector.java b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaConstantHiveCharObjectInspector.java index d04140fd9f..24efdd939e 100644 --- a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaConstantHiveCharObjectInspector.java +++ b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaConstantHiveCharObjectInspector.java @@ -37,4 +37,18 @@ public Object getWritableConstantValue() { } return new HiveCharWritable(value); } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + return obj instanceof JavaConstantHiveCharObjectInspector && + value.equals(((JavaConstantHiveCharObjectInspector) obj).value); + } + + @Override + public int hashCode() { + return value.hashCode(); + } } diff --git a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaConstantHiveDecimalObjectInspector.java b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaConstantHiveDecimalObjectInspector.java index 92f80982dd..ff568d01b0 100644 --- a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaConstantHiveDecimalObjectInspector.java +++ b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaConstantHiveDecimalObjectInspector.java @@ -37,4 +37,18 @@ public Object getWritableConstantValue() { } return new HiveDecimalWritable(value); } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + return obj instanceof JavaConstantHiveDecimalObjectInspector && + value.equals(((JavaConstantHiveDecimalObjectInspector) obj).value); + } + + @Override + public int hashCode() { + return value.hashCode(); + } } \ No newline at end of file diff --git a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaConstantHiveVarcharObjectInspector.java b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaConstantHiveVarcharObjectInspector.java index e470f06148..8485d031f1 100644 --- a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaConstantHiveVarcharObjectInspector.java +++ b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaConstantHiveVarcharObjectInspector.java @@ -37,4 +37,18 @@ public Object getWritableConstantValue() { } return new HiveVarcharWritable(value); } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + return obj instanceof JavaConstantHiveVarcharObjectInspector && + value.equals(((JavaConstantHiveVarcharObjectInspector) obj).value); + } + + @Override + public int hashCode() { + return value.hashCode(); + } } diff --git a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaConstantIntObjectInspector.java b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaConstantIntObjectInspector.java index c0ff664f9a..52fc336c7a 100644 --- a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaConstantIntObjectInspector.java +++ b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaConstantIntObjectInspector.java @@ -36,4 +36,18 @@ public Object getWritableConstantValue() { } return new IntWritable(value); } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + return obj instanceof JavaConstantIntObjectInspector && + value.equals(((JavaConstantIntObjectInspector) obj).value); + } + + @Override + public int hashCode() { + return value.hashCode(); + } } diff --git a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaConstantLongObjectInspector.java b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaConstantLongObjectInspector.java index 3fccd3c3aa..5269c3e92a 100644 --- a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaConstantLongObjectInspector.java +++ b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaConstantLongObjectInspector.java @@ -36,4 +36,18 @@ public Object getWritableConstantValue() { } return new LongWritable(value); } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + return obj instanceof JavaConstantLongObjectInspector && + value.equals(((JavaConstantLongObjectInspector) obj).value); + } + + @Override + public int hashCode() { + return value.hashCode(); + } } diff --git a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaConstantShortObjectInspector.java b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaConstantShortObjectInspector.java index 6460318118..680a13dc1d 100644 --- a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaConstantShortObjectInspector.java +++ b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaConstantShortObjectInspector.java @@ -36,4 +36,18 @@ public Object getWritableConstantValue() { } return new ShortWritable(value); } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + return obj instanceof JavaConstantShortObjectInspector && + value.equals(((JavaConstantShortObjectInspector) obj).value); + } + + @Override + public int hashCode() { + return value.hashCode(); + } } diff --git a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaConstantStringObjectInspector.java b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaConstantStringObjectInspector.java index 7be737ba75..4685991d19 100644 --- a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaConstantStringObjectInspector.java +++ b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaConstantStringObjectInspector.java @@ -36,4 +36,18 @@ public Object getWritableConstantValue() { } return new Text(value); } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + return obj instanceof JavaConstantStringObjectInspector && + value.equals(((JavaConstantStringObjectInspector) obj).value); + } + + @Override + public int hashCode() { + return value.hashCode(); + } } diff --git a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaConstantTimestampObjectInspector.java b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaConstantTimestampObjectInspector.java index 2453bc67cb..c4eaed9602 100644 --- a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaConstantTimestampObjectInspector.java +++ b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/JavaConstantTimestampObjectInspector.java @@ -38,4 +38,18 @@ public Object getWritableConstantValue() { } return new TimestampWritable(value); } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + return obj instanceof JavaConstantTimestampObjectInspector && + value.equals(((JavaConstantTimestampObjectInspector) obj).value); + } + + @Override + public int hashCode() { + return value.hashCode(); + } } diff --git a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableConstantBinaryObjectInspector.java b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableConstantBinaryObjectInspector.java index b5582a4fab..d6d97b4dd0 100644 --- a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableConstantBinaryObjectInspector.java +++ b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableConstantBinaryObjectInspector.java @@ -47,4 +47,17 @@ public BytesWritable getWritableConstantValue() { return value; } + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + return obj instanceof WritableConstantBinaryObjectInspector && + value.equals(((WritableConstantBinaryObjectInspector) obj).value); + } + + @Override + public int hashCode() { + return value.hashCode(); + } } diff --git a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableConstantBooleanObjectInspector.java b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableConstantBooleanObjectInspector.java index 6e8152bec3..115b03ca9f 100644 --- a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableConstantBooleanObjectInspector.java +++ b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableConstantBooleanObjectInspector.java @@ -43,4 +43,18 @@ protected WritableConstantBooleanObjectInspector() { public BooleanWritable getWritableConstantValue() { return value; } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + return obj instanceof WritableConstantBooleanObjectInspector && + value.equals(((WritableConstantBooleanObjectInspector) obj).value); + } + + @Override + public int hashCode() { + return value.hashCode(); + } } diff --git a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableConstantByteObjectInspector.java b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableConstantByteObjectInspector.java index 7c88d4461d..19099be7b4 100644 --- a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableConstantByteObjectInspector.java +++ b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableConstantByteObjectInspector.java @@ -54,4 +54,17 @@ public int precision() { return BigDecimal.valueOf(value.get()).precision(); } + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + return obj instanceof WritableConstantByteObjectInspector && + value.equals(((WritableConstantByteObjectInspector) obj).value); + } + + @Override + public int hashCode() { + return value.hashCode(); + } } diff --git a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableConstantDateObjectInspector.java b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableConstantDateObjectInspector.java index 290fcd3ca3..3fc8be8678 100644 --- a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableConstantDateObjectInspector.java +++ b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableConstantDateObjectInspector.java @@ -43,4 +43,18 @@ protected WritableConstantDateObjectInspector() { public DateWritable getWritableConstantValue() { return value; } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + return obj instanceof WritableConstantDateObjectInspector && + value.equals(((WritableConstantDateObjectInspector) obj).value); + } + + @Override + public int hashCode() { + return value.hashCode(); + } } diff --git a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableConstantDoubleObjectInspector.java b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableConstantDoubleObjectInspector.java index 09c2a514be..05c2d565ff 100644 --- a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableConstantDoubleObjectInspector.java +++ b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableConstantDoubleObjectInspector.java @@ -43,4 +43,18 @@ protected WritableConstantDoubleObjectInspector() { public DoubleWritable getWritableConstantValue() { return value; } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + return obj instanceof WritableConstantDoubleObjectInspector && + value.equals(((WritableConstantDoubleObjectInspector) obj).value); + } + + @Override + public int hashCode() { + return value.hashCode(); + } } diff --git a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableConstantFloatObjectInspector.java b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableConstantFloatObjectInspector.java index f02bf3e995..c4bc4d9f80 100644 --- a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableConstantFloatObjectInspector.java +++ b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableConstantFloatObjectInspector.java @@ -43,4 +43,18 @@ protected WritableConstantFloatObjectInspector() { public FloatWritable getWritableConstantValue() { return value; } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + return obj instanceof WritableConstantFloatObjectInspector && + value.equals(((WritableConstantFloatObjectInspector) obj).value); + } + + @Override + public int hashCode() { + return value.hashCode(); + } } diff --git a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableConstantHiveCharObjectInspector.java b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableConstantHiveCharObjectInspector.java index 0746e4afb2..1316a57d17 100644 --- a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableConstantHiveCharObjectInspector.java +++ b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableConstantHiveCharObjectInspector.java @@ -45,4 +45,18 @@ public HiveCharWritable getWritableConstantValue() { return value; } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + return obj instanceof WritableConstantHiveCharObjectInspector && + value.equals(((WritableConstantHiveCharObjectInspector) obj).value); + } + + @Override + public int hashCode() { + return value.hashCode(); + } } diff --git a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableConstantHiveDecimalObjectInspector.java b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableConstantHiveDecimalObjectInspector.java index 4e1d970eca..1b9578a84c 100644 --- a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableConstantHiveDecimalObjectInspector.java +++ b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableConstantHiveDecimalObjectInspector.java @@ -71,4 +71,17 @@ public int scale() { return value.getHiveDecimal().scale(); } + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + return obj instanceof WritableConstantHiveDecimalObjectInspector && + value.equals(((WritableConstantHiveDecimalObjectInspector) obj).value); + } + + @Override + public int hashCode() { + return value.hashCode(); + } } diff --git a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableConstantHiveIntervalDayTimeObjectInspector.java b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableConstantHiveIntervalDayTimeObjectInspector.java index 6ef81189fc..8e3c7e84b6 100644 --- a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableConstantHiveIntervalDayTimeObjectInspector.java +++ b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableConstantHiveIntervalDayTimeObjectInspector.java @@ -40,4 +40,18 @@ protected WritableConstantHiveIntervalDayTimeObjectInspector() { public Object getWritableConstantValue() { return value; } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + return obj instanceof WritableConstantHiveIntervalDayTimeObjectInspector && + value.equals(((WritableConstantHiveIntervalDayTimeObjectInspector) obj).value); + } + + @Override + public int hashCode() { + return value.hashCode(); + } } diff --git a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableConstantHiveIntervalYearMonthObjectInspector.java b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableConstantHiveIntervalYearMonthObjectInspector.java index a2f97dad95..83ded65aea 100644 --- a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableConstantHiveIntervalYearMonthObjectInspector.java +++ b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableConstantHiveIntervalYearMonthObjectInspector.java @@ -40,4 +40,18 @@ protected WritableConstantHiveIntervalYearMonthObjectInspector() { public Object getWritableConstantValue() { return value; } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + return obj instanceof WritableConstantHiveIntervalYearMonthObjectInspector && + value.equals(((WritableConstantHiveIntervalYearMonthObjectInspector) obj).value); + } + + @Override + public int hashCode() { + return value.hashCode(); + } } diff --git a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableConstantHiveVarcharObjectInspector.java b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableConstantHiveVarcharObjectInspector.java index 76cd40369d..e669f61a6c 100644 --- a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableConstantHiveVarcharObjectInspector.java +++ b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableConstantHiveVarcharObjectInspector.java @@ -46,4 +46,18 @@ public HiveVarcharWritable getWritableConstantValue() { // TODO: enforce max length return value; } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + return obj instanceof WritableConstantHiveVarcharObjectInspector && + value.equals(((WritableConstantHiveVarcharObjectInspector) obj).value); + } + + @Override + public int hashCode() { + return value.hashCode(); + } } diff --git a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableConstantIntObjectInspector.java b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableConstantIntObjectInspector.java index 129b681795..9bf8d5ef06 100644 --- a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableConstantIntObjectInspector.java +++ b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableConstantIntObjectInspector.java @@ -54,4 +54,17 @@ public int precision() { return BigDecimal.valueOf(value.get()).precision(); } + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + return obj instanceof WritableConstantIntObjectInspector && + value.equals(((WritableConstantIntObjectInspector) obj).value); + } + + @Override + public int hashCode() { + return value.hashCode(); + } } diff --git a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableConstantLongObjectInspector.java b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableConstantLongObjectInspector.java index 0452def8b4..ea04657a30 100644 --- a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableConstantLongObjectInspector.java +++ b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableConstantLongObjectInspector.java @@ -54,4 +54,17 @@ public int precision() { return BigDecimal.valueOf(value.get()).precision(); } + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + return obj instanceof WritableConstantLongObjectInspector && + value.equals(((WritableConstantLongObjectInspector) obj).value); + } + + @Override + public int hashCode() { + return value.hashCode(); + } } diff --git a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableConstantShortObjectInspector.java b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableConstantShortObjectInspector.java index 3343b1ffc4..f05547375a 100644 --- a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableConstantShortObjectInspector.java +++ b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableConstantShortObjectInspector.java @@ -54,4 +54,17 @@ public int precision() { return BigDecimal.valueOf(value.get()).precision(); } + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + return obj instanceof WritableConstantShortObjectInspector && + value.equals(((WritableConstantShortObjectInspector) obj).value); + } + + @Override + public int hashCode() { + return value.hashCode(); + } } diff --git a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableConstantStringObjectInspector.java b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableConstantStringObjectInspector.java index ba3183bf82..f72d2071bc 100644 --- a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableConstantStringObjectInspector.java +++ b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableConstantStringObjectInspector.java @@ -43,4 +43,18 @@ protected WritableConstantStringObjectInspector() { public Text getWritableConstantValue() { return value; } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + return obj instanceof WritableConstantStringObjectInspector && + value.equals(((WritableConstantStringObjectInspector) obj).value); + } + + @Override + public int hashCode() { + return value.hashCode(); + } } diff --git a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableConstantTimestampLocalTZObjectInspector.java b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableConstantTimestampLocalTZObjectInspector.java index bf461c0255..30c7c55889 100644 --- a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableConstantTimestampLocalTZObjectInspector.java +++ b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableConstantTimestampLocalTZObjectInspector.java @@ -37,4 +37,18 @@ public WritableConstantTimestampLocalTZObjectInspector( public Object getWritableConstantValue() { return value; } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + return obj instanceof WritableConstantTimestampLocalTZObjectInspector && + value.equals(((WritableConstantTimestampLocalTZObjectInspector) obj).value); + } + + @Override + public int hashCode() { + return value.hashCode(); + } } diff --git a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableConstantTimestampObjectInspector.java b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableConstantTimestampObjectInspector.java index dc8fedfdd8..42254f6265 100644 --- a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableConstantTimestampObjectInspector.java +++ b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableConstantTimestampObjectInspector.java @@ -43,4 +43,18 @@ protected WritableConstantTimestampObjectInspector() { public TimestampWritable getWritableConstantValue() { return value; } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + return obj instanceof WritableConstantTimestampObjectInspector && + value.equals(((WritableConstantTimestampObjectInspector) obj).value); + } + + @Override + public int hashCode() { + return value.hashCode(); + } } diff --git a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableVoidObjectInspector.java b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableVoidObjectInspector.java index cdd87018f6..dd59f30a3d 100644 --- a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableVoidObjectInspector.java +++ b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableVoidObjectInspector.java @@ -51,4 +51,9 @@ public Object getPrimitiveJavaObject(Object o) { public boolean equals(Object obj) { return null != obj && obj instanceof WritableVoidObjectInspector; } + + @Override + public int hashCode() { + return 0; + } } diff --git a/serde/src/test/org/apache/hadoop/hive/serde2/avro/TestAvroObjectInspectorGenerator.java b/serde/src/test/org/apache/hadoop/hive/serde2/avro/TestAvroObjectInspectorGenerator.java index 3736a1f8fc..622bd19cfd 100644 --- a/serde/src/test/org/apache/hadoop/hive/serde2/avro/TestAvroObjectInspectorGenerator.java +++ b/serde/src/test/org/apache/hadoop/hive/serde2/avro/TestAvroObjectInspectorGenerator.java @@ -574,17 +574,13 @@ public void convertsNullableEnum() throws SerDeException { } @Test - public void objectInspectorsAreCached() throws SerDeException { - // Verify that Hive is caching the object inspectors for us. + public void objectInspectorsAreEqual() throws SerDeException { Schema s = AvroSerdeUtils.getSchemaFor(KITCHEN_SINK_SCHEMA); AvroObjectInspectorGenerator aoig = new AvroObjectInspectorGenerator(s); Schema s2 = AvroSerdeUtils.getSchemaFor(KITCHEN_SINK_SCHEMA); AvroObjectInspectorGenerator aoig2 = new AvroObjectInspectorGenerator(s2); - assertEquals(aoig.getObjectInspector(), aoig2.getObjectInspector()); - // For once we actually want reference equality in Java. - assertTrue(aoig.getObjectInspector() == aoig2.getObjectInspector()); } }