From 520024aff25f3eeed9b1a9dadedd29da85c91b83 Mon Sep 17 00:00:00 2001 From: Paul Ramsey Date: Sat, 7 Nov 2009 00:33:45 +0000 Subject: [PATCH] Add text wrappers to functions we commonly expect people to call with text arguments but expect implicit casting to geometry. (#252) git-svn-id: http://svn.osgeo.org/postgis/trunk@4762 b70326c6-7e19-0410-871a-916f4a2858ee --- postgis/geography.sql.in.c | 139 +++++++++++++++++++++++++++++++------ 1 file changed, 116 insertions(+), 23 deletions(-) diff --git a/postgis/geography.sql.in.c b/postgis/geography.sql.in.c index 8199beaa3..4c71287d0 100644 --- a/postgis/geography.sql.in.c +++ b/postgis/geography.sql.in.c @@ -95,10 +95,11 @@ CREATE OR REPLACE FUNCTION ST_AsText(geography) LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.5.0 - this is just a hack to prevent unknown from causing ambiguous name because of geography +-- TODO Remove in 2.0 CREATE OR REPLACE FUNCTION ST_AsText(text) RETURNS text AS $$ SELECT ST_AsText($1::geometry); $$ - LANGUAGE 'sql' IMMUTABLE STRICT; + LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION ST_GeographyFromText(text) @@ -113,10 +114,11 @@ CREATE OR REPLACE FUNCTION ST_AsBinary(geography) LANGUAGE 'C' IMMUTABLE STRICT; -- Availability: 1.5.0 - this is just a hack to prevent unknown from causing ambiguous name because of geography +-- TODO Remove in 2.0 CREATE OR REPLACE FUNCTION ST_AsBinary(text) RETURNS bytea AS $$ SELECT ST_AsBinary($1::geometry); $$ - LANGUAGE 'sql' IMMUTABLE STRICT; + LANGUAGE 'SQL' IMMUTABLE STRICT; -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION ST_GeographyFromBinary(bytea) @@ -282,22 +284,29 @@ CREATE OPERATOR CLASS gist_geography_ops -- ST_AsSVG(geography, precision, rel) CREATE OR REPLACE FUNCTION ST_AsSVG(geography,int4,int4) - RETURNS TEXT + RETURNS text AS 'MODULE_PATHNAME','geography_as_svg' LANGUAGE 'C' IMMUTABLE STRICT; -- ST_AsSVG(geography, precision) / rel=0 CREATE OR REPLACE FUNCTION ST_AsSVG(geography,int4) - RETURNS TEXT + RETURNS text AS 'MODULE_PATHNAME','geography_as_svg' LANGUAGE 'C' IMMUTABLE STRICT; -- ST_AsSVG(geography) / precision=15, rel=0 CREATE OR REPLACE FUNCTION ST_AsSVG(geography) - RETURNS TEXT + RETURNS text AS 'MODULE_PATHNAME','geography_as_svg' LANGUAGE 'C' IMMUTABLE STRICT; +-- Availability: 1.5.0 - this is just a hack to prevent unknown from causing ambiguous name because of geography +-- TODO Remove in 2.0 +CREATE OR REPLACE FUNCTION ST_AsSVG(text) + RETURNS text AS + $$ SELECT ST_AsSVG($1::geometry); $$ + LANGUAGE 'SQL' IMMUTABLE STRICT; + -- -- GML OUTPUT @@ -305,43 +314,50 @@ CREATE OR REPLACE FUNCTION ST_AsSVG(geography) -- _ST_AsGML(version, geography, precision, option) CREATE OR REPLACE FUNCTION _ST_AsGML(int4, geography, int4, int4) - RETURNS TEXT + RETURNS text AS 'MODULE_PATHNAME','geography_as_gml' LANGUAGE 'C' IMMUTABLE STRICT; -- ST_AsGML(geography, precision) / version=2 options=0 CREATE OR REPLACE FUNCTION ST_AsGML(geography, int4) - RETURNS TEXT + RETURNS text AS 'SELECT _ST_AsGML(2, $1, $2, 0)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- ST_AsGML(geography) / precision=15 version=2 options=0 CREATE OR REPLACE FUNCTION ST_AsGML(geography) - RETURNS TEXT + RETURNS text AS 'SELECT _ST_AsGML(2, $1, 15, 0)' LANGUAGE 'SQL' IMMUTABLE STRICT; +-- Availability: 1.5.0 - this is just a hack to prevent unknown from causing ambiguous name because of geography +-- TODO Remove in 2.0 +CREATE OR REPLACE FUNCTION ST_AsGML(text) + RETURNS text AS + $$ SELECT ST_AsGML($1::geometry); $$ + LANGUAGE 'SQL' IMMUTABLE STRICT; + -- ST_AsGML(version, geography) / precision=15 version=2 options=0 CREATE OR REPLACE FUNCTION ST_AsGML(int4, geography) - RETURNS TEXT + RETURNS text AS 'SELECT _ST_AsGML($1, $2, 15, 0)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- ST_AsGML(version, geography, precision) / options = 0 CREATE OR REPLACE FUNCTION ST_AsGML(int4, geography, int4) - RETURNS TEXT + RETURNS text AS 'SELECT _ST_AsGML($1, $2, $3, 0)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- ST_AsGML (geography, precision, option) / version=2 CREATE OR REPLACE FUNCTION ST_AsGML(geography, int4, int4) - RETURNS TEXT + RETURNS text AS 'SELECT _ST_AsGML(2, $1, $2, $3)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- ST_AsGML(version, geography, precision, option) CREATE OR REPLACE FUNCTION ST_AsGML(int4, geography, int4, int4) - RETURNS TEXT + RETURNS text AS 'SELECT _ST_AsGML($1, $2, $3, $4)' LANGUAGE 'SQL' IMMUTABLE STRICT; @@ -353,31 +369,38 @@ CREATE OR REPLACE FUNCTION ST_AsGML(int4, geography, int4, int4) -- _ST_AsKML(version, geography, precision) CREATE OR REPLACE FUNCTION _ST_AsKML(int4, geography, int4) - RETURNS TEXT + RETURNS text AS 'MODULE_PATHNAME','geography_as_kml' LANGUAGE 'C' IMMUTABLE STRICT; -- AsKML(geography,precision) / version=2 CREATE OR REPLACE FUNCTION ST_AsKML(geography, int4) - RETURNS TEXT + RETURNS text AS 'SELECT _ST_AsKML(2, $1, $2)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- AsKML(geography) / precision=15 version=2 CREATE OR REPLACE FUNCTION ST_AsKML(geography) - RETURNS TEXT + RETURNS text AS 'SELECT _ST_AsKML(2, $1, 15)' LANGUAGE 'SQL' IMMUTABLE STRICT; +-- Availability: 1.5.0 - this is just a hack to prevent unknown from causing ambiguous name because of geography +-- TODO Remove in 2.0 +CREATE OR REPLACE FUNCTION ST_AsKML(text) + RETURNS text AS + $$ SELECT ST_AsKML($1::geometry); $$ + LANGUAGE 'SQL' IMMUTABLE STRICT; + -- ST_AsKML(version, geography) / precision=15 CREATE OR REPLACE FUNCTION ST_AsKML(int4, geography) - RETURNS TEXT + RETURNS text AS 'SELECT _ST_AsKML($1, $2, 15)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- ST_AsKML(version, geography, precision) CREATE OR REPLACE FUNCTION ST_AsKML(int4, geography, int4) - RETURNS TEXT + RETURNS text AS 'SELECT _ST_AsKML($1, $2, $3)' LANGUAGE 'SQL' IMMUTABLE STRICT; @@ -394,37 +417,44 @@ CREATE OR REPLACE FUNCTION _ST_AsGeoJson(int4, geography, int4, int4) -- ST_AsGeoJson(geography, precision) / version=1 options=0 CREATE OR REPLACE FUNCTION ST_AsGeoJson(geography, int4) - RETURNS TEXT + RETURNS text AS 'SELECT _ST_AsGeoJson(1, $1, $2, 0)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- ST_AsGeoJson(geography) / precision=15 version=1 options=0 CREATE OR REPLACE FUNCTION ST_AsGeoJson(geography) - RETURNS TEXT + RETURNS text AS 'SELECT _ST_AsGeoJson(1, $1, 15, 0)' LANGUAGE 'SQL' IMMUTABLE STRICT; +-- Availability: 1.5.0 - this is just a hack to prevent unknown from causing ambiguous name because of geography +-- TODO Remove in 2.0 +CREATE OR REPLACE FUNCTION ST_AsGeoJson(text) + RETURNS text AS + $$ SELECT ST_AsGeoJson($1::geometry); $$ + LANGUAGE 'SQL' IMMUTABLE STRICT; + -- ST_AsGeoJson(version, geography) / precision=15 options=0 CREATE OR REPLACE FUNCTION ST_AsGeoJson(int4, geography) - RETURNS TEXT + RETURNS text AS 'SELECT _ST_AsGeoJson($1, $2, 15, 0)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- ST_AsGeoJson(version, geography, precision) / options=0 CREATE OR REPLACE FUNCTION ST_AsGeoJson(int4, geography, int4) - RETURNS TEXT + RETURNS text AS 'SELECT _ST_AsGeoJson($1, $2, $3, 0)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- ST_AsGeoJson(geography, precision, options) / version=1 CREATE OR REPLACE FUNCTION ST_AsGeoJson(geography, int4, int4) - RETURNS TEXT + RETURNS text AS 'SELECT _ST_AsGeoJson(1, $1, $2, $3)' LANGUAGE 'SQL' IMMUTABLE STRICT; -- ST_AsGeoJson(version, geography, precision,options) CREATE OR REPLACE FUNCTION ST_AsGeoJson(int4, geography, int4, int4) - RETURNS TEXT + RETURNS text AS 'SELECT _ST_AsGeoJson($1, $2, $3, $4)' LANGUAGE 'SQL' IMMUTABLE STRICT; @@ -453,6 +483,13 @@ CREATE OR REPLACE FUNCTION ST_Distance(geography, geography) RETURNS float8 AS 'SELECT _ST_Distance($1, $2, 0.0, true)' LANGUAGE 'SQL' IMMUTABLE STRICT; + +-- Availability: 1.5.0 - this is just a hack to prevent unknown from causing ambiguous name because of geography +-- TODO Remove in 2.0 +CREATE OR REPLACE FUNCTION ST_Distance(text, text) + RETURNS float8 AS + $$ SELECT ST_Distance($1::geometry, $2::geometry); $$ + LANGUAGE 'SQL' IMMUTABLE STRICT; -- Only expands the bounding box, the actual geometry will remain unchanged, use with care. -- Availability: 1.5.0 @@ -474,6 +511,13 @@ CREATE OR REPLACE FUNCTION ST_DWithin(geography, geography, float8) AS 'SELECT $1 && _ST_Expand($2,$3) AND $2 && _ST_Expand($1,$3) AND _ST_Distance($1, $2, $3, true) < $3' LANGUAGE 'SQL' IMMUTABLE; +-- Availability: 1.5.0 - this is just a hack to prevent unknown from causing ambiguous name because of geography +-- TODO Remove in 2.0 +CREATE OR REPLACE FUNCTION ST_DWithin(text, text, float8) + RETURNS boolean AS + $$ SELECT ST_DWithin($1::geometry, $2::geometry, $3); $$ + LANGUAGE 'SQL' IMMUTABLE STRICT; + -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION ST_Area(geography, boolean) RETURNS float8 @@ -488,6 +532,13 @@ CREATE OR REPLACE FUNCTION ST_Area(geography) AS 'SELECT ST_Area($1, true)' LANGUAGE 'SQL' IMMUTABLE STRICT; +-- Availability: 1.5.0 - this is just a hack to prevent unknown from causing ambiguous name because of geography +-- TODO Remove in 2.0 +CREATE OR REPLACE FUNCTION ST_Area(text) + RETURNS float8 AS + $$ SELECT ST_Area($1::geometry); $$ + LANGUAGE 'SQL' IMMUTABLE STRICT; + -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION ST_Length(geography, boolean) RETURNS float8 @@ -501,6 +552,13 @@ CREATE OR REPLACE FUNCTION ST_Length(geography) AS 'SELECT ST_Length($1, true)' LANGUAGE 'SQL' IMMUTABLE; +-- Availability: 1.5.0 - this is just a hack to prevent unknown from causing ambiguous name because of geography +-- TODO Remove in 2.0 +CREATE OR REPLACE FUNCTION ST_Length(text) + RETURNS float8 AS + $$ SELECT ST_Length($1::geometry); $$ + LANGUAGE 'SQL' IMMUTABLE STRICT; + -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION ST_PointOutside(geography) RETURNS geography @@ -522,6 +580,13 @@ CREATE OR REPLACE FUNCTION ST_Covers(geography, geography) AS 'SELECT $1 && $2 AND _ST_Covers($1, $2)' LANGUAGE 'SQL' IMMUTABLE STRICT; +-- Availability: 1.5.0 - this is just a hack to prevent unknown from causing ambiguous name because of geography +-- TODO Remove in 2.0 +CREATE OR REPLACE FUNCTION ST_Covers(text, text) + RETURNS boolean AS + $$ SELECT ST_Covers($1::geometry, $2::geometry); $$ + LANGUAGE 'SQL' IMMUTABLE STRICT; + -- Only implemented for polygon-over-point -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION ST_CoveredBy(geography, geography) @@ -529,12 +594,26 @@ CREATE OR REPLACE FUNCTION ST_CoveredBy(geography, geography) AS 'SELECT $1 && $2 AND _ST_Covers($2, $1)' LANGUAGE 'SQL' IMMUTABLE STRICT; +-- Availability: 1.5.0 - this is just a hack to prevent unknown from causing ambiguous name because of geography +-- TODO Remove in 2.0 +CREATE OR REPLACE FUNCTION ST_CoveredBy(text, text) + RETURNS boolean AS + $$ SELECT ST_CoveredBy($1::geometry, $2::geometry); $$ + LANGUAGE 'SQL' IMMUTABLE STRICT; + -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION ST_Intersects(geography, geography) RETURNS boolean AS 'SELECT $1 && $2 AND _ST_Distance($1, $2, 0.0, false) < 0.00001' LANGUAGE 'SQL' IMMUTABLE STRICT; +-- Availability: 1.5.0 - this is just a hack to prevent unknown from causing ambiguous name because of geography +-- TODO Remove in 2.0 +CREATE OR REPLACE FUNCTION ST_Intersects(text, text) + RETURNS boolean AS + $$ SELECT ST_Intersects($1::geometry, $2::geometry); $$ + LANGUAGE 'SQL' IMMUTABLE STRICT; + -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION _ST_BestSRID(geography, geography) RETURNS integer @@ -553,12 +632,26 @@ CREATE OR REPLACE FUNCTION ST_Buffer(geography, float8) AS 'SELECT geography(ST_Transform(ST_Buffer(ST_Transform(geometry($1), _ST_BestSRID($1)), $2), 4326))' LANGUAGE 'SQL' IMMUTABLE STRICT; +-- Availability: 1.5.0 - this is just a hack to prevent unknown from causing ambiguous name because of geography +-- TODO Remove in 2.0 +CREATE OR REPLACE FUNCTION ST_Buffer(text, float8) + RETURNS geometry AS + $$ SELECT ST_Buffer($1::geometry, $2); $$ + LANGUAGE 'SQL' IMMUTABLE STRICT; + -- Availability: 1.5.0 CREATE OR REPLACE FUNCTION ST_Intersection(geography, geography) RETURNS geography AS 'SELECT geography(ST_Transform(ST_Intersection(ST_Transform(geometry($1), _ST_BestSRID($1, $2)), ST_Transform(geometry($2), _ST_BestSRID($1, $2))), 4326))' LANGUAGE 'SQL' IMMUTABLE STRICT; +-- Availability: 1.5.0 - this is just a hack to prevent unknown from causing ambiguous name because of geography +-- TODO Remove in 2.0 +CREATE OR REPLACE FUNCTION ST_Intersection(text, text) + RETURNS geometry AS + $$ SELECT ST_Intersection($1::geometry, $2::geometry); $$ + LANGUAGE 'SQL' IMMUTABLE STRICT; + -- ---------- ---------- ---------- ---------- ---------- ---------- ---------- COMMIT; -- 2.50.1