added more pk generator types
This commit is contained in:
@@ -192,6 +192,12 @@ add_library(matador-orm STATIC
|
||||
sql/resolver_service.cpp
|
||||
sql/statement.cpp
|
||||
sql/statement_cache.cpp
|
||||
../../include/matador/query/database.hpp
|
||||
query/abstract_pk_generator.cpp
|
||||
../../include/matador/query/manual_pk_generator.hpp
|
||||
query/manual_pk_generator.cpp
|
||||
../../include/matador/query/table_pk_generator.hpp
|
||||
query/table_pk_generator.cpp
|
||||
)
|
||||
|
||||
target_include_directories(matador-orm
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
#include "matador/query/abstract_pk_generator.hpp"
|
||||
|
||||
namespace matador::query {
|
||||
abstract_pk_generator::abstract_pk_generator(const utils::generator_type type)
|
||||
: generator_type_{type} {}
|
||||
|
||||
utils::generator_type abstract_pk_generator::type() const {
|
||||
return generator_type_;
|
||||
}
|
||||
}
|
||||
@@ -3,9 +3,9 @@
|
||||
#include "matador/sql/executor.hpp"
|
||||
|
||||
namespace matador::query {
|
||||
schema_node::schema_node(class table tab, utils::generator_type generator_type, const object::repository_node& node)
|
||||
schema_node::schema_node(class table tab, std::unique_ptr<abstract_pk_generator> &&pk_generator, const object::repository_node& node)
|
||||
: table_(std::move(tab))
|
||||
, generator_type_(generator_type)
|
||||
, pk_generator_(std::move(pk_generator))
|
||||
, node_(std::move(node)) {
|
||||
}
|
||||
|
||||
@@ -17,8 +17,8 @@ const table &schema_node::table() const {
|
||||
return table_;
|
||||
}
|
||||
|
||||
utils::generator_type schema_node::generator_type() const {
|
||||
return generator_type_;
|
||||
abstract_pk_generator& schema_node::pk_generator() const {
|
||||
return *pk_generator_;
|
||||
}
|
||||
|
||||
const object::repository_node& schema_node::node() const {
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
#include "matador/query/manual_pk_generator.hpp"
|
||||
|
||||
#include "matador/sql/error_code.hpp"
|
||||
|
||||
namespace matador::query {
|
||||
manual_pk_generator::manual_pk_generator()
|
||||
: abstract_pk_generator(utils::generator_type::Manual){
|
||||
}
|
||||
|
||||
utils::result<int64_t, utils::error> manual_pk_generator::next_id(const sql::executor &/*exec*/) {
|
||||
return utils::failure(utils::error(sql::error_code::FAILURE, "Manual PK generator not implemented"));
|
||||
}
|
||||
}
|
||||
@@ -5,11 +5,12 @@
|
||||
|
||||
namespace matador::query {
|
||||
sequence_pk_generator::sequence_pk_generator(const std::string& sequence_name)
|
||||
: query_(query::select().nextval(sequence_name)) {
|
||||
: abstract_pk_generator(utils::generator_type::Sequence)
|
||||
, query_(query::select().nextval(sequence_name)) {
|
||||
}
|
||||
|
||||
utils::result<int64_t, utils::error> sequence_pk_generator::next_id(const sql::executor& exec) {
|
||||
return query_.fetch_value<int64_t>(exec).and_then([](std::optional<int64_t> id) -> utils::result<int64_t, utils::error> {
|
||||
return query_.fetch_value<int64_t>(exec).and_then([](const std::optional<int64_t> id) -> utils::result<int64_t, utils::error> {
|
||||
if (!id) {
|
||||
return utils::failure(utils::error(sql::error_code::RETRIEVE_DATA_FAILED, "Sequence returned no value"));
|
||||
}
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
#include "matador/query/table_pk_generator.hpp"
|
||||
#include "matador/query/query.hpp"
|
||||
|
||||
namespace matador::query {
|
||||
table_pk_generator::table_pk_generator(const std::string& table_name, const std::string &sequence_name)
|
||||
: abstract_pk_generator(utils::generator_type::Table) {
|
||||
|
||||
// query::update(table_name)
|
||||
// .set("next_id", "next_id + 1")
|
||||
// .where("name", "=", table_name)
|
||||
// .returning("next_id - 1 AS id");
|
||||
/*
|
||||
*UPDATE id_table
|
||||
SET next_id = next_id + 1
|
||||
WHERE name = 'users'
|
||||
RETURNING next_id - 1 AS id;
|
||||
*/
|
||||
}
|
||||
|
||||
utils::result<int64_t, utils::error> table_pk_generator::next_id(const sql::executor &exec) {
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user