You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tajo.apache.org by hy...@apache.org on 2015/05/19 06:50:23 UTC

tajo git commit: TAJO-1537: Implement a virtual table for sessions. (Contributed by Yongjin Choi, Committed by Hyunsik Choi)

Repository: tajo
Updated Branches:
  refs/heads/master d261234ff -> 52641569e


TAJO-1537: Implement a virtual table for sessions. (Contributed by Yongjin Choi, Committed by Hyunsik Choi)

Closes #523, #576


Project: http://git-wip-us.apache.org/repos/asf/tajo/repo
Commit: http://git-wip-us.apache.org/repos/asf/tajo/commit/52641569
Tree: http://git-wip-us.apache.org/repos/asf/tajo/tree/52641569
Diff: http://git-wip-us.apache.org/repos/asf/tajo/diff/52641569

Branch: refs/heads/master
Commit: 52641569e10207e4e2001467060f80ab34119744
Parents: d261234
Author: Hyunsik Choi <hy...@apache.org>
Authored: Mon May 18 21:47:39 2015 -0700
Committer: Hyunsik Choi <hy...@apache.org>
Committed: Mon May 18 21:50:15 2015 -0700

----------------------------------------------------------------------
 CHANGES                                         |  3 ++
 .../InfoSchemaMetadataDictionary.java           |  2 +
 .../dictionary/SessionTableDescriptor.java      | 45 ++++++++++++++++++++
 .../NonForwardQueryResultSystemScanner.java     | 32 +++++++++++++-
 .../org/apache/tajo/session/SessionManager.java |  2 +
 .../tajo/engine/query/TestSelectQuery.java      |  7 +++
 .../TestNonForwardQueryResultSystemScanner.java |  1 +
 .../testSelectOnSessionTable.sql                |  1 +
 .../testSelectOnSessionTable.result             |  3 ++
 9 files changed, 95 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tajo/blob/52641569/CHANGES
----------------------------------------------------------------------
diff --git a/CHANGES b/CHANGES
index dee6f14..4b20b33 100644
--- a/CHANGES
+++ b/CHANGES
@@ -4,6 +4,9 @@ Release 0.11.0 - unreleased
 
   NEW FEATURES
 
+    TAJO-1537: Implement a virtual table for sessions. 
+    (Contributed by Yongjin Choi, Committed by hyunsik)
+
     TAJO-1562: Python UDAF support. (jihoon)
 
     TAJO-1344: Python UDF support. (jihoon)

http://git-wip-us.apache.org/repos/asf/tajo/blob/52641569/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/dictionary/InfoSchemaMetadataDictionary.java
----------------------------------------------------------------------
diff --git a/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/dictionary/InfoSchemaMetadataDictionary.java b/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/dictionary/InfoSchemaMetadataDictionary.java
index 1bb8bc5..8312e0e 100644
--- a/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/dictionary/InfoSchemaMetadataDictionary.java
+++ b/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/dictionary/InfoSchemaMetadataDictionary.java
@@ -42,6 +42,7 @@ public class InfoSchemaMetadataDictionary {
     PARTITIONS,
     PARTITION_KEYS,
     CLUSTER,
+    SESSION,
     MAX_TABLE;
   }
   
