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) |
