ssufficool                               Mon, 21 Jun 2010 07:30:48 +0000

Revision: http://svn.php.net/viewvc?view=revision&revision=300628

Log:
Fix bug #38955 - add transaction support

Bug: http://bugs.php.net/38955 (Open) PDO DBLIB driver does not support 
transactions
      
Changed paths:
    U   php/php-src/trunk/ext/pdo_dblib/dblib_driver.c

Modified: php/php-src/trunk/ext/pdo_dblib/dblib_driver.c
===================================================================
--- php/php-src/trunk/ext/pdo_dblib/dblib_driver.c      2010-06-21 06:54:10 UTC 
(rev 300627)
+++ php/php-src/trunk/ext/pdo_dblib/dblib_driver.c      2010-06-21 07:30:48 UTC 
(rev 300628)
@@ -166,19 +166,53 @@
        return 1;
 }

+static int pdo_dblib_transaction_cmd(const char *cmd, pdo_dbh_t *dbh TSRMLS_DC)
+{
+       pdo_dblib_db_handle *H = (pdo_dblib_db_handle *)dbh->driver_data;
+       RETCODE ret;
+
+       if (FAIL == dbcmd(H->link, cmd)) {
+               return 0;
+       }
+
+       if (FAIL == dbsqlexec(H->link)) {
+               return 0;
+       }
+
+       return 1;
+}
+
+static int dblib_handle_begin(pdo_dbh_t *dbh TSRMLS_DC)
+{
+       return pdo_dblib_transaction_cmd("BEGIN TRANSACTION", dbh TSRMLS_CC);
+}
+
+static int dblib_handle_commit(pdo_dbh_t *dbh TSRMLS_DC)
+{
+       return pdo_dblib_transaction_cmd("COMMIT TRANSACTION", dbh TSRMLS_CC);
+}
+
+static int dblib_handle_rollback(pdo_dbh_t *dbh TSRMLS_DC)
+{
+       return pdo_dblib_transaction_cmd("ROLLBACK TRANSACTION", dbh TSRMLS_CC);
+}
+
 static struct pdo_dbh_methods dblib_methods = {
        dblib_handle_closer,
        dblib_handle_preparer,
        dblib_handle_doer,
        dblib_handle_quoter,
-       NULL,
-       NULL,
-       NULL,
-       NULL,
-       NULL, /* last insert */
+       dblib_handle_begin, /* begin */
+       dblib_handle_commit, /* commit */
+       dblib_handle_rollback, /* rollback */
+       NULL, /*set attr */
+       NULL, /* last insert id */
        dblib_fetch_error, /* fetch error */
        NULL, /* get attr */
        NULL, /* check liveness */
+       NULL, /* get driver methods */
+       NULL, /* request shutdown */
+       NULL  /* in transaction */
 };

 static int pdo_dblib_handle_factory(pdo_dbh_t *dbh, zval *driver_options 
TSRMLS_DC)

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to