Я добавил 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, где я могу читать из всех отдельных таблиц, но не из объединенных полей.
Может кто-нибудь определить, где я что-то пропустил?