am 904607b8: add FTS3 _backward_compatibility mode to let apps use FTS1 or 2.
diff --git a/dist/Android.mk b/dist/Android.mk
index 305ffd3..016968d 100644
--- a/dist/Android.mk
+++ b/dist/Android.mk
@@ -21,7 +21,7 @@
# SQLITE_TEMP_STORE=3 causes all TEMP files to go into RAM. and thats the behavior we want
# SQLITE_ENABLE_FTS3 enables usage of FTS3 - NOT FTS1 or 2.
# SQLITE_DEFAULT_AUTOVACUUM=1 causes the databases to be subject to auto-vacuum
-LOCAL_CFLAGS += -DHAVE_USLEEP=1 -DSQLITE_DEFAULT_JOURNAL_SIZE_LIMIT=1048576 -DSQLITE_THREADSAFE=1 -DNDEBUG=1 -DSQLITE_ENABLE_MEMORY_MANAGEMENT=1 -DSQLITE_DEFAULT_AUTOVACUUM=1 -DSQLITE_TEMP_STORE=3 -DSQLITE_ENABLE_FTS3
+LOCAL_CFLAGS += -DHAVE_USLEEP=1 -DSQLITE_DEFAULT_JOURNAL_SIZE_LIMIT=1048576 -DSQLITE_THREADSAFE=1 -DNDEBUG=1 -DSQLITE_ENABLE_MEMORY_MANAGEMENT=1 -DSQLITE_DEFAULT_AUTOVACUUM=1 -DSQLITE_TEMP_STORE=3 -DSQLITE_ENABLE_FTS3 -DSQLITE_ENABLE_FTS3_BACKWARDS
ifneq ($(TARGET_SIMULATOR),true)
LOCAL_SHARED_LIBRARIES := libdl
diff --git a/dist/sqlite3.c b/dist/sqlite3.c
index 2550bb0..076c66a 100644
--- a/dist/sqlite3.c
+++ b/dist/sqlite3.c
@@ -95405,7 +95405,9 @@
extern "C" {
#endif /* __cplusplus */
-SQLITE_PRIVATE int sqlite3Fts3Init(sqlite3 *db);
+// Begin Android Change
+SQLITE_PRIVATE int sqlite3Fts3Init(sqlite3 *db, const char* registerAs);
+// End Android Change
#if 0
} /* extern "C" */
@@ -97148,6 +97150,9 @@
}
#ifdef SQLITE_ENABLE_FTS1
+// Begin Android change
+#error "Do not enable FTS1 on Android as FTS3_BACKWARDS has been in use"
+// End Android add
if( !db->mallocFailed ){
extern int sqlite3Fts1Init(sqlite3*);
rc = sqlite3Fts1Init(db);
@@ -97155,6 +97160,9 @@
#endif
#ifdef SQLITE_ENABLE_FTS2
+// Begin Android change
+#error "Do not enable FTS2 on Android as FTS3_BACKWARDS has been in use"
+// End Android add
if( !db->mallocFailed && rc==SQLITE_OK ){
extern int sqlite3Fts2Init(sqlite3*);
rc = sqlite3Fts2Init(db);
@@ -97162,9 +97170,24 @@
#endif
#ifdef SQLITE_ENABLE_FTS3
- if( !db->mallocFailed && rc==SQLITE_OK ){
- rc = sqlite3Fts3Init(db);
- }
+ // Begin Android change
+ #ifdef SQLITE_ENABLE_FTS3_BACKWARDS
+ /* Also register as fts1 and fts2, for backwards compatability on
+ ** systems known to have never seen a pre-fts3 database.
+ */
+ if( !db->mallocFailed && rc==SQLITE_OK ){
+ rc = sqlite3Fts3Init(db, "fts1");
+ }
+
+ if( !db->mallocFailed && rc==SQLITE_OK ){
+ rc = sqlite3Fts3Init(db, "fts2");
+ }
+ #endif
+
+ if( !db->mallocFailed && rc==SQLITE_OK ){
+ rc = sqlite3Fts3Init(db, "fts3");
+ }
+ // End Android change
#endif
#ifdef SQLITE_ENABLE_ICU
@@ -101095,7 +101118,10 @@
** SQLite. If fts3 is built as a dynamically loadable extension, this
** function is called by the sqlite3_extension_init() entry point.
*/
-SQLITE_PRIVATE int sqlite3Fts3Init(sqlite3 *db){
+// Begin Android change
+SQLITE_PRIVATE int sqlite3Fts3Init(sqlite3 *db, const char* registerAs){
+// End Android change
+
int rc = SQLITE_OK;
Fts3Hash *pHash = 0;
const sqlite3_tokenizer_module *pSimple = 0;
@@ -101147,8 +101173,11 @@
&& SQLITE_OK==(rc = sqlite3_overload_function(db, "matchinfo", -1))
&& SQLITE_OK==(rc = sqlite3_overload_function(db, "optimize", 1))
){
+ // Begin Android change
+ /* Also register as fts1 and fts2 */
return sqlite3_create_module_v2(
- db, "fts3", &fts3Module, (void *)pHash, hashDestroy
+ db, registerAs, &fts3Module, (void *)pHash, hashDestroy
+ // End Android change
);
}