]> granicus.if.org Git - php/commitdiff
- Fixed bug #54167 (PDO_DBLIB returns null on SQLUNIQUE field)
authorFelipe Pena <felipe@php.net>
Sat, 5 Mar 2011 23:07:45 +0000 (23:07 +0000)
committerFelipe Pena <felipe@php.net>
Sat, 5 Mar 2011 23:07:45 +0000 (23:07 +0000)
# initial patch by: mjh at hodginsmedia dot com (5.3)
# trunk version by me

NEWS
ext/pdo_dblib/dblib_stmt.c

diff --git a/NEWS b/NEWS
index 161d8c830c22a3abc70f19edfe102d780ebd6b10..54e097817c525b466350e5f0ae2cf3e5474a723e 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,6 +1,9 @@
 PHP                                                                        NEWS
 |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
 ?? ??? 2011, PHP 5.3.6
+- PDO DBLib driver:
+  . Fixed bug #54167 (PDO_DBLIB returns null on SQLUNIQUE field).
+    (mjh at hodginsmedia dot com, Felipe)
 
 03 Mar 2011, PHP 5.3.6RC2
 - Zend Engine:
index 2f771609b7353b119829fd9ef51c9ad08fb2f95c..e7c8d9e9db227af5dc2970199de6c2fbda8dfb5d 100644 (file)
@@ -25,6 +25,7 @@
 
 #include "php.h"
 #include "php_ini.h"
+#include "ext/standard/php_string.h"
 #include "ext/standard/info.h"
 #include "pdo/php_pdo.h"
 #include "pdo/php_pdo_driver.h"
@@ -67,7 +68,6 @@ static int pdo_dblib_stmt_dtor(pdo_stmt_t *stmt TSRMLS_DC)
 
 static int pdo_dblib_stmt_execute(pdo_stmt_t *stmt TSRMLS_DC)
 {
-       pdo_dbh_t *dbh = stmt->dbh;
        pdo_dblib_stmt *S = (pdo_dblib_stmt*)stmt->driver_data;
        pdo_dblib_db_handle *H = S->H;
        RETCODE resret, ret;
@@ -174,6 +174,23 @@ static int pdo_dblib_stmt_execute(pdo_stmt_t *stmt TSRMLS_DC)
                                                val->len = spprintf(&val->data, 0, "%.4f", money_value);
                                                }
                                                break;
+#ifdef SQLUNIQUE
+                                        case SQLUNIQUE: {
+#else
+                                        case 36: { /* FreeTDS hack, also used by ext/mssql */
+#endif
+                                                val->len = 36+1;
+                                                val->data = emalloc(val->len + 1);
+
+                                                /* uniqueidentifier is a 16-byte binary number, convert to 32 char hex string */
+#ifdef SQLUNIQUE
+                                                val->len = dbconvert(NULL, SQLUNIQUE, dbdata(H->link, i+1), dbdatlen(H->link, i+1), SQLCHAR, val->data, val->len);
+#else
+                                                val->len = dbconvert(NULL, 36, dbdata(H->link, i+1), dbdatlen(H->link, i+1), SQLCHAR, val->data, val->len);
+#endif
+                                                php_strtoupper(val->data, val->len);
+                                                break;
+                                        }
                                        default:
                                                if (dbwillconvert(S->cols[i].coltype, SQLCHAR)) {
                                                        val->len = 32 + (2 * dbdatlen(H->link, i+1));