ID: 25282 Updated by: [EMAIL PROTECTED] Reported By: nigel at e-easy dot com dot au -Status: Closed +Status: Bogus Bug Type: InterBase related Operating System: Irrelevant PHP Version: Irrelevant
Previous Comments: ------------------------------------------------------------------------ [2003-08-28 18:06:43] [EMAIL PROTECTED] The constants are useless without a way of specifying a table name. Therefore, this will not be changed. PHP5 will support table reservation by means of SET TRANSACTION statements. ------------------------------------------------------------------------ [2003-08-28 17:38:07] nigel at e-easy dot com dot au Handling Lock Conflicts is what I'm trying to do. By stating that I want to reserve a table as shared write, I can then update a single field much faster, as any transaction can write to the table - even if it's been updated inside this transaction space. ...Or so I thought... On the Firebird list, they're stating that the default mode is Shared Write - not mentioned anywhere in the PHP source. Ah, another undocumented behaviour. Thanks for your time! N. ------------------------------------------------------------------------ [2003-08-28 04:47:26] [EMAIL PROTECTED] Passing the table reservation flags in this way will result in absolutely nothing, because they require a table name as an extra argument. You cannot just lock all tables for [shared|protected] [read|write]. As PHP5 will contain support in ibase_trans() for multiple databases, adding tablenames as arguments as well would clutter up the prototype too much. PHP5 _will_ allow you to execute SET TRANSACTION statements. Then you can pass table reservation flags (with tablenames) anyway you like. I seriously doubt, though, that unconditionally locking tables instead of only when necessary would actually improve performance. As far as I know, these parameters were introduced to handle lock conflicts. ------------------------------------------------------------------------ [2003-08-27 23:52:17] nigel at e-easy dot com dot au The patch for interbase.c where we apply the mask for PHP_IBASE_PROTECTED should read: + tpb[tpb_len++] = isc_tpb_protected and NOT: + tpb[tpb_len++] = isc_tpb_shared ....sorry... ------------------------------------------------------------------------ [2003-08-27 23:48:23] nigel at e-easy dot com dot au Description: ------------ PHP's support for Interbase(Firebird) is missing two important features for transaction handling - Shared, and Protected. These two additions enable performance to surpass Oracle on updates under heavy load. The patch is as follows: --- interbase.c.orig Thu Aug 28 11:39:22 2003 +++ interbase.c Thu Aug 28 12:22:44 2003 @@ -563,6 +563,8 @@ REGISTER_LONG_CONSTANT("IBASE_REC_NO_VERSION", PHP_IBASE_REC_NO_VERSION , CONST_PERSISTENT); REGISTER_LONG_CONSTANT("IBASE_NOWAIT", PHP_IBASE_NOWAIT, CONST_PERSISTE NT); REGISTER_LONG_CONSTANT("IBASE_WAIT", PHP_IBASE_WAIT, CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("IBASE_SHARED", PHP_IBASE_SHARED, CONST_PERSISTE NT); + REGISTER_LONG_CONSTANT("IBASE_PROTECTED", PHP_IBASE_PROTECTED, CONST_PE RSISTENT); return SUCCESS; } @@ -1574,6 +1576,13 @@ tpb[tpb_len++] = isc_tpb_nowait; } else { tpb[tpb_len++] = isc_tpb_wait; /* default lock resolut ion */ + } + /* Pre Allocation Modes */ + if (trans_argl & PHP_IBASE_SHARED) { + tpb[tpb_len++] = isc_tpb_shared; + } + if (trans_argl & PHP_IBASE_PROTECTED) { + tpb[tpb_len++] = isc_tpb_shared; } } --- php_interbase.h.orig Thu Aug 28 11:59:34 2003 +++ php_interbase.h Thu Aug 28 12:21:34 2003 @@ -175,7 +175,9 @@ PHP_IBASE_REC_VERSION = 64, PHP_IBASE_REC_NO_VERSION = 128, PHP_IBASE_NOWAIT = 256, - PHP_IBASE_WAIT = 512 + PHP_IBASE_WAIT = 512, + PHP_IBASE_SHARED = 1024, + PHP_IBASE_PROTECTED = 2048 }; #ifdef ZTS ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=25282&edit=1