using namespace vist::tsqb;
using namespace vist::schema;
-auto time = make_table("time",
- make_column("hour", &Time::hour),
- make_column("minutes", &Time::minutes),
- make_column("seconds", &Time::seconds));
-
-auto processes = make_table("processes",
- make_column("pid", &Processes::pid),
- make_column("name", &Processes::name),
- make_column("path", &Processes::path),
- make_column("cmdline", &Processes::cmdline),
- make_column("uid", &Processes::uid),
- make_column("gid", &Processes::gid),
- make_column("euid", &Processes::euid),
- make_column("egid", &Processes::egid),
- make_column("on_disk", &Processes::on_disk),
- make_column("parent", &Processes::parent));
-
-auto policyInt = make_table("policy",
- make_column("name", &Policy<int>::name),
- make_column("value", &Policy<int>::value));
-
-auto policyStr = make_table("policy",
- make_column("name", &Policy<std::string>::name),
- make_column("value", &Policy<std::string>::value));
-
-auto metaDB = make_database("db", time, processes, policyInt, policyStr);
+Table time { "time", Column("hour", &Time::hour),
+ Column("minutes", &Time::minutes),
+ Column("seconds", &Time::seconds) };
+
+Table processes { "processes", Column("pid", &Processes::pid),
+ Column("name", &Processes::name),
+ Column("path", &Processes::path),
+ Column("cmdline", &Processes::cmdline),
+ Column("uid", &Processes::uid),
+ Column("gid", &Processes::gid),
+ Column("euid", &Processes::euid),
+ Column("egid", &Processes::egid),
+ Column("on_disk", &Processes::on_disk),
+ Column("parent", &Processes::parent) };
+
+Table policyInt { "policy", Column("name", &Policy<int>::name),
+ Column("value", &Policy<int>::value) };
+
+Table policyStr { "policy", Column("name", &Policy<std::string>::name),
+ Column("value", &Policy<std::string>::value) };
+
+Database metaDB { "db", time, processes, policyInt, policyStr };
} // anonymous namespace
namespace {
-auto adminTable = make_table("ADMIN", make_column("name", &Admin::name),
- make_column("activated", &Admin::activated));
+Table adminTable { "ADMIN", Column("name", &Admin::name),
+ Column("activated", &Admin::activated) };
-auto polManagedTable = make_table("POLICY_MANAGED",
- make_column("admin", &PolicyManaged::admin),
- make_column("policy", &PolicyManaged::policy),
- make_column("value", &PolicyManaged::value));
+Table polManagedTable { "POLICY_MANAGED", Column("admin", &PolicyManaged::admin),
+ Column("policy", &PolicyManaged::policy),
+ Column("value", &PolicyManaged::value) };
-auto polDefinitionTable = make_table("POLICY_DEFINITION",
- make_column("name", &PolicyDefinition::name),
- make_column("ivalue", &PolicyDefinition::ivalue));
+Table polDefinitionTable { "POLICY_DEFINITION", Column("name", &PolicyDefinition::name),
+ Column("ivalue", &PolicyDefinition::ivalue) };
const std::string SCRIPT_BASE = SCRIPT_INSTALL_DIR;
const std::string SCRIPT_CREATE_SCHEMA = "create-schema";
Type type;
};
-template<typename O, typename F>
-Column<O, F> make_column(const std::string& name, F O::*field)
-{
- return {name, field};
-}
-
template<typename Type>
struct Distinct {
Type value;
template<typename... Args>
auto distinct(Args&&... args) -> decltype(Distinct<std::tuple<Args...>>())
{
- return {std::make_tuple(std::forward<Args>(args)...)};
+ return {std::tuple(args...)};
}
} // namespace tsqb
std::vector<std::string> cache;
private:
- template<typename ...Ts>
- friend Database<Ts...> make_database(const std::string& name, Ts&& ...tables);
-
std::tuple<Tables...> tables;
};
-template<typename ...Tables>
-Database<Tables...> make_database(const std::string& name, Tables&& ...tables)
-{
- return Database<Tables...>(name, std::forward<Tables>(tables)...);
-}
-
template<typename... Tables>
template<typename Table>
Database<Tables...>& Database<Tables...>::join(condition::Join type)
std::set<std::string> names;
auto closure = [this, &names](const auto& type) {
- auto column = make_column("anonymous", type);
- using TableType = typename decltype(column)::Table;
+ Column anonymous("anonymous", type);
+ using TableType = typename decltype(anonymous)::Table;
auto name = this->getTableName(TableType());
if (!name.empty())
names.emplace(name);
std::vector<std::string> cache;
private:
- template<typename ...Cs>
- friend Table<Cs...> make_table(const std::string& name, Cs&& ...columns);
-
std::tuple<Columns...> columns;
};
-template<typename ...Columns>
-Table<Columns...> make_table(const std::string& name, Columns&& ...cs)
-{
- return Table<Columns...>(name, std::forward<Columns>(cs)...);
-}
-
template<typename... Columns>
std::string Table<Columns...>::getName() const noexcept
{
int ivalue;
};
-auto admin = make_table("admin", make_column("id", &Admin::id),
- make_column("pkg", &Admin::pkg),
- make_column("uid", &Admin::uid),
- make_column("key", &Admin::key),
- make_column("removable", &Admin::removable));
-
-auto managedPolicy = make_table("managed_policy",
- make_column("id", &ManagedPolicy::id),
- make_column("aid", &ManagedPolicy::aid),
- make_column("pid", &ManagedPolicy::pid),
- make_column("value", &ManagedPolicy::value));
-
-auto policyDefinition = make_table("policy_definition",
- make_column("id", &PolicyDefinition::id),
- make_column("scope", &PolicyDefinition::scope),
- make_column("name", &PolicyDefinition::name),
- make_column("ivalue", &PolicyDefinition::ivalue));
-
-auto db = make_database("dpm", admin, managedPolicy, policyDefinition);
+Table admin { "admin", Column("id", &Admin::id),
+ Column("pkg", &Admin::pkg),
+ Column("uid", &Admin::uid),
+ Column("key", &Admin::key),
+ Column("removable", &Admin::removable) };
+
+Table managedPolicy { "managed_policy", Column("id", &ManagedPolicy::id),
+ Column("aid", &ManagedPolicy::aid),
+ Column("pid", &ManagedPolicy::pid),
+ Column("value", &ManagedPolicy::value) };
+
+Table policyDefinition { "policy_definition", Column("id", &PolicyDefinition::id),
+ Column("scope", &PolicyDefinition::scope),
+ Column("name", &PolicyDefinition::name),
+ Column("ivalue", &PolicyDefinition::ivalue) };
+
+Database db { "dpm", admin, managedPolicy, policyDefinition };
class TsqbTests : public testing::Test {};