pg.ddx.io  pgsql-general@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Тарасов Георгий Витальевич <Tarasov-G@gaz-is.ru>
To: pgsql-general@postgresql.org <pgsql-general@postgresql.org>
Subject: compiling PL/pgSQL plugin with C++
Date: Thu, 30 May 2019 15:14:01 +0000
Message-ID: <b517ec3918d645eb950505eac8dd434e@gaz-is.ru> (raw)

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

Attachments:

rename-args-looks-like-cpp-keywords.patch (application/octet-stream, 3.6K) download diff --git a/src/pl/plpgsql/src/pl_comp.c b/src/pl/plpgsql/src/pl_comp.c index 59460d2643..85721bf735 100644 --- a/src/pl/plpgsql/src/pl_comp.c +++ b/src/pl/plpgsql/src/pl_comp.c @@ -2203,7 +2203,7 @@ plpgsql_start_datums(void) * ---------- */ void -plpgsql_adddatum(PLpgSQL_datum *new) +plpgsql_adddatum(PLpgSQL_datum *dobj) { if (plpgsql_nDatums == datums_alloc) { @@ -2211,8 +2211,8 @@ plpgsql_adddatum(PLpgSQL_datum *new) plpgsql_Datums = repalloc(plpgsql_Datums, sizeof(PLpgSQL_datum *) * datums_alloc); } - new->dno = plpgsql_nDatums; - plpgsql_Datums[plpgsql_nDatums++] = new; + dobj->dno = plpgsql_nDatums; + plpgsql_Datums[plpgsql_nDatums++] = dobj; } /* ---------- diff --git a/src/pl/plpgsql/src/pl_exec.c b/src/pl/plpgsql/src/pl_exec.c index 8f8f7efe44..eff434658d 100644 --- a/src/pl/plpgsql/src/pl_exec.c +++ b/src/pl/plpgsql/src/pl_exec.c @@ -5556,7 +5556,7 @@ plpgsql_exec_get_datum_type(PLpgSQL_execstate *estate, void plpgsql_exec_get_datum_type_info(PLpgSQL_execstate *estate, PLpgSQL_datum *datum, - Oid *typeid, int32 *typmod, Oid *collation) + Oid *typoid, int32 *typmod, Oid *collation) { switch (datum->dtype) { @@ -5565,7 +5565,7 @@ plpgsql_exec_get_datum_type_info(PLpgSQL_execstate *estate, { PLpgSQL_var *var = (PLpgSQL_var *) datum; - *typeid = var->datatype->typoid; + *typoid = var->datatype->typoid; *typmod = var->datatype->atttypmod; *collation = var->datatype->collation; break; @@ -5578,13 +5578,13 @@ plpgsql_exec_get_datum_type_info(PLpgSQL_execstate *estate, if (rec->erh == NULL || rec->rectypeid != RECORDOID) { /* Report variable's declared type */ - *typeid = rec->rectypeid; + *typoid = rec->rectypeid; *typmod = -1; } else { /* Report record's actual type if declared RECORD */ - *typeid = rec->erh->er_typeid; + *typoid = rec->erh->er_typeid; /* do NOT return the mutable typmod of a RECORD variable */ *typmod = -1; } @@ -5624,7 +5624,7 @@ plpgsql_exec_get_datum_type_info(PLpgSQL_execstate *estate, recfield->rectupledescid = rec->erh->er_tupdesc_id; } - *typeid = recfield->finfo.ftypeid; + *typoid = recfield->finfo.ftypeid; *typmod = recfield->finfo.ftypmod; *collation = recfield->finfo.fcollation; break; @@ -5632,7 +5632,7 @@ plpgsql_exec_get_datum_type_info(PLpgSQL_execstate *estate, default: elog(ERROR, "unrecognized dtype: %d", datum->dtype); - *typeid = InvalidOid; /* keep compiler quiet */ + *typoid = InvalidOid; /* keep compiler quiet */ *typmod = -1; *collation = InvalidOid; break; diff --git a/src/pl/plpgsql/src/plpgsql.h b/src/pl/plpgsql/src/plpgsql.h index fb9fcb55f5..82b2950294 100644 --- a/src/pl/plpgsql/src/plpgsql.h +++ b/src/pl/plpgsql/src/plpgsql.h @@ -1198,7 +1198,7 @@ extern PLpgSQL_recfield *plpgsql_build_recfield(PLpgSQL_rec *rec, extern int plpgsql_recognize_err_condition(const char *condname, bool allow_sqlstate); extern PLpgSQL_condition *plpgsql_parse_err_condition(char *condname); -extern void plpgsql_adddatum(PLpgSQL_datum *new); +extern void plpgsql_adddatum(PLpgSQL_datum *dobj); extern int plpgsql_add_initdatums(int **varnos); extern void plpgsql_HashTableInit(void); @@ -1225,7 +1225,7 @@ extern Oid plpgsql_exec_get_datum_type(PLpgSQL_execstate *estate, PLpgSQL_datum *datum); extern void plpgsql_exec_get_datum_type_info(PLpgSQL_execstate *estate, PLpgSQL_datum *datum, - Oid *typeid, int32 *typmod, Oid *collation); + Oid *typoid, int32 *typmod, Oid *collation); /* * Functions for namespace handling in pl_funcs.c

view thread (4+ messages)  latest in thread

Message-ID: <b517ec3918d645eb950505eac8dd434e@gaz-is.ru>
Permalink:  ../b517ec3918d645eb950505eac8dd434e@gaz-is.ru/
Also on:    postgresql.org/message-id/b517ec3918d645eb950505eac8dd434e@gaz-is.ru

 ·  · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-general@postgresql.org
  Cc: Tarasov-G@gaz-is.ru
  Subject: Re: compiling PL/pgSQL plugin with C++
  In-Reply-To: <b517ec3918d645eb950505eac8dd434e@gaz-is.ru>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox