diff options
author | Lorry Tar Creator <lorry-tar-importer@baserock.org> | 2013-03-14 05:42:27 +0000 |
---|---|---|
committer | <> | 2013-04-03 16:25:08 +0000 |
commit | c4dd7a1a684490673e25aaf4fabec5df138854c4 (patch) | |
tree | 4d57c44caae4480efff02b90b9be86f44bf25409 /ext/pdo_firebird/tests | |
download | php2-master.tar.gz |
Imported from /home/lorry/working-area/delta_php2/php-5.4.13.tar.bz2.HEADphp-5.4.13master
Diffstat (limited to 'ext/pdo_firebird/tests')
-rw-r--r-- | ext/pdo_firebird/tests/bug_47415.phpt | 43 | ||||
-rw-r--r-- | ext/pdo_firebird/tests/bug_48877.phpt | 43 | ||||
-rw-r--r-- | ext/pdo_firebird/tests/bug_53280.phpt | 63 | ||||
-rw-r--r-- | ext/pdo_firebird/tests/common.phpt | 27 | ||||
-rw-r--r-- | ext/pdo_firebird/tests/connect.phpt | 17 | ||||
-rw-r--r-- | ext/pdo_firebird/tests/ddl.phpt | 38 | ||||
-rw-r--r-- | ext/pdo_firebird/tests/execute.phpt | 68 | ||||
-rw-r--r-- | ext/pdo_firebird/tests/rowCount.phpt | 50 | ||||
-rw-r--r-- | ext/pdo_firebird/tests/skipif.inc | 5 | ||||
-rw-r--r-- | ext/pdo_firebird/tests/testdb.inc | 34 |
10 files changed, 388 insertions, 0 deletions
diff --git a/ext/pdo_firebird/tests/bug_47415.phpt b/ext/pdo_firebird/tests/bug_47415.phpt new file mode 100644 index 0000000..12cd782 --- /dev/null +++ b/ext/pdo_firebird/tests/bug_47415.phpt @@ -0,0 +1,43 @@ +--TEST-- +Bug #47415 PDO_Firebird segfaults when passing lowercased column name to bindColumn() +--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 testz'); +$dbh->exec('CREATE TABLE testz (idx int NOT NULL PRIMARY KEY, txt VARCHAR(20))'); +$dbh->exec('INSERT INTO testz VALUES(0, \'String0\')'); +$dbh->commit(); + +$query = "SELECT idx, txt FROM testz ORDER by idx"; +$idx = $txt = 0; +$stmt = $dbh->prepare($query); +$stmt->bindColumn('idx', $idx); +$stmt->bindColumn('txt', $txt); +$stmt->execute(); +$rows = $stmt->fetch(PDO::FETCH_BOUND); +var_dump($stmt->fetch()); +var_dump($stmt->rowCount()); + + +$stmt = $dbh->prepare('DELETE FROM testz'); +$stmt->execute(); + +$dbh->commit(); + +$dbh->exec('DROP TABLE testz'); + +unset($stmt); +unset($dbh); + +?> +--EXPECT-- +bool(false) +int(1) diff --git a/ext/pdo_firebird/tests/bug_48877.phpt b/ext/pdo_firebird/tests/bug_48877.phpt new file mode 100644 index 0000000..cbab84b --- /dev/null +++ b/ext/pdo_firebird/tests/bug_48877.phpt @@ -0,0 +1,43 @@ +--TEST-- +PDO_Firebird: bug 48877 The "bindValue" and "bindParam" do not work for PDO Firebird if we use named parameters (:parameter). +--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; +$value = '2'; +@$dbh->exec('DROP TABLE testz'); +$dbh->exec('CREATE TABLE testz (A integer)'); +$dbh->exec("INSERT INTO testz VALUES ('1')"); +$dbh->exec("INSERT INTO testz VALUES ('2')"); +$dbh->exec("INSERT INTO testz VALUES ('3')"); +$dbh->commit(); + +$query = "SELECT * FROM testz WHERE A = :paramno"; + +$stmt = $dbh->prepare($query); +$stmt->bindParam(':paramno', $value, PDO::PARAM_STR); +$stmt->execute(); +$rows = $stmt->fetch(); +var_dump($stmt->fetch()); +var_dump($stmt->rowCount()); + + +$stmt = $dbh->prepare('DELETE FROM testz'); +$stmt->execute(); + +$dbh->commit(); + +$dbh->exec('DROP TABLE testz'); + +unset($stmt); +unset($dbh); + +?> +--EXPECT-- +bool(false) +int(1) diff --git a/ext/pdo_firebird/tests/bug_53280.phpt b/ext/pdo_firebird/tests/bug_53280.phpt new file mode 100644 index 0000000..3139867 --- /dev/null +++ b/ext/pdo_firebird/tests/bug_53280.phpt @@ -0,0 +1,63 @@ +--TEST-- +PDO_Firebird: bug 53280 segfaults if query column count is less than param count +--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; +$value = '2'; +@$dbh->exec('DROP TABLE testz'); +$dbh->exec('CREATE TABLE testz(A VARCHAR(30), B VARCHAR(30), C VARCHAR(30))'); +$dbh->exec("INSERT INTO testz VALUES ('A', 'B', 'C')"); +$dbh->commit(); + +$stmt1 = "SELECT B FROM testz WHERE A = ? AND B = ?"; +$stmt2 = "SELECT B, C FROM testz WHERE A = ? AND B = ?"; + +$stmth2 = $dbh->prepare($stmt2); +$stmth2->execute(array('A', 'B')); +$rows = $stmth2->fetchAll(); // <------ OK +var_dump($rows); + +$stmth1 = $dbh->prepare($stmt1); +$stmth1->execute(array('A', 'B')); +$rows = $stmth1->fetchAll(); // <------- segfault +var_dump($rows); + +$dbh->commit(); +unset($stmth1); +unset($stmth2); + +$dbh->exec('DROP TABLE testz'); + +unset($stmt); +unset($dbh); + +?> +--EXPECT-- +array(1) { + [0]=> + array(4) { + ["B"]=> + string(1) "B" + [0]=> + string(1) "B" + ["C"]=> + string(1) "C" + [1]=> + string(1) "C" + } +} +array(1) { + [0]=> + array(2) { + ["B"]=> + string(1) "B" + [0]=> + string(1) "B" + } +} diff --git a/ext/pdo_firebird/tests/common.phpt b/ext/pdo_firebird/tests/common.phpt new file mode 100644 index 0000000..00d4b23 --- /dev/null +++ b/ext/pdo_firebird/tests/common.phpt @@ -0,0 +1,27 @@ +--TEST-- +FIREBIRD +--SKIPIF-- +<?php # vim:ft=php +if (!extension_loaded('pdo_firebird')) print 'skip'; ?> +--REDIRECTTEST-- +# magic auto-configuration + +$config = array( + 'TESTS' => 'ext/pdo/tests' +); + + +if (false !== getenv('PDO_FIREBIRD_TEST_DSN')) { + # user set them from their shell + $config['ENV']['PDOTEST_DSN'] = getenv('PDO_FIREBIRD_TEST_DSN'); + $config['ENV']['PDOTEST_USER'] = getenv('PDO_FIREBIRD_TEST_USER'); + $config['ENV']['PDOTEST_PASS'] = getenv('PDO_FIREBIRD_TEST_PASS'); + if (false !== getenv('PDO_FIREBIRD_TEST_ATTR')) { + $config['ENV']['PDOTEST_ATTR'] = getenv('PDO_FIREBIRD_TEST_ATTR'); + } +} else { + $config['ENV']['PDOTEST_DSN'] = 'firebird:dbname=/opt/firebird/test.gdb'; + $config['ENV']['PDOTEST_USER'] = 'SYSDBA'; + $config['ENV']['PDOTEST_PASS'] = 'password'; +} +return $config; diff --git a/ext/pdo_firebird/tests/connect.phpt b/ext/pdo_firebird/tests/connect.phpt new file mode 100644 index 0000000..cbe76e6 --- /dev/null +++ b/ext/pdo_firebird/tests/connect.phpt @@ -0,0 +1,17 @@ +--TEST-- +PDO_Firebird: connect/disconnect +--SKIPIF-- +<?php include("skipif.inc"); ?> +<?php function_exists("ibase_query") or die("skip"); ?> +--FILE-- +<?php /* $Id$ */ + + require("testdb.inc"); + + $db = new PDO("firebird:dbname=$test_base",$user,$password) or die; + unset($db); + echo "done\n"; + +?> +--EXPECT-- +done diff --git a/ext/pdo_firebird/tests/ddl.phpt b/ext/pdo_firebird/tests/ddl.phpt new file mode 100644 index 0000000..9d2a095 --- /dev/null +++ b/ext/pdo_firebird/tests/ddl.phpt @@ -0,0 +1,38 @@ +--TEST-- +PDO_Firebird: DDL/transactions +--SKIPIF-- +<?php include("skipif.inc"); ?> +<?php function_exists("ibase_query") or die("skip"); ?> +--FILE-- +<?php /* $Id$ */ + + require("testdb.inc"); + + $db = new PDO("firebird:dbname=$test_base",$user,$password) or die; + $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); + + $db->exec("CREATE TABLE ddl (id INT NOT NULL PRIMARY KEY, text BLOB SUB_TYPE 1)"); + $db->exec("CREATE GENERATOR gen_ddl_id"); + $db->exec("CREATE TRIGGER ddl_bi FOR ddl BEFORE INSERT AS + BEGIN IF (NEW.id IS NULL) THEN NEW.id=GEN_ID(gen_ddl_id,1); END"); + + $db->setAttribute(PDO::ATTR_AUTOCOMMIT,0); + + $db->beginTransaction(); + var_dump($db->exec("INSERT INTO ddl (text) VALUES ('bla')")); + var_dump($db->exec("UPDATE ddl SET text='blabla'")); + $db->rollback(); + + $db->beginTransaction(); + var_dump($db->exec("DELETE FROM ddl")); + $db->commit(); + + unset($db); + echo "done\n"; + +?> +--EXPECT-- +int(1) +int(1) +int(0) +done diff --git a/ext/pdo_firebird/tests/execute.phpt b/ext/pdo_firebird/tests/execute.phpt new file mode 100644 index 0000000..896347e --- /dev/null +++ b/ext/pdo_firebird/tests/execute.phpt @@ -0,0 +1,68 @@ +--TEST-- +PDO_Firebird: prepare/execute/binding +--SKIPIF-- +<?php include("skipif.inc"); ?> +<?php function_exists("ibase_query") or die("skip"); ?> +--INI-- +ibase.timestampformat=%Y-%m-%d %H:%M:%S +--FILE-- +<?php /* $Id$ */ + + require("testdb.inc"); + + $db = new PDO("firebird:dbname=$test_base",$user,$password) or die; + + var_dump($db->getAttribute(PDO::ATTR_CONNECTION_STATUS)); + + $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); + + $db->exec("CREATE TABLE ddl (id SMALLINT NOT NULL PRIMARY KEY, text VARCHAR(32), + datetime TIMESTAMP DEFAULT '2000-02-12' NOT NULL)"); + $db->exec("INSERT INTO ddl (id,text) VALUES (1,'bla')"); + + $s = $db->prepare("SELECT * FROM ddl WHERE id=? FOR UPDATE"); + + $id = 0; + $s->bindParam(1,$id); + $var = null; + $s->bindColumn("TEXT",$var); + $id = 1; + $s->execute(); + $s->setAttribute(PDO::ATTR_CURSOR_NAME, "c"); + + var_dump($id); + + var_dump($s->fetch()); + + var_dump($var); + + var_dump($db->exec("UPDATE ddl SET id=2 WHERE CURRENT OF c")); + + var_dump($s->fetch()); + + unset($s); + unset($db); + echo "done\n"; + +?> +--EXPECT-- +bool(true) +int(1) +array(6) { + ["ID"]=> + string(1) "1" + [0]=> + string(1) "1" + ["TEXT"]=> + string(3) "bla" + [1]=> + string(3) "bla" + ["DATETIME"]=> + string(19) "2000-02-12 00:00:00" + [2]=> + string(19) "2000-02-12 00:00:00" +} +string(3) "bla" +int(1) +bool(false) +done diff --git a/ext/pdo_firebird/tests/rowCount.phpt b/ext/pdo_firebird/tests/rowCount.phpt new file mode 100644 index 0000000..1a00950 --- /dev/null +++ b/ext/pdo_firebird/tests/rowCount.phpt @@ -0,0 +1,50 @@ +--TEST-- +PDO_Firebird: rowCount +--SKIPIF-- +<?php extension_loaded("pdo_firebird") or die("skip"); ?> +<?php function_exists("ibase_query") or die("skip"); ?> +--FILE-- +<?php /* $Id$ */ + +require("testdb.inc"); + +$dbh = new PDO("firebird:dbname=$test_base",$user,$password) or die; + +@$dbh->exec('DROP TABLE testz'); +$dbh->exec('CREATE TABLE testz (A VARCHAR(10))'); +$dbh->exec("INSERT INTO testz VALUES ('A')"); +$dbh->exec("INSERT INTO testz VALUES ('A')"); +$dbh->exec("INSERT INTO testz VALUES ('B')"); +$dbh->commit(); + +$query = "SELECT * FROM testz WHERE A = ?"; + +$stmt = $dbh->prepare($query); +$stmt->execute(array('A')); +$rows = $stmt->fetch(); +$rows = $stmt->fetch(); +var_dump($stmt->fetch()); +var_dump($stmt->rowCount()); + +$stmt = $dbh->prepare('UPDATE testZ SET A="A" WHERE A != ?'); +$stmt->execute(array('A')); +var_dump($stmt->rowCount()); +$dbh->commit(); + +$stmt = $dbh->prepare('DELETE FROM testz'); +$stmt->execute(); +var_dump($stmt->rowCount()); + +$dbh->commit(); + +$dbh->exec('DROP TABLE testz'); + +unset($stmt); +unset($dbh); + +?> +--EXPECT-- +bool(false) +int(2) +int(1) +int(3) diff --git a/ext/pdo_firebird/tests/skipif.inc b/ext/pdo_firebird/tests/skipif.inc new file mode 100644 index 0000000..5a6cd37 --- /dev/null +++ b/ext/pdo_firebird/tests/skipif.inc @@ -0,0 +1,5 @@ +<?php /* $Id$ */ + +if (!extension_loaded("interbase") || !extension_loaded("pdo_firebird")) print "skip"; + +?> diff --git a/ext/pdo_firebird/tests/testdb.inc b/ext/pdo_firebird/tests/testdb.inc new file mode 100644 index 0000000..f6951a7 --- /dev/null +++ b/ext/pdo_firebird/tests/testdb.inc @@ -0,0 +1,34 @@ +<?php /* $Id$ */ + +$user = 'SYSDBA'; +$password = 'masterkey'; +ini_set('ibase.default_user',$user); +ini_set('ibase.default_password',$password); + +/* we need just the generated name, not the file itself */ +unlink($test_base = tempnam('/tmp',"php_ibase_test")); + +function init_db() +{ + global $test_base, $user, $password; + + $test_db = ibase_query(IBASE_CREATE,sprintf("CREATE DATABASE '%s' USER '%s' PASSWORD '%s'", + $test_base, $user, $password)); + $tr = ibase_trans($test_db); + ibase_query($tr,"create table test1 (i integer, c varchar(100))"); + ibase_commit_ret($tr); + ibase_query($tr,"insert into test1(i, c) values(1, 'test table not created with isql')"); + ibase_commit($tr); + ibase_close($test_db); +} + +function cleanup_db() +{ + global $test_base; + + $r = ibase_connect($test_base); + ibase_drop_db($r); +} + +register_shutdown_function('cleanup_db'); +init_db(); |