From 96d910263098906f95d5e002d1fb3e067b9b6621 Mon Sep 17 00:00:00 2001 From: Daniela Mariaschi Date: Sat, 14 Jun 2003 17:46:33 +0000 Subject: [PATCH] MFH: Added IBASE_REC_VERSION/IBASE_REC_NO_VERSION transaction constants --- ext/interbase/interbase.c | 41 ++++++++++++++++++++----------- ext/interbase/php_interbase.h | 26 ++++++++++++-------- ext/interbase/tests/005.phpt | 24 +++++++++++++++++- ext/interbase/tests/interbase.inc | 13 ++++++++++ 4 files changed, 79 insertions(+), 25 deletions(-) diff --git a/ext/interbase/interbase.c b/ext/interbase/interbase.c index 844d018975..bb54bf57d2 100644 --- a/ext/interbase/interbase.c +++ b/ext/interbase/interbase.c @@ -550,13 +550,19 @@ PHP_MINIT_FUNCTION(ibase) REGISTER_LONG_CONSTANT("IBASE_DEFAULT", PHP_IBASE_DEFAULT, CONST_PERSISTENT); REGISTER_LONG_CONSTANT("IBASE_TEXT", PHP_IBASE_TEXT, CONST_PERSISTENT); REGISTER_LONG_CONSTANT("IBASE_UNIXTIME", PHP_IBASE_UNIXTIME, CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("IBASE_TIMESTAMP", PHP_IBASE_TIMESTAMP, CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("IBASE_DATE", PHP_IBASE_DATE, CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("IBASE_TIME", PHP_IBASE_TIME, CONST_PERSISTENT); + /* transactions */ + REGISTER_LONG_CONSTANT("IBASE_WRITE", PHP_IBASE_WRITE, CONST_PERSISTENT); REGISTER_LONG_CONSTANT("IBASE_READ", PHP_IBASE_READ, CONST_PERSISTENT); REGISTER_LONG_CONSTANT("IBASE_COMMITTED", PHP_IBASE_COMMITTED, CONST_PERSISTENT); REGISTER_LONG_CONSTANT("IBASE_CONSISTENCY", PHP_IBASE_CONSISTENCY, CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("IBASE_CONCURRENCY", PHP_IBASE_CONCURRENCY, CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("IBASE_REC_VERSION", PHP_IBASE_REC_VERSION, CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("IBASE_REC_NO_VERSION", PHP_IBASE_REC_NO_VERSION, CONST_PERSISTENT); REGISTER_LONG_CONSTANT("IBASE_NOWAIT", PHP_IBASE_NOWAIT, CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("IBASE_TIMESTAMP", PHP_IBASE_TIMESTAMP, CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("IBASE_DATE", PHP_IBASE_DATE, CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("IBASE_TIME", PHP_IBASE_TIME, CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("IBASE_WAIT", PHP_IBASE_WAIT, CONST_PERSISTENT); return SUCCESS; } @@ -1541,27 +1547,34 @@ PHP_FUNCTION(ibase_trans) ZEND_FETCH_RESOURCE2(ib_link, ibase_db_link *, NULL, link_id, "InterBase link", le_link, le_plink); } - if (trans_argl ) { + if (trans_argl) { tpb[tpb_len++] = isc_tpb_version3; tpbp = tpb; /* access mode */ - if (trans_argl & PHP_IBASE_READ) /* READ ONLY TRANSACTION */ + if (trans_argl & PHP_IBASE_READ) { /* READ ONLY TRANSACTION */ tpb[tpb_len++] = isc_tpb_read; - else - tpb[tpb_len++] = isc_tpb_write; + } else { + tpb[tpb_len++] = isc_tpb_write; /* default access mode */ + } /* isolation level */ if (trans_argl & PHP_IBASE_COMMITTED) { tpb[tpb_len++] = isc_tpb_read_committed; - } else if (trans_argl & PHP_IBASE_CONSISTENCY) + if (trans_argl & PHP_IBASE_REC_VERSION) { + tpb[tpb_len++] = isc_tpb_rec_version; + }else{ + tpb[tpb_len++] = isc_tpb_no_rec_version; /* default in read_committed */ + } + } else if (trans_argl & PHP_IBASE_CONSISTENCY) { tpb[tpb_len++] = isc_tpb_consistency; - else - tpb[tpb_len++] = isc_tpb_concurrency; + } else { + tpb[tpb_len++] = isc_tpb_concurrency; /* default isolation level */ + } /* lock resolution */ - if (trans_argl & PHP_IBASE_NOWAIT) + if (trans_argl & PHP_IBASE_NOWAIT) { tpb[tpb_len++] = isc_tpb_nowait; - else - tpb[tpb_len++] = isc_tpb_wait; - + } else { + tpb[tpb_len++] = isc_tpb_wait; /* default lock resolution */ + } } /* find empty transaction slot */ diff --git a/ext/interbase/php_interbase.h b/ext/interbase/php_interbase.h index 4651732a08..8dfbedd1f4 100644 --- a/ext/interbase/php_interbase.h +++ b/ext/interbase/php_interbase.h @@ -160,16 +160,22 @@ typedef struct _php_ibase_varchar { /* extern ibase_module php_ibase_module; */ enum php_interbase_option { - PHP_IBASE_DEFAULT = 0, - PHP_IBASE_TEXT = 1, - PHP_IBASE_UNIXTIME = 2, - PHP_IBASE_READ = 4, - PHP_IBASE_COMMITTED = 8, - PHP_IBASE_CONSISTENCY = 16, - PHP_IBASE_NOWAIT = 32, - PHP_IBASE_TIMESTAMP = 64, - PHP_IBASE_DATE = 128, - PHP_IBASE_TIME = 256 + PHP_IBASE_DEFAULT = 0, + PHP_IBASE_TEXT = 1, + PHP_IBASE_UNIXTIME = 2, + PHP_IBASE_TIMESTAMP = 4, + PHP_IBASE_DATE = 8, + PHP_IBASE_TIME = 16, + /* transactions */ + PHP_IBASE_WRITE = 2, + PHP_IBASE_READ = 4, + PHP_IBASE_COMMITTED = 8, + PHP_IBASE_CONSISTENCY = 16, + PHP_IBASE_CONCURRENCY = 32, + PHP_IBASE_REC_VERSION = 64, + PHP_IBASE_REC_NO_VERSION = 128, + PHP_IBASE_NOWAIT = 256, + PHP_IBASE_WAIT = 512 }; #ifdef ZTS diff --git a/ext/interbase/tests/005.phpt b/ext/interbase/tests/005.phpt index cf86ca5c8a..94b6521322 100644 --- a/ext/interbase/tests/005.phpt +++ b/ext/interbase/tests/005.phpt @@ -108,7 +108,8 @@ three transaction on default link $tr_1 = ibase_trans(); /* this default transaction also */ $tr_2 = ibase_trans(IBASE_READ); - $tr_3 = ibase_trans(IBASE_READ+IBASE_COMMITTED); + $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); $res = ibase_query("select * from test5"); @@ -139,6 +140,10 @@ three transaction on default link 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"; @@ -146,6 +151,7 @@ three transaction on default link 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"; @@ -153,6 +159,15 @@ three transaction on default link 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 @@ -247,6 +262,13 @@ three rows in third transaction 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 diff --git a/ext/interbase/tests/interbase.inc b/ext/interbase/tests/interbase.inc index df708deca2..260ef00622 100755 --- a/ext/interbase/tests/interbase.inc +++ b/ext/interbase/tests/interbase.inc @@ -58,6 +58,19 @@ function out_result($result, $table_name = "") echo "---\n"; } +function out_result_trap_error($result, $table_name = "") +{ + echo "--- $table_name ---\n"; + while ($r = @ibase_fetch_assoc($result)){ + while (list($k, $v) = each($r) ){ + echo "$r[$k]\t"; + } + echo "\n"; + } + echo "errmsg [" . ibase_errmsg() . "]\t\n"; + echo "---\n"; +} + /* M/D/Y H:M:S */ function rand_datetime() { -- 2.40.0