annotate C++/Driver.h @ 325:d52a69f9f029

Add Ini, brand new replacement for Parser
author David Demelier <markand@malikania.fr>
date Sat, 28 Feb 2015 18:53:27 +0100
parents 1aceace80f61
children
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 *
214
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
4 * Copyright (c) 2013, 2014 David Demelier <markand@malikania.fr>
171
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
214
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
22 #include <ctime>
171
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>
214
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
26 #include <type_traits>
171
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
27
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
28 /**
214
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
29 * @enum DriverColumn
171
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
30 * @brief The column type request
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 * Used for the drivers.
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
33 */
214
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
34 enum class DriverColumn {
177
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
35 Invalid, //! not found
171
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
36 Boolean, //! bool or 0 / 1
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
37 Date, //! date see Common/Date.h
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
38 Double, //! double
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
39 Integer, //! 32 or 64 bit int
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
40 String, //! varchar to std::string
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
214
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
43 template <typename T>
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
44 struct DriverTypeInfo : std::false_type { };
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
45
171
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 * @class Query
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
48 * @brief Class for querying the database
177
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
49 *
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
50 * 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
51 * number of rows, columns and retrieve the results independantly from the
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
52 * driver.
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
53 *
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
54 * @see Driver::query
171
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
55 */
214
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
56 class DriverQuery {
177
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
57 public:
214
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
58 friend struct DriverTypeInfo<bool>;
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
59 friend struct DriverTypeInfo<time_t>;
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
60 friend struct DriverTypeInfo<double>;
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
61 friend struct DriverTypeInfo<int>;
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
62 friend struct DriverTypeInfo<std::string>;
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
63
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
64 class Impl {
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
65 public:
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
66 /**
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
67 * Get a bool.
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
68 *
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
69 * @param row the row number
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
70 * @param column the column
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
71 * @return the value
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
72 */
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
73 virtual bool getBoolean(int row, const std::string &column) = 0;
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
74
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
75 /**
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
76 * Get a Date.
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
77 *
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
78 * @param row the row number
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
79 * @param column the column
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
80 * @return the value
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
81 */
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
82 virtual time_t getDate(int row, const std::string &column) = 0;
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
83
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
84 /**
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
85 * Get a double.
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
86 *
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
87 * @param row the row number
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
88 * @param column the column
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
89 * @return the value
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
90 */
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
91 virtual double getDouble(int row, const std::string &column) = 0;
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
92
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
93 /**
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
94 * Get a integer.
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
95 *
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
96 * @param row the row number
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
97 * @param column the column
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
98 * @return the value
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
99 */
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
100 virtual int getInt(int row, const std::string &column) = 0;
177
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
101
214
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
102 /**
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
103 * Get a string.
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
104 *
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
105 * @param row the row number
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
106 * @param column the column
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
107 * @return the value
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
108 */
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
109 virtual std::string getString(int row, const std::string &column) = 0;
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
110
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
111 /**
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
112 * Returns the type of a named column.
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
113 *
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
114 * @param column the column name
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
115 * @return the type
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
116 */
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
117 virtual DriverColumn type(const std::string &column) const = 0;
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
118
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
119 /**
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
120 * Tells how many rows has been fetched.
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
121 *
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
122 * @return the number of rows
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
123 */
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
124 virtual int countRows() = 0;
177
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
125
214
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
126 /**
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
127 * Tells how many number of columns are present for each
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
128 * row.
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
129 *
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
130 * @return the number of columns
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
131 */
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
132 virtual int countColumns() = 0;
177
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
133
214
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
134 /**
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
135 * Tells if the column is null or not.
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
136 *
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
137 * @param row the row number
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
138 * @param column the column
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
139 * @return an true if null
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
140 */
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
141 virtual bool isNull(int row, const std::string &column) = 0;
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
142
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
143 /**
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
144 * Dump all rows and columns.
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
145 */
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
146 virtual void dump() = 0;
177
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
147 };
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
148
214
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
149 using Ptr = std::shared_ptr<Impl>;
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
150
171
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
151 private:
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
152 /**
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
153 * Check if the request is valid and throws an exception
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
154 * on error.
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
155 *
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
156 * @param row the row number
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
157 * @param column the column name
177
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
158 * @param type
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
159 * @throw Error on error
171
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
160 */
214
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
161 void assertRequest(int row, const std::string &column, DriverColumn type);
171
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 protected:
214
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
164 Ptr m_impl;
171
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
165
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
166 public:
214
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
167 DriverQuery(Ptr impl);
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
168
171
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
169 /**
177
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
170 * Default destructor.
171
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
171 */
214
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
172 virtual ~DriverQuery();
171
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
173
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 * Get a variable from a row and column.
171
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
176 *
177
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
177 * Specialization available:
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
178 * - bool
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
179 * - Date
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
180 * - double
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
181 * - int
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
182 * - std::string
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
183 *
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
184 * @param row the row number (starts from 0)
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
185 * @param column the the column name
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
186 * @return the value
190
d263f85f43a4 Update escape string for PostgreSQL strings
David Demelier <markand@malikania.fr>
parents: 189
diff changeset
187 * @throw Query::Error on error
171
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 template <class T>
214
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
190 T get(int row, const std::string &column)
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
191 {
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
192 static_assert(DriverTypeInfo<T>::value, "unsupported type");
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
193
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
194 assertRequest(row, column, DriverTypeInfo<T>::type);
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
195
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
196 return DriverTypeInfo<T>::get(*this, row, column);
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
197 }
171
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
198
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
199 /**
177
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
200 * Returns the type of a named column.
171
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
201 *
177
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
202 * @param column the column name
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
203 * @return the type
171
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
204 */
214
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
205 DriverColumn type(const std::string &column) const;
171
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
206
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
207 /**
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
208 * Tells how many rows has been fetched.
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
209 *
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
210 * @return the number of rows
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
211 */
214
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
212 int countRows();
171
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
213
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
214 /**
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
215 * Tells how many number of columns are present for each
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
216 * row.
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
217 *
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
218 * @return the number of columns
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
219 */
214
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
220 int countColumns();
171
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
221
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
222 /**
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
223 * Tells if the column is null or not.
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
224 *
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
225 * @param row the row number
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
226 * @param column the column
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
227 * @return an true if null
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
228 */
214
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
229 bool isNull(int row, const std::string &column);
171
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
230
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
231 /**
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
232 * Dump all rows and columns.
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
233 */
214
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
234 void dump();
171
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
235 };
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
236
177
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
237 /**
184
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
238 * @class Request
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
239 * @brief A secure helper for creating requests
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 * 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
242 */
214
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
243 class DriverRequest {
184
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
244 public:
214
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
245 friend struct DriverTypeInfo<bool>;
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
246 friend struct DriverTypeInfo<time_t>;
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
247 friend struct DriverTypeInfo<double>;
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
248 friend struct DriverTypeInfo<int>;
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
249 friend struct DriverTypeInfo<std::string>;
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
250
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
251 class Impl {
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
252 public:
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
253 /**
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
254 * Bind a boolean.
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
255 *
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
256 * @param value the boolean
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
257 * @return the string to use
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
258 */
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
259 virtual std::string bindBoolean(bool value) = 0;
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
260
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
261 /**
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
262 * Bind a date.
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
263 *
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
264 * @param value the date
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
265 * @return the string to use
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
266 */
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
267 virtual std::string bindDate(time_t value) = 0;
184
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
268
214
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
269 /**
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
270 * Bind a double.
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
271 *
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
272 * @param value the double
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
273 * @return the string to use
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
274 */
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
275 virtual std::string bindDouble(double value) = 0;
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
276
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
277 /**
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
278 * Bind an integer.
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
279 *
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
280 * @param value the integer
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
281 * @return the string to use
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
282 */
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
283 virtual std::string bindInteger(int value) = 0;
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
284
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
285 /**
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
286 * Bind a string.
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
287 *
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
288 * @param value the string
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
289 * @return the string to use
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
290 */
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
291 virtual std::string bindString(std::string value) = 0;
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
292 };
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
293
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
294 using Ptr = std::shared_ptr<Impl>;
184
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
295
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
296 private:
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
297 size_t m_pos;
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
298 int m_params;
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
299 std::string m_command;
214
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
300 Ptr m_impl;
184
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
301
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
302 void assertCorrect();
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
303
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
304 void setValue(const std::string &value);
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
305
214
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
306 public:
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
307 DriverRequest(Ptr impl, const std::string &command);
184
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
308
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
309 /**
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
310 * Default destructor.
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
311 */
214
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
312 virtual ~DriverRequest();
184
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
313
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
314 /**
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
315 * Bind a value.
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
316 *
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
317 * @param value the value
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
318 */
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
319 template <typename T>
214
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
320 void bind(T value)
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
321 {
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
322 static_assert(DriverTypeInfo<T>::value, "unsupported type");
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
323
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
324 setValue(DriverTypeInfo<T>::bind(value));
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
325 }
184
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
326
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
327 /**
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
328 * Convert the request to string.
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
329 *
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
330 * @return the request as a string
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
331 */
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
332 operator std::string();
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
333 };
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 /**
177
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
336 * @class Driver
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
337 * @brief A generic SQL driver
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
338 *
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
339 * 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
340 * does not include any DBMS code and just call virtual functions for
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
341 * a simpler integration of new DBMS drivers.
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
342 */
214
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
343 class Driver {
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
344 public:
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
345 class Impl;
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
346
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
347 using Params = std::unordered_map<std::string, std::string>;
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
348 using Ptr = std::shared_ptr<Impl>;
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
349
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
350 class Impl {
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
351 public:
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
352 /**
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
353 * Create a synchronous connection, it waits and block until
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
354 * the connection is made up to a specified timeout max.
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
355 *
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
356 * @param params a list of parameters.
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
357 */
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
358 virtual void connect(const Params &params) = 0;
171
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
359
214
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
360 /**
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
361 * Prepare a request with the specified SQL command.
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
362 *
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
363 * @param command the SQL command to parse and bind
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
364 * @return a request to use with query
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
365 * @see query
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
366 */
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
367 virtual DriverRequest prepare(const std::string &command) = 0;
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
368
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
369 /**
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
370 * Execute a query.
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
371 *
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
372 * @param query the SQL command
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
373 * @return a result
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
374 * @throw Query::Error on failure
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
375 */
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
376 virtual DriverQuery query(const std::string &command) = 0;
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
377
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
378 /**
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
379 * Get the driver connection description.
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
380 *
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
381 * @return the description
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
382 */
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
383 virtual std::string description() const = 0;
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
384
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
385 /**
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
386 * Get the driver version as a string.
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
387 *
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
388 * @return the version
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
389 */
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
390 virtual std::string version() const = 0;
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
391 };
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
392
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
393 protected:
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
394 Ptr m_impl;
177
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
395
171
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
396 public:
214
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
397 Driver() = default;
172
a61cddaf7547 Rename Driver postgres
David Demelier <markand@malikania.fr>
parents: 171
diff changeset
398
a61cddaf7547 Rename Driver postgres
David Demelier <markand@malikania.fr>
parents: 171
diff changeset
399 /**
a61cddaf7547 Rename Driver postgres
David Demelier <markand@malikania.fr>
parents: 171
diff changeset
400 * Virtual destructor.
a61cddaf7547 Rename Driver postgres
David Demelier <markand@malikania.fr>
parents: 171
diff changeset
401 */
214
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
402 virtual ~Driver() = default;
171
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
403
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
404 /**
184
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
405 * Wrapper for std::string variant.
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
406 *
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
407 * @param request the request to use
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
408 * @return a result
190
d263f85f43a4 Update escape string for PostgreSQL strings
David Demelier <markand@malikania.fr>
parents: 189
diff changeset
409 * @throw Query::Error on failure
184
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
410 */
214
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
411 DriverQuery query(DriverRequest request);
184
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
412
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
413 /**
171
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
414 * Create a synchronous connection, it waits and block until
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
415 * the connection is made up to a specified timeout max.
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
416 *
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
417 * @param params a list of parameters.
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
418 */
214
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
419 void connect(const Params &params);
171
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
420
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
421 /**
184
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
422 * Prepare a request with the specified SQL command.
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
423 *
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
424 * @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
425 * @return a request to use with query
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
426 * @see query
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
427 */
214
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
428 DriverRequest prepare(const std::string &command);
184
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
429
4c746050969a Add support for request (PostgreSQL done)
David Demelier <markand@malikania.fr>
parents: 181
diff changeset
430 /**
171
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
431 * Execute a query.
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
432 *
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
433 * @param query the SQL command
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
434 * @return a result
190
d263f85f43a4 Update escape string for PostgreSQL strings
David Demelier <markand@malikania.fr>
parents: 189
diff changeset
435 * @throw Query::Error on failure
171
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
436 */
214
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
437 DriverQuery query(const std::string &command);
171
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
438
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
439 /**
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
440 * Get the driver connection description.
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
441 *
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
442 * @return the description
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
443 */
214
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
444 std::string description() const;
177
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
445
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
446 /**
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
447 * Get the driver version as a string.
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
448 *
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
449 * @return the version
f0cca031bcce Improve Drivers
David Demelier <markand@malikania.fr>
parents: 172
diff changeset
450 */
214
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
451 std::string version() const;
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
452 };
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
453
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
454 template <>
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
455 struct DriverTypeInfo<bool> : std::true_type {
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
456 static const DriverColumn type = DriverColumn::Boolean;
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
457
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
458 static bool get(DriverQuery &query, int row, const std::string &column)
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
459 {
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
460 return query.m_impl->getBoolean(row, column);
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
461 }
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
462
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
463 static void bind(DriverRequest &request, bool value)
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
464 {
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
465 request.m_impl->bindBoolean(value);
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
466 }
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
467 };
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
468
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
469 template <>
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
470 struct DriverTypeInfo<time_t> : std::true_type {
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
471 static const DriverColumn type = DriverColumn::Date;
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
472
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
473 static time_t get(DriverQuery &query, int row, const std::string &column)
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
474 {
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
475 return query.m_impl->getDate(row, column);
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
476 }
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
477
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
478 static void bind(DriverRequest &request, time_t value)
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
479 {
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
480 request.m_impl->bindDate(value);
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
481 }
171
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
482 };
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
483
214
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
484 template <>
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
485 struct DriverTypeInfo<double> : std::true_type {
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
486 static const DriverColumn type = DriverColumn::Double;
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
487
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
488 static double get(DriverQuery &query, int row, const std::string &column)
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
489 {
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
490 return query.m_impl->getDouble(row, column);
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
491 }
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
492
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
493 static void bind(DriverRequest &request, double value)
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
494 {
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
495 request.m_impl->bindDouble(value);
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
496 }
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
497 };
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
498
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
499 template <>
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
500 struct DriverTypeInfo<int> : std::true_type {
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
501 static const DriverColumn type = DriverColumn::Integer;
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
502
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
503 static int get(DriverQuery &query, int row, const std::string &column)
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
504 {
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
505 return query.m_impl->getInt(row, column);
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
506 }
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
507
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
508 static void bind(DriverRequest &request, int value)
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
509 {
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
510 request.m_impl->bindInteger(value);
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
511 }
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
512 };
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
513
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
514 template <>
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
515 struct DriverTypeInfo<std::string> : std::true_type {
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
516 static const DriverColumn type = DriverColumn::String;
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
517
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
518 static std::string get(DriverQuery &query, int row, const std::string &column)
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
519 {
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
520 return query.m_impl->getString(row, column);
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
521 }
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
522
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
523 static void bind(DriverRequest &request, const std::string &value)
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
524 {
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
525 request.m_impl->bindString(value);
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
526 }
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
527 };
6c49e5e3ecc8 Driver: now data is shared internally
David Demelier <markand@malikania.fr>
parents: 190
diff changeset
528
171
e47c4e9e3f9d Add SQL drivers
David Demelier <markand@malikania.fr>
parents:
diff changeset
529 #endif // !_DRIVER_H_