use of io.mycat.calcite.spm.Plan in project Mycat2 by MyCATApache.
the class ObservablePlanImplementorImpl method executeInsert.
@Override
public Future<Void> executeInsert(Plan logical) {
MycatInsertRel mycatRel = (MycatInsertRel) logical.getMycatRel();
List<VertxExecuter.EachSQL> insertSqls = VertxExecuter.explainInsert((SQLInsertStatement) mycatRel.getSqlStatement(), drdsSqlWithParams.getParams());
assert !insertSqls.isEmpty();
Future<long[]> future;
if (insertSqls.size() > 1) {
future = VertxExecuter.simpleUpdate(context, true, true, mycatRel.isGlobal(), VertxExecuter.rewriteInsertBatchedStatements(insertSqls));
} else {
future = VertxExecuter.simpleUpdate(context, true, false, mycatRel.isGlobal(), insertSqls);
}
return future.eventually(u -> context.getTransactionSession().closeStatementState()).flatMap(result -> response.sendOk(result[0], result[1]));
}
use of io.mycat.calcite.spm.Plan in project Mycat2 by MyCATApache.
the class ObservablePlanImplementorImpl method executeUpdate.
@Override
public Future<Void> executeUpdate(Plan plan) {
MycatUpdateRel mycatRel = (MycatUpdateRel) plan.getMycatRel();
Collection<VertxExecuter.EachSQL> eachSQLS = VertxUpdateExecuter.explainUpdate(drdsSqlWithParams, context);
Future<long[]> future = VertxExecuter.simpleUpdate(context, mycatRel.isInsert(), true, mycatRel.isGlobal(), eachSQLS);
return future.eventually(u -> context.getTransactionSession().closeStatementState()).flatMap(result -> response.sendOk(result[0], result[1]));
}
use of io.mycat.calcite.spm.Plan in project Mycat2 by MyCATApache.
the class ExecutorProviderImpl method runAsObjectArray.
@Override
public RowBaseIterator runAsObjectArray(MycatDataContext context, String sqlStatement) {
DrdsSqlWithParams drdsSql = DrdsRunnerHelper.preParse(sqlStatement, context.getDefaultSchema());
Plan plan = DrdsRunnerHelper.getPlan(drdsSql);
AsyncMycatDataContextImpl.SqlMycatDataContextImpl sqlMycatDataContext = new AsyncMycatDataContextImpl.SqlMycatDataContextImpl(context, plan.getCodeExecuterContext(), drdsSql);
PrepareExecutor prepareExecutor = prepare(plan);
RowBaseIterator baseIterator = prepareExecutor.asRowBaseIterator(sqlMycatDataContext, plan.getMetaData());
return baseIterator;
}
use of io.mycat.calcite.spm.Plan in project Mycat2 by MyCATApache.
the class SqlResultSetService method loadResultSet.
@SneakyThrows
private Optional<Observable<MysqlPayloadObject>> loadResultSet(SQLSelectStatement sqlSelectStatement) {
return cache.get(sqlSelectStatement.toString(), () -> {
if (!MetaClusterCurrent.exist(DrdsSqlCompiler.class)) {
return Optional.empty();
}
MycatDataContext context = new MycatDataContextImpl();
try {
DrdsSqlWithParams drdsSql = DrdsRunnerHelper.preParse(sqlSelectStatement, context.getDefaultSchema());
Plan plan = DrdsRunnerHelper.getPlan(drdsSql);
XaSqlConnection transactionSession = (XaSqlConnection) context.getTransactionSession();
AsyncMycatDataContextImpl.SqlMycatDataContextImpl sqlMycatDataContext = new AsyncMycatDataContextImpl.SqlMycatDataContextImpl(context, plan.getCodeExecuterContext(), drdsSql);
PrepareExecutor prepare = MetaClusterCurrent.wrapper(ExecutorProvider.class).prepare(plan);
Observable<MysqlPayloadObject> observable = prepare.getMysqlPayloadObjectObservable(prepare.getArrayBindable(), sqlMycatDataContext, plan.getMetaData());
observable = observable.doOnTerminate(new Action() {
@Override
public void run() throws Throwable {
transactionSession.closeStatementState().onComplete(event -> context.close());
}
});
List<MysqlPayloadObject> mysqlPayloadObjects = observable.toList().blockingGet();
observable = Observable.fromIterable(mysqlPayloadObjects);
return Optional.ofNullable(observable);
} catch (Throwable t) {
context.kill();
log.error("", t);
return Optional.empty();
}
});
}
use of io.mycat.calcite.spm.Plan in project Mycat2 by MyCATApache.
the class PartitionKeyJoinTest method parse.
public static Explain parse(DrdsConst drdsConst, String sql) {
DrdsSqlCompiler drds = getDrds(drdsConst);
DrdsSqlWithParams drdsSqlWithParams = DrdsRunnerHelper.preParse(sql, null);
OptimizationContext optimizationContext = new OptimizationContext();
MycatRel dispatch = drds.dispatch(optimizationContext, drdsSqlWithParams);
Plan plan = new PlanImpl(dispatch, DrdsExecutorCompiler.getCodeExecuterContext(optimizationContext.relNodeContext.getConstantMap(), dispatch, false), drdsSqlWithParams.getAliasList());
return new Explain(plan, drdsSqlWithParams);
}
Aggregations