using Self = Database<Tables...>;
template<typename... ColumnTypes>
- Self select(ColumnTypes&&... cts);
+ Self& select(ColumnTypes&&... cts);
template<typename Expr>
- Self where(Expr expr);
+ Self& where(Expr expr);
template<typename Table>
- Self join(condition::Join type = condition::Join::INNER);
+ Self& join(condition::Join type = condition::Join::INNER);
template<typename Expr>
- Self on(Expr expr);
+ Self& on(Expr expr);
operator std::string();
template<typename... Tables>
template<typename... ColumnTypes>
-Database<Tables...> Database<Tables...>::select(ColumnTypes&&... cts)
+Database<Tables...>& Database<Tables...>::select(ColumnTypes&&... cts)
{
this->cache.clear();
template<typename... Tables>
template<typename Expr>
-Database<Tables...> Database<Tables...>::where(Expr expr)
+Database<Tables...>& Database<Tables...>::where(Expr expr)
{
std::stringstream ss;
ss << "WHERE " << this->processWhere(expr);
template<typename... Tables>
template<typename Table>
-Database<Tables...> Database<Tables...>::join(condition::Join type)
+Database<Tables...>& Database<Tables...>::join(condition::Join type)
{
std::stringstream ss;
ss << condition::to_string(type) << " ";
template<typename... Tables>
template<typename Expr>
-Database<Tables...> Database<Tables...>::on(Expr expr)
+Database<Tables...>& Database<Tables...>::on(Expr expr)
{
std::stringstream ss;
ss << "ON ";
using TableType = typename ImplType::TableType;
template<typename... ColumnTypes>
- Self select(ColumnTypes&&... cts);
+ Self& select(ColumnTypes&&... cts);
template<typename Type>
- Self select(Distinct<Type> distinct);
+ Self& select(Distinct<Type> distinct);
- Self selectAll(void);
+ Self& selectAll(void);
template<typename... ColumnTypes>
- Self update(ColumnTypes&&... cts);
+ Self& update(ColumnTypes&&... cts);
template<typename... ColumnTypes>
- Self insert(ColumnTypes&&... cts);
+ Self& insert(ColumnTypes&&... cts);
template<typename... ColumnTypes>
- Self remove(ColumnTypes&&... cts);
+ Self& remove(ColumnTypes&&... cts);
template<typename Expr>
- Self where(Expr expr);
+ Self& where(Expr expr);
template<typename That>
bool compare(const That& that) const noexcept;
friend Table<Cs...> make_table(const std::string& name, Cs&& ...columns);
template<typename ColumnTuple>
- Self selectInternal(ColumnTuple&& ct, bool distinct = false);
+ Self& selectInternal(ColumnTuple&& ct, bool distinct = false);
template<typename Cs>
std::vector<std::string> getColumnNames(Cs&& tuple);
template<typename... Columns>
template<typename... ColumnTypes>
-Table<Columns...> Table<Columns...>::select(ColumnTypes&&... cts)
+Table<Columns...>& Table<Columns...>::select(ColumnTypes&&... cts)
{
auto columnTuple = std::make_tuple(std::forward<ColumnTypes>(cts)...);
template<typename... Columns>
template<typename Type>
-Table<Columns...> Table<Columns...>::select(Distinct<Type> distinct)
+Table<Columns...>& Table<Columns...>::select(Distinct<Type> distinct)
{
return this->selectInternal(std::move(distinct.value), true);
}
template<typename... Columns>
template<typename ColumnTuple>
-Table<Columns...> Table<Columns...>::selectInternal(ColumnTuple&& ct, bool distinct)
+Table<Columns...>& Table<Columns...>::selectInternal(ColumnTuple&& ct, bool distinct)
{
this->cache.clear();
}
template<typename ...Columns>
-Table<Columns...> Table<Columns...>::selectAll(void)
+Table<Columns...>& Table<Columns...>::selectAll(void)
{
this->cache.clear();
template<typename... Columns>
template<typename... ColumnTypes>
-Table<Columns...> Table<Columns...>::update(ColumnTypes&&... cts)
+Table<Columns...>& Table<Columns...>::update(ColumnTypes&&... cts)
{
this->cache.clear();
template<typename... Columns>
template<typename... ColumnTypes>
-Table<Columns...> Table<Columns...>::insert(ColumnTypes&&... cts)
+Table<Columns...>& Table<Columns...>::insert(ColumnTypes&&... cts)
{
this->cache.clear();
template<typename... Columns>
template<typename... ColumnTypes>
-Table<Columns...> Table<Columns...>::remove(ColumnTypes&&... cts)
+Table<Columns...>& Table<Columns...>::remove(ColumnTypes&&... cts)
{
this->cache.clear();
template<typename... Columns>
template<typename Expr>
-Table<Columns...> Table<Columns...>::where(Expr expr)
+Table<Columns...>& Table<Columns...>::where(Expr expr)
{
std::stringstream ss;
ss << "WHERE " << this->processWhere(expr);