diff options
Diffstat (limited to 'lib/query.h')
-rw-r--r-- | lib/query.h | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/lib/query.h b/lib/query.h index 214bf99..75651f6 100644 --- a/lib/query.h +++ b/lib/query.h | |||
@@ -9,6 +9,7 @@ | |||
9 | #include <iostream> | 9 | #include <iostream> |
10 | #include "statement.h" | 10 | #include "statement.h" |
11 | #include "binding.h" | 11 | #include "binding.h" |
12 | #include "order.h" | ||
12 | 13 | ||
13 | namespace verbly { | 14 | namespace verbly { |
14 | 15 | ||
@@ -24,11 +25,17 @@ namespace verbly { | |||
24 | class query { | 25 | class query { |
25 | public: | 26 | public: |
26 | 27 | ||
27 | query(const database& db, sqlite3* ppdb, filter queryFilter, bool random, int limit) : db_(&db) | 28 | query(const database& db, sqlite3* ppdb, filter queryFilter, order sortOrder, int limit) : db_(&db) |
28 | { | 29 | { |
30 | if ((sortOrder.getType() == order::type::field) | ||
31 | && (sortOrder.getSortField().getObject() != Object::objectType)) | ||
32 | { | ||
33 | throw std::invalid_argument("Can only sort query by a field in the result table"); | ||
34 | } | ||
35 | |||
29 | statement stmt(Object::objectType, std::move(queryFilter)); | 36 | statement stmt(Object::objectType, std::move(queryFilter)); |
30 | 37 | ||
31 | std::string queryString = stmt.getQueryString(Object::select, random, limit); | 38 | std::string queryString = stmt.getQueryString(Object::select, std::move(sortOrder), limit); |
32 | std::list<binding> bindings = stmt.getBindings(); | 39 | std::list<binding> bindings = stmt.getBindings(); |
33 | 40 | ||
34 | if (sqlite3_prepare_v2(ppdb, queryString.c_str(), queryString.length(), &ppstmt_, NULL) != SQLITE_OK) | 41 | if (sqlite3_prepare_v2(ppdb, queryString.c_str(), queryString.length(), &ppstmt_, NULL) != SQLITE_OK) |