From 91880c4f5f580c53cb0314482b2efc245ad78500 Mon Sep 17 00:00:00 2001 From: Saifuddin Date: Mon, 20 Jan 2025 16:48:59 +0530 Subject: [PATCH] Refactor database and add migration * `AppDatabase`: Updated to use room migration. * `CommonsApplicationModule`: added migration from version 19 to 20 to `appDatabase` --- .../fr/free/nrw/commons/db/AppDatabase.kt | 4 ++ .../commons/di/CommonsApplicationModule.kt | 46 ++++++++++++++++++- 2 files changed, 49 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/fr/free/nrw/commons/db/AppDatabase.kt b/app/src/main/java/fr/free/nrw/commons/db/AppDatabase.kt index d51e53dbe..74ec9bc89 100644 --- a/app/src/main/java/fr/free/nrw/commons/db/AppDatabase.kt +++ b/app/src/main/java/fr/free/nrw/commons/db/AppDatabase.kt @@ -1,8 +1,12 @@ package fr.free.nrw.commons.db +import android.content.Context import androidx.room.Database +import androidx.room.Room import androidx.room.RoomDatabase import androidx.room.TypeConverters +import androidx.room.migration.Migration +import androidx.sqlite.db.SupportSQLiteDatabase import fr.free.nrw.commons.bookmarks.category.BookmarkCategoriesDao import fr.free.nrw.commons.bookmarks.category.BookmarksCategoryModal import fr.free.nrw.commons.bookmarks.locations.BookmarkLocationsDao diff --git a/app/src/main/java/fr/free/nrw/commons/di/CommonsApplicationModule.kt b/app/src/main/java/fr/free/nrw/commons/di/CommonsApplicationModule.kt index b25998ee5..d777f1a56 100644 --- a/app/src/main/java/fr/free/nrw/commons/di/CommonsApplicationModule.kt +++ b/app/src/main/java/fr/free/nrw/commons/di/CommonsApplicationModule.kt @@ -192,7 +192,10 @@ open class CommonsApplicationModule(private val applicationContext: Context) { applicationContext, AppDatabase::class.java, "commons_room.db" - ).addMigrations(MIGRATION_1_2).fallbackToDestructiveMigration().build() + ).addMigrations( + MIGRATION_1_2, + MIGRATION_19_TO_20 + ).fallbackToDestructiveMigration().build() @Provides fun providesContributionsDao(appDatabase: AppDatabase): ContributionDao = @@ -246,5 +249,46 @@ open class CommonsApplicationModule(private val applicationContext: Context) { ) } } + + private val MIGRATION_19_TO_20 = object : Migration(19, 20) { + override fun migrate(db: SupportSQLiteDatabase) { + db.execSQL( + """ + CREATE TABLE IF NOT EXISTS bookmarks_locations ( + location_name TEXT NOT NULL PRIMARY KEY, + location_language TEXT NOT NULL, + location_description TEXT NOT NULL, + location_lat REAL NOT NULL, + location_long REAL NOT NULL, + location_category TEXT NOT NULL, + location_label_text TEXT NOT NULL, + location_label_icon INTEGER, + location_image_url TEXT NOT NULL, + location_wikipedia_link TEXT NOT NULL, + location_wikidata_link TEXT NOT NULL, + location_commons_link TEXT NOT NULL, + location_pic TEXT NOT NULL, + location_exists INTEGER NOT NULL CHECK(location_exists IN (0, 1)) + ) + """ + ) + db.execSQL(""" + INSERT INTO bookmarks_locations ( + location_name, location_language, location_description, location_category, + location_label_text, location_label_icon, location_lat, location_long, + location_image_url, location_wikipedia_link, location_wikidata_link, + location_commons_link, location_pic, location_exists + ) + SELECT + location_name, location_language, location_description, location_category, + location_label_text, location_label_icon, location_lat, location_long, + location_image_url, location_wikipedia_link, location_wikidata_link, + location_commons_link, location_pic, location_exists + FROM bookmarksLocations + """) + + db.execSQL("DROP TABLE IF EXISTS bookmarkLocations") + } + } } }