В WSO2 CEP 3.0.0. Я испытал некоторое запутанное поведение с атрибутами двойного типа.wso2 CEP 3.0.0: литье до двойного типа
Предположим следующий сценарий: сиддхи
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]
...
В этом сценарии введение DoubleAttr1 в DoubleStream работает, давая хорошо плавающее значение с запятой. Но фильтр затем поднимает исключение кастинга.
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 считается длинным?
Если рассчитать DoubleAttr1 как:
convert(LongAttr1/LongAttr2, double)
or
(LongAttr1 * 100.0)/(LongAttr2 * 100.0)
исключение не поднимается больше. Я нашел это поведение довольно запутанным, и я думаю, что его следует предотвратить или исправить в последующих выпусках. Что вы думаете?
Br,
Эрик
PS: Я испытал также некоторые ошибки округления с функцией новообращенного: обращенного (LogAttr1/LongAttr2 * 100), дает 99,0 как результат, если LongAttr1 = 2 и LongAttr2 = 2