diff options
author | Volodymyr Vysotskyi <vvovyk@gmail.com> | 2019-01-22 00:18:19 +0200 |
---|---|---|
committer | Volodymyr Vysotskyi <vvovyk@gmail.com> | 2019-01-25 17:23:46 +0200 |
commit | c230ba55cceb6d48ac9c1ab0701a167d91842a11 (patch) | |
tree | face3767754e9fba81484e8a12098f3b421963be /exec/java-exec/src/test/java/org | |
parent | 72cba88f058b072040c701a7e1dbbe4fc4eb8d48 (diff) |
DRILL-6533: Allow using literal values in functions which expect FieldReader instead of ValueHolder
closes #1617
Diffstat (limited to 'exec/java-exec/src/test/java/org')
-rw-r--r-- | exec/java-exec/src/test/java/org/apache/drill/exec/expr/fn/impl/TestTypeFns.java | 133 |
1 files changed, 122 insertions, 11 deletions
diff --git a/exec/java-exec/src/test/java/org/apache/drill/exec/expr/fn/impl/TestTypeFns.java b/exec/java-exec/src/test/java/org/apache/drill/exec/expr/fn/impl/TestTypeFns.java index 02d664f53..46e321648 100644 --- a/exec/java-exec/src/test/java/org/apache/drill/exec/expr/fn/impl/TestTypeFns.java +++ b/exec/java-exec/src/test/java/org/apache/drill/exec/expr/fn/impl/TestTypeFns.java @@ -75,19 +75,19 @@ public class TestTypeFns extends ClusterTest { // typeof() returns types using the internal names. String sql = "SELECT typeof(CAST(a AS " + castType + ")) FROM (VALUES (1)) AS T(a)"; - String result = client.queryBuilder().sql(sql).singletonString(); + String result = queryBuilder().sql(sql).singletonString(); assertEquals(resultType, result); // For typeof(), null values annoyingly report a type of "NULL" sql = "SELECT typeof(CAST(a AS " + castType + ")) FROM cp.`functions/null.json`"; - result = client.queryBuilder().sql(sql).singletonString(); + result = queryBuilder().sql(sql).singletonString(); assertEquals("NULL", result); } private void doTypeOfTestSpecial(String expr, String value, String resultType) throws RpcException { String sql = "SELECT typeof(" + expr + ") FROM (VALUES (" + value + ")) AS T(a)"; - String result = client.queryBuilder().sql(sql).singletonString(); + String result = queryBuilder().sql(sql).singletonString(); assertEquals(resultType, result); } @@ -124,19 +124,25 @@ public class TestTypeFns extends ClusterTest { // sqlTypeOf() returns SQL type names: the names used in CAST. String sql = "SELECT sqlTypeOf(CAST(a AS " + type + ")) FROM (VALUES (1)) AS T(a)"; - String result = client.queryBuilder().sql(sql).singletonString(); + String result = queryBuilder().sql(sql).singletonString(); + assertEquals(type, result); + + // sqlTypeOf() returns SQL type names: the names used in CAST. + + sql = "SELECT sqlTypeOf(CAST(1 AS " + type + "))"; + result = queryBuilder().sql(sql).singletonString(); assertEquals(type, result); // Returns same type even value is null. sql = "SELECT sqlTypeOf(CAST(a AS " + type + ")) FROM cp.`functions/null.json`"; - result = client.queryBuilder().sql(sql).singletonString(); + result = queryBuilder().sql(sql).singletonString(); assertEquals(type, result); } private void doSqlTypeOfTestSpecial(String expr, String value, String resultType) throws RpcException { String sql = "SELECT sqlTypeof(" + expr + ") FROM (VALUES (" + value + ")) AS T(a)"; - String result = client.queryBuilder().sql(sql).singletonString(); + String result = queryBuilder().sql(sql).singletonString(); assertEquals(resultType, result); } @@ -163,13 +169,17 @@ public class TestTypeFns extends ClusterTest { // drillTypeOf() returns types using the internal names. String sql = "SELECT drillTypeOf(CAST(a AS " + castType + ")) FROM (VALUES (1)) AS T(a)"; - String result = client.queryBuilder().sql(sql).singletonString(); + String result = queryBuilder().sql(sql).singletonString(); + assertEquals(resultType, result); + + sql = "SELECT drillTypeOf(CAST(1 AS " + castType + "))"; + result = queryBuilder().sql(sql).singletonString(); assertEquals(resultType, result); // Returns same type even value is null. sql = "SELECT drillTypeOf(CAST(a AS " + castType + ")) FROM cp.`functions/null.json`"; - result = client.queryBuilder().sql(sql).singletonString(); + result = queryBuilder().sql(sql).singletonString(); assertEquals(resultType, result); } @@ -179,19 +189,120 @@ public class TestTypeFns extends ClusterTest { // CSV files with headers use REQUIRED mode String sql = "SELECT modeOf(`name`) FROM cp.`store/text/data/cars.csvh`"; - String result = client.queryBuilder().sql(sql).singletonString(); + String result = queryBuilder().sql(sql).singletonString(); assertEquals("NOT NULL", result); // CSV files without headers use REPEATED mode sql = "SELECT modeOf(`columns`) FROM cp.`textinput/input2.csv`"; - result = client.queryBuilder().sql(sql).singletonString(); + result = queryBuilder().sql(sql).singletonString(); assertEquals("ARRAY", result); // JSON files use OPTIONAL mode sql = "SELECT modeOf(`name`) FROM cp.`jsoninput/specialchar.json`"; - result = client.queryBuilder().sql(sql).singletonString(); + result = queryBuilder().sql(sql).singletonString(); assertEquals("NULLABLE", result); } + + @Test + public void testTypeOfLiteral() throws Exception { + String sql = + "SELECT typeOf(1) c1," + + "typeOf('a') c2," + + "typeOf(date '2018-01-22') c3," + + "typeOf(time '01:00:20.123') c4," + + "typeOf(timestamp '2018-01-22 01:00:20.123') c5," + + "typeOf(false) c6," + + "typeOf(12.3) c7," + + "typeOf(1>2) c8," + + "typeOf(cast(null as int)) c9"; + + testBuilder() + .sqlQuery(sql) + .unOrdered() + .baselineColumns("c1", "c2", "c3", "c4", "c5", "c6", "c7", "c8", "c9") + .baselineValues("INT", "VARCHAR", "DATE", "TIME", "TIMESTAMP", "BIT", "VARDECIMAL", "BIT", "NULL") + .go(); + } + + @Test + public void testSqlTypeOfLiteral() throws Exception { + String sql = + "SELECT sqlTypeOf(1) c1," + + "sqlTypeOf('a') c2," + + "sqlTypeOf(date '2018-01-22') c3," + + "sqlTypeOf(time '01:00:20.123') c4," + + "sqlTypeOf(timestamp '2018-01-22 01:00:20.123') c5," + + "sqlTypeOf(false) c6," + + "sqlTypeOf(12.3) c7," + + "sqlTypeOf(1>2) c8," + + "sqlTypeOf(cast(null as int)) c9"; + + testBuilder() + .sqlQuery(sql) + .unOrdered() + .baselineColumns("c1", "c2", "c3", "c4", "c5", "c6", "c7", "c8", "c9") + .baselineValues("INTEGER", "CHARACTER VARYING", "DATE", "TIME", + "TIMESTAMP", "BOOLEAN", "DECIMAL(3, 1)", "BOOLEAN", "INTEGER") + .go(); + } + + @Test + public void testDrillTypeOfLiteral() throws Exception { + String sql = + "SELECT drillTypeOf(1) c1," + + "drillTypeOf('a') c2," + + "drillTypeOf(date '2018-01-22') c3," + + "drillTypeOf(time '01:00:20.123') c4," + + "drillTypeOf(timestamp '2018-01-22 01:00:20.123') c5," + + "drillTypeOf(false) c6," + + "drillTypeOf(12.3) c7," + + "drillTypeOf(1>2) c8," + + "drillTypeOf(cast(null as int)) c9"; + + testBuilder() + .sqlQuery(sql) + .unOrdered() + .baselineColumns("c1", "c2", "c3", "c4", "c5", "c6", "c7", "c8", "c9") + .baselineValues("INT", "VARCHAR", "DATE", "TIME", + "TIMESTAMP", "BIT", "VARDECIMAL", "BIT", "INT") + .go(); + } + + @Test + public void testModeOfLiteral() throws Exception { + String sql = + "SELECT modeOf(1) c1," + + "modeOf('a') c2," + + "modeOf(cast(null as int)) c3," + + "modeOf(case when true then null else 'a' end) c4," + + "modeOf(case when false then null else 'a' end) c5"; + + testBuilder() + .sqlQuery(sql) + .unOrdered() + .baselineColumns("c1", "c2", "c3", "c4", "c5") + .baselineValues("NOT NULL", "NOT NULL", "NULLABLE", "NULLABLE", "NULLABLE") + .go(); + } + + @Test + public void testCompareTypeLiteral() throws Exception { + String sql = + "SELECT compareType(1, 2) c1," + + "compareType('a', 1) c2," + + "compareType(1, 'a') c3," + + "compareType(a, '01:00:20.123') c4," + + "compareType(3, t.a) c5," + + "compareType(t.a, 3) c6\n" + + "from (values(1)) t(a)"; + + testBuilder() + .sqlQuery(sql) + .unOrdered() + .baselineColumns("c1", "c2", "c3", "c4", "c5", "c6") + .baselineValues(0, 1, -1, -1, 0, 0) + .go(); + } } |