php-sqlsrv/test/functional/sqlsrv/TC75_ProcRoundtrip.phpt

90 lines
2.5 KiB
Plaintext
Raw Normal View History

2017-05-04 01:00:31 +02:00
--TEST--
Data Roundtrip via Stored Proc
--DESCRIPTION--
Verifies that data is not corrupted through a roundtrip via a store procedure.
Checks all character data types.
--ENV--
PHPT_EXEC=true
--SKIPIF--
2017-10-27 18:32:57 +02:00
<?php require('skipif_versions_old.inc'); ?>
2017-05-04 01:00:31 +02:00
--FILE--
<?php
require_once('MsCommon.inc');
2017-05-04 01:00:31 +02:00
function storedProcRoundtrip($minType, $maxType)
2017-05-04 01:00:31 +02:00
{
$testName = "Stored Proc Roundtrip";
startTest($testName);
2017-05-04 01:00:31 +02:00
setup();
$tableName = 'TC75test';
$procName = "TC75test_proc";
$conn1 = AE\connect();
2017-05-04 01:00:31 +02:00
$data = "The quick brown fox jumps over the lazy dog 0123456789";
$dataSize = strlen($data);
for ($i = $minType; $i <= $maxType; $i++) {
$dataTypeIn = getSqlType($i);
2017-10-26 19:48:36 +02:00
$phpTypeIn = getSqlsrvSqlType($i, $dataSize);
2017-05-04 01:00:31 +02:00
for ($j = $minType; $j <= $maxType; $j++) {
2017-05-04 01:00:31 +02:00
$k = $j;
switch ($j) { // avoid LOB types as output
2017-05-04 01:00:31 +02:00
case 14: // varchar(max)
case 18: // text
$k = 13; // varchar
break;
case 17: // nvarchar(max)
case 19: // ntext
$k = 16; // nvarchar
break;
default:
break;
2017-05-04 01:00:31 +02:00
}
$dataTypeOut = getSqlType($k);
2017-10-26 19:48:36 +02:00
$phpTypeOut = getSqlsrvSqlType($k, 512);
execProcRoundtrip($conn1, $procName, $dataTypeIn, $dataTypeOut, $phpTypeIn, $phpTypeOut, $data);
2017-05-04 01:00:31 +02:00
}
}
2017-05-04 01:00:31 +02:00
sqlsrv_close($conn1);
endTest($testName);
2017-05-04 01:00:31 +02:00
}
function execProcRoundtrip($conn, $procName, $dataTypeIn, $dataTypeOut, $phpTypeIn, $phpTypeOut, $dataIn)
2017-05-04 01:00:31 +02:00
{
$procArgs = "@p1 $dataTypeIn, @p2 $dataTypeOut OUTPUT";
$procCode = "SELECT @p2 = CONVERT($dataTypeOut, @p1)";
createProc($conn, $procName, $procArgs, $procCode);
2017-05-04 01:00:31 +02:00
$callArgs = "?, ?";
$callResult = "";
$callValues = array(array($dataIn, SQLSRV_PARAM_IN, null, $phpTypeIn),
2017-05-04 01:00:31 +02:00
array(&$callResult, SQLSRV_PARAM_OUT, SQLSRV_PHPTYPE_STRING(SQLSRV_ENC_CHAR), $phpTypeOut));
callProc($conn, $procName, $callArgs, $callValues);
dropProc($conn, $procName);
2017-05-04 01:00:31 +02:00
$dataOut = trim($callResult);
if (strncmp($dataOut, $dataIn, strlen($dataIn)) != 0) {
traceData($dataTypeIn."=>".$dataTypeOut, "\n In: [".$dataIn."]\nOut: [".$dataOut."]");
2017-05-04 01:00:31 +02:00
die("Unexpected result for ".$dataTypeIn."=>".$dataTypeOut);
}
}
try {
storedProcRoundtrip(12, 19);
} catch (Exception $e) {
echo $e->getMessage();
2017-05-04 01:00:31 +02:00
}
?>
--EXPECT--
Test "Stored Proc Roundtrip" completed successfully.