compiling PL/pgSQL plugin with C++

Тарасов Георгий Витальевич <tarasov-g@gaz-is.ru>

From: Тарасов Георгий Витальевич <Tarasov-G@gaz-is.ru>
To: "pgsql-general@postgresql.org" <pgsql-general@postgresql.org>
Date: 2019-05-30T15:14:01Z
Lists: pgsql-hackers, pgsql-general

Attachments

Dear all,

I'm working on development of some PL/pgSQL plugin.
The smaller part of my code is written on C.
It's a standard extension code for integration with fmgr (_PG_init ...)

But bigger part of the code is written on C++. 
And here I need declarations of internal PL/pgSQL structs from plpgsql.h

Direct include of this file to my C++ code results in the following errors:


/opt/pgsql-11/include/server/plpgsql.h:1201:45: ошибка: expected <,> or <...> before <new>
 extern void plpgsql_adddatum(PLpgSQL_datum *new);
                                             ^
/opt/pgsql-11/include/server/plpgsql.h:1228:15: ошибка: expected <,> or <...> before <typeid>
          Oid *typeid, int32 *typmod, Oid *collation);
               ^

It's obviously that this code can't be compiled with C++ because the
C++ keywords are used as an identifiers. I modified plpgsql.h.
So, please advise does the renaming is the right step in this situation??

All my modifications are in the attached patch.
Corrections are made also in C-files (pl_comp.c and pl_exec.c), where the function definitions are 
located, but this is not necessarily.

George

Commits

  1. Improve coverage of cpluspluscheck.

  2. Fix C++ incompatibilities in ecpg/preproc/ header files.

  3. Fix C++ incompatibilities in plpgsql's header files.

  4. Fix assorted header files that failed to compile standalone.

  5. Make our perfect hash functions be valid C++.