PostGIS  2.2.8dev-r@@SVN_REVISION@@

◆ errorIfGeometryCollection()

void errorIfGeometryCollection ( GSERIALIZED g1,
GSERIALIZED g2 
)

Throws an ereport ERROR if either geometry is a COLLECTIONTYPE.

Additionally displays a HINT of the first 80 characters of the WKT representation of the problematic geometry so a user knows which parameter and which geometry is causing the problem.

Definition at line 1652 of file postgis/lwgeom_geos.c.

References COLLECTIONTYPE, gserialized_get_type(), isvalid(), lwgeom_free(), lwgeom_from_gserialized(), lwgeom_to_wkt(), lwmessage_truncate(), PG_FUNCTION_INFO_V1(), and WKT_SFSQL.

Referenced by contains(), containsproperly(), coveredby(), covers(), crosses(), disjoint(), geos_intersects(), overlaps(), relate_full(), relate_pattern(), ST_Equals(), and touches().

1653 {
1654  int t1 = gserialized_get_type(g1);
1655  int t2 = gserialized_get_type(g2);
1656 
1657  char *hintmsg;
1658  char *hintwkt;
1659  size_t hintsz;
1660  LWGEOM *lwgeom;
1661 
1662  if ( t1 == COLLECTIONTYPE)
1663  {
1664  lwgeom = lwgeom_from_gserialized(g1);
1665  hintwkt = lwgeom_to_wkt(lwgeom, WKT_SFSQL, DBL_DIG, &hintsz);
1666  lwgeom_free(lwgeom);
1667  hintmsg = lwmessage_truncate(hintwkt, 0, hintsz-1, 80, 1);
1668  ereport(ERROR,
1669  (errmsg("Relate Operation called with a LWGEOMCOLLECTION type. This is unsupported."),
1670  errhint("Change argument 1: '%s'", hintmsg))
1671  );
1672  pfree(hintwkt);
1673  pfree(hintmsg);
1674  }
1675  else if (t2 == COLLECTIONTYPE)
1676  {
1677  lwgeom = lwgeom_from_gserialized(g2);
1678  hintwkt = lwgeom_to_wkt(lwgeom, WKT_SFSQL, DBL_DIG, &hintsz);
1679  hintmsg = lwmessage_truncate(hintwkt, 0, hintsz-1, 80, 1);
1680  lwgeom_free(lwgeom);
1681  ereport(ERROR,
1682  (errmsg("Relate Operation called with a LWGEOMCOLLECTION type. This is unsupported."),
1683  errhint("Change argument 2: '%s'", hintmsg))
1684  );
1685  pfree(hintwkt);
1686  pfree(hintmsg);
1687  }
1688 }
uint32_t gserialized_get_type(const GSERIALIZED *s)
Extract the geometry type from the serialized form (it hides in the anonymous data area...
Definition: g_serialized.c:55
char * lwgeom_to_wkt(const LWGEOM *geom, uint8_t variant, int precision, size_t *size_out)
WKT emitter function.
Definition: lwout_wkt.c:655
LWGEOM * lwgeom_from_gserialized(const GSERIALIZED *g)
Allocate a new LWGEOM from a GSERIALIZED.
void lwgeom_free(LWGEOM *geom)
Definition: lwgeom.c:1050
char * lwmessage_truncate(char *str, int startpos, int endpos, int maxlength, int truncdirection)
Definition: lwutil.c:264
#define WKT_SFSQL
Definition: liblwgeom.h:1940
#define COLLECTIONTYPE
Definition: liblwgeom.h:76
Here is the call graph for this function:
Here is the caller graph for this function: