On Tue, 20 Jan 2009, Stephen R. van den Berg wrote:

Henrik Grubbstr?m wrote:
On Tue, 20 Jan 2009, Stephen R. van den Berg wrote:
-                      if (x) return x;
-                      if ((x != 0) && stringp(x->type))
-                        return x->type;
-                      return RXML.nil;

This patch is unsafe, since it changes the handling of "" for results from
Oracle (Oracle doesn't differentiate between "" and NULL for string fields).

The first if (x) return x; always catches if (x != 0), or am I missing
something subtle here?

The subtlety here is that the StringNULL class has an lfun::`!() that returns true, ie it won't be returned by the first if statement. The second if statement tests if x is equal to zero by calling lfun::`==(), which isn't implemented by StringNULL , and thus will fall back to the low-level implementation of predef::`==(), which will see that the two svalues have different types and thus aren't equal.

I.e. it only gets to the Oracle "if" when x == 0.
If my simplification is unsafe for Oracle, then maybe the existing logic
needs to be fixed?

The existing code works as intended, but might be a bit obscure (thus the comments).

--
Sincerely,
          Stephen R. van den Berg.

--
Henrik Grubbström                                       [email protected]
Roxen Internet Software AB

Reply via email to