You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tajo.apache.org by ji...@apache.org on 2015/02/06 09:35:42 UTC

[05/11] tajo git commit: TAJO-1260: Add ALTER TABLE ADD/DROP PARTITION statement to parser (jaehwa)

TAJO-1260: Add ALTER TABLE ADD/DROP PARTITION statement to parser (jaehwa)

Closes #335


Project: http://git-wip-us.apache.org/repos/asf/tajo/repo
Commit: http://git-wip-us.apache.org/repos/asf/tajo/commit/3f336f50
Tree: http://git-wip-us.apache.org/repos/asf/tajo/tree/3f336f50
Diff: http://git-wip-us.apache.org/repos/asf/tajo/diff/3f336f50

Branch: refs/heads/index_support
Commit: 3f336f500bd53b829467c9c7f6e3fe777554a423
Parents: 901700b
Author: JaeHwa Jung <bl...@apache.org>
Authored: Thu Feb 5 14:40:05 2015 +0900
Committer: JaeHwa Jung <bl...@apache.org>
Committed: Thu Feb 5 14:40:05 2015 +0900

----------------------------------------------------------------------
 CHANGES                                         |   2 +
 .../org/apache/tajo/algebra/AlterTable.java     |  34 ++-
 .../apache/tajo/algebra/AlterTableOpType.java   |   2 +-
 .../org/apache/tajo/engine/parser/SQLParser.g4  |  10 +
 .../apache/tajo/engine/parser/SQLAnalyzer.java  |  56 ++++-
 .../org/apache/tajo/cli/tsql/TestTajoCli.java   |  23 ++
 .../tajo/engine/parser/TestSQLAnalyzer.java     | 236 ++++++++++++++-----
 .../java/org/apache/tajo/jdbc/TestTajoJdbc.java |  42 ++++
 .../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_drop_partition_1.sql    |   1 +
 .../default/alter_table_drop_partition_2.sql    |   1 +
 .../default/alter_table_drop_partition_3.sql    |   1 +
 .../testAlterTableAddPartition.result           |   2 +
 .../testAlterTableDropPartition.result          |   2 +
 .../plan/verifier/PreLogicalPlanVerifier.java   |  12 +
 18 files changed, 356 insertions(+), 73 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tajo/blob/3f336f50/CHANGES
----------------------------------------------------------------------
diff --git a/CHANGES b/CHANGES
index 2e4849f..48f436f 100644
--- a/CHANGES
+++ b/CHANGES
@@ -349,6 +349,8 @@ Release 0.10.0 - unreleased
 
   TASKS
 
+    TAJO-1260: Add ALTER TABLE ADD/DROP PARTITION statement to parser. (jaehwa)
+
     TAJO-1323: Cleanup the unstable test case. (jinho)
 
     TAJO-1295: Remove legacy worker.dataserver package and its unit tests.

