Thread: Fw: AW: Re: [SQL] behavior of ' = NULL' vs. MySQL vs. Stand ards

Fw: AW: Re: [SQL] behavior of ' = NULL' vs. MySQL vs. Stand ards

From
"Joe Conway"
Date:
(Sorry if you receive this twice, but I sent it Saturday evening and it
never made it to the list)

Thanks for your thorough review and comments, Tom.

Here's a new patch for review. Summary of changes/response to earlier
comments:
- add a routine for NullTest nodes -- done.
- declare selectivity functions without fmgr notation -- done.
- create selfuncs.h for declarations -- done, but I didn't move anything
else out of builtins.h
- use DatumGetBool() and adjust style -- done
- create better default selectivities -- done:    - DEFAULT_UNK_SEL = 0.005    - DEFAULT_NOT_UNK_SEL = 1 -
DEFAULT_UNK_SEL   - DEFAULT_BOOL_SEL = 0.5
 
- recurse clause_selectivity() for non-Var input -- done
- simplify MCV logic -- done, used 2nd approach (always use the first most
common val's frequency)

Questions:
- I added a debug define (BOOLTESTDEBUG) to selfuncs.h, and a corresponding
ifdef/elog NOTICE to clause_selectivity(). This was to help me debug/verify
the calculations. Should this be left in the code when I create a patch (it
is in this one), and if so, is there a preferred "standard" approach to this
type of debug code?
- Using the debug code mentioned above, I noted that clause_selectivity()
did not seem to get called at all for clauses like "where myfield = 0" or
"where myfield > 0". I haven't looked too closely at it yet, but I was
wondering if this is expected behavior?

Thanks,

-- Joe


Re: Fw: AW: Re: [SQL] behavior of ' = NULL' vs. MySQL vs. Stand ards

From
Bruce Momjian
Date:
Patch applied by Tom Lane with some small mods.

> (Sorry if you receive this twice, but I sent it Saturday evening and it
> never made it to the list)
> 
> Thanks for your thorough review and comments, Tom.
> 
> Here's a new patch for review. Summary of changes/response to earlier
> comments:
> - add a routine for NullTest nodes -- done.
> - declare selectivity functions without fmgr notation -- done.
> - create selfuncs.h for declarations -- done, but I didn't move anything
> else out of builtins.h
> - use DatumGetBool() and adjust style -- done
> - create better default selectivities -- done:
>      - DEFAULT_UNK_SEL = 0.005
>      - DEFAULT_NOT_UNK_SEL = 1 - DEFAULT_UNK_SEL
>      - DEFAULT_BOOL_SEL = 0.5
> - recurse clause_selectivity() for non-Var input -- done
> - simplify MCV logic -- done, used 2nd approach (always use the first most
> common val's frequency)
> 
> Questions:
> - I added a debug define (BOOLTESTDEBUG) to selfuncs.h, and a corresponding
> ifdef/elog NOTICE to clause_selectivity(). This was to help me debug/verify
> the calculations. Should this be left in the code when I create a patch (it
> is in this one), and if so, is there a preferred "standard" approach to this
> type of debug code?
> - Using the debug code mentioned above, I noted that clause_selectivity()
> did not seem to get called at all for clauses like "where myfield = 0" or
> "where myfield > 0". I haven't looked too closely at it yet, but I was
> wondering if this is expected behavior?
> 
> Thanks,
> 
> -- Joe
> 

[ Attachment, skipping... ]

> 
> ---------------------------(end of broadcast)---------------------------
> TIP 4: Don't 'kill -9' the postmaster

--  Bruce Momjian                        |  http://candle.pha.pa.us pgman@candle.pha.pa.us               |  (610)
853-3000+  If your life is a hard drive,     |  830 Blythe Avenue +  Christ can be your backup.        |  Drexel Hill,
Pennsylvania19026