From 619ea04a6356840068b2fb724b0378a21ce7cac9 Mon Sep 17 00:00:00 2001 From: cpfeiffer Date: Mon, 7 Mar 2016 00:36:39 +0100 Subject: [PATCH] Fix database creation and updates #246 The creation script *must* always do the full creation so that fresh installs get the correct database (no upgrade scripts will run for them) --- .../database/ActivityDatabaseHandler.java | 2 +- .../gadgetbridge/database/DBHelper.java | 13 +++++++++++-- .../database/schema/ActivityDBUpdate_7.java | 16 ++++++++++++++++ 3 files changed, 28 insertions(+), 3 deletions(-) create mode 100644 app/src/main/java/nodomain/freeyourgadget/gadgetbridge/database/schema/ActivityDBUpdate_7.java 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 13557906..f186f88e 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/database/ActivityDatabaseHandler.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/database/ActivityDatabaseHandler.java @@ -34,7 +34,7 @@ public class ActivityDatabaseHandler extends SQLiteOpenHelper implements DBHandl private static final Logger LOG = LoggerFactory.getLogger(ActivityDatabaseHandler.class); - private static final int DATABASE_VERSION = 6; + private static final int DATABASE_VERSION = 7; public ActivityDatabaseHandler(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/database/DBHelper.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/database/DBHelper.java index b9b679bf..7c53d326 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/database/DBHelper.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/database/DBHelper.java @@ -73,9 +73,18 @@ public class DBHelper { public static boolean existsColumn(String tableName, String columnName, SQLiteDatabase db) { try (Cursor res = db.rawQuery("PRAGMA table_info('" + tableName + "')", null)) { - int result = res.getColumnIndex(columnName); - return result != -1; + int index = res.getColumnIndex("name"); + if (index < 1) { + return false; // something's really wrong + } + while (res.moveToNext()) { + String cn = res.getString(index); + if (columnName.equals(cn)) { + return true; + } + } } + return false; } /** diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/database/schema/ActivityDBUpdate_7.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/database/schema/ActivityDBUpdate_7.java new file mode 100644 index 00000000..84638f3c --- /dev/null +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/database/schema/ActivityDBUpdate_7.java @@ -0,0 +1,16 @@ +package nodomain.freeyourgadget.gadgetbridge.database.schema; + +import android.database.sqlite.SQLiteDatabase; + +import nodomain.freeyourgadget.gadgetbridge.database.DBHelper; +import nodomain.freeyourgadget.gadgetbridge.database.DBUpdateScript; + +import static nodomain.freeyourgadget.gadgetbridge.database.DBConstants.KEY_CUSTOM_SHORT; +import static nodomain.freeyourgadget.gadgetbridge.database.DBConstants.TABLE_GBACTIVITYSAMPLES; + +/** + * Bugfix for users who installed 0.8.1 cleanly, i.e. without any previous + * database. Perform Update script 6 again. + */ +public class ActivityDBUpdate_7 extends ActivityDBUpdate_6 { +}