use of io.dingodb.calcite.rel.DingoPartModify in project dingo by dingodb.
the class TestDingoJobVisitor method testVisitPartModify.
@Test
public void testVisitPartModify() {
RelOptCluster cluster = parser.getCluster();
DingoPartModify partModify = new DingoPartModify(cluster, cluster.traitSetOf(DingoConventions.DISTRIBUTED), distributedValues, table, TableModify.Operation.INSERT, null, null);
Job job = DingoJobVisitor.createJob(partModify);
Assert.job(job).taskNum(2).task(0, t -> t.location(MockMetaServiceProvider.LOC_0).operatorNum(2).soleSource().isA(ValuesOperator.class).soleOutput().isA(PartModifyOperator.class)).task(1, t -> t.location(MockMetaServiceProvider.LOC_1).operatorNum(2).soleSource().isA(ValuesOperator.class).soleOutput().isA(PartModifyOperator.class));
}
use of io.dingodb.calcite.rel.DingoPartModify in project dingo by dingodb.
the class DingoDistributedValuesRule method onMatch.
@Override
public void onMatch(@Nonnull RelOptRuleCall call) {
DingoTableModify modify = call.rel(0);
Values values = call.rel(1);
RelOptCluster cluster = modify.getCluster();
RelOptTable table = modify.getTable();
call.transformTo(new DingoPartModify(cluster, modify.getTraitSet().replace(DingoConventions.DISTRIBUTED), new DingoDistributedValues(cluster, values.getRowType(), values.getTuples(), values.getTraitSet().replace(DingoConventions.DISTRIBUTED), table), table, modify.getOperation(), modify.getUpdateColumnList(), modify.getSourceExpressionList()));
}
use of io.dingodb.calcite.rel.DingoPartModify in project dingo by dingodb.
the class DingoPartModifyRule method onMatch.
@Override
public void onMatch(@Nonnull RelOptRuleCall call) {
DingoTableModify rel = call.rel(0);
RelNode input = rel.getInput();
RelNode convertedInput = null;
RelOptCluster cluster = rel.getCluster();
switch(rel.getOperation()) {
case INSERT:
convertedInput = new DingoExchange(cluster, rel.getTraitSet().replace(DingoConventions.DISTRIBUTED), new DingoPartition(cluster, rel.getTraitSet().replace(DingoConventions.DISTRIBUTED), convert(input, DingoConventions.DISTRIBUTED), rel.getTable()));
break;
case UPDATE:
// Only support update in part.
checkUpdateInPart(rel);
convertedInput = convert(input, DingoConventions.DISTRIBUTED);
break;
case DELETE:
convertedInput = convert(input, DingoConventions.DISTRIBUTED);
break;
default:
throw new IllegalStateException("Operation \"" + rel.getOperation() + "\" is not supported.");
}
call.transformTo(new DingoPartModify(cluster, rel.getTraitSet().replace(DingoConventions.DISTRIBUTED), convertedInput, rel.getTable(), rel.getOperation(), rel.getUpdateColumnList(), rel.getSourceExpressionList()));
}
Aggregations