首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SqlDelight/SQLite没有正确执行连接?

SqlDelight/SQLite没有正确执行连接?
EN

Stack Overflow用户
提问于 2019-07-10 15:45:34
回答 1查看 647关注 0票数 1

我已经将SqlDelight添加到我的多平台项目中,并创建了一些基本的表和查询。

但是,当我尝试使用更复杂的查询时,比如JOINS,查询仍然会执行,生成的接口包含所有正确的字段,但实际的对象不包含生成的数据。

GithubRepository.sq:

代码语言:javascript
复制
CREATE TABLE GithubRepository (
    id INTEGER NOT NULL PRIMARY KEY,
    name TEXT NOT NULL
);

Foobar.sq:

代码语言:javascript
复制
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 ?;

现在,我通过几个测试验证了这是有效的,如下所示:

代码语言:javascript
复制
    @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访问查询时,联接的属性会保持为空。

在更复杂的设置中,我还在Android模拟器上对此进行了测试,我可以从所有单独的表中读取,但不能从连接的字段中读取。

有谁能发现我遗漏了什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-10 16:30:17

经过一些实验,我意识到我在Android上使用的是内存中的数据库。在通过将数据库名传递给SQLite构造函数将其切换到适当的基于文件的AndroidSqliteDriver数据库之后,JOINS被正确执行,预期的字段也被正确填充。

这似乎是内存数据库驱动程序的一个限制。我希望将测试切换到基于文件的测试也能解决测试失败的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56965779

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档