Skip to content
This repository was archived by the owner on Oct 14, 2022. It is now read-only.

Commit e3b8b67

Browse files
alexoronpurushe
authored andcommitted
Improve write speed (requery#119)
* Add recommended compile flags * Update SQLiteGlobal constants to recommended (from android bindings) * Improve sqlite statement detection speed * Remove DQS=0 compile options, because it can break backward support * Remove unnecessary toUpperCase() when detecting sqlite statement type
1 parent 8b28ceb commit e3b8b67

File tree

3 files changed

+45
-32
lines changed

3 files changed

+45
-32
lines changed

sqlite-android/src/main/java/io/requery/android/database/sqlite/SQLiteGlobal.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -97,20 +97,20 @@ public static String getDefaultSyncMode() {
9797
* Gets the database synchronization mode when in WAL mode.
9898
*/
9999
public static String getWALSyncMode() {
100-
return "FULL";
100+
return "normal";
101101
}
102102

103103
/**
104104
* Gets the WAL auto-checkpoint integer in database pages.
105105
*/
106106
public static int getWALAutoCheckpoint() {
107-
return 100;
107+
return 1000;
108108
}
109109

110110
/**
111111
* Gets the connection pool size when in WAL mode.
112112
*/
113113
public static int getWALConnectionPoolSize() {
114-
return 4;
114+
return 10;
115115
}
116116
}

sqlite-android/src/main/java/io/requery/android/database/sqlite/SQLiteStatementType.java

Lines changed: 36 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -64,35 +64,43 @@ public static int getSqlStatementType(String sql) {
6464
if (sql.length() < 3) {
6565
return STATEMENT_OTHER;
6666
}
67-
String prefixSql = sql.substring(0, 3).toUpperCase(Locale.US);
68-
switch (prefixSql) {
69-
case "SEL":
70-
return STATEMENT_SELECT;
71-
case "INS":
72-
case "UPD":
73-
case "REP":
74-
case "DEL":
75-
return STATEMENT_UPDATE;
76-
case "ATT":
77-
return STATEMENT_ATTACH;
78-
case "COM":
79-
return STATEMENT_COMMIT;
80-
case "END":
81-
return STATEMENT_COMMIT;
82-
case "ROL":
83-
return STATEMENT_ABORT;
84-
case "BEG":
85-
return STATEMENT_BEGIN;
86-
case "PRA":
87-
return STATEMENT_PRAGMA;
88-
case "CRE":
89-
case "DRO":
90-
case "ALT":
91-
return STATEMENT_DDL;
92-
case "ANA":
93-
case "DET":
94-
return STATEMENT_UNPREPARED;
67+
String prefixSql = sql.substring(0, 3);
68+
69+
if (prefixSql.equalsIgnoreCase("SEL")) {
70+
return STATEMENT_SELECT;
71+
}
72+
if (prefixSql.equalsIgnoreCase("INS")
73+
|| prefixSql.equalsIgnoreCase("UPD")
74+
|| prefixSql.equalsIgnoreCase("REP")
75+
|| prefixSql.equalsIgnoreCase("DEL")) {
76+
return STATEMENT_UPDATE;
77+
}
78+
if (prefixSql.equalsIgnoreCase("ATT")) {
79+
return STATEMENT_ATTACH;
80+
}
81+
if (prefixSql.equalsIgnoreCase("COM")
82+
|| prefixSql.equalsIgnoreCase("END")) {
83+
return STATEMENT_COMMIT;
84+
}
85+
if (prefixSql.equalsIgnoreCase("ROL")) {
86+
return STATEMENT_ABORT;
87+
}
88+
if (prefixSql.equalsIgnoreCase("BEG")) {
89+
return STATEMENT_BEGIN;
9590
}
91+
if (prefixSql.equalsIgnoreCase("PRA")) {
92+
return STATEMENT_PRAGMA;
93+
}
94+
if (prefixSql.equalsIgnoreCase("CRE")
95+
|| prefixSql.equalsIgnoreCase("DRO")
96+
|| prefixSql.equalsIgnoreCase("ALT")) {
97+
return STATEMENT_DDL;
98+
}
99+
100+
if (prefixSql.equalsIgnoreCase("ANA") || prefixSql.equalsIgnoreCase("DET")) {
101+
return STATEMENT_UNPREPARED;
102+
}
103+
96104
return STATEMENT_OTHER;
97105
}
98106
}

sqlite-android/src/main/jni/sqlite/Android.mk

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,12 @@ sqlite_flags := \
2626
-DSQLITE_ENABLE_RTREE=1 \
2727
-DSQLITE_OMIT_BUILTIN_TEST \
2828
-DSQLITE_OMIT_COMPILEOPTION_DIAGS \
29-
-DSQLITE_DEFAULT_FILE_PERMISSIONS=0600
29+
-DSQLITE_DEFAULT_FILE_PERMISSIONS=0600 \
30+
-DSQLITE_DEFAULT_MEMSTATUS=0 \
31+
-DSQLITE_MAX_EXPR_DEPTH=0 \
32+
-DSQLITE_USE_ALLOCA \
33+
-DSQLITE_ENABLE_BATCH_ATOMIC_WRITE \
34+
-O3
3035

3136
LOCAL_CFLAGS += $(sqlite_flags)
3237
LOCAL_CFLAGS += -Wno-unused-parameter -Wno-int-to-pointer-cast

0 commit comments

Comments
 (0)