Boolean data type support, added in Firebird 3. Fixes #74462.

This commit is contained in:
Dorin Marcoci 2017-05-13 17:27:15 +03:00 committed by Anatol Belski
parent e51b364a50
commit 78f23a6dd4
2 changed files with 38 additions and 1 deletions

View file

@ -1,4 +1,4 @@
/*
/*
+----------------------------------------------------------------------+
| PHP Version 7 |
+----------------------------------------------------------------------+
@ -229,6 +229,9 @@ static int firebird_stmt_describe(pdo_stmt_t *stmt, int colno) /* {{{ */
#endif
col->param_type = PDO_PARAM_INT;
break;
case SQL_BOOLEAN:
col->param_type = PDO_PARAM_BOOL;
break;
default:
col->param_type = PDO_PARAM_STR;
break;
@ -416,6 +419,11 @@ static int firebird_stmt_get_col(pdo_stmt_t *stmt, int colno, char **ptr, /* {{
*ptr = FETCH_BUF(S->fetch_buf[colno], char, CHAR_BUF_LEN, NULL);
*len = slprintf(*ptr, CHAR_BUF_LEN, "%F" , *(double*)var->sqldata);
break;
case SQL_BOOLEAN:
*len = sizeof(zend_bool);
*ptr = FETCH_BUF(S->fetch_buf[colno], zend_bool, 1, NULL);
*(zend_bool*)*ptr = *(FB_BOOLEAN*)var->sqldata;
break;
case SQL_TYPE_DATE:
isc_decode_sql_date((ISC_DATE*)var->sqldata, &t);
fmt = S->H->date_format ? S->H->date_format : PDO_FB_DEF_DATE_FMT;

View file

@ -0,0 +1,29 @@
--TEST--
PDO_Firebird: Bug #74462 Returns only NULLs for boolean fields
--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 (id integer not null, abool boolean)');
$C->exec('insert into atable (id, abool) values (1, true)');
$C->exec('insert into atable (id, abool) values (2, false)');
$C->exec('insert into atable (id, abool) values (3, null)');
$S = $C->query('select abool from atable order by id');
$D = $S->fetchAll(PDO::FETCH_COLUMN);
unset($S);
unset($C);
var_dump($D);
?>
--EXPECT--
array(3) {
[0]=>
bool(true)
[1]=>
bool(false)
[2]=>
NULL
}