From 13db753444fe39c1d5bad5282d9a213067c17972 Mon Sep 17 00:00:00 2001
From: Paul Ramsey <pramsey@cleverelephant.ca>
Date: Fri, 6 Nov 2009 20:46:38 +0000
Subject: [PATCH] Add costs to CPU intensive C functions and update doco to
 ensure 8.3 is the referenced minimum PgSQL version. (#230)

git-svn-id: http://svn.osgeo.org/postgis/trunk@4757 b70326c6-7e19-0410-871a-916f4a2858ee
---
 README.postgis             |   2 +-
 doc/installation.xml       |   2 +-
 doc/release_notes.xml      |  33 +++++++++
 postgis/geography.sql.in.c |  12 ++--
 postgis/postgis.sql.in.c   | 139 ++++++++++++++++++++++++-------------
 5 files changed, 134 insertions(+), 54 deletions(-)

diff --git a/README.postgis b/README.postgis
index 854b15001..b7fdf6700 100644
--- a/README.postgis
+++ b/README.postgis
@@ -32,7 +32,7 @@ Directory structure:
 REQUIREMENTS
 ------------
 
-PostGIS is compatible with PostgreSQL 8.2 and above.
+PostGIS is compatible with PostgreSQL 8.3 and above.
 
 You *must* have full PostgreSQL - including server headers - installed
 for this to work. 
diff --git a/doc/installation.xml b/doc/installation.xml
index 6b51b233c..3423013cb 100644
--- a/doc/installation.xml
+++ b/doc/installation.xml
@@ -205,7 +205,7 @@ tar -xvzf postgis-&last_release_version;.tar.gz</programlisting>
 	  The PostGIS module is an extension to the PostgreSQL backend server. As
 	  such, PostGIS &last_release_version; <emphasis>requires</emphasis> full
 	  PostgreSQL server headers access in order to compile. It can be built
-	  against PostgreSQL versions 8.2.0 or higher. Earlier versions of
+	  against PostgreSQL versions 8.3 or higher. Earlier versions of
 	  PostgreSQL are <emphasis>not</emphasis> supported.
 	</para>
 
diff --git a/doc/release_notes.xml b/doc/release_notes.xml
index 9aa27ca30..3bddd4508 100644
--- a/doc/release_notes.xml
+++ b/doc/release_notes.xml
@@ -3,6 +3,39 @@
   <title>Appendix</title>
     <subtitle>Release Notes</subtitle>
 
+      <sect1>
+        <title>Release 1.5.0</title>
+        <para>Release date: 2009/12/25</para>
+        <para>This release provides support for geographic coordinates (lat/lon) via a new GEOGRAPHY type. Also performance enhancements, new input format support (GLM) and general upkeep.</para>
+  
+        <simplesect>
+          <title>API Stability</title>
+          <para>The public API of PostGIS will not change during minor (0.0.X) releases.</para>
+        </simplesect>
+
+        <simplesect>
+          <title>Compatibility</title>
+          <para>The versions below are the *minimum* requirements for PostGIS 1.5</para>
+          <para>PostgreSQL 8.3 and higher on all platforms</para>
+          <para>GEOS 3.0 and higher only</para>
+          <para>PROJ4 4.5 and higher only</para>
+        </simplesect>
+
+        <simplesect>
+          <title>New Features</title>
+          <para></para>
+        </simplesect>
+
+        <simplesect>
+          <title>Enhancements</title>
+          <para></para>
+        </simplesect>
+        <simplesect>
+          <title>Bug fixes</title>
+          <para>http://trac.osgeo.org/postgis/query?status=closed&amp;milestone=postgis+1.5.0&amp;order=priority</para>
+        </simplesect>
+      </sect1>
+      
       <sect1>
         <title>Release 1.4.0</title>
         <para>Release date: 2009/07/24</para>
diff --git a/postgis/geography.sql.in.c b/postgis/geography.sql.in.c
index 1266afd30..8199beaa3 100644
--- a/postgis/geography.sql.in.c
+++ b/postgis/geography.sql.in.c
@@ -438,7 +438,8 @@ CREATE OR REPLACE FUNCTION ST_AsGeoJson(int4, geography, int4, int4)
 CREATE OR REPLACE FUNCTION _ST_Distance(geography, geography, float8, boolean)
 	RETURNS float8
 	AS 'MODULE_PATHNAME','geography_distance'
-	LANGUAGE 'C' IMMUTABLE STRICT;
+	LANGUAGE 'C' IMMUTABLE STRICT
+	COST 100;
 
 -- Availability: 1.5.0
 CREATE OR REPLACE FUNCTION ST_Distance(geography, geography, boolean)
@@ -477,7 +478,8 @@ CREATE OR REPLACE FUNCTION ST_DWithin(geography, geography, float8)
 CREATE OR REPLACE FUNCTION ST_Area(geography, boolean)
 	RETURNS float8
 	AS 'MODULE_PATHNAME','geography_area'
-	LANGUAGE 'C' IMMUTABLE STRICT;
+	LANGUAGE 'C' IMMUTABLE STRICT
+	COST 100;
 
 -- Currently defaulting to spheroid calculations
 -- Availability: 1.5.0
@@ -490,7 +492,8 @@ CREATE OR REPLACE FUNCTION ST_Area(geography)
 CREATE OR REPLACE FUNCTION ST_Length(geography, boolean)
 	RETURNS float8
 	AS 'MODULE_PATHNAME','geography_length'
-	LANGUAGE 'C' IMMUTABLE STRICT;
+	LANGUAGE 'C' IMMUTABLE STRICT
+	COST 100;
 
 -- Availability: 1.5.0
 CREATE OR REPLACE FUNCTION ST_Length(geography)
@@ -509,7 +512,8 @@ CREATE OR REPLACE FUNCTION ST_PointOutside(geography)
 CREATE OR REPLACE FUNCTION _ST_Covers(geography, geography)
 	RETURNS boolean
 	AS 'MODULE_PATHNAME','geography_covers'
-	LANGUAGE 'C' IMMUTABLE STRICT;
+	LANGUAGE 'C' IMMUTABLE STRICT
+	COST 100;
 
 -- Only implemented for polygon-over-point
 -- Availability: 1.5.0
diff --git a/postgis/postgis.sql.in.c b/postgis/postgis.sql.in.c
index af83dca55..308b9c8be 100644
--- a/postgis/postgis.sql.in.c
+++ b/postgis/postgis.sql.in.c
@@ -1044,31 +1044,36 @@ CREATE OR REPLACE FUNCTION length3d_spheroid(geometry, spheroid)
 CREATE OR REPLACE FUNCTION ST_length3d_spheroid(geometry, spheroid)
 	RETURNS FLOAT8
 	AS 'MODULE_PATHNAME','LWGEOM_length_ellipsoid_linestring'
-	LANGUAGE 'C' IMMUTABLE STRICT;
+	LANGUAGE 'C' IMMUTABLE STRICT
+	COST 100;
 
 -- Deprecation in 1.2.3
 CREATE OR REPLACE FUNCTION length_spheroid(geometry, spheroid)
 	RETURNS FLOAT8
 	AS 'MODULE_PATHNAME','LWGEOM_length_ellipsoid_linestring'
-	LANGUAGE 'C' IMMUTABLE STRICT;
+	LANGUAGE 'C' IMMUTABLE STRICT
+	COST 100;
 
 -- Availability: 1.2.2
 CREATE OR REPLACE FUNCTION ST_length_spheroid(geometry, spheroid)
 	RETURNS FLOAT8
 	AS 'MODULE_PATHNAME','LWGEOM_length_ellipsoid_linestring'
-	LANGUAGE 'C' IMMUTABLE STRICT;
+	LANGUAGE 'C' IMMUTABLE STRICT
+	COST 100;
 
 -- Deprecation in 1.2.3
 CREATE OR REPLACE FUNCTION length2d_spheroid(geometry, spheroid)
 	RETURNS FLOAT8
 	AS 'MODULE_PATHNAME','LWGEOM_length2d_ellipsoid'
-	LANGUAGE 'C' IMMUTABLE STRICT;
+	LANGUAGE 'C' IMMUTABLE STRICT
+	COST 100;
 
 -- Availability: 1.2.2
 CREATE OR REPLACE FUNCTION ST_length2d_spheroid(geometry, spheroid)
 	RETURNS FLOAT8
 	AS 'MODULE_PATHNAME','LWGEOM_length2d_ellipsoid'
-	LANGUAGE 'C' IMMUTABLE STRICT;
+	LANGUAGE 'C' IMMUTABLE STRICT
+	COST 100;
 
 -- this is a fake (for back-compatibility)
 -- uses 3d if 3d is available, 2d otherwise
@@ -1139,38 +1144,44 @@ CREATE OR REPLACE FUNCTION ST_Area(geometry)
 CREATE OR REPLACE FUNCTION distance_spheroid(geometry,geometry,spheroid)
 	RETURNS FLOAT8
 	AS 'MODULE_PATHNAME','LWGEOM_distance_ellipsoid'
-	LANGUAGE 'C' IMMUTABLE STRICT;
+	LANGUAGE 'C' IMMUTABLE STRICT
+	COST 100;
 
 -- Availability: 1.2.2
 CREATE OR REPLACE FUNCTION ST_distance_spheroid(geometry,geometry,spheroid)
 	RETURNS FLOAT8
 	AS 'MODULE_PATHNAME','LWGEOM_distance_ellipsoid'
-	LANGUAGE 'C' IMMUTABLE STRICT;
+	LANGUAGE 'C' IMMUTABLE STRICT
+	COST 100;
 
 -- Deprecation in 1.2.3
 CREATE OR REPLACE FUNCTION distance_sphere(geometry,geometry)
 	RETURNS FLOAT8
 	AS 'MODULE_PATHNAME','LWGEOM_distance_sphere'
-	LANGUAGE 'C' IMMUTABLE STRICT;
+	LANGUAGE 'C' IMMUTABLE STRICT
+	COST 100;
 
 -- Availability: 1.2.2
 CREATE OR REPLACE FUNCTION ST_distance_sphere(geometry,geometry)
 	RETURNS FLOAT8
 	AS 'MODULE_PATHNAME','LWGEOM_distance_sphere'
-	LANGUAGE 'C' IMMUTABLE STRICT;
+	LANGUAGE 'C' IMMUTABLE STRICT
+	COST 100;
 
 -- Minimum distance. 2d only.
 -- Deprecation in 1.2.3
 CREATE OR REPLACE FUNCTION distance(geometry,geometry)
 	RETURNS float8
 	AS 'MODULE_PATHNAME', 'LWGEOM_mindistance2d'
-	LANGUAGE 'C' IMMUTABLE STRICT;
+	LANGUAGE 'C' IMMUTABLE STRICT
+	COST 100;
 
 -- PostGIS equivalent function: distance(geometry,geometry)
 CREATE OR REPLACE FUNCTION ST_Distance(geometry,geometry)
 	RETURNS float8
 	AS 'MODULE_PATHNAME', 'LWGEOM_mindistance2d'
-	LANGUAGE 'C' IMMUTABLE STRICT;
+	LANGUAGE 'C' IMMUTABLE STRICT
+	COST 100;
 
 -- Maximum distance between linestrings. 2d only. Very bogus.
 -- Deprecation in 1.2.3
@@ -1692,43 +1703,50 @@ CREATE OR REPLACE FUNCTION ST_MakePolygon(geometry)
 CREATE OR REPLACE FUNCTION BuildArea(geometry)
 	RETURNS geometry
 	AS 'MODULE_PATHNAME', 'LWGEOM_buildarea'
-	LANGUAGE 'C' IMMUTABLE STRICT;
+	LANGUAGE 'C' IMMUTABLE STRICT
+	COST 100;
 
 -- Availability: 1.2.2
 CREATE OR REPLACE FUNCTION ST_BuildArea(geometry)
 	RETURNS geometry
 	AS 'MODULE_PATHNAME', 'LWGEOM_buildarea'
-	LANGUAGE 'C' IMMUTABLE STRICT;
+	LANGUAGE 'C' IMMUTABLE STRICT
+	COST 100;
 
 -- Deprecation in 1.2.3
 CREATE OR REPLACE FUNCTION Polygonize_GArray (geometry[])
 	RETURNS geometry
 	AS 'MODULE_PATHNAME', 'polygonize_garray'
-	LANGUAGE 'C' IMMUTABLE STRICT;
+	LANGUAGE 'C' IMMUTABLE STRICT
+	COST 100;
 
--- Availability: 1.2.2
+-- Deprecation in 1.5.0
 CREATE OR REPLACE FUNCTION ST_Polygonize_GArray (geometry[])
 	RETURNS geometry
 	AS 'MODULE_PATHNAME', 'polygonize_garray'
-	LANGUAGE 'C' IMMUTABLE STRICT;
+	LANGUAGE 'C' IMMUTABLE STRICT
+	COST 100;
 
 -- Availability: 1.4.0
 CREATE OR REPLACE FUNCTION ST_Polygonize (geometry[])
 	RETURNS geometry
 	AS 'MODULE_PATHNAME', 'polygonize_garray'
-	LANGUAGE 'C' IMMUTABLE STRICT;
+	LANGUAGE 'C' IMMUTABLE STRICT
+	COST 100;
 
 -- Deprecation in 1.2.3
 CREATE OR REPLACE FUNCTION LineMerge(geometry)
 	RETURNS geometry
 	AS 'MODULE_PATHNAME', 'linemerge'
-	LANGUAGE 'C' IMMUTABLE STRICT;
+	LANGUAGE 'C' IMMUTABLE STRICT
+	COST 100;
 
 -- Availability: 1.2.2
 CREATE OR REPLACE FUNCTION ST_LineMerge(geometry)
 	RETURNS geometry
 	AS 'MODULE_PATHNAME', 'linemerge'
-	LANGUAGE 'C' IMMUTABLE STRICT;
+	LANGUAGE 'C' IMMUTABLE STRICT
+	COST 100;
 
 
 CREATE TYPE geometry_dump AS (path integer[], geom geometry);
@@ -3529,28 +3547,32 @@ CREATE OR REPLACE FUNCTION intersection(geometry,geometry)
 CREATE OR REPLACE FUNCTION ST_Intersection(geometry,geometry)
 	RETURNS geometry
 	AS 'MODULE_PATHNAME','intersection'
-	LANGUAGE 'C' IMMUTABLE STRICT;
+	LANGUAGE 'C' IMMUTABLE STRICT
+	COST 100;
 
 -- Deprecation in 1.2.3
 CREATE OR REPLACE FUNCTION buffer(geometry,float8)
 	RETURNS geometry
 	AS 'MODULE_PATHNAME','buffer'
-	LANGUAGE 'C' IMMUTABLE STRICT;
+	LANGUAGE 'C' IMMUTABLE STRICT
+	COST 100;
 
 -- PostGIS equivalent function: buffer(geometry,float8)
 CREATE OR REPLACE FUNCTION ST_Buffer(geometry,float8)
 	RETURNS geometry
 	AS 'MODULE_PATHNAME','buffer'
-	LANGUAGE 'C' IMMUTABLE STRICT;
+	LANGUAGE 'C' IMMUTABLE STRICT
+	COST 100;
 
 -- Availability: 1.5.0 - requires GEOS-3.2 or higher
-CREATE OR REPLACE FUNCTION _ST_buffer(geometry,float8,cstring)
+CREATE OR REPLACE FUNCTION _ST_Buffer(geometry,float8,cstring)
 	RETURNS geometry
 	AS 'MODULE_PATHNAME','buffer'
-	LANGUAGE 'C' IMMUTABLE STRICT;
+	LANGUAGE 'C' IMMUTABLE STRICT
+	COST 100;
 
 -- Availability: 1.2.2
-CREATE OR REPLACE FUNCTION ST_buffer(geometry,float8,integer)
+CREATE OR REPLACE FUNCTION ST_Buffer(geometry,float8,integer)
 	RETURNS geometry
 	AS $$ SELECT _ST_Buffer($1, $2,
 		CAST('quad_segs='||CAST($3 AS text) as cstring))
@@ -3577,20 +3599,23 @@ CREATE OR REPLACE FUNCTION buffer(geometry,float8,integer)
 CREATE OR REPLACE FUNCTION convexhull(geometry)
 	RETURNS geometry
 	AS 'MODULE_PATHNAME','convexhull'
-	LANGUAGE 'C' IMMUTABLE STRICT;
+	LANGUAGE 'C' IMMUTABLE STRICT
+	COST 100;
 
 -- PostGIS equivalent function: convexhull(geometry)
 CREATE OR REPLACE FUNCTION ST_ConvexHull(geometry)
 	RETURNS geometry
 	AS 'MODULE_PATHNAME','convexhull'
-	LANGUAGE 'C' IMMUTABLE STRICT;
+	LANGUAGE 'C' IMMUTABLE STRICT
+	COST 100;
 
 -- Only accepts LINESTRING as parameters.
 -- Availability: 1.4.0
 CREATE OR REPLACE FUNCTION _ST_LineCrossingDirection(geometry, geometry)
 	RETURNS integer
 	AS 'MODULE_PATHNAME', 'ST_LineCrossingDirection'
-	LANGUAGE 'C' IMMUTABLE STRICT;
+	LANGUAGE 'C' IMMUTABLE STRICT
+	COST 100;
 
 -- Availability: 1.4.0
 CREATE OR REPLACE FUNCTION ST_LineCrossingDirection(geometry, geometry)
@@ -3612,7 +3637,8 @@ CREATE OR REPLACE FUNCTION ST_LocateBetweenElevations(geometry, float8, float8)
 CREATE OR REPLACE FUNCTION ST_SimplifyPreserveTopology(geometry, float8)
 	RETURNS geometry
 	AS 'MODULE_PATHNAME','topologypreservesimplify'
-	LANGUAGE 'C' IMMUTABLE STRICT;
+	LANGUAGE 'C' IMMUTABLE STRICT
+	COST 100;
 #endif
 
 #if POSTGIS_GEOS_VERSION >= 31
@@ -3621,7 +3647,8 @@ CREATE OR REPLACE FUNCTION ST_SimplifyPreserveTopology(geometry, float8)
 CREATE OR REPLACE FUNCTION ST_IsValidReason(geometry)
 	RETURNS text
 	AS 'MODULE_PATHNAME', 'isvalidreason'
-	LANGUAGE 'C' IMMUTABLE STRICT;
+	LANGUAGE 'C' IMMUTABLE STRICT
+	COST 100;
 #endif
 
 #if POSTGIS_GEOS_VERSION >= 32
@@ -3630,7 +3657,8 @@ CREATE OR REPLACE FUNCTION ST_IsValidReason(geometry)
 CREATE OR REPLACE FUNCTION ST_HausdorffDistance(geometry, geometry)
 	RETURNS FLOAT8
 	AS 'MODULE_PATHNAME', 'hausdorffdistance'
-	LANGUAGE 'C' IMMUTABLE STRICT;
+	LANGUAGE 'C' IMMUTABLE STRICT
+	COST 100;
 #endif
 
 #if POSTGIS_GEOS_VERSION >= 32
@@ -3639,7 +3667,8 @@ CREATE OR REPLACE FUNCTION ST_HausdorffDistance(geometry, geometry)
 CREATE OR REPLACE FUNCTION ST_HausdorffDistance(geometry, geometry, float8)
 	RETURNS FLOAT8
 	AS 'MODULE_PATHNAME', 'hausdorffdistancedensify'
-	LANGUAGE 'C' IMMUTABLE STRICT;
+	LANGUAGE 'C' IMMUTABLE STRICT
+	COST 100;
 #endif
 
 -- Deprecation in 1.2.3
@@ -3950,7 +3979,8 @@ CREATE OR REPLACE FUNCTION touches(geometry,geometry)
 CREATE OR REPLACE FUNCTION _ST_Touches(geometry,geometry)
 	RETURNS boolean
 	AS 'MODULE_PATHNAME','touches'
-	LANGUAGE 'C' IMMUTABLE STRICT;
+	LANGUAGE 'C' IMMUTABLE STRICT
+	COST 100;
 
 -- Availability: 1.2.2
 -- Inlines index magic
@@ -3963,7 +3993,8 @@ CREATE OR REPLACE FUNCTION ST_Touches(geometry,geometry)
 CREATE OR REPLACE FUNCTION _ST_DWithin(geometry,geometry,float8)
 	RETURNS boolean
 	AS 'MODULE_PATHNAME', 'LWGEOM_dwithin'
-	LANGUAGE 'C' IMMUTABLE STRICT;
+	LANGUAGE 'C' IMMUTABLE STRICT
+	COST 100;
 
 -- Availability: 1.2.2
 CREATE OR REPLACE FUNCTION ST_DWithin(geometry, geometry, float8)
@@ -3981,7 +4012,8 @@ CREATE OR REPLACE FUNCTION intersects(geometry,geometry)
 CREATE OR REPLACE FUNCTION _ST_Intersects(geometry,geometry)
 	RETURNS boolean
 	AS 'MODULE_PATHNAME','intersects'
-	LANGUAGE 'C' IMMUTABLE STRICT;
+	LANGUAGE 'C' IMMUTABLE STRICT
+	COST 100;
 
 -- Availability: 1.2.2
 -- Inlines index magic
@@ -4000,7 +4032,8 @@ CREATE OR REPLACE FUNCTION crosses(geometry,geometry)
 CREATE OR REPLACE FUNCTION _ST_Crosses(geometry,geometry)
 	RETURNS boolean
 	AS 'MODULE_PATHNAME','crosses'
-	LANGUAGE 'C' IMMUTABLE STRICT;
+	LANGUAGE 'C' IMMUTABLE STRICT
+	COST 100;
 
 -- Availability: 1.2.2
 -- Inlines index magic
@@ -4019,7 +4052,8 @@ CREATE OR REPLACE FUNCTION within(geometry,geometry)
 CREATE OR REPLACE FUNCTION _ST_Within(geometry,geometry)
 	RETURNS boolean
 	AS 'MODULE_PATHNAME','within'
-	LANGUAGE 'C' IMMUTABLE STRICT;
+	LANGUAGE 'C' IMMUTABLE STRICT
+	COST 100;
 
 -- Availability: 1.2.2
 -- Inlines index magic
@@ -4038,7 +4072,8 @@ CREATE OR REPLACE FUNCTION Contains(geometry,geometry)
 CREATE OR REPLACE FUNCTION _ST_Contains(geometry,geometry)
 	RETURNS boolean
 	AS 'MODULE_PATHNAME','contains'
-	LANGUAGE 'C' IMMUTABLE STRICT;
+	LANGUAGE 'C' IMMUTABLE STRICT
+	COST 100;
 
 -- Availability: 1.2.2
 -- Inlines index magic
@@ -4052,7 +4087,8 @@ CREATE OR REPLACE FUNCTION ST_Contains(geometry,geometry)
 CREATE OR REPLACE FUNCTION _ST_CoveredBy(geometry,geometry)
 	RETURNS boolean
 	AS 'MODULE_PATHNAME', 'coveredby'
-	LANGUAGE 'C' IMMUTABLE STRICT;
+	LANGUAGE 'C' IMMUTABLE STRICT
+	COST 100;
 
 -- Availability: 1.2.2
 CREATE OR REPLACE FUNCTION ST_CoveredBy(geometry,geometry)
@@ -4064,7 +4100,8 @@ CREATE OR REPLACE FUNCTION ST_CoveredBy(geometry,geometry)
 CREATE OR REPLACE FUNCTION _ST_Covers(geometry,geometry)
 	RETURNS boolean
 	AS 'MODULE_PATHNAME', 'covers'
-	LANGUAGE 'C' IMMUTABLE STRICT;
+	LANGUAGE 'C' IMMUTABLE STRICT
+	COST 100;
 
 -- Availability: 1.2.2
 -- Inlines index magic
@@ -4079,7 +4116,8 @@ CREATE OR REPLACE FUNCTION ST_Covers(geometry,geometry)
 CREATE OR REPLACE FUNCTION _ST_ContainsProperly(geometry,geometry)
 	RETURNS boolean
 	AS 'MODULE_PATHNAME','containsproperly'
-	LANGUAGE 'C' IMMUTABLE STRICT;
+	LANGUAGE 'C' IMMUTABLE STRICT
+	COST 100;
 
 -- Availability: 1.4.0
 -- Inlines index magic
@@ -4099,7 +4137,8 @@ CREATE OR REPLACE FUNCTION overlaps(geometry,geometry)
 CREATE OR REPLACE FUNCTION _ST_Overlaps(geometry,geometry)
 	RETURNS boolean
 	AS 'MODULE_PATHNAME','overlaps'
-	LANGUAGE 'C' IMMUTABLE STRICT;
+	LANGUAGE 'C' IMMUTABLE STRICT
+	COST 100;
 
 -- Availability: 1.2.2
 -- Inlines index magic
@@ -4112,27 +4151,29 @@ CREATE OR REPLACE FUNCTION ST_Overlaps(geometry,geometry)
 CREATE OR REPLACE FUNCTION IsValid(geometry)
 	RETURNS boolean
 	AS 'MODULE_PATHNAME', 'isvalid'
-	LANGUAGE 'C' IMMUTABLE STRICT;
+	LANGUAGE 'C' IMMUTABLE STRICT
+	COST 100;
 
 -- PostGIS equivalent function: IsValid(geometry)
 -- TODO: change null returns to true
 CREATE OR REPLACE FUNCTION ST_IsValid(geometry)
 	RETURNS boolean
 	AS 'MODULE_PATHNAME', 'isvalid'
-	LANGUAGE 'C' IMMUTABLE STRICT;
+	LANGUAGE 'C' IMMUTABLE STRICT
+	COST 100;
 
 -- This is also available w/out GEOS
 CREATE OR REPLACE FUNCTION Centroid(geometry)
 	RETURNS geometry
 	AS 'MODULE_PATHNAME'
 	LANGUAGE 'C' IMMUTABLE STRICT;
-
+	
 -- PostGIS equivalent function: Centroid(geometry)
 CREATE OR REPLACE FUNCTION ST_Centroid(geometry)
 	RETURNS geometry
 	AS 'MODULE_PATHNAME', 'centroid'
 	LANGUAGE 'C' IMMUTABLE STRICT;
-
+	
 -- Deprecation in 1.2.3
 CREATE OR REPLACE FUNCTION IsRing(geometry)
 	RETURNS boolean
@@ -4155,7 +4196,8 @@ CREATE OR REPLACE FUNCTION PointOnSurface(geometry)
 CREATE OR REPLACE FUNCTION ST_PointOnSurface(geometry)
 	RETURNS geometry
 	AS 'MODULE_PATHNAME', 'pointonsurface'
-	LANGUAGE 'C' IMMUTABLE STRICT;
+	LANGUAGE 'C' IMMUTABLE STRICT
+	COST 100;
 
 -- Deprecation in 1.2.3
 CREATE OR REPLACE FUNCTION IsSimple(geometry)
@@ -4179,7 +4221,8 @@ CREATE OR REPLACE FUNCTION Equals(geometry,geometry)
 CREATE OR REPLACE FUNCTION ST_Equals(geometry,geometry)
 	RETURNS boolean
 	AS 'MODULE_PATHNAME','geomequals'
-	LANGUAGE 'C' IMMUTABLE STRICT;
+	LANGUAGE 'C' IMMUTABLE STRICT
+	COST 100;
 
 
 #if HAVE_LIBXML2
-- 
2.40.0