blob: be2f1f4f7a9fa1f82128cfc6a1d8863996a4531b [file] [log] [blame]
/*
* 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;
import org.apache.drill.categories.UnlikelyTest;
import org.apache.drill.common.exceptions.UserException;
import org.apache.drill.exec.planner.physical.PlannerSettings;
import org.apache.drill.exec.work.ExecErrorConstants;
import org.apache.drill.exec.work.foreman.SqlUnsupportedException;
import org.apache.drill.exec.work.foreman.UnsupportedDataTypeException;
import org.apache.drill.exec.work.foreman.UnsupportedFunctionException;
import org.apache.drill.exec.work.foreman.UnsupportedRelOperatorException;
import org.apache.drill.test.BaseTestQuery;
import org.junit.Test;
import org.junit.experimental.categories.Category;
@Category(UnlikelyTest.class)
public class TestDisabledFunctionality extends BaseTestQuery {
@Test(expected = UserException.class) // see DRILL-2054
public void testBooleanORWhereClause() throws Exception {
test("select * from cp.`tpch/nation.parquet` where (true || true) ");
}
@Test(expected = UserException.class) // see DRILL-2054
public void testBooleanAND() throws Exception {
test("select true && true from cp.`tpch/nation.parquet` ");
}
private static void throwAsUnsupportedException(UserException ex) throws Exception {
SqlUnsupportedException.errorClassNameToException(ex.getOrCreatePBError(false).getException().getExceptionClass());
throw ex;
}
@Test(expected = UnsupportedRelOperatorException.class) // see DRILL-1921
public void testDisabledIntersect() throws Exception {
try {
test("(select n_name as name from cp.`tpch/nation.parquet`) INTERSECT (select r_name as name from cp.`tpch/region.parquet`)");
} catch(UserException ex) {
throwAsUnsupportedException(ex);
}
}
@Test(expected = UnsupportedRelOperatorException.class) // see DRILL-1921
public void testDisabledIntersectALL() throws Exception {
try {
test("(select n_name as name from cp.`tpch/nation.parquet`) INTERSECT ALL (select r_name as name from cp.`tpch/region.parquet`)");
} catch(UserException ex) {
throwAsUnsupportedException(ex);
}
}
@Test(expected = UnsupportedRelOperatorException.class) // see DRILL-1921
public void testDisabledExceptALL() throws Exception {
try {
test("(select n_name as name from cp.`tpch/nation.parquet`) EXCEPT ALL (select r_name as name from cp.`tpch/region.parquet`)");
} catch(UserException ex) {
throwAsUnsupportedException(ex);
}
}
@Test(expected = UnsupportedRelOperatorException.class) // see DRILL-1921
public void testDisabledExcept() throws Exception {
try {
test("(select n_name as name from cp.`tpch/nation.parquet`) EXCEPT (select r_name as name from cp.`tpch/region.parquet`)");
} catch(UserException ex) {
throwAsUnsupportedException(ex);
}
}
@Test(expected = UnsupportedRelOperatorException.class) // see DRILL-1921
public void testDisabledNaturalJoin() throws Exception {
try {
test("select * from cp.`tpch/nation.parquet` NATURAL JOIN cp.`tpch/region.parquet`");
} catch(UserException ex) {
throwAsUnsupportedException(ex);
}
}
@Test(expected = UnsupportedDataTypeException.class) // see DRILL-1959
public void testDisabledCastTINYINT() throws Exception {
try {
test("select cast(n_name as tinyint) from cp.`tpch/nation.parquet`;");
} catch(UserException ex) {
throwAsUnsupportedException(ex);
}
}
@Test(expected = UnsupportedDataTypeException.class) // see DRILL-1959
public void testDisabledCastSMALLINT() throws Exception {
try {
test("select cast(n_name as smallint) from cp.`tpch/nation.parquet`;");
} catch(UserException ex) {
throwAsUnsupportedException(ex);
}
}
@Test(expected = UnsupportedDataTypeException.class) // see DRILL-1959
public void testDisabledCastREAL() throws Exception {
try {
test("select cast(n_name as real) from cp.`tpch/nation.parquet`;");
} catch(UserException ex) {
throwAsUnsupportedException(ex);
}
}
@Test(expected = UnsupportedFunctionException.class) // see DRILL-2115
public void testDisabledCardinality() throws Exception {
try {
test("select cardinality(employee_id) from cp.`employee.json`;");
} catch(UserException ex) {
throwAsUnsupportedException(ex);
}
}
@Test(expected = UnsupportedRelOperatorException.class) // DRILL-2068
public void testImplicitCartesianJoin() throws Exception {
try {
test("select a.*, b.user_port " +
"from cp.`employee.json` a, sys.drillbits b;");
} catch(UserException ex) {
throwAsUnsupportedException(ex);
}
}
@Test(expected = UnsupportedRelOperatorException.class) // see DRILL-2068, DRILL-1325
public void testNonEqualJoin() throws Exception {
try {
test("select a.*, b.user_port " +
"from cp.`employee.json` a, sys.drillbits b " +
"where a.position_id <> b.user_port;");
} catch(UserException ex) {
throwAsUnsupportedException(ex);
}
}
@Test(expected = UnsupportedRelOperatorException.class) // see DRILL-2068, DRILL-1325
public void testMultipleJoinsWithOneNonEqualJoin() throws Exception {
try {
test("select a.last_name, b.n_name, c.r_name " +
"from cp.`employee.json` a, cp.`tpch/nation.parquet` b, cp.`tpch/region.parquet` c " +
"where a.position_id > b.n_nationKey and b.n_nationKey = c.r_regionkey;");
} catch(UserException ex) {
throwAsUnsupportedException(ex);
}
}
@Test(expected = UnsupportedRelOperatorException.class) // see DRILL-2068, DRILL-1325
public void testLeftOuterJoin() throws Exception {
try {
test("select a.lastname, b.n_name " +
"from cp.`employee.json` a LEFT JOIN cp.`tpch/nation.parquet` b " +
"ON a.position_id > b.n_nationKey;");
} catch(UserException ex) {
throwAsUnsupportedException(ex);
}
}
@Test(expected = UnsupportedRelOperatorException.class) // see DRILL-2068, DRILL-1325
public void testInnerJoin() throws Exception {
try {
test("select a.lastname, b.n_name " +
"from cp.`employee.json` a INNER JOIN cp.`tpch/nation.parquet` b " +
"ON a.position_id > b.n_nationKey;");
} catch(UserException ex) {
throwAsUnsupportedException(ex);
}
}
@Test(expected = UnsupportedRelOperatorException.class) // see DRILL-2068, DRILL-1325
public void testExplainPlanForCartesianJoin() throws Exception {
try {
test("explain plan for (select a.lastname, b.n_name " +
"from cp.`employee.json` a INNER JOIN cp.`tpch/nation.parquet` b " +
"ON a.position_id > b.n_nationKey);");
} catch(UserException ex) {
throwAsUnsupportedException(ex);
}
}
@Test(expected = UnsupportedRelOperatorException.class) // see DRILL-2441
public void testExplainPlanOuterJoinWithInequality() throws Exception {
try {
test("explain plan for (select a.lastname, b.n_name " +
"from cp.`employee.json` a LEFT OUTER JOIN cp.`tpch/nation.parquet` b " +
"ON (a.position_id > b.n_nationKey AND a.employee_id = b.n_regionkey));");
} catch(UserException ex) {
throwAsUnsupportedException(ex);
}
}
@Test(expected = UnsupportedRelOperatorException.class) // see DRILL-2441
public void testOuterJoinWithInequality() throws Exception {
try {
test("select a.lastname, b.n_name " +
"from cp.`employee.json` a RIGHT OUTER JOIN cp.`tpch/nation.parquet` b " +
"ON (a.position_id > b.n_nationKey AND a.employee_id = b.n_regionkey);");
} catch(UserException ex) {
throwAsUnsupportedException(ex);
}
}
@Test(expected = UnsupportedFunctionException.class) // see DRILL-2181
public void testFlattenWithinGroupBy() throws Exception {
try {
test("select flatten(j.topping) tt " +
"from cp.`store/text/sample.json` j group by flatten(j.topping)");
} catch(UserException ex) {
throwAsUnsupportedException(ex);
throw ex;
}
}
@Test(expected = UnsupportedFunctionException.class) // see DRILL-2181
public void testFlattenWithinOrderBy() throws Exception {
try {
test("select flatten(j.topping) tt " +
"from cp.`store/text/sample.json` j " +
"order by flatten(j.topping)");
} catch(UserException ex) {
throwAsUnsupportedException(ex);
throw ex;
}
}
@Test(expected = UnsupportedFunctionException.class) // see DRILL-2181
public void testFlattenWithinAggFunction() throws Exception {
try {
test("select count(flatten(j.topping)) tt " +
"from cp.`store/text/sample.json` j");
} catch(UserException ex) {
throwAsUnsupportedException(ex);
throw ex;
}
}
@Test(expected = UnsupportedFunctionException.class) // see DRILL-2181
public void testFlattenWithinDistinct() throws Exception {
try {
test("select Distinct (flatten(j.topping)) tt " +
"from cp.`store/text/sample.json` j");
} catch(UserException ex) {
throwAsUnsupportedException(ex);
throw ex;
}
}
@Test // DRILL-2848
public void testDisableDecimalCasts() throws Exception {
try {
alterSession(PlannerSettings.ENABLE_DECIMAL_DATA_TYPE_KEY, false);
final String query = "select cast('1.2' as decimal(9, 2)) from cp.`employee.json` limit 1";
errorMsgTestHelper(query, ExecErrorConstants.DECIMAL_DISABLE_ERR_MSG);
} finally {
resetSessionOption(PlannerSettings.ENABLE_DECIMAL_DATA_TYPE_KEY);
}
}
@Test // DRILL-2848
public void testDisableDecimalFromParquet() throws Exception {
try {
alterSession(PlannerSettings.ENABLE_DECIMAL_DATA_TYPE_KEY, false);
final String query = "select * from cp.`parquet/decimal_dictionary.parquet`";
errorMsgTestHelper(query, ExecErrorConstants.DECIMAL_DISABLE_ERR_MSG);
} finally {
resetSessionOption(PlannerSettings.ENABLE_DECIMAL_DATA_TYPE_KEY);
}
}
@Test (expected = UnsupportedFunctionException.class) //DRILL-3802
public void testDisableRollup() throws Exception{
try {
test("select n_regionkey, count(*) as cnt from cp.`tpch/nation.parquet` group by rollup(n_regionkey, n_name)");
} catch(UserException ex) {
throwAsUnsupportedException(ex);
throw ex;
}
}
@Test (expected = UnsupportedFunctionException.class) //DRILL-3802
public void testDisableCube() throws Exception{
try {
test("select n_regionkey, count(*) as cnt from cp.`tpch/nation.parquet` group by cube(n_regionkey, n_name)");
} catch(UserException ex) {
throwAsUnsupportedException(ex);
throw ex;
}
}
@Test (expected = UnsupportedFunctionException.class) //DRILL-3802
public void testDisableGroupingSets() throws Exception{
try {
test("select n_regionkey, count(*) as cnt from cp.`tpch/nation.parquet` group by grouping sets(n_regionkey, n_name)");
} catch(UserException ex) {
throwAsUnsupportedException(ex);
throw ex;
}
}
@Test (expected = UnsupportedFunctionException.class) //DRILL-3802
public void testDisableGrouping() throws Exception{
try {
test("select n_regionkey, count(*), GROUPING(n_regionkey) from cp.`tpch/nation.parquet` group by n_regionkey;");
} catch(UserException ex) {
throwAsUnsupportedException(ex);
throw ex;
}
}
@Test (expected = UnsupportedFunctionException.class) //DRILL-3802
public void testDisableGrouping_ID() throws Exception{
try {
test("select n_regionkey, count(*), GROUPING_ID(n_regionkey) from cp.`tpch/nation.parquet` group by n_regionkey;");
} catch(UserException ex) {
throwAsUnsupportedException(ex);
throw ex;
}
}
@Test (expected = UnsupportedFunctionException.class) //DRILL-3802
public void testDisableGroup_ID() throws Exception{
try {
test("select n_regionkey, count(*), GROUP_ID() from cp.`tpch/nation.parquet` group by n_regionkey;");
} catch(UserException ex) {
throwAsUnsupportedException(ex);
throw ex;
}
}
@Test (expected = UnsupportedFunctionException.class) //DRILL-3802
public void testDisableGroupingInFilter() throws Exception{
try {
test("select n_regionkey, count(*) from cp.`tpch/nation.parquet` group by n_regionkey HAVING GROUPING(n_regionkey) = 1");
} catch(UserException ex) {
throwAsUnsupportedException(ex);
throw ex;
}
}
}