summaryrefslogtreecommitdiff
path: root/ext/pdo_firebird/tests
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@baserock.org>2013-03-14 05:42:27 +0000
committer <>2013-04-03 16:25:08 +0000
commitc4dd7a1a684490673e25aaf4fabec5df138854c4 (patch)
tree4d57c44caae4480efff02b90b9be86f44bf25409 /ext/pdo_firebird/tests
downloadphp2-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.phpt43
-rw-r--r--ext/pdo_firebird/tests/bug_48877.phpt43
-rw-r--r--ext/pdo_firebird/tests/bug_53280.phpt63
-rw-r--r--ext/pdo_firebird/tests/common.phpt27
-rw-r--r--ext/pdo_firebird/tests/connect.phpt17
-rw-r--r--ext/pdo_firebird/tests/ddl.phpt38
-rw-r--r--ext/pdo_firebird/tests/execute.phpt68
-rw-r--r--ext/pdo_firebird/tests/rowCount.phpt50
-rw-r--r--ext/pdo_firebird/tests/skipif.inc5
-rw-r--r--ext/pdo_firebird/tests/testdb.inc34
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();