pk generator progress
This commit is contained in:
parent
75d5cba6c3
commit
1a22c70320
|
|
@ -0,0 +1,14 @@
|
|||
#ifndef MATADOR_IDENTITY_PK_GENERATOR_HPP
|
||||
#define MATADOR_IDENTITY_PK_GENERATOR_HPP
|
||||
|
||||
#include "matador/query/abstract_pk_generator.hpp"
|
||||
|
||||
namespace matador::query {
|
||||
class identity_pk_generator : public abstract_pk_generator {
|
||||
public:
|
||||
identity_pk_generator();
|
||||
[[nodiscard]] utils::result<int64_t, utils::error> next_id(const sql::executor& exec) override;
|
||||
[[nodiscard]] utils::result<int64_t, utils::error> current_id(const sql::executor& exec) override;
|
||||
};
|
||||
}
|
||||
#endif //MATADOR_IDENTITY_PK_GENERATOR_HPP
|
||||
|
|
@ -218,6 +218,8 @@ add_library(matador-orm STATIC
|
|||
sql/resolver_service.cpp
|
||||
sql/statement.cpp
|
||||
sql/statement_cache.cpp
|
||||
../../include/matador/query/identity_pk_generator.hpp
|
||||
query/identity_pk_generator.cpp
|
||||
)
|
||||
|
||||
target_include_directories(matador-orm
|
||||
|
|
|
|||
|
|
@ -0,0 +1,17 @@
|
|||
#include "matador/query/identity_pk_generator.hpp"
|
||||
|
||||
#include "matador/sql/error_code.hpp"
|
||||
|
||||
namespace matador::query {
|
||||
identity_pk_generator::identity_pk_generator()
|
||||
: abstract_pk_generator(utils::generator_type::Identity){
|
||||
}
|
||||
|
||||
utils::result<int64_t, utils::error> identity_pk_generator::next_id(const sql::executor &/*exec*/) {
|
||||
return utils::failure(utils::error(sql::error_code::Failure, "Identity PK generator not implemented"));
|
||||
}
|
||||
|
||||
utils::result<int64_t, utils::error> identity_pk_generator::current_id(const sql::executor &/*exec*/) {
|
||||
return utils::failure(utils::error(sql::error_code::Failure, "Identity PK generator not implemented"));
|
||||
}
|
||||
}
|
||||
|
|
@ -4,6 +4,9 @@
|
|||
|
||||
#include "matador/query/query.hpp"
|
||||
#include "matador/query/manual_pk_generator.hpp"
|
||||
#include "matador/query/identity_pk_generator.hpp"
|
||||
#include "matador/query/sequence_pk_generator.hpp"
|
||||
#include "matador/query/table_pk_generator.hpp"
|
||||
|
||||
#include "matador/object/repository_node.hpp"
|
||||
|
||||
|
|
@ -160,11 +163,25 @@ sql::query_context schema::build_drop_constraint_context(const object::repositor
|
|||
.compile(d);
|
||||
}
|
||||
|
||||
schema::iterator schema::insert_table(const std::type_index &ti, const object::repository_node &node, const utils::generator_type /*generator_type*/) {
|
||||
schema::iterator schema::insert_table(const std::type_index &ti, const object::repository_node &node, const utils::generator_type generator_type) {
|
||||
std::vector<table_column> columns;
|
||||
for (const auto &attr: node.info().attributes()) {
|
||||
columns.emplace_back(nullptr, attr.name(), attr.type(), attr.attributes());
|
||||
}
|
||||
return schema_nodes_.insert({ti, schema_node{table(node.name(), columns), std::make_unique<manual_pk_generator>(), node}}).first;
|
||||
std::unique_ptr<abstract_pk_generator> pk_generator;
|
||||
switch (generator_type) {
|
||||
case utils::generator_type::Identity:
|
||||
pk_generator = std::make_unique<identity_pk_generator>();
|
||||
break;
|
||||
case utils::generator_type::Sequence:
|
||||
pk_generator = std::make_unique<sequence_pk_generator>(node.name());
|
||||
break;
|
||||
case utils::generator_type::Table:
|
||||
pk_generator = std::make_unique<table_pk_generator>("TABLE_SEQS", node.name());
|
||||
break;
|
||||
default:
|
||||
pk_generator = std::make_unique<manual_pk_generator>();
|
||||
}
|
||||
return schema_nodes_.insert({ti, schema_node{table(node.name(), columns), std::move(pk_generator), node}}).first;
|
||||
}
|
||||
} // namespace matador::query
|
||||
|
|
|
|||
Loading…
Reference in New Issue