need help : how to replace / extend existing SQL operators ?

From: Pierre-Yves LANDURE <pylandur(at)ifremer(dot)fr>
To: pgsql-general(at)postgresql(dot)org
Subject: need help : how to replace / extend existing SQL operators ?
Date: 2002-07-24 07:11:41
Message-ID: 1027494701.5131.28.camel@datacer
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

hi,

i've develloped a contrib library for postgresql which use GPC to
enhance polygons support.(working intersections ;)

but i've got a big problem:

i've done this :

=========================================================================

drop function "poly_intersect" (polygon, polygon);
drop operator # (polygon, polygon);
create function "poly_intersect"(polygon, polygon) returns polygon
as '$libdir/polygons_utils'
language 'C';

create operator # (
leftarg = polygon,
rightarg = polygon,
procedure = poly_intersect,
commutator = #
);

-- test if a polygon intersect (/ overlap) another.
--
drop function "poly_is_intersecting" (polygon, polygon);
drop operator ?# (polygon, polygon);
create function "poly_is_intersecting"(polygon, polygon) returns boolean
as '$libdir/polygons_utils'
language 'C';

create operator ?# (
leftarg = polygon,
rightarg = polygon,
procedure = poly_is_intersecting,
commutator = ?#
);

-- test if a polygon overlap to left another.
--
drop function "poly_overleft" (polygon, polygon);
drop operator &< (polygon, polygon);
create function "poly_overleft"(polygon, polygon) returns boolean
as '$libdir/polygons_utils'
language 'C';

create operator &< (
leftarg = polygon,
rightarg = polygon,
procedure = poly_overleft,
commutator = &>
);

-- test if a polygon overlap to right another
--
drop function "poly_overright" (polygon, polygon);
drop operator &> (polygon, polygon);
create function "poly_overright"(polygon, polygon) returns boolean
as '$libdir/polygons_utils'
language 'C';

create operator &> (
leftarg = polygon,
rightarg = polygon,
procedure = poly_overright,
commutator = &<
);

-- Test if a polygon overlap another
--
drop function "poly_overlap" (polygon, polygon);
drop operator && (polygon, polygon);
create function "poly_overlap"(polygon, polygon) returns boolean
as '$libdir/polygons_utils'
language 'C';

create operator && (
leftarg = polygon,
rightarg = polygon,
procedure = poly_overlap,
commutator = &&
);

-- Test if a polygon contains another one.
--
drop function "poly_contain" (polygon, polygon);
drop operator @ (polygon, polygon);
create function "poly_contain"(polygon, polygon) returns boolean
as '$libdir/polygons_utils'
language 'C';

create operator @ (
leftarg = polygon,
rightarg = polygon,
procedure = poly_contain,
commutator = @
);

-- Return the gravity center of a polygon
--
drop function "poly_center" (polygon);
drop operator @@ (polygon);
create function "poly_center"(polygon) returns point
as '$libdir/polygons_utils'
language 'C';

create operator @@ (
leftarg = polygon,
rightarg = NONE,
procedure = poly_center
);

=========================================================================

as you can see, i've rewrited some existing polygons fonctions that i
found not working correctly. I wanted to update functions and operators
lists to use thoses new functions.

but, after executed these request (yeeaahh.. i know .. the polygon
center one is bogus but i don't care.. for the moment.. ) , i've go this
error message trying to use

?#(polygon, polygon) :

=========================================================================
ERROR: FillScanKeyEntry: unknown operator 486

Your query:

SELECT COUNT(sensors_datas_list.record_index) AS records_count,
min(sensors_datas_list.zone_start_date) AS file_start_date,
max(sensors_datas_list.zone_end_date) AS file_end_date,
group_poly(sensors_datas_list.datas_zone) AS file_zone,
sensors_datas_list.file_id, files_list.file_name FROM files_list,
sensors_datas_list, sensors_list, satellites_list WHERE
sensors_datas_list.file_id = files_list.file_id AND
sensors_list.sensor_id = sensors_datas_list.sensor_id AND
sensors_list.satellite_id = satellites_list.satellite_id AND
sensors_list.sensor_id = 6 AND sensors_datas_list.datas_zone ?#
polygon(box '((166.0,0.0),(170.0,6.0))') GROUP BY files_list.file_name,
sensors_datas_list.file_id

=========================================================================

it seems that it try to use the old intersection test operator.. any
help should be greatly apprecied ;)

Thanx

Pierre-Yves Landuré

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Tom Lane 2002-07-24 07:29:23 Re: Closing Gaps in Celko trees
Previous Message Tomisaw Kityski 2002-07-24 07:07:12 Escape sequences for unicode letters