2011-02-08 46 views
1

我目前正努力讓一些Esper EPL查詢工作。查詢是這樣看:Esper:在EPL查詢中鏈接屬性訪問和方法調用

select a.center.distance(b.center) as delta 
from pattern [ 
    every-distinct(a.id, b.id) (
     a=org.example.PositionEvent -> b=org.example.PositionEvent 
    ) 
] 

當我嘗試通過EPAdministrator.createEPL()編譯成一個EPLStatement這個它拋出以下異常:

com.espertech.esper.client.EPStatementException:錯誤的語句開始:無法按名稱「a.center」中加載類,請檢查進口

如果我修改了事件類和查詢閱讀這樣

select a.distance(b) as delta 
from pattern [ 
    every-distinct(a.id, b.id) (
     a=org.example.PositionEvent -> b=org.example.PositionEvent 
    ) 
] 

它編譯得很好。 Esper似乎將a.center.distance(...)解釋爲類名,後跟靜態方法調用,而將a.distance(...)解釋爲對象a上的方法調用。

我該如何讓Esper將我的原始查詢解釋爲預期的(即作爲屬性訪問,然後是方法調用)?

回答

0

該解決方案實際上很簡單直接(但有點醜陋):使用圓括號,就像您在其他地方做的事情可能不明確時一樣。因此,進行第一次查詢的工作,寫這樣的:

select (a.center).distance(b.center) as delta 
from pattern [ 
    every-distinct(a.id, b.id) (
     a=org.example.PositionEvent -> b=org.example.PositionEvent 
    ) 
] 

在這種情況下,它實際上看起來稍微更具可讀性與加括號。

相關問題