package com.taobao.tddl.optimizer.core.ast.dml;
import com.taobao.tddl.optimizer.core.ASTNodeFactory;
import com.taobao.tddl.optimizer.core.ast.DMLNode;
import com.taobao.tddl.optimizer.core.ast.query.KVIndexNode;
import com.taobao.tddl.optimizer.core.ast.query.TableNode;
import com.taobao.tddl.optimizer.core.plan.IDataNodeExecutor;
import com.taobao.tddl.optimizer.core.plan.dml.IInsert;
public class InsertNode extends DMLNode<InsertNode> {
private boolean createPk = true; // 是否为自增长字段,暂时不支持
public InsertNode(TableNode table){
super(table);
}
public IDataNodeExecutor toDataNodeExecutor() {
IInsert insert = ASTNodeFactory.getInstance().createInsert();
if (this.getNode().getActualTableName() != null) {
insert.setTableName(this.getNode().getActualTableName());
} else if (this.getNode() instanceof KVIndexNode) {
insert.setTableName(((KVIndexNode) this.getNode()).getIndexName());
} else {
insert.setTableName(this.getNode().getTableName());
}
insert.setIndexName((this.getNode()).getIndexUsed().getName());
insert.setConsistent(true);
insert.setUpdateColumns(this.getColumns());
insert.setUpdateValues(this.getValues());
insert.executeOn(this.getDataNode());
return insert;
}
public InsertNode deepCopy() {
InsertNode insert = new InsertNode(null);
super.deepCopySelfTo(insert);
insert.setCreatePk(this.isCreatePk());
return insert;
}
public InsertNode copy() {
InsertNode insert = new InsertNode(null);
super.copySelfTo(insert);
insert.setCreatePk(this.isCreatePk());
return insert;
}
public boolean isCreatePk() {
return createPk;
}
public InsertNode setCreatePk(boolean createPk) {
this.createPk = createPk;
return this;
}
}