http://git-wip-us.apache.org/repos/asf/tajo/blob/3f336f50/tajo-algebra/src/main/java/org/apache/tajo/algebra/AlterTable.java
----------------------------------------------------------------------
diff --git a/tajo-algebra/src/main/java/org/apache/tajo/algebra/AlterTable.java b/tajo-algebra/src/main/java/org/apache/tajo/algebra/AlterTable.java
index 6d72472..dc68fc1 100644
--- a/tajo-algebra/src/main/java/org/apache/tajo/algebra/AlterTable.java
+++ b/tajo-algebra/src/main/java/org/apache/tajo/algebra/AlterTable.java
@@ -39,6 +39,13 @@ public class AlterTable extends Expr {
   @Expose @SerializedName("AlterTableType")
   private AlterTableOpType alterTableOpType;
 
+  @Expose @SerializedName("Columns")
+  ColumnReferenceExpr [] columns;
+  @Expose @SerializedName("Values")
+  private Expr[] values;
+  @Expose @SerializedName("location")
+  private String location;
+
   public AlterTable(final String tableName) {
     super(OpType.AlterTable);
     this.tableName = tableName;
@@ -93,6 +100,18 @@ public class AlterTable extends Expr {
     this.alterTableOpType = alterTableOpType;
   }
 
+  public ColumnReferenceExpr[] getColumns() { return columns; }
+
+  public void setColumns(ColumnReferenceExpr[] columns) { this.columns = columns; }
+
+  public Expr[] getValues() { return values; }
+
+  public void setValues(Expr[] values) { this.values = values; }
+
+  public String getLocation() { return location; }
+
+  public void setLocation(String location) { this.location = location; }
+
   @Override
   public int hashCode() {
     return Objects.hashCode(tableName,
@@ -100,7 +119,11 @@ public class AlterTable extends Expr {
         null != columnName ? Objects.hashCode(columnName) : columnName,
         null != newColumnName ? Objects.hashCode(newColumnName) : newColumnName,
         null != addNewColumn ? Objects.hashCode(addNewColumn) : addNewColumn,
-        null != alterTableOpType ? Objects.hashCode(alterTableOpType) : alterTableOpType);
+        null != alterTableOpType ? Objects.hashCode(alterTableOpType) : alterTableOpType,
+        null != columns ? Objects.hashCode(columns) : columns,
+        null != values ? Objects.hashCode(values) : values,
+        null != location ? Objects.hashCode(location) : location
+    );
 
   }
 
@@ -112,7 +135,11 @@ public class AlterTable extends Expr {
         TUtil.checkEquals(columnName, another.columnName) &&
         TUtil.checkEquals(newColumnName, another.newColumnName) &&
         TUtil.checkEquals(addNewColumn, another.addNewColumn) &&
-        TUtil.checkEquals(alterTableOpType, another.alterTableOpType);
+        TUtil.checkEquals(alterTableOpType, another.alterTableOpType) &&
+        TUtil.checkEquals(columns, another.columns) &&
+        TUtil.checkEquals(values, another.values) &&
+        TUtil.checkEquals(location, another.location)
+    ;
   }
 
   @Override
@@ -124,6 +151,9 @@ public class AlterTable extends Expr {
     alter.newColumnName = newColumnName;
     alter.addNewColumn = (ColumnDefinition) addNewColumn.clone();
     alter.alterTableOpType = alterTableOpType;
+    alter.columns = columns;
+    alter.values = values;
+    alter.location = location;
     return alter;
   }
 }

http://git-wip-us.apache.org/repos/asf/tajo/blob/3f336f50/tajo-algebra/src/main/java/org/apache/tajo/algebra/AlterTableOpType.java
----------------------------------------------------------------------
diff --git a/tajo-algebra/src/main/java/org/apache/tajo/algebra/AlterTableOpType.java b/tajo-algebra/src/main/java/org/apache/tajo/algebra/AlterTableOpType.java
index 67b28a2..5d4f381 100644
--- a/tajo-algebra/src/main/java/org/apache/tajo/algebra/AlterTableOpType.java
+++ b/tajo-algebra/src/main/java/org/apache/tajo/algebra/AlterTableOpType.java
@@ -18,5 +18,5 @@
 package org.apache.tajo.algebra;
 
 public enum AlterTableOpType {
-  RENAME_TABLE, RENAME_COLUMN, ADD_COLUMN
+  RENAME_TABLE, RENAME_COLUMN, ADD_COLUMN, ADD_PARTITION, DROP_PARTITION
 }

http://git-wip-us.apache.org/repos/asf/tajo/blob/3f336f50/tajo-core/src/main/antlr4/org/apache/tajo/engine/parser/SQLParser.g4
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/antlr4/org/apache/tajo/engine/parser/SQLParser.g4 b/tajo-core/src/main/antlr4/org/apache/tajo/engine/parser/SQLParser.g4
index ddf679b..a236514 100644
--- a/tajo-core/src/main/antlr4/org/apache/tajo/engine/parser/SQLParser.g4
+++ b/tajo-core/src/main/antlr4/org/apache/tajo/engine/parser/SQLParser.g4
@@ -1595,4 +1595,14 @@ alter_table_statement
   : ALTER TABLE table_name RENAME TO table_name
   | ALTER TABLE table_name RENAME COLUMN column_name TO column_name
   | ALTER TABLE table_name ADD COLUMN field_element
+  | ALTER TABLE table_name (if_not_exists)? ADD PARTITION LEFT_PAREN partition_column_value_list RIGHT_PAREN (LOCATION path=Character_String_Literal)?
+  | ALTER TABLE table_name (if_exists)? DROP PARTITION LEFT_PAREN partition_column_value_list RIGHT_PAREN
+  ;
+
+partition_column_value_list
+  : partition_column_value (COMMA partition_column_value)*
+  ;
+
+partition_column_value
+  : identifier EQUAL row_value_predicand
   ;

http://git-wip-us.apache.org/repos/asf/tajo/blob/3f336f50/tajo-core/src/main/java/org/apache/tajo/engine/parser/SQLAnalyzer.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/parser/SQLAnalyzer.java b/tajo-core/src/main/java/org/apache/tajo/engine/parser/SQLAnalyzer.java
index 9ac1938..ab8e647 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/parser/SQLAnalyzer.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/parser/SQLAnalyzer.java
@@ -1760,6 +1760,24 @@ public class SQLAnalyzer extends SQLParserBaseVisitor<Expr> {
       alterTable.setAddNewColumn(columnDefinition);
     }
 
+    if (checkIfExist(ctx.partition_column_value_list())) {
+      List<Partition_column_valueContext> columnValueList = ctx.partition_column_value_list().partition_column_value();
+      int size = columnValueList.size();
+      ColumnReferenceExpr[] columns = new ColumnReferenceExpr[size];
+      Expr[] values = new Expr[size];
+      for (int i = 0; i < size; i++) {
+        Partition_column_valueContext columnValue = columnValueList.get(i);
+        columns[i] = new ColumnReferenceExpr(columnValue.identifier().getText());
+        values[i] = visitRow_value_predicand(columnValue.row_value_predicand());
+      }
+      alterTable.setColumns(columns);
+      alterTable.setValues(values);
+      if (ctx.LOCATION() != null) {
+        String path = stripQuote(ctx.path.getText());
+        alterTable.setLocation(path);
+      }
+    }
+
     alterTable.setAlterTableOpType(determineAlterTableType(ctx));
 
     return alterTable;
@@ -1771,23 +1789,35 @@ public class SQLAnalyzer extends SQLParserBaseVisitor<Expr> {
     final int COLUMN_MASK = 00000010;
     final int TO_MASK = 00000100;
     final int ADD_MASK = 00001000;
+    final int DROP_MASK = 00001001;
+    final int PARTITION_MASK = 00000020;
 
     int val = 00000000;
 
     for (int idx = 1; idx < ctx.getChildCount(); idx++) {
 
       if (ctx.getChild(idx) instanceof TerminalNode) {
-        if (((TerminalNode) ctx.getChild(idx)).getSymbol().getType() == RENAME) {
-          val = val | RENAME_MASK;
-        }
-        if (((TerminalNode) ctx.getChild(idx)).getSymbol().getType() == COLUMN) {
-          val = val | COLUMN_MASK;
-        }
-        if (((TerminalNode) ctx.getChild(idx)).getSymbol().getType() == TO) {
-          val = val | TO_MASK;
-        }
-        if (((TerminalNode) ctx.getChild(idx)).getSymbol().getType() == ADD) {
-          val = val | ADD_MASK;
+        switch (((TerminalNode) ctx.getChild(idx)).getSymbol().getType()) {
+          case RENAME:
+            val = val | RENAME_MASK;
+            break;
+          case COLUMN:
+            val = val | COLUMN_MASK;
+            break;
+          case TO:
+            val = val | TO_MASK;
+            break;
+          case ADD:
+            val = val | ADD_MASK;
+            break;
+          case DROP:
+            val = val | DROP_MASK;
+            break;
+          case PARTITION:
+            val = val | PARTITION_MASK;
+            break;
+          default:
+            break;
         }
       }
     }
@@ -1803,6 +1833,10 @@ public class SQLAnalyzer extends SQLParserBaseVisitor<Expr> {
         return AlterTableOpType.RENAME_COLUMN;
       case 520:
         return AlterTableOpType.ADD_COLUMN;
+      case 528:
+        return AlterTableOpType.ADD_PARTITION;
+      case 529:
+        return AlterTableOpType.DROP_PARTITION;
       default:
         return null;
     }

http://git-wip-us.apache.org/repos/asf/tajo/blob/3f336f50/tajo-core/src/test/java/org/apache/tajo/cli/tsql/TestTajoCli.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/java/org/apache/tajo/cli/tsql/TestTajoCli.java b/tajo-core/src/test/java/org/apache/tajo/cli/tsql/TestTajoCli.java
index e014b52..d4a5a1f 100644
--- a/tajo-core/src/test/java/org/apache/tajo/cli/tsql/TestTajoCli.java
+++ b/tajo-core/src/test/java/org/apache/tajo/cli/tsql/TestTajoCli.java
@@ -27,6 +27,7 @@ import org.apache.tajo.ConfigKey;
 import org.apache.tajo.SessionVars;
 import org.apache.tajo.TajoTestingCluster;
 import org.apache.tajo.TpchTestBase;
+import org.apache.tajo.catalog.CatalogUtil;
 import org.apache.tajo.catalog.TableDesc;
 import org.apache.tajo.client.QueryStatus;
 import org.apache.tajo.conf.TajoConf;
@@ -373,6 +374,28 @@ public class TestTajoCli {
     }
   }
 
+  @Test
+     public void testAlterTableAddPartition() throws Exception {
+    String tableName = CatalogUtil.normalizeIdentifier("testAlterTableAddPartition");
+
+    tajoCli.executeScript("create table " + tableName + " (col1 int4, col2 int4) partition by column(key float8)");
+    tajoCli.executeScript("alter table " + tableName + " add partition (key = 0.1)");
+
+    String consoleResult = new String(out.toByteArray());
+    assertOutputResult(consoleResult);
+  }
+
+  @Test
+  public void testAlterTableDropPartition() throws Exception {
+    String tableName = CatalogUtil.normalizeIdentifier("testAlterTableDropPartition");
+
+    tajoCli.executeScript("create table " + tableName + " (col1 int4, col2 int4) partition by column(key float8)");
+    tajoCli.executeScript("alter table " + tableName + " drop partition (key = 0.1)");
+
+    String consoleResult = new String(out.toByteArray());
+    assertOutputResult(consoleResult);
+  }
+
   public static class TajoCliOutputTestFormatter extends DefaultTajoCliOutputFormatter {
     @Override
     protected String getResponseTimeReadable(float responseTime) {

http://git-wip-us.apache.org/repos/asf/tajo/blob/3f336f50/tajo-core/src/test/java/org/apache/tajo/engine/parser/TestSQLAnalyzer.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/java/org/apache/tajo/engine/parser/TestSQLAnalyzer.java b/tajo-core/src/test/java/org/apache/tajo/engine/parser/TestSQLAnalyzer.java
index 272f718..9dfe814 100644
--- a/tajo-core/src/test/java/org/apache/tajo/engine/parser/TestSQLAnalyzer.java
+++ b/tajo-core/src/test/java/org/apache/tajo/engine/parser/TestSQLAnalyzer.java
@@ -20,10 +20,7 @@ package org.apache.tajo.engine.parser;
 
 import org.antlr.v4.runtime.ANTLRInputStream;
 import org.antlr.v4.runtime.CommonTokenStream;
-import org.apache.tajo.algebra.CreateTable;
-import org.apache.tajo.algebra.Expr;
-import org.apache.tajo.algebra.LiteralValue;
-import org.apache.tajo.algebra.OpType;
+import org.apache.tajo.algebra.*;
 import org.apache.tajo.engine.parser.SQLParser.SqlContext;
 import org.apache.tajo.util.FileUtil;
 import org.junit.Test;
@@ -36,7 +33,7 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 
 /**
- * This unit tests uses a number of query files located in tajo/tajo-core/src/test/resources/queries.
+ * 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.
  */
 public class TestSQLAnalyzer {
@@ -63,223 +60,223 @@ public class TestSQLAnalyzer {
 
   @Test
   public void testSelect1() throws IOException {
-    String sql = FileUtil.readTextFile(new File("src/test/resources/queries/default/select_1.sql"));
+    String sql = FileUtil.readTextFileFromResource("queries/default/select_1.sql");
     parseQuery(sql);
   }
 
   @Test
   public void testSelect2() throws IOException {
-    String sql = FileUtil.readTextFile(new File("src/test/resources/queries/default/select_2.sql"));
+    String sql = FileUtil.readTextFileFromResource("queries/default/select_2.sql");
     parseQuery(sql);
   }
 
   @Test
   public void testSelect3() throws IOException {
-    String sql = FileUtil.readTextFile(new File("src/test/resources/queries/default/select_3.sql"));
+    String sql = FileUtil.readTextFileFromResource("queries/default/select_3.sql");
     parseQuery(sql);
   }
 
   @Test
   public void testSelect4() throws IOException {
-    String sql = FileUtil.readTextFile(new File("src/test/resources/queries/default/select_4.sql"));
+    String sql = FileUtil.readTextFileFromResource("queries/default/select_4.sql");
     parseQuery(sql);
   }
 
   @Test
   public void testSelect5() throws IOException {
-    String sql = FileUtil.readTextFile(new File("src/test/resources/queries/default/select_5.sql"));
+    String sql = FileUtil.readTextFileFromResource("queries/default/select_5.sql");
     parseQuery(sql);
   }
 
   @Test
   public void testAsterisk1() throws IOException {
-    String sql = FileUtil.readTextFile(new File("src/test/resources/queries/default/asterisk_1.sql"));
+    String sql = FileUtil.readTextFileFromResource("queries/default/asterisk_1.sql");
     parseQuery(sql);
   }
 
   @Test
   public void testAsterisk2() throws IOException {
-    String sql = FileUtil.readTextFile(new File("src/test/resources/queries/default/asterisk_2.sql"));
+    String sql = FileUtil.readTextFileFromResource("queries/default/asterisk_2.sql");
     parseQuery(sql);
   }
 
   @Test
   public void testAsterisk3() throws IOException {
-    String sql = FileUtil.readTextFile(new File("src/test/resources/queries/default/asterisk_3.sql"));
+    String sql = FileUtil.readTextFileFromResource("queries/default/asterisk_3.sql");
     parseQuery(sql);
   }
 
   @Test
   public void testAsterisk4() throws IOException {
-    String sql = FileUtil.readTextFile(new File("src/test/resources/queries/default/asterisk_4.sql"));
+    String sql = FileUtil.readTextFileFromResource("queries/default/asterisk_4.sql");
     parseQuery(sql);
   }
 
   @Test
   public void testGroupby1() throws IOException {
-    String sql = FileUtil.readTextFile(new File("src/test/resources/queries/default/groupby_1.sql"));
+    String sql = FileUtil.readTextFileFromResource("queries/default/groupby_1.sql");
     parseQuery(sql);
   }
 
   @Test
   public void testJoin1() throws IOException {
-    String sql = FileUtil.readTextFile(new File("src/test/resources/queries/default/join_1.sql"));
+    String sql = FileUtil.readTextFileFromResource("queries/default/join_1.sql");
     parseQuery(sql);
   }
 
   @Test
   public void testJoin2() throws IOException {
-    String sql = FileUtil.readTextFile(new File("src/test/resources/queries/default/join_2.sql"));
+    String sql = FileUtil.readTextFileFromResource("queries/default/join_2.sql");
     parseQuery(sql);
   }
 
   @Test
   public void testJoin3() throws IOException {
-    String sql = FileUtil.readTextFile(new File("src/test/resources/queries/default/join_3.sql"));
+    String sql = FileUtil.readTextFileFromResource("queries/default/join_3.sql");
     parseQuery(sql);
   }
 
   @Test
   public void testJoin4() throws IOException {
-    String sql = FileUtil.readTextFile(new File("src/test/resources/queries/default/join_4.sql"));
+    String sql = FileUtil.readTextFileFromResource("queries/default/join_4.sql");
     parseQuery(sql);
   }
 
   @Test
   public void testJoin5() throws IOException {
-    String sql = FileUtil.readTextFile(new File("src/test/resources/queries/default/join_5.sql"));
+    String sql = FileUtil.readTextFileFromResource("queries/default/join_5.sql");
     parseQuery(sql);
   }
 
   @Test
   public void testJoin6() throws IOException {
-    String sql = FileUtil.readTextFile(new File("src/test/resources/queries/default/join_6.sql"));
+    String sql = FileUtil.readTextFileFromResource("queries/default/join_6.sql");
     parseQuery(sql);
   }
 
   @Test
   public void testJoin7() throws IOException {
-    String sql = FileUtil.readTextFile(new File("src/test/resources/queries/default/join_7.sql"));
+    String sql = FileUtil.readTextFileFromResource("queries/default/join_7.sql");
     parseQuery(sql);
   }
 
   @Test
   public void testJoin8() throws IOException {
-    String sql = FileUtil.readTextFile(new File("src/test/resources/queries/default/join_8.sql"));
+    String sql = FileUtil.readTextFileFromResource("queries/default/join_8.sql");
     parseQuery(sql);
   }
 
   @Test
   public void testJoin9() throws IOException {
-    String sql = FileUtil.readTextFile(new File("src/test/resources/queries/default/join_9.sql"));
+    String sql = FileUtil.readTextFileFromResource("queries/default/join_9.sql");
     parseQuery(sql);
   }
 
   @Test
   public void testJoin10() throws IOException {
-    String sql = FileUtil.readTextFile(new File("src/test/resources/queries/default/join_10.sql"));
+    String sql = FileUtil.readTextFileFromResource("queries/default/join_10.sql");
     parseQuery(sql);
   }
 
   @Test
   public void testJoin11() throws IOException {
-    String sql = FileUtil.readTextFile(new File("src/test/resources/queries/default/join_11.sql"));
+    String sql = FileUtil.readTextFileFromResource("queries/default/join_11.sql");
     parseQuery(sql);
   }
 
   @Test
   public void testSet1() throws IOException {
-    String sql = FileUtil.readTextFile(new File("src/test/resources/queries/default/set_1.sql"));
+    String sql = FileUtil.readTextFileFromResource("queries/default/set_1.sql");
     parseQuery(sql);
   }
 
   @Test
   public void testSet2() throws IOException {
-    String sql = FileUtil.readTextFile(new File("src/test/resources/queries/default/set_2.sql"));
+    String sql = FileUtil.readTextFileFromResource("queries/default/set_2.sql");
     parseQuery(sql);
   }
 
   @Test
   public void testSet3() throws IOException {
-    String sql = FileUtil.readTextFile(new File("src/test/resources/queries/default/set_3.sql"));
+    String sql = FileUtil.readTextFileFromResource("queries/default/set_3.sql");
     parseQuery(sql);
   }
 
   @Test
   public void testSet4() throws IOException {
-    String sql = FileUtil.readTextFile(new File("src/test/resources/queries/default/set_4.sql"));
+    String sql = FileUtil.readTextFileFromResource("queries/default/set_4.sql");
     parseQuery(sql);
   }
 
   @Test
   public void testDropTable() throws IOException {
-    String sql = FileUtil.readTextFile(new File("src/test/resources/queries/default/drop_table.sql"));
+    String sql = FileUtil.readTextFileFromResource("queries/default/drop_table.sql");
     parseQuery(sql);
   }
 
   @Test
   public void testCreateTable1() throws IOException {
-    String sql = FileUtil.readTextFile(new File("src/test/resources/queries/default/create_table_1.sql"));
+    String sql = FileUtil.readTextFileFromResource("queries/default/create_table_1.sql");
     parseQuery(sql);
   }
 
   @Test
   public void testCreateTable2() throws IOException {
-    String sql = FileUtil.readTextFile(new File("src/test/resources/queries/default/create_table_2.sql"));
+    String sql = FileUtil.readTextFileFromResource("queries/default/create_table_2.sql");
     parseQuery(sql);
   }
 
   @Test
   public void testCreateTable3() throws IOException {
-    String sql = FileUtil.readTextFile(new File("src/test/resources/queries/default/create_table_3.sql"));
+    String sql = FileUtil.readTextFileFromResource("queries/default/create_table_3.sql");
     parseQuery(sql);
   }
 
   @Test
   public void testCreateTable4() throws IOException {
-    String sql = FileUtil.readTextFile(new File("src/test/resources/queries/default/create_table_4.sql"));
+    String sql = FileUtil.readTextFileFromResource("queries/default/create_table_4.sql");
     parseQuery(sql);
   }
 
   @Test
   public void testCreateTable5() throws IOException {
-    String sql = FileUtil.readTextFile(new File("src/test/resources/queries/default/create_table_5.sql"));
+    String sql = FileUtil.readTextFileFromResource("queries/default/create_table_5.sql");
     parseQuery(sql);
   }
 
   @Test
   public void testCreateTable6() throws IOException {
-    String sql = FileUtil.readTextFile(new File("src/test/resources/queries/default/create_table_6.sql"));
+    String sql = FileUtil.readTextFileFromResource("queries/default/create_table_6.sql");
     parseQuery(sql);
   }
 
   @Test
   public void testCreateTable7() throws IOException {
-    String sql = FileUtil.readTextFile(new File("src/test/resources/queries/default/create_table_7.sql"));
+    String sql = FileUtil.readTextFileFromResource("queries/default/create_table_7.sql");
     parseQuery(sql);
   }
 
   @Test
   public void testCreateTable8() throws IOException {
-    String sql = FileUtil.readTextFile(new File("src/test/resources/queries/default/create_table_8.sql"));
+    String sql = FileUtil.readTextFileFromResource("queries/default/create_table_8.sql");
     parseQuery(sql);
   }
 
   @Test
   public void testCreateTable9() throws IOException {
-    String sql = FileUtil.readTextFile(new File("src/test/resources/queries/default/create_table_9.sql"));
+    String sql = FileUtil.readTextFileFromResource("queries/default/create_table_9.sql");
     parseQuery(sql);
   }
 
   @Test
   public void testCreateTable10() throws IOException {
-    String sql = FileUtil.readTextFile(new File("src/test/resources/queries/default/create_table_10.sql"));
+    String sql = FileUtil.readTextFileFromResource("queries/default/create_table_10.sql");
     parseQuery(sql);
   }
 
   @Test
   public void testCreateTableLike1() throws IOException {
-    String sql = FileUtil.readTextFile(new File("src/test/resources/queries/default/create_table_like_1.sql"));
+    String sql = FileUtil.readTextFileFromResource("queries/default/create_table_like_1.sql");
     Expr expr = parseQuery(sql);
     assertEquals(OpType.CreateTable, expr.getType());
     CreateTable createTable = (CreateTable) expr;
@@ -288,7 +285,7 @@ public class TestSQLAnalyzer {
 
   @Test
   public void testCreateTablePartitionByHash1() throws IOException {
-    String sql = FileUtil.readTextFile(new File("src/test/resources/queries/default/create_table_partition_by_hash_1.sql"));
+    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;
@@ -301,7 +298,7 @@ public class TestSQLAnalyzer {
 
   @Test
   public void testCreateTablePartitionByHash2() throws IOException {
-    String sql = FileUtil.readTextFile(new File("src/test/resources/queries/default/create_table_partition_by_hash_2.sql"));
+    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;
@@ -315,7 +312,7 @@ public class TestSQLAnalyzer {
 
   @Test
   public void testCreateTablePartitionByRange() throws IOException {
-    String sql = FileUtil.readTextFile(new File("src/test/resources/queries/default/create_table_partition_by_range.sql"));
+    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;
@@ -328,7 +325,7 @@ public class TestSQLAnalyzer {
 
   @Test
   public void testCreateTablePartitionByList() throws IOException {
-    String sql = FileUtil.readTextFile(new File("src/test/resources/queries/default/create_table_partition_by_list.sql"));
+    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;
@@ -353,7 +350,7 @@ public class TestSQLAnalyzer {
 
   @Test
   public void testCreateTablePartitionByColumn() throws IOException {
-    String sql = FileUtil.readTextFile(new File("src/test/resources/queries/default/create_table_partition_by_column.sql"));
+    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;
@@ -367,74 +364,195 @@ public class TestSQLAnalyzer {
   }
 
   @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());
+  }
+
+  @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");
+  }
+
+  @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");
+  }
+
+  @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());
+  }
+
+  @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());
+  }
+
+  @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());
+  }
+
+  @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());
+  }
+
+  @Test
   public void testTableSubQuery1() throws IOException {
-    String sql = FileUtil.readTextFile(new File("src/test/resources/queries/default/table_subquery1.sql"));
+    String sql = FileUtil.readTextFileFromResource("queries/default/table_subquery1.sql");
     parseQuery(sql);
   }
 
   @Test
   public void testTableSubQuery2() throws IOException {
-    String sql = FileUtil.readTextFile(new File("src/test/resources/queries/default/table_subquery2.sql"));
+    String sql = FileUtil.readTextFileFromResource("queries/default/table_subquery2.sql");
     parseQuery(sql);
   }
 
   @Test
   public void testInSubquery1() throws IOException {
-    String sql = FileUtil.readTextFile(new File("src/test/resources/queries/default/in_subquery_1.sql"));
+    String sql = FileUtil.readTextFileFromResource("queries/default/in_subquery_1.sql");
     parseQuery(sql);
   }
 
   @Test
   public void testInSubquery2() throws IOException {
-    String sql = FileUtil.readTextFile(new File("src/test/resources/queries/default/in_subquery_2.sql"));
+    String sql = FileUtil.readTextFileFromResource("queries/default/in_subquery_2.sql");
     parseQuery(sql);
   }
 
   @Test
   public void testExistsPredicate1() throws IOException {
-    String sql = FileUtil.readTextFile(new File("src/test/resources/queries/default/exists_predicate_1.sql"));
+    String sql = FileUtil.readTextFileFromResource("queries/default/exists_predicate_1.sql");
     parseQuery(sql);
   }
 
   @Test
   public void testExistsPredicate2() throws IOException {
-    String sql = FileUtil.readTextFile(new File("src/test/resources/queries/default/exists_predicate_2.sql"));
+    String sql = FileUtil.readTextFileFromResource("queries/default/exists_predicate_2.sql");
     parseQuery(sql);
   }
 
   @Test
   public void testInsertIntoTable() throws IOException {
-    String sql = FileUtil.readTextFile(new File("src/test/resources/queries/default/insert_into_select_1.sql"));
+    String sql = FileUtil.readTextFileFromResource("queries/default/insert_into_select_1.sql");
     parseQuery(sql);
   }
 
   @Test
   public void testInsertIntoLocation() throws IOException {
-    String sql = FileUtil.readTextFile(new File("src/test/resources/queries/default/insert_into_select_2.sql"));
+    String sql = FileUtil.readTextFileFromResource("queries/default/insert_into_select_2.sql");
     parseQuery(sql);
   }
 
   @Test
   public void testInsertIntoTable2() throws IOException {
-    String sql = FileUtil.readTextFile(new File("src/test/resources/queries/default/insert_into_select_3.sql"));
+    String sql = FileUtil.readTextFileFromResource("queries/default/insert_into_select_3.sql");
     parseQuery(sql);
   }
 
   @Test
   public void testInsertOverwriteIntoTable() throws IOException {
-    String sql = FileUtil.readTextFile(new File("src/test/resources/queries/default/insert_overwrite_into_select_1.sql"));
+    String sql = FileUtil.readTextFileFromResource("queries/default/insert_overwrite_into_select_1.sql");
     parseQuery(sql);
   }
 
   @Test
   public void testInsertOverwriteIntoLocation() throws IOException {
-    String sql = FileUtil.readTextFile(new File("src/test/resources/queries/default/insert_overwrite_into_select_2.sql"));
+    String sql = FileUtil.readTextFileFromResource("queries/default/insert_overwrite_into_select_2.sql");
     parseQuery(sql);
   }
 
   @Test
   public void testInsertOverwriteIntoTable2() throws IOException {
-    String sql = FileUtil.readTextFile(new File("src/test/resources/queries/default/insert_overwrite_into_select_3.sql"));
+    String sql = FileUtil.readTextFileFromResource("queries/default/insert_overwrite_into_select_3.sql");
     parseQuery(sql);
   }
 

http://git-wip-us.apache.org/repos/asf/tajo/blob/3f336f50/tajo-core/src/test/java/org/apache/tajo/jdbc/TestTajoJdbc.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/java/org/apache/tajo/jdbc/TestTajoJdbc.java b/tajo-core/src/test/java/org/apache/tajo/jdbc/TestTajoJdbc.java
index 1c763e2..db6192c 100644
--- a/tajo-core/src/test/java/org/apache/tajo/jdbc/TestTajoJdbc.java
+++ b/tajo-core/src/test/java/org/apache/tajo/jdbc/TestTajoJdbc.java
@@ -593,4 +593,46 @@ public class TestTajoJdbc extends QueryTestCaseBase {
       }
     }
   }
+
+
+  @Test
+  public void testAlterTableAddPartition() throws Exception {
+    Statement stmt = null;
+    ResultSet resultSet = null;
+    int retCode = 0;
+    Connection conn = null;
+    int result;
+    String errorMessage = null;
+
+    // skip this test if catalog uses HCatalogStore.
+    // It is because HCatalogStore does not support Time data type.
+    try {
+      if (!testingCluster.isHCatalogStoreRunning()) {
+        String connUri = buildConnectionUri(tajoMasterAddress.getHostName(), tajoMasterAddress.getPort(),
+          DEFAULT_DATABASE_NAME);
+        conn = DriverManager.getConnection(connUri);
+        assertTrue(conn.isValid(100));
+
+        String tableName = CatalogUtil.normalizeIdentifier("testAlterTablePartition");
+        resultSet = executeString(
+          "create table " + tableName + " (col1 int4, col2 int4) partition by column(key float8) ");
+        resultSet.close();
+
+        stmt = conn.createStatement();
+        resultSet = stmt.executeQuery("alter table " + tableName + " add partition (key = 0.1)");
+      }
+    } catch (SQLException e) {
+      errorMessage = e.getMessage();
+    } finally {
+      assertEquals(errorMessage, "ADD_PARTITION is not supported yet\n");
+      cleanupQuery(resultSet);
+      if (stmt != null) {
+        stmt.close();
+      }
+
+      if(conn != null) {
+        conn.close();
+      }
+    }
+  }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tajo/blob/3f336f50/tajo-core/src/test/resources/queries/default/alter_table_add_partition_1.sql
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/queries/default/alter_table_add_partition_1.sql b/tajo-core/src/test/resources/queries/default/alter_table_add_partition_1.sql
new file mode 100644
index 0000000..0f91b68
--- /dev/null
+++ b/tajo-core/src/test/resources/queries/default/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/3f336f50/tajo-core/src/test/resources/queries/default/alter_table_add_partition_2.sql
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/queries/default/alter_table_add_partition_2.sql b/tajo-core/src/test/resources/queries/default/alter_table_add_partition_2.sql
new file mode 100644
index 0000000..ee4df75
--- /dev/null
+++ b/tajo-core/src/test/resources/queries/default/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/3f336f50/tajo-core/src/test/resources/queries/default/alter_table_add_partition_3.sql
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/queries/default/alter_table_add_partition_3.sql b/tajo-core/src/test/resources/queries/default/alter_table_add_partition_3.sql
new file mode 100644
index 0000000..79d1426
--- /dev/null
+++ b/tajo-core/src/test/resources/queries/default/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/3f336f50/tajo-core/src/test/resources/queries/default/alter_table_add_partition_4.sql
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/queries/default/alter_table_add_partition_4.sql b/tajo-core/src/test/resources/queries/default/alter_table_add_partition_4.sql
new file mode 100644
index 0000000..bc22a14
--- /dev/null
+++ b/tajo-core/src/test/resources/queries/default/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/3f336f50/tajo-core/src/test/resources/queries/default/alter_table_drop_partition_1.sql
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/queries/default/alter_table_drop_partition_1.sql b/tajo-core/src/test/resources/queries/default/alter_table_drop_partition_1.sql
new file mode 100644
index 0000000..6e2ad7c
--- /dev/null
+++ b/tajo-core/src/test/resources/queries/default/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/3f336f50/tajo-core/src/test/resources/queries/default/alter_table_drop_partition_2.sql
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/queries/default/alter_table_drop_partition_2.sql b/tajo-core/src/test/resources/queries/default/alter_table_drop_partition_2.sql
new file mode 100644
index 0000000..5752710
--- /dev/null
+++ b/tajo-core/src/test/resources/queries/default/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/3f336f50/tajo-core/src/test/resources/queries/default/alter_table_drop_partition_3.sql
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/queries/default/alter_table_drop_partition_3.sql b/tajo-core/src/test/resources/queries/default/alter_table_drop_partition_3.sql
new file mode 100644
index 0000000..1942e16
--- /dev/null
+++ b/tajo-core/src/test/resources/queries/default/alter_table_drop_partition_3.sql
@@ -0,0 +1 @@
+ALTER TABLE table1 DROP PARTITION (col1 = 'TAJO' )
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tajo/blob/3f336f50/tajo-core/src/test/resources/results/TestTajoCli/testAlterTableAddPartition.result
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestTajoCli/testAlterTableAddPartition.result b/tajo-core/src/test/resources/results/TestTajoCli/testAlterTableAddPartition.result
new file mode 100644
index 0000000..31f46bc
--- /dev/null
+++ b/tajo-core/src/test/resources/results/TestTajoCli/testAlterTableAddPartition.result
@@ -0,0 +1,2 @@
+OK
+ERROR: ADD_PARTITION is not supported yet
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tajo/blob/3f336f50/tajo-core/src/test/resources/results/TestTajoCli/testAlterTableDropPartition.result
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/results/TestTajoCli/testAlterTableDropPartition.result b/tajo-core/src/test/resources/results/TestTajoCli/testAlterTableDropPartition.result
new file mode 100644
index 0000000..1fadcea
--- /dev/null
+++ b/tajo-core/src/test/resources/results/TestTajoCli/testAlterTableDropPartition.result
@@ -0,0 +1,2 @@
+OK
+ERROR: DROP_PARTITION is not supported yet
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tajo/blob/3f336f50/tajo-plan/src/main/java/org/apache/tajo/plan/verifier/PreLogicalPlanVerifier.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/verifier/PreLogicalPlanVerifier.java b/tajo-plan/src/main/java/org/apache/tajo/plan/verifier/PreLogicalPlanVerifier.java
index c184fff..25452de 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/verifier/PreLogicalPlanVerifier.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/verifier/PreLogicalPlanVerifier.java
@@ -334,4 +334,16 @@ public class PreLogicalPlanVerifier extends BaseAlgebraVisitor<PreLogicalPlanVer
 
     return expr;
   }
+
+  @Override
+  public Expr visitAlterTable(Context context, Stack<Expr> stack, AlterTable expr) throws PlanningException {
+    super.visitAlterTable(context, stack, expr);
+
+    if (expr.getAlterTableOpType() == AlterTableOpType.ADD_PARTITION
+      || expr.getAlterTableOpType() == AlterTableOpType.DROP_PARTITION) {
+      context.state.addVerification(expr.getAlterTableOpType().name() + " is not supported yet");
+    }
+
+    return expr;
+  }
 }