[postgis-devel] Re: PostgreSQL HEAD array changes
strk at refractions.net
strk at refractions.net
Fri Nov 25 08:17:00 PST 2005
I've committed a slightly modified version of
your patch, using ARR_OVERHEAD_NONULL() in code
and redefining it to ARR_OVERHEAD() for pgsql < 82.
Also I cleaned up some includes as rtree.h seems
to have disappeared or changed location.
Could you please try (the head branch) ?
I haven't run putting this in 1.0.5 as we'll probably
release before it's out.
--strk;
On Fri, Nov 18, 2005 at 06:40:21PM -0700, Michael Fuhr wrote:
> On Thu, Nov 17, 2005 at 05:55:23PM -0700, Michael Fuhr wrote:
> > A change was recently committed to PostgreSQL HEAD (8.2devel) that
> > affects arrays; among other things it removes the ARR_OVERHEAD macro
> > that PostGIS uses.
>
> More on this: to run under the latest PostgreSQL HEAD (8.2devel),
> PostGIS needs to do a couple of things (conditionally starting with
> PostgreSQL 8.2):
>
> * Use ARR_OVERHEAD_NONULLS instead of ARR_OVERHEAD. Otherwise
> the compiler raises an "implicit declaration of function `ARR_OVERHEAD'"
> warning and the runtime linker fails to load liblwgeom.so with
> an error like "symbol ARR_OVERHEAD: referenced symbol not found."
>
> * Set an array structure's dataoffset field to 0 to indicate
> that the array doesn't contain NULLs. Otherwise a segfault
> might result.
>
> I've attached a patch to PostGIS HEAD that shows these changes; the
> same changes should probably be applied to the 1.0 branch. Defining
> ARR_OVERHEAD(x) as ARR_OVERHEAD_NONULLS(x) might not be the best
> decision, but at least the patch shows what needs to change to get
> PostGIS working under PostgreSQL HEAD. I leave it to better
> programmers than myself to decide what's best :-)
>
> The version-determining code in Makefile.config.in could probably
> use some restructuring -- it keeps creeping to the right with every
> new version of PostgreSQL.
>
> --
> Michael Fuhr
> Index: Makefile.config.in
> ===================================================================
> RCS file: /home/cvs/postgis/postgis/Makefile.config.in,v
> retrieving revision 1.21
> diff -c -r1.21 Makefile.config.in
> *** Makefile.config.in 1 Nov 2005 17:11:20 -0000 1.21
> --- Makefile.config.in 19 Nov 2005 01:21:14 -0000
> ***************
> *** 165,171 ****
> ifneq ($(findstring 8.0,$(VERSION)),)
> USE_VERSION=80
> else
> ! USE_VERSION=81
> endif
> endif
> endif
> --- 165,175 ----
> ifneq ($(findstring 8.0,$(VERSION)),)
> USE_VERSION=80
> else
> ! ifneq ($(findstring 8.1,$(VERSION)),)
> ! USE_VERSION=81
> ! else
> ! USE_VERSION=82
> ! endif
> endif
> endif
> endif
> Index: lwgeom/lwgeom_functions_basic.c
> ===================================================================
> RCS file: /home/cvs/postgis/postgis/lwgeom/lwgeom_functions_basic.c,v
> retrieving revision 1.125
> diff -c -r1.125 lwgeom_functions_basic.c
> *** lwgeom/lwgeom_functions_basic.c 18 Nov 2005 10:16:21 -0000 1.125
> --- lwgeom/lwgeom_functions_basic.c 19 Nov 2005 01:21:15 -0000
> ***************
> *** 15,20 ****
> --- 15,24 ----
> #include "profile.h"
> #include "wktparse.h"
>
> + #if USE_VERSION >= 82
> + # define ARR_OVERHEAD(x) ARR_OVERHEAD_NONULLS(x)
> + #endif
> +
> //#define PGIS_DEBUG 1
>
> Datum LWGEOM_mem_size(PG_FUNCTION_ARGS);
> ***************
> *** 2119,2124 ****
> --- 2123,2131 ----
> #if USE_VERSION > 72
> result->elemtype = oid;
> #endif
> + #if USE_VERSION >= 82
> + result->dataoffset = 0;
> + #endif
> memcpy(ARR_DIMS(result), &nelems, sizeof(int));
> memcpy(ARR_LBOUND(result), &lbs, sizeof(int));
> memcpy(ARR_DATA_PTR(result), geom, geom->size);
> _______________________________________________
> postgis-devel mailing list
> postgis-devel at postgis.refractions.net
> http://postgis.refractions.net/mailman/listinfo/postgis-devel
--
/"\ ASCII Ribbon Campaign
\ / Respect for open standards
X No HTML/RTF in email
/ \ No M$ Word docs in email
More information about the postgis-devel
mailing list