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) {

Reply via email to