sequence table progress
This commit is contained in:
@@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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>();
|
||||
|
||||
Reference in New Issue
Block a user