public static Expr parse(String in, ExprMacroTable macroTable) { return parse(in, macroTable, true); }
public Expr parse(final ExprMacroTable macroTable) { return Parser.parse(expression, macroTable); }
@Override public List<String> requiredFields() { return fieldName != null ? Collections.singletonList(fieldName) : Parser.findRequiredBindings(Parser.parse(expression, macroTable)); }
@Override public RowFunction getRowFunction() { final Expr expr = Parser.parse(expression, Preconditions.checkNotNull(this.macroTable, "macroTable")); return new ExpressionRowFunction(expr); }
@Override public List<String> requiredFields() { return fieldName != null ? Collections.singletonList(fieldName) : Parser.findRequiredBindings(Parser.parse(expression, macroTable)); }
@JsonCreator public ExpressionVirtualColumn( @JsonProperty("name") String name, @JsonProperty("expression") String expression, @JsonProperty("outputType") ValueType outputType, @JacksonInject ExprMacroTable macroTable ) { this.name = Preconditions.checkNotNull(name, "name"); this.expression = Preconditions.checkNotNull(expression, "expression"); this.outputType = outputType != null ? outputType : ValueType.FLOAT; this.parsedExpression = Parser.parse(expression, macroTable); }
@Nullable public static TimestampFloorExprMacro.TimestampFloorExpr asTimestampFloorExpr( final DruidExpression expression, final ExprMacroTable macroTable ) { final Expr expr = Parser.parse(expression.getExpression(), macroTable); if (expr instanceof TimestampFloorExprMacro.TimestampFloorExpr) { return (TimestampFloorExprMacro.TimestampFloorExpr) expr; } else { return null; } }
@JsonCreator public ExpressionDimFilter( @JsonProperty("expression") final String expression, @JacksonInject ExprMacroTable macroTable ) { this.expression = expression; this.parsed = Parser.parse(expression, macroTable); }
@Override public List<String> requiredFields() { return fieldName != null ? Collections.singletonList(fieldName) : Parser.findRequiredBindings(Parser.parse(expression, macroTable)); }
private void validateFlatten(String expression, String withoutFlatten, String withFlatten) { Assert.assertEquals(expression, withoutFlatten, Parser.parse(expression, ExprMacroTable.nil(), false).toString()); Assert.assertEquals(expression, withFlatten, Parser.parse(expression, ExprMacroTable.nil(), true).toString()); }
private ExprEval eval(String x, Expr.ObjectBinding bindings) { return Parser.parse(x, ExprMacroTable.nil()).eval(bindings); }
@Test public void testSimple() { String actual = Parser.parse("1", ExprMacroTable.nil()).toString(); String expected = "1"; Assert.assertEquals(expected, actual); }
private void assertExpr(final String expression, final Object expectedResult) { final Expr expr = Parser.parse(expression, LookupEnabledTestExprMacroTable.INSTANCE); Assert.assertEquals(expression, expectedResult, expr.eval(BINDINGS).value()); } }
private void validateParser(String expression, String expected, List<String> identifiers) { final Expr parsed = Parser.parse(expression, ExprMacroTable.nil()); Assert.assertEquals(expression, expected, parsed.toString()); Assert.assertEquals(expression, identifiers, Parser.findRequiredBindings(parsed)); }
private void validateConstantExpression(String expression, Object expected) { Assert.assertEquals( expression, expected, Parser.parse(expression, ExprMacroTable.nil()).eval(Parser.withMap(ImmutableMap.of())).value() ); } }
private void assertExpr(final String expression, final Object expectedResult) { final Expr expr = Parser.parse(expression, ExprMacroTable.nil()); Assert.assertEquals(expression, expectedResult, expr.eval(bindings).value()); }
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()); } }
@Test public void testExprEvalSelectorWithLongsAndNulls() { final ColumnValueSelector<ExprEval> selector = ExpressionSelectors.makeExprEvalSelector( RowBasedColumnSelectorFactory.create( CURRENT_ROW, ImmutableMap.of("x", ValueType.LONG) ), Parser.parse(SCALE_LONG.getExpression(), TestExprMacroTable.INSTANCE) ); CURRENT_ROW.set(ROW0); if (NullHandling.replaceWithDefault()) { Assert.assertEquals(0, selector.getLong(), 0.0f); Assert.assertFalse(selector.isNull()); } else { Assert.assertTrue(selector.isNull()); Assert.assertTrue(selector.getObject().isNumericNull()); } }
@Test public void testExprEvalSelectorWithConstantNullArithmetic() { final ColumnValueSelector<ExprEval> selector = ExpressionSelectors.makeExprEvalSelector( COLUMN_SELECTOR_FACTORY, Parser.parse(CONSTANT_NULL_ARITHMETIC.getExpression(), TestExprMacroTable.INSTANCE) ); CURRENT_ROW.set(ROW0); if (NullHandling.replaceWithDefault()) { Assert.assertEquals(2.1f, selector.getFloat(), 0.0f); Assert.assertFalse(selector.isNull()); Assert.assertEquals(2.1d, selector.getObject().asDouble(), 0.0d); } else { Assert.assertTrue(selector.isNull()); Assert.assertTrue(selector.getObject().isNumericNull()); } }