[jboss-jira] [JBoss JIRA] Updated: (JBRULES-2257) Wrong condition evaluation if the condition contains a variable assignment

Udo Klinkmüller (JIRA) jira-events at lists.jboss.org
Mon Aug 24 11:48:23 EDT 2009


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

Udo Klinkmüller updated JBRULES-2257:
-------------------------------------

    Description: 
I have a rule which checks variables of two equal objects in an old and a new version. If I work with the variable daclaration $nd1 then the consequence is NOT executed although it should.

This is the version of the rule in that the consequence is not executed although it should: 

------------------------------------------

package apm.event.resource;

#list any import classes here.
import java.util.*;
import de.fraport.test.*;

#declare any global variables here
global Collection results;

rule "Test-Del"
	salience 900 
	when
		#conditions
		TestMainObjectPair( $omo: oldMainObject != null, $nmo: newMainObject )
		TestObject( date1 == null, $od2: date2 != null, $os1: strVal1 != null ) from $omo.testObject
		TestObject( $nd1: date1 != null || date2 != $od2 || strVal1 != $os1 ) from $nmo.testObject

	then 
		#actions
		System.out.println("****** Executing consequence of rule Test-Del nd1="+ $nd1 +" ...");
		results.add($nto);
end

------------------------------------------

This is the rule version which delivers the expected result (without using $nd1):

------------------------------------------

package apm.event.resource;

#list any import classes here.
import java.util.*;
import de.fraport.test.*;

#declare any global variables here
global Collection results;

rule "Test-Del"
	salience 900 
	when
		#conditions
		TestMainObjectPair( $omo: oldMainObject != null, $nmo: newMainObject )
		TestObject( date1 == null, $od2: date2 != null, $os1: strVal1 != null ) from $omo.testObject
		$nto: TestObject( date1 != null || date2 != $od2 || strVal1 != $os1 ) from $nmo.testObject

	then 
		#actions
		System.out.println("****** Executing consequence of rule Test-Del nd1="+ $nto.getDate1() +" ...");
		results.add($nto);
end

------------------------------------------

If wished, I have a corresponding JUnit test case for this issue.



  was:
I have a rule which checks variables of two equal objects in an old and a new version. If I work with the variable daclaration $nd1 then the consequence is NOT executed although it should.

This is the version of the rule in that the consequence is not executed although it should: 

------------------------------------------

package apm.event.resource;

#list any import classes here.
import java.util.*;
import de.fraport.test.*;

#declare any global variables here
global Collection results;

rule "Test-Del"
	salience 900 
	when
		#conditions
		TestMainObjectPair( $omo: oldMainObject != null, $nmo: newMainObject )
		TestObject( date1 == null, $od2: date2 != null, $os1: strVal1 != null ) from $omo.testObject
		TestObject( $nd1: date1 != null || date2 != $od2 || strVal1 != $os1 ) from $nmo.testObject

	then 
		#actions
		System.out.println("****** Executing consequence of rule Test-Del nd1="+ $nd1 +" ...");
		results.add($nto);
end

------------------------------------------

This is the rule version which delivers the expected result (without using $nd1):

------------------------------------------

package apm.event.resource;

#list any import classes here.
import java.util.*;
import de.fraport.test.*;

#declare any global variables here
global Collection results;

rule "Test-Del"
	salience 900 
	when
		#conditions
		TestMainObjectPair( $omo: oldMainObject != null, $nmo: newMainObject )
		TestObject( date1 == null, $od2: date2 != null, $os1: strVal1 != null ) from $omo.testObject
		$nto: TestObject( date1 != null || date2 != $od2 || strVal1 != $os1 ) from $nmo.testObject

	then 
		#actions
		System.out.println("****** Executing consequence of rule Test-Del nd1="+ $nto.getDate1() +" ...");
		results.add($nto);
end

------------------------------------------





> Wrong condition evaluation if the condition contains a variable assignment  
> ----------------------------------------------------------------------------
>
>                 Key: JBRULES-2257
>                 URL: https://jira.jboss.org/jira/browse/JBRULES-2257
>             Project: Drools
>          Issue Type: Bug
>      Security Level: Public(Everyone can see) 
>          Components: drools-core
>    Affects Versions: 5.0.1.FINAL
>         Environment: Mac OS X, iMac, Eclipse Galileo (3.5)
>            Reporter: Udo Klinkmüller
>            Assignee: Mark Proctor
>
> I have a rule which checks variables of two equal objects in an old and a new version. If I work with the variable daclaration $nd1 then the consequence is NOT executed although it should.
> This is the version of the rule in that the consequence is not executed although it should: 
> ------------------------------------------
> package apm.event.resource;
> #list any import classes here.
> import java.util.*;
> import de.fraport.test.*;
> #declare any global variables here
> global Collection results;
> rule "Test-Del"
> 	salience 900 
> 	when
> 		#conditions
> 		TestMainObjectPair( $omo: oldMainObject != null, $nmo: newMainObject )
> 		TestObject( date1 == null, $od2: date2 != null, $os1: strVal1 != null ) from $omo.testObject
> 		TestObject( $nd1: date1 != null || date2 != $od2 || strVal1 != $os1 ) from $nmo.testObject
> 	then 
> 		#actions
> 		System.out.println("****** Executing consequence of rule Test-Del nd1="+ $nd1 +" ...");
> 		results.add($nto);
> end
> ------------------------------------------
> This is the rule version which delivers the expected result (without using $nd1):
> ------------------------------------------
> package apm.event.resource;
> #list any import classes here.
> import java.util.*;
> import de.fraport.test.*;
> #declare any global variables here
> global Collection results;
> rule "Test-Del"
> 	salience 900 
> 	when
> 		#conditions
> 		TestMainObjectPair( $omo: oldMainObject != null, $nmo: newMainObject )
> 		TestObject( date1 == null, $od2: date2 != null, $os1: strVal1 != null ) from $omo.testObject
> 		$nto: TestObject( date1 != null || date2 != $od2 || strVal1 != $os1 ) from $nmo.testObject
> 	then 
> 		#actions
> 		System.out.println("****** Executing consequence of rule Test-Del nd1="+ $nto.getDate1() +" ...");
> 		results.add($nto);
> end
> ------------------------------------------
> If wished, I have a corresponding JUnit test case for this issue.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: https://jira.jboss.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

       




More information about the jboss-jira mailing list