【发布时间】:2015-12-07 02:55:52
【问题描述】:
我正在使用 Scala (http://github.com/getquill/quill) 开发一个语言集成查询库,我正在努力为其生成对应的 SQL 查询。
可以针对这些情况生成查询:
t1.flatMap(a => t2.filter(b => b.s == a.s).map(b => b.s))
SELECT t2.s FROM t1, t2 WHERE t2.s = t1.s
t1.flatMap(a => t2.map(b => b.s).take(10))
SELECT x.s FROM t1, (SELECT * FROM t2 LIMIT 10) x
但我不知道如何表达另一个:
t1.flatMap(a => t2.filter(b => b.s == a.s).map(b => b.s).take(10))
有可能吗?这个问题也可以表述为:有没有办法在 SQL 中使用应用连接来表达单子组合中的这种数据依赖关系?
我正在寻找一个通用的解决方案,这样它就可以用于像这些这样的其他作品:
t1.flatMap(a => t2.filter(b => b.s == a.s).sortBy(b => b.s % a.s).map(b => b.s).take(10))
t1.flatMap(a => t2.filter(b => b.s == a.s).map(b => b.s).take(10).flatMap(b => t3.filter(c => c.s == b.s/a.s))
我正在研究 MySQL、Postgres 和 H2 的方言。
【问题讨论】:
-
您可能想看看他们在 Slick 中是如何做到的。祝你好运……
-
感谢贾斯珀的提示。 Slick 会为这种组合生成无效的 SQL。
-
你能提供一个关于你的 monad 定义和例子的要点吗?
-
@Edmondo1984 该示例在问题描述中。 monad接口在这里:github.com/getquill/quill/blob/master/quill-core/src/main/scala/…
-
@Edmondo1984 您还可以在此处找到更多信息:gist.github.com/fwbrasil/2db2b6ac2b86fe820442
标签: mysql sql postgresql scala h2