Slick的SimpleLiteral是如何使用的?

时间:2014-08-23 05:15:28

标签: scala slick

我想在我的代码中使用 PostgreSQL 的一些额外功能,但我不想用 SQL 字符串插值填充该位置

目前我有:

/** Use 'now()' through Slick. */
val psqlNow = SimpleFunction.nullary[java.sql.Date]("now")

//Not really my code, but we only care for 2 lines.
def aQuery(limiter: Column[Int]) = {
  myTable
    .filter(_.validFrom >= psqlNow)
    .filter(_.validUntil <= psqlNow)
    .filter(_.fakeId === limiter).map(e => (e.fakeId, e.name)
}

但是我想使用&#39; CURRENT_DATE&#39; ,我是一个文字(并使用它代替&#34;现在&#34; 抛出异常)。有人可以提供一个实际的例子,因为我无法编译:

/** Use 'CURRENT_DATE' through Slick. */
val psqlNow = SimpleLiteral("CURRENT_DATE")(...WHAT GOES HERE?...)

//Not really my code, but we only care for 2 lines.
def aQuery(limiter: Column[Int]) = {
  myTable
    .filter(_.validFrom >= psqlNow)
    .filter(_.validUntil <= psqlNow)
    .filter(_.fakeId === limiter).map(e => (e.fakeId, e.name)
}

我还想更改以下内容以解除 Slick ,我可以使用 SimpleLiteral (以某种方式将&#39; count(*) OVER()将已过滤的&#39; 记录到生成的查询中?

SELECT *, count(*) OVER() recordsFiltered FROM example
WHERE id = $1

这些例子很简单,实际代码是过滤标准的一系列折叠。

1 个答案:

答案 0 :(得分:2)

import scala.slick.ast.TypedType

val current_date = Column.forNode[java.sql.Date](new SimpleLiteral("CURRENT_DATE")(implicitly[TypedType[java.sql.Date]]))

诀窍。目前缺少更好的支持。

我添加了PR,所以在Slick 2.2中它将得到支持:

val current_date = SimpleLiteral[java.sql.Date]("CURRENT_DATE")

请参阅https://github.com/slick/slick/pull/981