From 33b5d0bf4ce7507cb65f2050cdec7121921dd3cc Mon Sep 17 00:00:00 2001 From: v-kaywon Date: Tue, 14 Mar 2017 10:51:51 -0700 Subject: [PATCH 1/5] add test for bind output param with decimal type and scale specified --- test/pdo_sqlsrv/pdo_output_decimal.phpt | 58 +++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 test/pdo_sqlsrv/pdo_output_decimal.phpt diff --git a/test/pdo_sqlsrv/pdo_output_decimal.phpt b/test/pdo_sqlsrv/pdo_output_decimal.phpt new file mode 100644 index 00000000..3500591c --- /dev/null +++ b/test/pdo_sqlsrv/pdo_output_decimal.phpt @@ -0,0 +1,58 @@ +--TEST-- +call stored procedures with inputs of ten different datatypes to get outputs of various types +--SKIPIF-- + +--FILE-- +exec("CREATE PROC $proc_scale (@p1 DECIMAL(18, 1), @p2 DECIMAL(18, 1), @p3 CHAR(128) OUTPUT) + AS BEGIN SELECT @p3 = CONVERT(CHAR(128), @p1 + @p2) END"); + + $inValue1 = '2.1'; + $inValue2 = '5.3'; + $outValue = '0'; + + $stmt = $conn->prepare("{CALL $proc_scale (?, ?, ?)}"); + $stmt->bindValue(1, $inValue1); + $stmt->bindValue(2, $inValue2); + $stmt->bindParam(3, $outValue, PDO::PARAM_STR, 300); + $stmt->execute(); + + $outValue = trim($outValue); + echo "outValue with scale specified in decimal type: $outValue\n"; + + $stmt = $conn->exec("CREATE PROC $proc_no_scale (@p1 DECIMAL, @p2 DECIMAL, @p3 CHAR(128) OUTPUT) + AS BEGIN SELECT @p3 = CONVERT(CHAR(128), @p1 + @p2) END"); + + $stmt = $conn->prepare("{CALL $proc_no_scale (?, ?, ?)}"); + $stmt->bindValue(1, $inValue1); + $stmt->bindValue(2, $inValue2); + $stmt->bindParam(3, $outValue, PDO::PARAM_STR, 300); + $stmt->execute(); + + $outValue = trim($outValue); + echo "outValue with no scale specified in decimal type: $outValue\n"; + + $stmt = null; + $conn = null; +} +catch (Exception $e) +{ + echo $e->getMessage(); +} + +?> +--EXPECT-- +outValue with scale specified in decimal type: 7.4 +outValue with no scale specified in decimal type: 7 From 43cafcaf86c993a57ed582fded3fbbd85a96a3a8 Mon Sep 17 00:00:00 2001 From: v-kaywon Date: Wed, 15 Mar 2017 09:26:02 -0700 Subject: [PATCH 2/5] Update pdo_output_decimal.phpt --- test/pdo_sqlsrv/pdo_output_decimal.phpt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/pdo_sqlsrv/pdo_output_decimal.phpt b/test/pdo_sqlsrv/pdo_output_decimal.phpt index 3500591c..f18ab576 100644 --- a/test/pdo_sqlsrv/pdo_output_decimal.phpt +++ b/test/pdo_sqlsrv/pdo_output_decimal.phpt @@ -44,6 +44,9 @@ try $outValue = trim($outValue); echo "outValue with no scale specified in decimal type: $outValue\n"; + $stmt = $conn->exec("DROP PROCEDURE $proc_scale"); + $stmt = $conn->exec("DROP PROCEDURE $proc_no_scale"); + $stmt = null; $conn = null; } From 8565882bbba832fba720d92ea27eb51dbd5fc367 Mon Sep 17 00:00:00 2001 From: v-kaywon Date: Wed, 15 Mar 2017 09:45:23 -0700 Subject: [PATCH 3/5] Update pdo_output_decimal.phpt --- test/pdo_sqlsrv/pdo_output_decimal.phpt | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/test/pdo_sqlsrv/pdo_output_decimal.phpt b/test/pdo_sqlsrv/pdo_output_decimal.phpt index f18ab576..1bc538e4 100644 --- a/test/pdo_sqlsrv/pdo_output_decimal.phpt +++ b/test/pdo_sqlsrv/pdo_output_decimal.phpt @@ -21,16 +21,16 @@ try $inValue1 = '2.1'; $inValue2 = '5.3'; - $outValue = '0'; + $outValue1 = '0'; + $outValue2 = '0'; $stmt = $conn->prepare("{CALL $proc_scale (?, ?, ?)}"); $stmt->bindValue(1, $inValue1); $stmt->bindValue(2, $inValue2); - $stmt->bindParam(3, $outValue, PDO::PARAM_STR, 300); + $stmt->bindParam(3, $outValue1, PDO::PARAM_STR, 300); $stmt->execute(); - $outValue = trim($outValue); - echo "outValue with scale specified in decimal type: $outValue\n"; + $outValue1 = trim($outValue1); $stmt = $conn->exec("CREATE PROC $proc_no_scale (@p1 DECIMAL, @p2 DECIMAL, @p3 CHAR(128) OUTPUT) AS BEGIN SELECT @p3 = CONVERT(CHAR(128), @p1 + @p2) END"); @@ -38,11 +38,16 @@ try $stmt = $conn->prepare("{CALL $proc_no_scale (?, ?, ?)}"); $stmt->bindValue(1, $inValue1); $stmt->bindValue(2, $inValue2); - $stmt->bindParam(3, $outValue, PDO::PARAM_STR, 300); + $stmt->bindParam(3, $outValue2, PDO::PARAM_STR, 300); $stmt->execute(); - $outValue = trim($outValue); - echo "outValue with no scale specified in decimal type: $outValue\n"; + $outValue2 = trim($outValue2); + + $expected1 = "7.4"; + $expected2 = "7"; + if ($outValue1 == $expected1 && $outValue2 == $expected2) { + echo "Test Successfully\n"; + } $stmt = $conn->exec("DROP PROCEDURE $proc_scale"); $stmt = $conn->exec("DROP PROCEDURE $proc_no_scale"); @@ -57,5 +62,4 @@ catch (Exception $e) ?> --EXPECT-- -outValue with scale specified in decimal type: 7.4 -outValue with no scale specified in decimal type: 7 +Test Successfully From 9f65c08b37008857a4a7ace26fd791068c54c1bd Mon Sep 17 00:00:00 2001 From: v-kaywon Date: Wed, 15 Mar 2017 10:19:30 -0700 Subject: [PATCH 4/5] Update pdo_output_decimal.phpt --- test/pdo_sqlsrv/pdo_output_decimal.phpt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/pdo_sqlsrv/pdo_output_decimal.phpt b/test/pdo_sqlsrv/pdo_output_decimal.phpt index 1bc538e4..094649ca 100644 --- a/test/pdo_sqlsrv/pdo_output_decimal.phpt +++ b/test/pdo_sqlsrv/pdo_output_decimal.phpt @@ -13,8 +13,8 @@ try $database = "tempdb"; $conn = new PDO( "sqlsrv:server=$serverName;Database=$database", $username, $password); - $proc_scale = GetTempProcName('scale'); - $proc_no_scale = GetTempProcName('noScale'); + $proc_scale = 'scale_proc'; + $proc_no_scale = 'noScale_proc'; $stmt = $conn->exec("CREATE PROC $proc_scale (@p1 DECIMAL(18, 1), @p2 DECIMAL(18, 1), @p3 CHAR(128) OUTPUT) AS BEGIN SELECT @p3 = CONVERT(CHAR(128), @p1 + @p2) END"); From 048ecf86fdd0d22517888d76417a0dec97a38718 Mon Sep 17 00:00:00 2001 From: v-kaywon Date: Thu, 16 Mar 2017 11:48:09 -0700 Subject: [PATCH 5/5] Update pdo_output_decimal.phpt --- test/pdo_sqlsrv/pdo_output_decimal.phpt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/pdo_sqlsrv/pdo_output_decimal.phpt b/test/pdo_sqlsrv/pdo_output_decimal.phpt index 094649ca..e3d40137 100644 --- a/test/pdo_sqlsrv/pdo_output_decimal.phpt +++ b/test/pdo_sqlsrv/pdo_output_decimal.phpt @@ -13,8 +13,8 @@ try $database = "tempdb"; $conn = new PDO( "sqlsrv:server=$serverName;Database=$database", $username, $password); - $proc_scale = 'scale_proc'; - $proc_no_scale = 'noScale_proc'; + $proc_scale = GetTempProcName( 'scale_proc' ); + $proc_no_scale = GetTempProcName( 'noScale_proc' ); $stmt = $conn->exec("CREATE PROC $proc_scale (@p1 DECIMAL(18, 1), @p2 DECIMAL(18, 1), @p3 CHAR(128) OUTPUT) AS BEGIN SELECT @p3 = CONVERT(CHAR(128), @p1 + @p2) END");