ssufficool Tue, 22 Jun 2010 02:59:52 +0000 Revision: http://svn.php.net/viewvc?view=revision&revision=300647
Log: Fix bug #52137 - implement lastInsertId Bug: http://bugs.php.net/52137 (Open) pdo_dblib does not implement lastInsertId 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-22 02:09:57 UTC (rev 300646) +++ php/php-src/trunk/ext/pdo_dblib/dblib_driver.c 2010-06-22 02:59:52 UTC (rev 300647) @@ -197,6 +197,50 @@ return pdo_dblib_transaction_cmd("ROLLBACK TRANSACTION", dbh TSRMLS_CC); } +char *dblib_handle_last_id(pdo_dbh_t *dbh, const char *name, unsigned int *len TSRMLS_DC) +{ + pdo_dblib_db_handle *H = (pdo_dblib_db_handle *)dbh->driver_data; + + RETCODE ret; + char *id = NULL; + + /* + * Would use scope_identity() but it's not implemented on Sybase + */ + + if (FAIL == dbcmd(H->link, "SELECT @@IDENTITY")) { + return NULL; + } + + if (FAIL == dbsqlexec(H->link)) { + return NULL; + } + + ret = dbresults(H->link); + if (ret == FAIL || ret == NO_MORE_RESULTS) { + dbcancel(H->link); + return NULL; + } + + ret = dbnextrow(H->link); + + if (ret == FAIL || ret == NO_MORE_ROWS) { + dbcancel(H->link); + return NULL; + } + + if (dbdatlen(H->link, 1) == 0) { + dbcancel(H->link); + return NULL; + } + + id = emalloc(32); + *len = dbconvert(NULL, (dbcoltype(H->link, 1)) , (dbdata(H->link, 1)) , (dbdatlen(H->link, 1)), SQLCHAR, id, (DBINT)-1); + + dbcancel(H->link); + return id; +} + static struct pdo_dbh_methods dblib_methods = { dblib_handle_closer, dblib_handle_preparer, @@ -206,7 +250,7 @@ dblib_handle_commit, /* commit */ dblib_handle_rollback, /* rollback */ NULL, /*set attr */ - NULL, /* last insert id */ + dblib_handle_last_id, /* last insert id */ dblib_fetch_error, /* fetch error */ NULL, /* get attr */ NULL, /* check liveness */ @@ -303,6 +347,7 @@ #if PDO_DBLIB_IS_MSSQL PDO_DRIVER_HEADER(mssql), #elif defined(PHP_WIN32) +#define PDO_DBLIB_IS_SYBASE PDO_DRIVER_HEADER(sybase), #else PDO_DRIVER_HEADER(dblib),
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php