首页 > 解决方案 > SQLDelight - 修改子表时在父表上发出

问题描述

当使用 SQLDelight 更新子表时,我还没有遇到在父表上发出通知的明显方法。

这是一个 E/R 图,大致概述了我在玩的结构:

在此处输入图像描述

这大致转换为以下数据库模式:

R(ID)
S(ID, parentId)
T(S_ID, attribute)

这些.sq文件:

-- com/package/R.sq
CREATE TABLE R (
    ID Text PRIMARY KEY
);
-- com/package/S.sq
CREATE TABLE S (
    ID Text PRIMARY KEY,
    parentId TEXT REFERENCES R(ID) ON DELETE CASCADE
);
-- com/package/T.sq
CREATE TABLE T (
    S_ID TEXT REFERENCES S(ID) ON DELETE CASCADE
    attribute TEXT,
    PRIMARY KEY(S_ID, attribute)
);

而我想要发生的是,当 T 的属性被更新时,SELECT *通知 S(以及 R)上的查询,同样,当 S 的属性更新时,通知 R 上的查询。

有没有人遇到过使用 SQLDelight 执行此操作的方法?

在 SqlBrite 中,我可以在查询中指定一组触发器表,这样当修改任何触发器表时,查询将重新运行,并将结果集发送到下游。所以我可以将我的触发器表声明为R, S, 和TonSELECT * FROM R并修改为R, S, 或T导致它被重新查询。

标签: androidkotlinsqldelight

解决方案


这是 SQLDelight 中的一个错误。这是它的 github 问题:https ://github.com/cashapp/sqldelight/issues/1325


推荐阅读