added print error func to ourput variant test

This commit is contained in:
Hadis Kakanejadi Fard 2017-05-16 14:52:19 -07:00
parent 04560ea47f
commit b7b73a07ff
2 changed files with 29 additions and 201 deletions

View file

@ -1,181 +0,0 @@
--TEST--
Test parameterized insert and fetch sql_variants as strings using various data types
--DESCRIPTION--
The following lists the types of values that can not be stored by using sql_variant:
varchar(max) / nvarchar(max)
varbinary(max)
xml
text / ntext / image
rowversion (timestamp)
sql_variant
geography
hierarchyid
geometry
datetimeoffset
User-defined types
--FILE--
<?php
include 'tools.inc';
function CreateTable($conn, $tableName)
{
$stmt = sqlsrv_query($conn, "CREATE TABLE [$tableName] ([c1_int] sql_variant, [c2_tinyint] sql_variant, [c3_smallint] sql_variant, [c4_bigint] sql_variant, [c5_bit] sql_variant, [c6_float] sql_variant, [c7_real] sql_variant, [c8_decimal] sql_variant, [c9_numeric] sql_variant, [c10_money] sql_variant, [c11_smallmoney] sql_variant, [c12_char] sql_variant, [c13_varchar] sql_variant, [c14_uniqueidentifier] sql_variant, [c15_datetime] sql_variant, [c16_smalldatetime] sql_variant)");
if (! $stmt)
FatalError("Failed to create table.\n");
}
function InsertData($conn, $tableName, $index)
{
$data = GetInputData($index, $tableName);
$stmt = sqlsrv_query($conn, "INSERT INTO [$tableName] (c1_int, c2_tinyint, c3_smallint, c4_bigint, c5_bit, c6_float, c7_real, c8_decimal, c9_numeric, c10_money, c11_smallmoney, c12_char, c13_varchar, c14_uniqueidentifier, c15_datetime, c16_smalldatetime) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", $data);
if (! $stmt)
FatalError("Failed to insert row $index.\n");
}
function FetchData($conn, $tableName, $numRows)
{
$select = "SELECT * FROM $tableName ORDER BY c1_int";
$stmt = sqlsrv_query($conn, $select);
$stmt2 = sqlsrv_query($conn, $select);
$metadata = sqlsrv_field_metadata($stmt);
$numFields = count($metadata);
$noActualRows = ReadData($stmt, $stmt2, $numFields);
echo "Number of rows fetched: $noActualRows\n";
if ($noActualRows !== $numRows)
{
echo "Number of Actual Rows $noActualRows is unexpected!\n";
}
}
function ReadData($stmt, $stmt2, $numFields)
{
$fetched = 0;
while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_NUMERIC))
{
$size = sizeof($row);
if ($size != $numFields)
FatalError("Array size $size returned different from expected, $numFields\n");
echo "Comparing data in row " . ++$fetched . "\n";
$obj = sqlsrv_fetch_object($stmt2);
if (! $obj)
FatalError("Failed to retrieve row $fetched!\n");
$fld = 0;
DoValuesMatched($obj->c1_int, $row[$fld], $fetched, $fld++);
DoValuesMatched($obj->c2_tinyint, $row[$fld], $fetched, $fld++);
DoValuesMatched($obj->c3_smallint, $row[$fld], $fetched, $fld++);
DoValuesMatched($obj->c4_bigint, $row[$fld], $fetched, $fld++);
DoValuesMatched($obj->c5_bit, $row[$fld], $fetched, $fld++);
DoValuesMatched($obj->c6_float, $row[$fld], $fetched, $fld++);
DoValuesMatched($obj->c7_real, $row[$fld], $fetched, $fld++);
DoValuesMatched($obj->c8_decimal, $row[$fld], $fetched, $fld++);
DoValuesMatched($obj->c9_numeric, $row[$fld], $fetched, $fld++);
DoValuesMatched($obj->c10_money, $row[$fld], $fetched, $fld++);
DoValuesMatched($obj->c11_smallmoney, $row[$fld], $fetched, $fld++);
DoValuesMatched($obj->c12_char, $row[$fld], $fetched, $fld++);
DoValuesMatched($obj->c13_varchar, $row[$fld], $fetched, $fld++);
DoValuesMatched($obj->c14_uniqueidentifier, $row[$fld], $fetched, $fld++);
DoValuesMatched($obj->c15_datetime, $row[$fld], $fetched, $fld++);
DoValuesMatched($obj->c16_smalldatetime, $row[$fld], $fetched, $fld++);
}
// returns the number of rows fetched
return $fetched;
}
function DoValuesMatched($value1, $value2, $row, $col)
{
$matched = false;
if (is_null($value1) && is_null($value2))
{
$matched = true;
}
else if (is_numeric($value1))
{
$matched = CompareNumericData($value1, $value2);
}
else
{
if (! strcasecmp($value1, $value2))
$matched = true;
}
if (! $matched)
{
echo "Values from row $row and column $col do not matched\n";
echo "One is $value1 but the other is $value2\n";
}
}
function GetInputData($index)
{
switch ($index)
{
case 1:
return array(array(1, null, null, null), array(167, null, null, null), array(-28589, null, null, null), array(-1991578776, null, null, null), array(0, null, null, null), array(1, null, null, null), array(0, null, null, null), array(0.0979, null, null, null), array(0.3095, null, null, null), array(0.8224, null, null, null), array(0.6794, null, null, null), array('~<auu*,/Öb£bbör,Aåbßå©+b_ãä¢ä*b<C.Ä/v£*,Buzößý~:ZÜb/Üå£îBðÃ.>Ö~.üoö©UßB.|ÃÄ£*/v|U/*bZ£ÄUÜß*+ööî*©ðü©bðr@éåbOý|©©hob/>Cz<Äå::Ð<¢ß+ü/:ª@zrß.¢Ü£bÜU©ÃßÜßðoß©r*bÜböOUvãahub£ãäªb>_ã£BOÜA©ãü/ߢß.ov:Ö<:_+uÜC:£oöü*BzC,Äö~Zî@/Z/r@/©<~.ã¢Aa</*bz.@åýBÄZÃA:zå<~öBbß|ªaýÃ,~><vBîv¢>ü>ý_zz@rÖ¢aU@,ABð/¢ß>z/ã@/ªUA~CoÄ,>bö|Ö>A,v+©CbC/Oo>©ßa©boAîÐvOo>ã|Cåöo+ÃhÖBAbo,+<ßã/£@å+ßAÜ@äÖÜOBäß~öu<aßß_bð¢ýý£_U:*Öä*©Übð,ãß,üððr+ß/U*ã¢ãüß:rAÜåz>*ã+a<îoo|¢üýoBaÃÜ£ãCaC@ha,äzäî¢ü@å£b~råîUbßr©ãßÐ:@UhAO>u*uýBbäZ£aý>v:ðC~ÜöåðzZ>O|Cä+£>öz./Ö+uÜ', null, null, null), array(',ßhr©+|v@,Ã+BZ|îAÐß_öýða_AoäAOÜ*ýC@hoBßßaä+ýöCäAä_Ä¢/Uî.äC©¢rÃuz¢*,ýß.Ðöðý@b£öb.OCý@>hðÖrCZb/Oªz¢A+ªÖäu<ßÜÄ/ÐßÖîbU:bÄÐã>/£ÜÃBÃ@Ð.r:ªª>©zî_ÄÄ:@A.+.aoÖ@¢åOåOBB|+Cvüa_+hz|~COoACAî¢+*Ä©*ýî~|.Äz|u+o~:<@>Arb:~£z<äbãv>Ðr©:ðýCößÖ¢UAîãý:Ã~.C*C¢uÖ*~CÄ*äAb>h@h_>,|u<<r|Ö><.,vå,.BAuo£_ãB.Örö.Ä>zoba~C©hArªB£Zü~oÃbb>î+ääÄCbÐýª*Üýburäßv/åOüA:Oß:obvz©ý/ßroäaª/bªvz©rÐ,ZäߢªÄ.ã.@z¢|ð*aCý©:ýÄövã<h+ÜC_ªÄßÜ.@b,Ä,,Ö+ÃüäCvUrÃ_Z,ªî|Üh|bbvýÐðÜoð@bªüb¢öª~åªAB@ðäb/.O@üvUh*z>,öAbö+ÖCb~uÖ£züî|_ö~*CÃ>+ý/_ß+ãÐz<u¢ã@bÖÖßß<r£_Oý+â,ÖhUv|Ðüð', null, null, null), array('54e16f51-64f1-4d62-a028-582b553c2de5', null, null, null), array('2130-04-16 14:12:00.131', null, null, null), array('2032-05-10 23:32:00', null, null, null));
case 2:
return array(array(2, SQLSRV_PARAM_IN, null, null), array(27, SQLSRV_PARAM_IN, null, null), array(-20174, SQLSRV_PARAM_IN, null, null), array(-840346326, SQLSRV_PARAM_IN, null, null), array(0, SQLSRV_PARAM_IN, null, null), array(0, SQLSRV_PARAM_IN, null, null), array(0, SQLSRV_PARAM_IN, null, null), array(0.4880, SQLSRV_PARAM_IN, null, null), array(0.9184, SQLSRV_PARAM_IN, null, null), array(0.6916, SQLSRV_PARAM_IN, null, null), array(0.7257, SQLSRV_PARAM_IN, null, null), array('<ö©ååä,ääÐ*bhîvr<Cý¢î©ßZÐ_å©ÐZ,UC:<öa</©bU*Uö@u*AðaßÃBÄßh+o+üÐC~*böÃ:*OaÄ*|£z|+rZ_¢ßv~~a֩ߣZbÃ+CÜîä~|îÄÐaB+_b>~aöb/BzZÜ@öðß@_Ä££r__£>£Ð£ðbU<r<Äou£+ývUß<h+£¢BOrz<Ä*@öö@z*ÜoubZZ<u¢Zå+£,öÐb@haB_Öåöa@hOuZhA©>B~/ãbo.>îzöã*,ßå/+zuu.+BZßzA,aÖzüåão£©BãÄbä~ýooÜ,+äßÐ:UÃrz|vä,Bå~¢ä<_£uÜv<_O|ßBC¢_£Ahöª_¢oözCßýzöüý+zÄUÖhB@Uîbh/u/©zÐbÖ¢A*ã,Ãî£<>rUªßÐßîZîåb:+¢|A_BÃo©ªäu,*ýååbU:bÖÄß|¢>¢ÖaãrÃO©Äv+oßöZãª,+/.ãa/㣪,¢ðÐ<î¢b.£Ü©_r©vª@î:>ÖðB:OrBÜЪý|bßbÜ|åUOåîOãÄãuÐ|/îörB£ÃßZZÄ@Z©bÜB:.¢@b££U¢äÐvÐ+ý+uzÃb+üo+öv~_©~Uhbª,ßCb+UZö>Üü', SQLSRV_PARAM_IN, null, null), array('|öÐob*+ÐÖ<UU|ßbCªb¢ªuCüoUOü:Ü/>,..Ä¢ß@>îß*äî|å>~Oo+/o+*/ü|îî,ðö*ýåãob:zb|Äßîvb¢,Ã,UªbbrAbZ©uªª@ä,_ð©A*>Ðävä:|:oîö_rý©+vî©ßBßßb>üOö@Öoö*+î@ÐßrÖ<¢hÜZb._raUaýUUÄößßîU¢ð.ÐýrãBh¢>Äðz<©AÜ/|©Ö@>hüBCO~öýZ>äÄÐAzä~/b.ÜzbðÜbða++ªå/ð~ACÐî~©>./<Ööý<~ýuÃBÐãåo*h©ö£öîüZß:ZÐä_>Ðvî©<aBð_ß++OzOÖhö,ÜîÐä<_><h|OãhÄr+<öuÄ*AÐ.ä~_Üý¢Ähß<Ö~a.:Cü|ü++öu©ýöÐßîUbÐOzaåýÄ>_äbb©ö¢*b@BÐÜb+bî+åßAåîu|/A.Ä.~hvb:@zå|Ä,ªÃZß@v©ßvB@Bð:£öß@uðr££ðü<Ä¢äÖaßO.:rª/Ao,ª:ZbA+¢ß|>,*ßoöA+ãb|Aü@bÄð@a:+,<b_¢r*åöBbßZU£<.U>ouªýª+£ðr*Bã¢+rCðUU_ÖÃ>îö>r©v:U_v@vCÜ>', SQLSRV_PARAM_IN, null, null), array('29a27f4f-9e94-45a9-9110-812ef69ee37c', SQLSRV_PARAM_IN, null, null), array('4262-03-20 19:16:36.081', SQLSRV_PARAM_IN, null, null), array('2065-02-17 00:36:00', SQLSRV_PARAM_IN, null, null));
case 3:
return array(array(3, null, null, null), array(170, null, null, null), array(25360, null, null, null), array(1352271629, null, null, null), array(0, null, null, null), array(0, null, null, null), array(0, null, null, null), array(0.3807, null, null, null), array(0.4393, null, null, null), array(0.8725, null, null, null), array(0.2057, null, null, null), array('ZÄßÃ|vbB/O<ouU*+ð>ýÖ~AABß©Ã@ÄÖßz~åz@ü.Ö<*~<B/Ob_ðð<öå<vUÃÃîîª|.Ã,oª+öã._Ö_.a~ðêªhªÜvã/Cªbßv>ãäßOÜÄv~Īb_ör*bvÃÖýZZ<ö¢.|Ð>ÜåaCAîâãßu/aå|@U*¢Bb*+bZr_.ã|,h_BöÄb.ðZ©//î_~v/ð/,bð¢/:@öãß+vÜv/båðöã:ã/z:£î<_ÐöC>.Ozrð©@rC~Bö,£o<:Ã*<bý_©¢Oß_b.Cåuß+BCäüv/£zvz,býÐýbAª£./£©ªÐäüoÐ:uĪvb+ªÄbb:©U*uhßßb*bZª.ð:<UU/<<ªßBÃ<Äâ>z_ªöÜ,z,ªboB,+öCr*¢î*<£~ýb:U|©Bh/ãÜÖý:obhå£+Z+r:o|v+bÐhãåaüÐöbãðöAÃ|ªOCÖO|Ü<ãvv¢ãýbý.ÐbÄÃðåü>/BbbÄ/véäý:@o>öÃaªÐ+îüýã_röýä©zhvÜ<Ã/CäaðoCB|å~~ÖaðvuC_hBrOrzÃßO©ZU.AvvåÖÐ/ÐãåZ©£,UãÖAîhUzªrö£Ãu+ð/v¢o_<ÐA@', null, null, null), array('ÄßZrð@~ö:ü:£,CoÄ©böBAO,ð:aA>ãÜBÐ@./:A.Z/bÖÜ,>ßî>ýßß©b/<@/,Öî>BBÃäÐCüÃÐÃvÜ_AZ.ý/©C_>aö/£Böða©£,öý£B_ÜÃðßvh|î|.oB/öBÜö¢BÐ/bAAÜÄa£.ªA©z<£ýOÐrå._bÄÜß~Ä_ªý,|+BãîA~Cî@ü+@ÜüzCªr.rzåazUöCzBߪ©Bö+ü*ZãÖ@AC*UA¢..aÜü*ArÃz£B:ßßÄ+Ã/ãª+ßZ_Ü<ßäîýýî@ðÄÜßÃÖðova£ªOöÄzÖ©ãrabªÐUrår+Ü*©OöåBö|a©î:bß©ð~_C_o*hÃ@åBb|<åÄß@©ý.Ubª,O£Oz|üßbz£+bã¢a@>:aaîý_Ür£|hÃ@z<_hüÃü,öîZýuã_¢üå£<ðßAª>rC.Bî.©,ß*å|é*_B>CÄîÖÃU~ÃÃ>rª>/ð©Ö|~ZA>¢¢/@£bZuZößzðå~:/h@uÐoOrã<¢aîßüß<¢BZzO¢@.:rvÜo>ABzC/ÜßÖ::r©O/v*@üaäzßZhU@aßvüî:©ü~ðª©_b£ä£ãB@:bhCÄZÜzOUßoåîÜý><', null, null, null), array('55a1f242-dad9-4f8e-b839-364fb6e1ffec', null, null, null), array('7060-11-11 17:57:33.899', null, null, null), array('1920-07-05 00:42:00', null, null, null));
case 4:
return array(array(4, SQLSRV_PARAM_IN, null, null), array(229, SQLSRV_PARAM_IN, null, null), array(-13459, SQLSRV_PARAM_IN, null, null), array(-8557402, SQLSRV_PARAM_IN, null, null), array(0, SQLSRV_PARAM_IN, null, null), array(0, SQLSRV_PARAM_IN, null, null), array(1, SQLSRV_PARAM_IN, null, null), array(0.3122, SQLSRV_PARAM_IN, null, null), array(0.3036, SQLSRV_PARAM_IN, null, null), array(0.8606, SQLSRV_PARAM_IN, null, null), array(0.4224, SQLSRV_PARAM_IN, null, null), array('uåîAZ©ÄZöäÜO@ÐðZ:r:vÜ@ýA/,O,ãBß>¢hð.Z>£Bߪ+¢ªZU/@@äB.orÐîå¢ð>*<äAv~,ß@ýü~+<oo+/hCÜåzuÐb:ðr@.åÄ¢<h>~*Ðå¢ý_å_bÄb~_<<ßÄ:o¢zrC<ªa~BäÐýA©ßB.Uhîß+rAÖå¢ýö.îîaýåUC¢/Aüöß©zÄaðÐ,b|||+vCO+~üA£ÄöãýbÜ_üßãCðã|_ÄbäÃU~***<¢¢höUãbözbÄ>Ðühr.vÐ:£_Ä~<ZÐvÜb+¢>@/o,a_abý_>ßr*å|bob¢îãBî~<üBÜouÄBar_üß.ÐÐ,©ýuÖUöäÐÐîZýªÃ*vß|~îZßZÜÐrh*~UÜ*î@OBÃßraUb:*/B/@OÄaãoßBãÃ<AAß@o>höBb@Uªý*|£U+ü*¢ß¢häUðOb/*.rßOrÖåüO<ý*aöCa@ªoä>ÐC.UO+ZUrÜA©Oã,ro+î+,Üå¢<¢rÐu.ªî|ãÃB,ða,ªÐüÄü©ßBÖß+uv>BöußÜ|h|aßohB*ovãu+@Ü£ßO©ßßBý:b+£bÐÖäªo:UAÐo_ã~>ö<ühåÖÐ<hbCýÜA~|Üß', SQLSRV_PARAM_IN, null, null), array('Aª./UbîvÐð££ãuzo@>î>å*v¢ß<OÃr<o.Ð*_å|bÄbü>a_>/ZÖ:åbbäz¢Ä*Ü¢ÜåubvÖUî@Ã:¢<Üß_.*Öh,o/uz.B_/Äã|Ü/öOÐ.ÐßU@ßbav~zAßu+ª£U¢<ýÖä©Ä>ßãåäbã¢ßýªöåä,*ubßß@¢><üCozÐЩäC_aauC/_<.ýuÜ£Ö,uCÜÃbåräZ,ðÐî@îbzÖã+ã,CB£ZzB¢vÄ*+Üb¢üýßU*oÄärãü@öîaß.|äý©bÖ|BuA©ª,C/ZB*ð~aÃÃvîü©+ªÃ+Ã_öuu¢ZöbÄuð©O¢Z@_uä|bu,äOÐÜbBr@|Ãüb/îr©ß.ååßÜabZ©hß+ãߪz|+Aå@äü>Ä+ýu|å¢z|bhr*ªbO©>/ö,hÐå+Öå_OßZ|ð,b.AäÐß_@ßß©.üüZäuA/aC|£CäßýbhÖÖªZö@ÃhßÖ£/å*örüßðU*~vhðv_Üðýðß<+bAbBa:ªÄ/vܪUuÄîîabãßO>:,Ãýðußßäö@vîhäÜ>£¢hý+zAZbaBðУ|å|ªÐ*:Ã>ª:ð£ÐüßÖbuªOOA>Bb©ÃärÐîhzö,+|C:Aö', SQLSRV_PARAM_IN, null, null), array('34eeff6c-7d28-4323-9e28-d6b499fde336', SQLSRV_PARAM_IN, null, null), array('4191-02-05 02:41:51.953', SQLSRV_PARAM_IN, null, null), array('1975-12-01 15:24:00', SQLSRV_PARAM_IN, null, null));
default:
return array();
}
}
function RunTest()
{
StartTest("sqlsrv_param_input_variants_nulls");
try
{
set_time_limit(0);
sqlsrv_configure('WarningsReturnAsErrors', 1);
require_once("autonomous_setup.php");
$database = "tempdb";
// Connect
$connectionInfo = array("Database"=>$database, "UID"=>$username, "PWD"=>$password, "CharacterSet"=>"UTF-8");
$conn = sqlsrv_connect($serverName, $connectionInfo);
if( !$conn ) { FatalError("Could not connect.\n"); }
// Create a temp table that will be automatically dropped once the connection is closed
$tableName = GetTempTableName();
CreateTable($conn, $tableName);
// Insert data
$numRows = 4;
for ($i = 1; $i <= $numRows; $i++)
InsertData($conn, $tableName, $i);
FetchData($conn, $tableName, $numRows);
sqlsrv_close($conn);
}
catch (Exception $e)
{
echo $e->getMessage();
}
echo "\nDone\n";
EndTest("sqlsrv_param_input_variants_nulls");
}
RunTest();
?>
--EXPECT--

