[
https://issues.redhat.com/browse/DROOLS-6025?page=com.atlassian.jira.plug...
]
Martin Panzer updated DROOLS-6025:
----------------------------------
Description:
I use the PatternDSL to dynamicly generate new rules based on user input.
In some cases, generated rules can contain an forall inside of an accumulator
(D.accumulate).
This worked fine in 7.48.0.Final.
In 7.49.0.Final, this throws the exception from below.
For reference, this is an shortened example of the code. The full reproducer contains this
code in executable form, and is attached.
{code:java}
ViewItem<?> forallRule = PatternDSL.and(
PatternDSL.forall(//
PatternDSL.pattern(grandV).expr(grand ->
"A".equals(grand.getName()))//
));
Variable<Integer> matchesSum =
PatternDSL.declarationOf(Integer.class);
ExprViewItem<Object> accumulate =
D.accumulate(PatternDSL.and(PatternDSL.pattern(childV), forallRule),
D.accFunction(IntegerSumAccumulateFunction.class,
PatternDSL.valueOf(1)).as(matchesSum));
return PatternDSL.and(accumulate, PatternDSL.expr(matchesSum, (sum)
-> sum == 1));
{code}
{code:java}
Exception in thread "main" java.lang.UnsupportedOperationException
at
org.drools.modelcompiler.KiePackagesBuilder.conditionToGroupElementType(KiePackagesBuilder.java:1119)
at
org.drools.modelcompiler.KiePackagesBuilder.recursivelyAddConditions(KiePackagesBuilder.java:622)
at
org.drools.modelcompiler.KiePackagesBuilder.buildAccumulate(KiePackagesBuilder.java:578)
at
org.drools.modelcompiler.KiePackagesBuilder.conditionToElement(KiePackagesBuilder.java:490)
at
org.drools.modelcompiler.KiePackagesBuilder.addSubConditions(KiePackagesBuilder.java:658)
at
org.drools.modelcompiler.KiePackagesBuilder.conditionToElement(KiePackagesBuilder.java:476)
at
org.drools.modelcompiler.KiePackagesBuilder.addSubConditions(KiePackagesBuilder.java:658)
at org.drools.modelcompiler.KiePackagesBuilder.populateLHS(KiePackagesBuilder.java:446)
at org.drools.modelcompiler.KiePackagesBuilder.compileRule(KiePackagesBuilder.java:246)
at org.drools.modelcompiler.KiePackagesBuilder.build(KiePackagesBuilder.java:217)
at
org.drools.modelcompiler.builder.KieBaseBuilder.createKieBaseFromModel(KieBaseBuilder.java:80)
at
org.drools.modelcompiler.builder.KieBaseBuilder.createKieBaseFromModel(KieBaseBuilder.java:74)
at
org.drools.modelcompiler.builder.KieBaseBuilder.createKieBaseFromModel(KieBaseBuilder.java:60)
at com.acme.Main.compile(Main.java:68)
at com.acme.Main.main(Main.java:29)
Disconnected from the target VM, address: '127.0.0.1:59601', transport:
'socket'
Process finished with exit code 1
{code}
was:
I use the PatternDSL to dynamicly generate new rules based on user input.
In some cases, generated rules can contain an forall inside of an accumulator
(D.accumulate).
This worked fine in 7.48.0.Final.
In 7.49.0.Final, this throws the exception from below.
For reference, this is an shortened example of the code. The full reproducer contains this
code in executable form.
{code:java}
ViewItem<?> forallRule = PatternDSL.and(
PatternDSL.forall(//
PatternDSL.pattern(grandV).expr(grand ->
"A".equals(grand.getName()))//
));
Variable<Integer> matchesSum =
PatternDSL.declarationOf(Integer.class);
ExprViewItem<Object> accumulate =
D.accumulate(PatternDSL.and(PatternDSL.pattern(childV), forallRule),
D.accFunction(IntegerSumAccumulateFunction.class,
PatternDSL.valueOf(1)).as(matchesSum));
return PatternDSL.and(accumulate, PatternDSL.expr(matchesSum, (sum)
-> sum == 1));
{code}
{code:java}
Exception in thread "main" java.lang.UnsupportedOperationException
at
org.drools.modelcompiler.KiePackagesBuilder.conditionToGroupElementType(KiePackagesBuilder.java:1119)
at
org.drools.modelcompiler.KiePackagesBuilder.recursivelyAddConditions(KiePackagesBuilder.java:622)
at
org.drools.modelcompiler.KiePackagesBuilder.buildAccumulate(KiePackagesBuilder.java:578)
at
org.drools.modelcompiler.KiePackagesBuilder.conditionToElement(KiePackagesBuilder.java:490)
at
org.drools.modelcompiler.KiePackagesBuilder.addSubConditions(KiePackagesBuilder.java:658)
at
org.drools.modelcompiler.KiePackagesBuilder.conditionToElement(KiePackagesBuilder.java:476)
at
org.drools.modelcompiler.KiePackagesBuilder.addSubConditions(KiePackagesBuilder.java:658)
at org.drools.modelcompiler.KiePackagesBuilder.populateLHS(KiePackagesBuilder.java:446)
at org.drools.modelcompiler.KiePackagesBuilder.compileRule(KiePackagesBuilder.java:246)
at org.drools.modelcompiler.KiePackagesBuilder.build(KiePackagesBuilder.java:217)
at
org.drools.modelcompiler.builder.KieBaseBuilder.createKieBaseFromModel(KieBaseBuilder.java:80)
at
org.drools.modelcompiler.builder.KieBaseBuilder.createKieBaseFromModel(KieBaseBuilder.java:74)
at
org.drools.modelcompiler.builder.KieBaseBuilder.createKieBaseFromModel(KieBaseBuilder.java:60)
at com.acme.Main.compile(Main.java:68)
at com.acme.Main.main(Main.java:29)
Disconnected from the target VM, address: '127.0.0.1:59601', transport:
'socket'
Process finished with exit code 1
{code}
UnsupportedOperationException when using forall inside accumulate
-----------------------------------------------------------------
Key: DROOLS-6025
URL:
https://issues.redhat.com/browse/DROOLS-6025
Project: Drools
Issue Type: Bug
Affects Versions: 7.49.0.Final
Reporter: Martin Panzer
Assignee: Mario Fusco
Priority: Major
Attachments: drool-uoe-repro.zip
I use the PatternDSL to dynamicly generate new rules based on user input.
In some cases, generated rules can contain an forall inside of an accumulator
(D.accumulate).
This worked fine in 7.48.0.Final.
In 7.49.0.Final, this throws the exception from below.
For reference, this is an shortened example of the code. The full reproducer contains
this code in executable form, and is attached.
{code:java}
ViewItem<?> forallRule = PatternDSL.and(
PatternDSL.forall(//
PatternDSL.pattern(grandV).expr(grand ->
"A".equals(grand.getName()))//
));
Variable<Integer> matchesSum =
PatternDSL.declarationOf(Integer.class);
ExprViewItem<Object> accumulate =
D.accumulate(PatternDSL.and(PatternDSL.pattern(childV), forallRule),
D.accFunction(IntegerSumAccumulateFunction.class,
PatternDSL.valueOf(1)).as(matchesSum));
return PatternDSL.and(accumulate, PatternDSL.expr(matchesSum, (sum)
-> sum == 1));
{code}
{code:java}
Exception in thread "main" java.lang.UnsupportedOperationException
at
org.drools.modelcompiler.KiePackagesBuilder.conditionToGroupElementType(KiePackagesBuilder.java:1119)
at
org.drools.modelcompiler.KiePackagesBuilder.recursivelyAddConditions(KiePackagesBuilder.java:622)
at
org.drools.modelcompiler.KiePackagesBuilder.buildAccumulate(KiePackagesBuilder.java:578)
at
org.drools.modelcompiler.KiePackagesBuilder.conditionToElement(KiePackagesBuilder.java:490)
at
org.drools.modelcompiler.KiePackagesBuilder.addSubConditions(KiePackagesBuilder.java:658)
at
org.drools.modelcompiler.KiePackagesBuilder.conditionToElement(KiePackagesBuilder.java:476)
at
org.drools.modelcompiler.KiePackagesBuilder.addSubConditions(KiePackagesBuilder.java:658)
at org.drools.modelcompiler.KiePackagesBuilder.populateLHS(KiePackagesBuilder.java:446)
at org.drools.modelcompiler.KiePackagesBuilder.compileRule(KiePackagesBuilder.java:246)
at org.drools.modelcompiler.KiePackagesBuilder.build(KiePackagesBuilder.java:217)
at
org.drools.modelcompiler.builder.KieBaseBuilder.createKieBaseFromModel(KieBaseBuilder.java:80)
at
org.drools.modelcompiler.builder.KieBaseBuilder.createKieBaseFromModel(KieBaseBuilder.java:74)
at
org.drools.modelcompiler.builder.KieBaseBuilder.createKieBaseFromModel(KieBaseBuilder.java:60)
at com.acme.Main.compile(Main.java:68)
at com.acme.Main.main(Main.java:29)
Disconnected from the target VM, address: '127.0.0.1:59601', transport:
'socket'
Process finished with exit code 1
{code}
--
This message was sent by Atlassian Jira
(v8.13.1#813001)