发布于 2016-05-09 10:22:21 | 173 次阅读 | 评论: 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)