diff --git a/lib/src/main/kotlin/com/dbflow5/database/AndroidSQLiteOpenHelper.kt b/lib/src/main/kotlin/com/dbflow5/database/AndroidSQLiteOpenHelper.kt index 894f44a9e..642c3f551 100644 --- a/lib/src/main/kotlin/com/dbflow5/database/AndroidSQLiteOpenHelper.kt +++ b/lib/src/main/kotlin/com/dbflow5/database/AndroidSQLiteOpenHelper.kt @@ -11,25 +11,25 @@ import com.dbflow5.config.OpenHelperCreator */ open class AndroidSQLiteOpenHelper( private val context: Context, - databaseDefinition: DBFlowDatabase, + dbFlowDatabase: DBFlowDatabase, listener: DatabaseCallback?, - private val databaseHelperDelegate: DatabaseHelperDelegate = DatabaseHelperDelegate(context, listener, databaseDefinition, - if (databaseDefinition.backupEnabled()) { + private val databaseHelperDelegate: DatabaseHelperDelegate = DatabaseHelperDelegate(context, listener, dbFlowDatabase, + if (dbFlowDatabase.backupEnabled()) { // Temp database mirrors existing BackupHelper(context, - DatabaseHelperDelegate.getTempDbFileName(databaseDefinition), - databaseDefinition.databaseVersion, databaseDefinition) + DatabaseHelperDelegate.getTempDbFileName(dbFlowDatabase), + dbFlowDatabase.databaseVersion, dbFlowDatabase) } else null), ) : SQLiteOpenHelper( context, - if (databaseDefinition.isInMemory) null else databaseDefinition.databaseFileName, + if (dbFlowDatabase.isInMemory) null else dbFlowDatabase.databaseFileName, null, - databaseDefinition.databaseVersion, + dbFlowDatabase.databaseVersion, ), OpenHelper, OpenHelperDelegate by databaseHelperDelegate { private var androidDatabase: AndroidDatabase? = null - private val _databaseName = databaseDefinition.databaseFileName + private val _databaseName = dbFlowDatabase.databaseFileName override val database: DatabaseWrapper get() { diff --git a/lib/src/main/kotlin/com/dbflow5/database/DatabaseHelper.kt b/lib/src/main/kotlin/com/dbflow5/database/DatabaseHelper.kt index 5fff15987..cd1f52314 100644 --- a/lib/src/main/kotlin/com/dbflow5/database/DatabaseHelper.kt +++ b/lib/src/main/kotlin/com/dbflow5/database/DatabaseHelper.kt @@ -25,7 +25,9 @@ open class DatabaseHelper(private val migrationFileHelper: MigrationFileHelper, executeTableCreations(db) // execute any initial migrations when DB is first created. - executeMigrations(db, -1, db.version) + // use the databaseversion of the definition, since onupgrade is not called oncreate on a version 0 + // then SQLCipher and Android set the DB to that version you choose. + executeMigrations(db, -1, databaseDefinition.databaseVersion) // views reflect current db state. executeViewCreations(db) diff --git a/lib/src/main/kotlin/com/dbflow5/database/DatabaseHelperDelegate.kt b/lib/src/main/kotlin/com/dbflow5/database/DatabaseHelperDelegate.kt index 89dbe0db2..51b58b467 100644 --- a/lib/src/main/kotlin/com/dbflow5/database/DatabaseHelperDelegate.kt +++ b/lib/src/main/kotlin/com/dbflow5/database/DatabaseHelperDelegate.kt @@ -125,7 +125,6 @@ class DatabaseHelperDelegate( context.assets.open(prepackagedName) } writeDB(dbPath, inputStream) - databaseDefinition.reopen() } catch (e: IOException) { FlowLog.log(FlowLog.Level.W, "Failed to open file", e) } diff --git a/tests/src/androidTest/java/com/dbflow5/prepackaged/PrepackagedDB.kt b/tests/src/androidTest/java/com/dbflow5/prepackaged/PrepackagedDB.kt index 46f975d55..e374d5a4f 100644 --- a/tests/src/androidTest/java/com/dbflow5/prepackaged/PrepackagedDB.kt +++ b/tests/src/androidTest/java/com/dbflow5/prepackaged/PrepackagedDB.kt @@ -2,23 +2,49 @@ package com.dbflow5.prepackaged import com.dbflow5.annotation.Column import com.dbflow5.annotation.Database +import com.dbflow5.annotation.Migration import com.dbflow5.annotation.PrimaryKey import com.dbflow5.annotation.Table import com.dbflow5.config.DBFlowDatabase +import com.dbflow5.database.DatabaseWrapper +import com.dbflow5.migration.AlterTableMigration +import com.dbflow5.migration.BaseMigration +import com.dbflow5.sql.SQLiteType import com.dbflow5.structure.BaseModel @Database(version = 1) abstract class PrepackagedDB : DBFlowDatabase() -@Table(database = PrepackagedDB::class, allFields = true) -class Dog : BaseModel() { +@Database(version = 2) +abstract class MigratedPrepackagedDB : DBFlowDatabase() { + + @Migration(version = 2, database = MigratedPrepackagedDB::class, priority = 1) + class AddNewFieldMigration : AlterTableMigration(Dog2::class) { + override fun onPreMigrate() { + addColumn(SQLiteType.TEXT, "newField") + } + } - @PrimaryKey - var id: Int = 0 + @Migration(version = 2, database = MigratedPrepackagedDB::class, priority = 2) + class AddSomeDataMigration : BaseMigration() { + override fun migrate(database: DatabaseWrapper) { + Dog2(breed = "NewBreed", newField = "New Field Data").insert(database) + } + } - @Column - var breed: String? = null +} + +@Table(database = PrepackagedDB::class, allFields = true) +class Dog( + @PrimaryKey var id: Int = 0, + @Column var breed: String? = null, + @Column var color: String? = null, +) : BaseModel() - @Column - var color: String? = null -} \ No newline at end of file +@Table(database = MigratedPrepackagedDB::class, allFields = true, name = "Dog") +class Dog2( + @PrimaryKey var id: Int = 0, + @Column var breed: String? = null, + @Column var color: String? = null, + @Column var newField: String? = null, +) : BaseModel() diff --git a/tests/src/androidTest/java/com/dbflow5/prepackaged/PrepackagedDBTest.kt b/tests/src/androidTest/java/com/dbflow5/prepackaged/PrepackagedDBTest.kt index e1eb8709d..fdabc51c6 100644 --- a/tests/src/androidTest/java/com/dbflow5/prepackaged/PrepackagedDBTest.kt +++ b/tests/src/androidTest/java/com/dbflow5/prepackaged/PrepackagedDBTest.kt @@ -1,21 +1,50 @@ package com.dbflow5.prepackaged -import com.dbflow5.BaseUnitTest -import com.dbflow5.config.databaseForTable +import com.dbflow5.DBFlowInstrumentedTestRule +import com.dbflow5.DemoApp +import com.dbflow5.config.database +import com.dbflow5.database.AndroidSQLiteOpenHelper import com.dbflow5.query.select import org.junit.Assert.assertTrue +import org.junit.Rule import org.junit.Test /** * Description: Asserts our prepackaged DB loads. */ -class PrepackagedDBTest : BaseUnitTest() { +class PrepackagedDBTest { + + @JvmField + @Rule + var dblflowTestRule = DBFlowInstrumentedTestRule.create { + database({ + databaseName("prepackaged") + }, AndroidSQLiteOpenHelper.createHelperCreator(DemoApp.context)) + database({ + databaseName("prepackaged_2") + }, AndroidSQLiteOpenHelper.createHelperCreator(DemoApp.context)) + } @Test fun assertWeCanLoadFromDB() { - databaseForTable { dbFlowDatabase -> - val list = (select from Dog::class).queryList(dbFlowDatabase) - assertTrue(!list.isEmpty()) + database { db -> + val list = (select from Dog::class).queryList(db) + assertTrue(list.isNotEmpty()) + } + } + + @Test + fun assertWeCanLoadFromDBPostMigrate() { + database { db -> + val list = (select from Dog2::class).queryList(db) + assertTrue(list.isNotEmpty()) + + val newData = (select + from Dog2::class + where Dog2_Table.breed.eq("NewBreed") + and Dog2_Table.newField.eq("New Field Data")) + .querySingle(db) + assertTrue(newData != null) } } } diff --git a/tests/src/main/assets/prepackaged_2.db b/tests/src/main/assets/prepackaged_2.db new file mode 100644 index 000000000..f2d1c851b Binary files /dev/null and b/tests/src/main/assets/prepackaged_2.db differ