diff options
Diffstat (limited to 'ext/interbase/tests/005.phpt')
-rw-r--r-- | ext/interbase/tests/005.phpt | 290 |
1 files changed, 290 insertions, 0 deletions
diff --git a/ext/interbase/tests/005.phpt b/ext/interbase/tests/005.phpt new file mode 100644 index 0000000..5b16ac2 --- /dev/null +++ b/ext/interbase/tests/005.phpt @@ -0,0 +1,290 @@ +--TEST-- +InterBase: transactions +--SKIPIF-- +<?php include("skipif.inc"); ?> +--FILE-- +<?php /* $Id$ */ + + 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"; + +/* +Difference between default and other transactions: +default commited when you call ibase_close(). +Other transaction doing rollback. + +If you not open default transaction with +ibase_trans, default transaction open +when you call ibase_query(), ibase_prepare(), +ibase_blob_create(), ibase_blob_import() first time. +*/ + +/* +simple default transaction test without ibase_trans() +*/ + + ibase_connect($test_base); + + echo "empty table\n"; + + /* out_table call ibase_query() + and ibase_query() start default transaction */ + out_table("test5"); + + /* in default transaction context */ + ibase_query("insert into test5 (i) values (1)"); + + echo "one row\n"; + out_table("test5"); + + ibase_rollback(); /* default rolled */ + + echo "after rollback table empty again\n"; + out_table("test5"); /* started new default transaction */ + + ibase_query("insert into test5 (i) values (2)"); + + ibase_close(); /* commit here! */ + + ibase_connect($test_base); + + echo "one row\n"; + out_table("test5"); + ibase_close(); + +/* +default transaction on default link +First open transaction on link will be default. +$tr_def_l1 may be ommited. All queryes without link and trans +parameters run in this context +*/ + + $link_def = ibase_connect($test_base); + + $tr_def_l1 = ibase_trans(IBASE_READ); /* here transaction start */ + + /* all default */ + $res = ibase_query("select * from test5"); + + echo "one row\n"; + out_result($res,"test5"); + + ibase_free_result($res); + + /* specify transaction context... */ + $res = ibase_query($tr_def_l1, "select * from test5"); + + echo "one row... again.\n"; + out_result($res,"test5"); + + ibase_free_result($res); + + /* specify default transaction on link */ + $res = ibase_query($link_def, "select * from test5"); + + echo "one row.\n"; + out_result($res,"test5"); + + ibase_free_result($res); + + ibase_rollback($link_def); /* just for example */ + + ibase_close(); + +/* +three transaction on default link +*/ + 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); + + /* insert in first transaction context... */ + /* as default */ + ibase_query("insert into test5 (i) values (3)"); + /* specify context */ + 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)"); + + /* tr_2 is IBASE_READ + IBASE_CONCURRENCY + IBASE_WAIT */ + $res = ibase_query($tr_2, "select * from test5"); + + echo "one row in second transaction\n"; + out_result($res,"test5"); + + ibase_free_result($res); + + /* tr_3 is IBASE_COMMITTED + IBASE_REC_VERSION + IBASE_WAIT */ + $res = ibase_query($tr_3, "select * from test5"); + + echo "three rows in third transaction\n"; + out_result($res,"test5"); + + ibase_free_result($res); + + /* tr_4 IBASE_COMMITED + IBASE_REC_NO_VERSION + IBASE_NOWAIT */ + $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(); +/* +transactions on second link +*/ + $link_1 = ibase_pconnect($test_base); + $link_2 = ibase_pconnect($test_base); + + $tr_1 = ibase_trans(IBASE_DEFAULT, $link_2); /* this default transaction also */ + $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 + |