You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This problem leads to accumulation on server side of the locked transactions from other applications which completions not till the end of complete transactions expect.
All it leads to deceleration of operation of the server because of necessity to trace not up to the end closed transactions.
To be treated only by reconnection.
--------------------------------------------------------------------------
The problem is property autoCommit call commit_retaining instead of commit from method IscStatement::deleteResultSet.
--------------------------------------------------------------------------
void IscStatement::deleteResultSet(IscResultSet * resultSet)
{
resultSets.deleteItem (resultSet);
if (resultSets.isEmpty())
{
if ( connection )
{
if ( transactionLocal )
{
if ( transactionInfo.autoCommit )
commitLocal();
}
else if ( connection->transactionInfo.autoCommit )
connection->commitAuto();
if \( isActiveCursor\(\) \)
\{
// Close cursors too\.
ISC\_STATUS statusVector\[20\];
connection\-\>GDS\-\>\_dsql\_free\_statement\( statusVector, &statementHandle, DSQL\_close \);
// Cursor already closed or not assigned
if \( statusVector\[1\] && statusVector\[1\] \!= 335544569\)
THROW\_ISC\_EXCEPTION \(connection, statusVector\);
\}
\}
openCursor = false;
typeStmt = stmtNone;
\}
}
--------------------------------------------------------------------------
To solve the problem I use that:
--------------------------------------------------------------------------
void IscStatement::deleteResultSet(IscResultSet * resultSet)
{
resultSets.deleteItem (resultSet);
if (resultSets.isEmpty())
{
bool needCloseCursors = isActiveCursor();
openCursor = false;
typeStmt = stmtNone;
if \( connection \)
\{
if \( transactionLocal \)
\{
if \( transactionInfo\.autoCommit \)
commitLocal\(\);
\}
else if \( connection\-\>transactionInfo\.autoCommit \)
connection\-\>commitAuto\(\);
if \( needCloseCursors \)
\{
// Close cursors too\.
ISC\_STATUS statusVector\[20\];
connection\-\>GDS\-\>\_dsql\_free\_statement\( statusVector, &statementHandle, DSQL\_close \);
// Cursor already closed or not assigned
if \( statusVector\[1\] && statusVector\[1\] \!= 335544569\)
THROW\_ISC\_EXCEPTION \(connection, statusVector\);
\}
\}
\}
Submitted by: Ivan Volnikov (ivan_v)
Attachments:
OdbcFb.zip
This problem leads to accumulation on server side of the locked transactions from other applications which completions not till the end of complete transactions expect.
All it leads to deceleration of operation of the server because of necessity to trace not up to the end closed transactions.
To be treated only by reconnection.
--------------------------------------------------------------------------
The problem is property autoCommit call commit_retaining instead of commit from method IscStatement::deleteResultSet.
--------------------------------------------------------------------------
void IscStatement::deleteResultSet(IscResultSet * resultSet)
{
resultSets.deleteItem (resultSet);
if (resultSets.isEmpty())
{
if ( connection )
{
if ( transactionLocal )
{
if ( transactionInfo.autoCommit )
commitLocal();
}
else if ( connection->transactionInfo.autoCommit )
connection->commitAuto();
}
--------------------------------------------------------------------------
To solve the problem I use that:
--------------------------------------------------------------------------
void IscStatement::deleteResultSet(IscResultSet * resultSet)
{
resultSets.deleteItem (resultSet);
if (resultSets.isEmpty())
{
bool needCloseCursors = isActiveCursor();
openCursor = false;
typeStmt = stmtNone;
}
--------------------------------------------------------------------------
Commits: e8fcf6b 7ba202b
The text was updated successfully, but these errors were encountered: