sqldelight: как сделать так, чтобы `create` вызывался только один раз - PullRequest
0 голосов
/ 17 февраля 2020

Как я могу убедиться, что Database.Schema.create() вызывается только один раз при использовании приложения? Вы можете добавить ...IF NOT EXISTS... к определению таблицы, тогда инструкции SQL выполняются при каждом запуске, но таблицы не создаются после первого запуска, однако я не уверен, что это правильный способ сделать это.

Кроме того, я мог бы запросить таблицы и проверить, присутствуют ли они уже.

То, что я ищу, выглядит примерно так:

if (<first run>) {
    Database.Schema.create()
}

Я думал, что смогу использовать миграции для этого, но миграции для sqldelight работают иначе, чем я ожидал (я пытался создать таблицы внутри миграции, но это не работает).

1 Ответ

0 голосов
/ 22 февраля 2020

Здесь был опубликован очень полезный ответ: https://github.com/cashapp/sqldelight/issues/1605

В основном это сводится к хранению текущей версии внутри PRAGMA user_version (которая изначально равна 0) и выполнению миграция, когда эта версия отличается от последней версии миграции.

Преимущество заключается в том, что версия хранится в базе данных. Я принял это решение для моего Kotlin проекта.

...