sequence table progress

This commit is contained in:
2026-04-29 16:08:53 +02:00
parent 3fb23e167e
commit 433b0e40e1
5 changed files with 63 additions and 5 deletions
+37 -1
View File
@@ -1,5 +1,6 @@
#include "matador/query/basic_schema.hpp"
#include "matador/query/builder.hpp"
#include "matador/query/query.hpp"
#include "matador/sql/connection.hpp"
@@ -51,6 +52,18 @@ basic_schema::basic_schema(const std::string &name)
: repo_(name) {
}
std::string basic_schema::name() const {
return repo_.name();
}
const object::repository& basic_schema::repo() const {
return repo_;
}
object::repository& basic_schema::repo() {
return repo_;
}
utils::result<void, utils::error> basic_schema::create(const sql::connection &conn) const {
std::vector<std::string> fk_sql_commands;
@@ -271,7 +284,27 @@ utils::result<void, utils::error> setup_primary_key_generator(const basic_schema
return utils::failure(result.err());
}
} else if (node.pk_generator().type() == utils::generator_type::Table) {
if (const auto result = conn.exists(scm.name(), "sequence_table"); result) {
if (!*result) {
const auto exec_result = create()
.table("sequence_table")
.columns({
column("name", utils::basic_type::Varchar, 255),
column("next_id", utils::basic_type::Int64)
})
.execute(conn);
if (!exec_result) {
return utils::failure(exec_result.err());
}
}
} else {
return utils::failure(result.err());
}
const auto insert_result = insert().into("sequence_table", {"name", "next_id"}).values({node.name(), 1}).execute(conn);
if (!insert_result) {
return utils::failure(insert_result.err());
}
}
}
@@ -286,7 +319,10 @@ utils::result<void, utils::error> cleanup_primary_key_generator(const basic_sche
return utils::failure(result.err());
}
} else if (node.pk_generator().type() == utils::generator_type::Table) {
const auto result = drop().sequence(node.name() + "_pk_seq").execute(conn);
if (!result) {
return utils::failure(result.err());
}
}
}
+1 -1
View File
@@ -52,7 +52,7 @@ schema::iterator schema::insert_table(const std::type_index &ti, const object::r
pk_generator = std::make_unique<sequence_pk_generator>(node.name() + "_pk_seq");
break;
case utils::generator_type::Table:
pk_generator = std::make_unique<table_pk_generator>("TABLE_SEQS", node.name());
pk_generator = std::make_unique<table_pk_generator>("sequence_table", node.name());
break;
default:
pk_generator = std::make_unique<manual_pk_generator>();