...Starting 'sqlsrv_param_input_variants_nulls' test...
Comparing data in row 1
Comparing data in row 2
Comparing data in row 3
Comparing data in row 4
Number of rows fetched: 4
Done
...Test 'sqlsrv_param_input_variants_nulls' completed successfully.

View file

@ -4,9 +4,9 @@ Test parametrized insert and sql_variant as an output parameter.
sql_variant is not supported for output parameters, this test checks the error handling in this case
--FILE--
<?php
include 'tools.inc';
include 'MsCommon.inc';
function CreateTable($conn, $tableName)
function CreateVariantTable($conn, $tableName)
{
$stmt = sqlsrv_query($conn, "CREATE TABLE [$tableName] ([c1_int] int, [c2_variant] sql_variant)");
if (! $stmt)
@ -50,11 +50,11 @@ function TestOutputParam($conn, $tableName)
$stmt = sqlsrv_query($conn, "{ CALL [$procName] ($callArgs)}", $params);
if (! $stmt )
{
if (!strcmp($initData, $callResult))
print_errors();
if (strcmp($initData, $callResult))
{
echo "initialized data and results should be the same";
}
handle_errors();
echo "\n";
}
}
@ -76,12 +76,25 @@ function TestInputAndOutputParam($conn, $tableName)
$stmt = sqlsrv_query($conn, "{ CALL [$procName] ($callArgs)}", $params);
if (! $stmt )
{
if (!strcmp($initData, $callResult))
print_errors();
if (strcmp($initData, $callResult))
{
echo "initialized data and results should be the same";
echo "initialized data and results should be the same\n";
}
}
}
function print_errors()
{
$errors = sqlsrv_errors();
$count = count($errors);
if($count > 0)
{
for($i = 0; $i < $count; $i++)
{
print($errors[$i]['message']."\n");
}
handle_errors();
echo "\n";
}
}
@ -90,20 +103,15 @@ function RunTest()
StartTest("sqlsrv_param_output_variants");
try
{
set_time_limit(0);
sqlsrv_configure('WarningsReturnAsErrors', 1);
require_once("autonomous_setup.php");
$database = "tempdb";
Setup();
// Connect
$connectionInfo = array("Database"=>$database, "UID"=>$username, "PWD"=>$password);
$conn = sqlsrv_connect($serverName, $connectionInfo);
if( !$conn ) { FatalError("Could not connect.\n"); }
$conn = Connect();
// Create a temp table that will be automatically dropped once the connection is closed
$tableName = GetTempTableName();
CreateTable($conn, $tableName);
CreateVariantTable($conn, $tableName);
echo "\n";
TestOutputParam($conn, $tableName);
TestInputAndOutputParam($conn, $tableName);
@ -122,9 +130,10 @@ RunTest();
?>
--EXPECT--

...Starting 'sqlsrv_param_output_variants' test...

[Microsoft][ODBC Driver 13 for SQL Server][SQL Server]Operand type clash: varchar(max) is incompatible with sql_variant
[Microsoft][ODBC Driver 13 for SQL Server][SQL Server]Operand type clash: varchar(max) is incompatible with sql_variant
Done
...Test 'sqlsrv_param_output_variants' completed successfully.
Test "sqlsrv_param_output_variants" completed successfully.