Changeset 4763
- Timestamp:
- 11/06/09 17:31:07 (2 years ago)
- Location:
- trunk
- Files:
-
- 5 modified
-
postgis/lwgeom_gist.c (modified) (3 diffs)
-
postgis/postgis.sql.in.c (modified) (3 diffs)
-
postgis/sqlmm.sql.in.c (modified) (1 diff)
-
regress/regress_expected (modified) (1 diff)
-
regress/regress.sql (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/postgis/lwgeom_gist.c
r4736 r4763 38 38 Datum LWGEOM_overabove(PG_FUNCTION_ARGS); 39 39 Datum LWGEOM_contained(PG_FUNCTION_ARGS); 40 Datum LWGEOM_samebox(PG_FUNCTION_ARGS); 40 41 Datum LWGEOM_contain(PG_FUNCTION_ARGS); 41 42 Datum LWGEOM_gist_compress(PG_FUNCTION_ARGS); … … 375 376 } 376 377 378 PG_FUNCTION_INFO_V1(LWGEOM_samebox); 379 Datum LWGEOM_samebox(PG_FUNCTION_ARGS) 380 { 381 PG_LWGEOM *lwgeom1 = (PG_LWGEOM *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); 382 PG_LWGEOM *lwgeom2 = (PG_LWGEOM *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); 383 bool result; 384 BOX2DFLOAT4 box1; 385 BOX2DFLOAT4 box2; 386 387 POSTGIS_DEBUG(2, "GIST: LWGEOM_samebox --entry"); 388 389 errorIfSRIDMismatch(pglwgeom_getSRID(lwgeom1), pglwgeom_getSRID(lwgeom2)); 390 391 if ( ! (getbox2d_p(SERIALIZED_FORM(lwgeom1), &box1) && getbox2d_p(SERIALIZED_FORM(lwgeom2), &box2)) ) 392 { 393 PG_FREE_IF_COPY(lwgeom1, 0); 394 PG_FREE_IF_COPY(lwgeom2, 1); 395 PG_RETURN_BOOL(FALSE); 396 } 397 398 result = DatumGetBool(DirectFunctionCall2(BOX2D_same, 399 PointerGetDatum(&box1), PointerGetDatum(&box2))); 400 401 PG_FREE_IF_COPY(lwgeom1, 0); 402 PG_FREE_IF_COPY(lwgeom2, 1); 403 404 PG_RETURN_BOOL(result); 405 } 377 406 378 407 PG_FUNCTION_INFO_V1(LWGEOM_contained); … … 564 593 *recheck = false; 565 594 566 /* Our ~= operator (strategy 6) requires a re-check in order to567 function according to the documentation and past behavior.568 We will temporarily enable that behavior here. */569 if ( strategy == 6 )570 *recheck = true;571 595 #endif 572 596 -
trunk/postgis/postgis.sql.in.c
r4758 r4763 645 645 LANGUAGE 'C' IMMUTABLE STRICT; 646 646 647 CREATE OR REPLACE FUNCTION geometry_same (geometry, geometry)647 CREATE OR REPLACE FUNCTION geometry_samebox(geometry, geometry) 648 648 RETURNS bool 649 AS 'MODULE_PATHNAME', 'LWGEOM_same '649 AS 'MODULE_PATHNAME', 'LWGEOM_samebox' 650 650 LANGUAGE 'C' IMMUTABLE STRICT; 651 651 … … 706 706 707 707 CREATE OPERATOR ~= ( 708 LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = geometry_same ,708 LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = geometry_samebox, 709 709 COMMUTATOR = '~=', 710 710 RESTRICT = eqsel, JOIN = eqjoinsel … … 4218 4218 LANGUAGE 'C' IMMUTABLE STRICT; 4219 4219 4220 -- PostGIS equivalent function: Equals(geometry,geometry)4221 CREATE OR REPLACE FUNCTION ST_Equals(geometry,geometry)4220 -- Availability: 1.5.0 4221 CREATE OR REPLACE FUNCTION _ST_Equals(geometry,geometry) 4222 4222 RETURNS boolean 4223 4223 AS 'MODULE_PATHNAME','geomequals' 4224 4224 LANGUAGE 'C' IMMUTABLE STRICT 4225 4225 COST 100; 4226 4227 -- Availability: 1.2.1 4228 CREATE OR REPLACE FUNCTION ST_Equals(geometry,geometry) 4229 RETURNS boolean 4230 AS 'SELECT $1 ~= $2 AND _ST_Equals($1,$2)' 4231 LANGUAGE 'SQL' IMMUTABLE STRICT; 4226 4232 4227 4233 -
trunk/postgis/sqlmm.sql.in.c
r4750 r4763 149 149 -- ST_Y(geometry) - already defined. 150 150 151 -- PostGIS equivalent function: ~= 151 -- Availability: 1.5.0 152 CREATE OR REPLACE FUNCTION _ST_OrderingEquals(geometry, geometry) 153 RETURNS boolean 154 AS 'MODULE_PATHNAME', 'LWGEOM_same' 155 LANGUAGE 'C' IMMUTABLE STRICT 156 COST 100; 157 158 -- Availability: 1.3.0 152 159 CREATE OR REPLACE FUNCTION ST_OrderingEquals(geometry, geometry) 153 160 RETURNS boolean 154 161 AS $$ 155 SELECT $1 && $2 AND $1 ~= $2162 SELECT $1 ~= $2 AND _ST_OrderingEquals($1, $2) 156 163 $$ 157 164 LANGUAGE 'SQL' IMMUTABLE STRICT; -
trunk/regress/regress_expected
r4750 r4763 77 77 HINT: "MULTIPOINT(1 1, 2 2" <-- parse error at position 19 within geometry 78 78 65|t 79 66|f 79 65a|t 80 66|t 81 66a|f 80 82 67|t 83 67a|t 81 84 68|t 85 68a|t 82 86 69|t 87 69a|t 83 88 70|t 84 71|f 85 72|f 86 73|f 89 70a|t 90 71|t 91 71a|f 92 72|t 93 72a|f 94 73|t 95 73a|f 87 96 74|f 88 75|f 97 74a|f 98 75|t 99 75a|f 89 100 76|f 101 76a|f 90 102 77|t 91 103 78|t -
trunk/regress/regress.sql
r4750 r4763 96 96 97 97 select '65','POINT(1 1)'::GEOMETRY ~= 'POINT(1 1)'::GEOMETRY as bool; 98 select '65a',st_orderingequals('POINT(1 1)'::GEOMETRY,'POINT(1 1)'::GEOMETRY) as bool; 98 99 select '66','POINT(1 1 0)'::GEOMETRY ~= 'POINT(1 1)'::GEOMETRY as bool; 100 select '66a',st_orderingequals('POINT(1 1 0)'::GEOMETRY,'POINT(1 1)'::GEOMETRY) as bool; 99 101 select '67','POINT(1 1 0)'::GEOMETRY ~= 'POINT(1 1 0)'::GEOMETRY as bool; 102 select '67a',st_orderingequals('POINT(1 1 0)'::GEOMETRY,'POINT(1 1 0)'::GEOMETRY) as bool; 100 103 101 104 select '68','MULTIPOINT(1 1,2 2)'::GEOMETRY ~= 'MULTIPOINT(1 1,2 2)'::GEOMETRY as bool; 105 select '68a',st_orderingequals('MULTIPOINT(1 1,2 2)'::GEOMETRY,'MULTIPOINT(1 1,2 2)'::GEOMETRY) as bool; 102 106 select '69','MULTIPOINT(2 2, 1 1)'::GEOMETRY ~= 'MULTIPOINT(1 1,2 2)'::GEOMETRY as bool; 107 select '69a',st_orderingequals('MULTIPOINT(2 2, 1 1)'::GEOMETRY,'MULTIPOINT(1 1,2 2)'::GEOMETRY) as bool; 103 108 104 109 select '70','GEOMETRYCOLLECTION(POINT( 1 2 3),POINT(4 5 6))'::GEOMETRY ~= 'GEOMETRYCOLLECTION(POINT( 4 5 6),POINT(1 2 3))'::GEOMETRY as bool; 110 select '70a',st_orderingequals('GEOMETRYCOLLECTION(POINT( 1 2 3),POINT(4 5 6))'::GEOMETRY,'GEOMETRYCOLLECTION(POINT( 4 5 6),POINT(1 2 3))'::GEOMETRY) as bool; 105 111 select '71','MULTIPOINT(4 5 6, 1 2 3)'::GEOMETRY ~= 'GEOMETRYCOLLECTION(POINT( 4 5 6),POINT(1 2 3))'::GEOMETRY as bool; 112 select '71a',st_orderingequals('MULTIPOINT(4 5 6, 1 2 3)'::GEOMETRY,'GEOMETRYCOLLECTION(POINT( 4 5 6),POINT(1 2 3))'::GEOMETRY) as bool; 106 113 select '72','MULTIPOINT(1 2 3, 4 5 6)'::GEOMETRY ~= 'GEOMETRYCOLLECTION(POINT( 4 5 6),POINT(1 2 3))'::GEOMETRY as bool; 114 select '72a',st_orderingequals('MULTIPOINT(1 2 3, 4 5 6)'::GEOMETRY,'GEOMETRYCOLLECTION(POINT( 4 5 6),POINT(1 2 3))'::GEOMETRY) as bool; 107 115 select '73','MULTIPOINT(1 2 3, 4 5 6)'::GEOMETRY ~= 'GEOMETRYCOLLECTION(MULTIPOINT(1 2 3, 4 5 6))'::GEOMETRY as bool; 116 select '73a',st_orderingequals('MULTIPOINT(1 2 3, 4 5 6)'::GEOMETRY,'GEOMETRYCOLLECTION(MULTIPOINT(1 2 3, 4 5 6))'::GEOMETRY) as bool; 108 117 109 118 110 119 select '74','LINESTRING(1 1,2 2)'::GEOMETRY ~= 'POINT(1 1)'::GEOMETRY as bool; 120 select '74a',st_orderingequals('LINESTRING(1 1,2 2)'::GEOMETRY,'POINT(1 1)'::GEOMETRY) as bool; 111 121 select '75','LINESTRING(1 1, 2 2)'::GEOMETRY ~= 'LINESTRING(2 2, 1 1)'::GEOMETRY as bool; 122 select '75a',st_orderingequals('LINESTRING(1 1, 2 2)'::GEOMETRY,'LINESTRING(2 2, 1 1)'::GEOMETRY) as bool; 112 123 select '76','LINESTRING(1 1, 2 2)'::GEOMETRY ~= 'LINESTRING(1 1, 2 2, 3 3)'::GEOMETRY as bool; 124 select '76a',st_orderingequals('LINESTRING(1 1, 2 2)'::GEOMETRY,'LINESTRING(1 1, 2 2, 3 3)'::GEOMETRY) as bool; 113 125 114 126 --- operator testing (testing is on the BOUNDING BOX (2d), not the actual geometries)
