SQLEndTran(SQL_HANDLE_DBC, H->dbc, SQL_ROLLBACK);
SQLDisconnect(H->dbc);
SQLFreeHandle(SQL_HANDLE_DBC, H->dbc);
+ H->dbc = NULL;
}
SQLFreeHandle(SQL_HANDLE_ENV, H->env);
+ H->env = NULL;
pefree(H, dbh->is_persistent);
return 0;
if (dbh->auto_commit) {
/* turn auto-commit back on again */
- RETCODE rc;
rc = SQLSetConnectAttr(H->dbc, SQL_ATTR_AUTOCOMMIT, (SQLPOINTER)SQL_AUTOCOMMIT_ON, SQL_NTS);
if (rc != SQL_SUCCESS) {
- pdo_odbc_drv_error("SQLSetConnectAttr AUTOCOMMIT = OFF");
+ pdo_odbc_drv_error("SQLSetConnectAttr AUTOCOMMIT = ON");
return 0;
}
}
{
pdo_odbc_db_handle *H = (pdo_odbc_db_handle *)dbh->driver_data;
RETCODE rc;
-
+
rc = SQLEndTran(SQL_HANDLE_DBC, H->dbc, SQL_ROLLBACK);
if (rc != SQL_SUCCESS) {
return 0;
}
}
- if (dbh->auto_commit && H->dbc && dbh->in_txn) {
+ if (dbh->auto_commit && H->dbc) {
/* turn auto-commit back on again */
- RETCODE rc;
rc = SQLSetConnectAttr(H->dbc, SQL_ATTR_AUTOCOMMIT, (SQLPOINTER)SQL_AUTOCOMMIT_ON, SQL_NTS);
if (rc != SQL_SUCCESS) {
- pdo_odbc_drv_error("SQLSetConnectAttr AUTOCOMMIT = OFF");
+ pdo_odbc_drv_error("SQLSetConnectAttr AUTOCOMMIT = ON");
return 0;
}
}
return 0;
}
- if (!dbh->auto_commit) {
- rc = SQLSetConnectAttr(H->dbc, SQL_ATTR_AUTOCOMMIT, (SQLPOINTER)SQL_AUTOCOMMIT_OFF, SQL_NTS);
- if (rc != SQL_SUCCESS) {
- pdo_odbc_drv_error("SQLSetConnectAttr AUTOCOMMIT = OFF");
- odbc_handle_closer(dbh TSRMLS_CC);
- return 0;
- }
+ rc = SQLSetConnectAttr(H->dbc, SQL_ATTR_AUTOCOMMIT,
+ (SQLPOINTER)(dbh->auto_commit ? SQL_AUTOCOMMIT_ON : SQL_AUTOCOMMIT_OFF), SQL_NTS);
+ if (rc != SQL_SUCCESS) {
+ pdo_odbc_drv_error("SQLSetConnectAttr AUTOCOMMIT");
+ odbc_handle_closer(dbh TSRMLS_CC);
+ return 0;
}
/* set up the cursor library, if needed, or if configured explicitly */