use of io.mycat.runtime.MycatDataContextImpl 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.runtime.MycatDataContextImpl in project Mycat2 by MyCATApache.
the class MycatSessionManager method acceptNewSocketChannel.
@Override
public void acceptNewSocketChannel(Object keyAttachement, BufferPool bufPool, Selector nioSelector, SocketChannel frontChannel) throws IOException {
MySQLClientAuthHandler mySQLClientAuthHandler = new MySQLClientAuthHandler(this);
MycatSession mycat = new MycatSession(new MycatDataContextImpl(), bufPool, mySQLClientAuthHandler, this);
// 用于monitor监控获取session
SessionThread thread = (SessionThread) Thread.currentThread();
thread.setCurSession(mycat);
try {
mycat.register(nioSelector, frontChannel, SelectionKey.OP_READ);
MycatMonitor.onNewMycatSession(mycat);
mySQLClientAuthHandler.sendAuthPackge(mycat);
this.mycatSessions.add(mycat);
} catch (Exception e) {
MycatMonitor.onAuthHandlerWriteException(mycat, e);
mycat.close(false, e);
}
}
Aggregations