|  | 
| 10 | 10 |  */ | 
| 11 | 11 | 
 | 
| 12 | 12 | require_once __DIR__ . '/../../vendor/autoload.php'; | 
|  | 13 | +require_once __DIR__ . '/../helpers.php'; | 
| 13 | 14 | 
 | 
| 14 | 15 | use tommyknocker\pdodb\PdoDb; | 
| 15 | 16 | use tommyknocker\pdodb\exceptions\AuthenticationException; | 
|  | 
| 21 | 22 | use tommyknocker\pdodb\exceptions\TimeoutException; | 
| 22 | 23 | use tommyknocker\pdodb\exceptions\TransactionException; | 
| 23 | 24 | 
 | 
| 24 |  | -echo "=== Exception Handling Examples ===\n\n"; | 
|  | 25 | +$driver = getenv('PDODB_DRIVER') ?: 'sqlite'; | 
|  | 26 | +echo "=== Exception Handling Examples (on {$driver}) ===\n\n"; | 
| 25 | 27 | 
 | 
| 26 | 28 | // Example 1: Basic exception handling with specific types | 
| 27 | 29 | echo "1. Basic Exception Handling\n"; | 
| 28 | 30 | echo "----------------------------\n"; | 
| 29 | 31 | 
 | 
| 30 | 32 | 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 | +    } | 
| 36 | 46 | 
 | 
| 37 | 47 |     // Insert first user | 
| 38 | 48 |     $db->find()->from('users')->insert(['email' => 'test@example.com', 'name' => 'Test User']); | 
|  | 
| 66 | 76 | echo "--------------------------------\n"; | 
| 67 | 77 | 
 | 
| 68 | 78 | 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 | +    } | 
| 77 | 104 | 
 | 
| 78 | 105 |     // Insert first user | 
| 79 | 106 |     $db->find()->table('users')->insert([ | 
|  | 
| 114 | 141 | echo "-----------------------------\n"; | 
| 115 | 142 | 
 | 
| 116 | 143 | 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 | +    } | 
| 124 | 166 | 
 | 
| 125 | 167 |     // Insert test account | 
| 126 | 168 |     $db->find()->table('accounts')->insert(['balance' => 1000]); | 
| @@ -202,7 +244,7 @@ function handleDatabaseError(DatabaseException $e): void | 
| 202 | 244 | } | 
| 203 | 245 | 
 | 
| 204 | 246 | try { | 
| 205 |  | -    $db = new PdoDb('sqlite', ['path' => ':memory:']); | 
|  | 247 | +    $db = createExampleDb(); | 
| 206 | 248 | 
 | 
| 207 | 249 |     // This will fail with a query error | 
| 208 | 250 |     $db->rawQuery('SELECT * FROM nonexistent_table'); | 
| @@ -276,7 +318,7 @@ function executeWithRetry(callable $operation, int $maxRetries = 3): mixed | 
| 276 | 318 | 
 | 
| 277 | 319 | try { | 
| 278 | 320 |     $result = executeWithRetry(function() { | 
| 279 |  | -        $db = new PdoDb('sqlite', ['path' => ':memory:']); | 
|  | 321 | +        $db = createExampleDb(); | 
| 280 | 322 |         return $db->rawQuery('SELECT 1 as test'); | 
| 281 | 323 |     }); | 
| 282 | 324 | 
 | 
| @@ -357,7 +399,7 @@ public function getErrorStats(): array | 
| 357 | 399 | 
 | 
| 358 | 400 | // Simulate various errors | 
| 359 | 401 | try { | 
| 360 |  | -    $db = new PdoDb('sqlite', ['path' => ':memory:']); | 
|  | 402 | +    $db = createExampleDb(); | 
| 361 | 403 |     $db->rawQuery('SELECT * FROM nonexistent_table'); | 
| 362 | 404 | } catch (QueryException $e) { | 
| 363 | 405 |     $monitor->handleError($e); | 
|  | 
0 commit comments