AnCH Framework 0.1
Another C++ Hack Framework
 
Loading...
Searching...
No Matches
selectBuilder.hpp
1/*
2 ANCH Framework: ANother C++ Hack is a C++ framework based on C++11 standard
3 Copyright (C) 2012 Vincent Lachenal
4
5 This file is part of ANCH Framework.
6
7 ANCH Framework is free software: you can redistribute it and/or modify
8 it under the terms of the GNU Lesser General Public License as published by
9 the Free Software Foundation, either version 3 of the License, or
10 (at your option) any later version.
11
12 ANCH Framework is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU Lesser General Public License for more details.
16
17 You should have received a copy of the GNU Lesser General Public License
18 along with ANCH Framework. If not, see <http://www.gnu.org/licenses/>.
19*/
20#pragma once
21
22#include <sstream>
23#include <list>
24#include <ostream>
25#include <string>
26
27#include "sql/builder/fieldsBuilder.hpp"
28#include "sql/builder/clausesBuilder.hpp"
29#include "sql/builder/sqlQuery.hpp"
30
31
32namespace anch {
33 namespace sql {
34
36 class FromBuilder;
37
47 class SelectBuilder {
48 friend SelectBuilder anch::sql::select();
51
60 friend std::ostream& operator<<(std::ostream& stream, const SelectBuilder& builder);
61
62 // Attributes +
63 private:
65 std::ostringstream _buffer;
66
68 std::list<std::string> _values;
69 // Attributes -
70
71 // Constructors +
72 private:
77 SelectBuilder();
78 // Constructors -
79
80 // Destructor +
81 public:
85 virtual ~SelectBuilder();
86 // Destructor -
87
88 // SQL commands +
89 public:
95 SelectBuilder& distinct();
96
102 anch::sql::FieldsBuilder field(const std::string& column);
103
111 anch::sql::FieldsBuilder groupBy(const std::string& column);
112
120 anch::sql::FieldsBuilder orderBy(const std::string& column);
121
130
138 SelectBuilder& unionOnce(SelectBuilder& other);
139
147 SelectBuilder& unionAll(SelectBuilder& other);
148
156 SelectBuilder& offset(int64_t offset);
157
165 SelectBuilder& fetch(uint64_t limit);
166
178 SelectBuilder& windowByRowNumber(const std::string& alias, const std::string& rowColumn, const std::string& order, uint32_t min, uint32_t max);
179
191 SelectBuilder& windowByRank(const std::string& alias, const std::string& rowColumn, const std::string& order, uint32_t min, uint32_t max);
192 // SQL commands -
193
194 // Methods +
201
202 private:
213 void window(const std::string& function, const std::string& alias, const std::string& rowColumn, const std::string& order, uint32_t min, uint32_t max);
214 // Methods -
215
216 };
217
218 } // sql
219} // anch
SQL clauses builder.
Definition clausesBuilder.hpp:73
Field builder.
Definition fieldsBuilder.hpp:43
Definition fromBuilder.hpp:41
SQL query.
Definition sqlQuery.hpp:42
Dynamic SQL select request builder.
Definition selectBuilder.hpp:47
SelectBuilder & unionAll(SelectBuilder &other)
SelectBuilder & having(anch::sql::ClausesBuilder &clauses)
SelectBuilder & unionOnce(SelectBuilder &other)
anch::sql::SQLQuery build()
SelectBuilder & windowByRank(const std::string &alias, const std::string &rowColumn, const std::string &order, uint32_t min, uint32_t max)
anch::sql::FieldsBuilder field(const std::string &column)
SelectBuilder & windowByRowNumber(const std::string &alias, const std::string &rowColumn, const std::string &order, uint32_t min, uint32_t max)
SelectBuilder & fetch(uint64_t limit)
anch::sql::FieldsBuilder groupBy(const std::string &column)
anch::sql::FieldsBuilder orderBy(const std::string &column)
SelectBuilder & offset(int64_t offset)
SelectBuilder & distinct()
friend std::ostream & operator<<(std::ostream &stream, const SelectBuilder &builder)
SQL namespace.
Definition clauses.hpp:26
ClausesBuilder clauses()
SelectBuilder select()
AnCH framework base namespace.
Definition app.hpp:28