Browse Source

Merge branch 'PHP-5.3' into PHP-5.4

PHP-5.4.17
Matteo Beccati 13 years ago
parent
commit
a3b5b42e77
  1. 11
      ext/pdo_firebird/firebird_statement.c
  2. 51
      ext/pdo_firebird/tests/bug_62024.phpt
  3. 45
      ext/pdo_firebird/tests/bug_64037.phpt

11
ext/pdo_firebird/firebird_statement.c

@ -344,7 +344,7 @@ static int firebird_stmt_get_col(pdo_stmt_t *stmt, int colno, char **ptr, /* {{
if (n >= 0) {
*len = slprintf(*ptr, CHAR_BUF_LEN, "%" LL_MASK "d.%0*" LL_MASK "d",
n / f, -var->sqlscale, n % f);
} else if (n < -f) {
} else if (n <= -f) {
*len = slprintf(*ptr, CHAR_BUF_LEN, "%" LL_MASK "d.%0*" LL_MASK "d",
n / f, -var->sqlscale, -n % f);
} else {
@ -535,12 +535,14 @@ static int firebird_stmt_param_hook(pdo_stmt_t *stmt, struct pdo_bound_param_dat
int force_null;
case IS_LONG:
var->sqltype = sizeof(long) == 8 ? SQL_INT64 : SQL_LONG;
/* keep the allow-NULL flag */
var->sqltype = (sizeof(long) == 8 ? SQL_INT64 : SQL_LONG) | (var->sqltype & 1);
var->sqldata = (void*)&Z_LVAL_P(param->parameter);
var->sqllen = sizeof(long);
break;
case IS_DOUBLE:
var->sqltype = SQL_DOUBLE;
/* keep the allow-NULL flag */
var->sqltype = SQL_DOUBLE | (var->sqltype & 1);
var->sqldata = (void*)&Z_DVAL_P(param->parameter);
var->sqllen = sizeof(double);
break;
@ -560,7 +562,8 @@ static int firebird_stmt_param_hook(pdo_stmt_t *stmt, struct pdo_bound_param_dat
force_null = (Z_STRLEN_P(param->parameter) == 0);
}
if (!force_null) {
var->sqltype = SQL_TEXT;
/* keep the allow-NULL flag */
var->sqltype = SQL_TEXT | (var->sqltype & 1);
var->sqldata = Z_STRVAL_P(param->parameter);
var->sqllen = Z_STRLEN_P(param->parameter);
break;

51
ext/pdo_firebird/tests/bug_62024.phpt

@ -0,0 +1,51 @@
--TEST--
Bug #62024 Cannot insert second row with null using parametrized query (Firebird PDO)
--SKIPIF--
<?php extension_loaded("pdo_firebird") or die("skip"); ?>
<?php function_exists("ibase_query") or die("skip"); ?>
--FILE--
<?php
require("testdb.inc");
$dbh = new PDO("firebird:dbname=$test_base",$user,$password) or die;
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
$value = '2';
@$dbh->exec('DROP TABLE test_insert');
$dbh->exec("CREATE TABLE test_insert (ID INTEGER NOT NULL, TEXT VARCHAR(10))");
$dbh->commit();
//start actual test
$sql = "insert into test_insert (id, text) values (?, ?)";
$sttmt = $dbh->prepare($sql);
$args_ok = array(1, "test1");
$args_err = array(2, null);
$res = $sttmt->execute($args_ok);
var_dump($res);
$res = $sttmt->execute($args_err);
var_dump($res);
$dbh->commit();
//teardown test data
$sttmt = $dbh->prepare('DELETE FROM test_insert');
$sttmt->execute();
$dbh->commit();
$dbh->exec('DROP TABLE test_insert');
unset($sttmt);
unset($dbh);
?>
--EXPECT--
bool(true)
bool(true)

45
ext/pdo_firebird/tests/bug_64037.phpt

@ -0,0 +1,45 @@
--TEST--
Bug #64037 Firebird return wrong value for numeric field
--SKIPIF--
<?php extension_loaded("pdo_firebird") or die("skip"); ?>
<?php function_exists("ibase_query") or die("skip"); ?>
--FILE--
<?php
require("testdb.inc");
$dbh = new PDO("firebird:dbname=$test_base",$user,$password) or die;
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
$value = '2';
@$dbh->exec('DROP TABLE price');
$dbh->exec("CREATE TABLE PRICE (ID INTEGER NOT NULL, TEXT VARCHAR(10), COST NUMERIC(15, 2))");
$dbh->exec("INSERT INTO PRICE (ID, TEXT, COST) VALUES (1, 'test', -1.0)");
$dbh->exec("INSERT INTO PRICE (ID, TEXT, COST) VALUES (2, 'test', -0.99)");
$dbh->exec("INSERT INTO PRICE (ID, TEXT, COST) VALUES (3, 'test', -1.01)");
$dbh->commit();
$query = "SELECT * from price order by ID";
$stmt = $dbh->prepare($query);
$stmt->execute();
$rows = $stmt->fetchAll();
var_dump($rows[0]['COST']);
var_dump($rows[1]['COST']);
var_dump($rows[2]['COST']);
$stmt = $dbh->prepare('DELETE FROM price');
$stmt->execute();
$dbh->commit();
$dbh->exec('DROP TABLE price');
unset($stmt);
unset($dbh);
?>
--EXPECT--
string(5) "-1.00"
string(5) "-0.99"
string(5) "-1.01"
Loading…
Cancel
Save