Skip to content

Commit e7ddbf1

Browse files
committed
Tests modified for language option for SQL Azure
1 parent 6325284 commit e7ddbf1

File tree

5 files changed

+164
-41
lines changed

5 files changed

+164
-41
lines changed

test/functional/pdo_sqlsrv/MsCommon_mid-refactor.inc

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -624,6 +624,29 @@ function IsDaasMode()
624624
return ($daasMode ? true : false);
625625
}
626626

627+
function isSQLAzure()
628+
{
629+
// 'SQL Azure' indicates SQL Database or SQL Data Warehouse
630+
// For details, https://docs.microsoft.com/sql/t-sql/functions/serverproperty-transact-sql
631+
try {
632+
$conn = connect();
633+
$tsql = "SELECT SERVERPROPERTY ('edition')";
634+
$stmt = $conn->query($tsql);
635+
636+
$result = $stmt->fetch(PDO::FETCH_NUM);
637+
$edition = $result[0];
638+
639+
if ($edition === "SQL Azure") {
640+
return true;
641+
} else {
642+
return false;
643+
}
644+
} catch (Exception $e) {
645+
echo $e->getMessage();
646+
die("Could not fetch server property.");
647+
}
648+
}
649+
627650
function isAzureDW()
628651
{
629652
// Check if running Azure Data Warehouse
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
--TEST--
2+
GitHub issue 929 - able to change the language when connecting
3+
--DESCRIPTION--
4+
--ENV--
5+
PHPT_EXEC=true
6+
--SKIPIF--
7+
<?php require('skipif_mid-refactor.inc'); ?>
8+
--FILE--
9+
<?php
10+
function verifyErrorContents($e)
11+
{
12+
require_once('MsCommon_mid-refactor.inc');
13+
14+
$code = $e->getCode();
15+
if ($code !== '42S22') {
16+
echo "Expected SQLSTATE 42S22\n";
17+
var_dump($code);
18+
}
19+
20+
// The error message is different when testing against Azure DB / Data Warehouse
21+
// Use wildcard patterns for matching
22+
if (isSQLAzure()) {
23+
$expected = "*Invalid column name [\"']BadColumn[\"']\.";
24+
} else {
25+
$expected = "*Ungültiger Spaltenname [\"']BadColumn[\"']\.";
26+
}
27+
28+
$message = $e->getMessage();
29+
if (!fnmatch($expected, $message)) {
30+
echo "Expected to find $expected in the error message\n";
31+
var_dump($message);
32+
}
33+
34+
}
35+
36+
require_once("MsSetup.inc");
37+
38+
try {
39+
$conn = new PDO("sqlsrv:server=$server;Language = German", $uid, $pwd);
40+
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
41+
42+
$tsql = "SELECT *, BadColumn FROM sys.syslanguages";
43+
$conn->query($tsql);
44+
echo 'This should have failed!\n';
45+
} catch (PDOException $e) {
46+
verifyErrorContents($e);
47+
}
48+
49+
unset($conn);
50+
51+
echo "Done\n";
52+
?>
53+
--EXPECT--
54+
Done

test/functional/sqlsrv/MsCommon.inc

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,26 @@ function isDaasMode()
8484
return ($daasMode ? true : false);
8585
}
8686

