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