@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; }
@Override public LogicalNode visitRelation(LogicalPlanner.PlanContext ctx, Stack<Expr> stack, Relation relation) throws TajoException { String actualRelationName; if (IdentifierUtil.isFQTableName(relation.getName())) { actualRelationName = relation.getName(); } else { actualRelationName = IdentifierUtil.buildFQName(ctx.getQueryContext().get(SessionVars.CURRENT_DATABASE), relation.getName()); } TableDesc desc = catalog.getTableDesc(actualRelationName); ScanNode scanNode = ctx.getPlan().createNode(ScanNode.class); if (relation.hasAlias()) { scanNode.init(desc, relation.getAlias()); } else { scanNode.init(desc); } TablePropertyUtil.setTableProperty(ctx.getQueryContext(), scanNode); ctx.getQueryBlock().addRelation(scanNode); return scanNode; }
@Override public LogicalNode visitRelation(LogicalPlanner.PlanContext ctx, Stack<Expr> stack, Relation relation) throws TajoException { String actualRelationName; if (CatalogUtil.isFQTableName(relation.getName())) { actualRelationName = relation.getName(); } else { actualRelationName = CatalogUtil.buildFQName(ctx.getQueryContext().get(SessionVars.CURRENT_DATABASE), relation.getName()); } TableDesc desc = catalog.getTableDesc(actualRelationName); ScanNode scanNode = ctx.getPlan().createNode(ScanNode.class); if (relation.hasAlias()) { scanNode.init(desc, relation.getAlias()); } else { scanNode.init(desc); } TablePropertyUtil.setTableProperty(ctx.getQueryContext(), scanNode); ctx.getQueryBlock().addRelation(scanNode); return scanNode; }