From 4c752371744b92c8315ca51c227d0e6eabb3c515 Mon Sep 17 00:00:00 2001 From: Yifan Zhang Date: Tue, 18 Oct 2016 16:12:07 +0800 Subject: [PATCH 1/3] Add UDF version() to get kylin version, Add UT --- .../main/java/org/apache/kylin/query/udf/VersionUDF.java | 9 +++++++++ .../java/org/apache/kylin/query/udf/VersionUDFTest.java | 15 +++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 query/src/main/java/org/apache/kylin/query/udf/VersionUDF.java create mode 100644 query/src/test/java/org/apache/kylin/query/udf/VersionUDFTest.java diff --git a/query/src/main/java/org/apache/kylin/query/udf/VersionUDF.java b/query/src/main/java/org/apache/kylin/query/udf/VersionUDF.java new file mode 100644 index 0000000..4b4c314 --- /dev/null +++ b/query/src/main/java/org/apache/kylin/query/udf/VersionUDF.java @@ -0,0 +1,9 @@ +package org.apache.kylin.query.udf; + +import org.apache.kylin.common.KylinVersion; + +public class VersionUDF { + public String eval() { + return KylinVersion.getCurrentVersion().toString(); + } +} diff --git a/query/src/test/java/org/apache/kylin/query/udf/VersionUDFTest.java b/query/src/test/java/org/apache/kylin/query/udf/VersionUDFTest.java new file mode 100644 index 0000000..98cced4 --- /dev/null +++ b/query/src/test/java/org/apache/kylin/query/udf/VersionUDFTest.java @@ -0,0 +1,15 @@ +package org.apache.kylin.query.udf; + +import static org.junit.Assert.assertTrue; + +import org.apache.kylin.common.KylinVersion; +import org.junit.Test; + +public class VersionUDFTest { + @Test + public void testVersionUDF() { + String currentVer = KylinVersion.getCurrentVersion().toString(); + String udfVer = new VersionUDF().eval(); + assertTrue(currentVer.equals(udfVer)); + } +} -- 2.10.0 From 4e51e3e113887c749363f889eda507f29dc5adc6 Mon Sep 17 00:00:00 2001 From: Yifan Zhang Date: Tue, 18 Oct 2016 17:25:08 +0800 Subject: [PATCH 2/3] Update kylin properties's UDF setting --- build/conf/kylin.properties | 2 ++ 1 file changed, 2 insertions(+) diff --git a/build/conf/kylin.properties b/build/conf/kylin.properties index ed86bdb..e8d3b20 100644 --- a/build/conf/kylin.properties +++ b/build/conf/kylin.properties @@ -135,6 +135,8 @@ kylin.table.snapshot.max_mb=300 kylin.query.scan.threshold=10000000 +kylin.query.udf.version=org.apache.kylin.query.udf.VersionUDF + # 3G kylin.query.mem.budget=3221225472 -- 2.10.0 From 6c8ae1624146a501c3a508d5ca0d9464a24ae67e Mon Sep 17 00:00:00 2001 From: Yifan Zhang Date: Fri, 21 Oct 2016 18:10:46 +0800 Subject: [PATCH 3/3] Add IT cases of version() and query output check. --- examples/test_case_data/sandbox/kylin.properties | 1 + .../org/apache/kylin/query/ITKylinQueryTest.java | 28 +++++++++++++++++++++- .../java/org/apache/kylin/query/KylinTestBase.java | 25 +++++++++++++++++++ .../resources/query/sql_verifyContent/query01.sql | 21 ++++++++++++++++ .../sql_verifyContent/query01.sql.expected.xml | 4 ++++ .../org/apache/kylin/query/udf/VersionUDF.java | 18 ++++++++++++++ 6 files changed, 96 insertions(+), 1 deletion(-) create mode 100644 kylin-it/src/test/resources/query/sql_verifyContent/query01.sql create mode 100644 kylin-it/src/test/resources/query/sql_verifyContent/query01.sql.expected.xml diff --git a/examples/test_case_data/sandbox/kylin.properties b/examples/test_case_data/sandbox/kylin.properties index 8f3075e..b717956 100644 --- a/examples/test_case_data/sandbox/kylin.properties +++ b/examples/test_case_data/sandbox/kylin.properties @@ -103,6 +103,7 @@ kylin.hbase.region.count.max=5 kylin.hbase.hfile.size.gb=2 kylin.query.udf.massin=org.apache.kylin.query.udf.MassInUDF +kylin.query.udf.version=org.apache.kylin.query.udf.VersionUDF kylin.job.controller.lock=org.apache.kylin.job.lock.MockJobLock 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 2ec5324..035b4e7 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 @@ -27,6 +27,7 @@ import java.util.Map; import org.apache.commons.lang3.StringUtils; import org.apache.kylin.common.KylinConfig; +import org.apache.kylin.common.KylinVersion; import org.apache.kylin.common.debug.BackdoorToggles; import org.apache.kylin.gridtable.GTScanSelfTerminatedException; import org.apache.kylin.gridtable.StorageSideBehavior; @@ -36,7 +37,9 @@ import org.apache.kylin.query.routing.rules.RemoveBlackoutRealizationsRule; import org.apache.kylin.storage.hbase.HBaseStorage; import org.dbunit.database.DatabaseConnection; import org.dbunit.database.IDatabaseConnection; +import org.dbunit.dataset.ITable; import org.junit.AfterClass; +import org.junit.Assert; import org.junit.BeforeClass; import org.junit.Ignore; import org.junit.Rule; @@ -199,11 +202,16 @@ public class ITKylinQueryTest extends KylinTestBase { } @Test - public void testVerifyQuery() throws Exception { + public void testVerifyCountQuery() throws Exception { verifyResultRowCount(getQueryFolderPrefix() + "src/test/resources/query/sql_verifyCount"); } @Test + public void testVerifyContentQuery() throws Exception { + verifyResultContent(getQueryFolderPrefix() + "src/test/resources/query/sql_verifyContent"); + } + + @Test public void testOrderByQuery() throws Exception { execAndCompQuery(getQueryFolderPrefix() + "src/test/resources/query/sql_orderby", null, true); // FIXME @@ -364,4 +372,22 @@ public class ITKylinQueryTest extends KylinTestBase { this.batchExecuteQuery(getQueryFolderPrefix() + "src/test/resources/query/sql_window"); } + @Test + public void testVersionQuery() throws Exception { + String expectVersion = KylinVersion.getCurrentVersion().toString(); + printInfo("---------- verify expect version: " + expectVersion); + + String queryName = "QueryKylinVersion"; + String sql = "SELECT VERSION() AS version"; + + // execute Kylin + printInfo("Query Result from Kylin - " + queryName); + IDatabaseConnection kylinConn = new DatabaseConnection(cubeConnection); + ITable kylinTable = executeQuery(kylinConn, queryName, sql, false); + String queriedVersion = String.valueOf(kylinTable.getValue(0, "version")); + + + // compare the result + Assert.assertEquals(expectVersion, queriedVersion); + } } 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 57c4f4d..52461c4 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 @@ -58,10 +58,12 @@ import org.dbunit.database.DatabaseConfig; import org.dbunit.database.DatabaseConnection; import org.dbunit.database.IDatabaseConnection; import org.dbunit.dataset.DataSetException; +import org.dbunit.dataset.IDataSet; import org.dbunit.dataset.ITable; import org.dbunit.dataset.SortedTable; import org.dbunit.dataset.datatype.DataType; import org.dbunit.dataset.datatype.DataTypeException; +import org.dbunit.dataset.xml.FlatXmlDataSetBuilder; import org.dbunit.ext.h2.H2Connection; import org.dbunit.ext.h2.H2DataTypeFactory; import org.junit.Assert; @@ -360,6 +362,29 @@ public class KylinTestBase { } } + protected void verifyResultContent(String queryFolder) throws Exception { + printInfo("---------- verify result content in folder: " + queryFolder); + + List sqlFiles = getFilesFromFolder(new File(queryFolder), ".sql"); + for (File sqlFile : sqlFiles) { + String queryName = StringUtils.split(sqlFile.getName(), '.')[0]; + String sql = getTextFromFile(sqlFile); + + File expectResultFile = new File(sqlFile.getParent(), sqlFile.getName() + ".expected.xml"); + IDataSet expect = new FlatXmlDataSetBuilder().build(expectResultFile); + // Get expected table named "expect". FIXME Only support default table name + ITable expectTable = expect.getTable("expect"); + + // execute Kylin + printInfo("Query Result from Kylin - " + queryName + " (" + queryFolder + ")"); + IDatabaseConnection kylinConn = new DatabaseConnection(cubeConnection); + ITable kylinTable = executeQuery(kylinConn, queryName, sql, false); + + // compare the result + Assertion.assertEquals(expectTable, kylinTable); + } + } + protected void execAndCompResultSize(String queryFolder, String[] exclusiveQuerys, boolean needSort) throws Exception { printInfo("---------- test folder: " + queryFolder); Set exclusiveSet = buildExclusiveSet(exclusiveQuerys); diff --git a/kylin-it/src/test/resources/query/sql_verifyContent/query01.sql b/kylin-it/src/test/resources/query/sql_verifyContent/query01.sql new file mode 100644 index 0000000..ffec3bf --- /dev/null +++ b/kylin-it/src/test/resources/query/sql_verifyContent/query01.sql @@ -0,0 +1,21 @@ +-- +-- 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. +-- + +-- This is a sample case + +SELECT 'Hello world' AS message \ No newline at end of file diff --git a/kylin-it/src/test/resources/query/sql_verifyContent/query01.sql.expected.xml b/kylin-it/src/test/resources/query/sql_verifyContent/query01.sql.expected.xml new file mode 100644 index 0000000..d858aa9 --- /dev/null +++ b/kylin-it/src/test/resources/query/sql_verifyContent/query01.sql.expected.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/query/src/main/java/org/apache/kylin/query/udf/VersionUDF.java b/query/src/main/java/org/apache/kylin/query/udf/VersionUDF.java index 4b4c314..cbd0f22 100644 --- a/query/src/main/java/org/apache/kylin/query/udf/VersionUDF.java +++ b/query/src/main/java/org/apache/kylin/query/udf/VersionUDF.java @@ -1,3 +1,21 @@ +/* + * 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.kylin.query.udf; import org.apache.kylin.common.KylinVersion; -- 2.10.0