1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
|
--TEST--
Test Pdo\Sqlite::createCollation() trampoline callback
--EXTENSIONS--
pdo_sqlite
--FILE--
<?php
$db = new Pdo\Sqlite('sqlite::memory:');
$db->query('CREATE TABLE test_pdo_sqlite_createcollation_trampoline (s VARCHAR(4))');
$stmt = $db->query('INSERT INTO test_pdo_sqlite_createcollation_trampoline VALUES ("a1"), ("a10"), ("a2")');
class TrampolineTest {
public function __call(string $name, array $arguments) {
echo 'Trampoline for ', $name, PHP_EOL;
return strnatcmp(...$arguments);
}
}
var_dump($db->createCollation('NAT', [new TrampolineTest(), 'NAT']));
echo "default\n";
foreach ($db->query('SELECT s FROM test_pdo_sqlite_createcollation_trampoline ORDER BY s') as $row) {
var_dump($row);
}
echo "natural\n";
foreach ($db->query('SELECT s FROM test_pdo_sqlite_createcollation_trampoline ORDER BY s COLLATE NAT') as $row) {
var_dump($row);
}
?>
--EXPECT--
bool(true)
default
array(2) {
["s"]=>
string(2) "a1"
[0]=>
string(2) "a1"
}
array(2) {
["s"]=>
string(3) "a10"
[0]=>
string(3) "a10"
}
array(2) {
["s"]=>
string(2) "a2"
[0]=>
string(2) "a2"
}
natural
Trampoline for NAT
Trampoline for NAT
array(2) {
["s"]=>
string(2) "a1"
[0]=>
string(2) "a1"
}
array(2) {
["s"]=>
string(2) "a2"
[0]=>
string(2) "a2"
}
array(2) {
["s"]=>
string(3) "a10"
[0]=>
string(3) "a10"
}
|