/**
* 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.physical.impl.filter;
import org.apache.drill.BaseTestQuery;
import org.junit.Test;
public class TestLargeInClause extends BaseTestQuery {
private static String getInIntList(int size){
StringBuffer sb = new StringBuffer();
for(int i =0; i < size; i++){
if(i != 0){
sb.append(", ");
}
sb.append(i);
}
return sb.toString();
}
private static String getInDateList(int size){
StringBuffer sb = new StringBuffer();
for(int i =0; i < size; i++){
if(i != 0){
sb.append(", ");
}
sb.append("DATE '1961-08-26'");
}
return sb.toString();
}
@Test
public void queryWith300InConditions() throws Exception {
test("select * from cp.`employee.json` where id in (" + getInIntList(300) + ")");
}
@Test
public void queryWith50000InConditions() throws Exception {
test("select * from cp.`employee.json` where id in (" + getInIntList(50000) + ")");
}
@Test
public void queryWith50000DateInConditions() throws Exception {
test("select * from cp.`employee.json` where cast(birth_date as date) in (" + getInDateList(500) + ")");
}
@Test // DRILL-3062
public void testStringLiterals() throws Exception {
String query = "select count(*) as cnt from (select n_name from cp.`tpch/nation.parquet` "
+ " where n_name in ('ALGERIA', 'ARGENTINA', 'BRAZIL', 'CANADA', 'EGYPT', 'ETHIOPIA', 'FRANCE', "
+ "'GERMANY', 'INDIA', 'INDONESIA', 'IRAN', 'IRAQ', 'JAPAN', 'JORDAN', 'KENYA', 'MOROCCO', 'MOZAMBIQUE', "
+ "'PERU', 'CHINA', 'ROMANIA', 'SAUDI ARABIA', 'VIETNAM'))";
testBuilder()
.sqlQuery(query)
.unOrdered()
.baselineColumns("cnt")
.baselineValues(22l)
.go();
}
@Test // DRILL-3019
public void testExprsInInList() throws Exception{
String query = "select r_regionkey \n" +
"from cp.`tpch/region.parquet` \n" +
"where r_regionkey in \n" +
"(1, 1 + 1, 1, 1, 1, \n" +
"1, 1 , 1, 1 , 1, \n" +
"1, 1 , 1, 1 , 1, \n" +
"1, 1 , 1, 1 , 1)";
testBuilder()
.sqlQuery(query)
.ordered()
.baselineColumns("r_regionkey")
.baselineValues(1)
.baselineValues(2)
.build()
.run();
}
}