use of org.jkiss.dbeaver.model.qm.meta.QMMTransactionSavepointInfo in project dbeaver by dbeaver.
the class QMUtils method getTransactionState.
@NotNull
public static QMTransactionState getTransactionState(DBCExecutionContext executionContext) {
int execCount = 0, updateCount = 0;
final boolean txnMode;
long txnStartTime = 0;
if (executionContext == null || application == null) {
txnMode = false;
} else {
QMMSessionInfo sessionInfo = getCurrentSession(executionContext);
if (sessionInfo == null || sessionInfo.isClosed()) {
txnMode = false;
} else if (sessionInfo.isTransactional()) {
QMMTransactionInfo txnInfo = sessionInfo.getTransaction();
if (txnInfo != null) {
txnMode = true;
QMMTransactionSavepointInfo sp = txnInfo.getCurrentSavepoint();
QMMStatementExecuteInfo execInfo = sp.getLastExecute();
for (QMMStatementExecuteInfo exec = execInfo; exec != null && exec.getSavepoint() == sp; exec = exec.getPrevious()) {
execCount++;
DBCExecutionPurpose purpose = exec.getStatement().getPurpose();
if (!exec.hasError() && purpose != DBCExecutionPurpose.META && purpose != DBCExecutionPurpose.UTIL) {
txnStartTime = exec.getOpenTime();
updateCount++;
}
}
} else {
// No active transaction?
txnMode = false;
}
} else {
txnMode = false;
}
}
if (txnStartTime <= 0) {
txnStartTime = System.currentTimeMillis();
}
return new QMTransactionState(execCount, updateCount, txnMode, txnStartTime);
}
Aggregations