23#ifndef PFS_DATA_LOCK_H
24#define PFS_DATA_LOCK_H
32#include <unordered_set>
160 size_t engine_length [[maybe_unused]]) {
165 size_t engine_lock_id_length [[maybe_unused]]) {
180 size_t table_schema_length [[maybe_unused]],
182 size_t table_name_length [[maybe_unused]],
183 const char *partition_name [[maybe_unused]],
184 size_t partition_name_length [[maybe_unused]],
185 const char *sub_partition_name [[maybe_unused]],
186 size_t sub_partition_name_length [[maybe_unused]]) {
201 size_t engine_lock_id_length)
override {
203 if (!
m_key_1.
match(engine_lock_id, engine_lock_id_length)) {
230 m_key_1(
"ENGINE_TRANSACTION_ID"),
298 m_key_4(
"SUBPARTITION_NAME") {}
302 bool match_object(
const char *table_schema,
size_t table_schema_length,
303 const char *
table_name,
size_t table_name_length,
304 const char *partition_name,
size_t partition_name_length,
305 const char *sub_partition_name,
306 size_t sub_partition_name_length)
override {
308 if (!
m_key_1.
match(table_schema, table_schema_length)) {
320 if (!
m_key_3.
match(partition_name, partition_name_length)) {
326 if (!
m_key_4.
match(sub_partition_name, sub_partition_name_length)) {
349 size_t engine_length [[maybe_unused]]) {
355 size_t engine_lock_id_length
362 size_t engine_lock_id_length
397 m_key_1(
"REQUESTING_ENGINE_LOCK_ID"),
403 size_t engine_lock_id_length)
override {
405 if (!
m_key_1.
match(engine_lock_id, engine_lock_id_length)) {
433 m_key_1(
"BLOCKING_ENGINE_LOCK_ID"),
439 size_t engine_lock_id_length)
override {
441 if (!
m_key_1.
match(engine_lock_id, engine_lock_id_length)) {
469 m_key_1(
"REQUESTING_ENGINE_TRANSACTION_ID"),
475 ulonglong engine_transaction_id)
override {
505 m_key_1(
"BLOCKING_ENGINE_TRANSACTION_ID"),
540 m_key_1(
"REQUESTING_THREAD_ID"),
541 m_key_2(
"REQUESTING_EVENT_ID") {}
573 m_key_2(
"BLOCKING_EVENT_ID") {}
620 bool accept_engine(
const char *engine,
size_t engine_length)
override;
622 size_t engine_lock_id_length)
override;
626 bool accept_object(
const char *table_schema,
size_t table_schema_length,
627 const char *
table_name,
size_t table_name_length,
628 const char *partition_name,
size_t partition_name_length,
629 const char *sub_partition_name,
630 size_t sub_partition_name_length)
override;
632 void add_lock_row(
const char *engine,
size_t engine_length,
633 const char *engine_lock_id,
size_t engine_lock_id_length,
635 ulonglong event_id,
const char *table_schema,
636 size_t table_schema_length,
const char *
table_name,
637 size_t table_name_length,
const char *partition_name,
638 size_t partition_name_length,
639 const char *sub_partition_name,
640 size_t sub_partition_name_length,
const char *index_name,
641 size_t index_name_length,
const void *identity,
642 const char *
lock_mode,
const char *lock_type,
643 const char *lock_status,
const char *lock_data)
override;
675 bool accept_engine(
const char *engine,
size_t engine_length)
override;
677 size_t engine_lock_id_length)
override;
679 size_t engine_lock_id_length)
override;
688 const char *engine,
size_t engine_length,
689 const char *requesting_engine_lock_id,
690 size_t requesting_engine_lock_id_length,
692 ulonglong requesting_event_id,
const void *requesting_identity,
693 const char *blocking_engine_lock_id,
694 size_t blocking_engine_lock_id_length,
ulonglong blocking_transaction_id,
696 const void *blocking_identity)
override;
Definition: pfs_data_lock.h:599
void clear()
Definition: pfs_data_lock.cc:200
std::unordered_set< std::string > set_type
Definition: pfs_data_lock.h:608
const char * cache_data(const char *ptr, size_t length)
Definition: pfs_data_lock.cc:187
set_type m_set
Definition: pfs_data_lock.h:609
Definition: pfs_data_lock.h:612
PFS_data_lock_container()
Definition: pfs_data_lock.cc:202
bool accept_lock_id(const char *engine_lock_id, size_t engine_lock_id_length) override
Check if the container accepts data for a particular lock.
Definition: pfs_data_lock.cc:224
std::vector< row_data_lock > m_rows
Definition: pfs_data_lock.h:661
~PFS_data_lock_container() override
bool accept_thread_id_event_id(ulonglong thread_id, ulonglong event_id) override
Check if the container accepts data for a particular event.
Definition: pfs_data_lock.cc:239
bool accept_engine(const char *engine, size_t engine_length) override
Check if the container accepts data for a particular engine.
Definition: pfs_data_lock.cc:216
void add_lock_row(const char *engine, size_t engine_length, const char *engine_lock_id, size_t engine_lock_id_length, ulonglong transaction_id, ulonglong thread_id, ulonglong event_id, const char *table_schema, size_t table_schema_length, const char *table_name, size_t table_name_length, const char *partition_name, size_t partition_name_length, const char *sub_partition_name, size_t sub_partition_name_length, const char *index_name, size_t index_name_length, const void *identity, const char *lock_mode, const char *lock_type, const char *lock_status, const char *lock_data) override
Add a row to table performance_schema.data_locks.
Definition: pfs_data_lock.cc:261
size_t m_logical_row_index
Definition: pfs_data_lock.h:660
bool accept_transaction_id(ulonglong transaction_id) override
Check if the container accepts data for a particular transaction.
Definition: pfs_data_lock.cc:232
void set_filter(PFS_index_data_locks *filter)
Definition: pfs_data_lock.h:657
const char * cache_string(const char *string) override
Add a string to the container cache.
Definition: pfs_data_lock.cc:207
void clear()
Clear the container.
Definition: pfs_data_lock.cc:322
PFS_index_data_locks * m_filter
Definition: pfs_data_lock.h:663
const char * cache_data(const char *ptr, size_t length) override
Add binary data to the container cache.
Definition: pfs_data_lock.cc:211
bool accept_object(const char *table_schema, size_t table_schema_length, const char *table_name, size_t table_name_length, const char *partition_name, size_t partition_name_length, const char *sub_partition_name, size_t sub_partition_name_length) override
Check if the container accepts data for a particular object.
Definition: pfs_data_lock.cc:247
row_data_lock * get_row(size_t index)
Definition: pfs_data_lock.cc:336
PFS_data_cache m_cache
Definition: pfs_data_lock.h:662
void shrink()
Shrink the container.
Definition: pfs_data_lock.cc:328
Definition: pfs_data_lock.h:667
void clear()
Clear the container.
Definition: pfs_data_lock.cc:483
row_data_lock_wait * get_row(size_t index)
Definition: pfs_data_lock.cc:497
PFS_data_cache m_cache
Definition: pfs_data_lock.h:715
void set_filter(PFS_index_data_lock_waits *filter)
Definition: pfs_data_lock.h:710
~PFS_data_lock_wait_container() override
bool accept_requesting_thread_id_event_id(ulonglong thread_id, ulonglong event_id) override
Check if the container accepts data for a particular requesting event.
Definition: pfs_data_lock.cc:411
bool accept_blocking_lock_id(const char *engine_lock_id, size_t engine_lock_id_length) override
Check if the container accepts data for a particular blocking lock id.
Definition: pfs_data_lock.cc:386
std::vector< row_data_lock_wait > m_rows
Definition: pfs_data_lock.h:714
PFS_data_lock_wait_container()
Definition: pfs_data_lock.cc:355
bool accept_requesting_transaction_id(ulonglong transaction_id) override
Check if the container accepts data for a particular requesting transaction id.
Definition: pfs_data_lock.cc:395
bool accept_requesting_lock_id(const char *engine_lock_id, size_t engine_lock_id_length) override
Check if the container accepts data for a particular requesting lock id.
Definition: pfs_data_lock.cc:377
const char * cache_string(const char *string) override
Definition: pfs_data_lock.cc:360
bool accept_blocking_thread_id_event_id(ulonglong thread_id, ulonglong event_id) override
Check if the container accepts data for a particular blocking event.
Definition: pfs_data_lock.cc:419
bool accept_engine(const char *engine, size_t engine_length) override
Check if the container accepts data for a particular engine.
Definition: pfs_data_lock.cc:369
PFS_index_data_lock_waits * m_filter
Definition: pfs_data_lock.h:716
bool accept_blocking_transaction_id(ulonglong transaction_id) override
Check if the container accepts data for a particular blocking transaction id.
Definition: pfs_data_lock.cc:403
size_t m_logical_row_index
Definition: pfs_data_lock.h:713
void shrink()
Shrink the container.
Definition: pfs_data_lock.cc:489
void add_lock_wait_row(const char *engine, size_t engine_length, const char *requesting_engine_lock_id, size_t requesting_engine_lock_id_length, ulonglong requesting_transaction_id, ulonglong requesting_thread_id, ulonglong requesting_event_id, const void *requesting_identity, const char *blocking_engine_lock_id, size_t blocking_engine_lock_id_length, ulonglong blocking_transaction_id, ulonglong blocking_thread_id, ulonglong blocking_event_id, const void *blocking_identity) override
Add a row to table performance_schema.data_lock_waits.
Definition: pfs_data_lock.cc:427
const char * cache_data(const char *ptr, size_t length) override
Definition: pfs_data_lock.cc:364
uint m_fields
Definition: pfs_engine_table.h:295
Definition: pfs_engine_table.h:299
Definition: pfs_engine_table.h:267
Definition: pfs_data_lock.h:429
bool match_engine(const char *engine, size_t engine_length) override
Definition: pfs_data_lock.h:449
bool match_blocking_lock_id(const char *engine_lock_id, size_t engine_lock_id_length) override
Definition: pfs_data_lock.h:438
PFS_key_engine_name m_key_2
Definition: pfs_data_lock.h:461
PFS_key_engine_lock_id m_key_1
Definition: pfs_data_lock.h:460
~PFS_index_data_lock_waits_by_blocking_lock_id() override=default
PFS_index_data_lock_waits_by_blocking_lock_id()
Definition: pfs_data_lock.h:431
Definition: pfs_data_lock.h:568
PFS_key_event_id m_key_2
Definition: pfs_data_lock.h:596
PFS_key_thread_id m_key_1
Definition: pfs_data_lock.h:595
PFS_index_data_lock_waits_by_blocking_thread_id()
Definition: pfs_data_lock.h:570
~PFS_index_data_lock_waits_by_blocking_thread_id() override=default
bool match_blocking_thread_id_event_id(ulonglong thread_id, ulonglong event_id) override
Definition: pfs_data_lock.h:577
Definition: pfs_data_lock.h:501
PFS_key_engine_name m_key_2
Definition: pfs_data_lock.h:532
PFS_index_data_lock_waits_by_blocking_transaction_id()
Definition: pfs_data_lock.h:503
bool match_blocking_transaction_id(ulonglong engine_transaction_id) override
Definition: pfs_data_lock.h:510
bool match_engine(const char *engine, size_t engine_length) override
Definition: pfs_data_lock.h:520
~PFS_index_data_lock_waits_by_blocking_transaction_id() override=default
PFS_key_engine_transaction_id m_key_1
Definition: pfs_data_lock.h:531
Definition: pfs_data_lock.h:393
PFS_key_engine_name m_key_2
Definition: pfs_data_lock.h:425
PFS_index_data_lock_waits_by_requesting_lock_id()
Definition: pfs_data_lock.h:395
PFS_key_engine_lock_id m_key_1
Definition: pfs_data_lock.h:424
~PFS_index_data_lock_waits_by_requesting_lock_id() override=default
bool match_requesting_lock_id(const char *engine_lock_id, size_t engine_lock_id_length) override
Definition: pfs_data_lock.h:402
bool match_engine(const char *engine, size_t engine_length) override
Definition: pfs_data_lock.h:413
Definition: pfs_data_lock.h:536
PFS_key_thread_id m_key_1
Definition: pfs_data_lock.h:563
~PFS_index_data_lock_waits_by_requesting_thread_id() override=default
bool match_requesting_thread_id_event_id(ulonglong thread_id, ulonglong event_id) override
Definition: pfs_data_lock.h:545
PFS_key_event_id m_key_2
Definition: pfs_data_lock.h:564
PFS_index_data_lock_waits_by_requesting_thread_id()
Definition: pfs_data_lock.h:538
Definition: pfs_data_lock.h:465
PFS_key_engine_transaction_id m_key_1
Definition: pfs_data_lock.h:496
~PFS_index_data_lock_waits_by_requesting_transaction_id() override=default
bool match_requesting_transaction_id(ulonglong engine_transaction_id) override
Definition: pfs_data_lock.h:474
PFS_index_data_lock_waits_by_requesting_transaction_id()
Definition: pfs_data_lock.h:467
PFS_key_engine_name m_key_2
Definition: pfs_data_lock.h:497
bool match_engine(const char *engine, size_t engine_length) override
Definition: pfs_data_lock.h:485
Definition: pfs_data_lock.h:341
virtual bool match_blocking_lock_id(const char *engine_lock_id, size_t engine_lock_id_length)
Definition: pfs_data_lock.h:360
virtual bool match_requesting_thread_id_event_id(ulonglong thread_id, ulonglong event_id)
Definition: pfs_data_lock.h:377
~PFS_index_data_lock_waits() override=default
virtual bool match_blocking_transaction_id(ulonglong engine_transaction_id)
Definition: pfs_data_lock.h:372
PFS_index_data_lock_waits(PFS_engine_key *key_1, PFS_engine_key *key_2)
Definition: pfs_data_lock.h:343
virtual bool match_engine(const char *engine, size_t engine_length)
Definition: pfs_data_lock.h:348
virtual bool match_requesting_transaction_id(ulonglong engine_transaction_id)
Definition: pfs_data_lock.h:367
virtual bool match_blocking_thread_id_event_id(ulonglong thread_id, ulonglong event_id)
Definition: pfs_data_lock.h:384
virtual bool match_requesting_lock_id(const char *engine_lock_id, size_t engine_lock_id_length)
Definition: pfs_data_lock.h:353
Definition: pfs_data_lock.h:191
~PFS_index_data_locks_by_lock_id() override=default
PFS_key_engine_name m_key_2
Definition: pfs_data_lock.h:223
PFS_key_engine_lock_id m_key_1
Definition: pfs_data_lock.h:222
bool match_lock_id(const char *engine_lock_id, size_t engine_lock_id_length) override
Definition: pfs_data_lock.h:200
bool match_engine(const char *engine, size_t engine_length) override
Definition: pfs_data_lock.h:211
PFS_index_data_locks_by_lock_id()
Definition: pfs_data_lock.h:193
Definition: pfs_data_lock.h:291
bool match_object(const char *table_schema, size_t table_schema_length, const char *table_name, size_t table_name_length, const char *partition_name, size_t partition_name_length, const char *sub_partition_name, size_t sub_partition_name_length) override
Definition: pfs_data_lock.h:302
~PFS_index_data_locks_by_object() override=default
PFS_index_data_locks_by_object()
Definition: pfs_data_lock.h:293
PFS_key_object_name m_key_2
Definition: pfs_data_lock.h:336
PFS_key_object_schema m_key_1
Definition: pfs_data_lock.h:335
PFS_key_name m_key_4
Definition: pfs_data_lock.h:338
PFS_key_name m_key_3
Definition: pfs_data_lock.h:337
Definition: pfs_data_lock.h:260
PFS_index_data_locks_by_thread_id()
Definition: pfs_data_lock.h:262
PFS_key_thread_id m_key_1
Definition: pfs_data_lock.h:287
PFS_key_event_id m_key_2
Definition: pfs_data_lock.h:288
~PFS_index_data_locks_by_thread_id() override=default
bool match_thread_id_event_id(ulonglong thread_id, ulonglong event_id) override
Definition: pfs_data_lock.h:269
Definition: pfs_data_lock.h:226
bool match_engine(const char *engine, size_t engine_length) override
Definition: pfs_data_lock.h:245
PFS_index_data_locks_by_transaction_id()
Definition: pfs_data_lock.h:228
bool match_transaction_id(ulonglong engine_transaction_id) override
Definition: pfs_data_lock.h:235
PFS_key_engine_name m_key_2
Definition: pfs_data_lock.h:257
~PFS_index_data_locks_by_transaction_id() override=default
PFS_key_engine_transaction_id m_key_1
Definition: pfs_data_lock.h:256
Definition: pfs_data_lock.h:148
PFS_index_data_locks(PFS_engine_key *key_1, PFS_engine_key *key_2)
Definition: pfs_data_lock.h:150
virtual bool match_transaction_id(ulonglong engine_transaction_id)
Definition: pfs_data_lock.h:169
PFS_index_data_locks(PFS_engine_key *key_1, PFS_engine_key *key_2, PFS_engine_key *key_3, PFS_engine_key *key_4)
Definition: pfs_data_lock.h:153
~PFS_index_data_locks() override=default
virtual bool match_thread_id_event_id(ulonglong thread_id, ulonglong event_id)
Definition: pfs_data_lock.h:174
virtual bool match_object(const char *table_schema, size_t table_schema_length, const char *table_name, size_t table_name_length, const char *partition_name, size_t partition_name_length, const char *sub_partition_name, size_t sub_partition_name_length)
Definition: pfs_data_lock.h:179
virtual bool match_engine(const char *engine, size_t engine_length)
Definition: pfs_data_lock.h:159
virtual bool match_lock_id(const char *engine_lock_id, size_t engine_lock_id_length)
Definition: pfs_data_lock.h:164
Definition: table_helper.h:1553
bool match(const char *engine_lock_id, size_t length)
Definition: table_helper.cc:2071
Definition: table_helper.h:1543
bool match(const char *engine_name, size_t length)
Definition: table_helper.cc:2067
Definition: table_helper.h:1289
bool match(ulonglong engine_transaction_id)
Definition: table_helper.cc:1757
Definition: table_helper.h:1266
bool match(ulonglong event_id)
Definition: table_helper.cc:1722
Definition: table_helper.h:1508
bool match(const LEX_CSTRING *name)
Definition: table_helper.cc:2021
Definition: table_helper.h:1610
bool match(const PFS_table_share *pfs)
Definition: table_helper.cc:2278
Definition: table_helper.h:1595
bool match(const PFS_table_share *pfs)
Definition: table_helper.cc:2240
Definition: table_helper.h:1250
bool match(ulonglong thread_id)
Definition: table_helper.cc:1661
Server interface, row lock container.
Definition: psi_data_lock.h:107
Definition: psi_data_lock.h:193
lock_mode
Definition: lock0types.h:51
Header for compiler-dependent features.
Some integer typedefs for easier portability.
unsigned long long int ulonglong
Definition: my_inttypes.h:55
static my_thread_id thread_id
Definition: my_thr_init.cc:62
bool length(const dd::Spatial_reference_system *srs, const Geometry *g1, double *length, bool *null) noexcept
Computes the length of linestrings and multilinestrings.
Definition: length.cc:75
const char * table_name
Definition: rules_table_service.cc:55
Performance schema instrumentation interface.
Row fragment for columns OBJECT_TYPE, SCHEMA_NAME, OBJECT_NAME, INDEX_NAME.
Definition: table_helper.h:658
Definition: pfs_data_lock.h:92
pk_pos_data_lock_wait()
Definition: pfs_data_lock.h:93
char m_requesting_engine_lock_id[128]
Column REQUESTING_ENGINE_LOCK_ID.
Definition: pfs_data_lock.h:114
void reset()
Definition: pfs_data_lock.h:95
size_t m_blocking_engine_lock_id_length
Definition: pfs_data_lock.h:118
void set(const pk_pos_data_lock_wait *other)
Definition: pfs_data_lock.h:103
char m_blocking_engine_lock_id[128]
Column BLOCKING_ENGINE_LOCK_ID.
Definition: pfs_data_lock.h:117
size_t m_requesting_engine_lock_id_length
Definition: pfs_data_lock.h:115
Definition: pfs_data_lock.h:39
void reset()
Definition: pfs_data_lock.h:42
size_t m_engine_lock_id_length
Definition: pfs_data_lock.h:54
char m_engine_lock_id[128]
Column ENGINE_LOCK_ID.
Definition: pfs_data_lock.h:53
void set(const pk_pos_data_lock *other)
Definition: pfs_data_lock.h:47
pk_pos_data_lock()
Definition: pfs_data_lock.h:40
A row of table PERFORMANCE_SCHEMA.DATA_LOCK_WAITS.
Definition: pfs_data_lock.h:125
pk_pos_data_lock_wait m_hidden_pk
Engine (REQUESTING_LOCK_ID, BLOCKING_LOCK_ID) key.
Definition: pfs_data_lock.h:129
const void * m_requesting_identity
Column REQUESTING_OBJECT_INSTANCE_BEGIN.
Definition: pfs_data_lock.h:137
ulonglong m_blocking_thread_id
Column BLOCKING_THREAD_ID.
Definition: pfs_data_lock.h:141
ulonglong m_requesting_event_id
Column REQUESTING_EVENT_ID.
Definition: pfs_data_lock.h:135
ulonglong m_blocking_event_id
Column BLOCKING_EVENT_ID.
Definition: pfs_data_lock.h:143
ulonglong m_requesting_thread_id
Column REQUESTING_THREAD_ID.
Definition: pfs_data_lock.h:133
const void * m_blocking_identity
Column BLOCKING_OBJECT_INSTANCE_BEGIN.
Definition: pfs_data_lock.h:145
ulonglong m_requesting_transaction_id
Column REQUESTING_ENGINE_TRANSACTION_ID.
Definition: pfs_data_lock.h:131
const char * m_engine
Column ENGINE.
Definition: pfs_data_lock.h:127
ulonglong m_blocking_transaction_id
Column BLOCKING_ENGINE_TRANSACTION_ID.
Definition: pfs_data_lock.h:139
A row of table PERFORMANCE_SCHEMA.DATA_LOCKS.
Definition: pfs_data_lock.h:61
const char * m_lock_status
Column LOCK_STATUS.
Definition: pfs_data_lock.h:87
const void * m_identity
Column OBJECT_INSTANCE_BEGIN.
Definition: pfs_data_lock.h:81
ulonglong m_transaction_id
Column ENGINE_TRANSACTION_ID.
Definition: pfs_data_lock.h:67
size_t m_sub_partition_name_length
Definition: pfs_data_lock.h:79
ulonglong m_thread_id
Column THREAD_ID.
Definition: pfs_data_lock.h:69
const char * m_lock_data
Column LOCK_DATA.
Definition: pfs_data_lock.h:89
const char * m_lock_mode
Column LOCK_MODE.
Definition: pfs_data_lock.h:83
const char * m_engine
Column ENGINE.
Definition: pfs_data_lock.h:63
const char * m_lock_type
Column LOCK_TYPE.
Definition: pfs_data_lock.h:85
PFS_index_row m_index_row
Columns OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME, INDEX_NAME.
Definition: pfs_data_lock.h:73
ulonglong m_event_id
Column EVENT_ID.
Definition: pfs_data_lock.h:71
pk_pos_data_lock m_hidden_pk
Column ENGINE_LOCK_ID.
Definition: pfs_data_lock.h:65
size_t m_partition_name_length
Definition: pfs_data_lock.h:76
const char * m_partition_name
Column PARTITION_NAME.
Definition: pfs_data_lock.h:75
const char * m_sub_partition_name
Column SUB_PARTITION_NAME.
Definition: pfs_data_lock.h:78
Helpers to implement a performance schema table.