diff options
author | drh <drh@noemail.net> | 2017-04-16 22:08:31 +0000 |
---|---|---|
committer | drh <drh@noemail.net> | 2017-04-16 22:08:31 +0000 |
commit | b65b3e429afce35f9bb99788391ca8bfbab339f6 (patch) | |
tree | 86f4a6f9860e5810b3c1e9066262b8ada5cdcaae /ext/misc/anycollseq.c | |
parent | 147fd882682afec0b135b3daf92a3b85d9f9e8f3 (diff) | |
download | sqlite-b65b3e429afce35f9bb99788391ca8bfbab339f6.tar.gz sqlite-b65b3e429afce35f9bb99788391ca8bfbab339f6.zip |
Add the anycollseq.c loadable extension in etc/misc
FossilOrigin-Name: d7b9813cb17615c3d00afd6994a4309d6d48c8e924b6cd813c543e1fa65c7719
Diffstat (limited to 'ext/misc/anycollseq.c')
-rw-r--r-- | ext/misc/anycollseq.c | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/ext/misc/anycollseq.c b/ext/misc/anycollseq.c new file mode 100644 index 000000000..27b7049d5 --- /dev/null +++ b/ext/misc/anycollseq.c @@ -0,0 +1,58 @@ +/* +** 2017-04-16 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** +** This file implements a run-time loadable extension to SQLite that +** registers a sqlite3_collation_needed() callback to register a fake +** collating function for any unknown collating sequence. The fake +** collating function works like BINARY. +** +** This extension can be used to load schemas that contain one or more +** unknown collating sequences. +*/ +#include "sqlite3ext.h" +SQLITE_EXTENSION_INIT1 +#include <string.h> + +static int anyCollFunc( + void *NotUsed, + int nKey1, const void *pKey1, + int nKey2, const void *pKey2 +){ + int rc, n; + n = nKey1<nKey2 ? nKey1 : nKey2; + rc = memcmp(pKey1, pKey2, n); + if( rc==0 ) rc = nKey1 - nKey2; + return rc; +} + +static void anyCollNeeded( + void *NotUsed, + sqlite3 *db, + int eTextRep, + const char *zCollName +){ + sqlite3_create_collation(db, zCollName, eTextRep, 0, anyCollFunc); +} + +#ifdef _WIN32 +__declspec(dllexport) +#endif +int sqlite3_anycollseq_init( + sqlite3 *db, + char **pzErrMsg, + const sqlite3_api_routines *pApi +){ + int rc = SQLITE_OK; + SQLITE_EXTENSION_INIT2(pApi); + rc = sqlite3_collation_needed(db, 0, anyCollNeeded); + return rc; +} |