mirror of
https://github.com/rbock/sqlpp11.git
synced 2024-11-15 20:31:16 +08:00
Added interpret support for remove()
This commit is contained in:
parent
54fa55e6a5
commit
54d45e97ae
@ -57,6 +57,9 @@ namespace sqlpp
|
|||||||
static_assert(is_noop<Using>::value or is_using_t<Using>::value, "invalid 'Using' argument");
|
static_assert(is_noop<Using>::value or is_using_t<Using>::value, "invalid 'Using' argument");
|
||||||
static_assert(is_noop<Where>::value or is_where_t<Where>::value, "invalid 'Where' argument");
|
static_assert(is_noop<Where>::value or is_where_t<Where>::value, "invalid 'Where' argument");
|
||||||
|
|
||||||
|
|
||||||
|
// FIXME: We might want to have everywhere() or all() to indicate that everything is to be removed, same with update and select
|
||||||
|
|
||||||
template<typename UsingT>
|
template<typename UsingT>
|
||||||
using set_using_t = remove_t<Database, Table, UsingT, Where>;
|
using set_using_t = remove_t<Database, Table, UsingT, Where>;
|
||||||
template<typename WhereT>
|
template<typename WhereT>
|
||||||
@ -134,17 +137,6 @@ namespace sqlpp
|
|||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
template<typename Db>
|
|
||||||
const remove_t& serialize(std::ostream& os, Db& db) const
|
|
||||||
{
|
|
||||||
os << "DELETE FROM ";
|
|
||||||
_table.serialize(os, db);
|
|
||||||
_using.serialize(os, db);
|
|
||||||
_where.serialize(os, db);
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
static constexpr size_t _get_static_no_of_parameters()
|
static constexpr size_t _get_static_no_of_parameters()
|
||||||
{
|
{
|
||||||
return _parameter_list_t::size::value;
|
return _parameter_list_t::size::value;
|
||||||
@ -174,6 +166,21 @@ namespace sqlpp
|
|||||||
Where _where;
|
Where _where;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template<typename Context, typename Database, typename Table, typename Using, typename Where>
|
||||||
|
struct interpreter_t<Context, remove_t<Database, Table, Using, Where>>
|
||||||
|
{
|
||||||
|
using T = remove_t<Database, Table, Using, Where>;
|
||||||
|
|
||||||
|
static Context& _(const T& t, Context& context)
|
||||||
|
{
|
||||||
|
context << "DELETE FROM ";
|
||||||
|
interpret(t._table, context);
|
||||||
|
interpret(t._using, context);
|
||||||
|
interpret(t._where, context);
|
||||||
|
return context;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
template<typename Table>
|
template<typename Table>
|
||||||
constexpr remove_t<void, typename std::decay<Table>::type> remove_from(Table&& table)
|
constexpr remove_t<void, typename std::decay<Table>::type> remove_from(Table&& table)
|
||||||
{
|
{
|
||||||
|
@ -138,7 +138,7 @@ namespace sqlpp
|
|||||||
|
|
||||||
static Context& _(const T& t, Context& context)
|
static Context& _(const T& t, Context& context)
|
||||||
{
|
{
|
||||||
context << "table";
|
context << T::_name_t::_get_name(); // FIXME: need a special rule for pseudo tables
|
||||||
return context;
|
return context;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -79,6 +79,25 @@ namespace sqlpp
|
|||||||
detail::serializable_list<Database> _dynamic_tables;
|
detail::serializable_list<Database> _dynamic_tables;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template<typename Context, typename Database, typename... Table>
|
||||||
|
struct interpreter_t<Context, using_t<Database, Table...>>
|
||||||
|
{
|
||||||
|
using T = using_t<Database, Table...>;
|
||||||
|
|
||||||
|
static Context& _(const T& t, Context& context)
|
||||||
|
{
|
||||||
|
if (sizeof...(Table) == 0 and t._dynamic_tables.empty())
|
||||||
|
return context;
|
||||||
|
context << " USING ";
|
||||||
|
interpret_tuple(t._tables, ',', context);
|
||||||
|
if (sizeof...(Table) and not t._dynamic_tables.empty())
|
||||||
|
context << ',';
|
||||||
|
interpret_serializable_list(t._dynamic_tables, ',', context);
|
||||||
|
return context;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -25,9 +25,10 @@
|
|||||||
|
|
||||||
#include "TabSample.h"
|
#include "TabSample.h"
|
||||||
#include "MockDb.h"
|
#include "MockDb.h"
|
||||||
#include <sqlpp11/select.h>
|
|
||||||
#include <sqlpp11/insert.h>
|
#include <sqlpp11/insert.h>
|
||||||
|
#include <sqlpp11/select.h>
|
||||||
#include <sqlpp11/update.h>
|
#include <sqlpp11/update.h>
|
||||||
|
#include <sqlpp11/remove.h>
|
||||||
#include <sqlpp11/functions.h>
|
#include <sqlpp11/functions.h>
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
@ -70,5 +71,9 @@ int main()
|
|||||||
interpret(update(t).set(t.gamma = true), printer).flush();
|
interpret(update(t).set(t.gamma = true), printer).flush();
|
||||||
interpret(update(t).set(t.gamma = true).where(t.beta.in("kaesekuchen", "cheesecake")), printer).flush();
|
interpret(update(t).set(t.gamma = true).where(t.beta.in("kaesekuchen", "cheesecake")), printer).flush();
|
||||||
|
|
||||||
|
interpret(remove_from(t), printer).flush();
|
||||||
|
interpret(remove_from(t).where(t.alpha == sqlpp::tvin(0)), printer).flush();
|
||||||
|
interpret(remove_from(t).using_(t).where(t.alpha == sqlpp::tvin(0)), printer).flush();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user