session and insert query builder progress
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
#ifndef MATADOR_INSERT_QUERY_BUILDER_HPP
|
||||
#define MATADOR_INSERT_QUERY_BUILDER_HPP
|
||||
|
||||
#include <utility>
|
||||
#include "matador/object/collection.hpp"
|
||||
|
||||
#include "matador/query/basic_schema.hpp"
|
||||
#include "matador/query/intermediates/executable_query.hpp"
|
||||
@@ -62,6 +62,7 @@ struct insert_step {
|
||||
|
||||
// Identity post-insert
|
||||
std::function<void(const sql::record &)> apply_returning{};
|
||||
std::function<void(const utils::identifier &)> apply_primary_key{};
|
||||
std::function<void(sql::statement &)> bind_object{};
|
||||
};
|
||||
|
||||
@@ -110,21 +111,24 @@ public:
|
||||
on_foreign_object(obj, attr);
|
||||
}
|
||||
template<class CollectionType>
|
||||
void on_has_many(const char * /*id*/, CollectionType &objects, const char *join_column, const utils::foreign_attributes &attr, std::enable_if_t<object::is_object_ptr<typename CollectionType::value_type>::value> * = nullptr) {
|
||||
void on_has_many(const char * /*id*/, object::collection<object::object_ptr<CollectionType>> &objects, const char *join_column, const utils::foreign_attributes &attr) {
|
||||
if (!utils::is_cascade_type_set(attr.cascade(), utils::cascade_type::Insert)) {
|
||||
return;
|
||||
}
|
||||
|
||||
has_many_linker<typename CollectionType::value_type> linker(ptr_, join_column);
|
||||
has_many_linker<ObjectType> linker(ptr_, join_column);
|
||||
for (auto &obj : objects) {
|
||||
obj.is_persistent() ? build_for(obj) : on_foreign_object(obj, attr);
|
||||
if (obj.is_transient()) {
|
||||
build_for(obj);
|
||||
}
|
||||
// obj.is_persistent() ? build_for(obj) : on_foreign_object(obj, attr);
|
||||
|
||||
access::process(linker, obj);
|
||||
access::process(linker, *obj);
|
||||
}
|
||||
|
||||
}
|
||||
template<class CollectionType>
|
||||
void on_has_many(const char * /*id*/, CollectionType &/*con*/, const char *, const utils::foreign_attributes &/*attr*/, std::enable_if_t<!object::is_object_ptr<typename CollectionType::value_type>::value> * = nullptr) {}
|
||||
static void on_has_many(const char * /*id*/, object::collection<CollectionType> &/*con*/, const char *, const utils::foreign_attributes &/*attr*/) {}
|
||||
template<class Collection>
|
||||
void on_has_many_to_many(const char *id, Collection &container, const char *join_column, const char *inverse_join_column, const utils::foreign_attributes & ) {
|
||||
if (id == nullptr || join_column == nullptr || inverse_join_column == nullptr) {
|
||||
@@ -230,8 +234,10 @@ private:
|
||||
id.assign(f.value());
|
||||
step.pk_accessor.set(*ptr, id);
|
||||
};
|
||||
} else {
|
||||
// step.query = executable_query{insert().into(it->second.table()).values(*ptr)};
|
||||
} else if (info.has_primary_key() && step.pk_generator == utils::generator_type::Sequence || step.pk_generator == utils::generator_type::Table) {
|
||||
step.apply_primary_key = [ptr, &step](const utils::identifier &id) {
|
||||
step.pk_accessor.set(*ptr, id);
|
||||
};
|
||||
}
|
||||
steps_.push_back(std::move(step));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user