Skip to content

Commit dbad243

Browse files
committed
Test with all 3 PDO errmodes
1 parent 2742155 commit dbad243

File tree

2 files changed

+58
-20
lines changed

2 files changed

+58
-20
lines changed

.github/workflows/ci.yml

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -114,9 +114,18 @@ jobs:
114114
- "8.2"
115115
- "8.3"
116116
- "8.4"
117-
emulate-prepares:
118-
- "ON"
117+
pdo-emulate-prepares:
119118
- "OFF"
119+
- "ON"
120+
pdo-errmode:
121+
- "EXCEPTION"
122+
include:
123+
- php-version: "8.2"
124+
pdo-emulate-prepares: "OFF"
125+
pdo-errmode: "SILENT"
126+
- php-version: "8.2"
127+
pdo-emulate-prepares: "OFF"
128+
pdo-errmode: "WARNING"
120129

121130
services:
122131
mysql:
@@ -149,7 +158,8 @@ jobs:
149158
MYSQL_HOST: 127.0.0.1
150159
MYSQL_USER: root
151160
MYSQL_PASSWORD: password
152-
EMULATE_PREPARES: ${{ matrix.emulate-prepares }}
161+
PDO_EMULATE_PREPARES: ${{ matrix.pdo-emulate-prepares }}
162+
PDO_ERRMODE: ${{ matrix.pdo-errmode }}
153163
if: ${{ matrix.php-version != env.COVERAGE_PHP_VERSION }}
154164

155165
- name: Run PHPUnit with coverage
@@ -161,7 +171,7 @@ jobs:
161171
MYSQL_HOST: 127.0.0.1
162172
MYSQL_USER: root
163173
MYSQL_PASSWORD: password
164-
EMULATE_PREPARES: ${{ matrix.emulate-prepares }}
174+
PDO_EMULATE_PREPARES: ${{ matrix.pdo-emulate-prepares }}
165175
if: ${{ matrix.php-version == env.COVERAGE_PHP_VERSION }}
166176

167177
- name: Upload coverage report to Coveralls
@@ -179,7 +189,7 @@ jobs:
179189
matrix:
180190
php-version:
181191
- "8.2"
182-
emulate-prepares:
192+
pdo-emulate-prepares:
183193
- "ON"
184194
- "OFF"
185195

@@ -216,7 +226,7 @@ jobs:
216226
MARIADB_HOST: 127.0.0.1
217227
MARIADB_USER: root
218228
MARIADB_PASSWORD: password
219-
EMULATE_PREPARES: ${{ matrix.emulate-prepares }}
229+
PDO_EMULATE_PREPARES: ${{ matrix.pdo-emulate-prepares }}
220230

221231
- name: Upload coverage report to Coveralls
222232
run: vendor/bin/php-coveralls --coverage_clover=build/logs/clover.xml -v
@@ -231,7 +241,7 @@ jobs:
231241
matrix:
232242
php-version:
233243
- "8.2"
234-
emulate-prepares:
244+
pdo-emulate-prepares:
235245
- "ON"
236246
- "OFF"
237247

@@ -267,7 +277,7 @@ jobs:
267277
POSTGRES_HOST: 127.0.0.1
268278
POSTGRES_USER: postgres
269279
POSTGRES_PASSWORD: postgres
270-
EMULATE_PREPARES: ${{ matrix.emulate-prepares }}
280+
PDO_EMULATE_PREPARES: ${{ matrix.pdo-emulate-prepares }}
271281

272282
- name: Upload coverage report to Coveralls
273283
run: vendor/bin/php-coveralls --coverage_clover=build/logs/clover.xml -v

phpunit-bootstrap.php

Lines changed: 40 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,34 @@ function getRequiredEnv(string $name): string
3737
return $value;
3838
}
3939

