aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB
diff options
context:
space:
mode:
authorPaul S. Owen <psotfx@users.sourceforge.net>2002-03-05 02:19:38 +0000
committerPaul S. Owen <psotfx@users.sourceforge.net>2002-03-05 02:19:38 +0000
commit28b38f054786014f436eefa019308eb8658cb711 (patch)
tree4be0b2cbdc589b216f85aacc7950a4123aecf101 /phpBB
parentbe2532588c3a0472d915bc378207883c350f1a0c (diff)
downloadforums-28b38f054786014f436eefa019308eb8658cb711.tar
forums-28b38f054786014f436eefa019308eb8658cb711.tar.gz
forums-28b38f054786014f436eefa019308eb8658cb711.tar.bz2
forums-28b38f054786014f436eefa019308eb8658cb711.tar.xz
forums-28b38f054786014f436eefa019308eb8658cb711.zip
Fixed various transaction related issues and changed mssql-odbc name to ... mssql-odbc, hopefully this hasn't been (and won't be) responsible for any problems ...
git-svn-id: file:///svn/phpbb/trunk@2269 89ea8834-ac86-4346-8a33-228a782c2dd0
Diffstat (limited to 'phpBB')
-rw-r--r--phpBB/db/msaccess.php27
-rw-r--r--phpBB/db/mssql-odbc.php29
-rw-r--r--phpBB/db/mssql.php28
-rw-r--r--phpBB/db/mysql4.php19
-rw-r--r--phpBB/db/postgres7.php25
5 files changed, 99 insertions, 29 deletions
diff --git a/phpBB/db/msaccess.php b/phpBB/db/msaccess.php
index a2ae1a32a5..fe45540be2 100644
--- a/phpBB/db/msaccess.php
+++ b/phpBB/db/msaccess.php
@@ -94,7 +94,7 @@ class sql_db
{
$this->num_queries++;
- if( $transaction == BEGIN_TRANSACTION )
+ if( $transaction == BEGIN_TRANSACTION && !$this->in_transaction )
{
if( !odbc_autocommit($this->db_connect_id, false) )
{
@@ -195,16 +195,35 @@ class sql_db
if( $transaction == END_TRANSACTION && $this->in_transaction )
{
- odbc_commit($this->db_connect_id);
- odbc_autocommit($this->db_connect_id, true);
$this->in_transaction = FALSE;
+
+ if ( !@odbc_commit($this->db_connect_id) )
+ {
+ odbc_rollback($this->db_connect_id);
+ odbc_autocommit($this->db_connect_id, true);
+ return false;
+ }
+ odbc_autocommit($this->db_connect_id, true);
}
return $this->result;
}
else
{
- return false;
+ if( $transaction == END_TRANSACTION && $this->in_transaction )
+ {
+ $this->in_transaction = FALSE;
+
+ if ( !@odbc_commit($this->db_connect_id) )
+ {
+ odbc_rollback($this->db_connect_id);
+ odbc_autocommit($this->db_connect_id, true);
+ return false;
+ }
+ odbc_autocommit($this->db_connect_id, true);
+ }
+
+ return true;
}
}
diff --git a/phpBB/db/mssql-odbc.php b/phpBB/db/mssql-odbc.php
index f71f95bafc..76424d111e 100644
--- a/phpBB/db/mssql-odbc.php
+++ b/phpBB/db/mssql-odbc.php
@@ -22,7 +22,7 @@
if(!defined("SQL_LAYER"))
{
-define("SQL_LAYER","mssql");
+define("SQL_LAYER","mssql-odbc");
class sql_db
{
@@ -93,7 +93,7 @@ class sql_db
{
$this->num_queries++;
- if( $transaction == BEGIN_TRANSACTION )
+ if( $transaction == BEGIN_TRANSACTION && !$this->in_transaction )
{
if( !odbc_autocommit($this->db_connect_id, false) )
{
@@ -190,9 +190,15 @@ class sql_db
if( $transaction == END_TRANSACTION && $this->in_transaction )
{
- odbc_commit($this->db_connect_id);
- odbc_autocommit($this->db_connect_id, true);
$this->in_transaction = FALSE;
+
+ if ( !odbc_commit($this->db_connect_id) )
+ {
+ odbc_rollback($this->db_connect_id);
+ odbc_autocommit($this->db_connect_id, true);
+ return false;
+ }
+ odbc_autocommit($this->db_connect_id, true);
}
odbc_free_result($this->result);
@@ -201,7 +207,20 @@ class sql_db
}
else
{
- return false;
+ if( $transaction == END_TRANSACTION && $this->in_transaction )
+ {
+ $this->in_transaction = FALSE;
+
+ if ( !@odbc_commit($this->db_connect_id) )
+ {
+ odbc_rollback($this->db_connect_id);
+ odbc_autocommit($this->db_connect_id, true);
+ return false;
+ }
+ odbc_autocommit($this->db_connect_id, true);
+ }
+
+ return true;
}
}
diff --git a/phpBB/db/mssql.php b/phpBB/db/mssql.php
index 4754d8c422..a6634f6a86 100644
--- a/phpBB/db/mssql.php
+++ b/phpBB/db/mssql.php
@@ -100,13 +100,13 @@ class sql_db
unset($this->result);
unset($this->row);
- if( $query != "" )
+ if ( $query != "" )
{
$this->num_queries++;
- if($transaction == BEGIN_TRANSACTION)
+ if ( $transaction == BEGIN_TRANSACTION && !$this->in_transaction )
{
- if( !mssql_query("BEGIN TRANSACTION", $this->db_connect_id) )
+ if ( !mssql_query("BEGIN TRANSACTION", $this->db_connect_id) )
{
return false;
}
@@ -196,12 +196,32 @@ class sql_db
if( $transaction == END_TRANSACTION && $this->in_transaction )
{
- mssql_query("COMMIT", $this->db_connect_id);
$this->in_transaction = FALSE;
+
+ if( !@mssql_query("COMMIT", $this->db_connect_id) )
+ {
+ @mssql_query("ROLLBACK", $this->db_connect_id);
+ return false;
+ }
}
return $this->result;
}
+ else
+ {
+ if( $transaction == END_TRANSACTION && $this->in_transaction )
+ {
+ $this->in_transaction = FALSE;
+
+ if( !@mssql_query("COMMIT", $this->db_connect_id) )
+ {
+ @mssql_query("ROLLBACK", $this->db_connect_id);
+ return false;
+ }
+ }
+
+ return true;
+ }
}
//
diff --git a/phpBB/db/mysql4.php b/phpBB/db/mysql4.php
index a712265ff0..de01f42b09 100644
--- a/phpBB/db/mysql4.php
+++ b/phpBB/db/mysql4.php
@@ -105,7 +105,7 @@ class sql_db
if( $query != "" )
{
$this->num_queries++;
- if( $transaction == BEGIN_TRANSACTION )
+ if( $transaction == BEGIN_TRANSACTION && !$this->in_transaction )
{
$result = mysql_query("BEGIN", $this->db_connect_id);
if(!$result)
@@ -117,15 +117,28 @@ class sql_db
$this->query_result = mysql_query($query, $this->db_connect_id);
}
+ else
+ {
+ if( $transaction == END_TRANSACTION && $this->in_transaction )
+ {
+ $result = mysql_query("COMMIT", $this->db_connect_id);
+ }
+ }
if( $this->query_result )
{
unset($this->row[$this->query_result]);
unset($this->rowset[$this->query_result]);
- if( $transaction == END_TRANSACTION )
+ if( $transaction == END_TRANSACTION && $this->in_transaction )
{
- $result = mysql_query("COMMIT", $this->db_connect_id);
+ $this->in_transaction = FALSE;
+
+ if ( !mysql_query("COMMIT", $this->db_connect_id) )
+ {
+ mysql_query("ROLLBACK", $this->db_connect_id);
+ return false;
+ }
}
return $this->query_result;
diff --git a/phpBB/db/postgres7.php b/phpBB/db/postgres7.php
index 84b26c66b9..96a90fbb1a 100644
--- a/phpBB/db/postgres7.php
+++ b/phpBB/db/postgres7.php
@@ -109,7 +109,6 @@ class sql_db
}
}
-
//
// Query method
//
@@ -125,14 +124,14 @@ class sql_db
$query = preg_replace("/LIMIT ([0-9]+),([ 0-9]+)/", "LIMIT \\2 OFFSET \\1", $query);
- if( $transaction == BEGIN_TRANSACTION )
+ if( $transaction == BEGIN_TRANSACTION && !$this->in_transaction )
{
- $result = @pg_exec($this->db_connect_id, "BEGIN");
- if( !$result )
+ $this->in_transaction = TRUE;
+
+ if( !@pg_exec($this->db_connect_id, "BEGIN") )
{
return false;
}
- $this->in_transaction = TRUE;
}
$this->query_result = @pg_exec($this->db_connect_id, $query);
@@ -140,13 +139,13 @@ class sql_db
{
if( $transaction == END_TRANSACTION )
{
- $result = @pg_exec($this->db_connect_id, "COMMIT");
- if( !$result )
+ $this->in_transaction = FALSE;
+
+ if( !@pg_exec($this->db_connect_id, "COMMIT") )
{
@pg_exec($this->db_connect_id, "ROLLBACK");
return false;
}
- $this->in_transaction = FALSE;
}
$this->last_query_text[$this->query_result] = $query;
@@ -170,18 +169,18 @@ class sql_db
}
else
{
- if( $transaction == END_TRANSACTION )
+ if( $transaction == END_TRANSACTION && $this->in_transaction )
{
- $result = @pg_exec($this->db_connect_id, "COMMIT");
- if( !$result )
+ $this->in_transaction = FALSE;
+
+ if( !@pg_exec($this->db_connect_id, "COMMIT") )
{
@pg_exec($this->db_connect_id, "ROLLBACK");
return false;
}
- $this->in_transaction = FALSE;
}
- return false;
+ return true;
}
}