2
0
mirror of https://github.com/boostorg/mysql.git synced 2026-02-14 00:42:53 +00:00
Files
mysql/test/integration/query.cpp
ruben dafe0fa1d4 Refactor file structure to not conflict with mysql
Now all includes live within boost
Corrected convention for .hpp and .ipp
Corrected convention for impl/detail
Now detail is split into auth/aux/protocol/network_algorithms
2020-03-17 12:22:05 +00:00

98 lines
2.9 KiB
C++

/*
* query.cpp
*
* Created on: Nov 11, 2019
* Author: ruben
*/
#include "boost/mysql/connection.hpp"
#include <gmock/gmock.h> // for EXPECT_THAT()
#include <boost/asio/use_future.hpp>
#include "metadata_validator.hpp"
#include "integration_test_common.hpp"
#include "test_common.hpp"
namespace net = boost::asio;
using namespace testing;
using namespace mysql::test;
using mysql::detail::make_error_code;
using mysql::test::meta_validator;
using mysql::test::validate_meta;
using mysql::field_metadata;
using mysql::field_type;
using mysql::error_code;
using mysql::error_info;
namespace
{
struct QueryTest : public NetworkTest<>
{
auto do_query(std::string_view sql) { return GetParam()->query(conn, sql); }
};
TEST_P(QueryTest, InsertQueryOk)
{
const char* sql = "INSERT INTO inserts_table (field_varchar, field_date) VALUES ('v0', '2010-10-11')";
auto result = do_query(sql);
result.validate_no_error();
EXPECT_TRUE(result.value.fields().empty());
EXPECT_TRUE(result.value.valid());
EXPECT_TRUE(result.value.complete());
EXPECT_EQ(result.value.affected_rows(), 1);
EXPECT_EQ(result.value.warning_count(), 0);
EXPECT_GT(result.value.last_insert_id(), 0);
EXPECT_EQ(result.value.info(), "");
}
TEST_P(QueryTest, InsertQueryFailed)
{
const char* sql = "INSERT INTO bad_table (field_varchar, field_date) VALUES ('v0', '2010-10-11')";
auto result = do_query(sql);
result.validate_error(mysql::Error::no_such_table, {"table", "doesn't exist", "bad_table"});
EXPECT_FALSE(result.value.valid());
}
TEST_P(QueryTest, UpdateQueryOk)
{
const char* sql = "UPDATE updates_table SET field_int = field_int+1";
auto result = do_query(sql);
result.validate_no_error();
EXPECT_TRUE(result.value.fields().empty());
EXPECT_TRUE(result.value.valid());
EXPECT_TRUE(result.value.complete());
EXPECT_EQ(result.value.affected_rows(), 2);
EXPECT_EQ(result.value.warning_count(), 0);
EXPECT_EQ(result.value.last_insert_id(), 0);
EXPECT_THAT(std::string(result.value.info()), HasSubstr("Rows matched"));
}
TEST_P(QueryTest, SelectOk)
{
auto result = do_query("SELECT * FROM empty_table");
result.validate_no_error();
EXPECT_TRUE(result.value.valid());
EXPECT_FALSE(result.value.complete());
validate_2fields_meta(result.value, "empty_table");
}
TEST_P(QueryTest, SelectQueryFailed)
{
auto result = do_query("SELECT field_varchar, field_bad FROM one_row_table");
result.validate_error(mysql::Error::bad_field_error, {"unknown column", "field_bad"});
EXPECT_FALSE(result.value.valid());
}
// Some system-level query tests (TODO: this does not feel right here)
TEST_P(QueryTest, QueryAndFetch_AliasedTableAndField_MetadataCorrect)
{
auto result = do_query("SELECT field_varchar AS field_alias FROM empty_table table_alias");
meta_validator validator ("table_alias", "empty_table", "field_alias",
"field_varchar", field_type::varchar);
result.validate_no_error();
validate_meta(result.value.fields(), {validator});
}
} // anon namespace