public static QueryStateMachine begin(QueryId queryId, String query, Session session, URI self, boolean transactionControl, TransactionManager transactionManager, Executor executor)
{
session.getTransactionId().ifPresent(transactionControl ? transactionManager::trySetActive : transactionManager::checkAndSetActive);
Session querySession;
boolean autoCommit = !session.getTransactionId().isPresent() && !transactionControl;
if (autoCommit) {
TransactionId transactionId = transactionManager.beginTransaction(true);
querySession = session.withTransactionId(transactionId);
}
else {
querySession = session;
}
QueryStateMachine queryStateMachine = new QueryStateMachine(queryId, query, querySession, self, autoCommit, transactionManager, executor);
queryStateMachine.addStateChangeListener(newState -> log.debug("Query %s is %s", queryId, newState));
queryStateMachine.addStateChangeListener(newState -> {
if (newState.isDone()) {
session.getTransactionId().ifPresent(transactionManager::trySetInactive);
}
});
return queryStateMachine;
}