This is an automated email from the ASF dual-hosted git repository.
tkobayas pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-kie-drools.git
The following commit(s) were added to refs/heads/main by this push:
new a4a029d017 [incubator-kie-drools-6366] Raise a build error when insert
etc. is used in RuleUnit rules (#6402)
a4a029d017 is described below
commit a4a029d0170caa52e1ddfb672d755d279aabaf94
Author: Toshiya Kobayashi <[email protected]>
AuthorDate: Fri Jul 18 16:11:30 2025 +0900
[incubator-kie-drools-6366] Raise a build error when insert etc. is used in
RuleUnit rules (#6402)
---
.../execmodel/errors/UnsupportedMethodError.java | 31 +++++++---------
.../codegen/execmodel/generator/Consequence.java | 10 ++++++
...UpdateNoDSTestUnit.java => ModifyTestUnit.java} | 12 +++----
.../ruleunits/impl/RuleUnitProviderImplTest.java | 13 +++++++
...oDSTestUnit.java => UnsupportedMethodTest.java} | 35 ++++++++----------
...oDSTestUnit.java => UnsupportedMethodUnit.java} | 16 ++++-----
.../drools/ruleunits/impl/UpdateNoDSTestUnit.java | 6 ++--
.../org/drools/ruleunits/impl/Modify.drl} | 40 +++++++--------------
.../drools/ruleunits/impl/UnsupportedMethod.drl} | 42 ++++++++--------------
9 files changed, 92 insertions(+), 113 deletions(-)
diff --git
a/drools-ruleunits/drools-ruleunits-impl/src/test/java/org/drools/ruleunits/impl/UpdateNoDSTestUnit.java
b/drools-model/drools-model-codegen/src/main/java/org/drools/model/codegen/execmodel/errors/UnsupportedMethodError.java
similarity index 53%
copy from
drools-ruleunits/drools-ruleunits-impl/src/test/java/org/drools/ruleunits/impl/UpdateNoDSTestUnit.java
copy to
drools-model/drools-model-codegen/src/main/java/org/drools/model/codegen/execmodel/errors/UnsupportedMethodError.java
index 1e7051cc9f..c75ddbd002 100644
---
a/drools-ruleunits/drools-ruleunits-impl/src/test/java/org/drools/ruleunits/impl/UpdateNoDSTestUnit.java
+++
b/drools-model/drools-model-codegen/src/main/java/org/drools/model/codegen/execmodel/errors/UnsupportedMethodError.java
@@ -16,33 +16,26 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.drools.ruleunits.impl;
+package org.drools.model.codegen.execmodel.errors;
-import org.drools.ruleunits.api.DataSource;
-import org.drools.ruleunits.api.DataStore;
-import org.drools.ruleunits.api.RuleUnitData;
-import org.drools.ruleunits.impl.domain.Person;
+import org.drools.drl.parser.DroolsError;
+import org.kie.internal.builder.ResultSeverity;
-import java.util.ArrayList;
-import java.util.List;
+public class UnsupportedMethodError extends DroolsError {
-public class UpdateNoDSTestUnit implements RuleUnitData {
- private final List<String> results = new ArrayList<>();
- private final DataStore<Person> persons;
- public UpdateNoDSTestUnit() {
- this(DataSource.createStore());
+ public UnsupportedMethodError(String message) {
+ super(message);
}
- public UpdateNoDSTestUnit(DataStore<Person> persons) {
- this.persons = persons;
+ @Override
+ public ResultSeverity getSeverity() {
+ return ResultSeverity.ERROR;
}
- public DataStore<Person> getPersons() {
- return persons;
- }
- public List<String> getResults() {
- return results;
+ @Override
+ public int[] getLines() {
+ return new int[0];
}
}
diff --git
a/drools-model/drools-model-codegen/src/main/java/org/drools/model/codegen/execmodel/generator/Consequence.java
b/drools-model/drools-model-codegen/src/main/java/org/drools/model/codegen/execmodel/generator/Consequence.java
index 9f4deab575..53cd3b2718 100644
---
a/drools-model/drools-model-codegen/src/main/java/org/drools/model/codegen/execmodel/generator/Consequence.java
+++
b/drools-model/drools-model-codegen/src/main/java/org/drools/model/codegen/execmodel/generator/Consequence.java
@@ -58,6 +58,7 @@ import
org.drools.model.codegen.execmodel.errors.CompilationProblemErrorResult;
import org.drools.model.codegen.execmodel.errors.ConsequenceRewriteException;
import org.drools.model.codegen.execmodel.errors.InvalidExpressionErrorResult;
import org.drools.model.codegen.execmodel.errors.MvelCompilationError;
+import org.drools.model.codegen.execmodel.errors.UnsupportedMethodError;
import org.drools.modelcompiler.consequence.DroolsImpl;
import org.drools.mvelcompiler.CompiledBlockResult;
import org.drools.mvelcompiler.MvelCompilerException;
@@ -91,6 +92,7 @@ public class Consequence {
public static final Set<String> knowledgeHelperMethods = new HashSet<>();
public static final Set<String> implicitDroolsMethods = new HashSet<>();
+ public static final Set<String> defaultEntryPointMethods = new HashSet<>();
public static final Set<String> dataStoreMethods = new HashSet<>();
@@ -108,6 +110,10 @@ public class Consequence {
implicitDroolsMethods.add("retract");
implicitDroolsMethods.add("update");
+ defaultEntryPointMethods.add("insert");
+ defaultEntryPointMethods.add("insertLogical");
+ defaultEntryPointMethods.add("insertAsync");
+
knowledgeHelperMethods.add("getWorkingMemory");
knowledgeHelperMethods.add("getRule");
knowledgeHelperMethods.add("getMatch");
@@ -357,6 +363,10 @@ public class Consequence {
}
}
} else if (
implicitDroolsMethods.contains(methodCallExpr.getNameAsString()) ) {
+ if
(defaultEntryPointMethods.contains(methodCallExpr.getNameAsString()) &&
context.getRuleUnitDescr() != null) {
+ context.addCompilationError(new UnsupportedMethodError("'" +
methodCallExpr.getNameAsString() +
+
"' is not supported with RuleUnit. Please use methods from DataStore or
DataStream instead."));
+ }
if ( methodCallExpr.getNameAsString().equals("insertLogical") &&
!TruthMaintenanceSystemFactory.present() ) {
context.addCompilationError(new
MissingDependencyError(TruthMaintenanceSystemFactory.NO_TMS));
}
diff --git
a/drools-ruleunits/drools-ruleunits-impl/src/test/java/org/drools/ruleunits/impl/UpdateNoDSTestUnit.java
b/drools-ruleunits/drools-ruleunits-impl/src/test/java/org/drools/ruleunits/impl/ModifyTestUnit.java
similarity index 90%
copy from
drools-ruleunits/drools-ruleunits-impl/src/test/java/org/drools/ruleunits/impl/UpdateNoDSTestUnit.java
copy to
drools-ruleunits/drools-ruleunits-impl/src/test/java/org/drools/ruleunits/impl/ModifyTestUnit.java
index 1e7051cc9f..a3d71745c4 100644
---
a/drools-ruleunits/drools-ruleunits-impl/src/test/java/org/drools/ruleunits/impl/UpdateNoDSTestUnit.java
+++
b/drools-ruleunits/drools-ruleunits-impl/src/test/java/org/drools/ruleunits/impl/ModifyTestUnit.java
@@ -18,23 +18,23 @@
*/
package org.drools.ruleunits.impl;
+import java.util.ArrayList;
+import java.util.List;
+
import org.drools.ruleunits.api.DataSource;
import org.drools.ruleunits.api.DataStore;
import org.drools.ruleunits.api.RuleUnitData;
import org.drools.ruleunits.impl.domain.Person;
-import java.util.ArrayList;
-import java.util.List;
-
-public class UpdateNoDSTestUnit implements RuleUnitData {
+public class ModifyTestUnit implements RuleUnitData {
private final List<String> results = new ArrayList<>();
private final DataStore<Person> persons;
- public UpdateNoDSTestUnit() {
+ public ModifyTestUnit() {
this(DataSource.createStore());
}
- public UpdateNoDSTestUnit(DataStore<Person> persons) {
+ public ModifyTestUnit(DataStore<Person> persons) {
this.persons = persons;
}
diff --git
a/drools-ruleunits/drools-ruleunits-impl/src/test/java/org/drools/ruleunits/impl/RuleUnitProviderImplTest.java
b/drools-ruleunits/drools-ruleunits-impl/src/test/java/org/drools/ruleunits/impl/RuleUnitProviderImplTest.java
index f9178b06da..d98ef8ef10 100644
---
a/drools-ruleunits/drools-ruleunits-impl/src/test/java/org/drools/ruleunits/impl/RuleUnitProviderImplTest.java
+++
b/drools-ruleunits/drools-ruleunits-impl/src/test/java/org/drools/ruleunits/impl/RuleUnitProviderImplTest.java
@@ -167,6 +167,19 @@ public class RuleUnitProviderImplTest {
}
}
+ @Test
+ public void modify() {
+ ModifyTestUnit unit = new ModifyTestUnit();
+
+ try ( RuleUnitInstance<ModifyTestUnit> unitInstance =
RuleUnitProvider.get().createRuleUnitInstance(unit) ) {
+
+ unit.getPersons().add(new Person("Mario", 17));
+
+ assertThat(unitInstance.fire()).isEqualTo(2);
+ assertThat(unit.getResults()).containsExactly("ok");
+ }
+ }
+
@Test
public void wrongType() {
try {
diff --git
a/drools-ruleunits/drools-ruleunits-impl/src/test/java/org/drools/ruleunits/impl/UpdateNoDSTestUnit.java
b/drools-ruleunits/drools-ruleunits-impl/src/test/java/org/drools/ruleunits/impl/UnsupportedMethodTest.java
similarity index 50%
copy from
drools-ruleunits/drools-ruleunits-impl/src/test/java/org/drools/ruleunits/impl/UpdateNoDSTestUnit.java
copy to
drools-ruleunits/drools-ruleunits-impl/src/test/java/org/drools/ruleunits/impl/UnsupportedMethodTest.java
index 1e7051cc9f..cbbad247fa 100644
---
a/drools-ruleunits/drools-ruleunits-impl/src/test/java/org/drools/ruleunits/impl/UpdateNoDSTestUnit.java
+++
b/drools-ruleunits/drools-ruleunits-impl/src/test/java/org/drools/ruleunits/impl/UnsupportedMethodTest.java
@@ -18,31 +18,26 @@
*/
package org.drools.ruleunits.impl;
-import org.drools.ruleunits.api.DataSource;
-import org.drools.ruleunits.api.DataStore;
-import org.drools.ruleunits.api.RuleUnitData;
+import org.drools.ruleunits.api.RuleUnitProvider;
import org.drools.ruleunits.impl.domain.Person;
+import org.junit.jupiter.api.Test;
+import org.kie.api.builder.CompilationErrorsException;
-import java.util.ArrayList;
-import java.util.List;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.jupiter.api.Assertions.assertThrows;
-public class UpdateNoDSTestUnit implements RuleUnitData {
- private final List<String> results = new ArrayList<>();
- private final DataStore<Person> persons;
+public class UnsupportedMethodTest {
- public UpdateNoDSTestUnit() {
- this(DataSource.createStore());
- }
-
- public UpdateNoDSTestUnit(DataStore<Person> persons) {
- this.persons = persons;
- }
+ @Test
+ public void insert_shouldBuildError() {
+ UnsupportedMethodUnit unit = new UnsupportedMethodUnit();
+ unit.getPersons().add(new Person("John", 30));
- public DataStore<Person> getPersons() {
- return persons;
- }
+ CompilationErrorsException exception =
assertThrows(CompilationErrorsException.class,
+ () ->
RuleUnitProvider.get().createRuleUnitInstance(unit));
- public List<String> getResults() {
- return results;
+ assertThat(exception.getErrorMessages()).hasSize(2);
+ assertThat(exception.getErrorMessages())
+ .allSatisfy(error -> assertThat(error.getText()).contains("is
not supported with RuleUnit"));
}
}
diff --git
a/drools-ruleunits/drools-ruleunits-impl/src/test/java/org/drools/ruleunits/impl/UpdateNoDSTestUnit.java
b/drools-ruleunits/drools-ruleunits-impl/src/test/java/org/drools/ruleunits/impl/UnsupportedMethodUnit.java
similarity index 82%
copy from
drools-ruleunits/drools-ruleunits-impl/src/test/java/org/drools/ruleunits/impl/UpdateNoDSTestUnit.java
copy to
drools-ruleunits/drools-ruleunits-impl/src/test/java/org/drools/ruleunits/impl/UnsupportedMethodUnit.java
index 1e7051cc9f..fcc2ca6787 100644
---
a/drools-ruleunits/drools-ruleunits-impl/src/test/java/org/drools/ruleunits/impl/UpdateNoDSTestUnit.java
+++
b/drools-ruleunits/drools-ruleunits-impl/src/test/java/org/drools/ruleunits/impl/UnsupportedMethodUnit.java
@@ -18,31 +18,27 @@
*/
package org.drools.ruleunits.impl;
+import java.util.ArrayList;
+import java.util.List;
+
import org.drools.ruleunits.api.DataSource;
import org.drools.ruleunits.api.DataStore;
import org.drools.ruleunits.api.RuleUnitData;
import org.drools.ruleunits.impl.domain.Person;
-import java.util.ArrayList;
-import java.util.List;
+public class UnsupportedMethodUnit implements RuleUnitData {
-public class UpdateNoDSTestUnit implements RuleUnitData {
- private final List<String> results = new ArrayList<>();
private final DataStore<Person> persons;
- public UpdateNoDSTestUnit() {
+ public UnsupportedMethodUnit() {
this(DataSource.createStore());
}
- public UpdateNoDSTestUnit(DataStore<Person> persons) {
+ public UnsupportedMethodUnit(DataStore<Person> persons) {
this.persons = persons;
}
public DataStore<Person> getPersons() {
return persons;
}
-
- public List<String> getResults() {
- return results;
- }
}
diff --git
a/drools-ruleunits/drools-ruleunits-impl/src/test/java/org/drools/ruleunits/impl/UpdateNoDSTestUnit.java
b/drools-ruleunits/drools-ruleunits-impl/src/test/java/org/drools/ruleunits/impl/UpdateNoDSTestUnit.java
index 1e7051cc9f..771e97464a 100644
---
a/drools-ruleunits/drools-ruleunits-impl/src/test/java/org/drools/ruleunits/impl/UpdateNoDSTestUnit.java
+++
b/drools-ruleunits/drools-ruleunits-impl/src/test/java/org/drools/ruleunits/impl/UpdateNoDSTestUnit.java
@@ -18,14 +18,14 @@
*/
package org.drools.ruleunits.impl;
+import java.util.ArrayList;
+import java.util.List;
+
import org.drools.ruleunits.api.DataSource;
import org.drools.ruleunits.api.DataStore;
import org.drools.ruleunits.api.RuleUnitData;
import org.drools.ruleunits.impl.domain.Person;
-import java.util.ArrayList;
-import java.util.List;
-
public class UpdateNoDSTestUnit implements RuleUnitData {
private final List<String> results = new ArrayList<>();
private final DataStore<Person> persons;
diff --git
a/drools-ruleunits/drools-ruleunits-impl/src/test/java/org/drools/ruleunits/impl/UpdateNoDSTestUnit.java
b/drools-ruleunits/drools-ruleunits-impl/src/test/resources/org/drools/ruleunits/impl/Modify.drl
similarity index 54%
copy from
drools-ruleunits/drools-ruleunits-impl/src/test/java/org/drools/ruleunits/impl/UpdateNoDSTestUnit.java
copy to
drools-ruleunits/drools-ruleunits-impl/src/test/resources/org/drools/ruleunits/impl/Modify.drl
index 1e7051cc9f..57f693db69 100644
---
a/drools-ruleunits/drools-ruleunits-impl/src/test/java/org/drools/ruleunits/impl/UpdateNoDSTestUnit.java
+++
b/drools-ruleunits/drools-ruleunits-impl/src/test/resources/org/drools/ruleunits/impl/Modify.drl
@@ -1,4 +1,4 @@
-/*
+/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
@@ -17,32 +17,18 @@
* under the License.
*/
package org.drools.ruleunits.impl;
+unit ModifyTestUnit;
-import org.drools.ruleunits.api.DataSource;
-import org.drools.ruleunits.api.DataStore;
-import org.drools.ruleunits.api.RuleUnitData;
-import org.drools.ruleunits.impl.domain.Person;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class UpdateNoDSTestUnit implements RuleUnitData {
- private final List<String> results = new ArrayList<>();
- private final DataStore<Person> persons;
-
- public UpdateNoDSTestUnit() {
- this(DataSource.createStore());
- }
-
- public UpdateNoDSTestUnit(DataStore<Person> persons) {
- this.persons = persons;
- }
-
- public DataStore<Person> getPersons() {
- return persons;
+rule R1 when
+ $p: /persons[ name == "Mario" ]
+then
+ modify ($p) {
+ setAge( $p.getAge() + 1 );
}
+end
- public List<String> getResults() {
- return results;
- }
-}
+rule R2 when
+ $p: /persons[ age >= 18 ]
+then
+ results.add("ok");
+end
\ No newline at end of file
diff --git
a/drools-ruleunits/drools-ruleunits-impl/src/test/java/org/drools/ruleunits/impl/UpdateNoDSTestUnit.java
b/drools-ruleunits/drools-ruleunits-impl/src/test/resources/org/drools/ruleunits/impl/UnsupportedMethod.drl
similarity index 53%
copy from
drools-ruleunits/drools-ruleunits-impl/src/test/java/org/drools/ruleunits/impl/UpdateNoDSTestUnit.java
copy to
drools-ruleunits/drools-ruleunits-impl/src/test/resources/org/drools/ruleunits/impl/UnsupportedMethod.drl
index 1e7051cc9f..e885690d88 100644
---
a/drools-ruleunits/drools-ruleunits-impl/src/test/java/org/drools/ruleunits/impl/UpdateNoDSTestUnit.java
+++
b/drools-ruleunits/drools-ruleunits-impl/src/test/resources/org/drools/ruleunits/impl/UnsupportedMethod.drl
@@ -1,4 +1,4 @@
-/*
+/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
@@ -17,32 +17,18 @@
* under the License.
*/
package org.drools.ruleunits.impl;
+unit UnsupportedMethodUnit;
-import org.drools.ruleunits.api.DataSource;
-import org.drools.ruleunits.api.DataStore;
-import org.drools.ruleunits.api.RuleUnitData;
-import org.drools.ruleunits.impl.domain.Person;
+rule CallInsert
+when
+ /persons[ name == "John" ]
+then
+ insert("ABC");
+end
-import java.util.ArrayList;
-import java.util.List;
-
-public class UpdateNoDSTestUnit implements RuleUnitData {
- private final List<String> results = new ArrayList<>();
- private final DataStore<Person> persons;
-
- public UpdateNoDSTestUnit() {
- this(DataSource.createStore());
- }
-
- public UpdateNoDSTestUnit(DataStore<Person> persons) {
- this.persons = persons;
- }
-
- public DataStore<Person> getPersons() {
- return persons;
- }
-
- public List<String> getResults() {
- return results;
- }
-}
+rule CallInsertLogical
+when
+ /persons[ name == "John" ]
+then
+ insertLogical("ABC");
+end
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]