From 87b6e65a327dd28a1a0ca74fc1589639fa4aed0b Mon Sep 17 00:00:00 2001 From: ruben Date: Wed, 5 Feb 2020 11:38:38 +0000 Subject: [PATCH] Added connection::prepare_statement sync exc --- include/mysql/connection.hpp | 1 + include/mysql/impl/connection.ipp | 13 +++++++++++++ test/integration/prepare_statement.cpp | 24 ++++++++++++++++++------ 3 files changed, 32 insertions(+), 6 deletions(-) diff --git a/include/mysql/connection.hpp b/include/mysql/connection.hpp index 7082590c..c3241fe8 100644 --- a/include/mysql/connection.hpp +++ b/include/mysql/connection.hpp @@ -123,6 +123,7 @@ public: async_query(std::string_view query_string, CompletionToken&& token); prepared_statement prepare_statement(std::string_view statement, error_code&, error_info&); + prepared_statement prepare_statement(std::string_view statement); }; /// A connection to MySQL over TCP. diff --git a/include/mysql/impl/connection.ipp b/include/mysql/impl/connection.ipp index d40b8406..6f48620c 100644 --- a/include/mysql/impl/connection.ipp +++ b/include/mysql/impl/connection.ipp @@ -132,5 +132,18 @@ mysql::prepared_statement mysql::connection::prepare_statement( return res; } +template +mysql::prepared_statement mysql::connection::prepare_statement( + std::string_view statement +) +{ + mysql::prepared_statement res; + error_code err; + error_info info; + detail::prepare_statement(channel_, statement, err, info, res); + detail::check_error_code(err, info); + return res; +} + #endif diff --git a/test/integration/prepare_statement.cpp b/test/integration/prepare_statement.cpp index 5526a169..f8cfc111 100644 --- a/test/integration/prepare_statement.cpp +++ b/test/integration/prepare_statement.cpp @@ -18,11 +18,12 @@ struct PrepareStatementTest : public IntegTestAfterHandshake { }; +// sync errc TEST_F(PrepareStatementTest, SyncErrc_OkNoParams) { auto stmt = conn.prepare_statement("SELECT * FROM empty_table", errc, info); validate_no_error(); - EXPECT_TRUE(stmt.valid()); + ASSERT_TRUE(stmt.valid()); EXPECT_GT(stmt.id(), 0); EXPECT_EQ(stmt.num_params(), 0); } @@ -43,12 +44,23 @@ TEST_F(PrepareStatementTest, SyncErrc_Error) EXPECT_FALSE(stmt.valid()); } +// sync exc +TEST_F(PrepareStatementTest, SyncExc_Ok) +{ + auto stmt = conn.prepare_statement("SELECT * FROM empty_table WHERE id = ?"); + ASSERT_TRUE(stmt.valid()); + EXPECT_GT(stmt.id(), 0); + EXPECT_EQ(stmt.num_params(), 1); +} + +TEST_F(PrepareStatementTest, SyncExc_Err) +{ + validate_sync_fail([this] { + conn.prepare_statement("SELECT * FROM bad_table WHERE id IN (?, ?)"); + }, Error::no_such_table, {"table", "doesn't exist", "bad_table"}); +} + -// prepared_statement::execute -// OK, no params -// OK, with params -// OK, select, insert, update, delete -// Error, wrong number of parameters // resultset::fetch_xxxx: repeat the same tests as in query // Cover no params, with params, select, insert, update, delete, with table/fields as params // statements life cycle