Skip to content

Commit 5712b1e

Browse files
author
Stanley Sufficool
committed
Fix bug #45876 adding get column meta
1 parent abde405 commit 5712b1e

File tree

1 file changed

+83
-1
lines changed

1 file changed

+83
-1
lines changed

ext/pdo_dblib/dblib_stmt.c

Lines changed: 83 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,69 @@
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+
3598
static 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

211293
struct 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

Comments
 (0)