query/test/backends/SequenceFixture.cpp

51 lines
1.3 KiB
C++

#include "SequenceFixture.hpp"
#include "matador/query/query.hpp"
#include "matador/sql/dialect.hpp"
#include "connection.hpp"
#include "catch2/catch_test_macros.hpp"
namespace matador::test {
SequenceFixture::SequenceFixture()
: db(connection::dns) {
REQUIRE(db.open());
}
SequenceFixture::~SequenceFixture() {
while (!sequences_to_drop.empty()) {
drop_sequence_if_exists(sequences_to_drop.top());
sequences_to_drop.pop();
}
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 {
const auto result = db.sequence_exists(sequence_name).and_then([&sequence_name, this](const bool exists) {
if (exists) {
auto res = query::query::drop()
.sequence(sequence_name)
.execute(db);
REQUIRE(res);
this->check_sequence_not_exists(sequence_name);
}
return utils::ok(true);
});
REQUIRE(result);
}
}