mirror of
https://github.com/php/php-src.git
synced 2024-11-30 21:35:36 +08:00
Return integer field types as native integers instead of strings
Use another define for better compatibility Test case for #72583 Feature. Small optimisations. Adjust conditional directives according to coding standards Add more compatibility for "end of line" on multiple environements Updated execute.phpt test after switching to integer mapping
This commit is contained in:
parent
e55e93a1e3
commit
826122fa8e
@ -217,7 +217,23 @@ static int firebird_stmt_describe(pdo_stmt_t *stmt, int colno) /* {{{ */
|
||||
}
|
||||
memmove(cp, var->aliasname, var->aliasname_length);
|
||||
*(cp+var->aliasname_length) = '\0';
|
||||
col->param_type = PDO_PARAM_STR;
|
||||
|
||||
if (var->sqlscale < 0) {
|
||||
col->param_type = PDO_PARAM_STR;
|
||||
} else {
|
||||
switch (var->sqltype & ~1) {
|
||||
case SQL_SHORT:
|
||||
case SQL_LONG:
|
||||
#if SIZEOF_ZEND_LONG >= 8
|
||||
case SQL_INT64:
|
||||
#endif
|
||||
col->param_type = PDO_PARAM_INT;
|
||||
break;
|
||||
default:
|
||||
col->param_type = PDO_PARAM_STR;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
@ -373,16 +389,24 @@ static int firebird_stmt_get_col(pdo_stmt_t *stmt, int colno, char **ptr, /* {{
|
||||
*len = var->sqllen;
|
||||
break;
|
||||
case SQL_SHORT:
|
||||
*ptr = FETCH_BUF(S->fetch_buf[colno], char, CHAR_BUF_LEN, NULL);
|
||||
*len = slprintf(*ptr, CHAR_BUF_LEN, "%d", *(short*)var->sqldata);
|
||||
*len = sizeof(zend_long);
|
||||
*ptr = FETCH_BUF(S->fetch_buf[colno], zend_long, 1, NULL);
|
||||
*(zend_long *)*ptr = *(short*)var->sqldata;
|
||||
break;
|
||||
case SQL_LONG:
|
||||
*ptr = FETCH_BUF(S->fetch_buf[colno], char, CHAR_BUF_LEN, NULL);
|
||||
*len = slprintf(*ptr, CHAR_BUF_LEN, "%d", *(ISC_LONG*)var->sqldata);
|
||||
*len = sizeof(zend_long);
|
||||
*ptr = FETCH_BUF(S->fetch_buf[colno], zend_long, 1, NULL);
|
||||
*(zend_long *)*ptr = *(ISC_LONG*)var->sqldata;
|
||||
break;
|
||||
case SQL_INT64:
|
||||
#if SIZEOF_ZEND_LONG >= 8
|
||||
*len = sizeof(zend_long);
|
||||
*ptr = FETCH_BUF(S->fetch_buf[colno], zend_long, 1, NULL);
|
||||
*(zend_long *)*ptr = *(ISC_INT64*)var->sqldata;
|
||||
#else
|
||||
*ptr = FETCH_BUF(S->fetch_buf[colno], char, CHAR_BUF_LEN, NULL);
|
||||
*len = slprintf(*ptr, CHAR_BUF_LEN, "%" LL_MASK "d", *(ISC_INT64*)var->sqldata);
|
||||
#endif
|
||||
break;
|
||||
case SQL_FLOAT:
|
||||
*ptr = FETCH_BUF(S->fetch_buf[colno], char, CHAR_BUF_LEN, NULL);
|
||||
|
21
ext/pdo_firebird/tests/bug_72583.phpt
Normal file
21
ext/pdo_firebird/tests/bug_72583.phpt
Normal file
@ -0,0 +1,21 @@
|
||||
--TEST--
|
||||
PDO_Firebird: Feature 72583 Fetch integers as php integers not as strings
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded('interbase') || !extension_loaded('pdo_firebird')) die('skip'); ?>
|
||||
--FILE--
|
||||
<?php
|
||||
require 'testdb.inc';
|
||||
$C = new PDO('firebird:dbname='.$test_base, $user, $password) or die;
|
||||
@$C->exec('drop table atable');
|
||||
$C->exec('create table atable (aint integer, asmi smallint)');
|
||||
$C->exec('insert into atable values (1, -1)');
|
||||
$S = $C->prepare('select aint, asmi from atable');
|
||||
$S->execute();
|
||||
$D = $S->fetch(PDO::FETCH_NUM);
|
||||
echo gettype($D[0])."\n".gettype($D[1]);
|
||||
unset($S);
|
||||
unset($C);
|
||||
?>
|
||||
--EXPECT--
|
||||
integer
|
||||
integer
|
@ -50,9 +50,9 @@ bool(true)
|
||||
int(1)
|
||||
array(6) {
|
||||
["ID"]=>
|
||||
string(1) "1"
|
||||
int(1)
|
||||
[0]=>
|
||||
string(1) "1"
|
||||
int(1)
|
||||
["TEXT"]=>
|
||||
string(3) "bla"
|
||||
[1]=>
|
||||
|
Loading…
Reference in New Issue
Block a user