PG_FUNCTION_INFO_V1(LWGEOM_overlap);
Datum LWGEOM_overlap(PG_FUNCTION_ARGS)
{
- char *lwgeom1 = (char *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
- char *lwgeom2 = (char *) PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
+ char *lwgeom1 = (char *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+ char *lwgeom2 = (char *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
bool result;
BOX2DFLOAT4 box1;
BOX2DFLOAT4 box2;
+ if ( lwgeom_getsrid(lwgeom1+4) != lwgeom_getsrid(lwgeom2+4) )
+ {
+ elog(ERROR, "Operation on two geometries with different SRIDs");
+ PG_RETURN_NULL();
+ }
+
+
if ( ! (getbox2d_p(lwgeom1+4, &box1) && getbox2d_p(lwgeom2+4, &box2)) )
{
// One or both are empty geoms
PG_FUNCTION_INFO_V1(LWGEOM_overleft);
Datum LWGEOM_overleft(PG_FUNCTION_ARGS)
{
- char *lwgeom1 = (char *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
- char *lwgeom2 = (char *) PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
+ char *lwgeom1 = (char *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+ char *lwgeom2 = (char *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
bool result;
BOX2DFLOAT4 box1;
BOX2DFLOAT4 box2;
elog(NOTICE,"GIST: LWGEOM_overleft --entry");
#endif
+ if ( lwgeom_getsrid(lwgeom1+4) != lwgeom_getsrid(lwgeom2+4) )
+ {
+ elog(ERROR, "Operation on two geometries with different SRIDs");
+ PG_RETURN_NULL();
+ }
+
if ( ! (getbox2d_p(lwgeom1+4, &box1) && getbox2d_p(lwgeom2+4, &box2)) )
{
PG_RETURN_BOOL(FALSE);
PG_FUNCTION_INFO_V1(LWGEOM_left);
Datum LWGEOM_left(PG_FUNCTION_ARGS)
{
- char *lwgeom1 = (char *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
- char *lwgeom2 = (char *) PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
+ char *lwgeom1 = (char *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+ char *lwgeom2 = (char *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
bool result;
BOX2DFLOAT4 box1;
BOX2DFLOAT4 box2;
elog(NOTICE,"GIST: LWGEOM_left --entry");
#endif
+ if ( lwgeom_getsrid(lwgeom1+4) != lwgeom_getsrid(lwgeom2+4) )
+ {
+ elog(ERROR, "Operation on two geometries with different SRIDs");
+ PG_RETURN_NULL();
+ }
+
if ( ! (getbox2d_p(lwgeom1+4, &box1) && getbox2d_p(lwgeom2+4, &box2)) )
{
PG_RETURN_BOOL(FALSE);
PG_FUNCTION_INFO_V1(LWGEOM_right);
Datum LWGEOM_right(PG_FUNCTION_ARGS)
{
- char *lwgeom1 = (char *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
- char *lwgeom2 = (char *) PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
+ char *lwgeom1 = (char *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+ char *lwgeom2 = (char *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
bool result;
BOX2DFLOAT4 box1;
BOX2DFLOAT4 box2;
elog(NOTICE,"GIST: LWGEOM_right --entry");
#endif
+ if ( lwgeom_getsrid(lwgeom1+4) != lwgeom_getsrid(lwgeom2+4) )
+ {
+ elog(ERROR, "Operation on two geometries with different SRIDs");
+ PG_RETURN_NULL();
+ }
+
if ( ! (getbox2d_p(lwgeom1+4, &box1) && getbox2d_p(lwgeom2+4, &box2)) )
{
PG_RETURN_BOOL(FALSE);
PG_FUNCTION_INFO_V1(LWGEOM_overright);
Datum LWGEOM_overright(PG_FUNCTION_ARGS)
{
- char *lwgeom1 = (char *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
- char *lwgeom2 = (char *) PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
+ char *lwgeom1 = (char *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+ char *lwgeom2 = (char *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
bool result;
BOX2DFLOAT4 box1;
BOX2DFLOAT4 box2;
elog(NOTICE,"GIST: LWGEOM_overright --entry");
#endif
+ if ( lwgeom_getsrid(lwgeom1+4) != lwgeom_getsrid(lwgeom2+4) )
+ {
+ elog(ERROR, "Operation on two geometries with different SRIDs");
+ PG_RETURN_NULL();
+ }
+
if ( ! (getbox2d_p(lwgeom1+4, &box1) && getbox2d_p(lwgeom2+4, &box2)) )
{
PG_RETURN_BOOL(FALSE);
PG_FUNCTION_INFO_V1(LWGEOM_overbelow);
Datum LWGEOM_overbelow(PG_FUNCTION_ARGS)
{
- char *lwgeom1 = (char *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
- char *lwgeom2 = (char *) PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
+ char *lwgeom1 = (char *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+ char *lwgeom2 = (char *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
bool result;
BOX2DFLOAT4 box1;
BOX2DFLOAT4 box2;
elog(NOTICE,"GIST: LWGEOM_overbelow --entry");
#endif
+ if ( lwgeom_getsrid(lwgeom1+4) != lwgeom_getsrid(lwgeom2+4) )
+ {
+ elog(ERROR, "Operation on two geometries with different SRIDs");
+ PG_RETURN_NULL();
+ }
+
if ( ! (getbox2d_p(lwgeom1+4, &box1) && getbox2d_p(lwgeom2+4, &box2)) )
{
PG_RETURN_BOOL(FALSE);
PG_FUNCTION_INFO_V1(LWGEOM_below);
Datum LWGEOM_below(PG_FUNCTION_ARGS)
{
- char *lwgeom1 = (char *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
- char *lwgeom2 = (char *) PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
+ char *lwgeom1 = (char *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+ char *lwgeom2 = (char *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
bool result;
BOX2DFLOAT4 box1;
BOX2DFLOAT4 box2;
elog(NOTICE,"GIST: LWGEOM_below --entry");
#endif
+ if ( lwgeom_getsrid(lwgeom1+4) != lwgeom_getsrid(lwgeom2+4) )
+ {
+ elog(ERROR, "Operation on two geometries with different SRIDs");
+ PG_RETURN_NULL();
+ }
+
if ( ! (getbox2d_p(lwgeom1+4, &box1) && getbox2d_p(lwgeom2+4, &box2)) )
{
PG_RETURN_BOOL(FALSE);
PG_FUNCTION_INFO_V1(LWGEOM_above);
Datum LWGEOM_above(PG_FUNCTION_ARGS)
{
- char *lwgeom1 = (char *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
- char *lwgeom2 = (char *) PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
+ char *lwgeom1 = (char *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+ char *lwgeom2 = (char *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
bool result;
BOX2DFLOAT4 box1;
BOX2DFLOAT4 box2;
elog(NOTICE,"GIST: LWGEOM_above --entry");
#endif
+ if ( lwgeom_getsrid(lwgeom1+4) != lwgeom_getsrid(lwgeom2+4) )
+ {
+ elog(ERROR, "Operation on two geometries with different SRIDs");
+ PG_RETURN_NULL();
+ }
+
if ( ! (getbox2d_p(lwgeom1+4, &box1) && getbox2d_p(lwgeom2+4, &box2)) )
{
PG_RETURN_BOOL(FALSE);
PG_FUNCTION_INFO_V1(LWGEOM_overabove);
Datum LWGEOM_overabove(PG_FUNCTION_ARGS)
{
- char *lwgeom1 = (char *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
- char *lwgeom2 = (char *) PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
+ char *lwgeom1 = (char *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+ char *lwgeom2 = (char *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
bool result;
BOX2DFLOAT4 box1;
BOX2DFLOAT4 box2;
elog(NOTICE,"GIST: LWGEOM_overabove --entry");
#endif
+ if ( lwgeom_getsrid(lwgeom1+4) != lwgeom_getsrid(lwgeom2+4) )
+ {
+ elog(ERROR, "Operation on two geometries with different SRIDs");
+ PG_RETURN_NULL();
+ }
+
if ( ! (getbox2d_p(lwgeom1+4, &box1) && getbox2d_p(lwgeom2+4, &box2)) )
{
PG_RETURN_BOOL(FALSE);
PG_FUNCTION_INFO_V1(LWGEOM_contained);
Datum LWGEOM_contained(PG_FUNCTION_ARGS)
{
- char *lwgeom1 = (char *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
- char *lwgeom2 = (char *) PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
+ char *lwgeom1 = (char *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+ char *lwgeom2 = (char *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
bool result;
BOX2DFLOAT4 box1;
BOX2DFLOAT4 box2;
elog(NOTICE,"GIST: LWGEOM_contained --entry");
#endif
+ if ( lwgeom_getsrid(lwgeom1+4) != lwgeom_getsrid(lwgeom2+4) )
+ {
+ elog(ERROR, "Operation on two geometries with different SRIDs");
+ PG_RETURN_NULL();
+ }
+
if ( ! (getbox2d_p(lwgeom1+4, &box1) && getbox2d_p(lwgeom2+4, &box2)) )
{
PG_RETURN_BOOL(FALSE);
PG_FUNCTION_INFO_V1(LWGEOM_contain);
Datum LWGEOM_contain(PG_FUNCTION_ARGS)
{
- char *lwgeom1 = (char *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
- char *lwgeom2 = (char *) PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
+ char *lwgeom1 = (char *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
+ char *lwgeom2 = (char *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
bool result;
BOX2DFLOAT4 box1;
BOX2DFLOAT4 box2;
elog(NOTICE,"GIST: LWGEOM_contain --entry");
#endif
+ if ( lwgeom_getsrid(lwgeom1+4) != lwgeom_getsrid(lwgeom2+4) )
+ {
+ elog(ERROR, "Operation on two geometries with different SRIDs");
+ PG_RETURN_NULL();
+ }
+
if ( ! (getbox2d_p(lwgeom1+4, &box1) && getbox2d_p(lwgeom2+4, &box2)) )
{
PG_RETURN_BOOL(FALSE);
in = (char*)PG_DETOAST_DATUM(entry->key);
#ifdef DEBUG_GIST4
- elog(NOTICE,"GIST: LWGEOM_gist_compress detoasted entry->key: %s", unparse_WKT(SERIALIZED_FORM(in), malloc, free));
+ elog(NOTICE,"GIST: LWGEOM_gist_compress detoasted entry->key: %s", unparse_WKT(in+4, malloc, free));
#endif
if (in == NULL)
PG_RETURN_BOOL(false); // null query - this is screwy!
}
- query = (char*) PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
+ query = (char*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
if ( ! (DatumGetPointer(entry->key) != NULL && query) )