Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
image_expression_null_value_handling [2022/08/19 23:58]
admin created
— (current)
Line 1: Line 1:
-====== Image Expression Null Value Handling ====== ​ 
- 
-===== General Rules for Expression Definition ===== 
- 
-  * The entire expression is one single expression resulting in one single value. ​ 
- 
-  * Everything ​ is an expression and produces one single value. So, even an "if then  else" is just one expression resulting in one single value. Therefore, ​ you can sum the results of two separate "if then else"s like "(if the  else)  + (if then else)"​. ​ Since even the test clause of an "if then  else" is an expression, you can also replace that with another "if then  else". Example: 
-        * if (if i1 > 0 then 1 else i2) then i2 else 1 + i3 
- 
-  * The "if then else" test assumes that 0 is false and any non-zero value is true. 
- 
-===== Null Evaluation ===== 
- 
-  * Every time the expression being evaluated results in null, the entire ​ expression becomes null. So, "i1 + null" will always be null since  something + null is always null. 
- 
-  * The only operators that can contain the "​destructive power" of a null value are "​isnull( ​ expression )" or "​expression1 ? expression2":​ 
- * isnull( expression ) evaluates the expression and results 1 if the expression evaluates to null, and 0 otherwise. 
- * "​expression1 ​ ? expression2"​ evaluates the expression1 and, if the result is  non-null, returns that value. Otherwise, it evaluates expression2 and returns the resulting value as its own result. 
- 
-  * Null  can come from an image, but it can also be produced by some other  events, such as dividing by zero, failing to find a key in a lookup ​ table etc. 
- 
-  * If the "if then else" test evaluates to null, the entire "if then else" evaluates to null. Example: 
- * (if (i1/3 > 9) then i2 else 1 + i3) + 10  
- 1. if  i1 is null, i1/3 is also null, and i1/3 > 9 also becomes null. Therefore, the "if then else" test is null and the entire "if then else" is null.  
- 2. Now, null is being added to 10, and that also becomes null. 
- * ((if (i1/3 > 9) then i2 else 1 + i3) + 10) ? 20 (Note that we are using the operator ? now) 
- 1. if  i1 is null, i1/3 is also null, and i1/3 > 9 also becomes null.  Therefore, the "if then else" test is null and the entire "if then else" ​ is null.  
- 2. Then, null is being added to 10, and that also becomes null. 
- 3. Now, null is being caught by the expression "null ? 20", since the "if then else" + 10 is null, and the result is 20.