import com.taobao.tddl.executor.record.CloneableRecord; //导入方法依赖的package包/类
@SuppressWarnings("rawtypes")
@Override
protected int executePut(ExecutionContext executionContext, IPut put, ITable table, IndexMeta meta)
throws Exception {
ITransaction transaction = executionContext.getTransaction();
int affect_rows = 0;
IPut delete = put;
ISchematicCursor conditionCursor = null;
IRowSet rowSet = null;
CloneableRecord key = CodecFactory.getInstance(CodecFactory.FIXED_LENGTH)
.getCodec(meta.getKeyColumns())
.newEmptyRecord();
try {
conditionCursor = ExecutorContext.getContext()
.getTopologyExecutor()
.execByExecPlanNode(delete.getQueryTree(), executionContext);
while ((rowSet = conditionCursor.next()) != null) {
affect_rows++;
for (ColumnMeta cm : meta.getKeyColumns()) {
Object val = getValByColumnMeta(rowSet, cm);
key.put(cm.getName(), val);
}
// CloneableRecord key =
// ExecUtils.convertToClonableRecord(rowSet);
prepare(transaction, table, rowSet, null, null, PUT_TYPE.DELETE);
table.delete(executionContext, key, meta, put.getTableName());
}
} catch (Exception e) {
throw e;
} finally {
if (conditionCursor != null) {
List exs = new ArrayList();
exs = conditionCursor.close(exs);
if (!exs.isEmpty()) {
throw GeneralUtil.mergeException(exs);
}
}
}
return affect_rows;
}