summary refs log tree commit diff stats
path: root/data.h
diff options
context:
space:
mode:
Diffstat (limited to 'data.h')
-rw-r--r--data.h79
1 files changed, 77 insertions, 2 deletions
diff --git a/data.h b/data.h index 2c23c15..e901cba 100644 --- a/data.h +++ b/data.h
@@ -121,7 +121,7 @@ namespace verbly {
121 std::list<adjective> run() const 121 std::list<adjective> run() const
122 { 122 {
123 std::stringstream construct; 123 std::stringstream construct;
124 construct << "SELECT adjective_id, adjective FROM adjectives"; 124 construct << "SELECT adjective_id, form FROM adjectives";
125 125
126 if (m_random) 126 if (m_random)
127 { 127 {
@@ -144,7 +144,77 @@ namespace verbly {
144 while (sqlite3_step(ppstmt) == SQLITE_ROW) 144 while (sqlite3_step(ppstmt) == SQLITE_ROW)
145 { 145 {
146 adjective tnc {sqlite3_column_int(ppstmt, 0)}; 146 adjective tnc {sqlite3_column_int(ppstmt, 0)};
147 tnc.value = std::string(reinterpret_cast<const char*>(sqlite3_column_text(ppstmt, 1))); 147 tnc.form = std::string(reinterpret_cast<const char*>(sqlite3_column_text(ppstmt, 1)));
148
149 output.push_back(tnc);
150 }
151
152 sqlite3_finalize(ppstmt);
153
154 return output;
155 }
156
157 };
158
159 class adverb_query {
160 public:
161 const static int unlimited = -1;
162
163 private:
164 const data& database;
165 int m_limit = unlimited;
166 bool m_random = false;
167
168 public:
169 adverb_query(const data& database) : database(database)
170 {
171
172 }
173
174 adverb_query& limit(int m_limit)
175 {
176 if ((m_limit > 0) || (m_limit == unlimited))
177 {
178 this->m_limit = m_limit;
179 }
180
181 return *this;
182 }
183
184 adverb_query& random(bool m_random)
185 {
186 this->m_random = m_random;
187
188 return *this;
189 }
190
191 std::list<adverb> run() const
192 {
193 std::stringstream construct;
194 construct << "SELECT adverb_id, form FROM adverbs";
195
196 if (m_random)
197 {
198 construct << " ORDER BY RANDOM()";
199 }
200
201 if (m_limit != unlimited)
202 {
203 construct << " LIMIT " << m_limit;
204 }
205
206 sqlite3_stmt* ppstmt;
207 std::string query = construct.str();
208 if (sqlite3_prepare_v2(database.ppdb, query.c_str(), query.length(), &ppstmt, NULL) != SQLITE_OK)
209 {
210 throw std::runtime_error(sqlite3_errmsg(database.ppdb));
211 }
212
213 std::list<adverb> output;
214 while (sqlite3_step(ppstmt) == SQLITE_ROW)
215 {
216 adverb tnc {sqlite3_column_int(ppstmt, 0)};
217 tnc.form = std::string(reinterpret_cast<const char*>(sqlite3_column_text(ppstmt, 1)));
148 218
149 output.push_back(tnc); 219 output.push_back(tnc);
150 } 220 }
@@ -194,6 +264,11 @@ namespace verbly {
194 return adjective_query(*this); 264 return adjective_query(*this);
195 } 265 }
196 266
267 adverb_query adverbs() const
268 {
269 return adverb_query(*this);
270 }
271
197 }; 272 };
198 273
199}; 274};