List:Commits« Previous MessageNext Message »
From:uwendel Date:January 9 2008 7:47pm
Subject:PHP mysqlnd svn commit: r1200 - trunk/tests/ext/pdo_mysql
View as plain text  
Author: uwendel
Date: 2008-01-09 19:47:53 +0100 (Wed, 09 Jan 2008)
New Revision: 1200

Added:
   trunk/tests/ext/pdo_mysql/pdo_mysql_errorcode.phpt
   trunk/tests/ext/pdo_mysql/pdo_mysql_errorinfo.phpt
Log:
The generic test does catch the most basic stuff and shows the same bugs.
This one plays with the DB and STMT object and the manual note that an 
error on one of them must not influence the statement of the other object. 
Yeah, basic...



Added: trunk/tests/ext/pdo_mysql/pdo_mysql_errorcode.phpt
===================================================================
--- trunk/tests/ext/pdo_mysql/pdo_mysql_errorcode.phpt	                        (rev 0)
+++ trunk/tests/ext/pdo_mysql/pdo_mysql_errorcode.phpt	2008-01-09 18:47:53 UTC (rev 1200)
@@ -0,0 +1,70 @@
+--TEST--
+MySQL PDO->errorCode()
+--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);
+
+	function check_error($offset, &$obj, $expected = '00000') {
+
+		$code = $obj->errorCode();
+		if (($code != $expected) && (($expected != '00000') && ($code != '')))
{
+			printf("[%03d] Expecting error code '%s' got code '%s'\n",
+				$offset, $expected, $code);
+		}
+
+	}
+
+	try {
+
+		/*
+		If you create a PDOStatement object through PDO->prepare()
+		or PDO->query() and invoke an error on the statement handle,
+		PDO->errorCode() will not reflect that error. You must call
+		PDOStatement->errorCode() to return the error code for an
+		operation performed on a particular statement handle.
+		*/
+		$code = $db->errorCode();
+		check_error(2, $db);
+
+		$stmt = $db->query('SELECT id, label FROM test');
+		$stmt2 = &$stmt;
+		check_error(3, $db);
+		check_error(4, $stmt);
+
+		$db->exec('DROP TABLE IF EXISTS test');
+		@$stmt->execute();
+		check_error(4, $db);
+		check_error(5, $stmt, '42S02');
+		check_error(6, $stmt2, '42S02');
+
+		@$stmt = $db->query('SELECT id, label FROM unknown');
+		check_error(7, $db, '42S02');
+
+		MySQLPDOTest::createTestTable($db);
+		$stmt = $db->query('SELECT id, label FROM test');
+		check_error(8, $db);
+		check_error(9, $stmt);
+
+		$db2 = &$db;
+		@$db->query('SELECT id, label FROM unknown');
+		check_error(10, $db, '42S02');
+		check_error(11, $db2, '42S02');
+		check_error(12, $stmt);
+		check_error(13, $stmt2);
+
+	} catch (PDOException $e) {
+		printf("[001] %s [%s] %s\n",
+			$e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo()));
+	}
+	print "done!";
+--EXPECTF--
+done!
\ No newline at end of file

Added: trunk/tests/ext/pdo_mysql/pdo_mysql_errorinfo.phpt
===================================================================
--- trunk/tests/ext/pdo_mysql/pdo_mysql_errorinfo.phpt	                        (rev 0)
+++ trunk/tests/ext/pdo_mysql/pdo_mysql_errorinfo.phpt	2008-01-09 18:47:53 UTC (rev 1200)
@@ -0,0 +1,82 @@
+--TEST--
+MySQL PDO->errorInfo()
+--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);
+
+	function check_error($offset, &$obj, $expected = '00000') {
+
+		$info = $obj->errorInfo();
+		if (count($info) != 3)
+			printf("[%03d] Info should have three fields, got %s\n",
+				$offset, var_export($info, true));
+
+		$code = $info[0];
+		if (($code != $expected) && (($expected != '00000') && ($code != '')))
{
+			printf("[%03d] Expecting error code '%s' got code '%s'\n",
+				$offset, $expected, $code);
+		}
+
+		if ($expected != '00000') {
+			if ($info[1] == '')
+				printf("[%03d] Driver-specific error code not set\n");
+			if ($info[2] == '')
+				printf("[%03d] Driver-specific error message.not set\n");
+		}
+
+	}
+
+	try {
+
+		/*
+		If you create a PDOStatement object through PDO->prepare()
+		or PDO->query() and invoke an error on the statement handle,
+		PDO->errorCode() will not reflect that error. You must call
+		PDOStatement->errorCode() to return the error code for an
+		operation performed on a particular statement handle.
+		*/
+		$code = $db->errorCode();
+		check_error(2, $db);
+
+		$stmt = $db->query('SELECT id, label FROM test');
+		$stmt2 = &$stmt;
+		check_error(3, $db);
+		check_error(4, $stmt);
+
+		$db->exec('DROP TABLE IF EXISTS test');
+		@$stmt->execute();
+		check_error(4, $db);
+		check_error(5, $stmt, '42S02');
+		check_error(6, $stmt2, '42S02');
+
+		@$stmt = $db->query('SELECT id, label FROM unknown');
+		check_error(7, $db, '42S02');
+
+		MySQLPDOTest::createTestTable($db);
+		$stmt = $db->query('SELECT id, label FROM test');
+		check_error(8, $db);
+		check_error(9, $stmt);
+
+		$db2 = &$db;
+		@$db->query('SELECT id, label FROM unknown');
+		check_error(10, $db, '42S02');
+		check_error(11, $db2, '42S02');
+		check_error(12, $stmt);
+		check_error(13, $stmt2);
+
+	} catch (PDOException $e) {
+		printf("[001] %s [%s] %s\n",
+			$e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo()));
+	}
+	print "done!";
+--EXPECTF--
+done!
\ No newline at end of file

Thread
PHP mysqlnd svn commit: r1200 - trunk/tests/ext/pdo_mysqluwendel9 Jan 2008