這個對象應該採取的解決您的問題。
object object RawSql {
def q(query: String, args: Any*) =
new RawTupleQuery(query, args)
class RawTupleQuery(query: String, args: Seq[Any]) {
private def prep = {
val s = Session.currentSession
val st = s.connection.prepareStatement(query)
def unwrap(o: Any) = o match {
case None => null
case Some(ob) => ob.asInstanceOf[AnyRef]
case null => null
case [email protected] => a
case [email protected]_ => a
}
for(z <- args.zipWithIndex) {
st.setObject(z._2 + 1, unwrap(z._1))
}
st
}
def toSeq[A1]()(implicit f1 : TypedExpressionFactory[A1,_]) = {
val st = prep
val rs = st.executeQuery
try {
val ab = new ArrayBuffer[A1]
val m1 = f1.thisMapper.asInstanceOf[PrimitiveJdbcMapper[A1]]
while(rs.next)
ab.append(m1.convertFromJdbc(m1.extractNativeJdbcValue(rs, 1)))
ab
}
finally {
rs.close()
st.close()
}
}
def toTupleSeq[A1,A2]()(implicit f1 : TypedExpressionFactory[A1,_], f2 : TypedExpressionFactory[A2,_]) = {
val st = prep
val rs = st.executeQuery
try {
val ab = new ArrayBuffer[(A1,A2)]
val m1 = f1.thisMapper.asInstanceOf[PrimitiveJdbcMapper[A1]]
val m2 = f2.thisMapper.asInstanceOf[PrimitiveJdbcMapper[A2]]
while(rs.next)
ab.append(
(m1.convertFromJdbc(m1.extractNativeJdbcValue(rs, 1)),
m2.convertFromJdbc(m2.extractNativeJdbcValue(rs, 2))))
ab
}
finally {
rs.close()
st.close()
}
}
}
}
我從這個要點有:
https://gist.github.com/max-l/9250053
Squeryl是 「A斯卡拉ORM和DSL與數據庫說話」。您想要將哪個確切的SQL查詢轉換爲squeryl語句? 我想給出一個提示:如果數據庫無法解決您的問題,那麼squeryl也不能解決它們。 – VasyaNovikov
@VasyaNovikov我已經用特定的查詢更新了我的問題,我想執行。 – jbrown
那麼你的問題似乎就是使用數據庫的自定義函數。我從來沒有使用過這個,但似乎squeryl有一段關於這個:http://squeryl.org/custom-functions.html也許它會有所幫助。如果不是這樣,也許你應該就SO提出一個單獨的問題(人們可能跳過了不瞭解「地理」目標的問題)。 – VasyaNovikov