http://git-wip-us.apache.org/repos/asf/tajo/blob/882297e7/tajo-plan/src/main/java/org/apache/tajo/plan/serder/LogicalNodeDeserializer.java ---------------------------------------------------------------------- diff --cc tajo-plan/src/main/java/org/apache/tajo/plan/serder/LogicalNodeDeserializer.java index 71a47c3,84991bb..e97918e --- a/tajo-plan/src/main/java/org/apache/tajo/plan/serder/LogicalNodeDeserializer.java +++ b/tajo-plan/src/main/java/org/apache/tajo/plan/serder/LogicalNodeDeserializer.java @@@ -31,12 -32,8 +32,9 @@@ import org.apache.tajo.catalog.partitio import org.apache.tajo.catalog.proto.CatalogProtos; import org.apache.tajo.exception.UnimplementedException; import org.apache.tajo.plan.Target; - import org.apache.tajo.plan.expr.AggregationFunctionCallEval; - import org.apache.tajo.plan.expr.EvalNode; - import org.apache.tajo.plan.expr.FieldEval; - import org.apache.tajo.plan.expr.WindowFunctionEval; + import org.apache.tajo.plan.expr.*; import org.apache.tajo.plan.logical.*; +import org.apache.tajo.plan.rewrite.rules.IndexScanInfo.SimplePredicate; import org.apache.tajo.util.KeyValueSet; import org.apache.tajo.util.TUtil; @@@ -127,14 -123,11 +126,14 @@@ public class LogicalNodeDeserializer current = convertUnion(nodeMap, protoNode); break; case PARTITIONS_SCAN: - current = convertPartitionScan(context, protoNode); + current = convertPartitionScan(context, evalContext, protoNode); break; case SCAN: - current = convertScan(context, protoNode); + current = convertScan(context, evalContext, protoNode); break; + case INDEX_SCAN: - current = convertIndexScan(context, protoNode); ++ current = convertIndexScan(context, evalContext, protoNode); + break; case CREATE_TABLE: current = convertCreateTable(nodeMap, protoNode); @@@ -436,26 -431,10 +444,27 @@@ scan.setOutSchema(convertSchema(protoNode.getOutSchema())); } - private static IndexScanNode convertIndexScan(OverridableConf context, PlanProto.LogicalNode protoNode) { ++ private static IndexScanNode convertIndexScan(OverridableConf context, EvalContext evalContext, ++ PlanProto.LogicalNode protoNode) { + IndexScanNode indexScan = new IndexScanNode(protoNode.getNodeId()); - fillScanNode(context, protoNode, indexScan); ++ fillScanNode(context, evalContext, protoNode, indexScan); + + PlanProto.IndexScanSpec indexScanSpec = protoNode.getIndexScan(); + SimplePredicate[] predicates = new SimplePredicate[indexScanSpec.getPredicatesCount()]; + for (int i = 0; i < predicates.length; i++) { + predicates[i] = new SimplePredicate(indexScanSpec.getPredicates(i)); + } + + indexScan.set(new Schema(indexScanSpec.getKeySchema()), predicates, + TUtil.stringToURI(indexScanSpec.getIndexPath())); + + return indexScan; + } + - private static PartitionedTableScanNode convertPartitionScan(OverridableConf context, + private static PartitionedTableScanNode convertPartitionScan(OverridableConf context, EvalContext evalContext, PlanProto.LogicalNode protoNode) { PartitionedTableScanNode partitionedScan = new PartitionedTableScanNode(protoNode.getNodeId()); - fillScanNode(context, protoNode, partitionedScan); + fillScanNode(context, evalContext, protoNode, partitionedScan); PlanProto.PartitionScanSpec partitionScanProto = protoNode.getPartitionScan(); Path [] paths = new Path[partitionScanProto.getPathsCount()]; @@@ -632,47 -611,7 +641,47 @@@ return truncateTable; } + private static CreateIndexNode convertCreateIndex(Map<Integer, LogicalNode> nodeMap, + PlanProto.LogicalNode protoNode) { + CreateIndexNode createIndex = new CreateIndexNode(protoNode.getNodeId()); + + PlanProto.CreateIndexNode createIndexProto = protoNode.getCreateIndex(); + createIndex.setIndexName(createIndexProto.getIndexName()); + createIndex.setIndexMethod(createIndexProto.getIndexMethod()); + try { + createIndex.setIndexPath(new URI(createIndexProto.getIndexPath())); + } catch (URISyntaxException e) { + e.printStackTrace(); + } + SortSpec[] keySortSpecs = new SortSpec[createIndexProto.getKeySortSpecsCount()]; + for (int i = 0; i < keySortSpecs.length; i++) { + keySortSpecs[i] = new SortSpec(createIndexProto.getKeySortSpecs(i)); + } + createIndex.setKeySortSpecs(new Schema(createIndexProto.getTargetRelationSchema()), + keySortSpecs); + createIndex.setUnique(createIndexProto.getIsUnique()); + createIndex.setClustered(createIndexProto.getIsClustered()); + if (createIndexProto.hasIndexProperties()) { + createIndex.setOptions(new KeyValueSet(createIndexProto.getIndexProperties())); + } + createIndex.setChild(nodeMap.get(createIndexProto.getChildSeq())); + createIndex.setInSchema(convertSchema(protoNode.getInSchema())); + createIndex.setOutSchema(convertSchema(protoNode.getOutSchema())); + createIndex.setExternal(createIndexProto.getIsExternal()); + + return createIndex; + } + + private static DropIndexNode convertDropIndex(PlanProto.LogicalNode protoNode) { + DropIndexNode dropIndex = new DropIndexNode(protoNode.getNodeId()); + + PlanProto.DropIndexNode dropIndexProto = protoNode.getDropIndex(); + dropIndex.setIndexName(dropIndexProto.getIndexName()); + + return dropIndex; + } + - private static AggregationFunctionCallEval [] convertAggFuncCallEvals(OverridableConf context, + private static AggregationFunctionCallEval [] convertAggFuncCallEvals(OverridableConf context, EvalContext evalContext, List<PlanProto.EvalNodeTree> evalTrees) { AggregationFunctionCallEval [] aggFuncs = new AggregationFunctionCallEval[evalTrees.size()]; for (int i = 0; i < aggFuncs.length; i++) {
http://git-wip-us.apache.org/repos/asf/tajo/blob/882297e7/tajo-plan/src/main/proto/Plan.proto ----------------------------------------------------------------------