87+
function isSQLAzure()
88+
{
89+
// 'SQL Azure' indicates SQL Database or SQL Data Warehouse
90+
// For details, https://docs.microsoft.com/sql/t-sql/functions/serverproperty-transact-sql
91+
$conn = connect();
92+
$tsql = "SELECT SERVERPROPERTY ('edition')";
93+
$stmt = sqlsrv_query($conn, $tsql);
94+
95+
if (sqlsrv_fetch($stmt)) {
96+
$edition = sqlsrv_get_field($stmt, 0);
97+
if ($edition === "SQL Azure") {
98+
return true;
99+
} else {
100+
return false;
101+
}
102+
} else {
103+
die("Could not fetch server property.");
104+
}
105+
}
106+
87107
function isAzureDW()
88108
{
89109
// Check if running Azure Data Warehouse

test/functional/sqlsrv/test_error_encoding.phpt

Lines changed: 32 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,35 @@ Encoding of sqlsrv errors
44
<?php require('skipif.inc'); ?>
55
--FILE--
66
<?php
7-
header('content-type: text/plain;encoding=ISO-8859-1');
7+
function verifyErrorContents()
8+
{
9+
require_once('MsCommon.inc');
10+
$error = sqlsrv_errors()[0];
11+
12+
if ($error['SQLSTATE'] !== '42S22') {
13+
echo "Expected SQLSTATE 42S22\n";
14+
var_dump($error);
15+
}
16+
17+
// The error message is different when testing against Azure DB / Data Warehouse
18+
// Use wildcard patterns for matching
19+
if (isSQLAzure()) {
20+
$expected = "*Invalid column name [\"']BadColumn[\"']\.";
21+
} else {
22+
$expected = "*Ungültiger Spaltenname [\"']BadColumn[\"']\.";
23+
}
824

9-
require_once("MsCommon.inc");
25+
if (!fnmatch($expected, $error['message'])) {
26+
echo "Expected to find $expected in the error message\n";
27+
var_dump($error);
28+
}
29+
30+
}
31+
32+
require_once('MsSetup.inc');
1033

11-
$conn = connect(array( 'CharacterSet'=>'UTF-8' ));
34+
$connectionOptions = array('UID' => $userName, 'PWD' => $userPassword, 'CharacterSet' => 'UTF-8');
35+
$conn = sqlsrv_connect($server, $connectionOptions);
1236
if (!$conn) {
1337
die(print_r(sqlsrv_errors(), true));
1438
}
@@ -22,27 +46,15 @@ sqlsrv_free_stmt($stmt);
2246

2347
$stmt = sqlsrv_query($conn, "select *, BadColumn from sys.syslanguages");
2448
if ($stmt) {
25-
echo 'OK!';
49+
echo 'This should have failed!\n';
2650
sqlsrv_free_stmt($stmt);
2751
} else {
28-
$errs = sqlsrv_errors();
29-
print_r($errs);
52+
verifyErrorContents();
3053
}
3154

3255
sqlsrv_close($conn);
3356

57+
echo "Done\n";
3458
?>
35-
--EXPECTF--
36-
Array
37-
(
38-
[0] => Array
39-
(
40-
[0] => 42S22
41-
[SQLSTATE] => 42S22
42-
[1] => 207
43-
[code] => 207
44-
[2] => %SUngültiger Spaltenname %cBadColumn%c.
45-
[message] => %SUngültiger Spaltenname %cBadColumn%c.
46-
)
47-
48-
)
59+
--EXPECT--
60+
Done
Lines changed: 35 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,55 @@
11
--TEST--
2-
Encoding of sqlsrv errors
2+
GitHub issue 929 - able to change the language when connecting
3+
--DESCRIPTION--
4+
A test similar to test_error_encoding, created for GitHub issue 929
35
--SKIPIF--
46
<?php require('skipif.inc'); ?>
57
--FILE--
68
<?php
7-
header('content-type: text/plain;encoding=ISO-8859-1');
9+
function verifyErrorContents()
10+
{
11+
require_once('MsCommon.inc');
12+
$error = sqlsrv_errors()[0];
13+
14+
if ($error['SQLSTATE'] !== '42S22') {
15+
echo "Expected SQLSTATE 42S22\n";
16+
var_dump($error);
17+
}
18+
19+
// The error message is different when testing against Azure DB / Data Warehouse
20+
// Use wildcard patterns for matching
21+
if (isSQLAzure()) {
22+
$expected = "*Invalid column name [\"']BadColumn[\"']\.";
23+
} else {
24+
$expected = "*Ungültiger Spaltenname [\"']BadColumn[\"']\.";
25+
}
826

9-
require_once("MsCommon.inc");
27+
if (!fnmatch($expected, $error['message'])) {
28+
echo "Expected to find $expected in the error message\n";
29+
var_dump($error);
30+
}
31+
32+
}
33+
34+
require_once("MsSetup.inc");
1035

11-
$conn = connect(array( 'CharacterSet'=>'UTF-8','Language'=>'German' ));
36+
$connectionOptions = array('UID' => $userName, 'PWD' => $userPassword, 'CharacterSet' => 'UTF-8', 'Language' => 'German');
37+
$conn = sqlsrv_connect($server, $connectionOptions);
1238
if (!$conn) {
1339
die(print_r(sqlsrv_errors(), true));
1440
}
1541

1642
$stmt = sqlsrv_query($conn, "select *, BadColumn from sys.syslanguages");
1743
if ($stmt) {
18-
echo 'OK!';
44+
echo 'This should have failed!\n';
1945
sqlsrv_free_stmt($stmt);
2046
} else {
21-
$errs = sqlsrv_errors();
22-
print_r($errs);
47+
verifyErrorContents();
2348
}
2449

2550
sqlsrv_close($conn);
2651

52+
echo "Done\n";
2753
?>
28-
--EXPECTF--
29-
Array
30-
(
31-
[0] => Array
32-
(
33-
[0] => 42S22
34-
[SQLSTATE] => 42S22
35-
[1] => 207
36-
[code] => 207
37-
[2] => %SUngültiger Spaltenname %cBadColumn%c.
38-
[message] => %SUngültiger Spaltenname %cBadColumn%c.
39-
)
40-
41-
)
54+
--EXPECT--
55+
Done

0 commit comments

Comments
 (0)