|
29 | 29 | 'name' => 'test', |
30 | 30 | ])); |
31 | 31 | } catch (\Exception $e) { |
32 | | - throw new \RuntimeException('Failed to connect to Litebase server for integration tests: '.$e->getMessage()); |
| 32 | + throw new \RuntimeException('Failed to connect to Litebase server for integration tests: ' . $e->getMessage()); |
33 | 33 | } |
34 | 34 | }); |
35 | 35 |
|
|
140 | 140 | expect($user['name'])->toBe('Alice'); |
141 | 141 | expect($user['email'])->toBe('alice@example.com'); |
142 | 142 | }); |
| 143 | + |
| 144 | + test('can handle all column data types', function () { |
| 145 | + $client = new LitebaseClient( |
| 146 | + Configuration::create([ |
| 147 | + 'host' => 'localhost', |
| 148 | + 'port' => '8888', |
| 149 | + 'username' => 'root', |
| 150 | + 'password' => 'password', |
| 151 | + 'database' => 'test/main', |
| 152 | + ]) |
| 153 | + ); |
| 154 | + |
| 155 | + $pdo = new LitebasePDO($client); |
| 156 | + |
| 157 | + // Create table with all supported column types |
| 158 | + $pdo->exec('CREATE TABLE IF NOT EXISTS type_test ( |
| 159 | + id INTEGER PRIMARY KEY AUTOINCREMENT, |
| 160 | + int_col INTEGER, |
| 161 | + float_col REAL, |
| 162 | + text_col TEXT, |
| 163 | + blob_col BLOB, |
| 164 | + null_col TEXT |
| 165 | + )'); |
| 166 | + |
| 167 | + // Insert data with different types using execute with params |
| 168 | + $statement = $pdo->prepare('INSERT INTO type_test (int_col, float_col, text_col, blob_col, null_col) VALUES (?, ?, ?, ?, ?)'); |
| 169 | + |
| 170 | + $blobData = hex2bin('48656c6c6f20576f726c64'); // "Hello World" as binary |
| 171 | + |
| 172 | + $statement->execute([ |
| 173 | + 42, // INTEGER |
| 174 | + 3.14159, // FLOAT |
| 175 | + 'Hello World', // TEXT |
| 176 | + $blobData, // BLOB |
| 177 | + null, // NULL |
| 178 | + ]); |
| 179 | + |
| 180 | + expect($statement->rowCount())->toBe(1); |
| 181 | + |
| 182 | + // Now test bindValue for a second insert |
| 183 | + $statement2 = $pdo->prepare('INSERT INTO type_test (int_col, float_col, text_col, blob_col, null_col) VALUES (?, ?, ?, ?, ?)'); |
| 184 | + |
| 185 | + $blobData2 = hex2bin('776f726c6420686921'); // "world hi!" as binary |
| 186 | + |
| 187 | + $statement2->bindValue(1, 99, PDO::PARAM_INT); |
| 188 | + $statement2->bindValue(2, 2.71828, PDO::PARAM_STR); |
| 189 | + $statement2->bindValue(3, 'Test String', PDO::PARAM_STR); |
| 190 | + $statement2->bindValue(4, $blobData2, PDO::PARAM_LOB); |
| 191 | + $statement2->bindValue(5, null, PDO::PARAM_NULL); |
| 192 | + |
| 193 | + $statement2->execute(); |
| 194 | + |
| 195 | + expect($statement2->rowCount())->toBe(1); |
| 196 | + |
| 197 | + // Retrieve and verify the first row |
| 198 | + $statement = $pdo->prepare('SELECT * FROM type_test WHERE int_col = ?'); |
| 199 | + $statement->execute([42]); |
| 200 | + |
| 201 | + /** @var array<string, mixed> $row */ |
| 202 | + $row = $statement->fetch(PDO::FETCH_ASSOC); |
| 203 | + /** @var float $floatValue */ |
| 204 | + $floatValue = $row['float_col']; |
| 205 | + /** @var string $blobValue */ |
| 206 | + $blobValue = $row['blob_col']; |
| 207 | + |
| 208 | + expect($row)->not->toBeNull(); |
| 209 | + expect($row['int_col'])->toBe(42); |
| 210 | + expect($row['float_col'])->toBeFloat(); |
| 211 | + expect(abs($floatValue - 3.14159))->toBeLessThan(0.00001); |
| 212 | + expect($row['text_col'])->toBe('Hello World'); |
| 213 | + expect($row['blob_col'])->toBe($blobData); |
| 214 | + expect(bin2hex($blobValue))->toBe('48656c6c6f20576f726c64'); |
| 215 | + expect($row['null_col'])->toBeNull(); |
| 216 | + |
| 217 | + // Retrieve and verify the second row |
| 218 | + $statement = $pdo->prepare('SELECT * FROM type_test WHERE int_col = ?'); |
| 219 | + $statement->execute([99]); |
| 220 | + |
| 221 | + /** @var array<string, mixed> $row2 */ |
| 222 | + $row2 = $statement->fetch(PDO::FETCH_ASSOC); |
| 223 | + |
| 224 | + expect($row2)->not->toBeNull(); |
| 225 | + expect($row2['int_col'])->toBe(99); |
| 226 | + expect($row2['float_col'])->toBeFloat(); |
| 227 | + expect($row2['text_col'])->toBe('Test String'); |
| 228 | + expect($row2['blob_col'])->toBe($blobData2); |
| 229 | + expect($row2['null_col'])->toBeNull(); |
| 230 | + }); |
143 | 231 | }); |
0 commit comments