lo wrappers - still working on it

Scott Holmes <sholmes@pacificnet.net>

From: Scott Holmes <sholmes@pacificnet.net>
To: pgsql-general@postgresql.org (PG-General)
Date: 2001-07-04T03:56:20Z
Lists: pgsql-general
Perhaps someone can point me towards what I'm missing.  I've included my make 
command, the command for creating a function and the actual code I wrote 
(derived from the sample code in the docs).  Incidentally, this project is too 
far along to change to java or any other interface.  I currently am handling 
the files to be lo's as system files but the request is in to save them as 
blobs.

This is the result of my make:

gcc -O2 -Wall -Wmissing-prototypes -Wmissing-declarations -fpic 
-I../../src/interfaces/libpq -I../../src/include   -c -o amslo.o amslo.c
amslo.c:19: warning: no previous prototype for `ams_loexport'
gcc -shared -o amslo.so amslo.o


This is the result of my trying to create a function:

wcgc_pg=# create function ams_loexport(Oid, char)   
wcgc_pg-# returns opaque
wcgc_pg-# as '/usr/local/postgresql-7.1/contrib/WCGC_PG/amslo.so'
wcgc_pg-# language 'C';
ERROR:  Load of file /usr/local/postgresql-7.1/contrib/WCGC_PG/amslo.so 
failed: /usr/local/postgresql-7.1/contrib/WCGC_PG/amslo.so: undefined symbol: 
PQexec
wcgc_pg=# 

And finally, this is my attempt at coding the function:

/*---------------------------------------------------------
 * 
 *  amslo.c--
 *   large object handling for wcgc_pg documents
 *
 *
 *---------------------------------------------------------
 */
#include <stdio.h>
#include "libpq-fe.h"
#include "libpq/libpq-fs.h"

#define BUFSIZE		1024

/*
 * ams_loexport * export large object to file
 */
void ams_loexport(Oid lobjId, char *filename)
{
  PGconn *conn;
  PGresult *res;

  conn = PQsetdb(NULL, NULL, NULL, NULL, "wcgc_pg");
  if (PQstatus(conn) == CONNECTION_BAD)
  {
    fprintf(stderr, "Connection to wcgc_pg failed.\n");
    fprintf(stderr, "%s", PQerrorMessage(conn));
    return;
  }

  res = PQexec(conn, "begin");
  PQclear(res);

  lo_export(conn, lobjId, filename);
  
  res = PQexec(conn, "end");
  PQclear(res);
  PQfinish(conn);
  return;
}