note 113143 deleted from class.sqlite3 by cmb
| From: | cmb@php.net | Date: | Fri, 02 Sep 2016 14:38:19 +0000 |
| Subject: | note 113143 deleted from class.sqlite3 by cmb | ||
| References: | 1 | Groups: | php.notes |
| Request: | Send a blank email to php-notes+get-206479@lists.php.net to get a copy of this message | ||
Note Submitter: Anonymous
----
There is an undocumented method "createCollation" in this class, as reported on https://bugs.php.net/bug.php?id=65216
The syntax of the method is similar to usort for example:
createCollation(collation_name, callback)
The callback function must return an integer less than, equal to, or greater than zero if the first
argument is considered to be respectively less than, equal to, or greater than the second.
Here is one example of use to collate unicode text as ASCII, so that for example in french Ãmilie
will be ordered just after Emile and not after Zebra like it's the case with the default BINARY
collation. This requires the "intl" module to be installed, see PHP doc for details (or
apt-get install php5-intl in deb based distros).
<?php
$db = new SQLite3(':memory:');
$db->createCollation('translit_ascii', function ($a, $b) {
$a = transliterator_transliterate('Any-Latin; Latin-ASCII; Lower()', $a);
$b = transliterator_transliterate('Any-Latin; Latin-ASCII; Lower()', $b);
return strcmp($a, $b);
});
$db->exec('
CREATE TABLE people (name COLLATE translit_ascii);
INSERT INTO people VALUES ("Ãmilie");
INSERT INTO people VALUES ("Zebra");
INSERT INTO people VALUES ("Emile");
INSERT INTO people VALUES ("Arthur");
');
$stmt = $db->prepare('SELECT name FROM people ORDER BY name;');
$result = $stmt->execute();
while ($row = $result->fetchArray())
{
echo $row['name'] . PHP_EOL;
}
// Displays:
// Arthur
// Emile
// Ãmilie
// Zebra
?>