Re: [GSoC] working status - Mailing list pgsql-hackers

From Aleksander Alekseeev
Subject Re: [GSoC] working status
Date
Msg-id 20180709152210.293445f8@e733.localdomain
Whole thread Raw
In response to Re: [GSoC] working status  (Aleksander Alekseeev <a.alekseev@postgrespro.ru>)
Responses Re: [GSoC] working status
List pgsql-hackers
Hello Charles,

> > ```
> > pg_thrift.c:1313:26: error: too few arguments to function
> > ‘array_create_iterator’ ArrayIterator iter =
> > array_create_iterator(parray, 0); ^~~~~~~~~~~~~~~~~~~~~
> > In file included from pg_thrift.c:5:
> > .../postgresql-install/include/server/utils/array.h:418:22:
> > note: declared here extern ArrayIterator
> > array_create_iterator(ArrayType *arr, int slice_ndim, ArrayMetaState
> > *mstate); ^~~~~~~~~~~~~~~~~~~~~
> > ```
>
> I should probably explain this in a little more detail.
>
> This was an attempt to build pg_thrift with PostgreSQL 10 (compiled
> from REL_10_STABLE branch). Same issue with upcoming 11 version. I
> believe you are testing the extension on some 9.x branch and don't
> see these errors. Corresponding change in the API was done quite a
> long time ago, in 2015 (see commit 13dbc7a8).
>
> To solve this issue you can either use #ifdef's and maintain two
> versions of the code for different versions of PostgreSQL or just
> support only 10+. Both options are fine, at least by me personally.

And I should probably explain the "use #ifdef's" part. You can use
PG_VERSION_NUM macro to determine PostgreSQL version in this fashion:

```
/* In version 11 these macros have been changed */
#if PG_VERSION_NUM < 110000
#define PG_GETARG_JSONB_P(v) PG_GETARG_JSONB(v)
#define PG_RETURN_JSONB_P(v) PG_RETURN_JSONB(v)
#endif
```

In your case you can declare a wrapper for the array_create_iterator
procedure to make it work on both 9.x and 10.

--
Best regards,
Aleksander Alekseev


pgsql-hackers by date:

Previous
From: Aleksander Alekseeev
Date:
Subject: Re: [GSoC] working status
Next
From: Peter Eisentraut
Date:
Subject: Re: missing toast table for pg_policy