public static boolean checkIfBeEvaluatedAtThis(EvalNode evalNode, LogicalNode node) { Set<Column> columnRefs = EvalTreeUtil.findUniqueColumns(evalNode); if (columnRefs.size() > 0 && !node.getInSchema().containsAll(columnRefs)) { return false; } return true; } }
public static boolean checkIfBeEvaluatedAtThis(EvalNode evalNode, LogicalNode node) { Set<Column> columnRefs = EvalTreeUtil.findUniqueColumns(evalNode); if (columnRefs.size() > 0 && !node.getInSchema().containsAll(columnRefs)) { return false; } return true; } }
@Override public LogicalNode visit(PlanShapeFixerContext context, LogicalPlan plan, LogicalPlan.QueryBlock block, LogicalNode node, Stack<LogicalNode> stack) throws TajoException { super.visit(context, plan, block, node, stack); node.setInSchema(sortSchema(node.getInSchema())); node.setOutSchema(sortSchema(node.getOutSchema())); context.childNumbers.push(context.childNumbers.pop() + 1); return null; }
public static VerificationState verify(VerificationState state, LogicalNode currentNode, EvalNode expression) { instance.visit(state, expression, new Stack<EvalNode>()); Set<Column> referredColumns = EvalTreeUtil.findUniqueColumns(expression); for (Column referredColumn : referredColumns) { if (!currentNode.getInSchema().contains(referredColumn)) { throw new TajoInternalError("Invalid State: " + referredColumn + " cannot be accessible at Node (" + currentNode.getPID() + ")"); } } return state; }
public static VerificationState verify(VerificationState state, LogicalNode currentNode, EvalNode expression) { instance.visit(state, expression, new Stack<>()); Set<Column> referredColumns = EvalTreeUtil.findUniqueColumns(expression); for (Column referredColumn : referredColumns) { if (!currentNode.getInSchema().contains(referredColumn)) { throw new TajoInternalError("Invalid State: " + referredColumn + " cannot be accessible at Node (" + currentNode.getPID() + ")"); } } return state; }
@Override public LogicalNode visit(PlanShapeFixerContext context, LogicalPlan plan, LogicalPlan.QueryBlock block, LogicalNode node, Stack<LogicalNode> stack) throws TajoException { super.visit(context, plan, block, node, stack); node.setInSchema(sortSchema(node.getInSchema())); node.setOutSchema(sortSchema(node.getOutSchema())); context.childNumbers.push(context.childNumbers.pop() + 1); return null; }
private static PlanProto.LogicalNode.Builder createNodeBuilder(SerializeContext context, LogicalNode node) { int selfId; if (context.idMap.containsKey(node.getPID())) { selfId = context.idMap.get(node.getPID()); } else { selfId = context.seqId++; context.idMap.put(node.getPID(), selfId); } PlanProto.LogicalNode.Builder nodeBuilder = PlanProto.LogicalNode.newBuilder(); nodeBuilder.setVisitSeq(selfId); nodeBuilder.setNodeId(node.getPID()); nodeBuilder.setType(convertType(node.getType())); // some DDL statements like DropTable or DropDatabase do not have in/out schemas if (node.getInSchema() != null) { nodeBuilder.setInSchema(node.getInSchema().getProto()); } if (node.getOutSchema() != null) { nodeBuilder.setOutSchema(node.getOutSchema().getProto()); } return nodeBuilder; }
/** * Try to find the column from the current node and child node. It can find subexprs generated from the optimizer. * * @param block The current query block * @param columnRef The column reference to be found * @return The found column */ static Column resolveFromCurrentAndChildNode(LogicalPlan.QueryBlock block, ColumnReferenceExpr columnRef) throws UndefinedColumnException { if (block.getCurrentNode() != null && block.getCurrentNode().getInSchema() != null) { Column found = block.getCurrentNode().getInSchema().getColumn(columnRef.getCanonicalName()); if (found != null) { return found; } else if (block.getLatestNode() != null) { found = block.getLatestNode().getOutSchema().getColumn(columnRef.getName()); if (found != null) { return found; } } } return null; }
/** * Try to find the column from the current node and child node. It can find subexprs generated from the optimizer. * * @param block The current query block * @param columnRef The column reference to be found * @return The found column */ static Column resolveFromCurrentAndChildNode(LogicalPlan.QueryBlock block, ColumnReferenceExpr columnRef) throws UndefinedColumnException { if (block.getCurrentNode() != null && block.getCurrentNode().getInSchema() != null) { Column found = block.getCurrentNode().getInSchema().getColumn(columnRef.getCanonicalName()); if (found != null) { return found; } else if (block.getLatestNode() != null) { found = block.getLatestNode().getOutSchema().getColumn(columnRef.getName()); if (found != null) { return found; } } } return null; }
private static PlanProto.LogicalNode.Builder createNodeBuilder(SerializeContext context, LogicalNode node) { int selfId; if (context.idMap.containsKey(node.getPID())) { selfId = context.idMap.get(node.getPID()); } else { selfId = context.seqId++; context.idMap.put(node.getPID(), selfId); } PlanProto.LogicalNode.Builder nodeBuilder = PlanProto.LogicalNode.newBuilder(); nodeBuilder.setVisitSeq(selfId); nodeBuilder.setNodeId(node.getPID()); nodeBuilder.setType(convertType(node.getType())); // some DDL statements like DropTable or DropDatabase do not have in/out schemas if (node.getInSchema() != null) { nodeBuilder.setInSchema(node.getInSchema().getProto()); } if (node.getOutSchema() != null) { nodeBuilder.setOutSchema(node.getOutSchema().getProto()); } return nodeBuilder; }
private static EvalNode getNaturalJoinCondition(JoinNode joinNode) { Schema leftSchema = joinNode.getLeftChild().getInSchema(); Schema rightSchema = joinNode.getRightChild().getInSchema(); Schema commons = SchemaUtil.getNaturalJoinColumns(leftSchema, rightSchema); EvalNode njQual = null; EvalNode equiQual; Column leftJoinKey; Column rightJoinKey; for (Column common : commons.getRootColumns()) { leftJoinKey = leftSchema.getColumn(common.getQualifiedName()); rightJoinKey = rightSchema.getColumn(common.getQualifiedName()); equiQual = new BinaryEval(EvalType.EQUAL, new FieldEval(leftJoinKey), new FieldEval(rightJoinKey)); if (njQual == null) { njQual = equiQual; } else { njQual = new BinaryEval(EvalType.AND, njQual, equiQual); } } return njQual; }
private static EvalNode getNaturalJoinCondition(JoinNode joinNode) { Schema leftSchema = joinNode.getLeftChild().getInSchema(); Schema rightSchema = joinNode.getRightChild().getInSchema(); Schema commons = SchemaUtil.getNaturalJoinColumns(leftSchema, rightSchema); EvalNode njQual = null; EvalNode equiQual; Column leftJoinKey; Column rightJoinKey; for (Column common : commons.getRootColumns()) { leftJoinKey = leftSchema.getColumn(common.getQualifiedName()); rightJoinKey = rightSchema.getColumn(common.getQualifiedName()); equiQual = new BinaryEval(EvalType.EQUAL, new FieldEval(leftJoinKey), new FieldEval(rightJoinKey)); if (njQual == null) { njQual = equiQual; } else { njQual = new BinaryEval(EvalType.AND, njQual, equiQual); } } return njQual; }
currentNodeSchema = ((RelationNode) currentNode).getLogicalSchema(); } else { currentNodeSchema = currentNode.getInSchema();
for (int i = 0; i < node.getInSchema().size(); i++) { String inColumnName = node.getInSchema().getColumn(i).getQualifiedName(); Column childOutColumn = childNode.getOutSchema().getColumn(i); columnMap.put(inColumnName, childOutColumn.getQualifiedName());
for (int i = 0; i < node.getInSchema().size(); i++) { String inColumnName = node.getInSchema().getColumn(i).getQualifiedName(); Column childOutColumn = childNode.getOutSchema().getColumn(i); columnMap.put(inColumnName, childOutColumn.getQualifiedName());
currentNodeSchema = ((RelationNode) currentNode).getLogicalSchema(); } else { currentNodeSchema = currentNode.getInSchema();