Receive a string in Composite-type Arguments

Started by Fabiana Ziotiover 8 years ago3 messagesgeneral
Jump to latest
#1Fabiana Zioti
fabi_zioti@hotmail.com

Hi!

I am studying how to program extensions for PostgreSQL in C language.

In the example to return to return Composite-type Arguments, from the PostgreSQL 9.6 documentation, I could not make the cash from a cstring to the HeapTupleHeader type.

That is, instead of the function receive as a parameter a table:

CREATE FUNCTION c_overpaid (emp, integer) RETURNS boolean
AS DIRECTORY

SELECT name, c_overpaid (emp, 1500) AS overpaid
From emp
WHERE name = 'Bill' OR name = 'Sam';

And in the code in C receive the argument as:

HeapTupleHeader t = PG_GETARG_HEAPTUPLEHEADER (0);

The sql function would be defined as:

CREATE FUNCTION c_overpaid (cstring, integer) RETURNS boolean
AS 'DIRECTORY / funcs', 'c_overpaid'
LANGUAGE C STRICT;

But how would I receive this argument, for example:
Char * str = PG_GETARG_CSTRING (0),

And do the conversion to the HeapTupleHeader type?

What do you guys suggest?

Thanks in advance

#2Achilleas Mantzios
achill@matrix.gatewaynet.com
In reply to: Fabiana Zioti (#1)
Re: Receive a string in Composite-type Arguments

On 11/08/2017 16:09, Fabiana Zioti wrote:

Hi!

I am studying how to program extensions for PostgreSQL in C language.

In the example to return to return Composite-type Arguments, from the PostgreSQL 9.6 documentation, I could not make the cash from a cstring to the HeapTupleHeader type.

That is, instead of the function receive as a parameter a table:

CREATE FUNCTION c_overpaid (emp, integer) RETURNS boolean
AS DIRECTORY

SELECT name, c_overpaid (emp, 1500) AS overpaid
From emp
WHERE name = 'Bill' OR name = 'Sam';

And in the code in C receive the argument as:

HeapTupleHeader t = PG_GETARG_HEAPTUPLEHEADER (0);

The sql function would be defined as:

CREATE FUNCTION c_overpaid (cstring, integer) RETURNS boolean
AS 'DIRECTORY / funcs', 'c_overpaid'
LANGUAGE C STRICT;

But how would I receive this argument, for example:
Char * str = PG_GETARG_CSTRING (0),

And do the conversion to the HeapTupleHeader type?

Why do you want to convert this to HeapTupleHeader since this is *not* a tuple but a string value? What do you want to achieve? IMHO you better start with simpler examples, make them run, and proceed
as you understand more and more.

What do you guys suggest?

Thanks in advance

--
Achilleas Mantzios
IT DEV Lead
IT DEPT
Dynacom Tankers Mgmt

#3Pavel Stehule
pavel.stehule@gmail.com
In reply to: Achilleas Mantzios (#2)
Re: Receive a string in Composite-type Arguments

2017-08-11 16:39 GMT+02:00 Achilleas Mantzios <achill@matrix.gatewaynet.com>
:

On 11/08/2017 16:09, Fabiana Zioti wrote:

Hi!

I am studying how to program extensions for PostgreSQL in C language.

In the example to return to return Composite-type Arguments, from the
PostgreSQL 9.6 documentation, I could not make the cash from a cstring to
the HeapTupleHeader type.

That is, instead of the function receive as a parameter a table:

CREATE FUNCTION c_overpaid (emp, integer) RETURNS boolean
AS DIRECTORY

SELECT name, c_overpaid (emp, 1500) AS overpaid
From emp
WHERE name = 'Bill' OR name = 'Sam';

And in the code in C receive the argument as:

HeapTupleHeader t = PG_GETARG_HEAPTUPLEHEADER (0);

The sql function would be defined as:

CREATE FUNCTION c_overpaid (cstring, integer) RETURNS boolean
AS 'DIRECTORY / funcs', 'c_overpaid'
LANGUAGE C STRICT;

But how would I receive this argument, for example:
Char * str = PG_GETARG_CSTRING (0),

And do the conversion to the HeapTupleHeader type?

Hi

you have to build tuple first. Later you can got a HeapTupleHeader

pl_toolbox has some functions for composite types

https://github.com/okbob/pltoolbox

Regards

Pavel Stehule

Show quoted text

Why do you want to convert this to HeapTupleHeader since this is *not* a
tuple but a string value? What do you want to achieve? IMHO you better
start with simpler examples, make them run, and proceed as you understand
more and more.

What do you guys suggest?

Thanks in advance

--
Achilleas Mantzios
IT DEV Lead
IT DEPT
Dynacom Tankers Mgmt