Repository: kylin
Updated Branches:
  refs/heads/master 2f084601b -> 69532cd5f


minor, add prepare toggle


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

Branch: refs/heads/master
Commit: b172e0c15802d2e2e085b74f62011f13f55a225a
Parents: fa6d1b3
Author: Li Yang <[email protected]>
Authored: Wed Jun 14 20:44:08 2017 +0800
Committer: Hongbin Ma <[email protected]>
Committed: Wed Jun 14 21:10:24 2017 +0800

----------------------------------------------------------------------
 .../kylin/common/debug/BackdoorToggles.java     | 14 ++++++++
 .../apache/kylin/query/ITKylinQueryTest.java    | 15 ++++++++
 .../org/apache/kylin/query/KylinTestBase.java   |  5 ++-
 .../kylin/query/enumerator/OLAPQuery.java       | 36 ++++++++++++++++++--
 4 files changed, 66 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/kylin/blob/b172e0c1/core-common/src/main/java/org/apache/kylin/common/debug/BackdoorToggles.java
----------------------------------------------------------------------
diff --git 
a/core-common/src/main/java/org/apache/kylin/common/debug/BackdoorToggles.java 
b/core-common/src/main/java/org/apache/kylin/common/debug/BackdoorToggles.java
index 95d5d62..8cb48b6 100644
--- 
a/core-common/src/main/java/org/apache/kylin/common/debug/BackdoorToggles.java
+++ 
b/core-common/src/main/java/org/apache/kylin/common/debug/BackdoorToggles.java
@@ -106,6 +106,10 @@ public class BackdoorToggles {
             return Integer.valueOf(v);
     }
 
