This is pg.h in view mode; [Download] [Up]
// This is an include file for -*- C++ -*- // // Minimal library for gluing the POSTGRES LIBPQ cruft to C++, // courtesy of Justin Smith (jsmith@mcs.drexel.edu), 17 Mar 1993 // // Hacked to use stock POSTGRES headers - pma, 09 June 1993 // // /usr/local/devel/postgres-v4r2/src/contrib/cplusplus/RCS/pg.h,v 1.2 1993/06/10 19:31:20 aoki Exp // #ifndef _pgdb_h #define _pgdb_h #include <iostream.h> #include <string.h> // anything included here that #include's C++ headers *may* have // problems with this... extern "C" { #define PROTOTYPES #undef offsetof // we define this in tmp/c.h ... #include "tmp/libpq-fe.h" // These are for applications. extern char* PQhost; // machine on which the backend is running extern char* PQport; // comm. port with the postgres backend. } class pgdb { PortalBuffer* portalbuf; char res[PortalNameLength+2];// query result string char dbname[NameLength+1]; public: pgdb() { cout << "You must have a database name" << endl; } pgdb(char* name) { (void) strncpy(dbname, name, NameLength); PQsetdb(name); } ~pgdb() { PQfinish(); } // Sends a query (as a char string) to the database. // Ex: dbname << "retrieve(pg_user.all)"; void operator<<(char*); // Gets the number of groups. int ngroups(); // Gets the number of fields for a given group (number) int nfields(int); // Gets the number of tuples in a given group. int ntuples(int); // Gets the total number of tuples. int ntuples(); // Gets the number of fields for records of group 0. int nfields() { return nfields(0); } // Gets the name of field par1 in group par2 const char* fieldname(int, int); // Gets the name of field par1 in group 0. const char* fieldname(int); // Retrieves the data in the named field from the numbered tuple // as a character string. char* fielddata(int, char*); // Retrieves the length of data in the named field from the numbered // tuple. int fieldlength(int, char*); }; void pgdb::operator<<(char* query) { char* tmpres = PQexec(query); // pointer to static buffer (void) strncpy(res, tmpres, PortalNameLength+1); portalbuf = (PortalBuffer*) NULL; if (*res == 'E') { cout << "error while executing \"" << query << "\"" << endl; libpq_raise(&ProtocolError, "pgdb::operator: backend died.\n"); } if (*res == 'P') { portalbuf = PQparray(res + 1); } } int pgdb::ngroups() { int outp = 0; /* Tuples in the portal appear in GROUPS */ if (portalbuf) { outp = PQngroups(portalbuf); } else { cout << "Attempted ngroups with no retrieve" << endl; } return(outp); } int pgdb::nfields(int groupno) { int outp = 0; if (portalbuf) { outp = PQnfieldsGroup(portalbuf,groupno); } else { cout << "Attempted nfields with no retrieve" << endl; } return(outp); } const char* pgdb::fieldname(int groupno, int n) { char* outp = (char*) NULL; if (portalbuf) { outp = PQfnameGroup(portalbuf,groupno,n); } else { cout << "Attempted fieldname with no retrieve" << endl; } return(outp); } const char* pgdb::fieldname(int n) { return(fieldname(0,n)); } char* pgdb::fielddata(int tupleno, char* fieldname) { int fnumber, groupno; char* outp = (char*) NULL; if (portalbuf) { groupno = PQgetgroup(portalbuf, tupleno); fnumber = PQfnumberGroup(portalbuf, groupno, fieldname); outp = PQgetvalue(portalbuf, tupleno, fnumber); } else { cout << "Attempted fielddata with no retrieve" << endl; } return(outp); } int pgdb::fieldlength(int tupleno, char* fieldname) { int fnumber, groupno; int outp = 0; if (portalbuf) { groupno = PQgetgroup(portalbuf, tupleno); fnumber = PQfnumberGroup(portalbuf, groupno, fieldname); outp = PQgetlength(portalbuf, tupleno, fnumber); } else { cout << "Attempted fieldlength with no retrieve" << endl; } return(outp); } int pgdb::ntuples(int groupno) { int outp = 0; if (portalbuf) { outp = PQntuplesGroup(portalbuf, groupno); } else { cout << "Attempted ntuples with no retrieve" << endl; } return(outp); } int pgdb::ntuples() { int outp = 0; if (portalbuf) { outp = PQntuples(portalbuf); } else { cout << "Attempted ntuples with no retrieve" << endl; } return(outp); } #endif /* _pgdb_h */
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.