QgsScopedSqlite::QgsScopedSqlite( const QString& path, bool withExtension ) { if ( withExtension ) { // register a statically-linked function as extension // for all future database connection sqlite3_auto_extension( reinterpret_cast < void( * )() > ( qgsvlayerModuleInit ) ); } int r; r = sqlite3_open( path.toLocal8Bit().constData(), &db_ ); if ( withExtension ) { // reset the automatic extensions sqlite3_reset_auto_extension(); } if ( r ) { QString err = QString( "%1 [%2]" ).arg( sqlite3_errmsg( db_ ), path ); QgsDebugMsg( err ); throw std::runtime_error( err.toLocal8Bit().constData() ); } // enable extended result codes sqlite3_extended_result_codes( db_, 1 ); }
/* ** CAPI: Initialize the multiplex VFS shim - sqlite3_multiplex_initialize() ** ** Use the VFS named zOrigVfsName as the VFS that does the actual work. ** Use the default if zOrigVfsName==NULL. ** ** The multiplex VFS shim is named "multiplex". It will become the default ** VFS if makeDefault is non-zero. ** ** THIS ROUTINE IS NOT THREADSAFE. Call this routine exactly once ** during start-up. */ int sqlite3_multiplex_initialize(const char *zOrigVfsName, int makeDefault){ sqlite3_vfs *pOrigVfs; if( gMultiplex.isInitialized ) return SQLITE_MISUSE; pOrigVfs = sqlite3_vfs_find(zOrigVfsName); if( pOrigVfs==0 ) return SQLITE_ERROR; assert( pOrigVfs!=&gMultiplex.sThisVfs ); gMultiplex.pMutex = sqlite3_mutex_alloc(SQLITE_MUTEX_FAST); if( !gMultiplex.pMutex ){ return SQLITE_NOMEM; } gMultiplex.pGroups = NULL; gMultiplex.isInitialized = 1; gMultiplex.pOrigVfs = pOrigVfs; gMultiplex.sThisVfs = *pOrigVfs; gMultiplex.sThisVfs.szOsFile += sizeof(multiplexConn); gMultiplex.sThisVfs.zName = SQLITE_MULTIPLEX_VFS_NAME; gMultiplex.sThisVfs.xOpen = multiplexOpen; gMultiplex.sThisVfs.xDelete = multiplexDelete; gMultiplex.sThisVfs.xAccess = multiplexAccess; gMultiplex.sThisVfs.xFullPathname = multiplexFullPathname; gMultiplex.sThisVfs.xDlOpen = multiplexDlOpen; gMultiplex.sThisVfs.xDlError = multiplexDlError; gMultiplex.sThisVfs.xDlSym = multiplexDlSym; gMultiplex.sThisVfs.xDlClose = multiplexDlClose; gMultiplex.sThisVfs.xRandomness = multiplexRandomness; gMultiplex.sThisVfs.xSleep = multiplexSleep; gMultiplex.sThisVfs.xCurrentTime = multiplexCurrentTime; gMultiplex.sThisVfs.xGetLastError = multiplexGetLastError; gMultiplex.sThisVfs.xCurrentTimeInt64 = multiplexCurrentTimeInt64; gMultiplex.sIoMethodsV1.iVersion = 1; gMultiplex.sIoMethodsV1.xClose = multiplexClose; gMultiplex.sIoMethodsV1.xRead = multiplexRead; gMultiplex.sIoMethodsV1.xWrite = multiplexWrite; gMultiplex.sIoMethodsV1.xTruncate = multiplexTruncate; gMultiplex.sIoMethodsV1.xSync = multiplexSync; gMultiplex.sIoMethodsV1.xFileSize = multiplexFileSize; gMultiplex.sIoMethodsV1.xLock = multiplexLock; gMultiplex.sIoMethodsV1.xUnlock = multiplexUnlock; gMultiplex.sIoMethodsV1.xCheckReservedLock = multiplexCheckReservedLock; gMultiplex.sIoMethodsV1.xFileControl = multiplexFileControl; gMultiplex.sIoMethodsV1.xSectorSize = multiplexSectorSize; gMultiplex.sIoMethodsV1.xDeviceCharacteristics = multiplexDeviceCharacteristics; gMultiplex.sIoMethodsV2 = gMultiplex.sIoMethodsV1; gMultiplex.sIoMethodsV2.iVersion = 2; gMultiplex.sIoMethodsV2.xShmMap = multiplexShmMap; gMultiplex.sIoMethodsV2.xShmLock = multiplexShmLock; gMultiplex.sIoMethodsV2.xShmBarrier = multiplexShmBarrier; gMultiplex.sIoMethodsV2.xShmUnmap = multiplexShmUnmap; sqlite3_vfs_register(&gMultiplex.sThisVfs, makeDefault); sqlite3_auto_extension((void*)multiplexFuncInit); return SQLITE_OK; }
ikptr ik_sqlite3_auto_extension (ikptr s_entry_point, ikpcb * pcb) { #ifdef HAVE_SQLITE3_AUTO_EXTENSION typedef void (*entry_point_t) (void); entry_point_t cb = IK_POINTER_DATA_VOIDP(s_entry_point); int rv; rv = sqlite3_auto_extension(cb); return ika_integer_from_sqlite_errcode(pcb, rv); #else feature_failure(__func__); #endif }
gboolean tracker_fts_init (void) { #ifdef HAVE_BUILTIN_FTS /* SQLite has all needed FTS4 features compiled in */ return TRUE; #else static gsize module_initialized = 0; int rc = SQLITE_OK; if (g_once_init_enter (&module_initialized)) { rc = sqlite3_auto_extension ((void (*) (void)) fts4_extension_init); g_once_init_leave (&module_initialized, (rc == SQLITE_OK)); } return (module_initialized != 0); #endif }
SPATIALITE_DECLARE void spatialite_init (int verbose) { /* used when SQLite initializes as an ordinary lib OBSOLETE - strongly discouraged !!!!! always using spatialite_init_ex() as a replacement is warmly reccomended */ spatialite_initialize (); #ifndef OMIT_GEOS /* initializing GEOS */ initGEOS (geos_warning, geos_error); #endif /* end GEOS */ #ifdef POSTGIS_2_1 /* initializing liblwgeom from PostGIS 2.1.x (or later) */ splite_lwgeom_init (); #endif /* end POSTGIS_2_1 */ sqlite3_auto_extension ((void (*)(void)) init_spatialite_extension); spatialite_splash_screen (verbose); }
/* ** This routine is called by the patched sqlite3 command-line shell in order ** to load the name and database connection for the open Fossil database. */ void fossil_open(const char **pzRepoName){ sqlite3_auto_extension((void(*)(void))sqlcmd_autoinit); *pzRepoName = g.zRepositoryName; }
*pzErrMsg = zErr; return 1; } /* ** tclcmd: sqlite3_auto_extension_sqr ** ** Register the "sqr" extension to be loaded automatically. */ static int SQLITE_TCLAPI autoExtSqrObjCmd( void * clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[] ){ int rc = sqlite3_auto_extension(sqr_init); Tcl_SetObjResult(interp, Tcl_NewIntObj(rc)); return SQLITE_OK; } /* ** tclcmd: sqlite3_cancel_auto_extension_sqr ** ** Unregister the "sqr" extension. */ static int SQLITE_TCLAPI cancelAutoExtSqrObjCmd( void * clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[] ){
*pzErrMsg = zErr; return 1; } /* ** tclcmd: sqlite3_auto_extension_sqr ** ** Register the "sqr" extension to be loaded automatically. */ static int autoExtSqrObjCmd( void * clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[] ) { int rc = sqlite3_auto_extension((void*)sqr_init); Tcl_SetObjResult(interp, Tcl_NewIntObj(rc)); return SQLITE_OK; } /* ** tclcmd: sqlite3_auto_extension_cube ** ** Register the "cube" extension to be loaded automatically. */ static int autoExtCubeObjCmd( void * clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[] ) {
/* ** TCLCMD: autoinstall_test_functions ** ** Invoke this TCL command to use sqlite3_auto_extension() to cause ** the standard set of test functions to be loaded into each new ** database connection. */ static int autoinstall_test_funcs( void * clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[] ){ extern int Md5_Register(sqlite3*); int rc = sqlite3_auto_extension((void*)registerTestFunctions); if( rc==SQLITE_OK ){ rc = sqlite3_auto_extension((void*)Md5_Register); } Tcl_SetObjResult(interp, Tcl_NewIntObj(rc)); return TCL_OK; } /* ** A bogus step function and finalizer function. */ static void tStep(sqlite3_context *a, int b, sqlite3_value **c){} static void tFinal(sqlite3_context *a){} /*