use of org.apache.drill.exec.expr.fn.FunctionImplementationRegistry in project drill by apache.
the class TestSimpleFunctions method testHashFunctionResolution.
@Test
public void testHashFunctionResolution() throws JClassAlreadyExistsException, IOException {
@SuppressWarnings("resource") final FunctionImplementationRegistry registry = new FunctionImplementationRegistry(c);
// test required vs nullable Int input
resolveHash(c, new TypedNullConstant(Types.optional(TypeProtos.MinorType.INT)), Types.optional(TypeProtos.MinorType.INT), Types.required(TypeProtos.MinorType.INT), TypeProtos.DataMode.OPTIONAL, registry);
resolveHash(c, new ValueExpressions.IntExpression(1, ExpressionPosition.UNKNOWN), Types.required(TypeProtos.MinorType.INT), Types.required(TypeProtos.MinorType.INT), TypeProtos.DataMode.REQUIRED, registry);
// test required vs nullable float input
resolveHash(c, new TypedNullConstant(Types.optional(TypeProtos.MinorType.FLOAT4)), Types.optional(TypeProtos.MinorType.FLOAT4), Types.required(TypeProtos.MinorType.FLOAT4), TypeProtos.DataMode.OPTIONAL, registry);
resolveHash(c, new ValueExpressions.FloatExpression(5.0f, ExpressionPosition.UNKNOWN), Types.required(TypeProtos.MinorType.FLOAT4), Types.required(TypeProtos.MinorType.FLOAT4), TypeProtos.DataMode.REQUIRED, registry);
// test required vs nullable long input
resolveHash(c, new TypedNullConstant(Types.optional(TypeProtos.MinorType.BIGINT)), Types.optional(TypeProtos.MinorType.BIGINT), Types.required(TypeProtos.MinorType.BIGINT), TypeProtos.DataMode.OPTIONAL, registry);
resolveHash(c, new ValueExpressions.LongExpression(100L, ExpressionPosition.UNKNOWN), Types.required(TypeProtos.MinorType.BIGINT), Types.required(TypeProtos.MinorType.BIGINT), TypeProtos.DataMode.REQUIRED, registry);
// test required vs nullable double input
resolveHash(c, new TypedNullConstant(Types.optional(TypeProtos.MinorType.FLOAT8)), Types.optional(TypeProtos.MinorType.FLOAT8), Types.required(TypeProtos.MinorType.FLOAT8), TypeProtos.DataMode.OPTIONAL, registry);
resolveHash(c, new ValueExpressions.DoubleExpression(100.0, ExpressionPosition.UNKNOWN), Types.required(TypeProtos.MinorType.FLOAT8), Types.required(TypeProtos.MinorType.FLOAT8), TypeProtos.DataMode.REQUIRED, registry);
}
use of org.apache.drill.exec.expr.fn.FunctionImplementationRegistry in project drill by apache.
the class TestStringFunctions method runTest.
public void runTest(@Injectable final DrillbitContext bitContext, @Injectable UserClientConnection connection, Object[] expectedResults, String planPath) throws Throwable {
mockDrillbitContext(bitContext);
final String planString = Resources.toString(Resources.getResource(planPath), Charsets.UTF_8);
if (reader == null) {
reader = PhysicalPlanReaderTestFactory.defaultPhysicalPlanReader(c);
}
if (registry == null) {
registry = new FunctionImplementationRegistry(c);
}
if (context == null) {
//new FragmentContext(bitContext, ExecProtos.FragmentHandle.getInstance(), connection, registry);
context = new FragmentContext(bitContext, PlanFragment.getDefaultInstance(), connection, registry);
}
final PhysicalPlan plan = reader.readPhysicalPlan(planString);
final SimpleRootExec exec = new SimpleRootExec(ImplCreator.getExec(context, (FragmentRoot) plan.getSortedOperators(false).iterator().next()));
// skip schema batch
exec.next();
while (exec.next()) {
final Object[] res = getRunResult(exec);
assertEquals("return count does not match", expectedResults.length, res.length);
for (int i = 0; i < res.length; i++) {
assertEquals(String.format("column %s does not match", i), expectedResults[i], res[i]);
}
}
if (context.getFailureCause() != null) {
throw context.getFailureCause();
}
assertTrue(!context.isFailed());
}
use of org.apache.drill.exec.expr.fn.FunctionImplementationRegistry in project drill by apache.
the class TestSimpleProjection method project.
@Test
public void project(@Injectable final DrillbitContext bitContext, @Injectable UserClientConnection connection) throws Throwable {
mockDrillbitContext(bitContext);
final PhysicalPlanReader reader = PhysicalPlanReaderTestFactory.defaultPhysicalPlanReader(c);
final PhysicalPlan plan = reader.readPhysicalPlan(Files.toString(FileUtils.getResourceAsFile("/project/test1.json"), Charsets.UTF_8));
final FunctionImplementationRegistry registry = new FunctionImplementationRegistry(c);
final FragmentContext context = new FragmentContext(bitContext, PlanFragment.getDefaultInstance(), connection, registry);
final SimpleRootExec exec = new SimpleRootExec(ImplCreator.getExec(context, (FragmentRoot) plan.getSortedOperators(false).iterator().next()));
while (exec.next()) {
VectorUtil.showVectorAccessibleContent(exec.getIncoming(), "\t");
final NullableBigIntVector c1 = exec.getValueVectorById(new SchemaPath("col1", ExpressionPosition.UNKNOWN), NullableBigIntVector.class);
final NullableBigIntVector c2 = exec.getValueVectorById(new SchemaPath("col2", ExpressionPosition.UNKNOWN), NullableBigIntVector.class);
int x = 0;
final NullableBigIntVector.Accessor a1 = c1.getAccessor();
final NullableBigIntVector.Accessor a2 = c2.getAccessor();
for (int i = 0; i < c1.getAccessor().getValueCount(); i++) {
if (!a1.isNull(i)) {
assertEquals(a1.get(i) + 1, a2.get(i));
}
x += a1.isNull(i) ? 0 : a1.get(i);
}
}
if (context.getFailureCause() != null) {
throw context.getFailureCause();
}
assertTrue(!context.isFailed());
}
use of org.apache.drill.exec.expr.fn.FunctionImplementationRegistry in project drill by apache.
the class TestSimpleSort method sortOneKeyAscending.
@Test
public void sortOneKeyAscending(@Injectable final DrillbitContext bitContext, @Injectable UserClientConnection connection) throws Throwable {
mockDrillbitContext(bitContext);
final PhysicalPlanReader reader = PhysicalPlanReaderTestFactory.defaultPhysicalPlanReader(c);
final PhysicalPlan plan = reader.readPhysicalPlan(Files.toString(FileUtils.getResourceAsFile("/sort/one_key_sort.json"), Charsets.UTF_8));
final FunctionImplementationRegistry registry = new FunctionImplementationRegistry(c);
final FragmentContext context = new FragmentContext(bitContext, PlanFragment.getDefaultInstance(), connection, registry);
final SimpleRootExec exec = new SimpleRootExec(ImplCreator.getExec(context, (FragmentRoot) plan.getSortedOperators(false).iterator().next()));
int previousInt = Integer.MIN_VALUE;
int recordCount = 0;
int batchCount = 0;
while (exec.next()) {
batchCount++;
final IntVector c1 = exec.getValueVectorById(new SchemaPath("blue", ExpressionPosition.UNKNOWN), IntVector.class);
final IntVector c2 = exec.getValueVectorById(new SchemaPath("green", ExpressionPosition.UNKNOWN), IntVector.class);
final IntVector.Accessor a1 = c1.getAccessor();
final IntVector.Accessor a2 = c2.getAccessor();
for (int i = 0; i < c1.getAccessor().getValueCount(); i++) {
recordCount++;
assertTrue(previousInt <= a1.get(i));
previousInt = a1.get(i);
assertEquals(previousInt, a2.get(i));
}
}
System.out.println(String.format("Sorted %,d records in %d batches.", recordCount, batchCount));
if (context.getFailureCause() != null) {
throw context.getFailureCause();
}
assertTrue(!context.isFailed());
}
use of org.apache.drill.exec.expr.fn.FunctionImplementationRegistry in project drill by apache.
the class TestSimpleSort method sortTwoKeysOneAscendingOneDescending.
@Test
public void sortTwoKeysOneAscendingOneDescending(@Injectable final DrillbitContext bitContext, @Injectable UserClientConnection connection) throws Throwable {
mockDrillbitContext(bitContext);
final PhysicalPlanReader reader = PhysicalPlanReaderTestFactory.defaultPhysicalPlanReader(c);
final PhysicalPlan plan = reader.readPhysicalPlan(Files.toString(FileUtils.getResourceAsFile("/sort/two_key_sort.json"), Charsets.UTF_8));
final FunctionImplementationRegistry registry = new FunctionImplementationRegistry(c);
final FragmentContext context = new FragmentContext(bitContext, PlanFragment.getDefaultInstance(), connection, registry);
final SimpleRootExec exec = new SimpleRootExec(ImplCreator.getExec(context, (FragmentRoot) plan.getSortedOperators(false).iterator().next()));
int previousInt = Integer.MIN_VALUE;
long previousLong = Long.MAX_VALUE;
int recordCount = 0;
int batchCount = 0;
while (exec.next()) {
batchCount++;
final IntVector c1 = exec.getValueVectorById(new SchemaPath("blue", ExpressionPosition.UNKNOWN), IntVector.class);
final BigIntVector c2 = exec.getValueVectorById(new SchemaPath("alt", ExpressionPosition.UNKNOWN), BigIntVector.class);
final IntVector.Accessor a1 = c1.getAccessor();
final BigIntVector.Accessor a2 = c2.getAccessor();
for (int i = 0; i < c1.getAccessor().getValueCount(); i++) {
recordCount++;
assertTrue(previousInt <= a1.get(i));
if (previousInt != a1.get(i)) {
previousLong = Long.MAX_VALUE;
previousInt = a1.get(i);
}
assertTrue(previousLong >= a2.get(i));
//System.out.println(previousInt + "\t" + a2.get(i));
}
}
System.out.println(String.format("Sorted %,d records in %d batches.", recordCount, batchCount));
if (context.getFailureCause() != null) {
throw context.getFailureCause();
}
assertTrue(!context.isFailed());
}
Aggregations