[jboss-jira] [JBoss JIRA] (DROOLS-5271) RHS statements ordering changes with modify block in executable model
Toshiya Kobayashi (Jira)
issues at jboss.org
Fri Apr 24 02:12:00 EDT 2020
[ https://issues.redhat.com/browse/DROOLS-5271?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Toshiya Kobayashi updated DROOLS-5271:
--------------------------------------
Description:
The order of statements in RHS changes with executable model when modify block is involved.
{code:java}
import org.drools.modelcompiler.domain.Person;global java.util.List list;
rule R when
$p1 : Person(name == "John")
$p2 : Person(name == "Paul")
then
list.add($p1.getAge());
list.add($p2.getAge());
modify($p1) { setAge($p1.getAge()+1) }
list.add($p1.getAge());
list.add($p2.getAge());
modify($p2) { setAge($p2.getAge()+5) }
list.add($p1.getAge());
list.add($p2.getAge());
end
{code}
Below is the generated code.
{code:java}
D.on(var_$p1,
var_$p2,
var_list).execute((org.drools.model.Drools drools, org.drools.modelcompiler.domain.Person $p1, org.drools.modelcompiler.domain.Person $p2, java.util.List list) -> {
{
{
list.add($p1.getAge());
list.add($p2.getAge());
list.add($p1.getAge());
list.add($p2.getAge());
list.add($p1.getAge());
list.add($p2.getAge());
($p1).setAge($p1.getAge() + 1);
drools.update($p1,
mask_$p1);
($p2).setAge($p2.getAge() + 5);
drools.update($p2,
mask_$p2);
}
}
}));
{code}
was:
The order of statements in RHS changes with executable model when modify block is involved. The below rule can tell the difference with standard-drl.
{code:java}
import org.drools.modelcompiler.domain.Person;global java.util.List list;
rule R when
$p1 : Person(name == "John")
$p2 : Person(name == "Paul")
then
list.add($p1.getAge());
list.add($p2.getAge());
modify($p1) { setAge($p1.getAge()+1) }
list.add($p1.getAge());
list.add($p2.getAge());
modify($p2) { setAge($p2.getAge()+5) }
list.add($p1.getAge());
list.add($p2.getAge());
end
{code}
{code:java}
D.on(var_$p1,
var_$p2,
var_list).execute((org.drools.model.Drools drools, org.drools.modelcompiler.domain.Person $p1, org.drools.modelcompiler.domain.Person $p2, java.util.List list) -> {
{
{
list.add($p1.getAge());
list.add($p2.getAge());
list.add($p1.getAge());
list.add($p2.getAge());
list.add($p1.getAge());
list.add($p2.getAge());
($p1).setAge($p1.getAge() + 1);
drools.update($p1,
mask_$p1);
($p2).setAge($p2.getAge() + 5);
drools.update($p2,
mask_$p2);
}
}
}));
{code}
> RHS statements ordering changes with modify block in executable model
> ---------------------------------------------------------------------
>
> Key: DROOLS-5271
> URL: https://issues.redhat.com/browse/DROOLS-5271
> Project: Drools
> Issue Type: Bug
> Components: executable model
> Affects Versions: 7.36.0.Final
> Reporter: Toshiya Kobayashi
> Assignee: Toshiya Kobayashi
> Priority: Major
>
> The order of statements in RHS changes with executable model when modify block is involved.
> {code:java}
> import org.drools.modelcompiler.domain.Person;global java.util.List list;
> rule R when
> $p1 : Person(name == "John")
> $p2 : Person(name == "Paul")
> then
> list.add($p1.getAge());
> list.add($p2.getAge());
> modify($p1) { setAge($p1.getAge()+1) }
> list.add($p1.getAge());
> list.add($p2.getAge());
> modify($p2) { setAge($p2.getAge()+5) }
> list.add($p1.getAge());
> list.add($p2.getAge());
> end
> {code}
> Below is the generated code.
> {code:java}
> D.on(var_$p1,
> var_$p2,
> var_list).execute((org.drools.model.Drools drools, org.drools.modelcompiler.domain.Person $p1, org.drools.modelcompiler.domain.Person $p2, java.util.List list) -> {
> {
> {
> list.add($p1.getAge());
> list.add($p2.getAge());
> list.add($p1.getAge());
> list.add($p2.getAge());
> list.add($p1.getAge());
> list.add($p2.getAge());
> ($p1).setAge($p1.getAge() + 1);
> drools.update($p1,
> mask_$p1);
> ($p2).setAge($p2.getAge() + 5);
> drools.update($p2,
> mask_$p2);
> }
> }
> }));
> {code}
--
This message was sent by Atlassian Jira
(v7.13.8#713008)
More information about the jboss-jira
mailing list