@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 where (b + \"//cbo_t2\".q == 2) and (b > 0 or \"//cbo_t2\".q >= 0)");
    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_t1\".a=key where (b + \"//cbo_t2\".q == 2) and (b > 0 or c_int >= 0)");
    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/o_t1\".a=key where (b + \"//cbo_t2\".q == 2) and (b > 0 or c_int >= 0)");
    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_t1\".a=key where (b + \"//cbo_t2\".q == 2) and (b > 0 or c_int >= 0)");
    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////\" on \"c/b/o_t1\".a=key where (b + \"//cbo_t2\".q == 2) and (b > 0 or c_int >= 0)) R where  (q + 1 = 2) and (R.b > 0 or c_int >= 0)");
    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 join \"cbo_/t3////\" on \"c/b/o_t1\".a=key where (b + \"//cbo_t2\".q == 2) and (b > 0 or c_int >= 0)) R where  (q + 1 = 2) and (R.b > 0 or c_int >= 0)");
    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 join \"cbo_/t3////\" on \"c/b/o_t1\".a=key where (b + \"//cbo_t2\".q == 2) and (b > 0 or c_int >= 0)) R where  (q + 1 = 2) and (R.b > 0 or c_int >= 0)");
    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 join \"cbo_/t3////\" on \"c/b/o_t1\".a=key where (b + \"//cbo_t2\".q == 2) and (b > 0 or c_int >= 0)) R where  (q + 1 = 2) and (R.b > 0 or c_int >= 0)");
    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 join \"cbo_/t3////\" on \"c/b/o_t1\".a=key where (b + \"//cbo_t2\".q == 2) and (b > 0 or c_int >= 0)) R where  (q + 1 = 2) and (R.b > 0 or c_int >= 0)");
    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 join \"cbo_/t3////\" on \"c/b/o_t1\".a=key where (b + \"//cbo_t2\".q == 2) and (b > 0 or c_int >= 0)) R where  (q + 1 = 2) and (R.b > 0 or c_int >= 0)");
    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 join \"cbo_/t3////\" on \"c/b/o_t1\".a=key where (b + \"//cbo_t2\".q == 2) and (b > 0 or c_int >= 0)) R where  (q + 1 = 2) and (R.b > 0 or c_int >= 0)");
    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 join \"cbo_/t3////\" on \"c/b/o_t1\".a=key where (b + \"//cbo_t2\".q == 2) and (b > 0 or c_int >= 0)) R where  (q + 1 = 2) and (R.b > 0 or c_int >= 0)");
    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 join \"cbo_/t3////\" on \"c/b/o_t1\".a=key where (b + \"//cbo_t2\".q == 2) and (b > 0 or c_int >= 0)) R where  (q + 1 = 2) and (R.b > 0 or c_int >= 0)");
    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 join \"cbo_/t3////\" on \"c/b/o_t1\".a=key where (b + \"//cbo_t2\".q == 2) and (b > 0 or c_int >= 0)) R where  (q + 1 = 2) and (R.b > 0 or c_int >= 0)");
  }
Parser tests special character in table names.
parser/src/test/org/apache/hadoop/hive/ql/parse/TestSpecialCharacterInTableNamesQuotes.java