php-sqlsrv/test/sqlsrv/sqlsrv_fetch_complex_transactions.phpt

150 lines
4 KiB
PHP
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

--TEST--
Test transactions commit, rollback and aborting in between
--FILE--
<?php
include 'tools.inc';
function ComplexTransaction($conn, $conn2)
{
$tableName = GetTempTableName('testTransaction', false);
$stmt = sqlsrv_query($conn, "CREATE TABLE $tableName ([c1_int] int, [c2_real] real)");
sqlsrv_free_stmt($stmt);
$stmtSelect = sqlsrv_prepare($conn, "SELECT * FROM $tableName");
$stmtDelete = sqlsrv_prepare($conn, "DELETE TOP(3) FROM $tableName");
// insert ten rows
$numRows = 10;
InsertData($conn, $tableName, $numRows);
FetchData($stmtSelect, $tableName, $numRows);
sqlsrv_begin_transaction($conn);
sqlsrv_execute($stmtDelete);
$rowsAffected = sqlsrv_rows_affected($stmtDelete);
sqlsrv_commit($conn);
echo "Committed deleting 3 rows\n";
$numRows = $numRows - $rowsAffected;
FetchData($stmtSelect, $tableName, $numRows);
sqlsrv_begin_transaction($conn);
sqlsrv_execute($stmtDelete);
sqlsrv_rollback($conn);
echo "Rolled back\n";
FetchData($stmtSelect, $tableName, $numRows);
sqlsrv_begin_transaction($conn);
sqlsrv_execute($stmtDelete);
$rowsAffected = sqlsrv_rows_affected($stmtDelete);
sqlsrv_commit($conn);
echo "Committed deleting 3 rows\n";
$numRows = $numRows - $rowsAffected;
FetchData($stmtSelect, $tableName, $numRows);
sqlsrv_begin_transaction($conn);
sqlsrv_execute($stmtDelete);
sqlsrv_rollback($conn);
echo "Rolled back\n";
FetchData($stmtSelect, $tableName, $numRows);
sqlsrv_begin_transaction($conn);
sqlsrv_execute($stmtDelete);
// disconnect first connection, transaction aborted
sqlsrv_close($conn);
echo "Deletion aborted\n";
// select table using the second connection
$stmt = sqlsrv_prepare($conn2, "SELECT * FROM $tableName");
FetchData($stmt, $tableName, $numRows);
sqlsrv_query($conn2, "DROP TABLE $tableName");
}
function InsertData($conn, $tableName, $count)
{
$stmt = sqlsrv_prepare($conn, "INSERT INTO $tableName (c1_int, c2_real) VALUES (?, ?)", array(&$v1, &$v2));
for ($i = 0; $i < $count; $i++)
{
$v1 = $i + 1;
$v2 = $v1 * 1.5;
sqlsrv_execute($stmt);
}
}
function FetchData($stmt, $tableName, $numRows)
{
$numFetched = 0;
sqlsrv_execute($stmt);
while ($result = sqlsrv_fetch($stmt))
{
$numFetched++;
}
echo "Number of rows fetched: $numFetched\n";
if ($numFetched != $numRows)
{
echo "Expected $numRows rows.\n";
}
}
//--------------------------------------------------------------------
// RunTest
//
//--------------------------------------------------------------------
function RunTest()
{
StartTest("sqlsrv_fetch_complex_transactions");
try
{
set_time_limit(0);
sqlsrv_configure('WarningsReturnAsErrors', 1);
require_once("autonomous_setup.php");
$database = "tempdb";
// Connect
$connectionInfo = array('Database'=>$database, 'UID'=>$username, 'PWD'=>$password);
$conn = sqlsrv_connect($serverName, $connectionInfo);
if( !$conn ) { FatalError("Could not connect.\n"); }
$conn2 = sqlsrv_connect($serverName, $connectionInfo);
if( !$conn2 ) { FatalError("Could not connect.\n"); }
ComplexTransaction($conn, $conn2);
sqlsrv_close($conn2); // $conn should have been closed
}
catch (Exception $e)
{
echo $e->getMessage();
}
echo "\nDone\n";
EndTest("sqlsrv_fetch_complex_transactions");
}
RunTest();
?>
--EXPECT--

...Starting 'sqlsrv_fetch_complex_transactions' test...
Number of rows fetched: 10
Committed deleting 3 rows
Number of rows fetched: 7
Rolled back
Number of rows fetched: 7
Committed deleting 3 rows
Number of rows fetched: 4
Rolled back
Number of rows fetched: 4
Deletion aborted
Number of rows fetched: 4
Done
...Test 'sqlsrv_fetch_complex_transactions' completed successfully.