diff options
Diffstat (limited to 'test/test-postgresql.cpp')
-rw-r--r-- | test/test-postgresql.cpp | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/test/test-postgresql.cpp b/test/test-postgresql.cpp index 5940b38..f388ef2 100644 --- a/test/test-postgresql.cpp +++ b/test/test-postgresql.cpp @@ -1,9 +1,17 @@ #define BOOST_TEST_MODULE PostgreSQL #include <boost/test/unit_test.hpp> +#include <compileTimeFormatter.h> +#include <cstddef> +#include <dbRecordSet.h> +#include <dbStmt.h> #include <dbTypes.h> +#include <memory> #include <output/pq/pqConn.h> #include <stdexcept> +#include <string_view> +#include <type_traits> +#include <variant> BOOST_AUTO_TEST_CASE(simple) { @@ -26,3 +34,39 @@ BOOST_AUTO_TEST_CASE(simple) BOOST_CHECK_THROW(c.query("INSERT INTO test VALUES($1)", {MyGrate::Time {}}), std::runtime_error); c.query("DROP TABLE test"); } + +using SomeUpdate = MyGrate::DbStmt<"UPDATE foo SET blah = $2 WHERE bar = $1", MyGrate::ParamMode::DollarNum>; +using SomeUpdateRtn + = MyGrate::DbStmt<"UPDATE foo SET blah = $2 WHERE bar = $1 RETURNING x", MyGrate::ParamMode::DollarNum>; +using SomeShow = MyGrate::DbStmt<"SHOW all", MyGrate::ParamMode::DollarNum>; +using SomeIns = MyGrate::DbStmt<"INSERT INTO foo VALUES(..., $87)", MyGrate::ParamMode::DollarNum>; + +static_assert(SomeUpdate::paramCount == 2); +static_assert(std::is_same_v<SomeUpdate::Return, std::size_t>); +static_assert(SomeUpdateRtn::paramCount == 2); +static_assert(std::is_same_v<SomeUpdateRtn::Return, MyGrate::RecordSetPtr>); +static_assert(SomeShow::paramCount == 0); +static_assert(SomeIns::paramCount == 87); +static_assert(std::is_same_v<SomeIns::Return, std::size_t>); + +BOOST_AUTO_TEST_CASE(stmt) +{ + MyGrate::Output::Pq::PqConn c {"user=postgres"}; + const auto rs {SomeShow::execute(&c)}; + BOOST_REQUIRE(rs); + BOOST_REQUIRE_EQUAL(rs->columns(), 3); + BOOST_REQUIRE_GT(rs->rows(), 1); + BOOST_CHECK_EQUAL(std::get<std::string_view>(rs->at(0, 0)), "allow_system_table_mods"); + BOOST_CHECK_EQUAL(std::get<std::string_view>(rs->at(0, 1)), "off"); +} + +BOOST_AUTO_TEST_CASE(stmt_reuse) +{ + MyGrate::Output::Pq::PqConn c {"user=postgres"}; + for (int x = 0; x < 10; x++) { + const auto rs {SomeShow::execute(&c)}; + BOOST_REQUIRE(rs); + BOOST_CHECK_EQUAL(rs->columns(), 3); + BOOST_CHECK_GT(rs->rows(), 1); + } +} |