mirror of
https://github.com/php/php-src.git
synced 2026-04-07 16:13:32 +02:00
Fix test cases for MariaDB
And remove unnecessary try-catch. Closes GH-6505.
This commit is contained in:
@@ -40,7 +40,7 @@ MySQLPDOTest::skip();
|
||||
$db->setAttribute(PDO::ATTR_ORACLE_NULLS, 1);
|
||||
$stmt = $db->query('SELECT VERSION() as _version');
|
||||
$row = $stmt->fetch(PDO::FETCH_ASSOC);
|
||||
if ((int)substr($row['_version'], 0, 1) >= 5)
|
||||
if ((int)strtok($row['_version'], '.') >= 5)
|
||||
$have_procedures = true;
|
||||
else
|
||||
$have_procedures = false;
|
||||
|
||||
@@ -64,50 +64,43 @@ if (($row = $stmt->fetch(PDO::FETCH_ASSOC)) && ($row['value'] != '')) {
|
||||
MySQLPDOTest::createTestTable($db, MySQLPDOTest::detect_transactional_mysql_engine($db));
|
||||
|
||||
/* affected rows related */
|
||||
try {
|
||||
|
||||
exec_and_count(2, $db, 'DROP TABLE IF EXISTS test', 0);
|
||||
exec_and_count(3, $db, sprintf('CREATE TABLE test(id INT NOT NULL PRIMARY KEY, col1 CHAR(10)) ENGINE=%s', PDO_MYSQL_TEST_ENGINE), 0);
|
||||
exec_and_count(2, $db, 'DROP TABLE IF EXISTS test', 0);
|
||||
exec_and_count(3, $db, sprintf('CREATE TABLE test(id INT NOT NULL PRIMARY KEY, col1 CHAR(10)) ENGINE=%s', PDO_MYSQL_TEST_ENGINE), 0);
|
||||
|
||||
$stmt = $db->query("SHOW VARIABLES LIKE 'secure_file_priv'");
|
||||
if (($row = $stmt->fetch(PDO::FETCH_ASSOC)) && ($row['value'] != '')) {
|
||||
$filename = $row['value'] . DIRECTORY_SEPARATOR . "pdo_mysql_exec_load_data.csv";
|
||||
} else {
|
||||
$filename = MySQLPDOTest::getTempDir() . DIRECTORY_SEPARATOR . "pdo_mysql_exec_load_data.csv";
|
||||
}
|
||||
$stmt = $db->query("SHOW VARIABLES LIKE 'secure_file_priv'");
|
||||
if (($row = $stmt->fetch(PDO::FETCH_ASSOC)) && ($row['value'] != '')) {
|
||||
$filename = $row['value'] . DIRECTORY_SEPARATOR . "pdo_mysql_exec_load_data.csv";
|
||||
} else {
|
||||
$filename = MySQLPDOTest::getTempDir() . DIRECTORY_SEPARATOR . "pdo_mysql_exec_load_data.csv";
|
||||
}
|
||||
|
||||
$fp = fopen($filename, "w");
|
||||
fwrite($fp, "1;foo\n");
|
||||
fwrite($fp, "2;bar");
|
||||
fclose($fp);
|
||||
$fp = fopen($filename, "w");
|
||||
fwrite($fp, "1;foo\n");
|
||||
fwrite($fp, "2;bar");
|
||||
fclose($fp);
|
||||
|
||||
$sql = sprintf("LOAD DATA LOCAL INFILE %s INTO TABLE test FIELDS TERMINATED BY ';' LINES TERMINATED BY '\n'", $db->quote($filename));
|
||||
$sql = sprintf("LOAD DATA LOCAL INFILE %s INTO TABLE test FIELDS TERMINATED BY ';' LINES TERMINATED BY '\n'", $db->quote($filename));
|
||||
|
||||
if (exec_and_count(4, $db, $sql, 2)) {
|
||||
if (exec_and_count(4, $db, $sql, 2)) {
|
||||
|
||||
$stmt = $db->query('SELECT id, col1 FROM test ORDER BY id ASC');
|
||||
$expected = array(array("id" => 1, "col1" => "foo"), array("id" => 2, "col1" => "bar"));
|
||||
$ret = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||
foreach ($expected as $offset => $exp) {
|
||||
foreach ($exp as $key => $value) {
|
||||
if ($ret[$offset][$key] != $value) {
|
||||
printf("Results seem wrong, check manually\n");
|
||||
var_dump($ret);
|
||||
var_dump($expected);
|
||||
break 2;
|
||||
}
|
||||
$stmt = $db->query('SELECT id, col1 FROM test ORDER BY id ASC');
|
||||
$expected = array(array("id" => 1, "col1" => "foo"), array("id" => 2, "col1" => "bar"));
|
||||
$ret = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||
foreach ($expected as $offset => $exp) {
|
||||
foreach ($exp as $key => $value) {
|
||||
if ($ret[$offset][$key] != $value) {
|
||||
printf("Results seem wrong, check manually\n");
|
||||
var_dump($ret);
|
||||
var_dump($expected);
|
||||
break 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
unlink($filename);
|
||||
|
||||
} catch (PDOException $e) {
|
||||
printf("[001] %s, [%s] %s\n",
|
||||
$e->getMessage(),
|
||||
$db->errorCode(), implode(' ', $db->errorInfo()));
|
||||
}
|
||||
|
||||
unlink($filename);
|
||||
|
||||
print "done!";
|
||||
?>
|
||||
--CLEAN--
|
||||
|
||||
@@ -65,53 +65,38 @@ if (($row = $stmt->fetch(PDO::FETCH_ASSOC)) && ($row['value'] != '')) {
|
||||
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 0);
|
||||
MySQLPDOTest::createTestTable($db, MySQLPDOTest::detect_transactional_mysql_engine($db));
|
||||
|
||||
/* affected rows related */
|
||||
try {
|
||||
exec_and_count(2, $db, 'DROP TABLE IF EXISTS test', 0);
|
||||
exec_and_count(3, $db, sprintf('CREATE TABLE test(id INT NOT NULL PRIMARY KEY, col1 CHAR(10)) ENGINE=%s', PDO_MYSQL_TEST_ENGINE), 0);
|
||||
|
||||
exec_and_count(2, $db, 'DROP TABLE IF EXISTS test', 0);
|
||||
exec_and_count(3, $db, sprintf('CREATE TABLE test(id INT NOT NULL PRIMARY KEY, col1 CHAR(10)) ENGINE=%s', PDO_MYSQL_TEST_ENGINE), 0);
|
||||
|
||||
$stmt = $db->query("SHOW VARIABLES LIKE 'secure_file_priv'");
|
||||
if (($row = $stmt->fetch(PDO::FETCH_ASSOC)) && ($row['value'] != '')) {
|
||||
$filename = $row['value'] . DIRECTORY_SEPARATOR . "pdo_mysql_exec_load_data.csv";
|
||||
} else {
|
||||
$filename = MySQLPDOTest::getTempDir() . DIRECTORY_SEPARATOR . "pdo_mysql_exec_load_data.csv";
|
||||
}
|
||||
|
||||
$fp = fopen($filename, "w");
|
||||
fwrite($fp, "1;foo\n");
|
||||
fwrite($fp, "2;bar");
|
||||
fclose($fp);
|
||||
|
||||
// This should fail, the PS protocol should not support it.
|
||||
// mysqlnd will give 2014 as a follow-up of the fallback logic
|
||||
// libmysql will give a little more precise 2030 error code
|
||||
// However, you get an error and the big question is what happens to the line
|
||||
$stmt = $db->prepare(sprintf("LOAD DATA INFILE %s INTO TABLE test FIELDS TERMINATED BY ';' LINES TERMINATED BY '\n'", $db->quote($filename)));
|
||||
if (!$stmt->execute()) {
|
||||
printf("[004] [%d] %s\n", $stmt->errorCode(), var_export($stmt->errorInfo(), true));
|
||||
}
|
||||
|
||||
// Check the line
|
||||
$stmt = $db->query("SELECT 1 as 'one'");
|
||||
if ($stmt->errorCode() != '0000') {
|
||||
printf("[005] [%d] %s\n", $stmt->errorCode(), var_export($stmt->errorInfo(), true));
|
||||
} else {
|
||||
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||
if (!isset($rows[0]['one']) || $rows[0]['one'] != 1)
|
||||
printf("[006] [%d] %s\n", $stmt->errorCode(), var_export($stmt->errorInfo(), true));
|
||||
}
|
||||
|
||||
unlink($filename);
|
||||
|
||||
} catch (PDOException $e) {
|
||||
printf("[001] %s, [%s] %s (%s)\n",
|
||||
$e->getMessage(),
|
||||
$db->errorCode(),
|
||||
implode(' ', $db->errorInfo()),
|
||||
(isset($stmt)) ? implode(' ', $stmt->errorInfo()) : 'N/A');
|
||||
$stmt = $db->query("SHOW VARIABLES LIKE 'secure_file_priv'");
|
||||
if (($row = $stmt->fetch(PDO::FETCH_ASSOC)) && ($row['value'] != '')) {
|
||||
$filename = $row['value'] . DIRECTORY_SEPARATOR . "pdo_mysql_exec_load_data.csv";
|
||||
} else {
|
||||
$filename = MySQLPDOTest::getTempDir() . DIRECTORY_SEPARATOR . "pdo_mysql_exec_load_data.csv";
|
||||
}
|
||||
|
||||
$fp = fopen($filename, "w");
|
||||
fwrite($fp, "1;foo\n");
|
||||
fwrite($fp, "2;bar");
|
||||
fclose($fp);
|
||||
|
||||
$stmt = $db->prepare(sprintf("LOAD DATA INFILE %s INTO TABLE test FIELDS TERMINATED BY ';' LINES TERMINATED BY '\n'", $db->quote($filename)));
|
||||
if (!$stmt->execute()) {
|
||||
printf("[004] [%d] %s\n", $stmt->errorCode(), var_export($stmt->errorInfo(), true));
|
||||
}
|
||||
|
||||
// Check the line
|
||||
$stmt = $db->query("SELECT 1 as 'one'");
|
||||
if ($stmt->errorCode() != '0000') {
|
||||
printf("[005] [%d] %s\n", $stmt->errorCode(), var_export($stmt->errorInfo(), true));
|
||||
} else {
|
||||
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||
if (!isset($rows[0]['one']) || $rows[0]['one'] != 1)
|
||||
printf("[006] [%d] %s\n", $stmt->errorCode(), var_export($stmt->errorInfo(), true));
|
||||
}
|
||||
|
||||
unlink($filename);
|
||||
|
||||
print "done!";
|
||||
?>
|
||||
--CLEAN--
|
||||
@@ -120,10 +105,4 @@ require __DIR__ . '/mysql_pdo_test.inc';
|
||||
MySQLPDOTest::dropTestTable();
|
||||
?>
|
||||
--EXPECTF--
|
||||
Warning: PDOStatement::execute(): SQLSTATE[HY000]: General error: %s in %s on line %d
|
||||
[004] [0] array (
|
||||
0 => 'HY000',
|
||||
1 => %d,
|
||||
2 => %s,
|
||||
)
|
||||
done!
|
||||
|
||||
Reference in New Issue
Block a user