#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) : abstract_pk_generator(utils::generator_type::Sequence) , next_id_query_(query::select().nextval(sequence_name)) , current_id_query_(query::select().currval(sequence_name)) { } utils::result sequence_pk_generator::next_id(const sql::executor& exec) { return next_id_query_.fetch_value(exec).and_then([](const std::optional id) -> utils::result { if (!id) { return utils::failure(utils::error(sql::error_code::RetrieveDataFailed, "Sequence returned no value")); } return utils::ok(*id); }); } utils::result sequence_pk_generator::current_id(const sql::executor& exec) { return current_id_query_.fetch_value(exec).and_then([](const std::optional id) -> utils::result { if (!id) { return utils::failure(utils::error(sql::error_code::RetrieveDataFailed, "Sequence returned no value")); } return utils::ok(*id); }); } }