List:Commits« Previous MessageNext Message »
From:uwendel Date:January 28 2008 1:44pm
Subject:PHP mysqlnd svn commit: r1225 - trunk/tests/ext/pdo_mysql
View as plain text  
Author: uwendel
Date: 2008-01-28 13:44:08 +0100 (Mon, 28 Jan 2008)
New Revision: 1225

Added:
   trunk/tests/ext/pdo_mysql/pdo_mysql_attr_statement_class.phpt
Log:
Test for PDO::ATTR_STATEMENT_CLASS


Added: trunk/tests/ext/pdo_mysql/pdo_mysql_attr_statement_class.phpt
===================================================================
--- trunk/tests/ext/pdo_mysql/pdo_mysql_attr_statement_class.phpt	                       
(rev 0)
+++ trunk/tests/ext/pdo_mysql/pdo_mysql_attr_statement_class.phpt	2008-01-28 12:44:08 UTC
(rev 1225)
@@ -0,0 +1,154 @@
+--TEST--
+PDO::ATTR_STATEMENT_CLASS
+--SKIPIF--
+<?php
+require_once('skipif.inc');
+require_once('mysql_pdo_test.inc');
+MySQLPDOTest::skip();
+$db = MySQLPDOTest::factory();
+?>
+--FILE--
+<?php
+	require_once('mysql_pdo_test.inc');
+	$db = MySQLPDOTest::factory();
+	MySQLPDOTest::createTestTable($db);
+
+	$default =  $db->getAttribute(PDO::ATTR_STATEMENT_CLASS);
+	var_dump($default);
+
+	if (false !== ($tmp = @$db->setAttribute(PDO::ATTR_STATEMENT_CLASS)))
+		printf("[001] Expecting boolean/false got %s\n", var_export($tmp, true));
+
+	if (false !== ($tmp = @$db->setAttribute(PDO::ATTR_STATEMENT_CLASS, 'foo')))
+		printf("[002] Expecting boolean/false got %s\n", var_export($tmp, true));
+
+	if (false !== ($tmp = @$db->setAttribute(PDO::ATTR_STATEMENT_CLASS,
array('classname'))))
+		printf("[003] Expecting boolean/false got %s\n", var_export($tmp, true));
+
+	// unknown class
+	if (false !== ($tmp = $db->setAttribute(PDO::ATTR_STATEMENT_CLASS, array('classname',
array()))))
+		printf("[004] Expecting boolean/false got %s\n", var_export($tmp, true));
+
+	// class not derived from PDOStatement
+	class myclass {
+		function __construct() {
+			printf("myclass\n");
+		}
+	}
+	if (false !== ($tmp = $db->setAttribute(PDO::ATTR_STATEMENT_CLASS, array('myclass',
array()))))
+		printf("[005] Expecting boolean/false got %s\n", var_export($tmp, true));
+
+	// public constructor not allowed
+	class mystatement extends PDOStatement {
+		public function __construct() {
+			printf("mystatement\n");
+		}
+	}
+
+	if (false !== ($tmp = $db->setAttribute(PDO::ATTR_STATEMENT_CLASS,
array('mystatement', array()))))
+		printf("[006] Expecting boolean/false got %s\n", var_export($tmp, true));
+
+	// ... but a public destructor is allowed
+	class mystatement2 extends PDOStatement {
+		public function __destruct() {
+			printf("mystatement\n");
+		}
+	}
+
+	if (true !== ($tmp = $db->setAttribute(PDO::ATTR_STATEMENT_CLASS,
array('mystatement2', array()))))
+		printf("[007] Expecting boolean/true got %s\n", var_export($tmp, true));
+
+	// private constructor
+	class mystatement3 extends PDOStatement {
+		private function __construct($msg) {
+			printf("mystatement3\n");
+			var_dump($msg);
+		}
+	}
+	if (true !== ($tmp = $db->setAttribute(PDO::ATTR_STATEMENT_CLASS,
array('mystatement3', array('param1')))))
+		printf("[008] Expecting boolean/true got %s\n", var_export($tmp, true));
+
+	// private constructor
+	class mystatement4 extends PDOStatement {
+		private function __construct($msg) {
+			printf("%s\n", get_class($this));
+			var_dump($msg);
+		}
+	}
+	if (true !== ($tmp = $db->setAttribute(PDO::ATTR_STATEMENT_CLASS,
array('mystatement4', array('param1')))))
+		printf("[008] Expecting boolean/true got %s\n", var_export($tmp, true));
+
+	var_dump($db->getAttribute(PDO::ATTR_STATEMENT_CLASS));
+	$stmt = $db->query('SELECT id, label FROM test ORDER BY id ASC LIMIT 2');
+
+	class mystatement5 extends mystatement4 {
+		public function fetchAll($fetch_style = 1, $column_index = 1, $ctor_args = array()) {
+			return "no data :)";
+		}
+	}
+
+	if (true !== ($tmp = $db->setAttribute(PDO::ATTR_STATEMENT_CLASS,
array('mystatement5', array('mystatement5')))))
+		printf("[009] Expecting boolean/true got %s\n", var_export($tmp, true));
+	$stmt = $db->query('SELECT id, label FROM test ORDER BY id ASC LIMIT 2');
+	var_dump($stmt->fetchAll());
+
+	if (true !== ($tmp = $db->setAttribute(PDO::ATTR_STATEMENT_CLASS,
array('PDOStatement'))))
+		printf("[010] Expecting boolean/true got %s\n", var_export($tmp, true));
+
+	$stmt = $db->query('SELECT id, label FROM test ORDER BY id ASC LIMIT 1');
+	var_dump($stmt->fetchAll());
+
+	// Yes, this is a fatal error and I want it to fail.
+	abstract class mystatement6 extends mystatement5 {
+	}
+	if (true !== ($tmp = $db->setAttribute(PDO::ATTR_STATEMENT_CLASS,
array('mystatement6', array('mystatement6')))))
+		printf("[011] Expecting boolean/true got %s\n", var_export($tmp, true));
+	$stmt = $db->query('SELECT id, label FROM test ORDER BY id ASC LIMIT 1');
+
+	print "done!";
+--EXPECTF--
+array(1) {
+  [0]=>
+  string(12) "PDOStatement"
+}
+
+Warning: PDO::setAttribute(): SQLSTATE[HY000]: General error: PDO::ATTR_STATEMENT_CLASS
requires format array(classname, array(ctor_args)); the classname must be a string
specifying an existing class in %s on line %d
+
+Warning: PDO::setAttribute(): SQLSTATE[HY000]: General error in %s on line %d
+
+Warning: PDO::setAttribute(): SQLSTATE[HY000]: General error: user-supplied statement
class must be derived from PDOStatement in %s on line %d
+
+Warning: PDO::setAttribute(): SQLSTATE[HY000]: General error in %s on line %d
+
+Warning: PDO::setAttribute(): SQLSTATE[HY000]: General error: user-supplied statement
class cannot have a public constructor in %s on line %d
+
+Warning: PDO::setAttribute(): SQLSTATE[HY000]: General error in %s on line %d
+array(2) {
+  [0]=>
+  string(12) "mystatement4"
+  [1]=>
+  array(1) {
+    [0]=>
+    string(6) "param1"
+  }
+}
+mystatement4
+string(6) "param1"
+mystatement5
+string(12) "mystatement5"
+string(10) "no data :)"
+array(1) {
+  [0]=>
+  array(4) {
+    ["id"]=>
+    string(1) "1"
+    [0]=>
+    string(1) "1"
+    ["label"]=>
+    string(1) "a"
+    [1]=>
+    string(1) "a"
+  }
+}
+
+Fatal error: Cannot instantiate abstract class mystatement6 in %s on line %d
\ No newline at end of file

Thread
PHP mysqlnd svn commit: r1225 - trunk/tests/ext/pdo_mysqluwendel28 Jan