@@ -63,6 +64,7 @@ public class InfoSchemaMetadataDictionary {
     schemaInfoTableDescriptors.set(DEFINED_TABLES.PARTITIONS.ordinal(), new PartitionsTableDescriptor(this));
     schemaInfoTableDescriptors.set(DEFINED_TABLES.PARTITION_KEYS.ordinal(), new PartitionKeysTableDescriptor(this));
     schemaInfoTableDescriptors.set(DEFINED_TABLES.CLUSTER.ordinal(), new ClusterTableDescriptor(this));
+    schemaInfoTableDescriptors.set(DEFINED_TABLES.SESSION.ordinal(), new SessionTableDescriptor(this));
   }
 
   public boolean isSystemDatabase(String databaseName) {

http://git-wip-us.apache.org/repos/asf/tajo/blob/52641569/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/dictionary/SessionTableDescriptor.java
----------------------------------------------------------------------
diff --git a/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/dictionary/SessionTableDescriptor.java b/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/dictionary/SessionTableDescriptor.java
new file mode 100644
index 0000000..935f72d
--- /dev/null
+++ b/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/dictionary/SessionTableDescriptor.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.tajo.catalog.dictionary;
+
+import org.apache.tajo.common.TajoDataTypes.Type;
+
+class SessionTableDescriptor extends AbstractTableDescriptor {
+
+    private static final String TABLENAME = "session";
+    private final ColumnDescriptor[] columns =
+        new ColumnDescriptor[] {
+            new ColumnDescriptor("name", Type.TEXT, 0), new ColumnDescriptor("value", Type.TEXT, 0)
+        };
+
+    public SessionTableDescriptor(InfoSchemaMetadataDictionary metadataDictionary) {
+        super(metadataDictionary);
+    }
+
+    @Override
+    public String getTableNameString() {
+        return TABLENAME;
+    }
+
+    @Override
+    protected ColumnDescriptor[] getColumnDescriptors() {
+        return columns;
+    }
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tajo/blob/52641569/tajo-core/src/main/java/org/apache/tajo/master/exec/NonForwardQueryResultSystemScanner.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/master/exec/NonForwardQueryResultSystemScanner.java b/tajo-core/src/main/java/org/apache/tajo/master/exec/NonForwardQueryResultSystemScanner.java
index 6ae9677..6c1399e 100644
--- a/tajo-core/src/main/java/org/apache/tajo/master/exec/NonForwardQueryResultSystemScanner.java
+++ b/tajo-core/src/main/java/org/apache/tajo/master/exec/NonForwardQueryResultSystemScanner.java
@@ -18,10 +18,12 @@
 
 package org.apache.tajo.master.exec;
 
+import com.google.common.collect.Lists;
 import com.google.protobuf.ByteString;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.tajo.QueryId;
+import org.apache.tajo.SessionVars;
 import org.apache.tajo.TaskAttemptId;
 import org.apache.tajo.TaskId;
 import org.apache.tajo.catalog.*;
@@ -49,6 +51,8 @@ import org.apache.tajo.plan.expr.EvalNode;
 import org.apache.tajo.plan.logical.IndexScanNode;
 import org.apache.tajo.plan.logical.LogicalNode;
 import org.apache.tajo.plan.logical.ScanNode;
+import org.apache.tajo.session.InvalidSessionException;
+import org.apache.tajo.session.Session;
 import org.apache.tajo.storage.RowStoreUtil;
 import org.apache.tajo.storage.RowStoreUtil.RowStoreEncoder;
 import org.apache.tajo.storage.Tuple;
@@ -541,6 +545,25 @@ public class NonForwardQueryResultSystemScanner implements NonForwardQueryResult
     
     return tuples;
   }
+
+  private List<Tuple> getSessionInfo(Schema outSchema) {
+    List<Tuple> outputs = Lists.newArrayList();
+    Tuple eachVariable;
+
+    try {
+      for (Map.Entry<String, String> var: masterContext.getSessionManager().getAllVariables(sessionId).entrySet()) {
+        eachVariable = new VTuple(outSchema.size());
+        eachVariable.put(0, DatumFactory.createText(var.getKey()));
+        eachVariable.put(1, DatumFactory.createText(var.getValue()));
+
+        outputs.add(eachVariable);
+      }
+    } catch (InvalidSessionException e) {
+      LOG.error(e);
+    }
+
+    return outputs;
+  }
   
   private List<Tuple> fetchSystemTable(TableDesc tableDesc, Schema inSchema) {
     List<Tuple> tuples = null;
@@ -564,6 +587,8 @@ public class NonForwardQueryResultSystemScanner implements NonForwardQueryResult
       tuples = getAllPartitions(inSchema);
     } else if ("cluster".equalsIgnoreCase(tableName)) {
       tuples = getClusterInfo(inSchema);
+    } else if ("session".equalsIgnoreCase(tableName)) {
+      tuples = getSessionInfo(inSchema);
     }
     
     return tuples;    
@@ -657,7 +682,12 @@ public class NonForwardQueryResultSystemScanner implements NonForwardQueryResult
     public SystemPhysicalExec(TaskAttemptContext context, ScanNode scanNode) {
       super(context, scanNode.getInSchema(), scanNode.getOutSchema());
       this.scanNode = scanNode;
-      this.qual = this.scanNode.getQual();
+
+      if (this.scanNode.hasQual()) {
+        this.qual = this.scanNode.getQual();
+        this.qual.bind(null, inSchema);
+      }
+
       cachedData = TUtil.newList();
       currentRow = 0;
       isClosed = false;

http://git-wip-us.apache.org/repos/asf/tajo/blob/52641569/tajo-core/src/main/java/org/apache/tajo/session/SessionManager.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/session/SessionManager.java b/tajo-core/src/main/java/org/apache/tajo/session/SessionManager.java
index 5d66b2b..9c49fe1 100644
--- a/tajo-core/src/main/java/org/apache/tajo/session/SessionManager.java
+++ b/tajo-core/src/main/java/org/apache/tajo/session/SessionManager.java
@@ -25,6 +25,8 @@ import org.apache.hadoop.service.CompositeService;
 import org.apache.hadoop.yarn.event.Dispatcher;
 import org.apache.hadoop.yarn.event.EventHandler;
 
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Map;
 import java.util.UUID;
 import java.util.concurrent.ConcurrentHashMap;

http://git-wip-us.apache.org/repos/asf/tajo/blob/52641569/tajo-core/src/test/java/org/apache/tajo/engine/query/TestSelectQuery.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/java/org/apache/tajo/engine/query/TestSelectQuery.java b/tajo-core/src/test/java/org/apache/tajo/engine/query/TestSelectQuery.java
index c0cf4d9..1351505 100644
--- a/tajo-core/src/test/java/org/apache/tajo/engine/query/TestSelectQuery.java
+++ b/tajo-core/src/test/java/org/apache/tajo/engine/query/TestSelectQuery.java
@@ -741,4 +741,11 @@ public class TestSelectQuery extends QueryTestCaseBase {
     assertResultSet(res);
     cleanupQuery(res);
   }
+
+  @Test
+  public void testSelectOnSessionTable() throws Exception {
+    ResultSet res = executeQuery();
+    assertResultSet(res);
+    cleanupQuery(res);
+  }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tajo/blob/52641569/tajo-core/src/test/java/org/apache/tajo/master/TestNonForwardQueryResultSystemScanner.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/java/org/apache/tajo/master/TestNonForwardQueryResultSystemScanner.java b/tajo-core/src/test/java/org/apache/tajo/master/TestNonForwardQueryResultSystemScanner.java
index 01d4ec4..fb149b2 100644
--- a/tajo-core/src/test/java/org/apache/tajo/master/TestNonForwardQueryResultSystemScanner.java
+++ b/tajo-core/src/test/java/org/apache/tajo/master/TestNonForwardQueryResultSystemScanner.java
@@ -34,6 +34,7 @@ import org.apache.tajo.TajoTestingCluster;
 import org.apache.tajo.algebra.Expr;
 import org.apache.tajo.benchmark.TPCH;
 import org.apache.tajo.catalog.Schema;
+import org.apache.tajo.client.TajoClient;
 import org.apache.tajo.common.TajoDataTypes.Type;
 import org.apache.tajo.conf.TajoConf;
 import org.apache.tajo.datum.Datum;

http://git-wip-us.apache.org/repos/asf/tajo/blob/52641569/tajo-core/src/test/resources/queries/TestSelectQuery/testSelectOnSessionTable.sql
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/queries/TestSelectQuery/testSelectOnSessionTable.sql b/tajo-core/src/test/resources/queries/TestSelectQuery/testSelectOnSessionTable.sql
new file mode 100644
index 0000000..a953751
--- /dev/null
+++ b/tajo-core/src/test/resources/queries/TestSelectQuery/testSelectOnSessionTable.sql
@@ -0,0 +1 @@
+select * from information_schema.session where name = 'CURRENT_DATABASE';
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tajo/blob/52641569/tajo-core/src/test/resources/results/TestSelectQuery/testSelectOnSessionTable.result
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestSelectQuery/testSelectOnSessionTable.result b/tajo-core/src/test/resources/results/TestSelectQuery/testSelectOnSessionTable.result
new file mode 100644
index 0000000..b8797ba
--- /dev/null
+++ b/tajo-core/src/test/resources/results/TestSelectQuery/testSelectOnSessionTable.result
@@ -0,0 +1,3 @@
+name,value
+-------------------------------
+CURRENT_DATABASE,default
\ No newline at end of file