cvs: php4 /ext/fbsql php_fbsql.c php_fbsql.h
| From: | Frank M. Kromann | Date: | Tue, 04 Sep 2001 21:51:11 +0000 |
| Subject: | cvs: php4 /ext/fbsql php_fbsql.c php_fbsql.h | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-7206@lists.php.net to get a copy of this message | ||
fmk Tue Sep 4 17:51:11 2001 EDT
Modified files:
/php4/ext/fbsql php_fbsql.h php_fbsql.c
Log:
Adding function to set transaction locking and isolation.
Index: php4/ext/fbsql/php_fbsql.h
diff -u php4/ext/fbsql/php_fbsql.h:1.9 php4/ext/fbsql/php_fbsql.h:1.10
--- php4/ext/fbsql/php_fbsql.h:1.9 Sun Jul 29 21:56:24 2001
+++ php4/ext/fbsql/php_fbsql.h Tue Sep 4 17:51:11 2001
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_fbsql.h,v 1.9 2001/07/30 01:56:24 zeev Exp $ */
+/* $Id: php_fbsql.h,v 1.10 2001/09/04 21:51:11 fmk Exp $ */
#define HAVE_FBSQL 1
@@ -76,6 +76,7 @@
PHP_FUNCTION(fbsql_field_len);
PHP_FUNCTION(fbsql_field_type);
PHP_FUNCTION(fbsql_field_flags);
+PHP_FUNCTION(fbsql_set_transaction);
PHP_FUNCTION(fbsql_autocommit);
PHP_FUNCTION(fbsql_commit);
PHP_FUNCTION(fbsql_rollback);
Index: php4/ext/fbsql/php_fbsql.c
diff -u php4/ext/fbsql/php_fbsql.c:1.45 php4/ext/fbsql/php_fbsql.c:1.46
--- php4/ext/fbsql/php_fbsql.c:1.45 Mon Aug 13 12:39:59 2001
+++ php4/ext/fbsql/php_fbsql.c Tue Sep 4 17:51:11 2001
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_fbsql.c,v 1.45 2001/08/13 16:39:59 andi Exp $ */
+/* $Id: php_fbsql.c,v 1.46 2001/09/04 21:51:11 fmk Exp $ */
/* TODO:
*
@@ -155,6 +155,17 @@
#define FBSQL_NUM 1<<1
#define FBSQL_BOTH (FBSQL_ASSOC|FBSQL_NUM)
+#define FBSQL_LOCK_DEFERRED 0
+#define FBSQL_LOCK_OPTIMISTIC 1
+#define FBSQL_LOCK_PESSIMISTIC 2 // default
+
+#define FBSQL_ISO_READ_UNCOMMITED 0
+#define FBSQL_ISO_READ_NCOMMITED 1
+#define FBSQL_ISO_REPEATABLE_READ 2
+#define FBSQL_ISO_SERIALIZABLE 3 // default
+#define FBSQL_ISO_VERSIONED 4
+
+
/* {{{ fbsql_functions[]
*/
function_entry fbsql_functions[] = {
@@ -196,6 +207,7 @@
PHP_FE(fbsql_field_flags, NULL)
/* Fontbase additions: */
+ PHP_FE(fbsql_set_transaction, NULL)
PHP_FE(fbsql_autocommit, NULL)
PHP_FE(fbsql_commit, NULL)
PHP_FE(fbsql_rollback, NULL)
@@ -376,6 +388,18 @@
REGISTER_LONG_CONSTANT("FBSQL_ASSOC", FBSQL_ASSOC, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("FBSQL_NUM", FBSQL_NUM, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("FBSQL_BOTH", FBSQL_BOTH, CONST_CS | CONST_PERSISTENT);
+
+ /* Register Transaction constants */
+ REGISTER_LONG_CONSTANT("FBSQL_LOCK_DEFERRED", FBSQL_LOCK_DEFERRED, CONST_CS |
CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("FBSQL_LOCK_OPTIMISTIC", FBSQL_LOCK_OPTIMISTIC, CONST_CS |
CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("FBSQL_LOCK_PESSIMISTIC", FBSQL_LOCK_PESSIMISTIC, CONST_CS |
CONST_PERSISTENT);
+
+ REGISTER_LONG_CONSTANT("FBSQL_ISO_READ_UNCOMMITED", FBSQL_ISO_READ_UNCOMMITED, CONST_CS
| CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("FBSQL_ISO_READ_NCOMMITED", FBSQL_ISO_READ_NCOMMITED, CONST_CS |
CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("FBSQL_ISO_REPEATABLE_READ", FBSQL_ISO_REPEATABLE_READ, CONST_CS
| CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("FBSQL_ISO_SERIALIZABLE ", FBSQL_ISO_SERIALIZABLE, CONST_CS |
CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("FBSQL_ISO_VERSIONED", FBSQL_ISO_VERSIONED, CONST_CS |
CONST_PERSISTENT);
+
return SUCCESS;
}
@@ -425,8 +449,6 @@
DISPLAY_INI_ENTRIES();
}
-/* {{{ php_fbsql_do_connect
- */
static void php_fbsql_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistant)
{
PHPFBLink* phpLink;
@@ -574,7 +596,6 @@
}
php_fbsql_set_default_link(return_value->value.lval TSRMLS_CC);
}
-/* }}} */
int phpfbFetchRow(PHPFBResult* result, int row)
{
@@ -653,8 +674,6 @@
}
/* }}} */
-/* {{{ php_fbsql_select_db
- */
static int php_fbsql_select_db(char *databaseName, PHPFBLink *link TSRMLS_DC)
{
unsigned port;
@@ -713,10 +732,7 @@
}
return 1;
}
-/* }}} */
-/* {{{ phpfbestrdup
- */
void phpfbestrdup(const char * s, int* length, char** value)
{
int l = s?strlen(s):0;
@@ -730,6 +746,35 @@
*value = r;
}
*length = l;
+}
+
+/* {{{ proto void fbsql_set_transaction(resource link_identifier, int Locking, int Isolation)
+ Set the transaction locking and isolation */
+PHP_FUNCTION(fbsql_set_transaction)
+{
+ PHPFBLink* phpLink = NULL;
+ FBCMetaData* md;
+ zval **fbsql_link_index = NULL, **Locking = NULL, **Isolation = NULL;
+ char strSQL[1024];
+ char *strLocking[] = {"DEFERRED", "OPTIMISTIC", "PESSIMISTIC"};
+ char *strIsolation[] = {"READ UNCOMMITED", "READ NCOMMITED", "REPEATABLE
READ", "SERIALIZABLE", "VERSIONED"};
+
+ switch (ZEND_NUM_ARGS()) {
+ case 3:
+ if (zend_get_parameters_ex(3, &fbsql_link_index, &Locking, &Isolation)==FAILURE) {
+ RETURN_FALSE;
+ }
+ break;
+ default:
+ WRONG_PARAM_COUNT;
+ break;
+ }
+ ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, -1, "FrontBase-Link",
le_link, le_plink);
+
+ sprintf(strSQL, "SET TRANSACTION LOCKING %s, ISOLATION %s;",
strLocking[Z_LVAL_PP(Locking)], strIsolation[Z_LVAL_PP(Isolation)]);
+
+ md = fbcdcExecuteDirectSQL(phpLink->connection, strSQL);
+ fbcmdRelease(md);
}
/* }}} */