当使用 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
, 和T
onSELECT * FROM R
并修改为R
, S
, 或T
导致它被重新查询。