use of com.linkedin.pinot.core.operator.transform.function.TransformFunction in project pinot by linkedin.
the class DefaultExpressionEvaluator method evaluateExpression.
/**
* Helper (recursive) method that walks the expression tree bottom up evaluating
* transforms at each level.
*
* @param projectionBlock Projection block for which to evaluate the expression for
* @param expressionTree Expression tree to evaluate
* @return Result of the expression transform
*/
private BlockValSet evaluateExpression(ProjectionBlock projectionBlock, TransformExpressionTree expressionTree) {
TransformFunction function = getTransformFunction(expressionTree.getTransformName());
int numDocs = projectionBlock.getNumDocs();
String expressionString = expressionTree.toString();
TransformExpressionTree.ExpressionType expressionType = expressionTree.getExpressionType();
switch(expressionType) {
case FUNCTION:
List<TransformExpressionTree> children = expressionTree.getChildren();
int numChildren = children.size();
BlockValSet[] transformArgs = new BlockValSet[numChildren];
for (int i = 0; i < numChildren; i++) {
transformArgs[i] = evaluateExpression(projectionBlock, children.get(i));
}
return new TransformBlockValSet(function, numDocs, transformArgs);
case IDENTIFIER:
return projectionBlock.getBlockValueSet(expressionString);
case LITERAL:
return new ConstantBlockValSet(expressionString, numDocs);
default:
throw new IllegalArgumentException("Illegal expression type in expression evaluator: " + expressionType);
}
}
use of com.linkedin.pinot.core.operator.transform.function.TransformFunction in project pinot by linkedin.
the class TransformFunctionFactoryTest method testTransformLoading.
/**
* This test ensure that any transform class can be loaded as long as it is
* in the class path.
*/
@Test
public void testTransformLoading() {
TransformFunction[] transforms = new TransformFunction[] { new foo(), new bar(), new foo() };
String[] classNames = new String[transforms.length];
for (int i = 0; i < transforms.length; i++) {
classNames[i] = transforms[i].getClass().getName();
}
TransformFunctionFactory.init(classNames);
// Assert that the transform factory can provide instances for the transforms.
for (TransformFunction transform : transforms) {
Assert.assertNotNull(TransformFunctionFactory.get(transform.getName()));
}
}
Aggregations