]> granicus.if.org Git - postgis/commitdiff
Fix warnings.
authorDarafei Praliaskouski <me@komzpa.net>
Tue, 16 Jan 2018 14:21:44 +0000 (14:21 +0000)
committerDarafei Praliaskouski <me@komzpa.net>
Tue, 16 Jan 2018 14:21:44 +0000 (14:21 +0000)
Remove unreachable code.
Fix pointer dereference and null check order.
Fix HAS_Z/M and g1/g2 mixup in conditions.
Fix typmod variables to be signed.
Fix & and && in conditions.
Cover ST_AsGML with tests. Check option bitmask for unsupported bits.
Cover typmod_in/typmod_out with tests.
Reorder *free* to happen before *return*.

Closes https://github.com/postgis/postgis/pull/192

git-svn-id: http://svn.osgeo.org/postgis/trunk@16319 b70326c6-7e19-0410-871a-916f4a2858ee

36 files changed:
liblwgeom/g_box.c
liblwgeom/g_serialized.c
liblwgeom/lwcollection.c
liblwgeom/lwgeodetic.c
liblwgeom/lwgeodetic_tree.c
liblwgeom/lwgeom_api.c
liblwgeom/lwgeom_geos.c
liblwgeom/lwgeom_topo.c
liblwgeom/lwin_twkb.c
liblwgeom/lwin_wkb.c
liblwgeom/lwlinearreferencing.c
liblwgeom/lwout_wkb.c
liblwgeom/lwpoly.c
liblwgeom/measures.c
liblwgeom/measures3d.c
liblwgeom/ptarray.c
libpgcommon/gserialized_gist.c
libpgcommon/lwgeom_transform.c
loader/shp2pgsql-core.c
postgis/geography_inout.c
postgis/gserialized_estimate.c
postgis/gserialized_typmod.c
postgis/lwgeom_box3d.c
postgis/lwgeom_export.c
postgis/lwgeom_functions_basic.c
postgis/lwgeom_geos.c
postgis/lwgeom_in_gml.c
regress/geography.sql
regress/geography_expected
regress/lwgeom_regress.sql
regress/lwgeom_regress_expected
regress/out_geography.sql
regress/out_geography_expected
regress/out_geometry.sql
regress/out_geometry_expected
topology/postgis_topology.c

index 2fd53dd6f27795ee8762756302cf6b04deeb1f4e..4159da291ddcdc552560dbe65c175620dd315599 100644 (file)
  *
  **********************************************************************/
 
-
-#if !HAVE_ISFINITE
-#endif
-
 #include "liblwgeom_internal.h"
 #include "lwgeom_log.h"
 #include <stdlib.h>
