0
我正在使用Squeryl和自定義函數來執行地理空間查找,並且生成的SQL不正確。我正在拉我的頭髮,試圖弄清楚我做錯了什麼。這裏是什麼,我有一個超級簡單的例子:Squeryl:使用自定義函數和列名引用的錯誤
我創建了下面的自定義函數爲正弦關係:
class SIN(e: NumericalExpression[Double], m:OutMapper[Double])
extends FunctionNode[Double]("sin", Some(m), Seq(e)) with NumericalExpression[Double]
def sin(e: NumericalExpression[Double])(implicit m:OutMapper[Double]) = new SIN(e,m)
然後我寫了一個查詢,看起來像這樣(顯然簡化了本次測試的目的):
val query = from(StoreTable)(s =>
select(s)
orderBy(sin(s.latitude * Math.PI/180))
)
將會產生以下SQL
Select ...
From
store store14
Order By
sin(store14.latitude)
順序中的「Math.PI/180」部分發生了什麼?在進一步挖掘之後,我發現了&函數來評估數據庫端的表達式,這在上下文中是有意義的,但使用&表達式實際上會導致NullPointerException。下面是我所做的具體做法是:
val query = from(this.table)(s =>
select(s)
orderBy(sin(&(s.latitude * Math.PI/180.0)))
)
這導致以下情況例外:
[error] NullPointerException: null (QueryDsl.scala:159)
[error] org.squeryl.internals.FieldReferenceLinker$.pushExpressionOrCollectValue(FieldReferenceLinker.scala:36)
[error] org.squeryl.dsl.QueryDsl$class.$amp(QueryDsl.scala:159)
[error] org.squeryl.PrimitiveTypeMode$.$amp(PrimitiveTypeMode.scala:40)
誰能告訴我什麼,我做錯了什麼?
在此先感謝! 喬
運營商'時代'和'div'在這種情況下提升AST – 2013-05-03 17:04:48
您好最高。是的,這是有效的。非常感謝! – Joe 2013-05-03 20:17:42