Skip to content

Add more test coverage for ext/ODBC #11938

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Aug 23, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .github/actions/setup-x64/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ runs:
# Ensure local_infile tests can run.
mysql -uroot -proot -e "SET GLOBAL local_infile = true"
docker exec sql1 /opt/mssql-tools/bin/sqlcmd -S 127.0.0.1 -U SA -P "<YourStrong@Passw0rd>" -Q "create login pdo_test with password='password', check_policy=off; create user pdo_test for login pdo_test; grant alter, control to pdo_test;"
docker exec sql1 /opt/mssql-tools/bin/sqlcmd -S 127.0.0.1 -U SA -P "<YourStrong@Passw0rd>" -Q "create login odbc_test with password='password', check_policy=off; create user odbc_test for login odbc_test; grant alter, control, delete to odbc_test;"
docker exec sql1 /opt/mssql-tools/bin/sqlcmd -S 127.0.0.1 -U SA -P "<YourStrong@Passw0rd>" -Q "ALTER SERVER ROLE sysadmin ADD MEMBER odbc_test;"
sudo locale-gen de_DE

./.github/scripts/setup-slapd.sh
Expand Down
4 changes: 4 additions & 0 deletions .github/actions/test-linux/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,10 @@ runs:
export PDO_OCI_TEST_DSN="oci:dbname=localhost/XEPDB1;charset=AL32UTF8"
export PGSQL_TEST_CONNSTR="host=postgres dbname=test port=5432 user=postgres password=postgres"
export PDO_PGSQL_TEST_DSN="host=postgres dbname=test port=5432 user=postgres password=postgres"
export ODBC_TEST_USER="odbc_test"
export ODBC_TEST_PASS="password"
export ODBC_TEST_DSN="Driver={ODBC Driver 17 for SQL Server};Server=127.0.0.1;Database=master;uid=$ODBC_TEST_USER;pwd=$ODBC_TEST_PASS"
export PDO_ODBC_TEST_DSN="odbc:$ODBC_TEST_DSN"
export SKIP_IO_CAPTURE_TESTS=1
export TEST_PHP_JUNIT=junit.out.xml
export STACK_LIMIT_DEFAULTS_CHECK=1
Expand Down
3 changes: 3 additions & 0 deletions UPGRADING
Original file line number Diff line number Diff line change
Expand Up @@ -497,6 +497,9 @@ PHP 8.3 UPGRADE NOTES
- PCNTL:
. SIGINFO

- PDO_ODBC
. PDO_ODBC_TYPE

- PGSQL:
. PGSQL_TRACE_SUPPRESS_TIMESTAMPS
. PGSQL_TRACE_REGRESS_MODE
Expand Down
1 change: 0 additions & 1 deletion ext/odbc/tests/CONFLICTS

This file was deleted.

8 changes: 7 additions & 1 deletion ext/odbc/tests/bug44618.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,13 @@ Bug #44618 (Fetching may rely on uninitialized data)
--EXTENSIONS--
odbc
--SKIPIF--
<?php include 'skipif.inc'; ?>
<?php
include 'skipif.inc';

if (ODBC_TYPE === "unixODBC") {
die("skip Fails with unixODBC");
}
?>
--FILE--
<?php
include __DIR__ . "/config.inc";
Expand Down
32 changes: 15 additions & 17 deletions ext/odbc/tests/bug47803.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,13 @@ odbc

include __DIR__ . "/config.inc";

$create_table = "CREATE TABLE FOO(
$create_table = "CREATE TABLE bug47803(
[PAR_ID] [int] NOT NULL,
[PAR_INT] [int] NULL,
[PAR_CHR] [varchar](500) NULL
)";

$inserts = "INSERT INTO FOO
$inserts = "INSERT INTO bug47803
([PAR_ID]
,[PAR_INT]
,[PAR_CHR])
Expand All @@ -37,7 +37,6 @@ date_default_timezone_set('Europe/Warsaw');

$link = odbc_connect($dsn, $user, $pass);

