abies Wed Aug 6 13:51:46 2003 EDT
Modified files:
/php-src/ext/interbase interbase.c php_interbase.h
Log:
Added three new user functions
ibase_{commit|rollback}_ret()
Commit or rollback a transaction without losing the transaction context.
ibase_name_result()
Assign a name to a result so {UPDATE|DELETE} ... WHERE CURRENT OF <name>
statements can be used.
Index: php-src/ext/interbase/interbase.c
diff -u php-src/ext/interbase/interbase.c:1.117 php-src/ext/interbase/interbase.c:1.118
--- php-src/ext/interbase/interbase.c:1.117 Wed Aug 6 11:27:16 2003
+++ php-src/ext/interbase/interbase.c Wed Aug 6 13:51:46 2003
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: interbase.c,v 1.117 2003/08/06 15:27:16 abies Exp $ */
+/* $Id: interbase.c,v 1.118 2003/08/06 17:51:46 abies Exp $ */
/* TODO: Arrays, roles?
@@ -75,8 +75,8 @@
#endif
#ifdef ZEND_DEBUG
-#define IBDEBUG(a) php_printf("::: %s (%d)\n", a, __LINE__);
-/* #define IBDEBUG(a)*/
+/* #define IBDEBUG(a) php_printf("::: %s (%d)\n", a, __LINE__); */
+#define IBDEBUG(a)
#else
#define IBDEBUG(a)
#endif
@@ -94,6 +94,7 @@
PHP_FE(ibase_fetch_assoc, NULL)
PHP_FE(ibase_fetch_object, NULL)
PHP_FE(ibase_free_result, NULL)
+ PHP_FE(ibase_name_result, NULL)
PHP_FE(ibase_prepare, NULL)
PHP_FE(ibase_execute, NULL)
PHP_FE(ibase_free_query, NULL)
@@ -107,6 +108,8 @@
PHP_FE(ibase_trans, NULL)
PHP_FE(ibase_commit, NULL)
PHP_FE(ibase_rollback, NULL)
+ PHP_FE(ibase_commit_ret, NULL)
+ PHP_FE(ibase_rollback_ret, NULL)
PHP_FE(ibase_blob_info, NULL)
PHP_FE(ibase_blob_create, NULL)
@@ -674,7 +677,7 @@
php_info_print_table_start();
php_info_print_table_row(2, "Interbase Support", "enabled");
- php_info_print_table_row(2, "Revision", "$Revision: 1.117 $");
+ php_info_print_table_row(2, "Revision", "$Revision: 1.118 $");
#ifdef COMPILE_DL_INTERBASE
php_info_print_table_row(2, "Dynamic Module", "Yes");
#endif
@@ -1767,12 +1770,15 @@
/* }}} */
/* {{{ _php_ibase_trans_end() */
+#define RETAIN 2
#define COMMIT 1
#define ROLLBACK 0
+
static void _php_ibase_trans_end(INTERNAL_FUNCTION_PARAMETERS, int commit)
{
ibase_trans *trans = NULL;
int res_id = 0;
+ ISC_STATUS result;
RESET_ERRMSG;
@@ -1802,20 +1808,29 @@
break;
}
- if (commit) {
- if (isc_commit_transaction(IB_STATUS, &trans->handle)) {
- _php_ibase_error(TSRMLS_C);
- RETURN_FALSE;
- }
- } else {
- if (isc_rollback_transaction(IB_STATUS, &trans->handle)) {
- _php_ibase_error(TSRMLS_C);
- RETURN_FALSE;
- }
+ switch (commit) {
+
+ case ROLLBACK:
+ result = isc_rollback_transaction(IB_STATUS, &trans->handle);
+ break;
+ case COMMIT:
+ result = isc_commit_transaction(IB_STATUS, &trans->handle);
+ break;
+ case (ROLLBACK | RETAIN):
+ result = isc_rollback_retaining(IB_STATUS, &trans->handle);
+ break;
+ case (COMMIT | RETAIN):
+ result = isc_commit_retaining(IB_STATUS, &trans->handle);
+ break;
}
+ if (result) {
+ _php_ibase_error(TSRMLS_C);
+ RETURN_FALSE;
+ }
+
/* Don't try to destroy implicitly opened transaction from list... */
- if (res_id != 0) {
+ if ( (commit & RETAIN) == 0 && res_id != 0) {
zend_list_delete(res_id);
}
RETURN_TRUE;
@@ -1838,6 +1853,22 @@
}
/* }}} */
+/* {{{ proto bool ibase_commit_ret( resource link_identifier )
+ Commit transaction and retain the transaction context */
+PHP_FUNCTION(ibase_commit_ret)
+{
+ _php_ibase_trans_end(INTERNAL_FUNCTION_PARAM_PASSTHRU, COMMIT | RETAIN);
+}
+/* }}} */
+
+/* {{{ proto bool ibase_rollback_ret( resource link_identifier )
+ Rollback transaction and retain the transaction context */
+PHP_FUNCTION(ibase_rollback_ret)
+{
+ _php_ibase_trans_end(INTERNAL_FUNCTION_PARAM_PASSTHRU, ROLLBACK | RETAIN);
+}
+/* }}} */
+
/* {{{ proto resource ibase_query([resource link_identifier [, string query [, int
bind_args]]])
Execute a query */
PHP_FUNCTION(ibase_query)
@@ -2437,6 +2468,32 @@
}
/* }}} */
+
+/* {{{ proto bool ibase_name_result(resource result, string name)
+ Assign a name to a result for use with ... WHERE CURRENT OF <name> statements */
+PHP_FUNCTION(ibase_name_result)
+{
+ zval **result_arg, **name_arg;
+ ibase_result *ib_result;
+
+ RESET_ERRMSG;
+
+ if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &result_arg, &name_arg)
== FAILURE) {
+ WRONG_PARAM_COUNT;
+ }
+
+ ZEND_FETCH_RESOURCE(ib_result, ibase_result *, result_arg, -1, "InterBase
result", le_result);
+ convert_to_string_ex(name_arg);
+
+ if (isc_dsql_set_cursor_name(IB_STATUS, &ib_result->stmt,
Z_STRVAL_PP(name_arg), 0)) {
+ _php_ibase_error(TSRMLS_C);
+ RETURN_FALSE;
+ }
+ RETURN_TRUE;
+}
+/* }}} */
+
+
/* {{{ proto bool ibase_free_result(resource result)
Free the memory used by a result */
PHP_FUNCTION(ibase_free_result)
@@ -2548,8 +2605,11 @@
}
if (_php_ibase_exec(&ib_result, ib_query, ZEND_NUM_ARGS() - 1, bind_args
TSRMLS_CC) == FAILURE) {
+ free_alloca(args);
RETURN_FALSE;
}
+
+ free_alloca(args);
if (ib_result) { /* select statement */
ib_query->cursor_open = 1;
Index: php-src/ext/interbase/php_interbase.h
diff -u php-src/ext/interbase/php_interbase.h:1.37
php-src/ext/interbase/php_interbase.h:1.38
--- php-src/ext/interbase/php_interbase.h:1.37 Wed Aug 6 08:09:30 2003
+++ php-src/ext/interbase/php_interbase.h Wed Aug 6 13:51:46 2003
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_interbase.h,v 1.37 2003/08/06 12:09:30 abies Exp $ */
+/* $Id: php_interbase.h,v 1.38 2003/08/06 17:51:46 abies Exp $ */
#ifndef PHP_INTERBASE_H
#define PHP_INTERBASE_H
@@ -29,7 +29,7 @@
extern zend_module_entry ibase_module_entry;
#define phpext_interbase_ptr &ibase_module_entry
-#ifndef ISC_INT64_FORMAT
+#ifndef ISC_INT64_FORMAT
#ifdef PHP_WIN32
#define ISC_INT64_FORMAT "I64"
#else
@@ -52,6 +52,7 @@
PHP_FUNCTION(ibase_fetch_assoc);
PHP_FUNCTION(ibase_fetch_object);
PHP_FUNCTION(ibase_free_result);
+PHP_FUNCTION(ibase_name_result);
PHP_FUNCTION(ibase_prepare);
PHP_FUNCTION(ibase_execute);
PHP_FUNCTION(ibase_free_query);
@@ -65,6 +66,8 @@
PHP_FUNCTION(ibase_trans);
PHP_FUNCTION(ibase_commit);
PHP_FUNCTION(ibase_rollback);
+PHP_FUNCTION(ibase_commit_ret);
+PHP_FUNCTION(ibase_rollback_ret);
PHP_FUNCTION(ibase_blob_create);
PHP_FUNCTION(ibase_blob_add);
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php