@@ -217,7 +217,23 @@ static int firebird_stmt_describe(pdo_stmt_t *stmt, int colno) /* {{{ */
217
217
}
218
218
memmove (cp , var -> aliasname , var -> aliasname_length );
219
219
* (cp + var -> aliasname_length ) = '\0' ;
220
- col -> param_type = PDO_PARAM_STR ;
220
+
221
+ if (var -> sqlscale < 0 ) {
222
+ col -> param_type = PDO_PARAM_STR ;
223
+ } else {
224
+ switch (var -> sqltype & ~1 ) {
225
+ case SQL_SHORT :
226
+ case SQL_LONG :
227
+ #if SIZEOF_ZEND_LONG >= 8
228
+ case SQL_INT64 :
229
+ #endif
230
+ col -> param_type = PDO_PARAM_INT ;
231
+ break ;
232
+ default :
233
+ col -> param_type = PDO_PARAM_STR ;
234
+ break ;
235
+ }
236
+ }
221
237
222
238
return 1 ;
223
239
}
@@ -373,16 +389,24 @@ static int firebird_stmt_get_col(pdo_stmt_t *stmt, int colno, char **ptr, /* {{
373
389
* len = var -> sqllen ;
374
390
break ;
375
391
case SQL_SHORT :
376
- * ptr = FETCH_BUF (S -> fetch_buf [colno ], char , CHAR_BUF_LEN , NULL );
377
- * len = slprintf (* ptr , CHAR_BUF_LEN , "%d" , * (short * )var -> sqldata );
392
+ * len = sizeof (zend_long );
393
+ * ptr = FETCH_BUF (S -> fetch_buf [colno ], zend_long , 1 , NULL );
394
+ * (zend_long * )* ptr = * (short * )var -> sqldata ;
378
395
break ;
379
396
case SQL_LONG :
380
- * ptr = FETCH_BUF (S -> fetch_buf [colno ], char , CHAR_BUF_LEN , NULL );
381
- * len = slprintf (* ptr , CHAR_BUF_LEN , "%d" , * (ISC_LONG * )var -> sqldata );
397
+ * len = sizeof (zend_long );
398
+ * ptr = FETCH_BUF (S -> fetch_buf [colno ], zend_long , 1 , NULL );
399
+ * (zend_long * )* ptr = * (ISC_LONG * )var -> sqldata ;
382
400
break ;
383
401
case SQL_INT64 :
402
+ #if SIZEOF_ZEND_LONG >= 8
403
+ * len = sizeof (zend_long );
404
+ * ptr = FETCH_BUF (S -> fetch_buf [colno ], zend_long , 1 , NULL );
405
+ * (zend_long * )* ptr = * (ISC_INT64 * )var -> sqldata ;
406
+ #else
384
407
* ptr = FETCH_BUF (S -> fetch_buf [colno ], char , CHAR_BUF_LEN , NULL );
385
408
* len = slprintf (* ptr , CHAR_BUF_LEN , "%" LL_MASK "d" , * (ISC_INT64 * )var -> sqldata );
409
+ #endif
386
410
break ;
387
411
case SQL_FLOAT :
388
412
* ptr = FETCH_BUF (S -> fetch_buf [colno ], char , CHAR_BUF_LEN , NULL );
0 commit comments