add nested transactions (mysql >= 5.5 only)
This commit is contained in:
24
simpletest/TransactionTest.php
Normal file
24
simpletest/TransactionTest.php
Normal file
@@ -0,0 +1,24 @@
|
||||
<?
|
||||
class TransactionTest extends SimpleTest {
|
||||
function test_1_transactions() {
|
||||
DB::$nested_transactions = false;
|
||||
|
||||
DB::query("UPDATE accounts SET age=%i WHERE username=%s", 600, 'Abe');
|
||||
|
||||
DB::startTransaction();
|
||||
DB::query("UPDATE accounts SET age=%i WHERE username=%s", 700, 'Abe');
|
||||
DB::startTransaction();
|
||||
DB::query("UPDATE accounts SET age=%i WHERE username=%s", 800, 'Abe');
|
||||
DB::rollback();
|
||||
|
||||
$age = DB::queryFirstField("SELECT age FROM accounts WHERE username=%s", 'Abe');
|
||||
$this->assert($age == 700);
|
||||
|
||||
DB::rollback();
|
||||
|
||||
$age = DB::queryFirstField("SELECT age FROM accounts WHERE username=%s", 'Abe');
|
||||
$this->assert($age == 700);
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
63
simpletest/TransactionTest_55.php
Normal file
63
simpletest/TransactionTest_55.php
Normal file
@@ -0,0 +1,63 @@
|
||||
<?
|
||||
class TransactionTest_55 extends SimpleTest {
|
||||
function test_1_transactions() {
|
||||
DB::$nested_transactions = true;
|
||||
|
||||
$depth = DB::startTransaction();
|
||||
$this->assert($depth === 1);
|
||||
DB::query("UPDATE accounts SET age=%i WHERE username=%s", 700, 'Abe');
|
||||
|
||||
$depth = DB::startTransaction();
|
||||
$this->assert($depth === 2);
|
||||
DB::query("UPDATE accounts SET age=%i WHERE username=%s", 800, 'Abe');
|
||||
|
||||
$depth = DB::startTransaction();
|
||||
$this->assert($depth === 3);
|
||||
DB::query("UPDATE accounts SET age=%i WHERE username=%s", 500, 'Abe');
|
||||
$depth = DB::commit();
|
||||
|
||||
$this->assert($depth === 2);
|
||||
|
||||
$age = DB::queryFirstField("SELECT age FROM accounts WHERE username=%s", 'Abe');
|
||||
$this->assert($age == 500);
|
||||
|
||||
$depth = DB::rollback();
|
||||
$this->assert($depth === 1);
|
||||
|
||||
$age = DB::queryFirstField("SELECT age FROM accounts WHERE username=%s", 'Abe');
|
||||
$this->assert($age == 700);
|
||||
|
||||
$depth = DB::commit();
|
||||
$this->assert($depth === 0);
|
||||
|
||||
$age = DB::queryFirstField("SELECT age FROM accounts WHERE username=%s", 'Abe');
|
||||
$this->assert($age == 700);
|
||||
|
||||
|
||||
DB::$nested_transactions = false;
|
||||
}
|
||||
|
||||
function test_2_transactions() {
|
||||
DB::$nested_transactions = true;
|
||||
|
||||
DB::query("UPDATE accounts SET age=%i WHERE username=%s", 600, 'Abe');
|
||||
|
||||
DB::startTransaction();
|
||||
DB::query("UPDATE accounts SET age=%i WHERE username=%s", 700, 'Abe');
|
||||
DB::startTransaction();
|
||||
DB::query("UPDATE accounts SET age=%i WHERE username=%s", 800, 'Abe');
|
||||
DB::rollback();
|
||||
|
||||
$age = DB::queryFirstField("SELECT age FROM accounts WHERE username=%s", 'Abe');
|
||||
$this->assert($age == 700);
|
||||
|
||||
DB::rollback();
|
||||
|
||||
$age = DB::queryFirstField("SELECT age FROM accounts WHERE username=%s", 'Abe');
|
||||
$this->assert($age == 600);
|
||||
|
||||
DB::$nested_transactions = false;
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
@@ -25,23 +25,25 @@ else $is_php_53 = false;
|
||||
|
||||
error_reporting(E_ALL | E_STRICT);
|
||||
require_once '../db.class.php';
|
||||
DB::$user = 'meekrodb_test_us';
|
||||
|
||||
include 'test_setup.php'; //test config values go here
|
||||
DB::$user = $set_db_user;
|
||||
DB::$password = $set_password;
|
||||
DB::$dbName = $set_db;
|
||||
DB::$host = $set_host;
|
||||
DB::get(); //connect to mysql
|
||||
|
||||
require_once 'BasicTest.php';
|
||||
require_once 'ObjectTest.php';
|
||||
require_once 'WhereClauseTest.php';
|
||||
require_once 'ErrorTest.php';
|
||||
require_once 'TransactionTest.php';
|
||||
|
||||
$classes_to_test = array(
|
||||
'BasicTest',
|
||||
'WhereClauseTest',
|
||||
'ObjectTest',
|
||||
'ErrorTest',
|
||||
'TransactionTest',
|
||||
);
|
||||
|
||||
if ($is_php_53) {
|
||||
@@ -51,6 +53,14 @@ if ($is_php_53) {
|
||||
echo "PHP 5.3 not detected, skipping 5.3 tests..\n";
|
||||
}
|
||||
|
||||
$mysql_version = DB::serverVersion();
|
||||
if ($mysql_version >= '5.5') {
|
||||
require_once 'TransactionTest_55.php';
|
||||
$classes_to_test[] = 'TransactionTest_55';
|
||||
} else {
|
||||
echo "MySQL 5.5 not available (version is $mysql_version) -- skipping MySQL 5.5 tests\n";
|
||||
}
|
||||
|
||||
$time_start = microtime_float();
|
||||
foreach ($classes_to_test as $class) {
|
||||
$object = new $class();
|
||||
|
||||
Reference in New Issue
Block a user