You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by jc...@apache.org on 2020/07/21 21:41:14 UTC

[hive] branch master updated: HIVE-23888: Simplify special_character_in_tabnames_1.q (Krisztian Kasa, reviewed by Jesus Camacho Rodriguez)

This is an automated email from the ASF dual-hosted git repository.

jcamacho pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hive.git


The following commit(s) were added to refs/heads/master by this push:
     new ca568e6  HIVE-23888: Simplify special_character_in_tabnames_1.q (Krisztian Kasa, reviewed by Jesus Camacho Rodriguez)
ca568e6 is described below

commit ca568e6afad31a2937787169c5a7c7f1c01bd92d
Author: kasakrisz <kk...@cloudera.com>
AuthorDate: Tue Jul 21 23:40:51 2020 +0200

    HIVE-23888: Simplify special_character_in_tabnames_1.q (Krisztian Kasa, reviewed by Jesus Camacho Rodriguez)
    
    Closes apache/hive#1287
---
 .../ql/parse/TestSpecialCharacterInTableNames.java |   620 +
 .../TestSpecialCharacterInTableNamesQuotes.java    |   620 +
 .../special_character_in_tabnames_1.q              |   652 +-
 .../special_character_in_tabnames_quotes_1.q       |   580 +-
 .../llap/special_character_in_tabnames_1.q.out     | 22499 +++---------------
 .../special_character_in_tabnames_quotes_1.q.out   | 23013 ++++---------------
 6 files changed, 9388 insertions(+), 38596 deletions(-)

diff --git a/parser/src/test/org/apache/hadoop/hive/ql/parse/TestSpecialCharacterInTableNames.java b/parser/src/test/org/apache/hadoop/hive/ql/parse/TestSpecialCharacterInTableNames.java
new file mode 100644
index 0000000..68e0701
--- /dev/null
+++ b/parser/src/test/org/apache/hadoop/hive/ql/parse/TestSpecialCharacterInTableNames.java
@@ -0,0 +1,620 @@
+/*
+ * 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.hadoop.hive.ql.parse;
+
+import java.io.IOException;
+
+import org.apache.hadoop.conf.Configuration;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+/**
+ * Parser tests special character in table names.
+ */
+public class TestSpecialCharacterInTableNames {
+  private static Configuration conf;
+
+  private ParseDriver parseDriver;
+
+  @BeforeClass
+  public static void initialize() {
+    conf = new Configuration();
+  }
+
+  @Before
+  public void setup() throws SemanticException, IOException {
+    parseDriver = new ParseDriver();
+  }
+
+  private ASTNode parse(String query) throws ParseException {
+    return (ASTNode) parseDriver.parse(query, conf).getTree().getChild(0);
+  }
+
+  @Test
+  public void testCreateDatabase() throws ParseException {
+    parse("create database `db~!@#$%^&*(),<>`");
+    parse("use `db~!@#$%^&*(),<>`");
+  }
+
+  @Test
+  public void testCreateTable() throws ParseException {
+    parse("create table `c/b/o_t1`(key string, value string, c_int int, c_float float, c_boolean boolean)  partitioned by (dt string) row format delimited fields terminated by ',' STORED AS TEXTFILE");
+    parse("create table `//cbo_t2`(key string, value string, c_int int, c_float float, c_boolean boolean)  partitioned by (dt string) row format delimited fields terminated by ',' STORED AS TEXTFILE");
+    parse("create table `cbo_/t3////`(key string, value string, c_int int, c_float float, c_boolean boolean)  row format delimited fields terminated by ',' STORED AS TEXTFILE");
+
+    parse("CREATE TABLE `p/a/r/t`(\n" +
+        "    p_partkey INT,\n" +
+        "    p_name STRING,\n" +
+        "    p_mfgr STRING,\n" +
+        "    p_brand STRING,\n" +
+        "    p_type STRING,\n" +
+        "    p_size INT,\n" +
+        "    p_container STRING,\n" +
+        "    p_retailprice DOUBLE,\n" +
+        "    p_comment STRING\n" +
+        ")");
+
+    parse("CREATE TABLE `line/item` (L_ORDERKEY      INT,\n" +
+        "                                L_PARTKEY       INT,\n" +
+        "                                L_SUPPKEY       INT,\n" +
+        "                                L_LINENUMBER    INT,\n" +
+        "                                L_QUANTITY      DOUBLE,\n" +
+        "                                L_EXTENDEDPRICE DOUBLE,\n" +
+        "                                L_DISCOUNT      DOUBLE,\n" +
+        "                                L_TAX           DOUBLE,\n" +
+        "                                L_RETURNFLAG    STRING,\n" +
+        "                                L_LINESTATUS    STRING,\n" +
+        "                                l_shipdate      STRING,\n" +
+        "                                L_COMMITDATE    STRING,\n" +
+        "                                L_RECEIPTDATE   STRING,\n" +
+        "                                L_SHIPINSTRUCT  STRING,\n" +
+        "                                L_SHIPMODE      STRING,\n" +
+        "                                L_COMMENT       STRING)\n" +
+        "ROW FORMAT DELIMITED\n" +
+        "FIELDS TERMINATED BY '|'");
+
+    parse("create table `src/_/cbo` as select * from default.src");
+  }
+
+  @Test
+  public void testLoadData() throws ParseException {
+    parse("load data local inpath '../../data/files/cbo_t1.txt' into table `c/b/o_t1` partition (dt='2014')");
+    parse("load data local inpath '../../data/files/cbo_t2.txt' into table `//cbo_t2` partition (dt='2014')");
+    parse("load data local inpath '../../data/files/cbo_t3.txt' into table `cbo_/t3////`");
+    parse("LOAD DATA LOCAL INPATH '../../data/files/part_tiny.txt' overwrite into table `p/a/r/t`");
+    parse("LOAD DATA LOCAL INPATH '../../data/files/lineitem.txt' OVERWRITE INTO TABLE `line/item`");
+  }
+
+  @Test
+  public void testAnalyzeTable() throws ParseException {
+    parse("analyze table `c/b/o_t1` partition (dt) compute statistics");
+    parse("analyze table `c/b/o_t1` compute statistics for columns key, value, c_int, c_float, c_boolean");
+    parse("analyze table `//cbo_t2` partition (dt) compute statistics");
+    parse("analyze table `//cbo_t2` compute statistics for columns key, value, c_int, c_float, c_boolean");
+    parse("analyze table `cbo_/t3////` compute statistics");
+    parse("analyze table `cbo_/t3////` compute statistics for columns key, value, c_int, c_float, c_boolean");
+    parse("analyze table `src/_/cbo` compute statistics");
+    parse("analyze table `src/_/cbo` compute statistics for columns");
+    parse("analyze table `p/a/r/t` compute statistics");
+    parse("analyze table `p/a/r/t` compute statistics for columns");
+    parse("analyze table `line/item` compute statistics");
+    parse("analyze table `line/item` compute statistics for columns");
+  }
+
+  @Test
+  public void testSelect() throws ParseException {
+    parse("select key, (c_int+1)+2 as x, sum(c_int) from `c/b/o_t1` group by c_float, `c/b/o_t1`.c_int, key");
+    parse("select x, y, count(*) from (select key, (c_int+c_float+1+2) as x, sum(c_int) as y from `c/b/o_t1` group by c_float, `c/b/o_t1`.c_int, key) R group by y, x");
+    parse("select `cbo_/t3////`.c_int, c, count(*) from (select key as a, c_int+1 as b, sum(c_int) as c from `c/b/o_t1` where (`c/b/o_t1`.c_int + 1 >= 0) and (`c/b/o_t1`.c_int > 0 or `c/b/o_t1`.c_float >= 0) group by c_float, `c/b/o_t1`.c_int, key order by a) `c/b/o_t1` join (select key as p, c_int+1 as q, sum(c_int) as r from `//cbo_t2` where (`//cbo_t2`.c_int + 1 >= 0) and (`//cbo_t2`.c_int > 0 or `//cbo_t2`.c_float >= 0)  group by c_float, `//cbo_t2`.c_int, key order by q/10 desc, r a [...]
+    parse("select `cbo_/t3////`.c_int, c, count(*) from (select key as a, c_int+1 as b, sum(c_int) as c from `c/b/o_t1` where (`c/b/o_t1`.c_int + 1 >= 0) and (`c/b/o_t1`.c_int > 0 or `c/b/o_t1`.c_float >= 0)  group by c_float, `c/b/o_t1`.c_int, key having `c/b/o_t1`.c_float > 0 and (c_int >=1 or c_float >= 1) and (c_int + c_float) >= 0 order by b % c asc, b desc) `c/b/o_t1` left outer join (select key as p, c_int+1 as q, sum(c_int) as r from `//cbo_t2` where (`//cbo_t2`.c_int + 1 >= 0) a [...]
+    parse("select `cbo_/t3////`.c_int, c, count(*) from (select key as a, c_int+1 as b, sum(c_int) as c from `c/b/o_t1` where (`c/b/o_t1`.c_int + 1 >= 0) and (`c/b/o_t1`.c_int > 0 or `c/b/o_t1`.c_float >= 0)  group by c_float, `c/b/o_t1`.c_int, key having `c/b/o_t1`.c_float > 0 and (c_int >=1 or c_float >= 1) and (c_int + c_float) >= 0 order by b+c, a desc) `c/b/o_t1` right outer join (select key as p, c_int+1 as q, sum(c_int) as r from `//cbo_t2` where (`//cbo_t2`.c_int + 1 >= 0) and (` [...]
+    parse("select `cbo_/t3////`.c_int, c, count(*) from (select key as a, c_int+1 as b, sum(c_int) as c from `c/b/o_t1` where (`c/b/o_t1`.c_int + 1 >= 0) and (`c/b/o_t1`.c_int > 0 or `c/b/o_t1`.c_float >= 0)  group by c_float, `c/b/o_t1`.c_int, key having `c/b/o_t1`.c_float > 0 and (c_int >=1 or c_float >= 1) and (c_int + c_float) >= 0 order by c+a desc) `c/b/o_t1` full outer join (select key as p, c_int+1 as q, sum(c_int) as r from `//cbo_t2` where (`//cbo_t2`.c_int + 1 >= 0) and (`//cb [...]
+    parse("select `cbo_/t3////`.c_int, c, count(*) from (select key as a, c_int+1 as b, sum(c_int) as c from `c/b/o_t1` where (`c/b/o_t1`.c_int + 1 >= 0) and (`c/b/o_t1`.c_int > 0 or `c/b/o_t1`.c_float >= 0)  group by c_float, `c/b/o_t1`.c_int, key having `c/b/o_t1`.c_float > 0 and (c_int >=1 or c_float >= 1) and (c_int + c_float) >= 0) `c/b/o_t1` join (select key as p, c_int+1 as q, sum(c_int) as r from `//cbo_t2` where (`//cbo_t2`.c_int + 1 >= 0) and (`//cbo_t2`.c_int > 0 or `//cbo_t2` [...]
+  }
+
+  @Test
+  public void testTestGroupByIsEmptyAndThereIsNoOtherColsInAggr() throws ParseException {
+    parse("select unionsrc.key FROM (select 'tst1' as key, count(1) as value from default.src) unionsrc");
+    parse("select unionsrc.key, unionsrc.value FROM (select 'tst1' as key, count(1) as value from default.src) unionsrc");
+
+    parse("select unionsrc.key FROM (select 'max' as key, max(c_int) as value from `cbo_/t3////` s1\n" +
+        "\n" +
+        "UNION  ALL\n" +
+        "\n" +
+        "    select 'min' as key,  min(c_int) as value from `cbo_/t3////` s2\n" +
+        "\n" +
+        "    UNION ALL\n" +
+        "\n" +
+        "        select 'avg' as key,  avg(c_int) as value from `cbo_/t3////` s3) unionsrc order by unionsrc.key");
+
+    parse("select unionsrc.key, unionsrc.value FROM (select 'max' as key, max(c_int) as value from `cbo_/t3////` s1\n" +
+        "\n" +
+        "UNION  ALL\n" +
+        "\n" +
+        "    select 'min' as key,  min(c_int) as value from `cbo_/t3////` s2\n" +
+        "\n" +
+        "    UNION ALL\n" +
+        "\n" +
+        "        select 'avg' as key,  avg(c_int) as value from `cbo_/t3////` s3) unionsrc order by unionsrc.key");
+
+    parse("select unionsrc.key, count(1) FROM (select 'max' as key, max(c_int) as value from `cbo_/t3////` s1\n" +
+        "\n" +
+        "    UNION  ALL\n" +
+        "\n" +
+        "        select 'min' as key,  min(c_int) as value from `cbo_/t3////` s2\n" +
+        "\n" +
+        "    UNION ALL\n" +
+        "\n" +
+        "        select 'avg' as key,  avg(c_int) as value from `cbo_/t3////` s3) unionsrc group by unionsrc.key order by unionsrc.key");
+  }
+
+  @Test
+  public void testSelectJoinTS() throws ParseException {
+    parse("select `c/b/o_t1`.c_int, `//cbo_t2`.c_int from `c/b/o_t1` join             `//cbo_t2` on `c/b/o_t1`.key=`//cbo_t2`.key");
+    parse("select `c/b/o_t1`.key from `c/b/o_t1` join `cbo_/t3////`");
+    parse("select `c/b/o_t1`.key from `c/b/o_t1` join `cbo_/t3////` where `c/b/o_t1`.key=`cbo_/t3////`.key and `c/b/o_t1`.key >= 1");
+    parse("select `c/b/o_t1`.c_int, `//cbo_t2`.c_int from `c/b/o_t1` left outer join  `//cbo_t2` on `c/b/o_t1`.key=`//cbo_t2`.key");
+    parse("select `c/b/o_t1`.c_int, `//cbo_t2`.c_int from `c/b/o_t1` right outer join `//cbo_t2` on `c/b/o_t1`.key=`//cbo_t2`.key");
+    parse("select `c/b/o_t1`.c_int, `//cbo_t2`.c_int from `c/b/o_t1` full outer join  `//cbo_t2` on `c/b/o_t1`.key=`//cbo_t2`.key");
+    parse("select b, `c/b/o_t1`.c, `//cbo_t2`.p, q, `cbo_/t3////`.c_int from (select key as a, c_int as b, `c/b/o_t1`.c_float as c from `c/b/o_t1`) `c/b/o_t1` join (select `//cbo_t2`.key as p, `//cbo_t2`.c_int as q, c_float as r from `//cbo_t2`) `//cbo_t2` on `c/b/o_t1`.a=p join `cbo_/t3////` on `c/b/o_t1`.a=key");
+    parse("select key, `c/b/o_t1`.c_int, `//cbo_t2`.p, q from `c/b/o_t1` join (select `//cbo_t2`.key as p, `//cbo_t2`.c_int as q, c_float as r from `//cbo_t2`) `//cbo_t2` on `c/b/o_t1`.key=p join (select key as a, c_int as b, `cbo_/t3////`.c_float as c from `cbo_/t3////`)`cbo_/t3////` on `c/b/o_t1`.key=a");
+    parse("select a, `c/b/o_t1`.b, key, `//cbo_t2`.c_int, `cbo_/t3////`.p from (select key as a, c_int as b, `c/b/o_t1`.c_float as c from `c/b/o_t1`) `c/b/o_t1` join `//cbo_t2`  on `c/b/o_t1`.a=key join (select key as p, c_int as q, `cbo_/t3////`.c_float as r from `cbo_/t3////`)`cbo_/t3////` on `c/b/o_t1`.a=`cbo_/t3////`.p");
+    parse("select b, `c/b/o_t1`.c, `//cbo_t2`.c_int, `cbo_/t3////`.c_int from (select key as a, c_int as b, `c/b/o_t1`.c_float as c from `c/b/o_t1`) `c/b/o_t1` join `//cbo_t2` on `c/b/o_t1`.a=`//cbo_t2`.key join `cbo_/t3////` on `c/b/o_t1`.a=`cbo_/t3////`.key");
+    parse("select `cbo_/t3////`.c_int, b, `//cbo_t2`.c_int, `c/b/o_t1`.c from (select key as a, c_int as b, `c/b/o_t1`.c_float as c from `c/b/o_t1`) `c/b/o_t1` join `//cbo_t2` on `c/b/o_t1`.a=`//cbo_t2`.key join `cbo_/t3////` on `c/b/o_t1`.a=`cbo_/t3////`.key");
+    parse("select b, `c/b/o_t1`.c, `//cbo_t2`.p, q, `cbo_/t3////`.c_int from (select key as a, c_int as b, `c/b/o_t1`.c_float as c from `c/b/o_t1`) `c/b/o_t1` left outer join (select `//cbo_t2`.key as p, `//cbo_t2`.c_int as q, c_float as r from `//cbo_t2`) `//cbo_t2` on `c/b/o_t1`.a=p join `cbo_/t3////` on `c/b/o_t1`.a=key");
+    parse("select key, `c/b/o_t1`.c_int, `//cbo_t2`.p, q from `c/b/o_t1` join (select `//cbo_t2`.key as p, `//cbo_t2`.c_int as q, c_float as r from `//cbo_t2`) `//cbo_t2` on `c/b/o_t1`.key=p left outer join (select key as a, c_int as b, `cbo_/t3////`.c_float as c from `cbo_/t3////`)`cbo_/t3////` on `c/b/o_t1`.key=a");
+    parse("select b, `c/b/o_t1`.c, `//cbo_t2`.p, q, `cbo_/t3////`.c_int from (select key as a, c_int as b, `c/b/o_t1`.c_float as c from `c/b/o_t1`) `c/b/o_t1` right outer join (select `//cbo_t2`.key as p, `//cbo_t2`.c_int as q, c_float as r from `//cbo_t2`) `//cbo_t2` on `c/b/o_t1`.a=p join `cbo_/t3////` on `c/b/o_t1`.a=key");
+    parse("select key, `c/b/o_t1`.c_int, `//cbo_t2`.p, q from `c/b/o_t1` join (select `//cbo_t2`.key as p, `//cbo_t2`.c_int as q, c_float as r from `//cbo_t2`) `//cbo_t2` on `c/b/o_t1`.key=p right outer join (select key as a, c_int as b, `cbo_/t3////`.c_float as c from `cbo_/t3////`)`cbo_/t3////` on `c/b/o_t1`.key=a");
+    parse("select b, `c/b/o_t1`.c, `//cbo_t2`.p, q, `cbo_/t3////`.c_int from (select key as a, c_int as b, `c/b/o_t1`.c_float as c from `c/b/o_t1`) `c/b/o_t1` full outer join (select `//cbo_t2`.key as p, `//cbo_t2`.c_int as q, c_float as r from `//cbo_t2`) `//cbo_t2` on `c/b/o_t1`.a=p join `cbo_/t3////` on `c/b/o_t1`.a=key");
+    parse("select key, `c/b/o_t1`.c_int, `//cbo_t2`.p, q from `c/b/o_t1` join (select `//cbo_t2`.key as p, `//cbo_t2`.c_int as q, c_float as r from `//cbo_t2`) `//cbo_t2` on `c/b/o_t1`.key=p full outer join (select key as a, c_int as b, `cbo_/t3////`.c_float as c from `cbo_/t3////`)`cbo_/t3////` on `c/b/o_t1`.key=a");
+  }
+
+  @Test
+  public void testSelectJoinFILTS() throws ParseException {
+    parse("select `c/b/o_t1`.c_int, `//cbo_t2`.c_int from `c/b/o_t1` join `//cbo_t2` on `c/b/o_t1`.key=`//cbo_t2`.key where (`c/b/o_t1`.c_int + `//cbo_t2`.c_int == 2) and (`c/b/o_t1`.c_int > 0 or `//cbo_t2`.c_float >= 0)");
+    parse("select `c/b/o_t1`.c_int, `//cbo_t2`.c_int from `c/b/o_t1` left outer join  `//cbo_t2` on `c/b/o_t1`.key=`//cbo_t2`.key where (`c/b/o_t1`.c_int + `//cbo_t2`.c_int == 2) and (`c/b/o_t1`.c_int > 0 or `//cbo_t2`.c_float >= 0)");
+    parse("select `c/b/o_t1`.c_int, `//cbo_t2`.c_int from `c/b/o_t1` right outer join `//cbo_t2` on `c/b/o_t1`.key=`//cbo_t2`.key where (`c/b/o_t1`.c_int + `//cbo_t2`.c_int == 2) and (`c/b/o_t1`.c_int > 0 or `//cbo_t2`.c_float >= 0)");
+    parse("select `c/b/o_t1`.c_int, `//cbo_t2`.c_int from `c/b/o_t1` full outer join  `//cbo_t2` on `c/b/o_t1`.key=`//cbo_t2`.key where (`c/b/o_t1`.c_int + `//cbo_t2`.c_int == 2) and (`c/b/o_t1`.c_int > 0 or `//cbo_t2`.c_float >= 0)");
+    parse("select b, `c/b/o_t1`.c, `//cbo_t2`.p, q, `cbo_/t3////`.c_int from (select key as a, c_int as b, `c/b/o_t1`.c_float as c from `c/b/o_t1`  where (`c/b/o_t1`.c_int + 1 == 2) and (`c/b/o_t1`.c_int > 0 or `c/b/o_t1`.c_float >= 0)) `c/b/o_t1` join (select `//cbo_t2`.key as p, `//cbo_t2`.c_int as q, c_float as r from `//cbo_t2`  where (`//cbo_t2`.c_int + 1 == 2) and (`//cbo_t2`.c_int > 0 or `//cbo_t2`.c_float >= 0)) `//cbo_t2` on `c/b/o_t1`.a=p join `cbo_/t3////` on `c/b/o_t1`.a=key  [...]
+    parse("select q, b, `//cbo_t2`.p, `c/b/o_t1`.c, `cbo_/t3////`.c_int from (select key as a, c_int as b, `c/b/o_t1`.c_float as c from `c/b/o_t1`  where (`c/b/o_t1`.c_int + 1 == 2) and (`c/b/o_t1`.c_int > 0 or `c/b/o_t1`.c_float >= 0)) `c/b/o_t1` left outer join (select `//cbo_t2`.key as p, `//cbo_t2`.c_int as q, c_float as r from `//cbo_t2`  where (`//cbo_t2`.c_int + 1 == 2) and (`//cbo_t2`.c_int > 0 or `//cbo_t2`.c_float >= 0)) `//cbo_t2` on `c/b/o_t1`.a=p join `cbo_/t3////` on `c/b/o [...]
+    parse("select q, b, `//cbo_t2`.p, `c/b/o_t1`.c, `cbo_/t3////`.c_int from (select key as a, c_int as b, `c/b/o_t1`.c_float as c from `c/b/o_t1`  where (`c/b/o_t1`.c_int + 1 == 2) and (`c/b/o_t1`.c_int > 0 or `c/b/o_t1`.c_float >= 0)) `c/b/o_t1` right outer join (select `//cbo_t2`.key as p, `//cbo_t2`.c_int as q, c_float as r from `//cbo_t2`  where (`//cbo_t2`.c_int + 1 == 2) and (`//cbo_t2`.c_int > 0 or `//cbo_t2`.c_float >= 0)) `//cbo_t2` on `c/b/o_t1`.a=p join `cbo_/t3////` on `c/b/ [...]
+    parse("select q, b, `//cbo_t2`.p, `c/b/o_t1`.c, `cbo_/t3////`.c_int from (select key as a, c_int as b, `c/b/o_t1`.c_float as c from `c/b/o_t1`  where (`c/b/o_t1`.c_int + 1 == 2) and (`c/b/o_t1`.c_int > 0 or `c/b/o_t1`.c_float >= 0)) `c/b/o_t1` full outer join (select `//cbo_t2`.key as p, `//cbo_t2`.c_int as q, c_float as r from `//cbo_t2`  where (`//cbo_t2`.c_int + 1 == 2) and (`//cbo_t2`.c_int > 0 or `//cbo_t2`.c_float >= 0)) `//cbo_t2` on `c/b/o_t1`.a=p join `cbo_/t3////` on `c/b/o [...]
+    parse("select * from (select q, b, `//cbo_t2`.p, `c/b/o_t1`.c, `cbo_/t3////`.c_int from (select key as a, c_int as b, `c/b/o_t1`.c_float as c from `c/b/o_t1`  where (`c/b/o_t1`.c_int + 1 == 2) and (`c/b/o_t1`.c_int > 0 or `c/b/o_t1`.c_float >= 0)) `c/b/o_t1` full outer join (select `//cbo_t2`.key as p, `//cbo_t2`.c_int as q, c_float as r from `//cbo_t2`  where (`//cbo_t2`.c_int + 1 == 2) and (`//cbo_t2`.c_int > 0 or `//cbo_t2`.c_float >= 0)) `//cbo_t2` on `c/b/o_t1`.a=p join `cbo_/t3 [...]
+    parse("select * from (select q, b, `//cbo_t2`.p, `c/b/o_t1`.c, `cbo_/t3////`.c_int from (select key as a, c_int as b, `c/b/o_t1`.c_float as c from `c/b/o_t1`  where (`c/b/o_t1`.c_int + 1 == 2) and (`c/b/o_t1`.c_int > 0 or `c/b/o_t1`.c_float >= 0)) `c/b/o_t1` left outer join (select `//cbo_t2`.key as p, `//cbo_t2`.c_int as q, c_float as r from `//cbo_t2`  where (`//cbo_t2`.c_int + 1 == 2) and (`//cbo_t2`.c_int > 0 or `//cbo_t2`.c_float >= 0)) `//cbo_t2` on `c/b/o_t1`.a=p left outer jo [...]
+    parse("select * from (select q, b, `//cbo_t2`.p, `c/b/o_t1`.c, `cbo_/t3////`.c_int from (select key as a, c_int as b, `c/b/o_t1`.c_float as c from `c/b/o_t1`  where (`c/b/o_t1`.c_int + 1 == 2) and (`c/b/o_t1`.c_int > 0 or `c/b/o_t1`.c_float >= 0)) `c/b/o_t1` left outer join (select `//cbo_t2`.key as p, `//cbo_t2`.c_int as q, c_float as r from `//cbo_t2`  where (`//cbo_t2`.c_int + 1 == 2) and (`//cbo_t2`.c_int > 0 or `//cbo_t2`.c_float >= 0)) `//cbo_t2` on `c/b/o_t1`.a=p right outer j [...]
+    parse("select * from (select q, b, `//cbo_t2`.p, `c/b/o_t1`.c, `cbo_/t3////`.c_int from (select key as a, c_int as b, `c/b/o_t1`.c_float as c from `c/b/o_t1`  where (`c/b/o_t1`.c_int + 1 == 2) and (`c/b/o_t1`.c_int > 0 or `c/b/o_t1`.c_float >= 0)) `c/b/o_t1` left outer join (select `//cbo_t2`.key as p, `//cbo_t2`.c_int as q, c_float as r from `//cbo_t2`  where (`//cbo_t2`.c_int + 1 == 2) and (`//cbo_t2`.c_int > 0 or `//cbo_t2`.c_float >= 0)) `//cbo_t2` on `c/b/o_t1`.a=p full outer jo [...]
+    parse("select * from (select q, b, `//cbo_t2`.p, `c/b/o_t1`.c, `cbo_/t3////`.c_int from (select key as a, c_int as b, `c/b/o_t1`.c_float as c from `c/b/o_t1`  where (`c/b/o_t1`.c_int + 1 == 2) and (`c/b/o_t1`.c_int > 0 or `c/b/o_t1`.c_float >= 0)) `c/b/o_t1` right outer join (select `//cbo_t2`.key as p, `//cbo_t2`.c_int as q, c_float as r from `//cbo_t2`  where (`//cbo_t2`.c_int + 1 == 2) and (`//cbo_t2`.c_int > 0 or `//cbo_t2`.c_float >= 0)) `//cbo_t2` on `c/b/o_t1`.a=p right outer  [...]
+    parse("select * from (select q, b, `//cbo_t2`.p, `c/b/o_t1`.c, `cbo_/t3////`.c_int from (select key as a, c_int as b, `c/b/o_t1`.c_float as c from `c/b/o_t1`  where (`c/b/o_t1`.c_int + 1 == 2) and (`c/b/o_t1`.c_int > 0 or `c/b/o_t1`.c_float >= 0)) `c/b/o_t1` right outer join (select `//cbo_t2`.key as p, `//cbo_t2`.c_int as q, c_float as r from `//cbo_t2`  where (`//cbo_t2`.c_int + 1 == 2) and (`//cbo_t2`.c_int > 0 or `//cbo_t2`.c_float >= 0)) `//cbo_t2` on `c/b/o_t1`.a=p left outer j [...]
+    parse("select * from (select q, b, `//cbo_t2`.p, `c/b/o_t1`.c, `cbo_/t3////`.c_int from (select key as a, c_int as b, `c/b/o_t1`.c_float as c from `c/b/o_t1`  where (`c/b/o_t1`.c_int + 1 == 2) and (`c/b/o_t1`.c_int > 0 or `c/b/o_t1`.c_float >= 0)) `c/b/o_t1` right outer join (select `//cbo_t2`.key as p, `//cbo_t2`.c_int as q, c_float as r from `//cbo_t2`  where (`//cbo_t2`.c_int + 1 == 2) and (`//cbo_t2`.c_int > 0 or `//cbo_t2`.c_float >= 0)) `//cbo_t2` on `c/b/o_t1`.a=p full outer j [...]
+    parse("select * from (select q, b, `//cbo_t2`.p, `c/b/o_t1`.c, `cbo_/t3////`.c_int from (select key as a, c_int as b, `c/b/o_t1`.c_float as c from `c/b/o_t1`  where (`c/b/o_t1`.c_int + 1 == 2) and (`c/b/o_t1`.c_int > 0 or `c/b/o_t1`.c_float >= 0)) `c/b/o_t1` full outer join (select `//cbo_t2`.key as p, `//cbo_t2`.c_int as q, c_float as r from `//cbo_t2`  where (`//cbo_t2`.c_int + 1 == 2) and (`//cbo_t2`.c_int > 0 or `//cbo_t2`.c_float >= 0)) `//cbo_t2` on `c/b/o_t1`.a=p full outer jo [...]
+    parse("select * from (select q, b, `//cbo_t2`.p, `c/b/o_t1`.c, `cbo_/t3////`.c_int from (select key as a, c_int as b, `c/b/o_t1`.c_float as c from `c/b/o_t1`  where (`c/b/o_t1`.c_int + 1 == 2) and (`c/b/o_t1`.c_int > 0 or `c/b/o_t1`.c_float >= 0)) `c/b/o_t1` full outer join (select `//cbo_t2`.key as p, `//cbo_t2`.c_int as q, c_float as r from `//cbo_t2`  where (`//cbo_t2`.c_int + 1 == 2) and (`//cbo_t2`.c_int > 0 or `//cbo_t2`.c_float >= 0)) `//cbo_t2` on `c/b/o_t1`.a=p left outer jo [...]
+    parse("select * from (select q, b, `//cbo_t2`.p, `c/b/o_t1`.c, `cbo_/t3////`.c_int from (select key as a, c_int as b, `c/b/o_t1`.c_float as c from `c/b/o_t1`  where (`c/b/o_t1`.c_int + 1 == 2) and (`c/b/o_t1`.c_int > 0 or `c/b/o_t1`.c_float >= 0)) `c/b/o_t1` full outer join (select `//cbo_t2`.key as p, `//cbo_t2`.c_int as q, c_float as r from `//cbo_t2`  where (`//cbo_t2`.c_int + 1 == 2) and (`//cbo_t2`.c_int > 0 or `//cbo_t2`.c_float >= 0)) `//cbo_t2` on `c/b/o_t1`.a=p right outer j [...]
+  }
+
+  @Test
+  public void testSelectTSJoinFilGBGBHavingLimit() throws ParseException {
+    parse("select key, (c_int+1)+2 as x, sum(c_int) from `c/b/o_t1` group by c_float, `c/b/o_t1`.c_int, key order by x limit 1");
+    parse("select x, y, count(*) from (select key, (c_int+c_float+1+2) as x, sum(c_int) as y from `c/b/o_t1` group by c_float, `c/b/o_t1`.c_int, key) R group by y, x order by x,y limit 1");
+    parse("select key from(select key from (select key from `c/b/o_t1` limit 5)`//cbo_t2`  limit 5)`cbo_/t3////`  limit 5");
+    parse("select key, c_int from(select key, c_int from (select key, c_int from `c/b/o_t1` order by c_int limit 5)`c/b/o_t1`  order by c_int limit 5)`//cbo_t2`  order by c_int limit 5");
+    parse("select `cbo_/t3////`.c_int, c, count(*) from (select key as a, c_int+1 as b, sum(c_int) as c from `c/b/o_t1` where (`c/b/o_t1`.c_int + 1 >= 0) and (`c/b/o_t1`.c_int > 0 or `c/b/o_t1`.c_float >= 0) group by c_float, `c/b/o_t1`.c_int, key order by a limit 5) `c/b/o_t1` join (select key as p, c_int+1 as q, sum(c_int) as r from `//cbo_t2` where (`//cbo_t2`.c_int + 1 >= 0) and (`//cbo_t2`.c_int > 0 or `//cbo_t2`.c_float >= 0)  group by c_float, `//cbo_t2`.c_int, key order by q/10 d [...]
+    parse("select `cbo_/t3////`.c_int, c, count(*) from (select key as a, c_int+1 as b, sum(c_int) as c from `c/b/o_t1` where (`c/b/o_t1`.c_int + 1 >= 0) and (`c/b/o_t1`.c_int > 0 or `c/b/o_t1`.c_float >= 0)  group by c_float, `c/b/o_t1`.c_int, key having `c/b/o_t1`.c_float > 0 and (c_int >=1 or c_float >= 1) and (c_int + c_float) >= 0 order by b % c asc, b desc limit 5) `c/b/o_t1` left outer join (select key as p, c_int+1 as q, sum(c_int) as r from `//cbo_t2` where (`//cbo_t2`.c_int + 1 [...]
+  }
+
+  @Test
+  public void testSemiJoin() throws ParseException {
+    parse("select `c/b/o_t1`.c_int           from `c/b/o_t1` left semi join   `//cbo_t2` on `c/b/o_t1`.key=`//cbo_t2`.key");
+    parse("select `c/b/o_t1`.c_int           from `c/b/o_t1` left semi join   `//cbo_t2` on `c/b/o_t1`.key=`//cbo_t2`.key where (`c/b/o_t1`.c_int + 1 == 2) and (`c/b/o_t1`.c_int > 0 or `c/b/o_t1`.c_float >= 0)");
+    parse("select * from (select c, b, a from (select key as a, c_int as b, `c/b/o_t1`.c_float as c from `c/b/o_t1`  where (`c/b/o_t1`.c_int + 1 == 2) and (`c/b/o_t1`.c_int > 0 or `c/b/o_t1`.c_float >= 0)) `c/b/o_t1` left semi join (select `//cbo_t2`.key as p, `//cbo_t2`.c_int as q, c_float as r from `//cbo_t2`  where (`//cbo_t2`.c_int + 1 == 2) and (`//cbo_t2`.c_int > 0 or `//cbo_t2`.c_float >= 0)) `//cbo_t2` on `c/b/o_t1`.a=p left semi join `cbo_/t3////` on `c/b/o_t1`.a=key where (b +  [...]
+    parse("select * from (select `cbo_/t3////`.c_int, `c/b/o_t1`.c, b from (select key as a, c_int as b, `c/b/o_t1`.c_float as c from `c/b/o_t1`  where (`c/b/o_t1`.c_int + 1 = 2) and (`c/b/o_t1`.c_int > 0 or `c/b/o_t1`.c_float >= 0)) `c/b/o_t1` left semi join (select `//cbo_t2`.key as p, `//cbo_t2`.c_int as q, c_float as r from `//cbo_t2`  where (`//cbo_t2`.c_int + 1 == 2) and (`//cbo_t2`.c_int > 0 or `//cbo_t2`.c_float >= 0)) `//cbo_t2` on `c/b/o_t1`.a=p left outer join `cbo_/t3////` on [...]
+    parse("select * from (select c_int, b, `c/b/o_t1`.c from (select key as a, c_int as b, `c/b/o_t1`.c_float as c from `c/b/o_t1`  where (`c/b/o_t1`.c_int + 1 == 2) and (`c/b/o_t1`.c_int > 0 or `c/b/o_t1`.c_float >= 0)) `c/b/o_t1` left semi join (select `//cbo_t2`.key as p, `//cbo_t2`.c_int as q, c_float as r from `//cbo_t2`  where (`//cbo_t2`.c_int + 1 == 2) and (`//cbo_t2`.c_int > 0 or `//cbo_t2`.c_float >= 0)) `//cbo_t2` on `c/b/o_t1`.a=p right outer join `cbo_/t3////` on `c/b/o_t1`. [...]
+    parse("select * from (select c_int, b, `c/b/o_t1`.c from (select key as a, c_int as b, `c/b/o_t1`.c_float as c from `c/b/o_t1`  where (`c/b/o_t1`.c_int + 1 == 2) and (`c/b/o_t1`.c_int > 0 or `c/b/o_t1`.c_float >= 0)) `c/b/o_t1` left semi join (select `//cbo_t2`.key as p, `//cbo_t2`.c_int as q, c_float as r from `//cbo_t2`  where (`//cbo_t2`.c_int + 1 == 2) and (`//cbo_t2`.c_int > 0 or `//cbo_t2`.c_float >= 0)) `//cbo_t2` on `c/b/o_t1`.a=p full outer join `cbo_/t3////` on `c/b/o_t1`.a [...]
+    parse("select a, c, count(*) from (select key as a, c_int+1 as b, sum(c_int) as c from `c/b/o_t1` where (`c/b/o_t1`.c_int + 1 >= 0) and (`c/b/o_t1`.c_int > 0 or `c/b/o_t1`.c_float >= 0)  group by c_float, `c/b/o_t1`.c_int, key having `c/b/o_t1`.c_float > 0 and (c_int >=1 or c_float >= 1) and (c_int + c_float) >= 0 order by a+b desc, c asc) `c/b/o_t1` left semi join (select key as p, c_int+1 as q, sum(c_int) as r from `//cbo_t2` where (`//cbo_t2`.c_int + 1 >= 0) and (`//cbo_t2`.c_int  [...]
+    parse("select a, c, count(*)  from (select key as a, c_int+1 as b, sum(c_int) as c from `c/b/o_t1` where (`c/b/o_t1`.c_int + 1 >= 0) and (`c/b/o_t1`.c_int > 0 or `c/b/o_t1`.c_float >= 0)  group by c_float, `c/b/o_t1`.c_int, key having `c/b/o_t1`.c_float > 0 and (c_int >=1 or c_float >= 1) and (c_int + c_float) >= 0 order by a+b desc, c asc limit 5) `c/b/o_t1` left semi join (select key as p, c_int+1 as q, sum(c_int) as r from `//cbo_t2` where (`//cbo_t2`.c_int + 1 >= 0) and (`//cbo_t [...]
+  }
+
+  @Test
+  public void testSelectTs() throws ParseException {
+    parse("select * from `c/b/o_t1`");
+    parse("select * from `c/b/o_t1` as `c/b/o_t1`");
+    parse("select * from `c/b/o_t1` as `//cbo_t2`");
+    parse("select `c/b/o_t1`.key as x, c_int as c_int, (((c_int+c_float)*10)+5) as y from `c/b/o_t1`");
+    parse("select * from `c/b/o_t1` where (((key=1) and (c_float=10)) and (c_int=20))");
+  }
+
+  @Test
+  public void testSelectFilTs() throws ParseException {
+    parse("select * from `c/b/o_t1` where `c/b/o_t1`.c_int >= 0");
+    parse("select * from `c/b/o_t1` as `c/b/o_t1`  where `c/b/o_t1`.c_int >= 0 and c_float+c_int >= 0 or c_float <= 100");
+    parse("select * from `c/b/o_t1` as `//cbo_t2` where `//cbo_t2`.c_int >= 0 and c_float+c_int >= 0 or c_float <= 100");
+    parse("select `//cbo_t2`.key as x, c_int as c_int, (((c_int+c_float)*10)+5) as y from `c/b/o_t1` as `//cbo_t2`  where `//cbo_t2`.c_int >= 0 and c_float+c_int >= 0 or c_float <= 100");
+  }
+
+  @Test
+  public void testSelectSelectTsFil() throws ParseException {
+    parse("select * from (select * from `c/b/o_t1` where `c/b/o_t1`.c_int >= 0) as `c/b/o_t1`");
+    parse("select * from (select * from `c/b/o_t1` as `c/b/o_t1`  where `c/b/o_t1`.c_int >= 0 and c_float+c_int >= 0 or c_float <= 100) as `c/b/o_t1`");
+    parse("select * from (select * from `c/b/o_t1` as `//cbo_t2` where `//cbo_t2`.c_int >= 0 and c_float+c_int >= 0 or c_float <= 100) as `c/b/o_t1`");
+    parse("select * from (select `//cbo_t2`.key as x, c_int as c_int, (((c_int+c_float)*10)+5) as y from `c/b/o_t1` as `//cbo_t2`  where `//cbo_t2`.c_int >= 0 and c_float+c_int >= 0 or c_float <= 100) as `c/b/o_t1`");
+    parse("select * from (select * from `c/b/o_t1` where `c/b/o_t1`.c_int >= 0) as `c/b/o_t1` where `c/b/o_t1`.c_int >= 0");
+    parse("select * from (select * from `c/b/o_t1` as `c/b/o_t1`  where `c/b/o_t1`.c_int >= 0 and c_float+c_int >= 0 or c_float <= 100) as `c/b/o_t1`  where `c/b/o_t1`.c_int >= 0 and c_float+c_int >= 0 or c_float <= 100");
+    parse("select * from (select * from `c/b/o_t1` as `//cbo_t2` where `//cbo_t2`.c_int >= 0 and c_float+c_int >= 0 or c_float <= 100) as `//cbo_t2` where `//cbo_t2`.c_int >= 0 and c_float+c_int >= 0 or c_float <= 100");
+    parse("select * from (select `//cbo_t2`.key as x, c_int as c_int, (((c_int+c_float)*10)+5) as y from `c/b/o_t1` as `//cbo_t2`  where `//cbo_t2`.c_int >= 0 and c_float+c_int >= 0 or c_float <= 100) as `c/b/o_t1` where `c/b/o_t1`.c_int >= 0 and y+c_int >= 0 or x <= 100");
+    parse("select `c/b/o_t1`.c_int+c_float as x , c_int as c_int, (((c_int+c_float)*10)+5) as y from (select * from `c/b/o_t1` where `c/b/o_t1`.c_int >= 0) as `c/b/o_t1` where `c/b/o_t1`.c_int >= 0");
+    parse("select `//cbo_t2`.c_int+c_float as x , c_int as c_int, (((c_int+c_float)*10)+5) as y from (select * from `c/b/o_t1` where `c/b/o_t1`.c_int >= 0) as `//cbo_t2` where `//cbo_t2`.c_int >= 0");
+    parse("select * from (select * from `c/b/o_t1` where `c/b/o_t1`.c_int >= 0) as `c/b/o_t1` where `c/b/o_t1`.c_int >= 0");
+    parse("select * from (select * from `c/b/o_t1` as `c/b/o_t1`  where `c/b/o_t1`.c_int >= 0 and c_float+c_int >= 0 or c_float <= 100) as `c/b/o_t1`  where `c/b/o_t1`.c_int >= 0 and c_float+c_int >= 0 or c_float <= 100");
+    parse("select * from (select * from `c/b/o_t1` as `//cbo_t2` where `//cbo_t2`.c_int >= 0 and c_float+c_int >= 0 or c_float <= 100) as `//cbo_t2` where `//cbo_t2`.c_int >= 0 and c_float+c_int >= 0 or c_float <= 100");
+    parse("select * from (select `//cbo_t2`.key as x, c_int as c_int, (((c_int+c_float)*10)+5) as y from `c/b/o_t1` as `//cbo_t2`  where `//cbo_t2`.c_int >= 0 and c_float+c_int >= 0 or c_float <= 100) as `c/b/o_t1` where `c/b/o_t1`.c_int >= 0 and y+c_int >= 0 or x <= 100");
+    parse("select `c/b/o_t1`.c_int+c_float as x , c_int as c_int, (((c_int+c_float)*10)+5) as y from (select * from `c/b/o_t1` where `c/b/o_t1`.c_int >= 0) as `c/b/o_t1` where `c/b/o_t1`.c_int >= 0");
+    parse("select `//cbo_t2`.c_int+c_float as x , c_int as c_int, (((c_int+c_float)*10)+5) as y from (select * from `c/b/o_t1` where `c/b/o_t1`.c_int >= 0) as `//cbo_t2` where `//cbo_t2`.c_int >= 0");
+  }
+
+  @Test
+  public void testNullExprInSelectList() throws ParseException {
+    parse("select null from `cbo_/t3////`");
+  }
+
+  @Test
+  public void testUnaryOperator() throws ParseException {
+    parse("select key from `c/b/o_t1` where c_int = -6  or c_int = +6");
+  }
+
+  @Test
+  public void testQueryReferencingOnlyPartitionColumns() throws ParseException {
+    parse("select count(`c/b/o_t1`.dt) from `c/b/o_t1` join `//cbo_t2` on `c/b/o_t1`.dt  = `//cbo_t2`.dt  where `c/b/o_t1`.dt = '2014' ");
+  }
+
+  @Test
+  public void testGetStatsWithEmptyPartitionList() throws ParseException {
+    parse("select `c/b/o_t1`.value from `c/b/o_t1` join `//cbo_t2` on `c/b/o_t1`.key = `//cbo_t2`.key where `c/b/o_t1`.dt = '10' and `c/b/o_t1`.c_boolean = true");
+  }
+
+  @Test
+  public void testSubQueriesNotExistsDistinctCorr() throws ParseException {
+    parse("select * \n" +
+        "\n" +
+        "from `src/_/cbo` b \n" +
+        "\n" +
+        "where not exists \n" +
+        "\n" +
+        "  (select distinct a.key \n" +
+        "\n" +
+        "  from `src/_/cbo` a \n" +
+        "\n" +
+        "  where b.value = a.value and a.value > 'val_2'\n" +
+        "\n" +
+        "  )\n" +
+        "\n");
+  }
+
+  @Test
+  public void testSubQueriesNotExistsNoAggCorrHaving() throws ParseException {
+    parse("select * \n" +
+        "\n" +
+        "from `src/_/cbo` b \n" +
+        "\n" +
+        "group by key, value\n" +
+        "\n" +
+        "having not exists \n" +
+        "\n" +
+        "  (select a.key \n" +
+        "\n" +
+        "  from `src/_/cbo` a \n" +
+        "\n" +
+        "  where b.value = a.value  and a.key = b.key and a.value > 'val_12'\n" +
+        "\n" +
+        "  )\n" +
+        "\n");
+  }
+
+  @Test
+  public void testSubQueryInFrom() throws ParseException {
+    parse("select * \n" +
+        "\n" +
+        "from (select * \n" +
+        "\n" +
+        "      from `src/_/cbo` b \n" +
+        "\n" +
+        "      where exists \n" +
+        "\n" +
+        "          (select a.key \n" +
+        "\n" +
+        "          from `src/_/cbo` a \n" +
+        "\n" +
+        "          where b.value = a.value  and a.key = b.key and a.value > 'val_9')\n" +
+        "\n" +
+        "     ) a\n" +
+        "\n");
+  }
+
+  @Test
+  public void testSubQueryIn() throws ParseException {
+    // from, having
+    parse("select *\n" +
+        "\n" +
+        "from (select b.key, count(*) \n" +
+        "\n" +
+        "  from `src/_/cbo` b \n" +
+        "\n" +
+        "  group by b.key\n" +
+        "\n" +
+        "  having exists \n" +
+        "\n" +
+        "    (select a.key \n" +
+        "\n" +
+        "    from `src/_/cbo` a \n" +
+        "\n" +
+        "    where a.key = b.key and a.value > 'val_9'\n" +
+        "\n" +
+        "    )\n" +
+        "\n" +
+        ") a\n" +
+        "\n");
+
+    // non agg, non corr
+    parse("select * \n" +
+        "\n" +
+        "from `src/_/cbo` \n" +
+        "\n" +
+        "where `src/_/cbo`.key in (select key from `src/_/cbo` s1 where s1.key > '9') order by key\n" +
+        "\n");
+
+    // distinct, corr
+    parse("select * \n" +
+        "\n" +
+        "from `src/_/cbo` b \n" +
+        "\n" +
+        "where b.key in\n" +
+        "\n" +
+        "        (select distinct a.key \n" +
+        "\n" +
+        "         from `src/_/cbo` a \n" +
+        "\n" +
+        "         where b.value = a.value and a.key > '9'\n" +
+        "\n" +
+        "        ) order by b.key\n" +
+        "\n");
+
+    // non agg, corr, with join in Parent Query
+    parse("select p.p_partkey, li.l_suppkey \n" +
+        "\n" +
+        "from (select distinct l_partkey as p_partkey from `line/item`) p join `line/item` li on p.p_partkey = li.l_partkey \n" +
+        "\n" +
+        "where li.l_linenumber = 1 and\n" +
+        "\n" +
+        " li.l_orderkey in (select l_orderkey from `line/item` where l_shipmode = 'AIR' and l_linenumber = li.l_linenumber)\n" +
+        "\n" +
+        " order by p.p_partkey\n" +
+        "\n");
+
+    // where and having
+    parse("select key, value, count(*) \n" +
+        "\n" +
+        "from `src/_/cbo` b\n" +
+        "\n" +
+        "where b.key in (select key from `src/_/cbo` where `src/_/cbo`.key > '8')\n" +
+        "\n" +
+        "group by key, value\n" +
+        "\n" +
+        "having count(*) in (select count(*) from `src/_/cbo` s1 where s1.key > '9' group by s1.key ) order by key\n" +
+        "\n");
+
+    // non agg, non corr, windowing
+    parse("select p_mfgr, p_name, avg(p_size) \n" +
+        "\n" +
+        "from `p/a/r/t` \n" +
+        "\n" +
+        "group by p_mfgr, p_name\n" +
+        "\n" +
+        "having p_name in \n" +
+        "\n" +
+        "  (select first_value(p_name) over(partition by p_mfgr order by p_size) from `p/a/r/t`) order by p_mfgr\n");
+  }
+
+  @Test
+  public void testSubQueriesNotIn() throws ParseException {
+    // non agg, non corr
+    parse("select * \n" +
+        "\n" +
+        "from `src/_/cbo` \n" +
+        "\n" +
+        "where `src/_/cbo`.key not in  \n" +
+        "\n" +
+        "  ( select key  from `src/_/cbo` s1 \n" +
+        "\n" +
+        "    where s1.key > '2'\n" +
+        "\n" +
+        "  ) order by key\n" +
+        "\n");
+
+    // non agg, corr
+    parse("select p_mfgr, b.p_name, p_size \n" +
+        "\n" +
+        "from `p/a/r/t` b \n" +
+        "\n" +
+        "where b.p_name not in \n" +
+        "\n" +
+        "  (select p_name \n" +
+        "\n" +
+        "  from (select p_mfgr, p_name, p_size as r from `p/a/r/t`) a \n" +
+        "\n" +
+        "  where r < 10 and b.p_mfgr = a.p_mfgr \n" +
+        "\n" +
+        "  ) order by p_mfgr,p_size");
+
+    // agg, non corr
+    parse("" +
+        "select p_name, p_size \n" +
+        "\n" +
+        "from \n" +
+        "\n" +
+        "`p/a/r/t` where `p/a/r/t`.p_size not in \n" +
+        "\n" +
+        "  (select avg(p_size) \n" +
+        "\n" +
+        "  from (select p_size from `p/a/r/t`) a \n" +
+        "\n" +
+        "  where p_size < 10\n" +
+        "\n" +
+        "  ) order by p_name\n");
+
+    // agg, corr
+    parse("" +
+        "select p_mfgr, p_name, p_size \n" +
+        "\n" +
+        "from `p/a/r/t` b where b.p_size not in \n" +
+        "\n" +
+        "  (select min(p_size) \n" +
+        "\n" +
+        "  from (select p_mfgr, p_size from `p/a/r/t`) a \n" +
+        "\n" +
+        "  where p_size < 10 and b.p_mfgr = a.p_mfgr\n" +
+        "\n" +
+        "  ) order by  p_name\n");
+
+    // non agg, non corr, Group By in Parent Query
+    parse("select li.l_partkey, count(*) \n" +
+        "\n" +
+        "from `line/item` li \n" +
+        "\n" +
+        "where li.l_linenumber = 1 and \n" +
+        "\n" +
+        "  li.l_orderkey not in (select l_orderkey from `line/item` where l_shipmode = 'AIR') \n" +
+        "\n" +
+        "group by li.l_partkey order by li.l_partkey\n");
+
+    // non agg, corr, having
+    parse("select b.p_mfgr, min(p_retailprice) \n" +
+        "\n" +
+        "from `p/a/r/t` b \n" +
+        "\n" +
+        "group by b.p_mfgr\n" +
+        "\n" +
+        "having b.p_mfgr not in \n" +
+        "\n" +
+        "  (select p_mfgr \n" +
+        "\n" +
+        "  from (select p_mfgr, min(p_retailprice) l, max(p_retailprice) r, avg(p_retailprice) a from `p/a/r/t` group by p_mfgr) a \n" +
+        "\n" +
+        "  where min(p_retailprice) = l and r - l > 600\n" +
+        "\n" +
+        "  )\n" +
+        "\n" +
+        "  order by b.p_mfgr\n");
+
+    // agg, non corr, having
+    parse("select b.p_mfgr, min(p_retailprice) \n" +
+        "\n" +
+        "from `p/a/r/t` b \n" +
+        "\n" +
+        "group by b.p_mfgr\n" +
+        "\n" +
+        "having b.p_mfgr not in \n" +
+        "\n" +
+        "  (select p_mfgr \n" +
+        "\n" +
+        "  from `p/a/r/t` a\n" +
+        "\n" +
+        "  group by p_mfgr\n" +
+        "\n" +
+        "  having max(p_retailprice) - min(p_retailprice) > 600\n" +
+        "\n" +
+        "  )\n" +
+        "\n" +
+        "  order by b.p_mfgr  \n");
+  }
+
+  @Test
+  public void testUDF_UDAF() throws ParseException {
+    parse("select count(*), count(c_int), sum(c_int), avg(c_int), max(c_int), min(c_int) from `c/b/o_t1`");
+    parse("select count(*), count(c_int) as a, sum(c_int), avg(c_int), max(c_int), min(c_int), case c_int when 0  then 1 when 1 then 2 else 3 end, sum(case c_int when 0  then 1 when 1 then 2 else 3 end) from `c/b/o_t1` group by c_int order by a");
+    parse("select * from (select count(*) as a, count(distinct c_int) as b, sum(c_int) as c, avg(c_int) as d, max(c_int) as e, min(c_int) as f from `c/b/o_t1`) `c/b/o_t1`");
+    parse("select * from (select count(*) as a, count(distinct c_int) as b, sum(c_int) as c, avg(c_int) as d, max(c_int) as e, min(c_int) as f, case c_int when 0  then 1 when 1 then 2 else 3 end as g, sum(case c_int when 0  then 1 when 1 then 2 else 3 end) as h from `c/b/o_t1` group by c_int) `c/b/o_t1` order by a");
+    parse("select f,a,e,b from (select count(*) as a, count(c_int) as b, sum(c_int) as c, avg(c_int) as d, max(c_int) as e, min(c_int) as f from `c/b/o_t1`) `c/b/o_t1`");
+    parse("select f,a,e,b from (select count(*) as a, count(distinct c_int) as b, sum(distinct c_int) as c, avg(distinct c_int) as d, max(distinct c_int) as e, min(distinct c_int) as f from `c/b/o_t1`) `c/b/o_t1`");
+    parse("select key,count(c_int) as a, avg(c_float) from `c/b/o_t1` group by key order by a");
+    parse("select count(distinct c_int) as a, avg(c_float) from `c/b/o_t1` group by c_float order by a");
+    parse("select count(distinct c_int) as a, avg(c_float) from `c/b/o_t1` group by c_int order by a");
+    parse("select count(distinct c_int) as a, avg(c_float) from `c/b/o_t1` group by c_float, c_int order by a");
+  }
+
+  @Test
+  public void testUnionAll() throws ParseException {
+    parse("select * from (select * from `c/b/o_t1` order by key, c_boolean, value, dt)a union all select * from (select * from `//cbo_t2` order by key, c_boolean, value, dt)b");
+    parse("select key from (select key, c_int from (select * from `c/b/o_t1` union all select * from `//cbo_t2` where `//cbo_t2`.key >=0)r1 union all select key, c_int from `cbo_/t3////`)r2 where key >=0 order by key");
+    parse("select r2.key from (select key, c_int from (select key, c_int from `c/b/o_t1` union all select key, c_int from `cbo_/t3////` )r1 union all select key, c_int from `cbo_/t3////`)r2 join   (select key, c_int from (select * from `c/b/o_t1` union all select * from `//cbo_t2` where `//cbo_t2`.key >=0)r1 union all select key, c_int from `cbo_/t3////`)r3 on r2.key=r3.key where r3.key >=0 order by r2.key");
+  }
+
+  @Test
+  public void testCreateView() throws ParseException {
+    parse("create view v1_n7 as select c_int, value, c_boolean, dt from `c/b/o_t1`");
+    parse("create view v2_n2 as select c_int, value from `//cbo_t2`");
+    parse("create view v3_n0 as select v1_n7.value val from v1_n7 join `c/b/o_t1` on v1_n7.c_boolean = `c/b/o_t1`.c_boolean");
+  }
+
+  @Test
+  public void testWithClause() throws ParseException {
+    parse("with q1 as ( select key from `c/b/o_t1` where key = '1')\n" +
+        "select count(*) from q1");
+    parse("with q1 as ( select key,c_int from `c/b/o_t1`  where key = '1')\n" +
+        "select * from q1");
+    parse("with q1 as ( select `c/b/o_t1`.c_int c_int from q2 join `c/b/o_t1` where q2.c_int = `c/b/o_t1`.c_int  and `c/b/o_t1`.dt='2014'),\n" +
+        "q2 as ( select c_int,c_boolean from v1_n7  where value = '1' or dt = '14')\n" +
+        "select count(*) from q1 join q2 join v4_n0 on q1.c_int = q2.c_int and v4_n0.c_int = q2.c_int");
+  }
+
+  @Test
+  public void testWindowingFunctions() throws ParseException {
+    parse("select count(c_int) over() from `c/b/o_t1`");
+    parse("select count(c_int) over(partition by c_float order by key), sum(c_float) over(partition by c_float order by key), max(c_int) over(partition by c_float order by key), min(c_int) over(partition by c_float order by key), row_number() over(partition by c_float order by key) as rn, rank() over(partition by c_float order by key), dense_rank() over(partition by c_float order by key), round(percent_rank() over(partition by c_float order by key), 2), lead(c_int, 2, c_int) over(partiti [...]
+    parse("select * from (select count(c_int) over(partition by c_float order by key), sum(c_float) over(partition by c_float order by key), max(c_int) over(partition by c_float order by key), min(c_int) over(partition by c_float order by key), row_number() over(partition by c_float order by key) as rn, rank() over(partition by c_float order by key), dense_rank() over(partition by c_float order by key), round(percent_rank() over(partition by c_float order by key),2), lead(c_int, 2, c_int [...]
+    parse("select x from (select count(c_int) over() as x, sum(c_float) over() from `c/b/o_t1`) `c/b/o_t1`");
+    parse("select 1+sum(c_int) over() from `c/b/o_t1`");
+    parse("select sum(c_int)+sum(sum(c_int)) over() from `c/b/o_t1`");
+    parse("select * from (select max(c_int) over (partition by key order by value Rows UNBOUNDED PRECEDING), min(c_int) over (partition by key order by value rows current row), count(c_int) over(partition by key order by value ROWS 1 PRECEDING), avg(value) over (partition by key order by value Rows between unbounded preceding and unbounded following), sum(value) over (partition by key order by value rows between unbounded preceding and current row), avg(c_float) over (partition by key or [...]
+    parse("select i, a, h, b, c, d, e, f, g, a as x, a +1 as y from (select max(c_int) over (partition by key order by value range UNBOUNDED PRECEDING) a, min(c_int) over (partition by key order by value range current row) b, count(c_int) over(partition by key order by value range 1 PRECEDING) c, avg(value) over (partition by key order by value range between unbounded preceding and unbounded following) d, sum(value) over (partition by key order by value range between unbounded preceding  [...]
+    parse("select *, rank() over(partition by key order by value) as rr from default.src1");
+    parse("select *, rank() over(partition by key order by value) from default.src1");
+  }
+
+  @Test
+  public void testInsert() throws ParseException {
+    parse("insert into table `src/_/cbo` select * from default.src");
+    parse("insert overwrite table `src/_/cbo` select * from default.src");
+    parse("insert into `t//` values(1)");
+    parse("insert into `t//` values(null)");
+  }
+
+  @Test
+  public void testDropTable() throws ParseException {
+    parse("drop table `t//`");
+  }
+
+  @Test
+  public void testExplain() throws ParseException {
+    parse("explain select * from `t//`");
+  }
+
+  @Test
+  public void testDropDatabase() throws ParseException {
+    parse("drop database `db~!@#$%^&*(),<>` cascade");
+  }
+}
diff --git a/parser/src/test/org/apache/hadoop/hive/ql/parse/TestSpecialCharacterInTableNamesQuotes.java b/parser/src/test/org/apache/hadoop/hive/ql/parse/TestSpecialCharacterInTableNamesQuotes.java
new file mode 100644
index 0000000..b717309
--- /dev/null
+++ b/parser/src/test/org/apache/hadoop/hive/ql/parse/TestSpecialCharacterInTableNamesQuotes.java
@@ -0,0 +1,620 @@
+/*
+ * 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.hadoop.hive.ql.parse;
+
+import java.io.IOException;
+
+import org.apache.hadoop.conf.Configuration;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+/**
+ * Parser tests special character in table names.
+ */
+public class TestSpecialCharacterInTableNamesQuotes {
+  private static Configuration conf;
+
+  private ParseDriver parseDriver;
+
+  @BeforeClass
+  public static void initialize() {
+    conf = new Configuration();
+    conf.set("hive.support.quoted.identifiers", "standard");
+  }
+
+  @Before
+  public void setup() throws SemanticException, IOException {
+    parseDriver = new ParseDriver();
+  }
+
+  private ASTNode parse(String query) throws ParseException {
+    return (ASTNode) parseDriver.parse(query, conf).getTree().getChild(0);
+  }
+
+  @Test
+  public void testCreateDatabase() throws ParseException {
+    parse("create database \"db~!@#$%^&*(),<>\"");
+    parse("use \"db~!@#$%^&*(),<>\"");
+  }
+
+  @Test
+  public void testCreateTable() throws ParseException {
+    parse("create table \"c/b/o_t1\"(key string, value string, c_int int, c_float float, c_boolean boolean)  partitioned by (dt string) row format delimited fields terminated by ',' STORED AS TEXTFILE");
+    parse("create table \"//cbo_t2\"(key string, value string, c_int int, c_float float, c_boolean boolean)  partitioned by (dt string) row format delimited fields terminated by ',' STORED AS TEXTFILE");
+    parse("create table \"cbo_/t3////\"(key string, value string, c_int int, c_float float, c_boolean boolean)  row format delimited fields terminated by ',' STORED AS TEXTFILE");
+
+    parse("CREATE TABLE \"p/a/r/t\"(\n" +
+        "    p_partkey INT,\n" +
+        "    p_name STRING,\n" +
+        "    p_mfgr STRING,\n" +
+        "    p_brand STRING,\n" +
+        "    p_type STRING,\n" +
+        "    p_size INT,\n" +
+        "    p_container STRING,\n" +
+        "    p_retailprice DOUBLE,\n" +
+        "    p_comment STRING\n" +
+        ")");
+
+    parse("CREATE TABLE \"line/item\" (L_ORDERKEY      INT,\n" +
+        "                                L_PARTKEY       INT,\n" +
+        "                                L_SUPPKEY       INT,\n" +
+        "                                L_LINENUMBER    INT,\n" +
+        "                                L_QUANTITY      DOUBLE,\n" +
+        "                                L_EXTENDEDPRICE DOUBLE,\n" +
+        "                                L_DISCOUNT      DOUBLE,\n" +
+        "                                L_TAX           DOUBLE,\n" +
+        "                                L_RETURNFLAG    STRING,\n" +
+        "                                L_LINESTATUS    STRING,\n" +
+        "                                l_shipdate      STRING,\n" +
+        "                                L_COMMITDATE    STRING,\n" +
+        "                                L_RECEIPTDATE   STRING,\n" +
+        "                                L_SHIPINSTRUCT  STRING,\n" +
+        "                                L_SHIPMODE      STRING,\n" +
+        "                                L_COMMENT       STRING)\n" +
+        "ROW FORMAT DELIMITED\n" +
+        "FIELDS TERMINATED BY '|'");
+
+    parse("create table \"src/_/cbo\" as select * from default.src");
+  }
+
+  @Test
+  public void testLoadData() throws ParseException {
+    parse("load data local inpath '../../data/files/cbo_t1.txt' into table \"c/b/o_t1\" partition (dt='2014')");
+    parse("load data local inpath '../../data/files/cbo_t2.txt' into table \"//cbo_t2\" partition (dt='2014')");
+    parse("load data local inpath '../../data/files/cbo_t3.txt' into table \"cbo_/t3////\"");
+    parse("LOAD DATA LOCAL INPATH '../../data/files/part_tiny.txt' overwrite into table \"p/a/r/t\"");
+    parse("LOAD DATA LOCAL INPATH '../../data/files/lineitem.txt' OVERWRITE INTO TABLE \"line/item\"");
+  }
+
+  @Test
+  public void testAnalyzeTable() throws ParseException {
+    parse("analyze table \"c/b/o_t1\" partition (dt) compute statistics");
+    parse("analyze table \"c/b/o_t1\" compute statistics for columns key, value, c_int, c_float, c_boolean");
+    parse("analyze table \"//cbo_t2\" partition (dt) compute statistics");
+    parse("analyze table \"//cbo_t2\" compute statistics for columns key, value, c_int, c_float, c_boolean");
+    parse("analyze table \"cbo_/t3////\" compute statistics");
+    parse("analyze table \"cbo_/t3////\" compute statistics for columns key, value, c_int, c_float, c_boolean");
+    parse("analyze table \"src/_/cbo\" compute statistics");
+    parse("analyze table \"src/_/cbo\" compute statistics for columns");
+    parse("analyze table \"p/a/r/t\" compute statistics");
+    parse("analyze table \"p/a/r/t\" compute statistics for columns");
+    parse("analyze table \"line/item\" compute statistics");
+    parse("analyze table \"line/item\" compute statistics for columns");
+  }
+
+  @Test
+  public void testSelect() throws ParseException {
+    parse("select key, (c_int+1)+2 as x, sum(c_int) from \"c/b/o_t1\" group by c_float, \"c/b/o_t1\".c_int, key");
+    parse("select x, y, count(*) from (select key, (c_int+c_float+1+2) as x, sum(c_int) as y from \"c/b/o_t1\" group by c_float, \"c/b/o_t1\".c_int, key) R group by y, x");
+    parse("select \"cbo_/t3////\".c_int, c, count(*) from (select key as a, c_int+1 as b, sum(c_int) as c from \"c/b/o_t1\" where (\"c/b/o_t1\".c_int + 1 >= 0) and (\"c/b/o_t1\".c_int > 0 or \"c/b/o_t1\".c_float >= 0) group by c_float, \"c/b/o_t1\".c_int, key order by a) \"c/b/o_t1\" join (select key as p, c_int+1 as q, sum(c_int) as r from \"//cbo_t2\" where (\"//cbo_t2\".c_int + 1 >= 0) and (\"//cbo_t2\".c_int > 0 or \"//cbo_t2\".c_float >= 0)  group by c_float, \"//cbo_t2\".c_int, key [...]
+    parse("select \"cbo_/t3////\".c_int, c, count(*) from (select key as a, c_int+1 as b, sum(c_int) as c from \"c/b/o_t1\" where (\"c/b/o_t1\".c_int + 1 >= 0) and (\"c/b/o_t1\".c_int > 0 or \"c/b/o_t1\".c_float >= 0)  group by c_float, \"c/b/o_t1\".c_int, key having \"c/b/o_t1\".c_float > 0 and (c_int >=1 or c_float >= 1) and (c_int + c_float) >= 0 order by b % c asc, b desc) \"c/b/o_t1\" left outer join (select key as p, c_int+1 as q, sum(c_int) as r from \"//cbo_t2\" where (\"//cbo_t2 [...]
+    parse("select \"cbo_/t3////\".c_int, c, count(*) from (select key as a, c_int+1 as b, sum(c_int) as c from \"c/b/o_t1\" where (\"c/b/o_t1\".c_int + 1 >= 0) and (\"c/b/o_t1\".c_int > 0 or \"c/b/o_t1\".c_float >= 0)  group by c_float, \"c/b/o_t1\".c_int, key having \"c/b/o_t1\".c_float > 0 and (c_int >=1 or c_float >= 1) and (c_int + c_float) >= 0 order by b+c, a desc) \"c/b/o_t1\" right outer join (select key as p, c_int+1 as q, sum(c_int) as r from \"//cbo_t2\" where (\"//cbo_t2\".c_ [...]
+    parse("select \"cbo_/t3////\".c_int, c, count(*) from (select key as a, c_int+1 as b, sum(c_int) as c from \"c/b/o_t1\" where (\"c/b/o_t1\".c_int + 1 >= 0) and (\"c/b/o_t1\".c_int > 0 or \"c/b/o_t1\".c_float >= 0)  group by c_float, \"c/b/o_t1\".c_int, key having \"c/b/o_t1\".c_float > 0 and (c_int >=1 or c_float >= 1) and (c_int + c_float) >= 0 order by c+a desc) \"c/b/o_t1\" full outer join (select key as p, c_int+1 as q, sum(c_int) as r from \"//cbo_t2\" where (\"//cbo_t2\".c_int  [...]
+    parse("select \"cbo_/t3////\".c_int, c, count(*) from (select key as a, c_int+1 as b, sum(c_int) as c from \"c/b/o_t1\" where (\"c/b/o_t1\".c_int + 1 >= 0) and (\"c/b/o_t1\".c_int > 0 or \"c/b/o_t1\".c_float >= 0)  group by c_float, \"c/b/o_t1\".c_int, key having \"c/b/o_t1\".c_float > 0 and (c_int >=1 or c_float >= 1) and (c_int + c_float) >= 0) \"c/b/o_t1\" join (select key as p, c_int+1 as q, sum(c_int) as r from \"//cbo_t2\" where (\"//cbo_t2\".c_int + 1 >= 0) and (\"//cbo_t2\".c [...]
+  }
+
+  @Test
+  public void testTestGroupByIsEmptyAndThereIsNoOtherColsInAggr() throws ParseException {
+    parse("select unionsrc.key FROM (select 'tst1' as key, count(1) as value from default.src) unionsrc");
+    parse("select unionsrc.key, unionsrc.value FROM (select 'tst1' as key, count(1) as value from default.src) unionsrc");
+
+    parse("select unionsrc.key FROM (select 'max' as key, max(c_int) as value from \"cbo_/t3////\" s1\n" +
+        "\n" +
+        "UNION  ALL\n" +
+        "\n" +
+        "    select 'min' as key,  min(c_int) as value from \"cbo_/t3////\" s2\n" +
+        "\n" +
+        "    UNION ALL\n" +
+        "\n" +
+        "        select 'avg' as key,  avg(c_int) as value from \"cbo_/t3////\" s3) unionsrc order by unionsrc.key");
+
+    parse("select unionsrc.key, unionsrc.value FROM (select 'max' as key, max(c_int) as value from \"cbo_/t3////\" s1\n" +
+        "\n" +
+        "UNION  ALL\n" +
+        "\n" +
+        "    select 'min' as key,  min(c_int) as value from \"cbo_/t3////\" s2\n" +
+        "\n" +
+        "    UNION ALL\n" +
+        "\n" +
+        "        select 'avg' as key,  avg(c_int) as value from \"cbo_/t3////\" s3) unionsrc order by unionsrc.key");
+
+    parse("select unionsrc.key, count(1) FROM (select 'max' as key, max(c_int) as value from \"cbo_/t3////\" s1\n" +
+        "\n" +
+        "    UNION  ALL\n" +
+        "\n" +
+        "        select 'min' as key,  min(c_int) as value from \"cbo_/t3////\" s2\n" +
+        "\n" +
+        "    UNION ALL\n" +
+        "\n" +
+        "        select 'avg' as key,  avg(c_int) as value from \"cbo_/t3////\" s3) unionsrc group by unionsrc.key order by unionsrc.key");
+  }
+
+  @Test
+  public void testSelectJoinTS() throws ParseException {
+    parse("select \"c/b/o_t1\".c_int, \"//cbo_t2\".c_int from \"c/b/o_t1\" join             \"//cbo_t2\" on \"c/b/o_t1\".key=\"//cbo_t2\".key");
+    parse("select \"c/b/o_t1\".key from \"c/b/o_t1\" join \"cbo_/t3////\"");
+    parse("select \"c/b/o_t1\".key from \"c/b/o_t1\" join \"cbo_/t3////\" where \"c/b/o_t1\".key=\"cbo_/t3////\".key and \"c/b/o_t1\".key >= 1");
+    parse("select \"c/b/o_t1\".c_int, \"//cbo_t2\".c_int from \"c/b/o_t1\" left outer join  \"//cbo_t2\" on \"c/b/o_t1\".key=\"//cbo_t2\".key");
+    parse("select \"c/b/o_t1\".c_int, \"//cbo_t2\".c_int from \"c/b/o_t1\" right outer join \"//cbo_t2\" on \"c/b/o_t1\".key=\"//cbo_t2\".key");
+    parse("select \"c/b/o_t1\".c_int, \"//cbo_t2\".c_int from \"c/b/o_t1\" full outer join  \"//cbo_t2\" on \"c/b/o_t1\".key=\"//cbo_t2\".key");
+    parse("select b, \"c/b/o_t1\".c, \"//cbo_t2\".p, q, \"cbo_/t3////\".c_int from (select key as a, c_int as b, \"c/b/o_t1\".c_float as c from \"c/b/o_t1\") \"c/b/o_t1\" join (select \"//cbo_t2\".key as p, \"//cbo_t2\".c_int as q, c_float as r from \"//cbo_t2\") \"//cbo_t2\" on \"c/b/o_t1\".a=p join \"cbo_/t3////\" on \"c/b/o_t1\".a=key");
+    parse("select key, \"c/b/o_t1\".c_int, \"//cbo_t2\".p, q from \"c/b/o_t1\" join (select \"//cbo_t2\".key as p, \"//cbo_t2\".c_int as q, c_float as r from \"//cbo_t2\") \"//cbo_t2\" on \"c/b/o_t1\".key=p join (select key as a, c_int as b, \"cbo_/t3////\".c_float as c from \"cbo_/t3////\")\"cbo_/t3////\" on \"c/b/o_t1\".key=a");
+    parse("select a, \"c/b/o_t1\".b, key, \"//cbo_t2\".c_int, \"cbo_/t3////\".p from (select key as a, c_int as b, \"c/b/o_t1\".c_float as c from \"c/b/o_t1\") \"c/b/o_t1\" join \"//cbo_t2\"  on \"c/b/o_t1\".a=key join (select key as p, c_int as q, \"cbo_/t3////\".c_float as r from \"cbo_/t3////\")\"cbo_/t3////\" on \"c/b/o_t1\".a=\"cbo_/t3////\".p");
+    parse("select b, \"c/b/o_t1\".c, \"//cbo_t2\".c_int, \"cbo_/t3////\".c_int from (select key as a, c_int as b, \"c/b/o_t1\".c_float as c from \"c/b/o_t1\") \"c/b/o_t1\" join \"//cbo_t2\" on \"c/b/o_t1\".a=\"//cbo_t2\".key join \"cbo_/t3////\" on \"c/b/o_t1\".a=\"cbo_/t3////\".key");
+    parse("select \"cbo_/t3////\".c_int, b, \"//cbo_t2\".c_int, \"c/b/o_t1\".c from (select key as a, c_int as b, \"c/b/o_t1\".c_float as c from \"c/b/o_t1\") \"c/b/o_t1\" join \"//cbo_t2\" on \"c/b/o_t1\".a=\"//cbo_t2\".key join \"cbo_/t3////\" on \"c/b/o_t1\".a=\"cbo_/t3////\".key");
+    parse("select b, \"c/b/o_t1\".c, \"//cbo_t2\".p, q, \"cbo_/t3////\".c_int from (select key as a, c_int as b, \"c/b/o_t1\".c_float as c from \"c/b/o_t1\") \"c/b/o_t1\" left outer join (select \"//cbo_t2\".key as p, \"//cbo_t2\".c_int as q, c_float as r from \"//cbo_t2\") \"//cbo_t2\" on \"c/b/o_t1\".a=p join \"cbo_/t3////\" on \"c/b/o_t1\".a=key");
+    parse("select key, \"c/b/o_t1\".c_int, \"//cbo_t2\".p, q from \"c/b/o_t1\" join (select \"//cbo_t2\".key as p, \"//cbo_t2\".c_int as q, c_float as r from \"//cbo_t2\") \"//cbo_t2\" on \"c/b/o_t1\".key=p left outer join (select key as a, c_int as b, \"cbo_/t3////\".c_float as c from \"cbo_/t3////\")\"cbo_/t3////\" on \"c/b/o_t1\".key=a");
+    parse("select b, \"c/b/o_t1\".c, \"//cbo_t2\".p, q, \"cbo_/t3////\".c_int from (select key as a, c_int as b, \"c/b/o_t1\".c_float as c from \"c/b/o_t1\") \"c/b/o_t1\" right outer join (select \"//cbo_t2\".key as p, \"//cbo_t2\".c_int as q, c_float as r from \"//cbo_t2\") \"//cbo_t2\" on \"c/b/o_t1\".a=p join \"cbo_/t3////\" on \"c/b/o_t1\".a=key");
+    parse("select key, \"c/b/o_t1\".c_int, \"//cbo_t2\".p, q from \"c/b/o_t1\" join (select \"//cbo_t2\".key as p, \"//cbo_t2\".c_int as q, c_float as r from \"//cbo_t2\") \"//cbo_t2\" on \"c/b/o_t1\".key=p right outer join (select key as a, c_int as b, \"cbo_/t3////\".c_float as c from \"cbo_/t3////\")\"cbo_/t3////\" on \"c/b/o_t1\".key=a");
+    parse("select b, \"c/b/o_t1\".c, \"//cbo_t2\".p, q, \"cbo_/t3////\".c_int from (select key as a, c_int as b, \"c/b/o_t1\".c_float as c from \"c/b/o_t1\") \"c/b/o_t1\" full outer join (select \"//cbo_t2\".key as p, \"//cbo_t2\".c_int as q, c_float as r from \"//cbo_t2\") \"//cbo_t2\" on \"c/b/o_t1\".a=p join \"cbo_/t3////\" on \"c/b/o_t1\".a=key");
+    parse("select key, \"c/b/o_t1\".c_int, \"//cbo_t2\".p, q from \"c/b/o_t1\" join (select \"//cbo_t2\".key as p, \"//cbo_t2\".c_int as q, c_float as r from \"//cbo_t2\") \"//cbo_t2\" on \"c/b/o_t1\".key=p full outer join (select key as a, c_int as b, \"cbo_/t3////\".c_float as c from \"cbo_/t3////\")\"cbo_/t3////\" on \"c/b/o_t1\".key=a");
+  }
+
+  @Test
+  public void testSelectJoinFILTS() throws ParseException {
+    parse("select \"c/b/o_t1\".c_int, \"//cbo_t2\".c_int from \"c/b/o_t1\" join \"//cbo_t2\" on \"c/b/o_t1\".key=\"//cbo_t2\".key where (\"c/b/o_t1\".c_int + \"//cbo_t2\".c_int == 2) and (\"c/b/o_t1\".c_int > 0 or \"//cbo_t2\".c_float >= 0)");
+    parse("select \"c/b/o_t1\".c_int, \"//cbo_t2\".c_int from \"c/b/o_t1\" left outer join  \"//cbo_t2\" on \"c/b/o_t1\".key=\"//cbo_t2\".key where (\"c/b/o_t1\".c_int + \"//cbo_t2\".c_int == 2) and (\"c/b/o_t1\".c_int > 0 or \"//cbo_t2\".c_float >= 0)");
+    parse("select \"c/b/o_t1\".c_int, \"//cbo_t2\".c_int from \"c/b/o_t1\" right outer join \"//cbo_t2\" on \"c/b/o_t1\".key=\"//cbo_t2\".key where (\"c/b/o_t1\".c_int + \"//cbo_t2\".c_int == 2) and (\"c/b/o_t1\".c_int > 0 or \"//cbo_t2\".c_float >= 0)");
+    parse("select \"c/b/o_t1\".c_int, \"//cbo_t2\".c_int from \"c/b/o_t1\" full outer join  \"//cbo_t2\" on \"c/b/o_t1\".key=\"//cbo_t2\".key where (\"c/b/o_t1\".c_int + \"//cbo_t2\".c_int == 2) and (\"c/b/o_t1\".c_int > 0 or \"//cbo_t2\".c_float >= 0)");
+    parse("select b, \"c/b/o_t1\".c, \"//cbo_t2\".p, q, \"cbo_/t3////\".c_int from (select key as a, c_int as b, \"c/b/o_t1\".c_float as c from \"c/b/o_t1\"  where (\"c/b/o_t1\".c_int + 1 == 2) and (\"c/b/o_t1\".c_int > 0 or \"c/b/o_t1\".c_float >= 0)) \"c/b/o_t1\" join (select \"//cbo_t2\".key as p, \"//cbo_t2\".c_int as q, c_float as r from \"//cbo_t2\"  where (\"//cbo_t2\".c_int + 1 == 2) and (\"//cbo_t2\".c_int > 0 or \"//cbo_t2\".c_float >= 0)) \"//cbo_t2\" on \"c/b/o_t1\".a=p join  [...]
+    parse("select q, b, \"//cbo_t2\".p, \"c/b/o_t1\".c, \"cbo_/t3////\".c_int from (select key as a, c_int as b, \"c/b/o_t1\".c_float as c from \"c/b/o_t1\"  where (\"c/b/o_t1\".c_int + 1 == 2) and (\"c/b/o_t1\".c_int > 0 or \"c/b/o_t1\".c_float >= 0)) \"c/b/o_t1\" left outer join (select \"//cbo_t2\".key as p, \"//cbo_t2\".c_int as q, c_float as r from \"//cbo_t2\"  where (\"//cbo_t2\".c_int + 1 == 2) and (\"//cbo_t2\".c_int > 0 or \"//cbo_t2\".c_float >= 0)) \"//cbo_t2\" on \"c/b/o_t1\ [...]
+    parse("select q, b, \"//cbo_t2\".p, \"c/b/o_t1\".c, \"cbo_/t3////\".c_int from (select key as a, c_int as b, \"c/b/o_t1\".c_float as c from \"c/b/o_t1\"  where (\"c/b/o_t1\".c_int + 1 == 2) and (\"c/b/o_t1\".c_int > 0 or \"c/b/o_t1\".c_float >= 0)) \"c/b/o_t1\" right outer join (select \"//cbo_t2\".key as p, \"//cbo_t2\".c_int as q, c_float as r from \"//cbo_t2\"  where (\"//cbo_t2\".c_int + 1 == 2) and (\"//cbo_t2\".c_int > 0 or \"//cbo_t2\".c_float >= 0)) \"//cbo_t2\" on \"c/b/o_t1 [...]
+    parse("select q, b, \"//cbo_t2\".p, \"c/b/o_t1\".c, \"cbo_/t3////\".c_int from (select key as a, c_int as b, \"c/b/o_t1\".c_float as c from \"c/b/o_t1\"  where (\"c/b/o_t1\".c_int + 1 == 2) and (\"c/b/o_t1\".c_int > 0 or \"c/b/o_t1\".c_float >= 0)) \"c/b/o_t1\" full outer join (select \"//cbo_t2\".key as p, \"//cbo_t2\".c_int as q, c_float as r from \"//cbo_t2\"  where (\"//cbo_t2\".c_int + 1 == 2) and (\"//cbo_t2\".c_int > 0 or \"//cbo_t2\".c_float >= 0)) \"//cbo_t2\" on \"c/b/o_t1\ [...]
+    parse("select * from (select q, b, \"//cbo_t2\".p, \"c/b/o_t1\".c, \"cbo_/t3////\".c_int from (select key as a, c_int as b, \"c/b/o_t1\".c_float as c from \"c/b/o_t1\"  where (\"c/b/o_t1\".c_int + 1 == 2) and (\"c/b/o_t1\".c_int > 0 or \"c/b/o_t1\".c_float >= 0)) \"c/b/o_t1\" full outer join (select \"//cbo_t2\".key as p, \"//cbo_t2\".c_int as q, c_float as r from \"//cbo_t2\"  where (\"//cbo_t2\".c_int + 1 == 2) and (\"//cbo_t2\".c_int > 0 or \"//cbo_t2\".c_float >= 0)) \"//cbo_t2\" [...]
+    parse("select * from (select q, b, \"//cbo_t2\".p, \"c/b/o_t1\".c, \"cbo_/t3////\".c_int from (select key as a, c_int as b, \"c/b/o_t1\".c_float as c from \"c/b/o_t1\"  where (\"c/b/o_t1\".c_int + 1 == 2) and (\"c/b/o_t1\".c_int > 0 or \"c/b/o_t1\".c_float >= 0)) \"c/b/o_t1\" left outer join (select \"//cbo_t2\".key as p, \"//cbo_t2\".c_int as q, c_float as r from \"//cbo_t2\"  where (\"//cbo_t2\".c_int + 1 == 2) and (\"//cbo_t2\".c_int > 0 or \"//cbo_t2\".c_float >= 0)) \"//cbo_t2\" [...]
+    parse("select * from (select q, b, \"//cbo_t2\".p, \"c/b/o_t1\".c, \"cbo_/t3////\".c_int from (select key as a, c_int as b, \"c/b/o_t1\".c_float as c from \"c/b/o_t1\"  where (\"c/b/o_t1\".c_int + 1 == 2) and (\"c/b/o_t1\".c_int > 0 or \"c/b/o_t1\".c_float >= 0)) \"c/b/o_t1\" left outer join (select \"//cbo_t2\".key as p, \"//cbo_t2\".c_int as q, c_float as r from \"//cbo_t2\"  where (\"//cbo_t2\".c_int + 1 == 2) and (\"//cbo_t2\".c_int > 0 or \"//cbo_t2\".c_float >= 0)) \"//cbo_t2\" [...]
+    parse("select * from (select q, b, \"//cbo_t2\".p, \"c/b/o_t1\".c, \"cbo_/t3////\".c_int from (select key as a, c_int as b, \"c/b/o_t1\".c_float as c from \"c/b/o_t1\"  where (\"c/b/o_t1\".c_int + 1 == 2) and (\"c/b/o_t1\".c_int > 0 or \"c/b/o_t1\".c_float >= 0)) \"c/b/o_t1\" left outer join (select \"//cbo_t2\".key as p, \"//cbo_t2\".c_int as q, c_float as r from \"//cbo_t2\"  where (\"//cbo_t2\".c_int + 1 == 2) and (\"//cbo_t2\".c_int > 0 or \"//cbo_t2\".c_float >= 0)) \"//cbo_t2\" [...]
+    parse("select * from (select q, b, \"//cbo_t2\".p, \"c/b/o_t1\".c, \"cbo_/t3////\".c_int from (select key as a, c_int as b, \"c/b/o_t1\".c_float as c from \"c/b/o_t1\"  where (\"c/b/o_t1\".c_int + 1 == 2) and (\"c/b/o_t1\".c_int > 0 or \"c/b/o_t1\".c_float >= 0)) \"c/b/o_t1\" right outer join (select \"//cbo_t2\".key as p, \"//cbo_t2\".c_int as q, c_float as r from \"//cbo_t2\"  where (\"//cbo_t2\".c_int + 1 == 2) and (\"//cbo_t2\".c_int > 0 or \"//cbo_t2\".c_float >= 0)) \"//cbo_t2\ [...]
+    parse("select * from (select q, b, \"//cbo_t2\".p, \"c/b/o_t1\".c, \"cbo_/t3////\".c_int from (select key as a, c_int as b, \"c/b/o_t1\".c_float as c from \"c/b/o_t1\"  where (\"c/b/o_t1\".c_int + 1 == 2) and (\"c/b/o_t1\".c_int > 0 or \"c/b/o_t1\".c_float >= 0)) \"c/b/o_t1\" right outer join (select \"//cbo_t2\".key as p, \"//cbo_t2\".c_int as q, c_float as r from \"//cbo_t2\"  where (\"//cbo_t2\".c_int + 1 == 2) and (\"//cbo_t2\".c_int > 0 or \"//cbo_t2\".c_float >= 0)) \"//cbo_t2\ [...]
+    parse("select * from (select q, b, \"//cbo_t2\".p, \"c/b/o_t1\".c, \"cbo_/t3////\".c_int from (select key as a, c_int as b, \"c/b/o_t1\".c_float as c from \"c/b/o_t1\"  where (\"c/b/o_t1\".c_int + 1 == 2) and (\"c/b/o_t1\".c_int > 0 or \"c/b/o_t1\".c_float >= 0)) \"c/b/o_t1\" right outer join (select \"//cbo_t2\".key as p, \"//cbo_t2\".c_int as q, c_float as r from \"//cbo_t2\"  where (\"//cbo_t2\".c_int + 1 == 2) and (\"//cbo_t2\".c_int > 0 or \"//cbo_t2\".c_float >= 0)) \"//cbo_t2\ [...]
+    parse("select * from (select q, b, \"//cbo_t2\".p, \"c/b/o_t1\".c, \"cbo_/t3////\".c_int from (select key as a, c_int as b, \"c/b/o_t1\".c_float as c from \"c/b/o_t1\"  where (\"c/b/o_t1\".c_int + 1 == 2) and (\"c/b/o_t1\".c_int > 0 or \"c/b/o_t1\".c_float >= 0)) \"c/b/o_t1\" full outer join (select \"//cbo_t2\".key as p, \"//cbo_t2\".c_int as q, c_float as r from \"//cbo_t2\"  where (\"//cbo_t2\".c_int + 1 == 2) and (\"//cbo_t2\".c_int > 0 or \"//cbo_t2\".c_float >= 0)) \"//cbo_t2\" [...]
+    parse("select * from (select q, b, \"//cbo_t2\".p, \"c/b/o_t1\".c, \"cbo_/t3////\".c_int from (select key as a, c_int as b, \"c/b/o_t1\".c_float as c from \"c/b/o_t1\"  where (\"c/b/o_t1\".c_int + 1 == 2) and (\"c/b/o_t1\".c_int > 0 or \"c/b/o_t1\".c_float >= 0)) \"c/b/o_t1\" full outer join (select \"//cbo_t2\".key as p, \"//cbo_t2\".c_int as q, c_float as r from \"//cbo_t2\"  where (\"//cbo_t2\".c_int + 1 == 2) and (\"//cbo_t2\".c_int > 0 or \"//cbo_t2\".c_float >= 0)) \"//cbo_t2\" [...]
+    parse("select * from (select q, b, \"//cbo_t2\".p, \"c/b/o_t1\".c, \"cbo_/t3////\".c_int from (select key as a, c_int as b, \"c/b/o_t1\".c_float as c from \"c/b/o_t1\"  where (\"c/b/o_t1\".c_int + 1 == 2) and (\"c/b/o_t1\".c_int > 0 or \"c/b/o_t1\".c_float >= 0)) \"c/b/o_t1\" full outer join (select \"//cbo_t2\".key as p, \"//cbo_t2\".c_int as q, c_float as r from \"//cbo_t2\"  where (\"//cbo_t2\".c_int + 1 == 2) and (\"//cbo_t2\".c_int > 0 or \"//cbo_t2\".c_float >= 0)) \"//cbo_t2\" [...]
+  }
+
+  @Test
+  public void testSelectTSJoinFilGBGBHavingLimit() throws ParseException {
+    parse("select key, (c_int+1)+2 as x, sum(c_int) from \"c/b/o_t1\" group by c_float, \"c/b/o_t1\".c_int, key order by x limit 1");
+    parse("select x, y, count(*) from (select key, (c_int+c_float+1+2) as x, sum(c_int) as y from \"c/b/o_t1\" group by c_float, \"c/b/o_t1\".c_int, key) R group by y, x order by x,y limit 1");
+    parse("select key from(select key from (select key from \"c/b/o_t1\" limit 5)\"//cbo_t2\"  limit 5)\"cbo_/t3////\"  limit 5");
+    parse("select key, c_int from(select key, c_int from (select key, c_int from \"c/b/o_t1\" order by c_int limit 5)\"c/b/o_t1\"  order by c_int limit 5)\"//cbo_t2\"  order by c_int limit 5");
+    parse("select \"cbo_/t3////\".c_int, c, count(*) from (select key as a, c_int+1 as b, sum(c_int) as c from \"c/b/o_t1\" where (\"c/b/o_t1\".c_int + 1 >= 0) and (\"c/b/o_t1\".c_int > 0 or \"c/b/o_t1\".c_float >= 0) group by c_float, \"c/b/o_t1\".c_int, key order by a limit 5) \"c/b/o_t1\" join (select key as p, c_int+1 as q, sum(c_int) as r from \"//cbo_t2\" where (\"//cbo_t2\".c_int + 1 >= 0) and (\"//cbo_t2\".c_int > 0 or \"//cbo_t2\".c_float >= 0)  group by c_float, \"//cbo_t2\".c_ [...]
+    parse("select \"cbo_/t3////\".c_int, c, count(*) from (select key as a, c_int+1 as b, sum(c_int) as c from \"c/b/o_t1\" where (\"c/b/o_t1\".c_int + 1 >= 0) and (\"c/b/o_t1\".c_int > 0 or \"c/b/o_t1\".c_float >= 0)  group by c_float, \"c/b/o_t1\".c_int, key having \"c/b/o_t1\".c_float > 0 and (c_int >=1 or c_float >= 1) and (c_int + c_float) >= 0 order by b % c asc, b desc limit 5) \"c/b/o_t1\" left outer join (select key as p, c_int+1 as q, sum(c_int) as r from \"//cbo_t2\" where (\" [...]
+  }
+
+  @Test
+  public void testSemiJoin() throws ParseException {
+    parse("select \"c/b/o_t1\".c_int           from \"c/b/o_t1\" left semi join   \"//cbo_t2\" on \"c/b/o_t1\".key=\"//cbo_t2\".key");
+    parse("select \"c/b/o_t1\".c_int           from \"c/b/o_t1\" left semi join   \"//cbo_t2\" on \"c/b/o_t1\".key=\"//cbo_t2\".key where (\"c/b/o_t1\".c_int + 1 == 2) and (\"c/b/o_t1\".c_int > 0 or \"c/b/o_t1\".c_float >= 0)");
+    parse("select * from (select c, b, a from (select key as a, c_int as b, \"c/b/o_t1\".c_float as c from \"c/b/o_t1\"  where (\"c/b/o_t1\".c_int + 1 == 2) and (\"c/b/o_t1\".c_int > 0 or \"c/b/o_t1\".c_float >= 0)) \"c/b/o_t1\" left semi join (select \"//cbo_t2\".key as p, \"//cbo_t2\".c_int as q, c_float as r from \"//cbo_t2\"  where (\"//cbo_t2\".c_int + 1 == 2) and (\"//cbo_t2\".c_int > 0 or \"//cbo_t2\".c_float >= 0)) \"//cbo_t2\" on \"c/b/o_t1\".a=p left semi join \"cbo_/t3////\" o [...]
+    parse("select * from (select \"cbo_/t3////\".c_int, \"c/b/o_t1\".c, b from (select key as a, c_int as b, \"c/b/o_t1\".c_float as c from \"c/b/o_t1\"  where (\"c/b/o_t1\".c_int + 1 = 2) and (\"c/b/o_t1\".c_int > 0 or \"c/b/o_t1\".c_float >= 0)) \"c/b/o_t1\" left semi join (select \"//cbo_t2\".key as p, \"//cbo_t2\".c_int as q, c_float as r from \"//cbo_t2\"  where (\"//cbo_t2\".c_int + 1 == 2) and (\"//cbo_t2\".c_int > 0 or \"//cbo_t2\".c_float >= 0)) \"//cbo_t2\" on \"c/b/o_t1\".a=p  [...]
+    parse("select * from (select c_int, b, \"c/b/o_t1\".c from (select key as a, c_int as b, \"c/b/o_t1\".c_float as c from \"c/b/o_t1\"  where (\"c/b/o_t1\".c_int + 1 == 2) and (\"c/b/o_t1\".c_int > 0 or \"c/b/o_t1\".c_float >= 0)) \"c/b/o_t1\" left semi join (select \"//cbo_t2\".key as p, \"//cbo_t2\".c_int as q, c_float as r from \"//cbo_t2\"  where (\"//cbo_t2\".c_int + 1 == 2) and (\"//cbo_t2\".c_int > 0 or \"//cbo_t2\".c_float >= 0)) \"//cbo_t2\" on \"c/b/o_t1\".a=p right outer joi [...]
+    parse("select * from (select c_int, b, \"c/b/o_t1\".c from (select key as a, c_int as b, \"c/b/o_t1\".c_float as c from \"c/b/o_t1\"  where (\"c/b/o_t1\".c_int + 1 == 2) and (\"c/b/o_t1\".c_int > 0 or \"c/b/o_t1\".c_float >= 0)) \"c/b/o_t1\" left semi join (select \"//cbo_t2\".key as p, \"//cbo_t2\".c_int as q, c_float as r from \"//cbo_t2\"  where (\"//cbo_t2\".c_int + 1 == 2) and (\"//cbo_t2\".c_int > 0 or \"//cbo_t2\".c_float >= 0)) \"//cbo_t2\" on \"c/b/o_t1\".a=p full outer join [...]
+    parse("select a, c, count(*) from (select key as a, c_int+1 as b, sum(c_int) as c from \"c/b/o_t1\" where (\"c/b/o_t1\".c_int + 1 >= 0) and (\"c/b/o_t1\".c_int > 0 or \"c/b/o_t1\".c_float >= 0)  group by c_float, \"c/b/o_t1\".c_int, key having \"c/b/o_t1\".c_float > 0 and (c_int >=1 or c_float >= 1) and (c_int + c_float) >= 0 order by a+b desc, c asc) \"c/b/o_t1\" left semi join (select key as p, c_int+1 as q, sum(c_int) as r from \"//cbo_t2\" where (\"//cbo_t2\".c_int + 1 >= 0) and  [...]
+    parse("select a, c, count(*)  from (select key as a, c_int+1 as b, sum(c_int) as c from \"c/b/o_t1\" where (\"c/b/o_t1\".c_int + 1 >= 0) and (\"c/b/o_t1\".c_int > 0 or \"c/b/o_t1\".c_float >= 0)  group by c_float, \"c/b/o_t1\".c_int, key having \"c/b/o_t1\".c_float > 0 and (c_int >=1 or c_float >= 1) and (c_int + c_float) >= 0 order by a+b desc, c asc limit 5) \"c/b/o_t1\" left semi join (select key as p, c_int+1 as q, sum(c_int) as r from \"//cbo_t2\" where (\"//cbo_t2\".c_int + 1 > [...]
+  }
+
+  @Test
+  public void testSelectTs() throws ParseException {
+    parse("select * from \"c/b/o_t1\"");
+    parse("select * from \"c/b/o_t1\" as \"c/b/o_t1\"");
+    parse("select * from \"c/b/o_t1\" as \"//cbo_t2\"");
+    parse("select \"c/b/o_t1\".key as x, c_int as c_int, (((c_int+c_float)*10)+5) as y from \"c/b/o_t1\"");
+    parse("select * from \"c/b/o_t1\" where (((key=1) and (c_float=10)) and (c_int=20))");
+  }
+
+  @Test
+  public void testSelectFilTs() throws ParseException {
+    parse("select * from \"c/b/o_t1\" where \"c/b/o_t1\".c_int >= 0");
+    parse("select * from \"c/b/o_t1\" as \"c/b/o_t1\"  where \"c/b/o_t1\".c_int >= 0 and c_float+c_int >= 0 or c_float <= 100");
+    parse("select * from \"c/b/o_t1\" as \"//cbo_t2\" where \"//cbo_t2\".c_int >= 0 and c_float+c_int >= 0 or c_float <= 100");
+    parse("select \"//cbo_t2\".key as x, c_int as c_int, (((c_int+c_float)*10)+5) as y from \"c/b/o_t1\" as \"//cbo_t2\"  where \"//cbo_t2\".c_int >= 0 and c_float+c_int >= 0 or c_float <= 100");
+  }
+
+  @Test
+  public void testSelectSelectTsFil() throws ParseException {
+    parse("select * from (select * from \"c/b/o_t1\" where \"c/b/o_t1\".c_int >= 0) as \"c/b/o_t1\"");
+    parse("select * from (select * from \"c/b/o_t1\" as \"c/b/o_t1\"  where \"c/b/o_t1\".c_int >= 0 and c_float+c_int >= 0 or c_float <= 100) as \"c/b/o_t1\"");
+    parse("select * from (select * from \"c/b/o_t1\" as \"//cbo_t2\" where \"//cbo_t2\".c_int >= 0 and c_float+c_int >= 0 or c_float <= 100) as \"c/b/o_t1\"");
+    parse("select * from (select \"//cbo_t2\".key as x, c_int as c_int, (((c_int+c_float)*10)+5) as y from \"c/b/o_t1\" as \"//cbo_t2\"  where \"//cbo_t2\".c_int >= 0 and c_float+c_int >= 0 or c_float <= 100) as \"c/b/o_t1\"");
+    parse("select * from (select * from \"c/b/o_t1\" where \"c/b/o_t1\".c_int >= 0) as \"c/b/o_t1\" where \"c/b/o_t1\".c_int >= 0");
+    parse("select * from (select * from \"c/b/o_t1\" as \"c/b/o_t1\"  where \"c/b/o_t1\".c_int >= 0 and c_float+c_int >= 0 or c_float <= 100) as \"c/b/o_t1\"  where \"c/b/o_t1\".c_int >= 0 and c_float+c_int >= 0 or c_float <= 100");
+    parse("select * from (select * from \"c/b/o_t1\" as \"//cbo_t2\" where \"//cbo_t2\".c_int >= 0 and c_float+c_int >= 0 or c_float <= 100) as \"//cbo_t2\" where \"//cbo_t2\".c_int >= 0 and c_float+c_int >= 0 or c_float <= 100");
+    parse("select * from (select \"//cbo_t2\".key as x, c_int as c_int, (((c_int+c_float)*10)+5) as y from \"c/b/o_t1\" as \"//cbo_t2\"  where \"//cbo_t2\".c_int >= 0 and c_float+c_int >= 0 or c_float <= 100) as \"c/b/o_t1\" where \"c/b/o_t1\".c_int >= 0 and y+c_int >= 0 or x <= 100");
+    parse("select \"c/b/o_t1\".c_int+c_float as x , c_int as c_int, (((c_int+c_float)*10)+5) as y from (select * from \"c/b/o_t1\" where \"c/b/o_t1\".c_int >= 0) as \"c/b/o_t1\" where \"c/b/o_t1\".c_int >= 0");
+    parse("select \"//cbo_t2\".c_int+c_float as x , c_int as c_int, (((c_int+c_float)*10)+5) as y from (select * from \"c/b/o_t1\" where \"c/b/o_t1\".c_int >= 0) as \"//cbo_t2\" where \"//cbo_t2\".c_int >= 0");
+    parse("select * from (select * from \"c/b/o_t1\" where \"c/b/o_t1\".c_int >= 0) as \"c/b/o_t1\" where \"c/b/o_t1\".c_int >= 0");
+    parse("select * from (select * from \"c/b/o_t1\" as \"c/b/o_t1\"  where \"c/b/o_t1\".c_int >= 0 and c_float+c_int >= 0 or c_float <= 100) as \"c/b/o_t1\"  where \"c/b/o_t1\".c_int >= 0 and c_float+c_int >= 0 or c_float <= 100");
+    parse("select * from (select * from \"c/b/o_t1\" as \"//cbo_t2\" where \"//cbo_t2\".c_int >= 0 and c_float+c_int >= 0 or c_float <= 100) as \"//cbo_t2\" where \"//cbo_t2\".c_int >= 0 and c_float+c_int >= 0 or c_float <= 100");
+    parse("select * from (select \"//cbo_t2\".key as x, c_int as c_int, (((c_int+c_float)*10)+5) as y from \"c/b/o_t1\" as \"//cbo_t2\"  where \"//cbo_t2\".c_int >= 0 and c_float+c_int >= 0 or c_float <= 100) as \"c/b/o_t1\" where \"c/b/o_t1\".c_int >= 0 and y+c_int >= 0 or x <= 100");
+    parse("select \"c/b/o_t1\".c_int+c_float as x , c_int as c_int, (((c_int+c_float)*10)+5) as y from (select * from \"c/b/o_t1\" where \"c/b/o_t1\".c_int >= 0) as \"c/b/o_t1\" where \"c/b/o_t1\".c_int >= 0");
+    parse("select \"//cbo_t2\".c_int+c_float as x , c_int as c_int, (((c_int+c_float)*10)+5) as y from (select * from \"c/b/o_t1\" where \"c/b/o_t1\".c_int >= 0) as \"//cbo_t2\" where \"//cbo_t2\".c_int >= 0");
+  }
+
+  @Test
+  public void testNullExprInSelectList() throws ParseException {
+    parse("select null from \"cbo_/t3////\"");
+  }
+
+  @Test
+  public void testUnaryOperator() throws ParseException {
+    parse("select key from \"c/b/o_t1\" where c_int = -6  or c_int = +6");
+  }
+
+  @Test
+  public void testQueryReferencingOnlyPartitionColumns() throws ParseException {
+    parse("select count(\"c/b/o_t1\".dt) from \"c/b/o_t1\" join \"//cbo_t2\" on \"c/b/o_t1\".dt  = \"//cbo_t2\".dt  where \"c/b/o_t1\".dt = '2014' ");
+  }
+
+  @Test
+  public void testGetStatsWithEmptyPartitionList() throws ParseException {
+    parse("select \"c/b/o_t1\".value from \"c/b/o_t1\" join \"//cbo_t2\" on \"c/b/o_t1\".key = \"//cbo_t2\".key where \"c/b/o_t1\".dt = '10' and \"c/b/o_t1\".c_boolean = true");
+  }
+
+  @Test
+  public void testSubQueriesNotExistsDistinctCorr() throws ParseException {
+    parse("select * \n" +
+        "\n" +
+        "from \"src/_/cbo\" b \n" +
+        "\n" +
+        "where not exists \n" +
+        "\n" +
+        "  (select distinct a.key \n" +
+        "\n" +
+        "  from \"src/_/cbo\" a \n" +
+        "\n" +
+        "  where b.value = a.value and a.value > 'val_2'\n" +
+        "\n" +
+        "  )\n" +
+        "\n");
+  }
+
+  @Test
+  public void testSubQueriesNotExistsNoAggCorrHaving() throws ParseException {
+    parse("select * \n" +
+        "\n" +
+        "from \"src/_/cbo\" b \n" +
+        "\n" +
+        "group by key, value\n" +
+        "\n" +
+        "having not exists \n" +
+        "\n" +
+        "  (select a.key \n" +
+        "\n" +
+        "  from \"src/_/cbo\" a \n" +
+        "\n" +
+        "  where b.value = a.value  and a.key = b.key and a.value > 'val_12'\n" +
+        "\n" +
+        "  )\n" +
+        "\n");
+  }
+
+  @Test
+  public void testSubQueryInFrom() throws ParseException {
+    parse("select * \n" +
+        "\n" +
+        "from (select * \n" +
+        "\n" +
+        "      from \"src/_/cbo\" b \n" +
+        "\n" +
+        "      where exists \n" +
+        "\n" +
+        "          (select a.key \n" +
+        "\n" +
+        "          from \"src/_/cbo\" a \n" +
+        "\n" +
+        "          where b.value = a.value  and a.key = b.key and a.value > 'val_9')\n" +
+        "\n" +
+        "     ) a\n" +
+        "\n");
+  }
+
+  @Test
+  public void testSubQueryIn() throws ParseException {
+    // from, having
+    parse("select *\n" +
+        "\n" +
+        "from (select b.key, count(*) \n" +
+        "\n" +
+        "  from \"src/_/cbo\" b \n" +
+        "\n" +
+        "  group by b.key\n" +
+        "\n" +
+        "  having exists \n" +
+        "\n" +
+        "    (select a.key \n" +
+        "\n" +
+        "    from \"src/_/cbo\" a \n" +
+        "\n" +
+        "    where a.key = b.key and a.value > 'val_9'\n" +
+        "\n" +
+        "    )\n" +
+        "\n" +
+        ") a\n" +
+        "\n");
+
+    // non agg, non corr
+    parse("select * \n" +
+        "\n" +
+        "from \"src/_/cbo\" \n" +
+        "\n" +
+        "where \"src/_/cbo\".key in (select key from \"src/_/cbo\" s1 where s1.key > '9') order by key\n" +
+        "\n");
+
+    // distinct, corr
+    parse("select * \n" +
+        "\n" +
+        "from \"src/_/cbo\" b \n" +
+        "\n" +
+        "where b.key in\n" +
+        "\n" +
+        "        (select distinct a.key \n" +
+        "\n" +
+        "         from \"src/_/cbo\" a \n" +
+        "\n" +
+        "         where b.value = a.value and a.key > '9'\n" +
+        "\n" +
+        "        ) order by b.key\n" +
+        "\n");
+
+    // non agg, corr, with join in Parent Query
+    parse("select p.p_partkey, li.l_suppkey \n" +
+        "\n" +
+        "from (select distinct l_partkey as p_partkey from \"line/item\") p join \"line/item\" li on p.p_partkey = li.l_partkey \n" +
+        "\n" +
+        "where li.l_linenumber = 1 and\n" +
+        "\n" +
+        " li.l_orderkey in (select l_orderkey from \"line/item\" where l_shipmode = 'AIR' and l_linenumber = li.l_linenumber)\n" +
+        "\n" +
+        " order by p.p_partkey\n" +
+        "\n");
+
+    // where and having
+    parse("select key, value, count(*) \n" +
+        "\n" +
+        "from \"src/_/cbo\" b\n" +
+        "\n" +
+        "where b.key in (select key from \"src/_/cbo\" where \"src/_/cbo\".key > '8')\n" +
+        "\n" +
+        "group by key, value\n" +
+        "\n" +
+        "having count(*) in (select count(*) from \"src/_/cbo\" s1 where s1.key > '9' group by s1.key ) order by key\n" +
+        "\n");
+
+    // non agg, non corr, windowing
+    parse("select p_mfgr, p_name, avg(p_size) \n" +
+        "\n" +
+        "from \"p/a/r/t\" \n" +
+        "\n" +
+        "group by p_mfgr, p_name\n" +
+        "\n" +
+        "having p_name in \n" +
+        "\n" +
+        "  (select first_value(p_name) over(partition by p_mfgr order by p_size) from \"p/a/r/t\") order by p_mfgr\n");
+  }
+
+  @Test
+  public void testSubQueriesNotIn() throws ParseException {
+    // non agg, non corr
+    parse("select * \n" +
+        "\n" +
+        "from \"src/_/cbo\" \n" +
+        "\n" +
+        "where \"src/_/cbo\".key not in  \n" +
+        "\n" +
+        "  ( select key  from \"src/_/cbo\" s1 \n" +
+        "\n" +
+        "    where s1.key > '2'\n" +
+        "\n" +
+        "  ) order by key\n" +
+        "\n");
+
+    // non agg, corr
+    parse("select p_mfgr, b.p_name, p_size \n" +
+        "\n" +
+        "from \"p/a/r/t\" b \n" +
+        "\n" +
+        "where b.p_name not in \n" +
+        "\n" +
+        "  (select p_name \n" +
+        "\n" +
+        "  from (select p_mfgr, p_name, p_size as r from \"p/a/r/t\") a \n" +
+        "\n" +
+        "  where r < 10 and b.p_mfgr = a.p_mfgr \n" +
+        "\n" +
+        "  ) order by p_mfgr,p_size");
+
+    // agg, non corr
+    parse("" +
+        "select p_name, p_size \n" +
+        "\n" +
+        "from \n" +
+        "\n" +
+        "\"p/a/r/t\" where \"p/a/r/t\".p_size not in \n" +
+        "\n" +
+        "  (select avg(p_size) \n" +
+        "\n" +
+        "  from (select p_size from \"p/a/r/t\") a \n" +
+        "\n" +
+        "  where p_size < 10\n" +
+        "\n" +
+        "  ) order by p_name\n");
+
+    // agg, corr
+    parse("" +
+        "select p_mfgr, p_name, p_size \n" +
+        "\n" +
+        "from \"p/a/r/t\" b where b.p_size not in \n" +
+        "\n" +
+        "  (select min(p_size) \n" +
+        "\n" +
+        "  from (select p_mfgr, p_size from \"p/a/r/t\") a \n" +
+        "\n" +
+        "  where p_size < 10 and b.p_mfgr = a.p_mfgr\n" +
+        "\n" +
+        "  ) order by  p_name\n");
+
+    // non agg, non corr, Group By in Parent Query
+    parse("select li.l_partkey, count(*) \n" +
+        "\n" +
+        "from \"line/item\" li \n" +
+        "\n" +
+        "where li.l_linenumber = 1 and \n" +
+        "\n" +
+        "  li.l_orderkey not in (select l_orderkey from \"line/item\" where l_shipmode = 'AIR') \n" +
+        "\n" +
+        "group by li.l_partkey order by li.l_partkey\n");
+
+    // non agg, corr, having
+    parse("select b.p_mfgr, min(p_retailprice) \n" +
+        "\n" +
+        "from \"p/a/r/t\" b \n" +
+        "\n" +
+        "group by b.p_mfgr\n" +
+        "\n" +
+        "having b.p_mfgr not in \n" +
+        "\n" +
+        "  (select p_mfgr \n" +
+        "\n" +
+        "  from (select p_mfgr, min(p_retailprice) l, max(p_retailprice) r, avg(p_retailprice) a from \"p/a/r/t\" group by p_mfgr) a \n" +
+        "\n" +
+        "  where min(p_retailprice) = l and r - l > 600\n" +
+        "\n" +
+        "  )\n" +
+        "\n" +
+        "  order by b.p_mfgr\n");
+
+    // agg, non corr, having
+    parse("select b.p_mfgr, min(p_retailprice) \n" +
+        "\n" +
+        "from \"p/a/r/t\" b \n" +
+        "\n" +
+        "group by b.p_mfgr\n" +
+        "\n" +
+        "having b.p_mfgr not in \n" +
+        "\n" +
+        "  (select p_mfgr \n" +
+        "\n" +
+        "  from \"p/a/r/t\" a\n" +
+        "\n" +
+        "  group by p_mfgr\n" +
+        "\n" +
+        "  having max(p_retailprice) - min(p_retailprice) > 600\n" +
+        "\n" +
+        "  )\n" +
+        "\n" +
+        "  order by b.p_mfgr  \n");
+  }
+
+  @Test
+  public void testUDF_UDAF() throws ParseException {
+    parse("select count(*), count(c_int), sum(c_int), avg(c_int), max(c_int), min(c_int) from \"c/b/o_t1\"");
+    parse("select count(*), count(c_int) as a, sum(c_int), avg(c_int), max(c_int), min(c_int), case c_int when 0  then 1 when 1 then 2 else 3 end, sum(case c_int when 0  then 1 when 1 then 2 else 3 end) from \"c/b/o_t1\" group by c_int order by a");
+    parse("select * from (select count(*) as a, count(distinct c_int) as b, sum(c_int) as c, avg(c_int) as d, max(c_int) as e, min(c_int) as f from \"c/b/o_t1\") \"c/b/o_t1\"");
+    parse("select * from (select count(*) as a, count(distinct c_int) as b, sum(c_int) as c, avg(c_int) as d, max(c_int) as e, min(c_int) as f, case c_int when 0  then 1 when 1 then 2 else 3 end as g, sum(case c_int when 0  then 1 when 1 then 2 else 3 end) as h from \"c/b/o_t1\" group by c_int) \"c/b/o_t1\" order by a");
+    parse("select f,a,e,b from (select count(*) as a, count(c_int) as b, sum(c_int) as c, avg(c_int) as d, max(c_int) as e, min(c_int) as f from \"c/b/o_t1\") \"c/b/o_t1\"");
+    parse("select f,a,e,b from (select count(*) as a, count(distinct c_int) as b, sum(distinct c_int) as c, avg(distinct c_int) as d, max(distinct c_int) as e, min(distinct c_int) as f from \"c/b/o_t1\") \"c/b/o_t1\"");
+    parse("select key,count(c_int) as a, avg(c_float) from \"c/b/o_t1\" group by key order by a");
+    parse("select count(distinct c_int) as a, avg(c_float) from \"c/b/o_t1\" group by c_float order by a");
+    parse("select count(distinct c_int) as a, avg(c_float) from \"c/b/o_t1\" group by c_int order by a");
+    parse("select count(distinct c_int) as a, avg(c_float) from \"c/b/o_t1\" group by c_float, c_int order by a");
+  }
+
+  @Test
+  public void testUnionAll() throws ParseException {
+    parse("select * from (select * from \"c/b/o_t1\" order by key, c_boolean, value, dt)a union all select * from (select * from \"//cbo_t2\" order by key, c_boolean, value, dt)b");
+    parse("select key from (select key, c_int from (select * from \"c/b/o_t1\" union all select * from \"//cbo_t2\" where \"//cbo_t2\".key >=0)r1 union all select key, c_int from \"cbo_/t3////\")r2 where key >=0 order by key");
+    parse("select r2.key from (select key, c_int from (select key, c_int from \"c/b/o_t1\" union all select key, c_int from \"cbo_/t3////\" )r1 union all select key, c_int from \"cbo_/t3////\")r2 join   (select key, c_int from (select * from \"c/b/o_t1\" union all select * from \"//cbo_t2\" where \"//cbo_t2\".key >=0)r1 union all select key, c_int from \"cbo_/t3////\")r3 on r2.key=r3.key where r3.key >=0 order by r2.key");
+  }
+
+  @Test
+  public void testCreateView() throws ParseException {
+    parse("create view v1_n7 as select c_int, value, c_boolean, dt from \"c/b/o_t1\"");
+    parse("create view v2_n2 as select c_int, value from \"//cbo_t2\"");
+    parse("create view v3_n0 as select v1_n7.value val from v1_n7 join \"c/b/o_t1\" on v1_n7.c_boolean = \"c/b/o_t1\".c_boolean");
+  }
+
+  @Test
+  public void testWithClause() throws ParseException {
+    parse("with q1 as ( select key from \"c/b/o_t1\" where key = '1')\n" +
+        "select count(*) from q1");
+    parse("with q1 as ( select key,c_int from \"c/b/o_t1\"  where key = '1')\n" +
+        "select * from q1");
+    parse("with q1 as ( select \"c/b/o_t1\".c_int c_int from q2 join \"c/b/o_t1\" where q2.c_int = \"c/b/o_t1\".c_int  and \"c/b/o_t1\".dt='2014'),\n" +
+        "q2 as ( select c_int,c_boolean from v1_n7  where value = '1' or dt = '14')\n" +
+        "select count(*) from q1 join q2 join v4_n0 on q1.c_int = q2.c_int and v4_n0.c_int = q2.c_int");
+  }
+
+  @Test
+  public void testWindowingFunctions() throws ParseException {
+    parse("select count(c_int) over() from \"c/b/o_t1\"");
+    parse("select count(c_int) over(partition by c_float order by key), sum(c_float) over(partition by c_float order by key), max(c_int) over(partition by c_float order by key), min(c_int) over(partition by c_float order by key), row_number() over(partition by c_float order by key) as rn, rank() over(partition by c_float order by key), dense_rank() over(partition by c_float order by key), round(percent_rank() over(partition by c_float order by key), 2), lead(c_int, 2, c_int) over(partiti [...]
+    parse("select * from (select count(c_int) over(partition by c_float order by key), sum(c_float) over(partition by c_float order by key), max(c_int) over(partition by c_float order by key), min(c_int) over(partition by c_float order by key), row_number() over(partition by c_float order by key) as rn, rank() over(partition by c_float order by key), dense_rank() over(partition by c_float order by key), round(percent_rank() over(partition by c_float order by key),2), lead(c_int, 2, c_int [...]
+    parse("select x from (select count(c_int) over() as x, sum(c_float) over() from \"c/b/o_t1\") \"c/b/o_t1\"");
+    parse("select 1+sum(c_int) over() from \"c/b/o_t1\"");
+    parse("select sum(c_int)+sum(sum(c_int)) over() from \"c/b/o_t1\"");
+    parse("select * from (select max(c_int) over (partition by key order by value Rows UNBOUNDED PRECEDING), min(c_int) over (partition by key order by value rows current row), count(c_int) over(partition by key order by value ROWS 1 PRECEDING), avg(value) over (partition by key order by value Rows between unbounded preceding and unbounded following), sum(value) over (partition by key order by value rows between unbounded preceding and current row), avg(c_float) over (partition by key or [...]
+    parse("select i, a, h, b, c, d, e, f, g, a as x, a +1 as y from (select max(c_int) over (partition by key order by value range UNBOUNDED PRECEDING) a, min(c_int) over (partition by key order by value range current row) b, count(c_int) over(partition by key order by value range 1 PRECEDING) c, avg(value) over (partition by key order by value range between unbounded preceding and unbounded following) d, sum(value) over (partition by key order by value range between unbounded preceding  [...]
+    parse("select *, rank() over(partition by key order by value) as rr from default.src1");
+    parse("select *, rank() over(partition by key order by value) from default.src1");
+  }
+
+  @Test
+  public void testInsert() throws ParseException {
+    parse("insert into table \"src/_/cbo\" select * from default.src");
+    parse("insert overwrite table \"src/_/cbo\" select * from default.src");
+    parse("insert into \"t//\" values(1)");
+    parse("insert into \"t//\" values(null)");
+  }
+
+  @Test
+  public void testDropTable() throws ParseException {
+    parse("drop table \"t//\"");
+  }
+
+  @Test
+  public void testExplain() throws ParseException {
+    parse("explain select * from \"t//\"");
+  }
+
+  @Test
+  public void testDropDatabase() throws ParseException {
+    parse("drop database \"db~!@#$%^&*(),<>\" cascade");
+  }
+}
diff --git a/ql/src/test/queries/clientpositive/special_character_in_tabnames_1.q b/ql/src/test/queries/clientpositive/special_character_in_tabnames_1.q
index 5ba6c5b..ed998b7 100644
--- a/ql/src/test/queries/clientpositive/special_character_in_tabnames_1.q
+++ b/ql/src/test/queries/clientpositive/special_character_in_tabnames_1.q
@@ -1,10 +1,5 @@
---! qt:disabled:flaky HIVE-23568
 --! qt:dataset:src1
 --! qt:dataset:src
---! qt:dataset:lineitem
---! qt:dataset:cbo_t3
---! qt:dataset:cbo_t2
---! qt:dataset:cbo_t1
 set hive.cbo.enable=true;
 set hive.exec.check.crossproducts=false;
 set hive.stats.fetch.column.stats=true;
@@ -61,72 +56,26 @@ LOAD DATA LOCAL INPATH '../../data/files/lineitem.txt' OVERWRITE INTO TABLE `lin
 
 create table `src/_/cbo` as select * from default.src;
 
-analyze table `c/b/o_t1` partition (dt) compute statistics;
-
 analyze table `c/b/o_t1` compute statistics for columns key, value, c_int, c_float, c_boolean;
 
-analyze table `//cbo_t2` partition (dt) compute statistics;
-
 analyze table `//cbo_t2` compute statistics for columns key, value, c_int, c_float, c_boolean;
 
-analyze table `cbo_/t3////` compute statistics;
-
 analyze table `cbo_/t3////` compute statistics for columns key, value, c_int, c_float, c_boolean;
 
-analyze table `src/_/cbo` compute statistics;
-
 analyze table `src/_/cbo` compute statistics for columns;
 
-analyze table `p/a/r/t` compute statistics;
-
 analyze table `p/a/r/t` compute statistics for columns;
 
-analyze table `line/item` compute statistics;
-
 analyze table `line/item` compute statistics for columns;
 
 select key, (c_int+1)+2 as x, sum(c_int) from `c/b/o_t1` group by c_float, `c/b/o_t1`.c_int, key;
 
-select x, y, count(*) from (select key, (c_int+c_float+1+2) as x, sum(c_int) as y from `c/b/o_t1` group by c_float, `c/b/o_t1`.c_int, key) R group by y, x;
-
-select `cbo_/t3////`.c_int, c, count(*) from (select key as a, c_int+1 as b, sum(c_int) as c from `c/b/o_t1` where (`c/b/o_t1`.c_int + 1 >= 0) and (`c/b/o_t1`.c_int > 0 or `c/b/o_t1`.c_float >= 0) group by c_float, `c/b/o_t1`.c_int, key order by a) `c/b/o_t1` join (select key as p, c_int+1 as q, sum(c_int) as r from `//cbo_t2` where (`//cbo_t2`.c_int + 1 >= 0) and (`//cbo_t2`.c_int > 0 or `//cbo_t2`.c_float >= 0)  group by c_float, `//cbo_t2`.c_int, key order by q/10 desc, r asc) `//cbo_ [...]
-
-select `cbo_/t3////`.c_int, c, count(*) from (select key as a, c_int+1 as b, sum(c_int) as c from `c/b/o_t1` where (`c/b/o_t1`.c_int + 1 >= 0) and (`c/b/o_t1`.c_int > 0 or `c/b/o_t1`.c_float >= 0)  group by c_float, `c/b/o_t1`.c_int, key having `c/b/o_t1`.c_float > 0 and (c_int >=1 or c_float >= 1) and (c_int + c_float) >= 0 order by b % c asc, b desc) `c/b/o_t1` left outer join (select key as p, c_int+1 as q, sum(c_int) as r from `//cbo_t2` where (`//cbo_t2`.c_int + 1 >= 0) and (`//cbo_ [...]
-
-select `cbo_/t3////`.c_int, c, count(*) from (select key as a, c_int+1 as b, sum(c_int) as c from `c/b/o_t1` where (`c/b/o_t1`.c_int + 1 >= 0) and (`c/b/o_t1`.c_int > 0 or `c/b/o_t1`.c_float >= 0)  group by c_float, `c/b/o_t1`.c_int, key having `c/b/o_t1`.c_float > 0 and (c_int >=1 or c_float >= 1) and (c_int + c_float) >= 0 order by b+c, a desc) `c/b/o_t1` right outer join (select key as p, c_int+1 as q, sum(c_int) as r from `//cbo_t2` where (`//cbo_t2`.c_int + 1 >= 0) and (`//cbo_t2`.c [...]
-
-
-
-select `cbo_/t3////`.c_int, c, count(*) from (select key as a, c_int+1 as b, sum(c_int) as c from `c/b/o_t1` where (`c/b/o_t1`.c_int + 1 >= 0) and (`c/b/o_t1`.c_int > 0 or `c/b/o_t1`.c_float >= 0)  group by c_float, `c/b/o_t1`.c_int, key having `c/b/o_t1`.c_float > 0 and (c_int >=1 or c_float >= 1) and (c_int + c_float) >= 0 order by c+a desc) `c/b/o_t1` full outer join (select key as p, c_int+1 as q, sum(c_int) as r from `//cbo_t2` where (`//cbo_t2`.c_int + 1 >= 0) and (`//cbo_t2`.c_int [...]
-
-
-
-select `cbo_/t3////`.c_int, c, count(*) from (select key as a, c_int+1 as b, sum(c_int) as c from `c/b/o_t1` where (`c/b/o_t1`.c_int + 1 >= 0) and (`c/b/o_t1`.c_int > 0 or `c/b/o_t1`.c_float >= 0)  group by c_float, `c/b/o_t1`.c_int, key having `c/b/o_t1`.c_float > 0 and (c_int >=1 or c_float >= 1) and (c_int + c_float) >= 0) `c/b/o_t1` join (select key as p, c_int+1 as q, sum(c_int) as r from `//cbo_t2` where (`//cbo_t2`.c_int + 1 >= 0) and (`//cbo_t2`.c_int > 0 or `//cbo_t2`.c_float >= [...]
-
-
-
 set hive.cbo.enable=false;
-
 set hive.exec.check.crossproducts=false;
-
-
-
 set hive.stats.fetch.column.stats=true;
-
 set hive.auto.convert.join=false;
 
-
-
 -- 21. Test groupby is empty and there is no other cols in aggr
-
-select unionsrc.key FROM (select 'tst1' as key, count(1) as value from default.src) unionsrc;
-
-
-
-select unionsrc.key, unionsrc.value FROM (select 'tst1' as key, count(1) as value from default.src) unionsrc;
-
-
-
 select unionsrc.key FROM (select 'max' as key, max(c_int) as value from `cbo_/t3////` s1
 
 UNION  ALL
@@ -137,359 +86,42 @@ UNION  ALL
 
         select 'avg' as key,  avg(c_int) as value from `cbo_/t3////` s3) unionsrc order by unionsrc.key;
 
-        
-
-select unionsrc.key, unionsrc.value FROM (select 'max' as key, max(c_int) as value from `cbo_/t3////` s1
-
-UNION  ALL
-
-    select 'min' as key,  min(c_int) as value from `cbo_/t3////` s2
-
-    UNION ALL
-
-        select 'avg' as key,  avg(c_int) as value from `cbo_/t3////` s3) unionsrc order by unionsrc.key;
-
-
-
-select unionsrc.key, count(1) FROM (select 'max' as key, max(c_int) as value from `cbo_/t3////` s1
-
-    UNION  ALL
-
-        select 'min' as key,  min(c_int) as value from `cbo_/t3////` s2
-
-    UNION ALL
-
-        select 'avg' as key,  avg(c_int) as value from `cbo_/t3////` s3) unionsrc group by unionsrc.key order by unionsrc.key;
-
-
-
-set hive.cbo.enable=false;
-
-set hive.exec.check.crossproducts=false;
-
-
-
-set hive.stats.fetch.column.stats=true;
-
-set hive.auto.convert.join=false;
-
-
-
 -- SORT_QUERY_RESULTS
 
 -- 4. Test Select + Join + TS
-
-select `c/b/o_t1`.c_int, `//cbo_t2`.c_int from `c/b/o_t1` join             `//cbo_t2` on `c/b/o_t1`.key=`//cbo_t2`.key;
-
-select `c/b/o_t1`.key from `c/b/o_t1` join `cbo_/t3////`;
-
-select `c/b/o_t1`.key from `c/b/o_t1` join `cbo_/t3////` where `c/b/o_t1`.key=`cbo_/t3////`.key and `c/b/o_t1`.key >= 1;
-
-select `c/b/o_t1`.c_int, `//cbo_t2`.c_int from `c/b/o_t1` left outer join  `//cbo_t2` on `c/b/o_t1`.key=`//cbo_t2`.key;
-
-select `c/b/o_t1`.c_int, `//cbo_t2`.c_int from `c/b/o_t1` right outer join `//cbo_t2` on `c/b/o_t1`.key=`//cbo_t2`.key;
-
-select `c/b/o_t1`.c_int, `//cbo_t2`.c_int from `c/b/o_t1` full outer join  `//cbo_t2` on `c/b/o_t1`.key=`//cbo_t2`.key;
-
-
-
-select b, `c/b/o_t1`.c, `//cbo_t2`.p, q, `cbo_/t3////`.c_int from (select key as a, c_int as b, `c/b/o_t1`.c_float as c from `c/b/o_t1`) `c/b/o_t1` join (select `//cbo_t2`.key as p, `//cbo_t2`.c_int as q, c_float as r from `//cbo_t2`) `//cbo_t2` on `c/b/o_t1`.a=p join `cbo_/t3////` on `c/b/o_t1`.a=key;
-
-select key, `c/b/o_t1`.c_int, `//cbo_t2`.p, q from `c/b/o_t1` join (select `//cbo_t2`.key as p, `//cbo_t2`.c_int as q, c_float as r from `//cbo_t2`) `//cbo_t2` on `c/b/o_t1`.key=p join (select key as a, c_int as b, `cbo_/t3////`.c_float as c from `cbo_/t3////`)`cbo_/t3////` on `c/b/o_t1`.key=a;
-
-select a, `c/b/o_t1`.b, key, `//cbo_t2`.c_int, `cbo_/t3////`.p from (select key as a, c_int as b, `c/b/o_t1`.c_float as c from `c/b/o_t1`) `c/b/o_t1` join `//cbo_t2`  on `c/b/o_t1`.a=key join (select key as p, c_int as q, `cbo_/t3////`.c_float as r from `cbo_/t3////`)`cbo_/t3////` on `c/b/o_t1`.a=`cbo_/t3////`.p;
-
-select b, `c/b/o_t1`.c, `//cbo_t2`.c_int, `cbo_/t3////`.c_int from (select key as a, c_int as b, `c/b/o_t1`.c_float as c from `c/b/o_t1`) `c/b/o_t1` join `//cbo_t2` on `c/b/o_t1`.a=`//cbo_t2`.key join `cbo_/t3////` on `c/b/o_t1`.a=`cbo_/t3////`.key;
-
-select `cbo_/t3////`.c_int, b, `//cbo_t2`.c_int, `c/b/o_t1`.c from (select key as a, c_int as b, `c/b/o_t1`.c_float as c from `c/b/o_t1`) `c/b/o_t1` join `//cbo_t2` on `c/b/o_t1`.a=`//cbo_t2`.key join `cbo_/t3////` on `c/b/o_t1`.a=`cbo_/t3////`.key;
-
-
-
-select b, `c/b/o_t1`.c, `//cbo_t2`.p, q, `cbo_/t3////`.c_int from (select key as a, c_int as b, `c/b/o_t1`.c_float as c from `c/b/o_t1`) `c/b/o_t1` left outer join (select `//cbo_t2`.key as p, `//cbo_t2`.c_int as q, c_float as r from `//cbo_t2`) `//cbo_t2` on `c/b/o_t1`.a=p join `cbo_/t3////` on `c/b/o_t1`.a=key;
-
-select key, `c/b/o_t1`.c_int, `//cbo_t2`.p, q from `c/b/o_t1` join (select `//cbo_t2`.key as p, `//cbo_t2`.c_int as q, c_float as r from `//cbo_t2`) `//cbo_t2` on `c/b/o_t1`.key=p left outer join (select key as a, c_int as b, `cbo_/t3////`.c_float as c from `cbo_/t3////`)`cbo_/t3////` on `c/b/o_t1`.key=a;
-
-
-
-select b, `c/b/o_t1`.c, `//cbo_t2`.p, q, `cbo_/t3////`.c_int from (select key as a, c_int as b, `c/b/o_t1`.c_float as c from `c/b/o_t1`) `c/b/o_t1` right outer join (select `//cbo_t2`.key as p, `//cbo_t2`.c_int as q, c_float as r from `//cbo_t2`) `//cbo_t2` on `c/b/o_t1`.a=p join `cbo_/t3////` on `c/b/o_t1`.a=key;
-
-select key, `c/b/o_t1`.c_int, `//cbo_t2`.p, q from `c/b/o_t1` join (select `//cbo_t2`.key as p, `//cbo_t2`.c_int as q, c_float as r from `//cbo_t2`) `//cbo_t2` on `c/b/o_t1`.key=p right outer join (select key as a, c_int as b, `cbo_/t3////`.c_float as c from `cbo_/t3////`)`cbo_/t3////` on `c/b/o_t1`.key=a;
-
-
-
-select b, `c/b/o_t1`.c, `//cbo_t2`.p, q, `cbo_/t3////`.c_int from (select key as a, c_int as b, `c/b/o_t1`.c_float as c from `c/b/o_t1`) `c/b/o_t1` full outer join (select `//cbo_t2`.key as p, `//cbo_t2`.c_int as q, c_float as r from `//cbo_t2`) `//cbo_t2` on `c/b/o_t1`.a=p join `cbo_/t3////` on `c/b/o_t1`.a=key;
-
-select key, `c/b/o_t1`.c_int, `//cbo_t2`.p, q from `c/b/o_t1` join (select `//cbo_t2`.key as p, `//cbo_t2`.c_int as q, c_float as r from `//cbo_t2`) `//cbo_t2` on `c/b/o_t1`.key=p full outer join (select key as a, c_int as b, `cbo_/t3////`.c_float as c from `cbo_/t3////`)`cbo_/t3////` on `c/b/o_t1`.key=a;
-
-
+explain select `c/b/o_t1`.key from `c/b/o_t1` join `cbo_/t3////`;
 
 -- 5. Test Select + Join + FIL + TS
-
-select `c/b/o_t1`.c_int, `//cbo_t2`.c_int from `c/b/o_t1` join `//cbo_t2` on `c/b/o_t1`.key=`//cbo_t2`.key where (`c/b/o_t1`.c_int + `//cbo_t2`.c_int == 2) and (`c/b/o_t1`.c_int > 0 or `//cbo_t2`.c_float >= 0);
-
-select `c/b/o_t1`.c_int, `//cbo_t2`.c_int from `c/b/o_t1` left outer join  `//cbo_t2` on `c/b/o_t1`.key=`//cbo_t2`.key where (`c/b/o_t1`.c_int + `//cbo_t2`.c_int == 2) and (`c/b/o_t1`.c_int > 0 or `//cbo_t2`.c_float >= 0);
-
-select `c/b/o_t1`.c_int, `//cbo_t2`.c_int from `c/b/o_t1` right outer join `//cbo_t2` on `c/b/o_t1`.key=`//cbo_t2`.key where (`c/b/o_t1`.c_int + `//cbo_t2`.c_int == 2) and (`c/b/o_t1`.c_int > 0 or `//cbo_t2`.c_float >= 0);
-
-select `c/b/o_t1`.c_int, `//cbo_t2`.c_int from `c/b/o_t1` full outer join  `//cbo_t2` on `c/b/o_t1`.key=`//cbo_t2`.key where (`c/b/o_t1`.c_int + `//cbo_t2`.c_int == 2) and (`c/b/o_t1`.c_int > 0 or `//cbo_t2`.c_float >= 0);
-
-
-
-select b, `c/b/o_t1`.c, `//cbo_t2`.p, q, `cbo_/t3////`.c_int from (select key as a, c_int as b, `c/b/o_t1`.c_float as c from `c/b/o_t1`  where (`c/b/o_t1`.c_int + 1 == 2) and (`c/b/o_t1`.c_int > 0 or `c/b/o_t1`.c_float >= 0)) `c/b/o_t1` join (select `//cbo_t2`.key as p, `//cbo_t2`.c_int as q, c_float as r from `//cbo_t2`  where (`//cbo_t2`.c_int + 1 == 2) and (`//cbo_t2`.c_int > 0 or `//cbo_t2`.c_float >= 0)) `//cbo_t2` on `c/b/o_t1`.a=p join `cbo_/t3////` on `c/b/o_t1`.a=key where (b +  [...]
-
-
-
-select q, b, `//cbo_t2`.p, `c/b/o_t1`.c, `cbo_/t3////`.c_int from (select key as a, c_int as b, `c/b/o_t1`.c_float as c from `c/b/o_t1`  where (`c/b/o_t1`.c_int + 1 == 2) and (`c/b/o_t1`.c_int > 0 or `c/b/o_t1`.c_float >= 0)) `c/b/o_t1` left outer join (select `//cbo_t2`.key as p, `//cbo_t2`.c_int as q, c_float as r from `//cbo_t2`  where (`//cbo_t2`.c_int + 1 == 2) and (`//cbo_t2`.c_int > 0 or `//cbo_t2`.c_float >= 0)) `//cbo_t2` on `c/b/o_t1`.a=p join `cbo_/t3////` on `c/b/o_t1`.a=key  [...]
-
-
-
-select q, b, `//cbo_t2`.p, `c/b/o_t1`.c, `cbo_/t3////`.c_int from (select key as a, c_int as b, `c/b/o_t1`.c_float as c from `c/b/o_t1`  where (`c/b/o_t1`.c_int + 1 == 2) and (`c/b/o_t1`.c_int > 0 or `c/b/o_t1`.c_float >= 0)) `c/b/o_t1` right outer join (select `//cbo_t2`.key as p, `//cbo_t2`.c_int as q, c_float as r from `//cbo_t2`  where (`//cbo_t2`.c_int + 1 == 2) and (`//cbo_t2`.c_int > 0 or `//cbo_t2`.c_float >= 0)) `//cbo_t2` on `c/b/o_t1`.a=p join `cbo_/t3////` on `c/b/o_t1`.a=key [...]
-
-
-
-select q, b, `//cbo_t2`.p, `c/b/o_t1`.c, `cbo_/t3////`.c_int from (select key as a, c_int as b, `c/b/o_t1`.c_float as c from `c/b/o_t1`  where (`c/b/o_t1`.c_int + 1 == 2) and (`c/b/o_t1`.c_int > 0 or `c/b/o_t1`.c_float >= 0)) `c/b/o_t1` full outer join (select `//cbo_t2`.key as p, `//cbo_t2`.c_int as q, c_float as r from `//cbo_t2`  where (`//cbo_t2`.c_int + 1 == 2) and (`//cbo_t2`.c_int > 0 or `//cbo_t2`.c_float >= 0)) `//cbo_t2` on `c/b/o_t1`.a=p join `cbo_/t3////` on `c/b/o_t1`.a=key  [...]
-
-
-
-select * from (select q, b, `//cbo_t2`.p, `c/b/o_t1`.c, `cbo_/t3////`.c_int from (select key as a, c_int as b, `c/b/o_t1`.c_float as c from `c/b/o_t1`  where (`c/b/o_t1`.c_int + 1 == 2) and (`c/b/o_t1`.c_int > 0 or `c/b/o_t1`.c_float >= 0)) `c/b/o_t1` full outer join (select `//cbo_t2`.key as p, `//cbo_t2`.c_int as q, c_float as r from `//cbo_t2`  where (`//cbo_t2`.c_int + 1 == 2) and (`//cbo_t2`.c_int > 0 or `//cbo_t2`.c_float >= 0)) `//cbo_t2` on `c/b/o_t1`.a=p join `cbo_/t3////` on `c [...]
-
-
-
-select * from (select q, b, `//cbo_t2`.p, `c/b/o_t1`.c, `cbo_/t3////`.c_int from (select key as a, c_int as b, `c/b/o_t1`.c_float as c from `c/b/o_t1`  where (`c/b/o_t1`.c_int + 1 == 2) and (`c/b/o_t1`.c_int > 0 or `c/b/o_t1`.c_float >= 0)) `c/b/o_t1` left outer join (select `//cbo_t2`.key as p, `//cbo_t2`.c_int as q, c_float as r from `//cbo_t2`  where (`//cbo_t2`.c_int + 1 == 2) and (`//cbo_t2`.c_int > 0 or `//cbo_t2`.c_float >= 0)) `//cbo_t2` on `c/b/o_t1`.a=p left outer join `cbo_/t3 [...]
-
-
-
-select * from (select q, b, `//cbo_t2`.p, `c/b/o_t1`.c, `cbo_/t3////`.c_int from (select key as a, c_int as b, `c/b/o_t1`.c_float as c from `c/b/o_t1`  where (`c/b/o_t1`.c_int + 1 == 2) and (`c/b/o_t1`.c_int > 0 or `c/b/o_t1`.c_float >= 0)) `c/b/o_t1` left outer join (select `//cbo_t2`.key as p, `//cbo_t2`.c_int as q, c_float as r from `//cbo_t2`  where (`//cbo_t2`.c_int + 1 == 2) and (`//cbo_t2`.c_int > 0 or `//cbo_t2`.c_float >= 0)) `//cbo_t2` on `c/b/o_t1`.a=p right outer join `cbo_/t [...]
-
-
-
-select * from (select q, b, `//cbo_t2`.p, `c/b/o_t1`.c, `cbo_/t3////`.c_int from (select key as a, c_int as b, `c/b/o_t1`.c_float as c from `c/b/o_t1`  where (`c/b/o_t1`.c_int + 1 == 2) and (`c/b/o_t1`.c_int > 0 or `c/b/o_t1`.c_float >= 0)) `c/b/o_t1` left outer join (select `//cbo_t2`.key as p, `//cbo_t2`.c_int as q, c_float as r from `//cbo_t2`  where (`//cbo_t2`.c_int + 1 == 2) and (`//cbo_t2`.c_int > 0 or `//cbo_t2`.c_float >= 0)) `//cbo_t2` on `c/b/o_t1`.a=p full outer join `cbo_/t3 [...]
-
-
-
-select * from (select q, b, `//cbo_t2`.p, `c/b/o_t1`.c, `cbo_/t3////`.c_int from (select key as a, c_int as b, `c/b/o_t1`.c_float as c from `c/b/o_t1`  where (`c/b/o_t1`.c_int + 1 == 2) and (`c/b/o_t1`.c_int > 0 or `c/b/o_t1`.c_float >= 0)) `c/b/o_t1` right outer join (select `//cbo_t2`.key as p, `//cbo_t2`.c_int as q, c_float as r from `//cbo_t2`  where (`//cbo_t2`.c_int + 1 == 2) and (`//cbo_t2`.c_int > 0 or `//cbo_t2`.c_float >= 0)) `//cbo_t2` on `c/b/o_t1`.a=p right outer join `cbo_/ [...]
-
-
-
-select * from (select q, b, `//cbo_t2`.p, `c/b/o_t1`.c, `cbo_/t3////`.c_int from (select key as a, c_int as b, `c/b/o_t1`.c_float as c from `c/b/o_t1`  where (`c/b/o_t1`.c_int + 1 == 2) and (`c/b/o_t1`.c_int > 0 or `c/b/o_t1`.c_float >= 0)) `c/b/o_t1` right outer join (select `//cbo_t2`.key as p, `//cbo_t2`.c_int as q, c_float as r from `//cbo_t2`  where (`//cbo_t2`.c_int + 1 == 2) and (`//cbo_t2`.c_int > 0 or `//cbo_t2`.c_float >= 0)) `//cbo_t2` on `c/b/o_t1`.a=p left outer join `cbo_/t [...]
-
-
-
-select * from (select q, b, `//cbo_t2`.p, `c/b/o_t1`.c, `cbo_/t3////`.c_int from (select key as a, c_int as b, `c/b/o_t1`.c_float as c from `c/b/o_t1`  where (`c/b/o_t1`.c_int + 1 == 2) and (`c/b/o_t1`.c_int > 0 or `c/b/o_t1`.c_float >= 0)) `c/b/o_t1` right outer join (select `//cbo_t2`.key as p, `//cbo_t2`.c_int as q, c_float as r from `//cbo_t2`  where (`//cbo_t2`.c_int + 1 == 2) and (`//cbo_t2`.c_int > 0 or `//cbo_t2`.c_float >= 0)) `//cbo_t2` on `c/b/o_t1`.a=p full outer join `cbo_/t [...]
-
-
-
-select * from (select q, b, `//cbo_t2`.p, `c/b/o_t1`.c, `cbo_/t3////`.c_int from (select key as a, c_int as b, `c/b/o_t1`.c_float as c from `c/b/o_t1`  where (`c/b/o_t1`.c_int + 1 == 2) and (`c/b/o_t1`.c_int > 0 or `c/b/o_t1`.c_float >= 0)) `c/b/o_t1` full outer join (select `//cbo_t2`.key as p, `//cbo_t2`.c_int as q, c_float as r from `//cbo_t2`  where (`//cbo_t2`.c_int + 1 == 2) and (`//cbo_t2`.c_int > 0 or `//cbo_t2`.c_float >= 0)) `//cbo_t2` on `c/b/o_t1`.a=p full outer join `cbo_/t3 [...]
-
-
-
-select * from (select q, b, `//cbo_t2`.p, `c/b/o_t1`.c, `cbo_/t3////`.c_int from (select key as a, c_int as b, `c/b/o_t1`.c_float as c from `c/b/o_t1`  where (`c/b/o_t1`.c_int + 1 == 2) and (`c/b/o_t1`.c_int > 0 or `c/b/o_t1`.c_float >= 0)) `c/b/o_t1` full outer join (select `//cbo_t2`.key as p, `//cbo_t2`.c_int as q, c_float as r from `//cbo_t2`  where (`//cbo_t2`.c_int + 1 == 2) and (`//cbo_t2`.c_int > 0 or `//cbo_t2`.c_float >= 0)) `//cbo_t2` on `c/b/o_t1`.a=p left outer join `cbo_/t3 [...]
-
-
-
-select * from (select q, b, `//cbo_t2`.p, `c/b/o_t1`.c, `cbo_/t3////`.c_int from (select key as a, c_int as b, `c/b/o_t1`.c_float as c from `c/b/o_t1`  where (`c/b/o_t1`.c_int + 1 == 2) and (`c/b/o_t1`.c_int > 0 or `c/b/o_t1`.c_float >= 0)) `c/b/o_t1` full outer join (select `//cbo_t2`.key as p, `//cbo_t2`.c_int as q, c_float as r from `//cbo_t2`  where (`//cbo_t2`.c_int + 1 == 2) and (`//cbo_t2`.c_int > 0 or `//cbo_t2`.c_float >= 0)) `//cbo_t2` on `c/b/o_t1`.a=p right outer join `cbo_/t [...]
-
-
-
-set hive.cbo.enable=false;
-
-set hive.exec.check.crossproducts=false;
-
-
-
-set hive.stats.fetch.column.stats=true;
-
-set hive.auto.convert.join=false;
-
+explain select `c/b/o_t1`.c_int, `//cbo_t2`.c_int from `c/b/o_t1` join `//cbo_t2` on `c/b/o_t1`.key=`//cbo_t2`.key where (`c/b/o_t1`.c_int + `//cbo_t2`.c_int == 2) and (`c/b/o_t1`.c_int > 0 or `//cbo_t2`.c_float >= 0);
 
 
 -- 7. Test Select + TS + Join + Fil + GB + GB Having + Limit
-
-select key, (c_int+1)+2 as x, sum(c_int) from `c/b/o_t1` group by c_float, `c/b/o_t1`.c_int, key order by x limit 1;
-
-select x, y, count(*) from (select key, (c_int+c_float+1+2) as x, sum(c_int) as y from `c/b/o_t1` group by c_float, `c/b/o_t1`.c_int, key) R group by y, x order by x,y limit 1;
-
-select key from(select key from (select key from `c/b/o_t1` limit 5)`//cbo_t2`  limit 5)`cbo_/t3////`  limit 5;
-
-select key, c_int from(select key, c_int from (select key, c_int from `c/b/o_t1` order by c_int limit 5)`c/b/o_t1`  order by c_int limit 5)`//cbo_t2`  order by c_int limit 5;
-
-
-
-select `cbo_/t3////`.c_int, c, count(*) from (select key as a, c_int+1 as b, sum(c_int) as c from `c/b/o_t1` where (`c/b/o_t1`.c_int + 1 >= 0) and (`c/b/o_t1`.c_int > 0 or `c/b/o_t1`.c_float >= 0) group by c_float, `c/b/o_t1`.c_int, key order by a limit 5) `c/b/o_t1` join (select key as p, c_int+1 as q, sum(c_int) as r from `//cbo_t2` where (`//cbo_t2`.c_int + 1 >= 0) and (`//cbo_t2`.c_int > 0 or `//cbo_t2`.c_float >= 0)  group by c_float, `//cbo_t2`.c_int, key order by q/10 desc, r asc  [...]
-
-
-
-select `cbo_/t3////`.c_int, c, count(*) from (select key as a, c_int+1 as b, sum(c_int) as c from `c/b/o_t1` where (`c/b/o_t1`.c_int + 1 >= 0) and (`c/b/o_t1`.c_int > 0 or `c/b/o_t1`.c_float >= 0)  group by c_float, `c/b/o_t1`.c_int, key having `c/b/o_t1`.c_float > 0 and (c_int >=1 or c_float >= 1) and (c_int + c_float) >= 0 order by b % c asc, b desc limit 5) `c/b/o_t1` left outer join (select key as p, c_int+1 as q, sum(c_int) as r from `//cbo_t2` where (`//cbo_t2`.c_int + 1 >= 0) and  [...]
-
-set hive.cbo.enable=false;
-
-set hive.exec.check.crossproducts=false;
-
-
-
-set hive.stats.fetch.column.stats=true;
-
-set hive.auto.convert.join=false;
-
-
+explain select key, (c_int+1)+2 as x, sum(c_int) from `c/b/o_t1` group by c_float, `c/b/o_t1`.c_int, key order by x limit 1;
 
 -- 12. SemiJoin
-
-select `c/b/o_t1`.c_int           from `c/b/o_t1` left semi join   `//cbo_t2` on `c/b/o_t1`.key=`//cbo_t2`.key;
-
-select `c/b/o_t1`.c_int           from `c/b/o_t1` left semi join   `//cbo_t2` on `c/b/o_t1`.key=`//cbo_t2`.key where (`c/b/o_t1`.c_int + 1 == 2) and (`c/b/o_t1`.c_int > 0 or `c/b/o_t1`.c_float >= 0);
-
-select * from (select c, b, a from (select key as a, c_int as b, `c/b/o_t1`.c_float as c from `c/b/o_t1`  where (`c/b/o_t1`.c_int + 1 == 2) and (`c/b/o_t1`.c_int > 0 or `c/b/o_t1`.c_float >= 0)) `c/b/o_t1` left semi join (select `//cbo_t2`.key as p, `//cbo_t2`.c_int as q, c_float as r from `//cbo_t2`  where (`//cbo_t2`.c_int + 1 == 2) and (`//cbo_t2`.c_int > 0 or `//cbo_t2`.c_float >= 0)) `//cbo_t2` on `c/b/o_t1`.a=p left semi join `cbo_/t3////` on `c/b/o_t1`.a=key where (b + 1 == 2) and [...]
-
-select * from (select `cbo_/t3////`.c_int, `c/b/o_t1`.c, b from (select key as a, c_int as b, `c/b/o_t1`.c_float as c from `c/b/o_t1`  where (`c/b/o_t1`.c_int + 1 = 2) and (`c/b/o_t1`.c_int > 0 or `c/b/o_t1`.c_float >= 0)) `c/b/o_t1` left semi join (select `//cbo_t2`.key as p, `//cbo_t2`.c_int as q, c_float as r from `//cbo_t2`  where (`//cbo_t2`.c_int + 1 == 2) and (`//cbo_t2`.c_int > 0 or `//cbo_t2`.c_float >= 0)) `//cbo_t2` on `c/b/o_t1`.a=p left outer join `cbo_/t3////` on `c/b/o_t1` [...]
-
-select * from (select c_int, b, `c/b/o_t1`.c from (select key as a, c_int as b, `c/b/o_t1`.c_float as c from `c/b/o_t1`  where (`c/b/o_t1`.c_int + 1 == 2) and (`c/b/o_t1`.c_int > 0 or `c/b/o_t1`.c_float >= 0)) `c/b/o_t1` left semi join (select `//cbo_t2`.key as p, `//cbo_t2`.c_int as q, c_float as r from `//cbo_t2`  where (`//cbo_t2`.c_int + 1 == 2) and (`//cbo_t2`.c_int > 0 or `//cbo_t2`.c_float >= 0)) `//cbo_t2` on `c/b/o_t1`.a=p right outer join `cbo_/t3////` on `c/b/o_t1`.a=key where [...]
-
-select * from (select c_int, b, `c/b/o_t1`.c from (select key as a, c_int as b, `c/b/o_t1`.c_float as c from `c/b/o_t1`  where (`c/b/o_t1`.c_int + 1 == 2) and (`c/b/o_t1`.c_int > 0 or `c/b/o_t1`.c_float >= 0)) `c/b/o_t1` left semi join (select `//cbo_t2`.key as p, `//cbo_t2`.c_int as q, c_float as r from `//cbo_t2`  where (`//cbo_t2`.c_int + 1 == 2) and (`//cbo_t2`.c_int > 0 or `//cbo_t2`.c_float >= 0)) `//cbo_t2` on `c/b/o_t1`.a=p full outer join `cbo_/t3////` on `c/b/o_t1`.a=key where  [...]
-
-select a, c, count(*) from (select key as a, c_int+1 as b, sum(c_int) as c from `c/b/o_t1` where (`c/b/o_t1`.c_int + 1 >= 0) and (`c/b/o_t1`.c_int > 0 or `c/b/o_t1`.c_float >= 0)  group by c_float, `c/b/o_t1`.c_int, key having `c/b/o_t1`.c_float > 0 and (c_int >=1 or c_float >= 1) and (c_int + c_float) >= 0 order by a+b desc, c asc) `c/b/o_t1` left semi join (select key as p, c_int+1 as q, sum(c_int) as r from `//cbo_t2` where (`//cbo_t2`.c_int + 1 >= 0) and (`//cbo_t2`.c_int > 0 or `//c [...]
-
-select a, c, count(*)  from (select key as a, c_int+1 as b, sum(c_int) as c from `c/b/o_t1` where (`c/b/o_t1`.c_int + 1 >= 0) and (`c/b/o_t1`.c_int > 0 or `c/b/o_t1`.c_float >= 0)  group by c_float, `c/b/o_t1`.c_int, key having `c/b/o_t1`.c_float > 0 and (c_int >=1 or c_float >= 1) and (c_int + c_float) >= 0 order by a+b desc, c asc limit 5) `c/b/o_t1` left semi join (select key as p, c_int+1 as q, sum(c_int) as r from `//cbo_t2` where (`//cbo_t2`.c_int + 1 >= 0) and (`//cbo_t2`.c_int >  [...]
-
-
-
-set hive.cbo.enable=false;
-
-set hive.exec.check.crossproducts=false;
-
-
-
-set hive.stats.fetch.column.stats=true;
-
-set hive.auto.convert.join=false;
-
+explain select `c/b/o_t1`.c_int           from `c/b/o_t1` left semi join   `//cbo_t2` on `c/b/o_t1`.key=`//cbo_t2`.key;
 
 
 -- 1. Test Select + TS
-
-select * from `c/b/o_t1`;
-
-select * from `c/b/o_t1` as `c/b/o_t1`;
-
-select * from `c/b/o_t1` as `//cbo_t2`;
-
-
-
-select `c/b/o_t1`.key as x, c_int as c_int, (((c_int+c_float)*10)+5) as y from `c/b/o_t1`;
-
-select * from `c/b/o_t1` where (((key=1) and (c_float=10)) and (c_int=20)); 
-
-
+explain select * from `c/b/o_t1` as `c/b/o_t1`;
 
 -- 2. Test Select + TS + FIL
-
-select * from `c/b/o_t1` where `c/b/o_t1`.c_int >= 0;
-
-select * from `c/b/o_t1` as `c/b/o_t1`  where `c/b/o_t1`.c_int >= 0 and c_float+c_int >= 0 or c_float <= 100;
-
-select * from `c/b/o_t1` as `//cbo_t2` where `//cbo_t2`.c_int >= 0 and c_float+c_int >= 0 or c_float <= 100;
-
-
-
-select `//cbo_t2`.key as x, c_int as c_int, (((c_int+c_float)*10)+5) as y from `c/b/o_t1` as `//cbo_t2`  where `//cbo_t2`.c_int >= 0 and c_float+c_int >= 0 or c_float <= 100;
-
-
+explain select * from `c/b/o_t1` as `c/b/o_t1`  where `c/b/o_t1`.c_int >= 0 and c_float+c_int >= 0 or c_float <= 100;
 
 -- 3 Test Select + Select + TS + FIL
-
-select * from (select * from `c/b/o_t1` where `c/b/o_t1`.c_int >= 0) as `c/b/o_t1`;
-
-select * from (select * from `c/b/o_t1` as `c/b/o_t1`  where `c/b/o_t1`.c_int >= 0 and c_float+c_int >= 0 or c_float <= 100) as `c/b/o_t1`;
-
-select * from (select * from `c/b/o_t1` as `//cbo_t2` where `//cbo_t2`.c_int >= 0 and c_float+c_int >= 0 or c_float <= 100) as `c/b/o_t1`;
-
-select * from (select `//cbo_t2`.key as x, c_int as c_int, (((c_int+c_float)*10)+5) as y from `c/b/o_t1` as `//cbo_t2`  where `//cbo_t2`.c_int >= 0 and c_float+c_int >= 0 or c_float <= 100) as `c/b/o_t1`;
-
-
-
-select * from (select * from `c/b/o_t1` where `c/b/o_t1`.c_int >= 0) as `c/b/o_t1` where `c/b/o_t1`.c_int >= 0;
-
-select * from (select * from `c/b/o_t1` as `c/b/o_t1`  where `c/b/o_t1`.c_int >= 0 and c_float+c_int >= 0 or c_float <= 100) as `c/b/o_t1`  where `c/b/o_t1`.c_int >= 0 and c_float+c_int >= 0 or c_float <= 100;
-
-select * from (select * from `c/b/o_t1` as `//cbo_t2` where `//cbo_t2`.c_int >= 0 and c_float+c_int >= 0 or c_float <= 100) as `//cbo_t2` where `//cbo_t2`.c_int >= 0 and c_float+c_int >= 0 or c_float <= 100;
-
-select * from (select `//cbo_t2`.key as x, c_int as c_int, (((c_int+c_float)*10)+5) as y from `c/b/o_t1` as `//cbo_t2`  where `//cbo_t2`.c_int >= 0 and c_float+c_int >= 0 or c_float <= 100) as `c/b/o_t1` where `c/b/o_t1`.c_int >= 0 and y+c_int >= 0 or x <= 100;
-
-
-
-select `c/b/o_t1`.c_int+c_float as x , c_int as c_int, (((c_int+c_float)*10)+5) as y from (select * from `c/b/o_t1` where `c/b/o_t1`.c_int >= 0) as `c/b/o_t1` where `c/b/o_t1`.c_int >= 0;
-
-select `//cbo_t2`.c_int+c_float as x , c_int as c_int, (((c_int+c_float)*10)+5) as y from (select * from `c/b/o_t1` where `c/b/o_t1`.c_int >= 0) as `//cbo_t2` where `//cbo_t2`.c_int >= 0;
-
-
-
-
-
-
-
-select * from (select * from `c/b/o_t1` where `c/b/o_t1`.c_int >= 0) as `c/b/o_t1` where `c/b/o_t1`.c_int >= 0;
-
-select * from (select * from `c/b/o_t1` as `c/b/o_t1`  where `c/b/o_t1`.c_int >= 0 and c_float+c_int >= 0 or c_float <= 100) as `c/b/o_t1`  where `c/b/o_t1`.c_int >= 0 and c_float+c_int >= 0 or c_float <= 100;
-
-select * from (select * from `c/b/o_t1` as `//cbo_t2` where `//cbo_t2`.c_int >= 0 and c_float+c_int >= 0 or c_float <= 100) as `//cbo_t2` where `//cbo_t2`.c_int >= 0 and c_float+c_int >= 0 or c_float <= 100;
-
-select * from (select `//cbo_t2`.key as x, c_int as c_int, (((c_int+c_float)*10)+5) as y from `c/b/o_t1` as `//cbo_t2`  where `//cbo_t2`.c_int >= 0 and c_float+c_int >= 0 or c_float <= 100) as `c/b/o_t1` where `c/b/o_t1`.c_int >= 0 and y+c_int >= 0 or x <= 100;
-
-
-
-select `c/b/o_t1`.c_int+c_float as x , c_int as c_int, (((c_int+c_float)*10)+5) as y from (select * from `c/b/o_t1` where `c/b/o_t1`.c_int >= 0) as `c/b/o_t1` where `c/b/o_t1`.c_int >= 0;
-
-select `//cbo_t2`.c_int+c_float as x , c_int as c_int, (((c_int+c_float)*10)+5) as y from (select * from `c/b/o_t1` where `c/b/o_t1`.c_int >= 0) as `//cbo_t2` where `//cbo_t2`.c_int >= 0;
-
-
-
-
-
-
+explain select * from (select * from `c/b/o_t1` where `c/b/o_t1`.c_int >= 0) as `c/b/o_t1`;
 
 -- 13. null expr in select list
-
-select null from `cbo_/t3////`;
-
-
+explain select null from `cbo_/t3////`;
 
 -- 14. unary operator
-
-select key from `c/b/o_t1` where c_int = -6  or c_int = +6;
-
-
+explain select key from `c/b/o_t1` where c_int = -6  or c_int = +6;
 
 -- 15. query referencing only partition columns
-
-select count(`c/b/o_t1`.dt) from `c/b/o_t1` join `//cbo_t2` on `c/b/o_t1`.dt  = `//cbo_t2`.dt  where `c/b/o_t1`.dt = '2014' ;
-
-set hive.cbo.enable=false;
-
-set hive.exec.check.crossproducts=false;
-
-
-
-set hive.stats.fetch.column.stats=true;
-
-set hive.auto.convert.join=false;
-
-
+explain select count(`c/b/o_t1`.dt) from `c/b/o_t1` join `//cbo_t2` on `c/b/o_t1`.dt  = `//cbo_t2`.dt  where `c/b/o_t1`.dt = '2014' ;
 
 -- 20. Test get stats with empty partition list
-
-select `c/b/o_t1`.value from `c/b/o_t1` join `//cbo_t2` on `c/b/o_t1`.key = `//cbo_t2`.key where `c/b/o_t1`.dt = '10' and `c/b/o_t1`.c_boolean = true;
-
-
-
-set hive.cbo.enable=false;
-
-set hive.exec.check.crossproducts=false;
-
-
-
-set hive.stats.fetch.column.stats=true;
-
-set hive.auto.convert.join=false;
+explain select `c/b/o_t1`.value from `c/b/o_t1` join `//cbo_t2` on `c/b/o_t1`.key = `//cbo_t2`.key where `c/b/o_t1`.dt = '10' and `c/b/o_t1`.c_boolean = true;
 
 
 
@@ -497,15 +129,15 @@ set hive.auto.convert.join=false;
 
 -- distinct, corr
 
-select * 
+explain select *
 
-from `src/_/cbo` b 
+from `src/_/cbo` b
 
-where not exists 
+where not exists
 
-  (select distinct a.key 
+  (select distinct a.key
 
-  from `src/_/cbo` a 
+  from `src/_/cbo` a
 
   where b.value = a.value and a.value > 'val_2'
 
@@ -517,17 +149,17 @@ where not exists
 
 -- no agg, corr, having
 
-select * 
+explain select *
 
-from `src/_/cbo` b 
+from `src/_/cbo` b
 
 group by key, value
 
-having not exists 
+having not exists
 
-  (select a.key 
+  (select a.key
 
-  from `src/_/cbo` a 
+  from `src/_/cbo` a
 
   where b.value = a.value  and a.key = b.key and a.value > 'val_12'
 
@@ -541,17 +173,17 @@ having not exists
 
 -- view test
 
-create view cv1_n0 as 
+create view cv1_n0 as
 
-select * 
+select *
 
-from `src/_/cbo` b 
+from `src/_/cbo` b
 
 where exists
 
-  (select a.key 
+  (select a.key
 
-  from `src/_/cbo` a 
+  from `src/_/cbo` a
 
   where b.value = a.value  and a.key = b.key and a.value > 'val_9')
 
@@ -567,17 +199,17 @@ select * from cv1_n0
 
 -- sq in from
 
-select * 
+explain select *
 
-from (select * 
+from (select *
 
-      from `src/_/cbo` b 
+      from `src/_/cbo` b
 
-      where exists 
+      where exists
 
-          (select a.key 
+          (select a.key
 
-          from `src/_/cbo` a 
+          from `src/_/cbo` a
 
           where b.value = a.value  and a.key = b.key and a.value > 'val_9')
 
@@ -589,19 +221,19 @@ from (select *
 
 -- sq in from, having
 
-select *
+explain select *
 
-from (select b.key, count(*) 
+from (select b.key, count(*)
 
-  from `src/_/cbo` b 
+  from `src/_/cbo` b
 
   group by b.key
 
-  having exists 
+  having exists
 
-    (select a.key 
+    (select a.key
 
-    from `src/_/cbo` a 
+    from `src/_/cbo` a
 
     where a.key = b.key and a.value > 'val_9'
 
@@ -613,25 +245,13 @@ from (select b.key, count(*)
 
 
 
-set hive.cbo.enable=false;
-
-set hive.exec.check.crossproducts=false;
-
-
-
-set hive.stats.fetch.column.stats=true;
-
-set hive.auto.convert.join=false;
-
-
-
 -- 17. SubQueries In
 
 -- non agg, non corr
 
-select * 
+explain select *
 
-from `src/_/cbo` 
+from `src/_/cbo`
 
 where `src/_/cbo`.key in (select key from `src/_/cbo` s1 where s1.key > '9') order by key
 
@@ -647,15 +267,15 @@ where `src/_/cbo`.key in (select key from `src/_/cbo` s1 where s1.key > '9') ord
 
 -- distinct, corr
 
-select * 
+explain select *
 
-from `src/_/cbo` b 
+from `src/_/cbo` b
 
 where b.key in
 
-        (select distinct a.key 
+        (select distinct a.key
 
-         from `src/_/cbo` a 
+         from `src/_/cbo` a
 
          where b.value = a.value and a.key > '9'
 
@@ -667,9 +287,9 @@ where b.key in
 
 -- non agg, corr, with join in Parent Query
 
-select p.p_partkey, li.l_suppkey 
+explain select p.p_partkey, li.l_suppkey
 
-from (select distinct l_partkey as p_partkey from `line/item`) p join `line/item` li on p.p_partkey = li.l_partkey 
+from (select distinct l_partkey as p_partkey from `line/item`) p join `line/item` li on p.p_partkey = li.l_partkey
 
 where li.l_linenumber = 1 and
 
@@ -693,7 +313,7 @@ where li.l_linenumber = 1 and
 
 -- Stage 6: Stage 2 o/p semijoin Stage 5
 
-select key, value, count(*) 
+explain select key, value, count(*)
 
 from `src/_/cbo` b
 
@@ -709,13 +329,13 @@ having count(*) in (select count(*) from `src/_/cbo` s1 where s1.key > '9' group
 
 -- non agg, non corr, windowing
 
-select p_mfgr, p_name, avg(p_size) 
+explain select p_mfgr, p_name, avg(p_size)
 
-from `p/a/r/t` 
+from `p/a/r/t`
 
 group by p_mfgr, p_name
 
-having p_name in 
+having p_name in
 
   (select first_value(p_name) over(partition by p_mfgr order by p_size) from `p/a/r/t`) order by p_mfgr
 
@@ -723,29 +343,17 @@ having p_name in
 
 
 
-set hive.cbo.enable=false;
-
-set hive.exec.check.crossproducts=false;
-
-
-
-set hive.stats.fetch.column.stats=true;
-
-set hive.auto.convert.join=false;
-
-
-
 -- 16. SubQueries Not In
 
 -- non agg, non corr
 
-select * 
+explain select *
 
-from `src/_/cbo` 
+from `src/_/cbo`
 
-where `src/_/cbo`.key not in  
+where `src/_/cbo`.key not in
 
-  ( select key  from `src/_/cbo` s1 
+  ( select key  from `src/_/cbo` s1
 
     where s1.key > '2'
 
@@ -757,17 +365,17 @@ where `src/_/cbo`.key not in
 
 -- non agg, corr
 
-select p_mfgr, b.p_name, p_size 
+explain select p_mfgr, b.p_name, p_size
 
-from `p/a/r/t` b 
+from `p/a/r/t` b
 
-where b.p_name not in 
+where b.p_name not in
 
-  (select p_name 
+  (select p_name
 
-  from (select p_mfgr, p_name, p_size as r from `p/a/r/t`) a 
+  from (select p_mfgr, p_name, p_size as r from `p/a/r/t`) a
 
-  where r < 10 and b.p_mfgr = a.p_mfgr 
+  where r < 10 and b.p_mfgr = a.p_mfgr
 
   ) order by p_mfgr,p_size
 
@@ -777,15 +385,15 @@ where b.p_name not in
 
 -- agg, non corr
 
-select p_name, p_size 
+explain select p_name, p_size
 
-from 
+from
 
-`p/a/r/t` where `p/a/r/t`.p_size not in 
+`p/a/r/t` where `p/a/r/t`.p_size not in
 
-  (select avg(p_size) 
+  (select avg(p_size)
 
-  from (select p_size from `p/a/r/t`) a 
+  from (select p_size from `p/a/r/t`) a
 
   where p_size < 10
 
@@ -797,13 +405,13 @@ from
 
 -- agg, corr
 
-select p_mfgr, p_name, p_size 
+explain select p_mfgr, p_name, p_size
 
-from `p/a/r/t` b where b.p_size not in 
+from `p/a/r/t` b where b.p_size not in
 
-  (select min(p_size) 
+  (select min(p_size)
 
-  from (select p_mfgr, p_size from `p/a/r/t`) a 
+  from (select p_mfgr, p_size from `p/a/r/t`) a
 
   where p_size < 10 and b.p_mfgr = a.p_mfgr
 
@@ -815,13 +423,13 @@ from `p/a/r/t` b where b.p_size not in
 
 -- non agg, non corr, Group By in Parent Query
 
-select li.l_partkey, count(*) 
+explain select li.l_partkey, count(*)
 
-from `line/item` li 
+from `line/item` li
 
-where li.l_linenumber = 1 and 
+where li.l_linenumber = 1 and
 
-  li.l_orderkey not in (select l_orderkey from `line/item` where l_shipmode = 'AIR') 
+  li.l_orderkey not in (select l_orderkey from `line/item` where l_shipmode = 'AIR')
 
 group by li.l_partkey order by li.l_partkey
 
@@ -835,17 +443,17 @@ group by li.l_partkey order by li.l_partkey
 
 -- non agg, corr, having
 
-select b.p_mfgr, min(p_retailprice) 
+explain select b.p_mfgr, min(p_retailprice)
 
-from `p/a/r/t` b 
+from `p/a/r/t` b
 
 group by b.p_mfgr
 
-having b.p_mfgr not in 
+having b.p_mfgr not in
 
-  (select p_mfgr 
+  (select p_mfgr
 
-  from (select p_mfgr, min(p_retailprice) l, max(p_retailprice) r, avg(p_retailprice) a from `p/a/r/t` group by p_mfgr) a 
+  from (select p_mfgr, min(p_retailprice) l, max(p_retailprice) r, avg(p_retailprice) a from `p/a/r/t` group by p_mfgr) a
 
   where min(p_retailprice) = l and r - l > 600
 
@@ -859,15 +467,15 @@ having b.p_mfgr not in
 
 -- agg, non corr, having
 
-select b.p_mfgr, min(p_retailprice) 
+explain select b.p_mfgr, min(p_retailprice)
 
-from `p/a/r/t` b 
+from `p/a/r/t` b
 
 group by b.p_mfgr
 
-having b.p_mfgr not in 
+having b.p_mfgr not in
 
-  (select p_mfgr 
+  (select p_mfgr
 
   from `p/a/r/t` a
 
@@ -877,59 +485,18 @@ having b.p_mfgr not in
 
   )
 
-  order by b.p_mfgr  
+  order by b.p_mfgr
 
 ;
 
 
 
-set hive.cbo.enable=false;
-
-set hive.exec.check.crossproducts=false;
-
-
-
-set hive.stats.fetch.column.stats=true;
-
-set hive.auto.convert.join=false;
-
-
-
 -- SORT_QUERY_RESULTS
 
 
 
 -- 8. Test UDF/UDAF
-
-select count(*), count(c_int), sum(c_int), avg(c_int), max(c_int), min(c_int) from `c/b/o_t1`;
-
-select count(*), count(c_int) as a, sum(c_int), avg(c_int), max(c_int), min(c_int), case c_int when 0  then 1 when 1 then 2 else 3 end, sum(case c_int when 0  then 1 when 1 then 2 else 3 end) from `c/b/o_t1` group by c_int order by a;
-
-select * from (select count(*) as a, count(distinct c_int) as b, sum(c_int) as c, avg(c_int) as d, max(c_int) as e, min(c_int) as f from `c/b/o_t1`) `c/b/o_t1`;
-
-select * from (select count(*) as a, count(distinct c_int) as b, sum(c_int) as c, avg(c_int) as d, max(c_int) as e, min(c_int) as f, case c_int when 0  then 1 when 1 then 2 else 3 end as g, sum(case c_int when 0  then 1 when 1 then 2 else 3 end) as h from `c/b/o_t1` group by c_int) `c/b/o_t1` order by a;
-
-select f,a,e,b from (select count(*) as a, count(c_int) as b, sum(c_int) as c, avg(c_int) as d, max(c_int) as e, min(c_int) as f from `c/b/o_t1`) `c/b/o_t1`;
-
-select f,a,e,b from (select count(*) as a, count(distinct c_int) as b, sum(distinct c_int) as c, avg(distinct c_int) as d, max(distinct c_int) as e, min(distinct c_int) as f from `c/b/o_t1`) `c/b/o_t1`;
-
-select key,count(c_int) as a, avg(c_float) from `c/b/o_t1` group by key order by a;
-
-select count(distinct c_int) as a, avg(c_float) from `c/b/o_t1` group by c_float order by a;
-
-select count(distinct c_int) as a, avg(c_float) from `c/b/o_t1` group by c_int order by a;
-
-select count(distinct c_int) as a, avg(c_float) from `c/b/o_t1` group by c_float, c_int order by a;
-
-set hive.cbo.enable=false;
-
-set hive.exec.check.crossproducts=false;
-
-
-
-set hive.stats.fetch.column.stats=true;
-
-set hive.auto.convert.join=false;
+explain select f,a,e,b from (select count(*) as a, count(c_int) as b, sum(c_int) as c, avg(c_int) as d, max(c_int) as e, min(c_int) as f from `c/b/o_t1`) `c/b/o_t1`;
 
 
 
@@ -938,24 +505,7 @@ set hive.auto.convert.join=false;
 
 
 -- 11. Union All
-
-select * from (select * from `c/b/o_t1` order by key, c_boolean, value, dt)a union all select * from (select * from `//cbo_t2` order by key, c_boolean, value, dt)b;
-
-select key from (select key, c_int from (select * from `c/b/o_t1` union all select * from `//cbo_t2` where `//cbo_t2`.key >=0)r1 union all select key, c_int from `cbo_/t3////`)r2 where key >=0 order by key;
-
-select r2.key from (select key, c_int from (select key, c_int from `c/b/o_t1` union all select key, c_int from `cbo_/t3////` )r1 union all select key, c_int from `cbo_/t3////`)r2 join   (select key, c_int from (select * from `c/b/o_t1` union all select * from `//cbo_t2` where `//cbo_t2`.key >=0)r1 union all select key, c_int from `cbo_/t3////`)r3 on r2.key=r3.key where r3.key >=0 order by r2.key;
-
-
-
-set hive.cbo.enable=false;
-
-set hive.exec.check.crossproducts=false;
-
-
-
-set hive.stats.fetch.column.stats=true;
-
-set hive.auto.convert.join=false;
+explain select * from (select * from `c/b/o_t1` order by key, c_boolean, value, dt)a union all select * from (select * from `//cbo_t2` order by key, c_boolean, value, dt)b;
 
 
 
@@ -1037,43 +587,13 @@ drop view v3_n0;
 
 drop view v4_n0;
 
-set hive.cbo.enable=false;
-
-set hive.exec.check.crossproducts=false;
-
-
-
-set hive.stats.fetch.column.stats=true;
-
-set hive.auto.convert.join=false;
-
-
-
 -- 9. Test Windowing Functions
 
 -- SORT_QUERY_RESULTS
 
+explain select count(c_int) over(partition by c_float order by key), sum(c_float) over(partition by c_float order by key), max(c_int) over(partition by c_float order by key), min(c_int) over(partition by c_float order by key), row_number() over(partition by c_float order by key) as rn, rank() over(partition by c_float order by key), dense_rank() over(partition by c_float order by key), round(percent_rank() over(partition by c_float order by key), 2), lead(c_int, 2, c_int) over(partition  [...]
 
 
-select count(c_int) over() from `c/b/o_t1`;
-
-select count(c_int) over(partition by c_float order by key), sum(c_float) over(partition by c_float order by key), max(c_int) over(partition by c_float order by key), min(c_int) over(partition by c_float order by key), row_number() over(partition by c_float order by key) as rn, rank() over(partition by c_float order by key), dense_rank() over(partition by c_float order by key), round(percent_rank() over(partition by c_float order by key), 2), lead(c_int, 2, c_int) over(partition by c_flo [...]
-
-select * from (select count(c_int) over(partition by c_float order by key), sum(c_float) over(partition by c_float order by key), max(c_int) over(partition by c_float order by key), min(c_int) over(partition by c_float order by key), row_number() over(partition by c_float order by key) as rn, rank() over(partition by c_float order by key), dense_rank() over(partition by c_float order by key), round(percent_rank() over(partition by c_float order by key),2), lead(c_int, 2, c_int) over(part [...]
-
-select x from (select count(c_int) over() as x, sum(c_float) over() from `c/b/o_t1`) `c/b/o_t1`;
-
-select 1+sum(c_int) over() from `c/b/o_t1`;
-
-select sum(c_int)+sum(sum(c_int)) over() from `c/b/o_t1`;
-
-select * from (select max(c_int) over (partition by key order by value Rows UNBOUNDED PRECEDING), min(c_int) over (partition by key order by value rows current row), count(c_int) over(partition by key order by value ROWS 1 PRECEDING), avg(value) over (partition by key order by value Rows between unbounded preceding and unbounded following), sum(value) over (partition by key order by value rows between unbounded preceding and current row), avg(c_float) over (partition by key order by valu [...]
-
-select i, a, h, b, c, d, e, f, g, a as x, a +1 as y from (select max(c_int) over (partition by key order by value range UNBOUNDED PRECEDING) a, min(c_int) over (partition by key order by value range current row) b, count(c_int) over(partition by key order by value range 1 PRECEDING) c, avg(value) over (partition by key order by value range between unbounded preceding and unbounded following) d, sum(value) over (partition by key order by value range between unbounded preceding and current [...]
-
-select *, rank() over(partition by key order by value) as rr from default.src1;
-
-select *, rank() over(partition by key order by value) from default.src1;
 
 insert into table `src/_/cbo` select * from default.src;
 
diff --git a/ql/src/test/queries/clientpositive/special_character_in_tabnames_quotes_1.q b/ql/src/test/queries/clientpositive/special_character_in_tabnames_quotes_1.q
index 7a05ec8..85d714e 100644
--- a/ql/src/test/queries/clientpositive/special_character_in_tabnames_quotes_1.q
+++ b/ql/src/test/queries/clientpositive/special_character_in_tabnames_quotes_1.q
@@ -57,73 +57,27 @@ LOAD DATA LOCAL INPATH '../../data/files/lineitem.txt' OVERWRITE INTO TABLE "lin
 
 create table "src/_/cbo" as select * from default.src;
 
-analyze table "c/b/o_t1" partition (dt) compute statistics;
-
 analyze table "c/b/o_t1" compute statistics for columns key, value, c_int, c_float, c_boolean;
 
-analyze table "//cbo_t2" partition (dt) compute statistics;
-
 analyze table "//cbo_t2" compute statistics for columns key, value, c_int, c_float, c_boolean;
 
-analyze table "cbo_/t3////" compute statistics;
-
 analyze table "cbo_/t3////" compute statistics for columns key, value, c_int, c_float, c_boolean;
 
-analyze table "src/_/cbo" compute statistics;
-
 analyze table "src/_/cbo" compute statistics for columns;
 
-analyze table "p/a/r/t" compute statistics;
-
 analyze table "p/a/r/t" compute statistics for columns;
 
-analyze table "line/item" compute statistics;
-
 analyze table "line/item" compute statistics for columns;
 
 select key, (c_int+1)+2 as x, sum(c_int) from "c/b/o_t1" group by c_float, "c/b/o_t1".c_int, key;
 
-select x, y, count(*) from (select key, (c_int+c_float+1+2) as x, sum(c_int) as y from "c/b/o_t1" group by c_float, "c/b/o_t1".c_int, key) R group by y, x;
-
-select "cbo_/t3////".c_int, c, count(*) from (select key as a, c_int+1 as b, sum(c_int) as c from "c/b/o_t1" where ("c/b/o_t1".c_int + 1 >= 0) and ("c/b/o_t1".c_int > 0 or "c/b/o_t1".c_float >= 0) group by c_float, "c/b/o_t1".c_int, key order by a) "c/b/o_t1" join (select key as p, c_int+1 as q, sum(c_int) as r from "//cbo_t2" where ("//cbo_t2".c_int + 1 >= 0) and ("//cbo_t2".c_int > 0 or "//cbo_t2".c_float >= 0)  group by c_float, "//cbo_t2".c_int, key order by q/10 desc, r asc) "//cbo_ [...]
-
-select "cbo_/t3////".c_int, c, count(*) from (select key as a, c_int+1 as b, sum(c_int) as c from "c/b/o_t1" where ("c/b/o_t1".c_int + 1 >= 0) and ("c/b/o_t1".c_int > 0 or "c/b/o_t1".c_float >= 0)  group by c_float, "c/b/o_t1".c_int, key having "c/b/o_t1".c_float > 0 and (c_int >=1 or c_float >= 1) and (c_int + c_float) >= 0 order by b % c asc, b desc) "c/b/o_t1" left outer join (select key as p, c_int+1 as q, sum(c_int) as r from "//cbo_t2" where ("//cbo_t2".c_int + 1 >= 0) and ("//cbo_ [...]
-
-select "cbo_/t3////".c_int, c, count(*) from (select key as a, c_int+1 as b, sum(c_int) as c from "c/b/o_t1" where ("c/b/o_t1".c_int + 1 >= 0) and ("c/b/o_t1".c_int > 0 or "c/b/o_t1".c_float >= 0)  group by c_float, "c/b/o_t1".c_int, key having "c/b/o_t1".c_float > 0 and (c_int >=1 or c_float >= 1) and (c_int + c_float) >= 0 order by b+c, a desc) "c/b/o_t1" right outer join (select key as p, c_int+1 as q, sum(c_int) as r from "//cbo_t2" where ("//cbo_t2".c_int + 1 >= 0) and ("//cbo_t2".c [...]
-
-
-
-select "cbo_/t3////".c_int, c, count(*) from (select key as a, c_int+1 as b, sum(c_int) as c from "c/b/o_t1" where ("c/b/o_t1".c_int + 1 >= 0) and ("c/b/o_t1".c_int > 0 or "c/b/o_t1".c_float >= 0)  group by c_float, "c/b/o_t1".c_int, key having "c/b/o_t1".c_float > 0 and (c_int >=1 or c_float >= 1) and (c_int + c_float) >= 0 order by c+a desc) "c/b/o_t1" full outer join (select key as p, c_int+1 as q, sum(c_int) as r from "//cbo_t2" where ("//cbo_t2".c_int + 1 >= 0) and ("//cbo_t2".c_int [...]
-
-
-
-select "cbo_/t3////".c_int, c, count(*) from (select key as a, c_int+1 as b, sum(c_int) as c from "c/b/o_t1" where ("c/b/o_t1".c_int + 1 >= 0) and ("c/b/o_t1".c_int > 0 or "c/b/o_t1".c_float >= 0)  group by c_float, "c/b/o_t1".c_int, key having "c/b/o_t1".c_float > 0 and (c_int >=1 or c_float >= 1) and (c_int + c_float) >= 0) "c/b/o_t1" join (select key as p, c_int+1 as q, sum(c_int) as r from "//cbo_t2" where ("//cbo_t2".c_int + 1 >= 0) and ("//cbo_t2".c_int > 0 or "//cbo_t2".c_float >= [...]
-
-
-
 set hive.cbo.enable=false;
-
 set hive.exec.check.crossproducts=false;
-
-
-
 set hive.stats.fetch.column.stats=true;
-
 set hive.auto.convert.join=false;
 
-
-
 -- 21. Test groupby is empty and there is no other cols in aggr
-
-select unionsrc.key FROM (select 'tst1' as key, count(1) as value from default.src) unionsrc;
-
-
-
-select unionsrc.key, unionsrc.value FROM (select 'tst1' as key, count(1) as value from default.src) unionsrc;
-
-
-
-select unionsrc.key FROM (select 'max' as key, max(c_int) as value from "cbo_/t3////" s1
+explain select unionsrc.key FROM (select 'max' as key, max(c_int) as value from "cbo_/t3////" s1
 
 UNION  ALL
 
@@ -133,356 +87,42 @@ UNION  ALL
 
         select 'avg' as key,  avg(c_int) as value from "cbo_/t3////" s3) unionsrc order by unionsrc.key;
 
-
-
-select unionsrc.key, unionsrc.value FROM (select 'max' as key, max(c_int) as value from "cbo_/t3////" s1
-
-UNION  ALL
-
-    select 'min' as key,  min(c_int) as value from "cbo_/t3////" s2
-
-    UNION ALL
-
-        select 'avg' as key,  avg(c_int) as value from "cbo_/t3////" s3) unionsrc order by unionsrc.key;
-
-
-
-select unionsrc.key, count(1) FROM (select 'max' as key, max(c_int) as value from "cbo_/t3////" s1
-
-    UNION  ALL
-
-        select 'min' as key,  min(c_int) as value from "cbo_/t3////" s2
-
-    UNION ALL
-
-        select 'avg' as key,  avg(c_int) as value from "cbo_/t3////" s3) unionsrc group by unionsrc.key order by unionsrc.key;
-
-
-
-set hive.cbo.enable=false;
-
-set hive.exec.check.crossproducts=false;
-
-
-
-set hive.stats.fetch.column.stats=true;
-
-set hive.auto.convert.join=false;
-
-
-
 -- SORT_QUERY_RESULTS
 
 -- 4. Test Select + Join + TS
-
-select "c/b/o_t1".c_int, "//cbo_t2".c_int from "c/b/o_t1" join             "//cbo_t2" on "c/b/o_t1".key="//cbo_t2".key;
-
-select "c/b/o_t1".key from "c/b/o_t1" join "cbo_/t3////";
-
-select "c/b/o_t1".key from "c/b/o_t1" join "cbo_/t3////" where "c/b/o_t1".key="cbo_/t3////".key and "c/b/o_t1".key >= 1;
-
-select "c/b/o_t1".c_int, "//cbo_t2".c_int from "c/b/o_t1" left outer join  "//cbo_t2" on "c/b/o_t1".key="//cbo_t2".key;
-
-select "c/b/o_t1".c_int, "//cbo_t2".c_int from "c/b/o_t1" right outer join "//cbo_t2" on "c/b/o_t1".key="//cbo_t2".key;
-
-select "c/b/o_t1".c_int, "//cbo_t2".c_int from "c/b/o_t1" full outer join  "//cbo_t2" on "c/b/o_t1".key="//cbo_t2".key;
-
-
-
-select b, "c/b/o_t1".c, "//cbo_t2".p, q, "cbo_/t3////".c_int from (select key as a, c_int as b, "c/b/o_t1".c_float as c from "c/b/o_t1") "c/b/o_t1" join (select "//cbo_t2".key as p, "//cbo_t2".c_int as q, c_float as r from "//cbo_t2") "//cbo_t2" on "c/b/o_t1".a=p join "cbo_/t3////" on "c/b/o_t1".a=key;
-
-select key, "c/b/o_t1".c_int, "//cbo_t2".p, q from "c/b/o_t1" join (select "//cbo_t2".key as p, "//cbo_t2".c_int as q, c_float as r from "//cbo_t2") "//cbo_t2" on "c/b/o_t1".key=p join (select key as a, c_int as b, "cbo_/t3////".c_float as c from "cbo_/t3////")"cbo_/t3////" on "c/b/o_t1".key=a;
-
-select a, "c/b/o_t1".b, key, "//cbo_t2".c_int, "cbo_/t3////".p from (select key as a, c_int as b, "c/b/o_t1".c_float as c from "c/b/o_t1") "c/b/o_t1" join "//cbo_t2"  on "c/b/o_t1".a=key join (select key as p, c_int as q, "cbo_/t3////".c_float as r from "cbo_/t3////")"cbo_/t3////" on "c/b/o_t1".a="cbo_/t3////".p;
-
-select b, "c/b/o_t1".c, "//cbo_t2".c_int, "cbo_/t3////".c_int from (select key as a, c_int as b, "c/b/o_t1".c_float as c from "c/b/o_t1") "c/b/o_t1" join "//cbo_t2" on "c/b/o_t1".a="//cbo_t2".key join "cbo_/t3////" on "c/b/o_t1".a="cbo_/t3////".key;
-
-select "cbo_/t3////".c_int, b, "//cbo_t2".c_int, "c/b/o_t1".c from (select key as a, c_int as b, "c/b/o_t1".c_float as c from "c/b/o_t1") "c/b/o_t1" join "//cbo_t2" on "c/b/o_t1".a="//cbo_t2".key join "cbo_/t3////" on "c/b/o_t1".a="cbo_/t3////".key;
-
-
-
-select b, "c/b/o_t1".c, "//cbo_t2".p, q, "cbo_/t3////".c_int from (select key as a, c_int as b, "c/b/o_t1".c_float as c from "c/b/o_t1") "c/b/o_t1" left outer join (select "//cbo_t2".key as p, "//cbo_t2".c_int as q, c_float as r from "//cbo_t2") "//cbo_t2" on "c/b/o_t1".a=p join "cbo_/t3////" on "c/b/o_t1".a=key;
-
-select key, "c/b/o_t1".c_int, "//cbo_t2".p, q from "c/b/o_t1" join (select "//cbo_t2".key as p, "//cbo_t2".c_int as q, c_float as r from "//cbo_t2") "//cbo_t2" on "c/b/o_t1".key=p left outer join (select key as a, c_int as b, "cbo_/t3////".c_float as c from "cbo_/t3////")"cbo_/t3////" on "c/b/o_t1".key=a;
-
-
-
-select b, "c/b/o_t1".c, "//cbo_t2".p, q, "cbo_/t3////".c_int from (select key as a, c_int as b, "c/b/o_t1".c_float as c from "c/b/o_t1") "c/b/o_t1" right outer join (select "//cbo_t2".key as p, "//cbo_t2".c_int as q, c_float as r from "//cbo_t2") "//cbo_t2" on "c/b/o_t1".a=p join "cbo_/t3////" on "c/b/o_t1".a=key;
-
-select key, "c/b/o_t1".c_int, "//cbo_t2".p, q from "c/b/o_t1" join (select "//cbo_t2".key as p, "//cbo_t2".c_int as q, c_float as r from "//cbo_t2") "//cbo_t2" on "c/b/o_t1".key=p right outer join (select key as a, c_int as b, "cbo_/t3////".c_float as c from "cbo_/t3////")"cbo_/t3////" on "c/b/o_t1".key=a;
-
-
-
-select b, "c/b/o_t1".c, "//cbo_t2".p, q, "cbo_/t3////".c_int from (select key as a, c_int as b, "c/b/o_t1".c_float as c from "c/b/o_t1") "c/b/o_t1" full outer join (select "//cbo_t2".key as p, "//cbo_t2".c_int as q, c_float as r from "//cbo_t2") "//cbo_t2" on "c/b/o_t1".a=p join "cbo_/t3////" on "c/b/o_t1".a=key;
-
-select key, "c/b/o_t1".c_int, "//cbo_t2".p, q from "c/b/o_t1" join (select "//cbo_t2".key as p, "//cbo_t2".c_int as q, c_float as r from "//cbo_t2") "//cbo_t2" on "c/b/o_t1".key=p full outer join (select key as a, c_int as b, "cbo_/t3////".c_float as c from "cbo_/t3////")"cbo_/t3////" on "c/b/o_t1".key=a;
-
-
+explain select "c/b/o_t1".key from "c/b/o_t1" join "cbo_/t3////";
 
 -- 5. Test Select + Join + FIL + TS
-
-select "c/b/o_t1".c_int, "//cbo_t2".c_int from "c/b/o_t1" join "//cbo_t2" on "c/b/o_t1".key="//cbo_t2".key where ("c/b/o_t1".c_int + "//cbo_t2".c_int == 2) and ("c/b/o_t1".c_int > 0 or "//cbo_t2".c_float >= 0);
-
-select "c/b/o_t1".c_int, "//cbo_t2".c_int from "c/b/o_t1" left outer join  "//cbo_t2" on "c/b/o_t1".key="//cbo_t2".key where ("c/b/o_t1".c_int + "//cbo_t2".c_int == 2) and ("c/b/o_t1".c_int > 0 or "//cbo_t2".c_float >= 0);
-
-select "c/b/o_t1".c_int, "//cbo_t2".c_int from "c/b/o_t1" right outer join "//cbo_t2" on "c/b/o_t1".key="//cbo_t2".key where ("c/b/o_t1".c_int + "//cbo_t2".c_int == 2) and ("c/b/o_t1".c_int > 0 or "//cbo_t2".c_float >= 0);
-
-select "c/b/o_t1".c_int, "//cbo_t2".c_int from "c/b/o_t1" full outer join  "//cbo_t2" on "c/b/o_t1".key="//cbo_t2".key where ("c/b/o_t1".c_int + "//cbo_t2".c_int == 2) and ("c/b/o_t1".c_int > 0 or "//cbo_t2".c_float >= 0);
-
-
-
-select b, "c/b/o_t1".c, "//cbo_t2".p, q, "cbo_/t3////".c_int from (select key as a, c_int as b, "c/b/o_t1".c_float as c from "c/b/o_t1"  where ("c/b/o_t1".c_int + 1 == 2) and ("c/b/o_t1".c_int > 0 or "c/b/o_t1".c_float >= 0)) "c/b/o_t1" join (select "//cbo_t2".key as p, "//cbo_t2".c_int as q, c_float as r from "//cbo_t2"  where ("//cbo_t2".c_int + 1 == 2) and ("//cbo_t2".c_int > 0 or "//cbo_t2".c_float >= 0)) "//cbo_t2" on "c/b/o_t1".a=p join "cbo_/t3////" on "c/b/o_t1".a=key where (b +  [...]
-
-
-
-select q, b, "//cbo_t2".p, "c/b/o_t1".c, "cbo_/t3////".c_int from (select key as a, c_int as b, "c/b/o_t1".c_float as c from "c/b/o_t1"  where ("c/b/o_t1".c_int + 1 == 2) and ("c/b/o_t1".c_int > 0 or "c/b/o_t1".c_float >= 0)) "c/b/o_t1" left outer join (select "//cbo_t2".key as p, "//cbo_t2".c_int as q, c_float as r from "//cbo_t2"  where ("//cbo_t2".c_int + 1 == 2) and ("//cbo_t2".c_int > 0 or "//cbo_t2".c_float >= 0)) "//cbo_t2" on "c/b/o_t1".a=p join "cbo_/t3////" on "c/b/o_t1".a=key  [...]
-
-
-
-select q, b, "//cbo_t2".p, "c/b/o_t1".c, "cbo_/t3////".c_int from (select key as a, c_int as b, "c/b/o_t1".c_float as c from "c/b/o_t1"  where ("c/b/o_t1".c_int + 1 == 2) and ("c/b/o_t1".c_int > 0 or "c/b/o_t1".c_float >= 0)) "c/b/o_t1" right outer join (select "//cbo_t2".key as p, "//cbo_t2".c_int as q, c_float as r from "//cbo_t2"  where ("//cbo_t2".c_int + 1 == 2) and ("//cbo_t2".c_int > 0 or "//cbo_t2".c_float >= 0)) "//cbo_t2" on "c/b/o_t1".a=p join "cbo_/t3////" on "c/b/o_t1".a=key [...]
-
-
-
-select q, b, "//cbo_t2".p, "c/b/o_t1".c, "cbo_/t3////".c_int from (select key as a, c_int as b, "c/b/o_t1".c_float as c from "c/b/o_t1"  where ("c/b/o_t1".c_int + 1 == 2) and ("c/b/o_t1".c_int > 0 or "c/b/o_t1".c_float >= 0)) "c/b/o_t1" full outer join (select "//cbo_t2".key as p, "//cbo_t2".c_int as q, c_float as r from "//cbo_t2"  where ("//cbo_t2".c_int + 1 == 2) and ("//cbo_t2".c_int > 0 or "//cbo_t2".c_float >= 0)) "//cbo_t2" on "c/b/o_t1".a=p join "cbo_/t3////" on "c/b/o_t1".a=key  [...]
-
-
-
-select * from (select q, b, "//cbo_t2".p, "c/b/o_t1".c, "cbo_/t3////".c_int from (select key as a, c_int as b, "c/b/o_t1".c_float as c from "c/b/o_t1"  where ("c/b/o_t1".c_int + 1 == 2) and ("c/b/o_t1".c_int > 0 or "c/b/o_t1".c_float >= 0)) "c/b/o_t1" full outer join (select "//cbo_t2".key as p, "//cbo_t2".c_int as q, c_float as r from "//cbo_t2"  where ("//cbo_t2".c_int + 1 == 2) and ("//cbo_t2".c_int > 0 or "//cbo_t2".c_float >= 0)) "//cbo_t2" on "c/b/o_t1".a=p join "cbo_/t3////" on "c [...]
-
-
-
-select * from (select q, b, "//cbo_t2".p, "c/b/o_t1".c, "cbo_/t3////".c_int from (select key as a, c_int as b, "c/b/o_t1".c_float as c from "c/b/o_t1"  where ("c/b/o_t1".c_int + 1 == 2) and ("c/b/o_t1".c_int > 0 or "c/b/o_t1".c_float >= 0)) "c/b/o_t1" left outer join (select "//cbo_t2".key as p, "//cbo_t2".c_int as q, c_float as r from "//cbo_t2"  where ("//cbo_t2".c_int + 1 == 2) and ("//cbo_t2".c_int > 0 or "//cbo_t2".c_float >= 0)) "//cbo_t2" on "c/b/o_t1".a=p left outer join "cbo_/t3 [...]
-
-
-
-select * from (select q, b, "//cbo_t2".p, "c/b/o_t1".c, "cbo_/t3////".c_int from (select key as a, c_int as b, "c/b/o_t1".c_float as c from "c/b/o_t1"  where ("c/b/o_t1".c_int + 1 == 2) and ("c/b/o_t1".c_int > 0 or "c/b/o_t1".c_float >= 0)) "c/b/o_t1" left outer join (select "//cbo_t2".key as p, "//cbo_t2".c_int as q, c_float as r from "//cbo_t2"  where ("//cbo_t2".c_int + 1 == 2) and ("//cbo_t2".c_int > 0 or "//cbo_t2".c_float >= 0)) "//cbo_t2" on "c/b/o_t1".a=p right outer join "cbo_/t [...]
-
-
-
-select * from (select q, b, "//cbo_t2".p, "c/b/o_t1".c, "cbo_/t3////".c_int from (select key as a, c_int as b, "c/b/o_t1".c_float as c from "c/b/o_t1"  where ("c/b/o_t1".c_int + 1 == 2) and ("c/b/o_t1".c_int > 0 or "c/b/o_t1".c_float >= 0)) "c/b/o_t1" left outer join (select "//cbo_t2".key as p, "//cbo_t2".c_int as q, c_float as r from "//cbo_t2"  where ("//cbo_t2".c_int + 1 == 2) and ("//cbo_t2".c_int > 0 or "//cbo_t2".c_float >= 0)) "//cbo_t2" on "c/b/o_t1".a=p full outer join "cbo_/t3 [...]
-
-
-
-select * from (select q, b, "//cbo_t2".p, "c/b/o_t1".c, "cbo_/t3////".c_int from (select key as a, c_int as b, "c/b/o_t1".c_float as c from "c/b/o_t1"  where ("c/b/o_t1".c_int + 1 == 2) and ("c/b/o_t1".c_int > 0 or "c/b/o_t1".c_float >= 0)) "c/b/o_t1" right outer join (select "//cbo_t2".key as p, "//cbo_t2".c_int as q, c_float as r from "//cbo_t2"  where ("//cbo_t2".c_int + 1 == 2) and ("//cbo_t2".c_int > 0 or "//cbo_t2".c_float >= 0)) "//cbo_t2" on "c/b/o_t1".a=p right outer join "cbo_/ [...]
-
-
-
-select * from (select q, b, "//cbo_t2".p, "c/b/o_t1".c, "cbo_/t3////".c_int from (select key as a, c_int as b, "c/b/o_t1".c_float as c from "c/b/o_t1"  where ("c/b/o_t1".c_int + 1 == 2) and ("c/b/o_t1".c_int > 0 or "c/b/o_t1".c_float >= 0)) "c/b/o_t1" right outer join (select "//cbo_t2".key as p, "//cbo_t2".c_int as q, c_float as r from "//cbo_t2"  where ("//cbo_t2".c_int + 1 == 2) and ("//cbo_t2".c_int > 0 or "//cbo_t2".c_float >= 0)) "//cbo_t2" on "c/b/o_t1".a=p left outer join "cbo_/t [...]
-
-
-
-select * from (select q, b, "//cbo_t2".p, "c/b/o_t1".c, "cbo_/t3////".c_int from (select key as a, c_int as b, "c/b/o_t1".c_float as c from "c/b/o_t1"  where ("c/b/o_t1".c_int + 1 == 2) and ("c/b/o_t1".c_int > 0 or "c/b/o_t1".c_float >= 0)) "c/b/o_t1" right outer join (select "//cbo_t2".key as p, "//cbo_t2".c_int as q, c_float as r from "//cbo_t2"  where ("//cbo_t2".c_int + 1 == 2) and ("//cbo_t2".c_int > 0 or "//cbo_t2".c_float >= 0)) "//cbo_t2" on "c/b/o_t1".a=p full outer join "cbo_/t [...]
-
-
-
-select * from (select q, b, "//cbo_t2".p, "c/b/o_t1".c, "cbo_/t3////".c_int from (select key as a, c_int as b, "c/b/o_t1".c_float as c from "c/b/o_t1"  where ("c/b/o_t1".c_int + 1 == 2) and ("c/b/o_t1".c_int > 0 or "c/b/o_t1".c_float >= 0)) "c/b/o_t1" full outer join (select "//cbo_t2".key as p, "//cbo_t2".c_int as q, c_float as r from "//cbo_t2"  where ("//cbo_t2".c_int + 1 == 2) and ("//cbo_t2".c_int > 0 or "//cbo_t2".c_float >= 0)) "//cbo_t2" on "c/b/o_t1".a=p full outer join "cbo_/t3 [...]
-
-
-
-select * from (select q, b, "//cbo_t2".p, "c/b/o_t1".c, "cbo_/t3////".c_int from (select key as a, c_int as b, "c/b/o_t1".c_float as c from "c/b/o_t1"  where ("c/b/o_t1".c_int + 1 == 2) and ("c/b/o_t1".c_int > 0 or "c/b/o_t1".c_float >= 0)) "c/b/o_t1" full outer join (select "//cbo_t2".key as p, "//cbo_t2".c_int as q, c_float as r from "//cbo_t2"  where ("//cbo_t2".c_int + 1 == 2) and ("//cbo_t2".c_int > 0 or "//cbo_t2".c_float >= 0)) "//cbo_t2" on "c/b/o_t1".a=p left outer join "cbo_/t3 [...]
-
-
-
-select * from (select q, b, "//cbo_t2".p, "c/b/o_t1".c, "cbo_/t3////".c_int from (select key as a, c_int as b, "c/b/o_t1".c_float as c from "c/b/o_t1"  where ("c/b/o_t1".c_int + 1 == 2) and ("c/b/o_t1".c_int > 0 or "c/b/o_t1".c_float >= 0)) "c/b/o_t1" full outer join (select "//cbo_t2".key as p, "//cbo_t2".c_int as q, c_float as r from "//cbo_t2"  where ("//cbo_t2".c_int + 1 == 2) and ("//cbo_t2".c_int > 0 or "//cbo_t2".c_float >= 0)) "//cbo_t2" on "c/b/o_t1".a=p right outer join "cbo_/t [...]
-
-
-
-set hive.cbo.enable=false;
-
-set hive.exec.check.crossproducts=false;
-
-
-
-set hive.stats.fetch.column.stats=true;
-
-set hive.auto.convert.join=false;
-
+explain select "c/b/o_t1".c_int, "//cbo_t2".c_int from "c/b/o_t1" join "//cbo_t2" on "c/b/o_t1".key="//cbo_t2".key where ("c/b/o_t1".c_int + "//cbo_t2".c_int == 2) and ("c/b/o_t1".c_int > 0 or "//cbo_t2".c_float >= 0);
 
 
 -- 7. Test Select + TS + Join + Fil + GB + GB Having + Limit
-
-select key, (c_int+1)+2 as x, sum(c_int) from "c/b/o_t1" group by c_float, "c/b/o_t1".c_int, key order by key, x limit 1;
-
-select x, y, count(*) from (select key, (c_int+c_float+1+2) as x, sum(c_int) as y from "c/b/o_t1" group by c_float, "c/b/o_t1".c_int, key) R group by y, x order by x,y limit 1;
-
-select key from(select key from (select key from "c/b/o_t1" order by key limit 5)"//cbo_t2" order by key limit 5)"cbo_/t3////" order by key limit 5;
-
-select key, c_int from(select key, c_int from (select key, c_int from "c/b/o_t1" order by key, c_int limit 5)"c/b/o_t1"  order by key, c_int limit 5)"//cbo_t2"  order by key, c_int limit 5;
-
-
-
-select "cbo_/t3////".c_int, c, count(*) from (select key as a, c_int+1 as b, sum(c_int) as c from "c/b/o_t1" where ("c/b/o_t1".c_int + 1 >= 0) and ("c/b/o_t1".c_int > 0 or "c/b/o_t1".c_float >= 0) group by c_float, "c/b/o_t1".c_int, key order by a, b limit 5) "c/b/o_t1" join (select key as p, c_int+1 as q, sum(c_int) as r from "//cbo_t2" where ("//cbo_t2".c_int + 1 >= 0) and ("//cbo_t2".c_int > 0 or "//cbo_t2".c_float >= 0)  group by c_float, "//cbo_t2".c_int, key order by p, q/10 desc,  [...]
-
-select "cbo_/t3////".c_int, c, count(*) from (select key as a, c_int+1 as b, sum(c_int) as c from "c/b/o_t1" where ("c/b/o_t1".c_int + 1 >= 0) and ("c/b/o_t1".c_int > 0 or "c/b/o_t1".c_float >= 0)  group by c_float, "c/b/o_t1".c_int, key having "c/b/o_t1".c_float > 0 and (c_int >=1 or c_float >= 1) and (c_int + c_float) >= 0 order by a, b % c asc, b desc limit 5) "c/b/o_t1" left outer join (select key as p, c_int+1 as q, sum(c_int) as r from "//cbo_t2" where ("//cbo_t2".c_int + 1 >= 0) a [...]
-
-set hive.cbo.enable=false;
-
-set hive.exec.check.crossproducts=false;
-
-
-
-set hive.stats.fetch.column.stats=true;
-
-set hive.auto.convert.join=false;
-
-
+explain select key, (c_int+1)+2 as x, sum(c_int) from "c/b/o_t1" group by c_float, "c/b/o_t1".c_int, key order by x limit 1;
 
 -- 12. SemiJoin
-
-select "c/b/o_t1".c_int           from "c/b/o_t1" left semi join   "//cbo_t2" on "c/b/o_t1".key="//cbo_t2".key;
-
-select "c/b/o_t1".c_int           from "c/b/o_t1" left semi join   "//cbo_t2" on "c/b/o_t1".key="//cbo_t2".key where ("c/b/o_t1".c_int + 1 == 2) and ("c/b/o_t1".c_int > 0 or "c/b/o_t1".c_float >= 0);
-
-select * from (select c, b, a from (select key as a, c_int as b, "c/b/o_t1".c_float as c from "c/b/o_t1"  where ("c/b/o_t1".c_int + 1 == 2) and ("c/b/o_t1".c_int > 0 or "c/b/o_t1".c_float >= 0)) "c/b/o_t1" left semi join (select "//cbo_t2".key as p, "//cbo_t2".c_int as q, c_float as r from "//cbo_t2"  where ("//cbo_t2".c_int + 1 == 2) and ("//cbo_t2".c_int > 0 or "//cbo_t2".c_float >= 0)) "//cbo_t2" on "c/b/o_t1".a=p left semi join "cbo_/t3////" on "c/b/o_t1".a=key where (b + 1 == 2) and [...]
-
-select * from (select "cbo_/t3////".c_int, "c/b/o_t1".c, b from (select key as a, c_int as b, "c/b/o_t1".c_float as c from "c/b/o_t1"  where ("c/b/o_t1".c_int + 1 = 2) and ("c/b/o_t1".c_int > 0 or "c/b/o_t1".c_float >= 0)) "c/b/o_t1" left semi join (select "//cbo_t2".key as p, "//cbo_t2".c_int as q, c_float as r from "//cbo_t2"  where ("//cbo_t2".c_int + 1 == 2) and ("//cbo_t2".c_int > 0 or "//cbo_t2".c_float >= 0)) "//cbo_t2" on "c/b/o_t1".a=p left outer join "cbo_/t3////" on "c/b/o_t1" [...]
-
-select * from (select c_int, b, "c/b/o_t1".c from (select key as a, c_int as b, "c/b/o_t1".c_float as c from "c/b/o_t1"  where ("c/b/o_t1".c_int + 1 == 2) and ("c/b/o_t1".c_int > 0 or "c/b/o_t1".c_float >= 0)) "c/b/o_t1" left semi join (select "//cbo_t2".key as p, "//cbo_t2".c_int as q, c_float as r from "//cbo_t2"  where ("//cbo_t2".c_int + 1 == 2) and ("//cbo_t2".c_int > 0 or "//cbo_t2".c_float >= 0)) "//cbo_t2" on "c/b/o_t1".a=p right outer join "cbo_/t3////" on "c/b/o_t1".a=key where [...]
-
-select * from (select c_int, b, "c/b/o_t1".c from (select key as a, c_int as b, "c/b/o_t1".c_float as c from "c/b/o_t1"  where ("c/b/o_t1".c_int + 1 == 2) and ("c/b/o_t1".c_int > 0 or "c/b/o_t1".c_float >= 0)) "c/b/o_t1" left semi join (select "//cbo_t2".key as p, "//cbo_t2".c_int as q, c_float as r from "//cbo_t2"  where ("//cbo_t2".c_int + 1 == 2) and ("//cbo_t2".c_int > 0 or "//cbo_t2".c_float >= 0)) "//cbo_t2" on "c/b/o_t1".a=p full outer join "cbo_/t3////" on "c/b/o_t1".a=key where  [...]
-
-select a, c, count(*) from (select key as a, c_int+1 as b, sum(c_int) as c from "c/b/o_t1" where ("c/b/o_t1".c_int + 1 >= 0) and ("c/b/o_t1".c_int > 0 or "c/b/o_t1".c_float >= 0)  group by c_float, "c/b/o_t1".c_int, key having "c/b/o_t1".c_float > 0 and (c_int >=1 or c_float >= 1) and (c_int + c_float) >= 0 order by a, a+b desc, c asc) "c/b/o_t1" left semi join (select key as p, c_int+1 as q, sum(c_int) as r from "//cbo_t2" where ("//cbo_t2".c_int + 1 >= 0) and ("//cbo_t2".c_int > 0 or " [...]
-
-select a, c, count(*)  from (select key as a, c_int+1 as b, sum(c_int) as c from "c/b/o_t1" where ("c/b/o_t1".c_int + 1 >= 0) and ("c/b/o_t1".c_int > 0 or "c/b/o_t1".c_float >= 0)  group by c_float, "c/b/o_t1".c_int, key having "c/b/o_t1".c_float > 0 and (c_int >=1 or c_float >= 1) and (c_int + c_float) >= 0 order by a+b desc, c asc limit 5) "c/b/o_t1" left semi join (select key as p, c_int+1 as q, sum(c_int) as r from "//cbo_t2" where ("//cbo_t2".c_int + 1 >= 0) and ("//cbo_t2".c_int >  [...]
-
-
-set hive.cbo.enable=false;
-
-set hive.exec.check.crossproducts=false;
-
-
-
-set hive.stats.fetch.column.stats=true;
-
-set hive.auto.convert.join=false;
-
+explain select "c/b/o_t1".c_int           from "c/b/o_t1" left semi join   "//cbo_t2" on "c/b/o_t1".key="//cbo_t2".key;
 
 
 -- 1. Test Select + TS
-
-select * from "c/b/o_t1";
-
-select * from "c/b/o_t1" as "c/b/o_t1";
-
-select * from "c/b/o_t1" as "//cbo_t2";
-
-
-
-select "c/b/o_t1".key as x, c_int as c_int, (((c_int+c_float)*10)+5) as y from "c/b/o_t1";
-
-select * from "c/b/o_t1" where (((key=1) and (c_float=10)) and (c_int=20));
-
-
+explain select * from "c/b/o_t1" as "c/b/o_t1";
 
 -- 2. Test Select + TS + FIL
-
-select * from "c/b/o_t1" where "c/b/o_t1".c_int >= 0;
-
-select * from "c/b/o_t1" as "c/b/o_t1"  where "c/b/o_t1".c_int >= 0 and c_float+c_int >= 0 or c_float <= 100;
-
-select * from "c/b/o_t1" as "//cbo_t2" where "//cbo_t2".c_int >= 0 and c_float+c_int >= 0 or c_float <= 100;
-
-
-
-select "//cbo_t2".key as x, c_int as c_int, (((c_int+c_float)*10)+5) as y from "c/b/o_t1" as "//cbo_t2"  where "//cbo_t2".c_int >= 0 and c_float+c_int >= 0 or c_float <= 100;
-
-
+explain select * from "c/b/o_t1" as "c/b/o_t1"  where "c/b/o_t1".c_int >= 0 and c_float+c_int >= 0 or c_float <= 100;
 
 -- 3 Test Select + Select + TS + FIL
-
-select * from (select * from "c/b/o_t1" where "c/b/o_t1".c_int >= 0) as "c/b/o_t1";
-
-select * from (select * from "c/b/o_t1" as "c/b/o_t1"  where "c/b/o_t1".c_int >= 0 and c_float+c_int >= 0 or c_float <= 100) as "c/b/o_t1";
-
-select * from (select * from "c/b/o_t1" as "//cbo_t2" where "//cbo_t2".c_int >= 0 and c_float+c_int >= 0 or c_float <= 100) as "c/b/o_t1";
-
-select * from (select "//cbo_t2".key as x, c_int as c_int, (((c_int+c_float)*10)+5) as y from "c/b/o_t1" as "//cbo_t2"  where "//cbo_t2".c_int >= 0 and c_float+c_int >= 0 or c_float <= 100) as "c/b/o_t1";
-
-
-
-select * from (select * from "c/b/o_t1" where "c/b/o_t1".c_int >= 0) as "c/b/o_t1" where "c/b/o_t1".c_int >= 0;
-
-select * from (select * from "c/b/o_t1" as "c/b/o_t1"  where "c/b/o_t1".c_int >= 0 and c_float+c_int >= 0 or c_float <= 100) as "c/b/o_t1"  where "c/b/o_t1".c_int >= 0 and c_float+c_int >= 0 or c_float <= 100;
-
-select * from (select * from "c/b/o_t1" as "//cbo_t2" where "//cbo_t2".c_int >= 0 and c_float+c_int >= 0 or c_float <= 100) as "//cbo_t2" where "//cbo_t2".c_int >= 0 and c_float+c_int >= 0 or c_float <= 100;
-
-select * from (select "//cbo_t2".key as x, c_int as c_int, (((c_int+c_float)*10)+5) as y from "c/b/o_t1" as "//cbo_t2"  where "//cbo_t2".c_int >= 0 and c_float+c_int >= 0 or c_float <= 100) as "c/b/o_t1" where "c/b/o_t1".c_int >= 0 and y+c_int >= 0 or x <= 100;
-
-
-
-select "c/b/o_t1".c_int+c_float as x , c_int as c_int, (((c_int+c_float)*10)+5) as y from (select * from "c/b/o_t1" where "c/b/o_t1".c_int >= 0) as "c/b/o_t1" where "c/b/o_t1".c_int >= 0;
-
-select "//cbo_t2".c_int+c_float as x , c_int as c_int, (((c_int+c_float)*10)+5) as y from (select * from "c/b/o_t1" where "c/b/o_t1".c_int >= 0) as "//cbo_t2" where "//cbo_t2".c_int >= 0;
-
-
-
-
-
-
-
-select * from (select * from "c/b/o_t1" where "c/b/o_t1".c_int >= 0) as "c/b/o_t1" where "c/b/o_t1".c_int >= 0;
-
-select * from (select * from "c/b/o_t1" as "c/b/o_t1"  where "c/b/o_t1".c_int >= 0 and c_float+c_int >= 0 or c_float <= 100) as "c/b/o_t1"  where "c/b/o_t1".c_int >= 0 and c_float+c_int >= 0 or c_float <= 100;
-
-select * from (select * from "c/b/o_t1" as "//cbo_t2" where "//cbo_t2".c_int >= 0 and c_float+c_int >= 0 or c_float <= 100) as "//cbo_t2" where "//cbo_t2".c_int >= 0 and c_float+c_int >= 0 or c_float <= 100;
-
-select * from (select "//cbo_t2".key as x, c_int as c_int, (((c_int+c_float)*10)+5) as y from "c/b/o_t1" as "//cbo_t2"  where "//cbo_t2".c_int >= 0 and c_float+c_int >= 0 or c_float <= 100) as "c/b/o_t1" where "c/b/o_t1".c_int >= 0 and y+c_int >= 0 or x <= 100;
-
-
-
-select "c/b/o_t1".c_int+c_float as x , c_int as c_int, (((c_int+c_float)*10)+5) as y from (select * from "c/b/o_t1" where "c/b/o_t1".c_int >= 0) as "c/b/o_t1" where "c/b/o_t1".c_int >= 0;
-
-select "//cbo_t2".c_int+c_float as x , c_int as c_int, (((c_int+c_float)*10)+5) as y from (select * from "c/b/o_t1" where "c/b/o_t1".c_int >= 0) as "//cbo_t2" where "//cbo_t2".c_int >= 0;
-
-
-
-
-
-
+explain select * from (select * from "c/b/o_t1" where "c/b/o_t1".c_int >= 0) as "c/b/o_t1";
 
 -- 13. null expr in select list
-
-select null from "cbo_/t3////";
-
-
+explain select null from "cbo_/t3////";
 
 -- 14. unary operator
-
-select key from "c/b/o_t1" where c_int = -6  or c_int = +6;
-
-
+explain select key from "c/b/o_t1" where c_int = -6  or c_int = +6;
 
 -- 15. query referencing only partition columns
-
-select count("c/b/o_t1".dt) from "c/b/o_t1" join "//cbo_t2" on "c/b/o_t1".dt  = "//cbo_t2".dt  where "c/b/o_t1".dt = '2014' ;
-
-set hive.cbo.enable=false;
-
-set hive.exec.check.crossproducts=false;
-
-
-
-set hive.stats.fetch.column.stats=true;
-
-set hive.auto.convert.join=false;
-
-
+explain select count("c/b/o_t1".dt) from "c/b/o_t1" join "//cbo_t2" on "c/b/o_t1".dt  = "//cbo_t2".dt  where "c/b/o_t1".dt = '2014' ;
 
 -- 20. Test get stats with empty partition list
-
-select "c/b/o_t1".value from "c/b/o_t1" join "//cbo_t2" on "c/b/o_t1".key = "//cbo_t2".key where "c/b/o_t1".dt = '10' and "c/b/o_t1".c_boolean = true;
-
-
-
-set hive.cbo.enable=false;
-
-set hive.exec.check.crossproducts=false;
-
-
-
-set hive.stats.fetch.column.stats=true;
-
-set hive.auto.convert.join=false;
+explain select "c/b/o_t1".value from "c/b/o_t1" join "//cbo_t2" on "c/b/o_t1".key = "//cbo_t2".key where "c/b/o_t1".dt = '10' and "c/b/o_t1".c_boolean = true;
 
 
 
@@ -490,7 +130,7 @@ set hive.auto.convert.join=false;
 
 -- distinct, corr
 
-select *
+explain select *
 
 from "src/_/cbo" b
 
@@ -510,7 +150,7 @@ where not exists
 
 -- no agg, corr, having
 
-select *
+explain select *
 
 from "src/_/cbo" b
 
@@ -534,7 +174,7 @@ having not exists
 
 -- view test
 
-create view cv1 as
+create view cv1_n0 as
 
 select *
 
@@ -552,7 +192,7 @@ where exists
 
 
 
-select * from cv1
+select * from cv1_n0
 
 ;
 
@@ -560,7 +200,7 @@ select * from cv1
 
 -- sq in from
 
-select *
+explain select *
 
 from (select *
 
@@ -582,7 +222,7 @@ from (select *
 
 -- sq in from, having
 
-select *
+explain select *
 
 from (select b.key, count(*)
 
@@ -606,23 +246,11 @@ from (select b.key, count(*)
 
 
 
-set hive.cbo.enable=false;
-
-set hive.exec.check.crossproducts=false;
-
-
-
-set hive.stats.fetch.column.stats=true;
-
-set hive.auto.convert.join=false;
-
-
-
 -- 17. SubQueries In
 
 -- non agg, non corr
 
-select *
+explain select *
 
 from "src/_/cbo"
 
@@ -640,7 +268,7 @@ where "src/_/cbo".key in (select key from "src/_/cbo" s1 where s1.key > '9') ord
 
 -- distinct, corr
 
-select *
+explain select *
 
 from "src/_/cbo" b
 
@@ -660,7 +288,7 @@ where b.key in
 
 -- non agg, corr, with join in Parent Query
 
-select p.p_partkey, li.l_suppkey
+explain select p.p_partkey, li.l_suppkey
 
 from (select distinct l_partkey as p_partkey from "line/item") p join "line/item" li on p.p_partkey = li.l_partkey
 
@@ -686,7 +314,7 @@ where li.l_linenumber = 1 and
 
 -- Stage 6: Stage 2 o/p semijoin Stage 5
 
-select key, value, count(*)
+explain select key, value, count(*)
 
 from "src/_/cbo" b
 
@@ -702,7 +330,7 @@ having count(*) in (select count(*) from "src/_/cbo" s1 where s1.key > '9' group
 
 -- non agg, non corr, windowing
 
-select p_mfgr, p_name, avg(p_size)
+explain select p_mfgr, p_name, avg(p_size)
 
 from "p/a/r/t"
 
@@ -716,23 +344,11 @@ having p_name in
 
 
 
-set hive.cbo.enable=false;
-
-set hive.exec.check.crossproducts=false;
-
-
-
-set hive.stats.fetch.column.stats=true;
-
-set hive.auto.convert.join=false;
-
-
-
 -- 16. SubQueries Not In
 
 -- non agg, non corr
 
-select *
+explain select *
 
 from "src/_/cbo"
 
@@ -750,7 +366,7 @@ where "src/_/cbo".key not in
 
 -- non agg, corr
 
-select p_mfgr, b.p_name, p_size
+explain select p_mfgr, b.p_name, p_size
 
 from "p/a/r/t" b
 
@@ -770,7 +386,7 @@ where b.p_name not in
 
 -- agg, non corr
 
-select p_name, p_size
+explain select p_name, p_size
 
 from
 
@@ -790,7 +406,7 @@ from
 
 -- agg, corr
 
-select p_mfgr, p_name, p_size
+explain select p_mfgr, p_name, p_size
 
 from "p/a/r/t" b where b.p_size not in
 
@@ -808,7 +424,7 @@ from "p/a/r/t" b where b.p_size not in
 
 -- non agg, non corr, Group By in Parent Query
 
-select li.l_partkey, count(*)
+explain select li.l_partkey, count(*)
 
 from "line/item" li
 
@@ -828,7 +444,7 @@ group by li.l_partkey order by li.l_partkey
 
 -- non agg, corr, having
 
-select b.p_mfgr, min(p_retailprice)
+explain select b.p_mfgr, min(p_retailprice)
 
 from "p/a/r/t" b
 
@@ -852,7 +468,7 @@ having b.p_mfgr not in
 
 -- agg, non corr, having
 
-select b.p_mfgr, min(p_retailprice)
+explain select b.p_mfgr, min(p_retailprice)
 
 from "p/a/r/t" b
 
@@ -876,53 +492,12 @@ having b.p_mfgr not in
 
 
 
-set hive.cbo.enable=false;
-
-set hive.exec.check.crossproducts=false;
-
-
-
-set hive.stats.fetch.column.stats=true;
-
-set hive.auto.convert.join=false;
-
-
-
 -- SORT_QUERY_RESULTS
 
 
 
 -- 8. Test UDF/UDAF
-
-select count(*), count(c_int), sum(c_int), avg(c_int), max(c_int), min(c_int) from "c/b/o_t1";
-
-select count(*), count(c_int) as a, sum(c_int), avg(c_int), max(c_int), min(c_int), case c_int when 0  then 1 when 1 then 2 else 3 end, sum(case c_int when 0  then 1 when 1 then 2 else 3 end) from "c/b/o_t1" group by c_int order by a;
-
-select * from (select count(*) as a, count(distinct c_int) as b, sum(c_int) as c, avg(c_int) as d, max(c_int) as e, min(c_int) as f from "c/b/o_t1") "c/b/o_t1";
-
-select * from (select count(*) as a, count(distinct c_int) as b, sum(c_int) as c, avg(c_int) as d, max(c_int) as e, min(c_int) as f, case c_int when 0  then 1 when 1 then 2 else 3 end as g, sum(case c_int when 0  then 1 when 1 then 2 else 3 end) as h from "c/b/o_t1" group by c_int) "c/b/o_t1" order by a;
-
-select f,a,e,b from (select count(*) as a, count(c_int) as b, sum(c_int) as c, avg(c_int) as d, max(c_int) as e, min(c_int) as f from "c/b/o_t1") "c/b/o_t1";
-
-select f,a,e,b from (select count(*) as a, count(distinct c_int) as b, sum(distinct c_int) as c, avg(distinct c_int) as d, max(distinct c_int) as e, min(distinct c_int) as f from "c/b/o_t1") "c/b/o_t1";
-
-select key,count(c_int) as a, avg(c_float) from "c/b/o_t1" group by key order by a;
-
-select count(distinct c_int) as a, avg(c_float) from "c/b/o_t1" group by c_float order by a;
-
-select count(distinct c_int) as a, avg(c_float) from "c/b/o_t1" group by c_int order by a;
-
-select count(distinct c_int) as a, avg(c_float) from "c/b/o_t1" group by c_float, c_int order by a;
-
-set hive.cbo.enable=false;
-
-set hive.exec.check.crossproducts=false;
-
-
-
-set hive.stats.fetch.column.stats=true;
-
-set hive.auto.convert.join=false;
+explain select f,a,e,b from (select count(*) as a, count(c_int) as b, sum(c_int) as c, avg(c_int) as d, max(c_int) as e, min(c_int) as f from "c/b/o_t1") "c/b/o_t1";
 
 
 
@@ -931,56 +506,39 @@ set hive.auto.convert.join=false;
 
 
 -- 11. Union All
-
-select * from (select * from "c/b/o_t1" order by key, c_boolean, value, dt)a union all select * from (select * from "//cbo_t2" order by key, c_boolean, value, dt)b;
-
-select key from (select key, c_int from (select * from "c/b/o_t1" union all select * from "//cbo_t2" where "//cbo_t2".key >=0)r1 union all select key, c_int from "cbo_/t3////")r2 where key >=0 order by key;
-
-select r2.key from (select key, c_int from (select key, c_int from "c/b/o_t1" union all select key, c_int from "cbo_/t3////" )r1 union all select key, c_int from "cbo_/t3////")r2 join   (select key, c_int from (select * from "c/b/o_t1" union all select * from "//cbo_t2" where "//cbo_t2".key >=0)r1 union all select key, c_int from "cbo_/t3////")r3 on r2.key=r3.key where r3.key >=0 order by r2.key;
-
-
-
-set hive.cbo.enable=false;
-
-set hive.exec.check.crossproducts=false;
-
-
-
-set hive.stats.fetch.column.stats=true;
-
-set hive.auto.convert.join=false;
+explain select * from (select * from "c/b/o_t1" order by key, c_boolean, value, dt)a union all select * from (select * from "//cbo_t2" order by key, c_boolean, value, dt)b;
 
 
 
 -- 10. Test views
 
-create view v1 as select c_int, value, c_boolean, dt from "c/b/o_t1";
+create view v1_n7 as select c_int, value, c_boolean, dt from "c/b/o_t1";
 
-create view v2 as select c_int, value from "//cbo_t2";
+create view v2_n2 as select c_int, value from "//cbo_t2";
 
 
 
-select value from v1 where c_boolean=false;
+select value from v1_n7 where c_boolean=false;
 
-select max(c_int) from v1 group by (c_boolean);
+select max(c_int) from v1_n7 group by (c_boolean);
 
 
 
-select count(v1.c_int)  from v1 join "//cbo_t2" on v1.c_int = "//cbo_t2".c_int;
+select count(v1_n7.c_int)  from v1_n7 join "//cbo_t2" on v1_n7.c_int = "//cbo_t2".c_int;
 
-select count(v1.c_int)  from v1 join v2 on v1.c_int = v2.c_int;
+select count(v1_n7.c_int)  from v1_n7 join v2_n2 on v1_n7.c_int = v2_n2.c_int;
 
 
 
-select count(*) from v1 a join v1 b on a.value = b.value;
+select count(*) from v1_n7 a join v1_n7 b on a.value = b.value;
 
 
 
-create view v3 as select v1.value val from v1 join "c/b/o_t1" on v1.c_boolean = "c/b/o_t1".c_boolean;
+create view v3_n0 as select v1_n7.value val from v1_n7 join "c/b/o_t1" on v1_n7.c_boolean = "c/b/o_t1".c_boolean;
 
 
 
-select count(val) from v3 where val != '1';
+select count(val) from v3_n0 where val != '1';
 
 with q1 as ( select key from "c/b/o_t1" where key = '1')
 
@@ -988,13 +546,13 @@ select count(*) from q1;
 
 
 
-with q1 as ( select value from v1 where c_boolean = false)
+with q1 as ( select value from v1_n7 where c_boolean = false)
 
 select count(value) from q1 ;
 
 
 
-create view v4 as
+create view v4_n0 as
 
 with q1 as ( select key,c_int from "c/b/o_t1"  where key = '1')
 
@@ -1006,7 +564,7 @@ select * from q1
 
 with q1 as ( select c_int from q2 where c_boolean = false),
 
-q2 as ( select c_int,c_boolean from v1  where value = '1')
+q2 as ( select c_int,c_boolean from v1_n7  where value = '1')
 
 select sum(c_int) from (select c_int from q1) a;
 
@@ -1014,67 +572,37 @@ select sum(c_int) from (select c_int from q1) a;
 
 with q1 as ( select "c/b/o_t1".c_int c_int from q2 join "c/b/o_t1" where q2.c_int = "c/b/o_t1".c_int  and "c/b/o_t1".dt='2014'),
 
-q2 as ( select c_int,c_boolean from v1  where value = '1' or dt = '14')
-
-select count(*) from q1 join q2 join v4 on q1.c_int = q2.c_int and v4.c_int = q2.c_int;
-
-
-
-
+q2 as ( select c_int,c_boolean from v1_n7  where value = '1' or dt = '14')
 
-drop view v1;
+select count(*) from q1 join q2 join v4_n0 on q1.c_int = q2.c_int and v4_n0.c_int = q2.c_int;
 
-drop view v2;
 
-drop view v3;
 
-drop view v4;
 
-set hive.cbo.enable=false;
-
-set hive.exec.check.crossproducts=false;
 
+drop view v1_n7;
 
+drop view v2_n2;
 
-set hive.stats.fetch.column.stats=true;
-
-set hive.auto.convert.join=false;
-
+drop view v3_n0;
 
+drop view v4_n0;
 
 -- 9. Test Windowing Functions
 
 -- SORT_QUERY_RESULTS
 
+explain select count(c_int) over(partition by c_float order by key), sum(c_float) over(partition by c_float order by key), max(c_int) over(partition by c_float order by key), min(c_int) over(partition by c_float order by key), row_number() over(partition by c_float order by key) as rn, rank() over(partition by c_float order by key), dense_rank() over(partition by c_float order by key), round(percent_rank() over(partition by c_float order by key), 2), lead(c_int, 2, c_int) over(partition  [...]
 
 
-select count(c_int) over() from "c/b/o_t1";
-
-select count(c_int) over(partition by c_float order by key), sum(c_float) over(partition by c_float order by key), max(c_int) over(partition by c_float order by key), min(c_int) over(partition by c_float order by key), row_number() over(partition by c_float order by key) as rn, rank() over(partition by c_float order by key), dense_rank() over(partition by c_float order by key), round(percent_rank() over(partition by c_float order by key), 2), lead(c_int, 2, c_int) over(partition by c_flo [...]
-
-select * from (select count(c_int) over(partition by c_float order by key), sum(c_float) over(partition by c_float order by key), max(c_int) over(partition by c_float order by key), min(c_int) over(partition by c_float order by key), row_number() over(partition by c_float order by key) as rn, rank() over(partition by c_float order by key), dense_rank() over(partition by c_float order by key), round(percent_rank() over(partition by c_float order by key),2), lead(c_int, 2, c_int) over(part [...]
-
-select x from (select count(c_int) over() as x, sum(c_float) over() from "c/b/o_t1") "c/b/o_t1";
-
-select 1+sum(c_int) over() from "c/b/o_t1";
-
-select sum(c_int)+sum(sum(c_int)) over() from "c/b/o_t1";
-
-select * from (select max(c_int) over (partition by key order by value Rows UNBOUNDED PRECEDING), min(c_int) over (partition by key order by value rows current row), count(c_int) over(partition by key order by value ROWS 1 PRECEDING), avg(value) over (partition by key order by value Rows between unbounded preceding and unbounded following), sum(value) over (partition by key order by value rows between unbounded preceding and current row), avg(c_float) over (partition by key order by valu [...]
-
-select i, a, h, b, c, d, e, f, g, a as x, a +1 as y from (select max(c_int) over (partition by key order by value range UNBOUNDED PRECEDING) a, min(c_int) over (partition by key order by value range current row) b, count(c_int) over(partition by key order by value range 1 PRECEDING) c, avg(value) over (partition by key order by value range between unbounded preceding and unbounded following) d, sum(value) over (partition by key order by value range between unbounded preceding and current [...]
-
-select *, rank() over(partition by key order by value) as rr from default.src1;
-
-select *, rank() over(partition by key order by value) from default.src1;
 
 insert into table "src/_/cbo" select * from default.src;
 
-select * from "src/_/cbo" order by key, value limit 1;
+explain select * from "src/_/cbo" limit 1;
 
 insert overwrite table "src/_/cbo" select * from default.src;
 
-select * from "src/_/cbo" order by key, value limit 1;
+explain select * from "src/_/cbo" limit 1;
 
 drop table "t//";
 create table "t//" (col string);
@@ -1084,5 +612,3 @@ analyze table "t//" compute statistics;
 explain select * from "t//";
 
 drop database "db~!@@#$%^&*(),<>" cascade;
-
-set hive.support.quoted.identifiers=column;
diff --git a/ql/src/test/results/clientpositive/llap/special_character_in_tabnames_1.q.out b/ql/src/test/results/clientpositive/llap/special_character_in_tabnames_1.q.out
index 14c8fad..0f13ef5 100644
--- a/ql/src/test/results/clientpositive/llap/special_character_in_tabnames_1.q.out
+++ b/ql/src/test/results/clientpositive/llap/special_character_in_tabnames_1.q.out
@@ -158,18 +158,6 @@ POSTHOOK: Output: database:db~!@#$%^&*(),<>
 POSTHOOK: Output: db~!@#$%^&*(),<>@src/_/cbo
 POSTHOOK: Lineage: src/_/cbo.key SIMPLE [(src)src.FieldSchema(name:key, type:string, comment:default), ]
 POSTHOOK: Lineage: src/_/cbo.value SIMPLE [(src)src.FieldSchema(name:value, type:string, comment:default), ]
-PREHOOK: query: analyze table `c/b/o_t1` partition (dt) compute statistics
-PREHOOK: type: QUERY
-PREHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1
-PREHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1@dt=2014
-PREHOOK: Output: db~!@#$%^&*(),<>@c/b/o_t1
-PREHOOK: Output: db~!@#$%^&*(),<>@c/b/o_t1@dt=2014
-POSTHOOK: query: analyze table `c/b/o_t1` partition (dt) compute statistics
-POSTHOOK: type: QUERY
-POSTHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1
-POSTHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1@dt=2014
-POSTHOOK: Output: db~!@#$%^&*(),<>@c/b/o_t1
-POSTHOOK: Output: db~!@#$%^&*(),<>@c/b/o_t1@dt=2014
 PREHOOK: query: analyze table `c/b/o_t1` compute statistics for columns key, value, c_int, c_float, c_boolean
 PREHOOK: type: ANALYZE_TABLE
 PREHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1
@@ -184,18 +172,6 @@ POSTHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1@dt=2014
 POSTHOOK: Output: db~!@#$%^&*(),<>@c/b/o_t1
 POSTHOOK: Output: db~!@#$%^&*(),<>@c/b/o_t1@dt=2014
 #### A masked pattern was here ####
-PREHOOK: query: analyze table `//cbo_t2` partition (dt) compute statistics
-PREHOOK: type: QUERY
-PREHOOK: Input: db~!@#$%^&*(),<>@//cbo_t2
-PREHOOK: Input: db~!@#$%^&*(),<>@//cbo_t2@dt=2014
-PREHOOK: Output: db~!@#$%^&*(),<>@//cbo_t2
-PREHOOK: Output: db~!@#$%^&*(),<>@//cbo_t2@dt=2014
-POSTHOOK: query: analyze table `//cbo_t2` partition (dt) compute statistics
-POSTHOOK: type: QUERY
-POSTHOOK: Input: db~!@#$%^&*(),<>@//cbo_t2
-POSTHOOK: Input: db~!@#$%^&*(),<>@//cbo_t2@dt=2014
-POSTHOOK: Output: db~!@#$%^&*(),<>@//cbo_t2
-POSTHOOK: Output: db~!@#$%^&*(),<>@//cbo_t2@dt=2014
 PREHOOK: query: analyze table `//cbo_t2` compute statistics for columns key, value, c_int, c_float, c_boolean
 PREHOOK: type: ANALYZE_TABLE
 PREHOOK: Input: db~!@#$%^&*(),<>@//cbo_t2
@@ -210,14 +186,6 @@ POSTHOOK: Input: db~!@#$%^&*(),<>@//cbo_t2@dt=2014
 POSTHOOK: Output: db~!@#$%^&*(),<>@//cbo_t2
 POSTHOOK: Output: db~!@#$%^&*(),<>@//cbo_t2@dt=2014
 #### A masked pattern was here ####
-PREHOOK: query: analyze table `cbo_/t3////` compute statistics
-PREHOOK: type: QUERY
-PREHOOK: Input: db~!@#$%^&*(),<>@cbo_/t3////
-PREHOOK: Output: db~!@#$%^&*(),<>@cbo_/t3////
-POSTHOOK: query: analyze table `cbo_/t3////` compute statistics
-POSTHOOK: type: QUERY
-POSTHOOK: Input: db~!@#$%^&*(),<>@cbo_/t3////
-POSTHOOK: Output: db~!@#$%^&*(),<>@cbo_/t3////
 PREHOOK: query: analyze table `cbo_/t3////` compute statistics for columns key, value, c_int, c_float, c_boolean
 PREHOOK: type: ANALYZE_TABLE
 PREHOOK: Input: db~!@#$%^&*(),<>@cbo_/t3////
@@ -228,14 +196,6 @@ POSTHOOK: type: ANALYZE_TABLE
 POSTHOOK: Input: db~!@#$%^&*(),<>@cbo_/t3////
 POSTHOOK: Output: db~!@#$%^&*(),<>@cbo_/t3////
 #### A masked pattern was here ####
-PREHOOK: query: analyze table `src/_/cbo` compute statistics
-PREHOOK: type: QUERY
-PREHOOK: Input: db~!@#$%^&*(),<>@src/_/cbo
-PREHOOK: Output: db~!@#$%^&*(),<>@src/_/cbo
-POSTHOOK: query: analyze table `src/_/cbo` compute statistics
-POSTHOOK: type: QUERY
-POSTHOOK: Input: db~!@#$%^&*(),<>@src/_/cbo
-POSTHOOK: Output: db~!@#$%^&*(),<>@src/_/cbo
 PREHOOK: query: analyze table `src/_/cbo` compute statistics for columns
 PREHOOK: type: ANALYZE_TABLE
 PREHOOK: Input: db~!@#$%^&*(),<>@src/_/cbo
@@ -246,14 +206,6 @@ POSTHOOK: type: ANALYZE_TABLE
 POSTHOOK: Input: db~!@#$%^&*(),<>@src/_/cbo
 POSTHOOK: Output: db~!@#$%^&*(),<>@src/_/cbo
 #### A masked pattern was here ####
-PREHOOK: query: analyze table `p/a/r/t` compute statistics
-PREHOOK: type: QUERY
-PREHOOK: Input: db~!@#$%^&*(),<>@p/a/r/t
-PREHOOK: Output: db~!@#$%^&*(),<>@p/a/r/t
-POSTHOOK: query: analyze table `p/a/r/t` compute statistics
-POSTHOOK: type: QUERY
-POSTHOOK: Input: db~!@#$%^&*(),<>@p/a/r/t
-POSTHOOK: Output: db~!@#$%^&*(),<>@p/a/r/t
 PREHOOK: query: analyze table `p/a/r/t` compute statistics for columns
 PREHOOK: type: ANALYZE_TABLE
 PREHOOK: Input: db~!@#$%^&*(),<>@p/a/r/t
@@ -264,14 +216,6 @@ POSTHOOK: type: ANALYZE_TABLE
 POSTHOOK: Input: db~!@#$%^&*(),<>@p/a/r/t
 POSTHOOK: Output: db~!@#$%^&*(),<>@p/a/r/t
 #### A masked pattern was here ####
-PREHOOK: query: analyze table `line/item` compute statistics
-PREHOOK: type: QUERY
-PREHOOK: Input: db~!@#$%^&*(),<>@line/item
-PREHOOK: Output: db~!@#$%^&*(),<>@line/item
-POSTHOOK: query: analyze table `line/item` compute statistics
-POSTHOOK: type: QUERY
-POSTHOOK: Input: db~!@#$%^&*(),<>@line/item
-POSTHOOK: Output: db~!@#$%^&*(),<>@line/item
 PREHOOK: query: analyze table `line/item` compute statistics for columns
 PREHOOK: type: ANALYZE_TABLE
 PREHOOK: Input: db~!@#$%^&*(),<>@line/item
@@ -297,18493 +241,3833 @@ POSTHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1@dt=2014
 1	4	12
 1 	4	2
 NULL	NULL	NULL
-PREHOOK: query: select x, y, count(*) from (select key, (c_int+c_float+1+2) as x, sum(c_int) as y from `c/b/o_t1` group by c_float, `c/b/o_t1`.c_int, key) R group by y, x
+PREHOOK: query: select unionsrc.key FROM (select 'max' as key, max(c_int) as value from `cbo_/t3////` s1
+
+UNION  ALL
+
+    select 'min' as key,  min(c_int) as value from `cbo_/t3////` s2
+
+    UNION ALL
+
+        select 'avg' as key,  avg(c_int) as value from `cbo_/t3////` s3) unionsrc order by unionsrc.key
 PREHOOK: type: QUERY
-PREHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1
-PREHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1@dt=2014
+PREHOOK: Input: db~!@#$%^&*(),<>@cbo_/t3////
 #### A masked pattern was here ####
-POSTHOOK: query: select x, y, count(*) from (select key, (c_int+c_float+1+2) as x, sum(c_int) as y from `c/b/o_t1` group by c_float, `c/b/o_t1`.c_int, key) R group by y, x
+POSTHOOK: query: select unionsrc.key FROM (select 'max' as key, max(c_int) as value from `cbo_/t3////` s1
+
+UNION  ALL
+
+    select 'min' as key,  min(c_int) as value from `cbo_/t3////` s2
+
+    UNION ALL
+
+        select 'avg' as key,  avg(c_int) as value from `cbo_/t3////` s3) unionsrc order by unionsrc.key
 POSTHOOK: type: QUERY
-POSTHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1
-POSTHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1@dt=2014
+POSTHOOK: Input: db~!@#$%^&*(),<>@cbo_/t3////
 #### A masked pattern was here ####
-5.0	12	1
-5.0	2	3
-NULL	NULL	1
-PREHOOK: query: select `cbo_/t3////`.c_int, c, count(*) from (select key as a, c_int+1 as b, sum(c_int) as c from `c/b/o_t1` where (`c/b/o_t1`.c_int + 1 >= 0) and (`c/b/o_t1`.c_int > 0 or `c/b/o_t1`.c_float >= 0) group by c_float, `c/b/o_t1`.c_int, key order by a) `c/b/o_t1` join (select key as p, c_int+1 as q, sum(c_int) as r from `//cbo_t2` where (`//cbo_t2`.c_int + 1 >= 0) and (`//cbo_t2`.c_int > 0 or `//cbo_t2`.c_float >= 0)  group by c_float, `//cbo_t2`.c_int, key order by q/10 desc [...]
+avg
+max
+min
+PREHOOK: query: explain select `c/b/o_t1`.key from `c/b/o_t1` join `cbo_/t3////`
 PREHOOK: type: QUERY
-PREHOOK: Input: db~!@#$%^&*(),<>@//cbo_t2
-PREHOOK: Input: db~!@#$%^&*(),<>@//cbo_t2@dt=2014
 PREHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1
 PREHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1@dt=2014
 PREHOOK: Input: db~!@#$%^&*(),<>@cbo_/t3////
 #### A masked pattern was here ####
-POSTHOOK: query: select `cbo_/t3////`.c_int, c, count(*) from (select key as a, c_int+1 as b, sum(c_int) as c from `c/b/o_t1` where (`c/b/o_t1`.c_int + 1 >= 0) and (`c/b/o_t1`.c_int > 0 or `c/b/o_t1`.c_float >= 0) group by c_float, `c/b/o_t1`.c_int, key order by a) `c/b/o_t1` join (select key as p, c_int+1 as q, sum(c_int) as r from `//cbo_t2` where (`//cbo_t2`.c_int + 1 >= 0) and (`//cbo_t2`.c_int > 0 or `//cbo_t2`.c_float >= 0)  group by c_float, `//cbo_t2`.c_int, key order by q/10 des [...]
+POSTHOOK: query: explain select `c/b/o_t1`.key from `c/b/o_t1` join `cbo_/t3////`
 POSTHOOK: type: QUERY
-POSTHOOK: Input: db~!@#$%^&*(),<>@//cbo_t2
-POSTHOOK: Input: db~!@#$%^&*(),<>@//cbo_t2@dt=2014
 POSTHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1
 POSTHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1@dt=2014
 POSTHOOK: Input: db~!@#$%^&*(),<>@cbo_/t3////
 #### A masked pattern was here ####
-1	12	6
-1	2	6
-PREHOOK: query: select `cbo_/t3////`.c_int, c, count(*) from (select key as a, c_int+1 as b, sum(c_int) as c from `c/b/o_t1` where (`c/b/o_t1`.c_int + 1 >= 0) and (`c/b/o_t1`.c_int > 0 or `c/b/o_t1`.c_float >= 0)  group by c_float, `c/b/o_t1`.c_int, key having `c/b/o_t1`.c_float > 0 and (c_int >=1 or c_float >= 1) and (c_int + c_float) >= 0 order by b % c asc, b desc) `c/b/o_t1` left outer join (select key as p, c_int+1 as q, sum(c_int) as r from `//cbo_t2` where (`//cbo_t2`.c_int + 1 >= [...]
+STAGE DEPENDENCIES:
+  Stage-1 is a root stage
+  Stage-0 depends on stages: Stage-1
+
+STAGE PLANS:
+  Stage: Stage-1
+    Tez
+#### A masked pattern was here ####
+      Edges:
+        Reducer 2 <- Map 1 (CUSTOM_SIMPLE_EDGE), Map 3 (CUSTOM_SIMPLE_EDGE)
+#### A masked pattern was here ####
+      Vertices:
+        Map 1 
+            Map Operator Tree:
+                TableScan
+                  alias: c/b/o_t1
+                  Statistics: Num rows: 20 Data size: 1615 Basic stats: COMPLETE Column stats: COMPLETE
+                  Reduce Output Operator
+                    null sort order: 
+                    sort order: 
+                    Statistics: Num rows: 20 Data size: 1615 Basic stats: COMPLETE Column stats: COMPLETE
+                    value expressions: key (type: string)
+            Execution mode: vectorized, llap
+            LLAP IO: no inputs
+        Map 3 
+            Map Operator Tree:
+                TableScan
+                  alias: cbo_/t3////
+                  Statistics: Num rows: 20 Data size: 262 Basic stats: COMPLETE Column stats: COMPLETE
+                  Reduce Output Operator
+                    null sort order: 
+                    sort order: 
+                    Statistics: Num rows: 20 Data size: 262 Basic stats: COMPLETE Column stats: COMPLETE
+            Execution mode: vectorized, llap
+            LLAP IO: no inputs
+        Reducer 2 
+            Execution mode: llap
+            Reduce Operator Tree:
+              Merge Join Operator
+                condition map:
+                     Inner Join 0 to 1
+                keys:
+                  0 
+                  1 
+                outputColumnNames: _col0
+                Statistics: Num rows: 400 Data size: 33915 Basic stats: COMPLETE Column stats: COMPLETE
+                File Output Operator
+                  compressed: false
+                  Statistics: Num rows: 400 Data size: 33915 Basic stats: COMPLETE Column stats: COMPLETE
+                  table:
+                      input format: org.apache.hadoop.mapred.SequenceFileInputFormat
+                      output format: org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat
+                      serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+
+  Stage: Stage-0
+    Fetch Operator
+      limit: -1
+      Processor Tree:
+        ListSink
+
+PREHOOK: query: explain select `c/b/o_t1`.c_int, `//cbo_t2`.c_int from `c/b/o_t1` join `//cbo_t2` on `c/b/o_t1`.key=`//cbo_t2`.key where (`c/b/o_t1`.c_int + `//cbo_t2`.c_int == 2) and (`c/b/o_t1`.c_int > 0 or `//cbo_t2`.c_float >= 0)
 PREHOOK: type: QUERY
 PREHOOK: Input: db~!@#$%^&*(),<>@//cbo_t2
 PREHOOK: Input: db~!@#$%^&*(),<>@//cbo_t2@dt=2014
 PREHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1
 PREHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1@dt=2014
-PREHOOK: Input: db~!@#$%^&*(),<>@cbo_/t3////
 #### A masked pattern was here ####
-POSTHOOK: query: select `cbo_/t3////`.c_int, c, count(*) from (select key as a, c_int+1 as b, sum(c_int) as c from `c/b/o_t1` where (`c/b/o_t1`.c_int + 1 >= 0) and (`c/b/o_t1`.c_int > 0 or `c/b/o_t1`.c_float >= 0)  group by c_float, `c/b/o_t1`.c_int, key having `c/b/o_t1`.c_float > 0 and (c_int >=1 or c_float >= 1) and (c_int + c_float) >= 0 order by b % c asc, b desc) `c/b/o_t1` left outer join (select key as p, c_int+1 as q, sum(c_int) as r from `//cbo_t2` where (`//cbo_t2`.c_int + 1 > [...]
+POSTHOOK: query: explain select `c/b/o_t1`.c_int, `//cbo_t2`.c_int from `c/b/o_t1` join `//cbo_t2` on `c/b/o_t1`.key=`//cbo_t2`.key where (`c/b/o_t1`.c_int + `//cbo_t2`.c_int == 2) and (`c/b/o_t1`.c_int > 0 or `//cbo_t2`.c_float >= 0)
 POSTHOOK: type: QUERY
 POSTHOOK: Input: db~!@#$%^&*(),<>@//cbo_t2
 POSTHOOK: Input: db~!@#$%^&*(),<>@//cbo_t2@dt=2014
 POSTHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1
 POSTHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1@dt=2014
-POSTHOOK: Input: db~!@#$%^&*(),<>@cbo_/t3////
 #### A masked pattern was here ####
-1	12	6
-1	2	6
-PREHOOK: query: select `cbo_/t3////`.c_int, c, count(*) from (select key as a, c_int+1 as b, sum(c_int) as c from `c/b/o_t1` where (`c/b/o_t1`.c_int + 1 >= 0) and (`c/b/o_t1`.c_int > 0 or `c/b/o_t1`.c_float >= 0)  group by c_float, `c/b/o_t1`.c_int, key having `c/b/o_t1`.c_float > 0 and (c_int >=1 or c_float >= 1) and (c_int + c_float) >= 0 order by b+c, a desc) `c/b/o_t1` right outer join (select key as p, c_int+1 as q, sum(c_int) as r from `//cbo_t2` where (`//cbo_t2`.c_int + 1 >= 0) a [...]
+STAGE DEPENDENCIES:
+  Stage-1 is a root stage
+  Stage-0 depends on stages: Stage-1
+
+STAGE PLANS:
+  Stage: Stage-1
+    Tez
+#### A masked pattern was here ####
+      Edges:
+        Reducer 2 <- Map 1 (SIMPLE_EDGE), Map 3 (SIMPLE_EDGE)
+#### A masked pattern was here ####
+      Vertices:
+        Map 1 
+            Map Operator Tree:
+                TableScan
+                  alias: c/b/o_t1
+                  filterExpr: key is not null (type: boolean)
+                  Statistics: Num rows: 20 Data size: 1691 Basic stats: COMPLETE Column stats: COMPLETE
+                  Filter Operator
+                    predicate: key is not null (type: boolean)
+                    Statistics: Num rows: 18 Data size: 1513 Basic stats: COMPLETE Column stats: COMPLETE
+                    Reduce Output Operator
+                      key expressions: key (type: string)
+                      null sort order: z
+                      sort order: +
+                      Map-reduce partition columns: key (type: string)
+                      Statistics: Num rows: 18 Data size: 1513 Basic stats: COMPLETE Column stats: COMPLETE
+                      value expressions: c_int (type: int)
+            Execution mode: vectorized, llap
+            LLAP IO: no inputs
+        Map 3 
+            Map Operator Tree:
+                TableScan
+                  alias: //cbo_t2
+                  filterExpr: key is not null (type: boolean)
+                  Statistics: Num rows: 20 Data size: 1767 Basic stats: COMPLETE Column stats: COMPLETE
+                  Filter Operator
+                    predicate: key is not null (type: boolean)
+                    Statistics: Num rows: 18 Data size: 1581 Basic stats: COMPLETE Column stats: COMPLETE
+                    Reduce Output Operator
+                      key expressions: key (type: string)
+                      null sort order: z
+                      sort order: +
+                      Map-reduce partition columns: key (type: string)
+                      Statistics: Num rows: 18 Data size: 1581 Basic stats: COMPLETE Column stats: COMPLETE
+                      value expressions: c_int (type: int), c_float (type: float)
+            Execution mode: vectorized, llap
+            LLAP IO: no inputs
+        Reducer 2 
+            Execution mode: llap
+            Reduce Operator Tree:
+              Merge Join Operator
+                condition map:
+                     Inner Join 0 to 1
+                keys:
+                  0 key (type: string)
+                  1 key (type: string)
+                outputColumnNames: _col2, _col11, _col12
+                Statistics: Num rows: 64 Data size: 756 Basic stats: COMPLETE Column stats: COMPLETE
+                Filter Operator
+                  predicate: (((_col2 + _col11) = 2) and ((_col2 > 0) or (_col12 >= 0.0))) (type: boolean)
+                  Statistics: Num rows: 32 Data size: 384 Basic stats: COMPLETE Column stats: COMPLETE
+                  Select Operator
+                    expressions: _col2 (type: int), _col11 (type: int)
+                    outputColumnNames: _col0, _col1
+                    Statistics: Num rows: 32 Data size: 256 Basic stats: COMPLETE Column stats: COMPLETE
+                    File Output Operator
+                      compressed: false
+                      Statistics: Num rows: 32 Data size: 256 Basic stats: COMPLETE Column stats: COMPLETE
+                      table:
+                          input format: org.apache.hadoop.mapred.SequenceFileInputFormat
+                          output format: org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat
+                          serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+
+  Stage: Stage-0
+    Fetch Operator
+      limit: -1
+      Processor Tree:
+        ListSink
+
+PREHOOK: query: explain select key, (c_int+1)+2 as x, sum(c_int) from `c/b/o_t1` group by c_float, `c/b/o_t1`.c_int, key order by x limit 1
 PREHOOK: type: QUERY
-PREHOOK: Input: db~!@#$%^&*(),<>@//cbo_t2
-PREHOOK: Input: db~!@#$%^&*(),<>@//cbo_t2@dt=2014
 PREHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1
 PREHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1@dt=2014
-PREHOOK: Input: db~!@#$%^&*(),<>@cbo_/t3////
 #### A masked pattern was here ####
-POSTHOOK: query: select `cbo_/t3////`.c_int, c, count(*) from (select key as a, c_int+1 as b, sum(c_int) as c from `c/b/o_t1` where (`c/b/o_t1`.c_int + 1 >= 0) and (`c/b/o_t1`.c_int > 0 or `c/b/o_t1`.c_float >= 0)  group by c_float, `c/b/o_t1`.c_int, key having `c/b/o_t1`.c_float > 0 and (c_int >=1 or c_float >= 1) and (c_int + c_float) >= 0 order by b+c, a desc) `c/b/o_t1` right outer join (select key as p, c_int+1 as q, sum(c_int) as r from `//cbo_t2` where (`//cbo_t2`.c_int + 1 >= 0)  [...]
+POSTHOOK: query: explain select key, (c_int+1)+2 as x, sum(c_int) from `c/b/o_t1` group by c_float, `c/b/o_t1`.c_int, key order by x limit 1
 POSTHOOK: type: QUERY
-POSTHOOK: Input: db~!@#$%^&*(),<>@//cbo_t2
-POSTHOOK: Input: db~!@#$%^&*(),<>@//cbo_t2@dt=2014
 POSTHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1
 POSTHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1@dt=2014
-POSTHOOK: Input: db~!@#$%^&*(),<>@cbo_/t3////
 #### A masked pattern was here ####
-1	12	6
-1	2	6
-PREHOOK: query: select `cbo_/t3////`.c_int, c, count(*) from (select key as a, c_int+1 as b, sum(c_int) as c from `c/b/o_t1` where (`c/b/o_t1`.c_int + 1 >= 0) and (`c/b/o_t1`.c_int > 0 or `c/b/o_t1`.c_float >= 0)  group by c_float, `c/b/o_t1`.c_int, key having `c/b/o_t1`.c_float > 0 and (c_int >=1 or c_float >= 1) and (c_int + c_float) >= 0 order by c+a desc) `c/b/o_t1` full outer join (select key as p, c_int+1 as q, sum(c_int) as r from `//cbo_t2` where (`//cbo_t2`.c_int + 1 >= 0) and ( [...]
+STAGE DEPENDENCIES:
+  Stage-1 is a root stage
+  Stage-0 depends on stages: Stage-1
+
+STAGE PLANS:
+  Stage: Stage-1
+    Tez
+#### A masked pattern was here ####
+      Edges:
+        Reducer 2 <- Map 1 (SIMPLE_EDGE)
+        Reducer 3 <- Reducer 2 (SIMPLE_EDGE)
+#### A masked pattern was here ####
+      Vertices:
+        Map 1 
+            Map Operator Tree:
+                TableScan
+                  alias: c/b/o_t1
+                  Statistics: Num rows: 20 Data size: 1767 Basic stats: COMPLETE Column stats: COMPLETE
+                  Select Operator
+                    expressions: key (type: string), c_int (type: int), c_float (type: float)
+                    outputColumnNames: key, c_int, c_float
+                    Statistics: Num rows: 20 Data size: 1767 Basic stats: COMPLETE Column stats: COMPLETE
+                    Group By Operator
+                      aggregations: sum(c_int)
+                      keys: c_float (type: float), c_int (type: int), key (type: string)
+                      minReductionHashAggr: 0.6
+                      mode: hash
+                      outputColumnNames: _col0, _col1, _col2, _col3
+                      Statistics: Num rows: 10 Data size: 1010 Basic stats: COMPLETE Column stats: COMPLETE
+                      Reduce Output Operator
+                        key expressions: _col0 (type: float), _col1 (type: int), _col2 (type: string)
+                        null sort order: zzz
+                        sort order: +++
+                        Map-reduce partition columns: _col0 (type: float), _col1 (type: int), _col2 (type: string)
+                        Statistics: Num rows: 10 Data size: 1010 Basic stats: COMPLETE Column stats: COMPLETE
+                        value expressions: _col3 (type: bigint)
+            Execution mode: vectorized, llap
+            LLAP IO: no inputs
+        Reducer 2 
+            Execution mode: vectorized, llap
+            Reduce Operator Tree:
+              Group By Operator
+                aggregations: sum(VALUE._col0)
+                keys: KEY._col0 (type: float), KEY._col1 (type: int), KEY._col2 (type: string)
+                mode: mergepartial
+                outputColumnNames: _col0, _col1, _col2, _col3
+                Statistics: Num rows: 10 Data size: 1010 Basic stats: COMPLETE Column stats: COMPLETE
+                Top N Key Operator
+                  sort order: +
+                  keys: ((_col1 + 1) + 2) (type: int)
+                  null sort order: z
+                  Statistics: Num rows: 10 Data size: 1010 Basic stats: COMPLETE Column stats: COMPLETE
+                  top n: 1
+                  Select Operator
+                    expressions: _col2 (type: string), ((_col1 + 1) + 2) (type: int), _col3 (type: bigint)
+                    outputColumnNames: _col0, _col1, _col2
+                    Statistics: Num rows: 10 Data size: 885 Basic stats: COMPLETE Column stats: COMPLETE
+                    Reduce Output Operator
+                      key expressions: _col1 (type: int)
+                      null sort order: z
+                      sort order: +
+                      Statistics: Num rows: 10 Data size: 885 Basic stats: COMPLETE Column stats: COMPLETE
+                      TopN Hash Memory Usage: 0.1
+                      value expressions: _col0 (type: string), _col2 (type: bigint)
+        Reducer 3 
+            Execution mode: vectorized, llap
+            Reduce Operator Tree:
+              Select Operator
+                expressions: VALUE._col0 (type: string), KEY.reducesinkkey0 (type: int), VALUE._col1 (type: bigint)
+                outputColumnNames: _col0, _col1, _col2
+                Statistics: Num rows: 10 Data size: 885 Basic stats: COMPLETE Column stats: COMPLETE
+                Limit
+                  Number of rows: 1
+                  Statistics: Num rows: 1 Data size: 97 Basic stats: COMPLETE Column stats: COMPLETE
+                  File Output Operator
+                    compressed: false
+                    Statistics: Num rows: 1 Data size: 97 Basic stats: COMPLETE Column stats: COMPLETE
+                    table:
+                        input format: org.apache.hadoop.mapred.SequenceFileInputFormat
+                        output format: org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat
+                        serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+
+  Stage: Stage-0
+    Fetch Operator
+      limit: 1
+      Processor Tree:
+        ListSink
+
+PREHOOK: query: explain select `c/b/o_t1`.c_int           from `c/b/o_t1` left semi join   `//cbo_t2` on `c/b/o_t1`.key=`//cbo_t2`.key
 PREHOOK: type: QUERY
 PREHOOK: Input: db~!@#$%^&*(),<>@//cbo_t2
 PREHOOK: Input: db~!@#$%^&*(),<>@//cbo_t2@dt=2014
 PREHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1
 PREHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1@dt=2014
-PREHOOK: Input: db~!@#$%^&*(),<>@cbo_/t3////
 #### A masked pattern was here ####
-POSTHOOK: query: select `cbo_/t3////`.c_int, c, count(*) from (select key as a, c_int+1 as b, sum(c_int) as c from `c/b/o_t1` where (`c/b/o_t1`.c_int + 1 >= 0) and (`c/b/o_t1`.c_int > 0 or `c/b/o_t1`.c_float >= 0)  group by c_float, `c/b/o_t1`.c_int, key having `c/b/o_t1`.c_float > 0 and (c_int >=1 or c_float >= 1) and (c_int + c_float) >= 0 order by c+a desc) `c/b/o_t1` full outer join (select key as p, c_int+1 as q, sum(c_int) as r from `//cbo_t2` where (`//cbo_t2`.c_int + 1 >= 0) and  [...]
+POSTHOOK: query: explain select `c/b/o_t1`.c_int           from `c/b/o_t1` left semi join   `//cbo_t2` on `c/b/o_t1`.key=`//cbo_t2`.key
 POSTHOOK: type: QUERY
 POSTHOOK: Input: db~!@#$%^&*(),<>@//cbo_t2
 POSTHOOK: Input: db~!@#$%^&*(),<>@//cbo_t2@dt=2014
 POSTHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1
 POSTHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1@dt=2014
-POSTHOOK: Input: db~!@#$%^&*(),<>@cbo_/t3////
 #### A masked pattern was here ####
-1	12	6
-1	2	6
-PREHOOK: query: select `cbo_/t3////`.c_int, c, count(*) from (select key as a, c_int+1 as b, sum(c_int) as c from `c/b/o_t1` where (`c/b/o_t1`.c_int + 1 >= 0) and (`c/b/o_t1`.c_int > 0 or `c/b/o_t1`.c_float >= 0)  group by c_float, `c/b/o_t1`.c_int, key having `c/b/o_t1`.c_float > 0 and (c_int >=1 or c_float >= 1) and (c_int + c_float) >= 0) `c/b/o_t1` join (select key as p, c_int+1 as q, sum(c_int) as r from `//cbo_t2` where (`//cbo_t2`.c_int + 1 >= 0) and (`//cbo_t2`.c_int > 0 or `//cb [...]
+STAGE DEPENDENCIES:
+  Stage-1 is a root stage
+  Stage-0 depends on stages: Stage-1
+
+STAGE PLANS:
+  Stage: Stage-1
+    Tez
+#### A masked pattern was here ####
+      Edges:
+        Reducer 2 <- Map 1 (SIMPLE_EDGE), Map 3 (SIMPLE_EDGE)
+#### A masked pattern was here ####
+      Vertices:
+        Map 1 
+            Map Operator Tree:
+                TableScan
+                  alias: c/b/o_t1
+                  filterExpr: key is not null (type: boolean)
+                  Statistics: Num rows: 20 Data size: 1691 Basic stats: COMPLETE Column stats: COMPLETE
+                  Filter Operator
+                    predicate: key is not null (type: boolean)
+                    Statistics: Num rows: 18 Data size: 1513 Basic stats: COMPLETE Column stats: COMPLETE
+                    Reduce Output Operator
+                      key expressions: key (type: string)
+                      null sort order: z
+                      sort order: +
+                      Map-reduce partition columns: key (type: string)
+                      Statistics: Num rows: 18 Data size: 1513 Basic stats: COMPLETE Column stats: COMPLETE
+                      value expressions: c_int (type: int)
+            Execution mode: vectorized, llap
+            LLAP IO: no inputs
+        Map 3 
+            Map Operator Tree:
+                TableScan
+                  alias: //cbo_t2
+                  filterExpr: key is not null (type: boolean)
+                  Statistics: Num rows: 20 Data size: 1615 Basic stats: COMPLETE Column stats: COMPLETE
+                  Filter Operator
+                    predicate: key is not null (type: boolean)
+                    Statistics: Num rows: 18 Data size: 1445 Basic stats: COMPLETE Column stats: COMPLETE
+                    Select Operator
+                      expressions: key (type: string)
+                      outputColumnNames: _col0
+                      Statistics: Num rows: 18 Data size: 1445 Basic stats: COMPLETE Column stats: COMPLETE
+                      Group By Operator
+                        keys: _col0 (type: string)
+                        minReductionHashAggr: 0.6666666
+                        mode: hash
+                        outputColumnNames: _col0
+                        Statistics: Num rows: 6 Data size: 510 Basic stats: COMPLETE Column stats: COMPLETE
+                        Reduce Output Operator
+                          key expressions: _col0 (type: string)
+                          null sort order: z
+                          sort order: +
+                          Map-reduce partition columns: _col0 (type: string)
+                          Statistics: Num rows: 6 Data size: 510 Basic stats: COMPLETE Column stats: COMPLETE
+            Execution mode: vectorized, llap
+            LLAP IO: no inputs
+        Reducer 2 
+            Execution mode: llap
+            Reduce Operator Tree:
+              Merge Join Operator
+                condition map:
+                     Left Semi Join 0 to 1
+                keys:
+                  0 key (type: string)
+                  1 _col0 (type: string)
+                outputColumnNames: _col2
+                Statistics: Num rows: 18 Data size: 68 Basic stats: COMPLETE Column stats: COMPLETE
+                Select Operator
+                  expressions: _col2 (type: int)
+                  outputColumnNames: _col0
+                  Statistics: Num rows: 18 Data size: 68 Basic stats: COMPLETE Column stats: COMPLETE
+                  File Output Operator
+                    compressed: false
+                    Statistics: Num rows: 18 Data size: 68 Basic stats: COMPLETE Column stats: COMPLETE
+                    table:
+                        input format: org.apache.hadoop.mapred.SequenceFileInputFormat
+                        output format: org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat
+                        serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+
+  Stage: Stage-0
+    Fetch Operator
+      limit: -1
+      Processor Tree:
+        ListSink
+
+PREHOOK: query: explain select * from `c/b/o_t1` as `c/b/o_t1`
 PREHOOK: type: QUERY
-PREHOOK: Input: db~!@#$%^&*(),<>@//cbo_t2
-PREHOOK: Input: db~!@#$%^&*(),<>@//cbo_t2@dt=2014
 PREHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1
 PREHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1@dt=2014
-PREHOOK: Input: db~!@#$%^&*(),<>@cbo_/t3////
 #### A masked pattern was here ####
-POSTHOOK: query: select `cbo_/t3////`.c_int, c, count(*) from (select key as a, c_int+1 as b, sum(c_int) as c from `c/b/o_t1` where (`c/b/o_t1`.c_int + 1 >= 0) and (`c/b/o_t1`.c_int > 0 or `c/b/o_t1`.c_float >= 0)  group by c_float, `c/b/o_t1`.c_int, key having `c/b/o_t1`.c_float > 0 and (c_int >=1 or c_float >= 1) and (c_int + c_float) >= 0) `c/b/o_t1` join (select key as p, c_int+1 as q, sum(c_int) as r from `//cbo_t2` where (`//cbo_t2`.c_int + 1 >= 0) and (`//cbo_t2`.c_int > 0 or `//c [...]
+POSTHOOK: query: explain select * from `c/b/o_t1` as `c/b/o_t1`
 POSTHOOK: type: QUERY
-POSTHOOK: Input: db~!@#$%^&*(),<>@//cbo_t2
-POSTHOOK: Input: db~!@#$%^&*(),<>@//cbo_t2@dt=2014
 POSTHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1
 POSTHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1@dt=2014
-POSTHOOK: Input: db~!@#$%^&*(),<>@cbo_/t3////
-#### A masked pattern was here ####
-1	12	6
-1	2	6
-PREHOOK: query: select unionsrc.key FROM (select 'tst1' as key, count(1) as value from default.src) unionsrc
-PREHOOK: type: QUERY
-PREHOOK: Input: default@src
-#### A masked pattern was here ####
-POSTHOOK: query: select unionsrc.key FROM (select 'tst1' as key, count(1) as value from default.src) unionsrc
-POSTHOOK: type: QUERY
-POSTHOOK: Input: default@src
 #### A masked pattern was here ####
-tst1
-PREHOOK: query: select unionsrc.key, unionsrc.value FROM (select 'tst1' as key, count(1) as value from default.src) unionsrc
+STAGE DEPENDENCIES:
+  Stage-0 is a root stage
+
+STAGE PLANS:
+  Stage: Stage-0
+    Fetch Operator
+      limit: -1
+      Processor Tree:
+        TableScan
+          alias: c/b/o_t1
+          Select Operator
+            expressions: key (type: string), value (type: string), c_int (type: int), c_float (type: float), c_boolean (type: boolean), dt (type: string)
+            outputColumnNames: _col0, _col1, _col2, _col3, _col4, _col5
+            ListSink
+
+PREHOOK: query: explain select * from `c/b/o_t1` as `c/b/o_t1`  where `c/b/o_t1`.c_int >= 0 and c_float+c_int >= 0 or c_float <= 100
 PREHOOK: type: QUERY
-PREHOOK: Input: default@src
+PREHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1
+PREHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1@dt=2014
 #### A masked pattern was here ####
-POSTHOOK: query: select unionsrc.key, unionsrc.value FROM (select 'tst1' as key, count(1) as value from default.src) unionsrc
+POSTHOOK: query: explain select * from `c/b/o_t1` as `c/b/o_t1`  where `c/b/o_t1`.c_int >= 0 and c_float+c_int >= 0 or c_float <= 100
 POSTHOOK: type: QUERY
-POSTHOOK: Input: default@src
+POSTHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1
+POSTHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1@dt=2014
 #### A masked pattern was here ####
-tst1	500
-PREHOOK: query: select unionsrc.key FROM (select 'max' as key, max(c_int) as value from `cbo_/t3////` s1
-
-UNION  ALL
-
-    select 'min' as key,  min(c_int) as value from `cbo_/t3////` s2
+STAGE DEPENDENCIES:
+  Stage-0 is a root stage
 
-    UNION ALL
+STAGE PLANS:
+  Stage: Stage-0
+    Fetch Operator
+      limit: -1
+      Processor Tree:
+        TableScan
+          alias: c/b/o_t1
+          filterExpr: (((c_int >= 0) and ((c_float + c_int) >= 0)) or (c_float <= 100.0)) (type: boolean)
+          Filter Operator
+            predicate: (((c_int >= 0) and ((c_float + c_int) >= 0)) or (c_float <= 100.0)) (type: boolean)
+            Select Operator
+              expressions: key (type: string), value (type: string), c_int (type: int), c_float (type: float), c_boolean (type: boolean), dt (type: string)
+              outputColumnNames: _col0, _col1, _col2, _col3, _col4, _col5
+              ListSink
 
-        select 'avg' as key,  avg(c_int) as value from `cbo_/t3////` s3) unionsrc order by unionsrc.key
+PREHOOK: query: explain select * from (select * from `c/b/o_t1` where `c/b/o_t1`.c_int >= 0) as `c/b/o_t1`
 PREHOOK: type: QUERY
-PREHOOK: Input: db~!@#$%^&*(),<>@cbo_/t3////
+PREHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1
+PREHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1@dt=2014
 #### A masked pattern was here ####
-POSTHOOK: query: select unionsrc.key FROM (select 'max' as key, max(c_int) as value from `cbo_/t3////` s1
-
-UNION  ALL
-
-    select 'min' as key,  min(c_int) as value from `cbo_/t3////` s2
-
-    UNION ALL
-
-        select 'avg' as key,  avg(c_int) as value from `cbo_/t3////` s3) unionsrc order by unionsrc.key
+POSTHOOK: query: explain select * from (select * from `c/b/o_t1` where `c/b/o_t1`.c_int >= 0) as `c/b/o_t1`
 POSTHOOK: type: QUERY
-POSTHOOK: Input: db~!@#$%^&*(),<>@cbo_/t3////
+POSTHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1
+POSTHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1@dt=2014
 #### A masked pattern was here ####
-avg
-max
-min
-PREHOOK: query: select unionsrc.key, unionsrc.value FROM (select 'max' as key, max(c_int) as value from `cbo_/t3////` s1
-
-UNION  ALL
-
-    select 'min' as key,  min(c_int) as value from `cbo_/t3////` s2
+STAGE DEPENDENCIES:
+  Stage-0 is a root stage
 
-    UNION ALL
+STAGE PLANS:
+  Stage: Stage-0
+    Fetch Operator
+      limit: -1
+      Processor Tree:
+        TableScan
+          alias: c/b/o_t1
+          filterExpr: (c_int >= 0) (type: boolean)
+          Filter Operator
+            predicate: (c_int >= 0) (type: boolean)
+            Select Operator
+              expressions: key (type: string), value (type: string), c_int (type: int), c_float (type: float), c_boolean (type: boolean), dt (type: string)
+              outputColumnNames: _col0, _col1, _col2, _col3, _col4, _col5
+              ListSink
 
-        select 'avg' as key,  avg(c_int) as value from `cbo_/t3////` s3) unionsrc order by unionsrc.key
+PREHOOK: query: explain select null from `cbo_/t3////`
 PREHOOK: type: QUERY
 PREHOOK: Input: db~!@#$%^&*(),<>@cbo_/t3////
 #### A masked pattern was here ####
-POSTHOOK: query: select unionsrc.key, unionsrc.value FROM (select 'max' as key, max(c_int) as value from `cbo_/t3////` s1
-
-UNION  ALL
-
-    select 'min' as key,  min(c_int) as value from `cbo_/t3////` s2
-
-    UNION ALL
-
-        select 'avg' as key,  avg(c_int) as value from `cbo_/t3////` s3) unionsrc order by unionsrc.key
+POSTHOOK: query: explain select null from `cbo_/t3////`
 POSTHOOK: type: QUERY
 POSTHOOK: Input: db~!@#$%^&*(),<>@cbo_/t3////
 #### A masked pattern was here ####
-avg	1.5
-max	3.0
-min	1.0
-PREHOOK: query: select unionsrc.key, count(1) FROM (select 'max' as key, max(c_int) as value from `cbo_/t3////` s1
-
-    UNION  ALL
-
-        select 'min' as key,  min(c_int) as value from `cbo_/t3////` s2
+STAGE DEPENDENCIES:
+  Stage-0 is a root stage
 
-    UNION ALL
+STAGE PLANS:
+  Stage: Stage-0
+    Fetch Operator
+      limit: -1
+      Processor Tree:
+        TableScan
+          alias: cbo_/t3////
+          Select Operator
+            expressions: null (type: void)
+            outputColumnNames: _col0
+            ListSink
 
-        select 'avg' as key,  avg(c_int) as value from `cbo_/t3////` s3) unionsrc group by unionsrc.key order by unionsrc.key
+PREHOOK: query: explain select key from `c/b/o_t1` where c_int = -6  or c_int = +6
 PREHOOK: type: QUERY
-PREHOOK: Input: db~!@#$%^&*(),<>@cbo_/t3////
+PREHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1
+PREHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1@dt=2014
 #### A masked pattern was here ####
-POSTHOOK: query: select unionsrc.key, count(1) FROM (select 'max' as key, max(c_int) as value from `cbo_/t3////` s1
-
-    UNION  ALL
-
-        select 'min' as key,  min(c_int) as value from `cbo_/t3////` s2
-
-    UNION ALL
-
-        select 'avg' as key,  avg(c_int) as value from `cbo_/t3////` s3) unionsrc group by unionsrc.key order by unionsrc.key
+POSTHOOK: query: explain select key from `c/b/o_t1` where c_int = -6  or c_int = +6
 POSTHOOK: type: QUERY
-POSTHOOK: Input: db~!@#$%^&*(),<>@cbo_/t3////
+POSTHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1
+POSTHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1@dt=2014
 #### A masked pattern was here ####
-avg	1
-max	1
-min	1
-PREHOOK: query: select `c/b/o_t1`.c_int, `//cbo_t2`.c_int from `c/b/o_t1` join             `//cbo_t2` on `c/b/o_t1`.key=`//cbo_t2`.key
+STAGE DEPENDENCIES:
+  Stage-0 is a root stage
+
+STAGE PLANS:
+  Stage: Stage-0
+    Fetch Operator
+      limit: -1
+      Processor Tree:
+        TableScan
+          alias: c/b/o_t1
+          filterExpr: (c_int) IN (-6, 6) (type: boolean)
+          Filter Operator
+            predicate: (c_int) IN (-6, 6) (type: boolean)
+            Select Operator
+              expressions: key (type: string)
+              outputColumnNames: _col0
+              ListSink
+
+PREHOOK: query: explain select count(`c/b/o_t1`.dt) from `c/b/o_t1` join `//cbo_t2` on `c/b/o_t1`.dt  = `//cbo_t2`.dt  where `c/b/o_t1`.dt = '2014'
 PREHOOK: type: QUERY
 PREHOOK: Input: db~!@#$%^&*(),<>@//cbo_t2
 PREHOOK: Input: db~!@#$%^&*(),<>@//cbo_t2@dt=2014
 PREHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1
 PREHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1@dt=2014
 #### A masked pattern was here ####
-POSTHOOK: query: select `c/b/o_t1`.c_int, `//cbo_t2`.c_int from `c/b/o_t1` join             `//cbo_t2` on `c/b/o_t1`.key=`//cbo_t2`.key
+POSTHOOK: query: explain select count(`c/b/o_t1`.dt) from `c/b/o_t1` join `//cbo_t2` on `c/b/o_t1`.dt  = `//cbo_t2`.dt  where `c/b/o_t1`.dt = '2014'
 POSTHOOK: type: QUERY
 POSTHOOK: Input: db~!@#$%^&*(),<>@//cbo_t2
 POSTHOOK: Input: db~!@#$%^&*(),<>@//cbo_t2@dt=2014
 POSTHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1
 POSTHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1@dt=2014
 #### A masked pattern was here ####
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-PREHOOK: query: select `c/b/o_t1`.key from `c/b/o_t1` join `cbo_/t3////`
+STAGE DEPENDENCIES:
+  Stage-1 is a root stage
+  Stage-0 depends on stages: Stage-1
+
+STAGE PLANS:
+  Stage: Stage-1
+    Tez
+#### A masked pattern was here ####
+      Edges:
+        Reducer 2 <- Map 1 (SIMPLE_EDGE), Map 4 (SIMPLE_EDGE)
+        Reducer 3 <- Reducer 2 (CUSTOM_SIMPLE_EDGE)
+#### A masked pattern was here ####
+      Vertices:
+        Map 1 
+            Map Operator Tree:
+                TableScan
+                  alias: c/b/o_t1
+                  filterExpr: (dt = '2014') (type: boolean)
+                  Statistics: Num rows: 20 Data size: 2022 Basic stats: COMPLETE Column stats: COMPLETE
+                  Reduce Output Operator
+                    key expressions: '2014' (type: string)
+                    null sort order: z
+                    sort order: +
+                    Map-reduce partition columns: '2014' (type: string)
+                    Statistics: Num rows: 20 Data size: 2022 Basic stats: COMPLETE Column stats: COMPLETE
+                  Select Operator
+                    expressions: '2014' (type: string)
+                    outputColumnNames: _col0
+                    Statistics: Num rows: 20 Data size: 1760 Basic stats: COMPLETE Column stats: COMPLETE
+                    Group By Operator
+                      keys: _col0 (type: string)
+                      minReductionHashAggr: 0.95
+                      mode: hash
+                      outputColumnNames: _col0
+                      Statistics: Num rows: 1 Data size: 88 Basic stats: COMPLETE Column stats: COMPLETE
+                      Dynamic Partitioning Event Operator
+                        Target column: dt (string)
+                        Target Input: //cbo_t2
+                        Partition key expr: dt
+                        Statistics: Num rows: 1 Data size: 88 Basic stats: COMPLETE Column stats: COMPLETE
+                        Target Vertex: Map 4
+            Execution mode: vectorized, llap
+            LLAP IO: no inputs
+        Map 4 
+            Map Operator Tree:
+                TableScan
+                  alias: //cbo_t2
+                  filterExpr: (dt = '2014') (type: boolean)
+                  Statistics: Num rows: 20 Data size: 2022 Basic stats: COMPLETE Column stats: COMPLETE
+                  Reduce Output Operator
+                    key expressions: '2014' (type: string)
+                    null sort order: z
+                    sort order: +
+                    Map-reduce partition columns: '2014' (type: string)
+                    Statistics: Num rows: 20 Data size: 2022 Basic stats: COMPLETE Column stats: COMPLETE
+            Execution mode: vectorized, llap
+            LLAP IO: no inputs
+        Reducer 2 
+            Execution mode: llap
+            Reduce Operator Tree:
+              Merge Join Operator
+                condition map:
+                     Inner Join 0 to 1
+                keys:
+                  0 '2014' (type: string)
+                  1 '2014' (type: string)
+                Statistics: Num rows: 400 Data size: 3200 Basic stats: COMPLETE Column stats: COMPLETE
+                Select Operator
+                  expressions: '2014' (type: string)
+                  outputColumnNames: _col5
+                  Statistics: Num rows: 400 Data size: 3200 Basic stats: COMPLETE Column stats: COMPLETE
+                  Group By Operator
+                    aggregations: count(_col5)
+                    minReductionHashAggr: 0.99
+                    mode: hash
+                    outputColumnNames: _col0
+                    Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: COMPLETE
+                    Reduce Output Operator
+                      null sort order: 
+                      sort order: 
+                      Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: COMPLETE
+                      value expressions: _col0 (type: bigint)
+        Reducer 3 
+            Execution mode: vectorized, llap
+            Reduce Operator Tree:
+              Group By Operator
+                aggregations: count(VALUE._col0)
+                mode: mergepartial
+                outputColumnNames: _col0
+                Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: COMPLETE
+                File Output Operator
+                  compressed: false
+                  Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: COMPLETE
+                  table:
+                      input format: org.apache.hadoop.mapred.SequenceFileInputFormat
+                      output format: org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat
+                      serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+
+  Stage: Stage-0
+    Fetch Operator
+      limit: -1
+      Processor Tree:
+        ListSink
+
+PREHOOK: query: explain select `c/b/o_t1`.value from `c/b/o_t1` join `//cbo_t2` on `c/b/o_t1`.key = `//cbo_t2`.key where `c/b/o_t1`.dt = '10' and `c/b/o_t1`.c_boolean = true
 PREHOOK: type: QUERY
+PREHOOK: Input: db~!@#$%^&*(),<>@//cbo_t2
+PREHOOK: Input: db~!@#$%^&*(),<>@//cbo_t2@dt=2014
 PREHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1
-PREHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1@dt=2014
-PREHOOK: Input: db~!@#$%^&*(),<>@cbo_/t3////
 #### A masked pattern was here ####
-POSTHOOK: query: select `c/b/o_t1`.key from `c/b/o_t1` join `cbo_/t3////`
+POSTHOOK: query: explain select `c/b/o_t1`.value from `c/b/o_t1` join `//cbo_t2` on `c/b/o_t1`.key = `//cbo_t2`.key where `c/b/o_t1`.dt = '10' and `c/b/o_t1`.c_boolean = true
 POSTHOOK: type: QUERY
+POSTHOOK: Input: db~!@#$%^&*(),<>@//cbo_t2
+POSTHOOK: Input: db~!@#$%^&*(),<>@//cbo_t2@dt=2014
 POSTHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1
-POSTHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1@dt=2014
-POSTHOOK: Input: db~!@#$%^&*(),<>@cbo_/t3////
 #### A masked pattern was here ####
- 1
- 1
- 1
- 1
- 1
- 1
- 1
- 1
- 1
- 1
- 1
- 1
- 1
- 1
- 1
- 1
- 1
- 1
- 1
- 1
- 1
- 1
- 1
- 1
- 1
- 1
- 1
- 1
- 1
- 1
- 1
- 1
- 1
- 1
- 1
- 1
- 1
- 1
- 1
- 1
- 1 
- 1 
- 1 
- 1 
- 1 
- 1 
- 1 
- 1 
- 1 
- 1 
- 1 
- 1 
- 1 
- 1 
- 1 
- 1 
- 1 
- 1 
- 1 
- 1 
- 1 
- 1 
- 1 
- 1 
- 1 
- 1 
- 1 
- 1 
- 1 
- 1 
- 1 
- 1 
- 1 
- 1 
- 1 
- 1 
- 1 
- 1 
- 1 
- 1 
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1 
-1 
-1 
-1 
-1 
-1 
-1 
-1 
-1 
-1 
-1 
-1 
-1 
-1 
-1 
-1 
-1 
-1 
-1 
-1 
-1 
-1 
-1 
-1 
-1 
-1 
-1 
-1 
-1 
-1 
-1 
-1 
-1 
-1 
-1 
-1 
-1 
-1 
-1 
-1 
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-PREHOOK: query: select `c/b/o_t1`.key from `c/b/o_t1` join `cbo_/t3////` where `c/b/o_t1`.key=`cbo_/t3////`.key and `c/b/o_t1`.key >= 1
+STAGE DEPENDENCIES:
+  Stage-1 is a root stage
+  Stage-0 depends on stages: Stage-1
+
+STAGE PLANS:
+  Stage: Stage-1
+    Tez
+#### A masked pattern was here ####
+      Edges:
+        Reducer 2 <- Map 1 (SIMPLE_EDGE), Map 3 (SIMPLE_EDGE)
+#### A masked pattern was here ####
+      Vertices:
+        Map 1 
+            Map Operator Tree:
+                TableScan
+                  alias: c/b/o_t1
+                  filterExpr: (key is not null and (dt = '10') and (c_boolean = true)) (type: boolean)
+                  Statistics: Num rows: 1 Data size: 458 Basic stats: COMPLETE Column stats: PARTIAL
+                  Filter Operator
+                    predicate: (key is not null and (dt = '10') and (c_boolean = true)) (type: boolean)
+                    Statistics: Num rows: 1 Data size: 458 Basic stats: COMPLETE Column stats: PARTIAL
+                    Reduce Output Operator
+                      key expressions: key (type: string)
+                      null sort order: z
+                      sort order: +
+                      Map-reduce partition columns: key (type: string)
+                      Statistics: Num rows: 1 Data size: 458 Basic stats: COMPLETE Column stats: PARTIAL
+                      value expressions: value (type: string)
+            Execution mode: vectorized, llap
+            LLAP IO: unknown
+        Map 3 
+            Map Operator Tree:
+                TableScan
+                  alias: //cbo_t2
+                  filterExpr: key is not null (type: boolean)
+                  Statistics: Num rows: 20 Data size: 1615 Basic stats: COMPLETE Column stats: COMPLETE
+                  Filter Operator
+                    predicate: key is not null (type: boolean)
+                    Statistics: Num rows: 18 Data size: 1445 Basic stats: COMPLETE Column stats: COMPLETE
+                    Reduce Output Operator
+                      key expressions: key (type: string)
+                      null sort order: z
+                      sort order: +
+                      Map-reduce partition columns: key (type: string)
+                      Statistics: Num rows: 18 Data size: 1445 Basic stats: COMPLETE Column stats: COMPLETE
+            Execution mode: vectorized, llap
+            LLAP IO: no inputs
+        Reducer 2 
+            Execution mode: llap
+            Reduce Operator Tree:
+              Merge Join Operator
+                condition map:
+                     Inner Join 0 to 1
+                keys:
+                  0 key (type: string)
+                  1 key (type: string)
+                outputColumnNames: _col1
+                Statistics: Num rows: 3 Data size: 552 Basic stats: COMPLETE Column stats: PARTIAL
+                Select Operator
+                  expressions: _col1 (type: string)
+                  outputColumnNames: _col0
+                  Statistics: Num rows: 3 Data size: 552 Basic stats: COMPLETE Column stats: PARTIAL
+                  File Output Operator
+                    compressed: false
+                    Statistics: Num rows: 3 Data size: 552 Basic stats: COMPLETE Column stats: PARTIAL
+                    table:
+                        input format: org.apache.hadoop.mapred.SequenceFileInputFormat
+                        output format: org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat
+                        serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+
+  Stage: Stage-0
+    Fetch Operator
+      limit: -1
+      Processor Tree:
+        ListSink
+
+PREHOOK: query: explain select *
+
+from `src/_/cbo` b
+
+where not exists
+
+  (select distinct a.key
+
+  from `src/_/cbo` a
+
+  where b.value = a.value and a.value > 'val_2'
+
+  )
 PREHOOK: type: QUERY
-PREHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1
-PREHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1@dt=2014
-PREHOOK: Input: db~!@#$%^&*(),<>@cbo_/t3////
+PREHOOK: Input: db~!@#$%^&*(),<>@src/_/cbo
 #### A masked pattern was here ####
-POSTHOOK: query: select `c/b/o_t1`.key from `c/b/o_t1` join `cbo_/t3////` where `c/b/o_t1`.key=`cbo_/t3////`.key and `c/b/o_t1`.key >= 1
+POSTHOOK: query: explain select *
+
+from `src/_/cbo` b
+
+where not exists
+
+  (select distinct a.key
+
+  from `src/_/cbo` a
+
+  where b.value = a.value and a.value > 'val_2'
+
+  )
 POSTHOOK: type: QUERY
-POSTHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1
-POSTHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1@dt=2014
-POSTHOOK: Input: db~!@#$%^&*(),<>@cbo_/t3////
+POSTHOOK: Input: db~!@#$%^&*(),<>@src/_/cbo
 #### A masked pattern was here ####
- 1
- 1
- 1
- 1
- 1 
- 1 
- 1 
- 1 
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1 
-1 
-1 
-1 
-PREHOOK: query: select `c/b/o_t1`.c_int, `//cbo_t2`.c_int from `c/b/o_t1` left outer join  `//cbo_t2` on `c/b/o_t1`.key=`//cbo_t2`.key
+STAGE DEPENDENCIES:
+  Stage-1 is a root stage
+  Stage-0 depends on stages: Stage-1
+
+STAGE PLANS:
+  Stage: Stage-1
+    Tez
+#### A masked pattern was here ####
+      Edges:
+        Reducer 2 <- Map 1 (SIMPLE_EDGE), Reducer 3 (SIMPLE_EDGE)
+        Reducer 3 <- Map 1 (SIMPLE_EDGE)
+#### A masked pattern was here ####
+      Vertices:
+        Map 1 
+            Map Operator Tree:
+                TableScan
+                  alias: b
+                  Statistics: Num rows: 500 Data size: 89000 Basic stats: COMPLETE Column stats: COMPLETE
+                  Reduce Output Operator
+                    key expressions: value (type: string)
+                    null sort order: z
+                    sort order: +
+                    Map-reduce partition columns: value (type: string)
+                    Statistics: Num rows: 500 Data size: 89000 Basic stats: COMPLETE Column stats: COMPLETE
+                    value expressions: key (type: string)
+                  Filter Operator
+                    predicate: (value > 'val_2') (type: boolean)
+                    Statistics: Num rows: 166 Data size: 29548 Basic stats: COMPLETE Column stats: COMPLETE
+                    Group By Operator
+                      keys: key (type: string), value (type: string)
+                      minReductionHashAggr: 0.0
+                      mode: hash
+                      outputColumnNames: _col0, _col1
+                      Statistics: Num rows: 83 Data size: 14774 Basic stats: COMPLETE Column stats: COMPLETE
+                      Reduce Output Operator
+                        key expressions: _col0 (type: string), _col1 (type: string)
+                        null sort order: zz
+                        sort order: ++
+                        Map-reduce partition columns: _col0 (type: string), _col1 (type: string)
+                        Statistics: Num rows: 83 Data size: 14774 Basic stats: COMPLETE Column stats: COMPLETE
+            Execution mode: vectorized, llap
+            LLAP IO: no inputs
+        Reducer 2 
+            Execution mode: llap
+            Reduce Operator Tree:
+              Merge Join Operator
+                condition map:
+                     Left Outer Join 0 to 1
+                keys:
+                  0 value (type: string)
+                  1 _col1 (type: string)
+                outputColumnNames: _col0, _col1, _col6
+                Statistics: Num rows: 635 Data size: 125406 Basic stats: COMPLETE Column stats: COMPLETE
+                Filter Operator
+                  predicate: _col6 is null (type: boolean)
+                  Statistics: Num rows: 500 Data size: 98737 Basic stats: COMPLETE Column stats: COMPLETE
+                  Select Operator
+                    expressions: _col0 (type: string), _col1 (type: string)
+                    outputColumnNames: _col0, _col1
+                    Statistics: Num rows: 500 Data size: 98737 Basic stats: COMPLETE Column stats: COMPLETE
+                    File Output Operator
+                      compressed: false
+                      Statistics: Num rows: 500 Data size: 98737 Basic stats: COMPLETE Column stats: COMPLETE
+                      table:
+                          input format: org.apache.hadoop.mapred.SequenceFileInputFormat
+                          output format: org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat
+                          serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+        Reducer 3 
+            Execution mode: vectorized, llap
+            Reduce Operator Tree:
+              Group By Operator
+                keys: KEY._col0 (type: string), KEY._col1 (type: string)
+                mode: mergepartial
+                outputColumnNames: _col0, _col1
+                Statistics: Num rows: 83 Data size: 14774 Basic stats: COMPLETE Column stats: COMPLETE
+                Select Operator
+                  expressions: _col1 (type: string)
+                  outputColumnNames: _col1
+                  Statistics: Num rows: 83 Data size: 14774 Basic stats: COMPLETE Column stats: COMPLETE
+                  Reduce Output Operator
+                    key expressions: _col1 (type: string)
+                    null sort order: z
+                    sort order: +
+                    Map-reduce partition columns: _col1 (type: string)
+                    Statistics: Num rows: 83 Data size: 14774 Basic stats: COMPLETE Column stats: COMPLETE
+
+  Stage: Stage-0
+    Fetch Operator
+      limit: -1
+      Processor Tree:
+        ListSink
+
+PREHOOK: query: explain select *
+
+from `src/_/cbo` b
+
+group by key, value
+
+having not exists
+
+  (select a.key
+
+  from `src/_/cbo` a
+
+  where b.value = a.value  and a.key = b.key and a.value > 'val_12'
+
+  )
 PREHOOK: type: QUERY
-PREHOOK: Input: db~!@#$%^&*(),<>@//cbo_t2
-PREHOOK: Input: db~!@#$%^&*(),<>@//cbo_t2@dt=2014
-PREHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1
-PREHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1@dt=2014
+PREHOOK: Input: db~!@#$%^&*(),<>@src/_/cbo
 #### A masked pattern was here ####
-POSTHOOK: query: select `c/b/o_t1`.c_int, `//cbo_t2`.c_int from `c/b/o_t1` left outer join  `//cbo_t2` on `c/b/o_t1`.key=`//cbo_t2`.key
+POSTHOOK: query: explain select *
+
+from `src/_/cbo` b
+
+group by key, value
+
+having not exists
+
+  (select a.key
+
+  from `src/_/cbo` a
+
+  where b.value = a.value  and a.key = b.key and a.value > 'val_12'
+
+  )
 POSTHOOK: type: QUERY
-POSTHOOK: Input: db~!@#$%^&*(),<>@//cbo_t2
-POSTHOOK: Input: db~!@#$%^&*(),<>@//cbo_t2@dt=2014
-POSTHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1
-POSTHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1@dt=2014
+POSTHOOK: Input: db~!@#$%^&*(),<>@src/_/cbo
 #### A masked pattern was here ####
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-NULL	NULL
-NULL	NULL
-PREHOOK: query: select `c/b/o_t1`.c_int, `//cbo_t2`.c_int from `c/b/o_t1` right outer join `//cbo_t2` on `c/b/o_t1`.key=`//cbo_t2`.key
+STAGE DEPENDENCIES:
+  Stage-1 is a root stage
+  Stage-0 depends on stages: Stage-1
+
+STAGE PLANS:
+  Stage: Stage-1
+    Tez
+#### A masked pattern was here ####
+      Edges:
+        Reducer 2 <- Map 1 (SIMPLE_EDGE)
+        Reducer 3 <- Map 1 (SIMPLE_EDGE), Reducer 2 (SIMPLE_EDGE)
+#### A masked pattern was here ####
+      Vertices:
+        Map 1 
+            Map Operator Tree:
+                TableScan
+                  alias: b
+                  Statistics: Num rows: 500 Data size: 89000 Basic stats: COMPLETE Column stats: COMPLETE
+                  Select Operator
+                    expressions: key (type: string), value (type: string)
+                    outputColumnNames: key, value
+                    Statistics: Num rows: 500 Data size: 89000 Basic stats: COMPLETE Column stats: COMPLETE
+                    Group By Operator
+                      keys: key (type: string), value (type: string)
+                      minReductionHashAggr: 0.0
+                      mode: hash
+                      outputColumnNames: _col0, _col1
+                      Statistics: Num rows: 250 Data size: 44500 Basic stats: COMPLETE Column stats: COMPLETE
+                      Reduce Output Operator
+                        key expressions: _col0 (type: string), _col1 (type: string)
+                        null sort order: zz
+                        sort order: ++
+                        Map-reduce partition columns: _col0 (type: string), _col1 (type: string)
+                        Statistics: Num rows: 250 Data size: 44500 Basic stats: COMPLETE Column stats: COMPLETE
+                  Filter Operator
+                    predicate: (value > 'val_12') (type: boolean)
+                    Statistics: Num rows: 166 Data size: 29548 Basic stats: COMPLETE Column stats: COMPLETE
+                    Select Operator
+                      expressions: value (type: string), key (type: string)
+                      outputColumnNames: _col1, _col2
+                      Statistics: Num rows: 166 Data size: 43990 Basic stats: COMPLETE Column stats: COMPLETE
+                      Reduce Output Operator
+                        key expressions: _col1 (type: string), _col2 (type: string)
+                        null sort order: zz
+                        sort order: ++
+                        Map-reduce partition columns: _col1 (type: string), _col2 (type: string)
+                        Statistics: Num rows: 166 Data size: 43990 Basic stats: COMPLETE Column stats: COMPLETE
+            Execution mode: vectorized, llap
+            LLAP IO: no inputs
+        Reducer 2 
+            Execution mode: vectorized, llap
+            Reduce Operator Tree:
+              Group By Operator
+                keys: KEY._col0 (type: string), KEY._col1 (type: string)
+                mode: mergepartial
+                outputColumnNames: _col0, _col1
+                Statistics: Num rows: 250 Data size: 44500 Basic stats: COMPLETE Column stats: COMPLETE
+                Reduce Output Operator
+                  key expressions: _col1 (type: string), _col0 (type: string)
+                  null sort order: zz
+                  sort order: ++
+                  Map-reduce partition columns: _col1 (type: string), _col0 (type: string)
+                  Statistics: Num rows: 250 Data size: 44500 Basic stats: COMPLETE Column stats: COMPLETE
+        Reducer 3 
+            Execution mode: llap
+            Reduce Operator Tree:
+              Merge Join Operator
+                condition map:
+                     Left Outer Join 0 to 1
+                keys:
+                  0 _col1 (type: string), _col0 (type: string)
+                  1 _col1 (type: string), _col2 (type: string)
+                outputColumnNames: _col0, _col1, _col4
+                Statistics: Num rows: 416 Data size: 88577 Basic stats: COMPLETE Column stats: COMPLETE
+                Filter Operator
+                  predicate: _col4 is null (type: boolean)
+                  Statistics: Num rows: 250 Data size: 53287 Basic stats: COMPLETE Column stats: COMPLETE
+                  Select Operator
+                    expressions: _col0 (type: string), _col1 (type: string)
+                    outputColumnNames: _col0, _col1
+                    Statistics: Num rows: 250 Data size: 53287 Basic stats: COMPLETE Column stats: COMPLETE
+                    File Output Operator
+                      compressed: false
+                      Statistics: Num rows: 250 Data size: 53287 Basic stats: COMPLETE Column stats: COMPLETE
+                      table:
+                          input format: org.apache.hadoop.mapred.SequenceFileInputFormat
+                          output format: org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat
+                          serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+
+  Stage: Stage-0
+    Fetch Operator
+      limit: -1
+      Processor Tree:
+        ListSink
+
+PREHOOK: query: create view cv1_n0 as
+
+select *
+
+from `src/_/cbo` b
+
+where exists
+
+  (select a.key
+
+  from `src/_/cbo` a
+
+  where b.value = a.value  and a.key = b.key and a.value > 'val_9')
+PREHOOK: type: CREATEVIEW
+PREHOOK: Input: db~!@#$%^&*(),<>@src/_/cbo
+PREHOOK: Output: database:db~!@#$%^&*(),<>
+PREHOOK: Output: db~!@#$%^&*(),<>@cv1_n0
+POSTHOOK: query: create view cv1_n0 as
+
+select *
+
+from `src/_/cbo` b
+
+where exists
+
+  (select a.key
+
+  from `src/_/cbo` a
+
+  where b.value = a.value  and a.key = b.key and a.value > 'val_9')
+POSTHOOK: type: CREATEVIEW
+POSTHOOK: Input: db~!@#$%^&*(),<>@src/_/cbo
+POSTHOOK: Output: database:db~!@#$%^&*(),<>
+POSTHOOK: Output: db~!@#$%^&*(),<>@cv1_n0
+POSTHOOK: Lineage: cv1_n0.key SIMPLE [(src/_/cbo)b.FieldSchema(name:key, type:string, comment:null), ]
+POSTHOOK: Lineage: cv1_n0.value SIMPLE [(src/_/cbo)b.FieldSchema(name:value, type:string, comment:null), ]
+PREHOOK: query: select * from cv1_n0
 PREHOOK: type: QUERY
-PREHOOK: Input: db~!@#$%^&*(),<>@//cbo_t2
-PREHOOK: Input: db~!@#$%^&*(),<>@//cbo_t2@dt=2014
-PREHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1
-PREHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1@dt=2014
+PREHOOK: Input: db~!@#$%^&*(),<>@cv1_n0
+PREHOOK: Input: db~!@#$%^&*(),<>@src/_/cbo
 #### A masked pattern was here ####
-POSTHOOK: query: select `c/b/o_t1`.c_int, `//cbo_t2`.c_int from `c/b/o_t1` right outer join `//cbo_t2` on `c/b/o_t1`.key=`//cbo_t2`.key
+POSTHOOK: query: select * from cv1_n0
 POSTHOOK: type: QUERY
-POSTHOOK: Input: db~!@#$%^&*(),<>@//cbo_t2
-POSTHOOK: Input: db~!@#$%^&*(),<>@//cbo_t2@dt=2014
-POSTHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1
-POSTHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1@dt=2014
+POSTHOOK: Input: db~!@#$%^&*(),<>@cv1_n0
+POSTHOOK: Input: db~!@#$%^&*(),<>@src/_/cbo
 #### A masked pattern was here ####
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-NULL	2
-NULL	2
-NULL	2
-NULL	2
-NULL	2
-NULL	NULL
-NULL	NULL
-PREHOOK: query: select `c/b/o_t1`.c_int, `//cbo_t2`.c_int from `c/b/o_t1` full outer join  `//cbo_t2` on `c/b/o_t1`.key=`//cbo_t2`.key
+90	val_90
+90	val_90
+90	val_90
+92	val_92
+95	val_95
+95	val_95
+96	val_96
+97	val_97
+97	val_97
+98	val_98
+98	val_98
+PREHOOK: query: explain select *
+
+from (select *
+
+      from `src/_/cbo` b
+
+      where exists
+
+          (select a.key
+
+          from `src/_/cbo` a
+
+          where b.value = a.value  and a.key = b.key and a.value > 'val_9')
+
+     ) a
 PREHOOK: type: QUERY
-PREHOOK: Input: db~!@#$%^&*(),<>@//cbo_t2
-PREHOOK: Input: db~!@#$%^&*(),<>@//cbo_t2@dt=2014
-PREHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1
-PREHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1@dt=2014
-#### A masked pattern was here ####
-POSTHOOK: query: select `c/b/o_t1`.c_int, `//cbo_t2`.c_int from `c/b/o_t1` full outer join  `//cbo_t2` on `c/b/o_t1`.key=`//cbo_t2`.key
-POSTHOOK: type: QUERY
-POSTHOOK: Input: db~!@#$%^&*(),<>@//cbo_t2
-POSTHOOK: Input: db~!@#$%^&*(),<>@//cbo_t2@dt=2014
-POSTHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1
-POSTHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1@dt=2014
+PREHOOK: Input: db~!@#$%^&*(),<>@src/_/cbo
 #### A masked pattern was here ####
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-1	1
-NULL	2
-NULL	2
-NULL	2
-NULL	2
-NULL	2
-NULL	NULL
-NULL	NULL
-NULL	NULL
-NULL	NULL
-PREHOOK: query: select b, `c/b/o_t1`.c, `//cbo_t2`.p, q, `cbo_/t3////`.c_int from (select key as a, c_int as b, `c/b/o_t1`.c_float as c from `c/b/o_t1`) `c/b/o_t1` join (select `//cbo_t2`.key as p, `//cbo_t2`.c_int as q, c_float as r from `//cbo_t2`) `//cbo_t2` on `c/b/o_t1`.a=p join `cbo_/t3////` on `c/b/o_t1`.a=key
-PREHOOK: type: QUERY
-PREHOOK: Input: db~!@#$%^&*(),<>@//cbo_t2
-PREHOOK: Input: db~!@#$%^&*(),<>@//cbo_t2@dt=2014
-PREHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1
-PREHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1@dt=2014
-PREHOOK: Input: db~!@#$%^&*(),<>@cbo_/t3////
-#### A masked pattern was here ####
-POSTHOOK: query: select b, `c/b/o_t1`.c, `//cbo_t2`.p, q, `cbo_/t3////`.c_int from (select key as a, c_int as b, `c/b/o_t1`.c_float as c from `c/b/o_t1`) `c/b/o_t1` join (select `//cbo_t2`.key as p, `//cbo_t2`.c_int as q, c_float as r from `//cbo_t2`) `//cbo_t2` on `c/b/o_t1`.a=p join `cbo_/t3////` on `c/b/o_t1`.a=key
-POSTHOOK: type: QUERY
-POSTHOOK: Input: db~!@#$%^&*(),<>@//cbo_t2
-POSTHOOK: Input: db~!@#$%^&*(),<>@//cbo_t2@dt=2014
-POSTHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1
-POSTHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1@dt=2014
-POSTHOOK: Input: db~!@#$%^&*(),<>@cbo_/t3////
-#### A masked pattern was here ####
-1	1.0	 1	1	1
-1	1.0	 1	1	1
-1	1.0	 1	1	1
-1	1.0	 1	1	1
-1	1.0	 1	1	1
-1	1.0	 1	1	1
-1	1.0	 1	1	1
-1	1.0	 1	1	1
-1	1.0	 1 	1	1
-1	1.0	 1 	1	1
-1	1.0	 1 	1	1
-1	1.0	 1 	1	1
-1	1.0	 1 	1	1
-1	1.0	 1 	1	1
-1	1.0	 1 	1	1
-1	1.0	 1 	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1 	1	1
-1	1.0	1 	1	1
-1	1.0	1 	1	1
-1	1.0	1 	1	1
-1	1.0	1 	1	1
-1	1.0	1 	1	1
-1	1.0	1 	1	1
-1	1.0	1 	1	1
-PREHOOK: query: select key, `c/b/o_t1`.c_int, `//cbo_t2`.p, q from `c/b/o_t1` join (select `//cbo_t2`.key as p, `//cbo_t2`.c_int as q, c_float as r from `//cbo_t2`) `//cbo_t2` on `c/b/o_t1`.key=p join (select key as a, c_int as b, `cbo_/t3////`.c_float as c from `cbo_/t3////`)`cbo_/t3////` on `c/b/o_t1`.key=a
-PREHOOK: type: QUERY
-PREHOOK: Input: db~!@#$%^&*(),<>@//cbo_t2
-PREHOOK: Input: db~!@#$%^&*(),<>@//cbo_t2@dt=2014
-PREHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1
-PREHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1@dt=2014
-PREHOOK: Input: db~!@#$%^&*(),<>@cbo_/t3////
-#### A masked pattern was here ####
-POSTHOOK: query: select key, `c/b/o_t1`.c_int, `//cbo_t2`.p, q from `c/b/o_t1` join (select `//cbo_t2`.key as p, `//cbo_t2`.c_int as q, c_float as r from `//cbo_t2`) `//cbo_t2` on `c/b/o_t1`.key=p join (select key as a, c_int as b, `cbo_/t3////`.c_float as c from `cbo_/t3////`)`cbo_/t3////` on `c/b/o_t1`.key=a
+POSTHOOK: query: explain select *
+
+from (select *
+
+      from `src/_/cbo` b
+
+      where exists
+
+          (select a.key
+
+          from `src/_/cbo` a
+
+          where b.value = a.value  and a.key = b.key and a.value > 'val_9')
+
+     ) a
 POSTHOOK: type: QUERY
-POSTHOOK: Input: db~!@#$%^&*(),<>@//cbo_t2
-POSTHOOK: Input: db~!@#$%^&*(),<>@//cbo_t2@dt=2014
-POSTHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1
-POSTHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1@dt=2014
-POSTHOOK: Input: db~!@#$%^&*(),<>@cbo_/t3////
+POSTHOOK: Input: db~!@#$%^&*(),<>@src/_/cbo
 #### A masked pattern was here ####
- 1	1	 1	1
- 1	1	 1	1
- 1	1	 1	1
- 1	1	 1	1
- 1	1	 1	1
- 1	1	 1	1
- 1	1	 1	1
- 1	1	 1	1
- 1 	1	 1 	1
- 1 	1	 1 	1
- 1 	1	 1 	1
- 1 	1	 1 	1
- 1 	1	 1 	1
- 1 	1	 1 	1
- 1 	1	 1 	1
- 1 	1	 1 	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1 	1	1 	1
-1 	1	1 	1
-1 	1	1 	1
-1 	1	1 	1
-1 	1	1 	1
-1 	1	1 	1
-1 	1	1 	1
-1 	1	1 	1
-PREHOOK: query: select a, `c/b/o_t1`.b, key, `//cbo_t2`.c_int, `cbo_/t3////`.p from (select key as a, c_int as b, `c/b/o_t1`.c_float as c from `c/b/o_t1`) `c/b/o_t1` join `//cbo_t2`  on `c/b/o_t1`.a=key join (select key as p, c_int as q, `cbo_/t3////`.c_float as r from `cbo_/t3////`)`cbo_/t3////` on `c/b/o_t1`.a=`cbo_/t3////`.p
+STAGE DEPENDENCIES:
+  Stage-1 is a root stage
+  Stage-0 depends on stages: Stage-1
+
+STAGE PLANS:
+  Stage: Stage-1
+    Tez
+#### A masked pattern was here ####
+      Edges:
+        Reducer 2 <- Map 1 (SIMPLE_EDGE), Map 3 (SIMPLE_EDGE)
+#### A masked pattern was here ####
+      Vertices:
+        Map 1 
+            Map Operator Tree:
+                TableScan
+                  alias: b
+                  filterExpr: (value is not null and key is not null) (type: boolean)
+                  Statistics: Num rows: 500 Data size: 89000 Basic stats: COMPLETE Column stats: COMPLETE
+                  Filter Operator
+                    predicate: (value is not null and key is not null) (type: boolean)
+                    Statistics: Num rows: 500 Data size: 89000 Basic stats: COMPLETE Column stats: COMPLETE
+                    Reduce Output Operator
+                      key expressions: value (type: string), key (type: string)
+                      null sort order: zz
+                      sort order: ++
+                      Map-reduce partition columns: value (type: string), key (type: string)
+                      Statistics: Num rows: 500 Data size: 89000 Basic stats: COMPLETE Column stats: COMPLETE
+            Execution mode: vectorized, llap
+            LLAP IO: no inputs
+        Map 3 
+            Map Operator Tree:
+                TableScan
+                  alias: a
+                  filterExpr: ((value > 'val_9') and key is not null) (type: boolean)
+                  Statistics: Num rows: 500 Data size: 89000 Basic stats: COMPLETE Column stats: COMPLETE
+                  Filter Operator
+                    predicate: ((value > 'val_9') and key is not null) (type: boolean)
+                    Statistics: Num rows: 166 Data size: 29548 Basic stats: COMPLETE Column stats: COMPLETE
+                    Select Operator
+                      expressions: value (type: string), key (type: string)
+                      outputColumnNames: _col0, _col1
+                      Statistics: Num rows: 166 Data size: 29548 Basic stats: COMPLETE Column stats: COMPLETE
+                      Group By Operator
+                        keys: _col0 (type: string), _col1 (type: string)
+                        minReductionHashAggr: 0.0
+                        mode: hash
+                        outputColumnNames: _col0, _col1
+                        Statistics: Num rows: 83 Data size: 14774 Basic stats: COMPLETE Column stats: COMPLETE
+                        Reduce Output Operator
+                          key expressions: _col0 (type: string), _col1 (type: string)
+                          null sort order: zz
+                          sort order: ++
+                          Map-reduce partition columns: _col0 (type: string), _col1 (type: string)
+                          Statistics: Num rows: 83 Data size: 14774 Basic stats: COMPLETE Column stats: COMPLETE
+            Execution mode: vectorized, llap
+            LLAP IO: no inputs
+        Reducer 2 
+            Execution mode: llap
+            Reduce Operator Tree:
+              Merge Join Operator
+                condition map:
+                     Left Semi Join 0 to 1
+                keys:
+                  0 value (type: string), key (type: string)
+                  1 _col0 (type: string), _col1 (type: string)
+                outputColumnNames: _col0, _col1
+                Statistics: Num rows: 131 Data size: 23318 Basic stats: COMPLETE Column stats: COMPLETE
+                File Output Operator
+                  compressed: false
+                  Statistics: Num rows: 131 Data size: 23318 Basic stats: COMPLETE Column stats: COMPLETE
+                  table:
+                      input format: org.apache.hadoop.mapred.SequenceFileInputFormat
+                      output format: org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat
+                      serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+
+  Stage: Stage-0
+    Fetch Operator
+      limit: -1
+      Processor Tree:
+        ListSink
+
+PREHOOK: query: explain select *
+
+from (select b.key, count(*)
+
+  from `src/_/cbo` b
+
+  group by b.key
+
+  having exists
+
+    (select a.key
+
+    from `src/_/cbo` a
+
+    where a.key = b.key and a.value > 'val_9'
+
+    )
+
+) a
 PREHOOK: type: QUERY
-PREHOOK: Input: db~!@#$%^&*(),<>@//cbo_t2
-PREHOOK: Input: db~!@#$%^&*(),<>@//cbo_t2@dt=2014
-PREHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1
-PREHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1@dt=2014
-PREHOOK: Input: db~!@#$%^&*(),<>@cbo_/t3////
+PREHOOK: Input: db~!@#$%^&*(),<>@src/_/cbo
 #### A masked pattern was here ####
-POSTHOOK: query: select a, `c/b/o_t1`.b, key, `//cbo_t2`.c_int, `cbo_/t3////`.p from (select key as a, c_int as b, `c/b/o_t1`.c_float as c from `c/b/o_t1`) `c/b/o_t1` join `//cbo_t2`  on `c/b/o_t1`.a=key join (select key as p, c_int as q, `cbo_/t3////`.c_float as r from `cbo_/t3////`)`cbo_/t3////` on `c/b/o_t1`.a=`cbo_/t3////`.p
+POSTHOOK: query: explain select *
+
+from (select b.key, count(*)
+
+  from `src/_/cbo` b
+
+  group by b.key
+
+  having exists
+
+    (select a.key
+
+    from `src/_/cbo` a
+
+    where a.key = b.key and a.value > 'val_9'
+
+    )
+
+) a
 POSTHOOK: type: QUERY
-POSTHOOK: Input: db~!@#$%^&*(),<>@//cbo_t2
-POSTHOOK: Input: db~!@#$%^&*(),<>@//cbo_t2@dt=2014
-POSTHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1
-POSTHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1@dt=2014
-POSTHOOK: Input: db~!@#$%^&*(),<>@cbo_/t3////
+POSTHOOK: Input: db~!@#$%^&*(),<>@src/_/cbo
 #### A masked pattern was here ####
- 1	1	 1	1	 1
- 1	1	 1	1	 1
- 1	1	 1	1	 1
- 1	1	 1	1	 1
- 1	1	 1	1	 1
- 1	1	 1	1	 1
- 1	1	 1	1	 1
- 1	1	 1	1	 1
- 1 	1	 1 	1	 1 
- 1 	1	 1 	1	 1 
- 1 	1	 1 	1	 1 
- 1 	1	 1 	1	 1 
- 1 	1	 1 	1	 1 
- 1 	1	 1 	1	 1 
- 1 	1	 1 	1	 1 
- 1 	1	 1 	1	 1 
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1	1	1	1	1
-1 	1	1 	1	1 
-1 	1	1 	1	1 
-1 	1	1 	1	1 
-1 	1	1 	1	1 
-1 	1	1 	1	1 
-1 	1	1 	1	1 
-1 	1	1 	1	1 
-1 	1	1 	1	1 
-PREHOOK: query: select b, `c/b/o_t1`.c, `//cbo_t2`.c_int, `cbo_/t3////`.c_int from (select key as a, c_int as b, `c/b/o_t1`.c_float as c from `c/b/o_t1`) `c/b/o_t1` join `//cbo_t2` on `c/b/o_t1`.a=`//cbo_t2`.key join `cbo_/t3////` on `c/b/o_t1`.a=`cbo_/t3////`.key
+STAGE DEPENDENCIES:
+  Stage-1 is a root stage
+  Stage-0 depends on stages: Stage-1
+
+STAGE PLANS:
+  Stage: Stage-1
+    Tez
+#### A masked pattern was here ####
+      Edges:
+        Reducer 2 <- Map 1 (SIMPLE_EDGE)
+        Reducer 3 <- Map 4 (SIMPLE_EDGE), Reducer 2 (SIMPLE_EDGE)
+#### A masked pattern was here ####
+      Vertices:
+        Map 1 
+            Map Operator Tree:
+                TableScan
+                  alias: b
+                  filterExpr: key is not null (type: boolean)
+                  Statistics: Num rows: 500 Data size: 43500 Basic stats: COMPLETE Column stats: COMPLETE
+                  Filter Operator
+                    predicate: key is not null (type: boolean)
+                    Statistics: Num rows: 500 Data size: 43500 Basic stats: COMPLETE Column stats: COMPLETE
+                    Group By Operator
+                      aggregations: count()
+                      keys: key (type: string)
+                      minReductionHashAggr: 0.5
+                      mode: hash
+                      outputColumnNames: _col0, _col1
+                      Statistics: Num rows: 250 Data size: 23750 Basic stats: COMPLETE Column stats: COMPLETE
+                      Reduce Output Operator
+                        key expressions: _col0 (type: string)
+                        null sort order: z
+                        sort order: +
+                        Map-reduce partition columns: _col0 (type: string)
+                        Statistics: Num rows: 250 Data size: 23750 Basic stats: COMPLETE Column stats: COMPLETE
+                        value expressions: _col1 (type: bigint)
+            Execution mode: vectorized, llap
+            LLAP IO: no inputs
+        Map 4 
+            Map Operator Tree:
+                TableScan
+                  alias: a
+                  filterExpr: ((value > 'val_9') and key is not null) (type: boolean)
+                  Statistics: Num rows: 500 Data size: 89000 Basic stats: COMPLETE Column stats: COMPLETE
+                  Filter Operator
+                    predicate: ((value > 'val_9') and key is not null) (type: boolean)
+                    Statistics: Num rows: 166 Data size: 29548 Basic stats: COMPLETE Column stats: COMPLETE
+                    Select Operator
+                      expressions: key (type: string)
+                      outputColumnNames: _col0
+                      Statistics: Num rows: 166 Data size: 14442 Basic stats: COMPLETE Column stats: COMPLETE
+                      Group By Operator
+                        keys: _col0 (type: string)
+                        minReductionHashAggr: 0.5
+                        mode: hash
+                        outputColumnNames: _col0
+                        Statistics: Num rows: 83 Data size: 7221 Basic stats: COMPLETE Column stats: COMPLETE
+                        Reduce Output Operator
+                          key expressions: _col0 (type: string)
+                          null sort order: z
+                          sort order: +
+                          Map-reduce partition columns: _col0 (type: string)
+                          Statistics: Num rows: 83 Data size: 7221 Basic stats: COMPLETE Column stats: COMPLETE
+            Execution mode: vectorized, llap
+            LLAP IO: no inputs
+        Reducer 2 
+            Execution mode: vectorized, llap
+            Reduce Operator Tree:
+              Group By Operator
+                aggregations: count(VALUE._col0)
+                keys: KEY._col0 (type: string)
+                mode: mergepartial
+                outputColumnNames: _col0, _col1
+                Statistics: Num rows: 250 Data size: 23750 Basic stats: COMPLETE Column stats: COMPLETE
+                Reduce Output Operator
+                  key expressions: _col0 (type: string)
+                  null sort order: z
+                  sort order: +
+                  Map-reduce partition columns: _col0 (type: string)
+                  Statistics: Num rows: 250 Data size: 23750 Basic stats: COMPLETE Column stats: COMPLETE
+                  value expressions: _col1 (type: bigint)
+        Reducer 3 
+            Execution mode: llap
+            Reduce Operator Tree:
+              Merge Join Operator
+                condition map:
+                     Left Semi Join 0 to 1
+                keys:
+                  0 _col0 (type: string)
+                  1 _col0 (type: string)
+                outputColumnNames: _col0, _col1
+                Statistics: Num rows: 83 Data size: 7885 Basic stats: COMPLETE Column stats: COMPLETE
+                File Output Operator
+                  compressed: false
+                  Statistics: Num rows: 83 Data size: 7885 Basic stats: COMPLETE Column stats: COMPLETE
+                  table:
+                      input format: org.apache.hadoop.mapred.SequenceFileInputFormat
+                      output format: org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat
+                      serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+
+  Stage: Stage-0
+    Fetch Operator
+      limit: -1
+      Processor Tree:
+        ListSink
+
+PREHOOK: query: explain select *
+
+from `src/_/cbo`
+
+where `src/_/cbo`.key in (select key from `src/_/cbo` s1 where s1.key > '9') order by key
 PREHOOK: type: QUERY
-PREHOOK: Input: db~!@#$%^&*(),<>@//cbo_t2
-PREHOOK: Input: db~!@#$%^&*(),<>@//cbo_t2@dt=2014
-PREHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1
-PREHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1@dt=2014
-PREHOOK: Input: db~!@#$%^&*(),<>@cbo_/t3////
+PREHOOK: Input: db~!@#$%^&*(),<>@src/_/cbo
 #### A masked pattern was here ####
-POSTHOOK: query: select b, `c/b/o_t1`.c, `//cbo_t2`.c_int, `cbo_/t3////`.c_int from (select key as a, c_int as b, `c/b/o_t1`.c_float as c from `c/b/o_t1`) `c/b/o_t1` join `//cbo_t2` on `c/b/o_t1`.a=`//cbo_t2`.key join `cbo_/t3////` on `c/b/o_t1`.a=`cbo_/t3////`.key
+POSTHOOK: query: explain select *
+
+from `src/_/cbo`
+
+where `src/_/cbo`.key in (select key from `src/_/cbo` s1 where s1.key > '9') order by key
 POSTHOOK: type: QUERY
-POSTHOOK: Input: db~!@#$%^&*(),<>@//cbo_t2
-POSTHOOK: Input: db~!@#$%^&*(),<>@//cbo_t2@dt=2014
-POSTHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1
-POSTHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1@dt=2014
-POSTHOOK: Input: db~!@#$%^&*(),<>@cbo_/t3////
+POSTHOOK: Input: db~!@#$%^&*(),<>@src/_/cbo
 #### A masked pattern was here ####
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-1	1.0	1	1
-PREHOOK: query: select `cbo_/t3////`.c_int, b, `//cbo_t2`.c_int, `c/b/o_t1`.c from (select key as a, c_int as b, `c/b/o_t1`.c_float as c from `c/b/o_t1`) `c/b/o_t1` join `//cbo_t2` on `c/b/o_t1`.a=`//cbo_t2`.key join `cbo_/t3////` on `c/b/o_t1`.a=`cbo_/t3////`.key
+STAGE DEPENDENCIES:
+  Stage-1 is a root stage
+  Stage-0 depends on stages: Stage-1
+
+STAGE PLANS:
+  Stage: Stage-1
+    Tez
+#### A masked pattern was here ####
+      Edges:
+        Reducer 2 <- Map 1 (SIMPLE_EDGE), Map 4 (SIMPLE_EDGE)
+        Reducer 3 <- Reducer 2 (SIMPLE_EDGE)
+#### A masked pattern was here ####
+      Vertices:
+        Map 1 
+            Map Operator Tree:
+                TableScan
+                  alias: src/_/cbo
+                  filterExpr: key is not null (type: boolean)
+                  Statistics: Num rows: 500 Data size: 89000 Basic stats: COMPLETE Column stats: COMPLETE
+                  Filter Operator
+                    predicate: key is not null (type: boolean)
+                    Statistics: Num rows: 500 Data size: 89000 Basic stats: COMPLETE Column stats: COMPLETE
+                    Reduce Output Operator
+                      key expressions: key (type: string)
+                      null sort order: z
+                      sort order: +
+                      Map-reduce partition columns: key (type: string)
+                      Statistics: Num rows: 500 Data size: 89000 Basic stats: COMPLETE Column stats: COMPLETE
+                      value expressions: value (type: string)
+            Execution mode: vectorized, llap
+            LLAP IO: no inputs
+        Map 4 
+            Map Operator Tree:
+                TableScan
+                  alias: s1
+                  filterExpr: (key > '9') (type: boolean)
+                  Statistics: Num rows: 500 Data size: 43500 Basic stats: COMPLETE Column stats: COMPLETE
+                  Filter Operator
+                    predicate: (key > '9') (type: boolean)
+                    Statistics: Num rows: 166 Data size: 14442 Basic stats: COMPLETE Column stats: COMPLETE
+                    Select Operator
+                      expressions: key (type: string)
+                      outputColumnNames: _col0
+                      Statistics: Num rows: 166 Data size: 14442 Basic stats: COMPLETE Column stats: COMPLETE
+                      Group By Operator
+                        keys: _col0 (type: string)
+                        minReductionHashAggr: 0.5
+                        mode: hash
+                        outputColumnNames: _col0
+                        Statistics: Num rows: 83 Data size: 7221 Basic stats: COMPLETE Column stats: COMPLETE
+                        Reduce Output Operator
+                          key expressions: _col0 (type: string)
+                          null sort order: z
+                          sort order: +
+                          Map-reduce partition columns: _col0 (type: string)
+                          Statistics: Num rows: 83 Data size: 7221 Basic stats: COMPLETE Column stats: COMPLETE
+            Execution mode: vectorized, llap
+            LLAP IO: no inputs
+        Reducer 2 
+            Execution mode: llap
+            Reduce Operator Tree:
+              Merge Join Operator
+                condition map:
+                     Left Semi Join 0 to 1
+                keys:
+                  0 key (type: string)
+                  1 _col0 (type: string)
+                outputColumnNames: _col0, _col1
+                Statistics: Num rows: 131 Data size: 23318 Basic stats: COMPLETE Column stats: COMPLETE
+                Reduce Output Operator
+                  key expressions: _col0 (type: string)
+                  null sort order: z
+                  sort order: +
+                  Statistics: Num rows: 131 Data size: 23318 Basic stats: COMPLETE Column stats: COMPLETE
+                  value expressions: _col1 (type: string)
+        Reducer 3 
+            Execution mode: vectorized, llap
+            Reduce Operator Tree:
+              Select Operator
+                expressions: KEY.reducesinkkey0 (type: string), VALUE._col0 (type: string)
+                outputColumnNames: _col0, _col1
+                Statistics: Num rows: 131 Data size: 23318 Basic stats: COMPLETE Column stats: COMPLETE
+                File Output Operator
+                  compressed: false
+                  Statistics: Num rows: 131 Data size: 23318 Basic stats: COMPLETE Column stats: COMPLETE
+                  table:
+                      input format: org.apache.hadoop.mapred.SequenceFileInputFormat
+                      output format: org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat
+                      serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+
+  Stage: Stage-0
+    Fetch Operator
+      limit: -1
+      Processor Tree:
+        ListSink
+
+PREHOOK: query: explain select *
+
+from `src/_/cbo` b
+
+where b.key in
+
+        (select distinct a.key
+
+         from `src/_/cbo` a
+
+         where b.value = a.value and a.key > '9'
+
+        ) order by b.key
 PREHOOK: type: QUERY
-PREHOOK: Input: db~!@#$%^&*(),<>@//cbo_t2
-PREHOOK: Input: db~!@#$%^&*(),<>@//cbo_t2@dt=2014
-PREHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1
-PREHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1@dt=2014
-PREHOOK: Input: db~!@#$%^&*(),<>@cbo_/t3////
+PREHOOK: Input: db~!@#$%^&*(),<>@src/_/cbo
 #### A masked pattern was here ####
-POSTHOOK: query: select `cbo_/t3////`.c_int, b, `//cbo_t2`.c_int, `c/b/o_t1`.c from (select key as a, c_int as b, `c/b/o_t1`.c_float as c from `c/b/o_t1`) `c/b/o_t1` join `//cbo_t2` on `c/b/o_t1`.a=`//cbo_t2`.key join `cbo_/t3////` on `c/b/o_t1`.a=`cbo_/t3////`.key
+POSTHOOK: query: explain select *
+
+from `src/_/cbo` b
+
+where b.key in
+
+        (select distinct a.key
+
+         from `src/_/cbo` a
+
+         where b.value = a.value and a.key > '9'
+
+        ) order by b.key
 POSTHOOK: type: QUERY
-POSTHOOK: Input: db~!@#$%^&*(),<>@//cbo_t2
-POSTHOOK: Input: db~!@#$%^&*(),<>@//cbo_t2@dt=2014
-POSTHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1
-POSTHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1@dt=2014
-POSTHOOK: Input: db~!@#$%^&*(),<>@cbo_/t3////
+POSTHOOK: Input: db~!@#$%^&*(),<>@src/_/cbo
 #### A masked pattern was here ####
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-1	1	1	1.0
-PREHOOK: query: select b, `c/b/o_t1`.c, `//cbo_t2`.p, q, `cbo_/t3////`.c_int from (select key as a, c_int as b, `c/b/o_t1`.c_float as c from `c/b/o_t1`) `c/b/o_t1` left outer join (select `//cbo_t2`.key as p, `//cbo_t2`.c_int as q, c_float as r from `//cbo_t2`) `//cbo_t2` on `c/b/o_t1`.a=p join `cbo_/t3////` on `c/b/o_t1`.a=key
+STAGE DEPENDENCIES:
+  Stage-1 is a root stage
+  Stage-0 depends on stages: Stage-1
+
+STAGE PLANS:
+  Stage: Stage-1
+    Tez
+#### A masked pattern was here ####
+      Edges:
+        Reducer 2 <- Map 1 (SIMPLE_EDGE), Reducer 4 (SIMPLE_EDGE)
+        Reducer 3 <- Reducer 2 (SIMPLE_EDGE)
+        Reducer 4 <- Map 1 (SIMPLE_EDGE)
+#### A masked pattern was here ####
+      Vertices:
+        Map 1 
+            Map Operator Tree:
+                TableScan
+                  alias: b
+                  filterExpr: ((key is not null and value is not null) or ((key > '9') and value is not null)) (type: boolean)
+                  Statistics: Num rows: 500 Data size: 89000 Basic stats: COMPLETE Column stats: COMPLETE
+                  Filter Operator
+                    predicate: (key is not null and value is not null) (type: boolean)
+                    Statistics: Num rows: 500 Data size: 89000 Basic stats: COMPLETE Column stats: COMPLETE
+                    Reduce Output Operator
+                      key expressions: key (type: string), value (type: string)
+                      null sort order: zz
+                      sort order: ++
+                      Map-reduce partition columns: key (type: string), value (type: string)
+                      Statistics: Num rows: 500 Data size: 89000 Basic stats: COMPLETE Column stats: COMPLETE
+                  Filter Operator
+                    predicate: ((key > '9') and value is not null) (type: boolean)
+                    Statistics: Num rows: 166 Data size: 29548 Basic stats: COMPLETE Column stats: COMPLETE
+                    Group By Operator
+                      keys: key (type: string), value (type: string)
+                      minReductionHashAggr: 0.0
+                      mode: hash
+                      outputColumnNames: _col0, _col1
+                      Statistics: Num rows: 83 Data size: 14774 Basic stats: COMPLETE Column stats: COMPLETE
+                      Reduce Output Operator
+                        key expressions: _col0 (type: string), _col1 (type: string)
+                        null sort order: zz
+                        sort order: ++
+                        Map-reduce partition columns: _col0 (type: string), _col1 (type: string)
+                        Statistics: Num rows: 83 Data size: 14774 Basic stats: COMPLETE Column stats: COMPLETE
+            Execution mode: vectorized, llap
+            LLAP IO: no inputs
+        Reducer 2 
+            Execution mode: llap
+            Reduce Operator Tree:
+              Merge Join Operator
+                condition map:
+                     Left Semi Join 0 to 1
+                keys:
+                  0 key (type: string), value (type: string)
+                  1 _col0 (type: string), _col1 (type: string)
+                outputColumnNames: _col0, _col1
+                Statistics: Num rows: 64 Data size: 11392 Basic stats: COMPLETE Column stats: COMPLETE
+                Reduce Output Operator
+                  key expressions: _col0 (type: string)
+                  null sort order: z
+                  sort order: +
+                  Statistics: Num rows: 64 Data size: 11392 Basic stats: COMPLETE Column stats: COMPLETE
+                  value expressions: _col1 (type: string)
+        Reducer 3 
+            Execution mode: vectorized, llap
+            Reduce Operator Tree:
+              Select Operator
+                expressions: KEY.reducesinkkey0 (type: string), VALUE._col0 (type: string)
+                outputColumnNames: _col0, _col1
+                Statistics: Num rows: 64 Data size: 11392 Basic stats: COMPLETE Column stats: COMPLETE
+                File Output Operator
+                  compressed: false
+                  Statistics: Num rows: 64 Data size: 11392 Basic stats: COMPLETE Column stats: COMPLETE
+                  table:
+                      input format: org.apache.hadoop.mapred.SequenceFileInputFormat
+                      output format: org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat
+                      serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+        Reducer 4 
+            Execution mode: vectorized, llap
+            Reduce Operator Tree:
+              Group By Operator
+                keys: KEY._col0 (type: string), KEY._col1 (type: string)
+                mode: mergepartial
+                outputColumnNames: _col0, _col1
+                Statistics: Num rows: 83 Data size: 14774 Basic stats: COMPLETE Column stats: COMPLETE
+                Group By Operator
+                  keys: _col0 (type: string), _col1 (type: string)
+                  minReductionHashAggr: 0.0
+                  mode: hash
+                  outputColumnNames: _col0, _col1
+                  Statistics: Num rows: 41 Data size: 7298 Basic stats: COMPLETE Column stats: COMPLETE
+                  Reduce Output Operator
+                    key expressions: _col0 (type: string), _col1 (type: string)
+                    null sort order: zz
+                    sort order: ++
+                    Map-reduce partition columns: _col0 (type: string), _col1 (type: string)
+                    Statistics: Num rows: 41 Data size: 7298 Basic stats: COMPLETE Column stats: COMPLETE
+
+  Stage: Stage-0
+    Fetch Operator
+      limit: -1
+      Processor Tree:
+        ListSink
+
+PREHOOK: query: explain select p.p_partkey, li.l_suppkey
+
+from (select distinct l_partkey as p_partkey from `line/item`) p join `line/item` li on p.p_partkey = li.l_partkey
+
+where li.l_linenumber = 1 and
+
+ li.l_orderkey in (select l_orderkey from `line/item` where l_shipmode = 'AIR' and l_linenumber = li.l_linenumber)
+
+ order by p.p_partkey
 PREHOOK: type: QUERY
-PREHOOK: Input: db~!@#$%^&*(),<>@//cbo_t2
-PREHOOK: Input: db~!@#$%^&*(),<>@//cbo_t2@dt=2014
-PREHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1
-PREHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1@dt=2014
-PREHOOK: Input: db~!@#$%^&*(),<>@cbo_/t3////
+PREHOOK: Input: db~!@#$%^&*(),<>@line/item
 #### A masked pattern was here ####
-POSTHOOK: query: select b, `c/b/o_t1`.c, `//cbo_t2`.p, q, `cbo_/t3////`.c_int from (select key as a, c_int as b, `c/b/o_t1`.c_float as c from `c/b/o_t1`) `c/b/o_t1` left outer join (select `//cbo_t2`.key as p, `//cbo_t2`.c_int as q, c_float as r from `//cbo_t2`) `//cbo_t2` on `c/b/o_t1`.a=p join `cbo_/t3////` on `c/b/o_t1`.a=key
+POSTHOOK: query: explain select p.p_partkey, li.l_suppkey
+
+from (select distinct l_partkey as p_partkey from `line/item`) p join `line/item` li on p.p_partkey = li.l_partkey
+
+where li.l_linenumber = 1 and
+
+ li.l_orderkey in (select l_orderkey from `line/item` where l_shipmode = 'AIR' and l_linenumber = li.l_linenumber)
+
+ order by p.p_partkey
 POSTHOOK: type: QUERY
-POSTHOOK: Input: db~!@#$%^&*(),<>@//cbo_t2
-POSTHOOK: Input: db~!@#$%^&*(),<>@//cbo_t2@dt=2014
-POSTHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1
-POSTHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1@dt=2014
-POSTHOOK: Input: db~!@#$%^&*(),<>@cbo_/t3////
+POSTHOOK: Input: db~!@#$%^&*(),<>@line/item
 #### A masked pattern was here ####
-1	1.0	 1	1	1
-1	1.0	 1	1	1
-1	1.0	 1	1	1
-1	1.0	 1	1	1
-1	1.0	 1	1	1
-1	1.0	 1	1	1
-1	1.0	 1	1	1
-1	1.0	 1	1	1
-1	1.0	 1 	1	1
-1	1.0	 1 	1	1
-1	1.0	 1 	1	1
-1	1.0	 1 	1	1
-1	1.0	 1 	1	1
-1	1.0	 1 	1	1
-1	1.0	 1 	1	1
-1	1.0	 1 	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1	1	1
-1	1.0	1 	1	1
-1	1.0	1 	1	1
-1	1.0	1 	1	1
-1	1.0	1 	1	1
-1	1.0	1 	1	1
-1	1.0	1 	1	1
-1	1.0	1 	1	1
-1	1.0	1 	1	1
-PREHOOK: query: select key, `c/b/o_t1`.c_int, `//cbo_t2`.p, q from `c/b/o_t1` join (select `//cbo_t2`.key as p, `//cbo_t2`.c_int as q, c_float as r from `//cbo_t2`) `//cbo_t2` on `c/b/o_t1`.key=p left outer join (select key as a, c_int as b, `cbo_/t3////`.c_float as c from `cbo_/t3////`)`cbo_/t3////` on `c/b/o_t1`.key=a
+STAGE DEPENDENCIES:
+  Stage-1 is a root stage
+  Stage-0 depends on stages: Stage-1
+
+STAGE PLANS:
+  Stage: Stage-1
+    Tez
+#### A masked pattern was here ####
+      Edges:
+        Reducer 2 <- Map 1 (SIMPLE_EDGE)
+        Reducer 3 <- Map 6 (SIMPLE_EDGE), Reducer 2 (SIMPLE_EDGE)
+        Reducer 4 <- Map 7 (SIMPLE_EDGE), Reducer 3 (SIMPLE_EDGE)
+        Reducer 5 <- Reducer 4 (SIMPLE_EDGE)
+#### A masked pattern was here ####
+      Vertices:
+        Map 1 
+            Map Operator Tree:
+                TableScan
+                  alias: line/item
+                  filterExpr: l_partkey is not null (type: boolean)
+                  Statistics: Num rows: 100 Data size: 400 Basic stats: COMPLETE Column stats: COMPLETE
+                  Filter Operator
+                    predicate: l_partkey is not null (type: boolean)
+                    Statistics: Num rows: 100 Data size: 400 Basic stats: COMPLETE Column stats: COMPLETE
+                    Group By Operator
+                      keys: l_partkey (type: int)
+                      minReductionHashAggr: 0.5
+                      mode: hash
+                      outputColumnNames: _col0
+                      Statistics: Num rows: 50 Data size: 200 Basic stats: COMPLETE Column stats: COMPLETE
+                      Reduce Output Operator
+                        key expressions: _col0 (type: int)
+                        null sort order: z
+                        sort order: +
+                        Map-reduce partition columns: _col0 (type: int)
+                        Statistics: Num rows: 50 Data size: 200 Basic stats: COMPLETE Column stats: COMPLETE
+            Execution mode: vectorized, llap
+            LLAP IO: no inputs
+        Map 6 
+            Map Operator Tree:
+                TableScan
+                  alias: li
+                  filterExpr: (l_partkey is not null and l_orderkey is not null and (l_linenumber = 1)) (type: boolean)
+                  Statistics: Num rows: 100 Data size: 1600 Basic stats: COMPLETE Column stats: COMPLETE
+                  Filter Operator
+                    predicate: (l_partkey is not null and l_orderkey is not null and (l_linenumber = 1)) (type: boolean)
+                    Statistics: Num rows: 14 Data size: 224 Basic stats: COMPLETE Column stats: COMPLETE
+                    Reduce Output Operator
+                      key expressions: l_partkey (type: int)
+                      null sort order: z
+                      sort order: +
+                      Map-reduce partition columns: l_partkey (type: int)
+                      Statistics: Num rows: 14 Data size: 224 Basic stats: COMPLETE Column stats: COMPLETE
+                      value expressions: l_orderkey (type: int), l_suppkey (type: int)
+            Execution mode: vectorized, llap
+            LLAP IO: no inputs
+        Map 7 
+            Map Operator Tree:
+                TableScan
+                  alias: line/item
+                  filterExpr: ((l_shipmode = 'AIR') and l_orderkey is not null and (l_linenumber = 1)) (type: boolean)
+                  Statistics: Num rows: 100 Data size: 9600 Basic stats: COMPLETE Column stats: COMPLETE
+                  Filter Operator
+                    predicate: ((l_shipmode = 'AIR') and l_orderkey is not null and (l_linenumber = 1)) (type: boolean)
+                    Statistics: Num rows: 2 Data size: 192 Basic stats: COMPLETE Column stats: COMPLETE
+                    Select Operator
+                      expressions: l_orderkey (type: int)
+                      outputColumnNames: _col0
+                      Statistics: Num rows: 2 Data size: 8 Basic stats: COMPLETE Column stats: COMPLETE
+                      Group By Operator
+                        keys: _col0 (type: int), 1 (type: int)
+                        minReductionHashAggr: 0.5
+                        mode: hash
+                        outputColumnNames: _col0, _col1
+                        Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: COMPLETE
+                        Reduce Output Operator
+                          key expressions: _col0 (type: int), 1 (type: int)
+                          null sort order: zz
+                          sort order: ++
+                          Map-reduce partition columns: _col0 (type: int), 1 (type: int)
+                          Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: COMPLETE
+            Execution mode: vectorized, llap
+            LLAP IO: no inputs
+        Reducer 2 
+            Execution mode: vectorized, llap
+            Reduce Operator Tree:
+              Group By Operator
+                keys: KEY._col0 (type: int)
+                mode: mergepartial
+                outputColumnNames: _col0
+                Statistics: Num rows: 50 Data size: 200 Basic stats: COMPLETE Column stats: COMPLETE
+                Reduce Output Operator
+                  key expressions: _col0 (type: int)
+                  null sort order: z
+                  sort order: +
+                  Map-reduce partition columns: _col0 (type: int)
+                  Statistics: Num rows: 50 Data size: 200 Basic stats: COMPLETE Column stats: COMPLETE
+        Reducer 3 
+            Execution mode: llap
+            Reduce Operator Tree:
+              Merge Join Operator
+                condition map:
+                     Inner Join 0 to 1
+                keys:
+                  0 _col0 (type: int)
+                  1 l_partkey (type: int)
+                outputColumnNames: _col0, _col1, _col3
+                Statistics: Num rows: 14 Data size: 168 Basic stats: COMPLETE Column stats: COMPLETE
+                Reduce Output Operator
+                  key expressions: _col1 (type: int), 1 (type: int)
+                  null sort order: zz
+                  sort order: ++
+                  Map-reduce partition columns: _col1 (type: int), 1 (type: int)
+                  Statistics: Num rows: 14 Data size: 168 Basic stats: COMPLETE Column stats: COMPLETE
+                  value expressions: _col0 (type: int), _col3 (type: int)
+        Reducer 4 
+            Execution mode: llap
+            Reduce Operator Tree:
+              Merge Join Operator
+                condition map:
+                     Left Semi Join 0 to 1
+                keys:
+                  0 _col1 (type: int), 1 (type: int)
+                  1 _col0 (type: int), 1 (type: int)
+                outputColumnNames: _col0, _col3
+                Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: COMPLETE
+                Select Operator
+                  expressions: _col0 (type: int), _col3 (type: int)
+                  outputColumnNames: _col0, _col1
+                  Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: COMPLETE
+                  Reduce Output Operator
+                    key expressions: _col0 (type: int)
+                    null sort order: z
+                    sort order: +
+                    Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: COMPLETE
+                    value expressions: _col1 (type: int)
+        Reducer 5 
+            Execution mode: vectorized, llap
+            Reduce Operator Tree:
+              Select Operator
+                expressions: KEY.reducesinkkey0 (type: int), VALUE._col0 (type: int)
+                outputColumnNames: _col0, _col1
+                Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: COMPLETE
+                File Output Operator
+                  compressed: false
+                  Statistics: Num rows: 1 Data size: 8 Basic stats: COMPLETE Column stats: COMPLETE
+                  table:
+                      input format: org.apache.hadoop.mapred.SequenceFileInputFormat
+                      output format: org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat
+                      serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+
+  Stage: Stage-0
+    Fetch Operator
+      limit: -1
+      Processor Tree:
+        ListSink
+
+PREHOOK: query: explain select key, value, count(*)
+
+from `src/_/cbo` b
+
+where b.key in (select key from `src/_/cbo` where `src/_/cbo`.key > '8')
+
+group by key, value
+
+having count(*) in (select count(*) from `src/_/cbo` s1 where s1.key > '9' group by s1.key ) order by key
 PREHOOK: type: QUERY
-PREHOOK: Input: db~!@#$%^&*(),<>@//cbo_t2
-PREHOOK: Input: db~!@#$%^&*(),<>@//cbo_t2@dt=2014
-PREHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1
-PREHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1@dt=2014
-PREHOOK: Input: db~!@#$%^&*(),<>@cbo_/t3////
+PREHOOK: Input: db~!@#$%^&*(),<>@src/_/cbo
 #### A masked pattern was here ####
-POSTHOOK: query: select key, `c/b/o_t1`.c_int, `//cbo_t2`.p, q from `c/b/o_t1` join (select `//cbo_t2`.key as p, `//cbo_t2`.c_int as q, c_float as r from `//cbo_t2`) `//cbo_t2` on `c/b/o_t1`.key=p left outer join (select key as a, c_int as b, `cbo_/t3////`.c_float as c from `cbo_/t3////`)`cbo_/t3////` on `c/b/o_t1`.key=a
+POSTHOOK: query: explain select key, value, count(*)
+
+from `src/_/cbo` b
+
+where b.key in (select key from `src/_/cbo` where `src/_/cbo`.key > '8')
+
+group by key, value
+
+having count(*) in (select count(*) from `src/_/cbo` s1 where s1.key > '9' group by s1.key ) order by key
 POSTHOOK: type: QUERY
-POSTHOOK: Input: db~!@#$%^&*(),<>@//cbo_t2
-POSTHOOK: Input: db~!@#$%^&*(),<>@//cbo_t2@dt=2014
-POSTHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1
-POSTHOOK: Input: db~!@#$%^&*(),<>@c/b/o_t1@dt=2014
-POSTHOOK: Input: db~!@#$%^&*(),<>@cbo_/t3////
+POSTHOOK: Input: db~!@#$%^&*(),<>@src/_/cbo
 #### A masked pattern was here ####
- 1	1	 1	1
- 1	1	 1	1
- 1	1	 1	1
- 1	1	 1	1
- 1	1	 1	1
- 1	1	 1	1
- 1	1	 1	1
- 1	1	 1	1
- 1 	1	 1 	1
- 1 	1	 1 	1
- 1 	1	 1 	1
- 1 	1	 1 	1
- 1 	1	 1 	1
- 1 	1	 1 	1
- 1 	1	 1 	1
- 1 	1	 1 	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1	1	1	1
-1 	1	1 	1
-1 	1	1 	1
-1 	1	1 	1
-1 	1	1 	1
-1 	1	1 	1
-1 	1	1 	1
-1 	1	1 	1
-1 	1	1 	1
-PREHOOK: query: select b, `c/b/o_t1`.c, `//cbo_t2`.p, q, `cbo_/t3////`.c_int from (select key as a, c_int as b, `c/b/o_t1`.c_float as c from `c/b/o_t1`) `c/b/o_t1` right outer join (select `//cbo_t2`.key as p, `//cbo_t2`.c_int as q, c_float as r from `//cbo_t2`) `//cbo_t2` on `c/b/o_t1`.a=p join `cbo_/t3////` on `c/b/o_t1`.a=key
+STAGE DEPENDENCIES:
+  Stage-1 is a root stage
+  Stage-0 depends on stages: Stage-1
+
+STAGE PLANS:
+  Stage: Stage-1
+    Tez
+#### A masked pattern was here ####
+      Edges:
+        Reducer 2 <- Map 1 (SIMPLE_EDGE), Map 6 (SIMPLE_EDGE)
+        Reducer 3 <- Reducer 2 (SIMPLE_EDGE)
+        Reducer 4 <- Reducer 3 (SIMPLE_EDGE), Reducer 7 (SIMPLE_EDGE)
+        Reducer 5 <- Reducer 4 (SIMPLE_EDGE)
+        Reducer 7 <- Map 6 (SIMPLE_EDGE)
+#### A masked pattern was here ####
+      Vertices:
+        Map 1 
+            Map Operator Tree:
+                TableScan
+                  alias: b
+                  filterExpr: key is not null (type: boolean)
+                  Statistics: Num rows: 500 Data size: 89000 Basic stats: COMPLETE Column stats: COMPLETE
+                  Filter Operator
+                    predicate: key is not null (type: boolean)
+                    Statistics: Num rows: 500 Data size: 89000 Basic stats: COMPLETE Column stats: COMPLETE
+                    Reduce Output Operator
+                      key expressions: key (type: string)
+                      null sort order: z
+                      sort order: +
+                      Map-reduce partition columns: key (type: string)
+                      Statistics: Num rows: 500 Data size: 89000 Basic stats: COMPLETE Column stats: COMPLETE
+                      value expressions: value (type: string)
+            Execution mode: vectorized, llap
+            LLAP IO: no inputs
+        Map 6 
+            Map Operator Tree:
+                TableScan
+                  alias: src/_/cbo
+                  filterExpr: ((key > '8') or (key > '9')) (type: boolean)
+                  Statistics: Num rows: 500 Data size: 43500 Basic stats: COMPLETE Column stats: COMPLETE
+                  Filter Operator
+                    predicate: (key > '8') (type: boolean)
+                    Statistics: Num rows: 166 Data size: 14442 Basic stats: COMPLETE Column stats: COMPLETE
+                    Select Operator
+                      expressions: key (type: string)
+                      outputColumnNames: _col0
+                      Statistics: Num rows: 166 Data size: 14442 Basic stats: COMPLETE Column stats: COMPLETE
+                      Group By Operator
+                        keys: _col0 (type: string)
+                        minReductionHashAggr: 0.5
+                        mode: hash
+                        outputColumnNames: _col0
+                        Statistics: Num rows: 83 Data size: 7221 Basic stats: COMPLETE Column stats: COMPLETE
+                        Reduce Output Operator
+                          key expressions: _col0 (type: string)
+                          null sort order: z
+                          sort order: +
+                          Map-reduce partition columns: _col0 (type: string)
+                          Statistics: Num rows: 83 Data size: 7221 Basic stats: COMPLETE Column stats: COMPLETE
+                  Filter Operator
+                    predicate: (key > '9') (type: boolean)
+                    Statistics: Num rows: 166 Data size: 14442 Basic stats: COMPLETE Column stats: COMPLETE
+                    Group By Operator
+                      aggregations: count()
+                      keys: key (type: string)
+                      minReductionHashAggr: 0.5
+                      mode: hash
+                      outputColumnNames: _col0, _col1
+                      Statistics: Num rows: 83 Data size: 7885 Basic stats: COMPLETE Column stats: COMPLETE
+                      Reduce Output Operator
+                        key expressions: _col0 (type: string)
+                        null sort order: z
+                        sort order: +
+                        Map-reduce partition columns: _col0 (type: string)
+                        Statistics: Num rows: 83 Data size: 7885 Basic stats: COMPLETE Column stats: COMPLETE
+                        value expressions: _col1 (type: bigint)
+            Execution mode: vectorized, llap
+            LLAP IO: no inputs
+        Reducer 2 
+            Execution mode: llap
+            Reduce Operator Tree:
+              Merge Join Operator
+                condition map:
+                     Left Semi Join 0 to 1
+                keys:
+                  0 key (type: string)
+                  1 _col0 (type: string)
+                outputColumnNames: _col0, _col1
+                Statistics: Num rows: 131 Data size: 23318 Basic stats: COMPLETE Column stats: COMPLETE
+                Group By Operator
+                  aggregations: count()
+                  keys: _col0 (type: string), _col1 (type: string)
+                  minReductionHashAggr: 0.0
+                  mode: hash
+                  outputColumnNames: _col0, _col1, _col2
+                  Statistics: Num rows: 65 Data size: 12090 Basic stats: COMPLETE Column stats: COMPLETE
+                  Reduce Output Operator
+                    key expressions: _col0 (type: string), _col1 (type: string)
+                    null sort order: zz
+                    sort order: ++
+                    Map-reduce partition columns: _col0 (type: string), _col1 (type: string)
+                    Statistics: Num rows: 65 Data size: 12090 Basic stats: COMPLETE Column stats: COMPLETE
+                    value expressions: _col2 (type: bigint)
+        Reducer 3 
+            Execution mode: vectorized, llap
+            Reduce Operator Tree:
+              Group By Operator
+                aggregations: count(VALUE._col0)
+                keys: KEY._col0 (type: string), KEY._col1 (type: string)
+                mode: mergepartial
+                outputColumnNames: _col0, _col1, _col2
+                Statistics: Num rows: 65 Data size: 12090 Basic stats: COMPLETE Column stats: COMPLETE
+                Filter Operator
+                  predicate: _col2 is not null (type: boolean)
+                  Statistics: Num rows: 65 Data size: 12090 Basic stats: COMPLETE Column stats: COMPLETE
+                  Reduce Output Operator
+                    key expressions: _col2 (type: bigint)
+                    null sort order: z
+                    sort order: +
+                    Map-reduce partition columns: _col2 (type: bigint)
+                    Statistics: Num rows: 65 Data size: 12090 Basic stats: COMPLETE Column stats: COMPLETE
+                    value expressions: _col0 (type: string), _col1 (type: string)
+        Reducer 4 
+            Execution mode: llap
+            Reduce Operator Tree:
+              Merge Join Operator
+                condition map:
+                     Left Semi Join 0 to 1
+                keys:
+                  0 _col2 (type: bigint)
+                  1 _col0 (type: bigint)
+                outputColumnNames: _col0, _col1, _col2
+                Statistics: Num rows: 41 Data size: 7626 Basic stats: COMPLETE Column stats: COMPLETE
+                Reduce Output Operator
+                  key expressions: _col0 (type: string)
+                  null sort order: z
+                  sort order: +
+                  Statistics: Num rows: 41 Data size: 7626 Basic stats: COMPLETE Column stats: COMPLETE
+                  value expressions: _col1 (type: string), _col2 (type: bigint)
+        Reducer 5 
+            Execution mode: vectorized, llap
+            Reduce Operator Tree:
+              Select Operator
+                expressions: KEY.reducesinkkey0 (type: string), VALUE._col0 (type: string), VALUE._col1 (type: bigint)
+                outputColumnNames: _col0, _col1, _col2
+                Statistics: Num rows: 41 Data size: 7626 Basic stats: COMPLETE Column stats: COMPLETE
+                File Output Operator
+                  compressed: false
+                  Statistics: Num rows: 41 Data size: 7626 Basic stats: COMPLETE Column stats: COMPLETE
+                  table:
+                      input format: org.apache.hadoop.mapred.SequenceFileInputFormat
+                      output format: org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat
+                      serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+        Reducer 7 
+            Execution mode: vectorized, llap
+            Reduce Operator Tree:
+              Group By Operator
+                aggregations: count(VALUE._col0)
+                keys: KEY._col0 (type: string)
+                mode: mergepartial
+                outputColumnNames: _col0, _col1
+                Statistics: Num rows: 83 Data size: 7885 Basic stats: COMPLETE Column stats: COMPLETE
+                Select Operator
+                  expressions: _col1 (type: bigint)
+                  outputColumnNames: _col1
+                  Statistics: Num rows: 83 Data size: 664 Basic stats: COMPLETE Column stats: COMPLETE
+                  Filter Operator
+                    predicate: _col1 is not null (type: boolean)
+                    Statistics: Num rows: 83 Data size: 664 Basic stats: COMPLETE Column stats: COMPLETE
+                    Select Operator
+                      expressions: _col1 (type: bigint)
+                      outputColumnNames: _col0
+                      Statistics: Num rows: 83 Data size: 664 Basic stats: COMPLETE Column stats: COMPLETE
+                      Group By Operator
+                        keys: _col0 (type: bigint)
+                        minReductionHashAggr: 0.5060241
+                        mode: hash
+                        outputColumnNames: _col0
+                        Statistics: Num rows: 41 Data size: 328 Basic stats: COMPLETE Column stats: COMPLETE
+                        Reduce Output Operator
+                          key expressions: _col0 (type: bigint)
+                          null sort order: z
+                          sort order: +
+                          Map-reduce partition columns: _col0 (type: bigint)
+                          Statistics: Num rows: 41 Data size: 328 Basic stats: COMPLETE Column stats: COMPLETE
+
+  Stage: Stage-0
+    Fetch Operator
+      limit: -1
+      Processor Tree:
+        ListSink
+
... 39176 lines suppressed ...