odbc_exec($link, 'CREATE DATABASE odbcTEST');
odbc_exec($link, $create_table);
odbc_exec($link, $inserts);

Expand All @@ -53,7 +52,7 @@ $upd_params = array(
array('id'=>7, 'name'=>'test 7'),
array('id'=>6, 'name'=>'test 6'),
);
$sql = "UPDATE FOO
$sql = "UPDATE bug47803
SET [PAR_CHR] = ?
WHERE [PAR_ID] = ?";
$result = odbc_prepare($link, $sql);
Expand All @@ -69,7 +68,7 @@ foreach ($upd_params as &$k) {
}
odbc_free_result($result);

$sql = "SELECT * FROM FOO WHERE [PAR_ID] = ?";
$sql = "SELECT * FROM bug47803 WHERE [PAR_ID] = ?";
$result = odbc_prepare($link, $sql);
if (!$result) {
print ('[sql] prep: '.$sql);
Expand All @@ -89,6 +88,17 @@ out:
if ($result) odbc_free_result($result);
odbc_close($link);

?>
--CLEAN--
<?php
include 'config.inc';

$conn = odbc_connect($dsn, $user, $pass);

odbc_exec($conn, 'DROP TABLE bug47803');

odbc_close($conn);

?>
--EXPECT--
array(3) {
Expand Down Expand Up @@ -171,15 +181,3 @@ array(3) {
["PAR_CHR"]=>
string(6) "test 7"
}
--CLEAN--
<?php
include 'config.inc';

$conn = odbc_connect($dsn, $user, $pass);

odbc_exec($conn, 'DROP TABLE FOO');
odbc_exec($conn, 'DROP DATABASE odbcTEST');

odbc_close($conn);

?>
42 changes: 26 additions & 16 deletions ext/odbc/tests/bug60616.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,23 @@
odbc_exec(): Getting accurate unicode data from query
--EXTENSIONS--
odbc
mbstring
--SKIPIF--
<?php include 'skipif.inc'; ?>
<?php
if ("unixODBC" != ODBC_TYPE) {
die("skip ODBC_TYPE != unixODBC");
include 'skipif.inc';
if ("unixODBC" != ODBC_TYPE) {
die("skip ODBC_TYPE != unixODBC");
}

$conn = odbc_connect($dsn, $user, $pass);
$result = @odbc_exec($conn, "SELECT @@Version");
if ($result) {
$array = odbc_fetch_array($result);
$info = (string) reset($array);
if (str_contains($info, "Microsoft SQL Server")) {
echo "skip Doesn't work with MS SQL";
}
}
?>
--FILE--
<?php
Expand All @@ -23,14 +34,12 @@ ini_set("odbc.defaultlrl", 4); // Set artificially low

$conn = odbc_connect($dsn, $user, $pass);

odbc_exec($conn, 'CREATE DATABASE odbcTEST ENCODING=\'EUC_JP\'');
odbc_exec($conn, 'CREATE DATABASE bug60616Test ENCODING=\'EUC_JP\'');
odbc_exec($conn, 'USE bug60616Test');
odbc_exec($conn, 'CREATE TABLE bug60616 (ID INT, CHAR_COL CHAR(200), VARCHAR_COL VARCHAR(200), TEXT_COL TEXT)');
odbc_exec($conn, "INSERT INTO bug60616(ID, CHAR_COL, VARCHAR_COL, TEXT_COL) VALUES (1, '$euc_jp', '$euc_jp', '$euc_jp'), (2, '$ascii', '$ascii', '$ascii')");

odbc_exec($conn, 'CREATE TABLE FOO (ID INT, CHAR_COL CHAR(200), VARCHAR_COL VARCHAR(200), TEXT_COL TEXT)');

odbc_exec($conn, "INSERT INTO FOO(ID, CHAR_COL, VARCHAR_COL, TEXT_COL) VALUES (1, '$euc_jp', '$euc_jp', '$euc_jp')");
odbc_exec($conn, "INSERT INTO FOO(ID, CHAR_COL, VARCHAR_COL, TEXT_COL) VALUES (2, '$ascii', '$ascii', '$ascii')");

$res = odbc_exec($conn, 'SELECT * FROM FOO ORDER BY ID ASC');
$res = odbc_exec($conn, 'SELECT * FROM bug60616 ORDER BY ID ASC');

while(odbc_fetch_row($res)) {
$char_col = odbc_result($res, "CHAR_COL");
Expand Down Expand Up @@ -61,16 +70,17 @@ while(odbc_fetch_row($res)) {
}

?>
--EXPECT--
EUC-JP matched
ASCII matched
--CLEAN--
<?php
include 'config.inc';

$conn = odbc_connect($dsn, $user, $pass);

odbc_exec($conn, 'DROP TABLE FOO');
odbc_exec($conn, 'DROP DATABASE odbcTEST');

odbc_exec($conn, 'USE bug60616Test');
odbc_exec($conn, 'DROP TABLE bug60616');
odbc_exec($conn, 'DROP DATABASE bug60616Test');
?>
--EXPECT--
EUC-JP matched
ASCII matched

18 changes: 7 additions & 11 deletions ext/odbc/tests/bug68087.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,11 @@ $id_2_date = '2014-09-24';

$conn = odbc_connect($dsn, $user, $pass);

@odbc_exec($conn, 'CREATE DATABASE odbcTEST');
odbc_exec($conn, 'CREATE TABLE bug68087 (ID INT, VARCHAR_COL VARCHAR(100), DATE_COL DATE)');

odbc_exec($conn, 'CREATE TABLE FOO (ID INT, VARCHAR_COL VARCHAR(100), DATE_COL DATE)');
odbc_exec($conn, "INSERT INTO bug68087(ID, VARCHAR_COL, DATE_COL) VALUES (1, 'hello', '$id_1_date'), (2, 'helloagain', '$id_2_date')");

odbc_exec($conn, "INSERT INTO FOO(ID, VARCHAR_COL, DATE_COL) VALUES (1, 'hello', '$id_1_date')");
odbc_exec($conn, "INSERT INTO FOO(ID, VARCHAR_COL, DATE_COL) VALUES (2, 'helloagain', '$id_2_date')");

$res = odbc_exec($conn, 'SELECT * FROM FOO ORDER BY ID ASC');
$res = odbc_exec($conn, 'SELECT * FROM bug68087 ORDER BY ID ASC');

while(odbc_fetch_row($res)) {
$id = odbc_result($res, "ID");
Expand All @@ -44,16 +41,15 @@ while(odbc_fetch_row($res)) {
}

?>
--EXPECT--
Date_1 matched
Date_2 matched
--CLEAN--
<?php
include 'config.inc';

$conn = odbc_connect($dsn, $user, $pass);

odbc_exec($conn, 'DROP TABLE FOO');
odbc_exec($conn, 'DROP DATABASE odbcTEST');
odbc_exec($conn, 'DROP TABLE bug68087');

?>
--EXPECT--
Date_1 matched
Date_2 matched
19 changes: 8 additions & 11 deletions ext/odbc/tests/bug69354.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,11 @@ include 'config.inc';

$conn = odbc_connect($dsn, $user, $pass);

@odbc_exec($conn, 'CREATE DATABASE odbcTEST');
odbc_exec($conn, 'CREATE TABLE bug69354 (ID INT, VARCHAR_COL VARCHAR(100))');

odbc_exec($conn, 'CREATE TABLE FOO (ID INT, VARCHAR_COL VARCHAR(100))');
odbc_exec($conn, "INSERT INTO bug69354(ID, VARCHAR_COL) VALUES (1, '" . str_repeat("a", 100) . "')");

odbc_exec($conn, "INSERT INTO FOO(ID, VARCHAR_COL) VALUES (1, '" . str_repeat("a", 100) . "')");

$res = odbc_exec($conn,"select VARCHAR_COL from FOO");
$res = odbc_exec($conn,"SELECT VARCHAR_COL FROM bug69354");
if ($res) {
if (odbc_fetch_row($res)) {
$ret = odbc_result($res,'varchar_col');
Expand All @@ -27,17 +25,16 @@ if ($res) {
}
}
?>
--EXPECT--
100
a
a
--CLEAN--
<?php
include 'config.inc';

$conn = odbc_connect($dsn, $user, $pass);

odbc_exec($conn, 'DROP TABLE FOO');
odbc_exec($conn, 'DROP DATABASE odbcTEST');
odbc_exec($conn, 'DROP TABLE bug69354');

?>
--EXPECT--
100
a
a
21 changes: 10 additions & 11 deletions ext/odbc/tests/bug69975.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -9,26 +9,25 @@ odbc
include 'config.inc';

$conn = odbc_connect($dsn, $user, $pass);
@odbc_exec($conn, 'CREATE DATABASE odbcTEST');
odbc_exec($conn, 'CREATE TABLE FOO (ID INT, VARCHAR_COL NVARCHAR(MAX))');
odbc_exec($conn, "INSERT INTO FOO VALUES (1, 'foo')");
odbc_exec($conn, 'CREATE TABLE bug69975 (ID INT, VARCHAR_COL NVARCHAR(MAX))');
odbc_exec($conn, "INSERT INTO bug69975 VALUES (1, 'foo')");

$result = odbc_exec($conn, "SELECT VARCHAR_COL FROM FOO");
$result = odbc_exec($conn, "SELECT VARCHAR_COL FROM bug69975");
var_dump(odbc_fetch_array($result));

echo "ready";
?>
--CLEAN--
<?php
include 'config.inc';

$conn = odbc_connect($dsn, $user, $pass);
odbc_exec($conn, 'DROP TABLE bug69975');
?>
--EXPECT--
array(1) {
["VARCHAR_COL"]=>
string(3) "foo"
}
ready
--CLEAN--
<?php
include 'config.inc';

$conn = odbc_connect($dsn, $user, $pass);
odbc_exec($conn, 'DROP TABLE FOO');
odbc_exec($conn, 'DROP DATABASE odbcTEST');
?>
21 changes: 9 additions & 12 deletions ext/odbc/tests/bug71171.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -11,33 +11,30 @@ include 'config.inc';

$conn = odbc_connect($dsn, $user, $pass);

@odbc_exec($conn, 'CREATE DATABASE odbcTEST');
odbc_exec($conn, 'CREATE TABLE bug71171 (ID INT, VARCHAR_COL NVARCHAR(40))');

odbc_exec($conn, 'CREATE TABLE FOO (ID INT, VARCHAR_COL NVARCHAR(40))');
odbc_exec($conn, "INSERT INTO bug71171(ID, VARCHAR_COL) VALUES (1, '" . chr(0x81) . "')");

odbc_exec($conn, "INSERT INTO FOO(ID, VARCHAR_COL) VALUES (1, '" . chr(0x81) . "')");

$res = odbc_exec($conn,"SELECT ID FROM FOO WHERE VARCHAR_COL = '" . chr(0x81) . "'");
$res = odbc_exec($conn,"SELECT ID FROM bug71171 WHERE VARCHAR_COL = '" . chr(0x81) . "'");
if ($res) {
while($record = odbc_fetch_array($res)) var_dump($record);
}

odbc_close($conn);
?>
--EXPECT--
array(1) {
["ID"]=>
string(1) "1"
}
--CLEAN--
<?php
include 'config.inc';

$conn = odbc_connect($dsn, $user, $pass);

odbc_exec($conn, 'DROP TABLE FOO');
odbc_exec($conn, 'DROP DATABASE odbcTEST');
odbc_exec($conn, 'DROP TABLE bug71171');

odbc_close($conn);

?>
--EXPECT--
array(1) {
["ID"]=>
string(1) "1"
}
2 changes: 2 additions & 0 deletions ext/odbc/tests/bug73448.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ Bug #73448 odbc_errormsg returns trash, always 513 bytes
odbc
--SKIPIF--
<?php include 'skipif.inc'; ?>
--CONFLICTS--
odbc
--FILE--
<?php

Expand Down
Loading