pk generator progress

This commit is contained in:
Sascha Kühl 2026-04-26 22:51:52 +02:00
parent 75d5cba6c3
commit 1a22c70320
4 changed files with 52 additions and 2 deletions

View File

@ -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

View File

@ -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

View File

@ -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"));
}
}

View File

@ -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