From 2f0d00d645ef2b14a508e9a87728ef6d4d4bb5cc Mon Sep 17 00:00:00 2001 From: cpfeiffer Date: Sat, 6 Jun 2015 00:10:38 +0200 Subject: [PATCH] avoid WITHOUT ROWID when not running at least lollipop #62 --- .../gadgetbridge/GBApplication.java | 6 ++++++ .../database/ActivityDatabaseHandler.java | 17 +++++++++++++++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/GBApplication.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/GBApplication.java index 60347e379..123fbe0a2 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/GBApplication.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/GBApplication.java @@ -3,6 +3,8 @@ package nodomain.freeyourgadget.gadgetbridge; import android.app.Application; import android.content.Context; import android.content.SharedPreferences; +import android.os.Build; +import android.os.Build.VERSION; import android.preference.PreferenceManager; import org.slf4j.Logger; @@ -67,4 +69,8 @@ public class GBApplication extends Application { public static ActivityDatabaseHandler getActivityDatabaseHandler() { return mActivityDatabaseHandler; } + + public static boolean isRunningLollipopOrLater() { + return VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP; + } } 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 913415a4a..d0dc2f0ff 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/database/ActivityDatabaseHandler.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/database/ActivityDatabaseHandler.java @@ -9,6 +9,7 @@ import android.database.sqlite.SQLiteOpenHelper; import java.util.ArrayList; import nodomain.freeyourgadget.gadgetbridge.GBActivitySample; +import nodomain.freeyourgadget.gadgetbridge.GBApplication; public class ActivityDatabaseHandler extends SQLiteOpenHelper { @@ -36,10 +37,22 @@ public class ActivityDatabaseHandler extends SQLiteOpenHelper { + KEY_INTENSITY + " SMALLINT," + KEY_STEPS + " TINYINT," + KEY_TYPE + " TINYINT," - + " PRIMARY_KEY (" + KEY_TIMESTAMP + "," + KEY_PROVIDER + ") ON CONFLICT REPLACE) WITHOUT ROWID;"; + + " PRIMARY_KEY (" + KEY_TIMESTAMP + "," + KEY_PROVIDER + ") ON CONFLICT REPLACE)" + getWithoutRowId(); db.execSQL(CREATE_GBACTIVITYSAMPLES_TABLE); } + /** + * WITHOUT ROWID is only available with sqlite 3.8.2, which is available + * with Lollipop and later. + * @return the "WITHOUT ROWID" string or an empty string for pre-Lollipop devices + */ + private String getWithoutRowId() { + if (GBApplication.isRunningLollipopOrLater()) { + return " WITHOUT ROWID;"; + } + return ""; + } + @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { if (newVersion == 5 && (oldVersion == 4 || oldVersion ==3)) { @@ -49,7 +62,7 @@ public class ActivityDatabaseHandler extends SQLiteOpenHelper { + KEY_INTENSITY + " SMALLINT," + KEY_STEPS + " TINYINT," + KEY_TYPE + " TINYINT," - + " PRIMARY KEY (" + KEY_TIMESTAMP + "," + KEY_PROVIDER + ") ON CONFLICT REPLACE) WITHOUT ROWID;"; + + " PRIMARY KEY (" + KEY_TIMESTAMP + "," + KEY_PROVIDER + ") ON CONFLICT REPLACE)" + getWithoutRowId(); 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+";");