http://git-wip-us.apache.org/repos/asf/tajo/blob/49367117/tajo-plan/src/main/java/org/apache/tajo/plan/rewrite/rules/LogicalPlanEqualityTester.java
----------------------------------------------------------------------
diff --cc 
tajo-plan/src/main/java/org/apache/tajo/plan/rewrite/rules/LogicalPlanEqualityTester.java
index 89efdc8,afe0c4d..c35194e
--- 
a/tajo-plan/src/main/java/org/apache/tajo/plan/rewrite/rules/LogicalPlanEqualityTester.java
+++ 
b/tajo-plan/src/main/java/org/apache/tajo/plan/rewrite/rules/LogicalPlanEqualityTester.java
@@@ -18,11 -18,11 +18,11 @@@
  
  package org.apache.tajo.plan.rewrite.rules;
  
 -import org.apache.tajo.OverridableConf;
+ import org.apache.tajo.exception.TajoException;
  import org.apache.tajo.plan.LogicalPlan;
- import org.apache.tajo.plan.PlanningException;
  import org.apache.tajo.plan.logical.LogicalNode;
  import org.apache.tajo.plan.rewrite.LogicalPlanRewriteRule;
 +import org.apache.tajo.plan.rewrite.LogicalPlanRewriteRuleContext;
  import org.apache.tajo.plan.serder.LogicalNodeDeserializer;
  import org.apache.tajo.plan.serder.LogicalNodeSerializer;
  import org.apache.tajo.plan.serder.PlanProto;
@@@ -45,11 -45,10 +45,11 @@@ public class LogicalPlanEqualityTester 
    }
  
    @Override
