Repository: incubator-drill
Updated Branches:
  refs/heads/master a88102bfa -> 84fa4f101


Switch to Optiq 0.7-SNAPSHOT.  Add use of FrameworkContext and FrameworkConfig. 
 Move PlannerSettings to FrameworkContext usage model.


Project: http://git-wip-us.apache.org/repos/asf/incubator-drill/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-drill/commit/58d33c8a
Tree: http://git-wip-us.apache.org/repos/asf/incubator-drill/tree/58d33c8a
Diff: http://git-wip-us.apache.org/repos/asf/incubator-drill/diff/58d33c8a

Branch: refs/heads/master
Commit: 58d33c8af3e8c4caf5ef0cfc77c8f6f2d88ef1ca
Parents: a88102b
Author: Jacques Nadeau <[email protected]>
Authored: Mon Apr 21 09:21:30 2014 -0700
Committer: Jacques Nadeau <[email protected]>
Committed: Mon Apr 21 09:22:02 2014 -0700

----------------------------------------------------------------------
 .../org/apache/drill/exec/ops/QueryContext.java | 10 +++-
 .../physical/HashToRandomExchangePrel.java      |  2 +-
 .../exec/planner/physical/PlannerSettings.java  | 45 ++++++++++++++++
 .../exec/planner/physical/PlanningSettings.java | 57 --------------------
 .../drill/exec/planner/physical/PrelUtil.java   |  4 ++
 .../physical/SingleMergeExchangePrel.java       |  2 +-
 .../planner/physical/UnionExchangePrel.java     |  2 +-
 .../drill/exec/planner/sql/DrillSqlWorker.java  | 13 ++++-
 .../planner/sql/handlers/DefaultSqlHandler.java |  7 +--
 .../planner/sql/handlers/SetOptionHandler.java  |  2 +-
 .../apache/drill/exec/rpc/user/UserSession.java |  9 ----
 .../java/org/apache/drill/PlanningBase.java     |  3 ++
 pom.xml                                         |  4 +-
 13 files changed, 81 insertions(+), 79 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/58d33c8a/exec/java-exec/src/main/java/org/apache/drill/exec/ops/QueryContext.java
----------------------------------------------------------------------
diff --git 
a/exec/java-exec/src/main/java/org/apache/drill/exec/ops/QueryContext.java 
b/exec/java-exec/src/main/java/org/apache/drill/exec/ops/QueryContext.java
index 17d47aa..d658c13 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/ops/QueryContext.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/ops/QueryContext.java
@@ -26,6 +26,7 @@ import org.apache.drill.common.config.DrillConfig;
 import org.apache.drill.exec.cache.DistributedCache;
 import org.apache.drill.exec.expr.fn.FunctionImplementationRegistry;
 import org.apache.drill.exec.planner.PhysicalPlanReader;
+import org.apache.drill.exec.planner.physical.PlannerSettings;
 import org.apache.drill.exec.proto.CoordinationProtos.DrillbitEndpoint;
 import org.apache.drill.exec.proto.UserBitShared.QueryId;
 import org.apache.drill.exec.rpc.control.WorkEventBus;
@@ -34,7 +35,7 @@ import org.apache.drill.exec.rpc.user.UserSession;
 import org.apache.drill.exec.server.DrillbitContext;
 import org.apache.drill.exec.store.StoragePluginRegistry;
 
