storage/perfschema/table_plugin_table.h (68 lines of code) (raw):

/* Copyright (c) 2017, 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 TABLE_PLUGIN_TABLE_H #define TABLE_PLUGIN_TABLE_H /** @file storage/perfschema/table_plugin_table.h plugins/components tables (declarations). */ #include "pfs_engine_table.h" #include <mysql/components/services/pfs_plugin_table_service.h> /** @addtogroup Performance_schema_tables @{ */ class PFS_plugin_table_index; class table_plugin_table : public PFS_engine_table { public: /** Table share */ PFS_engine_table_share* m_share; PFS_engine_table_proxy* m_st_table; PSI_table_handle* plugin_table_handle; static PFS_engine_table* create(PFS_engine_table_share* share); int delete_all_rows(); /* PFS_engine_table* open(void); ha_rows get_row_count(); */ virtual void reset_position(void); virtual int rnd_init(bool scan); virtual int rnd_next(); virtual int rnd_pos(const void* pos); virtual int index_init(uint idx, bool sorted); virtual int index_next(); int write_row(PSI_field* field, uint index, bool finished); table_plugin_table(PFS_engine_table_share* share); void deinitialize_table_share(); protected: virtual int read_row_values(TABLE* table, unsigned char* buf, Field** fields, bool read_all); virtual int update_row_values(TABLE* table, const unsigned char*, unsigned char*, Field** fields); virtual int delete_row_values(TABLE *table, const unsigned char *buf, Field **fields); public: ~table_plugin_table() { delete m_index; m_st_table->close_table(this->plugin_table_handle); } private: /** Table share lock. */ THR_LOCK* m_table_lock; /** True is the current row exists. */ bool m_row_exists; /** Current position. */ PSI_pos* m_pos; /** Next position. */ PSI_pos* m_next_pos; PFS_plugin_table_index* m_opened_index; }; class PFS_plugin_table_index : public PFS_engine_index_abstract { public: PFS_plugin_table_index(PFS_engine_table_proxy* st_table) : m_st_table(st_table), m_idx(0), m_plugin_index(NULL) { } ~PFS_plugin_table_index() { } int init(PSI_table_handle* table, uint idx, bool sorted); int index_next(PSI_table_handle* table); virtual void read_key(const uchar* key, uint key_len, enum ha_rkey_function find_flag); private: PFS_engine_table_proxy* m_st_table; uint m_idx; PSI_index_handle* m_plugin_index; }; /** @} */ #endif