apply review comments
This commit is contained in:
parent
3b65f26776
commit
8297fce1b9
|
@ -14,10 +14,10 @@ function insertNullsTest($bindType)
|
||||||
{
|
{
|
||||||
$outvar = null;
|
$outvar = null;
|
||||||
$failed = false;
|
$failed = false;
|
||||||
$conn =connect();
|
$conn = connect();
|
||||||
|
|
||||||
$tableName = "pdo_test_table";
|
$tableName = "pdo_test_table";
|
||||||
$dataType = array("c1_int" => "int",
|
$dataTypes = array("c1_int" => "int",
|
||||||
"c2_tinyint" => "tinyint",
|
"c2_tinyint" => "tinyint",
|
||||||
"c3_smallint" => "smallint",
|
"c3_smallint" => "smallint",
|
||||||
"c4_bigint" => "bigint",
|
"c4_bigint" => "bigint",
|
||||||
|
@ -45,12 +45,12 @@ function insertNullsTest($bindType)
|
||||||
"c26_smalldatetime" => "smalldatetime",
|
"c26_smalldatetime" => "smalldatetime",
|
||||||
"c27_timestamp" => "timestamp",
|
"c27_timestamp" => "timestamp",
|
||||||
"c28_xml" => "xml");
|
"c28_xml" => "xml");
|
||||||
createTable($conn, $tableName, $dataType);
|
createTable($conn, $tableName, $dataTypes);
|
||||||
|
|
||||||
$stmt = $conn->query("SELECT [TABLE_NAME],[COLUMN_NAME],[IS_NULLABLE] FROM [INFORMATION_SCHEMA].[COLUMNS] WHERE [TABLE_NAME] = '$tableName'");
|
$stmt = $conn->query("SELECT [TABLE_NAME],[COLUMN_NAME],[IS_NULLABLE] FROM [INFORMATION_SCHEMA].[COLUMNS] WHERE [TABLE_NAME] = '$tableName'");
|
||||||
|
|
||||||
if ($stmt === false) {
|
if ($stmt === false) {
|
||||||
FatalError("Could not query for column information on table $tableName");
|
fatalError("Could not query for column information on table $tableName");
|
||||||
}
|
}
|
||||||
|
|
||||||
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
|
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
|
||||||
|
@ -98,7 +98,7 @@ try {
|
||||||
echo $e->getMessage();
|
echo $e->getMessage();
|
||||||
}
|
}
|
||||||
if ($failed) {
|
if ($failed) {
|
||||||
FatalError("Possible Regression: Could not insert NULL");
|
fatalError("Possible Regression: Could not insert NULL");
|
||||||
} else {
|
} else {
|
||||||
echo "Test 'PDO - Insert Nulls' completed successfully.\n";
|
echo "Test 'PDO - Insert Nulls' completed successfully.\n";
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,13 +27,12 @@ function maxOutputParamsTest($expected, $length)
|
||||||
|
|
||||||
echo "Expected: $expected Received: $outstr\n";
|
echo "Expected: $expected Received: $outstr\n";
|
||||||
|
|
||||||
|
$failed = false;
|
||||||
if ($outstr !== $expected) {
|
if ($outstr !== $expected) {
|
||||||
print_r($stmt->errorInfo());
|
print_r($stmt->errorInfo());
|
||||||
dropProc($conn, $procName);
|
$failed = true;
|
||||||
return(-1);
|
|
||||||
}
|
}
|
||||||
dropProc($conn, $procName);
|
return $failed;
|
||||||
return(0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -41,13 +40,13 @@ function maxOutputParamsTest($expected, $length)
|
||||||
// Repro
|
// Repro
|
||||||
//
|
//
|
||||||
//--------------------------------------------------------------------
|
//--------------------------------------------------------------------
|
||||||
$failed = null;
|
$failed = false;
|
||||||
|
|
||||||
$failed |= maxOutputParamsTest("abc", 3);
|
$failed |= maxOutputParamsTest("abc", 3);
|
||||||
$failed |= maxOutputParamsTest("abc", 10);
|
$failed |= maxOutputParamsTest("abc", 10);
|
||||||
|
|
||||||
if ($failed) {
|
if ($failed) {
|
||||||
FatalError("Possible Regression: Value returned as VARCHAR(MAX) truncated");
|
fatalError("Possible Regression: Value returned as VARCHAR(MAX) truncated");
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
--EXPECT--
|
--EXPECT--
|
||||||
|
|
|
@ -24,14 +24,14 @@ try {
|
||||||
array('60', 'Pqr', 'kji'));
|
array('60', 'Pqr', 'kji'));
|
||||||
|
|
||||||
// Insert using question mark placeholders
|
// Insert using question mark placeholders
|
||||||
$stmt1 = PrepareQuery($conn1, "INSERT INTO [$tableName] VALUES(?, ?, ?)");
|
$stmt1 = $conn1->prepare("INSERT INTO [$tableName] VALUES(?, ?, ?)");
|
||||||
foreach ($data as $row) {
|
foreach ($data as $row) {
|
||||||
$stmt1->execute($row);
|
$stmt1->execute($row);
|
||||||
}
|
}
|
||||||
unset($stmt1);
|
unset($stmt1);
|
||||||
|
|
||||||
// Count inserted rows
|
// Count inserted rows
|
||||||
$stmt2 = PrepareQuery($conn1, "SELECT COUNT(id) FROM [$tableName]");
|
$stmt2 = $conn1->prepare("SELECT COUNT(id) FROM [$tableName]");
|
||||||
$stmt2->execute();
|
$stmt2->execute();
|
||||||
$num = $stmt2->fetchColumn();
|
$num = $stmt2->fetchColumn();
|
||||||
echo "There are $num rows in the table.\n";
|
echo "There are $num rows in the table.\n";
|
||||||
|
@ -60,13 +60,14 @@ try {
|
||||||
unset($stmt1);
|
unset($stmt1);
|
||||||
|
|
||||||
if (!isColEncrypted()) {
|
if (!isColEncrypted()) {
|
||||||
$stmt1 = PrepareQuery($conn1, "SELECT idx, txt FROM [$tableName] ORDER BY idx");
|
$stmt1 = $conn1->prepare("SELECT idx, txt FROM [$tableName] ORDER BY idx");
|
||||||
} else {
|
} else {
|
||||||
// ORDER BY does not work on encrypted columns
|
// ORDER BY does not work on encrypted columns
|
||||||
$stmt1 = PrepareQuery($conn1, "SELECT idx, txt FROM [$tableName]");
|
$stmt1 = $conn1->prepare("SELECT idx, txt FROM [$tableName]");
|
||||||
}
|
}
|
||||||
$stmt1->execute();
|
$stmt1->execute();
|
||||||
$data = $stmt1->fetchAll(PDO::FETCH_COLUMN|PDO::FETCH_UNIQUE);
|
$data = $stmt1->fetchAll(PDO::FETCH_COLUMN|PDO::FETCH_UNIQUE);
|
||||||
|
// needs to order the result set manually as ORDER BY does not work properly on encrypted columns
|
||||||
if (isColEncrypted()) {
|
if (isColEncrypted()) {
|
||||||
ksort($data);
|
ksort($data);
|
||||||
}
|
}
|
||||||
|
@ -99,50 +100,50 @@ try {
|
||||||
|
|
||||||
var_dump($stmt2->execute());
|
var_dump($stmt2->execute());
|
||||||
if ($idx == 0) { // bindColumn()s after execute() has been called at least once
|
if ($idx == 0) { // bindColumn()s after execute() has been called at least once
|
||||||
$stmt2->bindColumn('txt', $col1);
|
$stmt2->bindColumn('txt', $txtCol);
|
||||||
}
|
}
|
||||||
var_dump($stmt2->fetch(PDO::FETCH_BOUND));
|
var_dump($stmt2->fetch(PDO::FETCH_BOUND));
|
||||||
$stmt2->closeCursor();
|
$stmt2->closeCursor();
|
||||||
|
|
||||||
var_dump($stmt3->execute());
|
var_dump($stmt3->execute());
|
||||||
if ($idx == 0) { // bindColumn()s after execute() has been called at least once
|
if ($idx == 0) { // bindColumn()s after execute() has been called at least once
|
||||||
$stmt3->bindColumn('idx', $col2);
|
$stmt3->bindColumn('idx', $idxCol);
|
||||||
}
|
}
|
||||||
var_dump($stmt3->fetch(PDO::FETCH_BOUND));
|
var_dump($stmt3->fetch(PDO::FETCH_BOUND));
|
||||||
$stmt3->closeCursor();
|
$stmt3->closeCursor();
|
||||||
|
|
||||||
var_dump(array($col2=>$col1));
|
var_dump(array($idxCol=>$txtCol));
|
||||||
}
|
}
|
||||||
|
|
||||||
echo "===REBIND/SAME===\n";
|
echo "===REBIND/SAME===\n";
|
||||||
|
|
||||||
$stmt3->bindColumn('idx', $col1);
|
$stmt3->bindColumn('idx', $idxCol);
|
||||||
foreach ($data as $idx => $txt) {
|
foreach ($data as $idx => $txt) {
|
||||||
var_dump(array($idx=>$txt));
|
var_dump(array($idx=>$txt));
|
||||||
var_dump($stmt2->execute());
|
var_dump($stmt2->execute());
|
||||||
var_dump($stmt2->fetch(PDO::FETCH_BOUND));
|
var_dump($stmt2->fetch(PDO::FETCH_BOUND));
|
||||||
$stmt2->closeCursor();
|
$stmt2->closeCursor();
|
||||||
|
|
||||||
var_dump($col1);
|
var_dump($idxCol);
|
||||||
var_dump($stmt3->execute());
|
var_dump($stmt3->execute());
|
||||||
var_dump($stmt3->fetch(PDO::FETCH_BOUND));
|
var_dump($stmt3->fetch(PDO::FETCH_BOUND));
|
||||||
$stmt3->closeCursor();
|
$stmt3->closeCursor();
|
||||||
var_dump($col1);
|
var_dump($idxCol);
|
||||||
}
|
}
|
||||||
|
|
||||||
echo "===REBIND/CONFLICT===\n";
|
echo "===REBIND/CONFLICT===\n";
|
||||||
|
|
||||||
$stmt1->bindColumn('idx', $col1);
|
$stmt1->bindColumn('idx', $col);
|
||||||
$stmt1->bindColumn('txt', $col1);
|
$stmt1->bindColumn('txt', $col);
|
||||||
$stmt1->execute();
|
$stmt1->execute();
|
||||||
$col1s = array();
|
$cols = array();
|
||||||
while ($stmt1->fetch(PDO::FETCH_BOUND)) {
|
while ($stmt1->fetch(PDO::FETCH_BOUND)) {
|
||||||
array_push($col1s, $col1);
|
array_push($cols, $col);
|
||||||
}
|
}
|
||||||
if (isColEncrypted()) {
|
if (isColEncrypted()) {
|
||||||
sort($col1s);
|
sort($cols);
|
||||||
}
|
}
|
||||||
var_dump($col1s);
|
var_dump($cols);
|
||||||
|
|
||||||
// Cleanup
|
// Cleanup
|
||||||
dropTable($conn1, $tableName);
|
dropTable($conn1, $tableName);
|
||||||
|
|
|
@ -23,8 +23,8 @@ try {
|
||||||
unset($dbh);
|
unset($dbh);
|
||||||
} catch (PDOException $e) {
|
} catch (PDOException $e) {
|
||||||
$error = $e->getMessage();
|
$error = $e->getMessage();
|
||||||
$pass = !isColEncrypted() && $error === "SQLSTATE[IMSSP]: Statement with emulate prepare on does not support output or input_output parameters.";
|
$pass = !isAEConnected() && $error === "SQLSTATE[IMSSP]: Statement with emulate prepare on does not support output or input_output parameters.";
|
||||||
$pass |= isColEncrypted() && ($error === "SQLSTATE[IMSSP]: Connection with Column Encryption enabled do no support PDO::ATTR_EMULATE_PREPARES with binding parameters.");
|
$pass |= isAEConnected() && ($error === "SQLSTATE[IMSSP]: Parameterized statement with attribute PDO::ATTR_EMULATE_PREPARES is not supported in a Column Encryption enabled Connection.");
|
||||||
if (!$pass) {
|
if (!$pass) {
|
||||||
print("Error: " . $error . "\n");
|
print("Error: " . $error . "\n");
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -40,7 +40,7 @@ if (!$exception_thrown) {
|
||||||
|
|
||||||
// Column encryption is not supported by emulate prepared statement
|
// Column encryption is not supported by emulate prepared statement
|
||||||
$option[PDO::ATTR_EMULATE_PREPARES] = true;
|
$option[PDO::ATTR_EMULATE_PREPARES] = true;
|
||||||
if (isColEncrypted()) {
|
if (isAEConnected()) {
|
||||||
$option[PDO::ATTR_EMULATE_PREPARES] = false;
|
$option[PDO::ATTR_EMULATE_PREPARES] = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -47,7 +47,7 @@ try {
|
||||||
}
|
}
|
||||||
|
|
||||||
$query1 = "INSERT INTO [$tableName](ID, Policy, Label, Budget) VALUES (:col1, :col2, :col3, :col4)";
|
$query1 = "INSERT INTO [$tableName](ID, Policy, Label, Budget) VALUES (:col1, :col2, :col3, :col4)";
|
||||||
if (!isColEncrypted()) {
|
if (!isAEConnected()) {
|
||||||
$stmtOptions[PDO::ATTR_EMULATE_PREPARES] = true;
|
$stmtOptions[PDO::ATTR_EMULATE_PREPARES] = true;
|
||||||
}
|
}
|
||||||
$stmt = $conn1->prepare($query1, $stmtOptions);
|
$stmt = $conn1->prepare($query1, $stmtOptions);
|
||||||
|
|
|
@ -53,7 +53,7 @@ try {
|
||||||
unset($stmt4);
|
unset($stmt4);
|
||||||
|
|
||||||
$option;
|
$option;
|
||||||
if (!isColEncrypted()) {
|
if (!isAEConnected()) {
|
||||||
$option[PDO::ATTR_EMULATE_PREPARES] = true;
|
$option[PDO::ATTR_EMULATE_PREPARES] = true;
|
||||||
} else {
|
} else {
|
||||||
$option[PDO::ATTR_EMULATE_PREPARES] = false;
|
$option[PDO::ATTR_EMULATE_PREPARES] = false;
|
||||||
|
|
Loading…
Reference in a new issue