From: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
---|---|
To: | "Zeugswetter Andreas DCP SD" <ZeugswetterA(at)spardat(dot)at> |
Cc: | "Jeff Davis" <pgsql(at)j-davis(dot)com>, andrew(at)supernews(dot)com, pgsql-hackers(at)postgresql(dot)org |
Subject: | Re: @ versus ~, redux |
Date: | 2006-09-09 20:21:43 |
Message-ID: | 11230.1157833303@sss.pgh.pa.us |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
[ just when you thought it was safe to go back in the water ... ]
"Zeugswetter Andreas DCP SD" <ZeugswetterA(at)spardat(dot)at> writes:
>> But maybe we should just stick with @> and <@ as per the ltree precedent,
>> and not worry about leaving room for strict inclusion tests.
> +1
OK, nobody objected to that, so I guess we have consensus on the names.
I started looking through the code to see exactly what will be affected,
and here's what I find:
contrib/cube:
a @ b contains
a ~ b is contained by
contrib/intarray:
a @ b contains
a ~ b is contained by
contrib/hstore:
a @ b contains
a ~ b is contained by
contrib/ltree:
a @> b ancestor or equal
a <@ b descendant or equal
ltree also uses ~ and @ for "tree satisfies query", which is pretty close to
the core string types' usage of ~
ltree appears not to need changes
contrib/seg:
a @ b contains
a ~ b is contained by (misdocumented!)
contrib/tsearch2:
a @ b contains
a ~ b is contained by
Core operators:
@(anyarray,anyarray) | arraycontains
@(box,box) | box_contained
@(circle,circle) | circle_contained
@(polygon,polygon) | poly_contained
~(anyarray,anyarray) | arraycontained
~(box,box) | box_contain
~(circle,circle) | circle_contain
~(polygon,polygon) | poly_contain
I was pleased to find out that every one of the above ops is non-strict
containment (ie, equality yields 'true'). So at least we don't have
inconsistency on that point.
I also realized that there are several more core operators using @ and ~
for containment-like comparisons:
@(lseg,box) | on_sb
@(lseg,line) | on_sl
@(point,box) | on_pb
@(point,circle) | pt_contained_circle
@(point,line) | on_pl
@(point,lseg) | on_ps
@(point,path) | on_ppath
@(point,polygon) | pt_contained_poly
~(aclitem[],aclitem) | aclcontains
~(circle,point) | circle_contain_pt
~(path,point) | path_contain_pt
~(polygon,point) | poly_contain_pt
Since these are cross-data-type comparisons, they are arguably not quite
the same animal as the operators listed earlier, which all compare two
objects of the same datatype. I'm inclined to think that these ops
should be renamed too, but does anyone want to argue differently?
In the category of "egad", I found out that the tinterval datatype uses
<< for "contains"! This is simply bizarre --- whether you approve of
the inet-like notation or not, surely the arrows are pointing the wrong
way. Given that tinterval is deprecated and not even documented, maybe
this isn't worth fixing. Any thoughts?
regards, tom lane
From | Date | Subject | |
---|---|---|---|
Next Message | Lamar Owen | 2006-09-09 20:28:48 | Re: large object regression tests |
Previous Message | Lamar Owen | 2006-09-09 19:57:14 | Re: [Pgsqlrpms-hackers] Safer auto-initdb for RPM init |