blob: 3a9645aa841ecfaeac42821c405abe76f08ce077 [file] [log] [blame]
/*
* Copyright (C) 2017 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
/**
* The list of warnings that are produced by Room.
*
* You can use these values inside a [SuppressWarnings] annotation to disable the warnings.
*/
// If you change this, don't forget to change androidx.room.vo.Warning
@Suppress("unused", "WeakerAccess")
public open class RoomWarnings {
public companion object {
/**
* The warning dispatched by Room when the return value of a [Query] method does not
* exactly match the fields in the query result.
*/
public const val CURSOR_MISMATCH: String = "ROOM_CURSOR_MISMATCH"
/**
* The warning dispatched by Room when the object in the provided method's multimap return
* type does not implement equals() and hashCode().
*/
public const val DOES_NOT_IMPLEMENT_EQUALS_HASHCODE: String =
"ROOM_TYPE_DOES_NOT_IMPLEMENT_EQUALS_HASHCODE"
/**
* Reported when Room cannot verify database queries during compilation due to lack of
* tmp dir access in JVM.
*/
public const val MISSING_JAVA_TMP_DIR: String = "ROOM_MISSING_JAVA_TMP_DIR"
/**
* Reported when Room cannot verify database queries during compilation. This usually
* happens when it cannot find the SQLite JDBC driver on the host machine.
*
* Room can function without query verification but its functionality will be limited.
*/
public const val CANNOT_CREATE_VERIFICATION_DATABASE: String =
"ROOM_CANNOT_CREATE_VERIFICATION_DATABASE"
/**
* Reported when an [Entity] field that is annotated with [Embedded] has a
* sub field which is annotated with [PrimaryKey] but the [PrimaryKey] is dropped
* while composing it into the parent object.
*/
public const val PRIMARY_KEY_FROM_EMBEDDED_IS_DROPPED: String =
"ROOM_EMBEDDED_PRIMARY_KEY_IS_DROPPED"
/**
* Reported when an [Entity] field that is annotated with [Embedded] has a
* sub field which has a [ColumnInfo] annotation with `index = true`.
*
* You can re-define the index in the containing [Entity].
*/
public const val INDEX_FROM_EMBEDDED_FIELD_IS_DROPPED: String =
"ROOM_EMBEDDED_INDEX_IS_DROPPED"
/**
* Reported when an [Entity] that has a [Embedded] field whose type is another
* [Entity] and that [Entity] has some indices defined.
* These indices will NOT be created in the containing [Entity]. If you want to preserve
* them, you can re-define them in the containing [Entity].
*/
public const val INDEX_FROM_EMBEDDED_ENTITY_IS_DROPPED: String =
"ROOM_EMBEDDED_ENTITY_INDEX_IS_DROPPED"
/**
* Reported when an [Entity]'s parent declares an [Index]. Room does not
* automatically inherit these indices to avoid hidden costs or unexpected constraints.
*
* If you want your child class to have the indices of the parent, you must re-declare
* them in the child class. Alternatively, you can set [Entity.inheritSuperIndices]
* to `true`.
*/
public const val INDEX_FROM_PARENT_IS_DROPPED: String =
"ROOM_PARENT_INDEX_IS_DROPPED"
/**
* Reported when an [Entity] inherits a field from its super class and the field has a
* [ColumnInfo] annotation with `index = true`.
*
* These indices are dropped for the [Entity] and you would need to re-declare them if
* you want to keep them. Alternatively, you can set [Entity.inheritSuperIndices]
* to `true`.
*/
public const val INDEX_FROM_PARENT_FIELD_IS_DROPPED: String =
"ROOM_PARENT_FIELD_INDEX_IS_DROPPED"
/**
* Reported when a [Relation] [Entity]'s SQLite column type does not match the type
* in the parent. Room will still do the matching using `String` representations.
*/
public const val RELATION_TYPE_MISMATCH: String = "ROOM_RELATION_TYPE_MISMATCH"
/**
* Reported when a `room.schemaLocation` argument is not provided into the annotation
* processor.
* You can either set [Database.exportSchema] to `false` or provide
* `room.schemaLocation` to the annotation processor. You are strongly advised to provide it
* and also commit them into your version control system.
*/
public const val MISSING_SCHEMA_LOCATION: String = "ROOM_MISSING_SCHEMA_LOCATION"
/**
* When there is a foreign key from Entity A to Entity B, it is a good idea to index the
* reference columns in B, otherwise, each modification on Entity A will trigger a full table
* scan on Entity B.
*
* If Room cannot find a proper index in the child entity (Entity B in this case), Room will
* print this warning.
*/
public const val MISSING_INDEX_ON_FOREIGN_KEY_CHILD: String =
"ROOM_MISSING_FOREIGN_KEY_CHILD_INDEX"
/**
* Reported when a junction entity whose column is used in a `@Relation` field with a
* `@Junction` does not contain an index. If the column is not covered by any index then a
* full table scan might be performed when resolving the relationship.
*
* It is recommended that columns on entities used as junctions contain indices, otherwise Room
* will print this warning.
*/
public const val MISSING_INDEX_ON_JUNCTION: String = "MISSING_INDEX_ON_JUNCTION"
/**
* Reported when a POJO has multiple constructors, one of which is a no-arg constructor. Room
* will pick that one by default but will print this warning in case the constructor choice is
* important. You can always guide Room to use the right constructor using the @Ignore
* annotation.
*/
public const val DEFAULT_CONSTRUCTOR: String = "ROOM_DEFAULT_CONSTRUCTOR"
/**
* Reported when a @Query method returns a POJO that has relations but the method is not
* annotated with @Transaction. Relations are run as separate queries and if the query is not
* run inside a transaction, it might return inconsistent results from the database.
*/
public const val RELATION_QUERY_WITHOUT_TRANSACTION: String =
"ROOM_RELATION_QUERY_WITHOUT_TRANSACTION"
/**
* Reported when an `@Entity` field's type do not exactly match the getter type.
* For instance, in the following class:
*
* ```
* @Entity
* class Foo {
* ...
* private val value: Boolean
* public fun getValue(): Boolean {
* return value == null ? false : value
* }
* }
* ```
*
* Trying to insert this entity into database will always set `value` column to
* `false` when `Foo.value` is `null` since Room will use the `getValue`
* method to read the value. So even thought the database column is nullable, it will never
* be inserted as `null` if inserted as a `Foo` instance.
*/
public const val MISMATCHED_GETTER: String = "ROOM_MISMATCHED_GETTER_TYPE"
/**
* Reported when an `@Entity` field's type do not exactly match the setter type.
* For instance, in the following class:
*
* ```
* @Entity
* class Foo {
* ...
* private val value: Boolean
* public fun setValue(value: Boolean) {
* this.value = value
* }
* }
* ```
*
* If Room reads this entity from the database, it will always set `Foo.value` to
* `false` when the column value is `null` since Room will use the `setValue`
* method to write the value.
*/
public const val MISMATCHED_SETTER: String = "ROOM_MISMATCHED_SETTER_TYPE"
/**
* Reported when there is an ambiguous column on the result of a multimap query.
*/
public const val AMBIGUOUS_COLUMN_IN_RESULT: String = "ROOM_AMBIGUOUS_COLUMN_IN_RESULT"
/**
* Reported when a nullable Collection, Array or Optional is returned from a DAO method.
* Room will return an empty Collection, Array or Optional respectively if no results are
* returned by such a query, hence using a nullable return type is unnecessary in this case.
*/
public const val UNNECESSARY_NULLABILITY_IN_DAO_RETURN_TYPE: String =
"ROOM_UNNECESSARY_NULLABILITY_IN_DAO_RETURN_TYPE"
}
@Deprecated("This type should not be instantiated as it contains only static methods. ")
@Suppress("PrivateConstructorForUtilityClass")
public constructor()
}