query/include/matador/query/insert_query_builder.hpp

46 lines
1.6 KiB
C++

#ifndef MATADOR_INSERT_QUERY_BUILDER_HPP
#define MATADOR_INSERT_QUERY_BUILDER_HPP
#include "matador/query/basic_schema.hpp"
#include "matador/query/intermediates/executable_query.hpp"
#include "matador/query/query.hpp"
#include "matador/query/query_builder_exception.hpp"
namespace matador::query {
class insert_query_builder {
public:
explicit insert_query_builder(const basic_schema &schema);
template<class EntityType>
utils::result<std::vector<executable_query>, query_build_error> build(const object::object_ptr<EntityType> &ptr) {
const auto it = schema_.find(typeid(EntityType));
if (it == schema_.end()) {
return utils::failure(query_build_error::UnknownType);
}
executable_query q = query::query::insert().into(it->second.table()).values(*ptr);
return utils::ok(std::vector{q});
}
template < class V >
static void on_primary_key(const char *id, V &, const utils::primary_key_attribute& /*attr*/ = utils::default_pk_attributes) {}
static void on_revision(const char *id, uint64_t &/*rev*/);
template<typename Type>
static void on_attribute(const char *id, Type &, const utils::field_attributes &/*attr*/ = utils::null_attributes) {}
template<class Pointer>
void on_belongs_to(const char *id, Pointer &obj, const utils::foreign_attributes &attr) {
on_foreign_object(id, obj, attr);
}
template<class Pointer>
void on_has_one(const char *id, Pointer &obj, const utils::foreign_attributes &attr) {
on_foreign_object(id, obj, attr);
}
private:
const basic_schema &schema_;
};
}
#endif //MATADOR_INSERT_QUERY_BUILDER_HPP