1717
1818
1919#include " mariadb.h"
20+ #include " mysql/psi/psi_base.h"
2021#include " sql_priv.h"
2122#include " handler.h"
2223#ifndef MYSQL_CLIENT
@@ -3722,13 +3723,13 @@ Table_map_log_event::~Table_map_log_event()
37223723 @param[in] field SIGNEDNESS field in table_map_event.
37233724 @param[in] length length of the field
37243725 */
3725- static void parse_signedness (std::vector <bool > &vec,
3726+ static void parse_signedness (Dynamic_array <bool > &vec,
37263727 unsigned char *field, unsigned int length)
37273728{
37283729 for (unsigned int i= 0 ; i < length; i++)
37293730 {
37303731 for (unsigned char c= 0x80 ; c != 0 ; c>>= 1 )
3731- vec.push_back (field[i] & c);
3732+ vec.append (field[i] & c);
37323733 }
37333734}
37343735
@@ -3751,8 +3752,8 @@ static void parse_default_charset(Table_map_log_event::Optional_metadata_fields:
37513752 unsigned int col_index= net_field_length (&p);
37523753 unsigned int col_charset= net_field_length (&p);
37533754
3754- default_charset.charset_pairs .push_back (std::make_pair (col_index,
3755- col_charset));
3755+ default_charset.charset_pairs .append (std::make_pair (col_index,
3756+ col_charset));
37563757 }
37573758}
37583759
@@ -3763,13 +3764,13 @@ static void parse_default_charset(Table_map_log_event::Optional_metadata_fields:
37633764 @param[in] field COLUMN_CHARSET field in table_map_event.
37643765 @param[in] length length of the field
37653766 */
3766- static void parse_column_charset (std::vector< unsigned int > &vec,
3767+ static void parse_column_charset (Dynamic_array<uint > &vec,
37673768 unsigned char *field, unsigned int length)
37683769{
37693770 unsigned char * p= field;
37703771
37713772 while (p < field + length)
3772- vec.push_back (net_field_length (&p));
3773+ vec.append (net_field_length (&p));
37733774}
37743775
37753776/* *
@@ -3806,21 +3807,25 @@ static bool parse_column_name(MEM_ROOT *root, LEX_CSTRING *name,
38063807 @param[in] field COLUMN_NAME field in table_map_event.
38073808 @param[in] length length of the field
38083809 */
3809- static void parse_set_str_value (std::vector<Table_map_log_event::
3810- Optional_metadata_fields::str_vector> &vec,
3811- unsigned char *field, unsigned int length)
3810+ static void parse_set_str_value (
3811+ Dynamic_array<Table_map_log_event::Optional_metadata_fields::str_vector>
3812+ &vec,
3813+ unsigned char *field, unsigned int length)
38123814{
38133815 unsigned char * p= field;
38143816
38153817 while (p < field + length)
38163818 {
38173819 unsigned int count= net_field_length (&p);
38183820
3819- vec.push_back (std::vector<std::string>());
3821+ if (vec.reserve (vec.elements () + 1 ))
3822+ return ;
3823+ vec.elements (vec.elements () + 1 );
3824+ vec.back ()->init (PSI_INSTRUMENT_MEM);
38203825 for (unsigned int i= 0 ; i < count; i++)
38213826 {
38223827 unsigned len1= net_field_length (&p);
3823- vec.back (). push_back ( std::string ( reinterpret_cast <char *>(p), len1) );
3828+ vec.back ()-> append (LEX_CSTRING{ reinterpret_cast <char *>(p), len1} );
38243829 p+= len1;
38253830 }
38263831 }
@@ -3833,13 +3838,13 @@ static void parse_set_str_value(std::vector<Table_map_log_event::
38333838 @param[in] field GEOMETRY_TYPE field in table_map_event.
38343839 @param[in] length length of the field
38353840 */
3836- static void parse_geometry_type (std::vector< unsigned int > &vec,
3841+ static void parse_geometry_type (Dynamic_array<uint > &vec,
38373842 unsigned char *field, unsigned int length)
38383843{
38393844 unsigned char * p= field;
38403845
38413846 while (p < field + length)
3842- vec.push_back (net_field_length (&p));
3847+ vec.append (net_field_length (&p));
38433848}
38443849
38453850/* *
@@ -3852,14 +3857,15 @@ static void parse_geometry_type(std::vector<unsigned int> &vec,
38523857 @param[in] field SIMPLE_PRIMARY_KEY field in table_map_event.
38533858 @param[in] length length of the field
38543859 */
3855- static void parse_simple_pk (std::vector<Table_map_log_event::
3856- Optional_metadata_fields::uint_pair> &vec,
3857- unsigned char *field, unsigned int length)
3860+ static void parse_simple_pk (
3861+ Dynamic_array<Table_map_log_event::Optional_metadata_fields::uint_pair>
3862+ &vec,
3863+ unsigned char *field, unsigned int length)
38583864{
38593865 unsigned char * p= field;
38603866
38613867 while (p < field + length)
3862- vec.push_back (std::make_pair (net_field_length (&p), 0 ));
3868+ vec.append (std::make_pair (net_field_length (&p), 0 ));
38633869}
38643870
38653871/* *
@@ -3872,17 +3878,18 @@ static void parse_simple_pk(std::vector<Table_map_log_event::
38723878 @param[in] length length of the field
38733879 */
38743880
3875- static void parse_pk_with_prefix (std::vector<Table_map_log_event::
3876- Optional_metadata_fields::uint_pair> &vec,
3877- unsigned char *field, unsigned int length)
3881+ static void parse_pk_with_prefix (
3882+ Dynamic_array<Table_map_log_event::Optional_metadata_fields::uint_pair>
3883+ &vec,
3884+ unsigned char *field, unsigned int length)
38783885{
38793886 unsigned char * p= field;
38803887
38813888 while (p < field + length)
38823889 {
38833890 unsigned int col_index= net_field_length (&p);
38843891 unsigned int col_prefix= net_field_length (&p);
3885- vec.push_back (std::make_pair (col_index, col_prefix));
3892+ vec.append (std::make_pair (col_index, col_prefix));
38863893 }
38873894}
38883895
@@ -3891,6 +3898,11 @@ Optional_metadata_fields(MEM_ROOT *root, uint master_columns,
38913898 uchar* optional_metadata,
38923899 size_t optional_metadata_len,
38933900 bool only_column_names)
3901+ : m_signedness(PSI_INSTRUMENT_MEM), m_column_charset(PSI_INSTRUMENT_MEM),
3902+ m_enum_and_set_column_charset(PSI_INSTRUMENT_MEM),
3903+ m_enum_str_value(PSI_INSTRUMENT_MEM),
3904+ m_set_str_value(PSI_INSTRUMENT_MEM), m_geometry_type(PSI_INSTRUMENT_MEM),
3905+ m_primary_key(PSI_INSTRUMENT_MEM)
38943906{
38953907 unsigned int len;
38963908 uchar *metadata_end;
0 commit comments