Skip to content

Commit 6b51dca

Browse files
committed
fix: make exception handling examples work across all database dialects
- Add support for MySQL, PostgreSQL, and SQLite in exception examples - Use createExampleDb() helper for database initialization - Add dialect-specific CREATE TABLE statements - Add DROP TABLE IF EXISTS for idempotency - All examples now pass on all three dialects
1 parent 39dd79d commit 6b51dca

File tree

1 file changed

+66
-24
lines changed

1 file changed

+66
-24
lines changed

examples/09-exception-handling/01-exception-examples.php

Lines changed: 66 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
*/
1111

1212
require_once __DIR__ . '/../../vendor/autoload.php';
13+
require_once __DIR__ . '/../helpers.php';
1314

1415
use tommyknocker\pdodb\PdoDb;
1516
use tommyknocker\pdodb\exceptions\AuthenticationException;
@@ -21,18 +22,27 @@
2122
use tommyknocker\pdodb\exceptions\TimeoutException;
2223
use tommyknocker\pdodb\exceptions\TransactionException;
2324

24-
echo "=== Exception Handling Examples ===\n\n";
25+
$driver = getenv('PDODB_DRIVER') ?: 'sqlite';
26+
echo "=== Exception Handling Examples (on {$driver}) ===\n\n";
2527

2628
// Example 1: Basic exception handling with specific types
2729
echo "1. Basic Exception Handling\n";
2830
echo "----------------------------\n";
2931

3032
try {
31-
// Use SQLite for demonstration
32-
$db = new PdoDb('sqlite', ['path' => ':memory:']);
33-
34-
// Create a table with unique constraint
35-
$db->connection->query("CREATE TABLE users (id INTEGER PRIMARY KEY, email TEXT UNIQUE, name TEXT)");
33+
$db = createExampleDb();
34+
35+
// Drop table if exists (for idempotency)
36+
$db->rawQuery("DROP TABLE IF EXISTS users");
37+
38+
// Create a table with unique constraint (dialect-specific)
39+
if ($driver === 'mysql') {
40+
$db->rawQuery("CREATE TABLE users (id INT PRIMARY KEY AUTO_INCREMENT, email VARCHAR(255) UNIQUE, name VARCHAR(255))");
41+
} elseif ($driver === 'pgsql') {
42+
$db->rawQuery("CREATE TABLE users (id SERIAL PRIMARY KEY, email VARCHAR(255) UNIQUE, name VARCHAR(255))");
43+
} else {
44+
$db->rawQuery("CREATE TABLE users (id INTEGER PRIMARY KEY AUTOINCREMENT, email TEXT UNIQUE, name TEXT)");
45+
}
3646

3747
// Insert first user
3848
$db->find()->from('users')->insert(['email' => 'test@example.com', 'name' => 'Test User']);
@@ -66,14 +76,31 @@
6676
echo "--------------------------------\n";
6777

6878
try {
69-
$db = new PdoDb('sqlite', ['path' => ':memory:']);
70-
71-
// Create table with unique constraint
72-
$db->rawQuery('CREATE TABLE users (
73-
id INTEGER PRIMARY KEY,
74-
email TEXT UNIQUE NOT NULL,
75-
name TEXT NOT NULL
76-
)');
79+
$db = createExampleDb();
80+
81+
// Drop table if exists (for idempotency)
82+
$db->rawQuery('DROP TABLE IF EXISTS users');
83+
84+
// Create table with unique constraint (dialect-specific)
85+
if ($driver === 'mysql') {
86+
$db->rawQuery('CREATE TABLE users (
87+
id INT PRIMARY KEY AUTO_INCREMENT,
88+
email VARCHAR(255) UNIQUE NOT NULL,
89+
name VARCHAR(255) NOT NULL
90+
)');
91+
} elseif ($driver === 'pgsql') {
92+
$db->rawQuery('CREATE TABLE users (
93+
id SERIAL PRIMARY KEY,
94+
email VARCHAR(255) UNIQUE NOT NULL,
95+
name VARCHAR(255) NOT NULL
96+
)');
97+
} else {
98+
$db->rawQuery('CREATE TABLE users (
99+
id INTEGER PRIMARY KEY AUTOINCREMENT,
100+
email TEXT UNIQUE NOT NULL,
101+
name TEXT NOT NULL
102+
)');
103+
}
77104

78105
// Insert first user
79106
$db->find()->table('users')->insert([
@@ -114,13 +141,28 @@
114141
echo "-----------------------------\n";
115142

116143
try {
117-
$db = new PdoDb('sqlite', ['path' => ':memory:']);
118-
119-
// Create table
120-
$db->rawQuery('CREATE TABLE accounts (
121-
id INTEGER PRIMARY KEY,
122-
balance DECIMAL(10,2) NOT NULL DEFAULT 0
123-
)');
144+
$db = createExampleDb();
145+
146+
// Drop table if exists (for idempotency)
147+
$db->rawQuery('DROP TABLE IF EXISTS accounts');
148+
149+
// Create table (dialect-specific)
150+
if ($driver === 'mysql') {
151+
$db->rawQuery('CREATE TABLE accounts (
152+
id INT PRIMARY KEY AUTO_INCREMENT,
153+
balance DECIMAL(10,2) NOT NULL DEFAULT 0
154+
)');
155+
} elseif ($driver === 'pgsql') {
156+
$db->rawQuery('CREATE TABLE accounts (
157+
id SERIAL PRIMARY KEY,
158+
balance DECIMAL(10,2) NOT NULL DEFAULT 0
159+
)');
160+
} else {
161+
$db->rawQuery('CREATE TABLE accounts (
162+
id INTEGER PRIMARY KEY AUTOINCREMENT,
163+
balance DECIMAL(10,2) NOT NULL DEFAULT 0
164+
)');
165+
}
124166

125167
// Insert test account
126168
$db->find()->table('accounts')->insert(['balance' => 1000]);
@@ -202,7 +244,7 @@ function handleDatabaseError(DatabaseException $e): void
202244
}
203245

204246
try {
205-
$db = new PdoDb('sqlite', ['path' => ':memory:']);
247+
$db = createExampleDb();
206248

207249
// This will fail with a query error
208250
$db->rawQuery('SELECT * FROM nonexistent_table');
@@ -276,7 +318,7 @@ function executeWithRetry(callable $operation, int $maxRetries = 3): mixed
276318

277319
try {
278320
$result = executeWithRetry(function() {
279-
$db = new PdoDb('sqlite', ['path' => ':memory:']);
321+
$db = createExampleDb();
280322
return $db->rawQuery('SELECT 1 as test');
281323
});
282324

@@ -357,7 +399,7 @@ public function getErrorStats(): array
357399

358400
// Simulate various errors
359401
try {
360-
$db = new PdoDb('sqlite', ['path' => ':memory:']);
402+
$db = createExampleDb();
361403
$db->rawQuery('SELECT * FROM nonexistent_table');
362404
} catch (QueryException $e) {
363405
$monitor->handleError($e);

0 commit comments

Comments
 (0)