Skip to content

Commit

Permalink
Merge pull request #776 from yitam/streamTests
Browse files Browse the repository at this point in the history
Modified BVT stream tests to make them more robust
  • Loading branch information
yitam authored May 24, 2018
2 parents 5c46d4b + 05833bf commit f0eefaf
Show file tree
Hide file tree
Showing 3 changed files with 165 additions and 99 deletions.
86 changes: 53 additions & 33 deletions test/bvt/sqlsrv/msdn_sqlsrv_query_stream.phpt
Original file line number Diff line number Diff line change
@@ -1,56 +1,76 @@
--TEST--
insert stream.
--SKIPIF--

?>
--FILE--
--TEST--
insert stream.
--SKIPIF--
--FILE--
<?php
/* Connect to the local server using Windows Authentication and
specify the AdventureWorks database as the database in use. */
require('connect.inc');
$connectionInfo = array( "Database"=>"$databaseName", "UID"=>"$uid", "PWD"=>"$pwd");
$conn = sqlsrv_connect( $server, $connectionInfo);
if( $conn === false )
{
echo "Could not connect.\n";
die( print_r( sqlsrv_errors(), true));
$conn = sqlsrv_connect($server, $connectionInfo);
if ($conn === false) {
echo "Could not connect.\n";
die(print_r(sqlsrv_errors(), true));
}

/* Remove any records with from the table with ProductID = 999*/
$productID = 999;
$tsql = "DELETE FROM Production.ProductReview WHERE ProductID = $productID";
sqlsrv_query($conn, $tsql);

/* Set up the Transact-SQL query. */
$tsql = "INSERT INTO Production.ProductReview (ProductID,
ReviewerName,
ReviewDate,
EmailAddress,
Rating,
Comments)
$tsql = "INSERT INTO Production.ProductReview (ProductID,
ReviewerName,
ReviewDate,
EmailAddress,
Rating,
Comments)
VALUES (?, ?, ?, ?, ?, ?)";


/* Set the parameter values and put them in an array.
Note that $comments is opened as a stream. */
$productID = '709';

$number = rand(99, 9999);
$input = "[Insert some number $number]";

/* There is no record in this table with ProductID = 999 */
$name = 'Customer Name';
$date = date("Y-m-d");
$email = '[email protected]';
$rating = 3;
$comments = fopen( "data://text/plain,[ Insert lengthy comment here.]",
"r");
$comments = fopen("data://text/plain,$input", "r");
$params = array($productID, $name, $date, $email, $rating, $comments);

