| 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 |