SQLite3 API missing createCollation()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi

The C API for SQLite3 has an sqlite3_create_collation() feature that's
missing from PHP's SQLite3 class API.

I'm working on a patch that adds the SQLite3::createCollation(string
collation_name, mixed callback) method.  This allows registering a PHP
function as a comparator for the database to use while collating data.  The
callback passed to createCollation() should act like strcmp(), i.e. it
should accept two strings and return an integer indicating their relative
sort order.

e.g.

<?php

$filenames = array(
  'ab1.png',
  'ab2.png',
  'ab10.png',
  'ab11.png',
  'ac.png',
  'aa.png',
  'ab3.png');

$db = new SQLite3(':memory:');

$db->createCollation('NATURAL_SORT', 'strnatcmp');

$db->exec("CREATE TABLE filenames (fname varchar(32));");

$stmt = $db->prepare("INSERT INTO filenames VALUES (?);");
foreach($filenames as $fname){
  $stmt->bindParam(1, $fname);
  $stmt->execute();
}
$result = $db->query("SELECT fname FROM filenames ORDER BY fname COLLATE
NATURAL_SORT;");
while($row = $result->fetchArray()){
  echo $row['fname'], "\n";
}

$db->close();

?>

Output:

aa.png
ab1.png
ab2.png
ab3.png
ab10.png
ab11.png
ac.png



I've built 5.3.9 with my patch on Ubuntu on x86_64, and it works as
expected. I've never submitted a patch for PHP before, so I could use some
advice/hand-holding on the process.

Thanks,
Brad

[Index of Archives]     [PHP Home]     [PHP Users]     [Postgresql Discussion]     [Kernel Newbies]     [Postgresql]     [Yosemite News]

  Powered by Linux