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();