SqlDelight / SQLite не выполняет соединения правильно? - PullRequest
1 голос
/ 10 июля 2019

Я добавил SqlDelight в свой проект Multiplatform и создал несколько базовых таблиц и запросов.

Когда я пытаюсь использовать более сложные запросы, как, например, JOINS, запрос все еще выполняется, и сгенерированные интерфейсы содержат все правильные поля, но фактические объекты не содержат сгенерированные данные.

GithubRepository.sq:

CREATE TABLE GithubRepository (
    id INTEGER NOT NULL PRIMARY KEY,
    name TEXT NOT NULL
);

Foobar.sq:

CREATE TABLE foobar (
    id INTEGER NOT NULL PRIMARY KEY,
    foobar TEXT NOT NULL,
    repoId INTEGER NOT NULL,
    FOREIGN KEY(repoId) REFERENCES GithubRepository(id)
);

findFoobars:
SELECT *
FROM foobar
LEFT JOIN GithubRepository ON GithubRepository.id = foobar.repoId;

insert:
INSERT INTO foobar VALUES ?;

Теперь я проверяю, что это работает с парой тестов, например так:

    @Test
    fun `Joins working?`() {
        assertEquals(0, queries.findAll().executeAsList().size)

        queries.insert(GithubRepository.Impl(2, "bar"))
        foobarQueries.insert(Foobar.Impl(1, "foo", 2))

        assertEquals("bar", foobarQueries.findFoobars().executeAsList()[0].name)
    }

Все отдельные запросы выполняются успешно, и я могу писать и читать из всех таблиц, как и ожидалось.

Бывает, что при доступе к запросу с JOIN свойство join остается пустым.

В более сложной настройке я также проверил это на эмуляторе Android, где я могу читать из всех отдельных таблиц, но не из объединенных полей.

Может кто-нибудь определить, где я что-то пропустил?

1 Ответ

0 голосов
/ 10 июля 2019

После еще нескольких экспериментов я понял, что использую базу данных в памяти на Android.После переключения на правильную файловую базу данных SQLite путем передачи имени базы данных в конструктор AndroidSqliteDriver, JOINS выполняются правильно, а ожидаемые поля заполнены правильно.

Кажется, это ограничениедрайвера базы данных в памяти.Я ожидаю, что переключение тестов на файловое решение также решит проблемы с тестами.

...