[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