Problem with PG_GETARG_CSTRING

From: "Brett Maton" <Brett(dot)Maton(at)simplyhealth(dot)co(dot)uk>
To: <pgsql-novice(at)postgresql(dot)org>
Subject: Problem with PG_GETARG_CSTRING
Date: 2007-10-12 11:32:04
Message-ID: 05ED21952E28E94E8352836547A6BA37042317C6@achmsx001.hsa.co.uk
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-novice

I'm probably just being a numpty, but I can't seem to get arguments with PG_GETARG_CSTRING.
I would much appreciate it if someone could point me in the right direction!

The following code is simply test stuff and doesn't actually do anything other than raise notices

Thanks,
Brett

#include <strings.h>

#include "postgres.h"
#include "fmgr.h"
#include "executor/spi.h"

//PG_MODULE_MAGIC;

Datum bm_test(PG_FUNCTION_ARGS);

PG_FUNCTION_INFO_V1(bm_test);

Datum
bm_test(PG_FUNCTION_ARGS)
{
HeapTuple tuple = NULL;
TupleDesc tupdesc;
SPITupleTable *tuptable;
char *szHostName = NULL;
int i, ret;

// palloc
char *szPolicy = PG_GETARG_CSTRING(0);

elog(NOTICE, "szPolicy len [%d]'%s'\n", strlen(szPolicy), szPolicy);

/* Connect to the SPI Manager */
if ((ret = SPI_connect()) < 0)
/* internal error */
elog(ERROR, "check_primary_key: SPI_connect returned %d", ret);

/* Execute SELECT */
if((ret = SPI_exec("SELECT sv_HostName FROM servers", 0)) != SPI_OK_SELECT) {
/* CASE Error results ?, external function ? */
elog(ERROR, "SELECT Failed, SP_exec returned %d.", ret);
}

while (SPI_tuptable->vals[i] != NULL)
{
tupdesc = SPI_tuptable->tupdesc;
tuptable = SPI_tuptable;
tuple = SPI_tuptable->vals[i];
i++;

szHostName = SPI_getvalue(tuple, tupdesc, 1);
elog(NOTICE, "HostName %s", szHostName);
}

SPI_finish();
PG_RETURN_NULL();
}

Compiled with:

gcc -Wall -Wmissing-prototypes -fpic -I/usr/include/pgsql/server/ -c bkptime.c
gcc -shared -o bkptime.so bkptime.o

Function created with:

create function bm_test(CSTRING) returns TEXT as '/home/brettm/BkpTime/bkptime.so' LANGUAGE 'c';

Executing the function returns the following:

ServerStats=# select * from bm_test('PRODAPP');
NOTICE: szPolicy len [1]'
'

NOTICE: HostName .......
-----------------------------------------------------------------------------------------------
This email, and the contents contained within, are private
and confidential between the sender and the individual(s)
to whom it is addressed.
The contents do not necessarily represent the views of Simplyhealth Group
Limited.

In the event of misdirection, the recipient is prohibited from
using, copying or disseminating it or any information contained in it.
If you have received this email in error please notify Simplyhealth
immediately by telephone on 0845 075 2020, or by email to
network(dot)administrator(at)simplyhealth(dot)co(dot)uk

Simplyhealth Group Limited is registered and incorporated in England and Wales
as a company limited by guarantee. Its registered office is at Hambleden House,
Waterloo Court, Andover, Hampshire, SP10 1LQ, registered no. 5445654. We
may record or monitor telephone calls to help improve our service and protect our
members.
-----------------------------------------------------------------------------------------------

Responses

Browse pgsql-novice by date

  From Date Subject
Next Message Oeschey, Lars (I/EK-142, extern) 2007-10-12 13:56:48 running second instance
Previous Message Richard Broersma Jr 2007-10-11 00:35:27 Re: support for distributed transactions