public Expr parse(final ExprMacroTable macroTable) { return Parser.parse(expression, macroTable); }
@Override public Object compute(Map<String, Object> values) { // Maps.transformEntries is lazy, will only finalize values we actually read. final Map<String, Object> finalizedValues = Maps.transformEntries( values, (String k, Object v) -> { final Function<Object, Object> finalizer = finalizers.get(k); return finalizer != null ? finalizer.apply(v) : v; } ); return parsed.eval(Parser.withMap(finalizedValues)).value(); }
@Override public List<String> requiredFields() { return fieldName != null ? Collections.singletonList(fieldName) : Parser.findRequiredBindings(Parser.parse(expression, macroTable)); }
@Override public List<String> requiredColumns() { return Parser.findRequiredBindings(parsedExpression); }
private static Expr.ObjectBinding createBindings(Expr expression, ColumnSelectorFactory columnSelectorFactory) final List<String> columns = Parser.findRequiredBindings(expression); for (String columnName : columns) { final ColumnCapabilities columnCapabilities = columnSelectorFactory }; } else { return Parser.withSuppliers(suppliers);
@VisibleForTesting static Expr parse(String in, ExprMacroTable macroTable, boolean withFlatten) { ExprLexer lexer = new ExprLexer(new ANTLRInputStream(in)); CommonTokenStream tokens = new CommonTokenStream(lexer); ExprParser parser = new ExprParser(tokens); parser.setBuildParseTree(true); ParseTree parseTree = parser.expr(); ParseTreeWalker walker = new ParseTreeWalker(); ExprListenerImpl listener = new ExprListenerImpl(parseTree, macroTable); walker.walk(listener, parseTree); return withFlatten ? flatten(listener.getAST()) : listener.getAST(); }
@UsedInGeneratedCode @Override public void exitFunctionExpr(ExprParser.FunctionExprContext ctx) { String fnName = ctx.getChild(0).getText(); final List<Expr> args = ctx.getChildCount() > 3 ? (List<Expr>) nodes.get(ctx.getChild(2)) : Collections.emptyList(); Expr expr = macroTable.get(fnName, args); if (expr == null) { // Built-in functions. final Function function = Parser.getFunction(fnName); if (function == null) { throw new RE("function '%s' is not defined.", fnName); } expr = new FunctionExpr(function, fnName, args); } nodes.put(ctx, expr); }
private void testExpression( final RexNode rexNode, final DruidExpression expectedExpression, final Object expectedResult ) { final DruidExpression expression = Expressions.toDruidExpression(plannerContext, rowSignature, rexNode); Assert.assertEquals("Expression for: " + rexNode, expectedExpression, expression); final ExprEval result = Parser.parse(expression.getExpression(), plannerContext.getExprMacroTable()) .eval(Parser.withMap(bindings)); Assert.assertEquals("Result for: " + rexNode, expectedResult, result.value()); } }
public ExpressionFilter(final Expr expr) { this.expr = expr; this.requiredBindings = ImmutableSet.copyOf(Parser.findRequiredBindings(expr)); }
private static Expr.ObjectBinding createBindings(Expr expression, ColumnSelectorFactory columnSelectorFactory) for (String columnName : Parser.findRequiredBindings(expression)) { final ColumnCapabilities columnCapabilities = columnSelectorFactory .getColumnCapabilities(columnName); }; } else { return Parser.withSuppliers(suppliers);
Expr left = flatten(binary.left); Expr right = flatten(binary.right); if (Evals.isAllConstants(left, right)) { expr = expr.eval(null).toExpr(); Expr eval = flatten(unary.expr); if (eval instanceof ConstantExpr) { expr = expr.eval(null).toExpr(); List<Expr> flattening = Lists.newArrayListWithCapacity(args.size()); for (Expr arg : args) { Expr flatten = flatten(arg); flattened |= flatten != arg; flattening.add(flatten);
@UsedInGeneratedCode @Override public void exitFunctionExpr(ExprParser.FunctionExprContext ctx) { String fnName = ctx.getChild(0).getText(); final List<Expr> args = ctx.getChildCount() > 3 ? (List<Expr>) nodes.get(ctx.getChild(2)) : Collections.emptyList(); Expr expr = macroTable.get(fnName, args); if (expr == null) { // Built-in functions. final Function function = Parser.getFunction(fnName); if (function == null) { throw new RE("function '%s' is not defined.", fnName); } expr = new FunctionExpr(function, fnName, args); } nodes.put(ctx, expr); }
public static Expr parse(String in, ExprMacroTable macroTable) { return parse(in, macroTable, true); }
@Override public List<String> requiredFields() { return fieldName != null ? Collections.singletonList(fieldName) : Parser.findRequiredBindings(Parser.parse(expression, macroTable)); }
@Test public void testBooleanReturn() Expr.ObjectBinding bindings = Parser.withMap( ImmutableMap.of("x", 100L, "y", 100L, "z", 100D, "w", 100D) ); ExprEval eval = Parser.parse("x==y", ExprMacroTable.nil()).eval(bindings); Assert.assertTrue(eval.asBoolean()); Assert.assertEquals(ExprType.LONG, eval.type()); eval = Parser.parse("x!=y", ExprMacroTable.nil()).eval(bindings); Assert.assertFalse(eval.asBoolean()); Assert.assertEquals(ExprType.LONG, eval.type()); eval = Parser.parse("x==z", ExprMacroTable.nil()).eval(bindings); Assert.assertTrue(eval.asBoolean()); Assert.assertEquals(ExprType.DOUBLE, eval.type()); eval = Parser.parse("x!=z", ExprMacroTable.nil()).eval(bindings); Assert.assertFalse(eval.asBoolean()); Assert.assertEquals(ExprType.DOUBLE, eval.type()); eval = Parser.parse("z==w", ExprMacroTable.nil()).eval(bindings); Assert.assertTrue(eval.asBoolean()); Assert.assertEquals(ExprType.DOUBLE, eval.type()); eval = Parser.parse("z!=w", ExprMacroTable.nil()).eval(bindings); Assert.assertFalse(eval.asBoolean()); Assert.assertEquals(ExprType.DOUBLE, eval.type());
@Override public HashSet<String> getRequiredColumns() { return Sets.newHashSet(Parser.findRequiredBindings(parsed)); }
@Test public void testDoubleEval() Expr.ObjectBinding bindings = Parser.withMap(ImmutableMap.of("x", 2.0d)); Assert.assertEquals(2.0, evalDouble("x", bindings), 0.0001); Assert.assertEquals(2.0, evalDouble("\"x\"", bindings), 0.0001);
@VisibleForTesting static Expr parse(String in, ExprMacroTable macroTable, boolean withFlatten) { ExprLexer lexer = new ExprLexer(new ANTLRInputStream(in)); CommonTokenStream tokens = new CommonTokenStream(lexer); ExprParser parser = new ExprParser(tokens); parser.setBuildParseTree(true); ParseTree parseTree = parser.expr(); ParseTreeWalker walker = new ParseTreeWalker(); ExprListenerImpl listener = new ExprListenerImpl(parseTree, macroTable); walker.walk(listener, parseTree); return withFlatten ? flatten(listener.getAST()) : listener.getAST(); }
@Override public RowFunction getRowFunction() { final Expr expr = Parser.parse(expression, Preconditions.checkNotNull(this.macroTable, "macroTable")); return new ExpressionRowFunction(expr); }