123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289 |
- --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";
- /*
- Difference between default and other transactions:
- default committed 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 omitted. 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_COMMITTED + 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";
- ?>
- --EXPECTF--
- 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 %a]
- ---
- three rows
- --- test5 ---
- 2
- 3
- 4
- ---
- four rows
- --- test5 ---
- 2
- 3
- 4
- 5
- ---
- four rows again
- --- test5 ---
- 2
- 3
- 4
- 5
- ---
- end of test
|