This is an automated email from the ASF dual-hosted git repository. jhyde pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/calcite.git
commit be678e3dc65f5933f85927e53b2811738d124f11 Author: yanzhi <[email protected]> AuthorDate: Sat Aug 17 17:20:40 2019 +0800 [CALCITE-3260] Add Expressions.evaluate(Node), a public API for evaluating linq4j expressions (Wang Yanlin) And a couple of cosmetic changes. Close apache/calcite#1387 --- .../calcite/rel/rel2sql/RelToSqlConverterStructsTest.java | 7 ++++--- .../main/java/org/apache/calcite/linq4j/tree/Expressions.java | 10 ++++++++++ .../java/org/apache/calcite/linq4j/test/ExpressionTest.java | 9 +++++++++ .../main/java/org/apache/calcite/sql/ddl/SqlCreateTable.java | 4 ++-- 4 files changed, 25 insertions(+), 5 deletions(-) diff --git a/core/src/test/java/org/apache/calcite/rel/rel2sql/RelToSqlConverterStructsTest.java b/core/src/test/java/org/apache/calcite/rel/rel2sql/RelToSqlConverterStructsTest.java index 0bf9ce0..c3ffd19 100644 --- a/core/src/test/java/org/apache/calcite/rel/rel2sql/RelToSqlConverterStructsTest.java +++ b/core/src/test/java/org/apache/calcite/rel/rel2sql/RelToSqlConverterStructsTest.java @@ -115,9 +115,10 @@ public class RelToSqlConverterStructsTest { RelDataType bigint = tf.createSqlType(SqlTypeName.BIGINT); RelDataType n1Type = tf.createStructType( ImmutableList.of( - tf.createStructType(ImmutableList.of(bigint), ImmutableList.of("b")), - tf.createStructType(ImmutableList.of(bigint), ImmutableList.of("c")) - ), + tf.createStructType(ImmutableList.of(bigint), + ImmutableList.of("b")), + tf.createStructType(ImmutableList.of(bigint), + ImmutableList.of("c"))), ImmutableList.of("n11", "n12")); RelDataType n2Type = tf.createStructType( ImmutableList.of(bigint), diff --git a/linq4j/src/main/java/org/apache/calcite/linq4j/tree/Expressions.java b/linq4j/src/main/java/org/apache/calcite/linq4j/tree/Expressions.java index 1c92876..4d32103 100644 --- a/linq4j/src/main/java/org/apache/calcite/linq4j/tree/Expressions.java +++ b/linq4j/src/main/java/org/apache/calcite/linq4j/tree/Expressions.java @@ -38,6 +38,7 @@ import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.List; +import java.util.Objects; import java.util.UUID; /** @@ -3051,6 +3052,15 @@ public abstract class Expressions { return new FluentArrayList<>(toList(ts)); } + /** + * Evaluates an expression and returns the result. + */ + public static Object evaluate(Node node) { + Objects.requireNonNull(node); + final Evaluator evaluator = new Evaluator(); + return ((AbstractNode) node).evaluate(evaluator); + } + // ~ Private helper methods ------------------------------------------------ private static boolean shouldLift(Expression left, Expression right, diff --git a/linq4j/src/test/java/org/apache/calcite/linq4j/test/ExpressionTest.java b/linq4j/src/test/java/org/apache/calcite/linq4j/test/ExpressionTest.java index 67c529a..8515041 100644 --- a/linq4j/src/test/java/org/apache/calcite/linq4j/test/ExpressionTest.java +++ b/linq4j/src/test/java/org/apache/calcite/linq4j/test/ExpressionTest.java @@ -52,6 +52,9 @@ import java.util.List; import java.util.Map; import java.util.TreeSet; +import static org.apache.calcite.linq4j.test.BlockBuilderBase.ONE; +import static org.apache.calcite.linq4j.test.BlockBuilderBase.TWO; + import static org.hamcrest.core.Is.is; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThat; @@ -1506,6 +1509,12 @@ public class ExpressionTest { Expressions.toString(Expressions.constant(map))); } + @Test public void testEvaluate() { + Expression x = Expressions.add(ONE, TWO); + Object value = Expressions.evaluate(x); + assertThat(value, is(3)); + } + /** An enum. */ enum MyEnum { X, diff --git a/server/src/main/java/org/apache/calcite/sql/ddl/SqlCreateTable.java b/server/src/main/java/org/apache/calcite/sql/ddl/SqlCreateTable.java index 9eb5ba2..ef92070 100644 --- a/server/src/main/java/org/apache/calcite/sql/ddl/SqlCreateTable.java +++ b/server/src/main/java/org/apache/calcite/sql/ddl/SqlCreateTable.java @@ -164,8 +164,8 @@ public class SqlCreateTable extends SqlCreate final ImmutableList.Builder<ColumnDef> b = ImmutableList.builder(); final RelDataTypeFactory.Builder builder = typeFactory.builder(); final RelDataTypeFactory.Builder storedBuilder = typeFactory.builder(); - // REVIEW 2019-08-19 Danny Chan: Should we implement the #validate(SqlValidator) - // to get the SqlValidator instance ? + // REVIEW 2019-08-19 Danny Chan: Should we implement the + // #validate(SqlValidator) to get the SqlValidator instance? final SqlValidator validator = SqlDdlNodes.validator(context, true); for (Ord<SqlNode> c : Ord.zip(columnList)) { if (c.e instanceof SqlColumnDeclaration) {
