summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Ng <dave@codeaurora.org>2011-07-05 10:53:34 -0700
committerSteve Kondik <shade@chemlab.org>2013-12-01 17:10:32 -0800
commit2b2f54ca283c47e749985a2c141a78256f5dcae6 (patch)
treed24a148c8dfdfc39ef2732f352633d8747415d11
parent39457372a3972445cc32185d0c566e6cba568888 (diff)
downloadandroid_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.mk8
-rwxr-xr-x[-rw-r--r--]dist/sqlite3.c39
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);