From fc374881c52ee3e01cdd474ff78724b47f125cb7 Mon Sep 17 00:00:00 2001 From: Daniele Gobbetti Date: Thu, 4 Jun 2015 21:37:48 +0200 Subject: [PATCH 1/2] Get rid of the unused ID in the DB, this could help in: * reducing the used space * reducing the time needed for inserts --- .../database/ActivityDatabaseHandler.java | 28 +++++++++++++------ 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/database/ActivityDatabaseHandler.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/database/ActivityDatabaseHandler.java index 442e53d61..f487bbfd6 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/database/ActivityDatabaseHandler.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/database/ActivityDatabaseHandler.java @@ -12,13 +12,12 @@ import nodomain.freeyourgadget.gadgetbridge.GBActivitySample; public class ActivityDatabaseHandler extends SQLiteOpenHelper { - private static final int DATABASE_VERSION = 3; + private static final int DATABASE_VERSION = 4; private static final String DATABASE_NAME = "ActivityDatabase"; private static final String TABLE_GBACTIVITYSAMPLES = "GBActivitySamples"; - private static final String KEY_ID = "id"; private static final String KEY_TIMESTAMP = "timestamp"; private static final String KEY_PROVIDER = "provider"; private static final String KEY_INTENSITY = "intensity"; @@ -31,22 +30,35 @@ public class ActivityDatabaseHandler extends SQLiteOpenHelper { @Override public void onCreate(SQLiteDatabase db) { - String CREATE_GBACTIVITYSAMPLES_TABLE = "CREATE TABLE " + TABLE_GBACTIVITYSAMPLES + "(" - + KEY_ID + " INTEGER PRIMARY KEY," + String CREATE_GBACTIVITYSAMPLES_TABLE = "CREATE TABLE " + TABLE_GBACTIVITYSAMPLES + " (" + KEY_TIMESTAMP + " INT," + KEY_PROVIDER + " TINYINT," + KEY_INTENSITY + " SMALLINT," + KEY_STEPS + " TINYINT," + KEY_TYPE + " TINYINT," - + " UNIQUE (" + KEY_TIMESTAMP + "," + KEY_PROVIDER + ") ON CONFLICT REPLACE)"; + + " PRIMARY_KEY (" + KEY_TIMESTAMP + "," + KEY_PROVIDER + ") ON CONFLICT REPLACE)"; db.execSQL(CREATE_GBACTIVITYSAMPLES_TABLE); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { - //FIXME: do not just recreate - db.execSQL("DROP TABLE IF EXISTS " + TABLE_GBACTIVITYSAMPLES); - onCreate(db); + if (newVersion == 4 && oldVersion == 3) { + String CREATE_NEW_GBACTIVITYSAMPLES_TABLE = "CREATE TABLE NEW (" + + KEY_TIMESTAMP + " INT," + + KEY_PROVIDER + " TINYINT," + + KEY_INTENSITY + " SMALLINT," + + KEY_STEPS + " TINYINT," + + KEY_TYPE + " TINYINT," + + " PRIMARY KEY (" + KEY_TIMESTAMP + "," + KEY_PROVIDER + ") ON CONFLICT REPLACE)"; + db.execSQL(CREATE_NEW_GBACTIVITYSAMPLES_TABLE); + db.execSQL("insert into NEW select timestamp,provider,intensity,steps,type from "+ TABLE_GBACTIVITYSAMPLES+";"); + db.execSQL("Drop table "+TABLE_GBACTIVITYSAMPLES+";"); + db.execSQL("alter table NEW RENAME TO " + TABLE_GBACTIVITYSAMPLES + ";"); + } else { + //FIXME: do not just recreate + db.execSQL("DROP TABLE IF EXISTS " + TABLE_GBACTIVITYSAMPLES); + onCreate(db); + } } From c4096e6d3c1b79dab403d3621591831727703d4b Mon Sep 17 00:00:00 2001 From: cpfeiffer Date: Fri, 5 Jun 2015 21:46:56 +0200 Subject: [PATCH 2/2] Add daniele's db optimization the WITHOUT ROWID closes #62 --- .../freeyourgadget/gadgetbridge/GBApplication.java | 4 ++++ .../gadgetbridge/database/ActivityDatabaseHandler.java | 10 +++++----- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/GBApplication.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/GBApplication.java index 56533f122..60347e379 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/GBApplication.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/GBApplication.java @@ -31,6 +31,10 @@ public class GBApplication extends Application { // print logback's internal status // StatusPrinter.print(lc); // Logger logger = LoggerFactory.getLogger(GBApplication.class); + +// for testing DB stuff +// SQLiteDatabase db = mActivityDatabaseHandler.getWritableDatabase(); +// db.close(); } public static boolean isFileLoggingEnabled() { diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/database/ActivityDatabaseHandler.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/database/ActivityDatabaseHandler.java index f487bbfd6..cb1272eec 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/database/ActivityDatabaseHandler.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/database/ActivityDatabaseHandler.java @@ -12,7 +12,7 @@ import nodomain.freeyourgadget.gadgetbridge.GBActivitySample; public class ActivityDatabaseHandler extends SQLiteOpenHelper { - private static final int DATABASE_VERSION = 4; + private static final int DATABASE_VERSION = 5; private static final String DATABASE_NAME = "ActivityDatabase"; @@ -36,20 +36,20 @@ public class ActivityDatabaseHandler extends SQLiteOpenHelper { + KEY_INTENSITY + " SMALLINT," + KEY_STEPS + " TINYINT," + KEY_TYPE + " TINYINT," - + " PRIMARY_KEY (" + KEY_TIMESTAMP + "," + KEY_PROVIDER + ") ON CONFLICT REPLACE)"; + + " PRIMARY_KEY (" + KEY_TIMESTAMP + "," + KEY_PROVIDER + ") ON CONFLICT REPLACE) WITHOUT ROWID;"; db.execSQL(CREATE_GBACTIVITYSAMPLES_TABLE); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { - if (newVersion == 4 && oldVersion == 3) { + if (newVersion == 5 && (oldVersion == 4 || oldVersion ==3)) { String CREATE_NEW_GBACTIVITYSAMPLES_TABLE = "CREATE TABLE NEW (" + KEY_TIMESTAMP + " INT," + KEY_PROVIDER + " TINYINT," + KEY_INTENSITY + " SMALLINT," + KEY_STEPS + " TINYINT," + KEY_TYPE + " TINYINT," - + " PRIMARY KEY (" + KEY_TIMESTAMP + "," + KEY_PROVIDER + ") ON CONFLICT REPLACE)"; + + " PRIMARY KEY (" + KEY_TIMESTAMP + "," + KEY_PROVIDER + ") ON CONFLICT REPLACE) WITHOUT ROWID;"; db.execSQL(CREATE_NEW_GBACTIVITYSAMPLES_TABLE); db.execSQL("insert into NEW select timestamp,provider,intensity,steps,type from "+ TABLE_GBACTIVITYSAMPLES+";"); db.execSQL("Drop table "+TABLE_GBACTIVITYSAMPLES+";"); @@ -92,7 +92,7 @@ public class ActivityDatabaseHandler extends SQLiteOpenHelper { public ArrayList getGBActivitySamples(int timestamp_from, int timestamp_to, byte provider) { if (timestamp_to == -1) { - timestamp_to = 2147483647; // dont know what happens when I use more than max of a signed int + timestamp_to = Integer.MAX_VALUE; // dont know what happens when I use more than max of a signed int } ArrayList GBActivitySampleList = new ArrayList(); String selectQuery = "SELECT * FROM " + TABLE_GBACTIVITYSAMPLES