delete has many to many progress
This commit is contained in:
@@ -16,7 +16,10 @@ add_library(matador-orm STATIC
|
||||
../../include/matador/query/criteria/logical_criteria.hpp
|
||||
../../include/matador/query/criteria_evaluator.hpp
|
||||
../../include/matador/query/database.hpp
|
||||
../../include/matador/query/delete_query_builder.hpp
|
||||
../../include/matador/query/delete_step.hpp
|
||||
../../include/matador/query/error_code.hpp
|
||||
../../include/matador/query/execute_step.hpp
|
||||
../../include/matador/query/expression/abstract_column_expression.hpp
|
||||
../../include/matador/query/expression/binary_column_expression.hpp
|
||||
../../include/matador/query/expression/column_expression.hpp
|
||||
@@ -31,7 +34,7 @@ add_library(matador-orm STATIC
|
||||
../../include/matador/query/identity_pk_generator.hpp
|
||||
../../include/matador/query/insert_query_builder.hpp
|
||||
../../include/matador/query/insert_query_builder.hpp
|
||||
../../include/matador/query/execute_step.hpp
|
||||
../../include/matador/query/insert_step.hpp
|
||||
../../include/matador/query/intermediates/executable_query.hpp
|
||||
../../include/matador/query/intermediates/fetchable_query.hpp
|
||||
../../include/matador/query/intermediates/query_alter_intermediate.hpp
|
||||
@@ -71,6 +74,7 @@ add_library(matador-orm STATIC
|
||||
../../include/matador/query/meta_table_macro.hpp
|
||||
../../include/matador/query/query.hpp
|
||||
../../include/matador/query/query_builder.hpp
|
||||
../../include/matador/query/query_builder_utils.hpp
|
||||
../../include/matador/query/query_collection_resolver.hpp
|
||||
../../include/matador/query/query_column.hpp
|
||||
../../include/matador/query/query_contexts.hpp
|
||||
@@ -80,6 +84,7 @@ add_library(matador-orm STATIC
|
||||
../../include/matador/query/query_part.hpp
|
||||
../../include/matador/query/query_utils.hpp
|
||||
../../include/matador/query/schema.hpp
|
||||
../../include/matador/query/schema_utils.hpp
|
||||
../../include/matador/query/select_query_builder.hpp
|
||||
../../include/matador/query/sequence_pk_generator.hpp
|
||||
../../include/matador/query/session.hpp
|
||||
@@ -104,9 +109,9 @@ add_library(matador-orm STATIC
|
||||
../../include/matador/sql/interface/query_result_reader.hpp
|
||||
../../include/matador/sql/interface/statement_impl.hpp
|
||||
../../include/matador/sql/interface/statement_proxy.hpp
|
||||
../../include/matador/sql/internal/joined_collection_resolver_producer.hpp
|
||||
../../include/matador/sql/internal/identifier_reader.hpp
|
||||
../../include/matador/sql/internal/identifier_statement_binder.hpp
|
||||
../../include/matador/sql/internal/joined_collection_resolver_producer.hpp
|
||||
../../include/matador/sql/internal/object_resolver_producer.hpp
|
||||
../../include/matador/sql/internal/object_result_binder.hpp
|
||||
../../include/matador/sql/internal/pk_reader.hpp
|
||||
@@ -188,6 +193,7 @@ add_library(matador-orm STATIC
|
||||
query/query_part.cpp
|
||||
query/query_utils.cpp
|
||||
query/schema.cpp
|
||||
query/schema_utils.cpp
|
||||
query/select_query_builder.cpp
|
||||
query/sequence_pk_generator.cpp
|
||||
query/session.cpp
|
||||
@@ -208,9 +214,9 @@ add_library(matador-orm STATIC
|
||||
sql/interface/query_result_reader.cpp
|
||||
sql/interface/statement_impl.cpp
|
||||
sql/interface/statement_proxy.cpp
|
||||
sql/internal/joined_collection_resolver_producer.cpp
|
||||
sql/internal/identifier_reader.cpp
|
||||
sql/internal/identifier_statement_binder.cpp
|
||||
sql/internal/joined_collection_resolver_producer.cpp
|
||||
sql/internal/object_resolver_producer.cpp
|
||||
sql/internal/object_result_binder.cpp
|
||||
sql/internal/query_result_pk_resolver.cpp
|
||||
@@ -221,9 +227,6 @@ add_library(matador-orm STATIC
|
||||
sql/resolver_service.cpp
|
||||
sql/statement.cpp
|
||||
sql/statement_cache.cpp
|
||||
../../include/matador/query/delete_query_builder.hpp
|
||||
../../include/matador/query/query_builder_utils.hpp
|
||||
../../include/matador/query/insert_step.hpp
|
||||
)
|
||||
|
||||
target_include_directories(matador-orm
|
||||
|
||||
@@ -0,0 +1,57 @@
|
||||
#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);
|
||||
}
|
||||
// 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.pk_generator().type() == utils::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;
|
||||
}
|
||||
}
|
||||
@@ -3,9 +3,8 @@
|
||||
#include "matador/sql/backend_provider.hpp"
|
||||
#include "matador/sql/dialect.hpp"
|
||||
|
||||
#include "matador/query/query.hpp"
|
||||
#include "matador/query/generator.hpp"
|
||||
#include "matador/query/basic_schema.hpp"
|
||||
#include "matador/query/schema_utils.hpp"
|
||||
|
||||
#include <stdexcept>
|
||||
|
||||
@@ -23,51 +22,7 @@ session::session(session_context&& ctx, const basic_schema &scm)
|
||||
, resolver_service_(ctx.resolver_service) {
|
||||
using namespace matador::utils;
|
||||
for (const auto &[type, node] : schema_) {
|
||||
query_contexts queries;
|
||||
|
||||
// SELECT all
|
||||
queries.select_all = select(node.table())
|
||||
.from(node.name())
|
||||
.compile(dialect_);
|
||||
if (node.table().has_primary_key()) {
|
||||
// SELECT one
|
||||
queries.select_one = select(node.table())
|
||||
.from(node.name())
|
||||
.where(*node.table().primary_key_column() == _)
|
||||
.compile(dialect_);
|
||||
// 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(dialect_);
|
||||
// DELETE one
|
||||
queries.delete_one = query::remove()
|
||||
.from(node.name())
|
||||
.where(*node.table().primary_key_column() == _)
|
||||
.compile(dialect_);
|
||||
}
|
||||
// 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.pk_generator().type() == utils::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(dialect_);
|
||||
} else {
|
||||
queries.insert = query::insert()
|
||||
.into(node.name(), columns)
|
||||
.values(generator::placeholders(columns.size()))
|
||||
.compile(dialect_);
|
||||
}
|
||||
query_contexts queries = to_query_contexts(node, dialect_);
|
||||
|
||||
queries.insert.resolver = resolver_service_;
|
||||
queries.update_one.resolver = resolver_service_;
|
||||
|
||||
Reference in New Issue
Block a user