@@ -147,13 +143,12 @@ int gbox_union(const GBOX *g1, const GBOX *g2, GBOX *gout)
 {
        if ( ( ! g1 ) && ( ! g2 ) )
                return LW_FALSE;
-
-       if  ( ! g1 )
+       else if (!g1)
        {
                memcpy(gout, g2, sizeof(GBOX));
                return LW_TRUE;
        }
-       if ( ! g2 )
+       else if (!g2)
        {
                memcpy(gout, g1, sizeof(GBOX));
                return LW_TRUE;
@@ -590,15 +585,15 @@ int ptarray_calculate_gbox_cartesian(const POINTARRAY *pa, GBOX *gbox )
 
 static int lwcircstring_calculate_gbox_cartesian(LWCIRCSTRING *curve, GBOX *gbox)
 {
-       uint8_t flags = gflags(FLAGS_GET_Z(curve->flags), FLAGS_GET_M(curve->flags), 0);
        GBOX tmp;
        POINT4D p1, p2, p3;
        uint32_t i;
 
-       if ( ! curve ) return LW_FAILURE;
-       if ( curve->points->npoints < 3 ) return LW_FAILURE;
+       if (!curve) return LW_FAILURE;
+       if (curve->points->npoints < 3) return LW_FAILURE;
 
-       tmp.flags = flags;
+       tmp.flags =
+           gflags(FLAGS_GET_Z(curve->flags), FLAGS_GET_M(curve->flags), 0);
 
        /* Initialize */
        gbox->xmin = gbox->ymin = gbox->zmin = gbox->mmin = FLT_MAX;
index 55fdfa24cdfe4f290748f0d0e783443b6ad25428..1649ee1bd88c9c7a6931f5e74e090af7d92c1587 100644 (file)
@@ -354,7 +354,7 @@ int gserialized_cmp(const GSERIALIZED *g1, const GSERIALIZED *g2)
                return -1;
 
        /* Non-empty > Empty */
-       if (!g2_is_empty && g2_is_empty)
+       if (!g1_is_empty && g2_is_empty)
                return 1;
 
        /* Return equality for perfect equality only */
index 9a7efee6b19edb7689746a15625b6eecf3a96ea3..6b59b3719ff178e81d08d7591df19c84584445f6 100644 (file)
@@ -232,28 +232,29 @@ LWCOLLECTION* lwcollection_add_lwgeom(LWCOLLECTION *col, const LWGEOM *geom)
        return col;
 }
 
-
-LWCOLLECTION *
-lwcollection_segmentize2d(const LWCOLLECTION *col, double dist)
+LWCOLLECTION*
+lwcollection_segmentize2d(const LWCOLLECTION* col, double dist)
 {
-       uint32_t i,j;
-       LWGEOM **newgeoms;
+       uint32_t i, j;
+       LWGEOM** newgeoms;
 
-       if ( ! col->ngeoms ) return lwcollection_clone(col);
+       if (!col->ngeoms) return lwcollection_clone(col);
 
-       newgeoms = lwalloc(sizeof(LWGEOM *)*col->ngeoms);
-       for (i=0; i<col->ngeoms; i++)
+       newgeoms = lwalloc(sizeof(LWGEOM*) * col->ngeoms);
+       for (i = 0; i < col->ngeoms; i++)
        {
                newgeoms[i] = lwgeom_segmentize2d(col->geoms[i], dist);
-               if ( ! newgeoms[i] ) {
-                       for (j=0; j < i; i++)
+               if (!newgeoms[i])
+               {
+                       for (j = 0; j < i; j++)
                                lwgeom_free(newgeoms[j]);
                        lwfree(newgeoms);
                        return NULL;
                }
        }
 
-       return lwcollection_construct(col->type, col->srid, NULL, col->ngeoms, newgeoms);
+       return lwcollection_construct(
+           col->type, col->srid, NULL, col->ngeoms, newgeoms);
 }
 
 /** @brief check for same geometry composition
@@ -367,16 +368,17 @@ void lwcollection_free(LWCOLLECTION *col)
 * WARNING: the output will contain references to geometries in the input,
 * so the result must be carefully released, not freed.
 */
-LWCOLLECTION* lwcollection_extract(LWCOLLECTION *col, int type)
+LWCOLLECTION*
+lwcollection_extract(LWCOLLECTION* col, int type)
 {
        uint32_t i = 0;
-       LWGEOM **geomlist;
-       LWCOLLECTION *outcol;
+       LWGEOM** geomlist;
+       LWCOLLECTIONoutcol;
        int geomlistsize = 16;
        int geomlistlen = 0;
        uint8_t outtype;
 
-       if ( ! col ) return NULL;
+       if (!col) return NULL;
 
        switch (type)
        {
@@ -390,74 +392,81 @@ LWCOLLECTION* lwcollection_extract(LWCOLLECTION *col, int type)
                outtype = MULTIPOLYGONTYPE;
                break;
        default:
-               lwerror("Only POLYGON, LINESTRING and POINT are supported by lwcollection_extract. %s requested.", lwtype_name(type));
+               lwerror(
+                   "Only POLYGON, LINESTRING and POINT are supported by "
+                   "lwcollection_extract. %s requested.",
+                   lwtype_name(type));
                return NULL;
        }
 
        geomlist = lwalloc(sizeof(LWGEOM*) * geomlistsize);
 
        /* Process each sub-geometry */
-       for ( i = 0; i < col->ngeoms; i++ )
+       for (i = 0; i < col->ngeoms; i++)
        {
                int subtype = col->geoms[i]->type;
                /* Don't bother adding empty sub-geometries */
-               if ( lwgeom_is_empty(col->geoms[i]) )
-               {
-                       continue;
-               }
+               if (lwgeom_is_empty(col->geoms[i])) continue;
                /* Copy our sub-types into the output list */
-               if ( subtype == type )
+               if (subtype == type)
                {
-                       /* We've over-run our buffer, double the memory segment */
-                       if ( geomlistlen == geomlistsize )
+                       /* We've over-run our buffer, double the memory segment
+                        */
+                       if (geomlistlen == geomlistsize)
                        {
                                geomlistsize *= 2;
-                               geomlist = lwrealloc(geomlist, sizeof(LWGEOM*) * geomlistsize);
+                               geomlist = lwrealloc(
+                                   geomlist, sizeof(LWGEOM*) * geomlistsize);
                        }
                        geomlist[geomlistlen] = lwgeom_clone(col->geoms[i]);
                        geomlistlen++;
                }
                /* Recurse into sub-collections */
-               if ( lwtype_is_collection( subtype ) )
+               if (lwtype_is_collection(subtype))
                {
                        uint32_t j = 0;
-                       LWCOLLECTION *tmpcol = lwcollection_extract((LWCOLLECTION*)col->geoms[i], type);
-                       for ( j = 0; j < tmpcol->ngeoms; j++ )
+                       LWCOLLECTION* tmpcol = lwcollection_extract(
+                           (LWCOLLECTION*)col->geoms[i], type);
+                       for (j = 0; j < tmpcol->ngeoms; j++)
                        {
-                               /* We've over-run our buffer, double the memory segment */
-                               if ( geomlistlen == geomlistsize )
+                               /* We've over-run our buffer, double the memory
+                                * segment */
+                               if (geomlistlen == geomlistsize)
                                {
                                        geomlistsize *= 2;
-                                       geomlist = lwrealloc(geomlist, sizeof(LWGEOM*) * geomlistsize);
+                                       geomlist = lwrealloc(geomlist,
+                                                            sizeof(LWGEOM*) *
+                                                                geomlistsize);
                                }
                                geomlist[geomlistlen] = tmpcol->geoms[j];
                                geomlistlen++;
                        }
-                       if (tmpcol->geoms)
-                               lwfree(tmpcol->geoms);
-                       if (tmpcol->bbox)
-                               lwfree(tmpcol->bbox);
+                       if (tmpcol->ngeoms) lwfree(tmpcol->geoms);
+                       if (tmpcol->bbox) lwfree(tmpcol->bbox);
                        lwfree(tmpcol);
                }
        }
 
-       if ( geomlistlen > 0 )
+       if (geomlistlen > 0)
        {
                GBOX gbox;
-               outcol = lwcollection_construct(outtype, col->srid, NULL, geomlistlen, geomlist);
-               lwgeom_calculate_gbox((LWGEOM *) outcol, &gbox);
+               outcol = lwcollection_construct(
+                   outtype, col->srid, NULL, geomlistlen, geomlist);
+               lwgeom_calculate_gbox((LWGEOM*)outcol, &gbox);
                outcol->bbox = gbox_copy(&gbox);
        }
        else
        {
                lwfree(geomlist);
-               outcol = lwcollection_construct_empty(outtype, col->srid, FLAGS_GET_Z(col->flags), FLAGS_GET_M(col->flags));
+               outcol = lwcollection_construct_empty(outtype,
+                                                     col->srid,
+                                                     FLAGS_GET_Z(col->flags),
+                                                     FLAGS_GET_M(col->flags));
        }
 
        return outcol;
 }
 
-
 LWCOLLECTION*
 lwcollection_force_dims(const LWCOLLECTION *col, int hasz, int hasm)
 {
index 83f389e88ab80f27cedcbca2245ae4f5cc253bb5..b42f590c75ee742673c0eaa3adc82ff40ff003d1 100644 (file)
@@ -2237,36 +2237,39 @@ double lwgeom_distance_spheroid(const LWGEOM *lwgeom1, const LWGEOM *lwgeom2, co
 
        }
 
-       /* Polygon/polygon case, if start point-in-poly, return zero, else return distance. */
-       if ( ( type1 == POLYGONTYPE && type2 == POLYGONTYPE ) ||
-            ( type2 == POLYGONTYPE && type1 == POLYGONTYPE ) )
+       /* Polygon/polygon case, if start point-in-poly, return zero, else
+        * return distance. */
+       if (type1 == POLYGONTYPE && type2 == POLYGONTYPE)
        {
-               const POINT2D *p;
-               LWPOLY *lwpoly1 = (LWPOLY*)lwgeom1;
-               LWPOLY *lwpoly2 = (LWPOLY*)lwgeom2;
+               const POINT2Dp;
+               LWPOLYlwpoly1 = (LWPOLY*)lwgeom1;
+               LWPOLYlwpoly2 = (LWPOLY*)lwgeom2;
                double distance = FLT_MAX;
                uint32_t i, j;
 
                /* Point of 2 in polygon 1 implies zero distance */
                p = getPoint2d_cp(lwpoly1->rings[0], 0);
-               if ( lwpoly_covers_point2d(lwpoly2, p) )
-                       return 0.0;
+               if (lwpoly_covers_point2d(lwpoly2, p)) return 0.0;
 
                /* Point of 1 in polygon 2 implies zero distance */
                p = getPoint2d_cp(lwpoly2->rings[0], 0);
-               if ( lwpoly_covers_point2d(lwpoly1, p) )
-                       return 0.0;
+               if (lwpoly_covers_point2d(lwpoly1, p)) return 0.0;
 
                /* Not contained, so what's the actual distance? */
-               for ( i = 0; i < lwpoly1->nrings; i++ )
+               for (i = 0; i < lwpoly1->nrings; i++)
                {
-                       for ( j = 0; j < lwpoly2->nrings; j++ )
+                       for (j = 0; j < lwpoly2->nrings; j++)
                        {
-                               double ring_distance = ptarray_distance_spheroid(lwpoly1->rings[i], lwpoly2->rings[j], spheroid, tolerance, check_intersection);
-                               if ( ring_distance < distance )
+                               double ring_distance =
+                                   ptarray_distance_spheroid(
+                                       lwpoly1->rings[i],
+                                       lwpoly2->rings[j],
+                                       spheroid,
+                                       tolerance,
+                                       check_intersection);
+                               if (ring_distance < distance)
                                        distance = ring_distance;
-                               if ( distance < tolerance )
-                                       return distance;
+                               if (distance < tolerance) return distance;
                        }
                }
                return distance;
@@ -2281,7 +2284,8 @@ double lwgeom_distance_spheroid(const LWGEOM *lwgeom1, const LWGEOM *lwgeom2, co
 
                for ( i = 0; i < col->ngeoms; i++ )
                {
-                       double geom_distance = lwgeom_distance_spheroid(col->geoms[i], lwgeom2, spheroid, tolerance);
+                       double geom_distance = lwgeom_distance_spheroid(
+                           col->geoms[i], lwgeom2, spheroid, tolerance);
                        if ( geom_distance < distance )
                                distance = geom_distance;
                        if ( distance < tolerance )
index 81592149fd72dcdcd96d7faef8de2b7487c2a79f..80a838d12b520706bad6e38d4e7cac11b0f49852 100644 (file)
@@ -52,10 +52,12 @@ circ_tree_free(CIRC_NODE* node)
        uint32_t i;
        if ( ! node ) return;
 
-       for ( i = 0; i < node->num_nodes; i++ )
-               circ_tree_free(node->nodes[i]);
-
-       if ( node->nodes ) lwfree(node->nodes);
+       if (node->nodes)
+       {
+               for (i = 0; i < node->num_nodes; i++)
+                       circ_tree_free(node->nodes[i]);
+               lwfree(node->nodes);
+       }
        lwfree(node);
 }
 
index 4c728261e7549e40b573bc691fbfb30059be0afa..81366b15b1e3310758c3a82345698aff254a3354 100644 (file)
@@ -394,19 +394,18 @@ getPoint3dz_cp(const POINTARRAY *pa, uint32_t n)
        return (const POINT3DZ*)getPoint_internal(pa, n);
 }
 
-
 const POINT4D*
-getPoint4d_cp(const POINTARRAY *pa, uint32_t n)
+getPoint4d_cp(const POINTARRAYpa, uint32_t n)
 {
-       if ( ! pa ) return 0;
+       if (!pa) return 0;
 
-       if ( ! (FLAGS_GET_Z(pa->flags) && FLAGS_GET_Z(pa->flags)) )
+       if (!(FLAGS_GET_Z(pa->flags) && FLAGS_GET_M(pa->flags)))
        {
                lwerror("getPoint4d_cp: no Z and M coordinates in point array");
                return 0; /*error */
        }
 
-       if ( n>=pa->npoints )
+       if (n >= pa->npoints)
        {
                lwerror("getPoint4d_cp: point offset out of range");
                return 0; /*error */
@@ -415,8 +414,6 @@ getPoint4d_cp(const POINTARRAY *pa, uint32_t n)
        return (const POINT4D*)getPoint_internal(pa, n);
 }
 
-
-
 /*
  * set point N to the given value
  * NOTE that the pointarray can be of any
index a7fdf69a2aec099d46a189deae5e777316b51f8c..0903e3696e6a7a21b7f3b3b3ee3051dcfbf83b0a 100644 (file)
@@ -417,27 +417,25 @@ LWGEOM2GEOS(const LWGEOM *lwgeom, int autofix)
                break;
 
        case POLYGONTYPE:
-               lwpoly = (LWPOLY *)lwgeom;
-               if ( lwgeom_is_empty(lwgeom) )
-               {
+               lwpoly = (LWPOLY*)lwgeom;
+               if (lwgeom_is_empty(lwgeom))
                        g = GEOSGeom_createEmptyPolygon();
-               }
                else
                {
                        shell = ptarray_to_GEOSLinearRing(lwpoly->rings[0], autofix);
                        if ( ! shell ) return NULL;
                        /*lwerror("LWGEOM2GEOS: exception during polygon shell conversion"); */
                        ngeoms = lwpoly->nrings-1;
-                       if ( ngeoms > 0 )
-                               geoms = malloc(sizeof(GEOSGeom)*ngeoms);
+                       if (ngeoms > 0)
+                               geoms = malloc(sizeof(GEOSGeom) * ngeoms);
 
-                       for (i=1; i<lwpoly->nrings; ++i)
+                       for (i = 1; i < lwpoly->nrings; i++)
                        {
                                geoms[i-1] = ptarray_to_GEOSLinearRing(lwpoly->rings[i], autofix);
                                if ( ! geoms[i-1] )
                                {
                                        uint32_t k;
-                                       for (k = 0; k < i-1; k++)
+                                       for (k = 0; k < i - 1; k++)
                                                GEOSGeom_destroy(geoms[k]);
                                        free(geoms);
                                        GEOSGeom_destroy(shell);
@@ -466,8 +464,7 @@ LWGEOM2GEOS(const LWGEOM *lwgeom, int autofix)
                lwc = (LWCOLLECTION *)lwgeom;
 
                ngeoms = lwc->ngeoms;
-               if ( ngeoms > 0 )
-                       geoms = malloc(sizeof(GEOSGeom)*ngeoms);
+               if (ngeoms > 0) geoms = malloc(sizeof(GEOSGeom) * ngeoms);
 
                j = 0;
                for (i=0; i<ngeoms; ++i)
@@ -489,7 +486,7 @@ LWGEOM2GEOS(const LWGEOM *lwgeom, int autofix)
                        geoms[j++] = g;
                }
                g = GEOSGeom_createCollection(geostype, geoms, j);
-               if ( geoms ) free(geoms);
+               if (ngeoms > 0) free(geoms);
                if ( ! g ) return NULL;
                break;
 
index 1f42ef82f0b86829bd53a7e9f6e06298ccac46fb..a11e1ea605b299e66ed54ea408fa15607dc40cb1 100644 (file)
@@ -3862,19 +3862,21 @@ lwt_RemIsoEdge(LWT_TOPOLOGY* topo, LWT_ELEMID id)
 
   n = 2;
   edge = lwt_be_getEdgeByNode( topo, nid, &n, LWT_COL_EDGE_EDGE_ID );
-  if ( n == -1 )
+  if ((n == -1) || (edge == NULL))
   {
-    lwerror("Backend error: %s", lwt_be_lastErrorMessage(topo->be_iface));
-    return -1;
+         lwerror("Backend error: %s", lwt_be_lastErrorMessage(topo->be_iface));
+         return -1;
   }
-  for ( i=0; i<n; ++i )
+  for (i = 0; i < n; ++i)
   {
-    if ( edge[i].edge_id == id ) continue;
-    lwfree(edge);
-    lwerror("SQL/MM Spatial exception - not isolated edge");
-    return -1;
+         if (edge[i].edge_id != id)
+         {
+                 lwfree(edge);
+                 lwerror("SQL/MM Spatial exception - not isolated edge");
+                 return -1;
+         }
   }
-  if ( edge ) lwfree(edge);
+  lwfree(edge);
 
   deledge.edge_id = id;
   n = lwt_be_deleteEdges( topo, &deledge, LWT_COL_EDGE_EDGE_ID );
@@ -4400,7 +4402,7 @@ _lwt_HealEdges( LWT_TOPOLOGY* topo, LWT_ELEMID eid1, LWT_ELEMID eid2,
   ids[1] = eid2;
   nedges = 2;
   edges = lwt_be_getEdgeById(topo, ids, &nedges, LWT_COL_EDGE_ALL);
-  if ( nedges == -1 )
+  if ((nedges == -1) || (edges == NULL))
   {
     lwerror("Backend error: %s", lwt_be_lastErrorMessage(topo->be_iface));
     return -1;
@@ -4428,17 +4430,19 @@ _lwt_HealEdges( LWT_TOPOLOGY* topo, LWT_ELEMID eid1, LWT_ELEMID eid2,
   }
   if ( ! e1 )
   {
-    if ( edges ) _lwt_release_edges(edges, nedges);
-    lwerror("SQL/MM Spatial exception - non-existent edge %"
-            LWTFMT_ELEMID, eid1);
-    return -1;
+         _lwt_release_edges(edges, nedges);
+         lwerror(
+             "SQL/MM Spatial exception - non-existent edge %" LWTFMT_ELEMID,
+             eid1);
+         return -1;
   }
   if ( ! e2 )
   {
-    if ( edges ) _lwt_release_edges(edges, nedges);
-    lwerror("SQL/MM Spatial exception - non-existent edge %"
-            LWTFMT_ELEMID, eid2);
-    return -1;
+         _lwt_release_edges(edges, nedges);
+         lwerror(
+             "SQL/MM Spatial exception - non-existent edge %" LWTFMT_ELEMID,
+             eid2);
+         return -1;
   }
 
   /* NOT IN THE SPECS: See if any of the two edges are closed. */
index 89670d909688b8781b89a4f28229856e18fb03b3..a947adbfc196ca1fef480ca33879211dcf867960 100644 (file)
@@ -670,13 +670,6 @@ LWGEOM* lwgeom_from_twkb(const uint8_t *twkb, size_t twkb_size, char check)
        s.check = check;
        s.coords = coords;
 
-       /* Handle the check catch-all values */
-       if ( check & LW_PARSER_CHECK_NONE )
-               s.check = 0;
-       else
-               s.check = check;
-
-
        /* Read the rest of the geometry */
        return lwgeom_from_twkb_state(&s);
 }
index 53bb21ec117093d4b23dc3d544a7d68db6b758e6..8d9910289cc07558417f31a8672ce077841e9945 100644 (file)
@@ -783,12 +783,6 @@ LWGEOM* lwgeom_from_wkb(const uint8_t *wkb, const size_t wkb_size, const char ch
        s.has_srid = LW_FALSE;
        s.pos = wkb;
 
-       /* Hand the check catch-all values */
-       if ( check & LW_PARSER_CHECK_NONE )
-               s.check = 0;
-       else
-               s.check = check;
-
        return lwgeom_from_wkb_state(&s);
 }
 
index d6ab0089db9ce26a8e502518cb2c30fd1c6f2cbd..3ecbd77ca6bcaa6df72aceb31d062f8478b7767b 100644 (file)
@@ -555,9 +555,8 @@ lwline_clip_to_ordinate_range(const LWLINE *line, char ordinate, double from, do
        int added_last_point = 0;
        POINT4D *p = NULL, *q = NULL, *r = NULL;
        double ordinate_value_p = 0.0, ordinate_value_q = 0.0;
-       char hasz = lwgeom_has_z(lwline_as_lwgeom(line));
-       char hasm = lwgeom_has_m(lwline_as_lwgeom(line));
-       char dims = FLAGS_NDIMS(line->flags);
+       char hasz, hasm;
+       char dims;
 
        /* Null input, nothing we can do. */
        if ( ! line )
@@ -565,6 +564,9 @@ lwline_clip_to_ordinate_range(const LWLINE *line, char ordinate, double from, do
                lwerror("Null input geometry.");
                return NULL;
        }
+       hasz = lwgeom_has_z(lwline_as_lwgeom(line));
+       hasm = lwgeom_has_m(lwline_as_lwgeom(line));
+       dims = FLAGS_NDIMS(line->flags);
 
        /* Ensure 'from' is less than 'to'. */
        if ( to < from )
@@ -800,7 +802,8 @@ lwgeom_clip_to_ordinate_range(const LWGEOM *lwin, char ordinate, double from, do
                lwerror("lwgeom_clip_to_ordinate_range clipping routine returned NULL");
 
        /* Return if we aren't going to offset the result */
-       if ( FP_EQUALS(offset, 0.0) || lwgeom_is_empty(lwcollection_as_lwgeom(out_col)) )
+       if (FP_IS_ZERO(offset) ||
+           lwgeom_is_empty(lwcollection_as_lwgeom(out_col)))
                return out_col;
 
        /* Construct a collection to hold our outputs. */
index 91730a30776628db2b881889805b566ab6320b8f..4cf4cd31973cc2dabec11854ef8344a0b226adb9 100644 (file)
@@ -708,7 +708,7 @@ static uint8_t* lwgeom_to_wkb_buf(const LWGEOM *geom, uint8_t *buf, uint8_t vari
 {
 
        /* Do not simplify empties when outputting to canonical form */
-       if ( lwgeom_is_empty(geom) & ! (variant & WKB_EXTENDED) )
+       if (lwgeom_is_empty(geom) && !(variant & WKB_EXTENDED))
                return empty_to_wkb_buf(geom, buf, variant);
 
        switch ( geom->type )
index c0aefb6e6fa6d728da6b2153ff972d2f7839b7ba..abfa4625a25562c64ff94c1a95bedcc0276feaa1 100644 (file)
@@ -169,23 +169,21 @@ lwpoly_construct_empty(int srid, char hasz, char hasm)
        return result;
 }
 
-void lwpoly_free(LWPOLY  *poly)
+void
+lwpoly_free(LWPOLY* poly)
 {
        uint32_t t;
 
-       if( ! poly ) return;
+       if (!poly) return;
 
-       if ( poly->bbox )
-               lwfree(poly->bbox);
-
-       for (t=0; t<poly->nrings; t++)
-       {
-               if ( poly->rings[t] )
-                       ptarray_free(poly->rings[t]);
-       }
+       if (poly->bbox) lwfree(poly->bbox);
 
        if ( poly->rings )
+       {
+               for (t = 0; t < poly->nrings; t++)
+                       if (poly->rings[t]) ptarray_free(poly->rings[t]);
                lwfree(poly->rings);
+       }
 
        lwfree(poly);
 }
index f5cf7fa7649d4a894e5587b098a9e3cbeca2661a..fab1d85ce2ef0ed616ac7dde12d46e7d63cb841f 100644 (file)
@@ -1405,14 +1405,14 @@ lw_dist2d_seg_arc(const POINT2D *A1, const POINT2D *A2, const POINT2D *B1, const
 
        /* Closest point is in the arc, but not in the segment, so */
        /* one of the segment end points must be the closest. */
-       if ( pt_in_arc & ! pt_in_seg )
+       if (pt_in_arc && !pt_in_seg)
        {
                lw_dist2d_pt_arc(A1, B1, B2, B3, dl);
                lw_dist2d_pt_arc(A2, B1, B2, B3, dl);
                return LW_TRUE;
        }
        /* or, one of the arc end points is the closest */
-       else if  ( pt_in_seg && ! pt_in_arc )
+       else if (pt_in_seg && !pt_in_arc)
        {
                lw_dist2d_pt_seg(B1, A1, A2, dl);
                lw_dist2d_pt_seg(B3, A1, A2, dl);
@@ -1643,7 +1643,7 @@ lw_dist2d_arc_arc(const POINT2D *A1, const POINT2D *A2, const POINT2D *A3,
 
        /* Closest point is in the arc A, but not in the arc B, so */
        /* one of the B end points must be the closest. */
-       if ( pt_in_arc_A & ! pt_in_arc_B )
+       if (pt_in_arc_A && !pt_in_arc_B)
        {
                lw_dist2d_pt_arc(B1, A1, A2, A3, dl);
                lw_dist2d_pt_arc(B3, A1, A2, A3, dl);
@@ -1915,10 +1915,7 @@ lw_dist2d_seg_seg(const POINT2D *A, const POINT2D *B, const POINT2D *C, const PO
                        dl->p2=theP;
                }
                return LW_TRUE;
-
        }
-       lwerror("unspecified error in function lw_dist2d_seg_seg");
-       return LW_FALSE; /*If we have come here something is wrong*/
 }
 
 
index 591dd689f858a2e4d3e8ccae66635f9fb3bba14d..1abbd0626d962795f5d6b6a1832fc43854f452d3 100644 (file)
@@ -559,9 +559,6 @@ lw_dist3d_distribute_bruteforce(const LWGEOM *lwg1, const LWGEOM *lwg2, DISTPTS3
                lwerror("Unsupported geometry type: %s", lwtype_name(t1));
                return LW_FALSE;
        }
-       /*You shouldn't being able to get here*/
-       lwerror("unspecified error in function lw_dist3d_distribute_bruteforce");
-       return LW_FALSE;
 }
 
 
index 5ecfb145e3809be6ecd7b5f5b65ffcb474d9f91d..6dc6df012b067423fa0c054849f3ef131090c049 100644 (file)
@@ -260,8 +260,6 @@ ptarray_append_ptarray(POINTARRAY *pa1, POINTARRAY *pa2, double gap_tolerance)
 int
 ptarray_remove_point(POINTARRAY *pa, uint32_t where)
 {
-       size_t ptsize = ptarray_point_size(pa);
-
        /* Check for pathology */
        if( ! pa )
        {
@@ -277,10 +275,10 @@ ptarray_remove_point(POINTARRAY *pa, uint32_t where)
        }
 
        /* If the point is any but the last, we need to copy the data back one point */
-       if( where < pa->npoints - 1 )
-       {
-               memmove(getPoint_internal(pa, where), getPoint_internal(pa, where+1), ptsize * (pa->npoints - where - 1));
-       }
+       if (where < pa->npoints - 1)
+               memmove(getPoint_internal(pa, where),
+                       getPoint_internal(pa, where + 1),
+                       ptarray_point_size(pa) * (pa->npoints - where - 1));
 
        /* We have one less point */
        pa->npoints--;
index d7aeddb779c3367eec1b0d2d681f3ef12e0aa95e..e153d420a21cde07197221e8ec8f927974f4f14a 100644 (file)
@@ -248,7 +248,6 @@ int
 gserialized_datum_get_gidx_p(Datum gsdatum, GIDX *gidx)
 {
        GSERIALIZED *gpart;
-       int result = LW_SUCCESS;
 
        POSTGIS_DEBUG(4, "entered function");
 
@@ -278,7 +277,6 @@ gserialized_datum_get_gidx_p(Datum gsdatum, GIDX *gidx)
                        GIDX_SET_MAX(gidx,2,FLT_MAX);
                }
                SET_VARSIZE(gidx, VARHDRSZ + size);
-               result = LW_SUCCESS;
        }
        else
        {
@@ -296,17 +294,14 @@ gserialized_datum_get_gidx_p(Datum gsdatum, GIDX *gidx)
                }
                lwgeom_free(lwgeom);
                POSTGIS_FREE_IF_COPY_P(g, gsdatum);
-               result = gidx_from_gbox_p(gbox, gidx);
+               gidx_from_gbox_p(gbox, gidx);
        }
 
        POSTGIS_FREE_IF_COPY_P(gpart, gsdatum);
 
-       if ( result == LW_SUCCESS )
-       {
-               POSTGIS_DEBUGF(4, "got gidx %s", gidx_to_string(gidx));
-       }
+       POSTGIS_DEBUGF(4, "got gidx %s", gidx_to_string(gidx));
 
-       return result;
+       return LW_SUCCESS;
 }
 
 
@@ -318,10 +313,7 @@ gserialized_datum_get_gidx_p(Datum gsdatum, GIDX *gidx)
 */
 int gserialized_get_gidx_p(const GSERIALIZED *g, GIDX *gidx)
 {
-       int result = LW_SUCCESS;
-
        POSTGIS_DEBUG(4, "entered function");
-
        POSTGIS_DEBUGF(4, "got flags %d", g->flags);
 
        if ( FLAGS_GET_BBOX(g->flags) )
@@ -344,14 +336,11 @@ int gserialized_get_gidx_p(const GSERIALIZED *g, GIDX *gidx)
                        return LW_FAILURE;
                }
                lwgeom_free(lwgeom);
-               result = gidx_from_gbox_p(gbox, gidx);
-       }
-       if ( result == LW_SUCCESS )
-       {
-               POSTGIS_DEBUGF(4, "got gidx %s", gidx_to_string(gidx));
+               gidx_from_gbox_p(gbox, gidx);
        }
+       POSTGIS_DEBUGF(4, "got gidx %s", gidx_to_string(gidx));
 
-       return result;
+       return LW_SUCCESS;
 }
 
 
index 138639c308ec8c052f1e0a2d3e230ace0a5fc006..d01dd1a678c307da5ca51a94f4417875935485f3 100644 (file)
@@ -273,10 +273,10 @@ static void DeletePJHashEntry(MemoryContext mcxt)
        /* Delete the projection object from the hash */
        he = (PJHashEntry *) hash_search(PJHash, key, HASH_REMOVE, NULL);
 
-       he->projection = NULL;
-
        if (!he)
                elog(ERROR, "DeletePJHashEntry: There was an error removing the PROJ4 projection object from this MemoryContext (%p)", (void *)mcxt);
+       else
+               he->projection = NULL;
 }
 
 bool
index 05586d8f6700b3444226b166fe8044fa57c74e67..3498d3ab30cfa5fb508e49da1d80c2e4f805c4ed 100644 (file)
@@ -1172,8 +1172,11 @@ ShpLoaderOpenShape(SHPLOADERSTATE *state)
                {
                        if (strcmp(state->field_names[z], name) == 0)
                        {
-                               strncat(name, "__", MAXFIELDNAMELEN);
-                               snprintf(name + strlen(name), MAXFIELDNAMELEN, "%i", j);
+                               strncat(name, "__", MAXFIELDNAMELEN - 1);
+                               snprintf(name + strlen(name),
+                                        MAXFIELDNAMELEN - 1 - strlen(name),
+                                        "%i",
+                                        j);
                                break;
                        }
                }
index 2b43d577e2dce103b2de146291c7941387aa5c4d..558637ecddb7a6695c5884b94bbfa75aadb90f3c 100644 (file)
@@ -217,7 +217,7 @@ Datum geography_as_gml(PG_FUNCTION_ARGS)
        char *srs;
        int srid = SRID_DEFAULT;
        int precision = DBL_DIG;
-       int option=0;
+       int option = 0;
        int lwopts = LW_GML_IS_DIMS;
        static const char *default_prefix = "gml:";
        const char *prefix = default_prefix;
@@ -306,6 +306,22 @@ Datum geography_as_gml(PG_FUNCTION_ARGS)
        /* Revert lat/lon only with long SRS */
        if (option & 1) lwopts |= LW_GML_IS_DEGREE;
        if (option & 2) lwopts &= ~LW_GML_IS_DIMS;
+       if (option & 8)
+       {
+               elog(ERROR,
+                    "Options %d passed to ST_AsGML(geography) sets "
+                    "unsupported value 8",
+                    option);
+               PG_RETURN_NULL();
+       }
+       if ((option & 4) || (option & 16) || (option & 32))
+       {
+               elog(ERROR,
+                    "Options %d passed to ST_AsGML(geography) but are only "
+                    "applicable to ST_AsGML(geometry)",
+                    option);
+               PG_RETURN_NULL();
+       }
 
        if (version == 2)
                gml = lwgeom_to_gml2(lwgeom, srs, precision, prefix);
index c6fea2303a36827e9d1cde26a38b0286c76dd0b0..e944657a6278aa3474a3323bc442b1978c7474d7 100644 (file)
@@ -1918,8 +1918,7 @@ estimate_selectivity(const GBOX *box, const ND_STATS *nd_stats, int mode)
        double min[ND_DIMS];
        double max[ND_DIMS];
        double total_count = 0.0;
-       int ndims_max = Max(nd_stats->ndims, gbox_ndims(box));
-       /* int ndims_min = Min(nd_stats->ndims, gbox_ndims(box)); */
+       int ndims_max;
 
        /* Calculate the overlap of the box on the histogram */
        if ( ! nd_stats )
@@ -1928,6 +1927,8 @@ estimate_selectivity(const GBOX *box, const ND_STATS *nd_stats, int mode)
                return FALLBACK_ND_SEL;
        }
 
+       ndims_max = Max(nd_stats->ndims, gbox_ndims(box));
+
        /* Initialize nd_box. */
        nd_box_from_gbox(box, &nd_box);
 
index 82759eb561e39586cc6a83a043b9383d5a5e2e7a..ae00cb5c6f6b8eae5a194b32618665bc1d7365bd 100644 (file)
@@ -64,16 +64,16 @@ Datum postgis_typmod_out(PG_FUNCTION_ARGS)
 {
        char *s = (char*)palloc(64);
        char *str = s;
-       uint32 typmod = PG_GETARG_INT32(0);
-       uint32 srid = TYPMOD_GET_SRID(typmod);
-       uint32 type = TYPMOD_GET_TYPE(typmod);
-       uint32 hasz = TYPMOD_GET_Z(typmod);
-       uint32 hasm = TYPMOD_GET_M(typmod);
+       int32 typmod = PG_GETARG_INT32(0);
+       int32 srid = TYPMOD_GET_SRID(typmod);
+       int32 type = TYPMOD_GET_TYPE(typmod);
+       int32 hasz = TYPMOD_GET_Z(typmod);
+       int32 hasm = TYPMOD_GET_M(typmod);
 
        POSTGIS_DEBUGF(3, "Got typmod(srid = %d, type = %d, hasz = %d, hasm = %d)", srid, type, hasz, hasm);
 
        /* No SRID or type or dimensionality? Then no typmod at all. Return empty string. */
-       if ( ! ( srid || type || hasz || hasm ) )
+       if (!(srid || type || hasz || hasm) || typmod < 0)
        {
                *str = '\0';
                PG_RETURN_CSTRING(str);
@@ -83,26 +83,19 @@ Datum postgis_typmod_out(PG_FUNCTION_ARGS)
        str += sprintf(str, "(");
 
        /* Has type? */
-       if ( type )
+       if (type)
                str += sprintf(str, "%s", lwtype_name(type));
-  else if ( (!type) &&  ( srid || hasz || hasm ) )
-    str += sprintf(str, "Geometry");
+       else if (srid || hasz || hasm)
+               str += sprintf(str, "Geometry");
 
        /* Has Z? */
-       if ( hasz )
-               str += sprintf(str, "%s", "Z");
+       if (hasz) str += sprintf(str, "%s", "Z");
 
        /* Has M? */
-       if ( hasm )
-               str += sprintf(str, "%s", "M");
-
-       /* Comma? */
-       if ( srid )
-               str += sprintf(str, ",");
+       if (hasm) str += sprintf(str, "%s", "M");
 
        /* Has SRID? */
-       if ( srid )
-               str += sprintf(str, "%d", srid);
+       if (srid) str += sprintf(str, ",%d", srid);
 
        /* Closing bracket. */
        str += sprintf(str, ")");
@@ -218,7 +211,7 @@ GSERIALIZED* postgis_valid_typmod(GSERIALIZED *gser, int32_t typmod)
 
 static uint32 gserialized_typmod_in(ArrayType *arr, int is_geography)
 {
-       uint32 typmod = 0;
+       int32 typmod = 0;
        Datum *elem_values;
        int n = 0;
        int     i = 0;
@@ -299,7 +292,7 @@ PG_FUNCTION_INFO_V1(geography_typmod_in);
 Datum geography_typmod_in(PG_FUNCTION_ARGS)
 {
        ArrayType *arr = (ArrayType *) DatumGetPointer(PG_GETARG_DATUM(0));
-       uint32 typmod = gserialized_typmod_in(arr, LW_TRUE);
+       int32 typmod = gserialized_typmod_in(arr, LW_TRUE);
        int srid = TYPMOD_GET_SRID(typmod);
        /* Check the SRID is legal (geographic coordinates) */
        srid_is_latlong(fcinfo, srid);
index 47df750b54d0020affe222a2187b191d0592d91a..73cfc2acdea9a4a19e51bd56742eef59ae143980 100644 (file)
@@ -487,11 +487,9 @@ Datum BOX3D_combine(PG_FUNCTION_ARGS)
        int rv;
 
        /* Can't do anything with null inputs */
-       if  ( (box == NULL) && (geom == NULL) )
-               PG_RETURN_NULL();
-
+       if ((box == NULL) && (geom == NULL)) { PG_RETURN_NULL(); }
        /* Null geometry but non-null box, return the box */
-       if (geom == NULL)
+       else if (geom == NULL)
        {
                result = palloc(sizeof(BOX3D));
                memcpy(result, box, sizeof(BOX3D));
index 74bf1aafdfa11055ef232afd52a73591cf8a38f8..20763d637382233f8fe993a19f086b787bb3ee00 100644 (file)
@@ -119,8 +119,7 @@ int getSRIDbySRS(const char* srs)
        char query[256];
        int srid, err;
 
-       if (srs == NULL)
-               return 0;
+       if (!srs) return 0;
 
        if (SPI_OK_CONNECT != SPI_connect ())
        {
@@ -166,11 +165,6 @@ int getSRIDbySRS(const char* srs)
        }
 
        srid = atoi(SPI_getvalue(SPI_tuptable->vals[0], SPI_tuptable->tupdesc, 1));
-       if ( ! srs )
-       {
-               SPI_finish();
-               return 0;
-       }
 
        SPI_finish();
 
@@ -215,18 +209,18 @@ Datum LWGEOM_asGML(PG_FUNCTION_ARGS)
        geom = PG_GETARG_GSERIALIZED_P(1);
 
        /* Retrieve precision if any (default is max) */
-       if (PG_NARGS() >2 && !PG_ARGISNULL(2))
+       if (PG_NARGS() > 2 && !PG_ARGISNULL(2))
        {
                precision = PG_GETARG_INT32(2);
                /* TODO: leave this to liblwgeom ? */
-               if ( precision > DBL_DIG )
+               if (precision > DBL_DIG)
                        precision = DBL_DIG;
-               else if ( precision < 0 ) precision = 0;
+               else if (precision < 0)
+                       precision = 0;
        }
 
        /* retrieve option */
-       if (PG_NARGS() >3 && !PG_ARGISNULL(3))
-               option = PG_GETARG_INT32(3);
+       if (PG_NARGS() > 3 && !PG_ARGISNULL(3)) option = PG_GETARG_INT32(3);
 
        /* retrieve prefix */
        if (PG_NARGS() >4 && !PG_ARGISNULL(4))
@@ -270,21 +264,38 @@ Datum LWGEOM_asGML(PG_FUNCTION_ARGS)
        else if (option & 1) srs = getSRSbySRID(srid, false);
        else                 srs = getSRSbySRID(srid, true);
 
-       if (option & 2)  lwopts &= ~LW_GML_IS_DIMS;
-       if (option & 4)  lwopts |= LW_GML_SHORTLINE;
+       if (option & 2) lwopts &= ~LW_GML_IS_DIMS;
+       if (option & 4) lwopts |= LW_GML_SHORTLINE;
+       if (option & 8)
+       {
+               elog(ERROR,
+                    "Options %d passed to ST_AsGML(geography) sets "
+                    "unsupported value 8",
+                    option);
+               PG_RETURN_NULL();
+       }
        if (option & 16) lwopts |= LW_GML_IS_DEGREE;
-        if (option & 32) lwopts |= LW_GML_EXTENT;
+       if (option & 32) lwopts |= LW_GML_EXTENT;
 
        lwgeom = lwgeom_from_gserialized(geom);
 
-       if (version == 2 && lwopts & LW_GML_EXTENT)
-               gml = lwgeom_extent_to_gml2(lwgeom, srs, precision, prefix);
-       else if (version == 2)
-               gml = lwgeom_to_gml2(lwgeom, srs, precision, prefix);
-       else if (version == 3 && lwopts & LW_GML_EXTENT)
-               gml = lwgeom_extent_to_gml3(lwgeom, srs, precision, lwopts, prefix);
-       else if (version == 3)
-               gml = lwgeom_to_gml3(lwgeom, srs, precision, lwopts, prefix, gml_id);
+       if (version == 2)
+       {
+               if (lwopts & LW_GML_EXTENT)
+                       gml = lwgeom_extent_to_gml2(
+                           lwgeom, srs, precision, prefix);
+               else
+                       gml = lwgeom_to_gml2(lwgeom, srs, precision, prefix);
+       }
+       if (version == 3)
+       {
+               if (lwopts & LW_GML_EXTENT)
+                       gml = lwgeom_extent_to_gml3(
+                           lwgeom, srs, precision, lwopts, prefix);
+               else
+                       gml = lwgeom_to_gml3(
+                           lwgeom, srs, precision, lwopts, prefix, gml_id);
+       }
 
        lwgeom_free(lwgeom);
        PG_FREE_IF_COPY(geom, 1);
index 6cdc574bf037144edf800583a29d56c5a6f2aae2..355f93961e4f858f717b235f2ea529350e5462e9 100644 (file)
@@ -2720,13 +2720,6 @@ Datum ST_CollectionExtract(PG_FUNCTION_ARGS)
                lwcol = lwcollection_as_lwgeom(lwcollection_extract((LWCOLLECTION*)lwgeom, type));
        }
 
-#if 0
-       if (lwgeom_is_empty(lwcollection_as_lwgeom(lwcol)))
-       {
-               lwgeom_free(lwgeom);
-               PG_RETURN_NULL();
-       }
-#endif
        output = geometry_serialize((LWGEOM*)lwcol);
        lwgeom_free(lwgeom);
        lwgeom_free(lwcol);
@@ -2745,10 +2738,10 @@ Datum ST_CollectionHomogenize(PG_FUNCTION_ARGS)
        lwoutput = lwgeom_homogenize(lwgeom);
        lwgeom_free(lwgeom);
 
-       if ( ! lwoutput )
+       if (!lwoutput)
        {
-               PG_RETURN_NULL();
                PG_FREE_IF_COPY(input, 0);
+               PG_RETURN_NULL();
        }
 
        output = geometry_serialize(lwoutput);
index 9236c918b54e2d0e009f55631392cefe3cda6b64..b366a8a0c9565f20a206702f04ec55bbcb259daa 100644 (file)
@@ -188,29 +188,22 @@ Datum hausdorffdistance(PG_FUNCTION_ARGS)
        initGEOS(lwpgnotice, lwgeom_geos_error);
 
        g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1);
-       if ( 0 == g1 )   /* exception thrown at construction */
-       {
+       if (!g1)
                HANDLE_GEOS_ERROR("First argument geometry could not be converted to GEOS");
-               PG_RETURN_NULL();
-       }
 
        g2 = (GEOSGeometry *)POSTGIS2GEOS(geom2);
-       if ( 0 == g2 )   /* exception thrown */
+       if (!g2)
        {
-               HANDLE_GEOS_ERROR("Second argument geometry could not be converted to GEOS");
                GEOSGeom_destroy(g1);
-               PG_RETURN_NULL();
+               HANDLE_GEOS_ERROR(
+                   "Second argument geometry could not be converted to GEOS");
        }
 
        retcode = GEOSHausdorffDistance(g1, g2, &result);
        GEOSGeom_destroy(g1);
        GEOSGeom_destroy(g2);
 
-       if (retcode == 0)
-       {
-               HANDLE_GEOS_ERROR("GEOSHausdorffDistance");
-               PG_RETURN_NULL(); /*never get here */
-       }
+       if (retcode == 0) HANDLE_GEOS_ERROR("GEOSHausdorffDistance");
 
        PG_FREE_IF_COPY(geom1, 0);
        PG_FREE_IF_COPY(geom2, 1);
@@ -247,29 +240,22 @@ Datum hausdorffdistancedensify(PG_FUNCTION_ARGS)
        initGEOS(lwpgnotice, lwgeom_geos_error);
 
        g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1);
-       if ( 0 == g1 )   /* exception thrown at construction */
-       {
+       if (!g1)
                HANDLE_GEOS_ERROR("First argument geometry could not be converted to GEOS");
-               PG_RETURN_NULL();
-       }
 
        g2 = (GEOSGeometry *)POSTGIS2GEOS(geom2);
-       if ( 0 == g2 )   /* exception thrown at construction */
+       if (!g2)
        {
-               HANDLE_GEOS_ERROR("Second argument geometry could not be converted to GEOS");
                GEOSGeom_destroy(g1);
-               PG_RETURN_NULL();
+               HANDLE_GEOS_ERROR(
+                   "Second argument geometry could not be converted to GEOS");
        }
 
        retcode = GEOSHausdorffDistanceDensify(g1, g2, densifyFrac, &result);
        GEOSGeom_destroy(g1);
        GEOSGeom_destroy(g2);
 
-       if (retcode == 0)
-       {
-               HANDLE_GEOS_ERROR("GEOSHausdorffDistanceDensify");
-               PG_RETURN_NULL(); /*never get here */
-       }
+       if (retcode == 0) HANDLE_GEOS_ERROR("GEOSHausdorffDistanceDensify");
 
        PG_FREE_IF_COPY(geom1, 0);
        PG_FREE_IF_COPY(geom2, 1);
@@ -314,18 +300,15 @@ Datum ST_FrechetDistance(PG_FUNCTION_ARGS)
        initGEOS(lwpgnotice, lwgeom_geos_error);
 
        g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1);
-       if ( 0 == g1 )   /* exception thrown at construction */
-       {
+       if (!g1)
                HANDLE_GEOS_ERROR("First argument geometry could not be converted to GEOS");
-               PG_RETURN_NULL();
-       }
 
        g2 = (GEOSGeometry *)POSTGIS2GEOS(geom2);
-       if ( 0 == g2 )   /* exception thrown at construction */
+       if (!g2)
        {
-               HANDLE_GEOS_ERROR("Second argument geometry could not be converted to GEOS");
                GEOSGeom_destroy(g1);
-               PG_RETURN_NULL();
+               HANDLE_GEOS_ERROR(
+                   "Second argument geometry could not be converted to GEOS");
        }
 
        if (densifyFrac <= 0.0)
@@ -340,11 +323,7 @@ Datum ST_FrechetDistance(PG_FUNCTION_ARGS)
        GEOSGeom_destroy(g1);
        GEOSGeom_destroy(g2);
 
-       if (retcode == 0)
-       {
-               HANDLE_GEOS_ERROR("GEOSFrechetDistance");
-               PG_RETURN_NULL(); /*never get here */
-       }
+       if (retcode == 0) HANDLE_GEOS_ERROR("GEOSFrechetDistance");
 
        PG_FREE_IF_COPY(geom1, 0);
        PG_FREE_IF_COPY(geom2, 1);
@@ -485,9 +464,9 @@ Datum pgis_union_geometry_array(PG_FUNCTION_ARGS)
                        /* Uh oh! Exception thrown at construction... */
                        if ( ! g )
                        {
-                               HANDLE_GEOS_ERROR("One of the geometries in the set "
-                                                 "could not be converted to GEOS");
-                               PG_RETURN_NULL();
+                               HANDLE_GEOS_ERROR(
+                                   "One of the geometries in the set "
+                                   "could not be converted to GEOS");
                        }
 
                        /* Ensure we have enough space in our storage array */
@@ -511,19 +490,14 @@ Datum pgis_union_geometry_array(PG_FUNCTION_ARGS)
        if (curgeom > 0)
        {
                g = GEOSGeom_createCollection(GEOS_GEOMETRYCOLLECTION, geoms, curgeom);
-               if ( ! g )
-               {
-                       HANDLE_GEOS_ERROR("Could not create GEOS COLLECTION from geometry array");
-                       PG_RETURN_NULL();
-               }
+               if (!g)
+                       HANDLE_GEOS_ERROR(
+                           "Could not create GEOS COLLECTION from geometry "
+                           "array");
 
                g_union = GEOSUnaryUnion(g);
                GEOSGeom_destroy(g);
-               if ( ! g_union )
-               {
-                       HANDLE_GEOS_ERROR("GEOSUnaryUnion");
-                       PG_RETURN_NULL();
-               }
+               if (!g_union) HANDLE_GEOS_ERROR("GEOSUnaryUnion");
 
                GEOSSetSRID(g_union, srid);
                gser_out = GEOS2POSTGIS(g_union, is3d);
@@ -689,19 +663,15 @@ Datum boundary(PG_FUNCTION_ARGS)
        g1 = LWGEOM2GEOS(lwgeom, 0);
        lwgeom_free(lwgeom);
 
-       if ( 0 == g1 )   /* exception thrown at construction */
-       {
+       if (!g1)
                HANDLE_GEOS_ERROR("First argument geometry could not be converted to GEOS");
-               PG_RETURN_NULL();
-       }
 
        g3 = (GEOSGeometry *)GEOSBoundary(g1);
 
-       if (g3 == NULL)
+       if (!g3)
        {
                GEOSGeom_destroy(g1);
                HANDLE_GEOS_ERROR("GEOSBoundary");
-               PG_RETURN_NULL(); /* never get here */
        }
 
        POSTGIS_DEBUGF(3, "result: %s", GEOSGeomToWKT(g3));
@@ -710,12 +680,13 @@ Datum boundary(PG_FUNCTION_ARGS)
 
        result = GEOS2POSTGIS(g3, gserialized_has_z(geom1));
 
-       if (result == NULL)
+       if (!result)
        {
                GEOSGeom_destroy(g1);
-
                GEOSGeom_destroy(g3);
-               elog(NOTICE,"GEOS2POSTGIS threw an error (result postgis geometry formation)!");
+               elog(NOTICE,
+                    "GEOS2POSTGIS threw an error (result postgis geometry "
+                    "formation)!");
                PG_RETURN_NULL(); /* never get here */
        }
 
@@ -749,20 +720,13 @@ Datum convexhull(PG_FUNCTION_ARGS)
 
        g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1);
 
-       if ( 0 == g1 )   /* exception thrown at construction */
-       {
+       if (!g1)
                HANDLE_GEOS_ERROR("First argument geometry could not be converted to GEOS");
-               PG_RETURN_NULL();
-       }
 
        g3 = (GEOSGeometry *)GEOSConvexHull(g1);
        GEOSGeom_destroy(g1);
 
-       if (g3 == NULL)
-       {
-               HANDLE_GEOS_ERROR("GEOSConvexHull");
-               PG_RETURN_NULL(); /* never get here */
-       }
+       if (!g3) HANDLE_GEOS_ERROR("GEOSConvexHull");
 
        POSTGIS_DEBUGF(3, "result: %s", GEOSGeomToWKT(g3));
 
@@ -771,9 +735,10 @@ Datum convexhull(PG_FUNCTION_ARGS)
        lwout = GEOS2LWGEOM(g3, gserialized_has_z(geom1));
        GEOSGeom_destroy(g3);
 
-       if (lwout == NULL)
+       if (!lwout)
        {
-               elog(ERROR,"convexhull() failed to convert GEOS geometry to LWGEOM");
+               elog(ERROR,
+                    "convexhull() failed to convert GEOS geometry to LWGEOM");
                PG_RETURN_NULL(); /* never get here */
        }
 
@@ -788,7 +753,7 @@ Datum convexhull(PG_FUNCTION_ARGS)
        result = geometry_serialize(lwout);
        lwgeom_free(lwout);
 
-       if (result == NULL)
+       if (!result)
        {
                elog(ERROR,"GEOS convexhull() threw an error (result postgis geometry formation)!");
                PG_RETURN_NULL(); /* never get here */
@@ -816,20 +781,13 @@ Datum topologypreservesimplify(PG_FUNCTION_ARGS)
        initGEOS(lwpgnotice, lwgeom_geos_error);
 
        g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1);
-       if ( 0 == g1 )   /* exception thrown at construction */
-       {
+       if (!g1)
                HANDLE_GEOS_ERROR("First argument geometry could not be converted to GEOS");
-               PG_RETURN_NULL();
-       }
 
        g3 = GEOSTopologyPreserveSimplify(g1,tolerance);
        GEOSGeom_destroy(g1);
 
-       if (g3 == NULL)
-       {
-               HANDLE_GEOS_ERROR("GEOSTopologyPreserveSimplify");
-               PG_RETURN_NULL(); /* never get here */
-       }
+       if (!g3) HANDLE_GEOS_ERROR("GEOSTopologyPreserveSimplify");
 
        POSTGIS_DEBUGF(3, "result: %s", GEOSGeomToWKT(g3));
 
@@ -838,7 +796,7 @@ Datum topologypreservesimplify(PG_FUNCTION_ARGS)
        result = GEOS2POSTGIS(g3, gserialized_has_z(geom1));
        GEOSGeom_destroy(g3);
 
-       if (result == NULL)
+       if (!result)
        {
                elog(ERROR,"GEOS topologypreservesimplify() threw an error (result postgis geometry formation)!");
                PG_RETURN_NULL(); /* never get here */
@@ -897,11 +855,8 @@ Datum buffer(PG_FUNCTION_ARGS)
        initGEOS(lwpgnotice, lwgeom_geos_error);
 
        g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1);
-       if ( 0 == g1 )   /* exception thrown at construction */
-       {
+       if (!g1)
                HANDLE_GEOS_ERROR("First argument geometry could not be converted to GEOS");
-               PG_RETURN_NULL();
-       }
 
        if (nargs > 2)
        {
@@ -914,12 +869,12 @@ Datum buffer(PG_FUNCTION_ARGS)
                {
                        char *key, *val;
                        param = strtok(param, " ");
-                       if ( param == NULL ) break;
+                       if (!param) break;
                        POSTGIS_DEBUGF(3, "Param: %s", param);
 
                        key = param;
                        val = strchr(key, '=');
-                       if ( val == NULL || *(val+1) == '\0' )
+                       if (!val || *(val + 1) == '\0')
                        {
                                lwpgerror("Missing value for buffer "
                                        "parameter %s", key);
@@ -1015,11 +970,7 @@ Datum buffer(PG_FUNCTION_ARGS)
        g3 = GEOSBufferWithStyle(g1, size, quadsegs, endCapStyle, joinStyle, mitreLimit);
        GEOSGeom_destroy(g1);
 
-       if (g3 == NULL)
-       {
-               HANDLE_GEOS_ERROR("GEOSBuffer");
-               PG_RETURN_NULL(); /* never get here */
-       }
+       if (!g3) HANDLE_GEOS_ERROR("GEOSBuffer");
 
        POSTGIS_DEBUGF(3, "result: %s", GEOSGeomToWKT(g3));
 
@@ -1028,7 +979,7 @@ Datum buffer(PG_FUNCTION_ARGS)
        result = GEOS2POSTGIS(g3, gserialized_has_z(geom1));
        GEOSGeom_destroy(g3);
 
-       if (result == NULL)
+       if (!result)
        {
                elog(ERROR,"GEOS buffer() threw an error (result postgis geometry formation)!");
                PG_RETURN_NULL(); /* never get here */
@@ -1149,12 +1100,12 @@ Datum ST_OffsetCurve(PG_FUNCTION_ARGS)
                {
                        char *key, *val;
                        param = strtok(param, " ");
-                       if ( param == NULL ) break;
+                       if (!param) break;
                        POSTGIS_DEBUGF(3, "Param: %s", param);
 
                        key = param;
                        val = strchr(key, '=');
-                       if ( val == NULL || *(val+1) == '\0' )
+                       if (!val || *(val + 1) == '\0')
                        {
                                lwpgerror("ST_OffsetCurve: Missing value for buffer parameter %s", key);
                                break;
@@ -1210,7 +1161,7 @@ Datum ST_OffsetCurve(PG_FUNCTION_ARGS)
 
        lwgeom_result = lwgeom_offsetcurve(lwgeom_as_lwline(lwgeom_input), size, quadsegs, joinStyle, mitreLimit);
 
-       if (lwgeom_result == NULL)
+       if (!lwgeom_result)
                lwpgerror("ST_OffsetCurve: lwgeom_offsetcurve returned NULL");
 
        gser_result = gserialized_from_lwgeom(lwgeom_result, 0);
@@ -1308,7 +1259,7 @@ Datum pointonsurface(PG_FUNCTION_ARGS)
 
        g1 = (GEOSGeometry *)POSTGIS2GEOS(geom);
 
-       if ( 0 == g1 )   /* exception thrown at construction */
+       if (!g1)
        {
                /* Why is this a WARNING rather than an error ? */
                /* TODO: use HANDLE_GEOS_ERROR instead */
@@ -1318,11 +1269,10 @@ Datum pointonsurface(PG_FUNCTION_ARGS)
 
        g3 = GEOSPointOnSurface(g1);
 
-       if (g3 == NULL)
+       if (!g3)
        {
                GEOSGeom_destroy(g1);
                HANDLE_GEOS_ERROR("GEOSPointOnSurface");
-               PG_RETURN_NULL(); /* never get here */
        }
 
        POSTGIS_DEBUGF(3, "result: %s", GEOSGeomToWKT(g3) ) ;
@@ -1331,7 +1281,7 @@ Datum pointonsurface(PG_FUNCTION_ARGS)
 
        result = GEOS2POSTGIS(g3, gserialized_has_z(geom));
 
-       if (result == NULL)
+       if (!result)
        {
                GEOSGeom_destroy(g1);
                GEOSGeom_destroy(g3);
@@ -1377,8 +1327,7 @@ Datum centroid(PG_FUNCTION_ARGS)
                PG_FREE_IF_COPY(geom, 0); /*free memory, we already have a lwgeom geometry copy*/
                linear_geom = lwgeom_stroke(igeom, perQuad);
                lwgeom_free(igeom);
-               if (linear_geom == NULL)
-                       PG_RETURN_NULL();
+               if (!linear_geom) PG_RETURN_NULL();
 
                geom = geometry_serialize(linear_geom);
                lwgeom_free(linear_geom);
@@ -1388,26 +1337,22 @@ Datum centroid(PG_FUNCTION_ARGS)
 
        geosgeom = (GEOSGeometry *)POSTGIS2GEOS(geom);
 
-       if ( 0 == geosgeom )   /* exception thrown at construction */
-       {
+       if (!geosgeom)
                HANDLE_GEOS_ERROR("First argument geometry could not be converted to GEOS");
-               PG_RETURN_NULL();
-       }
 
        geosresult = GEOSGetCentroid(geosgeom);
 
-       if ( geosresult == NULL )
+       if (!geosresult)
        {
                GEOSGeom_destroy(geosgeom);
                HANDLE_GEOS_ERROR("GEOSGetCentroid");
-               PG_RETURN_NULL();
        }
 
        GEOSSetSRID(geosresult, gserialized_get_srid(geom));
 
        result = GEOS2POSTGIS(geosresult, gserialized_has_z(geom));
 
-       if (result == NULL)
+       if (!result)
        {
                GEOSGeom_destroy(geosgeom);
                GEOSGeom_destroy(geosresult);
@@ -1481,8 +1426,7 @@ Datum ST_ClipByBox2d(PG_FUNCTION_ARGS)
        lwgeom_free(lwgeom1);
        PG_FREE_IF_COPY(geom1, 0);
 
-       if ( lwresult == NULL )
-               PG_RETURN_NULL();
+       if (!lwresult) PG_RETURN_NULL();
 
        result = geometry_serialize(lwresult) ;
        lwgeom_free(lwresult) ;
@@ -1607,11 +1551,7 @@ Datum isvalidreason(PG_FUNCTION_ARGS)
        {
                reason_str = GEOSisValidReason(g1);
                GEOSGeom_destroy((GEOSGeometry *)g1);
-               if (reason_str == NULL)
-               {
-                       HANDLE_GEOS_ERROR("GEOSisValidReason");
-                       PG_RETURN_NULL(); /* never get here */
-               }
+               if (!reason_str) HANDLE_GEOS_ERROR("GEOSisValidReason");
                result = cstring2text(reason_str);
                GEOSFree(reason_str);
        }
@@ -1761,30 +1701,22 @@ Datum overlaps(PG_FUNCTION_ARGS)
        initGEOS(lwpgnotice, lwgeom_geos_error);
 
        g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1);
-       if ( 0 == g1 )   /* exception thrown at construction */
-       {
+       if (!g1)
                HANDLE_GEOS_ERROR("First argument geometry could not be converted to GEOS");
-               PG_RETURN_NULL();
-       }
 
        g2 = (GEOSGeometry *)POSTGIS2GEOS(geom2);
 
-       if ( 0 == g2 )   /* exception thrown at construction */
+       if (!g2)
        {
                GEOSGeom_destroy(g1);
                HANDLE_GEOS_ERROR("Second argument geometry could not be converted to GEOS");
-               PG_RETURN_NULL();
        }
 
        result = GEOSOverlaps(g1,g2);
 
        GEOSGeom_destroy(g1);
        GEOSGeom_destroy(g2);
-       if (result == 2)
-       {
-               HANDLE_GEOS_ERROR("GEOSOverlaps");
-               PG_RETURN_NULL(); /* never get here */
-       }
+       if (result == 2) HANDLE_GEOS_ERROR("GEOSOverlaps");
 
        PG_FREE_IF_COPY(geom1, 0);
        PG_FREE_IF_COPY(geom2, 1);
@@ -1899,11 +1831,9 @@ Datum contains(PG_FUNCTION_ARGS)
        if ( prep_cache && prep_cache->prepared_geom && prep_cache->argnum == 1 )
        {
                g1 = (GEOSGeometry *)POSTGIS2GEOS(geom2);
-               if ( 0 == g1 )   /* exception thrown at construction */
-               {
+               if (!g1)
                        HANDLE_GEOS_ERROR("Geometry could not be converted to GEOS");
-                       PG_RETURN_NULL();
-               }
+
                POSTGIS_DEBUG(4, "containsPrepared: cache is live, running preparedcontains");
                result = GEOSPreparedContains( prep_cache->prepared_geom, g1);
                GEOSGeom_destroy(g1);
@@ -1911,17 +1841,17 @@ Datum contains(PG_FUNCTION_ARGS)
        else
        {
                g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1);
-               if ( 0 == g1 )   /* exception thrown at construction */
-               {
-                       HANDLE_GEOS_ERROR("First argument geometry could not be converted to GEOS");
-                       PG_RETURN_NULL();
-               }
+               if (!g1)
+                       HANDLE_GEOS_ERROR(
+                           "First argument geometry could not be converted to "
+                           "GEOS");
                g2 = (GEOSGeometry *)POSTGIS2GEOS(geom2);
-               if ( 0 == g2 )   /* exception thrown at construction */
+               if (!g2)
                {
-                       HANDLE_GEOS_ERROR("Second argument geometry could not be converted to GEOS");
+                       HANDLE_GEOS_ERROR(
+                           "Second argument geometry could not be converted "
+                           "to GEOS");
                        GEOSGeom_destroy(g1);
-                       PG_RETURN_NULL();
                }
                POSTGIS_DEBUG(4, "containsPrepared: cache is not ready, running standard contains");
                result = GEOSContains( g1, g2);
@@ -1929,11 +1859,7 @@ Datum contains(PG_FUNCTION_ARGS)
                GEOSGeom_destroy(g2);
        }
 
-       if (result == 2)
-       {
-               HANDLE_GEOS_ERROR("GEOSContains");
-               PG_RETURN_NULL(); /* never get here */
-       }
+       if (result == 2) HANDLE_GEOS_ERROR("GEOSContains");
 
        PG_FREE_IF_COPY(geom1, 0);
        PG_FREE_IF_COPY(geom2, 1);
@@ -1979,11 +1905,10 @@ Datum containsproperly(PG_FUNCTION_ARGS)
        if ( prep_cache && prep_cache->prepared_geom && prep_cache->argnum == 1 )
        {
                GEOSGeometry *g = (GEOSGeometry *)POSTGIS2GEOS(geom2);
-               if ( 0 == g )   /* exception thrown at construction */
-               {
-                       HANDLE_GEOS_ERROR("First argument geometry could not be converted to GEOS");
-                       PG_RETURN_NULL();
-               }
+               if (!g)
+                       HANDLE_GEOS_ERROR(
+                           "First argument geometry could not be converted to "
+                           "GEOS");
                result = GEOSPreparedContainsProperly( prep_cache->prepared_geom, g);
                GEOSGeom_destroy(g);
        }
@@ -1993,28 +1918,24 @@ Datum containsproperly(PG_FUNCTION_ARGS)
                GEOSGeometry *g1;
 
                g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1);
-               if ( 0 == g1 )   /* exception thrown at construction */
-               {
-                       HANDLE_GEOS_ERROR("First argument geometry could not be converted to GEOS");
-                       PG_RETURN_NULL();
-               }
+               if (!g1)
+                       HANDLE_GEOS_ERROR(
+                           "First argument geometry could not be converted to "
+                           "GEOS");
                g2 = (GEOSGeometry *)POSTGIS2GEOS(geom2);
-               if ( 0 == g2 )   /* exception thrown at construction */
+               if (!g2)
                {
-                       HANDLE_GEOS_ERROR("Second argument geometry could not be converted to GEOS");
                        GEOSGeom_destroy(g1);
-                       PG_RETURN_NULL();
+                       HANDLE_GEOS_ERROR(
+                           "Second argument geometry could not be converted "
+                           "to GEOS");
                }
                result = GEOSRelatePattern( g1, g2, "T**FF*FF*" );
                GEOSGeom_destroy(g1);
                GEOSGeom_destroy(g2);
        }
 
-       if (result == 2)
-       {
-               HANDLE_GEOS_ERROR("GEOSContains");
-               PG_RETURN_NULL(); /* never get here */
-       }
+       if (result == 2) HANDLE_GEOS_ERROR("GEOSContains");
 
        PG_FREE_IF_COPY(geom1, 0);
        PG_FREE_IF_COPY(geom2, 1);
@@ -2118,11 +2039,10 @@ Datum covers(PG_FUNCTION_ARGS)
        if ( prep_cache && prep_cache->prepared_geom && prep_cache->argnum == 1 )
        {
                GEOSGeometry *g1 = (GEOSGeometry *)POSTGIS2GEOS(geom2);
-               if ( 0 == g1 )   /* exception thrown at construction */
-               {
-                       HANDLE_GEOS_ERROR("First argument geometry could not be converted to GEOS");
-                       PG_RETURN_NULL();
-               }
+               if (!g1)
+                       HANDLE_GEOS_ERROR(
+                           "First argument geometry could not be converted to "
+                           "GEOS");
                result = GEOSPreparedCovers( prep_cache->prepared_geom, g1);
                GEOSGeom_destroy(g1);
        }
@@ -2132,28 +2052,24 @@ Datum covers(PG_FUNCTION_ARGS)
                GEOSGeometry *g2;
 
                g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1);
-               if ( 0 == g1 )   /* exception thrown at construction */
-               {
-                       HANDLE_GEOS_ERROR("First argument geometry could not be converted to GEOS");
-                       PG_RETURN_NULL();
-               }
+               if (!g1)
+                       HANDLE_GEOS_ERROR(
+                           "First argument geometry could not be converted to "
+                           "GEOS");
                g2 = (GEOSGeometry *)POSTGIS2GEOS(geom2);
-               if ( 0 == g2 )   /* exception thrown at construction */
+               if (!g2)
                {
-                       HANDLE_GEOS_ERROR("Second argument geometry could not be converted to GEOS");
                        GEOSGeom_destroy(g1);
-                       PG_RETURN_NULL();
+                       HANDLE_GEOS_ERROR(
+                           "Second argument geometry could not be converted "
+                           "to GEOS");
                }
                result = GEOSRelatePattern( g1, g2, "******FF*" );
                GEOSGeom_destroy(g1);
                GEOSGeom_destroy(g2);
        }
 
-       if (result == 2)
-       {
-               HANDLE_GEOS_ERROR("GEOSCovers");
-               PG_RETURN_NULL(); /* never get here */
-       }
+       if (result == 2) HANDLE_GEOS_ERROR("GEOSCovers");
 
        PG_FREE_IF_COPY(geom1, 0);
        PG_FREE_IF_COPY(geom2, 1);
@@ -2266,19 +2182,16 @@ Datum coveredby(PG_FUNCTION_ARGS)
 
        g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1);
 
-       if ( 0 == g1 )   /* exception thrown at construction */
-       {
+       if (!g1)
                HANDLE_GEOS_ERROR("First argument geometry could not be converted to GEOS");
-               PG_RETURN_NULL();
-       }
 
        g2 = (GEOSGeometry *)POSTGIS2GEOS(geom2);
 
-       if ( 0 == g2 )   /* exception thrown at construction */
+       if (!g2)
        {
-               HANDLE_GEOS_ERROR("Second argument geometry could not be converted to GEOS");
                GEOSGeom_destroy(g1);
-               PG_RETURN_NULL();
+               HANDLE_GEOS_ERROR(
+                   "Second argument geometry could not be converted to GEOS");
        }
 
        result = GEOSRelatePattern(g1,g2,patt);
@@ -2286,11 +2199,7 @@ Datum coveredby(PG_FUNCTION_ARGS)
        GEOSGeom_destroy(g1);
        GEOSGeom_destroy(g2);
 
-       if (result == 2)
-       {
-               HANDLE_GEOS_ERROR("GEOSCoveredBy");
-               PG_RETURN_NULL(); /* never get here */
-       }
+       if (result == 2) HANDLE_GEOS_ERROR("GEOSCoveredBy");
 
        PG_FREE_IF_COPY(geom1, 0);
        PG_FREE_IF_COPY(geom2, 1);
@@ -2298,8 +2207,6 @@ Datum coveredby(PG_FUNCTION_ARGS)
        PG_RETURN_BOOL(result);
 }
 
-
-
 PG_FUNCTION_INFO_V1(crosses);
 Datum crosses(PG_FUNCTION_ARGS)
 {
@@ -2335,18 +2242,15 @@ Datum crosses(PG_FUNCTION_ARGS)
        initGEOS(lwpgnotice, lwgeom_geos_error);
 
        g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1);
-       if ( 0 == g1 )   /* exception thrown at construction */
-       {
+       if (!g1)
                HANDLE_GEOS_ERROR("First argument geometry could not be converted to GEOS");
-               PG_RETURN_NULL();
-       }
 
        g2 = (GEOSGeometry *)POSTGIS2GEOS(geom2);
-       if ( 0 == g2 )   /* exception thrown at construction */
+       if (!g2)
        {
-               HANDLE_GEOS_ERROR("Second argument geometry could not be converted to GEOS");
                GEOSGeom_destroy(g1);
-               PG_RETURN_NULL();
+               HANDLE_GEOS_ERROR(
+                   "Second argument geometry could not be converted to GEOS");
        }
 
        result = GEOSCrosses(g1,g2);
@@ -2354,11 +2258,7 @@ Datum crosses(PG_FUNCTION_ARGS)
        GEOSGeom_destroy(g1);
        GEOSGeom_destroy(g2);
 
-       if (result == 2)
-       {
-               HANDLE_GEOS_ERROR("GEOSCrosses");
-               PG_RETURN_NULL(); /* never get here */
-       }
+       if (result == 2) HANDLE_GEOS_ERROR("GEOSCrosses");
 
        PG_FREE_IF_COPY(geom1, 0);
        PG_FREE_IF_COPY(geom2, 1);
@@ -2456,22 +2356,16 @@ Datum geos_intersects(PG_FUNCTION_ARGS)
                if ( prep_cache->argnum == 1 )
                {
                        GEOSGeometry *g = (GEOSGeometry *)POSTGIS2GEOS(geom2);
-                       if ( 0 == g )   /* exception thrown at construction */
-                       {
+                       if (!g)
                                HANDLE_GEOS_ERROR("Geometry could not be converted to GEOS");
-                               PG_RETURN_NULL();
-                       }
                        result = GEOSPreparedIntersects( prep_cache->prepared_geom, g);
                        GEOSGeom_destroy(g);
                }
                else
                {
                        GEOSGeometry *g = (GEOSGeometry *)POSTGIS2GEOS(geom1);
-                       if ( 0 == g )   /* exception thrown at construction */
-                       {
+                       if (!g)
                                HANDLE_GEOS_ERROR("Geometry could not be converted to GEOS");
-                               PG_RETURN_NULL();
-                       }
                        result = GEOSPreparedIntersects( prep_cache->prepared_geom, g);
                        GEOSGeom_destroy(g);
                }
@@ -2481,28 +2375,24 @@ Datum geos_intersects(PG_FUNCTION_ARGS)
                GEOSGeometry *g1;
                GEOSGeometry *g2;
                g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1);
-               if ( 0 == g1 )   /* exception thrown at construction */
-               {
-                       HANDLE_GEOS_ERROR("First argument geometry could not be converted to GEOS");
-                       PG_RETURN_NULL();
-               }
+               if (!g1)
+                       HANDLE_GEOS_ERROR(
+                           "First argument geometry could not be converted to "
+                           "GEOS");
                g2 = (GEOSGeometry *)POSTGIS2GEOS(geom2);
-               if ( 0 == g2 )   /* exception thrown at construction */
+               if (!g2)
                {
-                       HANDLE_GEOS_ERROR("Second argument geometry could not be converted to GEOS");
                        GEOSGeom_destroy(g1);
-                       PG_RETURN_NULL();
+                       HANDLE_GEOS_ERROR(
+                           "Second argument geometry could not be converted "
+                           "to GEOS");
                }
                result = GEOSIntersects( g1, g2);
                GEOSGeom_destroy(g1);
                GEOSGeom_destroy(g2);
        }
 
-       if (result == 2)
-       {
-               HANDLE_GEOS_ERROR("GEOSIntersects");
-               PG_RETURN_NULL(); /* never get here */
-       }
+       if (result == 2) HANDLE_GEOS_ERROR("GEOSIntersects");
 
        PG_FREE_IF_COPY(geom1, 0);
        PG_FREE_IF_COPY(geom2, 1);
@@ -2546,18 +2436,15 @@ Datum touches(PG_FUNCTION_ARGS)
        initGEOS(lwpgnotice, lwgeom_geos_error);
 
        g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1 );
-       if ( 0 == g1 )   /* exception thrown at construction */
-       {
+       if (!g1)
                HANDLE_GEOS_ERROR("First argument geometry could not be converted to GEOS");
-               PG_RETURN_NULL();
-       }
 
        g2 = (GEOSGeometry *)POSTGIS2GEOS(geom2 );
-       if ( 0 == g2 )   /* exception thrown at construction */
+       if (!g2)
        {
-               HANDLE_GEOS_ERROR("Second argument geometry could not be converted to GEOS");
                GEOSGeom_destroy(g1);
-               PG_RETURN_NULL();
+               HANDLE_GEOS_ERROR(
+                   "Second argument geometry could not be converted to GEOS");
        }
 
        result = GEOSTouches(g1,g2);
@@ -2565,11 +2452,7 @@ Datum touches(PG_FUNCTION_ARGS)
        GEOSGeom_destroy(g1);
        GEOSGeom_destroy(g2);
 
-       if (result == 2)
-       {
-               HANDLE_GEOS_ERROR("GEOSTouches");
-               PG_RETURN_NULL(); /* never get here */
-       }
+       if (result == 2) HANDLE_GEOS_ERROR("GEOSTouches");
 
        PG_FREE_IF_COPY(geom1, 0);
        PG_FREE_IF_COPY(geom2, 1);
@@ -2613,18 +2496,15 @@ Datum disjoint(PG_FUNCTION_ARGS)
        initGEOS(lwpgnotice, lwgeom_geos_error);
 
        g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1);
-       if ( 0 == g1 )   /* exception thrown at construction */
-       {
+       if (!g1)
                HANDLE_GEOS_ERROR("First argument geometry could not be converted to GEOS");
-               PG_RETURN_NULL();
-       }
 
        g2 = (GEOSGeometry *)POSTGIS2GEOS(geom2);
-       if ( 0 == g2 )   /* exception thrown at construction */
+       if (!g2)
        {
-               HANDLE_GEOS_ERROR("Second argument geometry could not be converted to GEOS");
                GEOSGeom_destroy(g1);
-               PG_RETURN_NULL();
+               HANDLE_GEOS_ERROR(
+                   "Second argument geometry could not be converted to GEOS");
        }
 
        result = GEOSDisjoint(g1,g2);
@@ -2632,11 +2512,7 @@ Datum disjoint(PG_FUNCTION_ARGS)
        GEOSGeom_destroy(g1);
        GEOSGeom_destroy(g2);
 
-       if (result == 2)
-       {
-               HANDLE_GEOS_ERROR("GEOSDisjoint");
-               PG_RETURN_NULL(); /* never get here */
-       }
+       if (result == 2) HANDLE_GEOS_ERROR("GEOSDisjoint");
 
        PG_FREE_IF_COPY(geom1, 0);
        PG_FREE_IF_COPY(geom2, 1);
@@ -2658,7 +2534,6 @@ Datum relate_pattern(PG_FUNCTION_ARGS)
        geom1 = PG_GETARG_GSERIALIZED_P(0);
        geom2 = PG_GETARG_GSERIALIZED_P(1);
 
-
        /* TODO handle empty */
 
        errorIfGeometryCollection(geom1,geom2);
@@ -2667,17 +2542,14 @@ Datum relate_pattern(PG_FUNCTION_ARGS)
        initGEOS(lwpgnotice, lwgeom_geos_error);
 
        g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1);
-       if ( 0 == g1 )   /* exception thrown at construction */
-       {
+       if (!g1)
                HANDLE_GEOS_ERROR("First argument geometry could not be converted to GEOS");
-               PG_RETURN_NULL();
-       }
        g2 = (GEOSGeometry *)POSTGIS2GEOS(geom2);
-       if ( 0 == g2 )   /* exception thrown at construction */
+       if (!g2)
        {
-               HANDLE_GEOS_ERROR("Second argument geometry could not be converted to GEOS");
                GEOSGeom_destroy(g1);
-               PG_RETURN_NULL();
+               HANDLE_GEOS_ERROR(
+                   "Second argument geometry could not be converted to GEOS");
        }
 
        patt =  DatumGetCString(DirectFunctionCall1(textout,
@@ -2697,11 +2569,7 @@ Datum relate_pattern(PG_FUNCTION_ARGS)
        GEOSGeom_destroy(g2);
        pfree(patt);
 
-       if (result == 2)
-       {
-               HANDLE_GEOS_ERROR("GEOSRelatePattern");
-               PG_RETURN_NULL(); /* never get here */
-       }
+       if (result == 2) HANDLE_GEOS_ERROR("GEOSRelatePattern");
 
        PG_FREE_IF_COPY(geom1, 0);
        PG_FREE_IF_COPY(geom2, 1);
@@ -2739,24 +2607,18 @@ Datum relate_full(PG_FUNCTION_ARGS)
        initGEOS(lwpgnotice, lwgeom_geos_error);
 
        g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1 );
-       if ( 0 == g1 )   /* exception thrown at construction */
-       {
+       if (!g1)
                HANDLE_GEOS_ERROR("First argument geometry could not be converted to GEOS");
-               PG_RETURN_NULL();
-       }
        g2 = (GEOSGeometry *)POSTGIS2GEOS(geom2 );
-       if ( 0 == g2 )   /* exception thrown at construction */
+       if (!g2)
        {
-               HANDLE_GEOS_ERROR("Second argument geometry could not be converted to GEOS");
                GEOSGeom_destroy(g1);
-               PG_RETURN_NULL();
+               HANDLE_GEOS_ERROR(
+                   "Second argument geometry could not be converted to GEOS");
        }
 
        POSTGIS_DEBUG(3, "constructed geometries ");
 
-       if ((g1==NULL) || (g2 == NULL))
-               elog(NOTICE,"g1 or g2 are null");
-
        POSTGIS_DEBUGF(3, "%s", GEOSGeomToWKT(g1));
        POSTGIS_DEBUGF(3, "%s", GEOSGeomToWKT(g2));
 
@@ -2765,11 +2627,7 @@ Datum relate_full(PG_FUNCTION_ARGS)
        GEOSGeom_destroy(g1);
        GEOSGeom_destroy(g2);
 
-       if (relate_str == NULL)
-       {
-               HANDLE_GEOS_ERROR("GEOSRelate");
-               PG_RETURN_NULL(); /* never get here */
-       }
+       if (!relate_str) HANDLE_GEOS_ERROR("GEOSRelate");
 
        result = cstring2text(relate_str);
        GEOSFree(relate_str);
@@ -2825,19 +2683,16 @@ Datum ST_Equals(PG_FUNCTION_ARGS)
 
        g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1);
 
-       if ( 0 == g1 )   /* exception thrown at construction */
-       {
+       if (!g1)
                HANDLE_GEOS_ERROR("First argument geometry could not be converted to GEOS");
-               PG_RETURN_NULL();
-       }
 
        g2 = (GEOSGeometry *)POSTGIS2GEOS(geom2);
 
-       if ( 0 == g2 )   /* exception thrown at construction */
+       if (!g2)
        {
-               HANDLE_GEOS_ERROR("Second argument geometry could not be converted to GEOS");
                GEOSGeom_destroy(g1);
-               PG_RETURN_NULL();
+               HANDLE_GEOS_ERROR(
+                   "Second argument geometry could not be converted to GEOS");
        }
 
        result = GEOSEquals(g1,g2);
@@ -2845,11 +2700,7 @@ Datum ST_Equals(PG_FUNCTION_ARGS)
        GEOSGeom_destroy(g1);
        GEOSGeom_destroy(g2);
 
-       if (result == 2)
-       {
-               HANDLE_GEOS_ERROR("GEOSEquals");
-               PG_RETURN_NULL(); /*never get here */
-       }
+       if (result == 2) HANDLE_GEOS_ERROR("GEOSEquals");
 
        PG_FREE_IF_COPY(geom1, 0);
        PG_FREE_IF_COPY(geom2, 1);
@@ -2899,11 +2750,8 @@ Datum isring(PG_FUNCTION_ARGS)
        initGEOS(lwpgnotice, lwgeom_geos_error);
 
        g1 = (GEOSGeometry *)POSTGIS2GEOS(geom);
-       if ( 0 == g1 )   /* exception thrown at construction */
-       {
+       if (!g1)
                HANDLE_GEOS_ERROR("First argument geometry could not be converted to GEOS");
-               PG_RETURN_NULL();
-       }
 
        if ( GEOSGeomTypeId(g1) != GEOS_LINESTRING )
        {
@@ -2914,11 +2762,7 @@ Datum isring(PG_FUNCTION_ARGS)
        result = GEOSisRing(g1);
        GEOSGeom_destroy(g1);
 
-       if (result == 2)
-       {
-               HANDLE_GEOS_ERROR("GEOSisRing");
-               PG_RETURN_NULL();
-       }
+       if (result == 2) HANDLE_GEOS_ERROR("GEOSisRing");
 
        PG_FREE_IF_COPY(geom, 0);
        PG_RETURN_BOOL(result);
@@ -3080,7 +2924,7 @@ GEOSGeometry** ARRAY2GEOS(ArrayType* array, uint32_t nelems, int* is3d, int* sri
                *is3d = *is3d || gserialized_has_z(geom);
 
                geos_geoms[i] = (GEOSGeometry*) POSTGIS2GEOS(geom);
-               if (!geos_geoms[i])   /* exception thrown at construction */
+               if (!geos_geoms[i])
                {
             uint32_t j;
             lwpgerror("Geometry could not be converted to GEOS");
@@ -3183,7 +3027,7 @@ Datum polygonize_garray(PG_FUNCTION_ARGS)
        GEOSSetSRID(geos_result, srid);
        result = GEOS2POSTGIS(geos_result, is3d);
        GEOSGeom_destroy(geos_result);
-       if ( result == NULL )
+       if (!result)
        {
                elog(ERROR, "%s returned an error", __func__);
                PG_RETURN_NULL(); /*never get here */
@@ -3725,19 +3569,12 @@ Datum ST_MinimumClearance(PG_FUNCTION_ARGS)
 
        input = PG_GETARG_GSERIALIZED_P(0);
        input_geos = POSTGIS2GEOS(input);
-       if (!input_geos)   /* exception thrown at construction */
-       {
+       if (!input_geos)
                HANDLE_GEOS_ERROR("Geometry could not be converted to GEOS");
-               PG_RETURN_NULL();
-       }
 
        error = GEOSMinimumClearance(input_geos, &result);
        GEOSGeom_destroy(input_geos);
-       if (error)
-       {
-               HANDLE_GEOS_ERROR("Error computing minimum clearance");
-               PG_RETURN_NULL();
-       }
+       if (error) HANDLE_GEOS_ERROR("Error computing minimum clearance");
 
        PG_FREE_IF_COPY(input, 0);
        PG_RETURN_FLOAT8(result);
@@ -3773,19 +3610,13 @@ Datum ST_MinimumClearanceLine(PG_FUNCTION_ARGS)
        input = PG_GETARG_GSERIALIZED_P(0);
        srid = gserialized_get_srid(input);
        input_geos = POSTGIS2GEOS(input);
-       if (!input_geos)   /* exception thrown at construction */
-       {
+       if (!input_geos)
                HANDLE_GEOS_ERROR("Geometry could not be converted to GEOS");
-               PG_RETURN_NULL();
-       }
 
        result_geos = GEOSMinimumClearanceLine(input_geos);
        GEOSGeom_destroy(input_geos);
        if (!result_geos)
-       {
                HANDLE_GEOS_ERROR("Error computing minimum clearance");
-               PG_RETURN_NULL();
-       }
 
        GEOSSetSRID(result_geos, srid);
        result = GEOS2POSTGIS(result_geos, LW_FALSE);
index fc8ec6bf7b52d005da164d07f97ea1f46de4d25d..09e3e40442f30901c9d07768a1142e9dc45bfa0a 100644 (file)
@@ -681,7 +681,6 @@ static POINTARRAY* parse_gml_coord(xmlNodePtr xnode, bool *hasz)
        if (!z) *hasz = false;
 
        ptarray_append_point(dpa, &p, LW_FALSE);
-       x = y = z = false;
 
        return dpa; /* ptarray_clone_deep(dpa); */
 }
@@ -1514,9 +1513,9 @@ static LWGEOM* parse_gml_mpoint(xmlNodePtr xnode, bool *hasz, int *root_srid)
                {
                        for (xb = xa->children ; xb != NULL ; xb = xb->next)
                        {
-                               if (xb != NULL)
-                                       geom = (LWGEOM*)lwmpoint_add_lwpoint((LWMPOINT*)geom,
-                                                                        (LWPOINT*)parse_gml(xb, hasz, root_srid));
+                               geom = (LWGEOM*)lwmpoint_add_lwpoint(
+                                   (LWMPOINT*)geom,
+                                   (LWPOINT*)parse_gml(xb, hasz, root_srid));
                        }
                }
                else if (!strcmp((char *) xa->name, "pointMember"))
index fc0358402f3add99bcbef9092f2ee20c621c9bb5..409437ac50e53edb3661c4c512185dd815efcde3 100644 (file)
@@ -121,6 +121,27 @@ SELECT 'segmentize_geography2', st_dwithin(st_pointn(st_segmentize('linestring(1
 SELECT 'segmentize_geography_3667', abs(ST_Length(geog) - ST_Length(ST_Segmentize(geog, 30000))) < 0.00001
   FROM (SELECT ST_GeographyFromText('LINESTRING(38.769917 10.780694, 38.769917 9.106194)') As geog) AS f;
 
--- Clean up spatial_ref_sys
-DELETE FROM spatial_ref_sys WHERE srid IN (4269,4326);
+-- typmod checks
+select 'typmod_point_4326', geography_typmod_out(geography_typmod_in('{Point,4326}'));
+select 'typmod_point_0', geography_typmod_out(geography_typmod_in('{Point,0}'));
+select 'typmod_point_-1', geography_typmod_out(geography_typmod_in('{Point,-1}'));
+select 'typmod_pointzm_0', geography_typmod_out(geography_typmod_in('{PointZM,0}'));
+select 'typmod_geometry_0', geography_typmod_out(geography_typmod_in('{Geometry,0}'));
+select 'typmod_geometry_4326', geography_typmod_out(geography_typmod_in('{Geometry,4326}'));
+select 'typmod_geography_0', geography_typmod_out(geography_typmod_in('{Geogrpahy,0}'));
+
+-- ST_DWithin
+select 'dwithin_pt_pt_1', ST_DWithin('POINT(0 0)'::geography, 'POINT(1 1)'::geography, 300000);
+select 'dwithin_pt_pt_2', ST_DWithin('POINT(0 0)'::geography, 'POINT(1 1)'::geography, 10);
+select 'dwithin_pt_line_1', ST_DWithin('POINT(0 0)'::geography, 'LINESTRING(1 1, 2 2)'::geography, 300000);
+select 'dwithin_line_pt_1', ST_DWithin('LINESTRING(1 1, 2 2)'::geography, 'POINT(0 0)'::geography, 300000);
+select 'dwithin_pt_poly_1', ST_DWithin('POINT(0 0)'::geography, 'POLYGON((1 1, 2 2, 3 0, 1 1))'::geography, 300000);
+select 'dwithin_poly_pt_1', ST_DWithin('POLYGON((1 1, 2 2, 3 0, 1 1))'::geography, 'POINT(0 0)'::geography, 300000);
+select 'dwithin_line_poly_1', ST_DWithin('LINESTRING(-1 -1, 0 0)'::geography, 'POLYGON((1 1, 2 2, 3 0, 1 1))'::geography, 300000);
+select 'dwithin_poly_line_1', ST_DWithin('POLYGON((1 1, 2 2, 3 0, 1 1))'::geography, 'LINESTRING(-1 -1, 0 0)'::geography, 300000);
+select 'dwithin_poly_poly_1', ST_DWithin('POLYGON((0 0, -2 -2, -3 0, 0 0))'::geography, 'POLYGON((1 1, 2 2, 3 0, 1 1))'::geography, 10);
+select 'dwithin_poly_poly_2', ST_DWithin('POLYGON((0 0, -2 -2, -3 0, 0 0))'::geography, 'POLYGON((1 1, 2 2, 3 0, 1 1))'::geography, 300000);
+select 'dwithin_poly_poly_3', ST_DWithin('POLYGON((1 1, -2 -2, -3 0, 1 1))'::geography, 'POLYGON((1 1, 2 2, 3 0, 1 1))'::geography, 300000);
 
+-- Clean up spatial_ref_sys
+DELETE FROM spatial_ref_sys WHERE srid IN (4269, 4326);
index 8dcdbc66959c74287a8b21b668dc9df175272d53..97846a1a005a54a5dfb6c9d2b6aa1ed3c11cb1d5 100644 (file)
@@ -30,3 +30,22 @@ geog_precision_pazafir|0|0
 segmentize_geography|39092
 segmentize_geography2|t
 segmentize_geography_3667|t
+typmod_point_4326|(Point,4326)
+typmod_point_0|(Point,4326)
+NOTICE:  SRID value -1 converted to the officially unknown SRID value 0
+typmod_point_-1|(Point,4326)
+typmod_pointzm_0|(PointZM,4326)
+typmod_geometry_0|(Geometry,4326)
+typmod_geometry_4326|(Geometry,4326)
+ERROR:  Invalid geometry type modifier: Geogrpahy
+dwithin_pt_pt_1|t
+dwithin_pt_pt_2|f
+dwithin_pt_line_1|t
+dwithin_line_pt_1|t
+dwithin_pt_poly_1|t
+dwithin_poly_pt_1|t
+dwithin_line_poly_1|t
+dwithin_poly_line_1|t
+dwithin_poly_poly_1|f
+dwithin_poly_poly_2|t
+dwithin_poly_poly_3|t
index 9f3fdf6183f1fff1361ad03d412f3f011392822e..86ab456df3168c59410ff4a65bf8245a01cb6483 100644 (file)
@@ -136,36 +136,36 @@ SELECT 'BoundingDiagonal6', ST_AsEwkt(ST_BoundingDiagonal(
 
 --- ST_Azimuth
 SELECT 'ST_Azimuth_regular' , round(ST_Azimuth(geom1,geom2)::numeric,4)
-FROM CAST('POINT(0 1)' AS geometry) AS geom1, CAST('POINT(1 0)' AS geometry) AS geom2 ; 
+FROM CAST('POINT(0 1)' AS geometry) AS geom1, CAST('POINT(1 0)' AS geometry) AS geom2 ;
 SELECT 'ST_Azimuth_same_point' , ST_Azimuth(geom1,geom1)
-FROM CAST('POINT(0 1)' AS geometry) AS geom1 ; 
+FROM CAST('POINT(0 1)' AS geometry) AS geom1 ;
 SELECT 'ST_Azimuth_mixed_srid' , ST_Azimuth(geom1,geom2)
-FROM CAST('POINT(0 1)' AS geometry) AS geom1, ST_GeomFromText('POINT(1 0)',4326) AS geom2; 
+FROM CAST('POINT(0 1)' AS geometry) AS geom1, ST_GeomFromText('POINT(1 0)',4326) AS geom2;
 SELECT 'ST_Azimuth_not_point' , ST_Azimuth(geom1,geom2)
-FROM CAST('POINT(0 1)' AS geometry) AS geom1, ST_GeomFromText('LINESTRING(1 0 ,2 0)',4326) AS geom2; 
+FROM CAST('POINT(0 1)' AS geometry) AS geom1, ST_GeomFromText('LINESTRING(1 0 ,2 0)',4326) AS geom2;
 SELECT 'ST_Azimuth_null_geom' , ST_Azimuth(geom1,geom2)
-FROM CAST('POINT(0 1)' AS geometry) AS geom1, ST_GeomFromText('EMPTY') AS geom2; 
+FROM CAST('POINT(0 1)' AS geometry) AS geom1, ST_GeomFromText('EMPTY') AS geom2;
 
---- ST_Angle( points)
+--- ST_Angle(points)
 SELECT 'ST_Angle_4_pts', St_Angle(p1,p2,p3,p4)
        FROM ST_GeomFromtext('POINT(0 1)') AS p1, ST_GeomFromtext('POINT(0 0)') AS p2
-       , ST_GeomFromtext('POINT(1 0)') AS p3, ST_GeomFromtext('POINT(2 0)') AS p4 ;
+       , ST_GeomFromtext('POINT(1 0)') AS p3, ST_GeomFromtext('POINT(2 0)') AS p4;
 SELECT 'ST_Angle_4_pts', St_Angle(p1,p2,p3,p4)
        FROM ST_GeomFromtext('POINT(2 0)') AS p1, ST_GeomFromtext('POINT(1 0)') AS p2
-       , ST_GeomFromtext('POINT(1 -1)') AS p3, ST_GeomFromtext('POINT(0 0)') AS p4 ;
+       , ST_GeomFromtext('POINT(1 -1)') AS p3, ST_GeomFromtext('POINT(0 0)') AS p4;
 SELECT 'ST_Angle_3_pts', St_Angle(p1,p2,p3)
        FROM ST_GeomFromtext('POINT(0 1)') AS p1, ST_GeomFromtext('POINT(0 0)') AS p2
-       , ST_GeomFromtext('POINT(1 0)') AS p3, ST_GeomFromtext('POINT(2 0)') AS p4 ; 
+       , ST_GeomFromtext('POINT(1 0)') AS p3, ST_GeomFromtext('POINT(2 0)') AS p4;
 SELECT 'ST_Angle_mixed_srid', St_Angle(p1,p2,p3,p4)
        FROM ST_GeomFromtext('POINT(0 1)') AS p1, ST_GeomFromtext('POINT(0 0)') AS p2
-       , ST_GeomFromtext('POINT(1 0)',4326) AS p3, ST_GeomFromtext('POINT(2 0)') AS p4 ;
+       , ST_GeomFromtext('POINT(1 0)',4326) AS p3, ST_GeomFromtext('POINT(2 0)') AS p4;
 SELECT 'ST_Angle_empty' , St_Angle(p1,p2,p3,p4)
        FROM ST_GeomFromtext('POINT EMPTY') AS p1, ST_GeomFromtext('POINT(0 0)') AS p2
-       , ST_GeomFromtext('POINT(1 0)',4326) AS p3, ST_GeomFromtext('POINT(2 0)') AS p4 ;
---- ST_Angle( lines)
+       , ST_GeomFromtext('POINT(1 0)',4326) AS p3, ST_GeomFromtext('POINT(2 0)') AS p4;
+--- ST_Angle(lines)
 SELECT 'ST_Angle_2_lines', St_Angle(l1,l2)
        FROM ST_GeomFromtext('LINESTRING(0 1,0 0)') AS l1
-       , ST_GeomFromtext('LINESTRING(1 0, 2 0)') AS l2 ;
+       , ST_GeomFromtext('LINESTRING(1 0, 2 0)') AS l2;
 
 --- ST_ClusterKMeans
 
@@ -203,3 +203,13 @@ from (
 group by cid
 order by count(*)
 limit 1;
+
+
+-- typmod checks
+select 'typmod_point_4326', geometry_typmod_out(geometry_typmod_in('{Point,4326}'));
+select 'typmod_point_0', geometry_typmod_out(geometry_typmod_in('{Point,0}'));
+select 'typmod_point_-1', geometry_typmod_out(geometry_typmod_in('{Point,-1}'));
+select 'typmod_pointzm_0', geometry_typmod_out(geometry_typmod_in('{PointZM,0}'));
+select 'typmod_geometry_0', geometry_typmod_out(geometry_typmod_in('{Geometry,0}'));
+select 'typmod_geometry_4326', geometry_typmod_out(geometry_typmod_in('{Geometry,4326}'));
+select 'typmod_geography_0', geometry_typmod_out(geometry_typmod_in('{Geogrpahy,0}'));
index 66b3b2da3e8a0a5ef964b5baba31e47b3318386c..cefa318ecbdf35935818c3e33198c0f998e3309f 100644 (file)
@@ -34,3 +34,11 @@ ERROR:  Empty geometry
 ST_Angle_2_lines|4.71238898038469
 #3965|25|25
 #3971|t
+typmod_point_4326|(Point,4326)
+typmod_point_0|(Point)
+NOTICE:  SRID value -1 converted to the officially unknown SRID value 0
+typmod_point_-1|(Point)
+typmod_pointzm_0|(PointZM)
+typmod_geometry_0|
+typmod_geometry_4326|(Geometry,4326)
+ERROR:  Invalid geometry type modifier: Geogrpahy
index ba6439557aa7a74b16942f96d167d11801e0506f..1c0688389994b637f99cd881c2ea922df6c325bf 100644 (file)
@@ -12,34 +12,40 @@ INSERT INTO "spatial_ref_sys" ("srid", "proj4text") VALUES (102189, '+proj=tmerc
 --
 
 -- Empty Geometry
-SELECT 'gml_empty_geom', ST_AsGML(geography(GeomFromEWKT(NULL)));
+SELECT 'gml_empty_geom', ST_AsGML(geography(ST_GeomFromEWKT('GEOMETRYCOLLECTION EMPTY')));
 
 -- Precision
-SELECT 'gml_precision_01', ST_AsGML(geography(GeomFromEWKT('SRID=4326;POINT(1.1111111 1.1111111)')), -2);
-SELECT 'gml_precision_02', ST_AsGML(geography(GeomFromEWKT('SRID=4326;POINT(1.1111111 1.1111111)')), 19);
+SELECT 'gml_precision_01', ST_AsGML(geography(ST_GeomFromEWKT('SRID=4326;POINT(1.1111111 1.1111111)')), -2);
+SELECT 'gml_precision_02', ST_AsGML(geography(ST_GeomFromEWKT('SRID=4326;POINT(1.1111111 1.1111111)')), 19);
 
 -- Version
-SELECT 'gml_version_01', ST_AsGML(2, geography(GeomFromEWKT('SRID=4326;POINT(1 1)')));
-SELECT 'gml_version_02', ST_AsGML(3, geography(GeomFromEWKT('SRID=4326;POINT(1 1)')));
-SELECT 'gml_version_03', ST_AsGML(21, geography(GeomFromEWKT('SRID=4326;POINT(1 1)')));
-SELECT 'gml_version_04', ST_AsGML(-4, geography(GeomFromEWKT('SRID=4326;POINT(1 1)')));
+SELECT 'gml_version_01', ST_AsGML(2, geography(ST_GeomFromEWKT('SRID=4326;POINT(1 1)')));
+SELECT 'gml_version_02', ST_AsGML(3, geography(ST_GeomFromEWKT('SRID=4326;POINT(1 1)')));
+SELECT 'gml_version_03', ST_AsGML(21, geography(ST_GeomFromEWKT('SRID=4326;POINT(1 1)')));
+SELECT 'gml_version_04', ST_AsGML(-4, geography(ST_GeomFromEWKT('SRID=4326;POINT(1 1)')));
 
 -- Option
-SELECT 'gml_option_01', ST_AsGML(2, geography(GeomFromEWKT('SRID=4326;POINT(1 1)')), 0, 0);
-SELECT 'gml_option_02', ST_AsGML(3, geography(GeomFromEWKT('SRID=4326;POINT(1 1)')), 0, 1);
-SELECT 'gml_option_03', ST_AsGML(3, geography(GeomFromEWKT('SRID=4326;POINT(1 1)')), 0, 2);
+SELECT 'gml_option_01', ST_AsGML(2, geography(ST_GeomFromEWKT('SRID=4326;POINT(1 2)')), 0, 0);
+SELECT 'gml_option_02', ST_AsGML(3, geography(ST_GeomFromEWKT('SRID=4326;POINT(1 2)')), 0, 1);
+SELECT 'gml_option_03', ST_AsGML(3, geography(ST_GeomFromEWKT('SRID=4326;POINT(1 2)')), 0, 2);
+SELECT 'gml_option_04', ST_AsGML(3, geography(ST_GeomFromEWKT('SRID=4326;POINT(1 2)')), 0, 4);
+
+-- These are geometry-only
+SELECT 'gml_option_05', ST_AsGML(3, geography(ST_GeomFromEWKT('SRID=4326;POINT(1 2)')), 0, 16);
+SELECT 'gml_option_06', ST_AsGML(2, geography(ST_GeomFromEWKT('SRID=4326;LINESTRING(1 2, 3 4)')), 0, 32);
+SELECT 'gml_option_07', ST_AsGML(3, geography(ST_GeomFromEWKT('SRID=4326;LINESTRING(1 2, 3 4)')), 0, 32);
 
 -- Deegree data
-SELECT 'gml_deegree_01', ST_AsGML(2, geography(GeomFromEWKT('SRID=4326;POINT(1 2)')), 0, 0);
-SELECT 'gml_deegree_02', ST_AsGML(2, geography(GeomFromEWKT('SRID=4326;POINT(1 2)')), 0, 1);
-SELECT 'gml_deegree_03', ST_AsGML(3, geography(GeomFromEWKT('SRID=4326;POINT(1 2)')), 0, 0);
-SELECT 'gml_deegree_04', ST_AsGML(3, geography(GeomFromEWKT('SRID=4326;POINT(1 2)')), 0, 1);
+SELECT 'gml_deegree_01', ST_AsGML(2, geography(ST_GeomFromEWKT('SRID=4326;POINT(1 2)')), 0, 0);
+SELECT 'gml_deegree_02', ST_AsGML(2, geography(ST_GeomFromEWKT('SRID=4326;POINT(1 2)')), 0, 1);
+SELECT 'gml_deegree_03', ST_AsGML(3, geography(ST_GeomFromEWKT('SRID=4326;POINT(1 2)')), 0, 0);
+SELECT 'gml_deegree_04', ST_AsGML(3, geography(ST_GeomFromEWKT('SRID=4326;POINT(1 2)')), 0, 1);
 
 -- Prefix
-SELECT 'gml_prefix_01', ST_AsGML(2, geography(GeomFromEWKT('SRID=4326;POINT(1 2)')), 0, 0, '');
-SELECT 'gml_prefix_02', ST_AsGML(3, geography(GeomFromEWKT('SRID=4326;POINT(1 2)')), 0, 0, '');
-SELECT 'gml_prefix_03', ST_AsGML(2, geography(GeomFromEWKT('SRID=4326;POINT(1 2)')), 0, 0, 'foo');
-SELECT 'gml_prefix_04', ST_AsGML(3, geography(GeomFromEWKT('SRID=4326;POINT(1 2)')), 0, 0, 'foo');
+SELECT 'gml_prefix_01', ST_AsGML(2, geography(ST_GeomFromEWKT('SRID=4326;POINT(1 2)')), 0, 0, '');
+SELECT 'gml_prefix_02', ST_AsGML(3, geography(ST_GeomFromEWKT('SRID=4326;POINT(1 2)')), 0, 0, '');
+SELECT 'gml_prefix_03', ST_AsGML(2, geography(ST_GeomFromEWKT('SRID=4326;POINT(1 2)')), 0, 0, 'foo');
+SELECT 'gml_prefix_04', ST_AsGML(3, geography(ST_GeomFromEWKT('SRID=4326;POINT(1 2)')), 0, 0, 'foo');
 
 
 --
@@ -47,28 +53,28 @@ SELECT 'gml_prefix_04', ST_AsGML(3, geography(GeomFromEWKT('SRID=4326;POINT(1 2)
 --
 
 -- SRID
-SELECT 'kml_srid_01', ST_AsKML(geography(GeomFromEWKT('SRID=10;POINT(0 1)')));
-SELECT 'kml_srid_02', ST_AsKML(geography(GeomFromEWKT('POINT(0 1)')));
+SELECT 'kml_srid_01', ST_AsKML(geography(ST_GeomFromEWKT('SRID=10;POINT(0 1)')));
+SELECT 'kml_srid_02', ST_AsKML(geography(ST_GeomFromEWKT('POINT(0 1)')));
 
 -- Empty Geometry
-SELECT 'kml_empty_geom', ST_AsKML(geography(GeomFromEWKT(NULL)));
+SELECT 'kml_empty_geom', ST_AsKML(geography(ST_GeomFromEWKT(NULL)));
 
 -- Precision
-SELECT 'kml_precision_01', ST_AsKML(geography(GeomFromEWKT('SRID=4326;POINT(1.1111111 1.1111111)')), -2);
-SELECT 'kml_precision_02', ST_AsKML(geography(GeomFromEWKT('SRID=4326;POINT(1.1111111 1.1111111)')), 19);
+SELECT 'kml_precision_01', ST_AsKML(geography(ST_GeomFromEWKT('SRID=4326;POINT(1.1111111 1.1111111)')), -2);
+SELECT 'kml_precision_02', ST_AsKML(geography(ST_GeomFromEWKT('SRID=4326;POINT(1.1111111 1.1111111)')), 19);
 
 -- Version
-SELECT 'kml_version_01', ST_AsKML(2, geography(GeomFromEWKT('SRID=4326;POINT(1 1)')));
-SELECT 'kml_version_02', ST_AsKML(3, geography(GeomFromEWKT('SRID=4326;POINT(1 1)')));
-SELECT 'kml_version_03', ST_AsKML(-4, geography(GeomFromEWKT('SRID=4326;POINT(1 1)')));
+SELECT 'kml_version_01', ST_AsKML(2, geography(ST_GeomFromEWKT('SRID=4326;POINT(1 1)')));
+SELECT 'kml_version_02', ST_AsKML(3, geography(ST_GeomFromEWKT('SRID=4326;POINT(1 1)')));
+SELECT 'kml_version_03', ST_AsKML(-4, geography(ST_GeomFromEWKT('SRID=4326;POINT(1 1)')));
 
 -- Prefix
-SELECT 'kml_prefix_01', ST_AsKML(2, geography(GeomFromEWKT('SRID=4326;POINT(1 2)')), 0, '');
-SELECT 'kml_prefix_02', ST_AsKML(2, geography(GeomFromEWKT('SRID=4326;POINT(1 2)')), 0, 'kml');
+SELECT 'kml_prefix_01', ST_AsKML(2, geography(ST_GeomFromEWKT('SRID=4326;POINT(1 2)')), 0, '');
+SELECT 'kml_prefix_02', ST_AsKML(2, geography(ST_GeomFromEWKT('SRID=4326;POINT(1 2)')), 0, 'kml');
 
 -- Projected
 -- National Astronomical Observatory of Colombia - Bogota, Colombia (Placemark)
-SELECT 'kml_projection_01', ST_AsKML(geography(GeomFromEWKT('SRID=102189;POINT(1000000 1000000)')), 3);
+SELECT 'kml_projection_01', ST_AsKML(geography(ST_GeomFromEWKT('SRID=102189;POINT(1000000 1000000)')), 3);
 
 
 --
@@ -76,66 +82,66 @@ SELECT 'kml_projection_01', ST_AsKML(geography(GeomFromEWKT('SRID=102189;POINT(1
 --
 
 -- Empty Geometry
-SELECT 'svg_empty_geom', ST_AsSVG(geography(GeomFromEWKT(NULL)));
+SELECT 'svg_empty_geom', ST_AsSVG(geography(ST_GeomFromEWKT(NULL)));
 
 -- Option
-SELECT 'svg_option_01', ST_AsSVG(geography(GeomFromEWKT('LINESTRING(1 1, 4 4, 5 7)')), 0);
-SELECT 'svg_option_02', ST_AsSVG(geography(GeomFromEWKT('LINESTRING(1 1, 4 4, 5 7)')), 1);
-SELECT 'svg_option_03', ST_AsSVG(geography(GeomFromEWKT('LINESTRING(1 1, 4 4, 5 7)')), 0, 0);
-SELECT 'svg_option_04', ST_AsSVG(geography(GeomFromEWKT('LINESTRING(1 1, 4 4, 5 7)')), 1, 0);
+SELECT 'svg_option_01', ST_AsSVG(geography(ST_GeomFromEWKT('LINESTRING(1 1, 4 4, 5 7)')), 0);
+SELECT 'svg_option_02', ST_AsSVG(geography(ST_GeomFromEWKT('LINESTRING(1 1, 4 4, 5 7)')), 1);
+SELECT 'svg_option_03', ST_AsSVG(geography(ST_GeomFromEWKT('LINESTRING(1 1, 4 4, 5 7)')), 0, 0);
+SELECT 'svg_option_04', ST_AsSVG(geography(ST_GeomFromEWKT('LINESTRING(1 1, 4 4, 5 7)')), 1, 0);
 
 -- Precision
-SELECT 'svg_precision_01', ST_AsSVG(geography(GeomFromEWKT('POINT(1.1111111 1.1111111)')), 1, -2);
-SELECT 'svg_precision_02', ST_AsSVG(geography(GeomFromEWKT('POINT(1.1111111 1.1111111)')), 1, 19);
+SELECT 'svg_precision_01', ST_AsSVG(geography(ST_GeomFromEWKT('POINT(1.1111111 1.1111111)')), 1, -2);
+SELECT 'svg_precision_02', ST_AsSVG(geography(ST_GeomFromEWKT('POINT(1.1111111 1.1111111)')), 1, 19);
 
 
 --
--- GeoJson
+-- GeoJSON
 --
 
 -- Empty Geometry
-SELECT 'geojson_empty_geom', ST_AsGeoJson(geography(GeomFromEWKT(NULL)));
+SELECT 'geojson_empty_geom', ST_AsGeoJSON(geography(ST_GeomFromEWKT(NULL)));
 
 -- Precision
-SELECT 'geojson_precision_01', ST_AsGeoJson(geography(GeomFromEWKT('SRID=4326;POINT(1.1111111 1.1111111)')), -2);
-SELECT 'geojson_precision_02', ST_AsGeoJson(geography(GeomFromEWKT('SRID=4326;POINT(1.1111111 1.1111111)')), 19);
+SELECT 'geojson_precision_01', ST_AsGeoJSON(geography(ST_GeomFromEWKT('SRID=4326;POINT(1.1111111 1.1111111)')), -2);
+SELECT 'geojson_precision_02', ST_AsGeoJSON(geography(ST_GeomFromEWKT('SRID=4326;POINT(1.1111111 1.1111111)')), 19);
 
 -- Version
-SELECT 'geojson_version_01', ST_AsGeoJson(1, geography(GeomFromEWKT('SRID=4326;POINT(1 1)')));
-SELECT 'geojson_version_02', ST_AsGeoJson(21, geography(GeomFromEWKT('SRID=4326;POINT(1 1)')));
-SELECT 'geojson_version_03', ST_AsGeoJson(-4, geography(GeomFromEWKT('SRID=4326;POINT(1 1)')));
+SELECT 'geojson_version_01', ST_AsGeoJSON(1, geography(ST_GeomFromEWKT('SRID=4326;POINT(1 1)')));
+SELECT 'geojson_version_02', ST_AsGeoJSON(21, geography(ST_GeomFromEWKT('SRID=4326;POINT(1 1)')));
+SELECT 'geojson_version_03', ST_AsGeoJSON(-4, geography(ST_GeomFromEWKT('SRID=4326;POINT(1 1)')));
 
 -- CRS
-SELECT 'geojson_crs_01', ST_AsGeoJson(geography(GeomFromEWKT('SRID=4326;POINT(1 1)')), 0, 2);
-SELECT 'geojson_crs_02', ST_AsGeoJson(geography(GeomFromEWKT('POINT(1 1)')), 0, 2);
-SELECT 'geojson_crs_03', ST_AsGeoJson(geography(GeomFromEWKT('SRID=4326;POINT(1 1)')), 0, 4);
-SELECT 'geojson_crs_04', ST_AsGeoJson(geography(GeomFromEWKT('POINT(1 1)')), 0, 4);
-SELECT 'geojson_crs_05', ST_AsGeoJson(geography(GeomFromEWKT('SRID=1;POINT(1 1)')), 0, 2);
-SELECT 'geojson_crs_06', ST_AsGeoJson(geography(GeomFromEWKT('SRID=1;POINT(1 1)')), 0, 4);
+SELECT 'geojson_crs_01', ST_AsGeoJSON(geography(ST_GeomFromEWKT('SRID=4326;POINT(1 1)')), 0, 2);
+SELECT 'geojson_crs_02', ST_AsGeoJSON(geography(ST_GeomFromEWKT('POINT(1 1)')), 0, 2);
+SELECT 'geojson_crs_03', ST_AsGeoJSON(geography(ST_GeomFromEWKT('SRID=4326;POINT(1 1)')), 0, 4);
+SELECT 'geojson_crs_04', ST_AsGeoJSON(geography(ST_GeomFromEWKT('POINT(1 1)')), 0, 4);
+SELECT 'geojson_crs_05', ST_AsGeoJSON(geography(ST_GeomFromEWKT('SRID=1;POINT(1 1)')), 0, 2);
+SELECT 'geojson_crs_06', ST_AsGeoJSON(geography(ST_GeomFromEWKT('SRID=1;POINT(1 1)')), 0, 4);
 
 -- Bbox
-SELECT 'geojson_bbox_01', ST_AsGeoJson(geography(GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0);
-SELECT 'geojson_bbox_02', ST_AsGeoJson(geography(GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 1);
-SELECT 'geojson_bbox_03', ST_AsGeoJson(geography(GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 3);
-SELECT 'geojson_bbox_04', ST_AsGeoJson(geography(GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 5);
+SELECT 'geojson_bbox_01', ST_AsGeoJSON(geography(ST_GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0);
+SELECT 'geojson_bbox_02', ST_AsGeoJSON(geography(ST_GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 1);
+SELECT 'geojson_bbox_03', ST_AsGeoJSON(geography(ST_GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 3);
+SELECT 'geojson_bbox_04', ST_AsGeoJSON(geography(ST_GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 5);
 
 -- CRS and Bbox
-SELECT 'geojson_options_01', ST_AsGeoJson(geography(GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 0);
-SELECT 'geojson_options_02', ST_AsGeoJson(geography(GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0);
-SELECT 'geojson_options_03', ST_AsGeoJson(geography(GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 1);
-SELECT 'geojson_options_04', ST_AsGeoJson(geography(GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 1);
-SELECT 'geojson_options_05', ST_AsGeoJson(geography(GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 2);
-SELECT 'geojson_options_06', ST_AsGeoJson(geography(GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 2);
-SELECT 'geojson_options_07', ST_AsGeoJson(geography(GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 3);
-SELECT 'geojson_options_08', ST_AsGeoJson(geography(GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 3);
-SELECT 'geojson_options_09', ST_AsGeoJson(geography(GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 4);
-SELECT 'geojson_options_10', ST_AsGeoJson(geography(GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 4);
-SELECT 'geojson_options_11', ST_AsGeoJson(geography(GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 5);
-SELECT 'geojson_options_12', ST_AsGeoJson(geography(GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 5);
-SELECT 'geojson_options_13', ST_AsGeoJson(geography(GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 6);
-SELECT 'geojson_options_14', ST_AsGeoJson(geography(GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 6);
-SELECT 'geojson_options_15', ST_AsGeoJson(geography(GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 7);
-SELECT 'geojson_options_16', ST_AsGeoJson(geography(GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 7);
+SELECT 'geojson_options_01', ST_AsGeoJSON(geography(ST_GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 0);
+SELECT 'geojson_options_02', ST_AsGeoJSON(geography(ST_GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0);
+SELECT 'geojson_options_03', ST_AsGeoJSON(geography(ST_GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 1);
+SELECT 'geojson_options_04', ST_AsGeoJSON(geography(ST_GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 1);
+SELECT 'geojson_options_05', ST_AsGeoJSON(geography(ST_GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 2);
+SELECT 'geojson_options_06', ST_AsGeoJSON(geography(ST_GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 2);
+SELECT 'geojson_options_07', ST_AsGeoJSON(geography(ST_GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 3);
+SELECT 'geojson_options_08', ST_AsGeoJSON(geography(ST_GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 3);
+SELECT 'geojson_options_09', ST_AsGeoJSON(geography(ST_GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 4);
+SELECT 'geojson_options_10', ST_AsGeoJSON(geography(ST_GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 4);
+SELECT 'geojson_options_11', ST_AsGeoJSON(geography(ST_GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 5);
+SELECT 'geojson_options_12', ST_AsGeoJSON(geography(ST_GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 5);
+SELECT 'geojson_options_13', ST_AsGeoJSON(geography(ST_GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 6);
+SELECT 'geojson_options_14', ST_AsGeoJSON(geography(ST_GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 6);
+SELECT 'geojson_options_15', ST_AsGeoJSON(geography(ST_GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 7);
+SELECT 'geojson_options_16', ST_AsGeoJSON(geography(ST_GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)')), 0, 7);
 
 
 --
index 987ec57b95d88f3a2a5d51e3ab02f347dc0dd68c..c0b0201ad357d882e9d84388141cc5a98959581d 100644 (file)
@@ -5,9 +5,13 @@ gml_version_01|<gml:Point srsName="EPSG:4326"><gml:coordinates>1,1</gml:coordina
 gml_version_02|<gml:Point srsName="EPSG:4326"><gml:pos srsDimension="2">1 1</gml:pos></gml:Point>
 ERROR:  Only GML 2 and GML 3 are supported
 ERROR:  Only GML 2 and GML 3 are supported
-gml_option_01|<gml:Point srsName="EPSG:4326"><gml:coordinates>1,1</gml:coordinates></gml:Point>
-gml_option_02|<gml:Point srsName="urn:ogc:def:crs:EPSG::4326"><gml:pos srsDimension="2">1 1</gml:pos></gml:Point>
-gml_option_03|<gml:Point srsName="EPSG:4326"><gml:pos>1 1</gml:pos></gml:Point>
+gml_option_01|<gml:Point srsName="EPSG:4326"><gml:coordinates>1,2</gml:coordinates></gml:Point>
+gml_option_02|<gml:Point srsName="urn:ogc:def:crs:EPSG::4326"><gml:pos srsDimension="2">2 1</gml:pos></gml:Point>
+gml_option_03|<gml:Point srsName="EPSG:4326"><gml:pos>1 2</gml:pos></gml:Point>
+ERROR:  Options 4 passed to ST_AsGML(geography) but are only applicable to ST_AsGML(geometry)
+ERROR:  Options 16 passed to ST_AsGML(geography) but are only applicable to ST_AsGML(geometry)
+ERROR:  Options 32 passed to ST_AsGML(geography) but are only applicable to ST_AsGML(geometry)
+ERROR:  Options 32 passed to ST_AsGML(geography) but are only applicable to ST_AsGML(geometry)
 gml_deegree_01|<gml:Point srsName="EPSG:4326"><gml:coordinates>1,2</gml:coordinates></gml:Point>
 gml_deegree_02|<gml:Point srsName="urn:ogc:def:crs:EPSG::4326"><gml:coordinates>1,2</gml:coordinates></gml:Point>
 gml_deegree_03|<gml:Point srsName="EPSG:4326"><gml:pos srsDimension="2">1 2</gml:pos></gml:Point>
index 065424629b910df7a2db0fb7f568708e0836a455..20778ba477f67901a555e72f01e804f0c41890b8 100644 (file)
@@ -13,73 +13,77 @@ INSERT INTO "spatial_ref_sys" ("srid", "proj4text") VALUES (102189, '+proj=tmerc
 --
 
 -- Empty Geometry
-SELECT 'gml_empty_geom', ST_AsGML(GeomFromEWKT(NULL));
+SELECT 'gml_empty_geom', ST_AsGML(ST_GeomFromEWKT(NULL));
 
 -- Precision
-SELECT 'gml_precision_01', ST_AsGML(GeomFromEWKT('SRID=4326;POINT(1.1111111 1.1111111)'), -2);
-SELECT 'gml_precision_02', ST_AsGML(GeomFromEWKT('SRID=4326;POINT(1.1111111 1.1111111)'), 19);
+SELECT 'gml_precision_01', ST_AsGML(ST_GeomFromEWKT('SRID=4326;POINT(1.1111111 1.1111111)'), -2);
+SELECT 'gml_precision_02', ST_AsGML(ST_GeomFromEWKT('SRID=4326;POINT(1.1111111 1.1111111)'), 19);
 
 -- Version
-SELECT 'gml_version_01', ST_AsGML(2, GeomFromEWKT('SRID=4326;POINT(1 1)'));
-SELECT 'gml_version_02', ST_AsGML(3, GeomFromEWKT('SRID=4326;POINT(1 1)'));
-SELECT 'gml_version_03', ST_AsGML(21, GeomFromEWKT('SRID=4326;POINT(1 1)'));
-SELECT 'gml_version_04', ST_AsGML(-4, GeomFromEWKT('SRID=4326;POINT(1 1)'));
+SELECT 'gml_version_01', ST_AsGML(2, ST_GeomFromEWKT('SRID=4326;POINT(1 1)'));
+SELECT 'gml_version_02', ST_AsGML(3, ST_GeomFromEWKT('SRID=4326;POINT(1 1)'));
+SELECT 'gml_version_03', ST_AsGML(21, ST_GeomFromEWKT('SRID=4326;POINT(1 1)'));
+SELECT 'gml_version_04', ST_AsGML(-4, ST_GeomFromEWKT('SRID=4326;POINT(1 1)'));
 
 -- Option
-SELECT 'gml_option_01', ST_AsGML(2, GeomFromEWKT('SRID=4326;POINT(1 1)'), 0, 0);
-SELECT 'gml_option_02', ST_AsGML(3, GeomFromEWKT('SRID=4326;POINT(1 1)'), 0, 1);
-SELECT 'gml_option_03', ST_AsGML(3, GeomFromEWKT('SRID=4326;POINT(1 1)'), 0, 2);
+SELECT 'gml_option_01', ST_AsGML(2, ST_GeomFromEWKT('SRID=4326;POINT(1 2)'), 0, 0);
+SELECT 'gml_option_02', ST_AsGML(3, ST_GeomFromEWKT('SRID=4326;POINT(1 2)'), 0, 1);
+SELECT 'gml_option_03', ST_AsGML(3, ST_GeomFromEWKT('SRID=4326;POINT(1 2)'), 0, 2);
+SELECT 'gml_option_04', ST_AsGML(3, ST_GeomFromEWKT('SRID=4326;POINT(1 2)'), 0, 4);
+SELECT 'gml_option_05', ST_AsGML(3, ST_GeomFromEWKT('SRID=4326;POINT(1 2)'), 0, 16);
+SELECT 'gml_option_06', ST_AsGML(2, ST_GeomFromEWKT('SRID=4326;LINESTRING(1 2, 3 4)'), 0, 32);
+SELECT 'gml_option_07', ST_AsGML(3, ST_GeomFromEWKT('SRID=4326;LINESTRING(1 2, 3 4)'), 0, 32);
 
 -- Deegree data
-SELECT 'gml_deegree_01', ST_AsGML(3, GeomFromEWKT('SRID=4326;POINT(1 2)'), 0, 0);
-SELECT 'gml_deegree_02', ST_AsGML(2, GeomFromEWKT('SRID=4326;POINT(1 2)'), 0, 16);
-SELECT 'gml_deegree_03', ST_AsGML(3, GeomFromEWKT('SRID=4326;POINT(1 2)'), 0, 16);
-SELECT 'gml_deegree_04', ST_AsGML(3, GeomFromEWKT('SRID=4326;POINT(1 2 3)'), 0, 0);
-SELECT 'gml_deegree_05', ST_AsGML(2, GeomFromEWKT('SRID=4326;POINT(1 2 3)'), 0, 16);
-SELECT 'gml_deegree_06', ST_AsGML(3, GeomFromEWKT('SRID=4326;POINT(1 2 3)'), 0, 16);
+SELECT 'gml_deegree_01', ST_AsGML(3, ST_GeomFromEWKT('SRID=4326;POINT(1 2)'), 0, 0);
+SELECT 'gml_deegree_02', ST_AsGML(2, ST_GeomFromEWKT('SRID=4326;POINT(1 2)'), 0, 16);
+SELECT 'gml_deegree_03', ST_AsGML(3, ST_GeomFromEWKT('SRID=4326;POINT(1 2)'), 0, 16);
+SELECT 'gml_deegree_04', ST_AsGML(3, ST_GeomFromEWKT('SRID=4326;POINT(1 2 3)'), 0, 0);
+SELECT 'gml_deegree_05', ST_AsGML(2, ST_GeomFromEWKT('SRID=4326;POINT(1 2 3)'), 0, 16);
+SELECT 'gml_deegree_06', ST_AsGML(3, ST_GeomFromEWKT('SRID=4326;POINT(1 2 3)'), 0, 16);
 
 -- Prefix
-SELECT 'gml_prefix_01', ST_AsGML(2, GeomFromEWKT('SRID=4326;POINT(1 2)'), 0, 16, '');
-SELECT 'gml_prefix_02', ST_AsGML(3, GeomFromEWKT('SRID=4326;POINT(1 2)'), 0, 16, '');
-SELECT 'gml_prefix_03', ST_AsGML(2, GeomFromEWKT('SRID=4326;POINT(1 2)'), 0, 16, 'foo');
-SELECT 'gml_prefix_04', ST_AsGML(3, GeomFromEWKT('SRID=4326;POINT(1 2)'), 0, 16, 'foo');
+SELECT 'gml_prefix_01', ST_AsGML(2, ST_GeomFromEWKT('SRID=4326;POINT(1 2)'), 0, 16, '');
+SELECT 'gml_prefix_02', ST_AsGML(3, ST_GeomFromEWKT('SRID=4326;POINT(1 2)'), 0, 16, '');
+SELECT 'gml_prefix_03', ST_AsGML(2, ST_GeomFromEWKT('SRID=4326;POINT(1 2)'), 0, 16, 'foo');
+SELECT 'gml_prefix_04', ST_AsGML(3, ST_GeomFromEWKT('SRID=4326;POINT(1 2)'), 0, 16, 'foo');
 
 -- LineString
-SELECT 'gml_shortline_01', ST_AsGML(3, GeomFromEWKT('LINESTRING(1 2, 3 4)'), 0, 6, '');
-SELECT 'gml_shortline_02', ST_AsGML(3, GeomFromEWKT('LINESTRING(1 2, 3 4)'), 0, 2, '');
-SELECT 'gml_shortline_03', ST_AsGML(3, GeomFromEWKT('MULTILINESTRING((1 2, 3 4), (5 6, 7 8))'), 0, 6, '');
-SELECT 'gml_shortline_04', ST_AsGML(3, GeomFromEWKT('MULTILINESTRING((1 2, 3 4), (5 6, 7 8))'), 0, 2, '');
+SELECT 'gml_shortline_01', ST_AsGML(3, ST_GeomFromEWKT('LINESTRING(1 2, 3 4)'), 0, 6, '');
+SELECT 'gml_shortline_02', ST_AsGML(3, ST_GeomFromEWKT('LINESTRING(1 2, 3 4)'), 0, 2, '');
+SELECT 'gml_shortline_03', ST_AsGML(3, ST_GeomFromEWKT('MULTILINESTRING((1 2, 3 4), (5 6, 7 8))'), 0, 6, '');
+SELECT 'gml_shortline_04', ST_AsGML(3, ST_GeomFromEWKT('MULTILINESTRING((1 2, 3 4), (5 6, 7 8))'), 0, 2, '');
 
 -- CIRCULARSTRING / COMPOUNDCURVE / CURVEPOLYGON / MULTISURFACE / MULTICURVE
-SELECT 'gml_out_curve_01', ST_AsGML( 3, GeomFromEWKT('CIRCULARSTRING(-2 0,0 2,2 0,0 2,2 4)'));
-SELECT 'gml_out_curve_02', ST_ASGML( 3, GeomFromEWKT('COMPOUNDCURVE(CIRCULARSTRING(0 0,1 1,1 0),(1 0,0 1))'));
-SELECT 'gml_out_curve_03', ST_AsGML( 3, GeomFromEWKT('CURVEPOLYGON(CIRCULARSTRING(-2 0,-1 -1,0 0,1 -1,2 0,0 2,-2 0),(-1 0,0 0.5,1 0,0 1,-1 0))'));
-SELECT 'gml_out_curve_04', ST_AsGML( 3, GeomFromEWKT('MULTICURVE((5 5,3 5,3 3,0 3),CIRCULARSTRING(0 0,2 1,2 2))'));
-SELECT 'gml_out_curve_05', ST_AsGML( 3, GeomFromEWKT('MULTISURFACE(CURVEPOLYGON(CIRCULARSTRING(-2 0,-1 -1,0 0,1 -1,2 0,0 2,-2 0),(-1 0,0 0.5,1 0,0 1,-1 0)),((7 8,10 10,6 14,4 11,7 8)))'));
+SELECT 'gml_out_curve_01', ST_AsGML(3, ST_GeomFromEWKT('CIRCULARSTRING(-2 0,0 2,2 0,0 2,2 4)'));
+SELECT 'gml_out_curve_02', ST_ASGML(3, ST_GeomFromEWKT('COMPOUNDCURVE(CIRCULARSTRING(0 0,1 1,1 0),(1 0,0 1))'));
+SELECT 'gml_out_curve_03', ST_AsGML(3, ST_GeomFromEWKT('CURVEPOLYGON(CIRCULARSTRING(-2 0,-1 -1,0 0,1 -1,2 0,0 2,-2 0),(-1 0,0 0.5,1 0,0 1,-1 0))'));
+SELECT 'gml_out_curve_04', ST_AsGML(3, ST_GeomFromEWKT('MULTICURVE((5 5,3 5,3 3,0 3),CIRCULARSTRING(0 0,2 1,2 2))'));
+SELECT 'gml_out_curve_05', ST_AsGML(3, ST_GeomFromEWKT('MULTISURFACE(CURVEPOLYGON(CIRCULARSTRING(-2 0,-1 -1,0 0,1 -1,2 0,0 2,-2 0),(-1 0,0 0.5,1 0,0 1,-1 0)),((7 8,10 10,6 14,4 11,7 8)))'));
 
 --
 -- KML
 --
 
 -- SRID
-SELECT 'kml_srid_01', ST_AsKML(GeomFromEWKT('SRID=10;POINT(0 1)'));
-SELECT 'kml_srid_02', ST_AsKML(GeomFromEWKT('POINT(0 1)'));
+SELECT 'kml_srid_01', ST_AsKML(ST_GeomFromEWKT('SRID=10;POINT(0 1)'));
+SELECT 'kml_srid_02', ST_AsKML(ST_GeomFromEWKT('POINT(0 1)'));
 
 -- Empty Geometry
-SELECT 'kml_empty_geom', ST_AsKML(GeomFromEWKT(NULL));
+SELECT 'kml_empty_geom', ST_AsKML(ST_GeomFromEWKT(NULL));
 
 -- Precision
 SELECT 'kml_precision_01', ST_AsKML(ST_GeomFromEWKT('SRID=4326;POINT(1.1111111 1.1111111)'), -2);
 SELECT 'kml_precision_02', ST_AsKML(ST_GeomFromEWKT('SRID=4326;POINT(1.1111111 1.1111111)'), 19);
 
 -- Version
-SELECT 'kml_version_01', ST_AsKML(2, GeomFromEWKT('SRID=4326;POINT(1 1)'));
-SELECT 'kml_version_02', ST_AsKML(3, GeomFromEWKT('SRID=4326;POINT(1 1)'));
-SELECT 'kml_version_03', ST_AsKML(-4, GeomFromEWKT('SRID=4326;POINT(1 1)'));
+SELECT 'kml_version_01', ST_AsKML(2, ST_GeomFromEWKT('SRID=4326;POINT(1 1)'));
+SELECT 'kml_version_02', ST_AsKML(3, ST_GeomFromEWKT('SRID=4326;POINT(1 1)'));
+SELECT 'kml_version_03', ST_AsKML(-4, ST_GeomFromEWKT('SRID=4326;POINT(1 1)'));
 
 -- Prefix
-SELECT 'kml_prefix_01', ST_AsKML(2, GeomFromEWKT('SRID=4326;POINT(1 2)'), 0, '');
-SELECT 'kml_prefix_02', ST_AsKML(2, GeomFromEWKT('SRID=4326;POINT(1 2)'), 0, 'kml');
+SELECT 'kml_prefix_01', ST_AsKML(2, ST_GeomFromEWKT('SRID=4326;POINT(1 2)'), 0, '');
+SELECT 'kml_prefix_02', ST_AsKML(2, ST_GeomFromEWKT('SRID=4326;POINT(1 2)'), 0, 'kml');
 
 -- Projected
 -- National Astronomical Observatory of Colombia - Bogota, Colombia (Placemark)
@@ -88,76 +92,76 @@ SELECT 'kml_projection_01', ST_AsKML(ST_GeomFromEWKT('SRID=102189;POINT(1000000
 --
 -- Encoded Polyline
 --
-SELECT 'encoded_polyline_01', ST_AsEncodedPolyline(GeomFromEWKT('SRID=4326;LINESTRING(-120.2 38.5,-120.95 40.7,-126.453 43.252)'));
-SELECT 'encoded_polyline_02', ST_AsEncodedPolyline(GeomFromEWKT('SRID=4326;MULTIPOINT(-120.2 38.5,-120.95 40.7,-126.453 43.252)'));
-SELECT 'encoded_polyline_03', ST_AsEncodedPolyline(GeomFromEWKT('LINESTRING(-120.2 38.5,-120.95 40.7,-126.453 43.252)'));
-SELECT 'encoded_polyline_04', ST_AsEncodedPolyline(GeomFromEWKT('SRID=4326;LINESTRING(-120.234467 38.5,-120.95 40.7343495,-126.453 43.252)'), 6);
+SELECT 'encoded_polyline_01', ST_AsEncodedPolyline(ST_GeomFromEWKT('SRID=4326;LINESTRING(-120.2 38.5,-120.95 40.7,-126.453 43.252)'));
+SELECT 'encoded_polyline_02', ST_AsEncodedPolyline(ST_GeomFromEWKT('SRID=4326;MULTIPOINT(-120.2 38.5,-120.95 40.7,-126.453 43.252)'));
+SELECT 'encoded_polyline_03', ST_AsEncodedPolyline(ST_GeomFromEWKT('LINESTRING(-120.2 38.5,-120.95 40.7,-126.453 43.252)'));
+SELECT 'encoded_polyline_04', ST_AsEncodedPolyline(ST_GeomFromEWKT('SRID=4326;LINESTRING(-120.234467 38.5,-120.95 40.7343495,-126.453 43.252)'), 6);
 
 --
 -- SVG
 --
 
 -- Empty Geometry
-SELECT 'svg_empty_geom', ST_AsSVG(GeomFromEWKT(NULL));
+SELECT 'svg_empty_geom', ST_AsSVG(ST_GeomFromEWKT(NULL));
 
 -- Option
-SELECT 'svg_option_01', ST_AsSVG(GeomFromEWKT('LINESTRING(1 1, 4 4, 5 7)'), 0);
-SELECT 'svg_option_02', ST_AsSVG(GeomFromEWKT('LINESTRING(1 1, 4 4, 5 7)'), 1);
-SELECT 'svg_option_03', ST_AsSVG(GeomFromEWKT('LINESTRING(1 1, 4 4, 5 7)'), 0, 0);
-SELECT 'svg_option_04', ST_AsSVG(GeomFromEWKT('LINESTRING(1 1, 4 4, 5 7)'), 1, 0);
+SELECT 'svg_option_01', ST_AsSVG(ST_GeomFromEWKT('LINESTRING(1 1, 4 4, 5 7)'), 0);
+SELECT 'svg_option_02', ST_AsSVG(ST_GeomFromEWKT('LINESTRING(1 1, 4 4, 5 7)'), 1);
+SELECT 'svg_option_03', ST_AsSVG(ST_GeomFromEWKT('LINESTRING(1 1, 4 4, 5 7)'), 0, 0);
+SELECT 'svg_option_04', ST_AsSVG(ST_GeomFromEWKT('LINESTRING(1 1, 4 4, 5 7)'), 1, 0);
 
 -- Precision
-SELECT 'svg_precision_01', ST_AsSVG(GeomFromEWKT('POINT(1.1111111 1.1111111)'), 1, -2);
-SELECT 'svg_precision_02', ST_AsSVG(GeomFromEWKT('POINT(1.1111111 1.1111111)'), 1, 19);
+SELECT 'svg_precision_01', ST_AsSVG(ST_GeomFromEWKT('POINT(1.1111111 1.1111111)'), 1, -2);
+SELECT 'svg_precision_02', ST_AsSVG(ST_GeomFromEWKT('POINT(1.1111111 1.1111111)'), 1, 19);
 
 
 --
--- GeoJson
+-- GeoJSON
 --
 
 -- Empty Geometry
-SELECT 'geojson_empty_geom', ST_AsGeoJson(GeomFromEWKT(NULL));
+SELECT 'geojson_empty_geom', ST_AsGeoJSON(ST_GeomFromEWKT(NULL));
 
 -- Precision
-SELECT 'geojson_precision_01', ST_AsGeoJson(GeomFromEWKT('SRID=4326;POINT(1.1111111 1.1111111)'), -2);
-SELECT 'geojson_precision_02', ST_AsGeoJson(GeomFromEWKT('SRID=4326;POINT(1.1111111 1.1111111)'), 19);
+SELECT 'geojson_precision_01', ST_AsGeoJSON(ST_GeomFromEWKT('SRID=4326;POINT(1.1111111 1.1111111)'), -2);
+SELECT 'geojson_precision_02', ST_AsGeoJSON(ST_GeomFromEWKT('SRID=4326;POINT(1.1111111 1.1111111)'), 19);
 
 -- Version
-SELECT 'geojson_version_01', ST_AsGeoJson(1, GeomFromEWKT('SRID=4326;POINT(1 1)'));
-SELECT 'geojson_version_02', ST_AsGeoJson(21, GeomFromEWKT('SRID=4326;POINT(1 1)'));
-SELECT 'geojson_version_03', ST_AsGeoJson(-4, GeomFromEWKT('SRID=4326;POINT(1 1)'));
+SELECT 'geojson_version_01', ST_AsGeoJSON(1, ST_GeomFromEWKT('SRID=4326;POINT(1 1)'));
+SELECT 'geojson_version_02', ST_AsGeoJSON(21, ST_GeomFromEWKT('SRID=4326;POINT(1 1)'));
+SELECT 'geojson_version_03', ST_AsGeoJSON(-4, ST_GeomFromEWKT('SRID=4326;POINT(1 1)'));
 
 -- CRS
-SELECT 'geojson_crs_01', ST_AsGeoJson(GeomFromEWKT('SRID=4326;POINT(1 1)'), 0, 2);
-SELECT 'geojson_crs_02', ST_AsGeoJson(GeomFromEWKT('SRID=0;POINT(1 1)'), 0, 2);
-SELECT 'geojson_crs_03', ST_AsGeoJson(GeomFromEWKT('SRID=4326;POINT(1 1)'), 0, 4);
-SELECT 'geojson_crs_04', ST_AsGeoJson(GeomFromEWKT('SRID=0;POINT(1 1)'), 0, 4);
-SELECT 'geojson_crs_05', ST_AsGeoJson(GeomFromEWKT('SRID=1;POINT(1 1)'), 0, 2);
-SELECT 'geojson_crs_06', ST_AsGeoJson(GeomFromEWKT('SRID=1;POINT(1 1)'), 0, 4);
+SELECT 'geojson_crs_01', ST_AsGeoJSON(ST_GeomFromEWKT('SRID=4326;POINT(1 1)'), 0, 2);
+SELECT 'geojson_crs_02', ST_AsGeoJSON(ST_GeomFromEWKT('SRID=0;POINT(1 1)'), 0, 2);
+SELECT 'geojson_crs_03', ST_AsGeoJSON(ST_GeomFromEWKT('SRID=4326;POINT(1 1)'), 0, 4);
+SELECT 'geojson_crs_04', ST_AsGeoJSON(ST_GeomFromEWKT('SRID=0;POINT(1 1)'), 0, 4);
+SELECT 'geojson_crs_05', ST_AsGeoJSON(ST_GeomFromEWKT('SRID=1;POINT(1 1)'), 0, 2);
+SELECT 'geojson_crs_06', ST_AsGeoJSON(ST_GeomFromEWKT('SRID=1;POINT(1 1)'), 0, 4);
 
 -- Bbox
-SELECT 'geojson_bbox_01', ST_AsGeoJson(GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0);
-SELECT 'geojson_bbox_02', ST_AsGeoJson(GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 1);
-SELECT 'geojson_bbox_03', ST_AsGeoJson(GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 3);
-SELECT 'geojson_bbox_04', ST_AsGeoJson(GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 5);
+SELECT 'geojson_bbox_01', ST_AsGeoJSON(ST_GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0);
+SELECT 'geojson_bbox_02', ST_AsGeoJSON(ST_GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 1);
+SELECT 'geojson_bbox_03', ST_AsGeoJSON(ST_GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 3);
+SELECT 'geojson_bbox_04', ST_AsGeoJSON(ST_GeomFromEWKT('LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 5);
 
 -- CRS and Bbox
-SELECT 'geojson_options_01', ST_AsGeoJson(GeomFromEWKT('SRID=0;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 0);
-SELECT 'geojson_options_02', ST_AsGeoJson(GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0);
-SELECT 'geojson_options_03', ST_AsGeoJson(GeomFromEWKT('SRID=0;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 1);
-SELECT 'geojson_options_04', ST_AsGeoJson(GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 1);
-SELECT 'geojson_options_05', ST_AsGeoJson(GeomFromEWKT('SRID=0;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 2);
-SELECT 'geojson_options_06', ST_AsGeoJson(GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 2);
-SELECT 'geojson_options_07', ST_AsGeoJson(GeomFromEWKT('SRID=0;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 3);
-SELECT 'geojson_options_08', ST_AsGeoJson(GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 3);
-SELECT 'geojson_options_09', ST_AsGeoJson(GeomFromEWKT('SRID=0;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 4);
-SELECT 'geojson_options_10', ST_AsGeoJson(GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 4);
-SELECT 'geojson_options_11', ST_AsGeoJson(GeomFromEWKT('SRID=0;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 5);
-SELECT 'geojson_options_12', ST_AsGeoJson(GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 5);
-SELECT 'geojson_options_13', ST_AsGeoJson(GeomFromEWKT('SRID=0;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 6);
-SELECT 'geojson_options_14', ST_AsGeoJson(GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 6);
-SELECT 'geojson_options_15', ST_AsGeoJson(GeomFromEWKT('SRID=0;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 7);
-SELECT 'geojson_options_16', ST_AsGeoJson(GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 7);
+SELECT 'geojson_options_01', ST_AsGeoJSON(ST_GeomFromEWKT('SRID=0;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 0);
+SELECT 'geojson_options_02', ST_AsGeoJSON(ST_GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0);
+SELECT 'geojson_options_03', ST_AsGeoJSON(ST_GeomFromEWKT('SRID=0;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 1);
+SELECT 'geojson_options_04', ST_AsGeoJSON(ST_GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 1);
+SELECT 'geojson_options_05', ST_AsGeoJSON(ST_GeomFromEWKT('SRID=0;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 2);
+SELECT 'geojson_options_06', ST_AsGeoJSON(ST_GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 2);
+SELECT 'geojson_options_07', ST_AsGeoJSON(ST_GeomFromEWKT('SRID=0;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 3);
+SELECT 'geojson_options_08', ST_AsGeoJSON(ST_GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 3);
+SELECT 'geojson_options_09', ST_AsGeoJSON(ST_GeomFromEWKT('SRID=0;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 4);
+SELECT 'geojson_options_10', ST_AsGeoJSON(ST_GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 4);
+SELECT 'geojson_options_11', ST_AsGeoJSON(ST_GeomFromEWKT('SRID=0;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 5);
+SELECT 'geojson_options_12', ST_AsGeoJSON(ST_GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 5);
+SELECT 'geojson_options_13', ST_AsGeoJSON(ST_GeomFromEWKT('SRID=0;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 6);
+SELECT 'geojson_options_14', ST_AsGeoJSON(ST_GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 6);
+SELECT 'geojson_options_15', ST_AsGeoJSON(ST_GeomFromEWKT('SRID=0;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 7);
+SELECT 'geojson_options_16', ST_AsGeoJSON(ST_GeomFromEWKT('SRID=4326;LINESTRING(1 1, 2 2, 3 3, 4 4)'), 0, 7);
 
 -- Out and in to PostgreSQL native geometric types
 WITH p AS ( SELECT '((0,0),(0,1),(1,1),(1,0),(0,0))'::text AS p )
index f045640f17176510f867886fc7ce482ab8c96b26..adb3d0c126381ea042d17d040b65edb0989c28aa 100644 (file)
@@ -5,9 +5,13 @@ gml_version_01|<gml:Point srsName="EPSG:4326"><gml:coordinates>1,1</gml:coordina
 gml_version_02|<gml:Point srsName="EPSG:4326"><gml:pos srsDimension="2">1 1</gml:pos></gml:Point>
 ERROR:  Only GML 2 and GML 3 are supported
 ERROR:  Only GML 2 and GML 3 are supported
-gml_option_01|<gml:Point srsName="EPSG:4326"><gml:coordinates>1,1</gml:coordinates></gml:Point>
-gml_option_02|<gml:Point srsName="urn:ogc:def:crs:EPSG::4326"><gml:pos srsDimension="2">1 1</gml:pos></gml:Point>
-gml_option_03|<gml:Point srsName="EPSG:4326"><gml:pos>1 1</gml:pos></gml:Point>
+gml_option_01|<gml:Point srsName="EPSG:4326"><gml:coordinates>1,2</gml:coordinates></gml:Point>
+gml_option_02|<gml:Point srsName="urn:ogc:def:crs:EPSG::4326"><gml:pos srsDimension="2">1 2</gml:pos></gml:Point>
+gml_option_03|<gml:Point srsName="EPSG:4326"><gml:pos>1 2</gml:pos></gml:Point>
+gml_option_04|<gml:Point srsName="EPSG:4326"><gml:pos srsDimension="2">1 2</gml:pos></gml:Point>
+gml_option_05|<gml:Point srsName="EPSG:4326"><gml:pos srsDimension="2">2 1</gml:pos></gml:Point>
+gml_option_06|<gml:Box srsName="EPSG:4326"><gml:coordinates>1,2 3,4</gml:coordinates></gml:Box>
+gml_option_07|<gml:Envelope srsName="EPSG:4326" srsDimension="2"><gml:lowerCorner>1 2</gml:lowerCorner><gml:upperCorner>3 4</gml:upperCorner></gml:Envelope>
 gml_deegree_01|<gml:Point srsName="EPSG:4326"><gml:pos srsDimension="2">1 2</gml:pos></gml:Point>
 gml_deegree_02|<gml:Point srsName="EPSG:4326"><gml:coordinates>1,2</gml:coordinates></gml:Point>
 gml_deegree_03|<gml:Point srsName="EPSG:4326"><gml:pos srsDimension="2">2 1</gml:pos></gml:Point>
index 64ea589168f44b4baaae27abaa679611817eb883..ba7b431396da712d9327c0a2e4e7e8f4c644024b 100644 (file)
@@ -170,11 +170,11 @@ cb_loadTopologyByName(const LWT_BE_DATA* be, const char *name)
   static SPIPlanPtr plan = NULL;
 
   argtypes[0] = CSTRINGOID;
+  sql =
+      "SELECT id,srid,precision,null::geometry "
+      "FROM topology.topology WHERE name = $1::varchar";
   if ( ! plan ) /* prepare on first call */
   {
-    sql = "SELECT id,srid,precision,null::geometry"
-                          " FROM topology.topology "
-                          "WHERE name = $1::varchar";
     plan = SPI_prepare(sql, 1, argtypes);
     if ( ! plan )
     {