D.1 pgpylib.h

 /* Python Postgres Interface Library
    (C) by Hans Matzen, 1997, Frankfurt, Germany
 
 */
 
 /* this is pgpylib.h */
 
 
 #include <stdlib.h>
 #include "Python.h"
 #include "libpq-fe.h"
 
 static PyObject *ErrorObject;
 
 #define Py_Try(BOOLEAN) { if (!(BOOLEAN)) return NULL;}
 
 
 /* -------------------------------------------------------------- */
 /* everything for pgresult, the postgres result handle object     */
 /* -------------------------------------------------------------- */
 
 /* the definitions for the python object */
 typedef struct {
   PyObject_HEAD
   PGresult *res;
 } pgres;
 
 staticforward PyTypeObject pgres_obj;
 
 /* all that help stuff */
 
 
 static char pgres_obj__doc__[]=
    "Postgres Result Handle Object";
 
 static char pgpy_pgres__doc__[]=
    "pgres(res)=pgres";
 
 static char pgres_get_tuple_count__doc__[]=
    "returns the number of tuples.";
 static char pgres_get_field_count__doc__[]=
    "returns the number of fields.";
 static char pgres_get_fieldname_byindex__doc__[]=
    "returns the fieldname.";
 static char pgres_get_fieldindex_byname__doc__[]=
    "returns the fieldname.";
 static char pgres_get_fieldtype__doc__[]=
    "returns the fieldtype.";
 static char pgres_get_fieldsize__doc__[]=
    "returns the fieldsize.";
 static char pgres_get_fieldvalue__doc__[]=
    "returns the fieldvalue.";
 static char pgres_fieldlength__doc__[]=
    "returns the fieldlength.";

 static char pgres_commandstatus__doc__[]=
    "returns the commandstatus.";
 static char pgres_objectstatus__doc__[]=
    "returns the objectstatus.";
 static char pgres_get_resultlist__doc__[]=
    "prints the query result.";
 
 /* forward declarations for methods */
 
 staticforward pgres   * new_pgres(pgres *init);
 staticforward void      free_pgres(pgres *self);
 staticforward
    PyObject* pgpy_pgres(PyObject *self,PyObject *args);
 staticforward
    PyObject* pgres_getattr(pgres *self,char *name);
 staticforward PyObject* pgres_get_tuple_count(pgres *self);
 staticforward PyObject* pgres_get_field_count(pgres *self);
 staticforward
    PyObject* pgres_get_fieldname_byindex(pgres *self,PyObject *args);
 staticforward
    PyObject* pgres_get_fieldindex_byname(pgres *self, PyObject *args);
 staticforward
    PyObject* pgres_get_fieldtype(pgres *self, PyObject *args);
 staticforward
    PyObject* pgres_get_fieldsize(pgres *self,PyObject *args);
 staticforward
    PyObject* pgres_get_fieldvalue(pgres *self,PyObject *args);
 staticforward
    PyObject* pgres_get_fieldlength(pgres *self, PyObject * args);
 staticforward PyObject* pgres_commandstatus(pgres *self);
 staticforward PyObject* pgres_objectstatus(pgres *self);
 staticforward
    PyObject* pgres_get_resultlist(pgres *self,PyObject *args);
 
 
 /* method table for class pgres */
 
 static struct PyMethodDef pgres_methods[]={
   {"get_tuple_count"      ,(PyCFunction)pgres_get_tuple_count       },
   {"get_field_count"      ,(PyCFunction)pgres_get_field_count       },
   {"get_fieldname_byindex",(PyCFunction)pgres_get_fieldname_byindex },
   {"get_fieldindex_byname",(PyCFunction)pgres_get_fieldindex_byname },
   {"get_fieldtype"        ,(PyCFunction)pgres_get_fieldtype         },
   {"get_fieldsize"        ,(PyCFunction)pgres_get_fieldsize         },
   {"get_fieldvalue"       ,(PyCFunction)pgres_get_fieldvalue        },
   {"get_fieldlength"      ,(PyCFunction)pgres_get_fieldlength       },
   {"commandstatus"        ,(PyCFunction)pgres_commandstatus         },
   {"objectstatus"         ,(PyCFunction)pgres_objectstatus          },
   {"get_resultlist"       ,(PyCFunction)pgres_get_resultlist        },
   {NULL,NULL}
 };
 
 
 /* pgres object table  */
 
 static PyTypeObject pgres_obj= {
   PyObject_HEAD_INIT(&PyType_Type) 0,
   "pgres",

   sizeof(pgres),
   0,
   (destructor)free_pgres,
   (printfunc)0,
   (getattrfunc)pgres_getattr,
   (setattrfunc)0,
   (cmpfunc)0,
   (reprfunc)0,
   0,0,0,
   (hashfunc)0,
   (ternaryfunc)0,
   (reprfunc)0,
   0L,0L,0L,0L,
   pgres_obj__doc__
 };
 
 
 /* -------------------------------------------------------------- */
 /* everything for pgconn, the postgres connection object          */
 /* -------------------------------------------------------------- */
 
 typedef struct {
   PyObject_HEAD
   PGconn *conn;
   int trace;
 } pgconn;
 
 staticforward PyTypeObject pgconn_obj;
 
 /* all that help stuff */
 
 static char pgpy_module_documentation[]=
    "Postgres95 Python Interface";
 
 static char pgconn_obj__doc__[]=
    "Postgres95 Connection Object";
 
 static char pgpy_pgconn__doc__[]=
    "pgconn(host,port,dbname) = pgconn";
 
 static char pgconn_get_dbname__doc__[]=
    "returns the name of the database you are connected to.";
 static char pgconn_get_host__doc__[]=
    "returns the hostname you are connected to.";
 static char pgconn_get_port__doc__[]=
    "returns the port number you are connected to.";
 static char pgconn_get_options__doc__[]=
    "returns the options which were passed to the postmaster.";
 static char pgconn_get_tty__doc__[]=
    "returns the tty where the postmaster logs to.";
 static char pgconn_connstatus__doc__[]=
    "returns 0 if the connectio is ok., or 1 otherwise.";
 static char pgconn_get_error__doc__[]=
    "returns the error that occures last.";
 static char pgconn_connreset__doc__[]=
    "reset the connection to the postmaster.";
 static char pgconn_switch_trace__doc__[]=
    "switch trace mode on or off.";

 static char pgconn_exec_query__doc__[]=
    "executes the query passed as parameter.";
 
 
 /* forward declarations for methodes */
 
 staticforward
    pgconn  * new_pgconn(char *host, char *port, char* dbname);
 staticforward void      free_pgconn(pgconn *self);
 staticforward
    PyObject* pgpy_pgconn(PyObject *self,PyObject *args);
 staticforward PyObject* pgconn_getattr(pgconn *self,char *name);
 staticforward PyObject* pgconn_get_dbname(pgconn *self);
 staticforward PyObject* pgconn_get_host(pgconn *self);
 staticforward PyObject* pgconn_get_port(pgconn *self);
 staticforward PyObject* pgconn_get_options(pgconn *self);
 staticforward PyObject* pgconn_get_tty(pgconn *self);
 staticforward PyObject* pgconn_get_error(pgconn *self);
 staticforward PyObject* pgconn_connstatus(pgconn *self);
 staticforward
    PyObject* pgconn_exec_query(pgconn *self,PyObject *args);
 staticforward PyObject* pgconn_switch_trace(pgconn *self);
 staticforward PyObject* pgconn_connreset(pgconn *self);
 
 
 /* method table for class pgconn */
 
 static struct PyMethodDef pgconn_methods[]={
   {"get_dbname"  ,(PyCFunction)pgconn_get_dbname  },
   {"get_host"    ,(PyCFunction)pgconn_get_host    },
   {"get_port"    ,(PyCFunction)pgconn_get_port    },
   {"get_options" ,(PyCFunction)pgconn_get_options },
   {"get_tty"     ,(PyCFunction)pgconn_get_tty     },
   {"connstatus"  ,(PyCFunction)pgconn_connstatus  },
   {"get_error"   ,(PyCFunction)pgconn_get_error   },
   {"connreset"   ,(PyCFunction)pgconn_connreset   },
   {"switch_trace",(PyCFunction)pgconn_switch_trace},
   {"exec_query"  ,(PyCFunction)pgconn_exec_query  },
   {NULL,NULL}
 };
 
 
 /* pgconn object table  */
 
 static PyTypeObject pgconn_obj= {
   PyObject_HEAD_INIT(&PyType_Type) 0,
   "pgconn",
   sizeof(pgconn),
   0,
   (destructor)free_pgconn,
   (printfunc)0,
   (getattrfunc)pgconn_getattr,
   (setattrfunc)0,
   (cmpfunc)0,
   (reprfunc)0,
   0,0,0,
   (hashfunc)0,
   (ternaryfunc)0,

   (reprfunc)0,
   0L,0L,0L,0L,
   pgconn_obj__doc__
 };
 
 
 
 /* ------------------------------------------------------------------ */
 /* everything for pgblob, the postgres binary large object interface  */
 /* ------------------------------------------------------------------ */
 
 typedef struct {
   PyObject_HEAD
   pgconn *conn;
         int fd;
         Oid blobid;
         char *buff;
 } pgblob;
 
 staticforward PyTypeObject pgblob_obj;
 
 /* all that help stuff */
 
 
 static char pgblob_obj__doc__[]=
    "Postgres95 Binary Large Object";
 
 static char pgpy_pgblob__doc__[]=
    "pgblob(pgconn)=pgblob";
 
 static char pgblob_bopen__doc__[]=
    "open BLOB.";
 static char pgblob_bclose__doc__[]=
    "close BLOB.";
 static char pgblob_bread__doc__[]=
    "read from BLOB.";
 static char pgblob_bwrite__doc__[]=
    "write to BLOB.";
 static char pgblob_bseek__doc__[]=
    "seek position in BLOB.";
 static char pgblob_btell__doc__[]=
    "tells current position in BLOB.";
 static char pgblob_bimport__doc__[]=
    "import from file to BLOB.";
 static char pgblob_bexport__doc__[]=
    "export from BLOB to file.";
 static char pgblob_bcreate__doc__[]=
    "create new BLOB.";
 static char pgblob_bunlink__doc__[]=
    "unlink from BLOB Oid.";
 
 
 /* forward declarations for methodes */
 
 staticforward pgblob  * new_pgblob(pgconn *init);
 staticforward void      free_pgblob(pgblob *self);
 staticforward
    PyObject* pgpy_pgblob(PyObject *self,PyObject *args);

 staticforward PyObject* pgblob_getattr(pgblob *self,char *name);
 staticforward
    PyObject* pgblob_bopen(pgblob *self,PyObject *args);
 staticforward PyObject* pgblob_bclose(pgblob *self);
 staticforward
    PyObject* pgblob_bread(pgblob *self,PyObject *args);
 staticforward
    PyObject* pgblob_bwrite(pgblob *self, PyObject *args);
 staticforward
    PyObject* pgblob_bseek(pgblob *self, PyObject *args);
 staticforward
    PyObject* pgblob_btell(pgblob *self);
 staticforward
    PyObject* pgblob_bimport(pgblob *self,PyObject *args);
 staticforward
    PyObject* pgblob_bexport(pgblob *self, PyObject *args);
 staticforward
    PyObject* pgblob_bcreate(pgblob *self, PyObject *args);
 staticforward PyObject* pgblob_bunlink(pgblob *self);
 
 
 
 /* method table for class pgblob */
 
 static struct PyMethodDef pgblob_methods[]={
   {"bopen"   ,(PyCFunction)pgblob_bopen   },
   {"bclose"  ,(PyCFunction)pgblob_bclose  },
   {"bread"   ,(PyCFunction)pgblob_bread   },
   {"bwrite"  ,(PyCFunction)pgblob_bwrite  },
   {"bseek"   ,(PyCFunction)pgblob_bseek   },
   {"btell"   ,(PyCFunction)pgblob_btell   },
   {"bimport" ,(PyCFunction)pgblob_bimport },
   {"bexport" ,(PyCFunction)pgblob_bexport },
   {"bcreate" ,(PyCFunction)pgblob_bcreate },
   {"bunlink" ,(PyCFunction)pgblob_bunlink },
   {NULL,NULL}
 };
 
 
 /* pgblob object table  */
 
 static PyTypeObject pgblob_obj= {
   PyObject_HEAD_INIT(&PyType_Type) 0,
   "pgblob",
   sizeof(pgblob),
   0,
   (destructor)free_pgblob,
   (printfunc)0,
   (getattrfunc)pgblob_getattr,
   (setattrfunc)0,
   (cmpfunc)0,
   (reprfunc)0,
   0,0,0,
   (hashfunc)0,
   (ternaryfunc)0,
   (reprfunc)0,
   0L,0L,0L,0L,
   pgblob_obj__doc__

 };
 
 
 /* pgpylib init table, lets stick it together */
 
 static struct PyMethodDef pgpy_methods[]={
   {"pgconn",(PyCFunction)pgpy_pgconn,1,pgpy_pgconn__doc__},
   {"pgres" ,(PyCFunction)pgpy_pgres,1,pgpy_pgres__doc__},
   {"pgblob",(PyCFunction)pgpy_pgblob,1,pgpy_pgblob__doc__},
   {NULL,NULL}
 };