Search in sources :

Example 1 with PartUpdateOperator

use of io.dingodb.exec.operator.PartUpdateOperator in project dingo by dingodb.

the class DingoJobVisitor method visit.

@Override
public Collection<Output> visit(@Nonnull DingoPartModify rel) {
    Collection<Output> inputs = dingo(rel.getInput()).accept(this);
    String tableName = getSimpleName(rel.getTable());
    List<Output> outputs = new LinkedList<>();
    TableDefinition td = Services.META.getTableDefinition(tableName);
    final TableId tableId = new TableId(Services.META.getTableKey(tableName));
    for (Output input : inputs) {
        Task task = input.getTask();
        Operator operator;
        switch(rel.getOperation()) {
            case INSERT:
                operator = new PartInsertOperator(tableId, input.getHint().getPartId(), td.getTupleSchema(), td.getKeyMapping());
                break;
            case UPDATE:
                operator = new PartUpdateOperator(tableId, input.getHint().getPartId(), td.getTupleSchema(), td.getKeyMapping(), TupleMapping.of(td.getColumnIndices(rel.getUpdateColumnList())), rel.getSourceExpressionList().stream().map(RexConverter::toString).collect(Collectors.toList()));
                break;
            case DELETE:
                operator = new PartDeleteOperator(tableId, input.getHint().getPartId(), td.getTupleSchema(), td.getKeyMapping());
                break;
            default:
                throw new IllegalStateException("Operation \"" + rel.getOperation() + "\" is not supported.");
        }
        operator.setId(idGenerator.get());
        task.putOperator(operator);
        input.setLink(operator.getInput(0));
        OutputHint hint = new OutputHint();
        hint.setToSumUp(true);
        operator.getSoleOutput().setHint(hint);
        outputs.addAll(operator.getOutputs());
    }
    return outputs;
}
Also used : TableId(io.dingodb.common.table.TableId) SumUpOperator(io.dingodb.exec.operator.SumUpOperator) AggregateOperator(io.dingodb.exec.operator.AggregateOperator) SortOperator(io.dingodb.exec.operator.SortOperator) RootOperator(io.dingodb.exec.operator.RootOperator) PartScanOperator(io.dingodb.exec.operator.PartScanOperator) SendOperator(io.dingodb.exec.operator.SendOperator) ReceiveOperator(io.dingodb.exec.operator.ReceiveOperator) ProjectOperator(io.dingodb.exec.operator.ProjectOperator) ValuesOperator(io.dingodb.exec.operator.ValuesOperator) PartUpdateOperator(io.dingodb.exec.operator.PartUpdateOperator) ReduceOperator(io.dingodb.exec.operator.ReduceOperator) Operator(io.dingodb.exec.base.Operator) GetByKeysOperator(io.dingodb.exec.operator.GetByKeysOperator) PartitionOperator(io.dingodb.exec.operator.PartitionOperator) PartDeleteOperator(io.dingodb.exec.operator.PartDeleteOperator) PartInsertOperator(io.dingodb.exec.operator.PartInsertOperator) CoalesceOperator(io.dingodb.exec.operator.CoalesceOperator) Task(io.dingodb.exec.base.Task) PartUpdateOperator(io.dingodb.exec.operator.PartUpdateOperator) PartDeleteOperator(io.dingodb.exec.operator.PartDeleteOperator) LinkedList(java.util.LinkedList) PartInsertOperator(io.dingodb.exec.operator.PartInsertOperator) OutputHint(io.dingodb.exec.base.OutputHint) Output(io.dingodb.exec.base.Output) TableDefinition(io.dingodb.common.table.TableDefinition)

Aggregations

TableDefinition (io.dingodb.common.table.TableDefinition)1 TableId (io.dingodb.common.table.TableId)1 Operator (io.dingodb.exec.base.Operator)1 Output (io.dingodb.exec.base.Output)1 OutputHint (io.dingodb.exec.base.OutputHint)1 Task (io.dingodb.exec.base.Task)1 AggregateOperator (io.dingodb.exec.operator.AggregateOperator)1 CoalesceOperator (io.dingodb.exec.operator.CoalesceOperator)1 GetByKeysOperator (io.dingodb.exec.operator.GetByKeysOperator)1 PartDeleteOperator (io.dingodb.exec.operator.PartDeleteOperator)1 PartInsertOperator (io.dingodb.exec.operator.PartInsertOperator)1 PartScanOperator (io.dingodb.exec.operator.PartScanOperator)1 PartUpdateOperator (io.dingodb.exec.operator.PartUpdateOperator)1 PartitionOperator (io.dingodb.exec.operator.PartitionOperator)1 ProjectOperator (io.dingodb.exec.operator.ProjectOperator)1 ReceiveOperator (io.dingodb.exec.operator.ReceiveOperator)1 ReduceOperator (io.dingodb.exec.operator.ReduceOperator)1 RootOperator (io.dingodb.exec.operator.RootOperator)1 SendOperator (io.dingodb.exec.operator.SendOperator)1 SortOperator (io.dingodb.exec.operator.SortOperator)1