--TEST--
InterBase: transactions
--SKIPIF--
<?php include("skipif.inc"); ?>
--FILE--
<?php
require("interbase.inc");
ibase_connect($test_base);
@ibase_query("create table test5 (i integer)");
@ibase_query("delete from test5");
ibase_close();
echo "default transaction:\n";
ibase_connect($test_base);
echo "empty table\n";
out_table("test5");
ibase_query("insert into test5 (i) values (1)");
echo "one row\n";
out_table("test5");
ibase_rollback();
echo "after rollback table empty again\n";
out_table("test5");
ibase_query("insert into test5 (i) values (2)");
ibase_close();
ibase_connect($test_base);
echo "one row\n";
out_table("test5");
ibase_close();
$link_def = ibase_connect($test_base);
$tr_def_l1 = ibase_trans(IBASE_READ);
$res = ibase_query("select * from test5");
echo "one row\n";
out_result($res,"test5");
ibase_free_result($res);
$res = ibase_query($tr_def_l1, "select * from test5");
echo "one row... again.\n";
out_result($res,"test5");
ibase_free_result($res);
$res = ibase_query($link_def, "select * from test5");
echo "one row.\n";
out_result($res,"test5");
ibase_free_result($res);
ibase_rollback($link_def);
ibase_close();
ibase_connect($test_base);
$res = ibase_query("select * from test5");
echo "one row\n";
out_result($res,"test5");
ibase_free_result($res);
$tr_1 = ibase_query("SET TRANSACTION");
$tr_2 = ibase_query("SET TRANSACTION READ ONLY");
$tr_3 = ibase_trans(IBASE_READ+IBASE_COMMITTED+IBASE_REC_VERSION+IBASE_WAIT);
$tr_4 = ibase_trans(IBASE_READ+IBASE_COMMITTED+IBASE_REC_NO_VERSION+IBASE_NOWAIT);
ibase_query("insert into test5 (i) values (3)");
ibase_query($tr_1, "insert into test5 (i) values (4)");
$res = ibase_query("select * from test5");
echo "two rows\n";
out_result($res,"test5");
ibase_free_result($res);
$res = ibase_query($tr_1, "select * from test5");
echo "two rows again\n";
out_result($res,"test5");
ibase_free_result($res);
ibase_commit();
ibase_commit($tr_1);
$tr_1 = ibase_trans();
ibase_query($tr_1, "insert into test5 (i) values (5)");
$res = ibase_query($tr_2, "select * from test5");
echo "one row in second transaction\n";
out_result($res,"test5");
ibase_free_result($res);
$res = ibase_query($tr_3, "select * from test5");
echo "three rows in third transaction\n";
out_result($res,"test5");
ibase_free_result($res);
$res = ibase_query($tr_4, "select * from test5");
echo "three rows in fourth transaction with deadlock\n";
out_result_trap_error($res,"test5");
ibase_free_result($res);
ibase_rollback($tr_1);
ibase_close();
$link_1 = ibase_pconnect($test_base);
$link_2 = ibase_pconnect($test_base);
$tr_1 = ibase_trans(IBASE_DEFAULT, $link_2);
$tr_2 = ibase_trans(IBASE_COMMITTED, $link_2);
$res = ibase_query($tr_1, "select * from test5");
echo "three rows\n";
out_result($res,"test5");
ibase_free_result($res);
ibase_query($tr_1, "insert into test5 (i) values (5)");
$res = ibase_query($tr_1, "select * from test5");
echo "four rows\n";
out_result($res,"test5");
ibase_free_result($res);
ibase_commit($tr_1);
$res = ibase_query($tr_2, "select * from test5");
echo "four rows again\n";
out_result($res,"test5");
ibase_free_result($res);
ibase_close($link_1);
ibase_close($link_2);
echo "end of test\n";
?>
--EXPECT--
default transaction:
empty table
--- test5 ---
---
one row
--- test5 ---
1
---
after rollback table empty again
--- test5 ---
---
one row
--- test5 ---
2
---
one row
--- test5 ---
2
---
one row... again.
--- test5 ---
2
---
one row.
--- test5 ---
2
---
one row
--- test5 ---
2
---
two rows
--- test5 ---
2
3
---
two rows again
--- test5 ---
2
4
---
one row in second transaction
--- test5 ---
2
---
three rows in third transaction
--- test5 ---
2
3
4
---
three rows in fourth transaction with deadlock
--- test5 ---
2
3
4
errmsg [lock conflict on no wait transaction deadlock ]
---
three rows
--- test5 ---
2
3
4
---
four rows
--- test5 ---
2
3
4
5
---
four rows again
--- test5 ---
2
3
4
5
---
end of test