#ifndef _POSTGRESDATABASE_H #define _POSTGRESDATABASE_H #include "Database.h" #include class PostGresRecordSet; class PostGresDatabase: public Database { PGconn *m_DB; public: //throws an exception if it fails: PostGresDatabase(const char *_host, const char *_db, const char *_username = 0, const char *_password = 0); ~PostGresDatabase(); bool connect(); bool connected() const; int execute(const char *sql, RecordSet **result=0, char **sError=0, const bool manageResults=false); int execute(const char *procedure, const int argc, const char *argv[], const bool argt[], RecordSet **result=0, char **sError=0, const bool manageResults=false); //had to explicitly in-line state these because the compiler was not spotting the int and char variations int execute(const char *sql, char **result, char **sError=0) {return Database::execute(sql, result, sError);} int execute(const char *sql, int *result, char **sError=0) {return Database::execute(sql, result, sError);} int execute(const char *procedure, const int argc, const char *argv[], const bool argt[], char **result, char **sError=0) {return Database::execute(procedure, argc, argv, argt, result, sError);} int execute(const char *procedure, const int argc, const char *argv[], const bool argt[], int *result, char **sError=0) {return Database::execute(procedure, argc, argv, argt, result, sError);} }; class PostGresRecordSet: public RecordSet { PGresult *m_result; public: PostGresRecordSet(PGresult *_result, const bool _manageResults=false): RecordSet(_manageResults), m_result(_result) {} size_t size(); int value(char **value, const unsigned int row=0, const unsigned int column=0); int length(size_t *length, const unsigned int row=0, const unsigned int column=0); ~PostGresRecordSet(); }; #endif