You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by jh...@apache.org on 2015/08/01 00:42:45 UTC

[08/50] [abbrv] incubator-calcite git commit: [CALCITE-691] Allow projects to supply alternate SQL parser

[CALCITE-691] Allow projects to supply alternate SQL parser


Project: http://git-wip-us.apache.org/repos/asf/incubator-calcite/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-calcite/commit/9da7bc89
Tree: http://git-wip-us.apache.org/repos/asf/incubator-calcite/tree/9da7bc89
Diff: http://git-wip-us.apache.org/repos/asf/incubator-calcite/diff/9da7bc89

Branch: refs/heads/branch-release
Commit: 9da7bc89c6feb7e41eb8294515f48df662bcc7e5
Parents: 948e456
Author: Julian Hyde <jh...@apache.org>
Authored: Tue Apr 21 21:32:44 2015 -0700
Committer: Julian Hyde <jh...@apache.org>
Committed: Wed Apr 22 16:47:42 2015 -0700

----------------------------------------------------------------------
 .../calcite/prepare/CalciteMaterializer.java    |  6 +-
 .../calcite/prepare/CalcitePrepareImpl.java     | 67 ++++++++++++--------
 2 files changed, 43 insertions(+), 30 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/9da7bc89/core/src/main/java/org/apache/calcite/prepare/CalciteMaterializer.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/prepare/CalciteMaterializer.java b/core/src/main/java/org/apache/calcite/prepare/CalciteMaterializer.java
