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