[jboss-jira] [JBoss JIRA] (DROOLS-4560) executable-model wrongly calculates in eval with parenthesis

Luca Molteni (Jira) issues at jboss.org
Mon Oct 7 03:31:00 EDT 2019


     [ https://issues.jboss.org/browse/DROOLS-4560?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Luca Molteni updated DROOLS-4560:
---------------------------------
    Sprint: 2019 Week 38-40 (from Sep 16)


> executable-model wrongly calculates in eval with parenthesis
> ------------------------------------------------------------
>
>                 Key: DROOLS-4560
>                 URL: https://issues.jboss.org/browse/DROOLS-4560
>             Project: Drools
>          Issue Type: Bug
>          Components: executable model
>    Affects Versions: 7.27.0.Final
>         Environment: - executable-model
>            Reporter: Toshiya Kobayashi
>            Assignee: Luca Molteni
>            Priority: Major
>              Labels: support
>
> executable-model wrongly calculates in eval with parenthesis.
> For example, with this rule,
> {noformat}
> import org.drools.modelcompiler.domain.CalcFact;rule R when
>   $p : CalcFact( $v1 : value1, $v2 : value2 )
>   eval( ($v1 / ($v2 * 10) * 10) > 25 )
> then
> end
> {noformat}
> if $v1 = 1 and $v2 = 1, ($v1 / ($v2 * 10) * 10) is 1. So the rule should not fire.
> However, executable-model generates Java code:
> {code:java}
> public class Rules4A265EF484FEEE0E4E84E77B3DEB48F9RuleMethods0 {
>     /**
>      * Rule name: R
>      */
>     public static org.drools.model.Rule rule_R() {
>         final org.drools.model.Variable<org.drools.modelcompiler.domain.CalcFact> var_$p = D.declarationOf(org.drools.modelcompiler.domain.CalcFact.class,
>                                                                                                            "$p");
>         final org.drools.model.Variable<Double> var_$v1 = D.declarationOf(Double.class,
>                                                                           "$v1");
>         final org.drools.model.Variable<Double> var_$v2 = D.declarationOf(Double.class,
>                                                                           "$v2");
>         org.drools.model.Rule rule = D.rule("R").build(D.bind(var_$v1).as(var_$p,
>                                                                           (_this) -> _this.getValue1()).reactOn("value1"),
>                                                        D.bind(var_$v2).as(var_$p,
>                                                                           (_this) -> _this.getValue2()).reactOn("value2"),
>                                                        D.expr("454A1C822808AC7491268E4F381F0EDA",
>                                                               var_$v1,
>                                                               var_$v2,
>                                                               ($v1, $v2) -> org.drools.modelcompiler.util.EvaluationUtil.greaterThanNumbers($v1 / $v2 * 10 * 10,
>                                                                                                                                             25d)),
>                                                        D.execute(() -> {
>                                                        }));
>         return rule;
>     }
> }
> {code}
> See that parentheses are removed so ($v1 / $v2 * 10 * 10) becomes 100.



--
This message was sent by Atlassian Jira
(v7.13.8#713008)


More information about the jboss-jira mailing list