index 8126db9..901dcb8 100644
--- a/core/src/main/java/org/apache/calcite/prepare/CalciteMaterializer.java
+++ b/core/src/main/java/org/apache/calcite/prepare/CalciteMaterializer.java
@@ -56,10 +56,12 @@ import java.util.List;
  * Context for populating a {@link Materialization}.
  */
 class CalciteMaterializer extends CalcitePrepareImpl.CalcitePreparingStmt {
-  public CalciteMaterializer(CalcitePrepare.Context context,
+  public CalciteMaterializer(CalcitePrepareImpl prepare,
+      CalcitePrepare.Context context,
       CatalogReader catalogReader, CalciteSchema schema,
       RelOptPlanner planner) {
-    super(context, catalogReader, catalogReader.getTypeFactory(), schema,
+    super(prepare, context, catalogReader, catalogReader.getTypeFactory(),
+        schema,
         EnumerableRel.Prefer.ANY, planner, BindableConvention.INSTANCE);
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/9da7bc89/core/src/main/java/org/apache/calcite/prepare/CalcitePrepareImpl.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/prepare/CalcitePrepareImpl.java b/core/src/main/java/org/apache/calcite/prepare/CalcitePrepareImpl.java
index 4d1448e..71d38c4 100644
--- a/core/src/main/java/org/apache/calcite/prepare/CalcitePrepareImpl.java
+++ b/core/src/main/java/org/apache/calcite/prepare/CalcitePrepareImpl.java
@@ -240,7 +240,7 @@ public class CalcitePrepareImpl implements CalcitePrepare {
             context.config().caseSensitive(),
             context.getDefaultSchemaPath(),
             typeFactory);
-    SqlParser parser = SqlParser.create(sql);
+    SqlParser parser = createParser(sql);
     SqlNode sqlNode;
     try {
       sqlNode = parser.parseStmt();
@@ -255,16 +255,13 @@ public class CalcitePrepareImpl implements CalcitePrepare {
       return new ParseResult(this, validator, sql, sqlNode1,
           validator.getValidatedNodeType(sqlNode1));
     }
+    final Convention resultConvention =
+        ENABLE_BINDABLE ? BindableConvention.INSTANCE
+            : EnumerableConvention.INSTANCE;
+    final HepPlanner planner = new HepPlanner(new HepProgramBuilder().build());
     final CalcitePreparingStmt preparingStmt =
-        new CalcitePreparingStmt(
-            context,
-            catalogReader,
-            typeFactory,
-            context.getRootSchema(),
-            null,
-            new HepPlanner(new HepProgramBuilder().build()),
-            ENABLE_BINDABLE ? BindableConvention.INSTANCE
-                : EnumerableConvention.INSTANCE);
+        new CalcitePreparingStmt(this, context, catalogReader, typeFactory,
+            context.getRootSchema(), null, planner, resultConvention);
     final SqlToRelConverter converter =
         preparingStmt.getSqlToRelConverter(validator, catalogReader);
     final RelNode relNode = converter.convertQuery(sqlNode1, false, true);
@@ -272,6 +269,22 @@ public class CalcitePrepareImpl implements CalcitePrepare {
         validator.getValidatedNodeType(sqlNode1), relNode);
   }
 
+  /** Factory method for default SQL parser. */
+  protected SqlParser createParser(String sql) {
+    return createParser(sql, createParserConfig());
+  }
+
+  /** Factory method for SQL parser with a given configuration. */
+  protected SqlParser createParser(String sql,
+      SqlParser.ConfigBuilder parserConfig) {
+    return SqlParser.create(sql, parserConfig.build());
+  }
+
+  /** Factory method for SQL parser configuration. */
+  protected SqlParser.ConfigBuilder createParserConfig() {
+    return SqlParser.configBuilder();
+  }
+
   /** Creates a collection of planner factories.
    *
    * <p>The collection must have at least one factory, and each factory must
@@ -469,28 +482,23 @@ public class CalcitePrepareImpl implements CalcitePrepare {
     } else {
       prefer = EnumerableRel.Prefer.CUSTOM;
     }
+    final Convention resultConvention =
+        ENABLE_BINDABLE ? BindableConvention.INSTANCE
+            : EnumerableConvention.INSTANCE;
     final CalcitePreparingStmt preparingStmt =
-        new CalcitePreparingStmt(
-            context,
-            catalogReader,
-            typeFactory,
-            context.getRootSchema(),
-            prefer,
-            planner,
-            ENABLE_BINDABLE ? BindableConvention.INSTANCE
-                : EnumerableConvention.INSTANCE);
+        new CalcitePreparingStmt(this, context, catalogReader, typeFactory,
+            context.getRootSchema(), prefer, planner, resultConvention);
 
     final RelDataType x;
     final Prepare.PreparedResult preparedResult;
     if (sql != null) {
       assert queryable == null;
       final CalciteConnectionConfig config = context.config();
-      SqlParser parser = SqlParser.create(sql,
-          SqlParser.configBuilder()
+      SqlParser parser = createParser(sql,
+          createParserConfig()
               .setQuotedCasing(config.quotedCasing())
               .setUnquotedCasing(config.unquotedCasing())
-              .setQuoting(config.quoting())
-              .build());
+              .setQuoting(config.quoting()));
       SqlNode sqlNode;
       try {
         sqlNode = parser.parseStmt();
@@ -691,7 +699,7 @@ public class CalcitePrepareImpl implements CalcitePrepare {
               Util.skipLast(materialization.materializedTable.path()),
               context.getTypeFactory());
       final CalciteMaterializer materializer =
-          new CalciteMaterializer(context, catalogReader, schema, planner);
+          new CalciteMaterializer(this, context, catalogReader, schema, planner);
       materializer.populate(materialization);
     } catch (Exception e) {
       throw new RuntimeException("While populating materialization "
@@ -734,8 +742,9 @@ public class CalcitePrepareImpl implements CalcitePrepare {
   /** Holds state for the process of preparing a SQL statement. */
   static class CalcitePreparingStmt extends Prepare
       implements RelOptTable.ViewExpander {
-    private final RelOptPlanner planner;
-    private final RexBuilder rexBuilder;
+    protected final RelOptPlanner planner;
+    protected final RexBuilder rexBuilder;
+    protected final CalcitePrepareImpl prepare;
     protected final CalciteSchema schema;
     protected final RelDataTypeFactory typeFactory;
     private final EnumerableRel.Prefer prefer;
@@ -744,7 +753,8 @@ public class CalcitePrepareImpl implements CalcitePrepare {
     private int expansionDepth;
     private SqlValidator sqlValidator;
 
-    public CalcitePreparingStmt(Context context,
+    public CalcitePreparingStmt(CalcitePrepareImpl prepare,
+        Context context,
         CatalogReader catalogReader,
         RelDataTypeFactory typeFactory,
         CalciteSchema schema,
@@ -752,6 +762,7 @@ public class CalcitePrepareImpl implements CalcitePrepare {
         RelOptPlanner planner,
         Convention resultConvention) {
       super(context, catalogReader, resultConvention);
+      this.prepare = prepare;
       this.schema = schema;
       this.prefer = prefer;
       this.planner = planner;
@@ -840,7 +851,7 @@ public class CalcitePrepareImpl implements CalcitePrepare {
         List<String> schemaPath) {
       expansionDepth++;
 
-      SqlParser parser = SqlParser.create(queryString);
+      SqlParser parser = prepare.createParser(queryString);
       SqlNode sqlNode;
       try {
         sqlNode = parser.parseQuery();