-   public LogicalPlan rewrite(LogicalPlanRewriteRuleContext context) throws 
PlanningException {
 -  public LogicalPlan rewrite(OverridableConf queryContext, LogicalPlan plan) 
throws TajoException {
++  public LogicalPlan rewrite(LogicalPlanRewriteRuleContext context) throws 
TajoException {
 +    LogicalPlan plan = context.getPlan();
      LogicalNode root = plan.getRootBlock().getRoot();
      PlanProto.LogicalNodeTree serialized = 
LogicalNodeSerializer.serialize(plan.getRootBlock().getRoot());
 -    LogicalNode deserialized = 
LogicalNodeDeserializer.deserialize(queryContext, null, serialized);
 +    LogicalNode deserialized = 
LogicalNodeDeserializer.deserialize(context.getQueryContext(), null, 
serialized);
      assert root.deepEquals(deserialized);
      return plan;
    }

http://git-wip-us.apache.org/repos/asf/tajo/blob/49367117/tajo-plan/src/main/java/org/apache/tajo/plan/rewrite/rules/PartitionedTableRewriter.java
----------------------------------------------------------------------
diff --cc 
tajo-plan/src/main/java/org/apache/tajo/plan/rewrite/rules/PartitionedTableRewriter.java
index d200923,71b9fd7..244d385
--- 
a/tajo-plan/src/main/java/org/apache/tajo/plan/rewrite/rules/PartitionedTableRewriter.java
+++ 
b/tajo-plan/src/main/java/org/apache/tajo/plan/rewrite/rules/PartitionedTableRewriter.java
@@@ -30,13 -30,13 +30,14 @@@ import org.apache.tajo.catalog.TableDes
  import org.apache.tajo.catalog.partition.PartitionMethodDesc;
  import org.apache.tajo.datum.DatumFactory;
  import org.apache.tajo.datum.NullDatum;
+ import org.apache.tajo.exception.TajoException;
+ import org.apache.tajo.exception.TajoInternalError;
  import org.apache.tajo.plan.LogicalPlan;
+ import org.apache.tajo.plan.expr.*;
+ import org.apache.tajo.plan.logical.*;
  import org.apache.tajo.plan.rewrite.LogicalPlanRewriteRule;
 +import org.apache.tajo.plan.rewrite.LogicalPlanRewriteRuleContext;
  import org.apache.tajo.plan.util.PlannerUtil;
- import org.apache.tajo.plan.PlanningException;
- import org.apache.tajo.plan.expr.*;
- import org.apache.tajo.plan.logical.*;
  import org.apache.tajo.plan.visitor.BasicLogicalPlanVisitor;
  import org.apache.tajo.storage.Tuple;
  import org.apache.tajo.storage.VTuple;
@@@ -74,10 -74,9 +75,10 @@@ public class PartitionedTableRewriter i
    }
  
    @Override
-   public LogicalPlan rewrite(LogicalPlanRewriteRuleContext context) throws 
PlanningException {
 -  public LogicalPlan rewrite(OverridableConf queryContext, LogicalPlan plan) 
throws TajoException {
++  public LogicalPlan rewrite(LogicalPlanRewriteRuleContext context) throws 
TajoException {
 +    LogicalPlan plan = context.getPlan();
      LogicalPlan.QueryBlock rootBlock = plan.getRootBlock();
 -    rewriter.visit(queryContext, plan, rootBlock, rootBlock.getRoot(), new 
Stack<LogicalNode>());
 +    rewriter.visit(context.getQueryContext(), plan, rootBlock, 
rootBlock.getRoot(), new Stack<LogicalNode>());
      return plan;
    }
  

http://git-wip-us.apache.org/repos/asf/tajo/blob/49367117/tajo-plan/src/main/java/org/apache/tajo/plan/rewrite/rules/ProjectionPushDownRule.java
----------------------------------------------------------------------
diff --cc 
tajo-plan/src/main/java/org/apache/tajo/plan/rewrite/rules/ProjectionPushDownRule.java
index 9d8b81a,650a484..78a5dad
--- 
a/tajo-plan/src/main/java/org/apache/tajo/plan/rewrite/rules/ProjectionPushDownRule.java
+++ 
b/tajo-plan/src/main/java/org/apache/tajo/plan/rewrite/rules/ProjectionPushDownRule.java
@@@ -31,9 -37,7 +37,8 @@@ import org.apache.tajo.plan.Target
  import org.apache.tajo.plan.expr.*;
  import org.apache.tajo.plan.logical.*;
  import org.apache.tajo.plan.rewrite.LogicalPlanRewriteRule;
 +import org.apache.tajo.plan.rewrite.LogicalPlanRewriteRuleContext;
  import org.apache.tajo.plan.util.PlannerUtil;
- import org.apache.tajo.catalog.SchemaUtil;
  import org.apache.tajo.plan.visitor.BasicLogicalPlanVisitor;
  import org.apache.tajo.util.TUtil;
  
@@@ -72,8 -76,7 +77,8 @@@ public class ProjectionPushDownRule ext
    }
  
    @Override
-   public LogicalPlan rewrite(LogicalPlanRewriteRuleContext 
rewriteRuleContext) throws PlanningException {
 -  public LogicalPlan rewrite(OverridableConf queryContext, LogicalPlan plan) 
throws TajoException {
++  public LogicalPlan rewrite(LogicalPlanRewriteRuleContext 
rewriteRuleContext) throws TajoException {
 +    LogicalPlan plan = rewriteRuleContext.getPlan();
      LogicalPlan.QueryBlock rootBlock = plan.getRootBlock();
  
      LogicalPlan.QueryBlock topmostBlock = rootBlock;
@@@ -521,13 -524,8 +526,13 @@@
            createTableNode.setChild(child);
            createTableNode.setInSchema(child.getOutSchema());
            break;
 +        case CREATE_INDEX:
 +          CreateIndexNode createIndexNode = (CreateIndexNode) parentNode;
 +          createIndexNode.setChild(child);
 +          createIndexNode.setInSchema(child.getOutSchema());
 +          break;
          default:
-           throw new PlanningException("Unexpected Parent Node: " + 
parentNode.getType());
+           throw new TajoInternalError("unexpected parent node: " + 
parentNode.getType());
          }
          plan.addHistory("ProjectionNode is eliminated.");
        }
@@@ -1113,14 -1111,8 +1118,14 @@@
    }
  
    @Override
 +  public LogicalNode visitIndexScan(Context context, LogicalPlan plan, 
LogicalPlan.QueryBlock block,
-                                     IndexScanNode node, Stack<LogicalNode> 
stack) throws PlanningException {
++                                    IndexScanNode node, Stack<LogicalNode> 
stack) throws TajoException {
 +    return visitScan(context, plan, block,node, stack);
 +  }
 +
 +  @Override
    public LogicalNode visitTableSubQuery(Context upperContext, LogicalPlan 
plan, LogicalPlan.QueryBlock block,
-                                    TableSubQueryNode node, Stack<LogicalNode> 
stack) throws PlanningException {
+                                    TableSubQueryNode node, Stack<LogicalNode> 
stack) throws TajoException {
      Context childContext = new Context(plan, upperContext.requiredSet);
      stack.push(node);
      LogicalNode child = super.visitTableSubQuery(childContext, plan, block, 
node, stack);

http://git-wip-us.apache.org/repos/asf/tajo/blob/49367117/tajo-plan/src/main/java/org/apache/tajo/plan/serder/LogicalNodeSerializer.java
----------------------------------------------------------------------
diff --cc 
tajo-plan/src/main/java/org/apache/tajo/plan/serder/LogicalNodeSerializer.java
index dd69e3a,0207932..fe69fc1
--- 
a/tajo-plan/src/main/java/org/apache/tajo/plan/serder/LogicalNodeSerializer.java
+++ 
b/tajo-plan/src/main/java/org/apache/tajo/plan/serder/LogicalNodeSerializer.java
@@@ -21,15 -21,13 +21,16 @@@ package org.apache.tajo.plan.serder
  import com.google.common.collect.Maps;
  import org.apache.hadoop.fs.Path;
  import org.apache.tajo.algebra.JoinType;
 +import org.apache.tajo.catalog.SortSpec;
  import org.apache.tajo.catalog.proto.CatalogProtos;
 +import org.apache.tajo.catalog.proto.CatalogProtos.SortSpecProto;
+ import org.apache.tajo.exception.TajoException;
+ import org.apache.tajo.exception.TajoInternalError;
  import org.apache.tajo.exception.UnimplementedException;
  import org.apache.tajo.plan.LogicalPlan;
- import org.apache.tajo.plan.PlanningException;
  import org.apache.tajo.plan.Target;
  import org.apache.tajo.plan.logical.*;
 +import org.apache.tajo.plan.rewrite.rules.IndexScanInfo.SimplePredicate;
  import org.apache.tajo.plan.serder.PlanProto.AlterTableNode.AddColumn;
  import org.apache.tajo.plan.serder.PlanProto.AlterTableNode.RenameColumn;
  import org.apache.tajo.plan.serder.PlanProto.AlterTableNode.RenameTable;
@@@ -107,9 -105,8 +108,9 @@@ public class LogicalNodeSerializer exte
      private LogicalNodeTree.Builder treeBuilder = 
LogicalNodeTree.newBuilder();
    }
  
 +  @Override
    public LogicalNode visitRoot(SerializeContext context, LogicalPlan plan, 
LogicalPlan.QueryBlock block,
-                                LogicalRootNode root, Stack<LogicalNode> 
stack) throws PlanningException {
+                                LogicalRootNode root, Stack<LogicalNode> 
stack) throws TajoException {
      super.visitRoot(context, plan, block, root, stack);
  
      int [] childIds = registerGetChildIds(context, root);
@@@ -142,9 -139,8 +143,9 @@@
      return node;
    }
  
 +  @Override
    public LogicalNode visitEvalExpr(SerializeContext context, LogicalPlan 
plan, LogicalPlan.QueryBlock block,
-                                    EvalExprNode exprEval, Stack<LogicalNode> 
stack) throws PlanningException {
+                                    EvalExprNode exprEval, Stack<LogicalNode> 
stack) throws TajoException {
      PlanProto.EvalExprNode.Builder exprEvalBuilder = 
PlanProto.EvalExprNode.newBuilder();
      exprEvalBuilder.addAllTargets(
          ProtoUtil.<PlanProto.Target>toProtoObjects(exprEval.getTargets()));
@@@ -156,9 -152,8 +157,9 @@@
      return exprEval;
    }
  
 +  @Override
    public LogicalNode visitProjection(SerializeContext context, LogicalPlan 
plan, LogicalPlan.QueryBlock block,
-                                      ProjectionNode projection, 
Stack<LogicalNode> stack) throws PlanningException {
+                                      ProjectionNode projection, 
Stack<LogicalNode> stack) throws TajoException {
      super.visitProjection(context, plan, block, projection, stack);
  
      int [] childIds = registerGetChildIds(context, projection);
@@@ -194,9 -189,8 +195,9 @@@
      return limit;
    }
  
 +  @Override
    public LogicalNode visitWindowAgg(SerializeContext context, LogicalPlan 
plan, LogicalPlan.QueryBlock block,
-                                     WindowAggNode windowAgg, 
Stack<LogicalNode> stack) throws PlanningException {
+                                     WindowAggNode windowAgg, 
Stack<LogicalNode> stack) throws TajoException {
      super.visitWindowAgg(context, plan, block, windowAgg, stack);
  
      int [] childIds = registerGetChildIds(context, windowAgg);
@@@ -269,9 -263,8 +270,9 @@@
      return having;
    }
  
 +  @Override
    public LogicalNode visitGroupBy(SerializeContext context, LogicalPlan plan, 
LogicalPlan.QueryBlock block,
-                                   GroupbyNode node, Stack<LogicalNode> stack) 
throws PlanningException {
+                                   GroupbyNode node, Stack<LogicalNode> stack) 
throws TajoException {
      super.visitGroupBy(context, plan, block, node, new Stack<LogicalNode>());
  
      PlanProto.LogicalNode.Builder nodeBuilder = buildGroupby(context, node);
@@@ -305,9 -298,8 +306,9 @@@
      return nodeBuilder;
    }
  
 +  @Override
    public LogicalNode visitDistinctGroupby(SerializeContext context, 
LogicalPlan plan, LogicalPlan.QueryBlock block,
-                                           DistinctGroupbyNode node, 
Stack<LogicalNode> stack) throws PlanningException {
+                                           DistinctGroupbyNode node, 
Stack<LogicalNode> stack) throws TajoException {
      super.visitDistinctGroupby(context, plan, block, node, new 
Stack<LogicalNode>());
  
      int [] childIds = registerGetChildIds(context, node);
@@@ -362,9 -354,8 +363,9 @@@
      return filter;
    }
  
 +  @Override
    public LogicalNode visitJoin(SerializeContext context, LogicalPlan plan, 
LogicalPlan.QueryBlock block, JoinNode join,
-                           Stack<LogicalNode> stack) throws PlanningException {
+                           Stack<LogicalNode> stack) throws TajoException {
      super.visitJoin(context, plan, block, join, stack);
  
      int [] childIds = registerGetChildIds(context, join);
@@@ -447,29 -438,9 +448,29 @@@
    }
  
    @Override
 +  public LogicalNode visitIndexScan(SerializeContext context, LogicalPlan 
plan, LogicalPlan.QueryBlock block,
-                                     IndexScanNode node, Stack<LogicalNode> 
stack) throws PlanningException {
++                                    IndexScanNode node, Stack<LogicalNode> 
stack) throws TajoException {
 +
 +    PlanProto.ScanNode.Builder scanBuilder = buildScanNode(node);
 +
 +    PlanProto.IndexScanSpec.Builder indexScanSpecBuilder = 
PlanProto.IndexScanSpec.newBuilder();
 +    indexScanSpecBuilder.setKeySchema(node.getKeySchema().getProto());
 +    indexScanSpecBuilder.setIndexPath(node.getIndexPath().toString());
 +    for (SimplePredicate predicate : node.getPredicates()) {
 +      indexScanSpecBuilder.addPredicates(predicate.getProto());
 +    }
 +
 +    PlanProto.LogicalNode.Builder nodeBuilder = createNodeBuilder(context, 
node);
 +    nodeBuilder.setScan(scanBuilder);
 +    nodeBuilder.setIndexScan(indexScanSpecBuilder);
 +    context.treeBuilder.addNodes(nodeBuilder);
 +    return node;
 +  }
 +
 +  @Override
    public LogicalNode visitPartitionedTableScan(SerializeContext context, 
LogicalPlan plan, LogicalPlan.QueryBlock block,
                                            PartitionedTableScanNode node, 
Stack<LogicalNode> stack)
-       throws PlanningException {
+       throws TajoException {
  
      PlanProto.ScanNode.Builder scanBuilder = buildScanNode(node);
  
@@@ -490,9 -461,8 +491,9 @@@
      return node;
    }
  
 +  @Override
    public LogicalNode visitTableSubQuery(SerializeContext context, LogicalPlan 
plan, LogicalPlan.QueryBlock block,
-                                    TableSubQueryNode node, Stack<LogicalNode> 
stack) throws PlanningException {
+                                    TableSubQueryNode node, Stack<LogicalNode> 
stack) throws TajoException {
      super.visitTableSubQuery(context, plan, block, node, stack);
  
      int [] childIds = registerGetChildIds(context, node);
@@@ -513,9 -483,8 +514,9 @@@
      return node;
    }
  
 +  @Override
    public LogicalNode visitCreateTable(SerializeContext context, LogicalPlan 
plan, LogicalPlan.QueryBlock block,
-                                       CreateTableNode node, 
Stack<LogicalNode> stack) throws PlanningException {
+                                       CreateTableNode node, 
Stack<LogicalNode> stack) throws TajoException {
      super.visitCreateTable(context, plan, block, node, stack);
      int [] childIds = registerGetChildIds(context, node);
  
@@@ -654,9 -623,8 +655,9 @@@
      return node;
    }
  
 +  @Override
    public LogicalNode visitInsert(SerializeContext context, LogicalPlan plan, 
LogicalPlan.QueryBlock block,
-                                  InsertNode node, Stack<LogicalNode> stack) 
throws PlanningException {
+                                  InsertNode node, Stack<LogicalNode> stack) 
throws TajoException {
      super.visitInsert(context, plan, block, node, stack);
  
      int [] childIds = registerGetChildIds(context, node);
@@@ -743,48 -711,6 +744,48 @@@
      return node;
    }
  
 +  @Override
 +  public LogicalNode visitCreateIndex(SerializeContext context, LogicalPlan 
plan, LogicalPlan.QueryBlock block,
-                                       CreateIndexNode node, 
Stack<LogicalNode> stack) throws PlanningException {
++                                      CreateIndexNode node, 
Stack<LogicalNode> stack) throws TajoException {
 +    super.visitCreateIndex(context, plan, block, node, new 
Stack<LogicalNode>());
 +
 +    PlanProto.CreateIndexNode.Builder createIndexBuilder = 
PlanProto.CreateIndexNode.newBuilder();
 +    int [] childIds = registerGetChildIds(context, node);
 +    createIndexBuilder.setChildSeq(childIds[0]);
 +    createIndexBuilder.setIndexName(node.getIndexName());
 +    createIndexBuilder.setIndexMethod(node.getIndexMethod());
 +    createIndexBuilder.setIndexPath(node.getIndexPath().toString());
 +    for (SortSpec sortSpec : node.getKeySortSpecs()) {
 +      createIndexBuilder.addKeySortSpecs(sortSpec.getProto());
 +    }
 +    
createIndexBuilder.setTargetRelationSchema(node.getTargetRelationSchema().getProto());
 +    createIndexBuilder.setIsUnique(node.isUnique());
 +    createIndexBuilder.setIsClustered(node.isClustered());
 +    if (node.hasOptions()) {
 +      createIndexBuilder.setIndexProperties(node.getOptions().getProto());
 +    }
 +    createIndexBuilder.setIsExternal(node.isExternal());
 +
 +    PlanProto.LogicalNode.Builder nodeBuilder = createNodeBuilder(context, 
node);
 +    nodeBuilder.setCreateIndex(createIndexBuilder);
 +    context.treeBuilder.addNodes(nodeBuilder);
 +
 +    return node;
 +  }
 +
 +  @Override
 +  public LogicalNode visitDropIndex(SerializeContext context, LogicalPlan 
plan, LogicalPlan.QueryBlock block,
 +                                    DropIndexNode node, Stack<LogicalNode> 
stack) {
 +    PlanProto.DropIndexNode.Builder dropIndexBuilder = 
PlanProto.DropIndexNode.newBuilder();
 +    dropIndexBuilder.setIndexName(node.getIndexName());
 +
 +    PlanProto.LogicalNode.Builder nodeBuilder = createNodeBuilder(context, 
node);
 +    nodeBuilder.setDropIndex(dropIndexBuilder);
 +    context.treeBuilder.addNodes(nodeBuilder);
 +
 +    return node;
 +  }
 +
    public static PlanProto.NodeType convertType(NodeType type) {
      return PlanProto.NodeType.valueOf(type.name());
    }

http://git-wip-us.apache.org/repos/asf/tajo/blob/49367117/tajo-plan/src/main/java/org/apache/tajo/plan/util/PlannerUtil.java
----------------------------------------------------------------------
diff --cc tajo-plan/src/main/java/org/apache/tajo/plan/util/PlannerUtil.java
index 3d9e53e,9c34826..c4a4367
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/util/PlannerUtil.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/util/PlannerUtil.java
@@@ -416,17 -383,9 +404,15 @@@ public class PlannerUtil 
  
      @Override
      public LogicalNode visitPartitionedTableScan(ReplacerContext context, 
LogicalPlan plan, LogicalPlan.
-         QueryBlock block, PartitionedTableScanNode node, Stack<LogicalNode> 
stack)
- 
-         throws PlanningException {
+         QueryBlock block, PartitionedTableScanNode node, Stack<LogicalNode> 
stack) {
        return node;
      }
 +
 +    @Override
 +    public LogicalNode visitIndexScan(ReplacerContext context, LogicalPlan 
plan, LogicalPlan.QueryBlock block,
-                                       IndexScanNode node, Stack<LogicalNode> 
stack) throws PlanningException {
++                                      IndexScanNode node, Stack<LogicalNode> 
stack) throws TajoException {
 +      return node;
 +    }
    }
  
    public static void replaceNode(LogicalNode plan, LogicalNode newNode, 
NodeType type) {

http://git-wip-us.apache.org/repos/asf/tajo/blob/49367117/tajo-plan/src/main/java/org/apache/tajo/plan/visitor/BasicLogicalPlanVisitor.java
----------------------------------------------------------------------
diff --cc 
tajo-plan/src/main/java/org/apache/tajo/plan/visitor/BasicLogicalPlanVisitor.java
index a8f0935,ebb5c80..2c8f344
--- 
a/tajo-plan/src/main/java/org/apache/tajo/plan/visitor/BasicLogicalPlanVisitor.java
+++ 
b/tajo-plan/src/main/java/org/apache/tajo/plan/visitor/BasicLogicalPlanVisitor.java
@@@ -18,8 -18,10 +18,9 @@@
  
  package org.apache.tajo.plan.visitor;
  
+ import org.apache.tajo.exception.TajoException;
+ import org.apache.tajo.exception.TajoInternalError;
  import org.apache.tajo.plan.LogicalPlan;
--import org.apache.tajo.plan.PlanningException;
  import org.apache.tajo.plan.logical.*;
  
  import java.util.Stack;
@@@ -144,11 -140,8 +145,11 @@@ public class BasicLogicalPlanVisitor<CO
        case TRUNCATE_TABLE:
          current = visitTruncateTable(context, plan, block, 
(TruncateTableNode) node, stack);
          break;
 +      case DROP_INDEX:
 +        current = visitDropIndex(context, plan, block, (DropIndexNode) node, 
stack);
 +        break;
        default:
-         throw new PlanningException("Unknown logical node type: " + 
node.getType());
+         throw new TajoInternalError("Unknown logical node type: " + 
node.getType());
      }
  
      postHook(plan, node, stack, context);
@@@ -319,15 -312,9 +320,15 @@@
    }
  
    @Override
 +  public RESULT visitIndexScan(CONTEXT context, LogicalPlan plan, 
LogicalPlan.QueryBlock block, IndexScanNode node,
-                                Stack<LogicalNode> stack) throws 
PlanningException {
++                               Stack<LogicalNode> stack) throws TajoException 
{
 +    return null;
 +  }
 +
 +  @Override
    public RESULT visitPartitionedTableScan(CONTEXT context, LogicalPlan plan, 
LogicalPlan.QueryBlock block,
                                            PartitionedTableScanNode node, 
Stack<LogicalNode> stack)
-       throws PlanningException {
+       throws TajoException {
      return null;
    }
  
@@@ -391,24 -379,8 +393,24 @@@
      }
  
    @Override
 +  public RESULT visitCreateIndex(CONTEXT context, LogicalPlan plan, 
LogicalPlan.QueryBlock block, CreateIndexNode node,
-                                  Stack<LogicalNode> stack) throws 
PlanningException {
++                                 Stack<LogicalNode> stack) throws 
TajoException {
 +    RESULT result = null;
 +    stack.push(node);
 +    result = visit(context, plan, block, node.getChild(), stack);
 +    stack.pop();
 +    return result;
 +  }
 +
 +  @Override
 +  public RESULT visitDropIndex(CONTEXT context, LogicalPlan plan, 
LogicalPlan.QueryBlock block, DropIndexNode node,
 +                               Stack<LogicalNode> stack) {
 +    return null;
 +  }
 +
 +  @Override
    public RESULT visitTruncateTable(CONTEXT context, LogicalPlan plan, 
LogicalPlan.QueryBlock block,
-                                    TruncateTableNode node, Stack<LogicalNode> 
stack) throws PlanningException {
+                                    TruncateTableNode node, Stack<LogicalNode> 
stack) throws TajoException {
      return null;
    }
  }

