ssufficool                               Mon, 21 Jun 2010 06:54:10 +0000

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

Log:
Fix bug #45876 adding get column meta

Bug: http://bugs.php.net/45876 (Assigned) PDO: DBLIB does not support 
getColumnMeta
      
Changed paths:
    U   php/php-src/trunk/ext/pdo_dblib/dblib_stmt.c

Modified: php/php-src/trunk/ext/pdo_dblib/dblib_stmt.c
===================================================================
--- php/php-src/trunk/ext/pdo_dblib/dblib_stmt.c        2010-06-21 01:59:52 UTC 
(rev 300626)
+++ php/php-src/trunk/ext/pdo_dblib/dblib_stmt.c        2010-06-21 06:54:10 UTC 
(rev 300627)
@@ -32,6 +32,69 @@
 #include "php_pdo_dblib_int.h"
 #include "zend_exceptions.h"

+
+/* {{{ pdo_dblib_get_field_name
+ *
+ * Taken from php_mssql_get_field_name
+ *
+ */
+static char *pdo_dblib_get_field_name(int type)
+{
+       switch (type) {
+               case SQLBINARY:
+               case SQLVARBINARY:
+                       return "blob";
+                       break;
+               case SQLCHAR:
+               case SQLVARCHAR:
+                       return "char";
+                       break;
+               case SQLTEXT:
+                       return "text";
+                       break;
+               case SQLDATETIME:
+               case SQLDATETIM4:
+               case SQLDATETIMN:
+                       return "datetime";
+                       break;
+               case SQLDECIMAL:
+               case SQLFLT4:
+               case SQLFLT8:
+               case SQLFLTN:
+                       return "real";
+                       break;
+               case SQLINT1:
+               case SQLINT2:
+               case SQLINT4:
+               case SQLINTN:
+                       return "int";
+                       break;
+               case SQLNUMERIC:
+                       return "numeric";
+                       break;
+               case SQLMONEY:
+               case SQLMONEY4:
+               case SQLMONEYN:
+                       return "money";
+                       break;
+               case SQLBIT:
+                       return "bit";
+                       break;
+               case SQLIMAGE:
+                       return "image";
+                       break;
+#ifdef SQLUNIQUE
+               case SQLUNIQUE:
+                       return "uniqueidentifier";
+                       break;
+#endif
+               default:
+                       return "unknown";
+                       break;
+       }
+}
+/* }}} */
+
 static int dblib_dblib_stmt_cursor_closer(pdo_stmt_t *stmt TSRMLS_DC)
 {
        pdo_dblib_stmt *S = (pdo_dblib_stmt*)stmt->driver_data;
@@ -207,7 +270,26 @@
        return 1;
 }

+static int pdo_dblib_stmt_get_column_meta(pdo_stmt_t *stmt, long colno, zval 
*return_value TSRMLS_DC)
+{
+       pdo_dblib_stmt *S = (pdo_dblib_stmt*)stmt->driver_data;
+       pdo_dblib_db_handle *H = S->H;
+
+       array_init(return_value);

+       DBTYPEINFO* dbtypeinfo;
+       dbtypeinfo = dbcoltypeinfo(H->link, colno+1);
+
+       add_assoc_long(return_value, "max_length", dbcollen(H->link, colno+1) );
+       add_assoc_long(return_value, "precision", (int) dbtypeinfo->precision );
+       add_assoc_long(return_value, "scale", (int) dbtypeinfo->scale );
+       add_assoc_string(return_value, "column_source", dbcolsource(H->link, 
colno+1), 1);
+       add_assoc_string(return_value, "native_type", 
pdo_dblib_get_field_name(dbcoltype(H->link, colno+1)), 1);
+
+       return 1;
+}
+
+
 struct pdo_stmt_methods dblib_stmt_methods = {
        pdo_dblib_stmt_dtor,
        pdo_dblib_stmt_execute,
@@ -217,7 +299,7 @@
        pdo_dblib_stmt_param_hook,
        NULL, /* set attr */
        NULL, /* get attr */
-       NULL, /* meta */
+       pdo_dblib_stmt_get_column_meta, /* meta */
        pdo_dblib_stmt_next_rowset, /* nextrow */
        dblib_dblib_stmt_cursor_closer
 };

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

Reply via email to