public class

DatabaseConfiguration

extends java.lang.Object

 java.lang.Object

↳androidx.room.DatabaseConfiguration

Gradle dependencies

compile group: 'androidx.room', name: 'room-runtime', version: '2.5.0-alpha01'

  • groupId: androidx.room
  • artifactId: room-runtime
  • version: 2.5.0-alpha01

Artifact androidx.room:room-runtime:2.5.0-alpha01 it located at Google repository (https://maven.google.com/)

Androidx artifact mapping:

androidx.room:room-runtime android.arch.persistence.room:runtime

Androidx class mapping:

androidx.room.DatabaseConfiguration android.arch.persistence.room.DatabaseConfiguration

Overview

Configuration class for a RoomDatabase.

Summary

Fields
public final booleanallowDestructiveMigrationOnDowngrade

If true, Room should perform a destructive migration when downgrading without an available migration.

public final booleanallowMainThreadQueries

Whether Room should throw an exception for queries run on the main thread.

public final java.util.List<AutoMigrationSpec>autoMigrationSpecs

public final java.util.List<RoomDatabase.Callback>callbacks

public final Contextcontext

The context to use while connecting to the database.

public final java.lang.StringcopyFromAssetPath

The assets path to a pre-packaged database to copy from.

public final java.io.FilecopyFromFile

The pre-packaged database file to copy from.

public final java.util.concurrent.Callable<java.io.InputStream>copyFromInputStream

The callable to get the input stream from which a pre-package database file will be copied from.

public final RoomDatabase.JournalModejournalMode

The journal mode for this database.

public final RoomDatabase.MigrationContainermigrationContainer

Collection of available migrations.

public final booleanmultiInstanceInvalidation

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.

public final IntentmultiInstanceInvalidationServiceIntent

Intent that should be bound to acquire the invalidation service or null if not used.

public final java.lang.Stringname

The name of the database file or null if it is an in-memory database.

public final RoomDatabase.PrepackagedDatabaseCallbackprepackagedDatabaseCallback

public final java.util.concurrent.ExecutorqueryExecutor

The Executor used to execute asynchronous queries.

public final booleanrequireMigration

If true, Room should crash if a migration is missing.

public final SupportSQLiteOpenHelper.FactorysqliteOpenHelperFactory

The factory to use to access the database.

public final java.util.concurrent.ExecutortransactionExecutor

The Executor used to execute asynchronous transactions.

public final java.util.List<java.lang.Object>typeConverters

Constructors
publicDatabaseConfiguration(Context context, java.lang.String name, SupportSQLiteOpenHelper.Factory sqliteOpenHelperFactory, RoomDatabase.MigrationContainer migrationContainer, java.util.List<RoomDatabase.Callback> callbacks, boolean allowMainThreadQueries, RoomDatabase.JournalMode journalMode, java.util.concurrent.Executor queryExecutor, boolean requireMigration, java.util.Set<java.lang.Integer> migrationNotRequiredFrom)

Creates a database configuration with the given values.

publicDatabaseConfiguration(Context context, java.lang.String name, SupportSQLiteOpenHelper.Factory sqliteOpenHelperFactory, RoomDatabase.MigrationContainer migrationContainer, java.util.List<RoomDatabase.Callback> callbacks, boolean allowMainThreadQueries, RoomDatabase.JournalMode journalMode, java.util.concurrent.Executor queryExecutor, java.util.concurrent.Executor transactionExecutor, boolean multiInstanceInvalidation, boolean requireMigration, boolean allowDestructiveMigrationOnDowngrade, java.util.Set<java.lang.Integer> migrationNotRequiredFrom)

Creates a database configuration with the given values.

publicDatabaseConfiguration(Context context, java.lang.String name, SupportSQLiteOpenHelper.Factory sqliteOpenHelperFactory, RoomDatabase.MigrationContainer migrationContainer, java.util.List<RoomDatabase.Callback> callbacks, boolean allowMainThreadQueries, RoomDatabase.JournalMode journalMode, java.util.concurrent.Executor queryExecutor, java.util.concurrent.Executor transactionExecutor, boolean multiInstanceInvalidation, boolean requireMigration, boolean allowDestructiveMigrationOnDowngrade, java.util.Set<java.lang.Integer> migrationNotRequiredFrom, java.lang.String copyFromAssetPath, java.io.File copyFromFile)

Creates a database configuration with the given values.

publicDatabaseConfiguration(Context context, java.lang.String name, SupportSQLiteOpenHelper.Factory sqliteOpenHelperFactory, RoomDatabase.MigrationContainer migrationContainer, java.util.List<RoomDatabase.Callback> callbacks, boolean allowMainThreadQueries, RoomDatabase.JournalMode journalMode, java.util.concurrent.Executor queryExecutor, java.util.concurrent.Executor transactionExecutor, boolean multiInstanceInvalidation, boolean requireMigration, boolean allowDestructiveMigrationOnDowngrade, java.util.Set<java.lang.Integer> migrationNotRequiredFrom, java.lang.String copyFromAssetPath, java.io.File copyFromFile, java.util.concurrent.Callable<java.io.InputStream> copyFromInputStream)

Creates a database configuration with the given values.

publicDatabaseConfiguration(Context context, java.lang.String name, SupportSQLiteOpenHelper.Factory sqliteOpenHelperFactory, RoomDatabase.MigrationContainer migrationContainer, java.util.List<RoomDatabase.Callback> callbacks, boolean allowMainThreadQueries, RoomDatabase.JournalMode journalMode, java.util.concurrent.Executor queryExecutor, java.util.concurrent.Executor transactionExecutor, boolean multiInstanceInvalidation, boolean requireMigration, boolean allowDestructiveMigrationOnDowngrade, java.util.Set<java.lang.Integer> migrationNotRequiredFrom, java.lang.String copyFromAssetPath, java.io.File copyFromFile, java.util.concurrent.Callable<java.io.InputStream> copyFromInputStream, RoomDatabase.PrepackagedDatabaseCallback prepackagedDatabaseCallback)

Creates a database configuration with the given values.

publicDatabaseConfiguration(Context context, java.lang.String name, SupportSQLiteOpenHelper.Factory sqliteOpenHelperFactory, RoomDatabase.MigrationContainer migrationContainer, java.util.List<RoomDatabase.Callback> callbacks, boolean allowMainThreadQueries, RoomDatabase.JournalMode journalMode, java.util.concurrent.Executor queryExecutor, java.util.concurrent.Executor transactionExecutor, boolean multiInstanceInvalidation, boolean requireMigration, boolean allowDestructiveMigrationOnDowngrade, java.util.Set<java.lang.Integer> migrationNotRequiredFrom, java.lang.String copyFromAssetPath, java.io.File copyFromFile, java.util.concurrent.Callable<java.io.InputStream> copyFromInputStream, RoomDatabase.PrepackagedDatabaseCallback prepackagedDatabaseCallback, java.util.List<java.lang.Object> typeConverters)

Creates a database configuration with the given values.

publicDatabaseConfiguration(Context context, java.lang.String name, SupportSQLiteOpenHelper.Factory sqliteOpenHelperFactory, RoomDatabase.MigrationContainer migrationContainer, java.util.List<RoomDatabase.Callback> callbacks, boolean allowMainThreadQueries, RoomDatabase.JournalMode journalMode, java.util.concurrent.Executor queryExecutor, java.util.concurrent.Executor transactionExecutor, boolean multiInstanceInvalidation, boolean requireMigration, boolean allowDestructiveMigrationOnDowngrade, java.util.Set<java.lang.Integer> migrationNotRequiredFrom, java.lang.String copyFromAssetPath, java.io.File copyFromFile, java.util.concurrent.Callable<java.io.InputStream> copyFromInputStream, RoomDatabase.PrepackagedDatabaseCallback prepackagedDatabaseCallback, java.util.List<java.lang.Object> typeConverters, java.util.List<AutoMigrationSpec> autoMigrationSpecs)

Creates a database configuration with the given values.

publicDatabaseConfiguration(Context context, java.lang.String name, SupportSQLiteOpenHelper.Factory sqliteOpenHelperFactory, RoomDatabase.MigrationContainer migrationContainer, java.util.List<RoomDatabase.Callback> callbacks, boolean allowMainThreadQueries, RoomDatabase.JournalMode journalMode, java.util.concurrent.Executor queryExecutor, java.util.concurrent.Executor transactionExecutor, Intent multiInstanceInvalidationServiceIntent, boolean requireMigration, boolean allowDestructiveMigrationOnDowngrade, java.util.Set<java.lang.Integer> migrationNotRequiredFrom, java.lang.String copyFromAssetPath, java.io.File copyFromFile, java.util.concurrent.Callable<java.io.InputStream> copyFromInputStream, RoomDatabase.PrepackagedDatabaseCallback prepackagedDatabaseCallback, java.util.List<java.lang.Object> typeConverters, java.util.List<AutoMigrationSpec> autoMigrationSpecs)

Creates a database configuration with the given values.

Methods
public booleanisMigrationRequired(int fromVersion, int toVersion)

Returns whether a migration is required between two versions.

public booleanisMigrationRequiredFrom(int version)

Returns whether a migration is required from the specified version.

from java.lang.Objectclone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Fields

public final SupportSQLiteOpenHelper.Factory sqliteOpenHelperFactory

The factory to use to access the database.

public final Context context

The context to use while connecting to the database.

public final java.lang.String name

The name of the database file or null if it is an in-memory database.

public final RoomDatabase.MigrationContainer migrationContainer

Collection of available migrations.

public final java.util.List<RoomDatabase.Callback> callbacks

public final RoomDatabase.PrepackagedDatabaseCallback prepackagedDatabaseCallback

public final java.util.List<java.lang.Object> typeConverters

public final java.util.List<AutoMigrationSpec> autoMigrationSpecs

public final boolean allowMainThreadQueries

Whether Room should throw an exception for queries run on the main thread.

public final RoomDatabase.JournalMode journalMode

The journal mode for this database.

public final java.util.concurrent.Executor queryExecutor

The Executor used to execute asynchronous queries.

public final java.util.concurrent.Executor transactionExecutor

The Executor used to execute asynchronous transactions.

public final boolean multiInstanceInvalidation

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.

public final Intent multiInstanceInvalidationServiceIntent

Intent that should be bound to acquire the invalidation service or null if not used.

See also:

public final boolean requireMigration

If true, Room should crash if a migration is missing.

public final boolean allowDestructiveMigrationOnDowngrade

If true, Room should perform a destructive migration when downgrading without an available migration.

public final java.lang.String copyFromAssetPath

The assets path to a pre-packaged database to copy from.

public final java.io.File copyFromFile

The pre-packaged database file to copy from.

public final java.util.concurrent.Callable<java.io.InputStream> copyFromInputStream

The callable to get the input stream from which a pre-package database file will be copied from.

Constructors

public DatabaseConfiguration(Context context, java.lang.String name, SupportSQLiteOpenHelper.Factory sqliteOpenHelperFactory, RoomDatabase.MigrationContainer migrationContainer, java.util.List<RoomDatabase.Callback> callbacks, boolean allowMainThreadQueries, RoomDatabase.JournalMode journalMode, java.util.concurrent.Executor queryExecutor, boolean requireMigration, java.util.Set<java.lang.Integer> migrationNotRequiredFrom)

Deprecated: Use DatabaseConfiguration.DatabaseConfiguration(Context, String, SupportSQLiteOpenHelper.Factory, RoomDatabase.MigrationContainer, List, boolean, RoomDatabase.JournalMode, Executor, Executor, Intent, boolean, boolean, Set, String, File, Callable, RoomDatabase.PrepackagedDatabaseCallback, List, List)

Creates a database configuration with the given values.

Parameters:

context: The application context.
name: Name of the database, can be null if it is in memory.
sqliteOpenHelperFactory: The open helper factory to use.
migrationContainer: The migration container for migrations.
callbacks: The list of callbacks for database events.
allowMainThreadQueries: Whether to allow main thread reads/writes or not.
journalMode: The journal mode. This has to be either TRUNCATE or WRITE_AHEAD_LOGGING.
queryExecutor: The Executor used to execute asynchronous queries.
requireMigration: True if Room should require a valid migration if version changes, instead of recreating the tables.
migrationNotRequiredFrom: The collection of schema versions from which migrations aren't required.

public DatabaseConfiguration(Context context, java.lang.String name, SupportSQLiteOpenHelper.Factory sqliteOpenHelperFactory, RoomDatabase.MigrationContainer migrationContainer, java.util.List<RoomDatabase.Callback> callbacks, boolean allowMainThreadQueries, RoomDatabase.JournalMode journalMode, java.util.concurrent.Executor queryExecutor, java.util.concurrent.Executor transactionExecutor, boolean multiInstanceInvalidation, boolean requireMigration, boolean allowDestructiveMigrationOnDowngrade, java.util.Set<java.lang.Integer> migrationNotRequiredFrom)

Deprecated: Use DatabaseConfiguration.DatabaseConfiguration(Context, String, SupportSQLiteOpenHelper.Factory, RoomDatabase.MigrationContainer, List, boolean, RoomDatabase.JournalMode, Executor, Executor, Intent, boolean, boolean, Set, String, File, Callable, RoomDatabase.PrepackagedDatabaseCallback, List, List)

Creates a database configuration with the given values.

Parameters:

context: The application context.
name: Name of the database, can be null if it is in memory.
sqliteOpenHelperFactory: The open helper factory to use.
migrationContainer: The migration container for migrations.
callbacks: The list of callbacks for database events.
allowMainThreadQueries: Whether to allow main thread reads/writes or not.
journalMode: The journal mode. This has to be either TRUNCATE or WRITE_AHEAD_LOGGING.
queryExecutor: The Executor used to execute asynchronous queries.
transactionExecutor: The Executor used to execute asynchronous transactions.
multiInstanceInvalidation: True if Room should perform multi-instance invalidation.
requireMigration: True if Room should require a valid migration if version changes,
allowDestructiveMigrationOnDowngrade: True if Room should recreate tables if no migration is supplied during a downgrade.
migrationNotRequiredFrom: The collection of schema versions from which migrations aren't required.

public DatabaseConfiguration(Context context, java.lang.String name, SupportSQLiteOpenHelper.Factory sqliteOpenHelperFactory, RoomDatabase.MigrationContainer migrationContainer, java.util.List<RoomDatabase.Callback> callbacks, boolean allowMainThreadQueries, RoomDatabase.JournalMode journalMode, java.util.concurrent.Executor queryExecutor, java.util.concurrent.Executor transactionExecutor, boolean multiInstanceInvalidation, boolean requireMigration, boolean allowDestructiveMigrationOnDowngrade, java.util.Set<java.lang.Integer> migrationNotRequiredFrom, java.lang.String copyFromAssetPath, java.io.File copyFromFile)

Deprecated: Use DatabaseConfiguration.DatabaseConfiguration(Context, String, SupportSQLiteOpenHelper.Factory, RoomDatabase.MigrationContainer, List, boolean, RoomDatabase.JournalMode, Executor, Executor, Intent, boolean, boolean, Set, String, File, Callable, RoomDatabase.PrepackagedDatabaseCallback, List, List)

Creates a database configuration with the given values.

Parameters:

context: The application context.
name: Name of the database, can be null if it is in memory.
sqliteOpenHelperFactory: The open helper factory to use.
migrationContainer: The migration container for migrations.
callbacks: The list of callbacks for database events.
allowMainThreadQueries: Whether to allow main thread reads/writes or not.
journalMode: The journal mode. This has to be either TRUNCATE or WRITE_AHEAD_LOGGING.
queryExecutor: The Executor used to execute asynchronous queries.
transactionExecutor: The Executor used to execute asynchronous transactions.
multiInstanceInvalidation: True if Room should perform multi-instance invalidation.
requireMigration: True if Room should require a valid migration if version changes,
allowDestructiveMigrationOnDowngrade: True if Room should recreate tables if no migration is supplied during a downgrade.
migrationNotRequiredFrom: The collection of schema versions from which migrations aren't required.
copyFromAssetPath: The assets path to the pre-packaged database.
copyFromFile: The pre-packaged database file.

public DatabaseConfiguration(Context context, java.lang.String name, SupportSQLiteOpenHelper.Factory sqliteOpenHelperFactory, RoomDatabase.MigrationContainer migrationContainer, java.util.List<RoomDatabase.Callback> callbacks, boolean allowMainThreadQueries, RoomDatabase.JournalMode journalMode, java.util.concurrent.Executor queryExecutor, java.util.concurrent.Executor transactionExecutor, boolean multiInstanceInvalidation, boolean requireMigration, boolean allowDestructiveMigrationOnDowngrade, java.util.Set<java.lang.Integer> migrationNotRequiredFrom, java.lang.String copyFromAssetPath, java.io.File copyFromFile, java.util.concurrent.Callable<java.io.InputStream> copyFromInputStream)

Deprecated: Use DatabaseConfiguration.DatabaseConfiguration(Context, String, SupportSQLiteOpenHelper.Factory, RoomDatabase.MigrationContainer, List, boolean, RoomDatabase.JournalMode, Executor, Executor, Intent, boolean, boolean, Set, String, File, Callable, RoomDatabase.PrepackagedDatabaseCallback, List, List)

Creates a database configuration with the given values.

Parameters:

context: The application context.
name: Name of the database, can be null if it is in memory.
sqliteOpenHelperFactory: The open helper factory to use.
migrationContainer: The migration container for migrations.
callbacks: The list of callbacks for database events.
allowMainThreadQueries: Whether to allow main thread reads/writes or not.
journalMode: The journal mode. This has to be either TRUNCATE or WRITE_AHEAD_LOGGING.
queryExecutor: The Executor used to execute asynchronous queries.
transactionExecutor: The Executor used to execute asynchronous transactions.
multiInstanceInvalidation: True if Room should perform multi-instance invalidation.
requireMigration: True if Room should require a valid migration if version changes,
allowDestructiveMigrationOnDowngrade: True if Room should recreate tables if no migration is supplied during a downgrade.
migrationNotRequiredFrom: The collection of schema versions from which migrations aren't required.
copyFromAssetPath: The assets path to the pre-packaged database.
copyFromFile: The pre-packaged database file.
copyFromInputStream: The callable to get the input stream from which a pre-package database file will be copied from.

public DatabaseConfiguration(Context context, java.lang.String name, SupportSQLiteOpenHelper.Factory sqliteOpenHelperFactory, RoomDatabase.MigrationContainer migrationContainer, java.util.List<RoomDatabase.Callback> callbacks, boolean allowMainThreadQueries, RoomDatabase.JournalMode journalMode, java.util.concurrent.Executor queryExecutor, java.util.concurrent.Executor transactionExecutor, boolean multiInstanceInvalidation, boolean requireMigration, boolean allowDestructiveMigrationOnDowngrade, java.util.Set<java.lang.Integer> migrationNotRequiredFrom, java.lang.String copyFromAssetPath, java.io.File copyFromFile, java.util.concurrent.Callable<java.io.InputStream> copyFromInputStream, RoomDatabase.PrepackagedDatabaseCallback prepackagedDatabaseCallback)

Deprecated: Use DatabaseConfiguration.DatabaseConfiguration(Context, String, SupportSQLiteOpenHelper.Factory, RoomDatabase.MigrationContainer, List, boolean, RoomDatabase.JournalMode, Executor, Executor, Intent, boolean, boolean, Set, String, File, Callable, RoomDatabase.PrepackagedDatabaseCallback, List, List)

Creates a database configuration with the given values.

Parameters:

context: The application context.
name: Name of the database, can be null if it is in memory.
sqliteOpenHelperFactory: The open helper factory to use.
migrationContainer: The migration container for migrations.
callbacks: The list of callbacks for database events.
allowMainThreadQueries: Whether to allow main thread reads/writes or not.
journalMode: The journal mode. This has to be either TRUNCATE or WRITE_AHEAD_LOGGING.
queryExecutor: The Executor used to execute asynchronous queries.
transactionExecutor: The Executor used to execute asynchronous transactions.
multiInstanceInvalidation: True if Room should perform multi-instance invalidation.
requireMigration: True if Room should require a valid migration if version changes,
allowDestructiveMigrationOnDowngrade: True if Room should recreate tables if no migration is supplied during a downgrade.
migrationNotRequiredFrom: The collection of schema versions from which migrations aren't required.
copyFromAssetPath: The assets path to the pre-packaged database.
copyFromFile: The pre-packaged database file.
copyFromInputStream: The callable to get the input stream from which a pre-package database file will be copied from.
prepackagedDatabaseCallback: The pre-packaged callback.

public DatabaseConfiguration(Context context, java.lang.String name, SupportSQLiteOpenHelper.Factory sqliteOpenHelperFactory, RoomDatabase.MigrationContainer migrationContainer, java.util.List<RoomDatabase.Callback> callbacks, boolean allowMainThreadQueries, RoomDatabase.JournalMode journalMode, java.util.concurrent.Executor queryExecutor, java.util.concurrent.Executor transactionExecutor, boolean multiInstanceInvalidation, boolean requireMigration, boolean allowDestructiveMigrationOnDowngrade, java.util.Set<java.lang.Integer> migrationNotRequiredFrom, java.lang.String copyFromAssetPath, java.io.File copyFromFile, java.util.concurrent.Callable<java.io.InputStream> copyFromInputStream, RoomDatabase.PrepackagedDatabaseCallback prepackagedDatabaseCallback, java.util.List<java.lang.Object> typeConverters)

Deprecated: Use DatabaseConfiguration.DatabaseConfiguration(Context, String, SupportSQLiteOpenHelper.Factory, RoomDatabase.MigrationContainer, List, boolean, RoomDatabase.JournalMode, Executor, Executor, Intent, boolean, boolean, Set, String, File, Callable, RoomDatabase.PrepackagedDatabaseCallback, List, List)

Creates a database configuration with the given values.

Parameters:

context: The application context.
name: Name of the database, can be null if it is in memory.
sqliteOpenHelperFactory: The open helper factory to use.
migrationContainer: The migration container for migrations.
callbacks: The list of callbacks for database events.
allowMainThreadQueries: Whether to allow main thread reads/writes or not.
journalMode: The journal mode. This has to be either TRUNCATE or WRITE_AHEAD_LOGGING.
queryExecutor: The Executor used to execute asynchronous queries.
transactionExecutor: The Executor used to execute asynchronous transactions.
multiInstanceInvalidation: True if Room should perform multi-instance invalidation.
requireMigration: True if Room should require a valid migration if version changes,
allowDestructiveMigrationOnDowngrade: True if Room should recreate tables if no migration is supplied during a downgrade.
migrationNotRequiredFrom: The collection of schema versions from which migrations aren't required.
copyFromAssetPath: The assets path to the pre-packaged database.
copyFromFile: The pre-packaged database file.
copyFromInputStream: The callable to get the input stream from which a pre-package database file will be copied from.
prepackagedDatabaseCallback: The pre-packaged callback.
typeConverters: The type converters.

public DatabaseConfiguration(Context context, java.lang.String name, SupportSQLiteOpenHelper.Factory sqliteOpenHelperFactory, RoomDatabase.MigrationContainer migrationContainer, java.util.List<RoomDatabase.Callback> callbacks, boolean allowMainThreadQueries, RoomDatabase.JournalMode journalMode, java.util.concurrent.Executor queryExecutor, java.util.concurrent.Executor transactionExecutor, boolean multiInstanceInvalidation, boolean requireMigration, boolean allowDestructiveMigrationOnDowngrade, java.util.Set<java.lang.Integer> migrationNotRequiredFrom, java.lang.String copyFromAssetPath, java.io.File copyFromFile, java.util.concurrent.Callable<java.io.InputStream> copyFromInputStream, RoomDatabase.PrepackagedDatabaseCallback prepackagedDatabaseCallback, java.util.List<java.lang.Object> typeConverters, java.util.List<AutoMigrationSpec> autoMigrationSpecs)

Deprecated: Use DatabaseConfiguration.DatabaseConfiguration(Context, String, SupportSQLiteOpenHelper.Factory, RoomDatabase.MigrationContainer, List, boolean, RoomDatabase.JournalMode, Executor, Executor, Intent, boolean, boolean, Set, String, File, Callable, RoomDatabase.PrepackagedDatabaseCallback, List, List)

Creates a database configuration with the given values.

Parameters:

context: The application context.
name: Name of the database, can be null if it is in memory.
sqliteOpenHelperFactory: The open helper factory to use.
migrationContainer: The migration container for migrations.
callbacks: The list of callbacks for database events.
allowMainThreadQueries: Whether to allow main thread reads/writes or not.
journalMode: The journal mode. This has to be either TRUNCATE or WRITE_AHEAD_LOGGING.
queryExecutor: The Executor used to execute asynchronous queries.
transactionExecutor: The Executor used to execute asynchronous transactions.
multiInstanceInvalidation: True if Room should perform multi-instance invalidation.
requireMigration: True if Room should require a valid migration if version changes,
allowDestructiveMigrationOnDowngrade: True if Room should recreate tables if no migration is supplied during a downgrade.
migrationNotRequiredFrom: The collection of schema versions from which migrations aren't required.
copyFromAssetPath: The assets path to the pre-packaged database.
copyFromFile: The pre-packaged database file.
copyFromInputStream: The callable to get the input stream from which a pre-package database file will be copied from.
prepackagedDatabaseCallback: The pre-packaged callback.
typeConverters: The type converters.
autoMigrationSpecs: The auto migration specs.

public DatabaseConfiguration(Context context, java.lang.String name, SupportSQLiteOpenHelper.Factory sqliteOpenHelperFactory, RoomDatabase.MigrationContainer migrationContainer, java.util.List<RoomDatabase.Callback> callbacks, boolean allowMainThreadQueries, RoomDatabase.JournalMode journalMode, java.util.concurrent.Executor queryExecutor, java.util.concurrent.Executor transactionExecutor, Intent multiInstanceInvalidationServiceIntent, boolean requireMigration, boolean allowDestructiveMigrationOnDowngrade, java.util.Set<java.lang.Integer> migrationNotRequiredFrom, java.lang.String copyFromAssetPath, java.io.File copyFromFile, java.util.concurrent.Callable<java.io.InputStream> copyFromInputStream, RoomDatabase.PrepackagedDatabaseCallback prepackagedDatabaseCallback, java.util.List<java.lang.Object> typeConverters, java.util.List<AutoMigrationSpec> autoMigrationSpecs)

Creates a database configuration with the given values.

Parameters:

context: The application context.
name: Name of the database, can be null if it is in memory.
sqliteOpenHelperFactory: The open helper factory to use.
migrationContainer: The migration container for migrations.
callbacks: The list of callbacks for database events.
allowMainThreadQueries: Whether to allow main thread reads/writes or not.
journalMode: The journal mode. This has to be either TRUNCATE or WRITE_AHEAD_LOGGING.
queryExecutor: The Executor used to execute asynchronous queries.
transactionExecutor: The Executor used to execute asynchronous transactions.
multiInstanceInvalidationServiceIntent: The intent to use to bind to the invalidation service or null if not used.
requireMigration: True if Room should require a valid migration if version changes,
allowDestructiveMigrationOnDowngrade: True if Room should recreate tables if no migration is supplied during a downgrade.
migrationNotRequiredFrom: The collection of schema versions from which migrations aren't required.
copyFromAssetPath: The assets path to the pre-packaged database.
copyFromFile: The pre-packaged database file.
copyFromInputStream: The callable to get the input stream from which a pre-package database file will be copied from.
prepackagedDatabaseCallback: The pre-packaged callback.
typeConverters: The type converters.
autoMigrationSpecs: The auto migration specs.

Methods

public boolean isMigrationRequiredFrom(int version)

Deprecated: Use DatabaseConfiguration.isMigrationRequired(int, int) which takes DatabaseConfiguration.allowDestructiveMigrationOnDowngrade into account.

Returns whether a migration is required from the specified version.

Parameters:

version: The schema version.

Returns:

True if a valid migration is required, false otherwise.

public boolean isMigrationRequired(int fromVersion, int toVersion)

Returns whether a migration is required between two versions.

Parameters:

fromVersion: The old schema version.
toVersion: The new schema version.

Returns:

True if a valid migration is required, false otherwise.

Source

/*
 * 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.NonNull;
import androidx.annotation.Nullable;
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.Collections;
import java.util.List;
import java.util.Set;
import java.util.concurrent.Callable;
import java.util.concurrent.Executor;

/**
 * Configuration class for a {@link RoomDatabase}.
 */
@SuppressWarnings("WeakerAccess")
public class DatabaseConfiguration {

    /**
     * The factory to use to access the database.
     */
    @NonNull
    public final SupportSQLiteOpenHelper.Factory sqliteOpenHelperFactory;
    /**
     * The context to use while connecting to the database.
     */
    @NonNull
    public final Context context;
    /**
     * The name of the database file or null if it is an in-memory database.
     */
    @Nullable
    public final String name;

    /**
     * Collection of available migrations.
     */
    @NonNull
    public final RoomDatabase.MigrationContainer migrationContainer;

    @Nullable
    public final List<RoomDatabase.Callback> callbacks;

    @Nullable
    public final RoomDatabase.PrepackagedDatabaseCallback prepackagedDatabaseCallback;

    @NonNull
    public final List<Object> typeConverters;

    @NonNull
    public final List<AutoMigrationSpec> autoMigrationSpecs;

    /**
     * Whether Room should throw an exception for queries run on the main thread.
     */
    public final boolean allowMainThreadQueries;

    /**
     * The journal mode for this database.
     */
    public final RoomDatabase.JournalMode journalMode;

    /**
     * The Executor used to execute asynchronous queries.
     */
    @NonNull
    public final Executor queryExecutor;

    /**
     * The Executor used to execute asynchronous transactions.
     */
    @NonNull
    public final Executor transactionExecutor;

    /**
     * If true, table invalidation in an instance of {@link RoomDatabase} is broadcast and
     * synchronized with other instances of the same {@link RoomDatabase} file, including those
     * in a separate process.
     */
    public final boolean multiInstanceInvalidation;

    /**
     * Intent that should be bound to acquire the invalidation service or {@code null} if not used.
     *
     * @see {@link #multiInstanceInvalidation}
     * @hide
     */
    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
    public final Intent multiInstanceInvalidationServiceIntent;

    /**
     * If true, Room should crash if a migration is missing.
     */
    public final boolean requireMigration;

    /**
     * If true, Room should perform a destructive migration when downgrading without an available
     * migration.
     */
    public final boolean allowDestructiveMigrationOnDowngrade;

    /**
     * The collection of schema versions from which migrations aren't required.
     */
    private final Set<Integer> mMigrationNotRequiredFrom;

    /**
     * The assets path to a pre-packaged database to copy from.
     */
    @Nullable
    public final String copyFromAssetPath;

    /**
     * The pre-packaged database file to copy from.
     */
    @Nullable
    public final File copyFromFile;

    /**
     * The callable to get the input stream from which a pre-package database file will be copied
     * from.
     */
    @Nullable
    public final Callable<InputStream> copyFromInputStream;

    /**
     * Creates a database configuration with the given values.
     *
     * @deprecated Use {@link #DatabaseConfiguration(Context, String,
     * SupportSQLiteOpenHelper.Factory, RoomDatabase.MigrationContainer, List, boolean,
     * RoomDatabase.JournalMode, Executor, Executor, Intent, boolean, boolean, Set, String, File,
     * Callable, RoomDatabase.PrepackagedDatabaseCallback, List, List)}
     *
     * @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.
     *
     * @hide
     */
    @Deprecated
    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
    public DatabaseConfiguration(@NonNull Context context, @Nullable String name,
            @NonNull SupportSQLiteOpenHelper.Factory sqliteOpenHelperFactory,
            @NonNull RoomDatabase.MigrationContainer migrationContainer,
            @Nullable List<androidx.room.RoomDatabase.Callback> callbacks,
            boolean allowMainThreadQueries,
            RoomDatabase.JournalMode journalMode,
            @NonNull Executor queryExecutor,
            boolean requireMigration,
            @Nullable Set<Integer> migrationNotRequiredFrom) {
        this(context, name, sqliteOpenHelperFactory, migrationContainer, callbacks,
                allowMainThreadQueries, journalMode, queryExecutor, queryExecutor, false,
                requireMigration, false, migrationNotRequiredFrom, null, null, null, null, null,
                null);
    }

    /**
     * Creates a database configuration with the given values.
     *
     * @deprecated Use {@link #DatabaseConfiguration(Context, String,
     * SupportSQLiteOpenHelper.Factory, RoomDatabase.MigrationContainer, List, boolean,
     * RoomDatabase.JournalMode, Executor, Executor, Intent, boolean, boolean, Set, String, File,
     * Callable, RoomDatabase.PrepackagedDatabaseCallback, List, List)}
     *
     * @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.
     *
     * @hide
     */
    @Deprecated
    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
    public DatabaseConfiguration(@NonNull Context context, @Nullable String name,
            @NonNull SupportSQLiteOpenHelper.Factory sqliteOpenHelperFactory,
            @NonNull RoomDatabase.MigrationContainer migrationContainer,
            @Nullable List<RoomDatabase.Callback> callbacks,
            boolean allowMainThreadQueries,
            RoomDatabase.JournalMode journalMode,
            @NonNull Executor queryExecutor,
            @NonNull Executor transactionExecutor,
            boolean multiInstanceInvalidation,
            boolean requireMigration,
            boolean allowDestructiveMigrationOnDowngrade,
            @Nullable Set<Integer> migrationNotRequiredFrom) {
        this(context, name, sqliteOpenHelperFactory, migrationContainer, callbacks,
                allowMainThreadQueries, journalMode, queryExecutor, transactionExecutor,
                multiInstanceInvalidation, requireMigration, allowDestructiveMigrationOnDowngrade,
                migrationNotRequiredFrom, null, null, null, null, null, null);
    }

    /**
     * Creates a database configuration with the given values.
     *
     * @deprecated Use {@link #DatabaseConfiguration(Context, String,
     * SupportSQLiteOpenHelper.Factory, RoomDatabase.MigrationContainer, List, boolean,
     * RoomDatabase.JournalMode, Executor, Executor, Intent, boolean, boolean, Set, String, File,
     * Callable, RoomDatabase.PrepackagedDatabaseCallback, List, List)}
     *
     * @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.
     *
     * @hide
     */
    @Deprecated
    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
    public DatabaseConfiguration(@NonNull Context context, @Nullable String name,
            @NonNull SupportSQLiteOpenHelper.Factory sqliteOpenHelperFactory,
            @NonNull RoomDatabase.MigrationContainer migrationContainer,
            @Nullable List<RoomDatabase.Callback> callbacks,
            boolean allowMainThreadQueries,
            RoomDatabase.JournalMode journalMode,
            @NonNull Executor queryExecutor,
            @NonNull Executor transactionExecutor,
            boolean multiInstanceInvalidation,
            boolean requireMigration,
            boolean allowDestructiveMigrationOnDowngrade,
            @Nullable Set<Integer> migrationNotRequiredFrom,
            @Nullable String copyFromAssetPath,
            @Nullable File copyFromFile) {
        this(context, name, sqliteOpenHelperFactory, migrationContainer, callbacks,
                allowMainThreadQueries, journalMode, queryExecutor, transactionExecutor,
                multiInstanceInvalidation, requireMigration, allowDestructiveMigrationOnDowngrade,
                migrationNotRequiredFrom, copyFromAssetPath, copyFromFile, null, null, null, null);
    }

    /**
     * Creates a database configuration with the given values.
     *
     * @deprecated Use {@link #DatabaseConfiguration(Context, String,
     * SupportSQLiteOpenHelper.Factory, RoomDatabase.MigrationContainer, List, boolean,
     * RoomDatabase.JournalMode, Executor, Executor, Intent, boolean, boolean, Set, String, File,
     * Callable, RoomDatabase.PrepackagedDatabaseCallback, List, List)}
     *
     * @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.
     *
     * @hide
     */
    @Deprecated
    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
    public DatabaseConfiguration(@NonNull Context context, @Nullable String name,
            @NonNull SupportSQLiteOpenHelper.Factory sqliteOpenHelperFactory,
            @NonNull RoomDatabase.MigrationContainer migrationContainer,
            @Nullable List<RoomDatabase.Callback> callbacks,
            boolean allowMainThreadQueries,
            @NonNull RoomDatabase.JournalMode journalMode,
            @NonNull Executor queryExecutor,
            @NonNull Executor transactionExecutor,
            boolean multiInstanceInvalidation,
            boolean requireMigration,
            boolean allowDestructiveMigrationOnDowngrade,
            @Nullable Set<Integer> migrationNotRequiredFrom,
            @Nullable String copyFromAssetPath,
            @Nullable File copyFromFile,
            @Nullable Callable<InputStream> copyFromInputStream) {
        this(context, name, sqliteOpenHelperFactory, migrationContainer, callbacks,
                allowMainThreadQueries, journalMode, queryExecutor, transactionExecutor,
                multiInstanceInvalidation, requireMigration, allowDestructiveMigrationOnDowngrade,
                migrationNotRequiredFrom, copyFromAssetPath, copyFromFile, copyFromInputStream,
                null, null, null);
    }

    /**
     * Creates a database configuration with the given values.
     *
     * @deprecated Use {@link #DatabaseConfiguration(Context, String,
     * SupportSQLiteOpenHelper.Factory, RoomDatabase.MigrationContainer, List, boolean,
     * RoomDatabase.JournalMode, Executor, Executor, Intent, boolean, boolean, Set, String, File,
     * Callable, RoomDatabase.PrepackagedDatabaseCallback, List, List)}
     *
     * @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.
     *
     * @hide
     */
    @Deprecated
    @SuppressLint("LambdaLast")
    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
    public DatabaseConfiguration(@NonNull Context context, @Nullable String name,
            @NonNull SupportSQLiteOpenHelper.Factory sqliteOpenHelperFactory,
            @NonNull RoomDatabase.MigrationContainer migrationContainer,
            @Nullable List<RoomDatabase.Callback> callbacks,
            boolean allowMainThreadQueries,
            @NonNull RoomDatabase.JournalMode journalMode,
            @NonNull Executor queryExecutor,
            @NonNull Executor transactionExecutor,
            boolean multiInstanceInvalidation,
            boolean requireMigration,
            boolean allowDestructiveMigrationOnDowngrade,
            @Nullable Set<Integer> migrationNotRequiredFrom,
            @Nullable String copyFromAssetPath,
            @Nullable File copyFromFile,
            @Nullable Callable<InputStream> copyFromInputStream,
            @Nullable RoomDatabase.PrepackagedDatabaseCallback prepackagedDatabaseCallback) {
        this(context, name, sqliteOpenHelperFactory, migrationContainer, callbacks,
                allowMainThreadQueries, journalMode, queryExecutor, transactionExecutor,
                multiInstanceInvalidation, requireMigration, allowDestructiveMigrationOnDowngrade,
                migrationNotRequiredFrom, copyFromAssetPath, copyFromFile, copyFromInputStream,
                prepackagedDatabaseCallback, null, null);
    }

    /**
     * Creates a database configuration with the given values.
     *
     * @deprecated Use {@link #DatabaseConfiguration(Context, String,
     * SupportSQLiteOpenHelper.Factory, RoomDatabase.MigrationContainer, List, boolean,
     * RoomDatabase.JournalMode, Executor, Executor, Intent, boolean, boolean, Set, String, File,
     * Callable, RoomDatabase.PrepackagedDatabaseCallback, List, List)}
     *
     * @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.
     *
     * @hide
     */
    @Deprecated
    @SuppressLint("LambdaLast")
    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
    public DatabaseConfiguration(@NonNull Context context, @Nullable String name,
            @NonNull SupportSQLiteOpenHelper.Factory sqliteOpenHelperFactory,
            @NonNull RoomDatabase.MigrationContainer migrationContainer,
            @Nullable List<RoomDatabase.Callback> callbacks,
            boolean allowMainThreadQueries,
            @NonNull RoomDatabase.JournalMode journalMode,
            @NonNull Executor queryExecutor,
            @NonNull Executor transactionExecutor,
            boolean multiInstanceInvalidation,
            boolean requireMigration,
            boolean allowDestructiveMigrationOnDowngrade,
            @Nullable Set<Integer> migrationNotRequiredFrom,
            @Nullable String copyFromAssetPath,
            @Nullable File copyFromFile,
            @Nullable Callable<InputStream> copyFromInputStream,
            @Nullable RoomDatabase.PrepackagedDatabaseCallback prepackagedDatabaseCallback,
            @Nullable List<Object> typeConverters) {
        this(context, name, sqliteOpenHelperFactory, migrationContainer, callbacks,
                allowMainThreadQueries, journalMode, queryExecutor, transactionExecutor,
                multiInstanceInvalidation, requireMigration, allowDestructiveMigrationOnDowngrade,
                migrationNotRequiredFrom, copyFromAssetPath, copyFromFile, copyFromInputStream,
                prepackagedDatabaseCallback, typeConverters, null);
    }

    /**
     * Creates a database configuration with the given values.
     *
     * @deprecated Use {@link #DatabaseConfiguration(Context, String,
     * SupportSQLiteOpenHelper.Factory, RoomDatabase.MigrationContainer, List, boolean,
     * RoomDatabase.JournalMode, Executor, Executor, Intent, boolean, boolean, Set, String, File,
     * Callable, RoomDatabase.PrepackagedDatabaseCallback, List, List)}
     *
     * @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.
     *
     * @hide
     */
    @Deprecated
    @SuppressLint("LambdaLast")
    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
    public DatabaseConfiguration(@NonNull Context context, @Nullable String name,
            @NonNull SupportSQLiteOpenHelper.Factory sqliteOpenHelperFactory,
            @NonNull RoomDatabase.MigrationContainer migrationContainer,
            @Nullable List<RoomDatabase.Callback> callbacks,
            boolean allowMainThreadQueries,
            @NonNull RoomDatabase.JournalMode journalMode,
            @NonNull Executor queryExecutor,
            @NonNull Executor transactionExecutor,
            boolean multiInstanceInvalidation,
            boolean requireMigration,
            boolean allowDestructiveMigrationOnDowngrade,
            @Nullable Set<Integer> migrationNotRequiredFrom,
            @Nullable String copyFromAssetPath,
            @Nullable File copyFromFile,
            @Nullable Callable<InputStream> copyFromInputStream,
            @Nullable RoomDatabase.PrepackagedDatabaseCallback prepackagedDatabaseCallback,
            @Nullable List<Object> typeConverters,
            @Nullable List<AutoMigrationSpec> autoMigrationSpecs) {
        this(context, name, sqliteOpenHelperFactory, migrationContainer, callbacks,
                allowMainThreadQueries, journalMode, queryExecutor, transactionExecutor,
                multiInstanceInvalidation ? new Intent(context,
                MultiInstanceInvalidationService.class) : null,
                requireMigration, allowDestructiveMigrationOnDowngrade, migrationNotRequiredFrom,
                copyFromAssetPath, copyFromFile, copyFromInputStream, prepackagedDatabaseCallback,
                typeConverters, autoMigrationSpecs);
    }

    /**
     * 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 multiInstanceInvalidationServiceIntent The intent to use to bind to the
     *                                               invalidation service or {@code null} if not
     *                                               used.
     * @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.
     *
     * @hide
     */
    @SuppressLint("LambdaLast")
    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
    public DatabaseConfiguration(@NonNull Context context, @Nullable String name,
            @NonNull SupportSQLiteOpenHelper.Factory sqliteOpenHelperFactory,
            @NonNull RoomDatabase.MigrationContainer migrationContainer,
            @Nullable List<RoomDatabase.Callback> callbacks,
            boolean allowMainThreadQueries,
            @NonNull RoomDatabase.JournalMode journalMode,
            @NonNull Executor queryExecutor,
            @NonNull Executor transactionExecutor,
            @Nullable Intent multiInstanceInvalidationServiceIntent,
            boolean requireMigration,
            boolean allowDestructiveMigrationOnDowngrade,
            @Nullable Set<Integer> migrationNotRequiredFrom,
            @Nullable String copyFromAssetPath,
            @Nullable File copyFromFile,
            @Nullable Callable<InputStream> copyFromInputStream,
            @Nullable RoomDatabase.PrepackagedDatabaseCallback prepackagedDatabaseCallback,
            @Nullable List<Object> typeConverters,
            @Nullable List<AutoMigrationSpec> autoMigrationSpecs) {
        this.sqliteOpenHelperFactory = sqliteOpenHelperFactory;
        this.context = context;
        this.name = name;
        this.migrationContainer = migrationContainer;
        this.callbacks = callbacks;
        this.allowMainThreadQueries = allowMainThreadQueries;
        this.journalMode = journalMode;
        this.queryExecutor = queryExecutor;
        this.transactionExecutor = transactionExecutor;
        this.multiInstanceInvalidationServiceIntent =
                multiInstanceInvalidationServiceIntent;
        this.multiInstanceInvalidation = multiInstanceInvalidationServiceIntent != null;
        this.requireMigration = requireMigration;
        this.allowDestructiveMigrationOnDowngrade = allowDestructiveMigrationOnDowngrade;
        this.mMigrationNotRequiredFrom = migrationNotRequiredFrom;
        this.copyFromAssetPath = copyFromAssetPath;
        this.copyFromFile = copyFromFile;
        this.copyFromInputStream = copyFromInputStream;
        this.prepackagedDatabaseCallback = prepackagedDatabaseCallback;
        this.typeConverters = typeConverters == null ? Collections.emptyList() : typeConverters;
        this.autoMigrationSpecs = autoMigrationSpecs == null
                ? Collections.emptyList() : 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 {@link #isMigrationRequired(int, int)} which takes
     * {@link #allowDestructiveMigrationOnDowngrade} into account.
     */
    @Deprecated
    public boolean isMigrationRequiredFrom(int version) {
        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.
     */
    public boolean isMigrationRequired(int fromVersion, int toVersion) {
        // Migrations are not required if its a downgrade AND destructive migration during downgrade
        // has been allowed.
        final boolean isDowngrade = fromVersion > toVersion;
        if (isDowngrade && allowDestructiveMigrationOnDowngrade) {
            return false;
        }

        // 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
                && (mMigrationNotRequiredFrom == null
                || !mMigrationNotRequiredFrom.contains(fromVersion));
    }
}