From 53b10fd1f94e7b7bc2775fa898cdcf252ebcdb27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sascha=20K=C3=BChl?= Date: Sun, 15 Mar 2026 22:33:35 +0100 Subject: [PATCH] sequence progress --- backends/postgres/test/CMakeLists.txt | 1 + source/orm/sql/connection.cpp | 2 +- test/backends/SequenceFixture.cpp | 18 +++++++++++------ test/backends/SequenceTest.cpp | 29 +++++++++++++++++++++++++++ 4 files changed, 43 insertions(+), 7 deletions(-) create mode 100644 test/backends/SequenceTest.cpp diff --git a/backends/postgres/test/CMakeLists.txt b/backends/postgres/test/CMakeLists.txt index 4ce3e93..63e53d6 100644 --- a/backends/postgres/test/CMakeLists.txt +++ b/backends/postgres/test/CMakeLists.txt @@ -36,6 +36,7 @@ set(TEST_SOURCES ../../../test/models/model_metas.hpp ../../../test/backends/SequenceFixture.hpp ../../../test/backends/SequenceFixture.cpp + ../../../test/backends/SequenceTest.cpp ) set(LIBRARY_TEST_TARGET PostgresTests) diff --git a/source/orm/sql/connection.cpp b/source/orm/sql/connection.cpp index cd8b510..099d3c2 100644 --- a/source/orm/sql/connection.cpp +++ b/source/orm/sql/connection.cpp @@ -164,7 +164,7 @@ utils::result connection::exists(const std::string &table_na } utils::result connection::sequence_exists(const std::string& sequence_name) const { - return connection_->sequence_exists(sequence_name); + return connection_->sequence_exists(dialect().default_schema_name(), sequence_name); } bool has_unknown_columns(const std::vector &columns) { diff --git a/test/backends/SequenceFixture.cpp b/test/backends/SequenceFixture.cpp index ee7636d..8bf3ba3 100644 --- a/test/backends/SequenceFixture.cpp +++ b/test/backends/SequenceFixture.cpp @@ -16,18 +16,24 @@ SequenceFixture::SequenceFixture() } SequenceFixture::~SequenceFixture() { - while (!sequences_to_drop.empty()) { - drop_sequence_if_exists(sequences_to_drop.top()); - sequences_to_drop.pop(); - } - REQUIRE(repo.drop(db)); - REQUIRE(db.close()); + while (!sequences_to_drop.empty()) { + drop_sequence_if_exists(sequences_to_drop.top()); + sequences_to_drop.pop(); + } + REQUIRE(repo.drop(db)); + REQUIRE(db.close()); } void SequenceFixture::check_sequence_exists(const std::string& sequence_name) const { + auto result = db.sequence_exists(sequence_name); + REQUIRE(result.is_ok()); + REQUIRE(*result); } void SequenceFixture::check_sequence_not_exists(const std::string& sequence_name) const { + auto result = db.sequence_exists(sequence_name); + REQUIRE(result.is_ok()); + REQUIRE(!*result); } void SequenceFixture::drop_sequence_if_exists(const std::string& sequence_name) const { diff --git a/test/backends/SequenceTest.cpp b/test/backends/SequenceTest.cpp new file mode 100644 index 0000000..4da08b7 --- /dev/null +++ b/test/backends/SequenceTest.cpp @@ -0,0 +1,29 @@ +#include "catch2/catch_test_macros.hpp" + +#include "matador/query/query.hpp" + +#include "SequenceFixture.hpp" + +using namespace matador::query; +using namespace matador::test; + +TEST_CASE_METHOD(SequenceFixture, "", "[sequence]") { + auto result = query::create() + .sequence("person_seq") + .execute(db); + REQUIRE(result.is_ok()); + + sequences_to_drop.emplace("person_seq"); + + auto next_id = query::select() + .nextval("person_seq") + .fetch_value(db); + + REQUIRE(next_id.is_ok()); + REQUIRE(*next_id == 1); + + result = query::drop() + .sequence("person_seq") + .execute(db); + REQUIRE(result.is_ok()); +}