assertFalse(ec.hasErrors());
}
@Test
public void testMaterializingLateboundTreeValidated(final @Injectable RecordBatch batch) throws SchemaChangeException {
ErrorCollector ec = new ErrorCollector() {
int errorCount = 0;
@Override
public void addGeneralError(ExpressionPosition expr, String s) {
errorCount++;
}
@Override
public void addUnexpectedArgumentType(ExpressionPosition expr, String name, MajorType actual,
MajorType[] expected, int argumentIndex) {
errorCount++;
}
@Override
public void addUnexpectedArgumentCount(ExpressionPosition expr, int actual, Range<Integer> expected) {
errorCount++;
}
@Override
public void addUnexpectedArgumentCount(ExpressionPosition expr, int actual, int expected) {
errorCount++;
}
@Override
public void addNonNumericType(ExpressionPosition expr, MajorType actual) {
errorCount++;
}
@Override
public void addUnexpectedType(ExpressionPosition expr, int index, MajorType actual) {
errorCount++;
}
@Override
public void addExpectedConstantValue(ExpressionPosition expr, int actual, String s) {
errorCount++;
}
@Override
public boolean hasErrors() {
return errorCount > 0;
}
@Override
public String toErrorString() {
return String.format("Found %s errors.", errorCount);
}
@Override
public int getErrorCount() {
return errorCount;
}
};
new NonStrictExpectations() {
{
batch.getValueVectorId(new FieldReference("test", ExpressionPosition.UNKNOWN));
result = new TypedFieldId(Types.required(MinorType.BIGINT), -5);
}
};
LogicalExpression functionCallExpr = new FunctionCall(FunctionDefinition.simple("testFunc",
new ArgumentValidator() {
@Override
public void validateArguments(ExpressionPosition expr, List<LogicalExpression> expressions,
ErrorCollector errors) {
errors.addGeneralError(expr, "Error!");
}
@Override
public String[] getArgumentNamesByPosition() {
return new String[0];
}
}, OutputTypeDeterminer.FIXED_BIT), ImmutableList.of((LogicalExpression) //
new FieldReference("test", ExpressionPosition.UNKNOWN) ), ExpressionPosition.UNKNOWN);
LogicalExpression newExpr = ExpressionTreeMaterializer.materialize(functionCallExpr, batch, ec);
assertTrue(newExpr instanceof FunctionCall);
FunctionCall funcExpr = (FunctionCall) newExpr;
assertEquals(1, funcExpr.args.size());
assertEquals(bigIntType, funcExpr.args.get(0).getMajorType());
assertEquals(1, ec.getErrorCount());
System.out.println(ec.toErrorString());
}