added sequence_pk_generator implementation

This commit is contained in:
2026-02-24 16:24:06 +01:00
parent a2c5bca709
commit d50a8f2b76
6 changed files with 85 additions and 9 deletions
@@ -1,11 +0,0 @@
#ifndef MATADOR_ABSTRACT_PK_GENERATOR_HPP
#define MATADOR_ABSTRACT_PK_GENERATOR_HPP
namespace matador::query {
class abstract_pk_generator {
public:
virtual ~abstract_pk_generator() = default;
virtual unsigned int generate() = 0;
};
}
#endif //MATADOR_ABSTRACT_PK_GENERATOR_HPP
@@ -0,0 +1,19 @@
#include "matador/query/sequence_pk_generator.hpp"
#include "matador/query/query.hpp"
#include "matador/sql/error_code.hpp"
namespace matador::query {
sequence_pk_generator::sequence_pk_generator(const std::string& sequence_name)
: 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> {
if (!id) {
return utils::failure(utils::error(sql::error_code::RETRIEVE_DATA_FAILED, "Sequence returned no value"));
}
return utils::ok(*id);
});
}
}