mysql5/mysql-5.7.27/sql/rpl_info_table.h

163 lines
5.1 KiB
C++

/* Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; version 2 of the License.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
#ifndef RPL_INFO_TABLE_H
#define RPL_INFO_TABLE_H
#include "my_global.h"
#include "mysql/mysql_lex_string.h" // LEX_STRING
#include "rpl_info_handler.h" // Rpl_info_handler
#include "table.h" // TABLE
class Rpl_info_table_access;
typedef struct st_mysql_lex_string LEX_STRING;
/**
Methods to find information in a table:
FIND_SCAN does a index scan and stops at n-th occurrence.
FIND_KEY retrieves the index entry previous populated at
values if there is any.
*/
enum enum_find_method { FIND_SCAN, FIND_KEY };
class Rpl_info_table : public Rpl_info_handler
{
friend class Rpl_info_factory;
public:
virtual ~Rpl_info_table();
private:
/**
This property identifies the name of the schema where a
replication table is created.
*/
LEX_STRING str_schema;
/**
This property identifies the name of a replication
table.
*/
LEX_STRING str_table;
/**
This property represents a description of the repository.
Speciffically, "schema"."table".
*/
char *description;
/**
This property represents the amount of fields in the repository
primary key.
*/
uint m_n_pk_fields;
/**
This property identifies the indexes of the primary keys fields
in the table.
*/
const uint *m_pk_field_indexes;
/**
This is a pointer to a class that facilitates manipulation
of replication tables.
*/
Rpl_info_table_access *access;
/**
Identifies if a table is transactional or non-transactional.
This is used to provide a crash-safe behaviour.
*/
bool is_transactional;
int do_init_info();
int do_init_info(uint instance);
int do_init_info(enum_find_method method, uint instance);
enum_return_check do_check_info();
enum_return_check do_check_info(uint instance);
void do_end_info();
int do_flush_info(const bool force);
int do_remove_info();
int do_clean_info();
/**
Returns the number of entries in the table identified by:
param_schema.param_table.
@param[in] nparam Number of fields in the table.
@param[in] param_schema Table's schema.
@param[in] param_table Table's name.
@param[out] counter Number of entries found.
@retval false Success
@retval true Error
*/
static bool do_count_info(uint nparam, const char* param_schema,
const char* param_table, uint* counter);
static int do_reset_info(uint nparam, const char* param_schema,
const char *param_table,
const char *channel_name, uint channel_idx);
int do_prepare_info_for_read();
int do_prepare_info_for_write();
bool do_set_info(const int pos, const char *value);
bool do_set_info(const int pos, const uchar *value,
const size_t size);
bool do_set_info(const int pos, const int value);
bool do_set_info(const int pos, const ulong value);
bool do_set_info(const int pos, const float value);
bool do_set_info(const int pos, const Server_ids *value);
bool do_get_info(const int pos, char *value, const size_t size,
const char *default_value);
bool do_get_info(const int pos, uchar *value, const size_t size,
const uchar *default_value);
bool do_get_info(const int pos, int *value,
const int default_value);
bool do_get_info(const int pos, ulong *value,
const ulong default_value);
bool do_get_info(const int pos, float *value,
const float default_value);
bool do_get_info(const int pos, Server_ids *value,
const Server_ids *default_value);
char* do_get_description_info();
bool do_is_transactional();
bool do_update_is_transactional();
uint do_get_rpl_info_type();
/**
Verify if the table primary key fields are at the expected (column)
position.
@param table The table handle where the verification will be done.
@return false if the table primary key fields are fine.
@return true if problems were found with table primary key fields.
*/
bool verify_table_primary_key_fields(TABLE* table);
Rpl_info_table(uint nparam,
const char* param_schema,
const char *param_table,
const uint param_n_pk_fields= 0,
const uint *param_pk_field_indexes= NULL);
Rpl_info_table(const Rpl_info_table& info);
Rpl_info_table& operator=(const Rpl_info_table& info);
};
#endif /* RPL_INFO_TABLE_H */