WSO2 CEP 3.0.0。double 型の属性で紛らわしい動作を経験しました。
次の siddhi スクリプトを想定します。
define stream LongStream LongAttr1 long, LongAttr2 long;
define stream DoubleStream DoubleAttr1 double;
from LongStream
select (LongAttr1/LongAttr2) as DoubleAttr1
insert into DoubleStream;
from DoubleStream[DoubleAttr1 > 0.75]
...
このスクリプトでは、DoubleStream への DoubleAttr1 の挿入が機能しており、10 進数の浮動小数点値を適切に提供しています。しかし、その後のフィルターはキャスト例外を発生させています。
ERROR - {QuerySelector} Input event attribute type java.lang.Double cannot be cast to java.lang.Long type defined in the stream definition!
java.lang.ClassCastException: java.lang.Double cannot be cast to java.lang.Long at org.wso2.siddhi.core.executor.conditon.compare.greater_than_equal.GreaterThanEqualCompareConditionExecutorLongDouble.process(GreaterThanEqualCompareConditionExecutorLongDouble.java:34)
DoubleAttr1 が long と見なされているように見えますが、これはかなり紛らわしいですか?
DoubleAttr1 を次のように計算すると:
convert(LongAttr1/LongAttr2, double)
or
(LongAttr1 * 100.0) / (LongAttr2 * 100.0)
例外はもう発生しません。この動作は非常に紛らわしいと感じました。今後のリリースで防止または修正する必要があると思います。あなたの意見は何ですか?
Br、
エリック
PS: convert 関数でいくつかの丸めエラーも経験しました: convert (LogAttr1 / LongAttr2 *100) は、LongAttr1 = 2 および LongAttr2 = 2 の場合、結果として 99.0 を返します