Doing so it will consistently return TRUE for EMPTY-EMPTY, while
previously _ST_Equals returned TRUE but ST_Equals returned FALSE.
The commit also changes signature of the C function
from 'geomequals' to 'ST_Equals' and marks an SQL 'Equals'
signature as a candidate for dropping before 2.0.0 final
git-svn-id: http://svn.osgeo.org/postgis/trunk@8886
b70326c6-7e19-0410-871a-
916f4a2858ee
Datum ST_UnaryUnion(PG_FUNCTION_ARGS);
Datum issimple(PG_FUNCTION_ARGS);
Datum isring(PG_FUNCTION_ARGS);
-Datum geomequals(PG_FUNCTION_ARGS);
+Datum ST_Equals(PG_FUNCTION_ARGS);
Datum pointonsurface(PG_FUNCTION_ARGS);
Datum GEOSnoop(PG_FUNCTION_ARGS);
Datum postgis_geos_version(PG_FUNCTION_ARGS);
}
-PG_FUNCTION_INFO_V1(geomequals);
-Datum geomequals(PG_FUNCTION_ARGS)
+PG_FUNCTION_INFO_V1(ST_Equals);
+Datum ST_Equals(PG_FUNCTION_ARGS)
{
GSERIALIZED *geom1;
GSERIALIZED *geom2;
/*
* short-circuit: Loose test, if geom2 bounding box does not overlap
* geom1 bounding box we can prematurely return FALSE.
+ *
+ * TODO: use gbox_same_2d instead (not available at time of writing)
*/
if ( gserialized_get_gbox_p(geom1, &box1) &&
gserialized_get_gbox_p(geom2, &box2) )
LANGUAGE 'C' IMMUTABLE STRICT;\r
\r
-- Deprecation in 1.2.3\r
+-- TODO: drop in 2.0.0 !\r
CREATE OR REPLACE FUNCTION Equals(geom1 geometry, geom2 geometry)\r
RETURNS boolean\r
- AS 'MODULE_PATHNAME','geomequals'\r
+ AS 'MODULE_PATHNAME','ST_Equals'\r
LANGUAGE 'C' IMMUTABLE STRICT;\r
\r
-- Availability: 1.5.0\r
CREATE OR REPLACE FUNCTION _ST_Equals(geom1 geometry, geom2 geometry)\r
RETURNS boolean\r
- AS 'MODULE_PATHNAME','geomequals'\r
+ AS 'MODULE_PATHNAME','ST_Equals'\r
LANGUAGE 'C' IMMUTABLE STRICT\r
COST 100;\r
\r
-- Availability: 1.2.1\r
CREATE OR REPLACE FUNCTION ST_Equals(geom1 geometry, geom2 geometry)\r
RETURNS boolean\r
- AS 'SELECT $1 && $2 AND _ST_Equals($1,$2)'\r
+ AS 'SELECT $1 ~= $2 AND _ST_Equals($1,$2)'\r
LANGUAGE 'SQL' IMMUTABLE;\r
\r
\r
'POLYGON EMPTY'::geometry as empty,
'POLYGON((0 0, 10 0, 5 5, 0 0))'::geometry as geometry
) SELECT 'ST_Disjoint(geometry, empty) == TRUE', ST_Disjoint(geometry, empty) FROM inp;
+WITH inp AS (SELECT
+ 'POLYGON EMPTY'::geometry as empty1,
+ 'POINT Z EMPTY'::geometry as empty2
+ ) SELECT 'ST_Equals(empty1, empty2) == TRUE', ST_Equals(empty1, empty2) FROM inp;
WITH inp AS (SELECT
'POLYGON EMPTY'::geometry as empty
) SELECT 'ST_IsSimple(empty) == TRUE', ST_IsSimple(empty) FROM inp;
ST_Intersects(empty, empty) == FALSE|f
ST_Disjoint(empty, empty) == TRUE|t
ST_Disjoint(geometry, empty) == TRUE|t
+ST_Equals(empty1, empty2) == TRUE|t
ST_IsSimple(empty) == TRUE|t
ST_IsValid(empty) == TRUE|t
ST_NumGeometries(empty) == 0|0