@Override public List<Target> getTargets() { if (hasTargets()) { return this.targets; } else { return null; } }
@Override public Object clone() throws CloneNotSupportedException { ScanNode scanNode = (ScanNode) super.clone(); scanNode.tableDesc = (TableDesc) this.tableDesc.clone(); if (hasQual()) { scanNode.qual = (EvalNode) this.qual.clone(); } if (hasTargets()) { scanNode.targets = new ArrayList<>(); for (Target t : targets) { scanNode.targets.add((Target) t.clone()); } } if (hasAlias()) { scanNode.alias = alias; } return scanNode; }
public LogicalNode visitScan(Context context, LogicalPlan plan, LogicalPlan.QueryBlock block, ScanNode node, Stack<LogicalNode> stack) throws TajoException { Context newContext = new Context(context); List<Target> targets; if (node.hasTargets()) { targets = node.getTargets(); } else { targets = PlannerUtil.schemaToTargets(node.getLogicalSchema()); } LinkedHashSet<Target> projectedTargets = Sets.newLinkedHashSet(); for (Iterator<Target> it = getFilteredTarget(targets, newContext.requiredSet); it.hasNext();) { Target target = it.next(); newContext.addExpr(target); } for (Iterator<Target> it = context.targetListMgr.getFilteredTargets(newContext.requiredSet); it.hasNext();) { Target target = it.next(); if (LogicalPlanner.checkIfBeEvaluatedAtRelation(block, target.getEvalTree(), node)) { projectedTargets.add(target); newContext.targetListMgr.markAsEvaluated(target); } } node.setTargets(new ArrayList<>(projectedTargets)); LogicalPlanner.verifyProjectedFields(block, node); return node; }
public LogicalNode visitScan(Context context, LogicalPlan plan, LogicalPlan.QueryBlock block, ScanNode node, Stack<LogicalNode> stack) throws TajoException { Context newContext = new Context(context); Target [] targets; if (node.hasTargets()) { targets = node.getTargets(); } else { targets = PlannerUtil.schemaToTargets(node.getLogicalSchema()); } LinkedHashSet<Target> projectedTargets = Sets.newLinkedHashSet(); for (Iterator<Target> it = getFilteredTarget(targets, newContext.requiredSet); it.hasNext();) { Target target = it.next(); newContext.addExpr(target); } for (Iterator<Target> it = context.targetListMgr.getFilteredTargets(newContext.requiredSet); it.hasNext();) { Target target = it.next(); if (LogicalPlanner.checkIfBeEvaluatedAtRelation(block, target.getEvalTree(), node)) { projectedTargets.add(target); newContext.targetListMgr.markAsEvaluated(target); } } node.setTargets(projectedTargets.toArray(new Target[projectedTargets.size()])); LogicalPlanner.verifyProjectedFields(block, node); return node; }
public Schema getProjectSchema() { Schema projected; // in the case where projected column or expression are given // the target can be an empty list. if (plan.hasTargets()) { projected = new Schema(); Set<Column> columnSet = new HashSet<Column>(); if (plan.hasQual()) { columnSet.addAll(EvalTreeUtil.findUniqueColumns(qual)); } for (Target t : plan.getTargets()) { columnSet.addAll(EvalTreeUtil.findUniqueColumns(t.getEvalTree())); } for (Column column : inSchema.getAllColumns()) { if (columnSet.contains(column)) { projected.addColumn(column); } } } else { // no any projected columns, meaning that all columns should be projected. // TODO - this implicit rule makes code readability bad. So, we should remove it later projected = outSchema; } return projected; }
@Override public LogicalNode visitScan(PlanShapeFixerContext context, LogicalPlan plan, LogicalPlan.QueryBlock block, ScanNode node, Stack<LogicalNode> stack) throws TajoException { super.visitScan(context, plan, block, node, stack); context.childNumbers.push(1); if (node.hasTargets()) { node.setTargets(sortTargets(node.getTargets())); } if (node.hasQual()) { node.setQual(sortQual(node.getQual())); } return null; }
@Override public LogicalNode visitScan(PlanShapeFixerContext context, LogicalPlan plan, LogicalPlan.QueryBlock block, ScanNode node, Stack<LogicalNode> stack) throws TajoException { super.visitScan(context, plan, block, node, stack); context.childNumbers.push(1); if (node.hasTargets()) { node.setTargets(sortTargets(node.getTargets())); } if (node.hasQual()) { node.setQual(sortQual(node.getQual())); } return null; }
@Override public Object clone() throws CloneNotSupportedException { ScanNode scanNode = (ScanNode) super.clone(); scanNode.tableDesc = (TableDesc) this.tableDesc.clone(); if (hasQual()) { scanNode.qual = (EvalNode) this.qual.clone(); } if (hasTargets()) { scanNode.targets = new Target[targets.length]; for (int i = 0; i < targets.length; i++) { scanNode.targets[i] = (Target) targets[i].clone(); } } if (hasAlias()) { scanNode.alias = alias; } return scanNode; }
@Override public LogicalNode visitScan(Context context, LogicalPlan plan, LogicalPlan.QueryBlock block, ScanNode node, Stack<LogicalNode> stack) throws TajoException { if (node.hasTargets()) { for (Target target : node.getTargets()) { ExprsVerifier.verify(context.state, node, target.getEvalTree()); } } if (node.hasQual()) { ExprsVerifier.verify(context.state, node, node.getQual()); } verifyProjectableOutputSchema(context, node); return node; }
@Override public LogicalNode visitScan(Context context, LogicalPlan plan, LogicalPlan.QueryBlock block, ScanNode node, Stack<LogicalNode> stack) throws TajoException { if (node.hasTargets()) { for (Target target : node.getTargets()) { ExprsVerifier.verify(context.state, node, target.getEvalTree()); } } if (node.hasQual()) { ExprsVerifier.verify(context.state, node, node.getQual()); } verifyProjectableOutputSchema(context, node); return node; }
private void initSeqScanExec() throws IOException, TajoException { Tablespace tablespace = TablespaceManager.get(tableDesc.getUri()); List<Fragment> fragments = Lists.newArrayList( SplitUtil.getSplits(tablespace, scanNode, scanNode.getTableDesc(), true)); if (!fragments.isEmpty()) { FragmentProto[] fragmentProtos = FragmentConvertor.toFragmentProtoArray(tajoConf, fragments.toArray(new Fragment[fragments.size()])); this.taskContext = new TaskAttemptContext( new QueryContext(tajoConf), null, new TaskAttemptId(new TaskId(new ExecutionBlockId(queryId, 1), 0), 0), fragmentProtos, null); if (scanNode.hasTargets()) { QueryExecutor.startScriptExecutors(taskContext.getQueryContext(), taskContext.getEvalContext(), scanNode.getTargets()); } this.scanExec = new PartitionMergeScanExec(taskContext, scanNode, fragmentProtos); this.scanExec.init(); } else { close(); } }
@Override public PlanString getPlanString() { PlanString planStr = new PlanString(this).appendTitle(" on ").appendTitle(getTableName()); if (hasAlias()) { planStr.appendTitle(" as ").appendTitle(alias); } if (hasQual()) { planStr.addExplan("filter: ").appendExplain(this.qual.toString()); } if (hasTargets()) { planStr.addExplan("target list: ").appendExplain(StringUtils.join(targets, ", ")); } planStr.addDetail("out schema: ").appendDetail(getOutSchema().toString()); planStr.addDetail("in schema: ").appendDetail(getInSchema().toString()); return planStr; } }
public PlanProto.ScanNode.Builder buildScanNode(ScanNode scan) { PlanProto.ScanNode.Builder scanBuilder = PlanProto.ScanNode.newBuilder(); scanBuilder.setTable(scan.getTableDesc().getProto()); if (scan.hasAlias()) { scanBuilder.setAlias(scan.getAlias()); } if (scan.hasTargets()) { scanBuilder.setExistTargets(true); scanBuilder.addAllTargets(ProtoUtil.<PlanProto.Target>toProtoObjects(scan.getTargets().toArray(new ProtoObject[scan.getTargets().size()]))); } else { scanBuilder.setExistTargets(false); } if (scan.hasQual()) { scanBuilder.setQual(EvalNodeSerializer.serialize(scan.getQual())); } scanBuilder.setBroadcast(scan.isBroadcastTable()); scanBuilder.setNameResolveBase(scan.isNameResolveBase()); return scanBuilder; }
@Override public PlanString getPlanString() { PlanString planStr = new PlanString(this).appendTitle(" on ").appendTitle(getTableName()); if (hasAlias()) { planStr.appendTitle(" as ").appendTitle(alias); } if (hasQual()) { planStr.addExplan("filter: ").appendExplain(this.qual.toString()); } if (hasTargets()) { planStr.addExplan("target list: "); boolean first = true; for (Target target : targets) { if (!first) { planStr.appendExplain(", "); } planStr.appendExplain(target.toString()); first = false; } } planStr.addDetail("out schema: ").appendDetail(getOutSchema().toString()); planStr.addDetail("in schema: ").appendDetail(getInSchema().toString()); return planStr; } }
public PlanProto.ScanNode.Builder buildScanNode(ScanNode scan) { PlanProto.ScanNode.Builder scanBuilder = PlanProto.ScanNode.newBuilder(); scanBuilder.setTable(scan.getTableDesc().getProto()); if (scan.hasAlias()) { scanBuilder.setAlias(scan.getAlias()); } if (scan.hasTargets()) { scanBuilder.setExistTargets(true); scanBuilder.addAllTargets(ProtoUtil.<PlanProto.Target>toProtoObjects(scan.getTargets())); } else { scanBuilder.setExistTargets(false); } if (scan.hasQual()) { scanBuilder.setQual(EvalNodeSerializer.serialize(scan.getQual())); } scanBuilder.setBroadcast(scan.isBroadcastTable()); scanBuilder.setNameResolveBase(scan.isNameResolveBase()); return scanBuilder; }