diff options
author | Dorin Marcoci <dorin.marcoci@marcodor.com> | 2017-01-02 16:46:09 +0200 |
---|---|---|
committer | Anatol Belski <ab@php.net> | 2017-01-06 17:43:46 +0100 |
commit | 826122fa8e1db4a0deee3830660ae3b8b5626534 (patch) | |
tree | 9843697d42fbfb82219308f3899893feb36c3d8f /ext/pdo_firebird | |
parent | e55e93a1e335bec39b7edb28f0b8470fa974f4e3 (diff) | |
download | php-git-826122fa8e1db4a0deee3830660ae3b8b5626534.tar.gz |
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
Diffstat (limited to 'ext/pdo_firebird')
-rw-r--r-- | ext/pdo_firebird/firebird_statement.c | 34 | ||||
-rw-r--r-- | ext/pdo_firebird/tests/bug_72583.phpt | 21 | ||||
-rw-r--r-- | ext/pdo_firebird/tests/execute.phpt | 4 |
3 files changed, 52 insertions, 7 deletions
diff --git a/ext/pdo_firebird/firebird_statement.c b/ext/pdo_firebird/firebird_statement.c index c83ba38db5..3feeedf39f 100644 --- a/ext/pdo_firebird/firebird_statement.c +++ b/ext/pdo_firebird/firebird_statement.c @@ -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); diff --git a/ext/pdo_firebird/tests/bug_72583.phpt b/ext/pdo_firebird/tests/bug_72583.phpt new file mode 100644 index 0000000000..6aa94a7dc2 --- /dev/null +++ b/ext/pdo_firebird/tests/bug_72583.phpt @@ -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 diff --git a/ext/pdo_firebird/tests/execute.phpt b/ext/pdo_firebird/tests/execute.phpt index 896347e935..3cec9e3aa8 100644 --- a/ext/pdo_firebird/tests/execute.phpt +++ b/ext/pdo_firebird/tests/execute.phpt @@ -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]=> |