diff options
author | David Ng <dave@codeaurora.org> | 2011-07-05 10:53:34 -0700 |
---|---|---|
committer | Steve Kondik <shade@chemlab.org> | 2013-12-01 17:10:32 -0800 |
commit | 2b2f54ca283c47e749985a2c141a78256f5dcae6 (patch) | |
tree | d24a148c8dfdfc39ef2732f352633d8747415d11 | |
parent | 39457372a3972445cc32185d0c566e6cba568888 (diff) | |
download | android_external_sqlite-2b2f54ca283c47e749985a2c141a78256f5dcae6.tar.gz android_external_sqlite-2b2f54ca283c47e749985a2c141a78256f5dcae6.tar.bz2 android_external_sqlite-2b2f54ca283c47e749985a2c141a78256f5dcae6.zip |
Add hooks for database open and pragma handling
Change-Id: I0c1843a1c17e6cb7786ea5c66d229282b1fa0d32
SQLite: Updated hooks for database open and close.
Change-Id: I38135eaed3b5e66ef302eb0337f1bf3ba9f184d7
Leave out magic perf code unless requested
Change-Id: I154e288e440abd70dd4eec590150be1e800efac9
-rw-r--r-- | dist/Android.mk | 8 | ||||
-rwxr-xr-x[-rw-r--r--] | dist/sqlite3.c | 39 |
2 files changed, 47 insertions, 0 deletions
diff --git a/dist/Android.mk b/dist/Android.mk index 18543b6..5121de1 100644 --- a/dist/Android.mk +++ b/dist/Android.mk @@ -32,6 +32,10 @@ common_sqlite_flags := \ common_src_files := sqlite3.c +ifeq ($(WITH_QC_PERF),true) +common_sqlite_flags += -DQC_PERF +endif + # the device library include $(CLEAR_VARS) @@ -57,6 +61,10 @@ LOCAL_SHARED_LIBRARIES += liblog \ # include android specific methods LOCAL_WHOLE_STATIC_LIBRARIES := libsqlite3_android +ifeq ($(WITH_QC_PERF),true) +LOCAL_WHOLE_STATIC_LIBRARIES += libqc-sqlite +LOCAL_SHARED_LIBRARIES += libcutils +endif include $(BUILD_SHARED_LIBRARY) diff --git a/dist/sqlite3.c b/dist/sqlite3.c index c6c8a5e..4695395 100644..100755 --- a/dist/sqlite3.c +++ b/dist/sqlite3.c @@ -25,6 +25,13 @@ #ifndef SQLITE_API # define SQLITE_API #endif +#ifdef QC_PERF +extern void sqlite3_androidopt_init(void*, const char*) __attribute__((weak)); +extern void sqlite3_androidopt_open(void*, const char*, unsigned, int*) __attribute__((weak)); +extern void sqlite3_androidopt_close(void*) __attribute__((weak)); +extern int sqlite3_androidopt_handle_pragma(void*, char*, char*) __attribute__((weak)); +#endif + /************** Begin file sqliteInt.h ***************************************/ /* ** 2001 September 15 @@ -9816,6 +9823,7 @@ struct sqlite3 { void (*xUnlockNotify)(void **, int); /* Unlock notify callback */ sqlite3 *pNextBlocked; /* Next in list of all blocked connections */ #endif + u8 isSettingOverride; /* True if db settings have been overridden */ }; /* @@ -92448,6 +92456,14 @@ SQLITE_PRIVATE void sqlite3Pragma( goto pragma_out; } +#ifdef QC_PERF + if( sqlite3_androidopt_handle_pragma ) { + if( sqlite3_androidopt_handle_pragma(db, zLeft, zRight) == 1 ) { + goto pragma_out; + } + } +#endif + /* Send an SQLITE_FCNTL_PRAGMA file-control to the underlying VFS ** connection. If it returns SQLITE_OK, then assume that the VFS ** handled the pragma and generate a no-op prepared statement. @@ -92695,6 +92711,11 @@ SQLITE_PRIVATE void sqlite3Pragma( /* If the "=MODE" part does not match any known journal mode, ** then do a query */ eMode = PAGER_JOURNALMODE_QUERY; + }else if( db->isSettingOverride==1 ){ + /* Skip journal mode changes if override in effect */ + sqlite3VdbeAddOp4(v, OP_String, strlen(zMode), 1, 1, zMode, P4_STATIC); + sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 1); + goto pragma_out; } } if( eMode==PAGER_JOURNALMODE_QUERY && pId2->n==0 ){ @@ -113205,6 +113226,11 @@ SQLITE_API int sqlite3_close(sqlite3 *db){ if( !sqlite3SafetyCheckSickOrOk(db) ){ return SQLITE_MISUSE_BKPT; } +#ifdef QC_PERF + if (sqlite3_androidopt_close) { + sqlite3_androidopt_close(db); + } +#endif sqlite3_mutex_enter(db->mutex); /* Force xDestroy calls on all virtual tables */ @@ -114636,6 +114662,11 @@ static int openDatabase( } } sqlite3_mutex_enter(db->mutex); +#ifdef QC_PERF + if( sqlite3_androidopt_init ) { + sqlite3_androidopt_init(db, zFilename); + } +#endif db->errMask = 0xff; db->nDb = 2; db->magic = SQLITE_MAGIC_BUSY; @@ -114801,6 +114832,14 @@ opendb_out: db = 0; }else if( rc!=SQLITE_OK ){ db->magic = SQLITE_MAGIC_SICK; + }else { +#ifdef QC_PERF + if (sqlite3_androidopt_open) { + int override = 0; + sqlite3_androidopt_open(db, zFilename, flags, &override); + db->isSettingOverride = override; + } +#endif } *ppDb = db; return sqlite3ApiExit(0, rc); |