-public class QueryContext {
+public class QueryContext{
   static final org.slf4j.Logger logger = 
org.slf4j.LoggerFactory.getLogger(QueryContext.class);
 
   private final QueryId queryId;
@@ -42,6 +43,7 @@ public class QueryContext {
   private final WorkEventBus workBus;
   private UserSession session;
   public final Multitimer<QuerySetup> timer;
+  private final PlannerSettings plannerSettings;
 
   public QueryContext(UserSession session, QueryId queryId, DrillbitContext 
drllbitContext) {
     super();
@@ -50,6 +52,11 @@ public class QueryContext {
     this.workBus = drllbitContext.getWorkBus();
     this.session = session;
     this.timer = new Multitimer<>(QuerySetup.class);
+    this.plannerSettings = new PlannerSettings();
+  }
+
+  public PlannerSettings getPlannerSettings(){
+    return plannerSettings;
   }
 
   public UserSession getSession(){
@@ -108,4 +115,5 @@ public class QueryContext {
   public FunctionImplementationRegistry getFunctionRegistry(){
     return drillbitContext.getFunctionImplementationRegistry();
   }
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/58d33c8a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/HashToRandomExchangePrel.java
----------------------------------------------------------------------
diff --git 
a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/HashToRandomExchangePrel.java
 
b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/HashToRandomExchangePrel.java
index 4935e58..e5c9661 100644
--- 
a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/HashToRandomExchangePrel.java
+++ 
b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/HashToRandomExchangePrel.java
@@ -62,7 +62,7 @@ public class HashToRandomExchangePrel extends SingleRel 
implements Prel {
 
     PhysicalOperator childPOP = child.getPhysicalOperator(creator);
 
-    if(PlanningSettings.get(getCluster()).isSingleMode()) return childPOP;
+    if(PrelUtil.getSettings(getCluster()).isSingleMode()) return childPOP;
 
     //Currently, only accepts "NONE". For other, requires 
SelectionVectorRemover
     childPOP = PrelUtil.removeSvIfRequired(childPOP, SelectionVectorMode.NONE);

http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/58d33c8a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/PlannerSettings.java
----------------------------------------------------------------------
diff --git 
a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/PlannerSettings.java
 
b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/PlannerSettings.java
new file mode 100644
index 0000000..e6e99c0
--- /dev/null
+++ 
b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/PlannerSettings.java
@@ -0,0 +1,45 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.drill.exec.planner.physical;
+
+import net.hydromatic.optiq.tools.FrameworkContext;
+
+public class PlannerSettings implements FrameworkContext{
+  static final org.slf4j.Logger logger = 
org.slf4j.LoggerFactory.getLogger(PlannerSettings.class);
+
+  private boolean singleMode;
+
+  public boolean isSingleMode() {
+    return singleMode;
+  }
+
+  public void setSingleMode(boolean singleMode) {
+    this.singleMode = singleMode;
+  }
+
+  @Override
+  public <T> T unwrap(Class<T> clazz) {
+    if(clazz == PlannerSettings.class){
+      return (T) this;
+    }else{
+      return null;
+    }
+  }
+
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/58d33c8a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/PlanningSettings.java
----------------------------------------------------------------------
diff --git 
a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/PlanningSettings.java
 
b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/PlanningSettings.java
deleted file mode 100644
index ae293a2..0000000
--- 
a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/PlanningSettings.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.drill.exec.planner.physical;
-
-import org.eigenbase.relopt.RelOptCluster;
-
-public class PlanningSettings {
-  static final org.slf4j.Logger logger = 
org.slf4j.LoggerFactory.getLogger(PlanningSettings.class);
-
-  private static ThreadLocal<PlanningSettings> settings = new ThreadLocal<>();
-
-  private boolean singleMode;
-
-  public boolean isSingleMode() {
-    return singleMode;
-  }
-
-  public void setSingleMode(boolean singleMode) {
-    this.singleMode = singleMode;
-  }
-
-  /**
-   * Convenience method to extract planning settings from RelOptCluster. Uses 
threadlocal until Optiq supports
-   * passthrough.
-   */
-  public static PlanningSettings get(RelOptCluster cluster) {
-    PlanningSettings s = settings.get();
-    if (s == null) {
-      s = new PlanningSettings();
-      settings.set(s);
-    }
-
-    return s;
-  }
-
-
-  public static PlanningSettings get(){
-    return get(null);
-  }
-
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/58d33c8a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/PrelUtil.java
----------------------------------------------------------------------
diff --git 
a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/PrelUtil.java
 
b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/PrelUtil.java
index 5dcf9aa..c8412ab 100644
--- 
a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/PrelUtil.java
+++ 
b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/PrelUtil.java
@@ -30,6 +30,7 @@ import 
org.apache.drill.exec.planner.physical.DrillDistributionTrait.Distributio
 import org.apache.drill.exec.record.BatchSchema.SelectionVectorMode;
 import org.eigenbase.rel.RelCollation;
 import org.eigenbase.rel.RelFieldCollation;
+import org.eigenbase.relopt.RelOptCluster;
 import org.eigenbase.reltype.RelDataType;
 
 import com.beust.jcommander.internal.Lists;
@@ -71,6 +72,9 @@ public class PrelUtil {
     return func;
   }
 
+  public static PlannerSettings getSettings(RelOptCluster cluster){
+    return 
cluster.getPlanner().getFrameworkContext().unwrap(PlannerSettings.class);
+  }
 
   public static PhysicalOperator removeSvIfRequired(PhysicalOperator child, 
SelectionVectorMode... allowed){
     SelectionVectorMode current = child.getSVMode();

http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/58d33c8a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/SingleMergeExchangePrel.java
----------------------------------------------------------------------
diff --git 
a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/SingleMergeExchangePrel.java
 
b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/SingleMergeExchangePrel.java
index f5c2547..d9431cc 100644
--- 
a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/SingleMergeExchangePrel.java
+++ 
b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/SingleMergeExchangePrel.java
@@ -69,7 +69,7 @@ public class SingleMergeExchangePrel extends SingleRel 
implements Prel {
 
     PhysicalOperator childPOP = child.getPhysicalOperator(creator);
 
-    if(PlanningSettings.get(getCluster()).isSingleMode()) return childPOP;
+    if(PrelUtil.getSettings(getCluster()).isSingleMode()) return childPOP;
 
     //Currently, only accepts "NONE". For other, requires 
SelectionVectorRemover
     childPOP = PrelUtil.removeSvIfRequired(childPOP, SelectionVectorMode.NONE);

http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/58d33c8a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/UnionExchangePrel.java
----------------------------------------------------------------------
diff --git 
a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/UnionExchangePrel.java
 
b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/UnionExchangePrel.java
index a1951f6..f89cbaa 100644
--- 
a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/UnionExchangePrel.java
+++ 
b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/UnionExchangePrel.java
@@ -55,7 +55,7 @@ public class UnionExchangePrel extends SingleRel implements 
Prel {
 
     PhysicalOperator childPOP = child.getPhysicalOperator(creator);
 
-    if(PlanningSettings.get(getCluster()).isSingleMode()) return childPOP;
+    if(PrelUtil.getSettings(getCluster()).isSingleMode()) return childPOP;
 
     //Currently, only accepts "NONE". For other, requires 
SelectionVectorRemover
     childPOP = PrelUtil.removeSvIfRequired(childPOP, SelectionVectorMode.NONE, 
SelectionVectorMode.TWO_BYTE);

http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/58d33c8a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/DrillSqlWorker.java
----------------------------------------------------------------------
diff --git 
a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/DrillSqlWorker.java
 
b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/DrillSqlWorker.java
index e48bc5b..532edf1 100644
--- 
a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/DrillSqlWorker.java
+++ 
b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/DrillSqlWorker.java
@@ -26,6 +26,7 @@ import net.hydromatic.optiq.tools.Frameworks;
 import net.hydromatic.optiq.tools.Planner;
 import net.hydromatic.optiq.tools.RelConversionException;
 import net.hydromatic.optiq.tools.RuleSet;
+import net.hydromatic.optiq.tools.StdFrameworkConfig;
 import net.hydromatic.optiq.tools.ValidationException;
 
 import org.apache.drill.exec.ops.QueryContext;
@@ -61,7 +62,17 @@ public class DrillSqlWorker {
     traitDefs.add(RelCollationTraitDef.INSTANCE);
     this.context = context;
     DrillOperatorTable table = new 
DrillOperatorTable(context.getFunctionRegistry());
-    this.planner = Frameworks.getPlanner(Lex.MYSQL, SqlParserImpl.FACTORY, 
context.getNewDefaultSchema(), table, traitDefs, 
StandardConvertletTable.INSTANCE, RULES);
+    StdFrameworkConfig config = StdFrameworkConfig.newBuilder() //
+        .lex(Lex.MYSQL) //
+        .parserFactory(SqlParserImpl.FACTORY) //
+        .defaultSchema(context.getNewDefaultSchema()) //
+        .operatorTable(table) //
+        .traitDefs(traitDefs) //
+        .convertletTable(StandardConvertletTable.INSTANCE) //
+        .context(context.getPlannerSettings()) //
+        .ruleSets(RULES) //
+        .build();
+    this.planner = Frameworks.getPlanner(config);
 
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/58d33c8a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DefaultSqlHandler.java
----------------------------------------------------------------------
diff --git 
a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DefaultSqlHandler.java
 
b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DefaultSqlHandler.java
index a34a724..bd005ac 100644
--- 
a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DefaultSqlHandler.java
+++ 
b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DefaultSqlHandler.java
@@ -40,7 +40,7 @@ import org.apache.drill.exec.planner.logical.DrillScreenRel;
 import org.apache.drill.exec.planner.logical.DrillStoreRel;
 import org.apache.drill.exec.planner.physical.DrillDistributionTrait;
 import org.apache.drill.exec.planner.physical.PhysicalPlanCreator;
-import org.apache.drill.exec.planner.physical.PlanningSettings;
+import org.apache.drill.exec.planner.physical.PlannerSettings;
 import org.apache.drill.exec.planner.physical.Prel;
 import org.apache.drill.exec.planner.sql.DrillSqlWorker;
 import org.eigenbase.rel.RelNode;
@@ -123,13 +123,8 @@ public class DefaultSqlHandler implements SqlHandler{
 
   protected PhysicalOperator convertToPop(Prel prel) throws IOException{
 
-    boolean singleMode = !context.getSession().isEnableExchanges();
-
-    if(singleMode) PlanningSettings.get().setSingleMode(true);
     PhysicalPlanCreator creator = new PhysicalPlanCreator(context);
     PhysicalOperator op =  prel.getPhysicalOperator(creator);
-
-    if(singleMode) PlanningSettings.get().setSingleMode(false);
     return op;
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/58d33c8a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/SetOptionHandler.java
----------------------------------------------------------------------
diff --git 
a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/SetOptionHandler.java
 
b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/SetOptionHandler.java
index 28180d2..64be891 100644
--- 
a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/SetOptionHandler.java
+++ 
b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/SetOptionHandler.java
@@ -47,7 +47,7 @@ public class SetOptionHandler implements SqlHandler{
     String name = option.getName();
     SqlNode value = option.getValue();
     if(name.equals("NO_EXCHANGES")){
-      context.getSession().enableExchanges(false);
+      context.getPlannerSettings().setSingleMode(true);
     }
     return DirectPlan.createDirectPlan(context, true, "disabled exchanges.");
 

http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/58d33c8a/exec/java-exec/src/main/java/org/apache/drill/exec/rpc/user/UserSession.java
----------------------------------------------------------------------
diff --git 
a/exec/java-exec/src/main/java/org/apache/drill/exec/rpc/user/UserSession.java 
b/exec/java-exec/src/main/java/org/apache/drill/exec/rpc/user/UserSession.java
index 75545ec..0291978 100644
--- 
a/exec/java-exec/src/main/java/org/apache/drill/exec/rpc/user/UserSession.java
+++ 
b/exec/java-exec/src/main/java/org/apache/drill/exec/rpc/user/UserSession.java
@@ -30,7 +30,6 @@ public class UserSession {
 
   private DrillUser user;
   private String defaultSchema = "";
-  private boolean enableExchanges = true;
   private UserClientConnection connection;
 
   public UserSession(UserClientConnection connection, UserCredentials 
credentials, SchemaFactory factory) throws IOException{
@@ -66,14 +65,6 @@ public class UserSession {
     return schema;
   }
 
-  public void enableExchanges(boolean enableExchanges){
-    this.enableExchanges = enableExchanges;
-  }
-
-  public boolean isEnableExchanges() {
-    return enableExchanges;
-  }
-
   public boolean setSessionOption(String name, String value){
     return true;
   }

http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/58d33c8a/exec/java-exec/src/test/java/org/apache/drill/PlanningBase.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/java/org/apache/drill/PlanningBase.java 
b/exec/java-exec/src/test/java/org/apache/drill/PlanningBase.java
index d719bc5..a9ea6da 100644
--- a/exec/java-exec/src/test/java/org/apache/drill/PlanningBase.java
+++ b/exec/java-exec/src/test/java/org/apache/drill/PlanningBase.java
@@ -31,6 +31,7 @@ import 
org.apache.drill.exec.expr.fn.FunctionImplementationRegistry;
 import org.apache.drill.exec.memory.TopLevelAllocator;
 import org.apache.drill.exec.ops.QueryContext;
 import org.apache.drill.exec.physical.PhysicalPlan;
+import org.apache.drill.exec.planner.physical.PlannerSettings;
 import org.apache.drill.exec.planner.sql.DrillSqlWorker;
 import org.apache.drill.exec.proto.CoordinationProtos.DrillbitEndpoint;
 import org.apache.drill.exec.rpc.user.UserSession;
@@ -91,6 +92,8 @@ public class PlanningBase {
         result = DrillbitEndpoint.getDefaultInstance();
         context.getActiveEndpoints();
         result = ImmutableList.of(DrillbitEndpoint.getDefaultInstance());
+        context.getPlannerSettings();
+        result = new PlannerSettings();
         context.getConfig();
         result = config;
       }

http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/58d33c8a/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index bb53650..8291844 100644
--- a/pom.xml
+++ b/pom.xml
@@ -178,6 +178,8 @@
         <configuration>
           <source>1.7</source>
           <target>1.7</target>
+          <maxmem>2g</maxmem>
+          <fork>true</fork>
         </configuration>
       </plugin>
       <plugin>
@@ -610,7 +612,7 @@
           <dependency>
             <groupId>net.hydromatic</groupId>
             <artifactId>optiq-core</artifactId>
-            <version>0.6</version>
+            <version>0.7-SNAPSHOT</version>
             <exclusions>
               <exclusion>
                 <groupId>org.jgrapht</groupId>

Reply via email to