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 2014/07/04 02:01:33 UTC
[3/8] git commit: [OPTIQ-324] Add ViewExpander for Planner in
Frameworks. Expose additional properties of ViewTable to allow subclassing.
[OPTIQ-324] Add ViewExpander for Planner in Frameworks. Expose additional properties of ViewTable to allow subclassing.
Project: http://git-wip-us.apache.org/repos/asf/incubator-optiq/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-optiq/commit/ff40b4e0
Tree: http://git-wip-us.apache.org/repos/asf/incubator-optiq/tree/ff40b4e0
Diff: http://git-wip-us.apache.org/repos/asf/incubator-optiq/diff/ff40b4e0
Branch: refs/heads/master
Commit: ff40b4e095420add9b44c228958f51b4b00eb756
Parents: 3106270
Author: vkorukanti <ve...@gmail.com>
Authored: Tue Apr 29 04:53:32 2014 -0700
Committer: Jacques Nadeau <ja...@apache.org>
Committed: Thu Jul 3 12:21:28 2014 -0700
----------------------------------------------------------------------
.../net/hydromatic/optiq/impl/ViewTable.java | 10 +++++
.../hydromatic/optiq/prepare/PlannerImpl.java | 39 +++++++++++++++++++-
2 files changed, 48 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-optiq/blob/ff40b4e0/core/src/main/java/net/hydromatic/optiq/impl/ViewTable.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/net/hydromatic/optiq/impl/ViewTable.java b/core/src/main/java/net/hydromatic/optiq/impl/ViewTable.java
index 5cdf16f..64d0190 100644
--- a/core/src/main/java/net/hydromatic/optiq/impl/ViewTable.java
+++ b/core/src/main/java/net/hydromatic/optiq/impl/ViewTable.java
@@ -134,6 +134,16 @@ public class ViewTable
RelDataTypeImpl.proto(parsed.rowType), viewSql, schemaPath1);
}
}
+
+ /** Get the view's SQL definition. */
+ public String getViewSql() {
+ return viewSql;
+ }
+
+ /** Get the schemapath of the view */
+ public List<String> getSchemaPath() {
+ return schemaPath;
+ }
}
// End ViewTable.java
http://git-wip-us.apache.org/repos/asf/incubator-optiq/blob/ff40b4e0/core/src/main/java/net/hydromatic/optiq/prepare/PlannerImpl.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/net/hydromatic/optiq/prepare/PlannerImpl.java b/core/src/main/java/net/hydromatic/optiq/prepare/PlannerImpl.java
index c36a65b..6bc8704 100644
--- a/core/src/main/java/net/hydromatic/optiq/prepare/PlannerImpl.java
+++ b/core/src/main/java/net/hydromatic/optiq/prepare/PlannerImpl.java
@@ -25,18 +25,23 @@ import net.hydromatic.optiq.tools.*;
import org.eigenbase.rel.RelNode;
import org.eigenbase.relopt.*;
+import org.eigenbase.relopt.RelOptTable.ViewExpander;
+import org.eigenbase.reltype.RelDataType;
import org.eigenbase.rex.RexBuilder;
import org.eigenbase.sql.SqlNode;
import org.eigenbase.sql.SqlOperatorTable;
import org.eigenbase.sql.parser.SqlParseException;
import org.eigenbase.sql.parser.SqlParser;
import org.eigenbase.sql.parser.SqlParserImplFactory;
+import org.eigenbase.sql.validate.SqlValidator;
import org.eigenbase.sql2rel.SqlRexConvertletTable;
import org.eigenbase.sql2rel.SqlToRelConverter;
import org.eigenbase.util.Util;
import com.google.common.collect.ImmutableList;
+import java.util.List;
+
/** Implementation of {@link net.hydromatic.optiq.tools.Planner}. */
public class PlannerImpl implements Planner {
private final SqlOperatorTable operatorTable;
@@ -180,7 +185,7 @@ public class PlannerImpl implements Planner {
assert validatedSqlNode != null;
this.sqlToRelConverter =
new SqlToRelConverter(
- null, validator, createCatalogReader(), planner,
+ new ViewExpanderImpl(), validator, createCatalogReader(), planner,
createRexBuilder(), convertletTable);
sqlToRelConverter.setTrimUnusedFields(false);
sqlToRelConverter.enableTableAccessConversion(false);
@@ -191,6 +196,38 @@ public class PlannerImpl implements Planner {
return rel;
}
+ /** Implements {@link org.eigenbase.relopt.RelOptTable.ViewExpander}
+ * interface for {@link net.hydromatic.optiq.tools.Planner} */
+ public class ViewExpanderImpl implements ViewExpander {
+ public RelNode expandView(RelDataType rowType, String queryString,
+ List<String> schemaPath) {
+ SqlParser parser = SqlParser.create(parserFactory, queryString,
+ lex.quoting, lex.unquotedCasing, lex.quotedCasing);
+ SqlNode sqlNode;
+ try {
+ sqlNode = parser.parseQuery();
+ } catch (SqlParseException e) {
+ throw new RuntimeException("parse failed", e);
+ }
+
+ final OptiqCatalogReader catalogReader =
+ createCatalogReader().withSchemaPath(schemaPath);
+ SqlValidator validator = new OptiqSqlValidator(
+ operatorTable, catalogReader, typeFactory);
+ SqlNode validatedSqlNode = validator.validate(sqlNode);
+
+ SqlToRelConverter sqlToRelConverter = new SqlToRelConverter(
+ null, validator, catalogReader, planner,
+ createRexBuilder(), convertletTable);
+ sqlToRelConverter.setTrimUnusedFields(false);
+
+ RelNode relNode = sqlToRelConverter.convertQuery(
+ validatedSqlNode, true, false);
+
+ return relNode;
+ }
+ }
+
// OptiqCatalogReader is stateless; no need to store one
private OptiqCatalogReader createCatalogReader() {
SchemaPlus rootSchema = rootSchema(defaultSchema);