modernc.org/cc@v1.0.1/v2/testdata/_sqlite/ext/misc/anycollseq.c (about)

     1  /*
     2  ** 2017-04-16
     3  **
     4  ** The author disclaims copyright to this source code.  In place of
     5  ** a legal notice, here is a blessing:
     6  **
     7  **    May you do good and not evil.
     8  **    May you find forgiveness for yourself and forgive others.
     9  **    May you share freely, never taking more than you give.
    10  **
    11  *************************************************************************
    12  **
    13  ** This file implements a run-time loadable extension to SQLite that
    14  ** registers a sqlite3_collation_needed() callback to register a fake
    15  ** collating function for any unknown collating sequence.  The fake
    16  ** collating function works like BINARY.
    17  **
    18  ** This extension can be used to load schemas that contain one or more
    19  ** unknown collating sequences.
    20  */
    21  #include "sqlite3ext.h"
    22  SQLITE_EXTENSION_INIT1
    23  #include <string.h>
    24  
    25  static int anyCollFunc(
    26    void *NotUsed,
    27    int nKey1, const void *pKey1,
    28    int nKey2, const void *pKey2
    29  ){
    30    int rc, n;
    31    n = nKey1<nKey2 ? nKey1 : nKey2;
    32    rc = memcmp(pKey1, pKey2, n);
    33    if( rc==0 ) rc = nKey1 - nKey2;
    34    return rc;
    35  }
    36  
    37  static void anyCollNeeded(
    38    void *NotUsed,
    39    sqlite3 *db,
    40    int eTextRep,
    41    const char *zCollName
    42  ){
    43    sqlite3_create_collation(db, zCollName, eTextRep, 0, anyCollFunc); 
    44  }
    45  
    46  #ifdef _WIN32
    47  __declspec(dllexport)
    48  #endif
    49  int sqlite3_anycollseq_init(
    50    sqlite3 *db, 
    51    char **pzErrMsg, 
    52    const sqlite3_api_routines *pApi
    53  ){
    54    int rc = SQLITE_OK;
    55    SQLITE_EXTENSION_INIT2(pApi);
    56    rc = sqlite3_collation_needed(db, 0, anyCollNeeded);
    57    return rc;
    58  }