http://git-wip-us.apache.org/repos/asf/tajo/blob/49367117/tajo-plan/src/main/java/org/apache/tajo/plan/visitor/ExplainLogicalPlanVisitor.java
----------------------------------------------------------------------
diff --cc 
tajo-plan/src/main/java/org/apache/tajo/plan/visitor/ExplainLogicalPlanVisitor.java
index 2b33937,925742a..f826479
--- 
a/tajo-plan/src/main/java/org/apache/tajo/plan/visitor/ExplainLogicalPlanVisitor.java
+++ 
b/tajo-plan/src/main/java/org/apache/tajo/plan/visitor/ExplainLogicalPlanVisitor.java
@@@ -19,9 -19,10 +19,9 @@@
  package org.apache.tajo.plan.visitor;
  
  import org.apache.tajo.annotation.Nullable;
+ import org.apache.tajo.exception.TajoException;
  import org.apache.tajo.plan.LogicalPlan;
  import org.apache.tajo.plan.PlanString;
--import org.apache.tajo.plan.PlanningException;
  import org.apache.tajo.plan.logical.*;
  
  import java.util.Stack;
@@@ -234,19 -235,6 +234,19 @@@ public class ExplainLogicalPlanVisitor 
      return node;
    }
  
 +  @Override
 +  public LogicalNode visitCreateIndex(Context context, LogicalPlan plan, 
LogicalPlan.QueryBlock block,
-                                      CreateIndexNode node, Stack<LogicalNode> 
stack) throws PlanningException {
++                                     CreateIndexNode node, Stack<LogicalNode> 
stack) throws TajoException {
 +    return visitUnaryNode(context, plan, block, node, stack);
 +  }
 +
 +  @Override
 +  public LogicalNode visitDropIndex(Context context, LogicalPlan plan, 
LogicalPlan.QueryBlock block,
 +                                    DropIndexNode node, Stack<LogicalNode> 
stack) {
 +    context.add(context.depth, node.getPlanString());
 +    return node;
 +  }
 +
    public static String printDepthString(int maxDepth, DepthString planStr) {
      StringBuilder output = new StringBuilder();
      String pad = new String(new char[planStr.getDepth() * 3]).replace('\0', ' 
');

http://git-wip-us.apache.org/repos/asf/tajo/blob/49367117/tajo-plan/src/main/java/org/apache/tajo/plan/visitor/LogicalPlanVisitor.java
----------------------------------------------------------------------
diff --cc 
tajo-plan/src/main/java/org/apache/tajo/plan/visitor/LogicalPlanVisitor.java
index a9fb20b,dd832ae..9e9389d
--- 
a/tajo-plan/src/main/java/org/apache/tajo/plan/visitor/LogicalPlanVisitor.java
+++ 
b/tajo-plan/src/main/java/org/apache/tajo/plan/visitor/LogicalPlanVisitor.java
@@@ -18,8 -18,9 +18,8 @@@
  
  package org.apache.tajo.plan.visitor;
  
+ import org.apache.tajo.exception.TajoException;
  import org.apache.tajo.plan.LogicalPlan;
--import org.apache.tajo.plan.PlanningException;
  import org.apache.tajo.plan.logical.*;
  
  import java.util.Stack;
@@@ -27,90 -28,81 +27,90 @@@
  public interface LogicalPlanVisitor<CONTEXT, RESULT> {
  
    RESULT visitRoot(CONTEXT context, LogicalPlan plan, LogicalPlan.QueryBlock 
block, LogicalRootNode node,
-                    Stack<LogicalNode> stack) throws PlanningException;
+                    Stack<LogicalNode> stack) throws TajoException;
  
    RESULT visitSetSession(CONTEXT context, LogicalPlan plan, 
LogicalPlan.QueryBlock block, SetSessionNode node,
-                          Stack<LogicalNode> stack) throws PlanningException;
+                          Stack<LogicalNode> stack) throws TajoException;
  
    RESULT visitEvalExpr(CONTEXT context, LogicalPlan plan, 
LogicalPlan.QueryBlock block, EvalExprNode node,
-                        Stack<LogicalNode> stack) throws PlanningException;
+                        Stack<LogicalNode> stack) throws TajoException;
  
    RESULT visitProjection(CONTEXT context, LogicalPlan plan, 
LogicalPlan.QueryBlock block, ProjectionNode node,
-                          Stack<LogicalNode> stack) throws PlanningException;
+                          Stack<LogicalNode> stack) throws TajoException;
  
    RESULT visitLimit(CONTEXT context, LogicalPlan plan, LogicalPlan.QueryBlock 
block, LimitNode node,
-                     Stack<LogicalNode> stack) throws PlanningException;
+                     Stack<LogicalNode> stack) throws TajoException;
  
    RESULT visitSort(CONTEXT context, LogicalPlan plan, LogicalPlan.QueryBlock 
block, SortNode node,
-                    Stack<LogicalNode> stack) throws PlanningException;
+                    Stack<LogicalNode> stack) throws TajoException;
  
    RESULT visitHaving(CONTEXT context, LogicalPlan plan, 
LogicalPlan.QueryBlock block, HavingNode node,
-                       Stack<LogicalNode> stack) throws PlanningException;
+                       Stack<LogicalNode> stack) throws TajoException;
  
    RESULT visitGroupBy(CONTEXT context, LogicalPlan plan, 
LogicalPlan.QueryBlock block, GroupbyNode node,
-                       Stack<LogicalNode> stack) throws PlanningException;
+                       Stack<LogicalNode> stack) throws TajoException;
    RESULT visitWindowAgg(CONTEXT context, LogicalPlan plan, 
LogicalPlan.QueryBlock block, WindowAggNode node,
-                       Stack<LogicalNode> stack) throws PlanningException;
+                       Stack<LogicalNode> stack) throws TajoException;
    RESULT visitDistinctGroupby(CONTEXT context, LogicalPlan plan, 
LogicalPlan.QueryBlock block, DistinctGroupbyNode node,
-                               Stack<LogicalNode> stack) throws 
PlanningException;
+                               Stack<LogicalNode> stack) throws TajoException;
  
    RESULT visitFilter(CONTEXT context, LogicalPlan plan, 
LogicalPlan.QueryBlock block, SelectionNode node,
-                      Stack<LogicalNode> stack) throws PlanningException;
+                      Stack<LogicalNode> stack) throws TajoException;
  
    RESULT visitJoin(CONTEXT context, LogicalPlan plan, LogicalPlan.QueryBlock 
block, JoinNode node,
-                    Stack<LogicalNode> stack) throws PlanningException;
+                    Stack<LogicalNode> stack) throws TajoException;
  
    RESULT visitUnion(CONTEXT context, LogicalPlan plan, LogicalPlan.QueryBlock 
block, UnionNode node,
-                     Stack<LogicalNode> stack) throws PlanningException;
+                     Stack<LogicalNode> stack) throws TajoException;
  
    RESULT visitExcept(CONTEXT context, LogicalPlan plan, 
LogicalPlan.QueryBlock block, ExceptNode node,
-                      Stack<LogicalNode> stack) throws PlanningException;
+                      Stack<LogicalNode> stack) throws TajoException;
  
    RESULT visitIntersect(CONTEXT context, LogicalPlan plan, 
LogicalPlan.QueryBlock block, IntersectNode node,
-                         Stack<LogicalNode> stack) throws PlanningException;
+                         Stack<LogicalNode> stack) throws TajoException;
  
    RESULT visitTableSubQuery(CONTEXT context, LogicalPlan plan, 
LogicalPlan.QueryBlock block, TableSubQueryNode node,
-                             Stack<LogicalNode> stack) throws 
PlanningException;
+                             Stack<LogicalNode> stack) throws TajoException;
  
    RESULT visitScan(CONTEXT context, LogicalPlan plan, LogicalPlan.QueryBlock 
block, ScanNode node,
-                    Stack<LogicalNode> stack) throws PlanningException;
+                    Stack<LogicalNode> stack) throws TajoException;
  
 +  RESULT visitIndexScan(CONTEXT context, LogicalPlan plan, 
LogicalPlan.QueryBlock block, IndexScanNode node,
-                         Stack<LogicalNode> stack) throws PlanningException;
++                        Stack<LogicalNode> stack) throws TajoException;
 +
    RESULT visitPartitionedTableScan(CONTEXT context, LogicalPlan plan, 
LogicalPlan.QueryBlock block,
-                                    PartitionedTableScanNode node, 
Stack<LogicalNode> stack) throws PlanningException;
+                                    PartitionedTableScanNode node, 
Stack<LogicalNode> stack) throws TajoException;
  
    RESULT visitStoreTable(CONTEXT context, LogicalPlan plan, 
LogicalPlan.QueryBlock block, StoreTableNode node,
-                          Stack<LogicalNode> stack) throws PlanningException;
+                          Stack<LogicalNode> stack) throws TajoException;
  
    RESULT visitInsert(CONTEXT context, LogicalPlan plan, 
LogicalPlan.QueryBlock block, InsertNode node,
-                      Stack<LogicalNode> stack) throws PlanningException;
+                      Stack<LogicalNode> stack) throws TajoException;
  
    RESULT visitCreateDatabase(CONTEXT context, LogicalPlan plan, 
LogicalPlan.QueryBlock block, CreateDatabaseNode node,
-                           Stack<LogicalNode> stack) throws PlanningException;
+                           Stack<LogicalNode> stack) throws TajoException;
  
    RESULT visitDropDatabase(CONTEXT context, LogicalPlan plan, 
LogicalPlan.QueryBlock block, DropDatabaseNode node,
-                              Stack<LogicalNode> stack) throws 
PlanningException;
+                              Stack<LogicalNode> stack) throws TajoException;
  
    RESULT visitCreateTable(CONTEXT context, LogicalPlan plan, 
LogicalPlan.QueryBlock block, CreateTableNode node,
-                           Stack<LogicalNode> stack) throws PlanningException;
+                           Stack<LogicalNode> stack) throws TajoException;
  
    RESULT visitDropTable(CONTEXT context, LogicalPlan plan, 
LogicalPlan.QueryBlock block, DropTableNode node,
-                         Stack<LogicalNode> stack) throws PlanningException;
+                         Stack<LogicalNode> stack) throws TajoException;
  
    RESULT visitAlterTablespace(CONTEXT context, LogicalPlan plan, 
LogicalPlan.QueryBlock block, AlterTablespaceNode node,
-                           Stack<LogicalNode> stack) throws PlanningException;
+                           Stack<LogicalNode> stack) throws TajoException;
  
    RESULT visitAlterTable(CONTEXT context, LogicalPlan plan, 
LogicalPlan.QueryBlock block, AlterTableNode node,
-                          Stack<LogicalNode> stack) throws PlanningException;
+                          Stack<LogicalNode> stack) throws TajoException;
  
 +  RESULT visitCreateIndex(CONTEXT context, LogicalPlan plan, 
LogicalPlan.QueryBlock block, CreateIndexNode node,
-                                Stack<LogicalNode> stack) throws 
PlanningException;
++                               Stack<LogicalNode> stack) throws TajoException;
 +
 +  RESULT visitDropIndex(CONTEXT context, LogicalPlan plan, 
LogicalPlan.QueryBlock block, DropIndexNode node,
-                         Stack<LogicalNode> stack) throws PlanningException;
++                        Stack<LogicalNode> stack) throws TajoException;
 +
    RESULT visitTruncateTable(CONTEXT context, LogicalPlan plan, 
LogicalPlan.QueryBlock block, TruncateTableNode node,
-                          Stack<LogicalNode> stack) throws PlanningException;
+                          Stack<LogicalNode> stack) throws TajoException;
  }

