| From: | Jay Levitt <jay(dot)levitt(at)gmail(dot)com> | 
|---|---|
| To: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> | 
| Cc: | PG Hackers <pgsql-hackers(at)postgresql(dot)org> | 
| Subject: | Re: Designing an extension for feature-space similarity search | 
| Date: | 2012-02-16 22:56:11 | 
| Message-ID: | 4F3D898B.2010603@gmail.com | 
| Views: | Whole Thread | Raw Message | Download mbox | Resend email | 
| Thread: | |
| Lists: | pgsql-hackers | 
Tom Lane wrote:
>> - Can domains have operators, or are operators defined on types?
>
> I think the current state of play is that you can have such things but
> the system will only consider them for exact type matches, so you might
> need more explicit casts than you ordinarily would.
Turns out it's even smarter than that; it seems to coerce when it's unambiguous:
create domain birthdate as date;
create function date_dist(birthdate, birthdate) returns integer as $$
  	select 123;
$$ language sql;
create operator <-> (
	procedure = date_dist,
	leftarg = birthdate,
	rightarg = birthdate);
select '2012-01-01'::birthdate <-> '2012-01-01'::birthdate;
-- 123
select '2012-01-01'::date <-> '2012-01-01'::date ;
-- 123
create domain activity_date as date;
create function date_dist(activity_date, activity_date)
returns integer as $$
   select 432;
$$ language sql;
create operator <-> (
	procedure = date_dist,
	leftarg = activity_date,
	rightarg = activity_date);
select '2012-01-01'::activity_date <-> '2012-01-01'::activity_date;
-- 432
select '2012-01-01'::birthdate <-> '2012-01-01'::birthdate;
-- 123
select '2012-01-01'::date <-> '2012-01-01'::date ;
-- ERROR:  operator is not unique: date <-> date
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Tom Lane | 2012-02-16 23:15:25 | Qual evaluation cost estimates for GIN indexes | 
| Previous Message | Dimitri Fontaine | 2012-02-16 22:38:47 | Re: Command Triggers |