40+
function getPdoEmulatePreparesEnv() : bool
41+
{
42+
$emulatePrepares = getOptionalEnv('PDO_EMULATE_PREPARES') ?? 'OFF';
43+
44+
echo 'with emulate prepares: ', $emulatePrepares, PHP_EOL;
45+
46+
return match ($emulatePrepares) {
47+
'ON' => true,
48+
'OFF' => false,
49+
};
50+
}
51+
52+
/**
53+
* @return PDO::ERRMODE_*
54+
*/
55+
function getPdoErrmodeEnv() : int
56+
{
57+
$errmode = getOptionalEnv('PDO_ERRMODE') ?? 'EXCEPTION';
58+
59+
echo 'with errmode: ', $errmode, PHP_EOL;
60+
61+
return match ($errmode) {
62+
'SILENT' => PDO::ERRMODE_SILENT,
63+
'WARNING' => PDO::ERRMODE_WARNING,
64+
'EXCEPTION' => PDO::ERRMODE_EXCEPTION,
65+
};
66+
}
67+
4068
(function() {
4169
require 'vendor/autoload.php';
4270

@@ -68,10 +96,10 @@ function getRequiredEnv(string $name): string
6896
break;
6997

7098
case 'mysql_pdo':
71-
$emulatePrepares = getOptionalEnv('EMULATE_PREPARES') === 'ON';
72-
7399
echo 'Using MysqlEngine with PdoMysqlDriver', PHP_EOL;
74-
echo 'with emulated prepares ', ($emulatePrepares ? 'ON' : 'OFF'), PHP_EOL;
100+
101+
$emulatePrepares = getPdoEmulatePreparesEnv();
102+
$errmode = getPdoErrmodeEnv();
75103

76104
$host = getRequiredEnv('MYSQL_HOST');
77105
$port = getOptionalEnvOrDefault('MYSQL_PORT', '3306');
@@ -80,7 +108,7 @@ function getRequiredEnv(string $name): string
80108

81109
$dsn = sprintf('mysql:host=%s;port=%d', $host, $port);
82110
$pdo = new PDO($dsn, $username, $password, [
83-
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
111+
PDO::ATTR_ERRMODE => $errmode,
84112
PDO::ATTR_EMULATE_PREPARES => $emulatePrepares,
85113
]);
86114

@@ -93,10 +121,10 @@ function getRequiredEnv(string $name): string
93121
break;
94122

95123
case 'mariadb_pdo':
96-
$emulatePrepares = getOptionalEnv('EMULATE_PREPARES') === 'ON';
97-
98124
echo 'Using MariadbEngine with PdoMysqlDriver', PHP_EOL;
99-
echo 'with emulated prepares ', ($emulatePrepares ? 'ON' : 'OFF'), PHP_EOL;
125+
126+
$emulatePrepares = getPdoEmulatePreparesEnv();
127+
$errmode = getPdoErrmodeEnv();
100128

101129
$host = getRequiredEnv('MARIADB_HOST');
102130
$port = getOptionalEnvOrDefault('MARIADB_PORT', '3306');
@@ -105,7 +133,7 @@ function getRequiredEnv(string $name): string
105133

106134
$dsn = sprintf('mysql:host=%s;port=%d', $host, $port);
107135
$pdo = new PDO($dsn, $username, $password, [
108-
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
136+
PDO::ATTR_ERRMODE => $errmode,
109137
PDO::ATTR_EMULATE_PREPARES => $emulatePrepares,
110138
]);
111139

@@ -118,10 +146,10 @@ function getRequiredEnv(string $name): string
118146
break;
119147

120148
case 'postgis_pdo':
121-
$emulatePrepares = getOptionalEnv('EMULATE_PREPARES') === 'ON';
122-
123149
echo 'Using PostgisEngine with PdoPgsqlDriver', PHP_EOL;
124-
echo 'with emulated prepares ', ($emulatePrepares ? 'ON' : 'OFF'), PHP_EOL;
150+
151+
$emulatePrepares = getPdoEmulatePreparesEnv();
152+
$errmode = getPdoErrmodeEnv();
125153

126154
$host = getRequiredEnv('POSTGRES_HOST');
127155
$port = getOptionalEnvOrDefault('POSTGRES_PORT', '5432');
@@ -133,7 +161,7 @@ function getRequiredEnv(string $name): string
133161
$username,
134162
$password,
135163
[
136-
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
164+
PDO::ATTR_ERRMODE => $errmode,
137165
PDO::ATTR_EMULATE_PREPARES => $emulatePrepares,
138166
],
139167
);

0 commit comments

Comments
 (0)