Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Add the rot13.c loadable extension. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
8f9bd8e7a88eb11fb17d29954fa4b8c2 |
User & Date: | drh 2013-05-15 13:05:03.677 |
Context
2013-05-15
| ||
15:16 | When loading a database schema that contains an index definition that includes a COLLATE clause for which the collation sequence is unavailable, do not assume that that index uses BINARY instead. Fix for [0fc59f908b]. (check-in: 6dae62c4e5 user: dan tags: trunk) | |
13:05 | Add the rot13.c loadable extension. (check-in: 8f9bd8e7a8 user: drh tags: trunk) | |
2013-05-09
| ||
18:12 | Add assert()s to the implementation of xRead() in the built-in VFSes to verify that the offset parameter is always non-negative. (check-in: cf5c364224 user: drh tags: trunk) | |
Changes
Added ext/misc/rot13.c.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 | /* ** 2013-05-15 ** ** 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 SQLite extension implements a rot13() function and a rot13 ** collating sequence. */ #include "sqlite3ext.h" SQLITE_EXTENSION_INIT1 #include <assert.h> #include <string.h> /* ** Perform rot13 encoding on a single ASCII character. */ static unsigned char rot13(unsigned char c){ if( c>='a' && c<='z' ){ c += 13; if( c>'z' ) c -= 26; }else if( c>='A' && c<='Z' ){ c += 13; if( c>'Z' ) c -= 26; } return c; } /* ** Implementation of the rot13() function. ** ** Rotate ASCII alphabetic characters by 13 character positions. ** Non-ASCII characters are unchanged. rot13(rot13(X)) should always ** equal X. */ static void rot13func( sqlite3_context *context, int argc, sqlite3_value **argv ){ const unsigned char *zIn; int nIn; unsigned char *zOut; char *zToFree = 0; int i; char zTemp[100]; assert( argc==1 ); if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return; zIn = (const unsigned char*)sqlite3_value_text(argv[0]); nIn = sqlite3_value_bytes(argv[0]); if( nIn<sizeof(zTemp)-1 ){ zOut = zTemp; }else{ zOut = zToFree = sqlite3_malloc( nIn+1 ); if( zOut==0 ){ sqlite3_result_error_nomem(context); return; } } for(i=0; i<nIn; i++) zOut[i] = rot13(zIn[i]); zOut[i] = 0; sqlite3_result_text(context, (char*)zOut, i, SQLITE_TRANSIENT); sqlite3_free(zToFree); } /* ** Implement the rot13 collating sequence so that if ** ** x=y COLLATE rot13 ** ** Then ** ** rot13(x)=rot13(y) COLLATE binary */ static int rot13CollFunc( void *notUsed, int nKey1, const void *pKey1, int nKey2, const void *pKey2 ){ const char *zA = (const char*)pKey1; const char *zB = (const char*)pKey2; int i, x; for(i=0; i<nKey1 && i<nKey2; i++){ x = (int)rot13(zA[i]) - (int)rot13(zB[i]); if( x!=0 ) return x; } return nKey1 - nKey2; } #ifdef _WIN32 __declspec(dllexport) #endif int sqlite3_rot_init( sqlite3 *db, char **pzErrMsg, const sqlite3_api_routines *pApi ){ int rc = SQLITE_OK; SQLITE_EXTENSION_INIT2(pApi); (void)pzErrMsg; /* Unused parameter */ rc = sqlite3_create_function(db, "rot13", 1, SQLITE_UTF8, 0, rot13func, 0, 0); if( rc==SQLITE_OK ){ rc = sqlite3_create_collation(db, "rot13", SQLITE_UTF8, 0, rot13CollFunc); } return rc; } |