forked from sqlitebrowser/sqlitebrowser
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathQuery.h
More file actions
94 lines (73 loc) · 2.76 KB
/
Query.h
File metadata and controls
94 lines (73 loc) · 2.76 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#ifndef QUERY_H
#define QUERY_H
#include "ObjectIdentifier.h"
#include <string>
#include <unordered_map>
#include <vector>
namespace sqlb
{
enum SortDirection
{
Ascending,
Descending
};
struct SortedColumn
{
SortedColumn(size_t column_, SortDirection direction_) :
column(column_),
direction(direction_)
{}
bool operator==(const SortedColumn& rhs) const
{
return column == rhs.column && direction == rhs.direction;
}
size_t column;
SortDirection direction;
};
struct SelectedColumn
{
SelectedColumn(const std::string& original_column_, const std::string& selector_) :
original_column(original_column_),
selector(selector_)
{}
std::string original_column;
std::string selector;
};
class Query
{
public:
Query() {}
explicit Query(const sqlb::ObjectIdentifier& table) :
m_table(table)
{}
void clear();
std::string buildQuery(bool withRowid) const;
std::string buildCountQuery() const;
void setColumNames(const std::vector<std::string>& column_names) { m_column_names = column_names; }
std::vector<std::string> columnNames() const { return m_column_names; }
void setTable(const sqlb::ObjectIdentifier& table) { m_table = table; }
sqlb::ObjectIdentifier table() const { return m_table; }
void setRowIdColumns(const std::vector<std::string>& rowids) { m_rowid_columns = rowids; }
std::vector<std::string> rowIdColumns() const { return m_rowid_columns; }
void setRowIdColumn(const std::string& rowid) { m_rowid_columns = {rowid}; }
bool hasCustomRowIdColumn() const { return m_rowid_columns.size() != 1 || (m_rowid_columns.at(0) != "rowid" && m_rowid_columns.at(0) != "_rowid_"); }
const std::vector<SelectedColumn>& selectedColumns() const { return m_selected_columns; }
std::vector<SelectedColumn>& selectedColumns() { return m_selected_columns; }
const std::unordered_map<size_t, std::string>& where() const { return m_where; }
std::unordered_map<size_t, std::string>& where() { return m_where; }
const std::vector<SortedColumn>& orderBy() const { return m_sort; }
std::vector<SortedColumn>& orderBy() { return m_sort; }
void setOrderBy(const std::vector<SortedColumn>& columns) { m_sort = columns; }
private:
std::vector<std::string> m_column_names;
sqlb::ObjectIdentifier m_table;
std::vector<std::string> m_rowid_columns;
std::vector<SelectedColumn> m_selected_columns;
std::unordered_map<size_t, std::string> m_where;
std::vector<SortedColumn> m_sort;
std::vector<SelectedColumn>::iterator findSelectedColumnByName(const std::string& name);
std::vector<SelectedColumn>::const_iterator findSelectedColumnByName(const std::string& name) const;
std::string buildWherePart() const;
};
}
#endif