package jef.database.routing.sql; import java.sql.SQLException; import jef.database.jdbc.GenerateKeyReturnOper; import jef.database.jdbc.JDBCTarget; import jef.database.jsqlparser.expression.Table; import jef.database.jsqlparser.statement.insert.Insert; import jef.database.routing.PartitionResult; import jef.database.routing.jdbc.UpdateReturn; public class InsertExecutionPlan extends AbstractExecutionPlan implements ExecuteablePlan{ private StatementContext<Insert> context; public InsertExecutionPlan(PartitionResult[] results, StatementContext<Insert> context) { super(results); this.context = context; } // Insert操作是最简单的因为表名肯定只有一个 public UpdateReturn processUpdate(GenerateKeyReturnOper generateKeys) throws SQLException { PartitionResult site = this.sites[0]; JDBCTarget session=context.db.getTarget(site.getDatabase()); String s=getSql(site.getAsOneTable()); return session.innerExecuteUpdate(s, context.params, generateKeys); } @Override public String getSql(String table) { for (Table t : context.modifications) { t.setReplace(table); } String s=context.statement.toString(); for (Table t : context.modifications) { t.removeReplace(); } return s; } }