added describe table and table exists to session

This commit is contained in:
Sascha Kuehl 2023-11-26 22:17:59 +01:00
parent a436af5293
commit f3c502a2ce
6 changed files with 33 additions and 27 deletions

View File

@ -35,6 +35,9 @@ public:
// [[nodiscard]] query_result<record> fetch(const std::string &sql) const; // [[nodiscard]] query_result<record> fetch(const std::string &sql) const;
[[nodiscard]] std::pair<size_t, std::string> execute(const std::string &sql) const; [[nodiscard]] std::pair<size_t, std::string> execute(const std::string &sql) const;
record describe_table(const std::string &table_name) const;
bool table_exists(const std::string &table_name) const;
template<typename Type> template<typename Type>
void attach(const std::string &table_name) void attach(const std::string &table_name)
{ {

View File

@ -73,6 +73,24 @@ std::pair<size_t, std::string> session::execute(const std::string &sql) const {
return c->execute(sql); return c->execute(sql);
} }
record session::describe_table(const std::string &table_name) const
{
auto c = pool_.acquire();
if (!c.valid()) {
throw std::logic_error("no database connection available");
}
return c->describe(table_name);
}
bool session::table_exists(const std::string &table_name) const
{
auto c = pool_.acquire();
if (!c.valid()) {
throw std::logic_error("no database connection available");
}
return c->exists(table_name);
}
const table_repository& session::tables() const const table_repository& session::tables() const
{ {
return table_repository_; return table_repository_;

View File

@ -12,7 +12,6 @@ add_executable(tests QueryBuilderTest.cpp
SessionTest.cpp SessionTest.cpp
RecordTest.cpp RecordTest.cpp
ConnectionPoolTest.cpp ConnectionPoolTest.cpp
query.cpp
BackendProviderTest.cpp BackendProviderTest.cpp
ConnectionTest.cpp ConnectionTest.cpp
models/product.hpp models/product.hpp

View File

@ -6,7 +6,11 @@
using namespace matador::sql; using namespace matador::sql;
TEST_CASE("Create connection", "[connection]") { TEST_CASE("Create connection", "[connection]") {
connection c("sqlite://test.db"); auto dns = GENERATE(as<std::string>{},
"sqlite://sqlite.db",
"postgres://test:test123@127.0.0.1:5432/matador_test" );
connection c(dns);
REQUIRE(!c.is_open()); REQUIRE(!c.is_open());
c.open(); c.open();

View File

@ -9,9 +9,13 @@
using namespace matador::sql; using namespace matador::sql;
TEST_CASE("Create and drop table statement", "[session record]") { TEST_CASE("Create and drop table statement", "[session record]") {
connection_pool<connection> pool("sqlite://sqlite.db", 4); auto dns = GENERATE(as<std::string>{},
"sqlite://sqlite.db",
"postgres://test:test123@127.0.0.1:5432/matador_test" );
connection_pool<connection> pool(dns, 4);
session s(pool); session s(pool);
REQUIRE(!s.table_exists("person"));
auto res = s.create() auto res = s.create()
.table("person", { .table("person", {
make_pk_column<unsigned long>("id"), make_pk_column<unsigned long>("id"),
@ -22,6 +26,8 @@ TEST_CASE("Create and drop table statement", "[session record]") {
REQUIRE(res.second == R"(CREATE TABLE "person" ("id" BIGINT NOT NULL, "name" VARCHAR(255), "age" INTEGER, CONSTRAINT PK_person PRIMARY KEY (id)))"); REQUIRE(res.second == R"(CREATE TABLE "person" ("id" BIGINT NOT NULL, "name" VARCHAR(255), "age" INTEGER, CONSTRAINT PK_person PRIMARY KEY (id)))");
REQUIRE(s.table_exists("person"));
res = s.drop() res = s.drop()
.table("person") .table("person")
.execute(); .execute();

View File

@ -1,24 +0,0 @@
#include <catch2/catch_test_macros.hpp>
#include <catch2/generators/catch_generators.hpp>
#include "matador/sql/connection.hpp"
using namespace matador;
TEST_CASE("Query test", "[query]") {
auto dns = GENERATE(as<std::string>{},
"sqlite://sqlite.db",
"postgres://test:test123@127.0.0.1:5432/matador_test" );
sql::connection c(dns);
REQUIRE(!c.is_open());
c.open();
REQUIRE(c.is_open());
c.close();
REQUIRE(!c.is_open());
INFO(dns);
REQUIRE(!dns.empty());
}