1

我目前正在努力让一些 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
    )
]

当我尝试将其编译成EPLStatementviaEPAdministrator.createEPL()时,它会引发以下异常:

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(...)为对 object 的方法调用a

如何让 Esper 按预期解释我的原始查询(即作为属性访问,然后是方法调用)?

4

1 回答 1

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
    )
]

在这种情况下,添加括号后,它实际上看起来更易读。

于 2011-04-14T21:05:59.103 回答