我想使用 Kotlin Exposed 创建类似于 Ruby 的 ActiveRecord Scopes 的东西。
例如,我想分解以下查询,以便第一部分起到作用域的作用。
这个查询返回我想要的。
val m1 = Measurement.wrapRows(Measurements.innerJoin(Runs).select {
((exists(Tags.select { Tags.run.eq(Runs.sequelId) and Tags.name.eq("region") and Tags.value.eq("default") })) or notExists(Tags.select {
Tags.run.eq(Runs.sequelId) and Tags.name.eq("region")
})) and Measurements.name.eq("someName")
我想将此部分用作范围:
val q1 = Measurements.innerJoin(Runs).select {
((exists(Tags.select { Tags.run.eq(Runs.sequelId) and Tags.name.eq("region") and Tags.value.eq("default") })) or notExists(Tags.select {
Tags.run.eq(Runs.sequelId) and Tags.name.eq("region")
}))
}
然后能够使用 q1“范围”细化查询
所以是这样的:
val q2 = q1.having { Measurements.name.eq("someName") } // which does not work
最终我想把它推到测量对象或测量类中,这样我就可以做这样的事情
Measurement.withDefaultRegion.where( Measurements.name.eq("someName")