Как создать частичный индекс в Android Room - PullRequest
2 голосов
/ 31 марта 2019

Я хотел бы создать частичный индекс для моей таблицы с именем Messages для State и Id столбцов.Обычно это можно сделать, добавив предложение WHERE для создания оператора индекса, как описано в официальных документах .Правильный оператор SQLite:

CREATE INDEX `index_Messages_State_Id` ON `Messages` (`State`, `Id`) WHERE State = -2

Поскольку в настоящее время я использую Room в качестве ORM, я не знаю, как объявить частичный индекс с использованием синтаксиса Room.

Здеськраткое описание моей Messages таблицы:

@Entity(tableName = "Messages")
public class Message implements Parcelable {
    @PrimaryKey
    @SerializedName("i")
    @ColumnInfo(name = "Id")
    private long mId;

    @SerializedName("t")
    @ColumnInfo(name = "Type")
    private byte mType;

    @SerializedName("s")
    @ColumnInfo(name = "State")
    private byte mState;

    ....
}

Заранее спасибо.

1 Ответ

3 голосов
/ 22 июля 2019

Я не думаю, что есть определенный способ сделать это в Room (по состоянию на 22 июля 2019 г.).

В моей команде мы обошли этот блокиратор, определив частичный индекс внутри миграции.

database.execSQL("CREATE INDEX `index_Messages_State_Id` ON `Messages` (`State`, `Id`) WHERE State = -2")

Примечание: это может не работать, если ваша версия Android меньше 21. Частичный индекс работает только на SQLite 3.8.0 и выше, что поддерживается в API> = 21

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...