1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177
|
//////////////////////////////////////////////////////////////////////////
//
// pgAgent - PostgreSQL Tools
//
// Copyright (C) 2002 - 2014, The pgAdmin Development Team
// This software is released under the PostgreSQL Licence
//
// connection.h - database connection
//
//////////////////////////////////////////////////////////////////////////
#ifndef CONNECTION_H
#define CONNECTION_H
#include <libpq-fe.h>
class DBresult;
class DBconn
{
protected:
DBconn(const wxString &, const wxString &);
~DBconn();
public:
wxString qtDbString(const wxString &value);
bool BackendMinimumVersion(int major, int minor);
static DBconn *Get(const wxString &connStr, const wxString &db);
static DBconn *InitConnection(const wxString &connectString);
static void ClearConnections(bool allIncludingPrimary = false);
static void SetBasicConnectString(const wxString &bcs)
{
basicConnectString = bcs;
}
static const wxString &GetBasicConnectString()
{
return basicConnectString;
}
wxString GetLastError();
wxString GetDBname()
{
return dbname;
}
bool IsValid()
{
return conn != 0;
}
bool LastCommandOk()
{
return IsCommandOk((ExecStatusType)lastResult);
}
bool IsCommandOk(ExecStatusType ret)
{
switch (ret)
{
case PGRES_COMMAND_OK:
case PGRES_TUPLES_OK:
case PGRES_COPY_OUT:
case PGRES_COPY_IN:
#if (PG_VERSION_NUM >= 90100)
case PGRES_COPY_BOTH:
#endif
return true;
default:
return false;
};
}
void SetLastResult(int res)
{
lastResult = res;
}
int GetLastResult()
{
return lastResult;
}
DBresult *Execute(const wxString &query);
wxString ExecuteScalar(const wxString &query);
int ExecuteVoid(const wxString &query);
void Return();
private:
bool Connect(const wxString &connectString);
int minorVersion, majorVersion;
protected:
static wxString basicConnectString;
static DBconn *primaryConn;
wxString dbname, lastError, connStr;
PGconn *conn;
DBconn *next, *prev;
bool inUse;
int lastResult;
friend class DBresult;
};
class DBresult
{
protected:
DBresult(DBconn *conn, const wxString &query);
public:
~DBresult();
wxString GetString(int col) const;
wxString GetString(const wxString &colname) const;
bool IsValid() const
{
return result != NULL;
}
bool HasData() const
{
return currentRow < maxRows;
}
void MoveNext()
{
if (currentRow < maxRows) currentRow++;
}
long RowsAffected() const
{
return atol(PQcmdTuples(result));
}
protected:
PGresult *result;
int currentRow, maxRows;
friend class DBconn;
};
class connInfo
{
public:
connInfo()
{
isValid = false;
connection_timeout = 0;
port = 0;
}
private:
wxString user;
unsigned long port;
wxString host;
wxString dbname;
unsigned long connection_timeout;
wxString password;
bool isValid;
wxString getConnectionString();
static connInfo getConnectionInfo(wxString connStr);
protected:
bool IsValidIP();
friend class DBconn;
};
#endif // CONNECTION_H
|