summary refs log tree commit diff stats
path: root/lib/query.h
diff options
context:
space:
mode:
Diffstat (limited to 'lib/query.h')
-rw-r--r--lib/query.h11
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
13namespace verbly { 14namespace 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)