63 lines
1.9 KiB
C++
63 lines
1.9 KiB
C++
#include "matador/query/schema_utils.hpp"
|
|
#include "matador/query/query.hpp"
|
|
#include "matador/query/criteria.hpp"
|
|
|
|
using namespace matador::utils;
|
|
|
|
namespace matador::query {
|
|
query_contexts to_query_contexts(const schema_node& node, const sql::dialect &d) {
|
|
query_contexts queries;
|
|
|
|
// SELECT all
|
|
queries.select_all = select(node.table())
|
|
.from(node.name())
|
|
.compile(d);
|
|
if (node.table().has_primary_key()) {
|
|
// SELECT one
|
|
queries.select_one = select(node.table())
|
|
.from(node.name())
|
|
.where(*node.table().primary_key_column() == _)
|
|
.compile(d);
|
|
// UPDATE one
|
|
auto update_set = query::update(node.table());
|
|
for (const auto &col: node.table().columns()) {
|
|
update_set.set(col, _);
|
|
}
|
|
queries.update_one = update_set.where(*node.table().primary_key_column() == _)
|
|
.compile(d);
|
|
// DELETE one
|
|
queries.delete_one = query::remove()
|
|
.from(node.name())
|
|
.where(*node.table().primary_key_column() == _)
|
|
.compile(d);
|
|
} else {
|
|
queries.delete_one = query::remove()
|
|
.from(node.name())
|
|
.where(*node.table().join_column() == _ && *node.table().inverse_join_column() == _)
|
|
.compile(d);
|
|
}
|
|
// INSERT one
|
|
std::vector<table_column> columns;
|
|
for (const auto &col: node.table().columns()) {
|
|
if (col.is_primary_key() && utils::is_constraint_set(col.attributes().options(), constraints::Identity)) {
|
|
continue;
|
|
}
|
|
columns.push_back(col);
|
|
}
|
|
if (node.table().has_primary_key() && node.pk_generator().type() == generator_type::Identity) {
|
|
queries.insert = query::insert()
|
|
.into(node.name(), columns)
|
|
.values(generator::placeholders(columns.size()))
|
|
.returning(node.table().primary_key_column()->as(node.table().primary_key_column()->column_name()))
|
|
.compile(d);
|
|
} else {
|
|
queries.insert = query::insert()
|
|
.into(node.name(), columns)
|
|
.values(generator::placeholders(columns.size()))
|
|
.compile(d);
|
|
}
|
|
|
|
return queries;
|
|
}
|
|
}
|