"David E. Wheeler" <da...@kineticode.com> writes: > On Jan 17, 2010, at 3:47 PM, Tom Lane wrote: >>> create type y as (c char, n int); >>> select ('a', NULL)::y = ('a', NULL)::y; -- TRUE >>> select ('a', NULL) = ('a', NULL); -- NULL
>> The latter gets simplified to ('a' = 'a') AND (NULL = NULL). >> The former doesn't --- it goes through record_eq, which treats >> two nulls as equal. > Shouldn't this go through record_eq, then? > try=# select row('a', NULL) = row('a', NULL); No, the ROW keyword is just noise. It's the cast that is preventing the expansion. We could possibly change things so that it got expanded out even with the cast, but on the whole I'm not sure that would be an improvement. It doesn't make things consistent, it just shifts the boundary of inconsistency ... regards, tom lane -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers