private static <T extends LogicalNode> T getNodeFromExpr(LogicalPlan plan, Expr expr) { return plan.getBlockByExpr(expr).getNodeFromExpr(expr); }
private static <T extends LogicalNode> T getNodeFromExpr(LogicalPlan plan, Expr expr) { return plan.getBlockByExpr(expr).getNodeFromExpr(expr); }
@Override public LogicalNode visitRelation(ProcessorContext ctx, Stack<Expr> stack, Relation expr) throws TajoException { LogicalPlan plan = ctx.planContext.getPlan(); QueryBlock queryBlock = plan.getBlockByExpr(expr); ScanNode scan = queryBlock.getNodeFromExpr(expr); TableDesc desc = scan.getTableDesc(); if (desc.hasEmptySchema()) { Set<Column> columns = new HashSet<>(); if (ctx.projectColumns.containsKey(getQualifiedName(ctx.planContext, expr.getName()))) { for (ColumnReferenceExpr col : ctx.projectColumns.get(getQualifiedName(ctx.planContext, expr.getName()))) { columns.add(NameResolver.resolve(plan, queryBlock, col, NameResolvingMode.RELS_ONLY, true)); } } if (expr.hasAlias()) { if (ctx.projectColumns.containsKey(getQualifiedName(ctx.planContext, expr.getAlias()))) { for (ColumnReferenceExpr col : ctx.projectColumns.get(getQualifiedName(ctx.planContext, expr.getAlias()))) { columns.add(NameResolver.resolve(plan, queryBlock, col, NameResolvingMode.RELS_ONLY, true)); } } } if (columns.isEmpty()) { // error throw new TajoInternalError( "Columns projected from " + getQualifiedName(ctx.planContext, expr.getName()) + " is not found."); } desc.setSchema(buildSchemaFromColumnSet(columns)); scan.init(desc); } return scan; }
@Override public LogicalNode visitRelation(ProcessorContext ctx, Stack<Expr> stack, Relation expr) throws TajoException { LogicalPlan plan = ctx.planContext.getPlan(); QueryBlock queryBlock = plan.getBlockByExpr(expr); ScanNode scan = queryBlock.getNodeFromExpr(expr); TableDesc desc = scan.getTableDesc(); if (desc.hasEmptySchema()) { Set<Column> columns = new HashSet<>(); if (ctx.projectColumns.containsKey(getQualifiedName(ctx.planContext, expr.getName()))) { for (ColumnReferenceExpr col : ctx.projectColumns.get(getQualifiedName(ctx.planContext, expr.getName()))) { columns.add(NameResolver.resolve(plan, queryBlock, col, NameResolvingMode.RELS_ONLY, true)); } } if (expr.hasAlias()) { if (ctx.projectColumns.containsKey(getQualifiedName(ctx.planContext, expr.getAlias()))) { for (ColumnReferenceExpr col : ctx.projectColumns.get(getQualifiedName(ctx.planContext, expr.getAlias()))) { columns.add(NameResolver.resolve(plan, queryBlock, col, NameResolvingMode.RELS_ONLY, true)); } } } if (columns.isEmpty()) { // error throw new TajoInternalError( "Columns projected from " + getQualifiedName(ctx.planContext, expr.getName()) + " is not found."); } desc.setSchema(buildSchemaFromColumnSet(columns)); scan.init(desc); } return scan; }
QueryBlock leftBlock = context.plan.getBlockByExpr(setOperation.getLeft()); PlanContext leftContext = new PlanContext(context, leftBlock); stack.push(setOperation); QueryBlock rightBlock = context.plan.getBlockByExpr(setOperation.getRight()); PlanContext rightContext = new PlanContext(context, rightBlock); stack.push(setOperation);
QueryBlock leftBlock = context.plan.getBlockByExpr(setOperation.getLeft()); PlanContext leftContext = new PlanContext(context, leftBlock); stack.push(setOperation); QueryBlock rightBlock = context.plan.getBlockByExpr(setOperation.getRight()); PlanContext rightContext = new PlanContext(context, rightBlock); stack.push(setOperation);