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/resolver_service.cpp
|
||||||
sql/statement.cpp
|
sql/statement.cpp
|
||||||
sql/statement_cache.cpp
|
sql/statement_cache.cpp
|
||||||
|
../../include/matador/query/identity_pk_generator.hpp
|
||||||
|
query/identity_pk_generator.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
target_include_directories(matador-orm
|
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/query.hpp"
|
||||||
#include "matador/query/manual_pk_generator.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"
|
#include "matador/object/repository_node.hpp"
|
||||||
|
|
||||||
|
|
@ -160,11 +163,25 @@ sql::query_context schema::build_drop_constraint_context(const object::repositor
|
||||||
.compile(d);
|
.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;
|
std::vector<table_column> columns;
|
||||||
for (const auto &attr: node.info().attributes()) {
|
for (const auto &attr: node.info().attributes()) {
|
||||||
columns.emplace_back(nullptr, attr.name(), attr.type(), attr.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
|
} // namespace matador::query
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue