/** * 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.junit.Test; public class TestMergeFilterPlan extends PlanTestBase { @Test public void testDRILL_FilterMerge() throws Exception { String viewDDL = "create or replace view MyViewWithFilter as " + " SELECT first_name, " + " last_name, " + " full_name, " + " salary, " + " employee_id, " + " store_id, " + " position_id, " + " position_title, " + " education_level " + " FROM cp.`employee.json` " + " WHERE position_id in (1, 2, 3 ) " ; String querySQL = " select dat.store_id\n" + " , sum(dat.store_cost) as total_cost\n" + " from (\n" + " select store_id, position_id\n" + " , sum( salary) as store_cost\n" + " from MyViewWithFilter \n" + " where full_name in ( select n_name\n" + " from cp.`tpch/nation.parquet`)\n" + " and education_level = 'GRADUATE DEGREE' " + " and position_id in ( select position_id \n" + " from MyViewWithFilter\n" + " where position_title like '%VP%'\n" + " )\n" + " group by store_id, position_id\n" + ") dat\n" + "group by dat.store_id\n" + "order by dat.store_id"; String expectedPattern1 = "Filter(condition=[AND(OR(=($0, 1), =($0, 2), =($0, 3)), =($4, 'GRADUATE DEGREE'))])"; String expectedPattern2 = "Filter(condition=[AND(OR(=($0, 1), =($0, 2), =($0, 3)), LIKE($1, '%VP%'))])"; String excludedPattern = "Filter(condition=[OR(=($0, 1), =($0, 2), =($0, 3))])"; test("use dfs_test.tmp"); test(viewDDL); testPlanSubstrPatterns(querySQL, new String[]{expectedPattern1, expectedPattern2}, new String[]{excludedPattern}); test("drop view MyViewWithFilter "); } }