Browse Source

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
pull/2284/head
Dorin Marcoci 10 years ago
committed by Anatol Belski
parent
commit
826122fa8e
  1. 34
      ext/pdo_firebird/firebird_statement.c
  2. 21
      ext/pdo_firebird/tests/bug_72583.phpt
  3. 4
      ext/pdo_firebird/tests/execute.phpt

34
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);

21
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

4
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]=>

Loading…
Cancel
Save