2
0
mirror of https://github.com/boostorg/mysql.git synced 2026-01-30 08:02:26 +00:00
Files
mysql/test/metadata.cpp
ruben 0cf0be1005 Added first version of query (text protocol)
Added deserialize_text_row
Added deserialize_text_value
Added execute_query
Added fetch_text_row
Added resultset
Added connection::query
2019-11-08 20:31:31 +00:00

197 lines
6.4 KiB
C++

/*
* metadata.cpp
*
* Created on: Oct 27, 2019
* Author: ruben
*/
#include "mysql/metadata.hpp"
#include "mysql/impl/basic_serialization.hpp"
#include <gtest/gtest.h>
using namespace testing;
using namespace mysql;
using namespace detail;
namespace
{
// Note: these packets are the same to those in the (de)serialization tests
// for column_definition
struct FieldMetadataTest : public Test
{
using metadata_type = owning_field_metadata<std::allocator<std::uint8_t>>;
metadata_type make_metadata(std::vector<std::uint8_t>&& buffer) const
{
DeserializationContext ctx (boost::asio::buffer(buffer), capabilities());
msgs::column_definition column;
auto err = deserialize_message(column, ctx);
if (err) throw boost::system::system_error(err);
metadata_type meta (std::move(buffer), column);
buffer.resize(20, 0); // Try to catch any dangling pointer error
return meta;
}
metadata_type make_numeric_primary_key_metadata() const
{
return make_metadata({
0x03, 0x64, 0x65, 0x66, 0x07, 0x61, 0x77, 0x65,
0x73, 0x6f, 0x6d, 0x65, 0x0a, 0x74, 0x65, 0x73,
0x74, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x0a,
0x74, 0x65, 0x73, 0x74, 0x5f, 0x74, 0x61, 0x62,
0x6c, 0x65, 0x02, 0x69, 0x64, 0x02, 0x69, 0x64,
0x0c, 0x3f, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x03,
0x03, 0x42, 0x00, 0x00, 0x00
});
}
void verify_numeric_primary_key(const metadata_type& meta)
{
EXPECT_EQ(meta.database(), "awesome");
EXPECT_EQ(meta.table(), "test_table");
EXPECT_EQ(meta.original_table(), "test_table");
EXPECT_EQ(meta.field_name(), "id");
EXPECT_EQ(meta.original_field_name(), "id");
EXPECT_EQ(meta.field_collation(), collation::binary);
EXPECT_EQ(meta.column_length(), 11);
EXPECT_EQ(meta.type(), field_type::long_);
EXPECT_EQ(meta.decimals(), 0);
EXPECT_TRUE(meta.is_not_null());
EXPECT_TRUE(meta.is_primary_key());
EXPECT_FALSE(meta.is_unique_key());
EXPECT_FALSE(meta.is_multiple_key());
EXPECT_FALSE(meta.is_blob());
EXPECT_FALSE(meta.is_unsigned());
EXPECT_FALSE(meta.is_zerofill());
EXPECT_FALSE(meta.is_binary());
EXPECT_FALSE(meta.is_enum());
EXPECT_TRUE(meta.is_auto_increment());
EXPECT_FALSE(meta.is_timestamp());
EXPECT_FALSE(meta.is_set());
EXPECT_FALSE(meta.has_no_default_value());
EXPECT_FALSE(meta.is_set_to_now_on_update());
}
// Varchar field, aliased field and table names (query with a JOIN)
metadata_type make_joined_varchar_metadata()
{
return make_metadata({
0x03, 0x64, 0x65, 0x66, 0x07, 0x61, 0x77, 0x65,
0x73, 0x6f, 0x6d, 0x65, 0x05, 0x63, 0x68, 0x69,
0x6c, 0x64, 0x0b, 0x63, 0x68, 0x69, 0x6c, 0x64,
0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x0b, 0x66,
0x69, 0x65, 0x6c, 0x64, 0x5f, 0x61, 0x6c, 0x69,
0x61, 0x73, 0x0d, 0x66, 0x69, 0x65, 0x6c, 0x64,
0x5f, 0x76, 0x61, 0x72, 0x63, 0x68, 0x61, 0x72,
0x0c, 0x21, 0x00, 0xfd, 0x02, 0x00, 0x00, 0xfd,
0x00, 0x00, 0x00, 0x00, 0x00
});
}
};
TEST_F(FieldMetadataTest, InitializingAndMoveConstructor_NumericPrimaryKey)
{
auto meta = make_numeric_primary_key_metadata();
verify_numeric_primary_key(meta);
}
TEST_F(FieldMetadataTest, MoveConstructor_NumericPrimaryKey)
{
auto meta_temp = make_numeric_primary_key_metadata();
metadata_type meta (std::move(meta_temp));
verify_numeric_primary_key(meta);
}
TEST_F(FieldMetadataTest, MoveAssignment_NumericPrimaryKey)
{
metadata_type meta;
meta = make_numeric_primary_key_metadata();
verify_numeric_primary_key(meta);
}
TEST_F(FieldMetadataTest, InitializingAndMoveConstructor_VarcharWithAlias)
{
auto meta = make_metadata({
0x03, 0x64, 0x65, 0x66, 0x07, 0x61, 0x77, 0x65,
0x73, 0x6f, 0x6d, 0x65, 0x05, 0x63, 0x68, 0x69,
0x6c, 0x64, 0x0b, 0x63, 0x68, 0x69, 0x6c, 0x64,
0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x0b, 0x66,
0x69, 0x65, 0x6c, 0x64, 0x5f, 0x61, 0x6c, 0x69,
0x61, 0x73, 0x0d, 0x66, 0x69, 0x65, 0x6c, 0x64,
0x5f, 0x76, 0x61, 0x72, 0x63, 0x68, 0x61, 0x72,
0x0c, 0x21, 0x00, 0xfd, 0x02, 0x00, 0x00, 0xfd,
0x00, 0x00, 0x00, 0x00, 0x00
});
EXPECT_EQ(meta.database(), "awesome");
EXPECT_EQ(meta.table(), "child");
EXPECT_EQ(meta.original_table(), "child_table");
EXPECT_EQ(meta.field_name(), "field_alias");
EXPECT_EQ(meta.original_field_name(), "field_varchar");
EXPECT_EQ(meta.field_collation(), collation::utf8_general_ci);
EXPECT_EQ(meta.column_length(), 765);
EXPECT_EQ(meta.type(), field_type::var_string);
EXPECT_EQ(meta.decimals(), 0);
EXPECT_FALSE(meta.is_not_null());
EXPECT_FALSE(meta.is_primary_key());
EXPECT_FALSE(meta.is_unique_key());
EXPECT_FALSE(meta.is_multiple_key());
EXPECT_FALSE(meta.is_blob());
EXPECT_FALSE(meta.is_unsigned());
EXPECT_FALSE(meta.is_zerofill());
EXPECT_FALSE(meta.is_binary());
EXPECT_FALSE(meta.is_enum());
EXPECT_FALSE(meta.is_auto_increment());
EXPECT_FALSE(meta.is_timestamp());
EXPECT_FALSE(meta.is_set());
EXPECT_FALSE(meta.has_no_default_value());
EXPECT_FALSE(meta.is_set_to_now_on_update());
}
TEST_F(FieldMetadataTest, InitializingAndMoveConstructor_Float)
{
auto meta = make_metadata({
0x03, 0x64, 0x65, 0x66, 0x07, 0x61, 0x77, 0x65,
0x73, 0x6f, 0x6d, 0x65, 0x0a, 0x74, 0x65, 0x73,
0x74, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x0a,
0x74, 0x65, 0x73, 0x74, 0x5f, 0x74, 0x61, 0x62,
0x6c, 0x65, 0x0b, 0x66, 0x69, 0x65, 0x6c, 0x64,
0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x0b, 0x66,
0x69, 0x65, 0x6c, 0x64, 0x5f, 0x66, 0x6c, 0x6f,
0x61, 0x74, 0x0c, 0x3f, 0x00, 0x0c, 0x00, 0x00,
0x00, 0x04, 0x00, 0x00, 0x1f, 0x00, 0x00
});
EXPECT_EQ(meta.database(), "awesome");
EXPECT_EQ(meta.table(), "test_table");
EXPECT_EQ(meta.original_table(), "test_table");
EXPECT_EQ(meta.field_name(), "field_float");
EXPECT_EQ(meta.original_field_name(), "field_float");
EXPECT_EQ(meta.field_collation(), collation::binary);
EXPECT_EQ(meta.column_length(), 12);
EXPECT_EQ(meta.type(), field_type::float_);
EXPECT_EQ(meta.decimals(), 31);
EXPECT_FALSE(meta.is_not_null());
EXPECT_FALSE(meta.is_primary_key());
EXPECT_FALSE(meta.is_unique_key());
EXPECT_FALSE(meta.is_multiple_key());
EXPECT_FALSE(meta.is_blob());
EXPECT_FALSE(meta.is_unsigned());
EXPECT_FALSE(meta.is_zerofill());
EXPECT_FALSE(meta.is_binary());
EXPECT_FALSE(meta.is_enum());
EXPECT_FALSE(meta.is_auto_increment());
EXPECT_FALSE(meta.is_timestamp());
EXPECT_FALSE(meta.is_set());
EXPECT_FALSE(meta.has_no_default_value());
EXPECT_FALSE(meta.is_set_to_now_on_update());
}
} // anon namespace