At 11:34 AM 1/28/2002 -0500, you wrote:

>On Mon, 28 Jan 2002 11:00:17 -0500, William Carson wrote:
>
>... Why doesn't R:Base (and some other programming languages) 
>know that they are not equal?  ...

Bill,

The following explanation will help you understand the CORRECT 
evaluation of EQNUL if you are using the latest and greatest 
version of R:BASE 2000 (ver 6.5+) and higher ...

------------------------------------------------------------------
Correct evaluation of expressions when EQNULL is SET to ON.
------------------------------------------------------------------

R:BASE uses special processing on simple IF commands for maximum 
speed. However, the way these were processed was not consistent 
with the way complex IF commands or WHILE commands were processed 
with regard to comparisons using NULL values. The EQNULL setting 
at TRUE means that a comparison between two NULL values is a match 
and that a comparison between a NULL value and a non-NULL value is 
not. When EQNULL is set to FALSE then a comparison between two NULL 
values is not a match nor is a comparison between a NULL value and 
a non-NULL value a mismatch. The NULL value essentially make the 
whole thing "unknown'. This behavior was followed in WHILE and 
complex IF commands but was not followed in simple IF commands. A 
simple IF command has only one comparison and the left side is a 
simple variable and the right side is either a variable or a 
constant. A simple IF does not have any expressions. 

Compare these code samples:

SET VAR v1 TEXT = NULL
SET VAR v2 TEXT = NULL

SET EQNULL OFF
IF v1 = .v2 THEN
   -- will not be a hit
ENDIF
IF v1 <> .v2 THEN
   -- will not be a hit
ENDIF
IF v1 <> 'This' THEN
   -- will not be a hit (it used to be before this fix)
ENDIF

SET EQNULL ON
IF v1 = .v2 THEN
   -- will be a hit 
ENDIF
IF v1 <> .v2 THEN
   -- will not be a hit 
ENDIF 
IF v1 <> 'This' THEN
   -- will be a hit    
ENDIF

Before this fix, the comparison "IF v1 <> 'This' THEN" would be 
a hit with EQNULL set ON or FALSE when it should only be a hit 
when EQNULL is ON. This means that now:

"IF (.v1) <> 'This' THEN" and "IF v1 <> 'This' THEN" 

will both process the same way. In the past they would be 
different because of this problem.

In your code if you want the comparison of a NULL variable and 
a non-NULL constant to be a hit then you should run with EQNULL 
set ON.

Have Fun!

Very Best Regards,

Razzak.


===================================-============================
R:BASE Developers's Conference: http://www.rbase.com/conference 
Official R:BASE List Server:    mailto:[EMAIL PROTECTED]
RBTI Events/Training:        http://www.rbase2000.com/events
R:DCC Members:               http://www.rbase2000.com/rdcc
================================================================
R:BASE, Oterro & R:Tango are registered trademarks of RBTI.
==================================-=============================

================================================
TO SEE MESSAGE POSTING GUIDELINES:
Send a plain text email to [EMAIL PROTECTED]
In the message body, put just two words: INTRO rbase-l
================================================
TO UNSUBSCRIBE: send a plain text email to [EMAIL PROTECTED]
In the message body, put just two words: UNSUBSCRIBE rbase-l
================================================
TO SEARCH ARCHIVES:
http://www.mail-archive.com/rbase-l%40sonetmail.com/

Reply via email to