]> granicus.if.org Git - php/commitdiff
MFH: Added IBASE_REC_VERSION/IBASE_REC_NO_VERSION transaction constants
authorDaniela Mariaschi <daniela@php.net>
Sat, 14 Jun 2003 17:46:33 +0000 (17:46 +0000)
committerDaniela Mariaschi <daniela@php.net>
Sat, 14 Jun 2003 17:46:33 +0000 (17:46 +0000)
ext/interbase/interbase.c
ext/interbase/php_interbase.h
ext/interbase/tests/005.phpt
ext/interbase/tests/interbase.inc

index 844d01897529e28e47638bc5d8c3bfb81db35813..bb54bf57d236f1f82c936fd794d3238a3c43981f 100644 (file)
@@ -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 */
index 4651732a081468c83271f34a1605462a05c16c67..8dfbedd1f4df6abe92290eb1ef8a25976b8613d5 100644 (file)
@@ -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
index cf86ca5c8a07384e487d0f4255c7298efa7f4b1f..94b65213220213cfa68184b1efe69800f9d210e5 100644 (file)
@@ -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      
index df708deca27d712db495a822d5cd904370c1ccba..260ef00622a7eeb834cee176370b81e7d506ec3d 100755 (executable)
@@ -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()
 {