http://git-wip-us.apache.org/repos/asf/tajo/blob/49367117/tajo-plan/src/main/java/org/apache/tajo/plan/visitor/SimpleAlgebraVisitor.java
----------------------------------------------------------------------
diff --cc 
tajo-plan/src/main/java/org/apache/tajo/plan/visitor/SimpleAlgebraVisitor.java
index ad4ef18,989af88..4854d7f
--- 
a/tajo-plan/src/main/java/org/apache/tajo/plan/visitor/SimpleAlgebraVisitor.java
+++ 
b/tajo-plan/src/main/java/org/apache/tajo/plan/visitor/SimpleAlgebraVisitor.java
@@@ -19,7 -19,8 +19,7 @@@
  package org.apache.tajo.plan.visitor;
  
  import org.apache.tajo.algebra.*;
- import org.apache.tajo.plan.PlanningException;
+ import org.apache.tajo.exception.TajoException;
 -import org.apache.tajo.plan.PlanningException;
  import org.apache.tajo.plan.algebra.BaseAlgebraVisitor;
  
  import java.util.Stack;

http://git-wip-us.apache.org/repos/asf/tajo/blob/49367117/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/Tablespace.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tajo/blob/49367117/tajo-storage/tajo-storage-hbase/src/main/java/org/apache/tajo/storage/hbase/HBaseTablespace.java
----------------------------------------------------------------------
diff --cc 
tajo-storage/tajo-storage-hbase/src/main/java/org/apache/tajo/storage/hbase/HBaseTablespace.java
index bcb02c6,00cac77..3060d53
--- 
a/tajo-storage/tajo-storage-hbase/src/main/java/org/apache/tajo/storage/hbase/HBaseTablespace.java
+++ 
b/tajo-storage/tajo-storage-hbase/src/main/java/org/apache/tajo/storage/hbase/HBaseTablespace.java
@@@ -1091,9 -1090,9 +1091,9 @@@ public class HBaseTablespace extends Ta
    }
  
    @Override
