aboutsummaryrefslogtreecommitdiff
path: root/exec/java-exec/src/test/java/org
diff options
context:
space:
mode:
authorVolodymyr Vysotskyi <vvovyk@gmail.com>2019-01-22 00:18:19 +0200
committerVolodymyr Vysotskyi <vvovyk@gmail.com>2019-01-25 17:23:46 +0200
commitc230ba55cceb6d48ac9c1ab0701a167d91842a11 (patch)
treeface3767754e9fba81484e8a12098f3b421963be /exec/java-exec/src/test/java/org
parent72cba88f058b072040c701a7e1dbbe4fc4eb8d48 (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.java133
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();
+ }
}