public Builder putAll(Map<Symbol, Expression> assignments) { for (Entry<Symbol, Expression> assignment : assignments.entrySet()) { put(assignment.getKey(), assignment.getValue()); } return this; }
public Builder putAll(Map<Symbol, Expression> assignments) { for (Entry<Symbol, Expression> assignment : assignments.entrySet()) { put(assignment.getKey(), assignment.getValue()); } return this; }
public Builder put(Entry<Symbol, Expression> assignment) { put(assignment.getKey(), assignment.getValue()); return this; }
@Test public void testValidProject() { Expression expression1 = new Cast(columnB.toSymbolReference(), StandardTypes.BIGINT); Expression expression2 = new Cast(columnC.toSymbolReference(), StandardTypes.BIGINT); Assignments assignments = Assignments.builder() .put(symbolAllocator.newSymbol(expression1, BIGINT), expression1) .put(symbolAllocator.newSymbol(expression2, BIGINT), expression2) .build(); PlanNode node = new ProjectNode( newId(), baseTableScan, assignments); assertTypesValid(node); }
private PlanNode appendMarkers(PlanNode source, int markerIndex, List<Symbol> markers, Map<Symbol, SymbolReference> projections) { Assignments.Builder assignments = Assignments.builder(); // add existing intersect symbols to projection for (Map.Entry<Symbol, SymbolReference> entry : projections.entrySet()) { Symbol symbol = symbolAllocator.newSymbol(entry.getKey().getName(), symbolAllocator.getTypes().get(entry.getKey())); assignments.put(symbol, entry.getValue()); } // add extra marker fields to the projection for (int i = 0; i < markers.size(); ++i) { Expression expression = (i == markerIndex) ? TRUE_LITERAL : new Cast(new NullLiteral(), StandardTypes.BOOLEAN); assignments.put(symbolAllocator.newSymbol(markers.get(i).getName(), BOOLEAN), expression); } return new ProjectNode(idAllocator.getNextId(), source, assignments.build()); }
@Override public PlanNode visitProject(ProjectNode node, RewriteContext<Set<Symbol>> context) { ImmutableSet.Builder<Symbol> expectedInputs = ImmutableSet.builder(); Assignments.Builder builder = Assignments.builder(); node.getAssignments().forEach((symbol, expression) -> { if (context.get().contains(symbol)) { expectedInputs.addAll(SymbolsExtractor.extractUnique(expression)); builder.put(symbol, expression); } }); PlanNode source = context.rewrite(node.getSource(), expectedInputs.build()); return new ProjectNode(node.getId(), source, builder.build()); }
@Override public PlanNode visitProject(ProjectNode node, RewriteContext<Set<Symbol>> context) { ImmutableSet.Builder<Symbol> expectedInputs = ImmutableSet.builder(); Assignments.Builder builder = Assignments.builder(); node.getAssignments().forEach((symbol, expression) -> { if (context.get().contains(symbol)) { expectedInputs.addAll(SymbolsExtractor.extractUnique(expression)); builder.put(symbol, expression); } }); PlanNode source = context.rewrite(node.getSource(), expectedInputs.build()); return new ProjectNode(node.getId(), source, builder.build()); }
public static Assignments of(Symbol symbol, Expression expression) { return builder().put(symbol, expression).build(); }
public Builder putIdentity(Symbol symbol) { put(symbol, symbol.toSymbolReference()); return this; }
public Builder put(Entry<Symbol, Expression> assignment) { put(assignment.getKey(), assignment.getValue()); return this; }
private static PlanNode addProjection(Context context, PlanNode node, Symbol symbol, Expression expression) { Assignments.Builder projections = Assignments.builder(); for (Symbol outputSymbol : node.getOutputSymbols()) { projections.putIdentity(outputSymbol); } projections.put(symbol, expression); return new ProjectNode(context.getIdAllocator().getNextId(), node, projections.build()); }
private Collector<Entry<Symbol, Expression>, Builder, Assignments> toAssignments() { return Collector.of( Assignments::builder, (builder, entry) -> builder.put(entry.getKey(), entry.getValue()), (left, right) -> { left.putAll(right.build()); return left; }, Assignments.Builder::build); }
@Test public void testValidTypeOnlyCoercion() { Expression expression = new Cast(columnB.toSymbolReference(), StandardTypes.BIGINT); Assignments assignments = Assignments.builder() .put(symbolAllocator.newSymbol(expression, BIGINT), expression) .put(symbolAllocator.newSymbol(columnE.toSymbolReference(), VARCHAR), columnE.toSymbolReference()) // implicit coercion from varchar(3) to varchar .build(); PlanNode node = new ProjectNode(newId(), baseTableScan, assignments); assertTypesValid(node); }
private Collector<Entry<Symbol, Expression>, Builder, Assignments> toAssignments() { return Collector.of( Assignments::builder, (builder, entry) -> builder.put(entry.getKey(), entry.getValue()), (left, right) -> { left.putAll(right.build()); return left; }, Assignments.Builder::build); }
public static Assignments of(Symbol symbol, Expression expression) { return builder().put(symbol, expression).build(); }
public Builder putIdentity(Symbol symbol) { put(symbol, symbol.toSymbolReference()); return this; }
@Test public void testValidTypeOnlyCoercion() { Expression expression = new Cast(columnB.toSymbolReference(), StandardTypes.BIGINT); Assignments assignments = Assignments.builder() .put(symbolAllocator.newSymbol(expression, BIGINT), expression) .put(symbolAllocator.newSymbol(columnE.toSymbolReference(), VARCHAR), columnE.toSymbolReference()) // implicit coercion from varchar(3) to varchar .build(); PlanNode node = new ProjectNode(newId(), baseTableScan, assignments); assertTypesValid(node); }
private static PlanNode addProjection(Context context, PlanNode node, Symbol symbol, Expression expression) { Assignments.Builder projections = Assignments.builder(); for (Symbol outputSymbol : node.getOutputSymbols()) { projections.putIdentity(outputSymbol); } projections.put(symbol, expression); return new ProjectNode(context.getIdAllocator().getNextId(), node, projections.build()); }