发布于 2016-05-09 10:22:21 | 168 次阅读 | 评论: 0 | 来源: 网友投递
Slick-pg PostgreSQL 的 Slick 扩展
Slick-pg 是一些针对 PostgreSQL 的 Slick 扩展,用于支持 PostgreSQL 的(特有)类型及/或相关函数。如果你对使用 Slick 来开发基于 PostgreSQL 的程序感兴趣,那么你会发现 slick-pg 非常有用。
Slick-pg v0.14.0 发布。
重大更新:
支持聚合函数
支持窗口函数
注:这些功能其实两年前就实现了,但合并到 slick 一直没有成功,所以,这次就干脆全做在 slick-pg 这端了。
----------------------------------------
让我们来感受一下,
// 聚合函数 object AggregateLibrary { val PercentileDisc = new SqlFunction("percentile_disc") } def percentileDisc(f: Double) = agg.OrderedAggFuncBuilder(AggLibrary.PercentileDisc, List(LiteralNode(f))) ... percentileDisc(0.5d).filter(t.y < 130d).within(t.x desc) //sql: percentile_disc(0.5) within group ( order by "x" desc) filter ( where "y" < 130.0)
// 窗口函数 object AggregateLibrary { val Avg = new SqlFunction("avg") } def avg[T : JdbcType](c: Rep[T]) = agg.AggFuncRep[T](AggLibrary.Avg, List(c.toNode)) ... avg(salary).over.partitionBy(dept).orderBy(dept,salary) .rowsFrame(RowCursor.UnboundPreceding, RowCursor.CurrentRow) //sql: avg(salary) over (partition by dept order by dept, salary rows between unbounded preceding and current row)