annotate C++/Driver.h @ 190:d263f85f43a4

Update escape string for PostgreSQL strings
author David Demelier <markand@malikania.fr>
date Wed, 27 Nov 2013 10:25:58 +0100
parents cc1e5fe1ee2c
children 6c49e5e3ecc8
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 * Driver.h -- generic SQL driver access
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 #ifndef _DRIVER_H_
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
20 #define _DRIVER_H_
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 #include <iostream>
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
23 #include <memory>
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
24 #include <string>
184
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
25 #include <unordered_map>
171
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
26
181
08af4f99c104 Update drivers a bit
David Demelier <markand@malikania.fr>
parents: 177
diff changeset
27 #include "Date.h"
171
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
28
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 * @enum ColumnType
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
31 * @brief The column type request
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
32 *
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
33 * Used for the drivers.
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 enum class ColumnType {
177
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
36 Invalid, //! not found
171
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
37 Boolean, //! bool or 0 / 1
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
38 Date, //! date see Common/Date.h
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
39 Double, //! double
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
40 Integer, //! 32 or 64 bit int
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
41 String, //! varchar to std::string
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
42 };
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 /**
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
45 * @class Query
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
46 * @brief Class for querying the database
177
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
47 *
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
48 * That class is returned when a SQL query succeed. It can retrieve the
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
49 * number of rows, columns and retrieve the results independantly from the
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
50 * driver.
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
51 *
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
52 * @see Driver::query
171
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
53 */
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
54 class Query {
177
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
55 public:
189
cc1e5fe1ee2c Update drivers to style and using instead of typedefs
David Demelier <markand@malikania.fr>
parents: 184
diff changeset
56 using Ptr = std::shared_ptr<Query>;
177
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
57
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
58 /**
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
59 * @class Error
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
60 * @brief Query exception on query error
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
61 */
189
cc1e5fe1ee2c Update drivers to style and using instead of typedefs
David Demelier <markand@malikania.fr>
parents: 184
diff changeset
62 class Error : public std::exception {
177
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
63 private:
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
64 std::string m_error;
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
65
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
66 public:
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
67 Error(const std::string &error);
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
68
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
69 virtual const char *what() const throw();
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
70 };
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
71
171
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
72 private:
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
73 /**
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
74 * Check if the request is valid and throws an exception
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
75 * on error.
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
76 *
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
77 * @param row the row number
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
78 * @param column the column name
177
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
79 * @param type
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
80 * @throw Error on error
171
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
81 */
177
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
82 void assertRequest(int row, const std::string &column, ColumnType type);
171
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 protected:
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
85 /**
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
86 * Get a bool.
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
87 *
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
88 * @param row the row number
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
89 * @param column the column
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
90 * @return the value
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
91 */
177
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
92 virtual bool getBoolean(int row, const std::string &column) = 0;
171
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 /**
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
95 * Get a Date.
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
96 *
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
97 * @param row the row number
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
98 * @param column the column
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
99 * @return the value
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
100 */
177
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
101 virtual Date getDate(int row, const std::string &column) = 0;
171
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 /**
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
104 * Get a double.
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 * @param row the row number
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
107 * @param column the column
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
108 * @return the value
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
109 */
177
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
110 virtual double getDouble(int row, const std::string &column) = 0;
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 /**
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
113 * Get a integer.
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
114 *
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
115 * @param row the row number
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
116 * @param column the column
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
117 * @return the value
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
118 */
177
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
119 virtual int getInt(int row, const std::string &column) = 0;
171
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
120
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
121 /**
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
122 * Get a string.
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
123 *
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
124 * @param row the row number
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
125 * @param column the column
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
126 * @return the value
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
127 */
177
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
128 virtual std::string getString(int row, const std::string &column) = 0;
171
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
129
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
130 public:
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
131 /**
177
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
132 * Default destructor.
171
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
133 */
177
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
134 virtual ~Query();
171
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
135
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
136 /**
177
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
137 * Get a variable from a row and column.
171
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
138 *
177
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
139 * Specialization available:
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
140 * - bool
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
141 * - Date
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
142 * - double
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
143 * - int
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
144 * - std::string
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
145 *
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
146 * @param row the row number (starts from 0)
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
147 * @param column the the column name
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
148 * @return the value
190
d263f85f43a4 Update escape string for PostgreSQL strings
David Demelier <markand@malikania.fr>
parents: 189
diff changeset
149 * @throw Query::Error on error
171
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
150 */
177
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
151 template <class T>
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
152 T get(int row, const std::string &column);
171
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
153
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
154 /**
177
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
155 * Returns the type of a named column.
171
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
156 *
177
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
157 * @param column the column name
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
158 * @return the type
171
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
159 */
177
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
160 virtual ColumnType type(const std::string &column) const = 0;
171
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
161
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
162 /**
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
163 * Tells how many rows has been fetched.
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
164 *
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
165 * @return the number of rows
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
166 */
177
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
167 virtual int countRows() = 0;
171
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
168
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
169 /**
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
170 * Tells how many number of columns are present for each
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
171 * row.
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
172 *
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
173 * @return the number of columns
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
174 */
177
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
175 virtual int countColumns() = 0;
171
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
176
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
177 /**
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
178 * Tells if the column is null or not.
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
179 *
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
180 * @param row the row number
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
181 * @param column the column
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
182 * @return an true if null
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
183 */
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
184 virtual bool isNull(int row, const std::string &column) = 0;
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
185
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
186 /**
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
187 * Dump all rows and columns.
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
188 */
177
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
189 virtual void dump() = 0;
171
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
190 };
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
191
177
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
192 /**
184
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
193 * @class Request
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
194 * @brief A secure helper for creating requests
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
195 *
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
196 * This helps creating class with SQL injection security and such.
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
197 */
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
198 class Request {
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
199 public:
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
200 friend class Driver;
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
201
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
202 using Ptr = std::shared_ptr<Request>;
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
203
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
204 private:
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
205 size_t m_pos;
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
206 int m_params;
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
207 std::string m_command;
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
208
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
209 void assertCorrect();
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
210
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
211 void setValue(const std::string &value);
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
212
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
213 protected:
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
214 /**
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
215 * Bind a boolean.
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
216 *
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
217 * @param value the boolean
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
218 * @return the string to use
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
219 */
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
220 virtual std::string bindBoolean(bool value) = 0;
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
221
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
222 /**
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
223 * Bind a date.
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
224 *
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
225 * @param value the date
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
226 * @return the string to use
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
227 */
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
228 virtual std::string bindDate(Date value) = 0;
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
229
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
230 /**
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
231 * Bind a double.
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
232 *
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
233 * @param value the double
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
234 * @return the string to use
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
235 */
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
236 virtual std::string bindDouble(double value) = 0;
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
237
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
238 /**
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
239 * Bind an integer.
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
240 *
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
241 * @param value the integer
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
242 * @return the string to use
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
243 */
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
244 virtual std::string bindInt(int value) = 0;
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
245
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
246 /**
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
247 * Bind a string.
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
248 *
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
249 * @param value the string
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
250 * @return the string to use
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
251 */
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
252 virtual std::string bindString(std::string value) = 0;
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
253
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
254 /**
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
255 * Default constructor with SQL command.
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
256 *
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
257 * @param command the SQL command
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
258 */
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
259 Request(const std::string &command);
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
260
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
261 public:
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
262 /**
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
263 * Default destructor.
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
264 */
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
265 virtual ~Request();
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
266
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
267 /**
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
268 * Bind a value.
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
269 *
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
270 * @param value the value
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
271 */
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
272 template <typename T>
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
273 void bind(T value);
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
274
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
275 /**
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
276 * Convert the request to string.
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
277 *
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
278 * @return the request as a string
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
279 */
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
280 operator std::string();
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
281 };
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
282
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
283 /**
177
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
284 * @class Driver
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
285 * @brief A generic SQL driver
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
286 *
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
287 * This class is used to connect to a database and execute SQL queries. It
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
288 * does not include any DBMS code and just call virtual functions for
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
289 * a simpler integration of new DBMS drivers.
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
290 */
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
291 class Driver : public std::enable_shared_from_this<Driver> {
171
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
292 protected:
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
293 std::string m_error;
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
294
177
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
295 /**
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
296 * Default constructor. Should not be used.
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
297 *
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
298 * @see Driver::create
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
299 */
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
300 Driver();
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
301
171
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
302 public:
184
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
303 using Params = std::unordered_map<std::string, std::string>;
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
304 using Ptr = std::shared_ptr<Driver>;
171
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
305
172
a61cddaf7547 Rename Driver postgres
David Demelier <markand@malikania.fr>
parents: 171
diff changeset
306 /**
177
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
307 * Create a new Driver object, some queries need to do additional
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
308 * internal requests so it's easier to use shared_ptr.
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
309 *
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
310 * @return a shared_ptr
172
a61cddaf7547 Rename Driver postgres
David Demelier <markand@malikania.fr>
parents: 171
diff changeset
311 */
177
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
312 template <class T>
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
313 static Ptr create()
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
314 {
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
315 T *t = new T();
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
316
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
317 return std::shared_ptr<T>(t);
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
318 }
172
a61cddaf7547 Rename Driver postgres
David Demelier <markand@malikania.fr>
parents: 171
diff changeset
319
a61cddaf7547 Rename Driver postgres
David Demelier <markand@malikania.fr>
parents: 171
diff changeset
320 /**
a61cddaf7547 Rename Driver postgres
David Demelier <markand@malikania.fr>
parents: 171
diff changeset
321 * Virtual destructor.
a61cddaf7547 Rename Driver postgres
David Demelier <markand@malikania.fr>
parents: 171
diff changeset
322 */
171
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
323 virtual ~Driver();
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
324
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
325 /**
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
326 * Get the error.
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
327 *
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
328 * @return the error
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
329 */
177
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
330 const std::string &getError() const;
171
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
331
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
332 /**
184
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
333 * Wrapper for std::string variant.
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
334 *
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
335 * @param request the request to use
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
336 * @return a result
190
d263f85f43a4 Update escape string for PostgreSQL strings
David Demelier <markand@malikania.fr>
parents: 189
diff changeset
337 * @throw Query::Error on failure
184
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
338 */
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
339 Query::Ptr query(Request::Ptr request);
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
340
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
341 /**
171
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
342 * Create a synchronous connection, it waits and block until
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
343 * the connection is made up to a specified timeout max.
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
344 *
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
345 * @param params a list of parameters.
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
346 */
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
347 virtual bool connect(const Params &params) = 0;
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
348
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
349 /**
184
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
350 * Prepare a request with the specified SQL command.
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
351 *
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
352 * @param command the SQL command to parse and bind
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
353 * @return a request to use with query
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
354 * @see query
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
355 */
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
356 virtual Request::Ptr prepare(const std::string &command) = 0;
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
357
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
358 /**
171
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
359 * Execute a query.
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
360 *
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
361 * @param query the SQL command
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
362 * @return a result
190
d263f85f43a4 Update escape string for PostgreSQL strings
David Demelier <markand@malikania.fr>
parents: 189
diff changeset
363 * @throw Query::Error on failure
171
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
364 */
177
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
365 virtual Query::Ptr query(const std::string &command) = 0;
171
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
366
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
367 /**
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
368 * Get the driver connection description.
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
369 *
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
370 * @return the description
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
371 */
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
372 virtual std::string description() const = 0;
177
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
373
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
374 /**
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
375 * Get the driver version as a string.
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
376 *
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
377 * @return the version
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
378 */
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
379 virtual std::string version() const = 0;
171
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
380 };
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
381
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
382 #endif // !_DRIVER_H_