[postgis-commits] svn - r2761 - trunk/lwgeom

postgis-commits at postgis.refractions.net postgis-commits at postgis.refractions.net
Wed Apr 9 23:40:33 PDT 2008


Author: mcayland
Date: 2008-04-09 23:40:33 -0700 (Wed, 09 Apr 2008)
New Revision: 2761

Modified:
   trunk/lwgeom/lwgeom_estimate.c
   trunk/lwgeom/lwgeom_functions_basic.c
   trunk/lwgeom/lwgeom_geos_c.c
   trunk/lwgeom/lwgeom_jts.c
Log:
Another round of PostgreSQL 8.3 fixes, this time related to arrays. Make sure that we use the supplied ArrayType pointer macros, instead of attempting to access to cast directly to ArrayType. This resolved GBT#13 where a "corrupted histogram" error is thrown when using using ST_EstimatedExtent() under 8.3.

Modified: trunk/lwgeom/lwgeom_estimate.c
===================================================================
--- trunk/lwgeom/lwgeom_estimate.c	2008-04-09 19:52:19 UTC (rev 2760)
+++ trunk/lwgeom/lwgeom_estimate.c	2008-04-10 06:40:33 UTC (rev 2761)
@@ -21,6 +21,7 @@
 #include "executor/spi.h"
 #include "fmgr.h"
 #include "parser/parsetree.h"
+#include "utils/array.h"
 
 #include "liblwgeom.h"
 #include "lwgeom_pg.h"
@@ -2579,7 +2580,7 @@
 	tuptable = SPI_tuptable;
 	tupdesc = SPI_tuptable->tupdesc;
 	tuple = tuptable->vals[0];
-	array = (ArrayType *)SPI_getbinval(tuple, tupdesc, 1, &isnull);
+	array = DatumGetArrayTypeP(SPI_getbinval(tuple, tupdesc, 1, &isnull));
 	if (isnull)
 	{
 		SPI_finish();

Modified: trunk/lwgeom/lwgeom_functions_basic.c
===================================================================
--- trunk/lwgeom/lwgeom_functions_basic.c	2008-04-09 19:52:19 UTC (rev 2760)
+++ trunk/lwgeom/lwgeom_functions_basic.c	2008-04-10 06:40:33 UTC (rev 2761)
@@ -1879,7 +1879,7 @@
 		elog(NOTICE, "geom_accum: NULL array");
 #endif
 	} else {
-		array = (ArrayType *) PG_DETOAST_DATUM_COPY(datum);
+		array = DatumGetArrayTypePCopy(datum);
 		/*array = PG_GETARG_ARRAYTYPE_P(0); */
 		nelems = ArrayGetNItems(ARR_NDIM(array), ARR_DIMS(array));
 #ifdef PGIS_DEBUG
@@ -2021,7 +2021,7 @@
 	}
 
 	/* Get actual ArrayType */
-	array = (ArrayType *) PG_DETOAST_DATUM(datum);
+	array = DatumGetArrayTypeP(datum);
 
 #ifdef PGIS_DEBUG
 	elog(NOTICE, " array is %d-bytes in size, %ld w/out header",
@@ -2217,7 +2217,7 @@
 	}
 
 	/* Get actual ArrayType */
-	array = (ArrayType *) PG_DETOAST_DATUM(datum);
+	array = DatumGetArrayTypeP(datum);
 
 #ifdef PGIS_DEBUG
 	elog(NOTICE, "LWGEOM_makeline_garray: array detoasted");
@@ -2377,7 +2377,7 @@
 	/* Get input holes if any */
 	if ( PG_NARGS() > 1 )
 	{
-		array = (ArrayType *) PG_DETOAST_DATUM(PG_GETARG_DATUM(1));
+		array = PG_GETARG_ARRAYTYPE_P(1);
 		nholes = ArrayGetNItems(ARR_NDIM(array), ARR_DIMS(array));
 		holes = lwalloc(sizeof(LWLINE *)*nholes);
 		for (i=0; i<nholes; i++)

Modified: trunk/lwgeom/lwgeom_geos_c.c
===================================================================
--- trunk/lwgeom/lwgeom_geos_c.c	2008-04-09 19:52:19 UTC (rev 2760)
+++ trunk/lwgeom/lwgeom_geos_c.c	2008-04-10 06:40:33 UTC (rev 2761)
@@ -133,7 +133,7 @@
 	/* Null array, null geometry (should be empty?) */
 	if ( (Pointer *)datum == NULL ) PG_RETURN_NULL();
 
-	array = (ArrayType *) PG_DETOAST_DATUM(datum);
+	array = DatumGetArrayTypeP(datum);
 
 	nelems = ArrayGetNItems(ARR_NDIM(array), ARR_DIMS(array));
 
@@ -249,7 +249,7 @@
 	/* Null array, null geometry (should be empty?) */
 	if ( (Pointer *)datum == NULL ) PG_RETURN_NULL();
 
-	array = (ArrayType *) PG_DETOAST_DATUM(datum);
+	array = DatumGetArrayTypeP(datum);
 
 	nelems = ArrayGetNItems(ARR_NDIM(array), ARR_DIMS(array));
 
@@ -3362,7 +3362,7 @@
 	/* Null array, null geometry (should be empty?) */
 	if ( (Pointer *)datum == NULL ) PG_RETURN_NULL();
 
-	array = (ArrayType *) PG_DETOAST_DATUM(datum);
+	array = DatumGetArrayTypeP(datum);
 
 	nelems = ArrayGetNItems(ARR_NDIM(array), ARR_DIMS(array));
 

Modified: trunk/lwgeom/lwgeom_jts.c
===================================================================
--- trunk/lwgeom/lwgeom_jts.c	2008-04-09 19:52:19 UTC (rev 2760)
+++ trunk/lwgeom/lwgeom_jts.c	2008-04-10 06:40:33 UTC (rev 2761)
@@ -186,7 +186,7 @@
 	/* Null array, null geometry (should be empty?) */
 	if ( (Pointer *)datum == NULL ) PG_RETURN_NULL();
 
-	array = (ArrayType *) PG_DETOAST_DATUM(datum);
+	array = DatumGetArrayTypeP(datum);
 
 	nelems = ArrayGetNItems(ARR_NDIM(array), ARR_DIMS(array));
 
@@ -335,7 +335,7 @@
 	/* Null array, null geometry (should be empty?) */
 	if ( (Pointer *)datum == NULL ) PG_RETURN_NULL();
 
-	array = (ArrayType *) PG_DETOAST_DATUM(datum);
+	array = DatumGetArrayTypeP(datum);
 
 	nelems = ArrayGetNItems(ARR_NDIM(array), ARR_DIMS(array));
 
@@ -3038,7 +3038,7 @@
 	/* Null array, null geometry (should be empty?) */
 	if ( (Pointer *)datum == NULL ) PG_RETURN_NULL();
 
-	array = (ArrayType *) PG_DETOAST_DATUM(datum);
+	array = DatumGetArrayTypeP(datum);
 
 	nelems = ArrayGetNItems(ARR_NDIM(array), ARR_DIMS(array));
 



More information about the postgis-commits mailing list