-   public void rewritePlan(OverridableConf context, LogicalPlan plan) throws 
PlanningException {
+   public void rewritePlan(OverridableConf context, LogicalPlan plan) throws 
TajoException {
 -    if (REWRITE_RULE.isEligible(context, plan)) {
 -      REWRITE_RULE.rewrite(context, plan);
 +    if (REWRITE_RULE.isEligible(new LogicalPlanRewriteRuleContext(context, 
plan))) {
 +      REWRITE_RULE.rewrite(new LogicalPlanRewriteRuleContext(context, plan));
      }
    }
  

http://git-wip-us.apache.org/repos/asf/tajo/blob/49367117/tajo-storage/tajo-storage-hbase/src/main/java/org/apache/tajo/storage/hbase/SortedInsertRewriter.java
----------------------------------------------------------------------
diff --cc 
tajo-storage/tajo-storage-hbase/src/main/java/org/apache/tajo/storage/hbase/SortedInsertRewriter.java
index b6143f3,db9f3c8..40789ac
--- 
a/tajo-storage/tajo-storage-hbase/src/main/java/org/apache/tajo/storage/hbase/SortedInsertRewriter.java
+++ 
b/tajo-storage/tajo-storage-hbase/src/main/java/org/apache/tajo/storage/hbase/SortedInsertRewriter.java
@@@ -68,8 -69,7 +69,8 @@@ public class SortedInsertRewriter imple
    }
  
    @Override
-   public LogicalPlan rewrite(LogicalPlanRewriteRuleContext context) throws 
PlanningException {
 -  public LogicalPlan rewrite(OverridableConf queryContext, LogicalPlan plan) 
throws TajoException {
++  public LogicalPlan rewrite(LogicalPlanRewriteRuleContext context) throws 
TajoException {
 +    LogicalPlan plan = context.getPlan();
      LogicalRootNode rootNode = plan.getRootBlock().getRoot();
  
      StoreTableNode storeTable = rootNode.getChild();

http://git-wip-us.apache.org/repos/asf/tajo/blob/49367117/tajo-storage/tajo-storage-hdfs/src/test/java/org/apache/tajo/storage/index/TestBSTIndex.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tajo/blob/49367117/tajo-storage/tajo-storage-hdfs/src/test/java/org/apache/tajo/storage/index/TestSingleCSVFileBSTIndex.java
----------------------------------------------------------------------
diff --cc 
tajo-storage/tajo-storage-hdfs/src/test/java/org/apache/tajo/storage/index/TestSingleCSVFileBSTIndex.java
index 72810fd,c198965..a001492
--- 
a/tajo-storage/tajo-storage-hdfs/src/test/java/org/apache/tajo/storage/index/TestSingleCSVFileBSTIndex.java
+++ 
b/tajo-storage/tajo-storage-hdfs/src/test/java/org/apache/tajo/storage/index/TestSingleCSVFileBSTIndex.java
@@@ -111,7 -111,7 +111,8 @@@ public class TestSingleCSVFileBSTIndex 
      creater.setLoadNum(LOAD_NUM);
      creater.open();
  
-     SeekableScanner fileScanner = new CSVScanner(conf, schema, meta, tablet);
 -    SeekableScanner fileScanner = OldStorageManager.getSeekableScanner(conf, 
meta, schema, tablet, schema);
++    SeekableScanner fileScanner = OldStorageManager.getStorageManager(conf, 
meta.getStoreType())
++        .getSeekableScanner(meta, schema, tablet.getProto(), schema);
      fileScanner.init();
      Tuple keyTuple;
      long offset;
@@@ -135,7 -135,7 +136,8 @@@
      BSTIndexReader reader = bst.getIndexReader(new Path(testDir,
          "FindValueInCSV.idx"), keySchema, comp);
      reader.open();
-     fileScanner = new CSVScanner(conf, schema, meta, tablet);
 -    fileScanner = OldStorageManager.getSeekableScanner(conf, meta, schema, 
tablet, schema);
++    fileScanner = OldStorageManager.getStorageManager(conf, 
meta.getStoreType())
++        .getSeekableScanner(meta, schema, tablet.getProto(), schema);
      fileScanner.init();
      for (int i = 0; i < TUPLE_NUM - 1; i++) {
        tuple.put(0, DatumFactory.createInt8(i));
@@@ -200,7 -200,7 +202,8 @@@
      creater.setLoadNum(LOAD_NUM);
      creater.open();
      
-     SeekableScanner fileScanner  = new CSVScanner(conf, schema, meta, tablet);
 -    SeekableScanner fileScanner  = OldStorageManager.getSeekableScanner(conf, 
meta, schema, tablet, schema);
++    SeekableScanner fileScanner  = OldStorageManager.getStorageManager(conf, 
meta.getStoreType())
++        .getSeekableScanner(meta, schema, tablet.getProto(), schema);
      fileScanner.init();
      Tuple keyTuple;
      long offset;
@@@ -221,7 -221,7 +224,8 @@@
      
      BSTIndexReader reader = bst.getIndexReader(new Path(testDir, 
"FindNextKeyValueInCSV.idx"), keySchema, comp);
      reader.open();
-     fileScanner  = new CSVScanner(conf, schema, meta, tablet);
 -    fileScanner  = OldStorageManager.getSeekableScanner(conf, meta, schema, 
tablet, schema);
++    fileScanner  = OldStorageManager.getStorageManager(conf, 
meta.getStoreType())
++        .getSeekableScanner(meta, schema, tablet.getProto(), schema);
      fileScanner.init();
      Tuple result;
      for(int i = 0 ; i < TUPLE_NUM -1 ; i ++) {

Reply via email to