File: connection.h

package info (click to toggle)
pgagent 3.2.1-1
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 268 kB
  • sloc: cpp: 1,647; sql: 495; xml: 100; ansic: 52; makefile: 43
file content (144 lines) | stat: -rw-r--r-- 2,512 bytes parent folder | download
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
//////////////////////////////////////////////////////////////////////////
//
// pgAgent - PostgreSQL Tools
//
// Copyright (C) 2002 - 2012, 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;
	}

	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;

	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