delete many to many progress
This commit is contained in:
@@ -61,5 +61,17 @@ schema::iterator schema::insert_table(const std::type_index &ti, const object::r
|
||||
}
|
||||
|
||||
basic_schema::iterator schema::insert_relation_table(const std::type_index &ti, const object::repository_node &node) {
|
||||
std::vector<table_column> columns;
|
||||
const auto* attr = node.info().object()->join_attribute();
|
||||
if (attr == nullptr) {
|
||||
return schema_nodes_.end();
|
||||
}
|
||||
columns.emplace_back(nullptr, attr->name(), attr->type(), attr->attributes());
|
||||
attr = node.info().object()->inverse_join_attribute();
|
||||
if (attr == nullptr) {
|
||||
return schema_nodes_.end();
|
||||
}
|
||||
columns.emplace_back(nullptr, attr->name(), attr->type(), attr->attributes());
|
||||
return schema_nodes_.insert({ti, schema_node{table(node.name(), columns, node.info().object()->join_attribute()->name(), node.info().object()->inverse_join_attribute()->name()), nullptr, node}}).first;
|
||||
}
|
||||
} // namespace matador::query
|
||||
|
||||
@@ -30,6 +30,11 @@ query_contexts to_query_contexts(const schema_node& node, const sql::dialect &d)
|
||||
.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;
|
||||
@@ -39,7 +44,7 @@ query_contexts to_query_contexts(const schema_node& node, const sql::dialect &d)
|
||||
}
|
||||
columns.push_back(col);
|
||||
}
|
||||
if (node.pk_generator().type() == utils::generator_type::Identity) {
|
||||
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()))
|
||||
|
||||
@@ -15,6 +15,12 @@ table::table(const std::string& name, const std::vector<table_column> &columns)
|
||||
: table(name, name, columns) {
|
||||
}
|
||||
|
||||
table::table(const std::string& name, const std::vector<table_column>& columns, const std::string& join_column, const std::string& inverse_join_column)
|
||||
: table(name, name, columns)
|
||||
, join_column_index_(column_by_name(*this, join_column))
|
||||
, inverse_join_column_index_(column_by_name(*this, inverse_join_column)){
|
||||
}
|
||||
|
||||
table::table(std::string name, std::string alias, const std::vector<table_column> &columns)
|
||||
: name_(std::move(name))
|
||||
, alias_(std::move(alias))
|
||||
@@ -121,11 +127,11 @@ const table_column* table::primary_key_column() const {
|
||||
return pk_column_index_ > -1 ? &columns_.at(pk_column_index_) : nullptr;
|
||||
}
|
||||
|
||||
const std::string &table::join_column_name() const {
|
||||
return join_column_name_;
|
||||
const table_column* table::join_column() const {
|
||||
return join_column_index_ > -1 ? &columns_.at(join_column_index_) : nullptr;
|
||||
}
|
||||
|
||||
const std::string &table::inverse_join_column_name() const {
|
||||
return inverse_join_column_name_;
|
||||
const table_column* table::inverse_join_column() const {
|
||||
return inverse_join_column_index_ > -1 ? &columns_.at(inverse_join_column_index_) : nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user