private RowExpression translateAndOptimize(Expression expression) { return translateAndOptimize(expression, getExpressionTypes(expression)); }
private RowExpression translateAndOptimize(Expression expression) { return translateAndOptimize(expression, getExpressionTypes(expression)); }
@Test(timeOut = 10_000) public void testPossibleExponentialOptimizationTime() { Expression expression = new LongLiteral("1"); ImmutableMap.Builder<NodeRef<Expression>, Type> types = ImmutableMap.builder(); types.put(NodeRef.of(expression), BIGINT); for (int i = 0; i < 100; i++) { expression = new CoalesceExpression(expression, new LongLiteral("2")); types.put(NodeRef.of(expression), BIGINT); } translateAndOptimize(expression, types.build()); }
@Test(timeOut = 10_000) public void testPossibleExponentialOptimizationTime() { Expression expression = new LongLiteral("1"); ImmutableMap.Builder<NodeRef<Expression>, Type> types = ImmutableMap.builder(); types.put(NodeRef.of(expression), BIGINT); for (int i = 0; i < 100; i++) { expression = new CoalesceExpression(expression, new LongLiteral("2")); types.put(NodeRef.of(expression), BIGINT); } translateAndOptimize(expression, types.build()); }
@Test public void testOptimizeDecimalLiteral() { // Short decimal assertEquals(translateAndOptimize(expression("CAST(NULL AS DECIMAL(7,2))")), constant(null, createDecimalType(7, 2))); assertEquals(translateAndOptimize(expression("DECIMAL '42'")), constant(42L, createDecimalType(2, 0))); assertEquals(translateAndOptimize(expression("CAST(42 AS DECIMAL(7,2))")), constant(4200L, createDecimalType(7, 2))); assertEquals(translateAndOptimize(simplifyExpression(expression("CAST(42 AS DECIMAL(7,2))"))), constant(4200L, createDecimalType(7, 2))); // Long decimal assertEquals(translateAndOptimize(expression("CAST(NULL AS DECIMAL(35,2))")), constant(null, createDecimalType(35, 2))); assertEquals( translateAndOptimize(expression("DECIMAL '123456789012345678901234567890'")), constant(encodeScaledValue(new BigDecimal("123456789012345678901234567890")), createDecimalType(30, 0))); assertEquals( translateAndOptimize(expression("CAST(DECIMAL '123456789012345678901234567890' AS DECIMAL(35,2))")), constant(encodeScaledValue(new BigDecimal("123456789012345678901234567890.00")), createDecimalType(35, 2))); assertEquals( translateAndOptimize(simplifyExpression(expression("CAST(DECIMAL '123456789012345678901234567890' AS DECIMAL(35,2))"))), constant(encodeScaledValue(new BigDecimal("123456789012345678901234567890.00")), createDecimalType(35, 2))); }
@Test public void testOptimizeDecimalLiteral() { // Short decimal assertEquals(translateAndOptimize(expression("CAST(NULL AS DECIMAL(7,2))")), constant(null, createDecimalType(7, 2))); assertEquals(translateAndOptimize(expression("DECIMAL '42'")), constant(42L, createDecimalType(2, 0))); assertEquals(translateAndOptimize(expression("CAST(42 AS DECIMAL(7,2))")), constant(4200L, createDecimalType(7, 2))); assertEquals(translateAndOptimize(simplifyExpression(expression("CAST(42 AS DECIMAL(7,2))"))), constant(4200L, createDecimalType(7, 2))); // Long decimal assertEquals(translateAndOptimize(expression("CAST(NULL AS DECIMAL(35,2))")), constant(null, createDecimalType(35, 2))); assertEquals( translateAndOptimize(expression("DECIMAL '123456789012345678901234567890'")), constant(encodeScaledValue(new BigDecimal("123456789012345678901234567890")), createDecimalType(30, 0))); assertEquals( translateAndOptimize(expression("CAST(DECIMAL '123456789012345678901234567890' AS DECIMAL(35,2))")), constant(encodeScaledValue(new BigDecimal("123456789012345678901234567890.00")), createDecimalType(35, 2))); assertEquals( translateAndOptimize(simplifyExpression(expression("CAST(DECIMAL '123456789012345678901234567890' AS DECIMAL(35,2))"))), constant(encodeScaledValue(new BigDecimal("123456789012345678901234567890.00")), createDecimalType(35, 2))); }