FairEmail/app/src/main/java/androidx/room/DatabaseConfiguration.kt

681 lines
30 KiB
Kotlin

/*
* Copyright (C) 2016 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package androidx.room
import android.annotation.SuppressLint
import android.content.Context
import android.content.Intent
import androidx.annotation.RestrictTo
import androidx.room.migration.AutoMigrationSpec
import androidx.sqlite.db.SupportSQLiteOpenHelper
import java.io.File
import java.io.InputStream
import java.util.concurrent.Callable
import java.util.concurrent.Executor
/**
* Configuration class for a [RoomDatabase].
*/
@Suppress("UNUSED_PARAMETER")
open class DatabaseConfiguration @SuppressLint("LambdaLast")
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
constructor(
/**
* The context to use while connecting to the database.
*/
@JvmField
val context: Context,
/**
* The name of the database file or null if it is an in-memory database.
*/
@JvmField
val name: String?,
/**
* The factory to use to access the database.
*/
@JvmField
val sqliteOpenHelperFactory: SupportSQLiteOpenHelper.Factory,
/**
* Collection of available migrations.
*/
@JvmField
val migrationContainer: RoomDatabase.MigrationContainer,
@JvmField
val callbacks: List<RoomDatabase.Callback>?,
/**
* Whether Room should throw an exception for queries run on the main thread.
*/
@JvmField
val allowMainThreadQueries: Boolean,
/**
* The journal mode for this database.
*/
@JvmField
val journalMode: RoomDatabase.JournalMode,
/**
* The Executor used to execute asynchronous queries.
*/
@JvmField
val queryExecutor: Executor,
/**
* The Executor used to execute asynchronous transactions.
*/
@JvmField
val transactionExecutor: Executor,
/**
* Intent that should be bound to acquire the invalidation service or `null` if not used.
*
* @see [multiInstanceInvalidation]
*/
@field:RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
@JvmField
val multiInstanceInvalidationServiceIntent: Intent?,
@JvmField
val requireMigration: Boolean,
@JvmField
val allowDestructiveMigrationOnDowngrade: Boolean,
private val migrationNotRequiredFrom: Set<Int>?,
@JvmField
val copyFromAssetPath: String?,
@JvmField
val copyFromFile: File?,
@JvmField
val copyFromInputStream: Callable<InputStream>?,
@JvmField
val prepackagedDatabaseCallback: RoomDatabase.PrepackagedDatabaseCallback?,
@JvmField
val typeConverters: List<Any>,
@JvmField
val autoMigrationSpecs: List<AutoMigrationSpec>
) {
/**
* If true, table invalidation in an instance of [RoomDatabase] is broadcast and
* synchronized with other instances of the same [RoomDatabase] file, including those
* in a separate process.
*/
@JvmField
val multiInstanceInvalidation: Boolean = multiInstanceInvalidationServiceIntent != null
/**
* Creates a database configuration with the given values.
*
* @param context The application context.
* @param name Name of the database, can be null if it is in memory.
* @param sqliteOpenHelperFactory The open helper factory to use.
* @param migrationContainer The migration container for migrations.
* @param callbacks The list of callbacks for database events.
* @param allowMainThreadQueries Whether to allow main thread reads/writes or not.
* @param journalMode The journal mode. This has to be either TRUNCATE or WRITE_AHEAD_LOGGING.
* @param queryExecutor The Executor used to execute asynchronous queries.
* @param requireMigration True if Room should require a valid migration if version changes,
* instead of recreating the tables.
* @param migrationNotRequiredFrom The collection of schema versions from which migrations
* aren't required.
*
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
@Deprecated(
"This constructor is deprecated.",
ReplaceWith("DatabaseConfiguration(Context, String, " +
"SupportSQLiteOpenHelper.Factory, RoomDatabase.MigrationContainer, " +
"List, boolean, RoomDatabase.JournalMode, Executor, Executor, Intent, boolean, " +
"boolean, Set, String, File, Callable, RoomDatabase.PrepackagedDatabaseCallback, " +
"List, List)")
)
constructor(
context: Context,
name: String?,
sqliteOpenHelperFactory: SupportSQLiteOpenHelper.Factory,
migrationContainer: RoomDatabase.MigrationContainer,
callbacks: List<RoomDatabase.Callback>?,
allowMainThreadQueries: Boolean,
journalMode: RoomDatabase.JournalMode,
queryExecutor: Executor,
requireMigration: Boolean,
migrationNotRequiredFrom: Set<Int>?
) : this(
context = context,
name = name,
sqliteOpenHelperFactory = sqliteOpenHelperFactory,
migrationContainer = migrationContainer,
callbacks = callbacks,
allowMainThreadQueries = allowMainThreadQueries,
journalMode = journalMode,
queryExecutor = queryExecutor,
transactionExecutor = queryExecutor,
multiInstanceInvalidationServiceIntent = null,
allowDestructiveMigrationOnDowngrade = false,
requireMigration = requireMigration,
migrationNotRequiredFrom = migrationNotRequiredFrom,
copyFromAssetPath = null,
copyFromFile = null,
prepackagedDatabaseCallback = null,
copyFromInputStream = null,
typeConverters = emptyList(),
autoMigrationSpecs = emptyList()
)
/**
* Creates a database configuration with the given values.
*
* @param context The application context.
* @param name Name of the database, can be null if it is in memory.
* @param sqliteOpenHelperFactory The open helper factory to use.
* @param migrationContainer The migration container for migrations.
* @param callbacks The list of callbacks for database events.
* @param allowMainThreadQueries Whether to allow main thread reads/writes or not.
* @param journalMode The journal mode. This has to be either TRUNCATE or WRITE_AHEAD_LOGGING.
* @param queryExecutor The Executor used to execute asynchronous queries.
* @param transactionExecutor The Executor used to execute asynchronous transactions.
* @param multiInstanceInvalidation True if Room should perform multi-instance invalidation.
* @param requireMigration True if Room should require a valid migration if version changes,
* @param allowDestructiveMigrationOnDowngrade True if Room should recreate tables if no
* migration is supplied during a downgrade.
* @param migrationNotRequiredFrom The collection of schema versions from which migrations
* aren't required.
*
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
@Deprecated(
"This constructor is deprecated.",
ReplaceWith("DatabaseConfiguration(Context, String, " +
"SupportSQLiteOpenHelper.Factory, RoomDatabase.MigrationContainer, " +
"List, boolean, RoomDatabase.JournalMode, Executor, Executor, Intent, boolean, " +
"boolean, Set, String, File, Callable, RoomDatabase.PrepackagedDatabaseCallback, " +
"List, List)")
)
constructor(
context: Context,
name: String?,
sqliteOpenHelperFactory: SupportSQLiteOpenHelper.Factory,
migrationContainer: RoomDatabase.MigrationContainer,
callbacks: List<RoomDatabase.Callback>?,
allowMainThreadQueries: Boolean,
journalMode: RoomDatabase.JournalMode,
queryExecutor: Executor,
transactionExecutor: Executor,
multiInstanceInvalidation: Boolean,
requireMigration: Boolean,
allowDestructiveMigrationOnDowngrade: Boolean,
migrationNotRequiredFrom: Set<Int>?
) : this(
context = context,
name = name,
sqliteOpenHelperFactory = sqliteOpenHelperFactory,
migrationContainer = migrationContainer,
callbacks = callbacks,
allowMainThreadQueries = allowMainThreadQueries,
journalMode = journalMode,
queryExecutor = queryExecutor,
transactionExecutor = transactionExecutor,
multiInstanceInvalidationServiceIntent = if (multiInstanceInvalidation) Intent(
context,
MultiInstanceInvalidationService::class.java
) else null,
allowDestructiveMigrationOnDowngrade = allowDestructiveMigrationOnDowngrade,
requireMigration = requireMigration,
migrationNotRequiredFrom = migrationNotRequiredFrom,
copyFromAssetPath = null,
copyFromFile = null,
prepackagedDatabaseCallback = null,
copyFromInputStream = null,
typeConverters = emptyList(),
autoMigrationSpecs = emptyList()
)
/**
* Creates a database configuration with the given values.
*
* @param context The application context.
* @param name Name of the database, can be null if it is in memory.
* @param sqliteOpenHelperFactory The open helper factory to use.
* @param migrationContainer The migration container for migrations.
* @param callbacks The list of callbacks for database events.
* @param allowMainThreadQueries Whether to allow main thread reads/writes or not.
* @param journalMode The journal mode. This has to be either TRUNCATE or WRITE_AHEAD_LOGGING.
* @param queryExecutor The Executor used to execute asynchronous queries.
* @param transactionExecutor The Executor used to execute asynchronous transactions.
* @param multiInstanceInvalidation True if Room should perform multi-instance invalidation.
* @param requireMigration True if Room should require a valid migration if version changes,
* @param allowDestructiveMigrationOnDowngrade True if Room should recreate tables if no
* migration is supplied during a downgrade.
* @param migrationNotRequiredFrom The collection of schema versions from which migrations
* aren't required.
* @param copyFromAssetPath The assets path to the pre-packaged database.
* @param copyFromFile The pre-packaged database file.
*
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
@Deprecated(
"This constructor is deprecated.",
ReplaceWith("DatabaseConfiguration(Context, String, " +
"SupportSQLiteOpenHelper.Factory, RoomDatabase.MigrationContainer, " +
"List, boolean, RoomDatabase.JournalMode, Executor, Executor, Intent, boolean, " +
"boolean, Set, String, File, Callable, RoomDatabase.PrepackagedDatabaseCallback, " +
"List, List)")
)
constructor(
context: Context,
name: String?,
sqliteOpenHelperFactory: SupportSQLiteOpenHelper.Factory,
migrationContainer: RoomDatabase.MigrationContainer,
callbacks: List<RoomDatabase.Callback>?,
allowMainThreadQueries: Boolean,
journalMode: RoomDatabase.JournalMode,
queryExecutor: Executor,
transactionExecutor: Executor,
multiInstanceInvalidation: Boolean,
requireMigration: Boolean,
allowDestructiveMigrationOnDowngrade: Boolean,
migrationNotRequiredFrom: Set<Int>?,
copyFromAssetPath: String?,
copyFromFile: File?
) : this(
context = context,
name = name,
sqliteOpenHelperFactory = sqliteOpenHelperFactory,
migrationContainer = migrationContainer,
callbacks = callbacks,
allowMainThreadQueries = allowMainThreadQueries,
journalMode = journalMode,
queryExecutor = queryExecutor,
transactionExecutor = transactionExecutor,
multiInstanceInvalidationServiceIntent = if (multiInstanceInvalidation) Intent(
context,
MultiInstanceInvalidationService::class.java
) else null,
allowDestructiveMigrationOnDowngrade = allowDestructiveMigrationOnDowngrade,
requireMigration = requireMigration,
migrationNotRequiredFrom = migrationNotRequiredFrom,
copyFromAssetPath = copyFromAssetPath,
copyFromFile = copyFromFile,
prepackagedDatabaseCallback = null,
copyFromInputStream = null,
typeConverters = emptyList(),
autoMigrationSpecs = emptyList()
)
/**
* Creates a database configuration with the given values.
*
* @param context The application context.
* @param name Name of the database, can be null if it is in memory.
* @param sqliteOpenHelperFactory The open helper factory to use.
* @param migrationContainer The migration container for migrations.
* @param callbacks The list of callbacks for database events.
* @param allowMainThreadQueries Whether to allow main thread reads/writes or not.
* @param journalMode The journal mode. This has to be either TRUNCATE or WRITE_AHEAD_LOGGING.
* @param queryExecutor The Executor used to execute asynchronous queries.
* @param transactionExecutor The Executor used to execute asynchronous transactions.
* @param multiInstanceInvalidation True if Room should perform multi-instance invalidation.
* @param requireMigration True if Room should require a valid migration if version changes,
* @param allowDestructiveMigrationOnDowngrade True if Room should recreate tables if no
* migration is supplied during a downgrade.
* @param migrationNotRequiredFrom The collection of schema versions from which migrations
* aren't required.
* @param copyFromAssetPath The assets path to the pre-packaged database.
* @param copyFromFile The pre-packaged database file.
* @param copyFromInputStream The callable to get the input stream from which a
* pre-package database file will be copied from.
*
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
@Deprecated(
"This constructor is deprecated.",
ReplaceWith("DatabaseConfiguration(Context, String, " +
"SupportSQLiteOpenHelper.Factory, RoomDatabase.MigrationContainer, " +
"List, boolean, RoomDatabase.JournalMode, Executor, Executor, Intent, boolean, " +
"boolean, Set, String, File, Callable, RoomDatabase.PrepackagedDatabaseCallback, " +
"List, List)")
)
constructor(
context: Context,
name: String?,
sqliteOpenHelperFactory: SupportSQLiteOpenHelper.Factory,
migrationContainer: RoomDatabase.MigrationContainer,
callbacks: List<RoomDatabase.Callback>?,
allowMainThreadQueries: Boolean,
journalMode: RoomDatabase.JournalMode,
queryExecutor: Executor,
transactionExecutor: Executor,
multiInstanceInvalidation: Boolean,
requireMigration: Boolean,
allowDestructiveMigrationOnDowngrade: Boolean,
migrationNotRequiredFrom: Set<Int>?,
copyFromAssetPath: String?,
copyFromFile: File?,
copyFromInputStream: Callable<InputStream>?
) : this(
context = context,
name = name,
sqliteOpenHelperFactory = sqliteOpenHelperFactory,
migrationContainer = migrationContainer,
callbacks = callbacks,
allowMainThreadQueries = allowMainThreadQueries,
journalMode = journalMode,
queryExecutor = queryExecutor,
transactionExecutor = transactionExecutor,
multiInstanceInvalidationServiceIntent = if (multiInstanceInvalidation) Intent(
context,
MultiInstanceInvalidationService::class.java
) else null,
allowDestructiveMigrationOnDowngrade = allowDestructiveMigrationOnDowngrade,
requireMigration = requireMigration,
migrationNotRequiredFrom = migrationNotRequiredFrom,
copyFromAssetPath = copyFromAssetPath,
copyFromFile = copyFromFile,
prepackagedDatabaseCallback = null,
copyFromInputStream = copyFromInputStream,
typeConverters = emptyList(),
autoMigrationSpecs = emptyList()
)
/**
* Creates a database configuration with the given values.
*
* @param context The application context.
* @param name Name of the database, can be null if it is in memory.
* @param sqliteOpenHelperFactory The open helper factory to use.
* @param migrationContainer The migration container for migrations.
* @param callbacks The list of callbacks for database events.
* @param allowMainThreadQueries Whether to allow main thread reads/writes or not.
* @param journalMode The journal mode. This has to be either TRUNCATE or WRITE_AHEAD_LOGGING.
* @param queryExecutor The Executor used to execute asynchronous queries.
* @param transactionExecutor The Executor used to execute asynchronous transactions.
* @param multiInstanceInvalidation True if Room should perform multi-instance invalidation.
* @param requireMigration True if Room should require a valid migration if version changes,
* @param allowDestructiveMigrationOnDowngrade True if Room should recreate tables if no
* migration is supplied during a downgrade.
* @param migrationNotRequiredFrom The collection of schema versions from which migrations
* aren't required.
* @param copyFromAssetPath The assets path to the pre-packaged database.
* @param copyFromFile The pre-packaged database file.
* @param copyFromInputStream The callable to get the input stream from which a
* pre-package database file will be copied from.
* @param prepackagedDatabaseCallback The pre-packaged callback.
*
*/
@SuppressLint("LambdaLast")
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
@Deprecated(
"This constructor is deprecated.",
ReplaceWith("DatabaseConfiguration(Context, String, " +
"SupportSQLiteOpenHelper.Factory, RoomDatabase.MigrationContainer, " +
"List, boolean, RoomDatabase.JournalMode, Executor, Executor, Intent, boolean, " +
"boolean, Set, String, File, Callable, RoomDatabase.PrepackagedDatabaseCallback, " +
"List, List)")
)
constructor(
context: Context,
name: String?,
sqliteOpenHelperFactory: SupportSQLiteOpenHelper.Factory,
migrationContainer: RoomDatabase.MigrationContainer,
callbacks: List<RoomDatabase.Callback>?,
allowMainThreadQueries: Boolean,
journalMode: RoomDatabase.JournalMode,
queryExecutor: Executor,
transactionExecutor: Executor,
multiInstanceInvalidation: Boolean,
requireMigration: Boolean,
allowDestructiveMigrationOnDowngrade: Boolean,
migrationNotRequiredFrom: Set<Int>?,
copyFromAssetPath: String?,
copyFromFile: File?,
copyFromInputStream: Callable<InputStream>?,
prepackagedDatabaseCallback: RoomDatabase.PrepackagedDatabaseCallback?
) : this(
context = context,
name = name,
sqliteOpenHelperFactory = sqliteOpenHelperFactory,
migrationContainer = migrationContainer,
callbacks = callbacks,
allowMainThreadQueries = allowMainThreadQueries,
journalMode = journalMode,
queryExecutor = queryExecutor,
transactionExecutor = transactionExecutor,
multiInstanceInvalidationServiceIntent = if (multiInstanceInvalidation) Intent(
context,
MultiInstanceInvalidationService::class.java
) else null,
allowDestructiveMigrationOnDowngrade = allowDestructiveMigrationOnDowngrade,
requireMigration = requireMigration,
migrationNotRequiredFrom = migrationNotRequiredFrom,
copyFromAssetPath = copyFromAssetPath,
copyFromFile = copyFromFile,
prepackagedDatabaseCallback = prepackagedDatabaseCallback,
copyFromInputStream = copyFromInputStream,
typeConverters = emptyList(),
autoMigrationSpecs = emptyList()
)
/**
* Creates a database configuration with the given values.
*
* @param context The application context.
* @param name Name of the database, can be null if it is in memory.
* @param sqliteOpenHelperFactory The open helper factory to use.
* @param migrationContainer The migration container for migrations.
* @param callbacks The list of callbacks for database events.
* @param allowMainThreadQueries Whether to allow main thread reads/writes or not.
* @param journalMode The journal mode. This has to be either TRUNCATE or WRITE_AHEAD_LOGGING.
* @param queryExecutor The Executor used to execute asynchronous queries.
* @param transactionExecutor The Executor used to execute asynchronous transactions.
* @param multiInstanceInvalidation True if Room should perform multi-instance invalidation.
* @param requireMigration True if Room should require a valid migration if version changes,
* @param allowDestructiveMigrationOnDowngrade True if Room should recreate tables if no
* migration is supplied during a downgrade.
* @param migrationNotRequiredFrom The collection of schema versions from which migrations
* aren't required.
* @param copyFromAssetPath The assets path to the pre-packaged database.
* @param copyFromFile The pre-packaged database file.
* @param copyFromInputStream The callable to get the input stream from which a
* pre-package database file will be copied from.
* @param prepackagedDatabaseCallback The pre-packaged callback.
* @param typeConverters The type converters.
*
*/
@SuppressLint("LambdaLast")
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
@Deprecated(
"This constructor is deprecated.",
ReplaceWith("DatabaseConfiguration(Context, String, " +
"SupportSQLiteOpenHelper.Factory, RoomDatabase.MigrationContainer, " +
"List, boolean, RoomDatabase.JournalMode, Executor, Executor, Intent, boolean, " +
"boolean, Set, String, File, Callable, RoomDatabase.PrepackagedDatabaseCallback, " +
"List, List)")
)
constructor(
context: Context,
name: String?,
sqliteOpenHelperFactory: SupportSQLiteOpenHelper.Factory,
migrationContainer: RoomDatabase.MigrationContainer,
callbacks: List<RoomDatabase.Callback>?,
allowMainThreadQueries: Boolean,
journalMode: RoomDatabase.JournalMode,
queryExecutor: Executor,
transactionExecutor: Executor,
multiInstanceInvalidation: Boolean,
requireMigration: Boolean,
allowDestructiveMigrationOnDowngrade: Boolean,
migrationNotRequiredFrom: Set<Int>?,
copyFromAssetPath: String?,
copyFromFile: File?,
copyFromInputStream: Callable<InputStream>?,
prepackagedDatabaseCallback: RoomDatabase.PrepackagedDatabaseCallback?,
typeConverters: List<Any>
) : this(
context = context,
name = name,
sqliteOpenHelperFactory = sqliteOpenHelperFactory,
migrationContainer = migrationContainer,
callbacks = callbacks,
allowMainThreadQueries = allowMainThreadQueries,
journalMode = journalMode,
queryExecutor = queryExecutor,
transactionExecutor = transactionExecutor,
multiInstanceInvalidationServiceIntent = if (multiInstanceInvalidation) Intent(
context,
MultiInstanceInvalidationService::class.java
) else null,
allowDestructiveMigrationOnDowngrade = allowDestructiveMigrationOnDowngrade,
requireMigration = requireMigration,
migrationNotRequiredFrom = migrationNotRequiredFrom,
copyFromAssetPath = copyFromAssetPath,
copyFromFile = copyFromFile,
prepackagedDatabaseCallback = prepackagedDatabaseCallback,
copyFromInputStream = copyFromInputStream,
typeConverters = typeConverters,
autoMigrationSpecs = emptyList()
)
/**
* Creates a database configuration with the given values.
*
* @param context The application context.
* @param name Name of the database, can be null if it is in memory.
* @param sqliteOpenHelperFactory The open helper factory to use.
* @param migrationContainer The migration container for migrations.
* @param callbacks The list of callbacks for database events.
* @param allowMainThreadQueries Whether to allow main thread reads/writes or not.
* @param journalMode The journal mode. This has to be either TRUNCATE or WRITE_AHEAD_LOGGING.
* @param queryExecutor The Executor used to execute asynchronous queries.
* @param transactionExecutor The Executor used to execute asynchronous transactions.
* @param multiInstanceInvalidation True if Room should perform multi-instance invalidation.
* @param requireMigration True if Room should require a valid migration if version changes,
* @param allowDestructiveMigrationOnDowngrade True if Room should recreate tables if no
* migration is supplied during a downgrade.
* @param migrationNotRequiredFrom The collection of schema versions from which migrations
* aren't required.
* @param copyFromAssetPath The assets path to the pre-packaged database.
* @param copyFromFile The pre-packaged database file.
* @param copyFromInputStream The callable to get the input stream from which a
* pre-package database file will be copied from.
* @param prepackagedDatabaseCallback The pre-packaged callback.
* @param typeConverters The type converters.
* @param autoMigrationSpecs The auto migration specs.
*
*/
@SuppressLint("LambdaLast")
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
@Deprecated(
"This constructor is deprecated.",
ReplaceWith("DatabaseConfiguration(Context, String, " +
"SupportSQLiteOpenHelper.Factory, RoomDatabase.MigrationContainer, " +
"List, boolean, RoomDatabase.JournalMode, Executor, Executor, Intent, boolean, " +
"boolean, Set, String, File, Callable, RoomDatabase.PrepackagedDatabaseCallback, " +
"List, List)")
)
constructor(
context: Context,
name: String?,
sqliteOpenHelperFactory: SupportSQLiteOpenHelper.Factory,
migrationContainer: RoomDatabase.MigrationContainer,
callbacks: List<RoomDatabase.Callback>?,
allowMainThreadQueries: Boolean,
journalMode: RoomDatabase.JournalMode,
queryExecutor: Executor,
transactionExecutor: Executor,
multiInstanceInvalidation: Boolean,
requireMigration: Boolean,
allowDestructiveMigrationOnDowngrade: Boolean,
migrationNotRequiredFrom: Set<Int>?,
copyFromAssetPath: String?,
copyFromFile: File?,
copyFromInputStream: Callable<InputStream>?,
prepackagedDatabaseCallback: RoomDatabase.PrepackagedDatabaseCallback?,
typeConverters: List<Any>,
autoMigrationSpecs: List<AutoMigrationSpec>
) : this(
context = context,
name = name,
sqliteOpenHelperFactory = sqliteOpenHelperFactory,
migrationContainer = migrationContainer,
callbacks = callbacks,
allowMainThreadQueries = allowMainThreadQueries,
journalMode = journalMode,
queryExecutor = queryExecutor,
transactionExecutor = transactionExecutor,
multiInstanceInvalidationServiceIntent = if (multiInstanceInvalidation) Intent(
context,
MultiInstanceInvalidationService::class.java
) else null,
allowDestructiveMigrationOnDowngrade = allowDestructiveMigrationOnDowngrade,
requireMigration = requireMigration,
migrationNotRequiredFrom = migrationNotRequiredFrom,
copyFromAssetPath = copyFromAssetPath,
copyFromFile = copyFromFile,
prepackagedDatabaseCallback = null,
copyFromInputStream = copyFromInputStream,
typeConverters = typeConverters,
autoMigrationSpecs = autoMigrationSpecs
)
/**
* Returns whether a migration is required from the specified version.
*
* @param version The schema version.
* @return True if a valid migration is required, false otherwise.
*
*/
@Deprecated(
"""Use [isMigrationRequired(int, int)] which takes
[allowDestructiveMigrationOnDowngrade] into account.""",
ReplaceWith("isMigrationRequired(version, version + 1)")
)
open fun isMigrationRequiredFrom(version: Int): Boolean {
return isMigrationRequired(version, version + 1)
}
/**
* Returns whether a migration is required between two versions.
*
* @param fromVersion The old schema version.
* @param toVersion The new schema version.
* @return True if a valid migration is required, false otherwise.
*/
open fun isMigrationRequired(fromVersion: Int, toVersion: Int): Boolean {
// Migrations are not required if its a downgrade AND destructive migration during downgrade
// has been allowed.
val isDowngrade = fromVersion > toVersion
if (isDowngrade && allowDestructiveMigrationOnDowngrade) {
return false
} else {
// Migrations are required between the two versions if we generally require migrations
// AND EITHER there are no exceptions OR the supplied fromVersion is not one of the
// exceptions.
return requireMigration && (migrationNotRequiredFrom == null ||
!migrationNotRequiredFrom.contains(fromVersion))
}
}
}