/*
* 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.drill.exec.planner.logical;
import org.apache.drill.BaseTestQuery;
import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.junit.Test;
/**
* DRILL-4906
* Tests for handling nullable types in CASE function
*/
public class TestCaseNullableTypes extends BaseTestQuery {
@Test
public void testCaseNullableTypesInt() throws Exception {
testBuilder()
.sqlQuery("select (case when (false) then null else 1 end) res1 from (values(1))")
.unOrdered()
.baselineColumns("res1")
.baselineValues(1)
.go();
}
@Test
public void testCaseNullableTypesVarchar() throws Exception {
testBuilder()
.sqlQuery("select (res1 = 'qwe') res2 from (select (case when (false) then null else 'qwe' end) res1 from (values(1)))")
.unOrdered()
.baselineColumns("res2")
.baselineValues(true)
.go();
}
@Test
public void testCaseNullableTypesBigint() throws Exception {
testBuilder()
.sqlQuery("select (case when (false) then null else " + Long.MAX_VALUE + " end) res1 from (values(1))")
.unOrdered()
.baselineColumns("res1")
.baselineValues(Long.MAX_VALUE)
.go();
}
@Test
public void testCaseNullableTypesFloat() throws Exception {
testBuilder()
.sqlQuery("select (case when (false) then null else cast(0.1 as float) end) res1 from (values(1))")
.unOrdered()
.baselineColumns("res1")
.baselineValues(0.1F)
.go();
}
@Test
public void testCaseNullableTypesDouble() throws Exception {
testBuilder()
.sqlQuery("select (case when (false) then null else cast(0.1 as double) end) res1 from (values(1))")
.unOrdered()
.baselineColumns("res1")
.baselineValues(0.1)
.go();
}
@Test
public void testCaseNullableTypesBoolean() throws Exception {
testBuilder()
.sqlQuery("select (case when (false) then null else true end) res1 from (values(1))")
.unOrdered()
.baselineColumns("res1")
.baselineValues(true)
.go();
}
@Test
public void testCaseNullableTypesDate() throws Exception {
testBuilder()
.sqlQuery("select (res1 = 22/09/2016) res2 from (select (case when (false) then null else 22/09/2016 end) res1 from (values(1)))")
.unOrdered()
.baselineColumns("res2")
.baselineValues(true)
.go();
}
@Test
public void testCaseNullableTypesTimestamp() throws Exception {
testBuilder()
.sqlQuery("select (res1 = current_timestamp) res2 from (select (case when (false) then null else current_timestamp end) res1 from (values(1)))")
.unOrdered()
.baselineColumns("res2")
.baselineValues(true)
.go();
}
@Test
public void testNestedCaseNullableTypes() throws Exception {
testBuilder()
.sqlQuery("select (case when (false) then null else (case when (false) then null else cast(0.1 as float) end) end) res1 from (values(1))")
.unOrdered()
.baselineColumns("res1")
.baselineValues(0.1f)
.go();
}
@Test
public void testMultipleCasesNullableTypes() throws Exception {
testBuilder()
.sqlQuery("select (case when (false) then null else 1 end) res1, (case when (false) then null else cast(0.1 as float) end) res2 from (values(1))")
.unOrdered()
.baselineColumns("res1", "res2")
.baselineValues(1, 0.1f)
.go();
}
@Test //DRILL-5048
public void testCaseNullableTimestamp() throws Exception {
DateTime date = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss")
.parseDateTime("2016-11-17 14:43:23");
testBuilder()
.sqlQuery("SELECT (CASE WHEN (false) THEN null ELSE CAST('2016-11-17 14:43:23' AS TIMESTAMP) END) res FROM (values(1)) foo")
.unOrdered()
.baselineColumns("res")
.baselineValues(date)
.go();
}
}