Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Additional test cases for loadable extensions. (CVS 5247) |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
9d73a68c305db673d393db118b6a4124 |
User & Date: | drh 2008-06-19 15:44:00.000 |
Context
2008-06-19
| ||
16:07 | Fix some minor compile problems. (CVS 5248) (check-in: 7d38da3eea user: drh tags: trunk) | |
15:44 | Additional test cases for loadable extensions. (CVS 5247) (check-in: 9d73a68c30 user: drh tags: trunk) | |
15:06 | Add recent API additions to the loadable extension interface. (CVS 5246) (check-in: 12ba27d94e user: drh tags: trunk) | |
Changes
Changes to src/test_loadext.c.
1 2 3 4 5 6 7 8 9 10 11 12 13 | /* ** 2006 June 14 ** ** 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. ** ************************************************************************* ** Test extension for testing the sqlite3_load_extension() function. ** | | | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 | /* ** 2006 June 14 ** ** 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. ** ************************************************************************* ** Test extension for testing the sqlite3_load_extension() function. ** ** $Id: test_loadext.c,v 1.2 2008/06/19 15:44:00 drh Exp $ */ #include <string.h> #include "sqlite3ext.h" SQLITE_EXTENSION_INIT1 /* ** The half() SQL function returns half of its input value. */ static void halfFunc( sqlite3_context *context, int argc, sqlite3_value **argv ){ sqlite3_result_double(context, 0.5*sqlite3_value_double(argv[0])); } /* ** SQL functions to call the sqlite3_status function and return results. */ static void statusFunc( sqlite3_context *context, int argc, sqlite3_value **argv ){ int op, mx, cur, resetFlag, rc; if( sqlite3_value_type(argv[0])==SQLITE_INTEGER ){ op = sqlite3_value_int(argv[0]); }else if( sqlite3_value_type(argv[0])==SQLITE_TEXT ){ int i; const char *zName; static const struct { const char *zName; int op; } aOp[] = { { "MEMORY_USED", SQLITE_STATUS_MEMORY_USED }, { "PAGECACHE_USED", SQLITE_STATUS_PAGECACHE_USED }, { "PAGECACHE_OVERFLOW", SQLITE_STATUS_PAGECACHE_OVERFLOW }, { "SCRATCH_USED", SQLITE_STATUS_SCRATCH_USED }, { "SCRATCH_OVERFLOW", SQLITE_STATUS_SCRATCH_OVERFLOW }, { "MALLOC_SIZE", SQLITE_STATUS_MALLOC_SIZE }, }; int nOp = sizeof(aOp)/sizeof(aOp[0]); zName = (const char*)sqlite3_value_text(argv[0]); for(i=0; i<nOp; i++){ if( strcmp(aOp[i].zName, zName)==0 ){ op = aOp[i].op; break; } } if( i>=nOp ){ char *zMsg = sqlite3_mprintf("unknown status property: %s", zName); sqlite3_result_error(context, zMsg, -1); sqlite3_free(zMsg); return; } }else{ sqlite3_result_error(context, "unknown status type", -1); return; } if( argc==2 ){ resetFlag = sqlite3_value_int(argv[1]); }else{ resetFlag = 0; } rc = sqlite3_status(op, &cur, &mx, resetFlag); if( rc!=SQLITE_OK ){ char *zMsg = sqlite3_mprintf("sqlite3_status(%d,...) returns %d", op, rc); sqlite3_result_error(context, zMsg, -1); sqlite3_free(zMsg); return; } if( argc==2 ){ sqlite3_result_int(context, mx); }else{ sqlite3_result_int(context, cur); } } /* ** Extension load function. */ int testloadext_init( sqlite3 *db, char **pzErrMsg, const sqlite3_api_routines *pApi ){ SQLITE_EXTENSION_INIT2(pApi); sqlite3_create_function(db, "half", 1, SQLITE_ANY, 0, halfFunc, 0, 0); sqlite3_create_function(db, "sqlite3_status", 1, SQLITE_ANY, 0, statusFunc, 0, 0); sqlite3_create_function(db, "sqlite3_status", 2, SQLITE_ANY, 0, statusFunc, 0, 0); return 0; } /* ** Another extension entry point. This one always fails. */ int testbrokenext_init( |
︙ | ︙ |
Changes to test/loadext.test.
1 2 3 4 5 6 7 8 9 10 11 12 13 | # 2006 July 14 # # 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 regression tests for SQLite library. The # focus of this script is extension loading. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | # 2006 July 14 # # 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 regression tests for SQLite library. The # focus of this script is extension loading. # # $Id: loadext.test,v 1.12 2008/06/19 15:44:00 drh Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl ifcapable !load_ext { finish_test return |
︙ | ︙ | |||
183 184 185 186 187 188 189 190 191 192 193 194 195 196 | } } {0 {{}}} do_test loadext-3.4 { catchsql { SELECT half(5); } } {0 2.5} # Ticket #1863 # Make sure the extension loading mechanism will not work unless it # is explicitly enabled. # db close sqlite3 db test.db | > > > > > > > > > > > > > > > > > > > > > > | 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 | } } {0 {{}}} do_test loadext-3.4 { catchsql { SELECT half(5); } } {0 2.5} do_test loadext-3.5 { db eval { SELECT sqlite3_status('MEMORY_USED') AS mused } break puts -nonewline " (memory_used=$mused) " expr {$mused>0} } {1} do_test loadext-3.6 { catchsql { SELECT sqlite3_status('MEMORY_USED_X') AS mused } } {1 {unknown status property: MEMORY_USED_X}} do_test loadext-3.7 { catchsql { SELECT sqlite3_status(4.53) AS mused } } {1 {unknown status type}} do_test loadext-3.8 { catchsql { SELECT sqlite3_status(23) AS mused } } {1 {sqlite3_status(23,...) returns 21}} # Ticket #1863 # Make sure the extension loading mechanism will not work unless it # is explicitly enabled. # db close sqlite3 db test.db |
︙ | ︙ |