/* Execute the query. All stream data is sent upon execution.*/
$stmt = sqlsrv_query($conn, $tsql, $params);
if( $stmt === false )
{
echo "Error in statement execution.\n";
die( print_r( sqlsrv_errors(), true));
}
else
{
echo "The query was successfully executed.";
if ($stmt === false) {
echo "Error in statement execution.\n";
die(print_r(sqlsrv_errors(), true));
}

/* Read it back to check the comment */
$tsql = "SELECT Comments FROM Production.ProductReview
WHERE ProductID = $productID";
$stmt = sqlsrv_query($conn, $tsql);
if (sqlsrv_fetch($stmt)) {
$review = sqlsrv_get_field($stmt, 0);
if ($review !== $input) {
echo "Comment retrieved \'$review\' is incorrect!" . PHP_EOL;
}
} else {
echo "Error in retrieving comments!" . PHP_EOL;
die(print_r(sqlsrv_errors(), true));
}

/* Remove the entry from the table */
$tsql = "DELETE FROM Production.ProductReview WHERE ProductID = $productID";
sqlsrv_query($conn, $tsql);

echo "Done" . PHP_EOL;

/* Free statement and connection resources. */
sqlsrv_free_stmt( $stmt);
sqlsrv_close( $conn);
?>
--EXPECT--
sqlsrv_free_stmt($stmt);
sqlsrv_close($conn);
?>
--EXPECT--
The query was successfully executed.
79 changes: 50 additions & 29 deletions test/bvt/sqlsrv/msdn_sqlsrv_send_stream_data.phpt
Original file line number Diff line number Diff line change
@@ -1,48 +1,69 @@
--TEST--
Sends data from parameter streams to the server
--SKIPIF--

--FILE--
--TEST--
Sends data from parameter streams to the server
--SKIPIF--

--FILE--
<?php
require('connect.inc');
$connectionInfo = array( "Database"=>"$databaseName", "UID"=>"$uid", "PWD"=>"$pwd");
$conn = sqlsrv_connect( $server, $connectionInfo);
if( $conn === false )
{
echo "Could not connect.<br>";
die( print_r( sqlsrv_errors(), true));
$connectionInfo = array("Database"=>"$databaseName", "UID"=>"$uid", "PWD"=>"$pwd");
$conn = sqlsrv_connect($server, $connectionInfo);
if ($conn === false) {
echo "Could not connect.<br>";
die(print_r(sqlsrv_errors(), true));
}

/* Define the query. */
$tsql = "UPDATE Production.ProductReview
SET Comments = ( ?)
$tsql = "UPDATE Production.ProductReview
SET Comments = (?)
WHERE ProductReviewID = 3";

$number = rand(99, 9999);
$input = "[Insert some number $number]";

/* Open parameter data as a stream and put it in the $params array. */
$comment = fopen( "data://text/plain,[ Insert lengthy comment.]", "r");
$params = array( &$comment);
$comments = fopen("data://text/plain,$input", "r");
$params = array(&$comments);

/* Prepare the statement. Use the $options array to turn off the
default behavior, which is to send all stream data at the time of query
execution. */
$options = array("SendStreamParamsAtExec"=>0);
$stmt = sqlsrv_prepare( $conn, $tsql, $params, $options);
$options = array("SendStreamParamsAtExec" => 0);
$stmt = sqlsrv_prepare($conn, $tsql, $params, $options);

/* Execute the statement. */
sqlsrv_execute( $stmt);
sqlsrv_execute($stmt);

/* Send up to 8K of parameter data to the server with each call to
sqlsrv_send_stream_data. Count the calls. */
$i = 1;
while( sqlsrv_send_stream_data( $stmt))
{
echo "$i call(s) made.<br>";
$i++;
}
while (sqlsrv_send_stream_data($stmt)) {
$i++;
}

/* For PHP 7.2, it takes 2 calls whereas older PHP versions
take up to 3 calls */
if ($i < 2 || $i > 3) {
echo "Expects 2 to 3 calls only." . PHP_EOL;
}

/* Read it back to check the comments */
$tsql = "SELECT Comments FROM Production.ProductReview
WHERE ProductReviewID = 3";
$stmt = sqlsrv_query($conn, $tsql);
if (sqlsrv_fetch($stmt)) {
$review = sqlsrv_get_field($stmt, 0);
if ($review !== $input) {
echo "Comments retrieved \'$review\' is incorrect!" . PHP_EOL;
}
} else {
echo "Error in retrieving comments!" . PHP_EOL;
die(print_r(sqlsrv_errors(), true));
}

echo "Done" . PHP_EOL;

/* Free statement and connection resources. */
sqlsrv_free_stmt( $stmt);
sqlsrv_close( $conn);
?>
--EXPECT--
1 call(s) made.<br>2 call(s) made.<br>3 call(s) made.<br>
sqlsrv_free_stmt($stmt);
sqlsrv_close($conn);
?>
--EXPECT--
Done
Original file line number Diff line number Diff line change
@@ -1,39 +1,43 @@
--TEST--
sned stream data with SendStreamParamsAtExec turned off.
--SKIPIF--

?>
--FILE--
--TEST--
Send stream data with SendStreamParamsAtExec turned off.
--SKIPIF--
--FILE--
<?php
/* Connect to the local server using Windows Authentication and
specify the AdventureWorks database as the database in use. */
require('connect.inc');
$connectionInfo = array( "Database"=>"$databaseName", "UID"=>"$uid", "PWD"=>"$pwd");
$conn = sqlsrv_connect( $server, $connectionInfo);
if( $conn === false )
{
echo "Could not connect.\n";
die( print_r( sqlsrv_errors(), true));
$connectionInfo = array("Database"=>"$databaseName", "UID"=>"$uid", "PWD"=>"$pwd");
$conn = sqlsrv_connect($server, $connectionInfo);
if ($conn === false) {
echo "Could not connect.\n";
die(print_r(sqlsrv_errors(), true));
}

/* Remove any records with from the table with ProductID = 999*/
$productID = 999;
$tsql = "DELETE FROM Production.ProductReview WHERE ProductID = $productID";
sqlsrv_query($conn, $tsql);

/* Set up the Transact-SQL query. */
$tsql = "INSERT INTO Production.ProductReview (ProductID,
ReviewerName,
ReviewDate,
EmailAddress,
Rating,
Comments)
$tsql = "INSERT INTO Production.ProductReview (ProductID,
ReviewerName,
ReviewDate,
EmailAddress,
Rating,
Comments)
VALUES (?, ?, ?, ?, ?, ?)";

/* Set the parameter values and put them in an array.
Note that $comments is opened as a stream. */
$productID = '709';
Note that $comments is opened as a stream. */
$number = rand(99, 9999);
$input = "[Insert some number $number]";

/* There is no record in this table with ProductID 999 */
$name = 'Customer Name';
$date = date("Y-m-d");
$email = '[email protected]';
$rating = 3;
$comments = fopen( "data://text/plain,[ Insert lengthy comment here.]",
"r");
$comments = fopen("data://text/plain,$input", "r");
$params = array($productID, $name, $date, $email, $rating, $comments);

/* Turn off the default behavior of sending all stream data at
Expand All @@ -42,26 +46,47 @@ $options = array("SendStreamParamsAtExec" => 0);

/* Execute the query. */
$stmt = sqlsrv_query($conn, $tsql, $params, $options);
if( $stmt === false )
{
echo "Error in statement execution.\n";
die( print_r( sqlsrv_errors(), true));
if ($stmt === false) {
echo "Error in statement execution.\n";
die(print_r(sqlsrv_errors(), true));
}

/* Send up to 8K of parameter data to the server with each call to
sqlsrv_send_stream_data. Count the calls. */
$i = 1;
while( sqlsrv_send_stream_data( $stmt))
{
echo "$i call(s) made.\n";
$i++;
while (sqlsrv_send_stream_data($stmt)) {
$i++;
}

/* For PHP 7.2, it takes 2 calls whereas older PHP versions
take up to 3 calls */
if ($i < 2 || $i > 3) {
echo "Expects 2 to 3 calls only." . PHP_EOL;
}

/* Read it back to check the comments */
$tsql = "SELECT Comments FROM Production.ProductReview
WHERE ProductID = $productID";
$stmt = sqlsrv_query($conn, $tsql);
if (sqlsrv_fetch($stmt)) {
$review = sqlsrv_get_field($stmt, 0);
if ($review !== $input) {
echo "Comments retrieved \'$review\' is incorrect!" . PHP_EOL;
}
} else {
echo "Error in retrieving comments!" . PHP_EOL;
die(print_r(sqlsrv_errors(), true));
}

/* Remove the entry from the table */
$tsql = "DELETE FROM Production.ProductReview WHERE ProductID = $productID";
sqlsrv_query($conn, $tsql);

echo "Done" . PHP_EOL;

/* Free statement and connection resources. */
sqlsrv_free_stmt( $stmt);
sqlsrv_close( $conn);
?>
--EXPECT--
1 call(s) made.
2 call(s) made.
3 call(s) made.
sqlsrv_free_stmt($stmt);
sqlsrv_close($conn);
?>
--EXPECT--
Done

0 comments on commit f0eefaf

Please sign in to comment.