+    public static boolean getPrepareOnly() {
+        return getBoolean(DEBUG_TOGGLE_PREPARE_ONLY);
+    }
+
     private static String getString(String key) {
         Map<String, String> toggles = _backdoorToggles.get();
         if (toggles == null) {
@@ -230,6 +234,16 @@ public class BackdoorToggles {
      */
     public final static String DEBUG_TOGGLE_DUMPED_PARTITION_DIR = 
"DEBUG_TOGGLE_DUMPED_PARTITION_DIR";
 
+    /**
+     * set DEBUG_TOGGLE_PREPARE_ONLY="true" to prepare the sql statement and 
get its result set metadata
+     *
+     example:(put it into request body)
+     "backdoorToggles": {
+     "DEBUG_TOGGLE_PREPARE_ONLY": "true"
+     }
+     */
+    public final static String DEBUG_TOGGLE_PREPARE_ONLY = 
"DEBUG_TOGGLE_PREPARE_ONLY";
+    
     // properties on statement may go with this "channel" too
     /**
      * set ATTR_STATEMENT_MAX_ROWS="maxRows" to statement's max rows property

http://git-wip-us.apache.org/repos/asf/kylin/blob/b172e0c1/kylin-it/src/test/java/org/apache/kylin/query/ITKylinQueryTest.java
----------------------------------------------------------------------
diff --git 
a/kylin-it/src/test/java/org/apache/kylin/query/ITKylinQueryTest.java 
b/kylin-it/src/test/java/org/apache/kylin/query/ITKylinQueryTest.java
index 55041e3..4ea4497 100644
--- a/kylin-it/src/test/java/org/apache/kylin/query/ITKylinQueryTest.java
+++ b/kylin-it/src/test/java/org/apache/kylin/query/ITKylinQueryTest.java
@@ -200,6 +200,21 @@ public class ITKylinQueryTest extends KylinTestBase {
     }
 
     @Test
+    public void testVerifyCountQueryWithPrepare() throws Exception {
+        try {
+            Map<String, String> toggles = Maps.newHashMap();
+            toggles.put(BackdoorToggles.DEBUG_TOGGLE_PREPARE_ONLY, "true");
+            BackdoorToggles.setToggles(toggles);
+            
+            verifyResultRowColCount(getQueryFolderPrefix() + 
"src/test/resources/query/sql_verifyCount");
+            
+        } finally {
+            BackdoorToggles.cleanToggles();
+            
+        }
+    }
+    
+    @Test
     public void testVerifyContentQuery() throws Exception {
         verifyResultContent(getQueryFolderPrefix() + 
"src/test/resources/query/sql_verifyContent");
     }

http://git-wip-us.apache.org/repos/asf/kylin/blob/b172e0c1/kylin-it/src/test/java/org/apache/kylin/query/KylinTestBase.java
----------------------------------------------------------------------
diff --git a/kylin-it/src/test/java/org/apache/kylin/query/KylinTestBase.java 
b/kylin-it/src/test/java/org/apache/kylin/query/KylinTestBase.java
index 0db5388..a05d0c3 100644
--- a/kylin-it/src/test/java/org/apache/kylin/query/KylinTestBase.java
+++ b/kylin-it/src/test/java/org/apache/kylin/query/KylinTestBase.java
@@ -44,6 +44,7 @@ import java.util.logging.LogManager;
 
 import org.apache.commons.lang3.StringUtils;
 import org.apache.kylin.common.KylinConfig;
+import org.apache.kylin.common.debug.BackdoorToggles;
 import org.apache.kylin.common.util.HBaseMetadataTestCase;
 import org.apache.kylin.common.util.Pair;
 import org.apache.kylin.metadata.project.ProjectInstance;
@@ -365,7 +366,9 @@ public class KylinTestBase {
             ITable kylinTable = executeQuery(kylinConn, queryName, sql, false);
 
             // compare the result
-            if (expectRowCount >= 0)
+            if (BackdoorToggles.getPrepareOnly())
+                Assert.assertEquals(queryName, 0, kylinTable.getRowCount());
+            else if (expectRowCount >= 0)
                 Assert.assertEquals(queryName, expectRowCount, 
kylinTable.getRowCount());
 
             if (expectColCount >= 0)

http://git-wip-us.apache.org/repos/asf/kylin/blob/b172e0c1/query/src/main/java/org/apache/kylin/query/enumerator/OLAPQuery.java
----------------------------------------------------------------------
diff --git 
a/query/src/main/java/org/apache/kylin/query/enumerator/OLAPQuery.java 
b/query/src/main/java/org/apache/kylin/query/enumerator/OLAPQuery.java
index 8318a07..debc125 100644
--- a/query/src/main/java/org/apache/kylin/query/enumerator/OLAPQuery.java
+++ b/query/src/main/java/org/apache/kylin/query/enumerator/OLAPQuery.java
@@ -22,12 +22,17 @@ import org.apache.calcite.DataContext;
 import org.apache.calcite.linq4j.AbstractEnumerable;
 import org.apache.calcite.linq4j.Enumerable;
 import org.apache.calcite.linq4j.Enumerator;
+import org.apache.kylin.common.debug.BackdoorToggles;
 import org.apache.kylin.query.relnode.OLAPContext;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  */
 public class OLAPQuery extends AbstractEnumerable<Object[]> implements 
Enumerable<Object[]> {
 
+    private static final Logger logger = 
LoggerFactory.getLogger(OLAPQuery.class);
+
     public enum EnumeratorTypeEnum {
         OLAP, //finish query with Cube or II, or a combination of both
         LOOKUP_TABLE, //using a snapshot of lookup table
@@ -52,13 +57,38 @@ public class OLAPQuery extends AbstractEnumerable<Object[]> 
implements Enumerabl
         OLAPContext olapContext = 
OLAPContext.getThreadLocalContextById(contextId);
         switch (type) {
         case OLAP:
-            return new OLAPEnumerator(olapContext, optiqContext);
+            return BackdoorToggles.getPrepareOnly() ? new EmptyEnumerator() : 
new OLAPEnumerator(olapContext, optiqContext);
         case LOOKUP_TABLE:
-            return new LookupTableEnumerator(olapContext);
+            return BackdoorToggles.getPrepareOnly() ? new EmptyEnumerator() : 
new LookupTableEnumerator(olapContext);
         case HIVE:
-            return new HiveEnumerator(olapContext);
+            return BackdoorToggles.getPrepareOnly() ? new EmptyEnumerator() : 
new HiveEnumerator(olapContext);
         default:
             throw new IllegalArgumentException("Wrong type " + type + "!");
         }
     }
+    
+    private static class EmptyEnumerator implements Enumerator<Object[]> {
+        
+        EmptyEnumerator() {
+            logger.debug("Using empty enumerator");
+        }
+
+        @Override
+        public void close() {
+        }
+
+        @Override
+        public Object[] current() {
+            return null;
+        }
+
+        @Override
+        public boolean moveNext() {
+            return false;
+        }
+
+        @Override
+        public void reset() {
+        }
+    }
 }

Reply via email to