package brickhouse.udf.collect;
import brickhouse.udf.collect.CollectDistinctUDAF.SetCollectUDAFEvaluator;
import brickhouse.udf.collect.CollectMaxUDAF.MapCollectMaxUDAFEvaluator;
import org.apache.hadoop.hive.ql.exec.UDFArgumentException;
import org.apache.hadoop.hive.ql.exec.UDFArgumentTypeException;
import org.apache.hadoop.hive.ql.metadata.HiveException;
import org.apache.hadoop.hive.ql.parse.SemanticException;
import org.apache.hadoop.hive.ql.udf.generic.GenericUDF;
import org.apache.hadoop.hive.ql.udf.generic.GenericUDAFEvaluator.Mode;
import org.apache.hadoop.hive.ql.udf.generic.GenericUDF.DeferredJavaObject;
import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorFactory;
import org.apache.hadoop.hive.serde2.objectinspector.StandardListObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.PrimitiveObjectInspector.PrimitiveCategory;
import org.apache.hadoop.hive.serde2.objectinspector.StandardStructObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.StructObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorFactory;
import org.apache.hadoop.hive.serde2.objectinspector.primitive.WritableIntObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.primitive.WritableStringObjectInspector;
import org.apache.hadoop.hive.serde2.typeinfo.StructTypeInfo;
import org.apache.hadoop.hive.serde2.typeinfo.TypeInfoUtils;
import org.junit.Before;
import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
public class CollectDistinctUDFTest {
private CollectDistinctUDAF udf;
@Before
public void before() {
udf = new CollectDistinctUDAF();
}
@Test(expected = UDFArgumentTypeException.class)
public void testGetEvaluatorNoArg() throws SemanticException {
udf.getEvaluator(new StructTypeInfo[0]);
}
@Test(expected = UDFArgumentTypeException.class)
public void testGetEvaluatorTwoArg() throws SemanticException {
List<String> structFieldNames = new ArrayList<String>();
structFieldNames.add("field1");
structFieldNames.add("field2");
List<ObjectInspector> objectInspectors = new ArrayList<ObjectInspector>();
objectInspectors
.add(PrimitiveObjectInspectorFactory.javaStringObjectInspector);
objectInspectors
.add(PrimitiveObjectInspectorFactory.javaStringObjectInspector);
StructTypeInfo structTypeInfo = (StructTypeInfo) TypeInfoUtils
.getTypeInfoFromObjectInspector(ObjectInspectorFactory
.getStandardStructObjectInspector(structFieldNames,
objectInspectors));
List<String> structFieldNames2 = new ArrayList<String>();
structFieldNames2.add("field1");
structFieldNames2.add("field2");
List<ObjectInspector> objectInspectors2 = new ArrayList<ObjectInspector>();
objectInspectors2
.add(PrimitiveObjectInspectorFactory.javaStringObjectInspector);
objectInspectors2
.add(PrimitiveObjectInspectorFactory.javaStringObjectInspector);
StructTypeInfo structTypeInfo2 = (StructTypeInfo) TypeInfoUtils
.getTypeInfoFromObjectInspector(ObjectInspectorFactory
.getStandardStructObjectInspector(structFieldNames2,
objectInspectors2));
udf.getEvaluator(new StructTypeInfo[] { structTypeInfo, structTypeInfo2 });
}
@Test
public void testInitializeWithOneArguments() throws SemanticException {
List<String> structFieldNames = new ArrayList<String>();
structFieldNames.add("field1");
structFieldNames.add("field2");
List<ObjectInspector> objectInspectors = new ArrayList<ObjectInspector>();
objectInspectors
.add(PrimitiveObjectInspectorFactory.javaStringObjectInspector);
objectInspectors
.add(PrimitiveObjectInspectorFactory.javaStringObjectInspector);
StructTypeInfo structTypeInfo = (StructTypeInfo) TypeInfoUtils
.getTypeInfoFromObjectInspector(ObjectInspectorFactory
.getStandardStructObjectInspector(structFieldNames,
objectInspectors));
udf.getEvaluator(new StructTypeInfo[] { structTypeInfo });
}
@Test
public void testInit() throws HiveException {
SetCollectUDAFEvaluator maxEval = new SetCollectUDAFEvaluator();
List<String> fieldNames = new ArrayList<String>();
fieldNames.add("field1");
fieldNames.add("field2");
List<ObjectInspector> objectInspectors = new ArrayList<ObjectInspector>();
objectInspectors
.add(PrimitiveObjectInspectorFactory.javaStringObjectInspector);
objectInspectors
.add(PrimitiveObjectInspectorFactory.javaStringObjectInspector);
StructObjectInspector keyOI = ObjectInspectorFactory
.getStandardStructObjectInspector(fieldNames, objectInspectors);
// WritableIntObjectInspector valOI = (WritableIntObjectInspector)
// PrimitiveObjectInspectorFactory.getPrimitiveWritableObjectInspector(PrimitiveCategory.INT);
maxEval.init(Mode.PARTIAL1, new ObjectInspector[] { keyOI });
}
}