Thread

  1. maybe incorrect regexp_replace behavior in v8.3.4 ?

    Gauthier, Dave <dave.gauthier@intel.com> — 2012-05-16T13:54:23Z

    Hi:
    
    bi_hsx_a0_latest=# select regexp_replace('xxx','^xxx$','abc');
    regexp_replace
    ----------------
    abc
    (1 row)
    expected behavior because there's a match
    
    
    bi_hsx_a0_latest=# select regexp_replace('xxx','^xxxy$','abc');
    regexp_replace
    ----------------
    xxx
    (1 row)
    expected because there is no match (the 'y' in 'xxxy')
    
    
    
    bi_hsx_a0_latest=# select regexp_replace('xxx','^xxxy$',null);
    regexp_replace
    ----------------
    
    (1 row)
    But why did it return null in this case?  I would think no match would leave it 'xxx'.
    
    Thanks in Advance for any help and/or explanation.
    
    
    
  2. Re: maybe incorrect regexp_replace behavior in v8.3.4 ?

    Richard Huxton <dev@archonet.com> — 2012-05-16T14:14:06Z

    On 16/05/12 14:54, Gauthier, Dave wrote:
    > bi_hsx_a0_latest=# select regexp_replace('xxx','^xxxy$',null);
    > regexp_replace
    > ----------------
    >
    > (1 row)
    > But why did it return null in this case?  I would think no match would leave it 'xxx'.
    
    If a function is defined as "strict" then any null parameters 
    automatically result in a null result.
    
    And indeed, this:
       SELECT * FROM pg_proc WHERE proname LIKE 'regexp_r%';
    shows pro_isstrict is set to true, as it is for most other function.s
    
    -- 
       Richard Huxton
       Archonet Ltd
    
    
  3. Re: maybe incorrect regexp_replace behavior in v8.3.4 ?

    Tom Lane <tgl@sss.pgh.pa.us> — 2012-05-16T14:15:45Z

    "Gauthier, Dave" <dave.gauthier@intel.com> writes:
    > bi_hsx_a0_latest=# select regexp_replace('xxx','^xxxy$',null);
    > regexp_replace
    > ----------------
    >
    > (1 row)
    > But why did it return null in this case?
    
    regexp_replace is strict, so it never even gets called when there's
    a null input.
    
    			regards, tom lane