TAJO-1816: Refactor SQL parser tests. Closes #731
Project: http://git-wip-us.apache.org/repos/asf/tajo/repo Commit: http://git-wip-us.apache.org/repos/asf/tajo/commit/89c140c0 Tree: http://git-wip-us.apache.org/repos/asf/tajo/tree/89c140c0 Diff: http://git-wip-us.apache.org/repos/asf/tajo/diff/89c140c0 Branch: refs/heads/branch-0.11.0 Commit: 89c140c05c34b5ca7c64682e43f8c51bb04bb525 Parents: 0f5d97a Author: Hyunsik Choi <[email protected]> Authored: Mon Sep 7 15:01:50 2015 +0900 Committer: Hyunsik Choi <[email protected]> Committed: Mon Sep 7 15:07:30 2015 +0900 ---------------------------------------------------------------------- CHANGES | 2 + .../java/org/apache/tajo/util/FileUtil.java | 2 +- .../tajo/engine/parser/TestSQLAnalyzer.java | 897 +++---------------- .../alter_table_add_partition_1.sql | 1 + .../alter_table_add_partition_2.sql | 1 + .../alter_table_add_partition_3.sql | 2 + .../alter_table_add_partition_4.sql | 1 + .../alter_table_add_partition_5.sql | 1 + .../alter_table_drop_partition_1.sql | 1 + .../alter_table_drop_partition_2.sql | 1 + .../alter_table_drop_partition_3.sql | 1 + .../alter_table_drop_partition_4.sql | 1 + .../alter_table_set_property_1.sql | 1 + .../alter_table_set_property_2.sql | 1 + .../alter_table_set_property_3.sql | 1 + .../TestSQLAnalyzer/create_table_like_1.sql | 1 + .../create_table_partition_by_column.sql | 4 + .../create_table_partition_by_hash_1.sql | 3 + .../create_table_partition_by_hash_2.sql | 7 + .../create_table_partition_by_list.sql | 8 + .../create_table_partition_by_range.sql | 9 + .../TestSQLAnalyzer/exprs/value_expressions.txt | 29 + .../TestSQLAnalyzer/positive/asterisk_1.sql | 1 + .../TestSQLAnalyzer/positive/asterisk_2.sql | 1 + .../TestSQLAnalyzer/positive/asterisk_3.sql | 1 + .../TestSQLAnalyzer/positive/asterisk_4.sql | 1 + .../create_partitioned_table_as_select.sql | 17 + .../TestSQLAnalyzer/positive/create_table_1.sql | 1 + .../positive/create_table_10.sql | 1 + .../positive/create_table_11.sql | 3 + .../positive/create_table_12.sql | 3 + .../TestSQLAnalyzer/positive/create_table_2.sql | 1 + .../TestSQLAnalyzer/positive/create_table_3.sql | 1 + .../TestSQLAnalyzer/positive/create_table_4.sql | 1 + .../TestSQLAnalyzer/positive/create_table_5.sql | 1 + .../TestSQLAnalyzer/positive/create_table_6.sql | 1 + .../TestSQLAnalyzer/positive/create_table_7.sql | 1 + .../TestSQLAnalyzer/positive/create_table_8.sql | 48 + .../TestSQLAnalyzer/positive/create_table_9.sql | 1 + .../positive/create_table_like_1.sql | 1 + .../TestSQLAnalyzer/positive/drop_table.sql | 1 + .../positive/exists_predicate_1.sql | 1 + .../positive/exists_predicate_2.sql | 1 + .../TestSQLAnalyzer/positive/groupby_1.sql | 1 + .../TestSQLAnalyzer/positive/groupby_2.sql | 1 + .../TestSQLAnalyzer/positive/groupby_3.sql | 1 + .../TestSQLAnalyzer/positive/groupby_4.sql | 1 + .../TestSQLAnalyzer/positive/groupby_5.sql | 1 + .../TestSQLAnalyzer/positive/in_subquery_1.sql | 1 + .../TestSQLAnalyzer/positive/in_subquery_2.sql | 1 + .../positive/insert_into_select_1.sql | 1 + .../positive/insert_into_select_2.sql | 1 + .../positive/insert_into_select_3.sql | 1 + .../positive/insert_overwrite_into_select_1.sql | 1 + .../positive/insert_overwrite_into_select_2.sql | 1 + .../positive/insert_overwrite_into_select_3.sql | 1 + .../queries/TestSQLAnalyzer/positive/join_1.sql | 1 + .../TestSQLAnalyzer/positive/join_10.sql | 1 + .../TestSQLAnalyzer/positive/join_11.sql | 1 + .../TestSQLAnalyzer/positive/join_12.sql | 1 + .../TestSQLAnalyzer/positive/join_13.sql | 13 + .../TestSQLAnalyzer/positive/join_14.sql | 1 + .../TestSQLAnalyzer/positive/join_15.sql | 1 + .../queries/TestSQLAnalyzer/positive/join_2.sql | 1 + .../queries/TestSQLAnalyzer/positive/join_3.sql | 1 + .../queries/TestSQLAnalyzer/positive/join_4.sql | 1 + .../queries/TestSQLAnalyzer/positive/join_5.sql | 1 + .../queries/TestSQLAnalyzer/positive/join_6.sql | 1 + .../queries/TestSQLAnalyzer/positive/join_7.sql | 1 + .../queries/TestSQLAnalyzer/positive/join_8.sql | 13 + .../queries/TestSQLAnalyzer/positive/join_9.sql | 5 + .../TestSQLAnalyzer/positive/select_1.sql | 1 + .../TestSQLAnalyzer/positive/select_10.sql | 5 + .../TestSQLAnalyzer/positive/select_11.sql | 6 + .../TestSQLAnalyzer/positive/select_13.sql | 2 + .../TestSQLAnalyzer/positive/select_14.sql | 2 + .../TestSQLAnalyzer/positive/select_15.sql | 1 + .../TestSQLAnalyzer/positive/select_2.sql | 1 + .../TestSQLAnalyzer/positive/select_3.sql | 1 + .../TestSQLAnalyzer/positive/select_4.sql | 1 + .../TestSQLAnalyzer/positive/select_5.sql | 1 + .../TestSQLAnalyzer/positive/select_6.sql | 1 + .../TestSQLAnalyzer/positive/select_7.sql | 1 + .../TestSQLAnalyzer/positive/select_8.sql | 1 + .../TestSQLAnalyzer/positive/select_9.sql | 4 + .../queries/TestSQLAnalyzer/positive/set_1.sql | 1 + .../queries/TestSQLAnalyzer/positive/set_2.sql | 1 + .../queries/TestSQLAnalyzer/positive/set_3.sql | 1 + .../queries/TestSQLAnalyzer/positive/set_4.sql | 36 + .../positive/table_subquery1.sql | 19 + .../positive/table_subquery2.sql | 21 + .../default/alter_table_add_partition_1.sql | 1 - .../default/alter_table_add_partition_2.sql | 1 - .../default/alter_table_add_partition_3.sql | 2 - .../default/alter_table_add_partition_4.sql | 1 - .../default/alter_table_add_partition_5.sql | 1 - .../default/alter_table_drop_partition_1.sql | 1 - .../default/alter_table_drop_partition_2.sql | 1 - .../default/alter_table_drop_partition_3.sql | 1 - .../default/alter_table_drop_partition_4.sql | 1 - .../default/alter_table_set_property_1.sql | 1 - .../default/alter_table_set_property_2.sql | 1 - .../default/alter_table_set_property_3.sql | 1 - .../resources/queries/default/asterisk_1.sql | 1 - .../resources/queries/default/asterisk_2.sql | 1 - .../resources/queries/default/asterisk_3.sql | 1 - .../resources/queries/default/asterisk_4.sql | 1 - .../create_partitioned_table_as_select.sql | 17 - .../queries/default/create_table_1.hiveql | 1 - .../queries/default/create_table_1.sql | 1 - .../queries/default/create_table_10.sql | 1 - .../queries/default/create_table_11.hiveql | 3 - .../queries/default/create_table_11.sql | 3 - .../queries/default/create_table_12.hiveql | 4 - .../queries/default/create_table_12.sql | 3 - .../queries/default/create_table_2.hiveql | 1 - .../queries/default/create_table_2.sql | 1 - .../queries/default/create_table_3.sql | 1 - .../queries/default/create_table_4.sql | 1 - .../queries/default/create_table_5.sql | 1 - .../queries/default/create_table_6.sql | 1 - .../queries/default/create_table_7.sql | 1 - .../queries/default/create_table_8.sql | 48 - .../queries/default/create_table_9.sql | 1 - .../queries/default/create_table_like_1.sql | 1 - .../create_table_partition_by_column.sql | 4 - .../create_table_partition_by_hash_1.sql | 3 - .../create_table_partition_by_hash_2.sql | 7 - .../default/create_table_partition_by_list.sql | 8 - .../default/create_table_partition_by_range.sql | 9 - .../resources/queries/default/drop_table.sql | 1 - .../queries/default/exists_predicate_1.sql | 1 - .../queries/default/exists_predicate_2.sql | 1 - .../resources/queries/default/groupby_1.sql | 1 - .../resources/queries/default/groupby_2.sql | 1 - .../resources/queries/default/groupby_3.sql | 1 - .../resources/queries/default/groupby_4.sql | 1 - .../resources/queries/default/groupby_5.sql | 1 - .../resources/queries/default/in_subquery_1.sql | 1 - .../resources/queries/default/in_subquery_2.sql | 1 - .../queries/default/insert_into_select_1.sql | 1 - .../queries/default/insert_into_select_2.sql | 1 - .../queries/default/insert_into_select_3.sql | 1 - .../default/insert_overwrite_into_select_1.sql | 1 - .../insert_overwrite_into_select_2.hiveql | 1 - .../default/insert_overwrite_into_select_2.sql | 1 - .../default/insert_overwrite_into_select_3.sql | 1 - .../test/resources/queries/default/join_1.sql | 1 - .../test/resources/queries/default/join_10.sql | 1 - .../test/resources/queries/default/join_11.sql | 1 - .../test/resources/queries/default/join_12.sql | 1 - .../test/resources/queries/default/join_13.sql | 13 - .../test/resources/queries/default/join_14.sql | 1 - .../resources/queries/default/join_15.hiveql | 1 - .../test/resources/queries/default/join_15.sql | 1 - .../test/resources/queries/default/join_2.sql | 1 - .../test/resources/queries/default/join_3.sql | 1 - .../test/resources/queries/default/join_4.sql | 1 - .../test/resources/queries/default/join_5.sql | 1 - .../test/resources/queries/default/join_6.sql | 1 - .../test/resources/queries/default/join_7.sql | 1 - .../test/resources/queries/default/join_8.sql | 13 - .../test/resources/queries/default/join_9.sql | 5 - .../test/resources/queries/default/select_1.sql | 1 - .../resources/queries/default/select_10.hiveql | 5 - .../resources/queries/default/select_10.sql | 5 - .../resources/queries/default/select_11.hiveql | 4 - .../resources/queries/default/select_11.sql | 6 - .../resources/queries/default/select_12.hiveql | 3 - .../resources/queries/default/select_13.hiveql | 2 - .../resources/queries/default/select_13.sql | 2 - .../resources/queries/default/select_14.sql | 2 - .../resources/queries/default/select_15.hiveql | 1 - .../resources/queries/default/select_15.sql | 1 - .../test/resources/queries/default/select_2.sql | 1 - .../test/resources/queries/default/select_3.sql | 1 - .../test/resources/queries/default/select_4.sql | 1 - .../test/resources/queries/default/select_5.sql | 1 - .../test/resources/queries/default/select_6.sql | 1 - .../test/resources/queries/default/select_7.sql | 1 - .../test/resources/queries/default/select_8.sql | 1 - .../resources/queries/default/select_9.hiveql | 4 - .../test/resources/queries/default/select_9.sql | 4 - .../test/resources/queries/default/set_1.sql | 1 - .../test/resources/queries/default/set_2.sql | 1 - .../test/resources/queries/default/set_3.sql | 1 - .../test/resources/queries/default/set_4.sql | 36 - .../queries/default/table_subquery1.sql | 19 - .../queries/default/table_subquery2.sql | 21 - .../resources/queries/default/union_1.hiveql | 14 - .../alter_table_add_partition_1.result | 30 + .../alter_table_add_partition_2.result | 31 + .../alter_table_add_partition_3.result | 40 + .../alter_table_add_partition_4.result | 21 + .../alter_table_add_partition_5.result | 21 + .../alter_table_drop_partition_1.result | 30 + .../alter_table_drop_partition_2.result | 39 + .../alter_table_drop_partition_3.result | 21 + .../alter_table_drop_partition_4.result | 21 + .../alter_table_set_property_1.result | 11 + .../alter_table_set_property_2.result | 11 + .../alter_table_set_property_3.result | 12 + .../TestSQLAnalyzer/create_table_like_1.result | 7 + .../create_table_partition_by_column.result | 39 + .../create_table_partition_by_hash_1.result | 32 + .../create_table_partition_by_hash_2.result | 38 + .../create_table_partition_by_list.result | 65 ++ .../create_table_partition_by_range.result | 55 ++ .../apache/tajo/storage/TablespaceManager.java | 9 +- 209 files changed, 998 insertions(+), 1100 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tajo/blob/89c140c0/CHANGES ---------------------------------------------------------------------- diff --git a/CHANGES b/CHANGES index 86252c3..bb04120 100644 --- a/CHANGES +++ b/CHANGES @@ -34,6 +34,8 @@ Release 0.11.0 - unreleased IMPROVEMENT + TAJO-1816: Refactor SQL parser tests. (hyunsik) + TAJO-1738: Improve off-heap RowBlock. (jinho) TAJO-1810: Remove QueryMasterTask cache immediately, if it stored to http://git-wip-us.apache.org/repos/asf/tajo/blob/89c140c0/tajo-common/src/main/java/org/apache/tajo/util/FileUtil.java ---------------------------------------------------------------------- diff --git a/tajo-common/src/main/java/org/apache/tajo/util/FileUtil.java b/tajo-common/src/main/java/org/apache/tajo/util/FileUtil.java index 5216eb8..2eff9c8 100644 --- a/tajo-common/src/main/java/org/apache/tajo/util/FileUtil.java +++ b/tajo-common/src/main/java/org/apache/tajo/util/FileUtil.java @@ -96,7 +96,7 @@ public class FileUtil { if (stream != null) { return readTextFromStream(stream); } else { - return null; + throw new FileNotFoundException(resource); } } http://git-wip-us.apache.org/repos/asf/tajo/blob/89c140c0/tajo-core-tests/src/test/java/org/apache/tajo/engine/parser/TestSQLAnalyzer.java ---------------------------------------------------------------------- diff --git a/tajo-core-tests/src/test/java/org/apache/tajo/engine/parser/TestSQLAnalyzer.java b/tajo-core-tests/src/test/java/org/apache/tajo/engine/parser/TestSQLAnalyzer.java index e9a9305..553aea4 100644 --- a/tajo-core-tests/src/test/java/org/apache/tajo/engine/parser/TestSQLAnalyzer.java +++ b/tajo-core-tests/src/test/java/org/apache/tajo/engine/parser/TestSQLAnalyzer.java @@ -18,805 +18,192 @@ package org.apache.tajo.engine.parser; +import com.google.common.base.Function; +import com.google.common.base.Predicate; +import com.google.common.collect.Lists; import org.antlr.v4.runtime.ANTLRInputStream; +import org.antlr.v4.runtime.BailErrorStrategy; import org.antlr.v4.runtime.CommonTokenStream; -import org.apache.tajo.algebra.*; +import org.apache.hadoop.fs.FileStatus; +import org.apache.hadoop.fs.FileSystem; +import org.apache.hadoop.fs.Path; +import org.apache.tajo.algebra.Expr; +import org.apache.tajo.annotation.Nullable; +import org.apache.tajo.conf.TajoConf; import org.apache.tajo.engine.parser.SQLParser.SqlContext; +import org.apache.tajo.storage.StorageUtil; import org.apache.tajo.util.FileUtil; +import org.apache.tajo.util.Pair; +import org.junit.Rule; import org.junit.Test; +import org.junit.rules.TestName; import java.io.File; +import java.io.FileNotFoundException; import java.io.IOException; -import java.util.Iterator; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.URL; +import java.util.Collection; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; +import static com.google.common.collect.Collections2.filter; +import static com.google.common.collect.Collections2.transform; +import static org.junit.Assert.*; /** - * This unit tests uses a number of query files located in tajo/tajo-core/queries. - * So, you must set tajo/tajo-core/ as the working directory. + * This class verifies SQLAnalyzer. */ public class TestSQLAnalyzer { + @Rule public TestName name = new TestName(); public static Expr parseQuery(String sql) { ANTLRInputStream input = new ANTLRInputStream(sql); SQLLexer lexer = new SQLLexer(input); CommonTokenStream tokens = new CommonTokenStream(lexer); + SQLParser parser = new SQLParser(tokens); + parser.setErrorHandler(new BailErrorStrategy()); parser.setBuildParseTree(true); + SQLAnalyzer visitor = new SQLAnalyzer(); SqlContext context = parser.sql(); return visitor.visitSql(context); } - public void assertParseResult(String sqlFileName, String resultFileName) throws IOException { - String sql = FileUtil.readTextFileFromResource("queries/TestSQLAnalyzer/" + sqlFileName); - String result = FileUtil.readTextFileFromResource("results/TestSQLAnalyzer/" + resultFileName); - - Expr expr = parseQuery(sql); - assertEquals(result.trim(), expr.toJson().trim()); - } - - - @Test - public void testSelect1() throws IOException { - String sql = FileUtil.readTextFileFromResource("queries/default/select_1.sql"); - parseQuery(sql); - } - - @Test - public void testSelect2() throws IOException { - String sql = FileUtil.readTextFileFromResource("queries/default/select_2.sql"); - parseQuery(sql); - } - - @Test - public void testSelect3() throws IOException { - String sql = FileUtil.readTextFileFromResource("queries/default/select_3.sql"); - parseQuery(sql); - } - - @Test - public void testSelect4() throws IOException { - String sql = FileUtil.readTextFileFromResource("queries/default/select_4.sql"); - parseQuery(sql); - } - - @Test - public void testSelect5() throws IOException { - String sql = FileUtil.readTextFileFromResource("queries/default/select_5.sql"); - parseQuery(sql); - } - - @Test - public void testAsterisk1() throws IOException { - String sql = FileUtil.readTextFileFromResource("queries/default/asterisk_1.sql"); - parseQuery(sql); - } - - @Test - public void testAsterisk2() throws IOException { - String sql = FileUtil.readTextFileFromResource("queries/default/asterisk_2.sql"); - parseQuery(sql); - } - - @Test - public void testAsterisk3() throws IOException { - String sql = FileUtil.readTextFileFromResource("queries/default/asterisk_3.sql"); - parseQuery(sql); - } - - @Test - public void testAsterisk4() throws IOException { - String sql = FileUtil.readTextFileFromResource("queries/default/asterisk_4.sql"); - parseQuery(sql); - } - - @Test - public void testGroupby1() throws IOException { - String sql = FileUtil.readTextFileFromResource("queries/default/groupby_1.sql"); - parseQuery(sql); - } - - @Test - public void testJoin1() throws IOException { - String sql = FileUtil.readTextFileFromResource("queries/default/join_1.sql"); - parseQuery(sql); - } - - @Test - public void testJoin2() throws IOException { - String sql = FileUtil.readTextFileFromResource("queries/default/join_2.sql"); - parseQuery(sql); - } - - @Test - public void testJoin3() throws IOException { - String sql = FileUtil.readTextFileFromResource("queries/default/join_3.sql"); - parseQuery(sql); - } - - @Test - public void testJoin4() throws IOException { - String sql = FileUtil.readTextFileFromResource("queries/default/join_4.sql"); - parseQuery(sql); - } - - @Test - public void testJoin5() throws IOException { - String sql = FileUtil.readTextFileFromResource("queries/default/join_5.sql"); - parseQuery(sql); - } - - @Test - public void testJoin6() throws IOException { - String sql = FileUtil.readTextFileFromResource("queries/default/join_6.sql"); - parseQuery(sql); - } - - @Test - public void testJoin7() throws IOException { - String sql = FileUtil.readTextFileFromResource("queries/default/join_7.sql"); - parseQuery(sql); - } - - @Test - public void testJoin8() throws IOException { - String sql = FileUtil.readTextFileFromResource("queries/default/join_8.sql"); - parseQuery(sql); - } - - @Test - public void testJoin9() throws IOException { - String sql = FileUtil.readTextFileFromResource("queries/default/join_9.sql"); - parseQuery(sql); - } - - @Test - public void testJoin10() throws IOException { - String sql = FileUtil.readTextFileFromResource("queries/default/join_10.sql"); - parseQuery(sql); - } - - @Test - public void testJoin11() throws IOException { - String sql = FileUtil.readTextFileFromResource("queries/default/join_11.sql"); - parseQuery(sql); - } - - @Test - public void testSet1() throws IOException { - String sql = FileUtil.readTextFileFromResource("queries/default/set_1.sql"); - parseQuery(sql); - } - - @Test - public void testSet2() throws IOException { - String sql = FileUtil.readTextFileFromResource("queries/default/set_2.sql"); - parseQuery(sql); - } - - @Test - public void testSet3() throws IOException { - String sql = FileUtil.readTextFileFromResource("queries/default/set_3.sql"); - parseQuery(sql); - } - - @Test - public void testSet4() throws IOException { - String sql = FileUtil.readTextFileFromResource("queries/default/set_4.sql"); - parseQuery(sql); - } - - @Test - public void testDropTable() throws IOException { - String sql = FileUtil.readTextFileFromResource("queries/default/drop_table.sql"); - parseQuery(sql); - } - - @Test - public void testCreateTable1() throws IOException { - String sql = FileUtil.readTextFileFromResource("queries/default/create_table_1.sql"); - parseQuery(sql); - } - - @Test - public void testCreateTable2() throws IOException { - String sql = FileUtil.readTextFileFromResource("queries/default/create_table_2.sql"); - parseQuery(sql); - } - - @Test - public void testCreateTable3() throws IOException { - String sql = FileUtil.readTextFileFromResource("queries/default/create_table_3.sql"); - parseQuery(sql); - } - - @Test - public void testCreateTable4() throws IOException { - String sql = FileUtil.readTextFileFromResource("queries/default/create_table_4.sql"); - parseQuery(sql); - } - - @Test - public void testCreateTable5() throws IOException { - String sql = FileUtil.readTextFileFromResource("queries/default/create_table_5.sql"); - parseQuery(sql); - } - - @Test - public void testCreateTable6() throws IOException { - String sql = FileUtil.readTextFileFromResource("queries/default/create_table_6.sql"); - parseQuery(sql); - } - - @Test - public void testCreateTable7() throws IOException { - String sql = FileUtil.readTextFileFromResource("queries/default/create_table_7.sql"); - parseQuery(sql); - } - - @Test - public void testCreateTable8() throws IOException { - String sql = FileUtil.readTextFileFromResource("queries/default/create_table_8.sql"); - parseQuery(sql); - } - - @Test - public void testCreateTable9() throws IOException { - String sql = FileUtil.readTextFileFromResource("queries/default/create_table_9.sql"); - parseQuery(sql); - } - - @Test - public void testCreateTable10() throws IOException { - String sql = FileUtil.readTextFileFromResource("queries/default/create_table_10.sql"); - parseQuery(sql); - } - - @Test - public void testCreateTableLike1() throws IOException { - String sql = FileUtil.readTextFileFromResource("queries/default/create_table_like_1.sql"); - Expr expr = parseQuery(sql); - assertEquals(OpType.CreateTable, expr.getType()); - CreateTable createTable = (CreateTable) expr; - assertEquals("orig_name", createTable.getLikeParentTableName()); - } - - @Test - public void testCreateTablePartitionByHash1() throws IOException { - String sql = FileUtil.readTextFileFromResource("queries/default/create_table_partition_by_hash_1.sql"); - Expr expr = parseQuery(sql); - assertEquals(OpType.CreateTable, expr.getType()); - CreateTable createTable = (CreateTable) expr; - assertTrue(createTable.hasPartition()); - assertEquals(CreateTable.PartitionType.HASH, createTable.getPartitionMethod().getPartitionType()); - CreateTable.HashPartition hashPartition = createTable.getPartitionMethod(); - assertEquals("col1", hashPartition.getColumns()[0].getCanonicalName()); - assertTrue(hashPartition.hasQuantifier()); - } - - @Test - public void testCreateTablePartitionByHash2() throws IOException { - String sql = FileUtil.readTextFileFromResource("queries/default/create_table_partition_by_hash_2.sql"); - Expr expr = parseQuery(sql); - assertEquals(OpType.CreateTable, expr.getType()); - CreateTable createTable = (CreateTable) expr; - assertTrue(createTable.hasPartition()); - assertEquals(CreateTable.PartitionType.HASH, createTable.getPartitionMethod().getPartitionType()); - CreateTable.HashPartition hashPartition = createTable.getPartitionMethod(); - assertEquals("col1", hashPartition.getColumns()[0].getCanonicalName()); - assertTrue(hashPartition.hasSpecifiers()); - assertEquals(3, hashPartition.getSpecifiers().size()); - } - - @Test - public void testCreateTablePartitionByRange() throws IOException { - String sql = FileUtil.readTextFileFromResource("queries/default/create_table_partition_by_range.sql"); - Expr expr = parseQuery(sql); - assertEquals(OpType.CreateTable, expr.getType()); - CreateTable createTable = (CreateTable) expr; - assertTrue(createTable.hasPartition()); - assertEquals(CreateTable.PartitionType.RANGE, createTable.getPartitionMethod().getPartitionType()); - CreateTable.RangePartition rangePartition = createTable.getPartitionMethod(); - assertEquals("col1", rangePartition.getColumns()[0].getCanonicalName()); - assertEquals(3, rangePartition.getSpecifiers().size()); - } - - @Test - public void testCreateTablePartitionByList() throws IOException { - String sql = FileUtil.readTextFileFromResource("queries/default/create_table_partition_by_list.sql"); - Expr expr = parseQuery(sql); - assertEquals(OpType.CreateTable, expr.getType()); - CreateTable createTable = (CreateTable) expr; - assertTrue(createTable.hasPartition()); - assertEquals(CreateTable.PartitionType.LIST, createTable.getPartitionMethod().getPartitionType()); - CreateTable.ListPartition listPartition = createTable.getPartitionMethod(); - assertEquals("col1", listPartition.getColumns()[0].getCanonicalName()); - assertEquals(2, listPartition.getSpecifiers().size()); - Iterator<CreateTable.ListPartitionSpecifier> iterator = listPartition.getSpecifiers().iterator(); - CreateTable.ListPartitionSpecifier specifier = iterator.next(); - LiteralValue value1 = (LiteralValue) specifier.getValueList().getValues()[0]; - LiteralValue value2 = (LiteralValue) specifier.getValueList().getValues()[1]; - assertEquals("Seoul", value1.getValue()); - assertEquals("ìì¸", value2.getValue()); - - specifier = iterator.next(); - value1 = (LiteralValue) specifier.getValueList().getValues()[0]; - value2 = (LiteralValue) specifier.getValueList().getValues()[1]; - assertEquals("Busan", value1.getValue()); - assertEquals("ë¶ì°", value2.getValue()); - } - - @Test - public void testCreateTablePartitionByColumn() throws IOException { - String sql = FileUtil.readTextFileFromResource("queries/default/create_table_partition_by_column.sql"); - Expr expr = parseQuery(sql); - assertEquals(OpType.CreateTable, expr.getType()); - CreateTable createTable = (CreateTable) expr; - assertTrue(createTable.hasPartition()); - assertEquals(CreateTable.PartitionType.COLUMN, createTable.getPartitionMethod().getPartitionType()); - CreateTable.ColumnPartition columnPartition = createTable.getPartitionMethod(); - assertEquals(3, columnPartition.getColumns().length); - assertEquals("col3", columnPartition.getColumns()[0].getColumnName()); - assertEquals("col4", columnPartition.getColumns()[1].getColumnName()); - assertEquals("col5", columnPartition.getColumns()[2].getColumnName()); - } - - @Test - public void testAlterTableAddPartition1() throws IOException { - String sql = FileUtil.readTextFileFromResource("queries/default/alter_table_add_partition_1.sql"); - Expr expr = parseQuery(sql); - assertEquals(OpType.AlterTable, expr.getType()); - AlterTable alterTable = (AlterTable)expr; - assertEquals(alterTable.getAlterTableOpType(), AlterTableOpType.ADD_PARTITION); - assertEquals(2, alterTable.getColumns().length); - assertEquals(2, alterTable.getValues().length); - assertEquals("col1", alterTable.getColumns()[0].getName()); - assertEquals("col2", alterTable.getColumns()[1].getName()); - LiteralValue value1 = (LiteralValue)alterTable.getValues()[0]; - assertEquals("1", value1.getValue()); - LiteralValue value2 = (LiteralValue)alterTable.getValues()[1]; - assertEquals("2", value2.getValue()); - assertFalse(alterTable.isIfNotExists()); - } - - @Test - public void testAlterTableAddPartition2() throws IOException { - String sql = FileUtil.readTextFileFromResource("queries/default/alter_table_add_partition_2.sql"); - Expr expr = parseQuery(sql); - assertEquals(OpType.AlterTable, expr.getType()); - AlterTable alterTable = (AlterTable)expr; - assertEquals(alterTable.getAlterTableOpType(), AlterTableOpType.ADD_PARTITION); - assertEquals(2, alterTable.getColumns().length); - assertEquals(2, alterTable.getValues().length); - assertEquals("col1", alterTable.getColumns()[0].getName()); - assertEquals("col2", alterTable.getColumns()[1].getName()); - LiteralValue value1 = (LiteralValue)alterTable.getValues()[0]; - assertEquals("1", value1.getValue()); - LiteralValue value2 = (LiteralValue)alterTable.getValues()[1]; - assertEquals("2", value2.getValue()); - assertEquals(alterTable.getLocation(), "hdfs://xxx.com/warehouse/table1/col1=1/col2=2"); - assertFalse(alterTable.isIfNotExists()); - } - - @Test - public void testAlterTableAddPartition3() throws IOException { - String sql = FileUtil.readTextFileFromResource("queries/default/alter_table_add_partition_3.sql"); - Expr expr = parseQuery(sql); - assertEquals(OpType.AlterTable, expr.getType()); - AlterTable alterTable = (AlterTable)expr; - assertEquals(alterTable.getAlterTableOpType(), AlterTableOpType.ADD_PARTITION); - assertEquals(3, alterTable.getColumns().length); - assertEquals(3, alterTable.getValues().length); - assertEquals("col1", alterTable.getColumns()[0].getName()); - assertEquals("col2", alterTable.getColumns()[1].getName()); - assertEquals("col3", alterTable.getColumns()[2].getName()); - LiteralValue value1 = (LiteralValue)alterTable.getValues()[0]; - assertEquals("2015", value1.getValue()); - LiteralValue value2 = (LiteralValue)alterTable.getValues()[1]; - assertEquals("01", value2.getValue()); - LiteralValue value3 = (LiteralValue)alterTable.getValues()[2]; - assertEquals("11", value3.getValue()); - assertEquals(alterTable.getLocation(), "hdfs://xxx.com/warehouse/table1/col1=2015/col2=01/col3=11"); - assertFalse(alterTable.isIfNotExists()); - } - - @Test - public void testAlterTableAddPartition4() throws IOException { - String sql = FileUtil.readTextFileFromResource("queries/default/alter_table_add_partition_4.sql"); - Expr expr = parseQuery(sql); - assertEquals(OpType.AlterTable, expr.getType()); - AlterTable alterTable = (AlterTable)expr; - assertEquals(alterTable.getAlterTableOpType(), AlterTableOpType.ADD_PARTITION); - assertEquals(1, alterTable.getColumns().length); - assertEquals(1, alterTable.getValues().length); - assertEquals("col1", alterTable.getColumns()[0].getName()); - LiteralValue value1 = (LiteralValue)alterTable.getValues()[0]; - assertEquals("TAJO", value1.getValue()); - assertFalse(alterTable.isIfNotExists()); - } - - @Test - public void testAlterTableAddPartition5() throws IOException { - String sql = FileUtil.readTextFileFromResource("queries/default/alter_table_add_partition_5.sql"); - Expr expr = parseQuery(sql); - assertEquals(OpType.AlterTable, expr.getType()); - AlterTable alterTable = (AlterTable)expr; - assertEquals(alterTable.getAlterTableOpType(), AlterTableOpType.ADD_PARTITION); - assertEquals(1, alterTable.getColumns().length); - assertEquals(1, alterTable.getValues().length); - assertEquals("col1", alterTable.getColumns()[0].getName()); - LiteralValue value1 = (LiteralValue)alterTable.getValues()[0]; - assertEquals("TAJO", value1.getValue()); - assertTrue(alterTable.isIfNotExists()); - } - - @Test - public void testAlterTableDropPartition1() throws IOException { - String sql = FileUtil.readTextFileFromResource("queries/default/alter_table_drop_partition_1.sql"); - Expr expr = parseQuery(sql); - assertEquals(OpType.AlterTable, expr.getType()); - AlterTable alterTable = (AlterTable)expr; - assertEquals(alterTable.getAlterTableOpType(), AlterTableOpType.DROP_PARTITION); - assertEquals(2, alterTable.getColumns().length); - assertEquals(2, alterTable.getValues().length); - assertEquals("col1", alterTable.getColumns()[0].getName()); - assertEquals("col2", alterTable.getColumns()[1].getName()); - LiteralValue value1 = (LiteralValue)alterTable.getValues()[0]; - assertEquals("1", value1.getValue()); - LiteralValue value2 = (LiteralValue)alterTable.getValues()[1]; - assertEquals("2", value2.getValue()); - assertFalse(alterTable.isPurge()); - assertFalse(alterTable.isIfExists()); - } - - @Test - public void testAlterTableDropPartition2() throws IOException { - String sql = FileUtil.readTextFileFromResource("queries/default/alter_table_drop_partition_2.sql"); - Expr expr = parseQuery(sql); - assertEquals(OpType.AlterTable, expr.getType()); - AlterTable alterTable = (AlterTable)expr; - assertEquals(alterTable.getAlterTableOpType(), AlterTableOpType.DROP_PARTITION); - assertEquals(3, alterTable.getColumns().length); - assertEquals(3, alterTable.getValues().length); - assertEquals("col1", alterTable.getColumns()[0].getName()); - assertEquals("col2", alterTable.getColumns()[1].getName()); - assertEquals("col3", alterTable.getColumns()[2].getName()); - LiteralValue value1 = (LiteralValue)alterTable.getValues()[0]; - assertEquals("2015", value1.getValue()); - LiteralValue value2 = (LiteralValue)alterTable.getValues()[1]; - assertEquals("01", value2.getValue()); - LiteralValue value3 = (LiteralValue)alterTable.getValues()[2]; - assertEquals("11", value3.getValue()); - assertFalse(alterTable.isPurge()); - assertFalse(alterTable.isIfExists()); - } - - @Test - public void testAlterTableDropPartition3() throws IOException { - String sql = FileUtil.readTextFileFromResource("queries/default/alter_table_drop_partition_3.sql"); - Expr expr = parseQuery(sql); - assertEquals(OpType.AlterTable, expr.getType()); - AlterTable alterTable = (AlterTable)expr; - assertEquals(alterTable.getAlterTableOpType(), AlterTableOpType.DROP_PARTITION); - assertEquals(1, alterTable.getColumns().length); - assertEquals(1, alterTable.getValues().length); - assertEquals("col1", alterTable.getColumns()[0].getName()); - LiteralValue value1 = (LiteralValue)alterTable.getValues()[0]; - assertEquals("TAJO", value1.getValue()); - assertTrue(alterTable.isPurge()); - assertFalse(alterTable.isIfExists()); - } - - @Test - public void testAlterTableDropPartition4() throws IOException { - String sql = FileUtil.readTextFileFromResource("queries/default/alter_table_drop_partition_4.sql"); - Expr expr = parseQuery(sql); - assertEquals(OpType.AlterTable, expr.getType()); - AlterTable alterTable = (AlterTable)expr; - assertEquals(alterTable.getAlterTableOpType(), AlterTableOpType.DROP_PARTITION); - assertEquals(1, alterTable.getColumns().length); - assertEquals(1, alterTable.getValues().length); - assertEquals("col1", alterTable.getColumns()[0].getName()); - LiteralValue value1 = (LiteralValue)alterTable.getValues()[0]; - assertEquals("TAJO", value1.getValue()); - assertTrue(alterTable.isPurge()); - assertTrue(alterTable.isIfExists()); - } - - @Test - public void testAlterTableSetProperty1() throws IOException { - String sql = FileUtil.readTextFileFromResource("queries/default/alter_table_set_property_1.sql"); - Expr expr = parseQuery(sql); - assertEquals(OpType.AlterTable, expr.getType()); - AlterTable alterTable = (AlterTable)expr; - assertEquals(alterTable.getAlterTableOpType(), AlterTableOpType.SET_PROPERTY); - assertTrue(alterTable.hasParams()); - assertTrue(alterTable.getParams().containsKey("timezone")); - assertEquals("GMT-7", alterTable.getParams().get("timezone")); - } - - @Test - public void testAlterTableSetProperty2() throws IOException { - String sql = FileUtil.readTextFileFromResource("queries/default/alter_table_set_property_2.sql"); - Expr expr = parseQuery(sql); - assertEquals(OpType.AlterTable, expr.getType()); - AlterTable alterTable = (AlterTable)expr; - assertEquals(alterTable.getAlterTableOpType(), AlterTableOpType.SET_PROPERTY); - assertTrue(alterTable.hasParams()); - assertTrue(alterTable.getParams().containsKey("text.delimiter")); - assertEquals("&", alterTable.getParams().get("text.delimiter")); - } - - @Test - public void testAlterTableSetProperty3() throws IOException { - // update multiple table properties with a single 'SET PROPERTY' sql - String sql = FileUtil.readTextFileFromResource("queries/default/alter_table_set_property_3.sql"); - Expr expr = parseQuery(sql); - assertEquals(OpType.AlterTable, expr.getType()); - AlterTable alterTable = (AlterTable)expr; - assertEquals(alterTable.getAlterTableOpType(), AlterTableOpType.SET_PROPERTY); - assertTrue(alterTable.hasParams()); - assertTrue(alterTable.getParams().containsKey("compression.type")); - assertEquals("RECORD", alterTable.getParams().get("compression.type")); - assertTrue(alterTable.getParams().containsKey("compression.codec")); - assertEquals("org.apache.hadoop.io.compress.SnappyCodec", alterTable.getParams().get("compression.codec")); - } - - @Test - public void testTableSubQuery1() throws IOException { - String sql = FileUtil.readTextFileFromResource("queries/default/table_subquery1.sql"); - parseQuery(sql); - } - - @Test - public void testTableSubQuery2() throws IOException { - String sql = FileUtil.readTextFileFromResource("queries/default/table_subquery2.sql"); - parseQuery(sql); - } - - @Test - public void testInSubquery1() throws IOException { - String sql = FileUtil.readTextFileFromResource("queries/default/in_subquery_1.sql"); - parseQuery(sql); - } + public Collection<File> getResourceFiles(String subdir) throws URISyntaxException, IOException { + URL uri = ClassLoader.getSystemResource("queries/TestSQLAnalyzer"); + Path positiveQueryDir = StorageUtil.concatPath(new Path(uri.toURI()), subdir); + FileSystem fs = positiveQueryDir.getFileSystem(new TajoConf()); - @Test - public void testInSubquery2() throws IOException { - String sql = FileUtil.readTextFileFromResource("queries/default/in_subquery_2.sql"); - parseQuery(sql); - } - - @Test - public void testExistsPredicate1() throws IOException { - String sql = FileUtil.readTextFileFromResource("queries/default/exists_predicate_1.sql"); - parseQuery(sql); - } - - @Test - public void testExistsPredicate2() throws IOException { - String sql = FileUtil.readTextFileFromResource("queries/default/exists_predicate_2.sql"); - parseQuery(sql); - } - - @Test - public void testInsertIntoTable() throws IOException { - String sql = FileUtil.readTextFileFromResource("queries/default/insert_into_select_1.sql"); - parseQuery(sql); - } - - @Test - public void testInsertIntoLocation() throws IOException { - String sql = FileUtil.readTextFileFromResource("queries/default/insert_into_select_2.sql"); - parseQuery(sql); - } - - @Test - public void testInsertIntoTable2() throws IOException { - String sql = FileUtil.readTextFileFromResource("queries/default/insert_into_select_3.sql"); - parseQuery(sql); - } - - @Test - public void testInsertOverwriteIntoTable() throws IOException { - String sql = FileUtil.readTextFileFromResource("queries/default/insert_overwrite_into_select_1.sql"); - parseQuery(sql); - } + if (!fs.exists(positiveQueryDir)) { + throw new IOException("Cannot find " + positiveQueryDir); + } - @Test - public void testInsertOverwriteIntoLocation() throws IOException { - String sql = FileUtil.readTextFileFromResource("queries/default/insert_overwrite_into_select_2.sql"); - parseQuery(sql); + // get only files + Collection<FileStatus> files = filter(Lists.newArrayList(fs.listStatus(positiveQueryDir)), + new Predicate<FileStatus>() { + @Override + public boolean apply(@Nullable FileStatus input) { + return input.isFile(); + } + } + ); + + // transform FileStatus into File + return transform(files, new Function<FileStatus, File>() { + @Override + public File apply(@Nullable FileStatus fileStatus) { + return new File(URI.create(fileStatus.getPath().toString())); + } + }); + } + + /** + * Return a pair of file name and SQL query + * + * @return a pair of file name and SQL query + * @throws IOException + * @throws URISyntaxException + */ + public Collection<Pair<String, String>> getFileContents(String subdir) throws IOException, URISyntaxException { + return transform(getResourceFiles(subdir), new Function<File, Pair<String, String>>() { + @Override + public Pair<String, String> apply(@Nullable File file) { + try { + return new Pair<>(file.getName(), FileUtil.readTextFile(file)); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + }); + } + + /** + * In order to add more unit tests, please add SQL files into resources/results/TestSQLAnalyzer/positive. + * This test just checkes if SQL statements are parsed successfully. + * + * @throws IOException + * @throws URISyntaxException + */ + @Test + public void testPositiveTests() throws IOException, URISyntaxException { + for (Pair<String, String> pair : getFileContents("positive")) { + try { + assertNotNull(parseQuery(pair.getSecond())); + System.out.println(pair.getFirst() + " test passed..."); + } catch (Throwable t) { + fail("Parsing '" + pair.getFirst() + "' failed, its cause: " + t.getMessage()); + } + } } - @Test - public void testInsertOverwriteIntoTable2() throws IOException { - String sql = FileUtil.readTextFileFromResource("queries/default/insert_overwrite_into_select_3.sql"); - parseQuery(sql); + /** + * In order to add more unit tests, add a SQL file including a SQL statement + * into the directory resources/queries/TestSQLAnalyzer + * and its generated algebraic expression formatted by json into resources/results/TestSQLAnalyzer. + * Each result file name must be the same to its SQL file. + * + * @throws IOException + * @throws URISyntaxException + */ + @Test + public void testGeneratedAlgebras() throws IOException, URISyntaxException { + for (Pair<String, String> pair : getFileContents(".")) { + Expr expr = parseQuery(pair.getSecond()); + + String expectedResult = null; + String fileName = null; + try { + fileName = pair.getFirst().split("\\.")[0]; + expectedResult = FileUtil.readTextFileFromResource("results/TestSQLAnalyzer/" + fileName + ".result"); + } catch (FileNotFoundException ioe) { + expectedResult = ""; + } catch (Throwable t) { + fail(t.getMessage()); + } + + assertEquals(pair.getFirst() + " is different from " + fileName + ".result", + expectedResult.trim(), expr.toJson().trim()); + System.out.println(pair.getFirst() + " test passed.."); + } } - static String[] exprs = { - "1 + 2", // 0 - "3 - 4", // 1 - "5 * 6", // 2 - "7 / 8", // 3 - "10 % 2", // 4 - "1 * 2 > 3 / 4", // 5 - "1 * 2 < 3 / 4", // 6 - "1 * 2 = 3 / 4", // 7 - "1 * 2 != 3 / 4", // 8 - "1 * 2 <> 3 / 4", // 9 - "gender in ('male', 'female')", // 10 - "gender not in ('male', 'female')", // 11 - "score > 90 and age < 20", // 12 - "score > 90 and age < 20 and name != 'hyunsik'", // 13 - "score > 90 or age < 20", // 14 - "score > 90 or age < 20 and name != 'hyunsik'", // 15 - "((a+3 > 1) or 1=1) and (3 != (abc + 4) and type in (3,4))", // 16 - "3", // 17 - "1.2", // 18 - "sum(age)", // 19 - "now()", // 20 - "not (90 > 100)", // 21 - "type like '%top'", // 22 - "type not like 'top%'", // 23 - "col = 'value'", // 24 - "col is null", // 25 - "col is not null", // 26 - "col = null", // 27 - "col != null", // 38 - }; - - public static Expr parseExpr(String sql) { + private static Expr parseExpr(String sql) { ANTLRInputStream input = new ANTLRInputStream(sql); SQLLexer lexer = new SQLLexer(input); CommonTokenStream tokens = new CommonTokenStream(lexer); + SQLParser parser = new SQLParser(tokens); + parser.setErrorHandler(new BailErrorStrategy()); parser.setBuildParseTree(true); + SQLAnalyzer visitor = new SQLAnalyzer(); SQLParser.Value_expressionContext context = parser.value_expression(); return visitor.visitValue_expression(context); } + /** + * In order to add more unit tests, add text files including SQL expressions + * into the directory resources/queries/TestSQLAnalyzer/exprs. + * + * @throws IOException + * @throws URISyntaxException + */ @Test - public void testExprs() { - for (int i = 0; i < exprs.length; i++) { - parseExpr(exprs[i]); + public void testExprs() throws IOException, URISyntaxException { + for (Pair<String, String> pair : getFileContents("exprs")) { + testExprs(pair.getFirst(), pair.getSecond()); + System.out.println(pair.getFirst() + " test passed.."); } } - @Test - public void windowFunction1() throws IOException { - assertParseResult("window1.sql", "window1.result"); - } - - @Test - public void windowFunction2() throws IOException { - assertParseResult("window2.sql", "window2.result"); - } - - @Test - public void windowFunction3() throws IOException { - assertParseResult("window3.sql", "window3.result"); - } - - @Test - public void windowFunction4() throws IOException { - assertParseResult("window4.sql", "window4.result"); - } - - @Test - public void windowFunction5() throws IOException { - assertParseResult("window5.sql", "window5.result"); - } - - @Test - public void windowFunction6() throws IOException { - assertParseResult("window6.sql", "window6.result"); - } - - @Test - public void windowFunction7() throws IOException { - assertParseResult("window7.sql", "window7.result"); - } - - @Test - public void windowFunction8() throws IOException { - assertParseResult("window8.sql", "window8.result"); - } - - @Test - public void windowFunction9() throws IOException { - assertParseResult("window9.sql", "window9.result"); - } - - @Test - public void testSetCatalog1() throws IOException { - assertParseResult("setcatalog1.sql", "setcatalog1.result"); - } - - @Test - public void testSetCatalog2() throws IOException { - assertParseResult("setcatalog2.sql", "setcatalog2.result"); - } - - @Test - public void testTimezone1() throws IOException { - assertParseResult("settimezone1.sql", "settimezone1.result"); - } - - @Test - public void testTimezone2() throws IOException { - assertParseResult("settimezone2.sql", "settimezone2.result"); - } - - @Test - public void testTimezone3() throws IOException { - assertParseResult("settimezone3.sql", "settimezone3.result"); - } - - @Test - public void testSetSession1() throws IOException { - assertParseResult("setsession1.sql", "setsession1.result"); - } - - @Test - public void testSetSession2() throws IOException { - assertParseResult("setsession2.sql", "setsession2.result"); - } - - @Test - public void testSetSession3() throws IOException { - assertParseResult("setsession3.sql", "setsession3.result"); - } - - @Test - public void testSetSession4() throws IOException { - assertParseResult("setsession4.sql", "setsession4.result"); - } - - @Test - public void testSetSession5() throws IOException { - assertParseResult("setsession5.sql", "setsession5.result"); - } - - @Test - public void testSetSession6() throws IOException { - assertParseResult("setsession6.sql", "setsession6.result"); - } - - @Test - public void testSetSession7() throws IOException { - assertParseResult("setsession7.sql", "setsession7.result"); - } - - @Test - public void testCreateTableWithNested1() throws IOException { - assertParseResult("create_table_nested_1.sql", "create_table_nested_1.result"); - } - - @Test - public void testCreateTableWithNested2() throws IOException { - assertParseResult("create_table_nested_2.sql", "create_table_nested_2.result"); - } - - @Test - public void testCreateTableWithMapType1() throws IOException { - // primitive key value map - assertParseResult("create_table_maptype_1.sql", "create_table_maptype_1.result"); - } - - @Test - public void testCreateTableWithMapType2() throws IOException { - // primitive key and record value map - assertParseResult("create_table_maptype_2.sql", "create_table_maptype_2.result"); - } - - @Test - public void testCreateTableWithMapType3() throws IOException { - // primitive key and nexted record value map - assertParseResult("create_table_maptype_3.sql", "create_table_maptype_3.result"); + private void testExprs(String file, String fileContents) { + for (String line : fileContents.split("\n")) { + try { + assertNotNull(parseExpr(line)); + } catch (Throwable t) { + fail(line + " in " + file + " failed.."); + } + } } } http://git-wip-us.apache.org/repos/asf/tajo/blob/89c140c0/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/alter_table_add_partition_1.sql ---------------------------------------------------------------------- diff --git a/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/alter_table_add_partition_1.sql b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/alter_table_add_partition_1.sql new file mode 100644 index 0000000..0f91b68 --- /dev/null +++ b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/alter_table_add_partition_1.sql @@ -0,0 +1 @@ +ALTER TABLE table1 ADD PARTITION (col1 = 1 , col2 = 2) \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tajo/blob/89c140c0/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/alter_table_add_partition_2.sql ---------------------------------------------------------------------- diff --git a/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/alter_table_add_partition_2.sql b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/alter_table_add_partition_2.sql new file mode 100644 index 0000000..ee4df75 --- /dev/null +++ b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/alter_table_add_partition_2.sql @@ -0,0 +1 @@ +ALTER TABLE table1 ADD PARTITION (col1 = 1 , col2 = 2) LOCATION 'hdfs://xxx.com/warehouse/table1/col1=1/col2=2' \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tajo/blob/89c140c0/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/alter_table_add_partition_3.sql ---------------------------------------------------------------------- diff --git a/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/alter_table_add_partition_3.sql b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/alter_table_add_partition_3.sql new file mode 100644 index 0000000..79d1426 --- /dev/null +++ b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/alter_table_add_partition_3.sql @@ -0,0 +1,2 @@ +ALTER TABLE table1 ADD PARTITION (col1 = '2015' , col2 = '01', col3 = '11' ) +LOCATION 'hdfs://xxx.com/warehouse/table1/col1=2015/col2=01/col3=11' \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tajo/blob/89c140c0/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/alter_table_add_partition_4.sql ---------------------------------------------------------------------- diff --git a/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/alter_table_add_partition_4.sql b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/alter_table_add_partition_4.sql new file mode 100644 index 0000000..bc22a14 --- /dev/null +++ b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/alter_table_add_partition_4.sql @@ -0,0 +1 @@ +ALTER TABLE table1 ADD PARTITION (col1 = 'TAJO' ) \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tajo/blob/89c140c0/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/alter_table_add_partition_5.sql ---------------------------------------------------------------------- diff --git a/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/alter_table_add_partition_5.sql b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/alter_table_add_partition_5.sql new file mode 100644 index 0000000..127d999 --- /dev/null +++ b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/alter_table_add_partition_5.sql @@ -0,0 +1 @@ +ALTER TABLE table1 ADD IF NOT EXISTS PARTITION (col1 = 'TAJO' ) \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tajo/blob/89c140c0/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/alter_table_drop_partition_1.sql ---------------------------------------------------------------------- diff --git a/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/alter_table_drop_partition_1.sql b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/alter_table_drop_partition_1.sql new file mode 100644 index 0000000..6e2ad7c --- /dev/null +++ b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/alter_table_drop_partition_1.sql @@ -0,0 +1 @@ +ALTER TABLE table1 DROP PARTITION (col1 = 1 , col2 = 2) \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tajo/blob/89c140c0/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/alter_table_drop_partition_2.sql ---------------------------------------------------------------------- diff --git a/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/alter_table_drop_partition_2.sql b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/alter_table_drop_partition_2.sql new file mode 100644 index 0000000..5752710 --- /dev/null +++ b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/alter_table_drop_partition_2.sql @@ -0,0 +1 @@ +ALTER TABLE table1 DROP PARTITION (col1 = '2015' , col2 = '01', col3 = '11' ) \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tajo/blob/89c140c0/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/alter_table_drop_partition_3.sql ---------------------------------------------------------------------- diff --git a/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/alter_table_drop_partition_3.sql b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/alter_table_drop_partition_3.sql new file mode 100644 index 0000000..8a1a6a5 --- /dev/null +++ b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/alter_table_drop_partition_3.sql @@ -0,0 +1 @@ +ALTER TABLE table1 DROP PARTITION (col1 = 'TAJO' ) PURGE \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tajo/blob/89c140c0/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/alter_table_drop_partition_4.sql ---------------------------------------------------------------------- diff --git a/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/alter_table_drop_partition_4.sql b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/alter_table_drop_partition_4.sql new file mode 100644 index 0000000..44c7977 --- /dev/null +++ b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/alter_table_drop_partition_4.sql @@ -0,0 +1 @@ +ALTER TABLE table1 DROP IF EXISTS PARTITION (col1 = 'TAJO' ) PURGE \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tajo/blob/89c140c0/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/alter_table_set_property_1.sql ---------------------------------------------------------------------- diff --git a/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/alter_table_set_property_1.sql b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/alter_table_set_property_1.sql new file mode 100644 index 0000000..ac7aa4d --- /dev/null +++ b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/alter_table_set_property_1.sql @@ -0,0 +1 @@ +ALTER TABLE table1 SET PROPERTY 'timezone' = 'GMT-7' http://git-wip-us.apache.org/repos/asf/tajo/blob/89c140c0/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/alter_table_set_property_2.sql ---------------------------------------------------------------------- diff --git a/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/alter_table_set_property_2.sql b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/alter_table_set_property_2.sql new file mode 100644 index 0000000..77df213 --- /dev/null +++ b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/alter_table_set_property_2.sql @@ -0,0 +1 @@ +ALTER TABLE table1 SET PROPERTY 'text.delimiter' = '&' http://git-wip-us.apache.org/repos/asf/tajo/blob/89c140c0/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/alter_table_set_property_3.sql ---------------------------------------------------------------------- diff --git a/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/alter_table_set_property_3.sql b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/alter_table_set_property_3.sql new file mode 100644 index 0000000..6230a34 --- /dev/null +++ b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/alter_table_set_property_3.sql @@ -0,0 +1 @@ +ALTER TABLE table1 SET PROPERTY 'compression.type'='RECORD','compression.codec'='org.apache.hadoop.io.compress.SnappyCodec' http://git-wip-us.apache.org/repos/asf/tajo/blob/89c140c0/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/create_table_like_1.sql ---------------------------------------------------------------------- diff --git a/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/create_table_like_1.sql b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/create_table_like_1.sql new file mode 100644 index 0000000..73f2f46 --- /dev/null +++ b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/create_table_like_1.sql @@ -0,0 +1 @@ +create table new_table like orig_name; http://git-wip-us.apache.org/repos/asf/tajo/blob/89c140c0/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/create_table_partition_by_column.sql ---------------------------------------------------------------------- diff --git a/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/create_table_partition_by_column.sql b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/create_table_partition_by_column.sql new file mode 100644 index 0000000..397e7ac --- /dev/null +++ b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/create_table_partition_by_column.sql @@ -0,0 +1,4 @@ +CREATE TABLE sales ( col1 int, col2 int) +PARTITION BY COLUMN (col3 int, col4 float, col5 text); + + http://git-wip-us.apache.org/repos/asf/tajo/blob/89c140c0/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/create_table_partition_by_hash_1.sql ---------------------------------------------------------------------- diff --git a/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/create_table_partition_by_hash_1.sql b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/create_table_partition_by_hash_1.sql new file mode 100644 index 0000000..f13225a --- /dev/null +++ b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/create_table_partition_by_hash_1.sql @@ -0,0 +1,3 @@ +CREATE TABLE sales ( col1 int, col2 int) +PARTITION BY HASH (col1) +PARTITIONS 2; \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tajo/blob/89c140c0/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/create_table_partition_by_hash_2.sql ---------------------------------------------------------------------- diff --git a/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/create_table_partition_by_hash_2.sql b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/create_table_partition_by_hash_2.sql new file mode 100644 index 0000000..c8fe3c5 --- /dev/null +++ b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/create_table_partition_by_hash_2.sql @@ -0,0 +1,7 @@ +CREATE TABLE sales ( col1 int, col2 int) +PARTITION BY HASH (col1) +( + PARTITION part1, + PARTITION part2, + PARTITION part3 +); \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tajo/blob/89c140c0/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/create_table_partition_by_list.sql ---------------------------------------------------------------------- diff --git a/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/create_table_partition_by_list.sql b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/create_table_partition_by_list.sql new file mode 100644 index 0000000..9461e01 --- /dev/null +++ b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/create_table_partition_by_list.sql @@ -0,0 +1,8 @@ +CREATE TABLE sales ( col1 int, col2 int) +PARTITION BY LIST (col1) + ( + PARTITION col1 VALUES ('Seoul', 'ìì¸'), + PARTITION col2 VALUES ('Busan', 'ë¶ì°') + ); + + http://git-wip-us.apache.org/repos/asf/tajo/blob/89c140c0/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/create_table_partition_by_range.sql ---------------------------------------------------------------------- diff --git a/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/create_table_partition_by_range.sql b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/create_table_partition_by_range.sql new file mode 100644 index 0000000..65c4fdd --- /dev/null +++ b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/create_table_partition_by_range.sql @@ -0,0 +1,9 @@ +CREATE TABLE sales ( col1 int, col2 int) +PARTITION BY RANGE (col1) + ( + PARTITION col1 VALUES LESS THAN (2), + PARTITION col1 VALUES LESS THAN (5), + PARTITION col1 VALUES LESS THAN (MAXVALUE) + ); + + http://git-wip-us.apache.org/repos/asf/tajo/blob/89c140c0/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/exprs/value_expressions.txt ---------------------------------------------------------------------- diff --git a/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/exprs/value_expressions.txt b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/exprs/value_expressions.txt new file mode 100644 index 0000000..e3623c7 --- /dev/null +++ b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/exprs/value_expressions.txt @@ -0,0 +1,29 @@ +1 + 2 +3 - 4 +5 * 6 +7 / 8 +10 % 2 +1 * 2 > 3 / 4 +1 * 2 < 3 / 4 +1 * 2 = 3 / 4 +1 * 2 != 3 / 4 +1 * 2 <> 3 / 4 +gender in ('male', 'female') +gender not in ('male', 'female') +score > 90 and age < 20 +score > 90 and age < 20 and name != 'hyunsik' +score > 90 or age < 20 +score > 90 or age < 20 and name != 'hyunsik' +((a+3 > 1) or 1=1) and (3 != (abc + 4) and type in (3,4)) +3 +1.2 +sum(age) +now() +not (90 > 100) +type like '%top' +type not like 'top%' +col = 'value' +col is null +col is not null +col = null +col != null \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tajo/blob/89c140c0/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/asterisk_1.sql ---------------------------------------------------------------------- diff --git a/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/asterisk_1.sql b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/asterisk_1.sql new file mode 100644 index 0000000..2bbe245 --- /dev/null +++ b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/asterisk_1.sql @@ -0,0 +1 @@ +select * from people \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tajo/blob/89c140c0/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/asterisk_2.sql ---------------------------------------------------------------------- diff --git a/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/asterisk_2.sql b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/asterisk_2.sql new file mode 100644 index 0000000..d646044 --- /dev/null +++ b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/asterisk_2.sql @@ -0,0 +1 @@ +select p.*, s.* from people cross join students \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tajo/blob/89c140c0/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/asterisk_3.sql ---------------------------------------------------------------------- diff --git a/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/asterisk_3.sql b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/asterisk_3.sql new file mode 100644 index 0000000..1566230 --- /dev/null +++ b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/asterisk_3.sql @@ -0,0 +1 @@ +select * from people cross join students \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tajo/blob/89c140c0/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/asterisk_4.sql ---------------------------------------------------------------------- diff --git a/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/asterisk_4.sql b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/asterisk_4.sql new file mode 100644 index 0000000..22faf44 --- /dev/null +++ b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/asterisk_4.sql @@ -0,0 +1 @@ +select age-10, *, length(name) from people \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tajo/blob/89c140c0/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/create_partitioned_table_as_select.sql ---------------------------------------------------------------------- diff --git a/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/create_partitioned_table_as_select.sql b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/create_partitioned_table_as_select.sql new file mode 100644 index 0000000..b2d7dce --- /dev/null +++ b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/create_partitioned_table_as_select.sql @@ -0,0 +1,17 @@ +CREATE TABLE sales ( + col1 int, + col2 int) +PARTITION BY COLUMN (col3 int, col4 float, col5 text) AS + +SELECT + col1, + col2, + col3, + col4, + col5 +FROM + sales_src +WHERE + col1 > 16 + + http://git-wip-us.apache.org/repos/asf/tajo/blob/89c140c0/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/create_table_1.sql ---------------------------------------------------------------------- diff --git a/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/create_table_1.sql b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/create_table_1.sql new file mode 100644 index 0000000..8875b0e --- /dev/null +++ b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/create_table_1.sql @@ -0,0 +1 @@ +create table name (name text, age int) \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tajo/blob/89c140c0/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/create_table_10.sql ---------------------------------------------------------------------- diff --git a/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/create_table_10.sql b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/create_table_10.sql new file mode 100644 index 0000000..43314fa --- /dev/null +++ b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/create_table_10.sql @@ -0,0 +1 @@ +create external table table1 (name text, age int, earn bigint, score float) using csv location '/tmp/data' \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tajo/blob/89c140c0/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/create_table_11.sql ---------------------------------------------------------------------- diff --git a/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/create_table_11.sql b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/create_table_11.sql new file mode 100644 index 0000000..d6ca3ae --- /dev/null +++ b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/create_table_11.sql @@ -0,0 +1,3 @@ +create external table table1 (name text, age int) +using rcfile +location '/user/hive/table1' \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tajo/blob/89c140c0/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/create_table_12.sql ---------------------------------------------------------------------- diff --git a/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/create_table_12.sql b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/create_table_12.sql new file mode 100644 index 0000000..99e7b8d --- /dev/null +++ b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/create_table_12.sql @@ -0,0 +1,3 @@ +create external table table1 (name text, age int) +USING text WITH ('text.delimiter'='|') +location '/user/hive/table1' \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tajo/blob/89c140c0/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/create_table_2.sql ---------------------------------------------------------------------- diff --git a/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/create_table_2.sql b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/create_table_2.sql new file mode 100644 index 0000000..4580e82 --- /dev/null +++ b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/create_table_2.sql @@ -0,0 +1 @@ +create table name (name text, age int) using rcfile \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tajo/blob/89c140c0/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/create_table_3.sql ---------------------------------------------------------------------- diff --git a/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/create_table_3.sql b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/create_table_3.sql new file mode 100644 index 0000000..5ab2af2 --- /dev/null +++ b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/create_table_3.sql @@ -0,0 +1 @@ +create table name (name text, age int) using rcfile with ('rcfile.buffer'=4096) \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tajo/blob/89c140c0/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/create_table_4.sql ---------------------------------------------------------------------- diff --git a/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/create_table_4.sql b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/create_table_4.sql new file mode 100644 index 0000000..fe4d580 --- /dev/null +++ b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/create_table_4.sql @@ -0,0 +1 @@ +create table name as select * from test \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tajo/blob/89c140c0/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/create_table_5.sql ---------------------------------------------------------------------- diff --git a/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/create_table_5.sql b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/create_table_5.sql new file mode 100644 index 0000000..b22b841 --- /dev/null +++ b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/create_table_5.sql @@ -0,0 +1 @@ +create table name (name text, age int) as select * from test \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tajo/blob/89c140c0/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/create_table_6.sql ---------------------------------------------------------------------- diff --git a/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/create_table_6.sql b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/create_table_6.sql new file mode 100644 index 0000000..27e06f2 --- /dev/null +++ b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/create_table_6.sql @@ -0,0 +1 @@ +create table name (name text, age int) using rcfile as select * from test \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tajo/blob/89c140c0/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/create_table_7.sql ---------------------------------------------------------------------- diff --git a/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/create_table_7.sql b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/create_table_7.sql new file mode 100644 index 0000000..5c9bf35 --- /dev/null +++ b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/create_table_7.sql @@ -0,0 +1 @@ +create table name (name text, age int) using rcfile with ('rcfile.buffer'= 4096) as select * from test \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tajo/blob/89c140c0/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/create_table_8.sql ---------------------------------------------------------------------- diff --git a/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/create_table_8.sql b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/create_table_8.sql new file mode 100644 index 0000000..d6c2ae6 --- /dev/null +++ b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/create_table_8.sql @@ -0,0 +1,48 @@ +create table widetable ( + col0 bit, + col1 BIT(10), + col2 bit varying, + col3 bit VARYING(10), + col4 tinyint, + col5 smallInt, + col6 integer, + col7 biginT, + col8 real, + col9 float, + col10 float(53), + col11 double, + col12 doublE precision, + col13 numeric, + col14 numeric(10), + col15 numeric(10,2), + col16 decimal, + col17 decimal(10), + col18 decimal(10,2), + col19 char, + col20 character, + col21 chaR(10), + col22 character(10), + col23 varchar, + col24 character varying, + col25 varchar(255), + col26 character varying (255), + col27 nchar, + col28 nchar(255), + col29 national character, + col30 national character(255), + col31 nvarchar, + col32 nvarchar(255), + col33 natIonal character varying, + col34 national character varying (255), + col35 date, + col36 time, + col37 timetz, + col38 time With time zone, + col39 timesTamptz, + col40 timestamp with time zone, + col41 binary, + col42 binary(10), + col43 varbinary(10), + col44 binary Varying(10), + col45 blOb +) as select * from test \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tajo/blob/89c140c0/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/create_table_9.sql ---------------------------------------------------------------------- diff --git a/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/create_table_9.sql b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/create_table_9.sql new file mode 100644 index 0000000..49e1e3c --- /dev/null +++ b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/create_table_9.sql @@ -0,0 +1 @@ +create table widetable (col1 float(10), col2 float) as select * from test \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tajo/blob/89c140c0/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/create_table_like_1.sql ---------------------------------------------------------------------- diff --git a/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/create_table_like_1.sql b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/create_table_like_1.sql new file mode 100644 index 0000000..73f2f46 --- /dev/null +++ b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/create_table_like_1.sql @@ -0,0 +1 @@ +create table new_table like orig_name; http://git-wip-us.apache.org/repos/asf/tajo/blob/89c140c0/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/drop_table.sql ---------------------------------------------------------------------- diff --git a/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/drop_table.sql b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/drop_table.sql new file mode 100644 index 0000000..0e52112 --- /dev/null +++ b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/drop_table.sql @@ -0,0 +1 @@ +drop table abc \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tajo/blob/89c140c0/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/exists_predicate_1.sql ---------------------------------------------------------------------- diff --git a/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/exists_predicate_1.sql b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/exists_predicate_1.sql new file mode 100644 index 0000000..0b10799 --- /dev/null +++ b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/exists_predicate_1.sql @@ -0,0 +1 @@ +select c1,c2,c3 from table1 where exists (select c4 from table2 where c4 = table1.c1); \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tajo/blob/89c140c0/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/exists_predicate_2.sql ---------------------------------------------------------------------- diff --git a/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/exists_predicate_2.sql b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/exists_predicate_2.sql new file mode 100644 index 0000000..f4f82f9 --- /dev/null +++ b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/exists_predicate_2.sql @@ -0,0 +1 @@ +select c1,c2,c3 from table1 where not exists (select c4 from table2 where c4 = table1.c1); \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tajo/blob/89c140c0/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/groupby_1.sql ---------------------------------------------------------------------- diff --git a/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/groupby_1.sql b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/groupby_1.sql new file mode 100644 index 0000000..85dbe21 --- /dev/null +++ b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/groupby_1.sql @@ -0,0 +1 @@ +select col0, col1, col2, col3, sum(col4) as total, avg(col5) from base group by col0, cube (col1, col2), rollup(col3) having total > 100 \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tajo/blob/89c140c0/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/groupby_2.sql ---------------------------------------------------------------------- diff --git a/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/groupby_2.sql b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/groupby_2.sql new file mode 100644 index 0000000..031cab2 --- /dev/null +++ b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/groupby_2.sql @@ -0,0 +1 @@ +select col0, col1, col2, col3, sum(col4) as total, avg(col5) from base group by col0, cube (col1, col2), col3 having total > 100 \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tajo/blob/89c140c0/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/groupby_3.sql ---------------------------------------------------------------------- diff --git a/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/groupby_3.sql b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/groupby_3.sql new file mode 100644 index 0000000..469e8b2 --- /dev/null +++ b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/groupby_3.sql @@ -0,0 +1 @@ +select col0, col1, col2, col3, sum(col4) as total, avg(col5) from base group by col0, col3, cube (col1, col2) having total > 100 \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tajo/blob/89c140c0/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/groupby_4.sql ---------------------------------------------------------------------- diff --git a/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/groupby_4.sql b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/groupby_4.sql new file mode 100644 index 0000000..749c6d9 --- /dev/null +++ b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/groupby_4.sql @@ -0,0 +1 @@ +select trim(name), count(1) from table1 group by trim(name) \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tajo/blob/89c140c0/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/groupby_5.sql ---------------------------------------------------------------------- diff --git a/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/groupby_5.sql b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/groupby_5.sql new file mode 100644 index 0000000..f654ef6 --- /dev/null +++ b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/groupby_5.sql @@ -0,0 +1 @@ +select id, name, count(*), sum(id), avg(age) from people group by id, name \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tajo/blob/89c140c0/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/in_subquery_1.sql ---------------------------------------------------------------------- diff --git a/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/in_subquery_1.sql b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/in_subquery_1.sql new file mode 100644 index 0000000..2a16a8d --- /dev/null +++ b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/in_subquery_1.sql @@ -0,0 +1 @@ +select c1,c2,c3 from table1 where c1 in (select c4 from table2); \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tajo/blob/89c140c0/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/in_subquery_2.sql ---------------------------------------------------------------------- diff --git a/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/in_subquery_2.sql b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/in_subquery_2.sql new file mode 100644 index 0000000..64c8034 --- /dev/null +++ b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/in_subquery_2.sql @@ -0,0 +1 @@ +select c1,c2,c3 from table1 where c1 not in (select c4 from table2); \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tajo/blob/89c140c0/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/insert_into_select_1.sql ---------------------------------------------------------------------- diff --git a/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/insert_into_select_1.sql b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/insert_into_select_1.sql new file mode 100644 index 0000000..d3291f5 --- /dev/null +++ b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/insert_into_select_1.sql @@ -0,0 +1 @@ +insert into table1 select col1, col2, sum(col3) from table2 group by col1, col2 http://git-wip-us.apache.org/repos/asf/tajo/blob/89c140c0/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/insert_into_select_2.sql ---------------------------------------------------------------------- diff --git a/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/insert_into_select_2.sql b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/insert_into_select_2.sql new file mode 100644 index 0000000..2928b11 --- /dev/null +++ b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/insert_into_select_2.sql @@ -0,0 +1 @@ +insert into location 'file:/tmp/data' select col1, col2, sum(col3) from table2 group by col1, col2 http://git-wip-us.apache.org/repos/asf/tajo/blob/89c140c0/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/insert_into_select_3.sql ---------------------------------------------------------------------- diff --git a/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/insert_into_select_3.sql b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/insert_into_select_3.sql new file mode 100644 index 0000000..b7718dc --- /dev/null +++ b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/insert_into_select_3.sql @@ -0,0 +1 @@ +insert into table1 (col1, col2, col3) select col1, col2, sum(col3) as total from table2 group by col1, col2 http://git-wip-us.apache.org/repos/asf/tajo/blob/89c140c0/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/insert_overwrite_into_select_1.sql ---------------------------------------------------------------------- diff --git a/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/insert_overwrite_into_select_1.sql b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/insert_overwrite_into_select_1.sql new file mode 100644 index 0000000..84992bc --- /dev/null +++ b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/insert_overwrite_into_select_1.sql @@ -0,0 +1 @@ +insert overwrite into table1 select col1, col2, sum(col3) from table2 group by col1, col2 http://git-wip-us.apache.org/repos/asf/tajo/blob/89c140c0/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/insert_overwrite_into_select_2.sql ---------------------------------------------------------------------- diff --git a/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/insert_overwrite_into_select_2.sql b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/insert_overwrite_into_select_2.sql new file mode 100644 index 0000000..1c4227b --- /dev/null +++ b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/insert_overwrite_into_select_2.sql @@ -0,0 +1 @@ +insert overwrite into location 'file:/tmp/data' select col1, col2, sum(col3) from table2 group by col1, col2 http://git-wip-us.apache.org/repos/asf/tajo/blob/89c140c0/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/insert_overwrite_into_select_3.sql ---------------------------------------------------------------------- diff --git a/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/insert_overwrite_into_select_3.sql b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/insert_overwrite_into_select_3.sql new file mode 100644 index 0000000..bfacc01 --- /dev/null +++ b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/insert_overwrite_into_select_3.sql @@ -0,0 +1 @@ +insert overwrite into table1 (col1, col2, col3) select col1, col2, sum(col3) as total from table2 group by col1, col2 http://git-wip-us.apache.org/repos/asf/tajo/blob/89c140c0/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/join_1.sql ---------------------------------------------------------------------- diff --git a/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/join_1.sql b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/join_1.sql new file mode 100644 index 0000000..ad27795 --- /dev/null +++ b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/join_1.sql @@ -0,0 +1 @@ +select name, addr from people natural join student natural join professor \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tajo/blob/89c140c0/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/join_10.sql ---------------------------------------------------------------------- diff --git a/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/join_10.sql b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/join_10.sql new file mode 100644 index 0000000..c9056cc --- /dev/null +++ b/tajo-core-tests/src/test/resources/queries/TestSQLAnalyzer/positive/join_10.sql @@ -0,0 +1 @@ +select * from a cross join b, c, d, e \ No newline at end of file
