failed to compile a C++ SPI function

Started by Louis-David Mitterrandover 25 years ago4 messageshackers
Jump to latest
#1Louis-David Mitterrand
cunctator@apartia.ch

Just for fun I changed the extension of my SPI function and trigger
source file from .c to .C and tried to compile it:

g++ -g -Wall -I /usr/include/postgresql -fPIC -pedantic -c -o bid_control.o bid_control.C
In file included from /usr/include/postgresql/nodes/relation.h:18,
from /usr/include/postgresql/executor/spi.h:18,
from bid_control.h:31,
from bid_control.C:21:
/usr/include/postgresql/nodes/parsenodes.h:871: parse error before `typename'

It seems the "typename" word used in the following structure is a
reserved word in C++. (and is appears colored like a type in Vim)

/*
* ParamNo - specifies a parameter reference
*/
typedef struct ParamNo
{
NodeTag type;
int number; /* the number of the parameter */
TypeName *typename; /* the typecast */

^^^^^^^^^

List *indirection; /* array references */
} ParamNo;

Is it totally unreasonable try C++ in SPI programming?

Cheers,

--
Louis-David Mitterrand - ldm@apartia.org - http://www.apartia.org

Isn't vi that text editor with two modes... one that beeps and one
that corrupts your file?" -- Dan Jocabson, on comp.os.linux.advocacy

#2Bruce Momjian
bruce@momjian.us
In reply to: Louis-David Mitterrand (#1)
Re: failed to compile a C++ SPI function

I am willing to change it to typname. Any comments?

Just for fun I changed the extension of my SPI function and trigger
source file from .c to .C and tried to compile it:

g++ -g -Wall -I /usr/include/postgresql -fPIC -pedantic -c -o bid_control.o bid_control.C
In file included from /usr/include/postgresql/nodes/relation.h:18,
from /usr/include/postgresql/executor/spi.h:18,
from bid_control.h:31,
from bid_control.C:21:
/usr/include/postgresql/nodes/parsenodes.h:871: parse error before `typename'

It seems the "typename" word used in the following structure is a
reserved word in C++. (and is appears colored like a type in Vim)

/*
* ParamNo - specifies a parameter reference
*/
typedef struct ParamNo
{
NodeTag type;
int number; /* the number of the parameter */
TypeName *typename; /* the typecast */

^^^^^^^^^

List *indirection; /* array references */
} ParamNo;

Is it totally unreasonable try C++ in SPI programming?

Cheers,

--
Louis-David Mitterrand - ldm@apartia.org - http://www.apartia.org

Isn't vi that text editor with two modes... one that beeps and one
that corrupts your file?" -- Dan Jocabson, on comp.os.linux.advocacy

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026
#3Tom Lane
tgl@sss.pgh.pa.us
In reply to: Bruce Momjian (#2)
Re: failed to compile a C++ SPI function

Bruce Momjian <pgman@candle.pha.pa.us> writes:

I am willing to change it to typname. Any comments?

That's hardly the only change you will have to make to get the headers
to pass through a C++ compiler without complaint. How many existing
applications do you want to risk breaking?

ParamNo probably isn't a widely used node type, but there are four
structs with fields named 'typename' and one with a field named 'class'
just in parsenodes.h.

I think that before we start making changes with C++ cleanness as a
goal, we should try to get a precise idea of the extent of the changes
that would be needed, and then estimate how much user code might
reference the fields we'd need to rename.

regards, tom lane

#4Bruce Momjian
bruce@momjian.us
In reply to: Tom Lane (#3)
Re: failed to compile a C++ SPI function

Bruce Momjian <pgman@candle.pha.pa.us> writes:

I am willing to change it to typname. Any comments?

That's hardly the only change you will have to make to get the headers
to pass through a C++ compiler without complaint. How many existing
applications do you want to risk breaking?

ParamNo probably isn't a widely used node type, but there are four
structs with fields named 'typename' and one with a field named 'class'
just in parsenodes.h.

I think that before we start making changes with C++ cleanness as a
goal, we should try to get a precise idea of the extent of the changes
that would be needed, and then estimate how much user code might
reference the fields we'd need to rename.

Agreed.

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026