3232#include "php_pdo_dblib_int.h"
3333#include "zend_exceptions.h"
3434
35+
36+ /* {{{ pdo_dblib_get_field_name
37+ *
38+ * Taken from php_mssql_get_field_name
39+ *
40+ */
41+ static char * pdo_dblib_get_field_name (int type )
42+ {
43+ switch (type ) {
44+ case SQLBINARY :
45+ case SQLVARBINARY :
46+ return "blob" ;
47+ break ;
48+ case SQLCHAR :
49+ case SQLVARCHAR :
50+ return "char" ;
51+ break ;
52+ case SQLTEXT :
53+ return "text" ;
54+ break ;
55+ case SQLDATETIME :
56+ case SQLDATETIM4 :
57+ case SQLDATETIMN :
58+ return "datetime" ;
59+ break ;
60+ case SQLDECIMAL :
61+ case SQLFLT4 :
62+ case SQLFLT8 :
63+ case SQLFLTN :
64+ return "real" ;
65+ break ;
66+ case SQLINT1 :
67+ case SQLINT2 :
68+ case SQLINT4 :
69+ case SQLINTN :
70+ return "int" ;
71+ break ;
72+ case SQLNUMERIC :
73+ return "numeric" ;
74+ break ;
75+ case SQLMONEY :
76+ case SQLMONEY4 :
77+ case SQLMONEYN :
78+ return "money" ;
79+ break ;
80+ case SQLBIT :
81+ return "bit" ;
82+ break ;
83+ case SQLIMAGE :
84+ return "image" ;
85+ break ;
86+ #ifdef SQLUNIQUE
87+ case SQLUNIQUE :
88+ return "uniqueidentifier" ;
89+ break ;
90+ #endif
91+ default :
92+ return "unknown" ;
93+ break ;
94+ }
95+ }
96+ /* }}} */
97+
3598static int dblib_dblib_stmt_cursor_closer (pdo_stmt_t * stmt TSRMLS_DC )
3699{
37100 pdo_dblib_stmt * S = (pdo_dblib_stmt * )stmt -> driver_data ;
@@ -207,6 +270,25 @@ static int pdo_dblib_stmt_param_hook(pdo_stmt_t *stmt, struct pdo_bound_param_da
207270 return 1 ;
208271}
209272
273+ static int pdo_dblib_stmt_get_column_meta (pdo_stmt_t * stmt , long colno , zval * return_value TSRMLS_DC )
274+ {
275+ pdo_dblib_stmt * S = (pdo_dblib_stmt * )stmt -> driver_data ;
276+ pdo_dblib_db_handle * H = S -> H ;
277+
278+ array_init (return_value );
279+
280+ DBTYPEINFO * dbtypeinfo ;
281+ dbtypeinfo = dbcoltypeinfo (H -> link , colno + 1 );
282+
283+ add_assoc_long (return_value , "max_length" , dbcollen (H -> link , colno + 1 ) );
284+ add_assoc_long (return_value , "precision" , (int ) dbtypeinfo -> precision );
285+ add_assoc_long (return_value , "scale" , (int ) dbtypeinfo -> scale );
286+ add_assoc_string (return_value , "column_source" , dbcolsource (H -> link , colno + 1 ), 1 );
287+ add_assoc_string (return_value , "native_type" , pdo_dblib_get_field_name (dbcoltype (H -> link , colno + 1 )), 1 );
288+
289+ return 1 ;
290+ }
291+
210292
211293struct pdo_stmt_methods dblib_stmt_methods = {
212294 pdo_dblib_stmt_dtor ,
@@ -217,7 +299,7 @@ struct pdo_stmt_methods dblib_stmt_methods = {
217299 pdo_dblib_stmt_param_hook ,
218300 NULL , /* set attr */
219301 NULL , /* get attr */
220- NULL , /* meta */
302+ pdo_dblib_stmt_get_column_meta , /* meta */
221303 pdo_dblib_stmt_next_rowset , /* nextrow */
222304 dblib_dblib_stmt_cursor_closer
223305};
0 commit comments