Mercurial > code
annotate C++/DriverPostgres.h @ 172:a61cddaf7547
Rename Driver postgres
author | David Demelier <markand@malikania.fr> |
---|---|
date | Wed, 11 Sep 2013 15:27:00 +0200 |
parents | C++/DriverPG.h@e47c4e9e3f9d |
children | f0cca031bcce |
rev | line source |
---|---|
171 | 1 /* |
2 * DriverPostgres.h -- PostgreSQL driver | |
3 * | |
4 * Copyright (c) 2013, David Demelier <markand@malikania.fr> | |
5 * | |
6 * Permission to use, copy, modify, and/or distribute this software for any | |
7 * purpose with or without fee is hereby granted, provided that the above | |
8 * copyright notice and this permission notice appear in all copies. | |
9 * | |
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | |
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | |
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | |
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | |
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | |
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | |
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |
17 */ | |
18 | |
19 /* | |
20 * http://www.postgresql.org/docs/9.2/static/libpq-connect.html#LIBPQ-PARAMKEYWORDS | |
21 */ | |
22 | |
23 #ifndef _DRIVER_PG_H_ | |
24 #define _DRIVER_PG_H_ | |
25 | |
26 #include <map> | |
27 #include <memory> | |
28 #include <string> | |
29 | |
30 #include <libpq-fe.h> | |
31 | |
32 #include "Driver.h" | |
33 | |
34 /** | |
35 * Query implementation for PostgreSQL. | |
36 */ | |
172
a61cddaf7547
Rename Driver postgres
David Demelier <markand@malikania.fr>
parents:
171
diff
changeset
|
37 class QueryPostgres : public Query |
171 | 38 { |
39 public: | |
40 struct PQQueryDeleter | |
41 { | |
42 void operator()(PGresult *result) | |
43 { | |
44 PQclear(result); | |
45 } | |
46 }; | |
47 | |
48 typedef std::unique_ptr<PGresult, PQQueryDeleter> PostgresResult; | |
49 | |
50 private: | |
51 PostgresResult m_result; | |
52 | |
53 protected: | |
54 virtual QueryCheck checkRequest(int row, const std::string &column, ColumnType type); | |
55 | |
56 virtual Date checkDate(int row, const std::string &column); | |
57 | |
58 virtual bool checkBool(int row, const std::string &column); | |
59 | |
60 virtual double checkDouble(int row, const std::string &column); | |
61 | |
62 virtual int checkInt(int row, const std::string &column); | |
63 | |
64 virtual std::string checkString(int row, const std::string &column); | |
65 | |
66 // Avoid copy | |
172
a61cddaf7547
Rename Driver postgres
David Demelier <markand@malikania.fr>
parents:
171
diff
changeset
|
67 QueryPostgres(const QueryPostgres &src); |
171 | 68 |
69 // Avoid copy | |
172
a61cddaf7547
Rename Driver postgres
David Demelier <markand@malikania.fr>
parents:
171
diff
changeset
|
70 QueryPostgres & operator=(const QueryPostgres &src); |
171 | 71 |
72 public: | |
172
a61cddaf7547
Rename Driver postgres
David Demelier <markand@malikania.fr>
parents:
171
diff
changeset
|
73 QueryPostgres(PostgresResult); |
a61cddaf7547
Rename Driver postgres
David Demelier <markand@malikania.fr>
parents:
171
diff
changeset
|
74 ~QueryPostgres(); |
171 | 75 |
76 virtual int countRows(); | |
77 | |
78 virtual int countColumns(); | |
79 | |
80 virtual bool isNull(int row, const std::string &column); | |
81 | |
82 virtual void dump(); | |
83 }; | |
84 | |
172
a61cddaf7547
Rename Driver postgres
David Demelier <markand@malikania.fr>
parents:
171
diff
changeset
|
85 class DriverPostgres : public Driver |
171 | 86 { |
87 public: | |
88 struct PGDeleter { | |
89 void operator()(PGconn *conn) { | |
90 PQfinish(conn); | |
91 } | |
92 }; | |
93 | |
94 typedef std::unique_ptr<PGconn, PGDeleter> PostgresConn; | |
95 | |
96 private: | |
97 PostgresConn m_connection; | |
98 | |
99 /** | |
100 * Convert the Params from the config | |
101 * to the PostgreSQL string. | |
102 * | |
103 * @param settings the table | |
104 * @return a string to be used | |
105 */ | |
106 std::string convert(Params &settings); | |
107 | |
108 public: | |
172
a61cddaf7547
Rename Driver postgres
David Demelier <markand@malikania.fr>
parents:
171
diff
changeset
|
109 DriverPostgres(); |
a61cddaf7547
Rename Driver postgres
David Demelier <markand@malikania.fr>
parents:
171
diff
changeset
|
110 ~DriverPostgres(); |
171 | 111 |
112 virtual bool connect(const Params ¶ms); | |
113 | |
114 virtual std::unique_ptr<Query> query(const std::string &command); | |
115 | |
116 virtual std::string description() const; | |
117 }; | |
118 | |
119 #endif // !_DRIVER_PG_H_ |