1/* Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
2
3 This program is free software; you can redistribute it and/or modify
4 it under the terms of the GNU General Public License as published by
5 the Free Software Foundation; version 2 of the License.
6
7 This program is distributed in the hope that it will be useful,
8 but WITHOUT ANY WARRANTY; without even the implied warranty of
9 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 GNU General Public License for more details.
11
12 You should have received a copy of the GNU General Public License
13 along with this program; if not, write to the Free Software Foundation,
14 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */
15
16#ifndef TABLE_SYNC_INSTANCE_H
17#define TABLE_SYNC_INSTANCE_H
18
19/**
20 @file storage/perfschema/table_sync_instances.h
21 Table MUTEX_INSTANCES, RWLOCK_INSTANCES and COND_INSTANCES (declarations).
22*/
23
24#include "pfs_column_types.h"
25#include "pfs_engine_table.h"
26
27struct PFS_mutex;
28struct PFS_rwlock;
29struct PFS_cond;
30
31/**
32 @addtogroup Performance_schema_tables
33 @{
34*/
35
36/** A row of table PERFORMANCE_SCHEMA.MUTEX_INSTANCES. */
37struct row_mutex_instances
38{
39 /** Column NAME. */
40 const char *m_name;
41 /** Length in bytes of @c m_name. */
42 uint m_name_length;
43 /** Column OBJECT_INSTANCE_BEGIN. */
44 const void *m_identity;
45 /** True if column LOCKED_BY_THREAD_ID is not null. */
46 bool m_locked;
47 /** Column LOCKED_BY_THREAD_ID. */
48 ulonglong m_locked_by_thread_id;
49};
50
51/** Table PERFORMANCE_SCHEMA.MUTEX_INSTANCES. */
52class table_mutex_instances : public PFS_engine_table
53{
54public:
55 /** Table share. */
56 static PFS_engine_table_share m_share;
57 static PFS_engine_table* create();
58
59 virtual int rnd_next();
60 virtual int rnd_pos(const void *pos);
61 virtual void reset_position(void);
62
63private:
64 virtual int read_row_values(TABLE *table,
65 unsigned char *buf,
66 Field **fields,
67 bool read_all);
68
69 table_mutex_instances();
70
71public:
72 ~table_mutex_instances()
73 {}
74
75private:
76 void make_row(PFS_mutex *pfs);
77
78 /** Table share lock. */
79 static THR_LOCK m_table_lock;
80
81 /** Current row. */
82 row_mutex_instances m_row;
83 /** True if the current row exists. */
84 bool m_row_exists;
85 /** Current position. */
86 PFS_simple_index m_pos;
87 /** Next position. */
88 PFS_simple_index m_next_pos;
89};
90
91/** A row of table PERFORMANCE_SCHEMA.RWLOCK_INSTANCES. */
92struct row_rwlock_instances
93{
94 /** Column NAME. */
95 const char *m_name;
96 /** Length in bytes of @c m_name. */
97 uint m_name_length;
98 /** Column OBJECT_INSTANCE_BEGIN. */
99 const void *m_identity;
100 /** True if column WRITE_LOCKED_BY_THREAD_ID is not null. */
101 bool m_write_locked;
102 /** Column WRITE_LOCKED_BY_THREAD_ID. */
103 ulonglong m_write_locked_by_thread_id;
104 /** Column READ_LOCKED_BY_COUNT. */
105 ulong m_readers;
106};
107
108/** Table PERFORMANCE_SCHEMA.RWLOCK_INSTANCES. */
109class table_rwlock_instances : public PFS_engine_table
110{
111public:
112 /** Table share */
113 static PFS_engine_table_share m_share;
114 static PFS_engine_table* create();
115
116 virtual int rnd_next();
117 virtual int rnd_pos(const void *pos);
118 virtual void reset_position(void);
119
120private:
121 virtual int read_row_values(TABLE *table,
122 unsigned char *buf,
123 Field **fields,
124 bool read_all);
125
126 table_rwlock_instances();
127
128public:
129 ~table_rwlock_instances()
130 {}
131
132private:
133 void make_row(PFS_rwlock *pfs);
134
135 /** Table share lock. */
136 static THR_LOCK m_table_lock;
137
138 /** Current row. */
139 row_rwlock_instances m_row;
140 /** True if the current row exists. */
141 bool m_row_exists;
142 /** Current position. */
143 PFS_simple_index m_pos;
144 /** Next position. */
145 PFS_simple_index m_next_pos;
146};
147
148/** A row of table PERFORMANCE_SCHEMA.COND_INSTANCES. */
149struct row_cond_instances
150{
151 /** Column NAME. */
152 const char *m_name;
153 /** Length in bytes of @c m_name. */
154 uint m_name_length;
155 /** Column OBJECT_INSTANCE_BEGIN. */
156 const void *m_identity;
157};
158
159/** Table PERFORMANCE_SCHEMA.COND_INSTANCES. */
160class table_cond_instances : public PFS_engine_table
161{
162public:
163 /** Table share. */
164 static PFS_engine_table_share m_share;
165 static PFS_engine_table* create();
166
167 virtual int rnd_next();
168 virtual int rnd_pos(const void *pos);
169 virtual void reset_position(void);
170
171private:
172 virtual int read_row_values(TABLE *table,
173 unsigned char *buf,
174 Field **fields,
175 bool read_all);
176
177 table_cond_instances();
178
179public:
180 ~table_cond_instances()
181 {}
182
183private:
184 void make_row(PFS_cond *pfs);
185
186 /** Table share lock. */
187 static THR_LOCK m_table_lock;
188
189 /** Current row. */
190 row_cond_instances m_row;
191 /** True if the current row exists. */
192 bool m_row_exists;
193 /** Current position. */
194 PFS_simple_index m_pos;
195 /** Next position. */
196 PFS_simple_index m_next_pos;
197};
198
199/** @} */
200#endif
201