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() { + } + } }
