From dd3e7a6fb9ee0a3201c2efea842216479c875f1d Mon Sep 17 00:00:00 2001
From: luoliangyi <87842688@qq.com>
Date: Fri, 9 Dec 2022 11:08:53 +0800
Subject: [PATCH] =?UTF-8?q?=E5=B0=86mysql=E7=89=88=E6=9C=AC=E5=8F=B7?=
=?UTF-8?q?=E6=94=B9=E4=B8=BA5.7.39?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
db/HGPdtToolDb/HGPdtToolDb.vcxproj | 7 +-
db/HGPdtToolDb/HGPdtToolDbImpl.cpp | 2 +-
db/HGPdtToolDbTest/HGPdtToolDbTest.vcxproj | 5 +
db/include/big_endian.h | 121 +
.../{field_types.h => binary_log_types.h} | 81 +-
db/include/byte_order_generic.h | 104 +
db/include/byte_order_generic_x86.h | 68 +
db/include/decimal.h | 144 +
db/include/errmsg.h | 166 +-
db/include/keycache.h | 163 +
db/include/little_endian.h | 105 +
db/include/m_ctype.h | 813 +++
db/include/m_string.h | 351 ++
db/include/my_alloc.h | 90 +
db/include/my_byteorder.h | 225 +
db/include/my_command.h | 87 +-
db/include/my_compiler.h | 190 +
db/include/my_compress.h | 114 -
db/include/my_config.h | 469 ++
db/include/my_dbug.h | 255 +
db/include/my_dir.h | 100 +
db/include/my_getopt.h | 156 +
db/include/my_global.h | 804 +++
db/include/my_list.h | 33 +-
db/include/my_sys.h | 992 ++++
db/include/my_thread.h | 199 +
db/include/my_thread_local.h | 114 +
db/include/my_xml.h | 103 +
db/include/mysql.h | 849 ++-
db/include/mysql/client_authentication.h | 38 +
db/include/mysql/client_plugin.h | 139 +-
db/include/mysql/client_plugin.h.pp | 39 +
db/include/mysql/com_data.h | 132 +
db/include/mysql/get_password.h | 43 +
db/include/mysql/group_replication_priv.h | 206 +
db/include/mysql/innodb_priv.h | 62 +
db/include/mysql/mysql_lex_string.h | 40 +
db/include/mysql/plugin.h | 752 +++
db/include/mysql/plugin_audit.h | 565 ++
db/include/mysql/plugin_audit.h.pp | 514 ++
db/include/mysql/plugin_auth.h | 185 +
db/include/mysql/plugin_auth.h.pp | 153 +
db/include/mysql/plugin_auth_common.h | 74 +-
db/include/mysql/plugin_ftparser.h | 221 +
db/include/mysql/plugin_ftparser.h.pp | 160 +
db/include/mysql/plugin_group_replication.h | 159 +
db/include/mysql/plugin_keyring.h | 191 +
db/include/mysql/plugin_keyring.h.pp | 127 +
db/include/mysql/plugin_trace.h | 356 ++
db/include/mysql/plugin_validate_password.h | 53 +
db/include/mysql/psi/mysql_file.h | 1440 +++++
db/include/mysql/psi/mysql_idle.h | 103 +
db/include/mysql/psi/mysql_mdl.h | 128 +
db/include/mysql/psi/mysql_memory.h | 69 +
db/include/mysql/psi/mysql_ps.h | 110 +
db/include/mysql/psi/mysql_socket.h | 1261 +++++
db/include/mysql/psi/mysql_sp.h | 104 +
db/include/mysql/psi/mysql_stage.h | 205 +
db/include/mysql/psi/mysql_statement.h | 242 +
db/include/mysql/psi/mysql_table.h | 149 +
db/include/mysql/psi/mysql_thread.h | 1337 +++++
db/include/mysql/psi/mysql_transaction.h | 220 +
db/include/mysql/psi/psi.h | 3022 ++++++++++
db/include/mysql/psi/psi_base.h | 173 +
db/include/mysql/psi/psi_memory.h | 167 +
db/include/mysql/service_command.h | 442 ++
db/include/mysql/service_locking.h | 121 +
db/include/mysql/service_my_plugin_log.h | 70 +
db/include/mysql/service_my_snprintf.h | 108 +
db/include/mysql/service_mysql_alloc.h | 88 +
db/include/mysql/service_mysql_keyring.h | 69 +
.../mysql/service_mysql_password_policy.h | 73 +
db/include/mysql/service_mysql_string.h | 140 +
db/include/mysql/service_parser.h | 292 +
.../mysql/service_rpl_transaction_ctx.h | 88 +
.../mysql/service_rpl_transaction_write_set.h | 102 +
db/include/mysql/service_rules_table.h | 198 +
db/include/mysql/service_security_context.h | 102 +
db/include/mysql/service_srv_session.h | 179 +
db/include/mysql/service_srv_session_info.h | 180 +
db/include/mysql/service_ssl_wrapper.h | 180 +
db/include/mysql/service_thd_alloc.h | 139 +
db/include/mysql/service_thd_engine_lock.h | 54 +
db/include/mysql/service_thd_wait.h | 121 +
db/include/mysql/service_thread_scheduler.h | 92 +
db/include/mysql/services.h | 66 +
db/include/mysql/services.h.pp | 512 ++
db/include/mysql/thread_pool_priv.h | 192 +
db/include/mysql/thread_type.h | 51 +
db/include/mysql/udf_registration_types.h | 90 -
db/include/mysql_com.h | 1408 ++---
db/include/mysql_com_server.h | 48 +
db/include/mysql_embed.h | 36 +
db/include/mysql_time.h | 47 +-
db/include/mysql_version.h | 17 +-
db/include/mysqld_ername.h | 1126 ++++
db/include/mysqld_error.h | 4931 +----------------
db/include/mysqlx_ername.h | 118 +-
db/include/mysqlx_error.h | 113 +-
db/include/mysqlx_version.h | 5 +-
db/include/openssl/applink.c | 138 -
db/include/plugin.h | 752 +++
db/include/plugin_audit.h | 565 ++
db/include/plugin_ftparser.h | 221 +
db/include/plugin_group_replication.h | 159 +
db/include/plugin_keyring.h | 191 +
db/include/plugin_validate_password.h | 53 +
db/include/sql_common.h | 217 +
db/include/sql_state.h | 258 +
db/include/sslopt-case.h | 65 +
db/include/sslopt-longopts.h | 70 +
db/include/sslopt-vars.h | 82 +
db/include/thr_cond.h | 208 +
db/include/thr_mutex.h | 234 +
db/include/thr_rwlock.h | 221 +
db/include/typelib.h | 66 +
db/lib/x64/libmysql.dll | Bin 7176704 -> 6165216 bytes
db/lib/x64/libmysql.lib | Bin 30676 -> 26956 bytes
db/lib/x86/libmysql.dll | Bin 0 -> 5465312 bytes
db/lib/x86/libmysql.lib | Bin 0 -> 28714 bytes
120 files changed, 27850 insertions(+), 7097 deletions(-)
create mode 100644 db/include/big_endian.h
rename db/include/{field_types.h => binary_log_types.h} (57%)
create mode 100644 db/include/byte_order_generic.h
create mode 100644 db/include/byte_order_generic_x86.h
create mode 100644 db/include/decimal.h
create mode 100644 db/include/keycache.h
create mode 100644 db/include/little_endian.h
create mode 100644 db/include/m_ctype.h
create mode 100644 db/include/m_string.h
create mode 100644 db/include/my_alloc.h
create mode 100644 db/include/my_byteorder.h
create mode 100644 db/include/my_compiler.h
delete mode 100644 db/include/my_compress.h
create mode 100644 db/include/my_config.h
create mode 100644 db/include/my_dbug.h
create mode 100644 db/include/my_dir.h
create mode 100644 db/include/my_getopt.h
create mode 100644 db/include/my_global.h
create mode 100644 db/include/my_sys.h
create mode 100644 db/include/my_thread.h
create mode 100644 db/include/my_thread_local.h
create mode 100644 db/include/my_xml.h
create mode 100644 db/include/mysql/client_authentication.h
create mode 100644 db/include/mysql/client_plugin.h.pp
create mode 100644 db/include/mysql/com_data.h
create mode 100644 db/include/mysql/get_password.h
create mode 100644 db/include/mysql/group_replication_priv.h
create mode 100644 db/include/mysql/innodb_priv.h
create mode 100644 db/include/mysql/mysql_lex_string.h
create mode 100644 db/include/mysql/plugin.h
create mode 100644 db/include/mysql/plugin_audit.h
create mode 100644 db/include/mysql/plugin_audit.h.pp
create mode 100644 db/include/mysql/plugin_auth.h
create mode 100644 db/include/mysql/plugin_auth.h.pp
create mode 100644 db/include/mysql/plugin_ftparser.h
create mode 100644 db/include/mysql/plugin_ftparser.h.pp
create mode 100644 db/include/mysql/plugin_group_replication.h
create mode 100644 db/include/mysql/plugin_keyring.h
create mode 100644 db/include/mysql/plugin_keyring.h.pp
create mode 100644 db/include/mysql/plugin_trace.h
create mode 100644 db/include/mysql/plugin_validate_password.h
create mode 100644 db/include/mysql/psi/mysql_file.h
create mode 100644 db/include/mysql/psi/mysql_idle.h
create mode 100644 db/include/mysql/psi/mysql_mdl.h
create mode 100644 db/include/mysql/psi/mysql_memory.h
create mode 100644 db/include/mysql/psi/mysql_ps.h
create mode 100644 db/include/mysql/psi/mysql_socket.h
create mode 100644 db/include/mysql/psi/mysql_sp.h
create mode 100644 db/include/mysql/psi/mysql_stage.h
create mode 100644 db/include/mysql/psi/mysql_statement.h
create mode 100644 db/include/mysql/psi/mysql_table.h
create mode 100644 db/include/mysql/psi/mysql_thread.h
create mode 100644 db/include/mysql/psi/mysql_transaction.h
create mode 100644 db/include/mysql/psi/psi.h
create mode 100644 db/include/mysql/psi/psi_base.h
create mode 100644 db/include/mysql/psi/psi_memory.h
create mode 100644 db/include/mysql/service_command.h
create mode 100644 db/include/mysql/service_locking.h
create mode 100644 db/include/mysql/service_my_plugin_log.h
create mode 100644 db/include/mysql/service_my_snprintf.h
create mode 100644 db/include/mysql/service_mysql_alloc.h
create mode 100644 db/include/mysql/service_mysql_keyring.h
create mode 100644 db/include/mysql/service_mysql_password_policy.h
create mode 100644 db/include/mysql/service_mysql_string.h
create mode 100644 db/include/mysql/service_parser.h
create mode 100644 db/include/mysql/service_rpl_transaction_ctx.h
create mode 100644 db/include/mysql/service_rpl_transaction_write_set.h
create mode 100644 db/include/mysql/service_rules_table.h
create mode 100644 db/include/mysql/service_security_context.h
create mode 100644 db/include/mysql/service_srv_session.h
create mode 100644 db/include/mysql/service_srv_session_info.h
create mode 100644 db/include/mysql/service_ssl_wrapper.h
create mode 100644 db/include/mysql/service_thd_alloc.h
create mode 100644 db/include/mysql/service_thd_engine_lock.h
create mode 100644 db/include/mysql/service_thd_wait.h
create mode 100644 db/include/mysql/service_thread_scheduler.h
create mode 100644 db/include/mysql/services.h
create mode 100644 db/include/mysql/services.h.pp
create mode 100644 db/include/mysql/thread_pool_priv.h
create mode 100644 db/include/mysql/thread_type.h
delete mode 100644 db/include/mysql/udf_registration_types.h
create mode 100644 db/include/mysql_com_server.h
create mode 100644 db/include/mysql_embed.h
create mode 100644 db/include/mysqld_ername.h
delete mode 100644 db/include/openssl/applink.c
create mode 100644 db/include/plugin.h
create mode 100644 db/include/plugin_audit.h
create mode 100644 db/include/plugin_ftparser.h
create mode 100644 db/include/plugin_group_replication.h
create mode 100644 db/include/plugin_keyring.h
create mode 100644 db/include/plugin_validate_password.h
create mode 100644 db/include/sql_common.h
create mode 100644 db/include/sql_state.h
create mode 100644 db/include/sslopt-case.h
create mode 100644 db/include/sslopt-longopts.h
create mode 100644 db/include/sslopt-vars.h
create mode 100644 db/include/thr_cond.h
create mode 100644 db/include/thr_mutex.h
create mode 100644 db/include/thr_rwlock.h
create mode 100644 db/include/typelib.h
create mode 100644 db/lib/x86/libmysql.dll
create mode 100644 db/lib/x86/libmysql.lib
diff --git a/db/HGPdtToolDb/HGPdtToolDb.vcxproj b/db/HGPdtToolDb/HGPdtToolDb.vcxproj
index 9174050..ef7133c 100644
--- a/db/HGPdtToolDb/HGPdtToolDb.vcxproj
+++ b/db/HGPdtToolDb/HGPdtToolDb.vcxproj
@@ -104,13 +104,15 @@
NotUsingpch.hMultiThreadedDebug
- %(AdditionalIncludeDirectories)
+ ../include;../../../sdk/include;%(AdditionalIncludeDirectories)WindowstruefalseHGPdtToolDb.def
+ libmysql.lib;%(AdditionalDependencies)
+ ../lib/x86;%(AdditionalLibraryDirectories)
@@ -124,6 +126,7 @@
NotUsingpch.hMultiThreaded
+ ../include;../../../sdk/include;%(AdditionalIncludeDirectories)Windows
@@ -132,6 +135,8 @@
truefalseHGPdtToolDb.def
+ ../lib/x86;%(AdditionalLibraryDirectories)
+ libmysql.lib;%(AdditionalDependencies)
diff --git a/db/HGPdtToolDb/HGPdtToolDbImpl.cpp b/db/HGPdtToolDb/HGPdtToolDbImpl.cpp
index 66fda40..e64a591 100644
--- a/db/HGPdtToolDb/HGPdtToolDbImpl.cpp
+++ b/db/HGPdtToolDb/HGPdtToolDbImpl.cpp
@@ -151,7 +151,7 @@ HGResult HGPdtToolDbUserMgrImpl::Create(const HGChar* host, HGUShort port, const
mysql_query(sql, "drop table pressure_inspection_test;");
mysql_query(sql, "drop table pressure_inspection_desc;");
#endif
- if (0 != CreateUserConfigTable(sql, user) && 0 != CreateMainTestTable(sql)
+ if (0 != CreateUserConfigTable(sql, user) || 0 != CreateMainTestTable(sql)
|| 0 != CreateInitInspTestTable(sql) || 0 != CreateInitInspDescTable(sql)
|| 0 != CreateImgInspTestTable(sql) || 0 != CreateImgInspDescTable(sql)
|| 0 != CreatePreInspTestTable(sql) || 0 != CreatePreInspDescTable(sql))
diff --git a/db/HGPdtToolDbTest/HGPdtToolDbTest.vcxproj b/db/HGPdtToolDbTest/HGPdtToolDbTest.vcxproj
index a5deaca..d4a5968 100644
--- a/db/HGPdtToolDbTest/HGPdtToolDbTest.vcxproj
+++ b/db/HGPdtToolDbTest/HGPdtToolDbTest.vcxproj
@@ -88,10 +88,12 @@
trueWIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)true
+ ../../../sdk/include;%(AdditionalIncludeDirectories)Consoletrue
+ ../Debug/HGPdtToolDb.lib;%(AdditionalDependencies)
@@ -102,12 +104,14 @@
trueWIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)true
+ ../../../sdk/include;%(AdditionalIncludeDirectories)Consoletruetruetrue
+ ../Release/HGPdtToolDb.lib;%(AdditionalDependencies)
@@ -132,6 +136,7 @@
trueNDEBUG;_CONSOLE;%(PreprocessorDefinitions)true
+ ../../../sdk/include;%(AdditionalIncludeDirectories)Console
diff --git a/db/include/big_endian.h b/db/include/big_endian.h
new file mode 100644
index 0000000..dd75101
--- /dev/null
+++ b/db/include/big_endian.h
@@ -0,0 +1,121 @@
+/* Copyright (c) 2012, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 */
+
+#include
+
+/*
+ Data in big-endian format.
+*/
+static inline void float4store(uchar *T, float A)
+{ *(T)= ((uchar *) &A)[3];
+ *((T)+1)=(char) ((uchar *) &A)[2];
+ *((T)+2)=(char) ((uchar *) &A)[1];
+ *((T)+3)=(char) ((uchar *) &A)[0]; }
+
+static inline void float4get (float *V, const uchar *M)
+{ float def_temp;
+ ((uchar*) &def_temp)[0]=(M)[3];
+ ((uchar*) &def_temp)[1]=(M)[2];
+ ((uchar*) &def_temp)[2]=(M)[1];
+ ((uchar*) &def_temp)[3]=(M)[0];
+ (*V)=def_temp; }
+
+static inline void float8store(uchar *T, double V)
+{ *(T)= ((uchar *) &V)[7];
+ *((T)+1)=(char) ((uchar *) &V)[6];
+ *((T)+2)=(char) ((uchar *) &V)[5];
+ *((T)+3)=(char) ((uchar *) &V)[4];
+ *((T)+4)=(char) ((uchar *) &V)[3];
+ *((T)+5)=(char) ((uchar *) &V)[2];
+ *((T)+6)=(char) ((uchar *) &V)[1];
+ *((T)+7)=(char) ((uchar *) &V)[0]; }
+
+static inline void float8get (double *V, const uchar *M)
+{ double def_temp;
+ ((uchar*) &def_temp)[0]=(M)[7];
+ ((uchar*) &def_temp)[1]=(M)[6];
+ ((uchar*) &def_temp)[2]=(M)[5];
+ ((uchar*) &def_temp)[3]=(M)[4];
+ ((uchar*) &def_temp)[4]=(M)[3];
+ ((uchar*) &def_temp)[5]=(M)[2];
+ ((uchar*) &def_temp)[6]=(M)[1];
+ ((uchar*) &def_temp)[7]=(M)[0];
+ (*V) = def_temp; }
+
+static inline void ushortget(uint16 *V, const uchar *pM)
+{ *V = (uint16) (((uint16) ((uchar) (pM)[1]))+
+ ((uint16) ((uint16) (pM)[0]) << 8)); }
+static inline void shortget (int16 *V, const uchar *pM)
+{ *V = (short) (((short) ((uchar) (pM)[1]))+
+ ((short) ((short) (pM)[0]) << 8)); }
+static inline void longget (int32 *V, const uchar *pM)
+{ int32 def_temp;
+ ((uchar*) &def_temp)[0]=(pM)[0];
+ ((uchar*) &def_temp)[1]=(pM)[1];
+ ((uchar*) &def_temp)[2]=(pM)[2];
+ ((uchar*) &def_temp)[3]=(pM)[3];
+ (*V)=def_temp; }
+static inline void ulongget (uint32 *V, const uchar *pM)
+{ uint32 def_temp;
+ ((uchar*) &def_temp)[0]=(pM)[0];
+ ((uchar*) &def_temp)[1]=(pM)[1];
+ ((uchar*) &def_temp)[2]=(pM)[2];
+ ((uchar*) &def_temp)[3]=(pM)[3];
+ (*V)=def_temp; }
+static inline void shortstore(uchar *T, int16 A)
+{ uint def_temp=(uint) (A) ;
+ *(((char*)T)+1)=(char)(def_temp);
+ *(((char*)T)+0)=(char)(def_temp >> 8); }
+static inline void longstore (uchar *T, int32 A)
+{ *(((char*)T)+3)=((A));
+ *(((char*)T)+2)=(((A) >> 8));
+ *(((char*)T)+1)=(((A) >> 16));
+ *(((char*)T)+0)=(((A) >> 24)); }
+
+static inline void floatget(float *V, const uchar *M)
+{
+ memcpy(V, (M), sizeof(float));
+}
+
+static inline void floatstore(uchar *T, float V)
+{
+ memcpy((T), (&V), sizeof(float));
+}
+
+static inline void doubleget(double *V, const uchar *M)
+{
+ memcpy(V, (M), sizeof(double));
+}
+
+static inline void doublestore(uchar *T, double V)
+{
+ memcpy((T), &V, sizeof(double));
+}
+
+static inline void longlongget(longlong *V, const uchar *M)
+{
+ memcpy(V, (M), sizeof(ulonglong));
+}
+static inline void longlongstore(uchar *T, longlong V)
+{
+ memcpy((T), &V, sizeof(ulonglong));
+}
diff --git a/db/include/field_types.h b/db/include/binary_log_types.h
similarity index 57%
rename from db/include/field_types.h
rename to db/include/binary_log_types.h
index bfca1de..29cade5 100644
--- a/db/include/field_types.h
+++ b/db/include/binary_log_types.h
@@ -26,7 +26,7 @@
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
/**
- @file field_types.h
+ @file binary_log_types.h
@brief This file contains the field type.
@@ -35,61 +35,48 @@
definitions have to be constructed to support this.
*/
-#ifndef FIELD_TYPES_INCLUDED
-#define FIELD_TYPES_INCLUDED
+#ifndef BINARY_LOG_TYPES_INCLUDED
+#define BINARY_LOG_TYPES_INCLUDED
#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
+extern "C"
+{
+#endif
/*
* Constants exported from this package.
*/
-/**
- Column types for MySQL
-*/
-enum enum_field_types {
- MYSQL_TYPE_DECIMAL,
- MYSQL_TYPE_TINY,
- MYSQL_TYPE_SHORT,
- MYSQL_TYPE_LONG,
- MYSQL_TYPE_FLOAT,
- MYSQL_TYPE_DOUBLE,
- MYSQL_TYPE_NULL,
- MYSQL_TYPE_TIMESTAMP,
- MYSQL_TYPE_LONGLONG,
- MYSQL_TYPE_INT24,
- MYSQL_TYPE_DATE,
- MYSQL_TYPE_TIME,
- MYSQL_TYPE_DATETIME,
- MYSQL_TYPE_YEAR,
- MYSQL_TYPE_NEWDATE, /**< Internal to MySQL. Not used in protocol */
- MYSQL_TYPE_VARCHAR,
+typedef enum enum_field_types {
+ MYSQL_TYPE_DECIMAL, MYSQL_TYPE_TINY,
+ MYSQL_TYPE_SHORT, MYSQL_TYPE_LONG,
+ MYSQL_TYPE_FLOAT, MYSQL_TYPE_DOUBLE,
+ MYSQL_TYPE_NULL, MYSQL_TYPE_TIMESTAMP,
+ MYSQL_TYPE_LONGLONG,MYSQL_TYPE_INT24,
+ MYSQL_TYPE_DATE, MYSQL_TYPE_TIME,
+ MYSQL_TYPE_DATETIME, MYSQL_TYPE_YEAR,
+ MYSQL_TYPE_NEWDATE, MYSQL_TYPE_VARCHAR,
MYSQL_TYPE_BIT,
MYSQL_TYPE_TIMESTAMP2,
- MYSQL_TYPE_DATETIME2, /**< Internal to MySQL. Not used in protocol */
- MYSQL_TYPE_TIME2, /**< Internal to MySQL. Not used in protocol */
- MYSQL_TYPE_TYPED_ARRAY, /**< Used for replication only */
- MYSQL_TYPE_INVALID = 243,
- MYSQL_TYPE_BOOL = 244, /**< Currently just a placeholder */
- MYSQL_TYPE_JSON = 245,
- MYSQL_TYPE_NEWDECIMAL = 246,
- MYSQL_TYPE_ENUM = 247,
- MYSQL_TYPE_SET = 248,
- MYSQL_TYPE_TINY_BLOB = 249,
- MYSQL_TYPE_MEDIUM_BLOB = 250,
- MYSQL_TYPE_LONG_BLOB = 251,
- MYSQL_TYPE_BLOB = 252,
- MYSQL_TYPE_VAR_STRING = 253,
- MYSQL_TYPE_STRING = 254,
- MYSQL_TYPE_GEOMETRY = 255
-};
+ MYSQL_TYPE_DATETIME2,
+ MYSQL_TYPE_TIME2,
+ MYSQL_TYPE_JSON=245,
+ MYSQL_TYPE_NEWDECIMAL=246,
+ MYSQL_TYPE_ENUM=247,
+ MYSQL_TYPE_SET=248,
+ MYSQL_TYPE_TINY_BLOB=249,
+ MYSQL_TYPE_MEDIUM_BLOB=250,
+ MYSQL_TYPE_LONG_BLOB=251,
+ MYSQL_TYPE_BLOB=252,
+ MYSQL_TYPE_VAR_STRING=253,
+ MYSQL_TYPE_STRING=254,
+ MYSQL_TYPE_GEOMETRY=255
+} enum_field_types;
+
+#define DATETIME_MAX_DECIMALS 6
#ifdef __cplusplus
-} // extern "C"
-#else
-typedef enum enum_field_types enum_field_types;
-#endif /* __cplusplus */
+}
+#endif // __cplusplus
-#endif /* FIELD_TYPES_INCLUDED */
+#endif /* BINARY_LOG_TYPES_INCLUDED */
diff --git a/db/include/byte_order_generic.h b/db/include/byte_order_generic.h
new file mode 100644
index 0000000..ab6528e
--- /dev/null
+++ b/db/include/byte_order_generic.h
@@ -0,0 +1,104 @@
+/* Copyright (c) 2001, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 */
+
+/*
+ Endianness-independent definitions for architectures other
+ than the x86 architecture.
+*/
+static inline int16 sint2korr(const uchar *A)
+{
+ return
+ (int16) (((int16) (A[0])) +
+ ((int16) (A[1]) << 8))
+ ;
+}
+
+static inline int32 sint4korr(const uchar *A)
+{
+ return
+ (int32) (((int32) (A[0])) +
+ (((int32) (A[1]) << 8)) +
+ (((int32) (A[2]) << 16)) +
+ (((int32) (A[3]) << 24)))
+ ;
+}
+
+static inline uint16 uint2korr(const uchar *A)
+{
+ return
+ (uint16) (((uint16) (A[0])) +
+ ((uint16) (A[1]) << 8))
+ ;
+}
+
+static inline uint32 uint4korr(const uchar *A)
+{
+ return
+ (uint32) (((uint32) (A[0])) +
+ (((uint32) (A[1])) << 8) +
+ (((uint32) (A[2])) << 16) +
+ (((uint32) (A[3])) << 24))
+ ;
+}
+
+static inline ulonglong uint8korr(const uchar *A)
+{
+ return
+ ((ulonglong)(((uint32) (A[0])) +
+ (((uint32) (A[1])) << 8) +
+ (((uint32) (A[2])) << 16) +
+ (((uint32) (A[3])) << 24)) +
+ (((ulonglong) (((uint32) (A[4])) +
+ (((uint32) (A[5])) << 8) +
+ (((uint32) (A[6])) << 16) +
+ (((uint32) (A[7])) << 24))) <<
+ 32))
+ ;
+}
+
+static inline longlong sint8korr(const uchar *A)
+{
+ return (longlong) uint8korr(A);
+}
+
+static inline void int2store(uchar *T, uint16 A)
+{
+ uint def_temp= A ;
+ *(T)= (uchar)(def_temp);
+ *(T+1)= (uchar)(def_temp >> 8);
+}
+
+static inline void int4store(uchar *T, uint32 A)
+{
+ *(T)= (uchar) (A);
+ *(T+1)=(uchar) (A >> 8);
+ *(T+2)=(uchar) (A >> 16);
+ *(T+3)=(uchar) (A >> 24);
+}
+
+static inline void int8store(uchar *T, ulonglong A)
+{
+ uint def_temp= (uint) A,
+ def_temp2= (uint) (A >> 32);
+ int4store(T, def_temp);
+ int4store(T+4,def_temp2);
+}
diff --git a/db/include/byte_order_generic_x86.h b/db/include/byte_order_generic_x86.h
new file mode 100644
index 0000000..bff5f93
--- /dev/null
+++ b/db/include/byte_order_generic_x86.h
@@ -0,0 +1,68 @@
+/* Copyright (c) 2001, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ Without limiting anything contained in the foregoing, this file,
+ which is part of C Driver for MySQL (Connector/C), is also subject to the
+ Universal FOSS Exception, version 1.0, a copy of which can be found at
+ http://oss.oracle.com/licenses/universal-foss-exception.
+
+ 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, version 2.0, 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 */
+
+/*
+ Optimized functions for the x86 architecture (_WIN32 included).
+
+ x86 handles misaligned reads and writes just fine, so suppress
+ UBSAN warnings for these functions.
+*/
+static inline int16 sint2korr(const uchar *A) SUPPRESS_UBSAN;
+static inline int16 sint2korr(const uchar *A) { return *((int16*) A); }
+
+static inline int32 sint4korr(const uchar *A) SUPPRESS_UBSAN;
+static inline int32 sint4korr(const uchar *A) { return *((int32*) A); }
+
+static inline uint16 uint2korr(const uchar *A) SUPPRESS_UBSAN;
+static inline uint16 uint2korr(const uchar *A) { return *((uint16*) A); }
+
+static inline uint32 uint4korr(const uchar *A) SUPPRESS_UBSAN;
+static inline uint32 uint4korr(const uchar *A) { return *((uint32*) A); }
+
+static inline ulonglong uint8korr(const uchar *A) SUPPRESS_UBSAN;
+static inline ulonglong uint8korr(const uchar *A) { return *((ulonglong*) A);}
+
+static inline longlong sint8korr(const uchar *A) SUPPRESS_UBSAN;
+static inline longlong sint8korr(const uchar *A) { return *((longlong*) A); }
+
+static inline void int2store(uchar *T, uint16 A) SUPPRESS_UBSAN;
+static inline void int2store(uchar *T, uint16 A)
+{
+ *((uint16*) T)= A;
+}
+
+static inline void int4store(uchar *T, uint32 A) SUPPRESS_UBSAN;
+static inline void int4store(uchar *T, uint32 A)
+{
+ *((uint32*) T)= A;
+}
+
+static inline void int8store(uchar *T, ulonglong A) SUPPRESS_UBSAN;
+static inline void int8store(uchar *T, ulonglong A)
+{
+ *((ulonglong*) T)= A;
+}
diff --git a/db/include/decimal.h b/db/include/decimal.h
new file mode 100644
index 0000000..a858a2d
--- /dev/null
+++ b/db/include/decimal.h
@@ -0,0 +1,144 @@
+/* Copyright (c) 2000, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 DECIMAL_INCLUDED
+#define DECIMAL_INCLUDED
+
+typedef enum
+{TRUNCATE=0, HALF_EVEN, HALF_UP, CEILING, FLOOR}
+ decimal_round_mode;
+typedef int32 decimal_digit_t;
+
+/**
+ intg is the number of *decimal* digits (NOT number of decimal_digit_t's !)
+ before the point
+ frac is the number of decimal digits after the point
+ len is the length of buf (length of allocated space) in decimal_digit_t's,
+ not in bytes
+ sign false means positive, true means negative
+ buf is an array of decimal_digit_t's
+ */
+typedef struct st_decimal_t {
+ int intg, frac, len;
+ my_bool sign;
+ decimal_digit_t *buf;
+} decimal_t;
+
+#ifndef MYSQL_ABI_CHECK
+int internal_str2dec(const char *from, decimal_t *to, char **end,
+ my_bool fixed);
+int decimal2string(const decimal_t *from, char *to, int *to_len,
+ int fixed_precision, int fixed_decimals,
+ char filler);
+int decimal2ulonglong(decimal_t *from, ulonglong *to);
+int ulonglong2decimal(ulonglong from, decimal_t *to);
+int decimal2longlong(decimal_t *from, longlong *to);
+int longlong2decimal(longlong from, decimal_t *to);
+int decimal2double(const decimal_t *from, double *to);
+int double2decimal(double from, decimal_t *to);
+int decimal_actual_fraction(decimal_t *from);
+int decimal2bin(decimal_t *from, uchar *to, int precision, int scale);
+int bin2decimal(const uchar *from, decimal_t *to, int precision, int scale);
+
+/**
+ Convert decimal to lldiv_t.
+ The integer part is stored in to->quot.
+ The fractional part is multiplied to 10^9 and stored to to->rem.
+ @param from Decimal value
+ @param to lldiv_t value
+ @retval 0 on success
+ @retval !0 in error
+*/
+int decimal2lldiv_t(const decimal_t *from, lldiv_t *to);
+
+/**
+ Convert doube to lldiv_t.
+ The integer part is stored in to->quot.
+ The fractional part is multiplied to 10^9 and stored to to->rem.
+ @param from Decimal value
+ @param to lldiv_t value
+ @retval 0 on success
+ @retval !0 in error
+*/
+
+int double2lldiv_t(double from, lldiv_t *to);
+int decimal_size(int precision, int scale);
+int decimal_bin_size(int precision, int scale);
+int decimal_result_size(decimal_t *from1, decimal_t *from2, char op,
+ int param);
+
+int decimal_intg(const decimal_t *from);
+int decimal_add(const decimal_t *from1, const decimal_t *from2, decimal_t *to);
+int decimal_sub(const decimal_t *from1, const decimal_t *from2, decimal_t *to);
+int decimal_cmp(const decimal_t *from1, const decimal_t *from2);
+int decimal_mul(const decimal_t *from1, const decimal_t *from2, decimal_t *to);
+int decimal_div(const decimal_t *from1, const decimal_t *from2, decimal_t *to,
+ int scale_incr);
+int decimal_mod(const decimal_t *from1, const decimal_t *from2, decimal_t *to);
+int decimal_round(const decimal_t *from, decimal_t *to, int new_scale,
+ decimal_round_mode mode);
+int decimal_is_zero(const decimal_t *from);
+void max_decimal(int precision, int frac, decimal_t *to);
+
+#define string2decimal(A,B,C) internal_str2dec((A), (B), (C), 0)
+#define string2decimal_fixed(A,B,C) internal_str2dec((A), (B), (C), 1)
+
+/* set a decimal_t to zero */
+
+#define decimal_make_zero(dec) do { \
+ (dec)->buf[0]=0; \
+ (dec)->intg=1; \
+ (dec)->frac=0; \
+ (dec)->sign=0; \
+ } while(0)
+
+/*
+ returns the length of the buffer to hold string representation
+ of the decimal (including decimal dot, possible sign and \0)
+*/
+
+#define decimal_string_size(dec) (((dec)->intg ? (dec)->intg : 1) + \
+ (dec)->frac + ((dec)->frac > 0) + 2)
+
+/*
+ conventions:
+
+ decimal_smth() == 0 -- everything's ok
+ decimal_smth() <= 1 -- result is usable, but precision loss is possible
+ decimal_smth() <= 2 -- result can be unusable, most significant digits
+ could've been lost
+ decimal_smth() > 2 -- no result was generated
+*/
+
+#define E_DEC_OK 0
+#define E_DEC_TRUNCATED 1
+#define E_DEC_OVERFLOW 2
+#define E_DEC_DIV_ZERO 4
+#define E_DEC_BAD_NUM 8
+#define E_DEC_OOM 16
+
+#define E_DEC_ERROR 31
+#define E_DEC_FATAL_ERROR 30
+
+#endif // !MYSQL_ABI_CHECK
+
+#endif
diff --git a/db/include/errmsg.h b/db/include/errmsg.h
index 8f533b7..c608d17 100644
--- a/db/include/errmsg.h
+++ b/db/include/errmsg.h
@@ -14,11 +14,6 @@
permission to link the program and your derivative works with the
separately licensed software that they have included with MySQL.
- Without limiting anything contained in the foregoing, this file,
- which is part of C Driver for MySQL (Connector/C), is also subject to the
- Universal FOSS Exception, version 1.0, a copy of which can be found at
- http://oss.oracle.com/licenses/universal-foss-exception.
-
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
@@ -28,118 +23,99 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
-/**
- @file include/errmsg.h
+/* Error messages for MySQL clients */
+/* (Error messages for the daemon are in sql/share/errmsg.txt) */
- Error messages for MySQL clients.
- These are constant and use the CR_ prefix.
- will contain auto-generated mappings
- containing the symbolic name and the number from this file,
- and the english error messages in libmysql/errmsg.c.
+#ifdef __cplusplus
+extern "C" {
+#endif
+void init_client_errs(void);
+void finish_client_errs(void);
+extern const char *client_errors[]; /* Error messages */
+#ifdef __cplusplus
+}
+#endif
- Dynamic error messages for the daemon are in share/language/errmsg.sys.
- The server equivalent to is .
- The server equivalent to is .
+#define CR_MIN_ERROR 2000 /* For easier client code */
+#define CR_MAX_ERROR 2999
+#if !defined(ER)
+#define ER(X) (((X) >= CR_ERROR_FIRST && (X) <= CR_ERROR_LAST)? \
+ client_errors[(X)-CR_ERROR_FIRST]: \
+ client_errors[CR_UNKNOWN_ERROR -CR_ERROR_FIRST])
- Note that the auth subsystem also uses codes with a CR_ prefix.
-*/
-
-void init_client_errs(void);
-void finish_client_errs(void);
-extern const char *client_errors[]; /* Error messages */
-
-#define CR_MIN_ERROR 2000 /* For easier client code */
-#define CR_MAX_ERROR 2999
-#define CLIENT_ERRMAP 2 /* Errormap used by my_error() */
+#endif
+#define CLIENT_ERRMAP 2 /* Errormap used by my_error() */
/* Do not add error numbers before CR_ERROR_FIRST. */
/* If necessary to add lower numbers, change CR_ERROR_FIRST accordingly. */
-#define CR_ERROR_FIRST 2000 /*Copy first error nr.*/
-#define CR_UNKNOWN_ERROR 2000
-#define CR_SOCKET_CREATE_ERROR 2001
-#define CR_CONNECTION_ERROR 2002
-#define CR_CONN_HOST_ERROR 2003
-#define CR_IPSOCK_ERROR 2004
-#define CR_UNKNOWN_HOST 2005
-#define CR_SERVER_GONE_ERROR 2006
-#define CR_VERSION_ERROR 2007
-#define CR_OUT_OF_MEMORY 2008
-#define CR_WRONG_HOST_INFO 2009
+#define CR_ERROR_FIRST 2000 /*Copy first error nr.*/
+#define CR_UNKNOWN_ERROR 2000
+#define CR_SOCKET_CREATE_ERROR 2001
+#define CR_CONNECTION_ERROR 2002
+#define CR_CONN_HOST_ERROR 2003
+#define CR_IPSOCK_ERROR 2004
+#define CR_UNKNOWN_HOST 2005
+#define CR_SERVER_GONE_ERROR 2006
+#define CR_VERSION_ERROR 2007
+#define CR_OUT_OF_MEMORY 2008
+#define CR_WRONG_HOST_INFO 2009
#define CR_LOCALHOST_CONNECTION 2010
-#define CR_TCP_CONNECTION 2011
+#define CR_TCP_CONNECTION 2011
#define CR_SERVER_HANDSHAKE_ERR 2012
-#define CR_SERVER_LOST 2013
+#define CR_SERVER_LOST 2013
#define CR_COMMANDS_OUT_OF_SYNC 2014
#define CR_NAMEDPIPE_CONNECTION 2015
-#define CR_NAMEDPIPEWAIT_ERROR 2016
-#define CR_NAMEDPIPEOPEN_ERROR 2017
+#define CR_NAMEDPIPEWAIT_ERROR 2016
+#define CR_NAMEDPIPEOPEN_ERROR 2017
#define CR_NAMEDPIPESETSTATE_ERROR 2018
-#define CR_CANT_READ_CHARSET 2019
+#define CR_CANT_READ_CHARSET 2019
#define CR_NET_PACKET_TOO_LARGE 2020
-#define CR_EMBEDDED_CONNECTION 2021
-#define CR_PROBE_SLAVE_STATUS 2022
-#define CR_PROBE_SLAVE_HOSTS 2023
-#define CR_PROBE_SLAVE_CONNECT 2024
+#define CR_EMBEDDED_CONNECTION 2021
+#define CR_PROBE_SLAVE_STATUS 2022
+#define CR_PROBE_SLAVE_HOSTS 2023
+#define CR_PROBE_SLAVE_CONNECT 2024
#define CR_PROBE_MASTER_CONNECT 2025
#define CR_SSL_CONNECTION_ERROR 2026
-#define CR_MALFORMED_PACKET 2027
-#define CR_WRONG_LICENSE 2028
+#define CR_MALFORMED_PACKET 2027
+#define CR_WRONG_LICENSE 2028
/* new 4.1 error codes */
-#define CR_NULL_POINTER 2029
-#define CR_NO_PREPARE_STMT 2030
-#define CR_PARAMS_NOT_BOUND 2031
-#define CR_DATA_TRUNCATED 2032
+#define CR_NULL_POINTER 2029
+#define CR_NO_PREPARE_STMT 2030
+#define CR_PARAMS_NOT_BOUND 2031
+#define CR_DATA_TRUNCATED 2032
#define CR_NO_PARAMETERS_EXISTS 2033
#define CR_INVALID_PARAMETER_NO 2034
-#define CR_INVALID_BUFFER_USE 2035
+#define CR_INVALID_BUFFER_USE 2035
#define CR_UNSUPPORTED_PARAM_TYPE 2036
-#define CR_SHARED_MEMORY_CONNECTION 2037
-#define CR_SHARED_MEMORY_CONNECT_REQUEST_ERROR 2038
-#define CR_SHARED_MEMORY_CONNECT_ANSWER_ERROR 2039
+#define CR_SHARED_MEMORY_CONNECTION 2037
+#define CR_SHARED_MEMORY_CONNECT_REQUEST_ERROR 2038
+#define CR_SHARED_MEMORY_CONNECT_ANSWER_ERROR 2039
#define CR_SHARED_MEMORY_CONNECT_FILE_MAP_ERROR 2040
-#define CR_SHARED_MEMORY_CONNECT_MAP_ERROR 2041
-#define CR_SHARED_MEMORY_FILE_MAP_ERROR 2042
-#define CR_SHARED_MEMORY_MAP_ERROR 2043
-#define CR_SHARED_MEMORY_EVENT_ERROR 2044
+#define CR_SHARED_MEMORY_CONNECT_MAP_ERROR 2041
+#define CR_SHARED_MEMORY_FILE_MAP_ERROR 2042
+#define CR_SHARED_MEMORY_MAP_ERROR 2043
+#define CR_SHARED_MEMORY_EVENT_ERROR 2044
#define CR_SHARED_MEMORY_CONNECT_ABANDONED_ERROR 2045
-#define CR_SHARED_MEMORY_CONNECT_SET_ERROR 2046
-#define CR_CONN_UNKNOW_PROTOCOL 2047
-#define CR_INVALID_CONN_HANDLE 2048
-#define CR_UNUSED_1 2049
-#define CR_FETCH_CANCELED 2050
-#define CR_NO_DATA 2051
-#define CR_NO_STMT_METADATA 2052
-#define CR_NO_RESULT_SET 2053
-#define CR_NOT_IMPLEMENTED 2054
-#define CR_SERVER_LOST_EXTENDED 2055
-#define CR_STMT_CLOSED 2056
-#define CR_NEW_STMT_METADATA 2057
-#define CR_ALREADY_CONNECTED 2058
-#define CR_AUTH_PLUGIN_CANNOT_LOAD 2059
-#define CR_DUPLICATE_CONNECTION_ATTR 2060
-#define CR_AUTH_PLUGIN_ERR 2061
-#define CR_INSECURE_API_ERR 2062
-#define CR_FILE_NAME_TOO_LONG 2063
-#define CR_SSL_FIPS_MODE_ERR 2064
-#define CR_DEPRECATED_COMPRESSION_NOT_SUPPORTED 2065
-#define CR_COMPRESSION_WRONGLY_CONFIGURED 2066
-#define CR_KERBEROS_USER_NOT_FOUND 2067
-#define CR_LOAD_DATA_LOCAL_INFILE_REJECTED 2068
-#define CR_LOAD_DATA_LOCAL_INFILE_REALPATH_FAIL 2069
-#define CR_DNS_SRV_LOOKUP_FAILED 2070
-#define CR_MANDATORY_TRACKER_NOT_FOUND 2071
-#define CR_INVALID_FACTOR_NO 2072
-#define CR_CANT_GET_SESSION_DATA 2073
-#define CR_ERROR_LAST /*Copy last error nr:*/ 2073
+#define CR_SHARED_MEMORY_CONNECT_SET_ERROR 2046
+#define CR_CONN_UNKNOW_PROTOCOL 2047
+#define CR_INVALID_CONN_HANDLE 2048
+#define CR_UNUSED_1 2049
+#define CR_FETCH_CANCELED 2050
+#define CR_NO_DATA 2051
+#define CR_NO_STMT_METADATA 2052
+#define CR_NO_RESULT_SET 2053
+#define CR_NOT_IMPLEMENTED 2054
+#define CR_SERVER_LOST_EXTENDED 2055
+#define CR_STMT_CLOSED 2056
+#define CR_NEW_STMT_METADATA 2057
+#define CR_ALREADY_CONNECTED 2058
+#define CR_AUTH_PLUGIN_CANNOT_LOAD 2059
+#define CR_DUPLICATE_CONNECTION_ATTR 2060
+#define CR_AUTH_PLUGIN_ERR 2061
+#define CR_INSECURE_API_ERR 2062
+#define CR_ERROR_LAST /*Copy last error nr:*/ 2062
/* Add error numbers before CR_ERROR_LAST and change it accordingly. */
-/* Visual Studio requires '__inline' for C code */
-static inline const char *ER_CLIENT(int client_errno) {
- if (client_errno >= CR_ERROR_FIRST && client_errno <= CR_ERROR_LAST)
- return client_errors[client_errno - CR_ERROR_FIRST];
- return client_errors[CR_UNKNOWN_ERROR - CR_ERROR_FIRST];
-}
-
#endif /* ERRMSG_INCLUDED */
diff --git a/db/include/keycache.h b/db/include/keycache.h
new file mode 100644
index 0000000..f309cfd
--- /dev/null
+++ b/db/include/keycache.h
@@ -0,0 +1,163 @@
+/* Copyright (c) 2003, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 */
+
+/* Key cache variable structures */
+
+#ifndef _keycache_h
+#define _keycache_h
+
+#include "my_sys.h" /* flush_type */
+
+C_MODE_START
+
+/* declare structures that is used by st_key_cache */
+
+struct st_block_link;
+typedef struct st_block_link BLOCK_LINK;
+struct st_hash_link;
+typedef struct st_hash_link HASH_LINK;
+
+/* Thread specific variables */
+typedef struct st_keycache_thread_var
+{
+ mysql_cond_t suspend;
+ struct st_keycache_thread_var *next,**prev;
+ void *opt_info;
+} st_keycache_thread_var;
+
+/* info about requests in a waiting queue */
+typedef struct st_keycache_wqueue
+{
+ st_keycache_thread_var *last_thread; /* circular list of waiting threads */
+} KEYCACHE_WQUEUE;
+
+#define CHANGED_BLOCKS_HASH 128 /* must be power of 2 */
+
+/*
+ The key cache structure
+ It also contains read-only statistics parameters.
+*/
+
+typedef struct st_key_cache
+{
+ my_bool key_cache_inited;
+ my_bool in_resize; /* true during resize operation */
+ my_bool resize_in_flush; /* true during flush of resize operation */
+ my_bool can_be_used; /* usage of cache for read/write is allowed */
+ size_t key_cache_mem_size; /* specified size of the cache memory */
+ uint key_cache_block_size; /* size of the page buffer of a cache block */
+ ulonglong min_warm_blocks; /* min number of warm blocks; */
+ ulonglong age_threshold; /* age threshold for hot blocks */
+ ulonglong keycache_time; /* total number of block link operations */
+ uint hash_entries; /* max number of entries in the hash table */
+ int hash_links; /* max number of hash links */
+ int hash_links_used; /* number of hash links currently used */
+ int disk_blocks; /* max number of blocks in the cache */
+ ulong blocks_used; /* maximum number of concurrently used blocks */
+ ulong blocks_unused; /* number of currently unused blocks */
+ ulong blocks_changed; /* number of currently dirty blocks */
+ ulong warm_blocks; /* number of blocks in warm sub-chain */
+ ulong cnt_for_resize_op; /* counter to block resize operation */
+ long blocks_available; /* number of blocks available in the LRU chain */
+ HASH_LINK **hash_root; /* arr. of entries into hash table buckets */
+ HASH_LINK *hash_link_root; /* memory for hash table links */
+ HASH_LINK *free_hash_list; /* list of free hash links */
+ BLOCK_LINK *free_block_list; /* list of free blocks */
+ BLOCK_LINK *block_root; /* memory for block links */
+ uchar *block_mem; /* memory for block buffers */
+ BLOCK_LINK *used_last; /* ptr to the last block of the LRU chain */
+ BLOCK_LINK *used_ins; /* ptr to the insertion block in LRU chain */
+ mysql_mutex_t cache_lock; /* to lock access to the cache structure */
+ KEYCACHE_WQUEUE resize_queue; /* threads waiting during resize operation */
+ /*
+ Waiting for a zero resize count. Using a queue for symmetry though
+ only one thread can wait here.
+ */
+ KEYCACHE_WQUEUE waiting_for_resize_cnt;
+ KEYCACHE_WQUEUE waiting_for_hash_link; /* waiting for a free hash link */
+ KEYCACHE_WQUEUE waiting_for_block; /* requests waiting for a free block */
+ BLOCK_LINK *changed_blocks[CHANGED_BLOCKS_HASH]; /* hash for dirty file bl.*/
+ BLOCK_LINK *file_blocks[CHANGED_BLOCKS_HASH]; /* hash for other file bl.*/
+
+ /*
+ The following variables are and variables used to hold parameters for
+ initializing the key cache.
+ */
+
+ ulonglong param_buff_size; /* size the memory allocated for the cache */
+ ulonglong param_block_size; /* size of the blocks in the key cache */
+ ulonglong param_division_limit; /* min. percentage of warm blocks */
+ ulonglong param_age_threshold; /* determines when hot block is downgraded */
+
+ /* Statistics variables. These are reset in reset_key_cache_counters(). */
+ ulong global_blocks_changed; /* number of currently dirty blocks */
+ ulonglong global_cache_w_requests;/* number of write requests (write hits) */
+ ulonglong global_cache_write; /* number of writes from cache to files */
+ ulonglong global_cache_r_requests;/* number of read requests (read hits) */
+ ulonglong global_cache_read; /* number of reads from files to cache */
+
+ int blocks; /* max number of blocks in the cache */
+ my_bool in_init; /* Set to 1 in MySQL during init/resize */
+} KEY_CACHE;
+
+/* The default key cache */
+extern KEY_CACHE dflt_key_cache_var, *dflt_key_cache;
+
+extern int init_key_cache(KEY_CACHE *keycache, ulonglong key_cache_block_size,
+ size_t use_mem, ulonglong division_limit,
+ ulonglong age_threshold);
+extern int resize_key_cache(KEY_CACHE *keycache,
+ st_keycache_thread_var *thread_var,
+ ulonglong key_cache_block_size,
+ size_t use_mem, ulonglong division_limit,
+ ulonglong age_threshold);
+extern uchar *key_cache_read(KEY_CACHE *keycache,
+ st_keycache_thread_var *thread_var,
+ File file, my_off_t filepos, int level,
+ uchar *buff, uint length,
+ uint block_length,int return_buffer);
+extern int key_cache_insert(KEY_CACHE *keycache,
+ st_keycache_thread_var *thread_var,
+ File file, my_off_t filepos, int level,
+ uchar *buff, uint length);
+extern int key_cache_write(KEY_CACHE *keycache,
+ st_keycache_thread_var *thread_var,
+ File file, my_off_t filepos, int level,
+ uchar *buff, uint length,
+ uint block_length,int force_write);
+extern int flush_key_blocks(KEY_CACHE *keycache,
+ st_keycache_thread_var *thread_var,
+ int file, enum flush_type type);
+extern void end_key_cache(KEY_CACHE *keycache, my_bool cleanup);
+
+/* Functions to handle multiple key caches */
+extern my_bool multi_keycache_init(void);
+extern void multi_keycache_free(void);
+extern KEY_CACHE *multi_key_cache_search(uchar *key, uint length);
+extern my_bool multi_key_cache_set(const uchar *key, uint length,
+ KEY_CACHE *key_cache);
+extern void multi_key_cache_change(KEY_CACHE *old_data,
+ KEY_CACHE *new_data);
+extern int reset_key_cache_counters(const char *name,
+ KEY_CACHE *key_cache);
+C_MODE_END
+#endif /* _keycache_h */
diff --git a/db/include/little_endian.h b/db/include/little_endian.h
new file mode 100644
index 0000000..d518cb8
--- /dev/null
+++ b/db/include/little_endian.h
@@ -0,0 +1,105 @@
+#ifndef LITTLE_ENDIAN_INCLUDED
+#define LITTLE_ENDIAN_INCLUDED
+/* Copyright (c) 2012, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ Without limiting anything contained in the foregoing, this file,
+ which is part of C Driver for MySQL (Connector/C), is also subject to the
+ Universal FOSS Exception, version 1.0, a copy of which can be found at
+ http://oss.oracle.com/licenses/universal-foss-exception.
+
+ 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, version 2.0, 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 */
+
+/*
+ Data in little-endian format.
+*/
+
+#include
+
+static inline void float4get (float *V, const uchar *M)
+{
+ memcpy(V, (M), sizeof(float));
+}
+
+static inline void float4store(uchar *V, float M)
+{
+ memcpy(V, (&M), sizeof(float));
+}
+
+static inline void float8get (double *V, const uchar *M)
+{
+ memcpy(V, M, sizeof(double));
+}
+
+static inline void float8store(uchar *V, double M)
+{
+ memcpy(V, &M, sizeof(double));
+}
+
+static inline void floatget (float *V, const uchar *M) { float4get(V, M); }
+static inline void floatstore (uchar *V, float M) { float4store(V, M); }
+
+/* Bi-endian hardware.... */
+#if defined(__FLOAT_WORD_ORDER) && (__FLOAT_WORD_ORDER == __BIG_ENDIAN)
+static inline void doublestore(uchar *T, double V)
+{ *(((char*)T)+0)=(char) ((uchar *) &V)[4];
+ *(((char*)T)+1)=(char) ((uchar *) &V)[5];
+ *(((char*)T)+2)=(char) ((uchar *) &V)[6];
+ *(((char*)T)+3)=(char) ((uchar *) &V)[7];
+ *(((char*)T)+4)=(char) ((uchar *) &V)[0];
+ *(((char*)T)+5)=(char) ((uchar *) &V)[1];
+ *(((char*)T)+6)=(char) ((uchar *) &V)[2];
+ *(((char*)T)+7)=(char) ((uchar *) &V)[3]; }
+static inline void doubleget(double *V, const uchar *M)
+{ double def_temp;
+ ((uchar*) &def_temp)[0]=(M)[4];
+ ((uchar*) &def_temp)[1]=(M)[5];
+ ((uchar*) &def_temp)[2]=(M)[6];
+ ((uchar*) &def_temp)[3]=(M)[7];
+ ((uchar*) &def_temp)[4]=(M)[0];
+ ((uchar*) &def_temp)[5]=(M)[1];
+ ((uchar*) &def_temp)[6]=(M)[2];
+ ((uchar*) &def_temp)[7]=(M)[3];
+ (*V) = def_temp; }
+
+#else /* Bi-endian hardware.... */
+
+static inline void doublestore(uchar *T, double V) { memcpy(T, &V, sizeof(double)); }
+static inline void doubleget (double *V, const uchar *M) { memcpy(V, M, sizeof(double)); }
+
+#endif /* Bi-endian hardware.... */
+
+static inline void ushortget(uint16 *V, const uchar *pM) { *V= uint2korr(pM); }
+static inline void shortget (int16 *V, const uchar *pM) { *V= sint2korr(pM); }
+static inline void longget (int32 *V, const uchar *pM) { *V= sint4korr(pM); }
+static inline void ulongget (uint32 *V, const uchar *pM) { *V= uint4korr(pM); }
+static inline void shortstore(uchar *T, int16 V) { int2store(T, V); }
+static inline void longstore (uchar *T, int32 V) { int4store(T, V); }
+
+static inline void longlongget(longlong *V, const uchar *M)
+{
+ memcpy(V, (M), sizeof(ulonglong));
+}
+static inline void longlongstore(uchar *T, longlong V)
+{
+ memcpy((T), &V, sizeof(ulonglong));
+}
+
+#endif /* LITTLE_ENDIAN_INCLUDED */
diff --git a/db/include/m_ctype.h b/db/include/m_ctype.h
new file mode 100644
index 0000000..28cfb91
--- /dev/null
+++ b/db/include/m_ctype.h
@@ -0,0 +1,813 @@
+/* Copyright (c) 2000, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 */
+
+/*
+ A better inplementation of the UNIX ctype(3) library.
+*/
+
+#ifndef _m_ctype_h
+#define _m_ctype_h
+
+#include "my_global.h" /* uint16, uchar */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define MY_CS_NAME_SIZE 32
+#define MY_CS_CTYPE_TABLE_SIZE 257
+#define MY_CS_TO_LOWER_TABLE_SIZE 256
+#define MY_CS_TO_UPPER_TABLE_SIZE 256
+#define MY_CS_SORT_ORDER_TABLE_SIZE 256
+#define MY_CS_TO_UNI_TABLE_SIZE 256
+
+#define CHARSET_DIR "charsets/"
+
+#define my_wc_t ulong
+
+#define MY_CS_REPLACEMENT_CHARACTER 0xFFFD
+
+/*
+ On i386 we store Unicode->CS conversion tables for
+ some character sets using Big-endian order,
+ to copy two bytes at onces.
+ This gives some performance improvement.
+*/
+#ifdef __i386__
+#define MB2(x) (((x) >> 8) + (((x) & 0xFF) << 8))
+#define MY_PUT_MB2(s, code) { *((uint16*)(s))= (code); }
+#else
+#define MB2(x) (x)
+#define MY_PUT_MB2(s, code) { (s)[0]= code >> 8; (s)[1]= code & 0xFF; }
+#endif
+
+
+
+typedef struct unicase_info_char_st
+{
+ uint32 toupper;
+ uint32 tolower;
+ uint32 sort;
+} MY_UNICASE_CHARACTER;
+
+
+typedef struct unicase_info_st
+{
+ my_wc_t maxchar;
+ const MY_UNICASE_CHARACTER **page;
+} MY_UNICASE_INFO;
+
+
+extern MY_UNICASE_INFO my_unicase_default;
+extern MY_UNICASE_INFO my_unicase_turkish;
+extern MY_UNICASE_INFO my_unicase_mysql500;
+extern MY_UNICASE_INFO my_unicase_unicode520;
+
+#define MY_UCA_MAX_CONTRACTION 6
+#define MY_UCA_MAX_WEIGHT_SIZE 8
+#define MY_UCA_WEIGHT_LEVELS 1
+
+typedef struct my_contraction_t
+{
+ my_wc_t ch[MY_UCA_MAX_CONTRACTION]; /* Character sequence */
+ uint16 weight[MY_UCA_MAX_WEIGHT_SIZE];/* Its weight string, 0-terminated */
+ my_bool with_context;
+} MY_CONTRACTION;
+
+
+
+typedef struct my_contraction_list_t
+{
+ size_t nitems; /* Number of items in the list */
+ MY_CONTRACTION *item; /* List of contractions */
+ char *flags; /* Character flags, e.g. "is contraction head") */
+} MY_CONTRACTIONS;
+
+
+my_bool my_uca_can_be_contraction_head(const MY_CONTRACTIONS *c, my_wc_t wc);
+my_bool my_uca_can_be_contraction_tail(const MY_CONTRACTIONS *c, my_wc_t wc);
+uint16 *my_uca_contraction2_weight(const MY_CONTRACTIONS *c,
+ my_wc_t wc1, my_wc_t wc2);
+
+
+/* Collation weights on a single level (e.g. primary, secondary, tertiarty) */
+typedef struct my_uca_level_info_st
+{
+ my_wc_t maxchar;
+ uchar *lengths;
+ uint16 **weights;
+ MY_CONTRACTIONS contractions;
+} MY_UCA_WEIGHT_LEVEL;
+
+
+typedef struct uca_info_st
+{
+ MY_UCA_WEIGHT_LEVEL level[MY_UCA_WEIGHT_LEVELS];
+
+ /* Logical positions */
+ my_wc_t first_non_ignorable;
+ my_wc_t last_non_ignorable;
+ my_wc_t first_primary_ignorable;
+ my_wc_t last_primary_ignorable;
+ my_wc_t first_secondary_ignorable;
+ my_wc_t last_secondary_ignorable;
+ my_wc_t first_tertiary_ignorable;
+ my_wc_t last_tertiary_ignorable;
+ my_wc_t first_trailing;
+ my_wc_t last_trailing;
+ my_wc_t first_variable;
+ my_wc_t last_variable;
+
+} MY_UCA_INFO;
+
+
+
+extern MY_UCA_INFO my_uca_v400;
+
+
+typedef struct uni_ctype_st
+{
+ uchar pctype;
+ uchar *ctype;
+} MY_UNI_CTYPE;
+
+extern MY_UNI_CTYPE my_uni_ctype[256];
+
+/* wm_wc and wc_mb return codes */
+#define MY_CS_ILSEQ 0 /* Wrong by sequence: wb_wc */
+#define MY_CS_ILUNI 0 /* Cannot encode Unicode to charset: wc_mb */
+#define MY_CS_TOOSMALL -101 /* Need at least one byte: wc_mb and mb_wc */
+#define MY_CS_TOOSMALL2 -102 /* Need at least two bytes: wc_mb and mb_wc */
+#define MY_CS_TOOSMALL3 -103 /* Need at least three bytes: wc_mb and mb_wc */
+/* These following three are currently not really used */
+#define MY_CS_TOOSMALL4 -104 /* Need at least 4 bytes: wc_mb and mb_wc */
+#define MY_CS_TOOSMALL5 -105 /* Need at least 5 bytes: wc_mb and mb_wc */
+#define MY_CS_TOOSMALL6 -106 /* Need at least 6 bytes: wc_mb and mb_wc */
+/* A helper macros for "need at least n bytes" */
+#define MY_CS_TOOSMALLN(n) (-100-(n))
+
+#define MY_SEQ_INTTAIL 1
+#define MY_SEQ_SPACES 2
+
+ /* My charsets_list flags */
+#define MY_CS_COMPILED 1 /* compiled-in sets */
+#define MY_CS_CONFIG 2 /* sets that have a *.conf file */
+#define MY_CS_INDEX 4 /* sets listed in the Index file */
+#define MY_CS_LOADED 8 /* sets that are currently loaded */
+#define MY_CS_BINSORT 16 /* if binary sort order */
+#define MY_CS_PRIMARY 32 /* if primary collation */
+#define MY_CS_STRNXFRM 64 /* if strnxfrm is used for sort */
+#define MY_CS_UNICODE 128 /* is a charset is BMP Unicode */
+#define MY_CS_READY 256 /* if a charset is initialized */
+#define MY_CS_AVAILABLE 512 /* If either compiled-in or loaded*/
+#define MY_CS_CSSORT 1024 /* if case sensitive sort order */
+#define MY_CS_HIDDEN 2048 /* don't display in SHOW */
+#define MY_CS_PUREASCII 4096 /* if a charset is pure ascii */
+#define MY_CS_NONASCII 8192 /* if not ASCII-compatible */
+#define MY_CS_UNICODE_SUPPLEMENT 16384 /* Non-BMP Unicode characters */
+#define MY_CS_LOWER_SORT 32768 /* If use lower case as weight */
+#define MY_CHARSET_UNDEFINED 0
+
+/* Character repertoire flags */
+#define MY_REPERTOIRE_ASCII 1 /* Pure ASCII U+0000..U+007F */
+#define MY_REPERTOIRE_EXTENDED 2 /* Extended characters: U+0080..U+FFFF */
+#define MY_REPERTOIRE_UNICODE30 3 /* ASCII | EXTENDED: U+0000..U+FFFF */
+
+/* Flags for strxfrm */
+#define MY_STRXFRM_LEVEL1 0x00000001 /* for primary weights */
+#define MY_STRXFRM_LEVEL2 0x00000002 /* for secondary weights */
+#define MY_STRXFRM_LEVEL3 0x00000004 /* for tertiary weights */
+#define MY_STRXFRM_LEVEL4 0x00000008 /* fourth level weights */
+#define MY_STRXFRM_LEVEL5 0x00000010 /* fifth level weights */
+#define MY_STRXFRM_LEVEL6 0x00000020 /* sixth level weights */
+#define MY_STRXFRM_LEVEL_ALL 0x0000003F /* Bit OR for the above six */
+#define MY_STRXFRM_NLEVELS 6 /* Number of possible levels*/
+
+#define MY_STRXFRM_PAD_WITH_SPACE 0x00000040 /* if pad result with spaces */
+#define MY_STRXFRM_PAD_TO_MAXLEN 0x00000080 /* if pad tail(for filesort) */
+
+#define MY_STRXFRM_DESC_LEVEL1 0x00000100 /* if desc order for level1 */
+#define MY_STRXFRM_DESC_LEVEL2 0x00000200 /* if desc order for level2 */
+#define MY_STRXFRM_DESC_LEVEL3 0x00000300 /* if desc order for level3 */
+#define MY_STRXFRM_DESC_LEVEL4 0x00000800 /* if desc order for level4 */
+#define MY_STRXFRM_DESC_LEVEL5 0x00001000 /* if desc order for level5 */
+#define MY_STRXFRM_DESC_LEVEL6 0x00002000 /* if desc order for level6 */
+#define MY_STRXFRM_DESC_SHIFT 8
+
+#define MY_STRXFRM_UNUSED_00004000 0x00004000 /* for future extensions */
+#define MY_STRXFRM_UNUSED_00008000 0x00008000 /* for future extensions */
+
+#define MY_STRXFRM_REVERSE_LEVEL1 0x00010000 /* if reverse order for level1 */
+#define MY_STRXFRM_REVERSE_LEVEL2 0x00020000 /* if reverse order for level2 */
+#define MY_STRXFRM_REVERSE_LEVEL3 0x00040000 /* if reverse order for level3 */
+#define MY_STRXFRM_REVERSE_LEVEL4 0x00080000 /* if reverse order for level4 */
+#define MY_STRXFRM_REVERSE_LEVEL5 0x00100000 /* if reverse order for level5 */
+#define MY_STRXFRM_REVERSE_LEVEL6 0x00200000 /* if reverse order for level6 */
+#define MY_STRXFRM_REVERSE_SHIFT 16
+
+
+typedef struct my_uni_idx_st
+{
+ uint16 from;
+ uint16 to;
+ const uchar *tab;
+} MY_UNI_IDX;
+
+typedef struct
+{
+ uint beg;
+ uint end;
+ uint mb_len;
+} my_match_t;
+
+struct charset_info_st;
+
+typedef struct my_charset_loader_st
+{
+ char error[128];
+ void *(*once_alloc)(size_t);
+ void *(*mem_malloc)(size_t);
+ void *(*mem_realloc)(void *, size_t);
+ void (*mem_free)(void *);
+ void (*reporter)(enum loglevel, const char *format, ...);
+ int (*add_collation)(struct charset_info_st *cs);
+} MY_CHARSET_LOADER;
+
+
+extern int (*my_string_stack_guard)(int);
+
+/* See strings/CHARSET_INFO.txt for information about this structure */
+typedef struct my_collation_handler_st
+{
+ my_bool (*init)(struct charset_info_st *, MY_CHARSET_LOADER *);
+ /* Collation routines */
+ int (*strnncoll)(const struct charset_info_st *,
+ const uchar *, size_t, const uchar *, size_t, my_bool);
+ int (*strnncollsp)(const struct charset_info_st *,
+ const uchar *, size_t, const uchar *, size_t,
+ my_bool diff_if_only_endspace_difference);
+ size_t (*strnxfrm)(const struct charset_info_st *,
+ uchar *dst, size_t dstlen, uint nweights,
+ const uchar *src, size_t srclen, uint flags);
+ size_t (*strnxfrmlen)(const struct charset_info_st *, size_t);
+ my_bool (*like_range)(const struct charset_info_st *,
+ const char *s, size_t s_length,
+ pchar w_prefix, pchar w_one, pchar w_many,
+ size_t res_length,
+ char *min_str, char *max_str,
+ size_t *min_len, size_t *max_len);
+ int (*wildcmp)(const struct charset_info_st *,
+ const char *str,const char *str_end,
+ const char *wildstr,const char *wildend,
+ int escape,int w_one, int w_many);
+
+ int (*strcasecmp)(const struct charset_info_st *, const char *,
+ const char *);
+
+ uint (*instr)(const struct charset_info_st *,
+ const char *b, size_t b_length,
+ const char *s, size_t s_length,
+ my_match_t *match, uint nmatch);
+
+ /* Hash calculation */
+ void (*hash_sort)(const struct charset_info_st *cs, const uchar *key,
+ size_t len, ulong *nr1, ulong *nr2);
+ my_bool (*propagate)(const struct charset_info_st *cs, const uchar *str,
+ size_t len);
+} MY_COLLATION_HANDLER;
+
+extern MY_COLLATION_HANDLER my_collation_mb_bin_handler;
+extern MY_COLLATION_HANDLER my_collation_8bit_bin_handler;
+extern MY_COLLATION_HANDLER my_collation_8bit_simple_ci_handler;
+extern MY_COLLATION_HANDLER my_collation_ucs2_uca_handler;
+
+/* Some typedef to make it easy for C++ to make function pointers */
+typedef int (*my_charset_conv_mb_wc)(const struct charset_info_st *,
+ my_wc_t *, const uchar *, const uchar *);
+typedef int (*my_charset_conv_wc_mb)(const struct charset_info_st *, my_wc_t,
+ uchar *, uchar *);
+typedef size_t (*my_charset_conv_case)(const struct charset_info_st *,
+ char *, size_t, char *, size_t);
+
+
+/* See strings/CHARSET_INFO.txt about information on this structure */
+typedef struct my_charset_handler_st
+{
+ my_bool (*init)(struct charset_info_st *, MY_CHARSET_LOADER *loader);
+ /* Multibyte routines */
+ uint (*ismbchar)(const struct charset_info_st *, const char *,
+ const char *);
+ uint (*mbcharlen)(const struct charset_info_st *, uint c);
+ size_t (*numchars)(const struct charset_info_st *, const char *b,
+ const char *e);
+ size_t (*charpos)(const struct charset_info_st *, const char *b,
+ const char *e, size_t pos);
+ size_t (*well_formed_len)(const struct charset_info_st *,
+ const char *b,const char *e,
+ size_t nchars, int *error);
+ size_t (*lengthsp)(const struct charset_info_st *, const char *ptr,
+ size_t length);
+ size_t (*numcells)(const struct charset_info_st *, const char *b,
+ const char *e);
+
+ /* Unicode conversion */
+ my_charset_conv_mb_wc mb_wc;
+ my_charset_conv_wc_mb wc_mb;
+
+ /* CTYPE scanner */
+ int (*ctype)(const struct charset_info_st *cs, int *ctype,
+ const uchar *s, const uchar *e);
+
+ /* Functions for case and sort conversion */
+ size_t (*caseup_str)(const struct charset_info_st *, char *);
+ size_t (*casedn_str)(const struct charset_info_st *, char *);
+
+ my_charset_conv_case caseup;
+ my_charset_conv_case casedn;
+
+ /* Charset dependant snprintf() */
+ size_t (*snprintf)(const struct charset_info_st *, char *to, size_t n,
+ const char *fmt,
+ ...) MY_ATTRIBUTE((format(printf, 4, 5)));
+ size_t (*long10_to_str)(const struct charset_info_st *, char *to, size_t n,
+ int radix, long int val);
+ size_t (*longlong10_to_str)(const struct charset_info_st *, char *to,
+ size_t n, int radix, longlong val);
+
+ void (*fill)(const struct charset_info_st *, char *to, size_t len,
+ int fill);
+
+ /* String-to-number conversion routines */
+ long (*strntol)(const struct charset_info_st *, const char *s,
+ size_t l, int base, char **e, int *err);
+ ulong (*strntoul)(const struct charset_info_st *, const char *s,
+ size_t l, int base, char **e, int *err);
+ longlong (*strntoll)(const struct charset_info_st *, const char *s,
+ size_t l, int base, char **e, int *err);
+ ulonglong (*strntoull)(const struct charset_info_st *, const char *s,
+ size_t l, int base, char **e, int *err);
+ double (*strntod)(const struct charset_info_st *, char *s,
+ size_t l, char **e, int *err);
+ longlong (*strtoll10)(const struct charset_info_st *cs,
+ const char *nptr, char **endptr, int *error);
+ ulonglong (*strntoull10rnd)(const struct charset_info_st *cs,
+ const char *str, size_t length,
+ int unsigned_fl,
+ char **endptr, int *error);
+ size_t (*scan)(const struct charset_info_st *, const char *b,
+ const char *e, int sq);
+} MY_CHARSET_HANDLER;
+
+extern MY_CHARSET_HANDLER my_charset_8bit_handler;
+extern MY_CHARSET_HANDLER my_charset_ascii_handler;
+extern MY_CHARSET_HANDLER my_charset_ucs2_handler;
+
+
+/*
+ We define this CHARSET_INFO_DEFINED here to prevent a repeat of the
+ typedef in hash.c, which will cause a compiler error.
+*/
+#define CHARSET_INFO_DEFINED
+
+/* See strings/CHARSET_INFO.txt about information on this structure */
+typedef struct charset_info_st
+{
+ uint number;
+ uint primary_number;
+ uint binary_number;
+ uint state;
+ const char *csname;
+ const char *name;
+ const char *comment;
+ const char *tailoring;
+ const uchar *ctype;
+ const uchar *to_lower;
+ const uchar *to_upper;
+ const uchar *sort_order;
+ MY_UCA_INFO *uca; /* This can be changed in apply_one_rule() */
+ const uint16 *tab_to_uni;
+ const MY_UNI_IDX *tab_from_uni;
+ const MY_UNICASE_INFO *caseinfo;
+ const struct lex_state_maps_st *state_maps; /* parser internal data */
+ const uchar *ident_map; /* parser internal data */
+ uint strxfrm_multiply;
+ uchar caseup_multiply;
+ uchar casedn_multiply;
+ uint mbminlen;
+ uint mbmaxlen;
+ uint mbmaxlenlen;
+ my_wc_t min_sort_char;
+ my_wc_t max_sort_char; /* For LIKE optimization */
+ uchar pad_char;
+ my_bool escape_with_backslash_is_dangerous;
+ uchar levels_for_compare;
+ uchar levels_for_order;
+
+ MY_CHARSET_HANDLER *cset;
+ MY_COLLATION_HANDLER *coll;
+
+} CHARSET_INFO;
+#define ILLEGAL_CHARSET_INFO_NUMBER (~0U)
+
+
+extern MYSQL_PLUGIN_IMPORT CHARSET_INFO my_charset_bin;
+extern MYSQL_PLUGIN_IMPORT CHARSET_INFO my_charset_latin1;
+extern MYSQL_PLUGIN_IMPORT CHARSET_INFO my_charset_filename;
+
+extern CHARSET_INFO my_charset_big5_chinese_ci;
+extern CHARSET_INFO my_charset_big5_bin;
+extern CHARSET_INFO my_charset_cp932_japanese_ci;
+extern CHARSET_INFO my_charset_cp932_bin;
+extern CHARSET_INFO my_charset_cp1250_czech_ci;
+extern CHARSET_INFO my_charset_eucjpms_japanese_ci;
+extern CHARSET_INFO my_charset_eucjpms_bin;
+extern CHARSET_INFO my_charset_euckr_korean_ci;
+extern CHARSET_INFO my_charset_euckr_bin;
+extern CHARSET_INFO my_charset_gb2312_chinese_ci;
+extern CHARSET_INFO my_charset_gb2312_bin;
+extern CHARSET_INFO my_charset_gbk_chinese_ci;
+extern CHARSET_INFO my_charset_gbk_bin;
+extern CHARSET_INFO my_charset_gb18030_chinese_ci;
+extern CHARSET_INFO my_charset_gb18030_bin;
+extern CHARSET_INFO my_charset_latin1_german2_ci;
+extern CHARSET_INFO my_charset_latin1_bin;
+extern CHARSET_INFO my_charset_latin2_czech_ci;
+extern CHARSET_INFO my_charset_sjis_japanese_ci;
+extern CHARSET_INFO my_charset_sjis_bin;
+extern CHARSET_INFO my_charset_tis620_thai_ci;
+extern CHARSET_INFO my_charset_tis620_bin;
+extern CHARSET_INFO my_charset_ucs2_general_ci;
+extern CHARSET_INFO my_charset_ucs2_bin;
+extern CHARSET_INFO my_charset_ucs2_unicode_ci;
+extern CHARSET_INFO my_charset_ucs2_general_mysql500_ci;
+extern CHARSET_INFO my_charset_ujis_japanese_ci;
+extern CHARSET_INFO my_charset_ujis_bin;
+extern CHARSET_INFO my_charset_utf16_bin;
+extern CHARSET_INFO my_charset_utf16_general_ci;
+extern CHARSET_INFO my_charset_utf16_unicode_ci;
+extern CHARSET_INFO my_charset_utf16le_bin;
+extern CHARSET_INFO my_charset_utf16le_general_ci;
+extern CHARSET_INFO my_charset_utf32_bin;
+extern CHARSET_INFO my_charset_utf32_general_ci;
+extern CHARSET_INFO my_charset_utf32_unicode_ci;
+
+extern MYSQL_PLUGIN_IMPORT CHARSET_INFO my_charset_utf8_general_ci;
+extern CHARSET_INFO my_charset_utf8_tolower_ci;
+extern CHARSET_INFO my_charset_utf8_unicode_ci;
+extern CHARSET_INFO my_charset_utf8_bin;
+extern CHARSET_INFO my_charset_utf8_general_mysql500_ci;
+extern CHARSET_INFO my_charset_utf8mb4_bin;
+extern MYSQL_PLUGIN_IMPORT CHARSET_INFO my_charset_utf8mb4_general_ci;
+extern CHARSET_INFO my_charset_utf8mb4_unicode_ci;
+#define MY_UTF8MB3 "utf8"
+#define MY_UTF8MB4 "utf8mb4"
+
+
+/* declarations for simple charsets */
+extern size_t my_strnxfrm_simple(const CHARSET_INFO *,
+ uchar *dst, size_t dstlen, uint nweights,
+ const uchar *src, size_t srclen, uint flags);
+size_t my_strnxfrmlen_simple(const CHARSET_INFO *, size_t);
+extern int my_strnncoll_simple(const CHARSET_INFO *, const uchar *, size_t,
+ const uchar *, size_t, my_bool);
+
+extern int my_strnncollsp_simple(const CHARSET_INFO *, const uchar *, size_t,
+ const uchar *, size_t,
+ my_bool diff_if_only_endspace_difference);
+
+extern void my_hash_sort_simple(const CHARSET_INFO *cs,
+ const uchar *key, size_t len,
+ ulong *nr1, ulong *nr2);
+
+extern size_t my_lengthsp_8bit(const CHARSET_INFO *cs, const char *ptr,
+ size_t length);
+
+extern uint my_instr_simple(const struct charset_info_st *,
+ const char *b, size_t b_length,
+ const char *s, size_t s_length,
+ my_match_t *match, uint nmatch);
+
+
+/* Functions for 8bit */
+extern size_t my_caseup_str_8bit(const CHARSET_INFO *, char *);
+extern size_t my_casedn_str_8bit(const CHARSET_INFO *, char *);
+extern size_t my_caseup_8bit(const CHARSET_INFO *, char *src, size_t srclen,
+ char *dst, size_t dstlen);
+extern size_t my_casedn_8bit(const CHARSET_INFO *, char *src, size_t srclen,
+ char *dst, size_t dstlen);
+
+extern int my_strcasecmp_8bit(const CHARSET_INFO * cs, const char *,
+ const char *);
+
+int my_mb_wc_8bit(const CHARSET_INFO *cs,my_wc_t *wc, const uchar *s,
+ const uchar *e);
+int my_wc_mb_8bit(const CHARSET_INFO *cs,my_wc_t wc, uchar *s, uchar *e);
+
+int my_mb_ctype_8bit(const CHARSET_INFO *,int *, const uchar *,const uchar *);
+int my_mb_ctype_mb(const CHARSET_INFO *,int *, const uchar *,const uchar *);
+
+size_t my_scan_8bit(const CHARSET_INFO *cs, const char *b, const char *e,
+ int sq);
+
+size_t my_snprintf_8bit(const struct charset_info_st *, char *to, size_t n,
+ const char *fmt, ...)
+ MY_ATTRIBUTE((format(printf, 4, 5)));
+
+long my_strntol_8bit(const CHARSET_INFO *, const char *s, size_t l,
+ int base, char **e, int *err);
+ulong my_strntoul_8bit(const CHARSET_INFO *, const char *s, size_t l,
+ int base, char **e, int *err);
+longlong my_strntoll_8bit(const CHARSET_INFO *, const char *s, size_t l,
+ int base, char **e, int *err);
+ulonglong my_strntoull_8bit(const CHARSET_INFO *, const char *s, size_t l,
+ int base, char **e, int *err);
+double my_strntod_8bit(const CHARSET_INFO *, char *s, size_t l, char **e,
+ int *err);
+size_t my_long10_to_str_8bit(const CHARSET_INFO *, char *to, size_t l,
+ int radix, long int val);
+size_t my_longlong10_to_str_8bit(const CHARSET_INFO *, char *to, size_t l,
+ int radix, longlong val);
+
+longlong my_strtoll10_8bit(const CHARSET_INFO *cs,
+ const char *nptr, char **endptr, int *error);
+longlong my_strtoll10_ucs2(const CHARSET_INFO *cs,
+ const char *nptr, char **endptr, int *error);
+
+ulonglong my_strntoull10rnd_8bit(const CHARSET_INFO *cs,
+ const char *str, size_t length, int
+ unsigned_fl, char **endptr, int *error);
+ulonglong my_strntoull10rnd_ucs2(const CHARSET_INFO *cs,
+ const char *str, size_t length,
+ int unsigned_fl, char **endptr, int *error);
+
+void my_fill_8bit(const CHARSET_INFO *cs, char* to, size_t l, int fill);
+
+/* For 8-bit character set */
+my_bool my_like_range_simple(const CHARSET_INFO *cs,
+ const char *ptr, size_t ptr_length,
+ pbool escape, pbool w_one, pbool w_many,
+ size_t res_length,
+ char *min_str, char *max_str,
+ size_t *min_length, size_t *max_length);
+
+/* For ASCII-based multi-byte character sets with mbminlen=1 */
+my_bool my_like_range_mb(const CHARSET_INFO *cs,
+ const char *ptr, size_t ptr_length,
+ pbool escape, pbool w_one, pbool w_many,
+ size_t res_length,
+ char *min_str, char *max_str,
+ size_t *min_length, size_t *max_length);
+
+/* For other character sets, with arbitrary mbminlen and mbmaxlen numbers */
+my_bool my_like_range_generic(const CHARSET_INFO *cs,
+ const char *ptr, size_t ptr_length,
+ pbool escape, pbool w_one, pbool w_many,
+ size_t res_length,
+ char *min_str, char *max_str,
+ size_t *min_length, size_t *max_length);
+
+int my_wildcmp_8bit(const CHARSET_INFO *,
+ const char *str,const char *str_end,
+ const char *wildstr,const char *wildend,
+ int escape, int w_one, int w_many);
+
+int my_wildcmp_bin(const CHARSET_INFO *,
+ const char *str,const char *str_end,
+ const char *wildstr,const char *wildend,
+ int escape, int w_one, int w_many);
+
+size_t my_numchars_8bit(const CHARSET_INFO *, const char *b, const char *e);
+size_t my_numcells_8bit(const CHARSET_INFO *, const char *b, const char *e);
+size_t my_charpos_8bit(const CHARSET_INFO *, const char *b, const char *e,
+ size_t pos);
+size_t my_well_formed_len_8bit(const CHARSET_INFO *, const char *b,
+ const char *e, size_t pos, int *error);
+uint my_mbcharlen_8bit(const CHARSET_INFO *, uint c);
+
+
+/* Functions for multibyte charsets */
+extern size_t my_caseup_str_mb(const CHARSET_INFO *, char *);
+extern size_t my_casedn_str_mb(const CHARSET_INFO *, char *);
+extern size_t my_caseup_mb(const CHARSET_INFO *, char *src, size_t srclen,
+ char *dst, size_t dstlen);
+extern size_t my_casedn_mb(const CHARSET_INFO *, char *src, size_t srclen,
+ char *dst, size_t dstlen);
+extern size_t my_caseup_mb_varlen(const CHARSET_INFO *, char *src,
+ size_t srclen, char *dst, size_t dstlen);
+extern size_t my_casedn_mb_varlen(const CHARSET_INFO *, char *src,
+ size_t srclen, char *dst, size_t dstlen);
+extern size_t my_caseup_ujis(const CHARSET_INFO *, char *src, size_t srclen,
+ char *dst, size_t dstlen);
+extern size_t my_casedn_ujis(const CHARSET_INFO *, char *src, size_t srclen,
+ char *dst, size_t dstlen);
+extern int my_strcasecmp_mb(const CHARSET_INFO * cs,const char *,
+ const char *);
+
+int my_wildcmp_mb(const CHARSET_INFO *,
+ const char *str,const char *str_end,
+ const char *wildstr,const char *wildend,
+ int escape, int w_one, int w_many);
+size_t my_numchars_mb(const CHARSET_INFO *, const char *b, const char *e);
+size_t my_numcells_mb(const CHARSET_INFO *, const char *b, const char *e);
+size_t my_charpos_mb(const CHARSET_INFO *, const char *b, const char *e,
+ size_t pos);
+size_t my_well_formed_len_mb(const CHARSET_INFO *, const char *b,
+ const char *e, size_t pos, int *error);
+uint my_instr_mb(const struct charset_info_st *,
+ const char *b, size_t b_length,
+ const char *s, size_t s_length,
+ my_match_t *match, uint nmatch);
+
+int my_strnncoll_mb_bin(const CHARSET_INFO * cs,
+ const uchar *s, size_t slen,
+ const uchar *t, size_t tlen,
+ my_bool t_is_prefix);
+
+int my_strnncollsp_mb_bin(const CHARSET_INFO *cs,
+ const uchar *a, size_t a_length,
+ const uchar *b, size_t b_length,
+ my_bool diff_if_only_endspace_difference);
+
+int my_wildcmp_mb_bin(const CHARSET_INFO *cs,
+ const char *str,const char *str_end,
+ const char *wildstr,const char *wildend,
+ int escape, int w_one, int w_many);
+
+int my_strcasecmp_mb_bin(const CHARSET_INFO * cs MY_ATTRIBUTE((unused)),
+ const char *s, const char *t);
+
+void my_hash_sort_mb_bin(const CHARSET_INFO *cs MY_ATTRIBUTE((unused)),
+ const uchar *key, size_t len,ulong *nr1, ulong *nr2);
+
+size_t my_strnxfrm_mb(const CHARSET_INFO *,
+ uchar *dst, size_t dstlen, uint nweights,
+ const uchar *src, size_t srclen, uint flags);
+
+size_t my_strnxfrm_unicode(const CHARSET_INFO *,
+ uchar *dst, size_t dstlen, uint nweights,
+ const uchar *src, size_t srclen, uint flags);
+
+size_t my_strnxfrm_unicode_full_bin(const CHARSET_INFO *,
+ uchar *dst, size_t dstlen, uint nweights,
+ const uchar *src, size_t srclen, uint flags);
+size_t my_strnxfrmlen_unicode_full_bin(const CHARSET_INFO *, size_t);
+
+int my_wildcmp_unicode(const CHARSET_INFO *cs,
+ const char *str, const char *str_end,
+ const char *wildstr, const char *wildend,
+ int escape, int w_one, int w_many,
+ const MY_UNICASE_INFO *weights);
+
+extern my_bool my_parse_charset_xml(MY_CHARSET_LOADER *loader,
+ const char *buf, size_t buflen);
+extern char *my_strchr(const CHARSET_INFO *cs, const char *str,
+ const char *end, pchar c);
+extern size_t my_strcspn(const CHARSET_INFO *cs, const char *str,
+ const char *end, const char *reject,
+ size_t reject_length);
+
+my_bool my_propagate_simple(const CHARSET_INFO *cs, const uchar *str,
+ size_t len);
+my_bool my_propagate_complex(const CHARSET_INFO *cs, const uchar *str,
+ size_t len);
+
+
+uint my_string_repertoire(const CHARSET_INFO *cs, const char *str, size_t len);
+my_bool my_charset_is_ascii_based(const CHARSET_INFO *cs);
+my_bool my_charset_is_8bit_pure_ascii(const CHARSET_INFO *cs);
+uint my_charset_repertoire(const CHARSET_INFO *cs);
+
+
+uint my_strxfrm_flag_normalize(uint flags, uint nlevels);
+void my_strxfrm_desc_and_reverse(uchar *str, uchar *strend,
+ uint flags, uint level);
+size_t my_strxfrm_pad_desc_and_reverse(const CHARSET_INFO *cs,
+ uchar *str, uchar *frmend, uchar *strend,
+ uint nweights, uint flags, uint level);
+
+my_bool my_charset_is_ascii_compatible(const CHARSET_INFO *cs);
+
+const MY_CONTRACTIONS *my_charset_get_contractions(const CHARSET_INFO *cs,
+ int level);
+
+extern size_t my_vsnprintf_ex(const CHARSET_INFO *cs, char *to, size_t n,
+ const char* fmt, va_list ap);
+
+size_t my_convert(char *to, size_t to_length, const CHARSET_INFO *to_cs,
+ const char *from, size_t from_length,
+ const CHARSET_INFO *from_cs, uint *errors);
+
+uint my_mbcharlen_ptr(const CHARSET_INFO *cs, const char *s, const char *e);
+
+#define _MY_U 01 /* Upper case */
+#define _MY_L 02 /* Lower case */
+#define _MY_NMR 04 /* Numeral (digit) */
+#define _MY_SPC 010 /* Spacing character */
+#define _MY_PNT 020 /* Punctuation */
+#define _MY_CTR 040 /* Control character */
+#define _MY_B 0100 /* Blank */
+#define _MY_X 0200 /* heXadecimal digit */
+
+
+#define my_isascii(c) (!((c) & ~0177))
+#define my_toascii(c) ((c) & 0177)
+#define my_tocntrl(c) ((c) & 31)
+#define my_toprint(c) ((c) | 64)
+#define my_toupper(s,c) (char) ((s)->to_upper[(uchar) (c)])
+#define my_tolower(s,c) (char) ((s)->to_lower[(uchar) (c)])
+#define my_isalpha(s, c) (((s)->ctype+1)[(uchar) (c)] & (_MY_U | _MY_L))
+#define my_isupper(s, c) (((s)->ctype+1)[(uchar) (c)] & _MY_U)
+#define my_islower(s, c) (((s)->ctype+1)[(uchar) (c)] & _MY_L)
+#define my_isdigit(s, c) (((s)->ctype+1)[(uchar) (c)] & _MY_NMR)
+#define my_isxdigit(s, c) (((s)->ctype+1)[(uchar) (c)] & _MY_X)
+#define my_isalnum(s, c) (((s)->ctype+1)[(uchar) (c)] & (_MY_U | _MY_L | _MY_NMR))
+#define my_isspace(s, c) (((s)->ctype+1)[(uchar) (c)] & _MY_SPC)
+#define my_ispunct(s, c) (((s)->ctype+1)[(uchar) (c)] & _MY_PNT)
+#define my_isprint(s, c) (((s)->ctype+1)[(uchar) (c)] & (_MY_PNT | _MY_U | _MY_L | _MY_NMR | _MY_B))
+#define my_isgraph(s, c) (((s)->ctype+1)[(uchar) (c)] & (_MY_PNT | _MY_U | _MY_L | _MY_NMR))
+#define my_iscntrl(s, c) (((s)->ctype+1)[(uchar) (c)] & _MY_CTR)
+
+/* Some macros that should be cleaned up a little */
+#define my_isvar(s,c) (my_isalnum(s,c) || (c) == '_')
+#define my_isvar_start(s,c) (my_isalpha(s,c) || (c) == '_')
+
+#define my_binary_compare(s) ((s)->state & MY_CS_BINSORT)
+#define use_strnxfrm(s) ((s)->state & MY_CS_STRNXFRM)
+#define my_strnxfrm(cs, d, dl, s, sl) \
+ ((cs)->coll->strnxfrm((cs), (d), (dl), (dl), (s), (sl), MY_STRXFRM_PAD_WITH_SPACE))
+#define my_strnncoll(s, a, b, c, d) ((s)->coll->strnncoll((s), (a), (b), (c), (d), 0))
+#define my_like_range(s, a, b, c, d, e, f, g, h, i, j) \
+ ((s)->coll->like_range((s), (a), (b), (c), (d), (e), (f), (g), (h), (i), (j)))
+#define my_wildcmp(cs,s,se,w,we,e,o,m) ((cs)->coll->wildcmp((cs),(s),(se),(w),(we),(e),(o),(m)))
+#define my_strcasecmp(s, a, b) ((s)->coll->strcasecmp((s), (a), (b)))
+#define my_charpos(cs, b, e, num) (cs)->cset->charpos((cs), (const char*) (b), (const char *)(e), (num))
+
+
+#define use_mb(s) ((s)->cset->ismbchar != NULL)
+#define my_ismbchar(s, a, b) ((s)->cset->ismbchar((s), (a), (b)))
+#define my_mbcharlen(s, a) ((s)->cset->mbcharlen((s),(a)))
+/**
+ Get the length of gb18030 code by the given two leading bytes
+
+ @param[in] s charset_info
+ @param[in] a first byte of gb18030 code
+ @param[in] b second byte of gb18030 code
+ @return the length of gb18030 code starting with given two bytes,
+ the length would be 2 or 4 for valid gb18030 code,
+ or 0 for invalid gb18030 code
+*/
+#define my_mbcharlen_2(s, a, b) ((s)->cset->mbcharlen((s),((((a) & 0xFF) << 8) + ((b) & 0xFF))))
+/**
+ Get the maximum length of leading bytes needed to determine the length of a
+ multi-byte gb18030 code
+
+ @param[in] s charset_info
+ @return number of leading bytes we need, would be 2 for gb18030
+ and 1 for all other charsets
+*/
+#define my_mbmaxlenlen(s) ((s)->mbmaxlenlen)
+/**
+ Judge if the given byte is a possible leading byte for a charset.
+ For gb18030 whose mbmaxlenlen is 2, we can't determine the length of
+ a multi-byte character by looking at the first byte only
+
+ @param[in] s charset_info
+ @param[in] i possible leading byte
+ @return true if it is, otherwise false
+*/
+#define my_ismb1st(s, i) \
+ (my_mbcharlen((s), (i)) > 1 || \
+ (my_mbmaxlenlen((s)) == 2 && my_mbcharlen((s), (i)) == 0))
+
+#define my_caseup_str(s, a) ((s)->cset->caseup_str((s), (a)))
+#define my_casedn_str(s, a) ((s)->cset->casedn_str((s), (a)))
+#define my_strntol(s, a, b, c, d, e) ((s)->cset->strntol((s),(a),(b),(c),(d),(e)))
+#define my_strntoul(s, a, b, c, d, e) ((s)->cset->strntoul((s),(a),(b),(c),(d),(e)))
+#define my_strntoll(s, a, b, c, d, e) ((s)->cset->strntoll((s),(a),(b),(c),(d),(e)))
+#define my_strntoull(s, a, b, c,d, e) ((s)->cset->strntoull((s),(a),(b),(c),(d),(e)))
+#define my_strntod(s, a, b, c, d) ((s)->cset->strntod((s),(a),(b),(c),(d)))
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _m_ctype_h */
diff --git a/db/include/m_string.h b/db/include/m_string.h
new file mode 100644
index 0000000..e42fdea
--- /dev/null
+++ b/db/include/m_string.h
@@ -0,0 +1,351 @@
+/*
+ Copyright (c) 2000, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 _m_string_h
+#define _m_string_h
+
+#include "my_global.h" /* HAVE_* */
+
+#include
+
+#define bfill please_use_memset_rather_than_bfill
+#ifdef bzero
+#undef bzero
+#endif
+#define bzero please_use_memset_rather_than_bzero
+#define bmove please_use_memmove_rather_than_bmove
+#define strmov please_use_my_stpcpy_or_my_stpmov_rather_than_strmov
+#define strnmov please_use_my_stpncpy_or_my_stpnmov_rather_than_strnmov
+
+#include "mysql/service_my_snprintf.h"
+
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
+/*
+ my_str_malloc(), my_str_realloc() and my_str_free() are assigned to
+ implementations in strings/alloc.c, but can be overridden in
+ the calling program.
+ */
+extern void *(*my_str_malloc)(size_t);
+extern void *(*my_str_realloc)(void *, size_t);
+extern void (*my_str_free)(void *);
+
+/* Declared in int2str() */
+extern char _dig_vec_upper[];
+extern char _dig_vec_lower[];
+
+ /* Prototypes for string functions */
+
+extern void bchange(uchar *dst,size_t old_len,const uchar *src,
+ size_t new_len,size_t tot_len);
+extern void strappend(char *s,size_t len,pchar fill);
+extern char *strend(const char *s);
+extern char *strcend(const char *, pchar);
+extern char *strfill(char * s,size_t len,pchar fill);
+extern char *strmake(char *dst,const char *src,size_t length);
+
+extern char *my_stpmov(char *dst,const char *src);
+extern char *my_stpnmov(char *dst, const char *src, size_t n);
+extern char *strcont(const char *src, const char *set);
+extern char *strxmov(char *dst, const char *src, ...);
+extern char *strxnmov(char *dst, size_t len, const char *src, ...);
+
+/**
+ Copy a string from src to dst until (and including) terminating null byte.
+
+ @param dst Destination
+ @param src Source
+
+ @note src and dst cannot overlap.
+ Use my_stpmov() if src and dst overlaps.
+
+ @note Unsafe, consider using my_stpnpy() instead.
+
+ @return pointer to terminating null byte.
+*/
+static inline char *my_stpcpy(char *dst, const char *src)
+{
+#if defined(HAVE_BUILTIN_STPCPY)
+ return __builtin_stpcpy(dst, src);
+#elif defined(HAVE_STPCPY)
+ return stpcpy(dst, src);
+#else
+ /* Fallback to implementation supporting overlap. */
+ return my_stpmov(dst, src);
+#endif
+}
+
+/**
+ Copy fixed-size string from src to dst.
+
+ @param dst Destination
+ @param src Source
+ @param n Maximum number of characters to copy.
+
+ @note src and dst cannot overlap
+ Use my_stpnmov() if src and dst overlaps.
+
+ @return pointer to terminating null byte.
+*/
+static inline char *my_stpncpy(char *dst, const char *src, size_t n)
+{
+#if defined(HAVE_STPNCPY)
+ return stpncpy(dst, src, n);
+#else
+ /* Fallback to implementation supporting overlap. */
+ return my_stpnmov(dst, src, n);
+#endif
+}
+
+static inline longlong my_strtoll(const char *nptr, char **endptr, int base)
+{
+#if defined _WIN32
+ return _strtoi64(nptr, endptr, base);
+#else
+ return strtoll(nptr, endptr, base);
+#endif
+}
+
+static inline ulonglong my_strtoull(const char *nptr, char **endptr, int base)
+{
+#if defined _WIN32
+ return _strtoui64(nptr, endptr, base);
+#else
+ return strtoull(nptr, endptr, base);
+#endif
+}
+
+static inline char *my_strtok_r(char *str, const char *delim, char **saveptr)
+{
+#if defined _WIN32
+ return strtok_s(str, delim, saveptr);
+#else
+ return strtok_r(str, delim, saveptr);
+#endif
+}
+
+/* native_ rather than my_ since my_strcasecmp already exists */
+static inline int native_strcasecmp(const char *s1, const char *s2)
+{
+#if defined _WIN32
+ return _stricmp(s1, s2);
+#else
+ return strcasecmp(s1, s2);
+#endif
+}
+
+/* native_ rather than my_ for consistency with native_strcasecmp */
+static inline int native_strncasecmp(const char *s1, const char *s2, size_t n)
+{
+#if defined _WIN32
+ return _strnicmp(s1, s2, n);
+#else
+ return strncasecmp(s1, s2, n);
+#endif
+}
+
+/* Prototypes of normal stringfunctions (with may ours) */
+#ifndef HAVE_STRNLEN
+extern size_t strnlen(const char *s, size_t n);
+#endif
+
+extern int is_prefix(const char *, const char *);
+
+/* Conversion routines */
+typedef enum {
+ MY_GCVT_ARG_FLOAT,
+ MY_GCVT_ARG_DOUBLE
+} my_gcvt_arg_type;
+
+double my_strtod(const char *str, char **end, int *error);
+double my_atof(const char *nptr);
+size_t my_fcvt(double x, int precision, char *to, my_bool *error);
+size_t my_gcvt(double x, my_gcvt_arg_type type, int width, char *to,
+ my_bool *error);
+
+#define NOT_FIXED_DEC 31
+
+/*
+ The longest string my_fcvt can return is 311 + "precision" bytes.
+ Here we assume that we never cal my_fcvt() with precision >= NOT_FIXED_DEC
+ (+ 1 byte for the terminating '\0').
+*/
+#define FLOATING_POINT_BUFFER (311 + NOT_FIXED_DEC)
+
+/*
+ We want to use the 'e' format in some cases even if we have enough space
+ for the 'f' one just to mimic sprintf("%.15g") behavior for large integers,
+ and to improve it for numbers < 10^(-4).
+ That is, for |x| < 1 we require |x| >= 10^(-15), and for |x| > 1 we require
+ it to be integer and be <= 10^DBL_DIG for the 'f' format to be used.
+ We don't lose precision, but make cases like "1e200" or "0.00001" look nicer.
+*/
+#define MAX_DECPT_FOR_F_FORMAT DBL_DIG
+
+/*
+ The maximum possible field width for my_gcvt() conversion.
+ (DBL_DIG + 2) significant digits + sign + "." + ("e-NNN" or
+ MAX_DECPT_FOR_F_FORMAT zeros for cases when |x|<1 and the 'f' format is used).
+*/
+#define MY_GCVT_MAX_FIELD_WIDTH (DBL_DIG + 4 + MY_MAX(5, MAX_DECPT_FOR_F_FORMAT)) \
+
+extern char *llstr(longlong value,char *buff);
+extern char *ullstr(longlong value,char *buff);
+
+extern char *int2str(long val, char *dst, int radix, int upcase);
+extern char *int10_to_str(long val,char *dst,int radix);
+extern char *str2int(const char *src,int radix,long lower,long upper,
+ long *val);
+longlong my_strtoll10(const char *nptr, char **endptr, int *error);
+#if SIZEOF_LONG == SIZEOF_LONG_LONG
+#define ll2str(A,B,C,D) int2str((A),(B),(C),(D))
+#define longlong10_to_str(A,B,C) int10_to_str((A),(B),(C))
+#undef strtoll
+#define strtoll(A,B,C) strtol((A),(B),(C))
+#define strtoull(A,B,C) strtoul((A),(B),(C))
+#else
+extern char *ll2str(longlong val,char *dst,int radix, int upcase);
+extern char *longlong10_to_str(longlong val,char *dst,int radix);
+#endif
+#define longlong2str(A,B,C) ll2str((A),(B),(C),1)
+
+#if defined(__cplusplus)
+}
+#endif
+
+/*
+ LEX_STRING -- a pair of a C-string and its length.
+ (it's part of the plugin API as a MYSQL_LEX_STRING)
+ Ditto LEX_CSTRING/MYSQL_LEX_CSTRING.
+*/
+
+#include
+typedef struct st_mysql_lex_string LEX_STRING;
+typedef struct st_mysql_const_lex_string LEX_CSTRING;
+
+#define STRING_WITH_LEN(X) (X), ((sizeof(X) - 1))
+#define USTRING_WITH_LEN(X) ((uchar*) X), ((sizeof(X) - 1))
+#define C_STRING_WITH_LEN(X) ((char *) (X)), ((sizeof(X) - 1))
+
+
+/**
+ Skip trailing space.
+
+ On most systems reading memory in larger chunks (ideally equal to the size of
+ the chinks that the machine physically reads from memory) causes fewer memory
+ access loops and hence increased performance.
+ This is why the 'int' type is used : it's closest to that (according to how
+ it's defined in C).
+ So when we determine the amount of whitespace at the end of a string we do
+ the following :
+ 1. We divide the string into 3 zones :
+ a) from the start of the string (__start) to the first multiple
+ of sizeof(int) (__start_words)
+ b) from the end of the string (__end) to the last multiple of sizeof(int)
+ (__end_words)
+ c) a zone that is aligned to sizeof(int) and can be safely accessed
+ through an int *
+ 2. We start comparing backwards from (c) char-by-char. If all we find is
+ space then we continue
+ 3. If there are elements in zone (b) we compare them as unsigned ints to a
+ int mask (SPACE_INT) consisting of all spaces
+ 4. Finally we compare the remaining part (a) of the string char by char.
+ This covers for the last non-space unsigned int from 3. (if any)
+
+ This algorithm works well for relatively larger strings, but it will slow
+ the things down for smaller strings (because of the additional calculations
+ and checks compared to the naive method). Thus the barrier of length 20
+ is added.
+
+ @param ptr pointer to the input string
+ @param len the length of the string
+ @return the last non-space character
+*/
+#if defined(__sparc) || defined(__sparcv9)
+static inline const uchar *skip_trailing_space(const uchar *ptr,size_t len)
+{
+ /* SPACE_INT is a word that contains only spaces */
+#if SIZEOF_INT == 4
+ const unsigned SPACE_INT= 0x20202020U;
+#elif SIZEOF_INT == 8
+ const unsigned SPACE_INT= 0x2020202020202020ULL;
+#else
+#error define the appropriate constant for a word full of spaces
+#endif
+
+ const uchar *end= ptr + len;
+
+ if (len > 20)
+ {
+ const uchar *end_words= (const uchar *)(intptr)
+ (((ulonglong)(intptr)end) / SIZEOF_INT * SIZEOF_INT);
+ const uchar *start_words= (const uchar *)(intptr)
+ ((((ulonglong)(intptr)ptr) + SIZEOF_INT - 1) / SIZEOF_INT * SIZEOF_INT);
+
+ assert(end_words > ptr);
+ while (end > end_words && end[-1] == 0x20)
+ end--;
+ if (end[-1] == 0x20 && start_words < end_words)
+ while (end > start_words && ((unsigned *)end)[-1] == SPACE_INT)
+ end -= SIZEOF_INT;
+ }
+ while (end > ptr && end[-1] == 0x20)
+ end--;
+ return (end);
+}
+#else
+/*
+ Reads 8 bytes at a time, ignoring alignment.
+ We use uint8korr, which is fast (it simply reads a *ulonglong)
+ on all platforms, except sparc.
+*/
+static inline const uchar *skip_trailing_space(const uchar *ptr, size_t len)
+{
+ const uchar *end= ptr + len;
+ while (end - ptr >= 8)
+ {
+ if (uint8korr(end-8) != 0x2020202020202020ULL)
+ break;
+ end-= 8;
+ }
+ while (end > ptr && end[-1] == 0x20)
+ end--;
+ return (end);
+}
+#endif
+
+static inline void lex_string_set(LEX_STRING *lex_str, const char *c_str)
+{
+ lex_str->str= (char *) c_str;
+ lex_str->length= strlen(c_str);
+}
+
+static inline void lex_cstring_set(LEX_CSTRING *lex_str, const char *c_str)
+{
+ lex_str->str= c_str;
+ lex_str->length= strlen(c_str);
+}
+
+#endif
diff --git a/db/include/my_alloc.h b/db/include/my_alloc.h
new file mode 100644
index 0000000..f59491a
--- /dev/null
+++ b/db/include/my_alloc.h
@@ -0,0 +1,90 @@
+/* Copyright (c) 2000, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ Without limiting anything contained in the foregoing, this file,
+ which is part of C Driver for MySQL (Connector/C), is also subject to the
+ Universal FOSS Exception, version 1.0, a copy of which can be found at
+ http://oss.oracle.com/licenses/universal-foss-exception.
+
+ 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, version 2.0, 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 */
+
+/*
+ Data structures for mysys/my_alloc.c (root memory allocator)
+*/
+
+#ifndef _my_alloc_h
+#define _my_alloc_h
+
+#define ALLOC_MAX_BLOCK_TO_DROP 4096
+#define ALLOC_MAX_BLOCK_USAGE_BEFORE_DROP 10
+
+/* PSI_memory_key */
+#include "mysql/psi/psi_memory.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct st_used_mem
+{ /* struct for once_alloc (block) */
+ struct st_used_mem *next; /* Next block in use */
+ unsigned int left; /* memory left in block */
+ unsigned int size; /* size of block */
+} USED_MEM;
+
+
+typedef struct st_mem_root
+{
+ USED_MEM *free; /* blocks with free memory in it */
+ USED_MEM *used; /* blocks almost without free memory */
+ USED_MEM *pre_alloc; /* preallocated block */
+ /* if block have less memory it will be put in 'used' list */
+ size_t min_malloc;
+ size_t block_size; /* initial block size */
+ unsigned int block_num; /* allocated blocks counter */
+ /*
+ first free block in queue test counter (if it exceed
+ MAX_BLOCK_USAGE_BEFORE_DROP block will be dropped in 'used' list)
+ */
+ unsigned int first_block_usage;
+
+ /*
+ Maximum amount of memory this mem_root can hold. A value of 0
+ implies there is no limit.
+ */
+ size_t max_capacity;
+
+ /* Allocated size for this mem_root */
+
+ size_t allocated_size;
+
+ /* Enable this for error reporting if capacity is exceeded */
+ my_bool error_for_capacity_exceeded;
+
+ void (*error_handler)(void);
+
+ PSI_memory_key m_psi_key;
+} MEM_ROOT;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/db/include/my_byteorder.h b/db/include/my_byteorder.h
new file mode 100644
index 0000000..656d5bf
--- /dev/null
+++ b/db/include/my_byteorder.h
@@ -0,0 +1,225 @@
+#ifndef MY_BYTEORDER_INCLUDED
+#define MY_BYTEORDER_INCLUDED
+
+/* Copyright (c) 2001, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ Without limiting anything contained in the foregoing, this file,
+ which is part of C Driver for MySQL (Connector/C), is also subject to the
+ Universal FOSS Exception, version 1.0, a copy of which can be found at
+ http://oss.oracle.com/licenses/universal-foss-exception.
+
+ 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, version 2.0, 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 */
+
+
+/*
+ Functions for reading and storing in machine independent
+ format (low byte first). There are 'korr' (assume 'corrector') variants
+ for integer types, but 'get' (assume 'getter') for floating point types.
+*/
+#if defined(__i386__) || defined(_WIN32) || defined(__x86_64__)
+#include "byte_order_generic_x86.h"
+#else
+#include "byte_order_generic.h"
+#endif
+
+static inline int32 sint3korr(const uchar *A)
+{
+ return
+ ((int32) (((A[2]) & 128) ?
+ (((uint32) 255L << 24) |
+ (((uint32) A[2]) << 16) |
+ (((uint32) A[1]) << 8) |
+ ((uint32) A[0])) :
+ (((uint32) A[2]) << 16) |
+ (((uint32) A[1]) << 8) |
+ ((uint32) A[0])))
+ ;
+}
+
+static inline uint32 uint3korr(const uchar *A)
+{
+ return
+ (uint32) (((uint32) (A[0])) +
+ (((uint32) (A[1])) << 8) +
+ (((uint32) (A[2])) << 16))
+ ;
+}
+
+static inline ulonglong uint5korr(const uchar *A)
+{
+ return
+ ((ulonglong)(((uint32) (A[0])) +
+ (((uint32) (A[1])) << 8) +
+ (((uint32) (A[2])) << 16) +
+ (((uint32) (A[3])) << 24)) +
+ (((ulonglong) (A[4])) << 32))
+ ;
+}
+
+static inline ulonglong uint6korr(const uchar *A)
+{
+ return
+ ((ulonglong)(((uint32) (A[0])) +
+ (((uint32) (A[1])) << 8) +
+ (((uint32) (A[2])) << 16) +
+ (((uint32) (A[3])) << 24)) +
+ (((ulonglong) (A[4])) << 32) +
+ (((ulonglong) (A[5])) << 40))
+ ;
+}
+
+static inline void int3store(uchar *T, uint A)
+{
+ *(T)= (uchar) (A);
+ *(T+1)= (uchar) (A >> 8);
+ *(T+2)= (uchar) (A >> 16);
+}
+
+static inline void int5store(uchar *T, ulonglong A)
+{
+ *(T)= (uchar) (A);
+ *(T+1)= (uchar) (A >> 8);
+ *(T+2)= (uchar) (A >> 16);
+ *(T+3)= (uchar) (A >> 24);
+ *(T+4)= (uchar) (A >> 32);
+}
+
+static inline void int6store(uchar *T, ulonglong A)
+{
+ *(T)= (uchar) (A);
+ *(T+1)= (uchar) (A >> 8);
+ *(T+2)= (uchar) (A >> 16);
+ *(T+3)= (uchar) (A >> 24);
+ *(T+4)= (uchar) (A >> 32);
+ *(T+5)= (uchar) (A >> 40);
+}
+
+#ifdef __cplusplus
+
+static inline int16 sint2korr(const char *pT)
+{
+ return sint2korr(static_cast(static_cast(pT)));
+}
+
+static inline uint16 uint2korr(const char *pT)
+{
+ return uint2korr(static_cast(static_cast(pT)));
+}
+
+static inline uint32 uint3korr(const char *pT)
+{
+ return uint3korr(static_cast(static_cast(pT)));
+}
+
+static inline int32 sint3korr(const char *pT)
+{
+ return sint3korr(static_cast(static_cast(pT)));
+}
+
+static inline uint32 uint4korr(const char *pT)
+{
+ return uint4korr(static_cast(static_cast(pT)));
+}
+
+static inline int32 sint4korr(const char *pT)
+{
+ return sint4korr(static_cast(static_cast(pT)));
+}
+
+static inline ulonglong uint6korr(const char *pT)
+{
+ return uint6korr(static_cast(static_cast(pT)));
+}
+
+static inline ulonglong uint8korr(const char *pT)
+{
+ return uint8korr(static_cast(static_cast(pT)));
+}
+
+static inline longlong sint8korr(const char *pT)
+{
+ return sint8korr(static_cast(static_cast(pT)));
+}
+
+
+static inline void int2store(char *pT, uint16 A)
+{
+ int2store(static_cast(static_cast(pT)), A);
+}
+
+static inline void int3store(char *pT, uint A)
+{
+ int3store(static_cast(static_cast(pT)), A);
+}
+
+static inline void int4store(char *pT, uint32 A)
+{
+ int4store(static_cast(static_cast(pT)), A);
+}
+
+static inline void int5store(char *pT, ulonglong A)
+{
+ int5store(static_cast(static_cast(pT)), A);
+}
+
+static inline void int6store(char *pT, ulonglong A)
+{
+ int6store(static_cast(static_cast(pT)), A);
+}
+
+static inline void int8store(char *pT, ulonglong A)
+{
+ int8store(static_cast(static_cast(pT)), A);
+}
+
+#endif /* __cplusplus */
+
+/*
+ Functions for reading and storing in machine format from/to
+ short/long to/from some place in memory V should be a variable
+ and M a pointer to byte.
+*/
+#ifdef WORDS_BIGENDIAN
+#include "big_endian.h"
+#else
+#include "little_endian.h"
+#endif
+
+#ifdef __cplusplus
+
+static inline void float4store(char *V, float M)
+{
+ float4store(static_cast(static_cast(V)), M);
+}
+
+static inline void float8get(double *V, const char *M)
+{
+ float8get(V, static_cast(static_cast(M)));
+}
+
+static inline void float8store(char *V, double M)
+{
+ float8store(static_cast(static_cast(V)), M);
+}
+
+#endif /* __cplusplus */
+
+#endif /* MY_BYTEORDER_INCLUDED */
diff --git a/db/include/my_command.h b/db/include/my_command.h
index c23206f..bc05b70 100644
--- a/db/include/my_command.h
+++ b/db/include/my_command.h
@@ -28,76 +28,49 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
#ifndef _mysql_command_h
#define _mysql_command_h
-/**
- @file include/my_command.h
-*/
-
/**
@enum enum_server_command
-
- @brief A list of all MySQL protocol commands.
-
- These are the top level commands the server can receive
- while it listens for a new command in ::dispatch_command
-
- @par Warning
- Add new commands to the end of this list, otherwise old
- servers won't be able to handle them as 'unsupported'.
+ @brief You should add new commands to the end of this list, otherwise old
+ servers won't be able to handle them as 'unsupported'.
*/
-enum enum_server_command {
- /**
- Currently refused by the server. See ::dispatch_command.
- Also used internally to mark the start of a session.
- */
+enum enum_server_command
+{
COM_SLEEP,
- COM_QUIT, /**< See @ref page_protocol_com_quit */
- COM_INIT_DB, /**< See @ref page_protocol_com_init_db */
- COM_QUERY, /**< See @ref page_protocol_com_query */
- COM_FIELD_LIST, /**< Deprecated. See @ref page_protocol_com_field_list */
- COM_CREATE_DB, /**< Currently refused by the server. See ::dispatch_command */
- COM_DROP_DB, /**< Currently refused by the server. See ::dispatch_command */
- COM_REFRESH, /**< Deprecated. See @ref page_protocol_com_refresh */
- COM_DEPRECATED_1, /**< Deprecated, used to be COM_SHUTDOWN */
- COM_STATISTICS, /**< See @ref page_protocol_com_statistics */
- COM_PROCESS_INFO, /**< Deprecated. See @ref page_protocol_com_process_info */
- COM_CONNECT, /**< Currently refused by the server. */
- COM_PROCESS_KILL, /**< Deprecated. See @ref page_protocol_com_process_kill */
- COM_DEBUG, /**< See @ref page_protocol_com_debug */
- COM_PING, /**< See @ref page_protocol_com_ping */
- COM_TIME, /**< Currently refused by the server. */
- COM_DELAYED_INSERT, /**< Functionality removed. */
- COM_CHANGE_USER, /**< See @ref page_protocol_com_change_user */
- COM_BINLOG_DUMP, /**< See @ref page_protocol_com_binlog_dump */
+ COM_QUIT,
+ COM_INIT_DB,
+ COM_QUERY,
+ COM_FIELD_LIST,
+ COM_CREATE_DB,
+ COM_DROP_DB,
+ COM_REFRESH,
+ COM_SHUTDOWN,
+ COM_STATISTICS,
+ COM_PROCESS_INFO,
+ COM_CONNECT,
+ COM_PROCESS_KILL,
+ COM_DEBUG,
+ COM_PING,
+ COM_TIME,
+ COM_DELAYED_INSERT,
+ COM_CHANGE_USER,
+ COM_BINLOG_DUMP,
COM_TABLE_DUMP,
COM_CONNECT_OUT,
COM_REGISTER_SLAVE,
- COM_STMT_PREPARE, /**< See @ref page_protocol_com_stmt_prepare */
- COM_STMT_EXECUTE, /**< See @ref page_protocol_com_stmt_execute */
- /** See @ref page_protocol_com_stmt_send_long_data */
+ COM_STMT_PREPARE,
+ COM_STMT_EXECUTE,
COM_STMT_SEND_LONG_DATA,
- COM_STMT_CLOSE, /**< See @ref page_protocol_com_stmt_close */
- COM_STMT_RESET, /**< See @ref page_protocol_com_stmt_reset */
- COM_SET_OPTION, /**< See @ref page_protocol_com_set_option */
- COM_STMT_FETCH, /**< See @ref page_protocol_com_stmt_fetch */
- /**
- Currently refused by the server. See ::dispatch_command.
- Also used internally to mark the session as a "daemon",
- i.e. non-client THD. Currently the scheduler and the GTID
- code does use this state.
- These threads won't be killed by `KILL`
-
- @sa Event_scheduler::start, ::init_thd, ::kill_one_thread,
- ::Find_thd_with_id
- */
+ COM_STMT_CLOSE,
+ COM_STMT_RESET,
+ COM_SET_OPTION,
+ COM_STMT_FETCH,
COM_DAEMON,
COM_BINLOG_DUMP_GTID,
- COM_RESET_CONNECTION, /**< See @ref page_protocol_com_reset_connection */
- COM_CLONE,
- COM_SUBSCRIBE_GROUP_REPLICATION_STREAM,
+ COM_RESET_CONNECTION,
/* don't forget to update const char *command_name[] in sql_parse.cc */
/* Must be last */
- COM_END /**< Not a real command. Refused. */
+ COM_END
};
#endif /* _mysql_command_h */
diff --git a/db/include/my_compiler.h b/db/include/my_compiler.h
new file mode 100644
index 0000000..f874e8a
--- /dev/null
+++ b/db/include/my_compiler.h
@@ -0,0 +1,190 @@
+#ifndef MY_COMPILER_INCLUDED
+#define MY_COMPILER_INCLUDED
+
+/* Copyright (c) 2010, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ Without limiting anything contained in the foregoing, this file,
+ which is part of C Driver for MySQL (Connector/C), is also subject to the
+ Universal FOSS Exception, version 1.0, a copy of which can be found at
+ http://oss.oracle.com/licenses/universal-foss-exception.
+
+ 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, version 2.0, 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 */
+
+/**
+ Header for compiler-dependent features.
+
+ Intended to contain a set of reusable wrappers for preprocessor
+ macros, attributes, pragmas, and any other features that are
+ specific to a target compiler.
+*/
+
+#include /* size_t */
+
+#if defined __GNUC__
+/*
+ Convenience macro to test the minimum required GCC version.
+ These should be used with care as Clang also sets __GNUC__ and
+ __GNUC_MINOR__ (currently to 4.2). Prefer using feature specific
+ CMake checks in configure.cmake instead.
+*/
+# define MY_GNUC_PREREQ(maj, min) \
+ ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
+# define GCC_VERSION (__GNUC__ * 1000 + __GNUC_MINOR__)
+#else
+# define MY_GNUC_PREREQ(maj, min) (0)
+#endif
+
+/*
+ The macros below are borrowed from include/linux/compiler.h in the
+ Linux kernel. Use them to indicate the likelyhood of the truthfulness
+ of a condition. This serves two purposes - newer versions of gcc will be
+ able to optimize for branch predication, which could yield siginficant
+ performance gains in frequently executed sections of the code, and the
+ other reason to use them is for documentation
+*/
+#ifdef HAVE_BUILTIN_EXPECT
+
+// likely/unlikely are likely to clash with other symbols, do not #define
+#if defined(__cplusplus)
+inline bool likely(bool expr)
+{
+ return __builtin_expect(expr, true);
+}
+inline bool unlikely(bool expr)
+{
+ return __builtin_expect(expr, false);
+}
+#else
+# define likely(x) __builtin_expect((x),1)
+# define unlikely(x) __builtin_expect((x),0)
+#endif
+
+#else /* HAVE_BUILTIN_EXPECT */
+
+#if defined(__cplusplus)
+inline bool likely(bool expr)
+{
+ return expr;
+}
+inline bool unlikely(bool expr)
+{
+ return expr;
+}
+#else
+# define likely(x) (x)
+# define unlikely(x) (x)
+#endif
+
+#endif /* HAVE_BUILTIN_EXPECT */
+
+/* Comunicate to the compiler the unreachability of the code. */
+#ifdef HAVE_BUILTIN_UNREACHABLE
+# define MY_ASSERT_UNREACHABLE() __builtin_unreachable()
+#else
+# define MY_ASSERT_UNREACHABLE() do { assert(0); } while (0)
+#endif
+
+#if defined __GNUC__ || defined __SUNPRO_C || defined __SUNPRO_CC
+/* Specifies the minimum alignment of a type. */
+# define MY_ALIGNOF(type) __alignof__(type)
+/* Determine the alignment requirement of a type. */
+# define MY_ALIGNED(n) __attribute__((__aligned__((n))))
+/* Microsoft Visual C++ */
+#elif defined _MSC_VER
+# define MY_ALIGNOF(type) __alignof(type)
+# define MY_ALIGNED(n) __declspec(align(n))
+#else /* Make sure they are defined for other compilers. */
+# define MY_ALIGNOF(type)
+# define MY_ALIGNED(size)
+#endif
+
+/* Visual Studio requires '__inline' for C code */
+#if !defined(__cplusplus) && defined(_MSC_VER)
+# define inline __inline
+#endif
+
+/* Provide __func__ macro definition for Visual Studio. */
+#if defined(_MSC_VER)
+# define __func__ __FUNCTION__
+#endif
+
+/**
+ C++ Type Traits
+*/
+#ifdef __cplusplus
+
+/**
+ Opaque storage with a particular alignment.
+ Partial specialization used due to MSVC++.
+*/
+template struct my_alignment_imp;
+template<> struct MY_ALIGNED(1) my_alignment_imp<1> {};
+template<> struct MY_ALIGNED(2) my_alignment_imp<2> {};
+template<> struct MY_ALIGNED(4) my_alignment_imp<4> {};
+template<> struct MY_ALIGNED(8) my_alignment_imp<8> {};
+template<> struct MY_ALIGNED(16) my_alignment_imp<16> {};
+
+/**
+ A POD type with a given size and alignment.
+
+ @remark If the compiler does not support a alignment attribute
+ (MY_ALIGN macro), the default alignment of a double is
+ used instead.
+
+ @tparam size The minimum size.
+ @tparam alignment The desired alignment: 1, 2, 4, 8 or 16.
+*/
+template
+struct my_aligned_storage
+{
+ union
+ {
+ char data[size];
+ my_alignment_imp align;
+ };
+};
+
+#endif /* __cplusplus */
+
+/*
+ Disable MY_ATTRIBUTE for Sun Studio and Visual Studio.
+ Note that Sun Studio supports some __attribute__ variants,
+ but not format or unused which we use quite a lot.
+*/
+#ifndef MY_ATTRIBUTE
+#if defined(__GNUC__)
+# define MY_ATTRIBUTE(A) __attribute__(A)
+#else
+# define MY_ATTRIBUTE(A)
+#endif
+#endif
+
+#ifndef __has_attribute
+# define __has_attribute(x) 0
+#endif
+
+#if __has_attribute(no_sanitize_undefined)
+# define SUPPRESS_UBSAN __attribute__((no_sanitize_undefined))
+#else
+# define SUPPRESS_UBSAN
+#endif
+
+#endif /* MY_COMPILER_INCLUDED */
diff --git a/db/include/my_compress.h b/db/include/my_compress.h
deleted file mode 100644
index 4bac7f9..0000000
--- a/db/include/my_compress.h
+++ /dev/null
@@ -1,114 +0,0 @@
-/* Copyright (c) 2019, 2022, Oracle and/or its affiliates.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License, version 2.0,
- as published by the Free Software Foundation.
-
- This program is also distributed with certain software (including
- but not limited to OpenSSL) that is licensed under separate terms,
- as designated in a particular file or component or in included license
- documentation. The authors of MySQL hereby grant you an additional
- permission to link the program and your derivative works with the
- separately licensed software that they have included with MySQL.
-
- 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, version 2.0, 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 MY_COMPRESS_INCLUDED
-#define MY_COMPRESS_INCLUDED
-
-/* List of valid values for compression_algorithm */
-enum enum_compression_algorithm {
- MYSQL_UNCOMPRESSED = 1,
- MYSQL_ZLIB,
- MYSQL_ZSTD,
- MYSQL_INVALID
-};
-
-/**
- Compress context information. relating to zlib compression.
-*/
-
-typedef struct mysql_zlib_compress_context {
- /**
- Compression level to use in zlib compression.
- */
- unsigned int compression_level;
-} mysql_zlib_compress_context;
-
-typedef struct ZSTD_CCtx_s ZSTD_CCtx;
-typedef struct ZSTD_DCtx_s ZSTD_DCtx;
-
-/**
- Compress context information relating to zstd compression.
-*/
-
-typedef struct mysql_zstd_compress_context {
- /**
- Pointer to compressor context.
- */
- ZSTD_CCtx *cctx;
- /**
- Pointer to decompressor context.
- */
- ZSTD_DCtx *dctx;
- /**
- Compression level to use in zstd compression.
- */
- unsigned int compression_level;
-} mysql_zstd_compress_context;
-
-/**
- Compression context information.
- It encapsulate the context information based on compression method and
- presents a generic struct.
-*/
-
-typedef struct mysql_compress_context {
- enum enum_compression_algorithm algorithm; ///< Compression algorithm name.
- union {
- mysql_zlib_compress_context zlib_ctx; ///< Context information of zlib.
- mysql_zstd_compress_context zstd_ctx; ///< Context information of zstd.
- } u;
-} mysql_compress_context;
-
-/**
- Get default compression level corresponding to a given compression method.
-
- @param algorithm Compression Method. Possible values are zlib or zstd.
-
- @return an unsigned int representing default compression level.
- 6 is the default compression level for zlib and 3 is the
- default compression level for zstd.
-*/
-
-unsigned int mysql_default_compression_level(
- enum enum_compression_algorithm algorithm);
-
-/**
- Initialize a compress context object to be associated with a NET object.
-
- @param cmp_ctx Pointer to compression context.
- @param algorithm Compression algorithm.
- @param compression_level Compression level corresponding to the compression
- algorithm.
-*/
-
-void mysql_compress_context_init(mysql_compress_context *cmp_ctx,
- enum enum_compression_algorithm algorithm,
- unsigned int compression_level);
-/**
- Deinitialize the compression context allocated.
-
- @param mysql_compress_ctx Pointer to Compression context.
-*/
-
-void mysql_compress_context_deinit(mysql_compress_context *mysql_compress_ctx);
-
-#endif // MY_COMPRESS_INCLUDED
diff --git a/db/include/my_config.h b/db/include/my_config.h
new file mode 100644
index 0000000..cb9650d
--- /dev/null
+++ b/db/include/my_config.h
@@ -0,0 +1,469 @@
+/* Copyright (c) 2009, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 MY_CONFIG_H
+#define MY_CONFIG_H
+
+/*
+ * From configure.cmake, in order of appearance
+ */
+/* #undef HAVE_LLVM_LIBCPP */
+#define _LARGEFILE_SOURCE 1
+
+/* Libraries */
+/* #undef HAVE_LIBM */
+/* #undef HAVE_LIBNSL */
+/* #undef HAVE_LIBCRYPT */
+/* #undef HAVE_LIBSOCKET */
+/* #undef HAVE_LIBDL */
+/* #undef HAVE_LIBRT */
+/* #undef HAVE_LIBWRAP */
+/* #undef HAVE_LIBWRAP_PROTOTYPES */
+
+/* Header files */
+/* #undef HAVE_ALLOCA_H */
+/* #undef HAVE_ARPA_INET_H */
+/* #undef HAVE_CRYPT_H */
+/* #undef HAVE_DLFCN_H */
+/* #undef HAVE_EXECINFO_H */
+/* #undef HAVE_FPU_CONTROL_H */
+/* #undef HAVE_GRP_H */
+/* #undef HAVE_IEEEFP_H */
+/* #undef HAVE_LANGINFO_H */
+#define HAVE_MALLOC_H 1
+/* #undef HAVE_NETINET_IN_H */
+/* #undef HAVE_POLL_H */
+/* #undef HAVE_PWD_H */
+/* #undef HAVE_STRINGS_H */
+/* #undef HAVE_SYS_CDEFS_H */
+/* #undef HAVE_SYS_IOCTL_H */
+/* #undef HAVE_SYS_MMAN_H */
+/* #undef HAVE_SYS_RESOURCE_H */
+/* #undef HAVE_SYS_SELECT_H */
+/* #undef HAVE_SYS_SOCKET_H */
+/* #undef HAVE_TERM_H */
+/* #undef HAVE_TERMIOS_H */
+/* #undef HAVE_TERMIO_H */
+/* #undef HAVE_UNISTD_H */
+/* #undef HAVE_SYS_WAIT_H */
+/* #undef HAVE_SYS_PARAM_H */
+/* #undef HAVE_FNMATCH_H */
+/* #undef HAVE_SYS_UN_H */
+/* #undef HAVE_SASL_SASL_H */
+
+/* Libevent */
+/* #undef HAVE_DEVPOLL */
+/* #undef HAVE_SYS_DEVPOLL_H */
+/* #undef HAVE_SYS_EPOLL_H */
+/* #undef HAVE_TAILQFOREACH */
+
+/* Functions */
+#define HAVE_ALIGNED_MALLOC 1
+/* #undef HAVE_BACKTRACE */
+/* #undef HAVE_PRINTSTACK */
+/* #undef HAVE_INDEX */
+/* #undef HAVE_CLOCK_GETTIME */
+/* #undef HAVE_CUSERID */
+/* #undef HAVE_DIRECTIO */
+/* #undef HAVE_FTRUNCATE */
+#define HAVE_COMPRESS 1
+/* #undef HAVE_CRYPT */
+/* #undef HAVE_DLOPEN */
+/* #undef HAVE_FCHMOD */
+/* #undef HAVE_FCNTL */
+/* #undef HAVE_FDATASYNC */
+/* #undef HAVE_DECL_FDATASYNC */
+/* #undef HAVE_FEDISABLEEXCEPT */
+/* #undef HAVE_FSEEKO */
+/* #undef HAVE_FSYNC */
+/* #undef HAVE_GETHOSTBYADDR_R */
+/* #undef HAVE_GETHRTIME */
+/* #undef HAVE_GETNAMEINFO */
+/* #undef HAVE_GETPASS */
+/* #undef HAVE_GETPASSPHRASE */
+/* #undef HAVE_GETPWNAM */
+/* #undef HAVE_GETPWUID */
+/* #undef HAVE_GETRLIMIT */
+/* #undef HAVE_GETRUSAGE */
+/* #undef HAVE_INITGROUPS */
+/* #undef HAVE_ISSETUGID */
+/* #undef HAVE_GETUID */
+/* #undef HAVE_GETEUID */
+/* #undef HAVE_GETGID */
+/* #undef HAVE_GETEGID */
+/* #undef HAVE_LSTAT */
+/* #undef HAVE_MADVISE */
+/* #undef HAVE_MALLOC_INFO */
+/* #undef HAVE_MEMRCHR */
+/* #undef HAVE_MLOCK */
+/* #undef HAVE_MLOCKALL */
+/* #undef HAVE_MMAP64 */
+/* #undef HAVE_POLL */
+/* #undef HAVE_POSIX_FALLOCATE */
+/* #undef HAVE_POSIX_MEMALIGN */
+/* #undef HAVE_PREAD */
+/* #undef HAVE_PTHREAD_CONDATTR_SETCLOCK */
+/* #undef HAVE_PTHREAD_SIGMASK */
+/* #undef HAVE_READLINK */
+/* #undef HAVE_REALPATH */
+/* #undef HAVE_SETFD */
+/* #undef HAVE_SIGACTION */
+/* #undef HAVE_SLEEP */
+/* #undef HAVE_STPCPY */
+/* #undef HAVE_STPNCPY */
+/* #undef HAVE_STRLCPY */
+#define HAVE_STRNLEN 1
+/* #undef HAVE_STRLCAT */
+/* #undef HAVE_STRSIGNAL */
+/* #undef HAVE_FGETLN */
+/* #undef HAVE_STRSEP */
+#define HAVE_TELL 1
+/* #undef HAVE_VASPRINTF */
+/* #undef HAVE_MEMALIGN */
+/* #undef HAVE_NL_LANGINFO */
+/* #undef HAVE_HTONLL */
+/* #undef DNS_USE_CPU_CLOCK_FOR_ID */
+/* #undef HAVE_EPOLL */
+/* #undef HAVE_EVENT_PORTS */
+/* #undef HAVE_INET_NTOP */
+/* #undef HAVE_WORKING_KQUEUE */
+/* #undef HAVE_TIMERADD */
+/* #undef HAVE_TIMERCLEAR */
+/* #undef HAVE_TIMERCMP */
+/* #undef HAVE_TIMERISSET */
+
+/* WL2373 */
+/* #undef HAVE_SYS_TIME_H */
+/* #undef HAVE_SYS_TIMES_H */
+/* #undef HAVE_TIMES */
+/* #undef HAVE_GETTIMEOFDAY */
+
+/* Symbols */
+/* #undef HAVE_LRAND48 */
+/* #undef GWINSZ_IN_SYS_IOCTL */
+/* #undef FIONREAD_IN_SYS_IOCTL */
+/* #undef FIONREAD_IN_SYS_FILIO */
+/* #undef HAVE_SIGEV_THREAD_ID */
+/* #undef HAVE_SIGEV_PORT */
+#define HAVE_LOG2 1
+
+#define HAVE_ISINF 1
+
+/* #undef HAVE_KQUEUE_TIMERS */
+/* #undef HAVE_POSIX_TIMERS */
+
+/* Endianess */
+/* #undef WORDS_BIGENDIAN */
+
+/* Type sizes */
+#define SIZEOF_VOIDP 4
+#define SIZEOF_CHARP 4
+#define SIZEOF_LONG 4
+#define SIZEOF_SHORT 2
+#define SIZEOF_INT 4
+#define SIZEOF_LONG_LONG 8
+#define SIZEOF_OFF_T 4
+#define SIZEOF_TIME_T 8
+/* #undef HAVE_UINT */
+/* #undef HAVE_ULONG */
+/* #undef HAVE_U_INT32_T */
+#define HAVE_STRUCT_TIMESPEC
+
+/* Support for tagging symbols with __attribute__((visibility("hidden"))) */
+/* #undef HAVE_VISIBILITY_HIDDEN */
+
+/* Code tests*/
+#define STACK_DIRECTION -1
+/* #undef TIME_WITH_SYS_TIME */
+#define NO_FCNTL_NONBLOCK 1
+/* #undef HAVE_PAUSE_INSTRUCTION */
+/* #undef HAVE_FAKE_PAUSE_INSTRUCTION */
+/* #undef HAVE_HMT_PRIORITY_INSTRUCTION */
+/* #undef HAVE_ABI_CXA_DEMANGLE */
+/* #undef HAVE_BUILTIN_UNREACHABLE */
+/* #undef HAVE_BUILTIN_EXPECT */
+/* #undef HAVE_BUILTIN_STPCPY */
+/* #undef HAVE_GCC_ATOMIC_BUILTINS */
+/* #undef HAVE_GCC_SYNC_BUILTINS */
+/* #undef HAVE_VALGRIND */
+/* #undef HAVE_PTHREAD_THREADID_NP */
+
+/* IPV6 */
+/* #undef HAVE_NETINET_IN6_H */
+#define HAVE_STRUCT_SOCKADDR_IN6 1
+#define HAVE_STRUCT_IN6_ADDR 1
+#define HAVE_IPV6 1
+
+/* #undef ss_family */
+/* #undef HAVE_SOCKADDR_IN_SIN_LEN */
+/* #undef HAVE_SOCKADDR_IN6_SIN6_LEN */
+
+/*
+ * Platform specific CMake files
+ */
+#define MACHINE_TYPE "AMD64"
+/* #undef HAVE_LINUX_LARGE_PAGES */
+/* #undef HAVE_SOLARIS_LARGE_PAGES */
+/* #undef HAVE_SOLARIS_ATOMIC */
+/* #undef HAVE_SOLARIS_STYLE_GETHOST */
+#define SYSTEM_TYPE "Win32"
+/* Windows stuff, mostly functions, that have Posix analogs but named differently */
+/* #undef IPPROTO_IPV6 */
+/* #undef IPV6_V6ONLY */
+/* This should mean case insensitive file system */
+#define FN_NO_CASE_SENSE 1
+/* #undef APPLE_ARM */
+
+/*
+ * From main CMakeLists.txt
+ */
+#define MAX_INDEXES 64U
+/* #undef WITH_INNODB_MEMCACHED */
+/* #undef ENABLE_MEMCACHED_SASL */
+/* #undef ENABLE_MEMCACHED_SASL_PWDB */
+#define ENABLED_PROFILING 1
+/* #undef HAVE_ASAN */
+#define ENABLED_LOCAL_INFILE 1
+#define OPTIMIZER_TRACE 1
+#define DEFAULT_MYSQL_HOME "C:/Program Files/MySQL/MySQL Server 5.7"
+#define SHAREDIR "share"
+#define DEFAULT_BASEDIR "C:/Program Files/MySQL/MySQL Server 5.7"
+#define MYSQL_DATADIR "C:/Program Files/MySQL/MySQL Server 5.7/data"
+#define MYSQL_KEYRINGDIR "C:/Program Files/MySQL/MySQL Server 5.7/keyring"
+#define DEFAULT_CHARSET_HOME "C:/Program Files/MySQL/MySQL Server 5.7"
+#define PLUGINDIR "C:/Program Files/MySQL/MySQL Server 5.7/lib/plugin"
+/* #undef DEFAULT_SYSCONFDIR */
+#define DEFAULT_TMPDIR ""
+#define INSTALL_SBINDIR "/bin"
+#define INSTALL_BINDIR "/bin"
+#define INSTALL_MYSQLSHAREDIR "/share"
+#define INSTALL_SHAREDIR "/share"
+#define INSTALL_PLUGINDIR "/lib/plugin"
+#define INSTALL_INCLUDEDIR "/include"
+#define INSTALL_SCRIPTDIR "/scripts"
+#define INSTALL_MYSQLDATADIR "/data"
+#define INSTALL_MYSQLKEYRINGDIR "/keyring"
+/* #undef INSTALL_PLUGINTESTDIR */
+#define INSTALL_INFODIR "/docs"
+#define INSTALL_MYSQLTESTDIR "/mysql-test"
+#define INSTALL_DOCREADMEDIR "/."
+#define INSTALL_DOCDIR "/docs"
+#define INSTALL_MANDIR "/man"
+#define INSTALL_SUPPORTFILESDIR "/support-files"
+#define INSTALL_LIBDIR "/lib"
+
+/*
+ * Readline
+ */
+/* #undef HAVE_MBSTATE_T */
+/* #undef HAVE_LANGINFO_CODESET */
+/* #undef HAVE_WCSDUP */
+/* #undef HAVE_WCHAR_T */
+/* #undef HAVE_WINT_T */
+/* #undef HAVE_CURSES_H */
+/* #undef HAVE_NCURSES_H */
+/* #undef USE_LIBEDIT_INTERFACE */
+/* #undef HAVE_HIST_ENTRY */
+/* #undef USE_NEW_EDITLINE_INTERFACE */
+/* #undef EDITLINE_HAVE_COMPLETION_CHAR */
+/* #undef EDITLINE_HAVE_COMPLETION_INT */
+
+/*
+ * Libedit
+ */
+/* #undef HAVE_GETLINE */
+/* #undef HAVE___SECURE_GETENV */
+/* #undef HAVE_SECURE_GETENV */
+/* #undef HAVE_VIS */
+/* #undef HAVE_UNVIS */
+/* #undef HAVE_GETPW_R_DRAFT */
+/* #undef HAVE_GETPW_R_POSIX */
+
+/*
+ * DTrace
+ */
+/* #undef HAVE_DTRACE */
+
+/*
+ * Character sets
+ */
+#define MYSQL_DEFAULT_CHARSET_NAME "latin1"
+#define MYSQL_DEFAULT_COLLATION_NAME "latin1_swedish_ci"
+#define HAVE_CHARSET_armscii8 1
+#define HAVE_CHARSET_ascii 1
+#define HAVE_CHARSET_big5 1
+#define HAVE_CHARSET_cp1250 1
+#define HAVE_CHARSET_cp1251 1
+#define HAVE_CHARSET_cp1256 1
+#define HAVE_CHARSET_cp1257 1
+#define HAVE_CHARSET_cp850 1
+#define HAVE_CHARSET_cp852 1
+#define HAVE_CHARSET_cp866 1
+#define HAVE_CHARSET_cp932 1
+#define HAVE_CHARSET_dec8 1
+#define HAVE_CHARSET_eucjpms 1
+#define HAVE_CHARSET_euckr 1
+#define HAVE_CHARSET_gb2312 1
+#define HAVE_CHARSET_gbk 1
+#define HAVE_CHARSET_gb18030 1
+#define HAVE_CHARSET_geostd8 1
+#define HAVE_CHARSET_greek 1
+#define HAVE_CHARSET_hebrew 1
+#define HAVE_CHARSET_hp8 1
+#define HAVE_CHARSET_keybcs2 1
+#define HAVE_CHARSET_koi8r 1
+#define HAVE_CHARSET_koi8u 1
+#define HAVE_CHARSET_latin1 1
+#define HAVE_CHARSET_latin2 1
+#define HAVE_CHARSET_latin5 1
+#define HAVE_CHARSET_latin7 1
+#define HAVE_CHARSET_macce 1
+#define HAVE_CHARSET_macroman 1
+#define HAVE_CHARSET_sjis 1
+#define HAVE_CHARSET_swe7 1
+#define HAVE_CHARSET_tis620 1
+#define HAVE_CHARSET_ucs2 1
+#define HAVE_CHARSET_ujis 1
+#define HAVE_CHARSET_utf8mb4 1
+/* #undef HAVE_CHARSET_utf8mb3 */
+#define HAVE_CHARSET_utf8 1
+#define HAVE_CHARSET_utf16 1
+#define HAVE_CHARSET_utf32 1
+#define HAVE_UCA_COLLATIONS 1
+
+/*
+ * Feature set
+ */
+#define WITH_PARTITION_STORAGE_ENGINE 1
+
+/*
+ * Performance schema
+ */
+#define WITH_PERFSCHEMA_STORAGE_ENGINE 1
+/* #undef DISABLE_PSI_THREAD */
+/* #undef DISABLE_PSI_MUTEX */
+/* #undef DISABLE_PSI_RWLOCK */
+/* #undef DISABLE_PSI_COND */
+/* #undef DISABLE_PSI_FILE */
+/* #undef DISABLE_PSI_TABLE */
+/* #undef DISABLE_PSI_SOCKET */
+/* #undef DISABLE_PSI_STAGE */
+/* #undef DISABLE_PSI_STATEMENT */
+/* #undef DISABLE_PSI_SP */
+/* #undef DISABLE_PSI_PS */
+/* #undef DISABLE_PSI_IDLE */
+/* #undef DISABLE_PSI_STATEMENT_DIGEST */
+/* #undef DISABLE_PSI_METADATA */
+/* #undef DISABLE_PSI_MEMORY */
+/* #undef DISABLE_PSI_TRANSACTION */
+
+/*
+ * syscall
+*/
+/* #undef HAVE_SYS_THREAD_SELFID */
+/* #undef HAVE_SYS_GETTID */
+/* #undef HAVE_PTHREAD_GETTHREADID_NP */
+/* #undef HAVE_PTHREAD_SETNAME_NP */
+/* #undef HAVE_INTEGER_PTHREAD_SELF */
+
+/* Platform-specific C++ compiler behaviors we rely upon */
+
+/*
+ This macro defines whether the compiler in use needs a 'typename' keyword
+ to access the types defined inside a class template, such types are called
+ dependent types. Some compilers require it, some others forbid it, and some
+ others may work with or without it. For example, GCC requires the 'typename'
+ keyword whenever needing to access a type inside a template, but msvc
+ forbids it.
+ */
+#define HAVE_IMPLICIT_DEPENDENT_NAME_TYPING 1
+
+
+/*
+ * MySQL version
+ */
+#define DOT_FRM_VERSION 6
+#define MYSQL_VERSION_MAJOR 5
+#define MYSQL_VERSION_MINOR 7
+#define MYSQL_VERSION_PATCH 39
+#define MYSQL_VERSION_EXTRA ""
+#define PACKAGE "mysql"
+#define PACKAGE_BUGREPORT ""
+#define PACKAGE_NAME "MySQL Server"
+#define PACKAGE_STRING "MySQL Server 5.7.39"
+#define PACKAGE_TARNAME "mysql"
+#define PACKAGE_VERSION "5.7.39"
+#define VERSION "5.7.39"
+#define PROTOCOL_VERSION 10
+
+/*
+ * CPU info
+ */
+#define CPU_LEVEL1_DCACHE_LINESIZE 64
+
+/*
+ * NDB
+ */
+/* #undef WITH_NDBCLUSTER_STORAGE_ENGINE */
+/* #undef HAVE_PTHREAD_SETSCHEDPARAM */
+
+/*
+ * Other
+ */
+/* #undef EXTRA_DEBUG */
+/* #undef HAVE_CHOWN */
+
+/*
+ * Hardcoded values needed by libevent/NDB/memcached
+ */
+#define HAVE_FCNTL_H 1
+#define HAVE_GETADDRINFO 1
+#define HAVE_INTTYPES_H 1
+/* libevent's select.c is not Windows compatible */
+#ifndef _WIN32
+#define HAVE_SELECT 1
+#endif
+#define HAVE_SIGNAL_H 1
+#define HAVE_STDARG_H 1
+#define HAVE_STDINT_H 1
+#define HAVE_STDLIB_H 1
+#define HAVE_STRDUP 1
+#define HAVE_STRTOK_R 1
+#define HAVE_STRTOLL 1
+#define HAVE_SYS_STAT_H 1
+#define HAVE_SYS_TYPES_H 1
+#define SIZEOF_CHAR 1
+
+/*
+ * Needed by libevent
+ */
+/* #undef HAVE_SOCKLEN_T */
+
+/* For --secure-file-priv */
+#define DEFAULT_SECURE_FILE_PRIV_DIR "NULL"
+#define DEFAULT_SECURE_FILE_PRIV_EMBEDDED_DIR "NULL"
+/* #undef HAVE_LIBNUMA */
+
+/* For default value of --early_plugin_load */
+/* #undef DEFAULT_EARLY_PLUGIN_LOAD */
+
+#endif
diff --git a/db/include/my_dbug.h b/db/include/my_dbug.h
new file mode 100644
index 0000000..3b86d64
--- /dev/null
+++ b/db/include/my_dbug.h
@@ -0,0 +1,255 @@
+/* Copyright (c) 2000, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ Without limiting anything contained in the foregoing, this file,
+ which is part of C Driver for MySQL (Connector/C), is also subject to the
+ Universal FOSS Exception, version 1.0, a copy of which can be found at
+ http://oss.oracle.com/licenses/universal-foss-exception.
+
+ 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, version 2.0, 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 MY_DBUG_INCLUDED
+#define MY_DBUG_INCLUDED
+
+#include "my_global.h" /* MYSQL_PLUGIN_IMPORT */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if !defined(NDEBUG)
+
+struct _db_stack_frame_ {
+ const char *func; /* function name of the previous stack frame */
+ const char *file; /* filename of the function of previous frame */
+ uint level; /* this nesting level, highest bit enables tracing */
+ struct _db_stack_frame_ *prev; /* pointer to the previous frame */
+};
+
+struct _db_code_state_;
+extern MYSQL_PLUGIN_IMPORT my_bool _dbug_on_;
+extern my_bool _db_keyword_(struct _db_code_state_ *, const char *, int);
+extern int _db_explain_(struct _db_code_state_ *cs, char *buf, size_t len);
+extern int _db_explain_init_(char *buf, size_t len);
+extern int _db_is_pushed_(void);
+extern void _db_setjmp_(void);
+extern void _db_longjmp_(void);
+extern void _db_process_(const char *name);
+extern void _db_push_(const char *control);
+extern void _db_pop_(void);
+extern void _db_set_(const char *control);
+extern void _db_set_init_(const char *control);
+extern void _db_enter_(const char *_func_, const char *_file_, uint _line_,
+ struct _db_stack_frame_ *_stack_frame_);
+extern void _db_return_(uint _line_, struct _db_stack_frame_ *_stack_frame_);
+extern void _db_pargs_(uint _line_,const char *keyword);
+extern int _db_enabled_();
+extern void _db_doprnt_(const char *format,...)
+ MY_ATTRIBUTE((format(printf, 1, 2)));
+extern void _db_doputs_(const char *log);
+extern void _db_dump_(uint _line_,const char *keyword,
+ const unsigned char *memory, size_t length);
+extern void _db_end_(void);
+extern void _db_lock_file_(void);
+extern void _db_unlock_file_(void);
+extern FILE *_db_fp_(void);
+extern void _db_flush_();
+extern const char* _db_get_func_(void);
+
+#define DBUG_ENTER(a) struct _db_stack_frame_ _db_stack_frame_; \
+ _db_enter_ (a,__FILE__,__LINE__,&_db_stack_frame_)
+#define DBUG_LEAVE _db_return_ (__LINE__, &_db_stack_frame_)
+#define DBUG_RETURN(a1) do {DBUG_LEAVE; return(a1);} while(0)
+#define DBUG_VOID_RETURN do {DBUG_LEAVE; return;} while(0)
+#define DBUG_EXECUTE(keyword,a1) \
+ do {if (_db_keyword_(0, (keyword), 0)) { a1 }} while(0)
+#define DBUG_EXECUTE_IF(keyword,a1) \
+ do {if (_db_keyword_(0, (keyword), 1)) { a1 }} while(0)
+#define DBUG_EVALUATE(keyword,a1,a2) \
+ (_db_keyword_(0,(keyword), 0) ? (a1) : (a2))
+#define DBUG_EVALUATE_IF(keyword,a1,a2) \
+ (_db_keyword_(0,(keyword), 1) ? (a1) : (a2))
+#define DBUG_PRINT(keyword,arglist) \
+ do \
+ { \
+ if (_dbug_on_) \
+ { \
+ _db_pargs_(__LINE__,keyword); \
+ if (_db_enabled_()) \
+ { \
+ _db_doprnt_ arglist; \
+ } \
+ } \
+ } while(0)
+
+/*
+ An alternate to DBUG_PRINT() macro, which takes a single string
+ as the second argument.
+*/
+#define DBUG_PUTS(keyword,arg) \
+ do \
+ { \
+ if (_dbug_on_) \
+ { \
+ _db_pargs_(__LINE__,keyword); \
+ if (_db_enabled_()) \
+ { \
+ _db_doputs_(arg); \
+ } \
+ } \
+ } while(0)
+
+#define DBUG_PUSH(a1) _db_push_ (a1)
+#define DBUG_POP() _db_pop_ ()
+#define DBUG_SET(a1) _db_set_ (a1)
+#define DBUG_SET_INITIAL(a1) _db_set_init_ (a1)
+#define DBUG_PROCESS(a1) _db_process_(a1)
+#define DBUG_FILE _db_fp_()
+#define DBUG_SETJMP(a1) (_db_setjmp_ (), setjmp (a1))
+#define DBUG_LONGJMP(a1,a2) (_db_longjmp_ (), longjmp (a1, a2))
+#define DBUG_DUMP(keyword,a1,a2) _db_dump_(__LINE__,keyword,a1,a2)
+#define DBUG_END() _db_end_ ()
+#define DBUG_LOCK_FILE _db_lock_file_()
+#define DBUG_UNLOCK_FILE _db_unlock_file_()
+#define DBUG_EXPLAIN(buf,len) _db_explain_(0, (buf),(len))
+#define DBUG_EXPLAIN_INITIAL(buf,len) _db_explain_init_((buf),(len))
+#define DEBUGGER_OFF do { _dbug_on_= 0; } while(0)
+#define DEBUGGER_ON do { _dbug_on_= 1; } while(0)
+#ifndef _WIN32
+#define DBUG_ABORT() (_db_flush_(), abort())
+#else
+/*
+ Avoid popup with abort/retry/ignore buttons. When BUG#31745 is fixed we can
+ call abort() instead of _exit(2) (now it would cause a "test signal" popup).
+*/
+#include
+#define DBUG_ABORT() (_db_flush_(),\
+ (void)_CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_FILE),\
+ (void)_CrtSetReportFile(_CRT_ERROR, _CRTDBG_FILE_STDERR),\
+ _exit(2))
+#endif
+#define DBUG_CHECK_CRASH(func, op) \
+ do { char _dbuf_[255]; strxnmov(_dbuf_, sizeof(_dbuf_)-1, (func), (op)); \
+ DBUG_EXECUTE_IF(_dbuf_, DBUG_ABORT()); } while(0)
+#define DBUG_CRASH_ENTER(func) \
+ DBUG_ENTER(func); DBUG_CHECK_CRASH(func, "_crash_enter")
+#define DBUG_CRASH_RETURN(val) \
+ DBUG_CHECK_CRASH(_db_get_func_(), "_crash_return")
+#define DBUG_CRASH_VOID_RETURN \
+ DBUG_CHECK_CRASH (_db_get_func_(), "_crash_return")
+
+/*
+ Make the program fail, without creating a core file.
+ abort() will send SIGABRT which (most likely) generates core.
+ Use SIGKILL instead, which cannot be caught.
+ We also pause the current thread, until the signal is actually delivered.
+ An alternative would be to use _exit(EXIT_FAILURE),
+ but then valgrind would report lots of memory leaks.
+ */
+#ifdef _WIN32
+#define DBUG_SUICIDE() DBUG_ABORT()
+#else
+extern void _db_suicide_();
+extern void _db_flush_gcov_();
+#define DBUG_SUICIDE() (_db_flush_(), _db_suicide_())
+#endif
+
+#else /* No debugger */
+
+#define DBUG_ENTER(a1)
+#define DBUG_LEAVE
+#define DBUG_RETURN(a1) do { return(a1); } while(0)
+#define DBUG_VOID_RETURN do { return; } while(0)
+#define DBUG_EXECUTE(keyword,a1) do { } while(0)
+#define DBUG_EXECUTE_IF(keyword,a1) do { } while(0)
+#define DBUG_EVALUATE(keyword,a1,a2) (a2)
+#define DBUG_EVALUATE_IF(keyword,a1,a2) (a2)
+#define DBUG_PRINT(keyword,arglist) do { } while(0)
+#define DBUG_PUTS(keyword,arg) do { } while(0)
+#define DBUG_LOG(keyword,arglist) do { } while(0)
+#define DBUG_PUSH(a1) do { } while(0)
+#define DBUG_SET(a1) do { } while(0)
+#define DBUG_SET_INITIAL(a1) do { } while(0)
+#define DBUG_POP() do { } while(0)
+#define DBUG_PROCESS(a1) do { } while(0)
+#define DBUG_SETJMP(a1) setjmp(a1)
+#define DBUG_LONGJMP(a1) longjmp(a1)
+#define DBUG_DUMP(keyword,a1,a2) do { } while(0)
+#define DBUG_END() do { } while(0)
+#define DBUG_LOCK_FILE do { } while(0)
+#define DBUG_FILE (stderr)
+#define DBUG_UNLOCK_FILE do { } while(0)
+#define DBUG_EXPLAIN(buf,len)
+#define DBUG_EXPLAIN_INITIAL(buf,len)
+#define DEBUGGER_OFF do { } while(0)
+#define DEBUGGER_ON do { } while(0)
+#define DBUG_ABORT() do { } while(0)
+#define DBUG_CRASH_ENTER(func)
+#define DBUG_CRASH_RETURN(val) do { return(val); } while(0)
+#define DBUG_CRASH_VOID_RETURN do { return; } while(0)
+#define DBUG_SUICIDE() do { } while(0)
+
+#endif
+
+#ifdef EXTRA_DEBUG
+/**
+ Sync points allow us to force the server to reach a certain line of code
+ and block there until the client tells the server it is ok to go on.
+ The client tells the server to block with SELECT GET_LOCK()
+ and unblocks it with SELECT RELEASE_LOCK(). Used for debugging difficult
+ concurrency problems
+*/
+#define DBUG_SYNC_POINT(lock_name,lock_timeout) \
+ debug_sync_point(lock_name,lock_timeout)
+void debug_sync_point(const char* lock_name, uint lock_timeout);
+#else
+#define DBUG_SYNC_POINT(lock_name,lock_timeout)
+#endif /* EXTRA_DEBUG */
+
+#ifdef __cplusplus
+}
+#endif
+
+#ifdef __cplusplus
+#if !defined(NDEBUG)
+#include
+
+/*
+ A C++ interface to the DBUG_PUTS macro. The DBUG_LOG macro also
+ takes two arguments. The first argument is the keyword, as that of the
+ DBUG_PRINT. The 2nd argument 'v' will be passed to a C++ output stream.
+ This enables the use of C++ style output stream operator. In the code, it
+ will be used as follows:
+
+ DBUG_LOG("blob", "space: " << space_id);
+
+ Note: DBUG_PRINT() has a limitation of 1024 bytes for a single
+ print out. This limitation is not there for DBUG_PUTS and DBUG_LOG
+ macros.
+*/
+
+#define DBUG_LOG(keyword, v) do { \
+ std::ostringstream sout; \
+ sout << v; \
+ DBUG_PUTS(keyword, sout.str().c_str()); \
+} while(0)
+#endif /* NDEBUG */
+#endif /* __cplusplus */
+
+#endif /* MY_DBUG_INCLUDED */
diff --git a/db/include/my_dir.h b/db/include/my_dir.h
new file mode 100644
index 0000000..6193763
--- /dev/null
+++ b/db/include/my_dir.h
@@ -0,0 +1,100 @@
+/* Copyright (c) 2000, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 MY_DIR_H
+#define MY_DIR_H
+
+#include "my_global.h"
+
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+ /* Defines for my_dir and my_stat */
+
+#ifdef _WIN32
+#define S_IROTH _S_IREAD
+#define S_IFIFO _S_IFIFO
+#endif
+
+#define MY_S_IFMT S_IFMT /* type of file */
+#define MY_S_IFDIR S_IFDIR /* directory */
+#define MY_S_IFCHR S_IFCHR /* character special */
+#define MY_S_IFBLK S_IFBLK /* block special */
+#define MY_S_IFREG S_IFREG /* regular */
+#define MY_S_IFIFO S_IFIFO /* fifo */
+#define MY_S_ISUID S_ISUID /* set user id on execution */
+#define MY_S_ISGID S_ISGID /* set group id on execution */
+#define MY_S_ISVTX S_ISVTX /* save swapped text even after use */
+#define MY_S_IREAD S_IREAD /* read permission, owner */
+#define MY_S_IWRITE S_IWRITE /* write permission, owner */
+#define MY_S_IEXEC S_IEXEC /* execute/search permission, owner */
+
+#define MY_S_ISDIR(m) (((m) & MY_S_IFMT) == MY_S_IFDIR)
+#define MY_S_ISCHR(m) (((m) & MY_S_IFMT) == MY_S_IFCHR)
+#define MY_S_ISBLK(m) (((m) & MY_S_IFMT) == MY_S_IFBLK)
+#define MY_S_ISREG(m) (((m) & MY_S_IFMT) == MY_S_IFREG)
+#define MY_S_ISFIFO(m) (((m) & MY_S_IFMT) == MY_S_IFIFO)
+
+#define MY_DONT_SORT 512 /* my_lib; Don't sort files */
+#define MY_WANT_STAT 1024 /* my_lib; stat files */
+
+ /* typedefs for my_dir & my_stat */
+
+#if(_MSC_VER)
+#define MY_STAT struct _stati64 /* 64 bit file size */
+#else
+#define MY_STAT struct stat /* Orginal struct have what we need */
+#endif
+
+/* Struct describing one file returned from my_dir */
+typedef struct fileinfo
+{
+ char *name;
+ MY_STAT *mystat;
+} FILEINFO;
+
+typedef struct st_my_dir /* Struct returned from my_dir */
+{
+ /*
+ These members are just copies of parts of DYNAMIC_ARRAY structure,
+ which is allocated right after the end of MY_DIR structure (MEM_ROOT
+ for storing names is also resides there). We've left them here because
+ we don't want to change code that uses my_dir.
+ */
+ struct fileinfo *dir_entry;
+ uint number_off_files;
+} MY_DIR;
+
+extern MY_DIR *my_dir(const char *path,myf MyFlags);
+extern void my_dirend(MY_DIR *buffer);
+extern MY_STAT *my_stat(const char *path, MY_STAT *stat_area, myf my_flags);
+extern int my_fstat(int filenr, MY_STAT *stat_area, myf MyFlags);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* MY_DIR_H */
+
diff --git a/db/include/my_getopt.h b/db/include/my_getopt.h
new file mode 100644
index 0000000..c20e91f
--- /dev/null
+++ b/db/include/my_getopt.h
@@ -0,0 +1,156 @@
+ /*
+ Copyright (c) 2002, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 _my_getopt_h
+#define _my_getopt_h
+
+#include "my_sys.h" /* loglevel */
+
+C_MODE_START
+
+#define GET_NO_ARG 1
+#define GET_BOOL 2
+#define GET_INT 3
+#define GET_UINT 4
+#define GET_LONG 5
+#define GET_ULONG 6
+#define GET_LL 7
+#define GET_ULL 8
+#define GET_STR 9
+#define GET_STR_ALLOC 10
+#define GET_DISABLED 11
+#define GET_ENUM 12
+#define GET_SET 13
+#define GET_DOUBLE 14
+#define GET_FLAGSET 15
+#define GET_PASSWORD 16
+
+#if SIZEOF_INT == 4
+#define GET_INT32 GET_INT
+#define GET_UINT32 GET_UINT
+#elif SIZEOF_LONG == 4
+#define GET_INT32 GET_LONG
+#define GET_UINT32 GET_ULONG
+#else
+#error Neither int or long is of 4 bytes width
+#endif
+
+#define GET_ASK_ADDR 128
+#define GET_TYPE_MASK 127
+
+/**
+ Enumeration of the my_option::arg_type attributes.
+ It should be noted that for historical reasons variables with the combination
+ arg_type=NO_ARG, my_option::var_type=GET_BOOL still accepts
+ arguments. This is someone counter intuitive and care should be taken
+ if the code is refactored.
+*/
+enum get_opt_arg_type { NO_ARG, OPT_ARG, REQUIRED_ARG };
+
+struct st_typelib;
+
+struct my_option
+{
+ const char *name; /**< Name of the option. name=NULL
+ marks the end of the my_option[]
+ array.
+ */
+ int id; /**< For 0255 no short option
+ is created, but a long option still
+ can be identified uniquely in the
+ my_get_one_option() callback.
+ If an opton needs neither special
+ treatment in the my_get_one_option()
+ nor one-letter short equivalent
+ use id=0.
+ id=-1 is a special case and is used
+ to generate deprecation warnings for
+ plugin options. It should not be
+ used for anything else.
+ */
+ const char *comment; /**< option comment, for autom. --help.
+ if it's NULL the option is not
+ visible in --help.
+ */
+ void *value; /**< A pointer to the variable value */
+ void *u_max_value; /**< The user def. max variable value */
+ struct st_typelib *typelib; /**< Pointer to possible values */
+ ulong var_type; /**< GET_BOOL, GET_ULL, etc */
+ enum get_opt_arg_type arg_type; /**< e.g. REQUIRED_ARG or OPT_ARG */
+ longlong def_value; /**< Default value */
+ longlong min_value; /**< Min allowed value (for numbers) */
+ ulonglong max_value; /**< Max allowed value (for numbers) */
+ longlong sub_size; /**< Unused */
+ long block_size; /**< Value should be a mult. of this (for numbers) */
+ void *app_type; /**< To be used by an application */
+};
+
+
+typedef my_bool (*my_get_one_option)(int, const struct my_option *, char *);
+/**
+ Used to retrieve a reference to the object (variable) that holds the value
+ for the given option. For example, if var_type is GET_UINT, the function
+ must return a pointer to a variable of type uint. A argument is stored in
+ the location pointed to by the returned pointer.
+*/
+typedef void *(*my_getopt_value)(const char *, size_t, const struct my_option *,
+ int *);
+
+
+extern char *disabled_my_option;
+extern my_bool my_getopt_print_errors;
+extern my_bool my_getopt_skip_unknown;
+extern my_error_reporter my_getopt_error_reporter;
+
+extern int handle_options (int *argc, char ***argv,
+ const struct my_option *longopts, my_get_one_option);
+extern int my_handle_options (int *argc, char ***argv,
+ const struct my_option *longopts,
+ my_get_one_option,
+ const char **command_list, my_bool ignore_unknown_option);
+extern void print_cmdline_password_warning();
+extern void my_cleanup_options(const struct my_option *options);
+extern void my_cleanup_options(const struct my_option *options);
+extern void my_print_help(const struct my_option *options);
+extern void my_print_variables(const struct my_option *options);
+extern void my_print_variables_ex(const struct my_option *options, FILE* file);
+extern void my_getopt_register_get_addr(my_getopt_value);
+
+ulonglong getopt_ull_limit_value(ulonglong num, const struct my_option *optp,
+ my_bool *fix);
+longlong getopt_ll_limit_value(longlong, const struct my_option *,
+ my_bool *fix);
+double getopt_double_limit_value(double num, const struct my_option *optp,
+ my_bool *fix);
+my_bool getopt_compare_strings(const char *s, const char *t, uint length);
+ulonglong max_of_int_range(int var_type);
+
+ulonglong getopt_double2ulonglong(double);
+double getopt_ulonglong2double(ulonglong);
+
+C_MODE_END
+
+#endif /* _my_getopt_h */
+
diff --git a/db/include/my_global.h b/db/include/my_global.h
new file mode 100644
index 0000000..5ca495c
--- /dev/null
+++ b/db/include/my_global.h
@@ -0,0 +1,804 @@
+/*
+ Copyright (c) 2001, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ Without limiting anything contained in the foregoing, this file,
+ which is part of C Driver for MySQL (Connector/C), is also subject to the
+ Universal FOSS Exception, version 1.0, a copy of which can be found at
+ http://oss.oracle.com/licenses/universal-foss-exception.
+
+ 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, version 2.0, 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 MY_GLOBAL_INCLUDED
+#define MY_GLOBAL_INCLUDED
+
+/*
+ This include file should be included first in every header file.
+
+ This makes sure my_config.h is included to get platform specific
+ symbols defined and it makes sure a lot of platform/compiler
+ differences are mitigated.
+*/
+
+#include "my_config.h"
+
+#define __STDC_LIMIT_MACROS /* Enable C99 limit macros */
+#define __STDC_FORMAT_MACROS /* Enable C99 printf format macros */
+#define _USE_MATH_DEFINES /* Get access to M_PI, M_E, etc. in math.h */
+
+#ifdef _WIN32
+/* Include common headers.*/
+# include
+# include /* SOCKET */
+# include /* access(), chmod() */
+#endif
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include /* Recommended by debian */
+#include
+
+#ifdef HAVE_SYS_SOCKET_H
+#include
+#endif
+#if !defined(_WIN32)
+#include
+#endif
+#ifdef MY_MSCRT_DEBUG
+#include
+#endif
+
+/*
+ A lot of our programs uses asserts, so better to always include it
+ This also fixes a problem when people uses assert without including
+ assert.h
+*/
+#include
+
+/* Include standard definitions of operator new and delete. */
+#ifdef __cplusplus
+# include
+#endif
+
+#include "my_compiler.h"
+
+
+/*
+ InnoDB depends on some MySQL internals which other plugins should not
+ need. This is because of InnoDB's foreign key support, "safe" binlog
+ truncation, and other similar legacy features.
+
+ We define accessors for these internals unconditionally, but do not
+ expose them in mysql/plugin.h. They are declared in ha_innodb.h for
+ InnoDB's use.
+*/
+#define INNODB_COMPATIBILITY_HOOKS
+
+/* Macros to make switching between C and C++ mode easier */
+#ifdef __cplusplus
+#define C_MODE_START extern "C" {
+#define C_MODE_END }
+#else
+#define C_MODE_START
+#define C_MODE_END
+#endif
+
+#ifdef WITH_PERFSCHEMA_STORAGE_ENGINE
+#define HAVE_PSI_INTERFACE
+#endif /* WITH_PERFSCHEMA_STORAGE_ENGINE */
+
+/* Make it easier to add conditional code in _expressions_ */
+#ifdef _WIN32
+#define IF_WIN(A,B) A
+#else
+#define IF_WIN(A,B) B
+#endif
+
+#if defined (_WIN32)
+/*
+ off_t is 32 bit long. We do not use C runtime functions
+ with off_t but native Win32 file IO APIs, that work with
+ 64 bit offsets.
+*/
+#undef SIZEOF_OFF_T
+#define SIZEOF_OFF_T 8
+
+static inline void sleep(unsigned long seconds)
+{
+ Sleep(seconds * 1000);
+}
+
+/* Define missing access() modes. */
+#define F_OK 0
+#define W_OK 2
+#define R_OK 4 /* Test for read permission. */
+
+/* Define missing file locking constants. */
+#define F_RDLCK 1
+#define F_WRLCK 2
+#define F_UNLCK 3
+#define F_TO_EOF 0x3FFFFFFF
+
+#define O_NONBLOCK 1 /* For emulation of fcntl() */
+
+/*
+ SHUT_RDWR is called SD_BOTH in windows and
+ is defined to 2 in winsock2.h
+ #define SD_BOTH 0x02
+*/
+#define SHUT_RDWR 0x02
+
+/* Shared memory and named pipe connections are supported. */
+#define shared_memory_buffer_length 16000
+#define default_shared_memory_base_name "MYSQL"
+#endif /* _WIN32*/
+
+/**
+ Cast a member of a structure to the structure that contains it.
+
+ @param ptr Pointer to the member.
+ @param type Type of the structure that contains the member.
+ @param member Name of the member within the structure.
+*/
+#define my_container_of(ptr, type, member) \
+ ((type *)((char *)ptr - offsetof(type, member)))
+
+/* an assert that works at compile-time. only for constant expression */
+#define compile_time_assert(X) \
+ do \
+ { \
+ typedef char compile_time_assert[(X) ? 1 : -1] MY_ATTRIBUTE((unused)); \
+ } while(0)
+
+#define QUOTE_ARG(x) #x /* Quote argument (before cpp) */
+#define STRINGIFY_ARG(x) QUOTE_ARG(x) /* Quote argument, after cpp */
+
+#ifdef _WIN32
+#define SO_EXT ".dll"
+#elif defined(__APPLE__)
+#define SO_EXT ".dylib"
+#else
+#define SO_EXT ".so"
+#endif
+
+#if !defined(HAVE_UINT)
+typedef unsigned int uint;
+typedef unsigned short ushort;
+#endif
+
+#define swap_variables(t, a, b) { t dummy; dummy= a; a= b; b= dummy; }
+#define MY_TEST(a) ((a) ? 1 : 0)
+#define set_if_bigger(a,b) do { if ((a) < (b)) (a)=(b); } while(0)
+#define set_if_smaller(a,b) do { if ((a) > (b)) (a)=(b); } while(0)
+#define test_all_bits(a,b) (((a) & (b)) == (b))
+#define array_elements(A) ((uint) (sizeof(A)/sizeof(A[0])))
+
+/* Define some general constants */
+#ifndef TRUE
+#define TRUE (1) /* Logical true */
+#define FALSE (0) /* Logical false */
+#endif
+
+/* Some types that is different between systems */
+
+typedef int File; /* File descriptor */
+#ifdef _WIN32
+typedef SOCKET my_socket;
+#else
+typedef int my_socket; /* File descriptor for sockets */
+#define INVALID_SOCKET -1
+#endif
+C_MODE_START
+typedef void (*sig_return)();/* Returns type from signal */
+C_MODE_END
+#if defined(__GNUC__)
+typedef char pchar; /* Mixed prototypes can take char */
+typedef char pbool; /* Mixed prototypes can take char */
+#else
+typedef int pchar; /* Mixed prototypes can't take char */
+typedef int pbool; /* Mixed prototypes can't take char */
+#endif
+C_MODE_START
+typedef int (*qsort_cmp)(const void *,const void *);
+typedef int (*qsort_cmp2)(const void*, const void *,const void *);
+C_MODE_END
+#ifdef _WIN32
+typedef int socket_len_t;
+typedef int sigset_t;
+typedef int mode_t;
+typedef SSIZE_T ssize_t;
+#else
+typedef socklen_t socket_len_t;
+#endif
+typedef socket_len_t SOCKET_SIZE_TYPE; /* Used by NDB */
+
+/* file create flags */
+
+#ifndef O_SHARE /* Probably not windows */
+#define O_SHARE 0 /* Flag to my_open for shared files */
+#ifndef O_BINARY
+#define O_BINARY 0 /* Flag to my_open for binary files */
+#endif
+#ifndef FILE_BINARY
+#define FILE_BINARY O_BINARY /* Flag to my_fopen for binary streams */
+#endif
+#ifdef HAVE_FCNTL
+#define HAVE_FCNTL_LOCK
+#define F_TO_EOF 0L /* Param to lockf() to lock rest of file */
+#endif
+#endif /* O_SHARE */
+
+#ifndef O_TEMPORARY
+#define O_TEMPORARY 0
+#endif
+#ifndef O_SHORT_LIVED
+#define O_SHORT_LIVED 0
+#endif
+#ifndef O_NOFOLLOW
+#define O_NOFOLLOW 0
+#endif
+
+/* additional file share flags for win32 */
+#ifdef _WIN32
+#define _SH_DENYRWD 0x110 /* deny read/write mode & delete */
+#define _SH_DENYWRD 0x120 /* deny write mode & delete */
+#define _SH_DENYRDD 0x130 /* deny read mode & delete */
+#define _SH_DENYDEL 0x140 /* deny delete only */
+#endif /* _WIN32 */
+
+
+/* General constants */
+#define FN_LEN 256 /* Max file name len */
+#define FN_HEADLEN 253 /* Max length of filepart of file name */
+#define FN_EXTLEN 20 /* Max length of extension (part of FN_LEN) */
+#define FN_REFLEN 512 /* Max length of full path-name */
+#define FN_REFLEN_SE 4000 /* Max length of full path-name in SE */
+#define FN_EXTCHAR '.'
+#define FN_HOMELIB '~' /* ~/ is used as abbrev for home dir */
+#define FN_CURLIB '.' /* ./ is used as abbrev for current dir */
+#define FN_PARENTDIR ".." /* Parent directory; Must be a string */
+
+#ifdef _WIN32
+#define FN_LIBCHAR '\\'
+#define FN_LIBCHAR2 '/'
+#define FN_DIRSEP "/\\" /* Valid directory separators */
+#define FN_EXEEXT ".exe"
+#define FN_SOEXT ".dll"
+#define FN_ROOTDIR "\\"
+#define FN_DEVCHAR ':'
+#define FN_NETWORK_DRIVES /* Uses \\ to indicate network drives */
+#else
+#define FN_LIBCHAR '/'
+/*
+ FN_LIBCHAR2 is not defined on !Windows. Use is_directory_separator().
+*/
+#define FN_DIRSEP "/" /* Valid directory separators */
+#define FN_EXEEXT ""
+#define FN_SOEXT ".so"
+#define FN_ROOTDIR "/"
+#endif
+
+static inline int is_directory_separator(char c)
+{
+#ifdef _WIN32
+ return c == FN_LIBCHAR || c == FN_LIBCHAR2;
+#else
+ return c == FN_LIBCHAR;
+#endif
+}
+
+/*
+ MY_FILE_MIN is Windows speciality and is used to quickly detect
+ the mismatch of CRT and mysys file IO usage on Windows at runtime.
+ CRT file descriptors can be in the range 0-2047, whereas descriptors returned
+ by my_open() will start with 2048. If a file descriptor with value less then
+ MY_FILE_MIN is passed to mysys IO function, chances are it stemms from
+ open()/fileno() and not my_open()/my_fileno.
+
+ For Posix, mysys functions are light wrappers around libc, and MY_FILE_MIN
+ is logically 0.
+*/
+
+#ifdef _WIN32
+#define MY_FILE_MIN 2048
+#else
+#define MY_FILE_MIN 0
+#endif
+
+/*
+ MY_NFILE is the default size of my_file_info array.
+
+ It is larger on Windows, because it all file handles are stored in my_file_info
+ Default size is 16384 and this should be enough for most cases.If it is not
+ enough, --max-open-files with larger value can be used.
+
+ For Posix , my_file_info array is only used to store filenames for
+ error reporting and its size is not a limitation for number of open files.
+*/
+#ifdef _WIN32
+#define MY_NFILE (16384 + MY_FILE_MIN)
+#else
+#define MY_NFILE 64
+#endif
+
+#define OS_FILE_LIMIT UINT_MAX
+
+/*
+ Io buffer size; Must be a power of 2 and a multiple of 512. May be
+ smaller what the disk page size. This influences the speed of the
+ isam btree library. eg to big to slow.
+*/
+#define IO_SIZE 4096
+/*
+ How much overhead does malloc have. The code often allocates
+ something like 1024-MALLOC_OVERHEAD bytes
+*/
+#define MALLOC_OVERHEAD 8
+
+ /* get memory in huncs */
+#define ONCE_ALLOC_INIT (uint) (4096-MALLOC_OVERHEAD)
+ /* Typical record cash */
+#define RECORD_CACHE_SIZE (uint) (64*1024-MALLOC_OVERHEAD)
+ /* Typical key cash */
+#define KEY_CACHE_SIZE (uint) (8*1024*1024)
+ /* Default size of a key cache block */
+#define KEY_CACHE_BLOCK_SIZE (uint) 1024
+
+
+/* Some defines of functions for portability */
+
+#if (_WIN32)
+#if !defined(_WIN64)
+inline double my_ulonglong2double(unsigned long long value)
+{
+ long long nr=(long long) value;
+ if (nr >= 0)
+ return (double) nr;
+ return (18446744073709551616.0 + (double) nr);
+}
+#define ulonglong2double my_ulonglong2double
+#define my_off_t2double my_ulonglong2double
+#endif /* _WIN64 */
+inline unsigned long long my_double2ulonglong(double d)
+{
+ double t= d - (double) 0x8000000000000000ULL;
+
+ if (t >= 0)
+ return ((unsigned long long) t) + 0x8000000000000000ULL;
+ return (unsigned long long) d;
+}
+#define double2ulonglong my_double2ulonglong
+#endif /* _WIN32 */
+
+#ifndef ulonglong2double
+#define ulonglong2double(A) ((double) (ulonglong) (A))
+#define my_off_t2double(A) ((double) (my_off_t) (A))
+#endif
+#ifndef double2ulonglong
+#define double2ulonglong(A) ((ulonglong) (double) (A))
+#endif
+
+#define INT_MIN64 (~0x7FFFFFFFFFFFFFFFLL)
+#define INT_MAX64 0x7FFFFFFFFFFFFFFFLL
+#define INT_MIN32 (~0x7FFFFFFFL)
+#define INT_MAX32 0x7FFFFFFFL
+#define UINT_MAX32 0xFFFFFFFFL
+#define INT_MIN24 (~0x007FFFFF)
+#define INT_MAX24 0x007FFFFF
+#define UINT_MAX24 0x00FFFFFF
+#define INT_MIN16 (~0x7FFF)
+#define INT_MAX16 0x7FFF
+#define UINT_MAX16 0xFFFF
+#define INT_MIN8 (~0x7F)
+#define INT_MAX8 0x7F
+#define UINT_MAX8 0xFF
+
+#ifndef SIZE_T_MAX
+#define SIZE_T_MAX (~((size_t) 0))
+#endif
+
+// Our ifdef trickery for my_isfinite does not work with gcc/solaris unless we:
+#ifdef HAVE_IEEEFP_H
+#include
+#endif
+
+#if (__cplusplus >= 201103L)
+ /* For C++11 use the new std functions rather than C99 macros. */
+ #include
+ #define my_isfinite(X) std::isfinite(X)
+ #define my_isnan(X) std::isnan(X)
+ #define my_isinf(X) std::isinf(X)
+#else
+ #ifdef HAVE_LLVM_LIBCPP /* finite is deprecated in libc++ */
+ #define my_isfinite(X) isfinite(X)
+ #elif defined _WIN32
+ #define my_isfinite(X) _finite(X)
+ #else
+ #define my_isfinite(X) finite(X)
+ #endif
+ #define my_isnan(X) isnan(X)
+ #ifdef HAVE_ISINF
+ /* System-provided isinf() is available and safe to use */
+ #define my_isinf(X) isinf(X)
+ #else /* !HAVE_ISINF */
+ #define my_isinf(X) (!my_isfinite(X) && !my_isnan(X))
+ #endif
+#endif /* __cplusplus >= 201103L */
+
+/*
+ Max size that must be added to a so that we know Size to make
+ adressable obj.
+*/
+#if SIZEOF_CHARP == 4
+typedef long my_ptrdiff_t;
+#else
+typedef long long my_ptrdiff_t;
+#endif
+
+#define MY_ALIGN(A,L) (((A) + (L) - 1) & ~((L) - 1))
+#define ALIGN_SIZE(A) MY_ALIGN((A),sizeof(double))
+/* Size to make adressable obj. */
+#define ADD_TO_PTR(ptr,size,type) (type) ((uchar*) (ptr)+size)
+#define PTR_BYTE_DIFF(A,B) (my_ptrdiff_t) ((uchar*) (A) - (uchar*) (B))
+
+/*
+ Custom version of standard offsetof() macro which can be used to get
+ offsets of members in class for non-POD types (according to the current
+ version of C++ standard offsetof() macro can't be used in such cases and
+ attempt to do so causes warnings to be emitted, OTOH in many cases it is
+ still OK to assume that all instances of the class has the same offsets
+ for the same members).
+
+ This is temporary solution which should be removed once File_parser class
+ and related routines are refactored.
+*/
+
+#define my_offsetof(TYPE, MEMBER) \
+ ((size_t)((char *)&(((TYPE *)0x10)->MEMBER) - (char*)0x10))
+
+#define NullS (char *) 0
+
+#ifdef _WIN32
+#define STDCALL __stdcall
+#else
+#define STDCALL
+#endif
+
+/* Typdefs for easyier portability */
+
+typedef unsigned char uchar; /* Short for unsigned char */
+typedef signed char int8; /* Signed integer >= 8 bits */
+typedef unsigned char uint8; /* Unsigned integer >= 8 bits */
+typedef short int16;
+typedef unsigned short uint16;
+#if SIZEOF_INT == 4
+typedef int int32;
+typedef unsigned int uint32;
+#elif SIZEOF_LONG == 4
+typedef long int32;
+typedef unsigned long uint32;
+#else
+#error Neither int or long is of 4 bytes width
+#endif
+
+#if !defined(HAVE_ULONG)
+typedef unsigned long ulong; /* Short for unsigned long */
+#endif
+/*
+ Using [unsigned] long long is preferable as [u]longlong because we use
+ [unsigned] long long unconditionally in many places,
+ for example in constants with [U]LL suffix.
+*/
+typedef unsigned long long int ulonglong; /* ulong or unsigned long long */
+typedef long long int longlong;
+typedef longlong int64;
+typedef ulonglong uint64;
+
+#if defined (_WIN32)
+typedef unsigned __int64 my_ulonglong;
+#else
+typedef unsigned long long my_ulonglong;
+#endif
+
+#if SIZEOF_CHARP == SIZEOF_INT
+typedef int intptr;
+#elif SIZEOF_CHARP == SIZEOF_LONG
+typedef long intptr;
+#elif SIZEOF_CHARP == SIZEOF_LONG_LONG
+typedef long long intptr;
+#else
+#error sizeof(void *) is neither sizeof(int) nor sizeof(long) nor sizeof(long long)
+#endif
+
+#define MY_ERRPTR ((void*)(intptr)1)
+
+#if defined(_WIN32)
+typedef unsigned long long my_off_t;
+typedef unsigned long long os_off_t;
+#else
+typedef off_t os_off_t;
+#if SIZEOF_OFF_T > 4
+typedef ulonglong my_off_t;
+#else
+typedef unsigned long my_off_t;
+#endif
+#endif /*_WIN32*/
+#define MY_FILEPOS_ERROR (~(my_off_t) 0)
+
+/*
+ TODO Convert these to use Bitmap class.
+ */
+typedef ulonglong table_map; /* Used for table bits in join */
+typedef ulonglong nesting_map; /* Used for flags of nesting constructs */
+
+#if defined(_WIN32)
+#define socket_errno WSAGetLastError()
+#define SOCKET_EINTR WSAEINTR
+#define SOCKET_EAGAIN WSAEINPROGRESS
+#define SOCKET_EWOULDBLOCK WSAEWOULDBLOCK
+#define SOCKET_EADDRINUSE WSAEADDRINUSE
+#define SOCKET_ETIMEDOUT WSAETIMEDOUT
+#define SOCKET_ECONNRESET WSAECONNRESET
+#define SOCKET_ENFILE ENFILE
+#define SOCKET_EMFILE EMFILE
+#else /* Unix */
+#define socket_errno errno
+#define closesocket(A) close(A)
+#define SOCKET_EINTR EINTR
+#define SOCKET_EAGAIN EAGAIN
+#define SOCKET_EWOULDBLOCK EWOULDBLOCK
+#define SOCKET_EADDRINUSE EADDRINUSE
+#define SOCKET_ETIMEDOUT ETIMEDOUT
+#define SOCKET_ECONNRESET ECONNRESET
+#define SOCKET_ENFILE ENFILE
+#define SOCKET_EMFILE EMFILE
+#endif
+
+typedef int myf; /* Type of MyFlags in my_funcs */
+typedef char my_bool; /* Small bool */
+
+/* Macros for converting *constants* to the right type */
+#define MYF(v) (myf) (v)
+
+/* Some helper macros */
+#define YESNO(X) ((X) ? "yes" : "no")
+
+#define MY_HOW_OFTEN_TO_WRITE 1000 /* How often we want info on screen */
+
+#include
+
+#ifdef HAVE_CHARSET_utf8
+#define MYSQL_UNIVERSAL_CLIENT_CHARSET "utf8"
+#else
+#define MYSQL_UNIVERSAL_CLIENT_CHARSET MYSQL_DEFAULT_CHARSET_NAME
+#endif
+
+#if defined(_WIN32)
+#define dlsym(lib, name) (void*)GetProcAddress((HMODULE)lib, name)
+#define dlopen(libname, unused) LoadLibraryEx(libname, NULL, 0)
+#define dlclose(lib) FreeLibrary((HMODULE)lib)
+#ifndef HAVE_DLOPEN
+#define HAVE_DLOPEN
+#endif
+#define DLERROR_GENERATE(errmsg, error_number) \
+ char win_errormsg[2048]; \
+ if(FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, \
+ 0, error_number, 0, win_errormsg, 2048, NULL)) \
+ { \
+ char *ptr; \
+ for (ptr= &win_errormsg[0] + strlen(win_errormsg) - 1; \
+ ptr >= &win_errormsg[0] && strchr("\r\n\t\0x20", *ptr); \
+ ptr--) \
+ *ptr= 0; \
+ errmsg= win_errormsg; \
+ } \
+ else \
+ errmsg= ""
+#define dlerror() ""
+#define dlopen_errno GetLastError()
+
+#else /* _WIN32 */
+#define DLERROR_GENERATE(errmsg, error_number) errmsg= dlerror()
+#define dlopen_errno errno
+#endif /* _WIN32 */
+
+/* Length of decimal number represented by INT32. */
+#define MY_INT32_NUM_DECIMAL_DIGITS 11U
+
+/* Length of decimal number represented by INT64. */
+#define MY_INT64_NUM_DECIMAL_DIGITS 21U
+
+/* Define some useful general macros (should be done after all headers). */
+#define MY_MAX(a, b) ((a) > (b) ? (a) : (b))
+#define MY_MIN(a, b) ((a) < (b) ? (a) : (b))
+
+#if !defined(__cplusplus) && !defined(bool)
+#define bool In_C_you_should_use_my_bool_instead()
+#endif
+
+/*
+ MYSQL_PLUGIN_IMPORT macro is used to export mysqld data
+ (i.e variables) for usage in storage engine loadable plugins.
+ Outside of Windows, it is dummy.
+*/
+#if (defined(_WIN32) && defined(MYSQL_DYNAMIC_PLUGIN))
+#define MYSQL_PLUGIN_IMPORT __declspec(dllimport)
+#else
+#define MYSQL_PLUGIN_IMPORT
+#endif
+
+#include
+
+#ifdef EMBEDDED_LIBRARY
+#define NO_EMBEDDED_ACCESS_CHECKS
+/* Things we don't need in the embedded version of MySQL */
+#undef HAVE_OPENSSL
+#endif /* EMBEDDED_LIBRARY */
+
+
+enum loglevel {
+ ERROR_LEVEL= 0,
+ WARNING_LEVEL= 1,
+ INFORMATION_LEVEL= 2
+};
+
+
+#ifdef _WIN32
+/****************************************************************************
+** Replacements for localtime_r and gmtime_r
+****************************************************************************/
+
+static inline struct tm *localtime_r(const time_t *timep, struct tm *tmp)
+{
+ localtime_s(tmp, timep);
+ return tmp;
+}
+
+static inline struct tm *gmtime_r(const time_t *clock, struct tm *res)
+{
+ gmtime_s(res, clock);
+ return res;
+}
+#endif /* _WIN32 */
+
+#ifndef HAVE_STRUCT_TIMESPEC /* Windows before VS2015 */
+/*
+ Declare a union to make sure FILETIME is properly aligned
+ so it can be used directly as a 64 bit value. The value
+ stored is in 100ns units.
+*/
+union ft64 {
+ FILETIME ft;
+ __int64 i64;
+ };
+
+struct timespec {
+ union ft64 tv;
+ /* The max timeout value in millisecond for native_cond_timedwait */
+ long max_timeout_msec;
+};
+
+#endif /* !HAVE_STRUCT_TIMESPEC */
+
+C_MODE_START
+extern ulonglong my_getsystime(void);
+C_MODE_END
+
+static inline void set_timespec_nsec(struct timespec *abstime, ulonglong nsec)
+{
+#ifdef HAVE_STRUCT_TIMESPEC
+ ulonglong now= my_getsystime() + (nsec / 100);
+ ulonglong tv_sec= now / 10000000ULL;
+#if SIZEOF_TIME_T < SIZEOF_LONG_LONG
+ /* Ensure that the number of seconds don't overflow. */
+ tv_sec= MY_MIN(tv_sec, ((ulonglong)INT_MAX32));
+#endif
+ abstime->tv_sec= (time_t)tv_sec;
+ abstime->tv_nsec= (now % 10000000ULL) * 100 + (nsec % 100);
+#else /* !HAVE_STRUCT_TIMESPEC */
+ ulonglong max_timeout_msec= (nsec / 1000000);
+ union ft64 tv;
+ GetSystemTimeAsFileTime(&tv.ft);
+ abstime->tv.i64= tv.i64 + (__int64)(nsec / 100);
+#if SIZEOF_LONG < SIZEOF_LONG_LONG
+ /* Ensure that the msec value doesn't overflow. */
+ max_timeout_msec= MY_MIN(max_timeout_msec, ((ulonglong)INT_MAX32));
+#endif
+ abstime->max_timeout_msec= (long)max_timeout_msec;
+#endif /* !HAVE_STRUCT_TIMESPEC */
+}
+
+static inline void set_timespec(struct timespec *abstime, ulonglong sec)
+{
+ set_timespec_nsec(abstime, sec * 1000000000ULL);
+}
+
+/**
+ Compare two timespec structs.
+
+ @retval 1 If ts1 ends after ts2.
+ @retval -1 If ts1 ends before ts2.
+ @retval 0 If ts1 is equal to ts2.
+*/
+static inline int cmp_timespec(struct timespec *ts1, struct timespec *ts2)
+{
+#ifdef HAVE_STRUCT_TIMESPEC
+ if (ts1->tv_sec > ts2->tv_sec ||
+ (ts1->tv_sec == ts2->tv_sec && ts1->tv_nsec > ts2->tv_nsec))
+ return 1;
+ if (ts1->tv_sec < ts2->tv_sec ||
+ (ts1->tv_sec == ts2->tv_sec && ts1->tv_nsec < ts2->tv_nsec))
+ return -1;
+#else
+ if (ts1->tv.i64 > ts2->tv.i64)
+ return 1;
+ if (ts1->tv.i64 < ts2->tv.i64)
+ return -1;
+#endif
+ return 0;
+}
+
+static inline ulonglong diff_timespec(struct timespec *ts1, struct timespec *ts2)
+{
+#ifdef HAVE_STRUCT_TIMESPEC
+ return (ts1->tv_sec - ts2->tv_sec) * 1000000000ULL +
+ ts1->tv_nsec - ts2->tv_nsec;
+#else
+ return (ts1->tv.i64 - ts2->tv.i64) * 100;
+#endif
+}
+
+#ifdef _WIN32
+typedef int MY_MODE;
+#else
+typedef mode_t MY_MODE;
+#endif /* _WIN32 */
+
+/* File permissions */
+#define USER_READ (1L << 0)
+#define USER_WRITE (1L << 1)
+#define USER_EXECUTE (1L << 2)
+#define GROUP_READ (1L << 3)
+#define GROUP_WRITE (1L << 4)
+#define GROUP_EXECUTE (1L << 5)
+#define OTHERS_READ (1L << 6)
+#define OTHERS_WRITE (1L << 7)
+#define OTHERS_EXECUTE (1L << 8)
+#define USER_RWX USER_READ | USER_WRITE | USER_EXECUTE
+#define GROUP_RWX GROUP_READ | GROUP_WRITE | GROUP_EXECUTE
+#define OTHERS_RWX OTHERS_READ | OTHERS_WRITE | OTHERS_EXECUTE
+
+/* Defaults */
+#define DEFAULT_SSL_CA_CERT "ca.pem"
+#define DEFAULT_SSL_CA_KEY "ca-key.pem"
+#define DEFAULT_SSL_SERVER_CERT "server-cert.pem"
+#define DEFAULT_SSL_SERVER_KEY "server-key.pem"
+
+#if defined(_WIN32) || defined(_WIN64)
+ #define strcasecmp _stricmp
+#endif
+#endif // MY_GLOBAL_INCLUDED
diff --git a/db/include/my_list.h b/db/include/my_list.h
index ecc69d6..f955f4a 100644
--- a/db/include/my_list.h
+++ b/db/include/my_list.h
@@ -25,28 +25,33 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
-#ifndef MY_LIST_INCLUDED
-#define MY_LIST_INCLUDED
+#ifndef _list_h_
+#define _list_h_
-/**
- @file include/my_list.h
-*/
+#ifdef __cplusplus
+extern "C" {
+#endif
-typedef struct LIST {
- struct LIST *prev, *next;
+typedef struct st_list {
+ struct st_list *prev,*next;
void *data;
} LIST;
-typedef int (*list_walk_action)(void *, void *);
+typedef int (*list_walk_action)(void *,void *);
-extern LIST *list_add(LIST *root, LIST *element);
-extern LIST *list_delete(LIST *root, LIST *element);
-extern LIST *list_cons(void *data, LIST *root);
+extern LIST *list_add(LIST *root,LIST *element);
+extern LIST *list_delete(LIST *root,LIST *element);
+extern LIST *list_cons(void *data,LIST *root);
extern LIST *list_reverse(LIST *root);
-extern void list_free(LIST *root, unsigned int free_data);
+extern void list_free(LIST *root,unsigned int free_data);
extern unsigned int list_length(LIST *);
-extern int list_walk(LIST *, list_walk_action action, unsigned char *argument);
+extern int list_walk(LIST *,list_walk_action action,unsigned char * argument);
#define list_rest(a) ((a)->next)
+#define list_push(a,b) (a)=list_cons((b),(a))
+#define list_pop(A) {LIST *old=(A); (A)=list_delete(old,old); my_free(old); }
-#endif // MY_LIST_INCLUDED
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/db/include/my_sys.h b/db/include/my_sys.h
new file mode 100644
index 0000000..d274727
--- /dev/null
+++ b/db/include/my_sys.h
@@ -0,0 +1,992 @@
+/* Copyright (c) 2000, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 _my_sys_h
+#define _my_sys_h
+
+#include "my_global.h" /* C_MODE_START, C_MODE_END */
+#include "m_ctype.h" /* for CHARSET_INFO */
+
+#include "my_thread.h" /* Needed for psi.h */
+#include "mysql/psi/psi.h"
+#include "mysql/service_mysql_alloc.h"
+#include "mysql/psi/mysql_memory.h"
+#include "mysql/psi/mysql_thread.h"
+
+#ifdef HAVE_ALLOCA_H
+#include
+#endif
+#ifdef _WIN32
+#include
+#endif
+#ifdef HAVE_UNISTD_H
+#include
+#endif
+#include
+
+C_MODE_START
+
+#ifdef HAVE_VALGRIND
+# include
+# define MEM_MALLOCLIKE_BLOCK(p1, p2, p3, p4) VALGRIND_MALLOCLIKE_BLOCK(p1, p2, p3, p4)
+# define MEM_FREELIKE_BLOCK(p1, p2) VALGRIND_FREELIKE_BLOCK(p1, p2)
+# include
+# define MEM_UNDEFINED(a,len) VALGRIND_MAKE_MEM_UNDEFINED(a,len)
+# define MEM_NOACCESS(a,len) VALGRIND_MAKE_MEM_NOACCESS(a,len)
+# define MEM_CHECK_ADDRESSABLE(a,len) VALGRIND_CHECK_MEM_IS_ADDRESSABLE(a,len)
+#else /* HAVE_VALGRIND */
+# define MEM_MALLOCLIKE_BLOCK(p1, p2, p3, p4) do {} while (0)
+# define MEM_FREELIKE_BLOCK(p1, p2) do {} while (0)
+# define MEM_UNDEFINED(a,len) ((void) 0)
+# define MEM_NOACCESS(a,len) ((void) 0)
+# define MEM_CHECK_ADDRESSABLE(a,len) ((void) 0)
+#endif /* HAVE_VALGRIND */
+
+#include
+
+#define MY_INIT(name) { my_progname= name; my_init(); }
+
+/**
+ Max length of an error message generated by mysys utilities.
+ Some mysys functions produce error messages. These mostly go
+ to stderr.
+ This constant defines the size of the buffer used to format
+ the message. It should be kept in sync with MYSQL_ERRMSG_SIZE,
+ since sometimes mysys errors are stored in the server diagnostics
+ area, and we would like to avoid unexpected truncation.
+*/
+#define MYSYS_ERRMSG_SIZE (512)
+#define MYSYS_STRERROR_SIZE (128)
+
+#define MY_FILE_ERROR ((size_t) -1)
+
+ /* General bitmaps for my_func's */
+#define MY_FFNF 1 /* Fatal if file not found */
+#define MY_FNABP 2 /* Fatal if not all bytes read/writen */
+#define MY_NABP 4 /* Error if not all bytes read/writen */
+#define MY_FAE 8 /* Fatal if any error */
+#define MY_WME 16 /* Write message on error */
+#define MY_WAIT_IF_FULL 32 /* Wait and try again if disk full error */
+#define MY_IGNORE_BADFD 32 /* my_sync: ignore 'bad descriptor' errors */
+#define MY_SYNC_DIR 8192 /* my_create/delete/rename: sync directory */
+#define MY_UNUSED 64 /* Unused (was support for RAID) */
+#define MY_FULL_IO 512 /* For my_read - loop intil I/O is complete */
+#define MY_DONT_CHECK_FILESIZE 128 /* Option to init_io_cache() */
+#define MY_LINK_WARNING 32 /* my_redel() gives warning if links */
+#define MY_COPYTIME 64 /* my_redel() copys time */
+#define MY_DELETE_OLD 256 /* my_create_with_symlink() */
+#define MY_RESOLVE_LINK 128 /* my_realpath(); Only resolve links */
+#define MY_HOLD_ORIGINAL_MODES 128 /* my_copy() holds to file modes */
+#define MY_REDEL_MAKE_BACKUP 256
+#define MY_REDEL_NO_COPY_STAT 512 /* my_redel() doesn't call my_copystat() */
+#define MY_SEEK_NOT_DONE 32 /* my_lock may have to do a seek */
+#define MY_DONT_WAIT 64 /* my_lock() don't wait if can't lock */
+#define MY_ZEROFILL 32 /* my_malloc(), fill array with zero */
+#define MY_ALLOW_ZERO_PTR 64 /* my_realloc() ; zero ptr -> malloc */
+#define MY_FREE_ON_ERROR 128 /* my_realloc() ; Free old ptr on error */
+#define MY_HOLD_ON_ERROR 256 /* my_realloc() ; Return old ptr on error */
+#define MY_DONT_OVERWRITE_FILE 1024 /* my_copy: Don't overwrite file */
+#define MY_THREADSAFE 2048 /* my_seek(): lock fd mutex */
+#define MY_SYNC 4096 /* my_copy(): sync dst file */
+
+#define MYF_RW MYF(MY_WME+MY_NABP) /* For my_read & my_write */
+
+#define MY_CHECK_ERROR 1 /* Params to my_end; Check open-close */
+#define MY_GIVE_INFO 2 /* Give time info about process*/
+#define MY_DONT_FREE_DBUG 4 /* Do not call DBUG_END() in my_end() */
+
+/* Flags for my_error() */
+#define ME_BELL 4 /* DEPRECATED: Ring bell then printing message */
+#define ME_ERRORLOG 64 /* Write the error message to error log */
+#define ME_FATALERROR 1024 /* Fatal statement error */
+
+ /* Bits in last argument to fn_format */
+#define MY_REPLACE_DIR 1 /* replace dir in name with 'dir' */
+#define MY_REPLACE_EXT 2 /* replace extension with 'ext' */
+#define MY_UNPACK_FILENAME 4 /* Unpack name (~ -> home) */
+#define MY_PACK_FILENAME 8 /* Pack name (home -> ~) */
+#define MY_RESOLVE_SYMLINKS 16 /* Resolve all symbolic links */
+#define MY_RETURN_REAL_PATH 32 /* return full path for file */
+#define MY_SAFE_PATH 64 /* Return NULL if too long path */
+#define MY_RELATIVE_PATH 128 /* name is relative to 'dir' */
+#define MY_APPEND_EXT 256 /* add 'ext' as additional extension*/
+
+
+ /* My seek flags */
+#define MY_SEEK_SET 0
+#define MY_SEEK_CUR 1
+#define MY_SEEK_END 2
+
+ /* Some constants */
+#define MY_WAIT_FOR_USER_TO_FIX_PANIC 60 /* in seconds */
+#define MY_WAIT_GIVE_USER_A_MESSAGE 10 /* Every 10 times of prev */
+#define MIN_COMPRESS_LENGTH 50 /* Don't compress small bl. */
+#define DFLT_INIT_HITS 3
+
+ /* root_alloc flags */
+#define MY_KEEP_PREALLOC 1
+#define MY_MARK_BLOCKS_FREE 2 /* move used to free list and reuse them */
+
+ /* Internal error numbers (for assembler functions) */
+#define MY_ERRNO_EDOM 33
+#define MY_ERRNO_ERANGE 34
+
+ /* Bits for get_date timeflag */
+#define GETDATE_DATE_TIME 1
+#define GETDATE_SHORT_DATE 2
+#define GETDATE_HHMMSSTIME 4
+#define GETDATE_GMT 8
+#define GETDATE_FIXEDLENGTH 16
+#define GETDATE_T_DELIMITER 32
+#define GETDATE_SHORT_DATE_FULL_YEAR 64
+
+ /* defines when allocating data */
+extern void *my_multi_malloc(PSI_memory_key key, myf flags, ...);
+
+/*
+ Switch to my_malloc() if the memory block to be allocated is bigger than
+ max_alloca_sz.
+*/
+extern PSI_memory_key key_memory_max_alloca;
+#define my_safe_alloca(size, max_alloca_sz) ((size <= max_alloca_sz) ? \
+ my_alloca(size) : \
+ my_malloc(key_memory_max_alloca, size, MYF(0)))
+#define my_safe_afree(ptr, size, max_alloca_sz) if (size > max_alloca_sz) \
+ my_free(ptr)
+
+#if !defined(NDEBUG) || defined(HAVE_VALGRIND)
+/**
+ Put bad content in memory to be sure it will segfault if dereferenced.
+ With Valgrind, verify that memory is addressable, and mark it undefined.
+ We cache value of B because if B is expression which depends on A, memset()
+ trashes value of B.
+*/
+#define TRASH(A,B) do { \
+ void *p = (A); \
+ const size_t l= (B); \
+ MEM_CHECK_ADDRESSABLE(A, l); \
+ memset(p, 0x8F, l); \
+ MEM_UNDEFINED(A, l); \
+ } while (0)
+#else
+#define TRASH(A,B) do {} while(0)
+#endif
+#if defined(ENABLED_DEBUG_SYNC)
+extern void (*debug_sync_C_callback_ptr)(const char *, size_t);
+#define DEBUG_SYNC_C(_sync_point_name_) do { \
+ if (debug_sync_C_callback_ptr != NULL) \
+ (*debug_sync_C_callback_ptr)(STRING_WITH_LEN(_sync_point_name_)); } \
+ while(0)
+#define DEBUG_SYNC_C_IF_THD(thd, _sync_point_name_) do { \
+ if (debug_sync_C_callback_ptr != NULL && thd) \
+ (*debug_sync_C_callback_ptr)(STRING_WITH_LEN(_sync_point_name_)); } \
+ while(0)
+#else
+#define DEBUG_SYNC_C(_sync_point_name_)
+#define DEBUG_SYNC_C_IF_THD(thd, _sync_point_name_)
+#endif /* defined(ENABLED_DEBUG_SYNC) */
+
+#ifdef HAVE_LINUX_LARGE_PAGES
+extern uint my_get_large_page_size(void);
+extern uchar * my_large_malloc(PSI_memory_key key, size_t size, myf my_flags);
+extern void my_large_free(uchar *ptr);
+extern my_bool my_use_large_pages;
+extern uint my_large_page_size;
+#else
+#define my_get_large_page_size() (0)
+#define my_large_malloc(A,B,C) my_malloc((A),(B),(C))
+#define my_large_free(A) my_free((A))
+#endif /* HAVE_LINUX_LARGE_PAGES */
+
+#define my_alloca(SZ) alloca((size_t) (SZ))
+
+#include /* errno is a define */
+
+extern char *home_dir; /* Home directory for user */
+extern const char *my_progname; /* program-name (printed in errors) */
+extern char curr_dir[]; /* Current directory for user */
+extern void (*error_handler_hook)(uint my_err, const char *str,myf MyFlags);
+extern void (*fatal_error_handler_hook)(uint my_err, const char *str,
+ myf MyFlags);
+extern void (*local_message_hook)(enum loglevel ll,
+ const char *format, va_list args);
+extern uint my_file_limit;
+extern MYSQL_PLUGIN_IMPORT ulong my_thread_stack_size;
+
+/*
+ Hooks for reporting execution stage information. The server implementation
+ of these will also set THD::current_cond/current_mutex.
+ By having hooks, we avoid direct dependencies on server code.
+*/
+extern void (*enter_cond_hook)(void *opaque_thd,
+ mysql_cond_t *cond,
+ mysql_mutex_t *mutex,
+ const PSI_stage_info *stage,
+ PSI_stage_info *old_stage,
+ const char *src_function,
+ const char *src_file,
+ int src_line);
+
+extern void (*exit_cond_hook)(void *opaque_thd,
+ const PSI_stage_info *stage,
+ const char *src_function,
+ const char *src_file,
+ int src_line);
+
+/*
+ Hook for checking if the thread has been killed.
+*/
+extern int (*is_killed_hook)(const void *opaque_thd);
+
+/* charsets */
+#define MY_ALL_CHARSETS_SIZE 2048
+extern MYSQL_PLUGIN_IMPORT CHARSET_INFO *default_charset_info;
+extern MYSQL_PLUGIN_IMPORT CHARSET_INFO *all_charsets[MY_ALL_CHARSETS_SIZE];
+extern CHARSET_INFO compiled_charsets[];
+
+/* statistics */
+extern ulong my_file_opened,my_stream_opened, my_tmp_file_created;
+extern ulong my_file_total_opened;
+extern my_bool my_init_done;
+
+extern MYSQL_PLUGIN_IMPORT int my_umask; /* Default creation mask */
+extern int my_umask_dir;
+
+extern ulong my_default_record_cache_size;
+extern my_bool my_disable_locking,
+ my_enable_symlinks;
+extern char wild_many,wild_one,wild_prefix;
+extern const char *charsets_dir;
+
+enum cache_type
+{
+ TYPE_NOT_SET= 0, READ_CACHE, WRITE_CACHE,
+ SEQ_READ_APPEND /* sequential read or append */,
+ READ_FIFO, READ_NET,WRITE_NET};
+
+enum flush_type
+{
+ FLUSH_KEEP, /* flush block and keep it in the cache */
+ FLUSH_RELEASE, /* flush block and remove it from the cache */
+ FLUSH_IGNORE_CHANGED, /* remove block from the cache */
+ /*
+ As my_disable_flush_pagecache_blocks is always 0, the following option
+ is strictly equivalent to FLUSH_KEEP
+ */
+ FLUSH_FORCE_WRITE
+};
+
+enum file_type
+{
+ UNOPEN = 0, FILE_BY_OPEN, FILE_BY_CREATE, STREAM_BY_FOPEN, STREAM_BY_FDOPEN,
+ FILE_BY_MKSTEMP, FILE_BY_DUP
+};
+
+struct st_my_file_info
+{
+ char *name;
+#ifdef _WIN32
+ HANDLE fhandle; /* win32 file handle */
+ int oflag; /* open flags, e.g O_APPEND */
+#endif
+ enum file_type type;
+};
+
+extern struct st_my_file_info *my_file_info;
+
+/* needed for client-only build */
+#ifndef PSI_FILE_KEY_DEFINED
+typedef unsigned int PSI_file_key;
+#define PSI_FILE_KEY_DEFINED
+#endif
+
+typedef struct st_dynamic_array
+{
+ uchar *buffer;
+ uint elements,max_element;
+ uint alloc_increment;
+ uint size_of_element;
+ PSI_memory_key m_psi_key;
+} DYNAMIC_ARRAY;
+
+typedef struct st_my_tmpdir
+{
+ char **list;
+ uint cur, max;
+ mysql_mutex_t mutex;
+} MY_TMPDIR;
+
+typedef struct st_dynamic_string
+{
+ char *str;
+ size_t length,max_length,alloc_increment;
+} DYNAMIC_STRING;
+
+struct st_io_cache;
+typedef int (*IO_CACHE_CALLBACK)(struct st_io_cache*);
+
+typedef struct st_io_cache_share
+{
+ mysql_mutex_t mutex; /* To sync on reads into buffer. */
+ mysql_cond_t cond; /* To wait for signals. */
+ mysql_cond_t cond_writer; /* For a synchronized writer. */
+ /* Offset in file corresponding to the first byte of buffer. */
+ my_off_t pos_in_file;
+ /* If a synchronized write cache is the source of the data. */
+ struct st_io_cache *source_cache;
+ uchar *buffer; /* The read buffer. */
+ uchar *read_end; /* Behind last valid byte of buffer. */
+ int running_threads; /* threads not in lock. */
+ int total_threads; /* threads sharing the cache. */
+ int error; /* Last error. */
+} IO_CACHE_SHARE;
+
+typedef struct st_io_cache /* Used when cacheing files */
+{
+ /* Offset in file corresponding to the first byte of uchar* buffer. */
+ my_off_t pos_in_file;
+ /*
+ The offset of end of file for READ_CACHE and WRITE_CACHE.
+ For SEQ_READ_APPEND it the maximum of the actual end of file and
+ the position represented by read_end.
+ */
+ my_off_t end_of_file;
+ /* Points to current read position in the buffer */
+ uchar *read_pos;
+ /* the non-inclusive boundary in the buffer for the currently valid read */
+ uchar *read_end;
+ uchar *buffer; /* The read buffer */
+ /* Used in ASYNC_IO */
+ uchar *request_pos;
+
+ /* Only used in WRITE caches and in SEQ_READ_APPEND to buffer writes */
+ uchar *write_buffer;
+ /*
+ Only used in SEQ_READ_APPEND, and points to the current read position
+ in the write buffer. Note that reads in SEQ_READ_APPEND caches can
+ happen from both read buffer (uchar* buffer) and write buffer
+ (uchar* write_buffer).
+ */
+ uchar *append_read_pos;
+ /* Points to current write position in the write buffer */
+ uchar *write_pos;
+ /* The non-inclusive boundary of the valid write area */
+ uchar *write_end;
+
+ /*
+ Current_pos and current_end are convenience variables used by
+ my_b_tell() and other routines that need to know the current offset
+ current_pos points to &write_pos, and current_end to &write_end in a
+ WRITE_CACHE, and &read_pos and &read_end respectively otherwise
+ */
+ uchar **current_pos, **current_end;
+
+ /*
+ The lock is for append buffer used in SEQ_READ_APPEND cache
+ need mutex copying from append buffer to read buffer.
+ */
+ mysql_mutex_t append_buffer_lock;
+ /*
+ The following is used when several threads are reading the
+ same file in parallel. They are synchronized on disk
+ accesses reading the cached part of the file asynchronously.
+ It should be set to NULL to disable the feature. Only
+ READ_CACHE mode is supported.
+ */
+ IO_CACHE_SHARE *share;
+
+ /*
+ A caller will use my_b_read() macro to read from the cache
+ if the data is already in cache, it will be simply copied with
+ memcpy() and internal variables will be accordinging updated with
+ no functions invoked. However, if the data is not fully in the cache,
+ my_b_read() will call read_function to fetch the data. read_function
+ must never be invoked directly.
+ */
+ int (*read_function)(struct st_io_cache *,uchar *,size_t);
+ /*
+ Same idea as in the case of read_function, except my_b_write() needs to
+ be replaced with my_b_append() for a SEQ_READ_APPEND cache
+ */
+ int (*write_function)(struct st_io_cache *,const uchar *,size_t);
+ /*
+ Specifies the type of the cache. Depending on the type of the cache
+ certain operations might not be available and yield unpredicatable
+ results. Details to be documented later
+ */
+ enum cache_type type;
+ /*
+ Callbacks when the actual read I/O happens. These were added and
+ are currently used for binary logging of LOAD DATA INFILE - when a
+ block is read from the file, we create a block create/append event, and
+ when IO_CACHE is closed, we create an end event. These functions could,
+ of course be used for other things
+ */
+ IO_CACHE_CALLBACK pre_read;
+ IO_CACHE_CALLBACK post_read;
+ IO_CACHE_CALLBACK pre_close;
+ /*
+ Counts the number of times, when we were forced to use disk. We use it to
+ increase the binlog_cache_disk_use and binlog_stmt_cache_disk_use status
+ variables.
+ */
+ ulong disk_writes;
+ void* arg; /* for use by pre/post_read */
+ char *file_name; /* if used with 'open_cached_file' */
+ char *dir,*prefix;
+ File file; /* file descriptor */
+ PSI_file_key file_key; /* instrumented file key */
+
+ /*
+ seek_not_done is set by my_b_seek() to inform the upcoming read/write
+ operation that a seek needs to be preformed prior to the actual I/O
+ error is 0 if the cache operation was successful, -1 if there was a
+ "hard" error, and the actual number of I/O-ed bytes if the read/write was
+ partial.
+ */
+ int seek_not_done,error;
+ /* buffer_length is memory size allocated for buffer or write_buffer */
+ size_t buffer_length;
+ /* read_length is the same as buffer_length except when we use async io */
+ size_t read_length;
+ myf myflags; /* Flags used to my_read/my_write */
+ /*
+ alloced_buffer is 1 if the buffer was allocated by init_io_cache() and
+ 0 if it was supplied by the user.
+ Currently READ_NET is the only one that will use a buffer allocated
+ somewhere else
+ */
+ my_bool alloced_buffer;
+} IO_CACHE;
+
+typedef int (*qsort2_cmp)(const void *, const void *, const void *);
+
+/*
+ Subset of struct stat fields filled by stat/lstat/fstat that uniquely
+ identify a file
+*/
+typedef struct st_file_id
+{
+ dev_t st_dev;
+ ino_t st_ino;
+} ST_FILE_ID;
+
+typedef void (*my_error_reporter)(enum loglevel level, const char *format, ...)
+ MY_ATTRIBUTE((format(printf, 2, 3)));
+
+extern my_error_reporter my_charset_error_reporter;
+
+/* defines for mf_iocache */
+extern PSI_file_key key_file_io_cache;
+
+/* Test if buffer is inited */
+#define my_b_clear(info) (info)->buffer=0
+#define my_b_inited(info) (info)->buffer
+#define my_b_EOF INT_MIN
+
+#define my_b_read(info,Buffer,Count) \
+ ((info)->read_pos + (Count) <= (info)->read_end ?\
+ (memcpy(Buffer,(info)->read_pos,(size_t) (Count)), \
+ ((info)->read_pos+=(Count)),0) :\
+ (*(info)->read_function)((info),Buffer,Count))
+
+#define my_b_write(info,Buffer,Count) \
+ ((info)->write_pos + (Count) <=(info)->write_end ?\
+ (memcpy((info)->write_pos, (Buffer), (size_t)(Count)),\
+ ((info)->write_pos+=(Count)),0) : \
+ (*(info)->write_function)((info),(uchar *)(Buffer),(Count)))
+
+#define my_b_get(info) \
+ ((info)->read_pos != (info)->read_end ?\
+ ((info)->read_pos++, (int) (uchar) (info)->read_pos[-1]) :\
+ _my_b_get(info))
+
+#define my_b_tell(info) ((info)->pos_in_file + \
+ (size_t) (*(info)->current_pos - (info)->request_pos))
+
+#define my_b_get_buffer_start(info) (info)->request_pos
+#define my_b_get_bytes_in_buffer(info) (char*) (info)->read_end - \
+ (char*) my_b_get_buffer_start(info)
+#define my_b_get_pos_in_file(info) (info)->pos_in_file
+
+/* tell write offset in the SEQ_APPEND cache */
+int my_b_copy_to_file(IO_CACHE *cache, FILE *file);
+my_off_t my_b_append_tell(IO_CACHE* info);
+my_off_t my_b_safe_tell(IO_CACHE* info); /* picks the correct tell() */
+
+#define my_b_bytes_in_cache(info) (size_t) (*(info)->current_end - \
+ *(info)->current_pos)
+
+typedef uint32 ha_checksum;
+
+#include
+
+
+ /* Prototypes for mysys and my_func functions */
+
+extern int my_copy(const char *from,const char *to,myf MyFlags);
+extern int my_delete(const char *name,myf MyFlags);
+extern int my_getwd(char * buf,size_t size,myf MyFlags);
+extern int my_setwd(const char *dir,myf MyFlags);
+extern int my_lock(File fd,int op,my_off_t start, my_off_t length,myf MyFlags);
+extern void *my_once_alloc(size_t Size,myf MyFlags);
+extern void my_once_free(void);
+extern char *my_once_strdup(const char *src,myf myflags);
+extern void *my_once_memdup(const void *src, size_t len, myf myflags);
+extern File my_open(const char *FileName,int Flags,myf MyFlags);
+extern File my_register_filename(File fd, const char *FileName,
+ enum file_type type_of_file,
+ uint error_message_number, myf MyFlags);
+extern File my_create(const char *FileName,int CreateFlags,
+ int AccessFlags, myf MyFlags);
+extern int my_close(File Filedes,myf MyFlags);
+extern int my_mkdir(const char *dir, int Flags, myf MyFlags);
+extern int my_readlink(char *to, const char *filename, myf MyFlags);
+extern int my_is_symlink(const char *filename, ST_FILE_ID *file_id);
+extern int my_realpath(char *to, const char *filename, myf MyFlags);
+extern int my_is_same_file(File file, const ST_FILE_ID *file_id);
+extern File my_create_with_symlink(const char *linkname, const char *filename,
+ int createflags, int access_flags,
+ myf MyFlags);
+extern int my_delete_with_symlink(const char *name, myf MyFlags);
+extern int my_rename_with_symlink(const char *from,const char *to,myf MyFlags);
+extern int my_symlink(const char *content, const char *linkname, myf MyFlags);
+extern size_t my_read(File Filedes,uchar *Buffer,size_t Count,myf MyFlags);
+extern size_t my_pread(File Filedes,uchar *Buffer,size_t Count,my_off_t offset,
+ myf MyFlags);
+extern int my_rename(const char *from,const char *to,myf MyFlags);
+extern my_off_t my_seek(File fd,my_off_t pos,int whence,myf MyFlags);
+extern my_off_t my_tell(File fd,myf MyFlags);
+extern size_t my_write(File Filedes,const uchar *Buffer,size_t Count,
+ myf MyFlags);
+extern size_t my_pwrite(File Filedes,const uchar *Buffer,size_t Count,
+ my_off_t offset,myf MyFlags);
+extern size_t my_fread(FILE *stream,uchar *Buffer,size_t Count,myf MyFlags);
+extern size_t my_fwrite(FILE *stream,const uchar *Buffer,size_t Count,
+ myf MyFlags);
+extern my_off_t my_fseek(FILE *stream,my_off_t pos,int whence,myf MyFlags);
+extern my_off_t my_ftell(FILE *stream,myf MyFlags);
+
+/* implemented in my_syslog.c */
+
+// Maximum size of message that will be logged.
+#define MAX_SYSLOG_MESSAGE_SIZE 1024
+
+/* Platform-independent SysLog support */
+
+/* facilities on unixoid syslog. harmless on systemd / Win platforms. */
+typedef struct st_syslog_facility { int id; const char *name; } SYSLOG_FACILITY;
+extern SYSLOG_FACILITY syslog_facility[];
+
+enum my_syslog_options { MY_SYSLOG_PIDS= 1 };
+
+int my_openlog(const char *eventSourceName, int option, int facility);
+int my_closelog();
+int my_syslog(const CHARSET_INFO *cs, enum loglevel level, const char *msg);
+
+/* implemented in my_memmem.c */
+extern void *my_memmem(const void *haystack, size_t haystacklen,
+ const void *needle, size_t needlelen);
+
+
+#ifdef _WIN32
+extern int my_access(const char *path, int amode);
+#else
+#define my_access access
+#endif
+
+extern int check_if_legal_filename(const char *path);
+extern int check_if_legal_tablename(const char *path);
+
+#ifdef _WIN32
+extern my_bool is_filename_allowed(const char *name, size_t length,
+ my_bool allow_current_dir);
+#else /* _WIN32 */
+# define is_filename_allowed(name, length, allow_cwd) (TRUE)
+#endif /* _WIN32 */
+
+#ifdef _WIN32
+extern int nt_share_delete(const char *name,myf MyFlags);
+#define my_delete_allow_opened(fname,flags) nt_share_delete((fname),(flags))
+#else
+#define my_delete_allow_opened(fname,flags) my_delete((fname),(flags))
+#endif
+
+#ifdef _WIN32
+/* Windows-only functions (CRT equivalents)*/
+extern HANDLE my_get_osfhandle(File fd);
+extern void my_osmaperr(unsigned long last_error);
+#endif
+
+extern const char* get_global_errmsg(int nr);
+extern void wait_for_free_space(const char *filename, int errors);
+extern FILE *my_fopen(const char *FileName,int Flags,myf MyFlags);
+extern FILE *my_fdopen(File Filedes,const char *name, int Flags,myf MyFlags);
+extern FILE *my_freopen(const char *path, const char *mode, FILE *stream);
+extern int my_fclose(FILE *fd,myf MyFlags);
+extern File my_fileno(FILE *fd);
+extern int my_chsize(File fd,my_off_t newlength, int filler, myf MyFlags);
+extern void thr_set_sync_wait_callback(void (*before_sync)(void),
+ void (*after_sync)(void));
+extern int my_sync(File fd, myf my_flags);
+extern int my_sync_dir(const char *dir_name, myf my_flags);
+extern int my_sync_dir_by_file(const char *file_name, myf my_flags);
+extern char *my_strerror(char *buf, size_t len, int errnum);
+extern const char *my_get_err_msg(int nr);
+extern void my_error(int nr,myf MyFlags, ...);
+extern void my_printf_error(uint my_err, const char *format,
+ myf MyFlags, ...)
+ MY_ATTRIBUTE((format(printf, 2, 4)));
+extern void my_printv_error(uint error, const char *format, myf MyFlags,
+ va_list ap);
+extern int my_error_register(const char* (*get_errmsg) (int),
+ int first, int last);
+extern my_bool my_error_unregister(int first, int last);
+extern void my_message(uint my_err, const char *str,myf MyFlags);
+extern void my_message_stderr(uint my_err, const char *str, myf MyFlags);
+void my_message_local_stderr(enum loglevel ll,
+ const char *format, va_list args);
+extern void my_message_local(enum loglevel ll, const char *format, ...);
+extern my_bool my_init(void);
+extern void my_end(int infoflag);
+extern int my_redel(const char *from, const char *to, int MyFlags);
+extern int my_copystat(const char *from, const char *to, int MyFlags);
+extern char * my_filename(File fd);
+extern MY_MODE get_file_perm(ulong perm_flags);
+extern my_bool my_chmod(const char *filename, ulong perm_flags, myf my_flags);
+
+#ifdef EXTRA_DEBUG
+void my_print_open_files(void);
+#else
+#define my_print_open_files()
+#endif
+
+extern my_bool init_tmpdir(MY_TMPDIR *tmpdir, const char *pathlist);
+extern char *my_tmpdir(MY_TMPDIR *tmpdir);
+extern void free_tmpdir(MY_TMPDIR *tmpdir);
+
+extern size_t dirname_part(char * to,const char *name, size_t *to_res_length);
+extern size_t dirname_length(const char *name);
+#define base_name(A) (A+dirname_length(A))
+extern int test_if_hard_path(const char *dir_name);
+extern my_bool has_path(const char *name);
+extern char *convert_dirname(char *to, const char *from, const char *from_end);
+extern void to_unix_path(char * name);
+extern char * fn_ext(const char *name);
+extern char * fn_same(char * toname,const char *name,int flag);
+extern char * fn_format(char * to,const char *name,const char *dir,
+ const char *form, uint flag);
+extern size_t strlength(const char *str);
+extern void pack_dirname(char * to,const char *from);
+extern size_t normalize_dirname(char * to, const char *from);
+extern size_t unpack_dirname(char * to,const char *from);
+extern size_t cleanup_dirname(char * to,const char *from);
+extern size_t system_filename(char * to,const char *from);
+extern size_t unpack_filename(char * to,const char *from);
+extern char * intern_filename(char * to,const char *from);
+extern int pack_filename(char * to, const char *name, size_t max_length);
+extern char * my_path(char * to,const char *progname,
+ const char *own_pathname_part);
+extern char * my_load_path(char * to, const char *path,
+ const char *own_path_prefix);
+extern int wild_compare(const char *str,const char *wildstr,
+ pbool str_is_pattern);
+extern my_bool array_append_string_unique(const char *str,
+ const char **array, size_t size);
+extern void get_date(char * to,int timeflag,time_t use_time);
+extern void soundex(CHARSET_INFO *, char * out_pntr, char * in_pntr,
+ pbool remove_garbage);
+
+extern my_bool radixsort_is_appliccable(uint n_items, size_t size_of_element);
+extern void radixsort_for_str_ptr(uchar* base[], uint number_of_elements,
+ size_t size_of_element,uchar *buffer[]);
+extern void my_qsort(void *base_ptr, size_t total_elems, size_t size,
+ qsort_cmp cmp);
+extern void my_qsort2(void *base_ptr, size_t total_elems, size_t size,
+ qsort2_cmp cmp, const void *cmp_argument);
+void my_store_ptr(uchar *buff, size_t pack_length, my_off_t pos);
+my_off_t my_get_ptr(uchar *ptr, size_t pack_length);
+extern int init_io_cache_ext(IO_CACHE *info,File file,size_t cachesize,
+ enum cache_type type,my_off_t seek_offset,
+ pbool use_async_io, myf cache_myflags,
+ PSI_file_key file_key);
+extern int init_io_cache(IO_CACHE *info,File file,size_t cachesize,
+ enum cache_type type,my_off_t seek_offset,
+ pbool use_async_io, myf cache_myflags);
+extern my_bool reinit_io_cache(IO_CACHE *info,enum cache_type type,
+ my_off_t seek_offset,pbool use_async_io,
+ pbool clear_cache);
+extern void setup_io_cache(IO_CACHE* info);
+extern int _my_b_read(IO_CACHE *info,uchar *Buffer,size_t Count);
+extern int _my_b_read_r(IO_CACHE *info,uchar *Buffer,size_t Count);
+extern void init_io_cache_share(IO_CACHE *read_cache, IO_CACHE_SHARE *cshare,
+ IO_CACHE *write_cache, uint num_threads);
+extern void remove_io_thread(IO_CACHE *info);
+extern int _my_b_seq_read(IO_CACHE *info,uchar *Buffer,size_t Count);
+extern int _my_b_net_read(IO_CACHE *info,uchar *Buffer,size_t Count);
+extern int _my_b_get(IO_CACHE *info);
+extern int _my_b_write(IO_CACHE *info,const uchar *Buffer,size_t Count);
+extern int my_b_append(IO_CACHE *info,const uchar *Buffer,size_t Count);
+extern int my_b_safe_write(IO_CACHE *info,const uchar *Buffer,size_t Count);
+
+extern int my_block_write(IO_CACHE *info, const uchar *Buffer,
+ size_t Count, my_off_t pos);
+extern int my_b_flush_io_cache(IO_CACHE *info, int need_append_buffer_lock);
+
+#define flush_io_cache(info) my_b_flush_io_cache((info),1)
+
+extern int end_io_cache(IO_CACHE *info);
+extern size_t my_b_fill(IO_CACHE *info);
+extern void my_b_seek(IO_CACHE *info,my_off_t pos);
+extern size_t my_b_gets(IO_CACHE *info, char *to, size_t max_length);
+extern my_off_t my_b_filelength(IO_CACHE *info);
+extern size_t my_b_printf(IO_CACHE *info, const char* fmt, ...)
+ MY_ATTRIBUTE((format(printf, 2, 3)));
+extern size_t my_b_vprintf(IO_CACHE *info, const char* fmt, va_list ap);
+extern my_bool open_cached_file(IO_CACHE *cache,const char *dir,
+ const char *prefix, size_t cache_size,
+ myf cache_myflags);
+extern my_bool real_open_cached_file(IO_CACHE *cache);
+extern void close_cached_file(IO_CACHE *cache);
+File create_temp_file(char *to, const char *dir, const char *pfx,
+ int mode, myf MyFlags);
+
+// Use Prealloced_array or std::vector or something similar in C++
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern my_bool my_init_dynamic_array(DYNAMIC_ARRAY *array,
+ PSI_memory_key key,
+ uint element_size,
+ void *init_buffer,
+ uint init_alloc,
+ uint alloc_increment);
+/* init_dynamic_array() function is deprecated */
+extern my_bool init_dynamic_array(DYNAMIC_ARRAY *array, uint element_size,
+ uint init_alloc, uint alloc_increment);
+#define dynamic_element(array,array_index,type) \
+ ((type)((array)->buffer) +(array_index))
+
+#ifdef __cplusplus
+}
+#endif
+
+/* Some functions are still in use in C++, because HASH uses DYNAMIC_ARRAY */
+extern my_bool insert_dynamic(DYNAMIC_ARRAY *array, const void *element);
+extern void *alloc_dynamic(DYNAMIC_ARRAY *array);
+extern void *pop_dynamic(DYNAMIC_ARRAY*);
+extern void get_dynamic(DYNAMIC_ARRAY *array, void *element, uint array_index);
+extern void claim_dynamic(DYNAMIC_ARRAY *array);
+extern void delete_dynamic(DYNAMIC_ARRAY *array);
+extern void freeze_size(DYNAMIC_ARRAY *array);
+static inline void reset_dynamic(DYNAMIC_ARRAY *array)
+{
+ array->elements= 0;
+}
+
+extern my_bool init_dynamic_string(DYNAMIC_STRING *str, const char *init_str,
+ size_t init_alloc,size_t alloc_increment);
+extern my_bool dynstr_append(DYNAMIC_STRING *str, const char *append);
+my_bool dynstr_append_mem(DYNAMIC_STRING *str, const char *append,
+ size_t length);
+extern my_bool dynstr_append_os_quoted(DYNAMIC_STRING *str, const char *append,
+ ...);
+extern my_bool dynstr_set(DYNAMIC_STRING *str, const char *init_str);
+extern my_bool dynstr_realloc(DYNAMIC_STRING *str, size_t additional_size);
+extern my_bool dynstr_trunc(DYNAMIC_STRING *str, size_t n);
+extern void dynstr_free(DYNAMIC_STRING *str);
+#define alloc_root_inited(A) ((A)->min_malloc != 0)
+#define ALLOC_ROOT_MIN_BLOCK_SIZE (MALLOC_OVERHEAD + sizeof(USED_MEM) + 8)
+#define clear_alloc_root(A) do { (A)->free= (A)->used= (A)->pre_alloc= 0; (A)->min_malloc=0;} while(0)
+extern void init_alloc_root(PSI_memory_key key,
+ MEM_ROOT *mem_root, size_t block_size,
+ size_t pre_alloc_size);
+extern void *alloc_root(MEM_ROOT *mem_root, size_t Size);
+extern void *multi_alloc_root(MEM_ROOT *mem_root, ...);
+extern void claim_root(MEM_ROOT *root);
+extern void free_root(MEM_ROOT *root, myf MyFLAGS);
+extern void reset_root_defaults(MEM_ROOT *mem_root, size_t block_size,
+ size_t prealloc_size);
+extern char *strdup_root(MEM_ROOT *root,const char *str);
+static inline char *safe_strdup_root(MEM_ROOT *root, const char *str)
+{
+ return str ? strdup_root(root, str) : 0;
+}
+extern char *strmake_root(MEM_ROOT *root,const char *str,size_t len);
+extern void *memdup_root(MEM_ROOT *root,const void *str, size_t len);
+extern void set_memroot_max_capacity(MEM_ROOT *mem_root, size_t size);
+extern void set_memroot_error_reporting(MEM_ROOT *mem_root,
+ my_bool report_error);
+extern my_bool my_compress(uchar *, size_t *, size_t *);
+extern my_bool my_uncompress(uchar *, size_t , size_t *);
+extern uchar *my_compress_alloc(const uchar *packet, size_t *len,
+ size_t *complen);
+extern int packfrm(uchar *, size_t, uchar **, size_t *);
+extern int unpackfrm(uchar **, size_t *, const uchar *);
+
+extern ha_checksum my_checksum(ha_checksum crc, const uchar *mem,
+ size_t count);
+
+/* Wait a given number of microseconds */
+static inline void my_sleep(time_t m_seconds)
+{
+#if defined(_WIN32)
+ Sleep((DWORD)m_seconds/1000+1); /* Sleep() has millisecond arg */
+#else
+ struct timeval t;
+ t.tv_sec= m_seconds / 1000000L;
+ t.tv_usec= m_seconds % 1000000L;
+ select(0,0,0,0,&t); /* sleep */
+#endif
+}
+
+extern ulong crc32(ulong crc, const uchar *buf, uint len);
+extern uint my_set_max_open_files(uint files);
+void my_free_open_file_info(void);
+
+extern time_t my_time(myf flags);
+extern ulonglong my_getsystime(void);
+extern ulonglong my_micro_time();
+extern my_bool my_gethwaddr(uchar *to);
+
+#ifdef HAVE_SYS_MMAN_H
+#include
+
+#ifndef MAP_NOSYNC
+#define MAP_NOSYNC 0
+#endif
+
+/*
+ Not defined in FreeBSD 11.
+ Was never implemented in FreeBSD, so we just set it to 0.
+*/
+#ifndef MAP_NORESERVE
+#define MAP_NORESERVE 0
+#endif
+
+#ifdef HAVE_MMAP64
+#define my_mmap(a,b,c,d,e,f) mmap64(a,b,c,d,e,f)
+#else
+#define my_mmap(a,b,c,d,e,f) mmap(a,b,c,d,e,f)
+#endif
+#define my_munmap(a,b) munmap((a),(b))
+
+#else
+/* not a complete set of mmap() flags, but only those that nesessary */
+#define PROT_READ 1
+#define PROT_WRITE 2
+#define MAP_NORESERVE 0
+#define MAP_SHARED 0x0001
+#define MAP_PRIVATE 0x0002
+#define MAP_NOSYNC 0x0800
+#define MAP_FAILED ((void *)-1)
+#define MS_SYNC 0x0000
+
+void *my_mmap(void *, size_t, int, int, int, my_off_t);
+int my_munmap(void *, size_t);
+#endif
+
+/* my_getpagesize */
+static inline int my_getpagesize()
+{
+#ifndef _WIN32
+ return getpagesize();
+#else
+ SYSTEM_INFO si;
+ GetSystemInfo(&si);
+ return (int)si.dwPageSize;
+#endif
+}
+
+int my_msync(int, void *, size_t, int);
+
+/* character sets */
+extern void my_charset_loader_init_mysys(MY_CHARSET_LOADER *loader);
+extern uint get_charset_number(const char *cs_name, uint cs_flags);
+extern uint get_collation_number(const char *name);
+extern const char *get_charset_name(uint cs_number);
+
+extern CHARSET_INFO *get_charset(uint cs_number, myf flags);
+extern CHARSET_INFO *get_charset_by_name(const char *cs_name, myf flags);
+extern CHARSET_INFO *my_collation_get_by_name(MY_CHARSET_LOADER *loader,
+ const char *name, myf flags);
+extern CHARSET_INFO *get_charset_by_csname(const char *cs_name,
+ uint cs_flags, myf my_flags);
+extern CHARSET_INFO *my_charset_get_by_name(MY_CHARSET_LOADER *loader,
+ const char *name,
+ uint cs_flags, myf my_flags);
+extern my_bool resolve_charset(const char *cs_name,
+ const CHARSET_INFO *default_cs,
+ const CHARSET_INFO **cs);
+extern my_bool resolve_collation(const char *cl_name,
+ const CHARSET_INFO *default_cl,
+ const CHARSET_INFO **cl);
+extern void free_charsets(void);
+extern char *get_charsets_dir(char *buf);
+extern my_bool my_charset_same(const CHARSET_INFO *cs1,
+ const CHARSET_INFO *cs2);
+extern my_bool init_compiled_charsets(myf flags);
+extern void add_compiled_collation(CHARSET_INFO *cs);
+extern size_t escape_string_for_mysql(const CHARSET_INFO *charset_info,
+ char *to, size_t to_length,
+ const char *from, size_t length);
+#ifdef _WIN32
+/* File system character set */
+extern CHARSET_INFO *fs_character_set(void);
+#endif
+extern size_t escape_quotes_for_mysql(CHARSET_INFO *charset_info,
+ char *to, size_t to_length,
+ const char *from, size_t length, char quote);
+#ifdef _WIN32
+extern my_bool have_tcpip; /* Is set if tcpip is used */
+
+/* implemented in my_windac.c */
+
+int my_security_attr_create(SECURITY_ATTRIBUTES **psa, const char **perror,
+ DWORD owner_rights, DWORD everybody_rights);
+
+void my_security_attr_free(SECURITY_ATTRIBUTES *sa);
+
+/* implemented in my_conio.c */
+my_bool my_win_is_console(FILE *file);
+char *my_win_console_readline(const CHARSET_INFO *cs, char *mbbuf, size_t mbbufsize,
+ size_t *nread);
+void my_win_console_write(const CHARSET_INFO *cs, const char *data, size_t datalen);
+void my_win_console_fputs(const CHARSET_INFO *cs, const char *data);
+void my_win_console_putc(const CHARSET_INFO *cs, int c);
+void my_win_console_vfprintf(const CHARSET_INFO *cs, const char *fmt, va_list args);
+int my_win_translate_command_line_args(const CHARSET_INFO *cs, int *ac, char ***av);
+#endif /* _WIN32 */
+
+#ifdef HAVE_PSI_INTERFACE
+extern MYSQL_PLUGIN_IMPORT struct PSI_bootstrap *PSI_hook;
+extern void set_psi_server(PSI *psi);
+void my_init_mysys_psi_keys(void);
+#endif
+
+struct st_mysql_file;
+extern struct st_mysql_file *mysql_stdin;
+
+C_MODE_END
+#endif /* _my_sys_h */
diff --git a/db/include/my_thread.h b/db/include/my_thread.h
new file mode 100644
index 0000000..be95301
--- /dev/null
+++ b/db/include/my_thread.h
@@ -0,0 +1,199 @@
+/* Copyright (c) 2000, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 Street, Fifth Floor, Boston, MA 02110-1301, USA */
+
+/* Defines to make different thread packages compatible */
+
+#ifndef MY_THREAD_INCLUDED
+#define MY_THREAD_INCLUDED
+
+#include "my_global.h" /* my_bool */
+
+#if !defined(_WIN32)
+#include
+#endif
+
+#ifndef ETIME
+#define ETIME ETIMEDOUT /* For FreeBSD */
+#endif
+
+#ifndef ETIMEDOUT
+#define ETIMEDOUT 145 /* Win32 doesn't have this */
+#endif
+
+/*
+ MySQL can survive with 32K, but some glibc libraries require > 128K stack
+ To resolve hostnames. Also recursive stored procedures needs stack.
+*/
+#if defined(__sparc) && (defined(__SUNPRO_CC) || defined(__SUNPRO_C))
+#define STACK_MULTIPLIER 2UL
+#else
+#define STACK_MULTIPLIER 1UL
+#endif
+
+#if SIZEOF_CHARP > 4
+#define DEFAULT_THREAD_STACK (STACK_MULTIPLIER * 256UL * 1024UL)
+#else
+#define DEFAULT_THREAD_STACK (STACK_MULTIPLIER * 192UL * 1024UL)
+#endif
+
+#ifdef __cplusplus
+#define EXTERNC extern "C"
+#else
+#define EXTERNC
+#endif
+
+C_MODE_START
+
+#ifdef _WIN32
+typedef volatile LONG my_thread_once_t;
+typedef DWORD my_thread_t;
+typedef struct thread_attr
+{
+ DWORD dwStackSize;
+ int detachstate;
+} my_thread_attr_t;
+#define MY_THREAD_CREATE_JOINABLE 0
+#define MY_THREAD_CREATE_DETACHED 1
+typedef void * (__cdecl *my_start_routine)(void *);
+#define MY_THREAD_ONCE_INIT 0
+#define MY_THREAD_ONCE_INPROGRESS 1
+#define MY_THREAD_ONCE_DONE 2
+#else
+typedef pthread_once_t my_thread_once_t;
+typedef pthread_t my_thread_t;
+typedef pthread_attr_t my_thread_attr_t;
+#define MY_THREAD_CREATE_JOINABLE PTHREAD_CREATE_JOINABLE
+#define MY_THREAD_CREATE_DETACHED PTHREAD_CREATE_DETACHED
+typedef void *(* my_start_routine)(void *);
+#define MY_THREAD_ONCE_INIT PTHREAD_ONCE_INIT
+#endif
+
+typedef struct st_my_thread_handle
+{
+ my_thread_t thread;
+#ifdef _WIN32
+ HANDLE handle;
+#endif
+} my_thread_handle;
+
+int my_thread_once(my_thread_once_t *once_control, void (*init_routine)(void));
+
+static inline my_thread_t my_thread_self()
+{
+#ifdef _WIN32
+ return GetCurrentThreadId();
+#else
+ return pthread_self();
+#endif
+}
+
+static inline int my_thread_equal(my_thread_t t1, my_thread_t t2)
+{
+#ifdef _WIN32
+ return t1 == t2;
+#else
+ return pthread_equal(t1, t2);
+#endif
+}
+
+static inline int my_thread_attr_init(my_thread_attr_t *attr)
+{
+#ifdef _WIN32
+ attr->dwStackSize= 0;
+ /* Set to joinable by default to match Linux */
+ attr->detachstate= MY_THREAD_CREATE_JOINABLE;
+ return 0;
+#else
+ return pthread_attr_init(attr);
+#endif
+}
+
+static inline int my_thread_attr_destroy(my_thread_attr_t *attr)
+{
+#ifdef _WIN32
+ attr->dwStackSize= 0;
+ /* Set to joinable by default to match Linux */
+ attr->detachstate= MY_THREAD_CREATE_JOINABLE;
+ return 0;
+#else
+ return pthread_attr_destroy(attr);
+#endif
+}
+
+static inline int my_thread_attr_setstacksize(my_thread_attr_t *attr,
+ size_t stacksize)
+{
+#ifdef _WIN32
+ attr->dwStackSize= (DWORD)stacksize;
+ return 0;
+#else
+ return pthread_attr_setstacksize(attr, stacksize);
+#endif
+}
+
+static inline int my_thread_attr_setdetachstate(my_thread_attr_t *attr,
+ int detachstate)
+{
+#ifdef _WIN32
+ attr->detachstate= detachstate;
+ return 0;
+#else
+ return pthread_attr_setdetachstate(attr, detachstate);
+#endif
+}
+
+static inline int my_thread_attr_getstacksize(my_thread_attr_t *attr,
+ size_t *stacksize)
+{
+#ifdef _WIN32
+ *stacksize= (size_t)attr->dwStackSize;
+ return 0;
+#else
+ return pthread_attr_getstacksize(attr, stacksize);
+#endif
+}
+
+static inline void my_thread_yield()
+{
+#ifdef _WIN32
+ SwitchToThread();
+#else
+ sched_yield();
+#endif
+}
+
+int my_thread_create(my_thread_handle *thread, const my_thread_attr_t *attr,
+ my_start_routine func, void *arg);
+int my_thread_join(my_thread_handle *thread, void **value_ptr);
+int my_thread_cancel(my_thread_handle *thread);
+void my_thread_exit(void *value_ptr);
+
+
+extern my_bool my_thread_global_init();
+extern void my_thread_global_reinit();
+extern void my_thread_global_end();
+extern my_bool my_thread_init();
+extern void my_thread_end();
+
+C_MODE_END
+
+#endif /* MY_THREAD_INCLUDED */
diff --git a/db/include/my_thread_local.h b/db/include/my_thread_local.h
new file mode 100644
index 0000000..03ebadc
--- /dev/null
+++ b/db/include/my_thread_local.h
@@ -0,0 +1,114 @@
+/* Copyright (c) 2000, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 MY_THREAD_LOCAL_INCLUDED
+#define MY_THREAD_LOCAL_INCLUDED
+
+#ifndef _WIN32
+#include
+#endif
+
+struct _db_code_state_;
+typedef uint32 my_thread_id;
+
+C_MODE_START
+
+#ifdef _WIN32
+typedef DWORD thread_local_key_t;
+#else
+typedef pthread_key_t thread_local_key_t;
+#endif
+
+static inline int my_create_thread_local_key(thread_local_key_t *key,
+ void (*destructor)(void *))
+{
+#ifdef _WIN32
+ *key= TlsAlloc();
+ return (*key == TLS_OUT_OF_INDEXES);
+#else
+ return pthread_key_create(key, destructor);
+#endif
+}
+
+static inline int my_delete_thread_local_key(thread_local_key_t key)
+{
+#ifdef _WIN32
+ return !TlsFree(key);
+#else
+ return pthread_key_delete(key);
+#endif
+}
+
+static inline void* my_get_thread_local(thread_local_key_t key)
+{
+#ifdef _WIN32
+ return TlsGetValue(key);
+#else
+ return pthread_getspecific(key);
+#endif
+}
+
+static inline int my_set_thread_local(thread_local_key_t key,
+ void *value)
+{
+#ifdef _WIN32
+ return !TlsSetValue(key, value);
+#else
+ return pthread_setspecific(key, value);
+#endif
+}
+
+/**
+ Retrieve the MySQL thread-local storage variant of errno.
+*/
+int my_errno();
+
+/**
+ Set the MySQL thread-local storage variant of errno.
+*/
+void set_my_errno(int my_errno);
+
+#ifdef _WIN32
+/*
+ thr_winerr is used for returning the original OS error-code in Windows,
+ my_osmaperr() returns EINVAL for all unknown Windows errors, hence we
+ preserve the original Windows Error code in thr_winerr.
+*/
+int thr_winerr();
+
+void set_thr_winerr(int winerr);
+
+#endif
+
+#ifndef NDEBUG
+/* Return pointer to DBUG for holding current state */
+struct _db_code_state_ **my_thread_var_dbug();
+
+my_thread_id my_thread_var_id();
+
+void set_my_thread_var_id(my_thread_id id);
+
+#endif
+
+C_MODE_END
+
+#endif // MY_THREAD_LOCAL_INCLUDED
diff --git a/db/include/my_xml.h b/db/include/my_xml.h
new file mode 100644
index 0000000..f623c1c
--- /dev/null
+++ b/db/include/my_xml.h
@@ -0,0 +1,103 @@
+/* Copyright (c) 2000, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 Street, Fifth Floor, Boston, MA 02110-1301, USA */
+
+
+#ifndef _my_xml_h
+#define _my_xml_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#define MY_XML_OK 0
+#define MY_XML_ERROR 1
+
+/*
+ A flag whether to use absolute tag names in call-back functions,
+ like "a", "a.b" and "a.b.c" (used in character set file parser),
+ or relative names like "a", "b" and "c".
+*/
+#define MY_XML_FLAG_RELATIVE_NAMES 1
+
+/*
+ A flag whether to skip normilization of text values before calling
+ call-back functions: i.e. skip leading/trailing spaces,
+ \r, \n, \t characters.
+*/
+#define MY_XML_FLAG_SKIP_TEXT_NORMALIZATION 2
+
+enum my_xml_node_type
+{
+ MY_XML_NODE_TAG, /* can have TAG, ATTR and TEXT children */
+ MY_XML_NODE_ATTR, /* can have TEXT children */
+ MY_XML_NODE_TEXT /* cannot have children */
+};
+
+typedef struct xml_stack_st
+{
+ int flags;
+ enum my_xml_node_type current_node_type;
+ char errstr[128];
+
+ struct {
+ char static_buffer[128];
+ char *buffer;
+ size_t buffer_size;
+ char *start;
+ char *end;
+ } attr;
+
+ const char *beg;
+ const char *cur;
+ const char *end;
+ void *user_data;
+ int (*enter)(struct xml_stack_st *st,const char *val, size_t len);
+ int (*value)(struct xml_stack_st *st,const char *val, size_t len);
+ int (*leave_xml)(struct xml_stack_st *st,const char *val, size_t len);
+} MY_XML_PARSER;
+
+void my_xml_parser_create(MY_XML_PARSER *st);
+void my_xml_parser_free(MY_XML_PARSER *st);
+int my_xml_parse(MY_XML_PARSER *st,const char *str, size_t len);
+
+void my_xml_set_value_handler(MY_XML_PARSER *st, int (*)(MY_XML_PARSER *,
+ const char *,
+ size_t len));
+void my_xml_set_enter_handler(MY_XML_PARSER *st, int (*)(MY_XML_PARSER *,
+ const char *,
+ size_t len));
+void my_xml_set_leave_handler(MY_XML_PARSER *st, int (*)(MY_XML_PARSER *,
+ const char *,
+ size_t len));
+void my_xml_set_user_data(MY_XML_PARSER *st, void *);
+
+size_t my_xml_error_pos(MY_XML_PARSER *st);
+uint my_xml_error_lineno(MY_XML_PARSER *st);
+
+const char *my_xml_error_string(MY_XML_PARSER *st);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _my_xml_h */
diff --git a/db/include/mysql.h b/db/include/mysql.h
index 54f0a42..40f15c9 100644
--- a/db/include/mysql.h
+++ b/db/include/mysql.h
@@ -25,8 +25,7 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
-/**
- @file include/mysql.h
+/*
This file defines the client API to MySQL and also the ABI of the
dynamically linked libmysqlclient.
@@ -39,22 +38,23 @@
#ifndef _mysql_h
#define _mysql_h
-#ifndef MYSQL_ABI_CHECK
-#include
-#include
-#include
-#include
+#ifdef __cplusplus
+extern "C" {
#endif
-// Legacy definition for the benefit of old code. Use uint64_t in new code.
-// If you get warnings from printf, use the PRIu64 macro, or, if you need
-// compatibility with older versions of the client library, cast
-// before printing.
-typedef uint64_t my_ulonglong;
+#ifndef MY_GLOBAL_INCLUDED /* If not standard header */
+#ifndef MYSQL_ABI_CHECK
+#include
+#endif
+typedef char my_bool;
+#if !defined(_WIN32)
+#define STDCALL
+#else
+#define STDCALL __stdcall
+#endif
#ifndef my_socket_defined
-#define my_socket_defined
-#if defined(_WIN32) && !defined(MYSQL_ABI_CHECK)
+#ifdef _WIN32
#include
#ifdef WIN32_LEAN_AND_MEAN
#include
@@ -62,71 +62,46 @@ typedef uint64_t my_ulonglong;
#define my_socket SOCKET
#else
typedef int my_socket;
-#endif /* _WIN32 && ! MYSQL_ABI_CHECK */
+#endif /* _WIN32 */
#endif /* my_socket_defined */
+#endif /* MY_GLOBAL_INCLUDED */
-// Small extra definition to avoid pulling in my_compiler.h in client code.
-// IWYU pragma: no_include "my_compiler.h"
-#ifndef MY_COMPILER_INCLUDED
-#if !defined(_WIN32) || defined(MYSQL_ABI_CHECK)
-#define STDCALL
-#else
-#define STDCALL __stdcall
-#endif
-#endif /* MY_COMPILER_INCLUDED */
-
-#include "field_types.h"
-#include "my_list.h"
+#include "mysql_version.h"
#include "mysql_com.h"
+#include "mysql_time.h"
+
+#include "my_list.h" /* for LISTs used in 'MYSQL' and 'MYSQL_STMT' */
/* Include declarations of plug-in API */
-#include "mysql/client_plugin.h" // IWYU pragma: keep
-
-/*
- The client should be able to know which version it is compiled against,
- even if mysql.h doesn't use this information directly.
-*/
-#include "mysql_version.h" // IWYU pragma: keep
-
-// MYSQL_TIME is part of our public API.
-#include "mysql_time.h" // IWYU pragma: keep
-
-// The error messages are part of our public API.
-#include "errmsg.h" // IWYU pragma: keep
-
-#ifdef __cplusplus
-extern "C" {
-#endif
+#include "mysql/client_plugin.h"
extern unsigned int mysql_port;
extern char *mysql_unix_port;
-#define CLIENT_NET_RETRY_COUNT 1 /* Retry count */
-#define CLIENT_NET_READ_TIMEOUT 365 * 24 * 3600 /* Timeout on read */
-#define CLIENT_NET_WRITE_TIMEOUT 365 * 24 * 3600 /* Timeout on write */
+#define CLIENT_NET_READ_TIMEOUT 365*24*3600 /* Timeout on read */
+#define CLIENT_NET_WRITE_TIMEOUT 365*24*3600 /* Timeout on write */
-#define IS_PRI_KEY(n) ((n)&PRI_KEY_FLAG)
-#define IS_NOT_NULL(n) ((n)&NOT_NULL_FLAG)
-#define IS_BLOB(n) ((n)&BLOB_FLAG)
+#define IS_PRI_KEY(n) ((n) & PRI_KEY_FLAG)
+#define IS_NOT_NULL(n) ((n) & NOT_NULL_FLAG)
+#define IS_BLOB(n) ((n) & BLOB_FLAG)
/**
Returns true if the value is a number which does not need quotes for
the sql_lex.cc parser to parse correctly.
*/
-#define IS_NUM(t) \
- (((t) <= MYSQL_TYPE_INT24 && (t) != MYSQL_TYPE_TIMESTAMP) || \
- (t) == MYSQL_TYPE_YEAR || (t) == MYSQL_TYPE_NEWDECIMAL)
+#define IS_NUM(t) (((t) <= MYSQL_TYPE_INT24 && (t) != MYSQL_TYPE_TIMESTAMP) || (t) == MYSQL_TYPE_YEAR || (t) == MYSQL_TYPE_NEWDECIMAL)
#define IS_LONGDATA(t) ((t) >= MYSQL_TYPE_TINY_BLOB && (t) <= MYSQL_TYPE_STRING)
-typedef struct MYSQL_FIELD {
- char *name; /* Name of column */
- char *org_name; /* Original column name, if an alias */
- char *table; /* Table of column if column was a field */
- char *org_table; /* Org table name, if table was an alias */
- char *db; /* Database for table */
- char *catalog; /* Catalog for table */
- char *def; /* Default value (set by mysql_list_fields) */
- unsigned long length; /* Width of column (create length) */
- unsigned long max_length; /* Max width for selected set */
+
+typedef struct st_mysql_field {
+ char *name; /* Name of column */
+ char *org_name; /* Original column name, if an alias */
+ char *table; /* Table of column if column was a field */
+ char *org_table; /* Org table name, if table was an alias */
+ char *db; /* Database for table */
+ char *catalog; /* Catalog for table */
+ char *def; /* Default value (set by mysql_list_fields) */
+ unsigned long length; /* Width of column (create length) */
+ unsigned long max_length; /* Max width for selected set */
unsigned int name_length;
unsigned int org_name_length;
unsigned int table_length;
@@ -141,107 +116,116 @@ typedef struct MYSQL_FIELD {
void *extension;
} MYSQL_FIELD;
-typedef char **MYSQL_ROW; /* return data as array of strings */
+typedef char **MYSQL_ROW; /* return data as array of strings */
typedef unsigned int MYSQL_FIELD_OFFSET; /* offset to current field */
-#define MYSQL_COUNT_ERROR (~(uint64_t)0)
+#ifndef MY_GLOBAL_INCLUDED
+#if defined (_WIN32)
+typedef unsigned __int64 my_ulonglong;
+#else
+typedef unsigned long long my_ulonglong;
+#endif
+#endif
+
+#include "typelib.h"
+
+#define MYSQL_COUNT_ERROR (~(my_ulonglong) 0)
/* backward compatibility define - to be removed eventually */
#define ER_WARN_DATA_TRUNCATED WARN_DATA_TRUNCATED
-typedef struct MYSQL_ROWS {
- struct MYSQL_ROWS *next; /* list of rows */
+typedef struct st_mysql_rows {
+ struct st_mysql_rows *next; /* list of rows */
MYSQL_ROW data;
unsigned long length;
} MYSQL_ROWS;
-typedef MYSQL_ROWS *MYSQL_ROW_OFFSET; /* offset to current row */
+typedef MYSQL_ROWS *MYSQL_ROW_OFFSET; /* offset to current row */
-struct MEM_ROOT;
+#include "my_alloc.h"
-typedef struct MYSQL_DATA {
+typedef struct embedded_query_result EMBEDDED_QUERY_RESULT;
+typedef struct st_mysql_data {
MYSQL_ROWS *data;
- struct MEM_ROOT *alloc;
- uint64_t rows;
+ struct embedded_query_result *embedded_info;
+ MEM_ROOT alloc;
+ my_ulonglong rows;
unsigned int fields;
+ /* extra info for embedded library */
+ void *extension;
} MYSQL_DATA;
-enum mysql_option {
- MYSQL_OPT_CONNECT_TIMEOUT,
- MYSQL_OPT_COMPRESS,
- MYSQL_OPT_NAMED_PIPE,
- MYSQL_INIT_COMMAND,
- MYSQL_READ_DEFAULT_FILE,
- MYSQL_READ_DEFAULT_GROUP,
- MYSQL_SET_CHARSET_DIR,
- MYSQL_SET_CHARSET_NAME,
- MYSQL_OPT_LOCAL_INFILE,
- MYSQL_OPT_PROTOCOL,
- MYSQL_SHARED_MEMORY_BASE_NAME,
- MYSQL_OPT_READ_TIMEOUT,
- MYSQL_OPT_WRITE_TIMEOUT,
- MYSQL_OPT_USE_RESULT,
- MYSQL_REPORT_DATA_TRUNCATION,
- MYSQL_OPT_RECONNECT,
- MYSQL_PLUGIN_DIR,
- MYSQL_DEFAULT_AUTH,
+enum mysql_option
+{
+ MYSQL_OPT_CONNECT_TIMEOUT, MYSQL_OPT_COMPRESS, MYSQL_OPT_NAMED_PIPE,
+ MYSQL_INIT_COMMAND, MYSQL_READ_DEFAULT_FILE, MYSQL_READ_DEFAULT_GROUP,
+ MYSQL_SET_CHARSET_DIR, MYSQL_SET_CHARSET_NAME, MYSQL_OPT_LOCAL_INFILE,
+ MYSQL_OPT_PROTOCOL, MYSQL_SHARED_MEMORY_BASE_NAME, MYSQL_OPT_READ_TIMEOUT,
+ MYSQL_OPT_WRITE_TIMEOUT, MYSQL_OPT_USE_RESULT,
+ MYSQL_OPT_USE_REMOTE_CONNECTION, MYSQL_OPT_USE_EMBEDDED_CONNECTION,
+ MYSQL_OPT_GUESS_CONNECTION, MYSQL_SET_CLIENT_IP, MYSQL_SECURE_AUTH,
+ MYSQL_REPORT_DATA_TRUNCATION, MYSQL_OPT_RECONNECT,
+ MYSQL_OPT_SSL_VERIFY_SERVER_CERT, MYSQL_PLUGIN_DIR, MYSQL_DEFAULT_AUTH,
MYSQL_OPT_BIND,
- MYSQL_OPT_SSL_KEY,
- MYSQL_OPT_SSL_CERT,
- MYSQL_OPT_SSL_CA,
- MYSQL_OPT_SSL_CAPATH,
- MYSQL_OPT_SSL_CIPHER,
- MYSQL_OPT_SSL_CRL,
- MYSQL_OPT_SSL_CRLPATH,
- MYSQL_OPT_CONNECT_ATTR_RESET,
- MYSQL_OPT_CONNECT_ATTR_ADD,
+ MYSQL_OPT_SSL_KEY, MYSQL_OPT_SSL_CERT,
+ MYSQL_OPT_SSL_CA, MYSQL_OPT_SSL_CAPATH, MYSQL_OPT_SSL_CIPHER,
+ MYSQL_OPT_SSL_CRL, MYSQL_OPT_SSL_CRLPATH,
+ MYSQL_OPT_CONNECT_ATTR_RESET, MYSQL_OPT_CONNECT_ATTR_ADD,
MYSQL_OPT_CONNECT_ATTR_DELETE,
MYSQL_SERVER_PUBLIC_KEY,
MYSQL_ENABLE_CLEARTEXT_PLUGIN,
MYSQL_OPT_CAN_HANDLE_EXPIRED_PASSWORDS,
- MYSQL_OPT_MAX_ALLOWED_PACKET,
- MYSQL_OPT_NET_BUFFER_LENGTH,
+ MYSQL_OPT_SSL_ENFORCE,
+ MYSQL_OPT_MAX_ALLOWED_PACKET, MYSQL_OPT_NET_BUFFER_LENGTH,
MYSQL_OPT_TLS_VERSION,
MYSQL_OPT_SSL_MODE,
- MYSQL_OPT_GET_SERVER_PUBLIC_KEY,
- MYSQL_OPT_RETRY_COUNT,
- MYSQL_OPT_OPTIONAL_RESULTSET_METADATA,
- MYSQL_OPT_SSL_FIPS_MODE,
- MYSQL_OPT_TLS_CIPHERSUITES,
- MYSQL_OPT_COMPRESSION_ALGORITHMS,
- MYSQL_OPT_ZSTD_COMPRESSION_LEVEL,
- MYSQL_OPT_LOAD_DATA_LOCAL_DIR,
- MYSQL_OPT_USER_PASSWORD,
- MYSQL_OPT_SSL_SESSION_DATA
+ MYSQL_OPT_GET_SERVER_PUBLIC_KEY
};
/**
@todo remove the "extension", move st_mysql_options completely
out of mysql.h
*/
-struct st_mysql_options_extention;
+struct st_mysql_options_extention;
struct st_mysql_options {
unsigned int connect_timeout, read_timeout, write_timeout;
unsigned int port, protocol;
unsigned long client_flag;
- char *host, *user, *password, *unix_socket, *db;
- struct Init_commands_array *init_commands;
- char *my_cnf_file, *my_cnf_group, *charset_dir, *charset_name;
- char *ssl_key; /* PEM key file */
- char *ssl_cert; /* PEM cert file */
- char *ssl_ca; /* PEM CA file */
- char *ssl_capath; /* PEM directory of CA-s? */
- char *ssl_cipher; /* cipher to use */
+ char *host,*user,*password,*unix_socket,*db;
+ struct st_dynamic_array *init_commands;
+ char *my_cnf_file,*my_cnf_group, *charset_dir, *charset_name;
+ char *ssl_key; /* PEM key file */
+ char *ssl_cert; /* PEM cert file */
+ char *ssl_ca; /* PEM CA file */
+ char *ssl_capath; /* PEM directory of CA-s? */
+ char *ssl_cipher; /* cipher to use */
char *shared_memory_base_name;
unsigned long max_allowed_packet;
- bool compress, named_pipe;
- /**
- The local address to bind when connecting to remote server.
- */
- char *bind_address;
+ my_bool use_ssl; /* Deprecated ! Former use_ssl */
+ my_bool compress,named_pipe;
+ my_bool unused1;
+ my_bool unused2;
+ my_bool unused3;
+ my_bool unused4;
+ enum mysql_option methods_to_use;
+ union {
+ /*
+ The ip/hostname to use when authenticating
+ client against embedded server built with
+ grant tables - only used in embedded server
+ */
+ char *client_ip;
+
+ /*
+ The local address to bind when connecting to
+ remote server - not used in embedded server
+ */
+ char *bind_address;
+ } ci;
+ my_bool unused5;
/* 0 - never report, 1 - always report (default) */
- bool report_data_truncation;
+ my_bool report_data_truncation;
/* function pointers for local infile support */
int (*local_infile_init)(void **, const char *, void *);
@@ -252,153 +236,106 @@ struct st_mysql_options {
struct st_mysql_options_extention *extension;
};
-enum mysql_status {
- MYSQL_STATUS_READY,
- MYSQL_STATUS_GET_RESULT,
- MYSQL_STATUS_USE_RESULT,
+enum mysql_status
+{
+ MYSQL_STATUS_READY, MYSQL_STATUS_GET_RESULT, MYSQL_STATUS_USE_RESULT,
MYSQL_STATUS_STATEMENT_GET_RESULT
};
-enum mysql_protocol_type {
- MYSQL_PROTOCOL_DEFAULT,
- MYSQL_PROTOCOL_TCP,
- MYSQL_PROTOCOL_SOCKET,
- MYSQL_PROTOCOL_PIPE,
- MYSQL_PROTOCOL_MEMORY
+enum mysql_protocol_type
+{
+ MYSQL_PROTOCOL_DEFAULT, MYSQL_PROTOCOL_TCP, MYSQL_PROTOCOL_SOCKET,
+ MYSQL_PROTOCOL_PIPE, MYSQL_PROTOCOL_MEMORY
};
-enum mysql_ssl_mode {
- SSL_MODE_DISABLED = 1,
- SSL_MODE_PREFERRED,
- SSL_MODE_REQUIRED,
- SSL_MODE_VERIFY_CA,
- SSL_MODE_VERIFY_IDENTITY
+enum mysql_ssl_mode
+{
+ SSL_MODE_DISABLED= 1, SSL_MODE_PREFERRED, SSL_MODE_REQUIRED,
+ SSL_MODE_VERIFY_CA, SSL_MODE_VERIFY_IDENTITY
};
-enum mysql_ssl_fips_mode {
- SSL_FIPS_MODE_OFF = 0,
- SSL_FIPS_MODE_ON = 1,
- SSL_FIPS_MODE_STRICT
-};
-
-typedef struct character_set {
- unsigned int number; /* character set number */
- unsigned int state; /* character set state */
- const char *csname; /* character set name */
- const char *name; /* collation name */
- const char *comment; /* comment */
- const char *dir; /* character set directory */
- unsigned int mbminlen; /* min. length for multibyte strings */
- unsigned int mbmaxlen; /* max. length for multibyte strings */
+typedef struct character_set
+{
+ unsigned int number; /* character set number */
+ unsigned int state; /* character set state */
+ const char *csname; /* collation name */
+ const char *name; /* character set name */
+ const char *comment; /* comment */
+ const char *dir; /* character set directory */
+ unsigned int mbminlen; /* min. length for multibyte strings */
+ unsigned int mbmaxlen; /* max. length for multibyte strings */
} MY_CHARSET_INFO;
-struct MYSQL_METHODS;
-struct MYSQL_STMT;
+struct st_mysql_methods;
+struct st_mysql_stmt;
-typedef struct MYSQL {
- NET net; /* Communication parameters */
- unsigned char *connector_fd; /* ConnectorFd for SSL */
- char *host, *user, *passwd, *unix_socket, *server_version, *host_info;
- char *info, *db;
- struct CHARSET_INFO *charset;
- MYSQL_FIELD *fields;
- struct MEM_ROOT *field_alloc;
- uint64_t affected_rows;
- uint64_t insert_id; /* id if insert on table with NEXTNR */
- uint64_t extra_info; /* Not used */
- unsigned long thread_id; /* Id for connection in server */
+typedef struct st_mysql
+{
+ NET net; /* Communication parameters */
+ unsigned char *connector_fd; /* ConnectorFd for SSL */
+ char *host,*user,*passwd,*unix_socket,*server_version,*host_info;
+ char *info, *db;
+ struct charset_info_st *charset;
+ MYSQL_FIELD *fields;
+ MEM_ROOT field_alloc;
+ my_ulonglong affected_rows;
+ my_ulonglong insert_id; /* id if insert on table with NEXTNR */
+ my_ulonglong extra_info; /* Not used */
+ unsigned long thread_id; /* Id for connection in server */
unsigned long packet_length;
- unsigned int port;
- unsigned long client_flag, server_capabilities;
- unsigned int protocol_version;
- unsigned int field_count;
- unsigned int server_status;
- unsigned int server_language;
- unsigned int warning_count;
+ unsigned int port;
+ unsigned long client_flag,server_capabilities;
+ unsigned int protocol_version;
+ unsigned int field_count;
+ unsigned int server_status;
+ unsigned int server_language;
+ unsigned int warning_count;
struct st_mysql_options options;
enum mysql_status status;
- enum enum_resultset_metadata resultset_metadata;
- bool free_me; /* If free in mysql_close */
- bool reconnect; /* set to 1 if automatic reconnect */
+ my_bool free_me; /* If free in mysql_close */
+ my_bool reconnect; /* set to 1 if automatic reconnect */
/* session-wide random string */
- char scramble[SCRAMBLE_LENGTH + 1];
+ char scramble[SCRAMBLE_LENGTH+1];
+ my_bool unused1;
+ void *unused2, *unused3, *unused4, *unused5;
- LIST *stmts; /* list of all statements */
- const struct MYSQL_METHODS *methods;
+ LIST *stmts; /* list of all statements */
+ const struct st_mysql_methods *methods;
void *thd;
/*
- Points to boolean flag in MYSQL_RES or MYSQL_STMT. We set this flag
+ Points to boolean flag in MYSQL_RES or MYSQL_STMT. We set this flag
from mysql_stmt_close if close had to cancel result set of this object.
*/
- bool *unbuffered_fetch_owner;
+ my_bool *unbuffered_fetch_owner;
+ /* needed for embedded server - no net buffer to store the 'info' */
+ char *info_buffer;
void *extension;
} MYSQL;
-typedef struct MYSQL_RES {
- uint64_t row_count;
- MYSQL_FIELD *fields;
- struct MYSQL_DATA *data;
- MYSQL_ROWS *data_cursor;
- unsigned long *lengths; /* column lengths of current row */
- MYSQL *handle; /* for unbuffered reads */
- const struct MYSQL_METHODS *methods;
- MYSQL_ROW row; /* If unbuffered read */
- MYSQL_ROW current_row; /* buffer to current row */
- struct MEM_ROOT *field_alloc;
- unsigned int field_count, current_field;
- bool eof; /* Used by mysql_fetch_row */
+
+typedef struct st_mysql_res {
+ my_ulonglong row_count;
+ MYSQL_FIELD *fields;
+ MYSQL_DATA *data;
+ MYSQL_ROWS *data_cursor;
+ unsigned long *lengths; /* column lengths of current row */
+ MYSQL *handle; /* for unbuffered reads */
+ const struct st_mysql_methods *methods;
+ MYSQL_ROW row; /* If unbuffered read */
+ MYSQL_ROW current_row; /* buffer to current row */
+ MEM_ROOT field_alloc;
+ unsigned int field_count, current_field;
+ my_bool eof; /* Used by mysql_fetch_row */
/* mysql_stmt_close() had to cancel this result */
- bool unbuffered_fetch_cancelled;
- enum enum_resultset_metadata metadata;
+ my_bool unbuffered_fetch_cancelled;
void *extension;
} MYSQL_RES;
-/**
- Flag to indicate that COM_BINLOG_DUMP_GTID should
- be used rather than COM_BINLOG_DUMP in the @sa mysql_binlog_open().
-*/
-#define MYSQL_RPL_GTID (1 << 16)
-/**
- Skip HEARBEAT events in the @sa mysql_binlog_fetch().
-*/
-#define MYSQL_RPL_SKIP_HEARTBEAT (1 << 17)
-/**
- Flag to indicate that the heartbeat_event being generated
- is using the class Heartbeat_event_v2
-*/
-#define USE_HEARTBEAT_EVENT_V2 (1 << 1)
-
-/**
- Struct for information about a replication stream.
-
- @sa mysql_binlog_open()
- @sa mysql_binlog_fetch()
- @sa mysql_binlog_close()
-*/
-typedef struct MYSQL_RPL {
- size_t file_name_length; /** Length of the 'file_name' or 0 */
- const char *file_name; /** Filename of the binary log to read */
- uint64_t start_position; /** Position in the binary log to */
- /* start reading from */
- unsigned int server_id; /** Server ID to use when identifying */
- /* with the master */
- unsigned int flags; /** Flags, e.g. MYSQL_RPL_GTID */
-
- /** Size of gtid set data */
- size_t gtid_set_encoded_size;
- /** Callback function which is called */
- /* from @sa mysql_binlog_open() to */
- /* fill command packet gtid set */
- void (*fix_gtid_set)(struct MYSQL_RPL *rpl, unsigned char *packet_gtid_set);
- void *gtid_set_arg; /** GTID set data or an argument for */
- /* fix_gtid_set() callback function */
-
- unsigned long size; /** Size of the packet returned by */
- /* mysql_binlog_fetch() */
- const unsigned char *buffer; /** Pointer to returned data */
-} MYSQL_RPL;
+#if !defined(MYSQL_SERVER) && !defined(MYSQL_CLIENT)
+#define MYSQL_CLIENT
+#endif
/*
Set up and bring down the server; to ensure that applications will
@@ -411,7 +348,7 @@ void STDCALL mysql_server_end(void);
/*
mysql_server_init/end need to be called when using libmysqld or
libmysqlclient (exactly, mysql_server_init() is called by mysql_init() so
- you don't need to call it explicitly; but you need to call
+ you don't need to call it explicitely; but you need to call
mysql_server_end() to free memory). The names are a bit misleading
(mysql_SERVER* to be used when using libmysqlCLIENT). So we add more general
names which suit well whether you're using libmysqld or libmysqlclient. We
@@ -420,13 +357,14 @@ void STDCALL mysql_server_end(void);
#define mysql_library_init mysql_server_init
#define mysql_library_end mysql_server_end
+
/*
Set up and bring down a thread; these function should be called
for each thread in an application which opens at least one MySQL
connection. All uses of the connection(s) should be between these
function calls.
*/
-bool STDCALL mysql_thread_init(void);
+my_bool STDCALL mysql_thread_init(void);
void STDCALL mysql_thread_end(void);
/*
@@ -434,158 +372,148 @@ void STDCALL mysql_thread_end(void);
Should definitely be used if one uses shared libraries.
*/
-uint64_t STDCALL mysql_num_rows(MYSQL_RES *res);
+my_ulonglong STDCALL mysql_num_rows(MYSQL_RES *res);
unsigned int STDCALL mysql_num_fields(MYSQL_RES *res);
-bool STDCALL mysql_eof(MYSQL_RES *res);
+my_bool STDCALL mysql_eof(MYSQL_RES *res);
MYSQL_FIELD *STDCALL mysql_fetch_field_direct(MYSQL_RES *res,
- unsigned int fieldnr);
-MYSQL_FIELD *STDCALL mysql_fetch_fields(MYSQL_RES *res);
+ unsigned int fieldnr);
+MYSQL_FIELD * STDCALL mysql_fetch_fields(MYSQL_RES *res);
MYSQL_ROW_OFFSET STDCALL mysql_row_tell(MYSQL_RES *res);
MYSQL_FIELD_OFFSET STDCALL mysql_field_tell(MYSQL_RES *res);
-enum enum_resultset_metadata STDCALL mysql_result_metadata(MYSQL_RES *result);
unsigned int STDCALL mysql_field_count(MYSQL *mysql);
-uint64_t STDCALL mysql_affected_rows(MYSQL *mysql);
-uint64_t STDCALL mysql_insert_id(MYSQL *mysql);
+my_ulonglong STDCALL mysql_affected_rows(MYSQL *mysql);
+my_ulonglong STDCALL mysql_insert_id(MYSQL *mysql);
unsigned int STDCALL mysql_errno(MYSQL *mysql);
-const char *STDCALL mysql_error(MYSQL *mysql);
+const char * STDCALL mysql_error(MYSQL *mysql);
const char *STDCALL mysql_sqlstate(MYSQL *mysql);
unsigned int STDCALL mysql_warning_count(MYSQL *mysql);
-const char *STDCALL mysql_info(MYSQL *mysql);
+const char * STDCALL mysql_info(MYSQL *mysql);
unsigned long STDCALL mysql_thread_id(MYSQL *mysql);
-const char *STDCALL mysql_character_set_name(MYSQL *mysql);
-int STDCALL mysql_set_character_set(MYSQL *mysql, const char *csname);
+const char * STDCALL mysql_character_set_name(MYSQL *mysql);
+int STDCALL mysql_set_character_set(MYSQL *mysql, const char *csname);
-MYSQL *STDCALL mysql_init(MYSQL *mysql);
-bool STDCALL mysql_ssl_set(MYSQL *mysql, const char *key, const char *cert,
- const char *ca, const char *capath,
- const char *cipher);
-const char *STDCALL mysql_get_ssl_cipher(MYSQL *mysql);
-bool STDCALL mysql_get_ssl_session_reused(MYSQL *mysql);
-void *STDCALL mysql_get_ssl_session_data(MYSQL *mysql, unsigned int n_ticket,
- unsigned int *out_len);
-bool STDCALL mysql_free_ssl_session_data(MYSQL *mysql, void *data);
-bool STDCALL mysql_change_user(MYSQL *mysql, const char *user,
- const char *passwd, const char *db);
-MYSQL *STDCALL mysql_real_connect(MYSQL *mysql, const char *host,
- const char *user, const char *passwd,
- const char *db, unsigned int port,
- const char *unix_socket,
- unsigned long clientflag);
-int STDCALL mysql_select_db(MYSQL *mysql, const char *db);
-int STDCALL mysql_query(MYSQL *mysql, const char *q);
-int STDCALL mysql_send_query(MYSQL *mysql, const char *q, unsigned long length);
-int STDCALL mysql_real_query(MYSQL *mysql, const char *q, unsigned long length);
-MYSQL_RES *STDCALL mysql_store_result(MYSQL *mysql);
-MYSQL_RES *STDCALL mysql_use_result(MYSQL *mysql);
+MYSQL * STDCALL mysql_init(MYSQL *mysql);
+my_bool STDCALL mysql_ssl_set(MYSQL *mysql, const char *key,
+ const char *cert, const char *ca,
+ const char *capath, const char *cipher);
+const char * STDCALL mysql_get_ssl_cipher(MYSQL *mysql);
+my_bool STDCALL mysql_change_user(MYSQL *mysql, const char *user,
+ const char *passwd, const char *db);
+MYSQL * STDCALL mysql_real_connect(MYSQL *mysql, const char *host,
+ const char *user,
+ const char *passwd,
+ const char *db,
+ unsigned int port,
+ const char *unix_socket,
+ unsigned long clientflag);
+int STDCALL mysql_select_db(MYSQL *mysql, const char *db);
+int STDCALL mysql_query(MYSQL *mysql, const char *q);
+int STDCALL mysql_send_query(MYSQL *mysql, const char *q,
+ unsigned long length);
+int STDCALL mysql_real_query(MYSQL *mysql, const char *q,
+ unsigned long length);
+MYSQL_RES * STDCALL mysql_store_result(MYSQL *mysql);
+MYSQL_RES * STDCALL mysql_use_result(MYSQL *mysql);
-enum net_async_status STDCALL mysql_real_connect_nonblocking(
- MYSQL *mysql, const char *host, const char *user, const char *passwd,
- const char *db, unsigned int port, const char *unix_socket,
- unsigned long clientflag);
-enum net_async_status STDCALL mysql_send_query_nonblocking(
- MYSQL *mysql, const char *query, unsigned long length);
-enum net_async_status STDCALL mysql_real_query_nonblocking(
- MYSQL *mysql, const char *query, unsigned long length);
-enum net_async_status STDCALL
-mysql_store_result_nonblocking(MYSQL *mysql, MYSQL_RES **result);
-enum net_async_status STDCALL mysql_next_result_nonblocking(MYSQL *mysql);
-enum net_async_status STDCALL mysql_select_db_nonblocking(MYSQL *mysql,
- const char *db,
- bool *error);
-void STDCALL mysql_get_character_set_info(MYSQL *mysql,
- MY_CHARSET_INFO *charset);
+void STDCALL mysql_get_character_set_info(MYSQL *mysql,
+ MY_CHARSET_INFO *charset);
int STDCALL mysql_session_track_get_first(MYSQL *mysql,
enum enum_session_state_type type,
- const char **data, size_t *length);
+ const char **data,
+ size_t *length);
int STDCALL mysql_session_track_get_next(MYSQL *mysql,
enum enum_session_state_type type,
- const char **data, size_t *length);
+ const char **data,
+ size_t *length);
/* local infile support */
#define LOCAL_INFILE_ERROR_LEN 512
-void mysql_set_local_infile_handler(
- MYSQL *mysql, int (*local_infile_init)(void **, const char *, void *),
- int (*local_infile_read)(void *, char *, unsigned int),
- void (*local_infile_end)(void *),
- int (*local_infile_error)(void *, char *, unsigned int), void *);
+void
+mysql_set_local_infile_handler(MYSQL *mysql,
+ int (*local_infile_init)(void **, const char *,
+ void *),
+ int (*local_infile_read)(void *, char *,
+ unsigned int),
+ void (*local_infile_end)(void *),
+ int (*local_infile_error)(void *, char*,
+ unsigned int),
+ void *);
-void mysql_set_local_infile_default(MYSQL *mysql);
-int STDCALL mysql_shutdown(MYSQL *mysql,
- enum mysql_enum_shutdown_level shutdown_level);
-int STDCALL mysql_dump_debug_info(MYSQL *mysql);
-int STDCALL mysql_refresh(MYSQL *mysql, unsigned int refresh_options);
-int STDCALL mysql_kill(MYSQL *mysql, unsigned long pid);
-int STDCALL mysql_set_server_option(MYSQL *mysql,
- enum enum_mysql_set_option option);
-int STDCALL mysql_ping(MYSQL *mysql);
-const char *STDCALL mysql_stat(MYSQL *mysql);
-const char *STDCALL mysql_get_server_info(MYSQL *mysql);
-const char *STDCALL mysql_get_client_info(void);
-unsigned long STDCALL mysql_get_client_version(void);
-const char *STDCALL mysql_get_host_info(MYSQL *mysql);
-unsigned long STDCALL mysql_get_server_version(MYSQL *mysql);
-unsigned int STDCALL mysql_get_proto_info(MYSQL *mysql);
-MYSQL_RES *STDCALL mysql_list_dbs(MYSQL *mysql, const char *wild);
-MYSQL_RES *STDCALL mysql_list_tables(MYSQL *mysql, const char *wild);
-MYSQL_RES *STDCALL mysql_list_processes(MYSQL *mysql);
-int STDCALL mysql_options(MYSQL *mysql, enum mysql_option option,
- const void *arg);
-int STDCALL mysql_options4(MYSQL *mysql, enum mysql_option option,
- const void *arg1, const void *arg2);
-int STDCALL mysql_get_option(MYSQL *mysql, enum mysql_option option,
- const void *arg);
-void STDCALL mysql_free_result(MYSQL_RES *result);
-enum net_async_status STDCALL mysql_free_result_nonblocking(MYSQL_RES *result);
-void STDCALL mysql_data_seek(MYSQL_RES *result, uint64_t offset);
+void
+mysql_set_local_infile_default(MYSQL *mysql);
+
+int STDCALL mysql_shutdown(MYSQL *mysql,
+ enum mysql_enum_shutdown_level
+ shutdown_level);
+int STDCALL mysql_dump_debug_info(MYSQL *mysql);
+int STDCALL mysql_refresh(MYSQL *mysql,
+ unsigned int refresh_options);
+int STDCALL mysql_kill(MYSQL *mysql,unsigned long pid);
+int STDCALL mysql_set_server_option(MYSQL *mysql,
+ enum enum_mysql_set_option
+ option);
+int STDCALL mysql_ping(MYSQL *mysql);
+const char * STDCALL mysql_stat(MYSQL *mysql);
+const char * STDCALL mysql_get_server_info(MYSQL *mysql);
+const char * STDCALL mysql_get_client_info(void);
+unsigned long STDCALL mysql_get_client_version(void);
+const char * STDCALL mysql_get_host_info(MYSQL *mysql);
+unsigned long STDCALL mysql_get_server_version(MYSQL *mysql);
+unsigned int STDCALL mysql_get_proto_info(MYSQL *mysql);
+MYSQL_RES * STDCALL mysql_list_dbs(MYSQL *mysql,const char *wild);
+MYSQL_RES * STDCALL mysql_list_tables(MYSQL *mysql,const char *wild);
+MYSQL_RES * STDCALL mysql_list_processes(MYSQL *mysql);
+int STDCALL mysql_options(MYSQL *mysql,enum mysql_option option,
+ const void *arg);
+int STDCALL mysql_options4(MYSQL *mysql,enum mysql_option option,
+ const void *arg1, const void *arg2);
+int STDCALL mysql_get_option(MYSQL *mysql, enum mysql_option option,
+ const void *arg);
+void STDCALL mysql_free_result(MYSQL_RES *result);
+void STDCALL mysql_data_seek(MYSQL_RES *result,
+ my_ulonglong offset);
MYSQL_ROW_OFFSET STDCALL mysql_row_seek(MYSQL_RES *result,
- MYSQL_ROW_OFFSET offset);
+ MYSQL_ROW_OFFSET offset);
MYSQL_FIELD_OFFSET STDCALL mysql_field_seek(MYSQL_RES *result,
- MYSQL_FIELD_OFFSET offset);
-MYSQL_ROW STDCALL mysql_fetch_row(MYSQL_RES *result);
-enum net_async_status STDCALL mysql_fetch_row_nonblocking(MYSQL_RES *res,
- MYSQL_ROW *row);
-
-unsigned long *STDCALL mysql_fetch_lengths(MYSQL_RES *result);
-MYSQL_FIELD *STDCALL mysql_fetch_field(MYSQL_RES *result);
-MYSQL_RES *STDCALL mysql_list_fields(MYSQL *mysql, const char *table,
- const char *wild);
-unsigned long STDCALL mysql_escape_string(char *to, const char *from,
- unsigned long from_length);
-unsigned long STDCALL mysql_hex_string(char *to, const char *from,
- unsigned long from_length);
-unsigned long STDCALL mysql_real_escape_string(MYSQL *mysql, char *to,
- const char *from,
- unsigned long length);
-unsigned long STDCALL mysql_real_escape_string_quote(MYSQL *mysql, char *to,
- const char *from,
- unsigned long length,
- char quote);
-void STDCALL mysql_debug(const char *debug);
-void STDCALL myodbc_remove_escape(MYSQL *mysql, char *name);
-unsigned int STDCALL mysql_thread_safe(void);
-bool STDCALL mysql_read_query_result(MYSQL *mysql);
-int STDCALL mysql_reset_connection(MYSQL *mysql);
-
-int STDCALL mysql_binlog_open(MYSQL *mysql, MYSQL_RPL *rpl);
-int STDCALL mysql_binlog_fetch(MYSQL *mysql, MYSQL_RPL *rpl);
-void STDCALL mysql_binlog_close(MYSQL *mysql, MYSQL_RPL *rpl);
+ MYSQL_FIELD_OFFSET offset);
+MYSQL_ROW STDCALL mysql_fetch_row(MYSQL_RES *result);
+unsigned long * STDCALL mysql_fetch_lengths(MYSQL_RES *result);
+MYSQL_FIELD * STDCALL mysql_fetch_field(MYSQL_RES *result);
+MYSQL_RES * STDCALL mysql_list_fields(MYSQL *mysql, const char *table,
+ const char *wild);
+unsigned long STDCALL mysql_escape_string(char *to,const char *from,
+ unsigned long from_length);
+unsigned long STDCALL mysql_hex_string(char *to,const char *from,
+ unsigned long from_length);
+unsigned long STDCALL mysql_real_escape_string(MYSQL *mysql,
+ char *to,const char *from,
+ unsigned long length);
+unsigned long STDCALL mysql_real_escape_string_quote(MYSQL *mysql,
+ char *to, const char *from,
+ unsigned long length, char quote);
+void STDCALL mysql_debug(const char *debug);
+void STDCALL myodbc_remove_escape(MYSQL *mysql,char *name);
+unsigned int STDCALL mysql_thread_safe(void);
+my_bool STDCALL mysql_embedded(void);
+my_bool STDCALL mysql_read_query_result(MYSQL *mysql);
+int STDCALL mysql_reset_connection(MYSQL *mysql);
/*
- The following definitions are added for the enhanced
+ The following definitions are added for the enhanced
client-server protocol
*/
/* statement state */
-enum enum_mysql_stmt_state {
- MYSQL_STMT_INIT_DONE = 1,
- MYSQL_STMT_PREPARE_DONE,
- MYSQL_STMT_EXECUTE_DONE,
+enum enum_mysql_stmt_state
+{
+ MYSQL_STMT_INIT_DONE= 1, MYSQL_STMT_PREPARE_DONE, MYSQL_STMT_EXECUTE_DONE,
MYSQL_STMT_FETCH_DONE
};
+
/*
This structure is used to define bind information, and
internally by the client library.
@@ -615,7 +543,7 @@ enum enum_mysql_stmt_state {
length - On input: in case when lengths of input values
are different for each execute, you can set this to
- point at a variable containing value length. This
+ point at a variable containining value length. This
way the value length can be different in each execute.
If length is not NULL, buffer_length is not used.
Note, length can even point at buffer_length if
@@ -649,82 +577,89 @@ enum enum_mysql_stmt_state {
Please note that MYSQL_BIND also has internals members.
*/
-typedef struct MYSQL_BIND {
- unsigned long *length; /* output length pointer */
- bool *is_null; /* Pointer to null indicator */
- void *buffer; /* buffer to get/put data */
+typedef struct st_mysql_bind
+{
+ unsigned long *length; /* output length pointer */
+ my_bool *is_null; /* Pointer to null indicator */
+ void *buffer; /* buffer to get/put data */
/* set this if you want to track data truncations happened during fetch */
- bool *error;
- unsigned char *row_ptr; /* for the current data position */
- void (*store_param_func)(NET *net, struct MYSQL_BIND *param);
- void (*fetch_result)(struct MYSQL_BIND *, MYSQL_FIELD *, unsigned char **row);
- void (*skip_result)(struct MYSQL_BIND *, MYSQL_FIELD *, unsigned char **row);
+ my_bool *error;
+ unsigned char *row_ptr; /* for the current data position */
+ void (*store_param_func)(NET *net, struct st_mysql_bind *param);
+ void (*fetch_result)(struct st_mysql_bind *, MYSQL_FIELD *,
+ unsigned char **row);
+ void (*skip_result)(struct st_mysql_bind *, MYSQL_FIELD *,
+ unsigned char **row);
/* output buffer length, must be set when fetching str/binary */
unsigned long buffer_length;
- unsigned long offset; /* offset position for char/binary fetch */
- unsigned long length_value; /* Used if length is 0 */
- unsigned int param_number; /* For null count and error messages */
- unsigned int pack_length; /* Internal length for packed data */
- enum enum_field_types buffer_type; /* buffer type */
- bool error_value; /* used if error is 0 */
- bool is_unsigned; /* set if integer type is unsigned */
- bool long_data_used; /* If used with mysql_send_long_data */
- bool is_null_value; /* Used if is_null is 0 */
+ unsigned long offset; /* offset position for char/binary fetch */
+ unsigned long length_value; /* Used if length is 0 */
+ unsigned int param_number; /* For null count and error messages */
+ unsigned int pack_length; /* Internal length for packed data */
+ enum enum_field_types buffer_type; /* buffer type */
+ my_bool error_value; /* used if error is 0 */
+ my_bool is_unsigned; /* set if integer type is unsigned */
+ my_bool long_data_used; /* If used with mysql_send_long_data */
+ my_bool is_null_value; /* Used if is_null is 0 */
void *extension;
} MYSQL_BIND;
-struct MYSQL_STMT_EXT;
+
+struct st_mysql_stmt_extension;
/* statement handler */
-typedef struct MYSQL_STMT {
- struct MEM_ROOT *mem_root; /* root allocations */
- LIST list; /* list to keep track of all stmts */
- MYSQL *mysql; /* connection handle */
- MYSQL_BIND *params; /* input parameters */
- MYSQL_BIND *bind; /* output parameters */
- MYSQL_FIELD *fields; /* result set metadata */
- MYSQL_DATA result; /* cached result set */
- MYSQL_ROWS *data_cursor; /* current row in cached result */
+typedef struct st_mysql_stmt
+{
+ MEM_ROOT mem_root; /* root allocations */
+ LIST list; /* list to keep track of all stmts */
+ MYSQL *mysql; /* connection handle */
+ MYSQL_BIND *params; /* input parameters */
+ MYSQL_BIND *bind; /* output parameters */
+ MYSQL_FIELD *fields; /* result set metadata */
+ MYSQL_DATA result; /* cached result set */
+ MYSQL_ROWS *data_cursor; /* current row in cached result */
/*
mysql_stmt_fetch() calls this function to fetch one row (it's different
for buffered, unbuffered and cursor fetch).
*/
- int (*read_row_func)(struct MYSQL_STMT *stmt, unsigned char **row);
+ int (*read_row_func)(struct st_mysql_stmt *stmt,
+ unsigned char **row);
/* copy of mysql->affected_rows after statement execution */
- uint64_t affected_rows;
- uint64_t insert_id; /* copy of mysql->insert_id */
- unsigned long stmt_id; /* Id for prepared statement */
- unsigned long flags; /* i.e. type of cursor to open */
- unsigned long prefetch_rows; /* number of rows per one COM_FETCH */
+ my_ulonglong affected_rows;
+ my_ulonglong insert_id; /* copy of mysql->insert_id */
+ unsigned long stmt_id; /* Id for prepared statement */
+ unsigned long flags; /* i.e. type of cursor to open */
+ unsigned long prefetch_rows; /* number of rows per one COM_FETCH */
/*
Copied from mysql->server_status after execute/fetch to know
server-side cursor status for this statement.
*/
- unsigned int server_status;
- unsigned int last_errno; /* error code */
- unsigned int param_count; /* input parameter count */
- unsigned int field_count; /* number of columns in result set */
- enum enum_mysql_stmt_state state; /* statement state */
- char last_error[MYSQL_ERRMSG_SIZE]; /* error message */
- char sqlstate[SQLSTATE_LENGTH + 1];
+ unsigned int server_status;
+ unsigned int last_errno; /* error code */
+ unsigned int param_count; /* input parameter count */
+ unsigned int field_count; /* number of columns in result set */
+ enum enum_mysql_stmt_state state; /* statement state */
+ char last_error[MYSQL_ERRMSG_SIZE]; /* error message */
+ char sqlstate[SQLSTATE_LENGTH+1];
/* Types of input parameters should be sent to server */
- bool send_types_to_server;
- bool bind_param_done; /* input buffers were supplied */
- unsigned char bind_result_done; /* output buffers were supplied */
+ my_bool send_types_to_server;
+ my_bool bind_param_done; /* input buffers were supplied */
+ unsigned char bind_result_done; /* output buffers were supplied */
/* mysql_stmt_close() had to cancel this result */
- bool unbuffered_fetch_cancelled;
+ my_bool unbuffered_fetch_cancelled;
/*
- Is set to true if we need to calculate field->max_length for
+ Is set to true if we need to calculate field->max_length for
metadata fields when doing mysql_stmt_store_result.
*/
- bool update_max_length;
- struct MYSQL_STMT_EXT *extension;
+ my_bool update_max_length;
+ struct st_mysql_stmt_extension *extension;
} MYSQL_STMT;
-enum enum_stmt_attr_type {
+enum enum_stmt_attr_type
+{
/*
When doing mysql_stmt_store_result calculate max_length attribute
- of statement metadata. This is to be consistent with the old API,
+ of statement metadata. This is to be consistent with the old API,
where this was done automatically.
In the new API we do that only by request because it slows down
mysql_stmt_store_result sufficiently.
@@ -742,72 +677,64 @@ enum enum_stmt_attr_type {
STMT_ATTR_PREFETCH_ROWS
};
-bool STDCALL mysql_bind_param(MYSQL *mysql, unsigned n_params,
- MYSQL_BIND *binds, const char **names);
-MYSQL_STMT *STDCALL mysql_stmt_init(MYSQL *mysql);
+MYSQL_STMT * STDCALL mysql_stmt_init(MYSQL *mysql);
int STDCALL mysql_stmt_prepare(MYSQL_STMT *stmt, const char *query,
unsigned long length);
int STDCALL mysql_stmt_execute(MYSQL_STMT *stmt);
int STDCALL mysql_stmt_fetch(MYSQL_STMT *stmt);
-int STDCALL mysql_stmt_fetch_column(MYSQL_STMT *stmt, MYSQL_BIND *bind_arg,
- unsigned int column, unsigned long offset);
+int STDCALL mysql_stmt_fetch_column(MYSQL_STMT *stmt, MYSQL_BIND *bind_arg,
+ unsigned int column,
+ unsigned long offset);
int STDCALL mysql_stmt_store_result(MYSQL_STMT *stmt);
-unsigned long STDCALL mysql_stmt_param_count(MYSQL_STMT *stmt);
-bool STDCALL mysql_stmt_attr_set(MYSQL_STMT *stmt,
- enum enum_stmt_attr_type attr_type,
- const void *attr);
-bool STDCALL mysql_stmt_attr_get(MYSQL_STMT *stmt,
- enum enum_stmt_attr_type attr_type,
- void *attr);
-bool STDCALL mysql_stmt_bind_param(MYSQL_STMT *stmt, MYSQL_BIND *bnd);
-bool STDCALL mysql_stmt_bind_result(MYSQL_STMT *stmt, MYSQL_BIND *bnd);
-bool STDCALL mysql_stmt_close(MYSQL_STMT *stmt);
-bool STDCALL mysql_stmt_reset(MYSQL_STMT *stmt);
-bool STDCALL mysql_stmt_free_result(MYSQL_STMT *stmt);
-bool STDCALL mysql_stmt_send_long_data(MYSQL_STMT *stmt,
- unsigned int param_number,
- const char *data, unsigned long length);
+unsigned long STDCALL mysql_stmt_param_count(MYSQL_STMT * stmt);
+my_bool STDCALL mysql_stmt_attr_set(MYSQL_STMT *stmt,
+ enum enum_stmt_attr_type attr_type,
+ const void *attr);
+my_bool STDCALL mysql_stmt_attr_get(MYSQL_STMT *stmt,
+ enum enum_stmt_attr_type attr_type,
+ void *attr);
+my_bool STDCALL mysql_stmt_bind_param(MYSQL_STMT * stmt, MYSQL_BIND * bnd);
+my_bool STDCALL mysql_stmt_bind_result(MYSQL_STMT * stmt, MYSQL_BIND * bnd);
+my_bool STDCALL mysql_stmt_close(MYSQL_STMT * stmt);
+my_bool STDCALL mysql_stmt_reset(MYSQL_STMT * stmt);
+my_bool STDCALL mysql_stmt_free_result(MYSQL_STMT *stmt);
+my_bool STDCALL mysql_stmt_send_long_data(MYSQL_STMT *stmt,
+ unsigned int param_number,
+ const char *data,
+ unsigned long length);
MYSQL_RES *STDCALL mysql_stmt_result_metadata(MYSQL_STMT *stmt);
MYSQL_RES *STDCALL mysql_stmt_param_metadata(MYSQL_STMT *stmt);
-unsigned int STDCALL mysql_stmt_errno(MYSQL_STMT *stmt);
-const char *STDCALL mysql_stmt_error(MYSQL_STMT *stmt);
-const char *STDCALL mysql_stmt_sqlstate(MYSQL_STMT *stmt);
-MYSQL_ROW_OFFSET STDCALL mysql_stmt_row_seek(MYSQL_STMT *stmt,
+unsigned int STDCALL mysql_stmt_errno(MYSQL_STMT * stmt);
+const char *STDCALL mysql_stmt_error(MYSQL_STMT * stmt);
+const char *STDCALL mysql_stmt_sqlstate(MYSQL_STMT * stmt);
+MYSQL_ROW_OFFSET STDCALL mysql_stmt_row_seek(MYSQL_STMT *stmt,
MYSQL_ROW_OFFSET offset);
MYSQL_ROW_OFFSET STDCALL mysql_stmt_row_tell(MYSQL_STMT *stmt);
-void STDCALL mysql_stmt_data_seek(MYSQL_STMT *stmt, uint64_t offset);
-uint64_t STDCALL mysql_stmt_num_rows(MYSQL_STMT *stmt);
-uint64_t STDCALL mysql_stmt_affected_rows(MYSQL_STMT *stmt);
-uint64_t STDCALL mysql_stmt_insert_id(MYSQL_STMT *stmt);
+void STDCALL mysql_stmt_data_seek(MYSQL_STMT *stmt, my_ulonglong offset);
+my_ulonglong STDCALL mysql_stmt_num_rows(MYSQL_STMT *stmt);
+my_ulonglong STDCALL mysql_stmt_affected_rows(MYSQL_STMT *stmt);
+my_ulonglong STDCALL mysql_stmt_insert_id(MYSQL_STMT *stmt);
unsigned int STDCALL mysql_stmt_field_count(MYSQL_STMT *stmt);
-bool STDCALL mysql_commit(MYSQL *mysql);
-bool STDCALL mysql_rollback(MYSQL *mysql);
-bool STDCALL mysql_autocommit(MYSQL *mysql, bool auto_mode);
-bool STDCALL mysql_more_results(MYSQL *mysql);
+my_bool STDCALL mysql_commit(MYSQL * mysql);
+my_bool STDCALL mysql_rollback(MYSQL * mysql);
+my_bool STDCALL mysql_autocommit(MYSQL * mysql, my_bool auto_mode);
+my_bool STDCALL mysql_more_results(MYSQL *mysql);
int STDCALL mysql_next_result(MYSQL *mysql);
int STDCALL mysql_stmt_next_result(MYSQL_STMT *stmt);
void STDCALL mysql_close(MYSQL *sock);
-/* Public key reset */
-void STDCALL mysql_reset_server_public_key(void);
/* status return codes */
-#define MYSQL_NO_DATA 100
+#define MYSQL_NO_DATA 100
#define MYSQL_DATA_TRUNCATED 101
-#define mysql_reload(mysql) mysql_refresh((mysql), REFRESH_GRANT)
+#define mysql_reload(mysql) mysql_refresh((mysql),REFRESH_GRANT)
#define HAVE_MYSQL_REAL_CONNECT
-MYSQL *STDCALL mysql_real_connect_dns_srv(MYSQL *mysql,
- const char *dns_srv_name,
- const char *user, const char *passwd,
- const char *db,
- unsigned long client_flag);
-
-#ifdef __cplusplus
+#ifdef __cplusplus
}
#endif
diff --git a/db/include/mysql/client_authentication.h b/db/include/mysql/client_authentication.h
new file mode 100644
index 0000000..0dbc942
--- /dev/null
+++ b/db/include/mysql/client_authentication.h
@@ -0,0 +1,38 @@
+/* Copyright (c) 2012, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 CLIENT_AUTHENTICATION_H
+#define CLIENT_AUTHENTICATION_H
+#include
+#include "mysql.h"
+#include "mysql/client_plugin.h"
+
+C_MODE_START
+int sha256_password_auth_client(MYSQL_PLUGIN_VIO *vio, MYSQL *mysql);
+int sha256_password_init(char *, size_t, int, va_list);
+int sha256_password_deinit(void);
+int caching_sha2_password_auth_client(MYSQL_PLUGIN_VIO *vio, MYSQL *mysql);
+int caching_sha2_password_init(char *, size_t, int, va_list);
+int caching_sha2_password_deinit(void);
+C_MODE_END
+
+#endif
+
diff --git a/db/include/mysql/client_plugin.h b/db/include/mysql/client_plugin.h
index 4158942..9807dfc 100644
--- a/db/include/mysql/client_plugin.h
+++ b/db/include/mysql/client_plugin.h
@@ -27,8 +27,10 @@
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
/**
- @file include/mysql/client_plugin.h
- MySQL Client Plugin API.
+ @file
+
+ MySQL Client Plugin API
+
This file defines the API for plugins that work on the client side
*/
#define MYSQL_CLIENT_PLUGIN_INCLUDED
@@ -49,87 +51,75 @@
#if defined(_MSC_VER)
#if defined(MYSQL_DYNAMIC_PLUGIN)
-#ifdef __cplusplus
-#define MYSQL_PLUGIN_EXPORT extern "C" __declspec(dllexport)
-#else
-#define MYSQL_PLUGIN_EXPORT __declspec(dllexport)
-#endif
+ #ifdef __cplusplus
+ #define MYSQL_PLUGIN_EXPORT extern "C" __declspec(dllexport)
+ #else
+ #define MYSQL_PLUGIN_EXPORT __declspec(dllexport)
+ #endif
#else /* MYSQL_DYNAMIC_PLUGIN */
-#ifdef __cplusplus
-#define MYSQL_PLUGIN_EXPORT extern "C"
-#else
-#define MYSQL_PLUGIN_EXPORT
-#endif
+ #ifdef __cplusplus
+ #define MYSQL_PLUGIN_EXPORT extern "C"
+ #else
+ #define MYSQL_PLUGIN_EXPORT
+ #endif
#endif /*MYSQL_DYNAMIC_PLUGIN */
-#else /*_MSC_VER */
-
-#if defined(MYSQL_DYNAMIC_PLUGIN)
-#define MYSQL_PLUGIN_EXPORT MY_ATTRIBUTE((visibility("default")))
-#else
+#else /*_MSC_VER */
#define MYSQL_PLUGIN_EXPORT
#endif
-#endif
#ifdef __cplusplus
extern "C" {
#endif
/* known plugin types */
-#define MYSQL_CLIENT_reserved1 0
-#define MYSQL_CLIENT_reserved2 1
-#define MYSQL_CLIENT_AUTHENTICATION_PLUGIN 2
-#define MYSQL_CLIENT_TRACE_PLUGIN 3
+#define MYSQL_CLIENT_reserved1 0
+#define MYSQL_CLIENT_reserved2 1
+#define MYSQL_CLIENT_AUTHENTICATION_PLUGIN 2
+#define MYSQL_CLIENT_TRACE_PLUGIN 3
-#define MYSQL_CLIENT_AUTHENTICATION_PLUGIN_INTERFACE_VERSION 0x0200
-#define MYSQL_CLIENT_TRACE_PLUGIN_INTERFACE_VERSION 0x0200
+#define MYSQL_CLIENT_AUTHENTICATION_PLUGIN_INTERFACE_VERSION 0x0100
+#define MYSQL_CLIENT_TRACE_PLUGIN_INTERFACE_VERSION 0x0100
-#define MYSQL_CLIENT_MAX_PLUGINS 4
+#define MYSQL_CLIENT_MAX_PLUGINS 4
-#define MYSQL_CLIENT_PLUGIN_AUTHOR_ORACLE "Oracle Corporation"
-
-#define mysql_declare_client_plugin(X) \
- MYSQL_PLUGIN_EXPORT st_mysql_client_plugin_##X \
- _mysql_client_plugin_declaration_ = { \
- MYSQL_CLIENT_##X##_PLUGIN, \
- MYSQL_CLIENT_##X##_PLUGIN_INTERFACE_VERSION,
-#define mysql_end_client_plugin }
+#define mysql_declare_client_plugin(X) \
+ MYSQL_PLUGIN_EXPORT struct st_mysql_client_plugin_ ## X \
+ _mysql_client_plugin_declaration_ = { \
+ MYSQL_CLIENT_ ## X ## _PLUGIN, \
+ MYSQL_CLIENT_ ## X ## _PLUGIN_INTERFACE_VERSION,
+#define mysql_end_client_plugin }
/* generic plugin header structure */
-#define MYSQL_CLIENT_PLUGIN_HEADER \
- int type; \
- unsigned int interface_version; \
- const char *name; \
- const char *author; \
- const char *desc; \
- unsigned int version[3]; \
- const char *license; \
- void *mysql_api; \
- int (*init)(char *, size_t, int, va_list); \
- int (*deinit)(void); \
- int (*options)(const char *option, const void *); \
- int (*get_options)(const char *option, void *);
+#define MYSQL_CLIENT_PLUGIN_HEADER \
+ int type; \
+ unsigned int interface_version; \
+ const char *name; \
+ const char *author; \
+ const char *desc; \
+ unsigned int version[3]; \
+ const char *license; \
+ void *mysql_api; \
+ int (*init)(char *, size_t, int, va_list); \
+ int (*deinit)(void); \
+ int (*options)(const char *option, const void *);
-struct st_mysql_client_plugin {
+struct st_mysql_client_plugin
+{
MYSQL_CLIENT_PLUGIN_HEADER
};
-struct MYSQL;
+struct st_mysql;
/******** authentication plugin specific declarations *********/
#include "plugin_auth_common.h"
-struct auth_plugin_t {
+struct st_mysql_client_plugin_AUTHENTICATION
+{
MYSQL_CLIENT_PLUGIN_HEADER
- int (*authenticate_user)(MYSQL_PLUGIN_VIO *vio, struct MYSQL *mysql);
- enum net_async_status (*authenticate_user_nonblocking)(MYSQL_PLUGIN_VIO *vio,
- struct MYSQL *mysql,
- int *result);
+ int (*authenticate_user)(MYSQL_PLUGIN_VIO *vio, struct st_mysql *mysql);
};
-// Needed for the mysql_declare_client_plugin() macro. Do not use elsewhere.
-typedef struct auth_plugin_t st_mysql_client_plugin_AUTHENTICATION;
-
/******** using plugins ************/
/**
@@ -145,9 +135,9 @@ typedef struct auth_plugin_t st_mysql_client_plugin_AUTHENTICATION;
@retval
a pointer to the loaded plugin, or NULL in case of a failure
*/
-struct st_mysql_client_plugin *mysql_load_plugin(struct MYSQL *mysql,
- const char *name, int type,
- int argc, ...);
+struct st_mysql_client_plugin *
+mysql_load_plugin(struct st_mysql *mysql, const char *name, int type,
+ int argc, ...);
/**
loads a plugin and initializes it, taking va_list as an argument
@@ -165,9 +155,9 @@ struct st_mysql_client_plugin *mysql_load_plugin(struct MYSQL *mysql,
@retval
a pointer to the loaded plugin, or NULL in case of a failure
*/
-struct st_mysql_client_plugin *mysql_load_plugin_v(struct MYSQL *mysql,
- const char *name, int type,
- int argc, va_list args);
+struct st_mysql_client_plugin *
+mysql_load_plugin_v(struct st_mysql *mysql, const char *name, int type,
+ int argc, va_list args);
/**
finds an already loaded plugin by name, or loads it, if necessary
@@ -179,9 +169,8 @@ struct st_mysql_client_plugin *mysql_load_plugin_v(struct MYSQL *mysql,
@retval
a pointer to the plugin, or NULL in case of a failure
*/
-struct st_mysql_client_plugin *mysql_client_find_plugin(struct MYSQL *mysql,
- const char *name,
- int type);
+struct st_mysql_client_plugin *
+mysql_client_find_plugin(struct st_mysql *mysql, const char *name, int type);
/**
adds a plugin structure to the list of loaded plugins
@@ -197,8 +186,9 @@ struct st_mysql_client_plugin *mysql_client_find_plugin(struct MYSQL *mysql,
@retval
a pointer to the plugin, or NULL in case of a failure
*/
-struct st_mysql_client_plugin *mysql_client_register_plugin(
- struct MYSQL *mysql, struct st_mysql_client_plugin *plugin);
+struct st_mysql_client_plugin *
+mysql_client_register_plugin(struct st_mysql *mysql,
+ struct st_mysql_client_plugin *plugin);
/**
set plugin options
@@ -215,23 +205,10 @@ struct st_mysql_client_plugin *mysql_client_register_plugin(
int mysql_plugin_options(struct st_mysql_client_plugin *plugin,
const char *option, const void *value);
-/**
- get plugin options
-
- Can be used to get options from a plugin.
- This function may be called multiple times to get several options
-
- @param plugin an st_mysql_client_plugin structure
- @param option a string which specifies the option to get
- @param[out] value value for the option.
-
- @retval 0 on success, 1 in case of failure
-**/
-int mysql_plugin_get_option(struct st_mysql_client_plugin *plugin,
- const char *option, void *value);
#ifdef __cplusplus
}
#endif
#endif
+
diff --git a/db/include/mysql/client_plugin.h.pp b/db/include/mysql/client_plugin.h.pp
new file mode 100644
index 0000000..47e760a
--- /dev/null
+++ b/db/include/mysql/client_plugin.h.pp
@@ -0,0 +1,39 @@
+struct st_mysql_client_plugin
+{
+ int type; unsigned int interface_version; const char *name; const char *author; const char *desc; unsigned int version[3]; const char *license; void *mysql_api; int (*init)(char *, size_t, int, va_list); int (*deinit)(void); int (*options)(const char *option, const void *);
+};
+struct st_mysql;
+#include "plugin_auth_common.h"
+typedef struct st_plugin_vio_info
+{
+ enum { MYSQL_VIO_INVALID, MYSQL_VIO_TCP, MYSQL_VIO_SOCKET,
+ MYSQL_VIO_PIPE, MYSQL_VIO_MEMORY } protocol;
+ int socket;
+} MYSQL_PLUGIN_VIO_INFO;
+typedef struct st_plugin_vio
+{
+ int (*read_packet)(struct st_plugin_vio *vio,
+ unsigned char **buf);
+ int (*write_packet)(struct st_plugin_vio *vio,
+ const unsigned char *packet,
+ int packet_len);
+ void (*info)(struct st_plugin_vio *vio, struct st_plugin_vio_info *info);
+} MYSQL_PLUGIN_VIO;
+struct st_mysql_client_plugin_AUTHENTICATION
+{
+ int type; unsigned int interface_version; const char *name; const char *author; const char *desc; unsigned int version[3]; const char *license; void *mysql_api; int (*init)(char *, size_t, int, va_list); int (*deinit)(void); int (*options)(const char *option, const void *);
+ int (*authenticate_user)(MYSQL_PLUGIN_VIO *vio, struct st_mysql *mysql);
+};
+struct st_mysql_client_plugin *
+mysql_load_plugin(struct st_mysql *mysql, const char *name, int type,
+ int argc, ...);
+struct st_mysql_client_plugin *
+mysql_load_plugin_v(struct st_mysql *mysql, const char *name, int type,
+ int argc, va_list args);
+struct st_mysql_client_plugin *
+mysql_client_find_plugin(struct st_mysql *mysql, const char *name, int type);
+struct st_mysql_client_plugin *
+mysql_client_register_plugin(struct st_mysql *mysql,
+ struct st_mysql_client_plugin *plugin);
+int mysql_plugin_options(struct st_mysql_client_plugin *plugin,
+ const char *option, const void *value);
diff --git a/db/include/mysql/com_data.h b/db/include/mysql/com_data.h
new file mode 100644
index 0000000..c615fcc
--- /dev/null
+++ b/db/include/mysql/com_data.h
@@ -0,0 +1,132 @@
+/* Copyright (c) 2015, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 PLUGIN_PROTOCOL_INCLUDED
+#define PLUGIN_PROTOCOL_INCLUDED
+
+#ifndef MYSQL_ABI_CHECK
+#include "my_global.h" /* Needed for my_bool in mysql_com.h */
+#include "mysql_com.h" /* mysql_enum_shutdown_level */
+#endif
+
+
+/**
+@file
+ Definition of COM_DATA to be used with the Command service as data input
+ structure.
+*/
+
+
+typedef struct st_com_init_db_data
+{
+ const char *db_name;
+ unsigned long length;
+} COM_INIT_DB_DATA;
+
+typedef struct st_com_refresh_data
+{
+ unsigned char options;
+} COM_REFRESH_DATA;
+
+typedef struct st_com_shutdown_data
+{
+ enum mysql_enum_shutdown_level level;
+} COM_SHUTDOWN_DATA;
+
+typedef struct st_com_kill_data
+{
+ unsigned long id;
+} COM_KILL_DATA;
+
+typedef struct st_com_set_option_data
+{
+ unsigned int opt_command;
+} COM_SET_OPTION_DATA;
+
+typedef struct st_com_stmt_execute_data
+{
+ unsigned long stmt_id;
+ unsigned long flags;
+ unsigned char *params;
+ unsigned long params_length;
+} COM_STMT_EXECUTE_DATA;
+
+typedef struct st_com_stmt_fetch_data
+{
+ unsigned long stmt_id;
+ unsigned long num_rows;
+} COM_STMT_FETCH_DATA;
+
+typedef struct st_com_stmt_send_long_data_data
+{
+ unsigned long stmt_id;
+ unsigned int param_number;
+ unsigned char *longdata;
+ unsigned long length;
+} COM_STMT_SEND_LONG_DATA_DATA;
+
+typedef struct st_com_stmt_prepare_data
+{
+ const char *query;
+ unsigned int length;
+} COM_STMT_PREPARE_DATA;
+
+typedef struct st_stmt_close_data
+{
+ unsigned int stmt_id;
+} COM_STMT_CLOSE_DATA;
+
+typedef struct st_com_stmt_reset_data
+{
+ unsigned int stmt_id;
+} COM_STMT_RESET_DATA;
+
+typedef struct st_com_query_data
+{
+ const char *query;
+ unsigned int length;
+} COM_QUERY_DATA;
+
+typedef struct st_com_field_list_data
+{
+ unsigned char *table_name;
+ unsigned int table_name_length;
+ const unsigned char *query;
+ unsigned int query_length;
+} COM_FIELD_LIST_DATA;
+
+union COM_DATA {
+ COM_INIT_DB_DATA com_init_db;
+ COM_REFRESH_DATA com_refresh;
+ COM_SHUTDOWN_DATA com_shutdown;
+ COM_KILL_DATA com_kill;
+ COM_SET_OPTION_DATA com_set_option;
+ COM_STMT_EXECUTE_DATA com_stmt_execute;
+ COM_STMT_FETCH_DATA com_stmt_fetch;
+ COM_STMT_SEND_LONG_DATA_DATA com_stmt_send_long_data;
+ COM_STMT_PREPARE_DATA com_stmt_prepare;
+ COM_STMT_CLOSE_DATA com_stmt_close;
+ COM_STMT_RESET_DATA com_stmt_reset;
+ COM_QUERY_DATA com_query;
+ COM_FIELD_LIST_DATA com_field_list;
+};
+
+#endif /* PLUGIN_PROTOCOL_INCLUDED */
diff --git a/db/include/mysql/get_password.h b/db/include/mysql/get_password.h
new file mode 100644
index 0000000..679cc97
--- /dev/null
+++ b/db/include/mysql/get_password.h
@@ -0,0 +1,43 @@
+/* Copyright (c) 2000, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 */
+
+/*
+** Ask for a password from tty
+** This is an own file to avoid conflicts with curses
+*/
+
+#ifndef MYSQL_GET_PASSWORD_H_INCLUDED
+#define MYSQL_GET_PASSWORD_H_INCLUDED
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef char *(* strdup_handler_t)(const char *, int);
+char *get_tty_password_ext(const char *opt_message,
+ strdup_handler_t strdup_function);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ! MYSQL_GET_PASSWORD_H_INCLUDED */
diff --git a/db/include/mysql/group_replication_priv.h b/db/include/mysql/group_replication_priv.h
new file mode 100644
index 0000000..4551cc6
--- /dev/null
+++ b/db/include/mysql/group_replication_priv.h
@@ -0,0 +1,206 @@
+/* Copyright (c) 2015, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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,
+ 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */
+
+#ifndef GROUP_REPLICATION_PRIV_INCLUDE
+#define GROUP_REPLICATION_PRIV_INCLUDE
+
+#ifndef MYSQL_SERVER
+#define MYSQL_SERVER
+#endif
+
+#ifndef HAVE_REPLICATION
+#define HAVE_REPLICATION
+#endif
+
+#include
+#include
+#include
+
+#include
+#include
+#include
+#include
+#include
+#include
+
+
+/**
+ Server side initializations.
+*/
+int group_replication_init();
+
+
+/**
+ Returns the server connection attribute
+
+ @Note This method implementation is on sql_class.cc
+
+ @return the pthread for the connection attribute.
+*/
+my_thread_attr_t *get_connection_attrib();
+
+/**
+ Returns the server hostname, port and uuid.
+
+ @param[out] hostname
+ @param[out] port
+ @param[out] uuid
+ @param[out] server_version
+ @param[out] server_ssl_variables
+
+*/
+void get_server_parameters(char **hostname, uint *port, char **uuid,
+ unsigned int *server_version,
+ st_server_ssl_variables* server_ssl_variables);
+
+/**
+ Returns the server_id.
+
+ @return server_id
+*/
+ulong get_server_id();
+
+/**
+ Returns the server auto_increment_increment
+
+ @return auto_increment_increment
+*/
+ulong get_auto_increment_increment();
+
+
+/**
+ Returns the server auto_increment_offset
+
+ @return auto_increment_offset
+*/
+ulong get_auto_increment_offset();
+
+
+/**
+ Set server auto_increment_increment
+
+ @param[in] auto_increment_increment
+*/
+void set_auto_increment_increment(ulong auto_increment_increment);
+
+
+/**
+ Set server auto_increment_offset
+
+ @param[in] auto_increment_offset
+*/
+void set_auto_increment_offset(ulong auto_increment_offset);
+
+
+/**
+ Returns a struct containing all server startup information needed to evaluate
+ if one has conditions to proceed executing master-master replication.
+
+ @param[out] requirements
+
+ @param[in] has_lock Caller should set this to true if the calling
+ thread holds gtid_mode_lock; otherwise set it to false.
+*/
+void get_server_startup_prerequirements(Trans_context_info& requirements,
+ bool has_lock);
+
+
+/**
+ Returns the server GTID_EXECUTED encoded as a binary string.
+
+ @note Memory allocated to encoded_gtid_executed must be release by caller.
+
+ @param[out] encoded_gtid_executed binary string
+ @param[out] length binary string length
+*/
+bool get_server_encoded_gtid_executed(uchar **encoded_gtid_executed,
+ size_t *length);
+
+#if !defined(NDEBUG)
+/**
+ Returns a text representation of a encoded GTID set.
+
+ @note Memory allocated to returned pointer must be release by caller.
+
+ @param[in] encoded_gtid_set binary string
+ @param[in] length binary string length
+
+ @return a pointer to text representation of the encoded set
+*/
+char* encoded_gtid_set_to_string(uchar *encoded_gtid_set, size_t length);
+#endif
+
+
+/**
+ Return last gno for a given sidno, see
+ Gtid_state::get_last_executed_gno() for details.
+*/
+rpl_gno get_last_executed_gno(rpl_sidno sidno);
+
+
+/**
+ Return sidno for a given sid, see Sid_map::add_sid() for details.
+*/
+rpl_sidno get_sidno_from_global_sid_map(rpl_sid sid);
+
+
+/**
+ Set slave thread default options.
+
+ @param[in] thd The thread
+*/
+void set_slave_thread_options(THD* thd);
+
+
+/**
+ Add thread to Global_THD_manager singleton.
+
+ @param[in] thd The thread
+*/
+void global_thd_manager_add_thd(THD *thd);
+
+
+/**
+ Remove thread from Global_THD_manager singleton.
+
+ @param[in] thd The thread
+*/
+void global_thd_manager_remove_thd(THD *thd);
+
+/**
+ Function that returns the write set extraction algorithm name.
+
+ @param[in] algorithm The algorithm value
+
+ @return the algorithm name
+*/
+const char* get_write_set_algorithm_string(unsigned int algorithm);
+
+/**
+ Returns the value of slave_max_allowed_packet.
+
+ @return slave_max_allowed_packet
+*/
+unsigned long get_slave_max_allowed_packet();
+
+#endif /* GROUP_REPLICATION_PRIV_INCLUDE */
+
diff --git a/db/include/mysql/innodb_priv.h b/db/include/mysql/innodb_priv.h
new file mode 100644
index 0000000..46c1c5c
--- /dev/null
+++ b/db/include/mysql/innodb_priv.h
@@ -0,0 +1,62 @@
+/* Copyright (c) 2010, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 Street, Fifth Floor, Boston, MA 02110-1301, USA */
+
+#ifndef INNODB_PRIV_INCLUDED
+#define INNODB_PRIV_INCLUDED
+
+/** @file Declaring server-internal functions that are used by InnoDB. */
+
+class THD;
+
+int get_quote_char_for_identifier(THD *thd, const char *name, size_t length);
+bool schema_table_store_record(THD *thd, TABLE *table);
+void localtime_to_TIME(MYSQL_TIME *to, struct tm *from);
+bool check_global_access(THD *thd, ulong want_access);
+size_t strconvert(CHARSET_INFO *from_cs, const char *from,
+ CHARSET_INFO *to_cs, char *to, size_t to_length,
+ uint *errors);
+void sql_print_error(const char *format, ...);
+
+/**
+ Store record to I_S table, convert HEAP table to InnoDB table if necessary.
+
+ @param[in] thd thread handler
+ @param[in] table Information schema table to be updated
+ @param[in] make_ondisk if true, convert heap table to on disk table.
+ default value is true.
+ @return 0 on success
+ @return error code on failure.
+*/
+int schema_table_store_record2(THD *thd, TABLE *table, bool make_ondisk);
+
+/**
+ Convert HEAP table to InnoDB table if necessary
+
+ @param[in] thd thread handler
+ @param[in] table Information schema table to be converted.
+ @param[in] error the error code returned previously.
+ @return false on success, true on error.
+*/
+bool convert_heap_table_to_ondisk(THD *thd, TABLE *table, int error);
+
+
+#endif /* INNODB_PRIV_INCLUDED */
diff --git a/db/include/mysql/mysql_lex_string.h b/db/include/mysql/mysql_lex_string.h
new file mode 100644
index 0000000..d0644b2
--- /dev/null
+++ b/db/include/mysql/mysql_lex_string.h
@@ -0,0 +1,40 @@
+/* Copyright (c) 2015, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 MYSQL_LEX_STRING_INCLUDED
+#define MYSQL_LEX_STRING_INCLUDED
+
+struct st_mysql_lex_string
+{
+ char *str;
+ size_t length;
+};
+typedef struct st_mysql_lex_string MYSQL_LEX_STRING;
+
+struct st_mysql_const_lex_string
+{
+ const char *str;
+ size_t length;
+};
+typedef struct st_mysql_const_lex_string MYSQL_LEX_CSTRING;
+
+#endif // MYSQL_LEX_STRING_INCLUDED
diff --git a/db/include/mysql/plugin.h b/db/include/mysql/plugin.h
new file mode 100644
index 0000000..64b83ab
--- /dev/null
+++ b/db/include/mysql/plugin.h
@@ -0,0 +1,752 @@
+/* Copyright (c) 2005, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 _my_plugin_h
+#define _my_plugin_h
+
+#ifndef MYSQL_ABI_CHECK
+#include
+#include "mysql_version.h" /* MYSQL_VERSION_ID */
+#endif
+
+/*
+ On Windows, exports from DLL need to be declared.
+ Also, plugin needs to be declared as extern "C" because MSVC
+ unlike other compilers, uses C++ mangling for variables not only
+ for functions.
+*/
+#if defined(_MSC_VER)
+#if defined(MYSQL_DYNAMIC_PLUGIN)
+ #ifdef __cplusplus
+ #define MYSQL_PLUGIN_EXPORT extern "C" __declspec(dllexport)
+ #else
+ #define MYSQL_PLUGIN_EXPORT __declspec(dllexport)
+ #endif
+#else /* MYSQL_DYNAMIC_PLUGIN */
+ #ifdef __cplusplus
+ #define MYSQL_PLUGIN_EXPORT extern "C"
+ #else
+ #define MYSQL_PLUGIN_EXPORT
+ #endif
+#endif /*MYSQL_DYNAMIC_PLUGIN */
+#else /*_MSC_VER */
+#define MYSQL_PLUGIN_EXPORT
+#endif
+
+#ifdef __cplusplus
+class THD;
+class Item;
+#define MYSQL_THD THD*
+#else
+#define MYSQL_THD void*
+#endif
+
+typedef void * MYSQL_PLUGIN;
+
+#ifndef MYSQL_ABI_CHECK
+#include
+#endif
+
+#define MYSQL_XIDDATASIZE 128
+/**
+ struct st_mysql_xid is binary compatible with the XID structure as
+ in the X/Open CAE Specification, Distributed Transaction Processing:
+ The XA Specification, X/Open Company Ltd., 1991.
+ http://www.opengroup.org/bookstore/catalog/c193.htm
+
+ @see XID in sql/handler.h
+*/
+struct st_mysql_xid {
+ long formatID;
+ long gtrid_length;
+ long bqual_length;
+ char data[MYSQL_XIDDATASIZE]; /* Not \0-terminated */
+};
+typedef struct st_mysql_xid MYSQL_XID;
+
+/*************************************************************************
+ Plugin API. Common for all plugin types.
+*/
+
+#define MYSQL_PLUGIN_INTERFACE_VERSION 0x0107
+
+/*
+ The allowable types of plugins
+*/
+#define MYSQL_UDF_PLUGIN 0 /* User-defined function */
+#define MYSQL_STORAGE_ENGINE_PLUGIN 1 /* Storage Engine */
+#define MYSQL_FTPARSER_PLUGIN 2 /* Full-text parser plugin */
+#define MYSQL_DAEMON_PLUGIN 3 /* The daemon/raw plugin type */
+#define MYSQL_INFORMATION_SCHEMA_PLUGIN 4 /* The I_S plugin type */
+#define MYSQL_AUDIT_PLUGIN 5 /* The Audit plugin type */
+#define MYSQL_REPLICATION_PLUGIN 6 /* The replication plugin type */
+#define MYSQL_AUTHENTICATION_PLUGIN 7 /* The authentication plugin type */
+#define MYSQL_VALIDATE_PASSWORD_PLUGIN 8 /* validate password plugin type */
+#define MYSQL_GROUP_REPLICATION_PLUGIN 9 /* The Group Replication plugin */
+#define MYSQL_KEYRING_PLUGIN 10 /* The Keyring plugin type */
+#define MYSQL_MAX_PLUGIN_TYPE_NUM 11 /* The number of plugin types */
+
+/* We use the following strings to define licenses for plugins */
+#define PLUGIN_LICENSE_PROPRIETARY 0
+#define PLUGIN_LICENSE_GPL 1
+#define PLUGIN_LICENSE_BSD 2
+
+#define PLUGIN_LICENSE_PROPRIETARY_STRING "PROPRIETARY"
+#define PLUGIN_LICENSE_GPL_STRING "GPL"
+#define PLUGIN_LICENSE_BSD_STRING "BSD"
+
+/*
+ Macros for beginning and ending plugin declarations. Between
+ mysql_declare_plugin and mysql_declare_plugin_end there should
+ be a st_mysql_plugin struct for each plugin to be declared.
+*/
+
+
+#ifndef MYSQL_DYNAMIC_PLUGIN
+#define __MYSQL_DECLARE_PLUGIN(NAME, VERSION, PSIZE, DECLS) \
+MYSQL_PLUGIN_EXPORT int VERSION= MYSQL_PLUGIN_INTERFACE_VERSION; \
+MYSQL_PLUGIN_EXPORT int PSIZE= sizeof(struct st_mysql_plugin); \
+MYSQL_PLUGIN_EXPORT struct st_mysql_plugin DECLS[]= {
+#else
+#define __MYSQL_DECLARE_PLUGIN(NAME, VERSION, PSIZE, DECLS) \
+MYSQL_PLUGIN_EXPORT int _mysql_plugin_interface_version_= MYSQL_PLUGIN_INTERFACE_VERSION; \
+MYSQL_PLUGIN_EXPORT int _mysql_sizeof_struct_st_plugin_= sizeof(struct st_mysql_plugin); \
+MYSQL_PLUGIN_EXPORT struct st_mysql_plugin _mysql_plugin_declarations_[]= {
+#endif
+
+#define mysql_declare_plugin(NAME) \
+__MYSQL_DECLARE_PLUGIN(NAME, \
+ builtin_ ## NAME ## _plugin_interface_version, \
+ builtin_ ## NAME ## _sizeof_struct_st_plugin, \
+ builtin_ ## NAME ## _plugin)
+
+#define mysql_declare_plugin_end ,{0,0,0,0,0,0,0,0,0,0,0,0,0}}
+
+/**
+ Declarations for SHOW STATUS support in plugins
+*/
+enum enum_mysql_show_type
+{
+ SHOW_UNDEF, SHOW_BOOL,
+ SHOW_INT, ///< shown as _unsigned_ int
+ SHOW_LONG, ///< shown as _unsigned_ long
+ SHOW_LONGLONG, ///< shown as _unsigned_ longlong
+ SHOW_CHAR, SHOW_CHAR_PTR,
+ SHOW_ARRAY, SHOW_FUNC, SHOW_DOUBLE
+#ifdef MYSQL_SERVER
+ /*
+ This include defines server-only values of the enum.
+ Using them in plugins is not supported.
+ */
+ #include "sql_plugin_enum.h"
+#endif
+};
+
+/**
+ Status variable scope.
+ Only GLOBAL status variable scope is available in plugins.
+*/
+enum enum_mysql_show_scope
+{
+ SHOW_SCOPE_UNDEF,
+ SHOW_SCOPE_GLOBAL
+#ifdef MYSQL_SERVER
+ /* Server-only values. Not supported in plugins. */
+ ,
+ SHOW_SCOPE_SESSION,
+ SHOW_SCOPE_ALL
+#endif
+};
+
+/**
+ SHOW STATUS Server status variable
+*/
+struct st_mysql_show_var
+{
+ const char *name;
+ char *value;
+ enum enum_mysql_show_type type;
+ enum enum_mysql_show_scope scope;
+};
+
+#define SHOW_VAR_MAX_NAME_LEN 64
+#define SHOW_VAR_FUNC_BUFF_SIZE 1024
+typedef int (*mysql_show_var_func)(MYSQL_THD, struct st_mysql_show_var*, char *);
+
+
+/*
+ Constants for plugin flags.
+ */
+
+#define PLUGIN_OPT_NO_INSTALL 1UL /* Not dynamically loadable */
+#define PLUGIN_OPT_NO_UNINSTALL 2UL /* Not dynamically unloadable */
+
+
+/*
+ declarations for server variables and command line options
+*/
+
+
+#define PLUGIN_VAR_BOOL 0x0001
+#define PLUGIN_VAR_INT 0x0002
+#define PLUGIN_VAR_LONG 0x0003
+#define PLUGIN_VAR_LONGLONG 0x0004
+#define PLUGIN_VAR_STR 0x0005
+#define PLUGIN_VAR_ENUM 0x0006
+#define PLUGIN_VAR_SET 0x0007
+#define PLUGIN_VAR_DOUBLE 0x0008
+#define PLUGIN_VAR_UNSIGNED 0x0080
+#define PLUGIN_VAR_THDLOCAL 0x0100 /* Variable is per-connection */
+#define PLUGIN_VAR_READONLY 0x0200 /* Server variable is read only */
+#define PLUGIN_VAR_NOSYSVAR 0x0400 /* Not a server variable */
+#define PLUGIN_VAR_NOCMDOPT 0x0800 /* Not a command line option */
+#define PLUGIN_VAR_NOCMDARG 0x1000 /* No argument for cmd line */
+#define PLUGIN_VAR_RQCMDARG 0x0000 /* Argument required for cmd line */
+#define PLUGIN_VAR_OPCMDARG 0x2000 /* Argument optional for cmd line */
+#define PLUGIN_VAR_NODEFAULT 0x4000 /* SET DEFAULT is prohibited */
+#define PLUGIN_VAR_MEMALLOC 0x8000 /* String needs memory allocated */
+#define PLUGIN_VAR_INVISIBLE 0x10000 /* Variable should not be shown */
+
+struct st_mysql_sys_var;
+struct st_mysql_value;
+
+/*
+ SYNOPSIS
+ (*mysql_var_check_func)()
+ thd thread handle
+ var dynamic variable being altered
+ save pointer to temporary storage
+ value user provided value
+ RETURN
+ 0 user provided value is OK and the update func may be called.
+ any other value indicates error.
+
+ This function should parse the user provided value and store in the
+ provided temporary storage any data as required by the update func.
+ There is sufficient space in the temporary storage to store a double.
+ Note that the update func may not be called if any other error occurs
+ so any memory allocated should be thread-local so that it may be freed
+ automatically at the end of the statement.
+*/
+
+typedef int (*mysql_var_check_func)(MYSQL_THD thd,
+ struct st_mysql_sys_var *var,
+ void *save, struct st_mysql_value *value);
+
+/*
+ SYNOPSIS
+ (*mysql_var_update_func)()
+ thd thread handle
+ var dynamic variable being altered
+ var_ptr pointer to dynamic variable
+ save pointer to temporary storage
+ RETURN
+ NONE
+
+ This function should use the validated value stored in the temporary store
+ and persist it in the provided pointer to the dynamic variable.
+ For example, strings may require memory to be allocated.
+*/
+typedef void (*mysql_var_update_func)(MYSQL_THD thd,
+ struct st_mysql_sys_var *var,
+ void *var_ptr, const void *save);
+
+
+/* the following declarations are for internal use only */
+
+
+#define PLUGIN_VAR_MASK \
+ (PLUGIN_VAR_READONLY | PLUGIN_VAR_NOSYSVAR | \
+ PLUGIN_VAR_NOCMDOPT | PLUGIN_VAR_NOCMDARG | \
+ PLUGIN_VAR_OPCMDARG | PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_MEMALLOC | \
+ PLUGIN_VAR_NODEFAULT | PLUGIN_VAR_INVISIBLE)
+
+#define MYSQL_PLUGIN_VAR_HEADER \
+ int flags; \
+ const char *name; \
+ const char *comment; \
+ mysql_var_check_func check; \
+ mysql_var_update_func update
+
+#define MYSQL_SYSVAR_NAME(name) mysql_sysvar_ ## name
+#define MYSQL_SYSVAR(name) \
+ ((struct st_mysql_sys_var *)&(MYSQL_SYSVAR_NAME(name)))
+
+/*
+ for global variables, the value pointer is the first
+ element after the header, the default value is the second.
+ for thread variables, the value offset is the first
+ element after the header, the default value is the second.
+*/
+
+
+#define DECLARE_MYSQL_SYSVAR_BASIC(name, type) struct { \
+ MYSQL_PLUGIN_VAR_HEADER; \
+ type *value; \
+ const type def_val; \
+} MYSQL_SYSVAR_NAME(name)
+
+#define DECLARE_MYSQL_SYSVAR_SIMPLE(name, type) struct { \
+ MYSQL_PLUGIN_VAR_HEADER; \
+ type *value; type def_val; \
+ type min_val; type max_val; \
+ type blk_sz; \
+} MYSQL_SYSVAR_NAME(name)
+
+#define DECLARE_MYSQL_SYSVAR_TYPELIB(name, type) struct { \
+ MYSQL_PLUGIN_VAR_HEADER; \
+ type *value; type def_val; \
+ TYPELIB *typelib; \
+} MYSQL_SYSVAR_NAME(name)
+
+#define DECLARE_THDVAR_FUNC(type) \
+ type *(*resolve)(MYSQL_THD thd, int offset)
+
+#define DECLARE_MYSQL_THDVAR_BASIC(name, type) struct { \
+ MYSQL_PLUGIN_VAR_HEADER; \
+ int offset; \
+ const type def_val; \
+ DECLARE_THDVAR_FUNC(type); \
+} MYSQL_SYSVAR_NAME(name)
+
+#define DECLARE_MYSQL_THDVAR_SIMPLE(name, type) struct { \
+ MYSQL_PLUGIN_VAR_HEADER; \
+ int offset; \
+ type def_val; type min_val; \
+ type max_val; type blk_sz; \
+ DECLARE_THDVAR_FUNC(type); \
+} MYSQL_SYSVAR_NAME(name)
+
+#define DECLARE_MYSQL_THDVAR_TYPELIB(name, type) struct { \
+ MYSQL_PLUGIN_VAR_HEADER; \
+ int offset; \
+ type def_val; \
+ DECLARE_THDVAR_FUNC(type); \
+ TYPELIB *typelib; \
+} MYSQL_SYSVAR_NAME(name)
+
+
+/*
+ the following declarations are for use by plugin implementors
+*/
+
+#define MYSQL_SYSVAR_BOOL(name, varname, opt, comment, check, update, def) \
+DECLARE_MYSQL_SYSVAR_BASIC(name, char) = { \
+ PLUGIN_VAR_BOOL | ((opt) & PLUGIN_VAR_MASK), \
+ #name, comment, check, update, &varname, def}
+
+#define MYSQL_SYSVAR_STR(name, varname, opt, comment, check, update, def) \
+DECLARE_MYSQL_SYSVAR_BASIC(name, char *) = { \
+ PLUGIN_VAR_STR | ((opt) & PLUGIN_VAR_MASK), \
+ #name, comment, check, update, &varname, def}
+
+#define MYSQL_SYSVAR_INT(name, varname, opt, comment, check, update, def, min, max, blk) \
+DECLARE_MYSQL_SYSVAR_SIMPLE(name, int) = { \
+ PLUGIN_VAR_INT | ((opt) & PLUGIN_VAR_MASK), \
+ #name, comment, check, update, &varname, def, min, max, blk }
+
+#define MYSQL_SYSVAR_UINT(name, varname, opt, comment, check, update, def, min, max, blk) \
+DECLARE_MYSQL_SYSVAR_SIMPLE(name, unsigned int) = { \
+ PLUGIN_VAR_INT | PLUGIN_VAR_UNSIGNED | ((opt) & PLUGIN_VAR_MASK), \
+ #name, comment, check, update, &varname, def, min, max, blk }
+
+#define MYSQL_SYSVAR_LONG(name, varname, opt, comment, check, update, def, min, max, blk) \
+DECLARE_MYSQL_SYSVAR_SIMPLE(name, long) = { \
+ PLUGIN_VAR_LONG | ((opt) & PLUGIN_VAR_MASK), \
+ #name, comment, check, update, &varname, def, min, max, blk }
+
+#define MYSQL_SYSVAR_ULONG(name, varname, opt, comment, check, update, def, min, max, blk) \
+DECLARE_MYSQL_SYSVAR_SIMPLE(name, unsigned long) = { \
+ PLUGIN_VAR_LONG | PLUGIN_VAR_UNSIGNED | ((opt) & PLUGIN_VAR_MASK), \
+ #name, comment, check, update, &varname, def, min, max, blk }
+
+#define MYSQL_SYSVAR_LONGLONG(name, varname, opt, comment, check, update, def, min, max, blk) \
+DECLARE_MYSQL_SYSVAR_SIMPLE(name, long long) = { \
+ PLUGIN_VAR_LONGLONG | ((opt) & PLUGIN_VAR_MASK), \
+ #name, comment, check, update, &varname, def, min, max, blk }
+
+#define MYSQL_SYSVAR_ULONGLONG(name, varname, opt, comment, check, update, def, min, max, blk) \
+DECLARE_MYSQL_SYSVAR_SIMPLE(name, unsigned long long) = { \
+ PLUGIN_VAR_LONGLONG | PLUGIN_VAR_UNSIGNED | ((opt) & PLUGIN_VAR_MASK), \
+ #name, comment, check, update, &varname, def, min, max, blk }
+
+#define MYSQL_SYSVAR_ENUM(name, varname, opt, comment, check, update, def, typelib) \
+DECLARE_MYSQL_SYSVAR_TYPELIB(name, unsigned long) = { \
+ PLUGIN_VAR_ENUM | ((opt) & PLUGIN_VAR_MASK), \
+ #name, comment, check, update, &varname, def, typelib }
+
+#define MYSQL_SYSVAR_SET(name, varname, opt, comment, check, update, def, typelib) \
+DECLARE_MYSQL_SYSVAR_TYPELIB(name, unsigned long long) = { \
+ PLUGIN_VAR_SET | ((opt) & PLUGIN_VAR_MASK), \
+ #name, comment, check, update, &varname, def, typelib }
+
+#define MYSQL_SYSVAR_DOUBLE(name, varname, opt, comment, check, update, def, min, max, blk) \
+DECLARE_MYSQL_SYSVAR_SIMPLE(name, double) = { \
+ PLUGIN_VAR_DOUBLE | ((opt) & PLUGIN_VAR_MASK), \
+ #name, comment, check, update, &varname, def, min, max, blk }
+
+#define MYSQL_THDVAR_BOOL(name, opt, comment, check, update, def) \
+DECLARE_MYSQL_THDVAR_BASIC(name, char) = { \
+ PLUGIN_VAR_BOOL | PLUGIN_VAR_THDLOCAL | ((opt) & PLUGIN_VAR_MASK), \
+ #name, comment, check, update, -1, def, NULL}
+
+#define MYSQL_THDVAR_STR(name, opt, comment, check, update, def) \
+DECLARE_MYSQL_THDVAR_BASIC(name, char *) = { \
+ PLUGIN_VAR_STR | PLUGIN_VAR_THDLOCAL | ((opt) & PLUGIN_VAR_MASK), \
+ #name, comment, check, update, -1, def, NULL}
+
+#define MYSQL_THDVAR_INT(name, opt, comment, check, update, def, min, max, blk) \
+DECLARE_MYSQL_THDVAR_SIMPLE(name, int) = { \
+ PLUGIN_VAR_INT | PLUGIN_VAR_THDLOCAL | ((opt) & PLUGIN_VAR_MASK), \
+ #name, comment, check, update, -1, def, min, max, blk, NULL }
+
+#define MYSQL_THDVAR_UINT(name, opt, comment, check, update, def, min, max, blk) \
+DECLARE_MYSQL_THDVAR_SIMPLE(name, unsigned int) = { \
+ PLUGIN_VAR_INT | PLUGIN_VAR_THDLOCAL | PLUGIN_VAR_UNSIGNED | ((opt) & PLUGIN_VAR_MASK), \
+ #name, comment, check, update, -1, def, min, max, blk, NULL }
+
+#define MYSQL_THDVAR_LONG(name, opt, comment, check, update, def, min, max, blk) \
+DECLARE_MYSQL_THDVAR_SIMPLE(name, long) = { \
+ PLUGIN_VAR_LONG | PLUGIN_VAR_THDLOCAL | ((opt) & PLUGIN_VAR_MASK), \
+ #name, comment, check, update, -1, def, min, max, blk, NULL }
+
+#define MYSQL_THDVAR_ULONG(name, opt, comment, check, update, def, min, max, blk) \
+DECLARE_MYSQL_THDVAR_SIMPLE(name, unsigned long) = { \
+ PLUGIN_VAR_LONG | PLUGIN_VAR_THDLOCAL | PLUGIN_VAR_UNSIGNED | ((opt) & PLUGIN_VAR_MASK), \
+ #name, comment, check, update, -1, def, min, max, blk, NULL }
+
+#define MYSQL_THDVAR_LONGLONG(name, opt, comment, check, update, def, min, max, blk) \
+DECLARE_MYSQL_THDVAR_SIMPLE(name, long long) = { \
+ PLUGIN_VAR_LONGLONG | PLUGIN_VAR_THDLOCAL | ((opt) & PLUGIN_VAR_MASK), \
+ #name, comment, check, update, -1, def, min, max, blk, NULL }
+
+#define MYSQL_THDVAR_ULONGLONG(name, opt, comment, check, update, def, min, max, blk) \
+DECLARE_MYSQL_THDVAR_SIMPLE(name, unsigned long long) = { \
+ PLUGIN_VAR_LONGLONG | PLUGIN_VAR_THDLOCAL | PLUGIN_VAR_UNSIGNED | ((opt) & PLUGIN_VAR_MASK), \
+ #name, comment, check, update, -1, def, min, max, blk, NULL }
+
+#define MYSQL_THDVAR_ENUM(name, opt, comment, check, update, def, typelib) \
+DECLARE_MYSQL_THDVAR_TYPELIB(name, unsigned long) = { \
+ PLUGIN_VAR_ENUM | PLUGIN_VAR_THDLOCAL | ((opt) & PLUGIN_VAR_MASK), \
+ #name, comment, check, update, -1, def, NULL, typelib }
+
+#define MYSQL_THDVAR_SET(name, opt, comment, check, update, def, typelib) \
+DECLARE_MYSQL_THDVAR_TYPELIB(name, unsigned long long) = { \
+ PLUGIN_VAR_SET | PLUGIN_VAR_THDLOCAL | ((opt) & PLUGIN_VAR_MASK), \
+ #name, comment, check, update, -1, def, NULL, typelib }
+
+#define MYSQL_THDVAR_DOUBLE(name, opt, comment, check, update, def, min, max, blk) \
+DECLARE_MYSQL_THDVAR_SIMPLE(name, double) = { \
+ PLUGIN_VAR_DOUBLE | PLUGIN_VAR_THDLOCAL | ((opt) & PLUGIN_VAR_MASK), \
+ #name, comment, check, update, -1, def, min, max, blk, NULL }
+
+/* accessor macros */
+
+#define SYSVAR(name) \
+ (*(MYSQL_SYSVAR_NAME(name).value))
+
+/* when thd == null, result points to global value */
+#define THDVAR(thd, name) \
+ (*(MYSQL_SYSVAR_NAME(name).resolve(thd, MYSQL_SYSVAR_NAME(name).offset)))
+
+
+/*
+ Plugin description structure.
+*/
+
+struct st_mysql_plugin
+{
+ int type; /* the plugin type (a MYSQL_XXX_PLUGIN value) */
+ void *info; /* pointer to type-specific plugin descriptor */
+ const char *name; /* plugin name */
+ const char *author; /* plugin author (for I_S.PLUGINS) */
+ const char *descr; /* general descriptive text (for I_S.PLUGINS) */
+ int license; /* the plugin license (PLUGIN_LICENSE_XXX) */
+ int (*init)(MYSQL_PLUGIN); /* the function to invoke when plugin is loaded */
+ int (*deinit)(MYSQL_PLUGIN);/* the function to invoke when plugin is unloaded */
+ unsigned int version; /* plugin version (for I_S.PLUGINS) */
+ struct st_mysql_show_var *status_vars;
+ struct st_mysql_sys_var **system_vars;
+ void * __reserved1; /* reserved for dependency checking */
+ unsigned long flags; /* flags for plugin */
+};
+
+/*************************************************************************
+ API for Full-text parser plugin. (MYSQL_FTPARSER_PLUGIN)
+*/
+#define MYSQL_FTPARSER_INTERFACE_VERSION 0x0101
+
+/*************************************************************************
+ API for Query Rewrite plugin. (MYSQL_QUERY_REWRITE_PLUGIN)
+*/
+
+#define MYSQL_REWRITE_PRE_PARSE_INTERFACE_VERSION 0x0010
+#define MYSQL_REWRITE_POST_PARSE_INTERFACE_VERSION 0x0010
+
+/*************************************************************************
+ API for Storage Engine plugin. (MYSQL_DAEMON_PLUGIN)
+*/
+
+/* handlertons of different MySQL releases are incompatible */
+#define MYSQL_DAEMON_INTERFACE_VERSION (MYSQL_VERSION_ID << 8)
+
+/*
+ Here we define only the descriptor structure, that is referred from
+ st_mysql_plugin.
+*/
+
+struct st_mysql_daemon
+{
+ int interface_version;
+};
+
+
+/*************************************************************************
+ API for I_S plugin. (MYSQL_INFORMATION_SCHEMA_PLUGIN)
+*/
+
+/* handlertons of different MySQL releases are incompatible */
+#define MYSQL_INFORMATION_SCHEMA_INTERFACE_VERSION (MYSQL_VERSION_ID << 8)
+
+/*
+ Here we define only the descriptor structure, that is referred from
+ st_mysql_plugin.
+*/
+
+struct st_mysql_information_schema
+{
+ int interface_version;
+};
+
+
+/*************************************************************************
+ API for Storage Engine plugin. (MYSQL_STORAGE_ENGINE_PLUGIN)
+*/
+
+/* handlertons of different MySQL releases are incompatible */
+#define MYSQL_HANDLERTON_INTERFACE_VERSION (MYSQL_VERSION_ID << 8)
+
+/*
+ The real API is in the sql/handler.h
+ Here we define only the descriptor structure, that is referred from
+ st_mysql_plugin.
+*/
+
+struct st_mysql_storage_engine
+{
+ int interface_version;
+};
+
+struct handlerton;
+
+
+/*
+ API for Replication plugin. (MYSQL_REPLICATION_PLUGIN)
+*/
+ #define MYSQL_REPLICATION_INTERFACE_VERSION 0x0400
+
+ /**
+ Replication plugin descriptor
+ */
+ struct Mysql_replication {
+ int interface_version;
+ };
+
+/*************************************************************************
+ st_mysql_value struct for reading values from mysqld.
+ Used by server variables framework to parse user-provided values.
+ Will be used for arguments when implementing UDFs.
+
+ Note that val_str() returns a string in temporary memory
+ that will be freed at the end of statement. Copy the string
+ if you need it to persist.
+*/
+
+#define MYSQL_VALUE_TYPE_STRING 0
+#define MYSQL_VALUE_TYPE_REAL 1
+#define MYSQL_VALUE_TYPE_INT 2
+
+struct st_mysql_value
+{
+ int (*value_type)(struct st_mysql_value *);
+ const char *(*val_str)(struct st_mysql_value *, char *buffer, int *length);
+ int (*val_real)(struct st_mysql_value *, double *realbuf);
+ int (*val_int)(struct st_mysql_value *, long long *intbuf);
+ int (*is_unsigned)(struct st_mysql_value *);
+};
+
+
+/*************************************************************************
+ Miscellaneous functions for plugin implementors
+*/
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int thd_in_lock_tables(const MYSQL_THD thd);
+int thd_tablespace_op(const MYSQL_THD thd);
+long long thd_test_options(const MYSQL_THD thd, long long test_options);
+int thd_sql_command(const MYSQL_THD thd);
+const char *set_thd_proc_info(MYSQL_THD thd, const char *info,
+ const char *calling_func,
+ const char *calling_file,
+ const unsigned int calling_line);
+void **thd_ha_data(const MYSQL_THD thd, const struct handlerton *hton);
+void thd_storage_lock_wait(MYSQL_THD thd, long long value);
+int thd_tx_isolation(const MYSQL_THD thd);
+int thd_tx_is_read_only(const MYSQL_THD thd);
+MYSQL_THD thd_tx_arbitrate(MYSQL_THD requestor, MYSQL_THD holder);
+int thd_tx_priority(const MYSQL_THD thd);
+int thd_tx_is_dd_trx(const MYSQL_THD thd);
+char *thd_security_context(MYSQL_THD thd, char *buffer, size_t length,
+ size_t max_query_len);
+/* Increments the row counter, see THD::row_count */
+void thd_inc_row_count(MYSQL_THD thd);
+int thd_allow_batch(MYSQL_THD thd);
+
+
+/**
+ Mark transaction to rollback and mark error as fatal to a
+ sub-statement if in sub statement mode.
+
+ @param thd user thread connection handle
+ @param all if all != 0, rollback the main transaction
+*/
+
+void thd_mark_transaction_to_rollback(MYSQL_THD thd, int all);
+
+/**
+ Create a temporary file.
+
+ @details
+ The temporary file is created in a location specified by the mysql
+ server configuration (--tmpdir option). The caller does not need to
+ delete the file, it will be deleted automatically.
+
+ @param prefix prefix for temporary file name
+ @retval -1 error
+ @retval >= 0 a file handle that can be passed to dup or my_close
+*/
+int mysql_tmpfile(const char *prefix);
+
+/**
+ Check the killed state of a connection
+
+ @details
+ In MySQL support for the KILL statement is cooperative. The KILL
+ statement only sets a "killed" flag. This function returns the value
+ of that flag. A thread should check it often, especially inside
+ time-consuming loops, and gracefully abort the operation if it is
+ non-zero.
+
+ @param thd user thread connection handle
+ @retval 0 the connection is active
+ @retval 1 the connection has been killed
+*/
+int thd_killed(const MYSQL_THD thd);
+
+/**
+ Set the killed status of the current statement.
+
+ @param thd user thread connection handle
+*/
+void thd_set_kill_status(const MYSQL_THD thd);
+
+/**
+ Get binary log position for latest written entry.
+
+ @note The file variable will be set to a buffer holding the name of
+ the file name currently, but this can change if a rotation
+ occur. Copy the string if you want to retain it.
+
+ @param thd Use thread connection handle
+ @param file_var Pointer to variable that will hold the file name.
+ @param pos_var Pointer to variable that will hold the file position.
+ */
+void thd_binlog_pos(const MYSQL_THD thd,
+ const char **file_var,
+ unsigned long long *pos_var);
+
+/**
+ Return the thread id of a user thread
+
+ @param thd user thread connection handle
+ @return thread id
+*/
+unsigned long thd_get_thread_id(const MYSQL_THD thd);
+
+/**
+ Get the XID for this connection's transaction
+
+ @param thd user thread connection handle
+ @param xid location where identifier is stored
+*/
+void thd_get_xid(const MYSQL_THD thd, MYSQL_XID *xid);
+
+/**
+ Invalidate the query cache for a given table.
+
+ @param thd user thread connection handle
+ @param key databasename/tablename in the canonical format.
+ @param key_length length of key in bytes, including the PATH separator
+ @param using_trx flag: TRUE if using transactions, FALSE otherwise
+*/
+void mysql_query_cache_invalidate4(MYSQL_THD thd,
+ const char *key, unsigned int key_length,
+ int using_trx);
+
+
+/**
+ Provide a handler data getter to simplify coding
+*/
+void *thd_get_ha_data(const MYSQL_THD thd, const struct handlerton *hton);
+
+
+/**
+ Provide a handler data setter to simplify coding
+
+ @details
+ Set ha_data pointer (storage engine per-connection information).
+
+ To avoid unclean deactivation (uninstall) of storage engine plugin
+ in the middle of transaction, additional storage engine plugin
+ lock is acquired.
+
+ If ha_data is not null and storage engine plugin was not locked
+ by thd_set_ha_data() in this connection before, storage engine
+ plugin gets locked.
+
+ If ha_data is null and storage engine plugin was locked by
+ thd_set_ha_data() in this connection before, storage engine
+ plugin lock gets released.
+
+ If handlerton::close_connection() didn't reset ha_data, server does
+ it immediately after calling handlerton::close_connection().
+*/
+void thd_set_ha_data(MYSQL_THD thd, const struct handlerton *hton,
+ const void *ha_data);
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _my_plugin_h */
diff --git a/db/include/mysql/plugin_audit.h b/db/include/mysql/plugin_audit.h
new file mode 100644
index 0000000..12dc8b8
--- /dev/null
+++ b/db/include/mysql/plugin_audit.h
@@ -0,0 +1,565 @@
+/* Copyright (c) 2007, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 _my_audit_h
+#define _my_audit_h
+
+#include "plugin.h"
+#include "mysql/mysql_lex_string.h"
+#ifndef MYSQL_ABI_CHECK
+#include "m_string.h"
+#endif
+#include "my_command.h"
+#include "my_sqlcommand.h"
+
+#define MYSQL_AUDIT_INTERFACE_VERSION 0x0401
+
+/**
+ @enum mysql_event_class_t
+
+ Audit event classes.
+*/
+typedef enum
+{
+ MYSQL_AUDIT_GENERAL_CLASS = 0,
+ MYSQL_AUDIT_CONNECTION_CLASS = 1,
+ MYSQL_AUDIT_PARSE_CLASS = 2,
+ MYSQL_AUDIT_AUTHORIZATION_CLASS = 3,
+ MYSQL_AUDIT_TABLE_ACCESS_CLASS = 4,
+ MYSQL_AUDIT_GLOBAL_VARIABLE_CLASS = 5,
+ MYSQL_AUDIT_SERVER_STARTUP_CLASS = 6,
+ MYSQL_AUDIT_SERVER_SHUTDOWN_CLASS = 7,
+ MYSQL_AUDIT_COMMAND_CLASS = 8,
+ MYSQL_AUDIT_QUERY_CLASS = 9,
+ MYSQL_AUDIT_STORED_PROGRAM_CLASS = 10,
+ /* This item must be last in the list. */
+ MYSQL_AUDIT_CLASS_MASK_SIZE
+} mysql_event_class_t;
+
+/**
+ @struct st_mysql_audit
+
+ The descriptor structure that is referred from st_mysql_plugin.
+*/
+struct st_mysql_audit
+{
+ /**
+ Interface version.
+ */
+ int interface_version;
+
+ /**
+ Event occurs when the event class consumer is to be
+ disassociated from the specified THD.This would typically occur
+ before some operation which may require sleeping - such as when
+ waiting for the next query from the client.
+ */
+ void (*release_thd)(MYSQL_THD);
+
+ /**
+ Invoked whenever an event occurs which is of any
+ class for which the plugin has interest.The second argument
+ indicates the specific event class and the third argument is data
+ as required for that class.
+ */
+ int (*event_notify)(MYSQL_THD, mysql_event_class_t, const void *);
+
+ /**
+ An array of bits used to indicate what event classes
+ that this plugin wants to receive.
+ */
+ unsigned long class_mask[MYSQL_AUDIT_CLASS_MASK_SIZE];
+};
+
+/**
+ @typedef enum_sql_command_t
+
+ SQL command type definition.
+*/
+typedef enum enum_sql_command enum_sql_command_t;
+
+/**
+ @enum mysql_event_general_subclass_t
+
+ Events for the MYSQL_AUDIT_GENERAL_CLASS event class.
+*/
+typedef enum
+{
+ /** occurs before emitting to the general query log. */
+ MYSQL_AUDIT_GENERAL_LOG = 1 << 0,
+ /** occurs before transmitting errors to the user. */
+ MYSQL_AUDIT_GENERAL_ERROR = 1 << 1,
+ /** occurs after transmitting a resultset to the user. */
+ MYSQL_AUDIT_GENERAL_RESULT = 1 << 2,
+ /** occurs after transmitting a resultset or errors */
+ MYSQL_AUDIT_GENERAL_STATUS = 1 << 3
+} mysql_event_general_subclass_t;
+
+#define MYSQL_AUDIT_GENERAL_ALL (MYSQL_AUDIT_GENERAL_LOG | \
+ MYSQL_AUDIT_GENERAL_ERROR | \
+ MYSQL_AUDIT_GENERAL_RESULT | \
+ MYSQL_AUDIT_GENERAL_STATUS)
+/**
+ @struct mysql_event_general
+
+ Structure for the MYSQL_AUDIT_GENERAL_CLASS event class.
+*/
+struct mysql_event_general
+{
+ mysql_event_general_subclass_t event_subclass;
+ int general_error_code;
+ unsigned long general_thread_id;
+ MYSQL_LEX_CSTRING general_user;
+ MYSQL_LEX_CSTRING general_command;
+ MYSQL_LEX_CSTRING general_query;
+ struct charset_info_st *general_charset;
+ unsigned long long general_time;
+ unsigned long long general_rows;
+ MYSQL_LEX_CSTRING general_host;
+ MYSQL_LEX_CSTRING general_sql_command;
+ MYSQL_LEX_CSTRING general_external_user;
+ MYSQL_LEX_CSTRING general_ip;
+};
+
+/**
+ @enum mysql_event_connection_subclass_t
+
+ Events for MYSQL_AUDIT_CONNECTION_CLASS event class.
+*/
+typedef enum
+{
+ /** occurs after authentication phase is completed. */
+ MYSQL_AUDIT_CONNECTION_CONNECT = 1 << 0,
+ /** occurs after connection is terminated. */
+ MYSQL_AUDIT_CONNECTION_DISCONNECT = 1 << 1,
+ /** occurs after COM_CHANGE_USER RPC is completed. */
+ MYSQL_AUDIT_CONNECTION_CHANGE_USER = 1 << 2,
+ /** occurs before authentication. */
+ MYSQL_AUDIT_CONNECTION_PRE_AUTHENTICATE = 1 << 3
+} mysql_event_connection_subclass_t;
+
+#define MYSQL_AUDIT_CONNECTION_ALL (MYSQL_AUDIT_CONNECTION_CONNECT | \
+ MYSQL_AUDIT_CONNECTION_DISCONNECT | \
+ MYSQL_AUDIT_CONNECTION_CHANGE_USER | \
+ MYSQL_AUDIT_CONNECTION_PRE_AUTHENTICATE)
+/**
+ @struct mysql_event_connection
+
+ Structure for the MYSQL_AUDIT_CONNECTION_CLASS event class.
+*/
+struct mysql_event_connection
+{
+ /** Event subclass. */
+ mysql_event_connection_subclass_t event_subclass;
+ /** Current status of the connection. */
+ int status;
+ /** Connection id. */
+ unsigned long connection_id;
+ /** User name of this connection. */
+ MYSQL_LEX_CSTRING user;
+ /** Priv user name. */
+ MYSQL_LEX_CSTRING priv_user;
+ /** External user name. */
+ MYSQL_LEX_CSTRING external_user;
+ /** Proxy user used for this connection. */
+ MYSQL_LEX_CSTRING proxy_user;
+ /** Connection host. */
+ MYSQL_LEX_CSTRING host;
+ /** IP of the connection. */
+ MYSQL_LEX_CSTRING ip;
+ /** Database name specified at connection time. */
+ MYSQL_LEX_CSTRING database;
+ /** Connection type:
+ - 0 Undefined
+ - 1 TCP/IP
+ - 2 Socket
+ - 3 Named pipe
+ - 4 SSL
+ - 5 Shared memory
+ */
+ int connection_type;
+};
+
+/**
+@enum mysql_event_parse_subclass_t
+
+Events for MYSQL_AUDIT_PARSE_CLASS event class.
+*/
+typedef enum
+{
+ /** occurs before the query parsing. */
+ MYSQL_AUDIT_PARSE_PREPARSE = 1 << 0,
+ /** occurs after the query parsing. */
+ MYSQL_AUDIT_PARSE_POSTPARSE = 1 << 1
+} mysql_event_parse_subclass_t;
+
+#define MYSQL_AUDIT_PARSE_ALL (MYSQL_AUDIT_PARSE_PREPARSE | \
+ MYSQL_AUDIT_PARSE_POSTPARSE)
+
+typedef enum
+{
+ MYSQL_AUDIT_PARSE_REWRITE_PLUGIN_NONE = 0,
+ /// mysql_event_parse::flags Must be set by a plugin if the query is rewritten.
+ MYSQL_AUDIT_PARSE_REWRITE_PLUGIN_QUERY_REWRITTEN = 1 << 0,
+ /// mysql_event_parse::flags Is set by the server if the query is prepared statement.
+ MYSQL_AUDIT_PARSE_REWRITE_PLUGIN_IS_PREPARED_STATEMENT = 1 << 1
+} mysql_event_parse_rewrite_plugin_flag;
+
+/** Data for the MYSQL_AUDIT_PARSE events */
+struct mysql_event_parse
+{
+ /** MYSQL_AUDIT_[PRE|POST]_PARSE event id */
+ mysql_event_parse_subclass_t event_subclass;
+
+ /** one of FLAG_REWRITE_PLUGIN_* */
+ mysql_event_parse_rewrite_plugin_flag *flags;
+
+ /** input: the original query text */
+ MYSQL_LEX_CSTRING query;
+
+ /** output: returns the null-terminated rewriten query allocated by my_malloc() */
+ MYSQL_LEX_CSTRING *rewritten_query;
+};
+
+/**
+ @enum mysql_event_authorization_subclass_t
+
+ Events for MYSQL_AUDIT_AUTHORIZATION_CLASS event class.
+*/
+typedef enum
+{
+ MYSQL_AUDIT_AUTHORIZATION_USER = 1 << 0,
+ /** Occurs when database privilege is checked. */
+ MYSQL_AUDIT_AUTHORIZATION_DB = 1 << 1,
+ /** Occurs when table privilege is checked. */
+ MYSQL_AUDIT_AUTHORIZATION_TABLE = 1 << 2,
+ /** Occurs when column privilege is checked. */
+ MYSQL_AUDIT_AUTHORIZATION_COLUMN = 1 << 3,
+ /** Occurs when procedure privilege is checked. */
+ MYSQL_AUDIT_AUTHORIZATION_PROCEDURE = 1 << 4,
+ /** Occurs when proxy privilege is checked. */
+ MYSQL_AUDIT_AUTHORIZATION_PROXY = 1 << 5
+} mysql_event_authorization_subclass_t;
+
+#define MYSQL_AUDIT_AUTHORIZATION_ALL (MYSQL_AUDIT_AUTHORIZATION_USER | \
+ MYSQL_AUDIT_AUTHORIZATION_DB | \
+ MYSQL_AUDIT_AUTHORIZATION_TABLE | \
+ MYSQL_AUDIT_AUTHORIZATION_COLUMN | \
+ MYSQL_AUDIT_AUTHORIZATION_PROCEDURE | \
+ MYSQL_AUDIT_AUTHORIZATION_PROXY)
+/**
+ @struct mysql_event_authorization
+
+ Structure for MYSQL_AUDIT_AUTHORIZATION_CLASS event class.
+*/
+struct mysql_event_authorization
+{
+ /** Event subclass. */
+ mysql_event_authorization_subclass_t event_subclass;
+ /** Event status. */
+ int status;
+ /** Connection id. */
+ unsigned int connection_id;
+ /** SQL command id. */
+ enum_sql_command_t sql_command_id;
+ /** SQL query text. */
+ MYSQL_LEX_CSTRING query;
+ /** SQL query charset. */
+ const struct charset_info_st *query_charset;
+ /** Database name. */
+ MYSQL_LEX_CSTRING database;
+ /** Table name. */
+ MYSQL_LEX_CSTRING table;
+ /** Other name associated with the event. */
+ MYSQL_LEX_CSTRING object;
+ /** Requested authorization privileges. */
+ unsigned long requested_privilege;
+ /** Currently granted authorization privileges. */
+ unsigned long granted_privilege;
+};
+
+/**
+ @enum mysql_event_table_row_access_subclass_t
+
+ Events for MYSQL_AUDIT_TABLE_ACCES_CLASS event class.
+*/
+typedef enum
+{
+ /** Occurs when table data are read. */
+ MYSQL_AUDIT_TABLE_ACCESS_READ = 1 << 0,
+ /** Occurs when table data are inserted. */
+ MYSQL_AUDIT_TABLE_ACCESS_INSERT = 1 << 1,
+ /** Occurs when table data are updated. */
+ MYSQL_AUDIT_TABLE_ACCESS_UPDATE = 1 << 2,
+ /** Occurs when table data are deleted. */
+ MYSQL_AUDIT_TABLE_ACCESS_DELETE = 1 << 3
+} mysql_event_table_access_subclass_t;
+
+#define MYSQL_AUDIT_TABLE_ACCESS_ALL (MYSQL_AUDIT_TABLE_ACCESS_READ | \
+ MYSQL_AUDIT_TABLE_ACCESS_INSERT | \
+ MYSQL_AUDIT_TABLE_ACCESS_UPDATE | \
+ MYSQL_AUDIT_TABLE_ACCESS_DELETE)
+
+/**
+ @struct mysql_event_table_row_access
+
+ Structure for MYSQL_AUDIT_TABLE_ACCES_CLASS event class.
+*/
+struct mysql_event_table_access
+{
+ /** Event subclass. */
+ mysql_event_table_access_subclass_t event_subclass;
+ /** Connection id. */
+ unsigned long connection_id;
+ /** SQL command id. */
+ enum_sql_command_t sql_command_id;
+ /** SQL query. */
+ MYSQL_LEX_CSTRING query;
+ /** SQL query charset. */
+ const struct charset_info_st *query_charset;
+ /** Database name. */
+ MYSQL_LEX_CSTRING table_database;
+ /** Table name. */
+ MYSQL_LEX_CSTRING table_name;
+};
+
+/**
+ @enum mysql_event_global_variable_subclass_t
+
+ Events for MYSQL_AUDIT_GLOBAL_VARIABLE_CLASS event class.
+*/
+typedef enum
+{
+ /** Occurs when global variable is retrieved. */
+ MYSQL_AUDIT_GLOBAL_VARIABLE_GET = 1 << 0,
+ /** Occurs when global variable is set. */
+ MYSQL_AUDIT_GLOBAL_VARIABLE_SET = 1 << 1
+} mysql_event_global_variable_subclass_t;
+
+#define MYSQL_AUDIT_GLOBAL_VARIABLE_ALL (MYSQL_AUDIT_GLOBAL_VARIABLE_GET | \
+ MYSQL_AUDIT_GLOBAL_VARIABLE_SET)
+
+/** Events for MYSQL_AUDIT_GLOBAL_VARIABLE_CLASS event class. */
+struct mysql_event_global_variable
+{
+ /** Event subclass. */
+ mysql_event_global_variable_subclass_t event_subclass;
+ /** Connection id. */
+ unsigned long connection_id;
+ /** SQL command id. */
+ enum_sql_command_t sql_command_id;
+ /** Variable name. */
+ MYSQL_LEX_CSTRING variable_name;
+ /** Variable value. */
+ MYSQL_LEX_CSTRING variable_value;
+};
+
+/**
+ @enum mysql_event_server_startup_subclass_t
+
+ Events for MYSQL_AUDIT_SERVER_STARTUP_CLASS event class.
+*/
+typedef enum
+{
+ /** Occurs after all subsystem are initialized during system start. */
+ MYSQL_AUDIT_SERVER_STARTUP_STARTUP = 1 << 0
+} mysql_event_server_startup_subclass_t;
+
+#define MYSQL_AUDIT_SERVER_STARTUP_ALL (MYSQL_AUDIT_SERVER_STARTUP_STARTUP)
+
+/**
+ @struct mysql_event_server_startup
+
+ Structure for MYSQL_AUDIT_SERVER_STARTUP_CLASS event class.
+*/
+struct mysql_event_server_startup
+{
+ /** Event subclass. */
+ mysql_event_server_startup_subclass_t event_subclass;
+ /** Command line arguments. */
+ const char **argv;
+ /** Command line arguments count. */
+ unsigned int argc;
+};
+
+/**
+ @enum mysql_event_server_shutdown_subclass_t
+
+ Events for MYSQL_AUDIT_SERVER_SHUTDOWN_CLASS event class.
+*/
+typedef enum
+{
+ /** Occurs when global variable is set. */
+ MYSQL_AUDIT_SERVER_SHUTDOWN_SHUTDOWN = 1 << 0
+} mysql_event_server_shutdown_subclass_t;
+
+#define MYSQL_AUDIT_SERVER_SHUTDOWN_ALL (MYSQL_AUDIT_SERVER_SHUTDOWN_SHUTDOWN)
+
+/**
+ @enum mysql_server_shutdown_reason_t
+
+ Server shutdown reason.
+*/
+typedef enum
+{
+ /** User requested shut down. */
+ MYSQL_AUDIT_SERVER_SHUTDOWN_REASON_SHUTDOWN,
+ /** The server aborts. */
+ MYSQL_AUDIT_SERVER_SHUTDOWN_REASON_ABORT
+} mysql_server_shutdown_reason_t;
+
+/**
+ @struct mysql_event_server_shutdown
+
+ Structure for MYSQL_AUDIT_SERVER_SHUTDOWN_CLASS event class.
+*/
+struct mysql_event_server_shutdown
+{
+ /** Shutdown event. */
+ mysql_event_server_shutdown_subclass_t event_subclass;
+ /** Exit code associated with the shutdown event. */
+ int exit_code;
+ /** Shutdown reason. */
+ mysql_server_shutdown_reason_t reason;
+};
+
+/**
+ @enum mysql_event_command_subclass_t
+
+ Events for MYSQL_AUDIT_COMMAND_CLASS event class.
+*/
+typedef enum
+{
+ /** Command start event. */
+ MYSQL_AUDIT_COMMAND_START = 1 << 0,
+ /** Command end event. */
+ MYSQL_AUDIT_COMMAND_END = 1 << 1
+} mysql_event_command_subclass_t;
+
+#define MYSQL_AUDIT_COMMAND_ALL (MYSQL_AUDIT_COMMAND_START | \
+ MYSQL_AUDIT_COMMAND_END)
+/**
+ @typedef enum_server_command_t
+
+ Server command type definition.
+*/
+typedef enum enum_server_command enum_server_command_t;
+
+/**
+ @struct mysql_event_command
+
+ Event for MYSQL_AUDIT_COMMAND_CLASS event class.
+ Events generated as a result of RPC command requests.
+*/
+struct mysql_event_command
+{
+ /** Command event subclass. */
+ mysql_event_command_subclass_t event_subclass;
+ /** Command event status. */
+ int status;
+ /** Connection id. */
+ unsigned long connection_id;
+ /** Command id. */
+ enum_server_command_t command_id;
+};
+
+/**
+ @enum mysql_event_query_subclass_t
+
+ Events for MYSQL_AUDIT_QUERY_CLASS event class.
+*/
+typedef enum
+{
+ /** Query start event. */
+ MYSQL_AUDIT_QUERY_START = 1 << 0,
+ /** Nested query start event. */
+ MYSQL_AUDIT_QUERY_NESTED_START = 1 << 1,
+ /** Query post parse event. */
+ MYSQL_AUDIT_QUERY_STATUS_END = 1 << 2,
+ /** Nested query status end event. */
+ MYSQL_AUDIT_QUERY_NESTED_STATUS_END = 1 << 3
+} mysql_event_query_subclass_t;
+
+#define MYSQL_AUDIT_QUERY_ALL (MYSQL_AUDIT_QUERY_START | \
+ MYSQL_AUDIT_QUERY_NESTED_START | \
+ MYSQL_AUDIT_QUERY_STATUS_END | \
+ MYSQL_AUDIT_QUERY_NESTED_STATUS_END)
+/**
+ @struct mysql_event_command
+
+ Event for MYSQL_AUDIT_COMMAND_CLASS event class.
+*/
+struct mysql_event_query
+{
+ /** Event subclass. */
+ mysql_event_query_subclass_t event_subclass;
+ /** Event status. */
+ int status;
+ /** Connection id. */
+ unsigned long connection_id;
+ /** SQL command id. */
+ enum_sql_command_t sql_command_id;
+ /** SQL query. */
+ MYSQL_LEX_CSTRING query;
+ /** SQL query charset. */
+ const struct charset_info_st *query_charset;
+};
+
+/**
+ @enum mysql_event_stored_program_subclass_t
+
+ Events for MYSQL_AUDIT_STORED_PROGRAM_CLASS event class.
+*/
+typedef enum
+{
+ /** Stored program execution event. */
+ MYSQL_AUDIT_STORED_PROGRAM_EXECUTE = 1 << 0
+} mysql_event_stored_program_subclass_t;
+
+#define MYSQL_AUDIT_STORED_PROGRAM_ALL (MYSQL_AUDIT_STORED_PROGRAM_EXECUTE)
+
+/**
+ @struct mysql_event_command
+
+Event for MYSQL_AUDIT_COMMAND_CLASS event class.
+*/
+struct mysql_event_stored_program
+{
+ /** Event subclass. */
+ mysql_event_stored_program_subclass_t event_subclass;
+ /** Connection id. */
+ unsigned long connection_id;
+ /** SQL command id. */
+ enum_sql_command_t sql_command_id;
+ /** SQL query text. */
+ MYSQL_LEX_CSTRING query;
+ /** SQL query charset. */
+ const struct charset_info_st *query_charset;
+ /** The Database the procedure is defined in. */
+ MYSQL_LEX_CSTRING database;
+ /** Name of the stored program. */
+ MYSQL_LEX_CSTRING name;
+ /** Stored program parameters. */
+ void *parameters;
+};
+
+#endif
diff --git a/db/include/mysql/plugin_audit.h.pp b/db/include/mysql/plugin_audit.h.pp
new file mode 100644
index 0000000..5c6597e
--- /dev/null
+++ b/db/include/mysql/plugin_audit.h.pp
@@ -0,0 +1,514 @@
+#include "plugin.h"
+typedef void * MYSQL_PLUGIN;
+struct st_mysql_xid {
+ long formatID;
+ long gtrid_length;
+ long bqual_length;
+ char data[128];
+};
+typedef struct st_mysql_xid MYSQL_XID;
+enum enum_mysql_show_type
+{
+ SHOW_UNDEF, SHOW_BOOL,
+ SHOW_INT,
+ SHOW_LONG,
+ SHOW_LONGLONG,
+ SHOW_CHAR, SHOW_CHAR_PTR,
+ SHOW_ARRAY, SHOW_FUNC, SHOW_DOUBLE
+};
+enum enum_mysql_show_scope
+{
+ SHOW_SCOPE_UNDEF,
+ SHOW_SCOPE_GLOBAL
+};
+struct st_mysql_show_var
+{
+ const char *name;
+ char *value;
+ enum enum_mysql_show_type type;
+ enum enum_mysql_show_scope scope;
+};
+typedef int (*mysql_show_var_func)(void*, struct st_mysql_show_var*, char *);
+struct st_mysql_sys_var;
+struct st_mysql_value;
+typedef int (*mysql_var_check_func)(void* thd,
+ struct st_mysql_sys_var *var,
+ void *save, struct st_mysql_value *value);
+typedef void (*mysql_var_update_func)(void* thd,
+ struct st_mysql_sys_var *var,
+ void *var_ptr, const void *save);
+struct st_mysql_plugin
+{
+ int type;
+ void *info;
+ const char *name;
+ const char *author;
+ const char *descr;
+ int license;
+ int (*init)(MYSQL_PLUGIN);
+ int (*deinit)(MYSQL_PLUGIN);
+ unsigned int version;
+ struct st_mysql_show_var *status_vars;
+ struct st_mysql_sys_var **system_vars;
+ void * __reserved1;
+ unsigned long flags;
+};
+struct st_mysql_daemon
+{
+ int interface_version;
+};
+struct st_mysql_information_schema
+{
+ int interface_version;
+};
+struct st_mysql_storage_engine
+{
+ int interface_version;
+};
+struct handlerton;
+ struct Mysql_replication {
+ int interface_version;
+ };
+struct st_mysql_value
+{
+ int (*value_type)(struct st_mysql_value *);
+ const char *(*val_str)(struct st_mysql_value *, char *buffer, int *length);
+ int (*val_real)(struct st_mysql_value *, double *realbuf);
+ int (*val_int)(struct st_mysql_value *, long long *intbuf);
+ int (*is_unsigned)(struct st_mysql_value *);
+};
+int thd_in_lock_tables(const void* thd);
+int thd_tablespace_op(const void* thd);
+long long thd_test_options(const void* thd, long long test_options);
+int thd_sql_command(const void* thd);
+const char *set_thd_proc_info(void* thd, const char *info,
+ const char *calling_func,
+ const char *calling_file,
+ const unsigned int calling_line);
+void **thd_ha_data(const void* thd, const struct handlerton *hton);
+void thd_storage_lock_wait(void* thd, long long value);
+int thd_tx_isolation(const void* thd);
+int thd_tx_is_read_only(const void* thd);
+void* thd_tx_arbitrate(void* requestor, void* holder);
+int thd_tx_priority(const void* thd);
+int thd_tx_is_dd_trx(const void* thd);
+char *thd_security_context(void* thd, char *buffer, size_t length,
+ size_t max_query_len);
+void thd_inc_row_count(void* thd);
+int thd_allow_batch(void* thd);
+void thd_mark_transaction_to_rollback(void* thd, int all);
+int mysql_tmpfile(const char *prefix);
+int thd_killed(const void* thd);
+void thd_set_kill_status(const void* thd);
+void thd_binlog_pos(const void* thd,
+ const char **file_var,
+ unsigned long long *pos_var);
+unsigned long thd_get_thread_id(const void* thd);
+void thd_get_xid(const void* thd, MYSQL_XID *xid);
+void mysql_query_cache_invalidate4(void* thd,
+ const char *key, unsigned int key_length,
+ int using_trx);
+void *thd_get_ha_data(const void* thd, const struct handlerton *hton);
+void thd_set_ha_data(void* thd, const struct handlerton *hton,
+ const void *ha_data);
+#include "mysql/mysql_lex_string.h"
+struct st_mysql_lex_string
+{
+ char *str;
+ size_t length;
+};
+typedef struct st_mysql_lex_string MYSQL_LEX_STRING;
+struct st_mysql_const_lex_string
+{
+ const char *str;
+ size_t length;
+};
+typedef struct st_mysql_const_lex_string MYSQL_LEX_CSTRING;
+#include "my_command.h"
+enum enum_server_command
+{
+ COM_SLEEP,
+ COM_QUIT,
+ COM_INIT_DB,
+ COM_QUERY,
+ COM_FIELD_LIST,
+ COM_CREATE_DB,
+ COM_DROP_DB,
+ COM_REFRESH,
+ COM_SHUTDOWN,
+ COM_STATISTICS,
+ COM_PROCESS_INFO,
+ COM_CONNECT,
+ COM_PROCESS_KILL,
+ COM_DEBUG,
+ COM_PING,
+ COM_TIME,
+ COM_DELAYED_INSERT,
+ COM_CHANGE_USER,
+ COM_BINLOG_DUMP,
+ COM_TABLE_DUMP,
+ COM_CONNECT_OUT,
+ COM_REGISTER_SLAVE,
+ COM_STMT_PREPARE,
+ COM_STMT_EXECUTE,
+ COM_STMT_SEND_LONG_DATA,
+ COM_STMT_CLOSE,
+ COM_STMT_RESET,
+ COM_SET_OPTION,
+ COM_STMT_FETCH,
+ COM_DAEMON,
+ COM_BINLOG_DUMP_GTID,
+ COM_RESET_CONNECTION,
+ COM_END
+};
+#include "my_sqlcommand.h"
+enum enum_sql_command {
+ SQLCOM_SELECT,
+ SQLCOM_CREATE_TABLE,
+ SQLCOM_CREATE_INDEX,
+ SQLCOM_ALTER_TABLE,
+ SQLCOM_UPDATE,
+ SQLCOM_INSERT,
+ SQLCOM_INSERT_SELECT,
+ SQLCOM_DELETE,
+ SQLCOM_TRUNCATE,
+ SQLCOM_DROP_TABLE,
+ SQLCOM_DROP_INDEX,
+ SQLCOM_SHOW_DATABASES,
+ SQLCOM_SHOW_TABLES,
+ SQLCOM_SHOW_FIELDS,
+ SQLCOM_SHOW_KEYS,
+ SQLCOM_SHOW_VARIABLES,
+ SQLCOM_SHOW_STATUS,
+ SQLCOM_SHOW_ENGINE_LOGS,
+ SQLCOM_SHOW_ENGINE_STATUS,
+ SQLCOM_SHOW_ENGINE_MUTEX,
+ SQLCOM_SHOW_PROCESSLIST,
+ SQLCOM_SHOW_MASTER_STAT,
+ SQLCOM_SHOW_SLAVE_STAT,
+ SQLCOM_SHOW_GRANTS,
+ SQLCOM_SHOW_CREATE,
+ SQLCOM_SHOW_CHARSETS,
+ SQLCOM_SHOW_COLLATIONS,
+ SQLCOM_SHOW_CREATE_DB,
+ SQLCOM_SHOW_TABLE_STATUS,
+ SQLCOM_SHOW_TRIGGERS,
+ SQLCOM_LOAD,
+ SQLCOM_SET_OPTION,
+ SQLCOM_LOCK_TABLES,
+ SQLCOM_UNLOCK_TABLES,
+ SQLCOM_GRANT,
+ SQLCOM_CHANGE_DB,
+ SQLCOM_CREATE_DB,
+ SQLCOM_DROP_DB,
+ SQLCOM_ALTER_DB,
+ SQLCOM_REPAIR,
+ SQLCOM_REPLACE,
+ SQLCOM_REPLACE_SELECT,
+ SQLCOM_CREATE_FUNCTION,
+ SQLCOM_DROP_FUNCTION,
+ SQLCOM_REVOKE,
+ SQLCOM_OPTIMIZE,
+ SQLCOM_CHECK,
+ SQLCOM_ASSIGN_TO_KEYCACHE,
+ SQLCOM_PRELOAD_KEYS,
+ SQLCOM_FLUSH,
+ SQLCOM_KILL,
+ SQLCOM_ANALYZE,
+ SQLCOM_ROLLBACK,
+ SQLCOM_ROLLBACK_TO_SAVEPOINT,
+ SQLCOM_COMMIT,
+ SQLCOM_SAVEPOINT,
+ SQLCOM_RELEASE_SAVEPOINT,
+ SQLCOM_SLAVE_START,
+ SQLCOM_SLAVE_STOP,
+ SQLCOM_START_GROUP_REPLICATION,
+ SQLCOM_STOP_GROUP_REPLICATION,
+ SQLCOM_BEGIN,
+ SQLCOM_CHANGE_MASTER,
+ SQLCOM_CHANGE_REPLICATION_FILTER,
+ SQLCOM_RENAME_TABLE,
+ SQLCOM_RESET,
+ SQLCOM_PURGE,
+ SQLCOM_PURGE_BEFORE,
+ SQLCOM_SHOW_BINLOGS,
+ SQLCOM_SHOW_OPEN_TABLES,
+ SQLCOM_HA_OPEN,
+ SQLCOM_HA_CLOSE,
+ SQLCOM_HA_READ,
+ SQLCOM_SHOW_SLAVE_HOSTS,
+ SQLCOM_DELETE_MULTI,
+ SQLCOM_UPDATE_MULTI,
+ SQLCOM_SHOW_BINLOG_EVENTS,
+ SQLCOM_DO,
+ SQLCOM_SHOW_WARNS,
+ SQLCOM_EMPTY_QUERY,
+ SQLCOM_SHOW_ERRORS,
+ SQLCOM_SHOW_STORAGE_ENGINES,
+ SQLCOM_SHOW_PRIVILEGES,
+ SQLCOM_HELP,
+ SQLCOM_CREATE_USER,
+ SQLCOM_DROP_USER,
+ SQLCOM_RENAME_USER,
+ SQLCOM_REVOKE_ALL,
+ SQLCOM_CHECKSUM,
+ SQLCOM_CREATE_PROCEDURE,
+ SQLCOM_CREATE_SPFUNCTION,
+ SQLCOM_CALL,
+ SQLCOM_DROP_PROCEDURE,
+ SQLCOM_ALTER_PROCEDURE,
+ SQLCOM_ALTER_FUNCTION,
+ SQLCOM_SHOW_CREATE_PROC,
+ SQLCOM_SHOW_CREATE_FUNC,
+ SQLCOM_SHOW_STATUS_PROC,
+ SQLCOM_SHOW_STATUS_FUNC,
+ SQLCOM_PREPARE,
+ SQLCOM_EXECUTE,
+ SQLCOM_DEALLOCATE_PREPARE,
+ SQLCOM_CREATE_VIEW,
+ SQLCOM_DROP_VIEW,
+ SQLCOM_CREATE_TRIGGER,
+ SQLCOM_DROP_TRIGGER,
+ SQLCOM_XA_START,
+ SQLCOM_XA_END,
+ SQLCOM_XA_PREPARE,
+ SQLCOM_XA_COMMIT,
+ SQLCOM_XA_ROLLBACK,
+ SQLCOM_XA_RECOVER,
+ SQLCOM_SHOW_PROC_CODE,
+ SQLCOM_SHOW_FUNC_CODE,
+ SQLCOM_ALTER_TABLESPACE,
+ SQLCOM_INSTALL_PLUGIN,
+ SQLCOM_UNINSTALL_PLUGIN,
+ SQLCOM_BINLOG_BASE64_EVENT,
+ SQLCOM_SHOW_PLUGINS,
+ SQLCOM_CREATE_SERVER,
+ SQLCOM_DROP_SERVER,
+ SQLCOM_ALTER_SERVER,
+ SQLCOM_CREATE_EVENT,
+ SQLCOM_ALTER_EVENT,
+ SQLCOM_DROP_EVENT,
+ SQLCOM_SHOW_CREATE_EVENT,
+ SQLCOM_SHOW_EVENTS,
+ SQLCOM_SHOW_CREATE_TRIGGER,
+ SQLCOM_ALTER_DB_UPGRADE,
+ SQLCOM_SHOW_PROFILE,
+ SQLCOM_SHOW_PROFILES,
+ SQLCOM_SIGNAL,
+ SQLCOM_RESIGNAL,
+ SQLCOM_SHOW_RELAYLOG_EVENTS,
+ SQLCOM_GET_DIAGNOSTICS,
+ SQLCOM_ALTER_USER,
+ SQLCOM_EXPLAIN_OTHER,
+ SQLCOM_SHOW_CREATE_USER,
+ SQLCOM_SHUTDOWN,
+ SQLCOM_ALTER_INSTANCE,
+ SQLCOM_END
+};
+typedef enum
+{
+ MYSQL_AUDIT_GENERAL_CLASS = 0,
+ MYSQL_AUDIT_CONNECTION_CLASS = 1,
+ MYSQL_AUDIT_PARSE_CLASS = 2,
+ MYSQL_AUDIT_AUTHORIZATION_CLASS = 3,
+ MYSQL_AUDIT_TABLE_ACCESS_CLASS = 4,
+ MYSQL_AUDIT_GLOBAL_VARIABLE_CLASS = 5,
+ MYSQL_AUDIT_SERVER_STARTUP_CLASS = 6,
+ MYSQL_AUDIT_SERVER_SHUTDOWN_CLASS = 7,
+ MYSQL_AUDIT_COMMAND_CLASS = 8,
+ MYSQL_AUDIT_QUERY_CLASS = 9,
+ MYSQL_AUDIT_STORED_PROGRAM_CLASS = 10,
+ MYSQL_AUDIT_CLASS_MASK_SIZE
+} mysql_event_class_t;
+struct st_mysql_audit
+{
+ int interface_version;
+ void (*release_thd)(void*);
+ int (*event_notify)(void*, mysql_event_class_t, const void *);
+ unsigned long class_mask[MYSQL_AUDIT_CLASS_MASK_SIZE];
+};
+typedef enum enum_sql_command enum_sql_command_t;
+typedef enum
+{
+ MYSQL_AUDIT_GENERAL_LOG = 1 << 0,
+ MYSQL_AUDIT_GENERAL_ERROR = 1 << 1,
+ MYSQL_AUDIT_GENERAL_RESULT = 1 << 2,
+ MYSQL_AUDIT_GENERAL_STATUS = 1 << 3
+} mysql_event_general_subclass_t;
+struct mysql_event_general
+{
+ mysql_event_general_subclass_t event_subclass;
+ int general_error_code;
+ unsigned long general_thread_id;
+ MYSQL_LEX_CSTRING general_user;
+ MYSQL_LEX_CSTRING general_command;
+ MYSQL_LEX_CSTRING general_query;
+ struct charset_info_st *general_charset;
+ unsigned long long general_time;
+ unsigned long long general_rows;
+ MYSQL_LEX_CSTRING general_host;
+ MYSQL_LEX_CSTRING general_sql_command;
+ MYSQL_LEX_CSTRING general_external_user;
+ MYSQL_LEX_CSTRING general_ip;
+};
+typedef enum
+{
+ MYSQL_AUDIT_CONNECTION_CONNECT = 1 << 0,
+ MYSQL_AUDIT_CONNECTION_DISCONNECT = 1 << 1,
+ MYSQL_AUDIT_CONNECTION_CHANGE_USER = 1 << 2,
+ MYSQL_AUDIT_CONNECTION_PRE_AUTHENTICATE = 1 << 3
+} mysql_event_connection_subclass_t;
+struct mysql_event_connection
+{
+ mysql_event_connection_subclass_t event_subclass;
+ int status;
+ unsigned long connection_id;
+ MYSQL_LEX_CSTRING user;
+ MYSQL_LEX_CSTRING priv_user;
+ MYSQL_LEX_CSTRING external_user;
+ MYSQL_LEX_CSTRING proxy_user;
+ MYSQL_LEX_CSTRING host;
+ MYSQL_LEX_CSTRING ip;
+ MYSQL_LEX_CSTRING database;
+ int connection_type;
+};
+typedef enum
+{
+ MYSQL_AUDIT_PARSE_PREPARSE = 1 << 0,
+ MYSQL_AUDIT_PARSE_POSTPARSE = 1 << 1
+} mysql_event_parse_subclass_t;
+typedef enum
+{
+ MYSQL_AUDIT_PARSE_REWRITE_PLUGIN_NONE = 0,
+ MYSQL_AUDIT_PARSE_REWRITE_PLUGIN_QUERY_REWRITTEN = 1 << 0,
+ MYSQL_AUDIT_PARSE_REWRITE_PLUGIN_IS_PREPARED_STATEMENT = 1 << 1
+} mysql_event_parse_rewrite_plugin_flag;
+struct mysql_event_parse
+{
+ mysql_event_parse_subclass_t event_subclass;
+ mysql_event_parse_rewrite_plugin_flag *flags;
+ MYSQL_LEX_CSTRING query;
+ MYSQL_LEX_CSTRING *rewritten_query;
+};
+typedef enum
+{
+ MYSQL_AUDIT_AUTHORIZATION_USER = 1 << 0,
+ MYSQL_AUDIT_AUTHORIZATION_DB = 1 << 1,
+ MYSQL_AUDIT_AUTHORIZATION_TABLE = 1 << 2,
+ MYSQL_AUDIT_AUTHORIZATION_COLUMN = 1 << 3,
+ MYSQL_AUDIT_AUTHORIZATION_PROCEDURE = 1 << 4,
+ MYSQL_AUDIT_AUTHORIZATION_PROXY = 1 << 5
+} mysql_event_authorization_subclass_t;
+struct mysql_event_authorization
+{
+ mysql_event_authorization_subclass_t event_subclass;
+ int status;
+ unsigned int connection_id;
+ enum_sql_command_t sql_command_id;
+ MYSQL_LEX_CSTRING query;
+ const struct charset_info_st *query_charset;
+ MYSQL_LEX_CSTRING database;
+ MYSQL_LEX_CSTRING table;
+ MYSQL_LEX_CSTRING object;
+ unsigned long requested_privilege;
+ unsigned long granted_privilege;
+};
+typedef enum
+{
+ MYSQL_AUDIT_TABLE_ACCESS_READ = 1 << 0,
+ MYSQL_AUDIT_TABLE_ACCESS_INSERT = 1 << 1,
+ MYSQL_AUDIT_TABLE_ACCESS_UPDATE = 1 << 2,
+ MYSQL_AUDIT_TABLE_ACCESS_DELETE = 1 << 3
+} mysql_event_table_access_subclass_t;
+struct mysql_event_table_access
+{
+ mysql_event_table_access_subclass_t event_subclass;
+ unsigned long connection_id;
+ enum_sql_command_t sql_command_id;
+ MYSQL_LEX_CSTRING query;
+ const struct charset_info_st *query_charset;
+ MYSQL_LEX_CSTRING table_database;
+ MYSQL_LEX_CSTRING table_name;
+};
+typedef enum
+{
+ MYSQL_AUDIT_GLOBAL_VARIABLE_GET = 1 << 0,
+ MYSQL_AUDIT_GLOBAL_VARIABLE_SET = 1 << 1
+} mysql_event_global_variable_subclass_t;
+struct mysql_event_global_variable
+{
+ mysql_event_global_variable_subclass_t event_subclass;
+ unsigned long connection_id;
+ enum_sql_command_t sql_command_id;
+ MYSQL_LEX_CSTRING variable_name;
+ MYSQL_LEX_CSTRING variable_value;
+};
+typedef enum
+{
+ MYSQL_AUDIT_SERVER_STARTUP_STARTUP = 1 << 0
+} mysql_event_server_startup_subclass_t;
+struct mysql_event_server_startup
+{
+ mysql_event_server_startup_subclass_t event_subclass;
+ const char **argv;
+ unsigned int argc;
+};
+typedef enum
+{
+ MYSQL_AUDIT_SERVER_SHUTDOWN_SHUTDOWN = 1 << 0
+} mysql_event_server_shutdown_subclass_t;
+typedef enum
+{
+ MYSQL_AUDIT_SERVER_SHUTDOWN_REASON_SHUTDOWN,
+ MYSQL_AUDIT_SERVER_SHUTDOWN_REASON_ABORT
+} mysql_server_shutdown_reason_t;
+struct mysql_event_server_shutdown
+{
+ mysql_event_server_shutdown_subclass_t event_subclass;
+ int exit_code;
+ mysql_server_shutdown_reason_t reason;
+};
+typedef enum
+{
+ MYSQL_AUDIT_COMMAND_START = 1 << 0,
+ MYSQL_AUDIT_COMMAND_END = 1 << 1
+} mysql_event_command_subclass_t;
+typedef enum enum_server_command enum_server_command_t;
+struct mysql_event_command
+{
+ mysql_event_command_subclass_t event_subclass;
+ int status;
+ unsigned long connection_id;
+ enum_server_command_t command_id;
+};
+typedef enum
+{
+ MYSQL_AUDIT_QUERY_START = 1 << 0,
+ MYSQL_AUDIT_QUERY_NESTED_START = 1 << 1,
+ MYSQL_AUDIT_QUERY_STATUS_END = 1 << 2,
+ MYSQL_AUDIT_QUERY_NESTED_STATUS_END = 1 << 3
+} mysql_event_query_subclass_t;
+struct mysql_event_query
+{
+ mysql_event_query_subclass_t event_subclass;
+ int status;
+ unsigned long connection_id;
+ enum_sql_command_t sql_command_id;
+ MYSQL_LEX_CSTRING query;
+ const struct charset_info_st *query_charset;
+};
+typedef enum
+{
+ MYSQL_AUDIT_STORED_PROGRAM_EXECUTE = 1 << 0
+} mysql_event_stored_program_subclass_t;
+struct mysql_event_stored_program
+{
+ mysql_event_stored_program_subclass_t event_subclass;
+ unsigned long connection_id;
+ enum_sql_command_t sql_command_id;
+ MYSQL_LEX_CSTRING query;
+ const struct charset_info_st *query_charset;
+ MYSQL_LEX_CSTRING database;
+ MYSQL_LEX_CSTRING name;
+ void *parameters;
+};
diff --git a/db/include/mysql/plugin_auth.h b/db/include/mysql/plugin_auth.h
new file mode 100644
index 0000000..ff942c5
--- /dev/null
+++ b/db/include/mysql/plugin_auth.h
@@ -0,0 +1,185 @@
+#ifndef MYSQL_PLUGIN_AUTH_INCLUDED
+/* Copyright (c) 2010, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 */
+
+/**
+ @file
+
+ Authentication Plugin API.
+
+ This file defines the API for server authentication plugins.
+*/
+
+#define MYSQL_PLUGIN_AUTH_INCLUDED
+
+#include
+
+#define MYSQL_AUTHENTICATION_INTERFACE_VERSION 0x0101
+
+#include "plugin_auth_common.h"
+
+/* defines for MYSQL_SERVER_AUTH_INFO.password_used */
+
+#define PASSWORD_USED_NO 0
+#define PASSWORD_USED_YES 1
+#define PASSWORD_USED_NO_MENTION 2
+
+/* Authentication flags */
+
+#define AUTH_FLAG_PRIVILEGED_USER_FOR_PASSWORD_CHANGE (1L << 0)
+#define AUTH_FLAG_USES_INTERNAL_STORAGE (1L << 1)
+
+/**
+ Provides server plugin access to authentication information
+*/
+typedef struct st_mysql_server_auth_info
+{
+ /**
+ User name as sent by the client and shown in USER().
+ NULL if the client packet with the user name was not received yet.
+ */
+ char *user_name;
+
+ /**
+ Length of user_name
+ */
+ unsigned int user_name_length;
+
+ /**
+ A corresponding column value from the mysql.user table for the
+ matching account name
+ */
+ const char *auth_string;
+
+ /**
+ Length of auth_string
+ */
+ unsigned long auth_string_length;
+
+ /**
+ Matching account name as found in the mysql.user table.
+ A plugin can override it with another name that will be
+ used by MySQL for authorization, and shown in CURRENT_USER()
+ */
+ char authenticated_as[MYSQL_USERNAME_LENGTH+1];
+
+
+ /**
+ The unique user name that was used by the plugin to authenticate.
+ Plugins should put null-terminated UTF-8 here.
+ Available through the @@EXTERNAL_USER variable.
+ */
+ char external_user[512];
+
+ /**
+ This only affects the "Authentication failed. Password used: %s"
+ error message. has the following values :
+ 0 : %s will be NO.
+ 1 : %s will be YES.
+ 2 : there will be no %s.
+ Set it as appropriate or ignore at will.
+ */
+ int password_used;
+
+ /**
+ Set to the name of the connected client host, if it can be resolved,
+ or to its IP address otherwise.
+ */
+ const char *host_or_ip;
+
+ /**
+ Length of host_or_ip
+ */
+ unsigned int host_or_ip_length;
+
+} MYSQL_SERVER_AUTH_INFO;
+
+/**
+ Server authentication plugin descriptor
+*/
+struct st_mysql_auth
+{
+ int interface_version; /** version plugin uses */
+ /**
+ A plugin that a client must use for authentication with this server
+ plugin. Can be NULL to mean "any plugin".
+ */
+ const char *client_auth_plugin;
+ /**
+ Function provided by the plugin which should perform authentication (using
+ the vio functions if necessary) and return 0 if successful. The plugin can
+ also fill the info.authenticated_as field if a different username should be
+ used for authorization.
+ */
+ int (*authenticate_user)(MYSQL_PLUGIN_VIO *vio, MYSQL_SERVER_AUTH_INFO *info);
+ /**
+ New plugin API to generate password digest out of authentication string.
+ This function will first invoke a service to check for validity of the
+ password based on the policies defined and then generate encrypted hash
+
+ @param[OUT] outbuf A buffer provided by server which will hold the
+ authentication string generated by plugin.
+ @param[INOUT] outbuflen Length of server provided buffer as IN param and
+ length of plugin generated string as OUT param.
+ @param[IN] inbuf auth string provided by user.
+ @param[IN] inbuflen auth string length.
+
+ @retval 0 OK
+ 1 ERROR
+
+ */
+ int (*generate_authentication_string)(char *outbuf,
+ unsigned int *outbuflen, const char *inbuf, unsigned int inbuflen);
+ /**
+ Plugin API to validate password digest.
+
+ @param[IN] inbuf hash string to be validated.
+ @param[IN] buflen hash string length.
+
+ @retval 0 OK
+ 1 ERROR
+
+ */
+ int (*validate_authentication_string)(char* const inbuf, unsigned int buflen);
+ /**
+ Plugin API to convert scrambled password to binary form
+ based on scramble type.
+
+ @param[IN] password The password hash containing the salt.
+ @param[IN] password_len The length of the password hash.
+ @param[INOUT] salt Used as password hash based on the
+ authentication plugin.
+ @param[INOUT] salt_len The length of salt.
+
+ @retval 0 OK
+ 1 ERROR
+
+ */
+ int (*set_salt)(const char *password, unsigned int password_len,
+ unsigned char* salt, unsigned char *salt_len);
+ /**
+ Authentication plugin capabilities
+ */
+ const unsigned long authentication_flags;
+};
+#endif
+
diff --git a/db/include/mysql/plugin_auth.h.pp b/db/include/mysql/plugin_auth.h.pp
new file mode 100644
index 0000000..c2ad973
--- /dev/null
+++ b/db/include/mysql/plugin_auth.h.pp
@@ -0,0 +1,153 @@
+#include
+typedef void * MYSQL_PLUGIN;
+struct st_mysql_xid {
+ long formatID;
+ long gtrid_length;
+ long bqual_length;
+ char data[128];
+};
+typedef struct st_mysql_xid MYSQL_XID;
+enum enum_mysql_show_type
+{
+ SHOW_UNDEF, SHOW_BOOL,
+ SHOW_INT,
+ SHOW_LONG,
+ SHOW_LONGLONG,
+ SHOW_CHAR, SHOW_CHAR_PTR,
+ SHOW_ARRAY, SHOW_FUNC, SHOW_DOUBLE
+};
+enum enum_mysql_show_scope
+{
+ SHOW_SCOPE_UNDEF,
+ SHOW_SCOPE_GLOBAL
+};
+struct st_mysql_show_var
+{
+ const char *name;
+ char *value;
+ enum enum_mysql_show_type type;
+ enum enum_mysql_show_scope scope;
+};
+typedef int (*mysql_show_var_func)(void*, struct st_mysql_show_var*, char *);
+struct st_mysql_sys_var;
+struct st_mysql_value;
+typedef int (*mysql_var_check_func)(void* thd,
+ struct st_mysql_sys_var *var,
+ void *save, struct st_mysql_value *value);
+typedef void (*mysql_var_update_func)(void* thd,
+ struct st_mysql_sys_var *var,
+ void *var_ptr, const void *save);
+struct st_mysql_plugin
+{
+ int type;
+ void *info;
+ const char *name;
+ const char *author;
+ const char *descr;
+ int license;
+ int (*init)(MYSQL_PLUGIN);
+ int (*deinit)(MYSQL_PLUGIN);
+ unsigned int version;
+ struct st_mysql_show_var *status_vars;
+ struct st_mysql_sys_var **system_vars;
+ void * __reserved1;
+ unsigned long flags;
+};
+struct st_mysql_daemon
+{
+ int interface_version;
+};
+struct st_mysql_information_schema
+{
+ int interface_version;
+};
+struct st_mysql_storage_engine
+{
+ int interface_version;
+};
+struct handlerton;
+ struct Mysql_replication {
+ int interface_version;
+ };
+struct st_mysql_value
+{
+ int (*value_type)(struct st_mysql_value *);
+ const char *(*val_str)(struct st_mysql_value *, char *buffer, int *length);
+ int (*val_real)(struct st_mysql_value *, double *realbuf);
+ int (*val_int)(struct st_mysql_value *, long long *intbuf);
+ int (*is_unsigned)(struct st_mysql_value *);
+};
+int thd_in_lock_tables(const void* thd);
+int thd_tablespace_op(const void* thd);
+long long thd_test_options(const void* thd, long long test_options);
+int thd_sql_command(const void* thd);
+const char *set_thd_proc_info(void* thd, const char *info,
+ const char *calling_func,
+ const char *calling_file,
+ const unsigned int calling_line);
+void **thd_ha_data(const void* thd, const struct handlerton *hton);
+void thd_storage_lock_wait(void* thd, long long value);
+int thd_tx_isolation(const void* thd);
+int thd_tx_is_read_only(const void* thd);
+void* thd_tx_arbitrate(void* requestor, void* holder);
+int thd_tx_priority(const void* thd);
+int thd_tx_is_dd_trx(const void* thd);
+char *thd_security_context(void* thd, char *buffer, size_t length,
+ size_t max_query_len);
+void thd_inc_row_count(void* thd);
+int thd_allow_batch(void* thd);
+void thd_mark_transaction_to_rollback(void* thd, int all);
+int mysql_tmpfile(const char *prefix);
+int thd_killed(const void* thd);
+void thd_set_kill_status(const void* thd);
+void thd_binlog_pos(const void* thd,
+ const char **file_var,
+ unsigned long long *pos_var);
+unsigned long thd_get_thread_id(const void* thd);
+void thd_get_xid(const void* thd, MYSQL_XID *xid);
+void mysql_query_cache_invalidate4(void* thd,
+ const char *key, unsigned int key_length,
+ int using_trx);
+void *thd_get_ha_data(const void* thd, const struct handlerton *hton);
+void thd_set_ha_data(void* thd, const struct handlerton *hton,
+ const void *ha_data);
+#include "plugin_auth_common.h"
+typedef struct st_plugin_vio_info
+{
+ enum { MYSQL_VIO_INVALID, MYSQL_VIO_TCP, MYSQL_VIO_SOCKET,
+ MYSQL_VIO_PIPE, MYSQL_VIO_MEMORY } protocol;
+ int socket;
+} MYSQL_PLUGIN_VIO_INFO;
+typedef struct st_plugin_vio
+{
+ int (*read_packet)(struct st_plugin_vio *vio,
+ unsigned char **buf);
+ int (*write_packet)(struct st_plugin_vio *vio,
+ const unsigned char *packet,
+ int packet_len);
+ void (*info)(struct st_plugin_vio *vio, struct st_plugin_vio_info *info);
+} MYSQL_PLUGIN_VIO;
+typedef struct st_mysql_server_auth_info
+{
+ char *user_name;
+ unsigned int user_name_length;
+ const char *auth_string;
+ unsigned long auth_string_length;
+ char authenticated_as[96 +1];
+ char external_user[512];
+ int password_used;
+ const char *host_or_ip;
+ unsigned int host_or_ip_length;
+} MYSQL_SERVER_AUTH_INFO;
+struct st_mysql_auth
+{
+ int interface_version;
+ const char *client_auth_plugin;
+ int (*authenticate_user)(MYSQL_PLUGIN_VIO *vio, MYSQL_SERVER_AUTH_INFO *info);
+ int (*generate_authentication_string)(char *outbuf,
+ unsigned int *outbuflen, const char *inbuf, unsigned int inbuflen);
+ int (*validate_authentication_string)(char* const inbuf, unsigned int buflen);
+ int (*set_salt)(const char *password, unsigned int password_len,
+ unsigned char* salt, unsigned char *salt_len);
+ const unsigned long authentication_flags;
+};
diff --git a/db/include/mysql/plugin_auth_common.h b/db/include/mysql/plugin_auth_common.h
index 16fb18a..4bda8b9 100644
--- a/db/include/mysql/plugin_auth_common.h
+++ b/db/include/mysql/plugin_auth_common.h
@@ -27,7 +27,7 @@
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
/**
- @file include/mysql/plugin_auth_common.h
+ @file
This file defines constants and data structures that are the same for
both client- and server-side authentication plugins.
@@ -94,12 +94,7 @@
or not.
*/
#define CR_OK_HANDSHAKE_COMPLETE -2
-/**
- Authentication was successful with limited operations.
- It means that the both client and server side plugins decided to allow
- authentication with very limited operations ALTER USER to do registration.
-*/
-#define CR_OK_AUTH_IN_SANDBOX_MODE -3
+
/**
Flag to be passed back to server from authentication plugins via
authenticated_as when proxy mapping should be done by the server.
@@ -110,78 +105,51 @@ authenticated_as when proxy mapping should be done by the server.
We need HANDLE definition if on Windows. Define WIN32_LEAN_AND_MEAN (if
not already done) to minimize amount of imported declarations.
*/
-#if defined(_WIN32) && !defined(MYSQL_ABI_CHECK)
+#ifdef _WIN32
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#include
#endif
-struct MYSQL_PLUGIN_VIO_INFO {
- enum {
- MYSQL_VIO_INVALID,
- MYSQL_VIO_TCP,
- MYSQL_VIO_SOCKET,
- MYSQL_VIO_PIPE,
- MYSQL_VIO_MEMORY
- } protocol;
- int socket; /**< it's set, if the protocol is SOCKET or TCP */
-#if defined(_WIN32) && !defined(MYSQL_ABI_CHECK)
- HANDLE handle; /**< it's set, if the protocol is PIPE or MEMORY */
+typedef struct st_plugin_vio_info
+{
+ enum { MYSQL_VIO_INVALID, MYSQL_VIO_TCP, MYSQL_VIO_SOCKET,
+ MYSQL_VIO_PIPE, MYSQL_VIO_MEMORY } protocol;
+ int socket; /**< it's set, if the protocol is SOCKET or TCP */
+#ifdef _WIN32
+ HANDLE handle; /**< it's set, if the protocol is PIPE or MEMORY */
#endif
-};
-
-/* state of an asynchronous operation */
-enum net_async_status {
- NET_ASYNC_COMPLETE = 0,
- NET_ASYNC_NOT_READY,
- NET_ASYNC_ERROR,
- NET_ASYNC_COMPLETE_NO_MORE_RESULTS
-};
+} MYSQL_PLUGIN_VIO_INFO;
/**
Provides plugin access to communication channel
*/
-typedef struct MYSQL_PLUGIN_VIO {
+typedef struct st_plugin_vio
+{
/**
Plugin provides a pointer reference and this function sets it to the
contents of any incoming packet. Returns the packet length, or -1 if
the plugin should terminate.
*/
- int (*read_packet)(struct MYSQL_PLUGIN_VIO *vio, unsigned char **buf);
-
+ int (*read_packet)(struct st_plugin_vio *vio,
+ unsigned char **buf);
+
/**
Plugin provides a buffer with data and the length and this
function sends it as a packet. Returns 0 on success, 1 on failure.
*/
- int (*write_packet)(struct MYSQL_PLUGIN_VIO *vio, const unsigned char *packet,
+ int (*write_packet)(struct st_plugin_vio *vio,
+ const unsigned char *packet,
int packet_len);
/**
- Fills in a MYSQL_PLUGIN_VIO_INFO structure, providing the information
+ Fills in a st_plugin_vio_info structure, providing the information
about the connection.
*/
- void (*info)(struct MYSQL_PLUGIN_VIO *vio,
- struct MYSQL_PLUGIN_VIO_INFO *info);
-
- /**
- Non blocking version of read_packet. This function points buf to starting
- position of incoming packet. When this function returns NET_ASYNC_NOT_READY
- plugin should call this function again until all incoming packets are read.
- If return code is NET_ASYNC_COMPLETE, plugin can do further processing of
- read packets.
- */
- enum net_async_status (*read_packet_nonblocking)(struct MYSQL_PLUGIN_VIO *vio,
- unsigned char **buf,
- int *result);
- /**
- Non blocking version of write_packet. Sends data available in pkt of length
- pkt_len to server in asynchronous way.
- */
- enum net_async_status (*write_packet_nonblocking)(
- struct MYSQL_PLUGIN_VIO *vio, const unsigned char *pkt, int pkt_len,
- int *result);
+ void (*info)(struct st_plugin_vio *vio, struct st_plugin_vio_info *info);
} MYSQL_PLUGIN_VIO;
#endif
+
diff --git a/db/include/mysql/plugin_ftparser.h b/db/include/mysql/plugin_ftparser.h
new file mode 100644
index 0000000..e854bf1
--- /dev/null
+++ b/db/include/mysql/plugin_ftparser.h
@@ -0,0 +1,221 @@
+/* Copyright (c) 2005, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 _my_plugin_ftparser_h
+#define _my_plugin_ftparser_h
+
+#include "plugin.h"
+
+/*************************************************************************
+ API for Full-text parser plugin. (MYSQL_FTPARSER_PLUGIN)
+*/
+
+
+/* Parsing modes. Set in MYSQL_FTPARSER_PARAM::mode */
+enum enum_ftparser_mode
+{
+/*
+ Fast and simple mode. This mode is used for indexing, and natural
+ language queries.
+
+ The parser is expected to return only those words that go into the
+ index. Stopwords or too short/long words should not be returned. The
+ 'boolean_info' argument of mysql_add_word() does not have to be set.
+*/
+ MYSQL_FTPARSER_SIMPLE_MODE= 0,
+
+/*
+ Parse with stopwords mode. This mode is used in boolean searches for
+ "phrase matching."
+
+ The parser is not allowed to ignore words in this mode. Every word
+ should be returned, including stopwords and words that are too short
+ or long. The 'boolean_info' argument of mysql_add_word() does not
+ have to be set.
+*/
+ MYSQL_FTPARSER_WITH_STOPWORDS= 1,
+
+/*
+ Parse in boolean mode. This mode is used to parse a boolean query string.
+
+ The parser should provide a valid MYSQL_FTPARSER_BOOLEAN_INFO
+ structure in the 'boolean_info' argument to mysql_add_word().
+ Usually that means that the parser should recognize boolean operators
+ in the parsing stream and set appropriate fields in
+ MYSQL_FTPARSER_BOOLEAN_INFO structure accordingly. As for
+ MYSQL_FTPARSER_WITH_STOPWORDS mode, no word should be ignored.
+ Instead, use FT_TOKEN_STOPWORD for the token type of such a word.
+*/
+ MYSQL_FTPARSER_FULL_BOOLEAN_INFO= 2
+};
+
+/*
+ Token types for boolean mode searching (used for the type member of
+ MYSQL_FTPARSER_BOOLEAN_INFO struct)
+
+ FT_TOKEN_EOF: End of data.
+ FT_TOKEN_WORD: Regular word.
+ FT_TOKEN_LEFT_PAREN: Left parenthesis (start of group/sub-expression).
+ FT_TOKEN_RIGHT_PAREN: Right parenthesis (end of group/sub-expression).
+ FT_TOKEN_STOPWORD: Stopword.
+*/
+
+enum enum_ft_token_type
+{
+ FT_TOKEN_EOF= 0,
+ FT_TOKEN_WORD= 1,
+ FT_TOKEN_LEFT_PAREN= 2,
+ FT_TOKEN_RIGHT_PAREN= 3,
+ FT_TOKEN_STOPWORD= 4
+};
+
+/*
+ This structure is used in boolean search mode only. It conveys
+ boolean-mode metadata to the MySQL search engine for every word in
+ the search query. A valid instance of this structure must be filled
+ in by the plugin parser and passed as an argument in the call to
+ mysql_add_word (the callback function in the MYSQL_FTPARSER_PARAM
+ structure) when a query is parsed in boolean mode.
+
+ type: The token type. Should be one of the enum_ft_token_type values.
+
+ yesno: Whether the word must be present for a match to occur:
+ >0 Must be present
+ <0 Must not be present
+ 0 Neither; the word is optional but its presence increases the relevance
+ With the default settings of the ft_boolean_syntax system variable,
+ >0 corresponds to the '+' operator, <0 corrresponds to the '-' operator,
+ and 0 means neither operator was used.
+
+ weight_adjust: A weighting factor that determines how much a match
+ for the word counts. Positive values increase, negative - decrease the
+ relative word's importance in the query.
+
+ wasign: The sign of the word's weight in the query. If it's non-negative
+ the match for the word will increase document relevance, if it's
+ negative - decrease (the word becomes a "noise word", the less of it the
+ better).
+
+ trunc: Corresponds to the '*' operator in the default setting of the
+ ft_boolean_syntax system variable.
+
+ position: Start position in bytes of the word in the document, used by InnoDB FTS.
+*/
+
+typedef struct st_mysql_ftparser_boolean_info
+{
+ enum enum_ft_token_type type;
+ int yesno;
+ int weight_adjust;
+ char wasign;
+ char trunc;
+ int position;
+ /* These are parser state and must be removed. */
+ char prev;
+ char *quot;
+} MYSQL_FTPARSER_BOOLEAN_INFO;
+
+/*
+ The following flag means that buffer with a string (document, word)
+ may be overwritten by the caller before the end of the parsing (that is
+ before st_mysql_ftparser::deinit() call). If one needs the string
+ to survive between two successive calls of the parsing function, she
+ needs to save a copy of it. The flag may be set by MySQL before calling
+ st_mysql_ftparser::parse(), or it may be set by a plugin before calling
+ st_mysql_ftparser_param::mysql_parse() or
+ st_mysql_ftparser_param::mysql_add_word().
+*/
+#define MYSQL_FTFLAGS_NEED_COPY 1
+
+/*
+ An argument of the full-text parser plugin. This structure is
+ filled in by MySQL server and passed to the parsing function of the
+ plugin as an in/out parameter.
+
+ mysql_parse: A pointer to the built-in parser implementation of the
+ server. It's set by the server and can be used by the parser plugin
+ to invoke the MySQL default parser. If plugin's role is to extract
+ textual data from .doc, .pdf or .xml content, it might extract
+ plaintext from the content, and then pass the text to the default
+ MySQL parser to be parsed.
+
+ mysql_add_word: A server callback to add a new word. When parsing
+ a document, the server sets this to point at a function that adds
+ the word to MySQL full-text index. When parsing a search query,
+ this function will add the new word to the list of words to search
+ for. The boolean_info argument can be NULL for all cases except
+ when mode is MYSQL_FTPARSER_FULL_BOOLEAN_INFO.
+
+ ftparser_state: A generic pointer. The plugin can set it to point
+ to information to be used internally for its own purposes.
+
+ mysql_ftparam: This is set by the server. It is used by MySQL functions
+ called via mysql_parse() and mysql_add_word() callback. The plugin
+ should not modify it.
+
+ cs: Information about the character set of the document or query string.
+
+ doc: A pointer to the document or query string to be parsed.
+
+ length: Length of the document or query string, in bytes.
+
+ flags: See MYSQL_FTFLAGS_* constants above.
+
+ mode: The parsing mode. With boolean operators, with stopwords, or
+ nothing. See enum_ftparser_mode above.
+*/
+
+typedef struct st_mysql_ftparser_param
+{
+ int (*mysql_parse)(struct st_mysql_ftparser_param *,
+ char *doc, int doc_len);
+ int (*mysql_add_word)(struct st_mysql_ftparser_param *,
+ char *word, int word_len,
+ MYSQL_FTPARSER_BOOLEAN_INFO *boolean_info);
+ void *ftparser_state;
+ void *mysql_ftparam;
+ const struct charset_info_st *cs;
+ char *doc;
+ int length;
+ int flags;
+ enum enum_ftparser_mode mode;
+} MYSQL_FTPARSER_PARAM;
+
+/*
+ Full-text parser descriptor.
+
+ interface_version is, e.g., MYSQL_FTPARSER_INTERFACE_VERSION.
+ The parsing, initialization, and deinitialization functions are
+ invoked per SQL statement for which the parser is used.
+*/
+
+struct st_mysql_ftparser
+{
+ int interface_version;
+ int (*parse)(MYSQL_FTPARSER_PARAM *param);
+ int (*init)(MYSQL_FTPARSER_PARAM *param);
+ int (*deinit)(MYSQL_FTPARSER_PARAM *param);
+};
+
+
+#endif
+
diff --git a/db/include/mysql/plugin_ftparser.h.pp b/db/include/mysql/plugin_ftparser.h.pp
new file mode 100644
index 0000000..2e5db9e
--- /dev/null
+++ b/db/include/mysql/plugin_ftparser.h.pp
@@ -0,0 +1,160 @@
+#include "plugin.h"
+typedef void * MYSQL_PLUGIN;
+struct st_mysql_xid {
+ long formatID;
+ long gtrid_length;
+ long bqual_length;
+ char data[128];
+};
+typedef struct st_mysql_xid MYSQL_XID;
+enum enum_mysql_show_type
+{
+ SHOW_UNDEF, SHOW_BOOL,
+ SHOW_INT,
+ SHOW_LONG,
+ SHOW_LONGLONG,
+ SHOW_CHAR, SHOW_CHAR_PTR,
+ SHOW_ARRAY, SHOW_FUNC, SHOW_DOUBLE
+};
+enum enum_mysql_show_scope
+{
+ SHOW_SCOPE_UNDEF,
+ SHOW_SCOPE_GLOBAL
+};
+struct st_mysql_show_var
+{
+ const char *name;
+ char *value;
+ enum enum_mysql_show_type type;
+ enum enum_mysql_show_scope scope;
+};
+typedef int (*mysql_show_var_func)(void*, struct st_mysql_show_var*, char *);
+struct st_mysql_sys_var;
+struct st_mysql_value;
+typedef int (*mysql_var_check_func)(void* thd,
+ struct st_mysql_sys_var *var,
+ void *save, struct st_mysql_value *value);
+typedef void (*mysql_var_update_func)(void* thd,
+ struct st_mysql_sys_var *var,
+ void *var_ptr, const void *save);
+struct st_mysql_plugin
+{
+ int type;
+ void *info;
+ const char *name;
+ const char *author;
+ const char *descr;
+ int license;
+ int (*init)(MYSQL_PLUGIN);
+ int (*deinit)(MYSQL_PLUGIN);
+ unsigned int version;
+ struct st_mysql_show_var *status_vars;
+ struct st_mysql_sys_var **system_vars;
+ void * __reserved1;
+ unsigned long flags;
+};
+struct st_mysql_daemon
+{
+ int interface_version;
+};
+struct st_mysql_information_schema
+{
+ int interface_version;
+};
+struct st_mysql_storage_engine
+{
+ int interface_version;
+};
+struct handlerton;
+ struct Mysql_replication {
+ int interface_version;
+ };
+struct st_mysql_value
+{
+ int (*value_type)(struct st_mysql_value *);
+ const char *(*val_str)(struct st_mysql_value *, char *buffer, int *length);
+ int (*val_real)(struct st_mysql_value *, double *realbuf);
+ int (*val_int)(struct st_mysql_value *, long long *intbuf);
+ int (*is_unsigned)(struct st_mysql_value *);
+};
+int thd_in_lock_tables(const void* thd);
+int thd_tablespace_op(const void* thd);
+long long thd_test_options(const void* thd, long long test_options);
+int thd_sql_command(const void* thd);
+const char *set_thd_proc_info(void* thd, const char *info,
+ const char *calling_func,
+ const char *calling_file,
+ const unsigned int calling_line);
+void **thd_ha_data(const void* thd, const struct handlerton *hton);
+void thd_storage_lock_wait(void* thd, long long value);
+int thd_tx_isolation(const void* thd);
+int thd_tx_is_read_only(const void* thd);
+void* thd_tx_arbitrate(void* requestor, void* holder);
+int thd_tx_priority(const void* thd);
+int thd_tx_is_dd_trx(const void* thd);
+char *thd_security_context(void* thd, char *buffer, size_t length,
+ size_t max_query_len);
+void thd_inc_row_count(void* thd);
+int thd_allow_batch(void* thd);
+void thd_mark_transaction_to_rollback(void* thd, int all);
+int mysql_tmpfile(const char *prefix);
+int thd_killed(const void* thd);
+void thd_set_kill_status(const void* thd);
+void thd_binlog_pos(const void* thd,
+ const char **file_var,
+ unsigned long long *pos_var);
+unsigned long thd_get_thread_id(const void* thd);
+void thd_get_xid(const void* thd, MYSQL_XID *xid);
+void mysql_query_cache_invalidate4(void* thd,
+ const char *key, unsigned int key_length,
+ int using_trx);
+void *thd_get_ha_data(const void* thd, const struct handlerton *hton);
+void thd_set_ha_data(void* thd, const struct handlerton *hton,
+ const void *ha_data);
+enum enum_ftparser_mode
+{
+ MYSQL_FTPARSER_SIMPLE_MODE= 0,
+ MYSQL_FTPARSER_WITH_STOPWORDS= 1,
+ MYSQL_FTPARSER_FULL_BOOLEAN_INFO= 2
+};
+enum enum_ft_token_type
+{
+ FT_TOKEN_EOF= 0,
+ FT_TOKEN_WORD= 1,
+ FT_TOKEN_LEFT_PAREN= 2,
+ FT_TOKEN_RIGHT_PAREN= 3,
+ FT_TOKEN_STOPWORD= 4
+};
+typedef struct st_mysql_ftparser_boolean_info
+{
+ enum enum_ft_token_type type;
+ int yesno;
+ int weight_adjust;
+ char wasign;
+ char trunc;
+ int position;
+ char prev;
+ char *quot;
+} MYSQL_FTPARSER_BOOLEAN_INFO;
+typedef struct st_mysql_ftparser_param
+{
+ int (*mysql_parse)(struct st_mysql_ftparser_param *,
+ char *doc, int doc_len);
+ int (*mysql_add_word)(struct st_mysql_ftparser_param *,
+ char *word, int word_len,
+ MYSQL_FTPARSER_BOOLEAN_INFO *boolean_info);
+ void *ftparser_state;
+ void *mysql_ftparam;
+ const struct charset_info_st *cs;
+ char *doc;
+ int length;
+ int flags;
+ enum enum_ftparser_mode mode;
+} MYSQL_FTPARSER_PARAM;
+struct st_mysql_ftparser
+{
+ int interface_version;
+ int (*parse)(MYSQL_FTPARSER_PARAM *param);
+ int (*init)(MYSQL_FTPARSER_PARAM *param);
+ int (*deinit)(MYSQL_FTPARSER_PARAM *param);
+};
diff --git a/db/include/mysql/plugin_group_replication.h b/db/include/mysql/plugin_group_replication.h
new file mode 100644
index 0000000..7c78612
--- /dev/null
+++ b/db/include/mysql/plugin_group_replication.h
@@ -0,0 +1,159 @@
+/* Copyright (c) 2013, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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,
+ 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */
+
+#ifndef MYSQL_PLUGIN_GROUP_REPLICATION_INCLUDED
+#define MYSQL_PLUGIN_GROUP_REPLICATION_INCLUDED
+
+/* API for Group Peplication plugin. (MYSQL_GROUP_REPLICATION_PLUGIN) */
+
+#include
+#define MYSQL_GROUP_REPLICATION_INTERFACE_VERSION 0x0101
+
+/*
+ Callbacks for get_connection_status_info function.
+
+ context field can have NULL value, plugin will always pass it
+ through all callbacks, independent of its value.
+ Its value will not be used by plugin.
+
+ All callbacks are mandatory.
+*/
+typedef struct st_group_replication_connection_status_callbacks
+{
+ void* const context;
+ void (*set_channel_name)(void* const context, const char& value, size_t length);
+ void (*set_group_name)(void* const context, const char& value, size_t length);
+ void (*set_source_uuid)(void* const context, const char& value, size_t length);
+ void (*set_service_state)(void* const context, bool state);
+} GROUP_REPLICATION_CONNECTION_STATUS_CALLBACKS;
+
+/*
+ Callbacks for get_group_members_info function.
+
+ context field can have NULL value, plugin will always pass it
+ through all callbacks, independent of its value.
+ Its value will not be used by plugin.
+
+ All callbacks are mandatory.
+*/
+typedef struct st_group_replication_group_members_callbacks
+{
+ void* const context;
+ void (*set_channel_name)(void* const context, const char& value, size_t length);
+ void (*set_member_id)(void* const context, const char& value, size_t length);
+ void (*set_member_host)(void* const context, const char& value, size_t length);
+ void (*set_member_port)(void* const context, unsigned int value);
+ void (*set_member_state)(void* const context, const char& value, size_t length);
+} GROUP_REPLICATION_GROUP_MEMBERS_CALLBACKS;
+
+/*
+ Callbacks for get_group_member_stats_info function.
+
+ context field can have NULL value, plugin will always pass it
+ through all callbacks, independent of its value.
+ Its value will not be used by plugin.
+
+ All callbacks are mandatory.
+*/
+typedef struct st_group_replication_member_stats_callbacks
+{
+ void* const context;
+ void (*set_channel_name)(void* const context, const char& value, size_t length);
+ void (*set_view_id)(void* const context, const char& value, size_t length);
+ void (*set_member_id)(void* const context, const char& value, size_t length);
+ void (*set_transactions_committed)(void* const context, const char& value, size_t length);
+ void (*set_last_conflict_free_transaction)(void* const context, const char& value, size_t length);
+ void (*set_transactions_in_queue)(void* const context, unsigned long long int value);
+ void (*set_transactions_certified)(void* const context, unsigned long long int value);
+ void (*set_transactions_conflicts_detected)(void* const context, unsigned long long int value);
+ void (*set_transactions_rows_in_validation)(void* const context, unsigned long long int value);
+} GROUP_REPLICATION_GROUP_MEMBER_STATS_CALLBACKS;
+
+struct st_mysql_group_replication
+{
+ int interface_version;
+
+ /*
+ This function is used to start the group replication.
+ */
+ int (*start)();
+ /*
+ This function is used to stop the group replication.
+ */
+ int (*stop)();
+ /*
+ This function is used to get the current group replication running status.
+ */
+ bool (*is_running)();
+ /*
+ This function initializes conflict checking module with info received
+ from group on this member.
+
+ @param info View_change_log_event with conflict checking info.
+ */
+ int (*set_retrieved_certification_info)(void* info);
+
+ /*
+ This function is used to fetch information for group replication kernel stats.
+
+ @param callbacks The set of callbacks and its context used to set the
+ information on caller.
+
+ @note The caller is responsible to free memory from the info structure and
+ from all its fields.
+ */
+ bool (*get_connection_status_info)
+ (const GROUP_REPLICATION_CONNECTION_STATUS_CALLBACKS& callbacks);
+
+ /*
+ This function is used to fetch information for group replication members.
+
+ @param callbacks The set of callbacks and its context used to set the
+ information on caller.
+
+ @note The caller is responsible to free memory from the info structure and
+ from all its fields.
+ */
+ bool (*get_group_members_info)
+ (unsigned int index,
+ const GROUP_REPLICATION_GROUP_MEMBERS_CALLBACKS& callbacks);
+
+ /*
+ This function is used to fetch information for group replication members statistics.
+
+ @param callbacks The set of callbacks and its context used to set the
+ information on caller.
+
+ @note The caller is responsible to free memory from the info structure and
+ from all its fields.
+ */
+ bool (*get_group_member_stats_info)
+ (const GROUP_REPLICATION_GROUP_MEMBER_STATS_CALLBACKS& callbacks);
+
+ /*
+ Get number of group replication members.
+ */
+ unsigned int (*get_members_number_info)();
+};
+
+#endif
+
diff --git a/db/include/mysql/plugin_keyring.h b/db/include/mysql/plugin_keyring.h
new file mode 100644
index 0000000..79921b2
--- /dev/null
+++ b/db/include/mysql/plugin_keyring.h
@@ -0,0 +1,191 @@
+/* Copyright (c) 2016, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 MYSQL_PLUGIN_KEYRING_INCLUDED
+#define MYSQL_PLUGIN_KEYRING_INCLUDED
+
+/**
+ API for keyring plugin. (MYSQL_KEYRING_PLUGIN)
+*/
+
+#include "plugin.h"
+#define MYSQL_KEYRING_INTERFACE_VERSION 0x0101
+
+/**
+ The descriptor structure for the plugin, that is referred from
+ st_mysql_plugin.
+*/
+
+struct st_mysql_keyring
+{
+ int interface_version;
+ /*!
+ Add key to the keyring.
+
+ Obfuscates and adds the key to the keyring. The key is associated with
+ key_id and user_id (unique key identifier).
+
+ @param[in] key_id id of the key to store
+ @param[in] key_type type of the key to store
+ @param[in] user_id id of the owner of the key
+ @param[in] key the key itself to be stored. The memory of the key is
+ copied by the keyring, thus the key itself can be freed
+ after it was stored in the keyring.
+ @param[in] key_len the length of the key to be stored
+
+ @return Operation status
+ @retval 0 OK
+ @retval 1 ERROR
+ */
+ my_bool (*mysql_key_store)(const char *key_id, const char *key_type,
+ const char* user_id, const void *key, size_t key_len);
+ /*!
+ Fetches key from the keyring.
+
+ De-obfuscates and retrieves key associated with key_id and user_id from the
+ keyring.
+
+ @param[in] key_id id of the key to fetch
+ @param[out] key_type type of the fetched key
+ @param[in] user_id id of the owner of the key
+ @param[out] key the fetched key itself. The memory for this key is
+ allocated by the keyring and needs to be freed by the
+ user when no longer needed. Prior to freeing the memory
+ it needs to be obfuscated or zeroed.
+ @param[out] key_len the length of the fetched key
+
+ @return Operation status
+ @retval 0 OK
+ @retval 1 ERROR
+ */
+ my_bool (*mysql_key_fetch)(const char *key_id, char **key_type,
+ const char *user_id, void **key, size_t *key_len);
+
+ /*!
+ Removes key from the keyring.
+
+ Removes the key associated with key_id and user_id from the
+ keyring.
+
+ @param[in] key_id id of the key to remove
+ @param[in] user_id id of the owner of the key to remove
+
+ @return Operation status
+ @retval 0 OK
+ @retval 1 ERROR
+ */
+ my_bool (*mysql_key_remove)(const char *key_id, const char *user_id);
+
+ /*!
+ Generates and stores the key.
+
+ Generates a random key of length key_len, associates it with key_id, user_id
+ and stores it in the keyring.
+
+ @param[in] key_id id of the key to generate
+ @param[in] key_type type of the key to generate
+ @param[in] user_id id of the owner of the generated key
+ @param[in] key_len length of the key to generate
+
+ @return Operation status
+ @retval 0 OK
+ @retval 1 ERROR
+ */
+ my_bool (*mysql_key_generate)(const char *key_id, const char *key_type,
+ const char *user_id, size_t key_len);
+
+ /**
+ Keys_iterator object refers to an iterator which is used to iterate
+ on a list which refers to Key_metadata. Key_metadata hold information
+ about individual keys keyd_id and user_id. Keys_iterator should be used
+ in following sequence only.
+
+ void* iterator_ptr;
+ char key_id[64]= { 0 };
+ char user_id[64]= { 0 };
+
+ plugin_handle->mysql_key_iterator_init(&iterator_ptr);
+
+ if (iterator_ptr == NULL)
+ report error;
+
+ while (!(plugin_handle->mysql_key_iterator_get_key(iterator_ptr,
+ key_id, user_id)))
+ {
+ Fetch the keys.
+ Perform operations on the fetched keys.
+ ..
+ }
+ plugin_handle->mysql_key_iterator_deinit(iterator_ptr);
+
+ init() method accepts a void pointer which is the made to point to
+ Keys_iterator instance. Keys_iterator instance internal pointer points
+ to Key_metadata list. This list holds information about all keys stored
+ in the backed end data store of keyring plugin. After call to init()
+ please check iterator_ptr.
+
+ get_key() method accepts the above iterator_ptr as IN param and then
+ fills the passes in key_id and user_id with valid values. This can be
+ used to fetch actual key information. Every call to this method will
+ change internal pointers to advance to next position, so that the next
+ call will fetch the next key.
+
+ deinit() method frees all internal pointers along with iterator_ptr.
+ */
+ /**
+ Initialize an iterator.
+
+ @param[out] key_iterator Iterator used to fetch individual keys
+ from key_container.
+
+ @return VOID
+ */
+ void (*mysql_key_iterator_init)(void** key_iterator);
+
+ /**
+ Deinitialize an iterator.
+
+ @param[in] key_iterator Iterator used to fetch individual keys
+ from key_container.
+
+ @return VOID
+ */
+ void (*mysql_key_iterator_deinit)(void* key_iterator);
+
+ /**
+ Get details of key. Every call to this service will change
+ internal pointers to advance to next position, so that the next call
+ will fetch the next key. In case iterator moves to the end, this service
+ will return error.
+
+ @param[in] key_iterator Iterator used to fetch individual keys
+ from key_container.
+ @param[out] key_id id of the key
+ @param[out] user_id id of the owner
+
+ @return Operation status
+ @retval 0 OK
+ @retval 1 ERROR
+ */
+ bool (*mysql_key_iterator_get_key)(void* key_iterator, char *key_id, char *user_id);
+};
+#endif
diff --git a/db/include/mysql/plugin_keyring.h.pp b/db/include/mysql/plugin_keyring.h.pp
new file mode 100644
index 0000000..c975320
--- /dev/null
+++ b/db/include/mysql/plugin_keyring.h.pp
@@ -0,0 +1,127 @@
+#include "plugin.h"
+typedef void * MYSQL_PLUGIN;
+struct st_mysql_xid {
+ long formatID;
+ long gtrid_length;
+ long bqual_length;
+ char data[128];
+};
+typedef struct st_mysql_xid MYSQL_XID;
+enum enum_mysql_show_type
+{
+ SHOW_UNDEF, SHOW_BOOL,
+ SHOW_INT,
+ SHOW_LONG,
+ SHOW_LONGLONG,
+ SHOW_CHAR, SHOW_CHAR_PTR,
+ SHOW_ARRAY, SHOW_FUNC, SHOW_DOUBLE
+};
+enum enum_mysql_show_scope
+{
+ SHOW_SCOPE_UNDEF,
+ SHOW_SCOPE_GLOBAL
+};
+struct st_mysql_show_var
+{
+ const char *name;
+ char *value;
+ enum enum_mysql_show_type type;
+ enum enum_mysql_show_scope scope;
+};
+typedef int (*mysql_show_var_func)(void*, struct st_mysql_show_var*, char *);
+struct st_mysql_sys_var;
+struct st_mysql_value;
+typedef int (*mysql_var_check_func)(void* thd,
+ struct st_mysql_sys_var *var,
+ void *save, struct st_mysql_value *value);
+typedef void (*mysql_var_update_func)(void* thd,
+ struct st_mysql_sys_var *var,
+ void *var_ptr, const void *save);
+struct st_mysql_plugin
+{
+ int type;
+ void *info;
+ const char *name;
+ const char *author;
+ const char *descr;
+ int license;
+ int (*init)(MYSQL_PLUGIN);
+ int (*deinit)(MYSQL_PLUGIN);
+ unsigned int version;
+ struct st_mysql_show_var *status_vars;
+ struct st_mysql_sys_var **system_vars;
+ void * __reserved1;
+ unsigned long flags;
+};
+struct st_mysql_daemon
+{
+ int interface_version;
+};
+struct st_mysql_information_schema
+{
+ int interface_version;
+};
+struct st_mysql_storage_engine
+{
+ int interface_version;
+};
+struct handlerton;
+ struct Mysql_replication {
+ int interface_version;
+ };
+struct st_mysql_value
+{
+ int (*value_type)(struct st_mysql_value *);
+ const char *(*val_str)(struct st_mysql_value *, char *buffer, int *length);
+ int (*val_real)(struct st_mysql_value *, double *realbuf);
+ int (*val_int)(struct st_mysql_value *, long long *intbuf);
+ int (*is_unsigned)(struct st_mysql_value *);
+};
+int thd_in_lock_tables(const void* thd);
+int thd_tablespace_op(const void* thd);
+long long thd_test_options(const void* thd, long long test_options);
+int thd_sql_command(const void* thd);
+const char *set_thd_proc_info(void* thd, const char *info,
+ const char *calling_func,
+ const char *calling_file,
+ const unsigned int calling_line);
+void **thd_ha_data(const void* thd, const struct handlerton *hton);
+void thd_storage_lock_wait(void* thd, long long value);
+int thd_tx_isolation(const void* thd);
+int thd_tx_is_read_only(const void* thd);
+void* thd_tx_arbitrate(void* requestor, void* holder);
+int thd_tx_priority(const void* thd);
+int thd_tx_is_dd_trx(const void* thd);
+char *thd_security_context(void* thd, char *buffer, size_t length,
+ size_t max_query_len);
+void thd_inc_row_count(void* thd);
+int thd_allow_batch(void* thd);
+void thd_mark_transaction_to_rollback(void* thd, int all);
+int mysql_tmpfile(const char *prefix);
+int thd_killed(const void* thd);
+void thd_set_kill_status(const void* thd);
+void thd_binlog_pos(const void* thd,
+ const char **file_var,
+ unsigned long long *pos_var);
+unsigned long thd_get_thread_id(const void* thd);
+void thd_get_xid(const void* thd, MYSQL_XID *xid);
+void mysql_query_cache_invalidate4(void* thd,
+ const char *key, unsigned int key_length,
+ int using_trx);
+void *thd_get_ha_data(const void* thd, const struct handlerton *hton);
+void thd_set_ha_data(void* thd, const struct handlerton *hton,
+ const void *ha_data);
+struct st_mysql_keyring
+{
+ int interface_version;
+ my_bool (*mysql_key_store)(const char *key_id, const char *key_type,
+ const char* user_id, const void *key, size_t key_len);
+ my_bool (*mysql_key_fetch)(const char *key_id, char **key_type,
+ const char *user_id, void **key, size_t *key_len);
+ my_bool (*mysql_key_remove)(const char *key_id, const char *user_id);
+ my_bool (*mysql_key_generate)(const char *key_id, const char *key_type,
+ const char *user_id, size_t key_len);
+ void (*mysql_key_iterator_init)(void** key_iterator);
+ void (*mysql_key_iterator_deinit)(void* key_iterator);
+ bool (*mysql_key_iterator_get_key)(void* key_iterator, char *key_id, char *user_id);
+};
diff --git a/db/include/mysql/plugin_trace.h b/db/include/mysql/plugin_trace.h
new file mode 100644
index 0000000..b0e2aa5
--- /dev/null
+++ b/db/include/mysql/plugin_trace.h
@@ -0,0 +1,356 @@
+/* Copyright (c) 2012, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 PLUGIN_TRACE_INCLUDED
+#define PLUGIN_TRACE_INCLUDED
+/**
+ @file
+
+ ========================================================================
+ Declarations for client-side plugins of type MYSQL_CLIENT_TRACE_PLUGIN
+ ========================================================================
+
+ See libmysql/mysql_trace.c for a brief description of the client-side
+ protocol tracing infrastructure.
+*/
+
+
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ Lists of protocol stages and trace events
+ =========================================
+
+ These lists are defined with PROTOCOL_STAGE_LIST() and TRACE_EVENT_LIST(),
+ respectively. Macros accept a disposition name as an argument.
+
+ For example, to process list of protocol stages using disposition "foo",
+ define protocol_stage_foo(Stage) macro and then put
+
+ PROTOCOL_STAGE_LIST(foo)
+
+ in your code. This will expand to sequence of protocol_stage_foo(X)
+ macros where X ranges over the list of protocol stages, and these macros
+ should generate the actual code. See below how this technique is used
+ to generate protocol_stage and trace_events enums.
+*/
+
+/**
+ Protocol stages
+ ---------------
+
+ A client following the MySQL protocol goes through several stages of it. Each
+ stage determines what packets can be expected from the server or can be send
+ by the client.
+
+ Upon receiving each trace event, trace plugin will be notified of the current
+ protocol stage so that it can correctly interpret the event.
+
+ These are the possible protocol stages and the transitions between them.
+
+ .. digraph:: protocol_stages
+
+ CONNECTING -> WAIT_FOR_INIT_PACKET;
+ CONNECTING -> DISCONNECTED [ label = "failed connection" ];
+
+ WAIT_FOR_INIT_PACKET -> AUTHENTICATE;
+ WAIT_FOR_INIT_PACKET -> SSL_NEGOTIATION -> AUTHENTICATE;
+
+ AUTHENTICATE -> READY_FOR_COMMAND [ label = "accepted" ];
+ AUTHENTICATE -> DISCONNECTED [ label = "rejected" ];
+
+ READY_FOR_COMMAND -> DISCONNECTED [ label = "COM_QUIT" ];
+ READY_FOR_COMMAND -> AUTHENTICATE [ label="after change user" ];
+ READY_FOR_COMMAND -> WAIT_FOR_PACKET
+ [ label="wait for a single packet after, e.g., COM_STATISTICS" ];
+ READY_FOR_COMMAND -> WAIT_FOR_RESULT;
+ READY_FOR_COMMAND -> WAIT_FOR_PS_DESCRIPTION
+ [ label="after prepare command" ];
+
+ WAIT_FOR_PACKET -> READY_FOR_COMAND;
+
+ WAIT_FOR_RESULT -> READY_FOR_COMMAND [ label="simple reply" ];
+ WAIT_FOR_RESULT -> WAIT_FOR_FIELD_DEF;
+ WAIT_FOR_RESULT -> FILE_REQUEST;
+
+ WAIT_FOR_FIELD_DEF -> WAIT_FOR_ROW [ label="in a resultset" ];
+ WAIT_FOR_FIELD_DEF -> READY_FOR_COMMAND
+ [ label="after describe table or prepare command" ];
+
+ WAIT_FOR_ROW -> READY_FOR_COMMAND;
+ WAIT_FOR_ROW -> WAIT_FOR_RESULT [ label="multi-resultset" ];
+
+ WAIT_FOR_PS_DESCRIPTION -> WAIT_FOR_PARAM_DEF;
+ WAIT_FOR_PS_DESCRIPTION -> READY_FOR_COMMAND
+ [ label="no params and result" ];
+ WAIT_FOR_PS_DESCRIPTION -> WAIT_FOR_FIELD_DEF [ label="no params" ];
+
+ WAIT_FOR_PARAM_DEF -> WAIT_FOR_FIELD_DEF;
+ WAIT_FOR_PARAM_DEF -> READY_FOR_COMMAND [ label="no result" ];
+
+ FILE_REQUEST -> WAIT_FOR_RESULT [label="when whole file sent"];
+*/
+
+#define PROTOCOL_STAGE_LIST(X) \
+ protocol_stage_ ## X(CONNECTING) \
+ protocol_stage_ ## X(WAIT_FOR_INIT_PACKET) \
+ protocol_stage_ ## X(AUTHENTICATE) \
+ protocol_stage_ ## X(SSL_NEGOTIATION) \
+ protocol_stage_ ## X(READY_FOR_COMMAND) \
+ protocol_stage_ ## X(WAIT_FOR_PACKET) \
+ protocol_stage_ ## X(WAIT_FOR_RESULT) \
+ protocol_stage_ ## X(WAIT_FOR_FIELD_DEF) \
+ protocol_stage_ ## X(WAIT_FOR_ROW) \
+ protocol_stage_ ## X(FILE_REQUEST) \
+ protocol_stage_ ## X(WAIT_FOR_PS_DESCRIPTION) \
+ protocol_stage_ ## X(WAIT_FOR_PARAM_DEF) \
+ protocol_stage_ ## X(DISCONNECTED)
+
+/**
+ Trace events
+ ------------
+
+ The following events are generated during the various stages of the
+ client-server conversation.
+
+ ---------------------- -----------------------------------------------------
+ Connection events
+ ---------------------- -----------------------------------------------------
+ CONNECTING Client is connecting to the server.
+ CONNECTED Physical connection has been established.
+ DISCONNECTED Connection with server was broken.
+ ---------------------- -----------------------------------------------------
+ SSL events
+ ---------------------- -----------------------------------------------------
+ SEND_SSL_REQUEST Client is sending SSL connection request.
+ SSL_CONNECT Client is initiating SSL handshake.
+ SSL_CONNECTED SSL connection has been established.
+ ---------------------- -----------------------------------------------------
+ Authentication events
+ ---------------------- -----------------------------------------------------
+ CHALLENGE_RECEIVED Client received authentication challenge.
+ AUTH_PLUGIN Client selects an authentication plugin to be used
+ in the following authentication exchange.
+ SEND_AUTH_RESPONSE Client sends response to the authentication
+ challenge.
+ SEND_AUTH_DATA Client sends extra authentication data packet.
+ AUTHENTICATED Server has accepted connection.
+ ---------------------- -----------------------------------------------------
+ Command phase events
+ ---------------------- -----------------------------------------------------
+ SEND_COMMAND Client is sending a command to the server.
+ SEND_FILE Client is sending local file contents to the server.
+ ---------------------- -----------------------------------------------------
+ General events
+ ---------------------- -----------------------------------------------------
+ READ_PACKET Client starts waiting for a packet from server.
+ PACKET_RECEIVED A packet from server has been received.
+ PACKET_SENT After successful sending of a packet to the server.
+ ERROR Client detected an error.
+ ---------------------- -----------------------------------------------------
+*/
+
+#define TRACE_EVENT_LIST(X) \
+ trace_event_ ## X(ERROR) \
+ trace_event_ ## X(CONNECTING) \
+ trace_event_ ## X(CONNECTED) \
+ trace_event_ ## X(DISCONNECTED) \
+ trace_event_ ## X(SEND_SSL_REQUEST) \
+ trace_event_ ## X(SSL_CONNECT) \
+ trace_event_ ## X(SSL_CONNECTED) \
+ trace_event_ ## X(INIT_PACKET_RECEIVED) \
+ trace_event_ ## X(AUTH_PLUGIN) \
+ trace_event_ ## X(SEND_AUTH_RESPONSE) \
+ trace_event_ ## X(SEND_AUTH_DATA) \
+ trace_event_ ## X(AUTHENTICATED) \
+ trace_event_ ## X(SEND_COMMAND) \
+ trace_event_ ## X(SEND_FILE) \
+ trace_event_ ## X(READ_PACKET) \
+ trace_event_ ## X(PACKET_RECEIVED) \
+ trace_event_ ## X(PACKET_SENT)
+
+/**
+ Some trace events have additional arguments. These are stored in
+ st_trace_event_args structure. Various events store their arguments in the
+ structure as follows. Unused members are set to 0/NULL.
+
+ AUTH_PLUGIN
+ ------------- ----------------------------------
+ plugin_name the name of the plugin
+ ------------- ----------------------------------
+
+ SEND_COMMAND
+ ------------- ----------------------------------
+ cmd the command code
+ hdr pointer to command packet header
+ hdr_len length of the header
+ pkt pointer to command arguments
+ pkt_len length of arguments
+ ------------- ----------------------------------
+
+ Other SEND_* and *_RECEIVED events
+ ------------- ----------------------------------
+ pkt the data sent or received
+ pkt_len length of the data
+ ------------- ----------------------------------
+
+ PACKET_SENT
+ ------------- ----------------------------------
+ pkt_len number of bytes sent
+ ------------- ----------------------------------
+*/
+
+struct st_trace_event_args
+{
+ const char *plugin_name;
+ int cmd;
+ const unsigned char *hdr;
+ size_t hdr_len;
+ const unsigned char *pkt;
+ size_t pkt_len;
+};
+
+
+/* Definitions of protocol_stage and trace_event enums. */
+
+#define protocol_stage_enum(X) PROTOCOL_STAGE_ ## X,
+
+enum protocol_stage {
+ PROTOCOL_STAGE_LIST(enum)
+ PROTOCOL_STAGE_LAST
+};
+
+#define trace_event_enum(X) TRACE_EVENT_ ## X,
+
+enum trace_event {
+ TRACE_EVENT_LIST(enum)
+ TRACE_EVENT_LAST
+};
+
+
+/*
+ Trace plugin methods
+ ====================
+*/
+
+struct st_mysql_client_plugin_TRACE;
+struct st_mysql;
+
+/**
+ Trace plugin tracing_start() method.
+
+ Called when tracing with this plugin starts on a connection. A trace
+ plugin might want to maintain per-connection information. It can
+ return a pointer to memory area holding such information. It will be
+ stored in a connection handle and passed to other plugin methods.
+
+ @param self pointer to the plugin instance
+ @param connection_handle
+ @param stage protocol stage in which tracing has started - currently
+ it is always CONNECTING stage.
+
+ @return A pointer to plugin-specific, per-connection data if any.
+*/
+
+typedef
+void* (tracing_start_callback)(struct st_mysql_client_plugin_TRACE *self,
+ struct st_mysql *connection_handle,
+ enum protocol_stage stage);
+
+/**
+ Trace plugin tracing_stop() method.
+
+ Called when tracing of the connection has ended. If a plugin
+ allocated any per-connection resources, it should de-allocate them
+ here.
+
+ @param self pointer to the plugin instance
+ @param connection_handle
+ @param plugin_data pointer to plugin's per-connection data.
+*/
+
+typedef
+void (tracing_stop_callback)(struct st_mysql_client_plugin_TRACE *self,
+ struct st_mysql *connection_handle,
+ void *plugin_data);
+
+/**
+ Trace plugin trace_event() method.
+
+ Called when a trace event occurs. Plugin can decide to stop tracing
+ this connection by returning non-zero value.
+
+ @param self pointer to the plugin instance
+ @param plugin_data pointer to plugin's per-connection data
+ @param connection_handle
+ @param stage current protocol stage
+ @param event the trace event
+ @param args trace event arguments
+
+ @return Non-zero if tracing of the connection should end here.
+*/
+
+typedef
+int (trace_event_handler)(struct st_mysql_client_plugin_TRACE *self,
+ void *plugin_data,
+ struct st_mysql *connection_handle,
+ enum protocol_stage stage,
+ enum trace_event event,
+ struct st_trace_event_args args);
+
+
+struct st_mysql_client_plugin_TRACE
+{
+ MYSQL_CLIENT_PLUGIN_HEADER
+ tracing_start_callback *tracing_start;
+ tracing_stop_callback *tracing_stop;
+ trace_event_handler *trace_event;
+};
+
+/**
+ The global trace_plugin pointer. If it is not NULL, it points at a
+ loaded trace plugin which should be used to trace all connections made
+ to the server.
+*/
+extern
+struct st_mysql_client_plugin_TRACE *trace_plugin;
+
+#ifndef NDEBUG
+
+/*
+ Functions for getting names of trace events and protocol
+ stages for debugging purposes.
+*/
+const char* protocol_stage_name(enum protocol_stage stage);
+const char* trace_event_name(enum trace_event ev);
+
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/db/include/mysql/plugin_validate_password.h b/db/include/mysql/plugin_validate_password.h
new file mode 100644
index 0000000..6fbd248
--- /dev/null
+++ b/db/include/mysql/plugin_validate_password.h
@@ -0,0 +1,53 @@
+/* Copyright (c) 2012, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 MYSQL_PLUGIN_VALIDATE_PASSWORD_INCLUDED
+#define MYSQL_PLUGIN_VALIDATE_PASSWORD_INCLUDED
+
+/* API for validate_password plugin. (MYSQL_VALIDATE_PASSWORD_PLUGIN) */
+
+#include
+#define MYSQL_VALIDATE_PASSWORD_INTERFACE_VERSION 0x0100
+
+/*
+ The descriptor structure for the plugin, that is referred from
+ st_mysql_plugin.
+*/
+
+typedef void* mysql_string_handle;
+
+struct st_mysql_validate_password
+{
+ int interface_version;
+ /*
+ This function retuns TRUE for passwords which satisfy the password
+ policy (as choosen by plugin variable) and FALSE for all other
+ password
+ */
+ int (*validate_password)(mysql_string_handle password);
+ /*
+ This function returns the password strength (0-100) depending
+ upon the policies
+ */
+ int (*get_password_strength)(mysql_string_handle password);
+};
+#endif
diff --git a/db/include/mysql/psi/mysql_file.h b/db/include/mysql/psi/mysql_file.h
new file mode 100644
index 0000000..8f0fe6d
--- /dev/null
+++ b/db/include/mysql/psi/mysql_file.h
@@ -0,0 +1,1440 @@
+/* Copyright (c) 2008, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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,
+ 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */
+
+#ifndef MYSQL_FILE_H
+#define MYSQL_FILE_H
+
+#include
+
+/* For strlen() */
+#include
+/* For MY_STAT */
+#include
+/* For my_chsize */
+#include
+
+/**
+ @file mysql/psi/mysql_file.h
+ Instrumentation helpers for mysys file io.
+ This header file provides the necessary declarations
+ to use the mysys file API with the performance schema instrumentation.
+ In some compilers (SunStudio), 'static inline' functions, when declared
+ but not used, are not optimized away (because they are unused) by default,
+ so that including a static inline function from a header file does
+ create unwanted dependencies, causing unresolved symbols at link time.
+ Other compilers, like gcc, optimize these dependencies by default.
+
+ Since the instrumented APIs declared here are wrapper on top
+ of mysys file io APIs, including mysql/psi/mysql_file.h assumes that
+ the dependency on my_sys already exists.
+*/
+
+#include "mysql/psi/psi.h"
+
+#ifndef PSI_FILE_CALL
+#define PSI_FILE_CALL(M) PSI_DYNAMIC_CALL(M)
+#endif
+
+/**
+ @defgroup File_instrumentation File Instrumentation
+ @ingroup Instrumentation_interface
+ @{
+*/
+
+/**
+ @def mysql_file_register(P1, P2, P3)
+ File registration.
+*/
+#define mysql_file_register(P1, P2, P3) \
+ inline_mysql_file_register(P1, P2, P3)
+
+/**
+ @def mysql_file_fgets(P1, P2, F)
+ Instrumented fgets.
+ @c mysql_file_fgets is a replacement for @c fgets.
+*/
+#ifdef HAVE_PSI_FILE_INTERFACE
+ #define mysql_file_fgets(P1, P2, F) \
+ inline_mysql_file_fgets(__FILE__, __LINE__, P1, P2, F)
+#else
+ #define mysql_file_fgets(P1, P2, F) \
+ inline_mysql_file_fgets(P1, P2, F)
+#endif
+
+/**
+ @def mysql_file_fgetc(F)
+ Instrumented fgetc.
+ @c mysql_file_fgetc is a replacement for @c fgetc.
+*/
+#ifdef HAVE_PSI_FILE_INTERFACE
+ #define mysql_file_fgetc(F) inline_mysql_file_fgetc(__FILE__, __LINE__, F)
+#else
+ #define mysql_file_fgetc(F) inline_mysql_file_fgetc(F)
+#endif
+
+/**
+ @def mysql_file_fputs(P1, F)
+ Instrumented fputs.
+ @c mysql_file_fputs is a replacement for @c fputs.
+*/
+#ifdef HAVE_PSI_FILE_INTERFACE
+ #define mysql_file_fputs(P1, F) \
+ inline_mysql_file_fputs(__FILE__, __LINE__, P1, F)
+#else
+ #define mysql_file_fputs(P1, F)\
+ inline_mysql_file_fputs(P1, F)
+#endif
+
+/**
+ @def mysql_file_fputc(P1, F)
+ Instrumented fputc.
+ @c mysql_file_fputc is a replacement for @c fputc.
+*/
+#ifdef HAVE_PSI_FILE_INTERFACE
+ #define mysql_file_fputc(P1, F) \
+ inline_mysql_file_fputc(__FILE__, __LINE__, P1, F)
+#else
+ #define mysql_file_fputc(P1, F) \
+ inline_mysql_file_fputc(P1, F)
+#endif
+
+/**
+ @def mysql_file_fprintf
+ Instrumented fprintf.
+ @c mysql_file_fprintf is a replacement for @c fprintf.
+*/
+#define mysql_file_fprintf inline_mysql_file_fprintf
+
+/**
+ @def mysql_file_vfprintf(F, P1, P2)
+ Instrumented vfprintf.
+ @c mysql_file_vfprintf is a replacement for @c vfprintf.
+*/
+#ifdef HAVE_PSI_FILE_INTERFACE
+ #define mysql_file_vfprintf(F, P1, P2) \
+ inline_mysql_file_vfprintf(__FILE__, __LINE__, F, P1, P2)
+#else
+ #define mysql_file_vfprintf(F, P1, P2) \
+ inline_mysql_file_vfprintf(F, P1, P2)
+#endif
+
+/**
+ @def mysql_file_fflush(F, P1, P2)
+ Instrumented fflush.
+ @c mysql_file_fflush is a replacement for @c fflush.
+*/
+#ifdef HAVE_PSI_FILE_INTERFACE
+ #define mysql_file_fflush(F) \
+ inline_mysql_file_fflush(__FILE__, __LINE__, F)
+#else
+ #define mysql_file_fflush(F) \
+ inline_mysql_file_fflush(F)
+#endif
+
+/**
+ @def mysql_file_feof(F)
+ Instrumented feof.
+ @c mysql_file_feof is a replacement for @c feof.
+*/
+#define mysql_file_feof(F) inline_mysql_file_feof(F)
+
+/**
+ @def mysql_file_fstat(FN, S, FL)
+ Instrumented fstat.
+ @c mysql_file_fstat is a replacement for @c my_fstat.
+*/
+#ifdef HAVE_PSI_FILE_INTERFACE
+ #define mysql_file_fstat(FN, S, FL) \
+ inline_mysql_file_fstat(__FILE__, __LINE__, FN, S, FL)
+#else
+ #define mysql_file_fstat(FN, S, FL) \
+ inline_mysql_file_fstat(FN, S, FL)
+#endif
+
+/**
+ @def mysql_file_stat(K, FN, S, FL)
+ Instrumented stat.
+ @c mysql_file_stat is a replacement for @c my_stat.
+*/
+#ifdef HAVE_PSI_FILE_INTERFACE
+ #define mysql_file_stat(K, FN, S, FL) \
+ inline_mysql_file_stat(K, __FILE__, __LINE__, FN, S, FL)
+#else
+ #define mysql_file_stat(K, FN, S, FL) \
+ inline_mysql_file_stat(FN, S, FL)
+#endif
+
+/**
+ @def mysql_file_chsize(F, P1, P2, P3)
+ Instrumented chsize.
+ @c mysql_file_chsize is a replacement for @c my_chsize.
+*/
+#ifdef HAVE_PSI_FILE_INTERFACE
+ #define mysql_file_chsize(F, P1, P2, P3) \
+ inline_mysql_file_chsize(__FILE__, __LINE__, F, P1, P2, P3)
+#else
+ #define mysql_file_chsize(F, P1, P2, P3) \
+ inline_mysql_file_chsize(F, P1, P2, P3)
+#endif
+
+/**
+ @def mysql_file_fopen(K, N, F1, F2)
+ Instrumented fopen.
+ @c mysql_file_fopen is a replacement for @c my_fopen.
+*/
+#ifdef HAVE_PSI_FILE_INTERFACE
+ #define mysql_file_fopen(K, N, F1, F2) \
+ inline_mysql_file_fopen(K, __FILE__, __LINE__, N, F1, F2)
+#else
+ #define mysql_file_fopen(K, N, F1, F2) \
+ inline_mysql_file_fopen(N, F1, F2)
+#endif
+
+/**
+ @def mysql_file_fclose(FD, FL)
+ Instrumented fclose.
+ @c mysql_file_fclose is a replacement for @c my_fclose.
+ Without the instrumentation, this call will have the same behavior as the
+ undocumented and possibly platform specific my_fclose(NULL, ...) behavior.
+ With the instrumentation, mysql_fclose(NULL, ...) will safely return 0,
+ which is an extension compared to my_fclose and is therefore compliant.
+ mysql_fclose is on purpose *not* implementing
+ @code assert(file != NULL) @endcode,
+ since doing so could introduce regressions.
+*/
+#ifdef HAVE_PSI_FILE_INTERFACE
+ #define mysql_file_fclose(FD, FL) \
+ inline_mysql_file_fclose(__FILE__, __LINE__, FD, FL)
+#else
+ #define mysql_file_fclose(FD, FL) \
+ inline_mysql_file_fclose(FD, FL)
+#endif
+
+/**
+ @def mysql_file_fread(FD, P1, P2, P3)
+ Instrumented fread.
+ @c mysql_file_fread is a replacement for @c my_fread.
+*/
+#ifdef HAVE_PSI_FILE_INTERFACE
+ #define mysql_file_fread(FD, P1, P2, P3) \
+ inline_mysql_file_fread(__FILE__, __LINE__, FD, P1, P2, P3)
+#else
+ #define mysql_file_fread(FD, P1, P2, P3) \
+ inline_mysql_file_fread(FD, P1, P2, P3)
+#endif
+
+/**
+ @def mysql_file_fwrite(FD, P1, P2, P3)
+ Instrumented fwrite.
+ @c mysql_file_fwrite is a replacement for @c my_fwrite.
+*/
+#ifdef HAVE_PSI_FILE_INTERFACE
+ #define mysql_file_fwrite(FD, P1, P2, P3) \
+ inline_mysql_file_fwrite(__FILE__, __LINE__, FD, P1, P2, P3)
+#else
+ #define mysql_file_fwrite(FD, P1, P2, P3) \
+ inline_mysql_file_fwrite(FD, P1, P2, P3)
+#endif
+
+/**
+ @def mysql_file_fseek(FD, P, W, F)
+ Instrumented fseek.
+ @c mysql_file_fseek is a replacement for @c my_fseek.
+*/
+#ifdef HAVE_PSI_FILE_INTERFACE
+ #define mysql_file_fseek(FD, P, W, F) \
+ inline_mysql_file_fseek(__FILE__, __LINE__, FD, P, W, F)
+#else
+ #define mysql_file_fseek(FD, P, W, F) \
+ inline_mysql_file_fseek(FD, P, W, F)
+#endif
+
+/**
+ @def mysql_file_ftell(FD, F)
+ Instrumented ftell.
+ @c mysql_file_ftell is a replacement for @c my_ftell.
+*/
+#ifdef HAVE_PSI_FILE_INTERFACE
+ #define mysql_file_ftell(FD, F) \
+ inline_mysql_file_ftell(__FILE__, __LINE__, FD, F)
+#else
+ #define mysql_file_ftell(FD, F) \
+ inline_mysql_file_ftell(FD, F)
+#endif
+
+/**
+ @def mysql_file_create(K, N, F1, F2, F3)
+ Instrumented create.
+ @c mysql_file_create is a replacement for @c my_create.
+*/
+#ifdef HAVE_PSI_FILE_INTERFACE
+ #define mysql_file_create(K, N, F1, F2, F3) \
+ inline_mysql_file_create(K, __FILE__, __LINE__, N, F1, F2, F3)
+#else
+ #define mysql_file_create(K, N, F1, F2, F3) \
+ inline_mysql_file_create(N, F1, F2, F3)
+#endif
+
+/**
+ @def mysql_file_create_temp(K, T, D, P, M, F)
+ Instrumented create_temp_file.
+ @c mysql_file_create_temp is a replacement for @c create_temp_file.
+*/
+#ifdef HAVE_PSI_FILE_INTERFACE
+ #define mysql_file_create_temp(K, T, D, P, M, F) \
+ inline_mysql_file_create_temp(K, __FILE__, __LINE__, T, D, P, M, F)
+#else
+ #define mysql_file_create_temp(K, T, D, P, M, F) \
+ inline_mysql_file_create_temp(T, D, P, M, F)
+#endif
+
+/**
+ @def mysql_file_open(K, N, F1, F2)
+ Instrumented open.
+ @c mysql_file_open is a replacement for @c my_open.
+*/
+#ifdef HAVE_PSI_FILE_INTERFACE
+ #define mysql_file_open(K, N, F1, F2) \
+ inline_mysql_file_open(K, __FILE__, __LINE__, N, F1, F2)
+#else
+ #define mysql_file_open(K, N, F1, F2) \
+ inline_mysql_file_open(N, F1, F2)
+#endif
+
+/**
+ @def mysql_file_close(FD, F)
+ Instrumented close.
+ @c mysql_file_close is a replacement for @c my_close.
+*/
+#ifdef HAVE_PSI_FILE_INTERFACE
+ #define mysql_file_close(FD, F) \
+ inline_mysql_file_close(__FILE__, __LINE__, FD, F)
+#else
+ #define mysql_file_close(FD, F) \
+ inline_mysql_file_close(FD, F)
+#endif
+
+/**
+ @def mysql_file_read(FD, B, S, F)
+ Instrumented read.
+ @c mysql_read is a replacement for @c my_read.
+*/
+#ifdef HAVE_PSI_FILE_INTERFACE
+ #define mysql_file_read(FD, B, S, F) \
+ inline_mysql_file_read(__FILE__, __LINE__, FD, B, S, F)
+#else
+ #define mysql_file_read(FD, B, S, F) \
+ inline_mysql_file_read(FD, B, S, F)
+#endif
+
+/**
+ @def mysql_file_write(FD, B, S, F)
+ Instrumented write.
+ @c mysql_file_write is a replacement for @c my_write.
+*/
+#ifdef HAVE_PSI_FILE_INTERFACE
+ #define mysql_file_write(FD, B, S, F) \
+ inline_mysql_file_write(__FILE__, __LINE__, FD, B, S, F)
+#else
+ #define mysql_file_write(FD, B, S, F) \
+ inline_mysql_file_write(FD, B, S, F)
+#endif
+
+/**
+ @def mysql_file_pread(FD, B, S, O, F)
+ Instrumented pread.
+ @c mysql_pread is a replacement for @c my_pread.
+*/
+#ifdef HAVE_PSI_FILE_INTERFACE
+ #define mysql_file_pread(FD, B, S, O, F) \
+ inline_mysql_file_pread(__FILE__, __LINE__, FD, B, S, O, F)
+#else
+ #define mysql_file_pread(FD, B, S, O, F) \
+ inline_mysql_file_pread(FD, B, S, O, F)
+#endif
+
+/**
+ @def mysql_file_pwrite(FD, B, S, O, F)
+ Instrumented pwrite.
+ @c mysql_file_pwrite is a replacement for @c my_pwrite.
+*/
+#ifdef HAVE_PSI_FILE_INTERFACE
+ #define mysql_file_pwrite(FD, B, S, O, F) \
+ inline_mysql_file_pwrite(__FILE__, __LINE__, FD, B, S, O, F)
+#else
+ #define mysql_file_pwrite(FD, B, S, O, F) \
+ inline_mysql_file_pwrite(FD, B, S, O, F)
+#endif
+
+/**
+ @def mysql_file_seek(FD, P, W, F)
+ Instrumented seek.
+ @c mysql_file_seek is a replacement for @c my_seek.
+*/
+#ifdef HAVE_PSI_FILE_INTERFACE
+ #define mysql_file_seek(FD, P, W, F) \
+ inline_mysql_file_seek(__FILE__, __LINE__, FD, P, W, F)
+#else
+ #define mysql_file_seek(FD, P, W, F) \
+ inline_mysql_file_seek(FD, P, W, F)
+#endif
+
+/**
+ @def mysql_file_tell(FD, F)
+ Instrumented tell.
+ @c mysql_file_tell is a replacement for @c my_tell.
+*/
+#ifdef HAVE_PSI_FILE_INTERFACE
+ #define mysql_file_tell(FD, F) \
+ inline_mysql_file_tell(__FILE__, __LINE__, FD, F)
+#else
+ #define mysql_file_tell(FD, F) \
+ inline_mysql_file_tell(FD, F)
+#endif
+
+/**
+ @def mysql_file_delete(K, P1, P2)
+ Instrumented delete.
+ @c mysql_file_delete is a replacement for @c my_delete.
+*/
+#ifdef HAVE_PSI_FILE_INTERFACE
+ #define mysql_file_delete(K, P1, P2) \
+ inline_mysql_file_delete(K, __FILE__, __LINE__, P1, P2)
+#else
+ #define mysql_file_delete(K, P1, P2) \
+ inline_mysql_file_delete(P1, P2)
+#endif
+
+/**
+ @def mysql_file_rename(K, P1, P2, P3)
+ Instrumented rename.
+ @c mysql_file_rename is a replacement for @c my_rename.
+*/
+#ifdef HAVE_PSI_FILE_INTERFACE
+ #define mysql_file_rename(K, P1, P2, P3) \
+ inline_mysql_file_rename(K, __FILE__, __LINE__, P1, P2, P3)
+#else
+ #define mysql_file_rename(K, P1, P2, P3) \
+ inline_mysql_file_rename(P1, P2, P3)
+#endif
+
+/**
+ @def mysql_file_create_with_symlink(K, P1, P2, P3, P4, P5)
+ Instrumented create with symbolic link.
+ @c mysql_file_create_with_symlink is a replacement
+ for @c my_create_with_symlink.
+*/
+#ifdef HAVE_PSI_FILE_INTERFACE
+ #define mysql_file_create_with_symlink(K, P1, P2, P3, P4, P5) \
+ inline_mysql_file_create_with_symlink(K, __FILE__, __LINE__, \
+ P1, P2, P3, P4, P5)
+#else
+ #define mysql_file_create_with_symlink(K, P1, P2, P3, P4, P5) \
+ inline_mysql_file_create_with_symlink(P1, P2, P3, P4, P5)
+#endif
+
+/**
+ @def mysql_file_delete_with_symlink(K, P1, P2)
+ Instrumented delete with symbolic link.
+ @c mysql_file_delete_with_symlink is a replacement
+ for @c my_delete_with_symlink.
+*/
+#ifdef HAVE_PSI_FILE_INTERFACE
+ #define mysql_file_delete_with_symlink(K, P1, P2) \
+ inline_mysql_file_delete_with_symlink(K, __FILE__, __LINE__, P1, P2)
+#else
+ #define mysql_file_delete_with_symlink(K, P1, P2) \
+ inline_mysql_file_delete_with_symlink(P1, P2)
+#endif
+
+/**
+ @def mysql_file_rename_with_symlink(K, P1, P2, P3)
+ Instrumented rename with symbolic link.
+ @c mysql_file_rename_with_symlink is a replacement
+ for @c my_rename_with_symlink.
+*/
+#ifdef HAVE_PSI_FILE_INTERFACE
+ #define mysql_file_rename_with_symlink(K, P1, P2, P3) \
+ inline_mysql_file_rename_with_symlink(K, __FILE__, __LINE__, P1, P2, P3)
+#else
+ #define mysql_file_rename_with_symlink(K, P1, P2, P3) \
+ inline_mysql_file_rename_with_symlink(P1, P2, P3)
+#endif
+
+/**
+ @def mysql_file_sync(P1, P2)
+ Instrumented file sync.
+ @c mysql_file_sync is a replacement for @c my_sync.
+*/
+#ifdef HAVE_PSI_FILE_INTERFACE
+ #define mysql_file_sync(P1, P2) \
+ inline_mysql_file_sync(__FILE__, __LINE__, P1, P2)
+#else
+ #define mysql_file_sync(P1, P2) \
+ inline_mysql_file_sync(P1, P2)
+#endif
+
+/**
+ An instrumented FILE structure.
+ @sa MYSQL_FILE
+*/
+struct st_mysql_file
+{
+ /** The real file. */
+ FILE *m_file;
+ /**
+ The instrumentation hook.
+ Note that this hook is not conditionally defined,
+ for binary compatibility of the @c MYSQL_FILE interface.
+ */
+ struct PSI_file *m_psi;
+};
+
+/**
+ Type of an instrumented file.
+ @c MYSQL_FILE is a drop-in replacement for @c FILE.
+ @sa mysql_file_open
+*/
+typedef struct st_mysql_file MYSQL_FILE;
+
+static inline void inline_mysql_file_register(
+#ifdef HAVE_PSI_FILE_INTERFACE
+ const char *category,
+ PSI_file_info *info,
+ int count
+#else
+ const char *category MY_ATTRIBUTE ((unused)),
+ void *info MY_ATTRIBUTE ((unused)),
+ int count MY_ATTRIBUTE ((unused))
+#endif
+)
+{
+#ifdef HAVE_PSI_FILE_INTERFACE
+ PSI_FILE_CALL(register_file)(category, info, count);
+#endif
+}
+
+static inline char *
+inline_mysql_file_fgets(
+#ifdef HAVE_PSI_FILE_INTERFACE
+ const char *src_file, uint src_line,
+#endif
+ char *str, int size, MYSQL_FILE *file)
+{
+ char *result;
+#ifdef HAVE_PSI_FILE_INTERFACE
+ struct PSI_file_locker *locker;
+ PSI_file_locker_state state;
+ locker= PSI_FILE_CALL(get_thread_file_stream_locker)
+ (&state, file->m_psi, PSI_FILE_READ);
+ if (likely(locker != NULL))
+ {
+ PSI_FILE_CALL(start_file_wait)(locker, (size_t) size, src_file, src_line);
+ result= fgets(str, size, file->m_file);
+ PSI_FILE_CALL(end_file_wait)(locker, result ? strlen(result) : 0);
+ return result;
+ }
+#endif
+
+ result= fgets(str, size, file->m_file);
+ return result;
+}
+
+static inline int
+inline_mysql_file_fgetc(
+#ifdef HAVE_PSI_FILE_INTERFACE
+ const char *src_file, uint src_line,
+#endif
+ MYSQL_FILE *file)
+{
+ int result;
+#ifdef HAVE_PSI_FILE_INTERFACE
+ struct PSI_file_locker *locker;
+ PSI_file_locker_state state;
+ locker= PSI_FILE_CALL(get_thread_file_stream_locker)
+ (&state, file->m_psi, PSI_FILE_READ);
+ if (likely(locker != NULL))
+ {
+ PSI_FILE_CALL(start_file_wait)(locker, (size_t) 1, src_file, src_line);
+ result= fgetc(file->m_file);
+ PSI_FILE_CALL(end_file_wait)(locker, (size_t) 1);
+ return result;
+ }
+#endif
+
+ result= fgetc(file->m_file);
+ return result;
+}
+
+static inline int
+inline_mysql_file_fputs(
+#ifdef HAVE_PSI_FILE_INTERFACE
+ const char *src_file, uint src_line,
+#endif
+ const char *str, MYSQL_FILE *file)
+{
+ int result;
+#ifdef HAVE_PSI_FILE_INTERFACE
+ struct PSI_file_locker *locker;
+ PSI_file_locker_state state;
+ size_t bytes;
+ locker= PSI_FILE_CALL(get_thread_file_stream_locker)
+ (&state, file->m_psi, PSI_FILE_WRITE);
+ if (likely(locker != NULL))
+ {
+ bytes= str ? strlen(str) : 0;
+ PSI_FILE_CALL(start_file_wait)(locker, bytes, src_file, src_line);
+ result= fputs(str, file->m_file);
+ PSI_FILE_CALL(end_file_wait)(locker, bytes);
+ return result;
+ }
+#endif
+
+ result= fputs(str, file->m_file);
+ return result;
+}
+
+static inline int
+inline_mysql_file_fputc(
+#ifdef HAVE_PSI_FILE_INTERFACE
+ const char *src_file, uint src_line,
+#endif
+ char c, MYSQL_FILE *file)
+{
+ int result;
+#ifdef HAVE_PSI_FILE_INTERFACE
+ struct PSI_file_locker *locker;
+ PSI_file_locker_state state;
+ locker= PSI_FILE_CALL(get_thread_file_stream_locker)
+ (&state, file->m_psi, PSI_FILE_WRITE);
+ if (likely(locker != NULL))
+ {
+ PSI_FILE_CALL(start_file_wait)(locker, (size_t) 1, src_file, src_line);
+ result= fputc(c, file->m_file);
+ PSI_FILE_CALL(end_file_wait)(locker, (size_t) 1);
+ return result;
+ }
+#endif
+
+ result= fputc(c, file->m_file);
+ return result;
+}
+
+static inline int
+inline_mysql_file_fprintf(MYSQL_FILE *file, const char *format, ...)
+{
+ /*
+ TODO: figure out how to pass src_file and src_line from the caller.
+ */
+ int result;
+ va_list args;
+#ifdef HAVE_PSI_FILE_INTERFACE
+ struct PSI_file_locker *locker;
+ PSI_file_locker_state state;
+ locker= PSI_FILE_CALL(get_thread_file_stream_locker)
+ (&state, file->m_psi, PSI_FILE_WRITE);
+ if (likely(locker != NULL))
+ {
+ PSI_FILE_CALL(start_file_wait)(locker, (size_t) 0, __FILE__, __LINE__);
+ va_start(args, format);
+ result= vfprintf(file->m_file, format, args);
+ va_end(args);
+ PSI_FILE_CALL(end_file_wait)(locker, (size_t) result);
+ return result;
+ }
+#endif
+
+ va_start(args, format);
+ result= vfprintf(file->m_file, format, args);
+ va_end(args);
+ return result;
+}
+
+static inline int
+inline_mysql_file_vfprintf(
+#ifdef HAVE_PSI_FILE_INTERFACE
+ const char *src_file, uint src_line,
+#endif
+ MYSQL_FILE *file, const char *format, va_list args)
+{
+ int result;
+#ifdef HAVE_PSI_FILE_INTERFACE
+ struct PSI_file_locker *locker;
+ PSI_file_locker_state state;
+ locker= PSI_FILE_CALL(get_thread_file_stream_locker)
+ (&state, file->m_psi, PSI_FILE_WRITE);
+ if (likely(locker != NULL))
+ {
+ PSI_FILE_CALL(start_file_wait)(locker, (size_t) 0, src_file, src_line);
+ result= vfprintf(file->m_file, format, args);
+ PSI_FILE_CALL(end_file_wait)(locker, (size_t) result);
+ return result;
+ }
+#endif
+
+ result= vfprintf(file->m_file, format, args);
+ return result;
+}
+
+static inline int
+inline_mysql_file_fflush(
+#ifdef HAVE_PSI_FILE_INTERFACE
+ const char *src_file, uint src_line,
+#endif
+ MYSQL_FILE *file)
+{
+ int result;
+#ifdef HAVE_PSI_FILE_INTERFACE
+ struct PSI_file_locker *locker;
+ PSI_file_locker_state state;
+ locker= PSI_FILE_CALL(get_thread_file_stream_locker)
+ (&state, file->m_psi, PSI_FILE_FLUSH);
+ if (likely(locker != NULL))
+ {
+ PSI_FILE_CALL(start_file_wait)(locker, (size_t) 0, src_file, src_line);
+ result= fflush(file->m_file);
+ PSI_FILE_CALL(end_file_wait)(locker, (size_t) 0);
+ return result;
+ }
+#endif
+
+ result= fflush(file->m_file);
+ return result;
+}
+
+static inline int inline_mysql_file_feof(MYSQL_FILE *file)
+{
+ /* Not instrumented, there is no wait involved */
+ return feof(file->m_file);
+}
+
+static inline int
+inline_mysql_file_fstat(
+#ifdef HAVE_PSI_FILE_INTERFACE
+ const char *src_file, uint src_line,
+#endif
+ int filenr, MY_STAT *stat_area, myf flags)
+{
+ int result;
+#ifdef HAVE_PSI_FILE_INTERFACE
+ struct PSI_file_locker *locker;
+ PSI_file_locker_state state;
+ locker= PSI_FILE_CALL(get_thread_file_descriptor_locker)
+ (&state, filenr, PSI_FILE_FSTAT);
+ if (likely(locker != NULL))
+ {
+ PSI_FILE_CALL(start_file_wait)(locker, (size_t) 0, src_file, src_line);
+ result= my_fstat(filenr, stat_area, flags);
+ PSI_FILE_CALL(end_file_wait)(locker, (size_t) 0);
+ return result;
+ }
+#endif
+
+ result= my_fstat(filenr, stat_area, flags);
+ return result;
+}
+
+static inline MY_STAT *
+inline_mysql_file_stat(
+#ifdef HAVE_PSI_FILE_INTERFACE
+ PSI_file_key key, const char *src_file, uint src_line,
+#endif
+ const char *path, MY_STAT *stat_area, myf flags)
+{
+ MY_STAT *result;
+#ifdef HAVE_PSI_FILE_INTERFACE
+ struct PSI_file_locker *locker;
+ PSI_file_locker_state state;
+ locker= PSI_FILE_CALL(get_thread_file_name_locker)
+ (&state, key, PSI_FILE_STAT, path, &locker);
+ if (likely(locker != NULL))
+ {
+ PSI_FILE_CALL(start_file_open_wait)(locker, src_file, src_line);
+ result= my_stat(path, stat_area, flags);
+ PSI_FILE_CALL(end_file_open_wait)(locker, result);
+ return result;
+ }
+#endif
+
+ result= my_stat(path, stat_area, flags);
+ return result;
+}
+
+static inline int
+inline_mysql_file_chsize(
+#ifdef HAVE_PSI_FILE_INTERFACE
+ const char *src_file, uint src_line,
+#endif
+ File file, my_off_t newlength, int filler, myf flags)
+{
+ int result;
+#ifdef HAVE_PSI_FILE_INTERFACE
+ struct PSI_file_locker *locker;
+ PSI_file_locker_state state;
+ locker= PSI_FILE_CALL(get_thread_file_descriptor_locker)
+ (&state, file, PSI_FILE_CHSIZE);
+ if (likely(locker != NULL))
+ {
+ PSI_FILE_CALL(start_file_wait)(locker, (size_t) newlength, src_file,
+ src_line);
+ result= my_chsize(file, newlength, filler, flags);
+ PSI_FILE_CALL(end_file_wait)(locker, (size_t) newlength);
+ return result;
+ }
+#endif
+
+ result= my_chsize(file, newlength, filler, flags);
+ return result;
+}
+
+static inline MYSQL_FILE*
+inline_mysql_file_fopen(
+#ifdef HAVE_PSI_FILE_INTERFACE
+ PSI_file_key key, const char *src_file, uint src_line,
+#endif
+ const char *filename, int flags, myf myFlags)
+{
+ MYSQL_FILE *that;
+ that= (MYSQL_FILE*) my_malloc(PSI_NOT_INSTRUMENTED,
+ sizeof(MYSQL_FILE), MYF(MY_WME));
+ if (likely(that != NULL))
+ {
+#ifdef HAVE_PSI_FILE_INTERFACE
+ struct PSI_file_locker *locker;
+ PSI_file_locker_state state;
+ locker= PSI_FILE_CALL(get_thread_file_name_locker)
+ (&state, key, PSI_FILE_STREAM_OPEN, filename, that);
+ if (likely(locker != NULL))
+ {
+ PSI_FILE_CALL(start_file_open_wait)
+ (locker, src_file, src_line);
+ that->m_file= my_fopen(filename, flags, myFlags);
+ that->m_psi= PSI_FILE_CALL(end_file_open_wait)(locker, that->m_file);
+ if (unlikely(that->m_file == NULL))
+ {
+ my_free(that);
+ return NULL;
+ }
+ return that;
+ }
+#endif
+
+ that->m_psi= NULL;
+ that->m_file= my_fopen(filename, flags, myFlags);
+ if (unlikely(that->m_file == NULL))
+ {
+ my_free(that);
+ return NULL;
+ }
+ }
+ return that;
+}
+
+static inline int
+inline_mysql_file_fclose(
+#ifdef HAVE_PSI_FILE_INTERFACE
+ const char *src_file, uint src_line,
+#endif
+ MYSQL_FILE *file, myf flags)
+{
+ int result= 0;
+ if (likely(file != NULL))
+ {
+#ifdef HAVE_PSI_FILE_INTERFACE
+ struct PSI_file_locker *locker;
+ PSI_file_locker_state state;
+ locker= PSI_FILE_CALL(get_thread_file_stream_locker)
+ (&state, file->m_psi, PSI_FILE_STREAM_CLOSE);
+ if (likely(locker != NULL))
+ {
+ PSI_FILE_CALL(start_file_close_wait)(locker, src_file, src_line);
+ result= my_fclose(file->m_file, flags);
+ PSI_FILE_CALL(end_file_close_wait)(locker, result);
+ my_free(file);
+ return result;
+ }
+#endif
+
+ result= my_fclose(file->m_file, flags);
+ my_free(file);
+ }
+ return result;
+}
+
+static inline size_t
+inline_mysql_file_fread(
+#ifdef HAVE_PSI_FILE_INTERFACE
+ const char *src_file, uint src_line,
+#endif
+ MYSQL_FILE *file, uchar *buffer, size_t count, myf flags)
+{
+ size_t result;
+#ifdef HAVE_PSI_FILE_INTERFACE
+ struct PSI_file_locker *locker;
+ PSI_file_locker_state state;
+ size_t bytes_read;
+ locker= PSI_FILE_CALL(get_thread_file_stream_locker)
+ (&state, file->m_psi, PSI_FILE_READ);
+ if (likely(locker != NULL))
+ {
+ PSI_FILE_CALL(start_file_wait)(locker, count, src_file, src_line);
+ result= my_fread(file->m_file, buffer, count, flags);
+ if (flags & (MY_NABP | MY_FNABP))
+ bytes_read= (result == 0) ? count : 0;
+ else
+ bytes_read= (result != MY_FILE_ERROR) ? result : 0;
+ PSI_FILE_CALL(end_file_wait)(locker, bytes_read);
+ return result;
+ }
+#endif
+
+ result= my_fread(file->m_file, buffer, count, flags);
+ return result;
+}
+
+static inline size_t
+inline_mysql_file_fwrite(
+#ifdef HAVE_PSI_FILE_INTERFACE
+ const char *src_file, uint src_line,
+#endif
+ MYSQL_FILE *file, const uchar *buffer, size_t count, myf flags)
+{
+ size_t result;
+#ifdef HAVE_PSI_FILE_INTERFACE
+ struct PSI_file_locker *locker;
+ PSI_file_locker_state state;
+ size_t bytes_written;
+ locker= PSI_FILE_CALL(get_thread_file_stream_locker)
+ (&state, file->m_psi, PSI_FILE_WRITE);
+ if (likely(locker != NULL))
+ {
+ PSI_FILE_CALL(start_file_wait)(locker, count, src_file, src_line);
+ result= my_fwrite(file->m_file, buffer, count, flags);
+ if (flags & (MY_NABP | MY_FNABP))
+ bytes_written= (result == 0) ? count : 0;
+ else
+ bytes_written= (result != MY_FILE_ERROR) ? result : 0;
+ PSI_FILE_CALL(end_file_wait)(locker, bytes_written);
+ return result;
+ }
+#endif
+
+ result= my_fwrite(file->m_file, buffer, count, flags);
+ return result;
+}
+
+static inline my_off_t
+inline_mysql_file_fseek(
+#ifdef HAVE_PSI_FILE_INTERFACE
+ const char *src_file, uint src_line,
+#endif
+ MYSQL_FILE *file, my_off_t pos, int whence, myf flags)
+{
+ my_off_t result;
+#ifdef HAVE_PSI_FILE_INTERFACE
+ struct PSI_file_locker *locker;
+ PSI_file_locker_state state;
+ locker= PSI_FILE_CALL(get_thread_file_stream_locker)
+ (&state, file->m_psi, PSI_FILE_SEEK);
+ if (likely(locker != NULL))
+ {
+ PSI_FILE_CALL(start_file_wait)(locker, (size_t) 0, src_file, src_line);
+ result= my_fseek(file->m_file, pos, whence, flags);
+ PSI_FILE_CALL(end_file_wait)(locker, (size_t) 0);
+ return result;
+ }
+#endif
+
+ result= my_fseek(file->m_file, pos, whence, flags);
+ return result;
+}
+
+static inline my_off_t
+inline_mysql_file_ftell(
+#ifdef HAVE_PSI_FILE_INTERFACE
+ const char *src_file, uint src_line,
+#endif
+ MYSQL_FILE *file, myf flags)
+{
+ my_off_t result;
+#ifdef HAVE_PSI_FILE_INTERFACE
+ struct PSI_file_locker *locker;
+ PSI_file_locker_state state;
+ locker= PSI_FILE_CALL(get_thread_file_stream_locker)
+ (&state, file->m_psi, PSI_FILE_TELL);
+ if (likely(locker != NULL))
+ {
+ PSI_FILE_CALL(start_file_wait)(locker, (size_t) 0, src_file, src_line);
+ result= my_ftell(file->m_file, flags);
+ PSI_FILE_CALL(end_file_wait)(locker, (size_t) 0);
+ return result;
+ }
+#endif
+
+ result= my_ftell(file->m_file, flags);
+ return result;
+}
+
+static inline File
+inline_mysql_file_create(
+#ifdef HAVE_PSI_FILE_INTERFACE
+ PSI_file_key key, const char *src_file, uint src_line,
+#endif
+ const char *filename, int create_flags, int access_flags, myf myFlags)
+{
+ File file;
+#ifdef HAVE_PSI_FILE_INTERFACE
+ struct PSI_file_locker *locker;
+ PSI_file_locker_state state;
+ locker= PSI_FILE_CALL(get_thread_file_name_locker)
+ (&state, key, PSI_FILE_CREATE, filename, &locker);
+ if (likely(locker != NULL))
+ {
+ PSI_FILE_CALL(start_file_open_wait)(locker, src_file, src_line);
+ file= my_create(filename, create_flags, access_flags, myFlags);
+ PSI_FILE_CALL(end_file_open_wait_and_bind_to_descriptor)(locker, file);
+ return file;
+ }
+#endif
+
+ file= my_create(filename, create_flags, access_flags, myFlags);
+ return file;
+}
+
+static inline File
+inline_mysql_file_create_temp(
+#ifdef HAVE_PSI_FILE_INTERFACE
+ PSI_file_key key, const char *src_file, uint src_line,
+#endif
+ char *to, const char *dir, const char *pfx, int mode, myf myFlags)
+{
+ File file;
+#ifdef HAVE_PSI_FILE_INTERFACE
+ struct PSI_file_locker *locker;
+ PSI_file_locker_state state;
+ locker= PSI_FILE_CALL(get_thread_file_name_locker)
+ (&state, key, PSI_FILE_CREATE, NULL, &locker);
+ if (likely(locker != NULL))
+ {
+ PSI_FILE_CALL(start_file_open_wait)(locker, src_file, src_line);
+ /* The file name is generated by create_temp_file(). */
+ file= create_temp_file(to, dir, pfx, mode, myFlags);
+ PSI_FILE_CALL(end_temp_file_open_wait_and_bind_to_descriptor)(locker, file, (const char*)to);
+ return file;
+ }
+#endif
+
+ file= create_temp_file(to, dir, pfx, mode, myFlags);
+ return file;
+}
+
+static inline File
+inline_mysql_file_open(
+#ifdef HAVE_PSI_FILE_INTERFACE
+ PSI_file_key key, const char *src_file, uint src_line,
+#endif
+ const char *filename, int flags, myf myFlags)
+{
+ File file;
+#ifdef HAVE_PSI_FILE_INTERFACE
+ struct PSI_file_locker *locker;
+ PSI_file_locker_state state;
+ locker= PSI_FILE_CALL(get_thread_file_name_locker)
+ (&state, key, PSI_FILE_OPEN, filename, &locker);
+ if (likely(locker != NULL))
+ {
+ PSI_FILE_CALL(start_file_open_wait)(locker, src_file, src_line);
+ file= my_open(filename, flags, myFlags);
+ PSI_FILE_CALL(end_file_open_wait_and_bind_to_descriptor)(locker, file);
+ return file;
+ }
+#endif
+
+ file= my_open(filename, flags, myFlags);
+ return file;
+}
+
+static inline int
+inline_mysql_file_close(
+#ifdef HAVE_PSI_FILE_INTERFACE
+ const char *src_file, uint src_line,
+#endif
+ File file, myf flags)
+{
+ int result;
+#ifdef HAVE_PSI_FILE_INTERFACE
+ struct PSI_file_locker *locker;
+ PSI_file_locker_state state;
+ locker= PSI_FILE_CALL(get_thread_file_descriptor_locker)
+ (&state, file, PSI_FILE_CLOSE);
+ if (likely(locker != NULL))
+ {
+ PSI_FILE_CALL(start_file_close_wait)(locker, src_file, src_line);
+ result= my_close(file, flags);
+ PSI_FILE_CALL(end_file_close_wait)(locker, result);
+ return result;
+ }
+#endif
+
+ result= my_close(file, flags);
+ return result;
+}
+
+static inline size_t
+inline_mysql_file_read(
+#ifdef HAVE_PSI_FILE_INTERFACE
+ const char *src_file, uint src_line,
+#endif
+ File file, uchar *buffer, size_t count, myf flags)
+{
+ size_t result;
+#ifdef HAVE_PSI_FILE_INTERFACE
+ struct PSI_file_locker *locker;
+ PSI_file_locker_state state;
+ size_t bytes_read;
+ locker= PSI_FILE_CALL(get_thread_file_descriptor_locker)
+ (&state, file, PSI_FILE_READ);
+ if (likely(locker != NULL))
+ {
+ PSI_FILE_CALL(start_file_wait)(locker, count, src_file, src_line);
+ result= my_read(file, buffer, count, flags);
+ if (flags & (MY_NABP | MY_FNABP))
+ bytes_read= (result == 0) ? count : 0;
+ else
+ bytes_read= (result != MY_FILE_ERROR) ? result : 0;
+ PSI_FILE_CALL(end_file_wait)(locker, bytes_read);
+ return result;
+ }
+#endif
+
+ result= my_read(file, buffer, count, flags);
+ return result;
+}
+
+static inline size_t
+inline_mysql_file_write(
+#ifdef HAVE_PSI_FILE_INTERFACE
+ const char *src_file, uint src_line,
+#endif
+ File file, const uchar *buffer, size_t count, myf flags)
+{
+ size_t result;
+#ifdef HAVE_PSI_FILE_INTERFACE
+ struct PSI_file_locker *locker;
+ PSI_file_locker_state state;
+ size_t bytes_written;
+ locker= PSI_FILE_CALL(get_thread_file_descriptor_locker)
+ (&state, file, PSI_FILE_WRITE);
+ if (likely(locker != NULL))
+ {
+ PSI_FILE_CALL(start_file_wait)(locker, count, src_file, src_line);
+ result= my_write(file, buffer, count, flags);
+ if (flags & (MY_NABP | MY_FNABP))
+ bytes_written= (result == 0) ? count : 0;
+ else
+ bytes_written= (result != MY_FILE_ERROR) ? result : 0;
+ PSI_FILE_CALL(end_file_wait)(locker, bytes_written);
+ return result;
+ }
+#endif
+
+ result= my_write(file, buffer, count, flags);
+ return result;
+}
+
+static inline size_t
+inline_mysql_file_pread(
+#ifdef HAVE_PSI_FILE_INTERFACE
+ const char *src_file, uint src_line,
+#endif
+ File file, uchar *buffer, size_t count, my_off_t offset, myf flags)
+{
+ size_t result;
+#ifdef HAVE_PSI_FILE_INTERFACE
+ struct PSI_file_locker *locker;
+ PSI_file_locker_state state;
+ size_t bytes_read;
+ locker= PSI_FILE_CALL(get_thread_file_descriptor_locker)
+ (&state, file, PSI_FILE_READ);
+ if (likely(locker != NULL))
+ {
+ PSI_FILE_CALL(start_file_wait)(locker, count, src_file, src_line);
+ result= my_pread(file, buffer, count, offset, flags);
+ if (flags & (MY_NABP | MY_FNABP))
+ bytes_read= (result == 0) ? count : 0;
+ else
+ bytes_read= (result != MY_FILE_ERROR) ? result : 0;
+ PSI_FILE_CALL(end_file_wait)(locker, bytes_read);
+ return result;
+ }
+#endif
+
+ result= my_pread(file, buffer, count, offset, flags);
+ return result;
+}
+
+static inline size_t
+inline_mysql_file_pwrite(
+#ifdef HAVE_PSI_FILE_INTERFACE
+ const char *src_file, uint src_line,
+#endif
+ File file, const uchar *buffer, size_t count, my_off_t offset, myf flags)
+{
+ size_t result;
+#ifdef HAVE_PSI_FILE_INTERFACE
+ struct PSI_file_locker *locker;
+ PSI_file_locker_state state;
+ size_t bytes_written;
+ locker= PSI_FILE_CALL(get_thread_file_descriptor_locker)
+ (&state, file, PSI_FILE_WRITE);
+ if (likely(locker != NULL))
+ {
+ PSI_FILE_CALL(start_file_wait)(locker, count, src_file, src_line);
+ result= my_pwrite(file, buffer, count, offset, flags);
+ if (flags & (MY_NABP | MY_FNABP))
+ bytes_written= (result == 0) ? count : 0;
+ else
+ bytes_written= (result != MY_FILE_ERROR) ? result : 0;
+ PSI_FILE_CALL(end_file_wait)(locker, bytes_written);
+ return result;
+ }
+#endif
+
+ result= my_pwrite(file, buffer, count, offset, flags);
+ return result;
+}
+
+static inline my_off_t
+inline_mysql_file_seek(
+#ifdef HAVE_PSI_FILE_INTERFACE
+ const char *src_file, uint src_line,
+#endif
+ File file, my_off_t pos, int whence, myf flags)
+{
+ my_off_t result;
+#ifdef HAVE_PSI_FILE_INTERFACE
+ struct PSI_file_locker *locker;
+ PSI_file_locker_state state;
+ locker= PSI_FILE_CALL(get_thread_file_descriptor_locker)
+ (&state, file, PSI_FILE_SEEK);
+ if (likely(locker != NULL))
+ {
+ PSI_FILE_CALL(start_file_wait)(locker, (size_t) 0, src_file, src_line);
+ result= my_seek(file, pos, whence, flags);
+ PSI_FILE_CALL(end_file_wait)(locker, (size_t) 0);
+ return result;
+ }
+#endif
+
+ result= my_seek(file, pos, whence, flags);
+ return result;
+}
+
+static inline my_off_t
+inline_mysql_file_tell(
+#ifdef HAVE_PSI_FILE_INTERFACE
+ const char *src_file, uint src_line,
+#endif
+ File file, myf flags)
+{
+ my_off_t result;
+#ifdef HAVE_PSI_FILE_INTERFACE
+ struct PSI_file_locker *locker;
+ PSI_file_locker_state state;
+ locker= PSI_FILE_CALL(get_thread_file_descriptor_locker)
+ (&state, file, PSI_FILE_TELL);
+ if (likely(locker != NULL))
+ {
+ PSI_FILE_CALL(start_file_wait)(locker, (size_t) 0, src_file, src_line);
+ result= my_tell(file, flags);
+ PSI_FILE_CALL(end_file_wait)(locker, (size_t) 0);
+ return result;
+ }
+#endif
+
+ result= my_tell(file, flags);
+ return result;
+}
+
+static inline int
+inline_mysql_file_delete(
+#ifdef HAVE_PSI_FILE_INTERFACE
+ PSI_file_key key, const char *src_file, uint src_line,
+#endif
+ const char *name, myf flags)
+{
+ int result;
+#ifdef HAVE_PSI_FILE_INTERFACE
+ struct PSI_file_locker *locker;
+ PSI_file_locker_state state;
+ locker= PSI_FILE_CALL(get_thread_file_name_locker)
+ (&state, key, PSI_FILE_DELETE, name, &locker);
+ if (likely(locker != NULL))
+ {
+ PSI_FILE_CALL(start_file_close_wait)(locker, src_file, src_line);
+ result= my_delete(name, flags);
+ PSI_FILE_CALL(end_file_close_wait)(locker, result);
+ return result;
+ }
+#endif
+
+ result= my_delete(name, flags);
+ return result;
+}
+
+static inline int
+inline_mysql_file_rename(
+#ifdef HAVE_PSI_FILE_INTERFACE
+ PSI_file_key key, const char *src_file, uint src_line,
+#endif
+ const char *from, const char *to, myf flags)
+{
+ int result;
+#ifdef HAVE_PSI_FILE_INTERFACE
+ struct PSI_file_locker *locker;
+ PSI_file_locker_state state;
+ locker= PSI_FILE_CALL(get_thread_file_name_locker)
+ (&state, key, PSI_FILE_RENAME, from, &locker);
+ if (likely(locker != NULL))
+ {
+ PSI_FILE_CALL(start_file_wait)(locker, (size_t) 0, src_file, src_line);
+ result= my_rename(from, to, flags);
+ PSI_FILE_CALL(end_file_rename_wait)(locker, from, to, result);
+ return result;
+ }
+#endif
+
+ result= my_rename(from, to, flags);
+ return result;
+}
+
+static inline File
+inline_mysql_file_create_with_symlink(
+#ifdef HAVE_PSI_FILE_INTERFACE
+ PSI_file_key key, const char *src_file, uint src_line,
+#endif
+ const char *linkname, const char *filename, int create_flags,
+ int access_flags, myf flags)
+{
+ File file;
+#ifdef HAVE_PSI_FILE_INTERFACE
+ struct PSI_file_locker *locker;
+ PSI_file_locker_state state;
+ locker= PSI_FILE_CALL(get_thread_file_name_locker)
+ (&state, key, PSI_FILE_CREATE, filename, &locker);
+ if (likely(locker != NULL))
+ {
+ PSI_FILE_CALL(start_file_open_wait)(locker, src_file, src_line);
+ file= my_create_with_symlink(linkname, filename, create_flags, access_flags,
+ flags);
+ PSI_FILE_CALL(end_file_open_wait_and_bind_to_descriptor)(locker, file);
+ return file;
+ }
+#endif
+
+ file= my_create_with_symlink(linkname, filename, create_flags, access_flags,
+ flags);
+ return file;
+}
+
+static inline int
+inline_mysql_file_delete_with_symlink(
+#ifdef HAVE_PSI_FILE_INTERFACE
+ PSI_file_key key, const char *src_file, uint src_line,
+#endif
+ const char *name, myf flags)
+{
+ int result;
+#ifdef HAVE_PSI_FILE_INTERFACE
+ struct PSI_file_locker *locker;
+ PSI_file_locker_state state;
+ locker= PSI_FILE_CALL(get_thread_file_name_locker)
+ (&state, key, PSI_FILE_DELETE, name, &locker);
+ if (likely(locker != NULL))
+ {
+ PSI_FILE_CALL(start_file_close_wait)(locker, src_file, src_line);
+ result= my_delete_with_symlink(name, flags);
+ PSI_FILE_CALL(end_file_close_wait)(locker, result);
+ return result;
+ }
+#endif
+
+ result= my_delete_with_symlink(name, flags);
+ return result;
+}
+
+static inline int
+inline_mysql_file_rename_with_symlink(
+#ifdef HAVE_PSI_FILE_INTERFACE
+ PSI_file_key key, const char *src_file, uint src_line,
+#endif
+ const char *from, const char *to, myf flags)
+{
+ int result;
+#ifdef HAVE_PSI_FILE_INTERFACE
+ struct PSI_file_locker *locker;
+ PSI_file_locker_state state;
+ locker= PSI_FILE_CALL(get_thread_file_name_locker)
+ (&state, key, PSI_FILE_RENAME, from, &locker);
+ if (likely(locker != NULL))
+ {
+ PSI_FILE_CALL(start_file_wait)(locker, (size_t) 0, src_file, src_line);
+ result= my_rename_with_symlink(from, to, flags);
+ PSI_FILE_CALL(end_file_rename_wait)(locker, from, to, result);
+ return result;
+ }
+#endif
+
+ result= my_rename_with_symlink(from, to, flags);
+ return result;
+}
+
+static inline int
+inline_mysql_file_sync(
+#ifdef HAVE_PSI_FILE_INTERFACE
+ const char *src_file, uint src_line,
+#endif
+ File fd, myf flags)
+{
+ int result= 0;
+#ifdef HAVE_PSI_FILE_INTERFACE
+ struct PSI_file_locker *locker;
+ PSI_file_locker_state state;
+ locker= PSI_FILE_CALL(get_thread_file_descriptor_locker)
+ (&state, fd, PSI_FILE_SYNC);
+ if (likely(locker != NULL))
+ {
+ PSI_FILE_CALL(start_file_wait)(locker, (size_t) 0, src_file, src_line);
+ result= my_sync(fd, flags);
+ PSI_FILE_CALL(end_file_wait)(locker, (size_t) 0);
+ return result;
+ }
+#endif
+
+ result= my_sync(fd, flags);
+ return result;
+}
+
+/** @} (end of group File_instrumentation) */
+
+#endif
+
diff --git a/db/include/mysql/psi/mysql_idle.h b/db/include/mysql/psi/mysql_idle.h
new file mode 100644
index 0000000..61a25f2
--- /dev/null
+++ b/db/include/mysql/psi/mysql_idle.h
@@ -0,0 +1,103 @@
+/* Copyright (c) 2011, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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,
+ 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */
+
+#ifndef MYSQL_IDLE_H
+#define MYSQL_IDLE_H
+
+/**
+ @file mysql/psi/mysql_idle.h
+ Instrumentation helpers for idle waits.
+*/
+
+#include "mysql/psi/psi.h"
+
+#ifndef PSI_IDLE_CALL
+#define PSI_IDLE_CALL(M) PSI_DYNAMIC_CALL(M)
+#endif
+
+/**
+ @defgroup Idle_instrumentation Idle Instrumentation
+ @ingroup Instrumentation_interface
+ @{
+*/
+
+/**
+ @def MYSQL_START_IDLE_WAIT
+ Instrumentation helper for table io_waits.
+ This instrumentation marks the start of a wait event.
+ @param LOCKER the locker
+ @param STATE the locker state
+ @sa MYSQL_END_IDLE_WAIT.
+*/
+#ifdef HAVE_PSI_IDLE_INTERFACE
+ #define MYSQL_START_IDLE_WAIT(LOCKER, STATE) \
+ LOCKER= inline_mysql_start_idle_wait(STATE, __FILE__, __LINE__)
+#else
+ #define MYSQL_START_IDLE_WAIT(LOCKER, STATE) \
+ do {} while (0)
+#endif
+
+/**
+ @def MYSQL_END_IDLE_WAIT
+ Instrumentation helper for idle waits.
+ This instrumentation marks the end of a wait event.
+ @param LOCKER the locker
+ @sa MYSQL_START_IDLE_WAIT.
+*/
+#ifdef HAVE_PSI_IDLE_INTERFACE
+ #define MYSQL_END_IDLE_WAIT(LOCKER) \
+ inline_mysql_end_idle_wait(LOCKER)
+#else
+ #define MYSQL_END_IDLE_WAIT(LOCKER) \
+ do {} while (0)
+#endif
+
+#ifdef HAVE_PSI_IDLE_INTERFACE
+/**
+ Instrumentation calls for MYSQL_START_IDLE_WAIT.
+ @sa MYSQL_END_IDLE_WAIT.
+*/
+static inline struct PSI_idle_locker *
+inline_mysql_start_idle_wait(PSI_idle_locker_state *state,
+ const char *src_file, int src_line)
+{
+ struct PSI_idle_locker *locker;
+ locker= PSI_IDLE_CALL(start_idle_wait)(state, src_file, src_line);
+ return locker;
+}
+
+/**
+ Instrumentation calls for MYSQL_END_IDLE_WAIT.
+ @sa MYSQL_START_IDLE_WAIT.
+*/
+static inline void
+inline_mysql_end_idle_wait(struct PSI_idle_locker *locker)
+{
+ if (likely(locker != NULL))
+ PSI_IDLE_CALL(end_idle_wait)(locker);
+}
+#endif
+
+/** @} (end of group Idle_instrumentation) */
+
+#endif
+
diff --git a/db/include/mysql/psi/mysql_mdl.h b/db/include/mysql/psi/mysql_mdl.h
new file mode 100644
index 0000000..45723a6
--- /dev/null
+++ b/db/include/mysql/psi/mysql_mdl.h
@@ -0,0 +1,128 @@
+/* Copyright (c) 2012, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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,
+ 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */
+
+#ifndef MYSQL_MDL_H
+#define MYSQL_MDL_H
+
+/**
+ @file mysql/psi/mysql_mdl.h
+ Instrumentation helpers for metadata locks.
+*/
+
+#include "mysql/psi/psi.h"
+
+#ifndef PSI_METADATA_CALL
+#define PSI_METADATA_CALL(M) PSI_DYNAMIC_CALL(M)
+#endif
+
+/**
+ @defgroup Thread_instrumentation Metadata Instrumentation
+ @ingroup Instrumentation_interface
+ @{
+*/
+
+/**
+ @def mysql_mdl_create(K, M, A)
+ Instrumented metadata lock creation.
+ @param I Metadata lock identity
+ @param K Metadata key
+ @param T Metadata lock type
+ @param D Metadata lock duration
+ @param S Metadata lock status
+ @param F request source file
+ @param L request source line
+*/
+
+#ifdef HAVE_PSI_METADATA_INTERFACE
+ #define mysql_mdl_create(I, K, T, D, S, F, L) \
+ inline_mysql_mdl_create(I, K, T, D, S, F, L)
+#else
+ #define mysql_mdl_create(I, K, T, D, S, F, L) NULL
+#endif
+
+#ifdef HAVE_PSI_METADATA_INTERFACE
+ #define mysql_mdl_set_status(L, S) \
+ inline_mysql_mdl_set_status(L, S)
+#else
+ #define mysql_mdl_set_status(L, S) \
+ do {} while (0)
+#endif
+
+
+/**
+ @def mysql_mdl_destroy(M)
+ Instrumented metadata lock destruction.
+ @param M Metadata lock
+*/
+#ifdef HAVE_PSI_METADATA_INTERFACE
+ #define mysql_mdl_destroy(M) \
+ inline_mysql_mdl_destroy(M, __FILE__, __LINE__)
+#else
+ #define mysql_mdl_destroy(M) \
+ do {} while (0)
+#endif
+
+#ifdef HAVE_PSI_METADATA_INTERFACE
+
+static inline PSI_metadata_lock *
+inline_mysql_mdl_create(void *identity,
+ const MDL_key *mdl_key,
+ enum_mdl_type mdl_type,
+ enum_mdl_duration mdl_duration,
+ MDL_ticket::enum_psi_status mdl_status,
+ const char *src_file, uint src_line)
+{
+ PSI_metadata_lock *result;
+
+ /* static_cast: Fit a round C++ enum peg into a square C int hole ... */
+ result= PSI_METADATA_CALL(create_metadata_lock)
+ (identity,
+ mdl_key,
+ static_cast (mdl_type),
+ static_cast (mdl_duration),
+ static_cast (mdl_status),
+ src_file, src_line);
+
+ return result;
+}
+
+static inline void inline_mysql_mdl_set_status(
+ PSI_metadata_lock *psi,
+ MDL_ticket::enum_psi_status mdl_status)
+{
+ if (psi != NULL)
+ PSI_METADATA_CALL(set_metadata_lock_status)(psi, mdl_status);
+}
+
+static inline void inline_mysql_mdl_destroy(
+ PSI_metadata_lock *psi,
+ const char *src_file, uint src_line)
+{
+ if (psi != NULL)
+ PSI_METADATA_CALL(destroy_metadata_lock)(psi);
+}
+#endif /* HAVE_PSI_METADATA_INTERFACE */
+
+/** @} (end of group Metadata_instrumentation) */
+
+#endif
+
diff --git a/db/include/mysql/psi/mysql_memory.h b/db/include/mysql/psi/mysql_memory.h
new file mode 100644
index 0000000..03dc181
--- /dev/null
+++ b/db/include/mysql/psi/mysql_memory.h
@@ -0,0 +1,69 @@
+/* Copyright (c) 2012, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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,
+ 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */
+
+#ifndef MYSQL_MEMORY_H
+#define MYSQL_MEMORY_H
+
+/**
+ @file mysql/psi/mysql_memory.h
+ Instrumentation helpers for memory allocation.
+*/
+
+#include "mysql/psi/psi.h"
+
+#ifndef PSI_MEMORY_CALL
+#define PSI_MEMORY_CALL(M) PSI_DYNAMIC_CALL(M)
+#endif
+
+/**
+ @defgroup Memory_instrumentation Memory Instrumentation
+ @ingroup Instrumentation_interface
+ @{
+*/
+
+/**
+ @def mysql_memory_register(P1, P2, P3)
+ Memory registration.
+*/
+#define mysql_memory_register(P1, P2, P3) \
+ inline_mysql_memory_register(P1, P2, P3)
+
+static inline void inline_mysql_memory_register(
+#ifdef HAVE_PSI_MEMORY_INTERFACE
+ const char *category,
+ PSI_memory_info *info,
+ int count)
+#else
+ const char *category MY_ATTRIBUTE((unused)),
+ void *info MY_ATTRIBUTE((unused)),
+ int count MY_ATTRIBUTE((unused)))
+#endif
+{
+#ifdef HAVE_PSI_MEMORY_INTERFACE
+ PSI_MEMORY_CALL(register_memory)(category, info, count);
+#endif
+}
+
+/** @} (end of group Memory_instrumentation) */
+
+#endif
+
diff --git a/db/include/mysql/psi/mysql_ps.h b/db/include/mysql/psi/mysql_ps.h
new file mode 100644
index 0000000..a3291e3
--- /dev/null
+++ b/db/include/mysql/psi/mysql_ps.h
@@ -0,0 +1,110 @@
+/* Copyright (c) 2014, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 MYSQL_PS_H
+#define MYSQL_PS_H
+
+/**
+ @file mysql/psi/mysql_ps.h
+ Instrumentation helpers for prepared statements.
+*/
+
+#include "mysql/psi/psi.h"
+
+#ifndef PSI_PS_CALL
+#define PSI_PS_CALL(M) PSI_DYNAMIC_CALL(M)
+#endif
+
+#ifdef HAVE_PSI_PS_INTERFACE
+ #define MYSQL_CREATE_PS(IDENTITY, ID, LOCKER, NAME, NAME_LENGTH, SQLTEXT, SQLTEXT_LENGTH) \
+ inline_mysql_create_prepared_stmt(IDENTITY, ID, LOCKER, NAME, NAME_LENGTH, SQLTEXT, SQLTEXT_LENGTH)
+ #define MYSQL_EXECUTE_PS(LOCKER, PREPARED_STMT) \
+ inline_mysql_execute_prepared_stmt(LOCKER, PREPARED_STMT)
+ #define MYSQL_DESTROY_PS(PREPARED_STMT) \
+ inline_mysql_destroy_prepared_stmt(PREPARED_STMT)
+ #define MYSQL_REPREPARE_PS(PREPARED_STMT) \
+ inline_mysql_reprepare_prepared_stmt(PREPARED_STMT)
+ #define MYSQL_SET_PS_TEXT(PREPARED_STMT, SQLTEXT, SQLTEXT_LENGTH) \
+ inline_mysql_set_prepared_stmt_text(PREPARED_STMT, SQLTEXT, SQLTEXT_LENGTH)
+#else
+ #define MYSQL_CREATE_PS(IDENTITY, ID, LOCKER, NAME, NAME_LENGTH, SQLTEXT, SQLTEXT_LENGTH) \
+ NULL
+ #define MYSQL_EXECUTE_PS(LOCKER, PREPARED_STMT) \
+ do {} while (0)
+ #define MYSQL_DESTROY_PS(PREPARED_STMT) \
+ do {} while (0)
+ #define MYSQL_REPREPARE_PS(PREPARED_STMT) \
+ do {} while (0)
+ #define MYSQL_SET_PS_TEXT(PREPARED_STMT, SQLTEXT, SQLTEXT_LENGTH) \
+ do {} while (0)
+#endif
+
+#ifdef HAVE_PSI_PS_INTERFACE
+static inline struct PSI_prepared_stmt*
+inline_mysql_create_prepared_stmt(void *identity, uint stmt_id,
+ PSI_statement_locker *locker,
+ const char *stmt_name, size_t stmt_name_length,
+ const char *sqltext, size_t sqltext_length)
+{
+ if (locker == NULL)
+ return NULL;
+ return PSI_PS_CALL(create_prepared_stmt)(identity, stmt_id,
+ locker,
+ stmt_name, stmt_name_length,
+ sqltext, sqltext_length);
+}
+
+static inline void
+inline_mysql_execute_prepared_stmt(PSI_statement_locker *locker,
+ PSI_prepared_stmt* prepared_stmt)
+{
+ if (prepared_stmt != NULL && locker != NULL)
+ PSI_PS_CALL(execute_prepared_stmt)(locker, prepared_stmt);
+}
+
+static inline void
+inline_mysql_destroy_prepared_stmt(PSI_prepared_stmt *prepared_stmt)
+{
+ if (prepared_stmt != NULL)
+ PSI_PS_CALL(destroy_prepared_stmt)(prepared_stmt);
+}
+
+static inline void
+inline_mysql_reprepare_prepared_stmt(PSI_prepared_stmt *prepared_stmt)
+{
+ if (prepared_stmt != NULL)
+ PSI_PS_CALL(reprepare_prepared_stmt)(prepared_stmt);
+}
+
+static inline void
+inline_mysql_set_prepared_stmt_text(PSI_prepared_stmt *prepared_stmt,
+ const char *text,
+ uint text_len)
+{
+ if (prepared_stmt != NULL)
+ {
+ PSI_PS_CALL(set_prepared_stmt_text)(prepared_stmt, text, text_len);
+ }
+}
+#endif
+
+#endif
diff --git a/db/include/mysql/psi/mysql_socket.h b/db/include/mysql/psi/mysql_socket.h
new file mode 100644
index 0000000..3bc22dd
--- /dev/null
+++ b/db/include/mysql/psi/mysql_socket.h
@@ -0,0 +1,1261 @@
+/* Copyright (c) 2010, 2022, Oracle and/or its affiliates.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License, version 2.0,
+as published by the Free Software Foundation.
+
+This program is also distributed with certain software (including
+but not limited to OpenSSL) that is licensed under separate terms,
+as designated in a particular file or component or in included license
+documentation. The authors of MySQL hereby grant you an additional
+permission to link the program and your derivative works with the
+separately licensed software that they have included with MySQL.
+
+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, version 2.0, 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 MYSQL_SOCKET_H
+#define MYSQL_SOCKET_H
+
+/* For strlen() */
+#include
+/* For MY_STAT */
+#include
+/* For my_chsize */
+#include
+/* For socket api */
+#ifdef _WIN32
+ #include
+ #include
+ #include
+ #define SOCKBUF_T char
+#else
+ #include
+ #define SOCKBUF_T void
+#endif
+/**
+ @file mysql/psi/mysql_socket.h
+[...]
+*/
+
+#include "mysql/psi/psi.h"
+
+#ifndef PSI_SOCKET_CALL
+#define PSI_SOCKET_CALL(M) PSI_DYNAMIC_CALL(M)
+#endif
+
+/**
+ @defgroup Socket_instrumentation Socket Instrumentation
+ @ingroup Instrumentation_interface
+ @{
+*/
+
+/**
+ @def mysql_socket_register(P1, P2, P3)
+ Socket registration.
+*/
+#ifdef HAVE_PSI_SOCKET_INTERFACE
+ #define mysql_socket_register(P1, P2, P3) \
+ inline_mysql_socket_register(P1, P2, P3)
+#else
+ #define mysql_socket_register(P1, P2, P3) \
+ do {} while (0)
+#endif
+
+/** An instrumented socket. */
+struct st_mysql_socket
+{
+ /** The real socket descriptor. */
+ my_socket fd;
+
+ /**
+ The instrumentation hook.
+ Note that this hook is not conditionally defined,
+ for binary compatibility of the @c MYSQL_SOCKET interface.
+ */
+ struct PSI_socket *m_psi;
+};
+
+/**
+ An instrumented socket.
+ @c MYSQL_SOCKET is a replacement for @c my_socket.
+*/
+typedef struct st_mysql_socket MYSQL_SOCKET;
+
+
+/**
+ @def MYSQL_INVALID_SOCKET
+ MYSQL_SOCKET initial value.
+*/
+//MYSQL_SOCKET MYSQL_INVALID_SOCKET= {INVALID_SOCKET, NULL};
+#define MYSQL_INVALID_SOCKET mysql_socket_invalid()
+
+/**
+ MYSQL_SOCKET helper. Initialize instrumented socket.
+ @sa mysql_socket_getfd
+ @sa mysql_socket_setfd
+*/
+static inline MYSQL_SOCKET
+mysql_socket_invalid()
+{
+ MYSQL_SOCKET mysql_socket= {INVALID_SOCKET, NULL};
+ return mysql_socket;
+}
+
+/**
+ Set socket descriptor and address.
+ @param socket nstrumented socket
+ @param addr unformatted socket address
+ @param addr_len length of socket addres
+*/
+
+static inline void
+mysql_socket_set_address(
+#ifdef HAVE_PSI_SOCKET_INTERFACE
+ MYSQL_SOCKET socket,
+ const struct sockaddr *addr,
+ socklen_t addr_len
+#else
+ MYSQL_SOCKET socket MY_ATTRIBUTE ((unused)),
+ const struct sockaddr *addr MY_ATTRIBUTE ((unused)),
+ socklen_t addr_len MY_ATTRIBUTE ((unused))
+#endif
+)
+{
+#ifdef HAVE_PSI_SOCKET_INTERFACE
+ if (socket.m_psi != NULL)
+ PSI_SOCKET_CALL(set_socket_info)(socket.m_psi, NULL, addr, addr_len);
+#endif
+}
+
+/**
+ Set socket descriptor and address.
+ @param socket instrumented socket
+*/
+static inline void
+mysql_socket_set_thread_owner(
+#ifdef HAVE_PSI_SOCKET_INTERFACE
+MYSQL_SOCKET socket
+#else
+MYSQL_SOCKET socket MY_ATTRIBUTE ((unused))
+#endif
+)
+{
+#ifdef HAVE_PSI_SOCKET_INTERFACE
+ if (socket.m_psi != NULL)
+ PSI_SOCKET_CALL(set_socket_thread_owner)(socket.m_psi);
+#endif
+}
+
+/**
+ MYSQL_SOCKET helper. Get socket descriptor.
+ @param mysql_socket Instrumented socket
+ @sa mysql_socket_setfd
+*/
+static inline my_socket
+mysql_socket_getfd(MYSQL_SOCKET mysql_socket)
+{
+ return mysql_socket.fd;
+}
+
+/**
+ MYSQL_SOCKET helper. Set socket descriptor.
+ @param mysql_socket Instrumented socket
+ @param fd Socket descriptor
+ @sa mysql_socket_getfd
+*/
+static inline void
+mysql_socket_setfd(MYSQL_SOCKET *mysql_socket, my_socket fd)
+{
+ if (likely(mysql_socket != NULL))
+ mysql_socket->fd= fd;
+}
+
+/**
+ @def MYSQL_SOCKET_WAIT_VARIABLES
+ Instrumentation helper for socket waits.
+ This instrumentation declares local variables.
+ Do not use a ';' after this macro
+ @param LOCKER locker
+ @param STATE locker state
+ @sa MYSQL_START_SOCKET_WAIT.
+ @sa MYSQL_END_SOCKET_WAIT.
+*/
+#ifdef HAVE_PSI_SOCKET_INTERFACE
+ #define MYSQL_SOCKET_WAIT_VARIABLES(LOCKER, STATE) \
+ struct PSI_socket_locker* LOCKER; \
+ PSI_socket_locker_state STATE;
+#else
+ #define MYSQL_SOCKET_WAIT_VARIABLES(LOCKER, STATE)
+#endif
+
+/**
+ @def MYSQL_START_SOCKET_WAIT
+ Instrumentation helper for socket waits.
+ This instrumentation marks the start of a wait event.
+ @param LOCKER locker
+ @param STATE locker state
+ @param SOCKET instrumented socket
+ @param OP The socket operation to be performed
+ @param COUNT bytes to be written/read
+ @sa MYSQL_END_SOCKET_WAIT.
+*/
+#ifdef HAVE_PSI_SOCKET_INTERFACE
+ #define MYSQL_START_SOCKET_WAIT(LOCKER, STATE, SOCKET, OP, COUNT) \
+ LOCKER= inline_mysql_start_socket_wait(STATE, SOCKET, OP, COUNT,\
+ __FILE__, __LINE__)
+#else
+ #define MYSQL_START_SOCKET_WAIT(LOCKER, STATE, SOCKET, OP, COUNT) \
+ do {} while (0)
+#endif
+
+/**
+ @def MYSQL_END_SOCKET_WAIT
+ Instrumentation helper for socket waits.
+ This instrumentation marks the end of a wait event.
+ @param LOCKER locker
+ @param COUNT actual bytes written/read, or -1
+ @sa MYSQL_START_SOCKET_WAIT.
+*/
+#ifdef HAVE_PSI_SOCKET_INTERFACE
+ #define MYSQL_END_SOCKET_WAIT(LOCKER, COUNT) \
+ inline_mysql_end_socket_wait(LOCKER, COUNT)
+#else
+ #define MYSQL_END_SOCKET_WAIT(LOCKER, COUNT) \
+ do {} while (0)
+#endif
+
+/**
+ @def MYSQL_SOCKET_SET_STATE
+ Set the state (IDLE, ACTIVE) of an instrumented socket.
+ @param SOCKET the instrumented socket
+ @param STATE the new state
+ @sa PSI_socket_state
+*/
+#ifdef HAVE_PSI_SOCKET_INTERFACE
+ #define MYSQL_SOCKET_SET_STATE(SOCKET, STATE) \
+ inline_mysql_socket_set_state(SOCKET, STATE)
+#else
+ #define MYSQL_SOCKET_SET_STATE(SOCKET, STATE) \
+ do {} while (0)
+#endif
+
+#ifdef HAVE_PSI_SOCKET_INTERFACE
+/**
+ Instrumentation calls for MYSQL_START_SOCKET_WAIT.
+ @sa MYSQL_START_SOCKET_WAIT.
+*/
+static inline struct PSI_socket_locker*
+inline_mysql_start_socket_wait(PSI_socket_locker_state *state,
+ MYSQL_SOCKET mysql_socket,
+ enum PSI_socket_operation op,
+ size_t byte_count,
+ const char *src_file, int src_line)
+{
+ struct PSI_socket_locker *locker;
+ if (mysql_socket.m_psi != NULL)
+ {
+ locker= PSI_SOCKET_CALL(start_socket_wait)
+ (state, mysql_socket.m_psi, op, byte_count, src_file, src_line);
+ }
+ else
+ locker= NULL;
+ return locker;
+}
+
+/**
+ Instrumentation calls for MYSQL_END_SOCKET_WAIT.
+ @sa MYSQL_END_SOCKET_WAIT.
+*/
+static inline void
+inline_mysql_end_socket_wait(struct PSI_socket_locker *locker, size_t byte_count)
+{
+ if (locker != NULL)
+ PSI_SOCKET_CALL(end_socket_wait)(locker, byte_count);
+}
+
+/**
+ Set the state (IDLE, ACTIVE) of an instrumented socket.
+ @param socket the instrumented socket
+ @param state the new state
+ @sa PSI_socket_state
+*/
+static inline void
+inline_mysql_socket_set_state(MYSQL_SOCKET socket, enum PSI_socket_state state)
+{
+ if (socket.m_psi != NULL)
+ PSI_SOCKET_CALL(set_socket_state)(socket.m_psi, state);
+}
+#endif /* HAVE_PSI_SOCKET_INTERFACE */
+
+/**
+ @def mysql_socket_socket(K, D, T, P)
+ Create a socket.
+ @c mysql_socket_socket is a replacement for @c socket.
+ @param K PSI_socket_key for this instrumented socket
+ @param D Socket domain
+ @param T Protocol type
+ @param P Transport protocol
+*/
+
+#ifdef HAVE_PSI_SOCKET_INTERFACE
+ #define mysql_socket_socket(K, D, T, P) \
+ inline_mysql_socket_socket(K, D, T, P)
+#else
+ #define mysql_socket_socket(K, D, T, P) \
+ inline_mysql_socket_socket(D, T, P)
+#endif
+
+/**
+ @def mysql_socket_bind(FD, AP, L)
+ Bind a socket to a local port number and IP address
+ @c mysql_socket_bind is a replacement for @c bind.
+ @param FD Instrumented socket descriptor returned by socket()
+ @param AP Pointer to local port number and IP address in sockaddr structure
+ @param L Length of sockaddr structure
+*/
+#ifdef HAVE_PSI_SOCKET_INTERFACE
+ #define mysql_socket_bind(FD, AP, L) \
+ inline_mysql_socket_bind(__FILE__, __LINE__, FD, AP, L)
+#else
+ #define mysql_socket_bind(FD, AP, L) \
+ inline_mysql_socket_bind(FD, AP, L)
+#endif
+
+/**
+ @def mysql_socket_getsockname(FD, AP, LP)
+ Return port number and IP address of the local host
+ @c mysql_socket_getsockname is a replacement for @c getsockname.
+ @param FD Instrumented socket descriptor returned by socket()
+ @param AP Pointer to returned address of local host in @c sockaddr structure
+ @param LP Pointer to length of @c sockaddr structure
+*/
+#ifdef HAVE_PSI_SOCKET_INTERFACE
+ #define mysql_socket_getsockname(FD, AP, LP) \
+ inline_mysql_socket_getsockname(__FILE__, __LINE__, FD, AP, LP)
+#else
+ #define mysql_socket_getsockname(FD, AP, LP) \
+ inline_mysql_socket_getsockname(FD, AP, LP)
+#endif
+
+/**
+ @def mysql_socket_connect(FD, AP, L)
+ Establish a connection to a remote host.
+ @c mysql_socket_connect is a replacement for @c connect.
+ @param FD Instrumented socket descriptor returned by socket()
+ @param AP Pointer to target address in sockaddr structure
+ @param L Length of sockaddr structure
+*/
+#ifdef HAVE_PSI_SOCKET_INTERFACE
+ #define mysql_socket_connect(FD, AP, L) \
+ inline_mysql_socket_connect(__FILE__, __LINE__, FD, AP, L)
+#else
+ #define mysql_socket_connect(FD, AP, L) \
+ inline_mysql_socket_connect(FD, AP, L)
+#endif
+
+/**
+ @def mysql_socket_getpeername(FD, AP, LP)
+ Get port number and IP address of remote host that a socket is connected to.
+ @c mysql_socket_getpeername is a replacement for @c getpeername.
+ @param FD Instrumented socket descriptor returned by socket() or accept()
+ @param AP Pointer to returned address of remote host in sockaddr structure
+ @param LP Pointer to length of sockaddr structure
+*/
+#ifdef HAVE_PSI_SOCKET_INTERFACE
+ #define mysql_socket_getpeername(FD, AP, LP) \
+ inline_mysql_socket_getpeername(__FILE__, __LINE__, FD, AP, LP)
+#else
+ #define mysql_socket_getpeername(FD, AP, LP) \
+ inline_mysql_socket_getpeername(FD, AP, LP)
+#endif
+
+/**
+ @def mysql_socket_send(FD, B, N, FL)
+ Send data from the buffer, B, to a connected socket.
+ @c mysql_socket_send is a replacement for @c send.
+ @param FD Instrumented socket descriptor returned by socket() or accept()
+ @param B Buffer to send
+ @param N Number of bytes to send
+ @param FL Control flags
+*/
+#ifdef HAVE_PSI_SOCKET_INTERFACE
+ #define mysql_socket_send(FD, B, N, FL) \
+ inline_mysql_socket_send(__FILE__, __LINE__, FD, B, N, FL)
+#else
+ #define mysql_socket_send(FD, B, N, FL) \
+ inline_mysql_socket_send(FD, B, N, FL)
+#endif
+
+/**
+ @def mysql_socket_recv(FD, B, N, FL)
+ Receive data from a connected socket.
+ @c mysql_socket_recv is a replacement for @c recv.
+ @param FD Instrumented socket descriptor returned by socket() or accept()
+ @param B Buffer to receive to
+ @param N Maximum bytes to receive
+ @param FL Control flags
+*/
+#ifdef HAVE_PSI_SOCKET_INTERFACE
+ #define mysql_socket_recv(FD, B, N, FL) \
+ inline_mysql_socket_recv(__FILE__, __LINE__, FD, B, N, FL)
+#else
+ #define mysql_socket_recv(FD, B, N, FL) \
+ inline_mysql_socket_recv(FD, B, N, FL)
+#endif
+
+/**
+ @def mysql_socket_sendto(FD, B, N, FL, AP, L)
+ Send data to a socket at the specified address.
+ @c mysql_socket_sendto is a replacement for @c sendto.
+ @param FD Instrumented socket descriptor returned by socket()
+ @param B Buffer to send
+ @param N Number of bytes to send
+ @param FL Control flags
+ @param AP Pointer to destination sockaddr structure
+ @param L Size of sockaddr structure
+*/
+#ifdef HAVE_PSI_SOCKET_INTERFACE
+ #define mysql_socket_sendto(FD, B, N, FL, AP, L) \
+ inline_mysql_socket_sendto(__FILE__, __LINE__, FD, B, N, FL, AP, L)
+#else
+ #define mysql_socket_sendto(FD, B, N, FL, AP, L) \
+ inline_mysql_socket_sendto(FD, B, N, FL, AP, L)
+#endif
+
+/**
+ @def mysql_socket_recvfrom(FD, B, N, FL, AP, L)
+ Receive data from a socket and return source address information
+ @c mysql_socket_recvfrom is a replacement for @c recvfrom.
+ @param FD Instrumented socket descriptor returned by socket()
+ @param B Buffer to receive to
+ @param N Maximum bytes to receive
+ @param FL Control flags
+ @param AP Pointer to source address in sockaddr_storage structure
+ @param LP Size of sockaddr_storage structure
+*/
+#ifdef HAVE_PSI_SOCKET_INTERFACE
+ #define mysql_socket_recvfrom(FD, B, N, FL, AP, LP) \
+ inline_mysql_socket_recvfrom(__FILE__, __LINE__, FD, B, N, FL, AP, LP)
+#else
+ #define mysql_socket_recvfrom(FD, B, N, FL, AP, LP) \
+ inline_mysql_socket_recvfrom(FD, B, N, FL, AP, LP)
+#endif
+
+/**
+ @def mysql_socket_getsockopt(FD, LV, ON, OP, OL)
+ Get a socket option for the specified socket.
+ @c mysql_socket_getsockopt is a replacement for @c getsockopt.
+ @param FD Instrumented socket descriptor returned by socket()
+ @param LV Protocol level
+ @param ON Option to query
+ @param OP Buffer which will contain the value for the requested option
+ @param OL Pointer to length of OP
+*/
+#ifdef HAVE_PSI_SOCKET_INTERFACE
+ #define mysql_socket_getsockopt(FD, LV, ON, OP, OL) \
+ inline_mysql_socket_getsockopt(__FILE__, __LINE__, FD, LV, ON, OP, OL)
+#else
+ #define mysql_socket_getsockopt(FD, LV, ON, OP, OL) \
+ inline_mysql_socket_getsockopt(FD, LV, ON, OP, OL)
+#endif
+
+/**
+ @def mysql_socket_setsockopt(FD, LV, ON, OP, OL)
+ Set a socket option for the specified socket.
+ @c mysql_socket_setsockopt is a replacement for @c setsockopt.
+ @param FD Instrumented socket descriptor returned by socket()
+ @param LV Protocol level
+ @param ON Option to modify
+ @param OP Buffer containing the value for the specified option
+ @param OL Pointer to length of OP
+*/
+#ifdef HAVE_PSI_SOCKET_INTERFACE
+ #define mysql_socket_setsockopt(FD, LV, ON, OP, OL) \
+ inline_mysql_socket_setsockopt(__FILE__, __LINE__, FD, LV, ON, OP, OL)
+#else
+ #define mysql_socket_setsockopt(FD, LV, ON, OP, OL) \
+ inline_mysql_socket_setsockopt(FD, LV, ON, OP, OL)
+#endif
+
+/**
+ @def mysql_sock_set_nonblocking
+ Set socket to non-blocking.
+ @param FD instrumented socket descriptor
+*/
+#ifdef HAVE_PSI_SOCKET_INTERFACE
+ #define mysql_sock_set_nonblocking(FD) \
+ inline_mysql_sock_set_nonblocking(__FILE__, __LINE__, FD)
+#else
+ #define mysql_sock_set_nonblocking(FD) \
+ inline_mysql_sock_set_nonblocking(FD)
+#endif
+
+/**
+ @def mysql_socket_listen(FD, N)
+ Set socket state to listen for an incoming connection.
+ @c mysql_socket_listen is a replacement for @c listen.
+ @param FD Instrumented socket descriptor, bound and connected
+ @param N Maximum number of pending connections allowed.
+*/
+#ifdef HAVE_PSI_SOCKET_INTERFACE
+ #define mysql_socket_listen(FD, N) \
+ inline_mysql_socket_listen(__FILE__, __LINE__, FD, N)
+#else
+ #define mysql_socket_listen(FD, N) \
+ inline_mysql_socket_listen(FD, N)
+#endif
+
+/**
+ @def mysql_socket_accept(K, FD, AP, LP)
+ Accept a connection from any remote host; TCP only.
+ @c mysql_socket_accept is a replacement for @c accept.
+ @param K PSI_socket_key for this instrumented socket
+ @param FD Instrumented socket descriptor, bound and placed in a listen state
+ @param AP Pointer to sockaddr structure with returned IP address and port of connected host
+ @param LP Pointer to length of valid information in AP
+*/
+#ifdef HAVE_PSI_SOCKET_INTERFACE
+ #define mysql_socket_accept(K, FD, AP, LP) \
+ inline_mysql_socket_accept(__FILE__, __LINE__, K, FD, AP, LP)
+#else
+ #define mysql_socket_accept(K, FD, AP, LP) \
+ inline_mysql_socket_accept(FD, AP, LP)
+#endif
+
+/**
+ @def mysql_socket_close(FD)
+ Close a socket and sever any connections.
+ @c mysql_socket_close is a replacement for @c close.
+ @param FD Instrumented socket descriptor returned by socket() or accept()
+*/
+#ifdef HAVE_PSI_SOCKET_INTERFACE
+ #define mysql_socket_close(FD) \
+ inline_mysql_socket_close(__FILE__, __LINE__, FD)
+#else
+ #define mysql_socket_close(FD) \
+ inline_mysql_socket_close(FD)
+#endif
+
+/**
+ @def mysql_socket_shutdown(FD, H)
+ Disable receives and/or sends on a socket.
+ @c mysql_socket_shutdown is a replacement for @c shutdown.
+ @param FD Instrumented socket descriptor returned by socket() or accept()
+ @param H Specifies which operations to shutdown
+*/
+#ifdef HAVE_PSI_SOCKET_INTERFACE
+ #define mysql_socket_shutdown(FD, H) \
+ inline_mysql_socket_shutdown(__FILE__, __LINE__, FD, H)
+#else
+ #define mysql_socket_shutdown(FD, H) \
+ inline_mysql_socket_shutdown(FD, H)
+#endif
+
+#ifdef HAVE_PSI_SOCKET_INTERFACE
+static inline void inline_mysql_socket_register(
+ const char *category,
+ PSI_socket_info *info,
+ int count)
+{
+ PSI_SOCKET_CALL(register_socket)(category, info, count);
+}
+#endif
+
+/** mysql_socket_socket */
+
+static inline MYSQL_SOCKET
+inline_mysql_socket_socket
+(
+#ifdef HAVE_PSI_SOCKET_INTERFACE
+ PSI_socket_key key,
+#endif
+ int domain, int type, int protocol)
+{
+ MYSQL_SOCKET mysql_socket= MYSQL_INVALID_SOCKET;
+ mysql_socket.fd= socket(domain, type, protocol);
+
+#ifdef HAVE_PSI_SOCKET_INTERFACE
+ if (likely(mysql_socket.fd != INVALID_SOCKET))
+ {
+ mysql_socket.m_psi= PSI_SOCKET_CALL(init_socket)
+ (key, (const my_socket*)&mysql_socket.fd, NULL, 0);
+ }
+#endif
+ return mysql_socket;
+}
+
+/** mysql_socket_bind */
+
+static inline int
+inline_mysql_socket_bind
+(
+#ifdef HAVE_PSI_SOCKET_INTERFACE
+ const char *src_file, uint src_line,
+#endif
+ MYSQL_SOCKET mysql_socket, const struct sockaddr *addr, socklen_t len)
+{
+ int result;
+
+#ifdef HAVE_PSI_SOCKET_INTERFACE
+ if (mysql_socket.m_psi != NULL)
+ {
+ /* Instrumentation start */
+ PSI_socket_locker_state state;
+ PSI_socket_locker *locker;
+ locker= PSI_SOCKET_CALL(start_socket_wait)
+ (&state, mysql_socket.m_psi, PSI_SOCKET_BIND, (size_t)0, src_file, src_line);
+
+ /* Instrumented code */
+ result= bind(mysql_socket.fd, addr, len);
+
+ /* Instrumentation end */
+ if (result == 0)
+ PSI_SOCKET_CALL(set_socket_info)(mysql_socket.m_psi, NULL, addr, len);
+
+ if (locker != NULL)
+ PSI_SOCKET_CALL(end_socket_wait)(locker, (size_t)0);
+
+ return result;
+ }
+#endif
+
+ /* Non instrumented code */
+ result= bind(mysql_socket.fd, addr, len);
+ return result;
+}
+
+/** mysql_socket_getsockname */
+
+static inline int
+inline_mysql_socket_getsockname
+(
+#ifdef HAVE_PSI_SOCKET_INTERFACE
+ const char *src_file, uint src_line,
+#endif
+ MYSQL_SOCKET mysql_socket, struct sockaddr *addr, socklen_t *len)
+{
+ int result;
+
+#ifdef HAVE_PSI_SOCKET_INTERFACE
+ if (mysql_socket.m_psi != NULL)
+ {
+ /* Instrumentation start */
+ PSI_socket_locker *locker;
+ PSI_socket_locker_state state;
+ locker= PSI_SOCKET_CALL(start_socket_wait)
+ (&state, mysql_socket.m_psi, PSI_SOCKET_BIND, (size_t)0, src_file, src_line);
+
+ /* Instrumented code */
+ result= getsockname(mysql_socket.fd, addr, len);
+
+ /* Instrumentation end */
+ if (locker != NULL)
+ PSI_SOCKET_CALL(end_socket_wait)(locker, (size_t)0);
+
+ return result;
+ }
+#endif
+
+ /* Non instrumented code */
+ result= getsockname(mysql_socket.fd, addr, len);
+
+ return result;
+}
+
+/** mysql_socket_connect */
+
+static inline int
+inline_mysql_socket_connect
+(
+#ifdef HAVE_PSI_SOCKET_INTERFACE
+ const char *src_file, uint src_line,
+#endif
+ MYSQL_SOCKET mysql_socket, const struct sockaddr *addr, socklen_t len)
+{
+ int result;
+
+#ifdef HAVE_PSI_SOCKET_INTERFACE
+ if (mysql_socket.m_psi != NULL)
+ {
+ /* Instrumentation start */
+ PSI_socket_locker *locker;
+ PSI_socket_locker_state state;
+ locker= PSI_SOCKET_CALL(start_socket_wait)
+ (&state, mysql_socket.m_psi, PSI_SOCKET_CONNECT, (size_t)0, src_file, src_line);
+
+ /* Instrumented code */
+ result= connect(mysql_socket.fd, addr, len);
+
+ /* Instrumentation end */
+ if (locker != NULL)
+ PSI_SOCKET_CALL(end_socket_wait)(locker, (size_t)0);
+
+ return result;
+ }
+#endif
+
+ /* Non instrumented code */
+ result= connect(mysql_socket.fd, addr, len);
+
+ return result;
+}
+
+/** mysql_socket_getpeername */
+
+static inline int
+inline_mysql_socket_getpeername
+(
+#ifdef HAVE_PSI_SOCKET_INTERFACE
+ const char *src_file, uint src_line,
+#endif
+ MYSQL_SOCKET mysql_socket, struct sockaddr *addr, socklen_t *len)
+{
+ int result;
+
+#ifdef HAVE_PSI_SOCKET_INTERFACE
+ if (mysql_socket.m_psi != NULL)
+ {
+ /* Instrumentation start */
+ PSI_socket_locker *locker;
+ PSI_socket_locker_state state;
+ locker= PSI_SOCKET_CALL(start_socket_wait)
+ (&state, mysql_socket.m_psi, PSI_SOCKET_BIND, (size_t)0, src_file, src_line);
+
+ /* Instrumented code */
+ result= getpeername(mysql_socket.fd, addr, len);
+
+ /* Instrumentation end */
+ if (locker != NULL)
+ PSI_SOCKET_CALL(end_socket_wait)(locker, (size_t)0);
+
+ return result;
+ }
+#endif
+
+ /* Non instrumented code */
+ result= getpeername(mysql_socket.fd, addr, len);
+
+ return result;
+}
+
+/** mysql_socket_send */
+
+static inline ssize_t
+inline_mysql_socket_send
+(
+#ifdef HAVE_PSI_SOCKET_INTERFACE
+ const char *src_file, uint src_line,
+#endif
+ MYSQL_SOCKET mysql_socket, const SOCKBUF_T *buf, size_t n, int flags)
+{
+ ssize_t result;
+
+#ifdef HAVE_PSI_SOCKET_INTERFACE
+ if (mysql_socket.m_psi != NULL)
+ {
+ /* Instrumentation start */
+ PSI_socket_locker *locker;
+ PSI_socket_locker_state state;
+ locker= PSI_SOCKET_CALL(start_socket_wait)
+ (&state, mysql_socket.m_psi, PSI_SOCKET_SEND, n, src_file, src_line);
+
+ /* Instrumented code */
+ result= send(mysql_socket.fd, buf, IF_WIN((int),) n, flags);
+
+ /* Instrumentation end */
+ if (locker != NULL)
+ {
+ size_t bytes_written;
+ bytes_written= (result > -1) ? result : 0;
+ PSI_SOCKET_CALL(end_socket_wait)(locker, bytes_written);
+ }
+
+ return result;
+ }
+#endif
+
+ /* Non instrumented code */
+ result= send(mysql_socket.fd, buf, IF_WIN((int),) n, flags);
+
+ return result;
+}
+
+/** mysql_socket_recv */
+
+static inline ssize_t
+inline_mysql_socket_recv
+(
+#ifdef HAVE_PSI_SOCKET_INTERFACE
+ const char *src_file, uint src_line,
+#endif
+ MYSQL_SOCKET mysql_socket, SOCKBUF_T *buf, size_t n, int flags)
+{
+ ssize_t result;
+
+#ifdef HAVE_PSI_SOCKET_INTERFACE
+ if (mysql_socket.m_psi != NULL)
+ {
+ /* Instrumentation start */
+ PSI_socket_locker *locker;
+ PSI_socket_locker_state state;
+ locker= PSI_SOCKET_CALL(start_socket_wait)
+ (&state, mysql_socket.m_psi, PSI_SOCKET_RECV, (size_t)0, src_file, src_line);
+
+ /* Instrumented code */
+ result= recv(mysql_socket.fd, buf, IF_WIN((int),) n, flags);
+
+ /* Instrumentation end */
+ if (locker != NULL)
+ {
+ size_t bytes_read;
+ bytes_read= (result > -1) ? result : 0;
+ PSI_SOCKET_CALL(end_socket_wait)(locker, bytes_read);
+ }
+
+ return result;
+ }
+#endif
+
+ /* Non instrumented code */
+ result= recv(mysql_socket.fd, buf, IF_WIN((int),) n, flags);
+
+ return result;
+}
+
+/** mysql_socket_sendto */
+
+static inline ssize_t
+inline_mysql_socket_sendto
+(
+#ifdef HAVE_PSI_SOCKET_INTERFACE
+ const char *src_file, uint src_line,
+#endif
+ MYSQL_SOCKET mysql_socket, const SOCKBUF_T *buf, size_t n, int flags, const struct sockaddr *addr, socklen_t addr_len)
+{
+ ssize_t result;
+
+#ifdef HAVE_PSI_SOCKET_INTERFACE
+ if (mysql_socket.m_psi != NULL)
+ {
+ /* Instrumentation start */
+ PSI_socket_locker *locker;
+ PSI_socket_locker_state state;
+ locker= PSI_SOCKET_CALL(start_socket_wait)
+ (&state, mysql_socket.m_psi, PSI_SOCKET_SEND, n, src_file, src_line);
+
+ /* Instrumented code */
+ result= sendto(mysql_socket.fd, buf, IF_WIN((int),) n, flags, addr, addr_len);
+
+ /* Instrumentation end */
+ if (locker != NULL)
+ {
+ size_t bytes_written;
+ bytes_written = (result > -1) ? result : 0;
+ PSI_SOCKET_CALL(end_socket_wait)(locker, bytes_written);
+ }
+
+ return result;
+ }
+#endif
+
+ /* Non instrumented code */
+ result= sendto(mysql_socket.fd, buf, IF_WIN((int),) n, flags, addr, addr_len);
+
+ return result;
+}
+
+/** mysql_socket_recvfrom */
+
+static inline ssize_t
+inline_mysql_socket_recvfrom
+(
+#ifdef HAVE_PSI_SOCKET_INTERFACE
+ const char *src_file, uint src_line,
+#endif
+ MYSQL_SOCKET mysql_socket, SOCKBUF_T *buf, size_t n, int flags,
+ struct sockaddr *addr, socklen_t *addr_len)
+{
+ ssize_t result;
+
+#ifdef HAVE_PSI_SOCKET_INTERFACE
+ if (mysql_socket.m_psi != NULL)
+ {
+ /* Instrumentation start */
+ PSI_socket_locker *locker;
+ PSI_socket_locker_state state;
+ locker= PSI_SOCKET_CALL(start_socket_wait)
+ (&state, mysql_socket.m_psi, PSI_SOCKET_RECV, (size_t)0, src_file, src_line);
+
+ /* Instrumented code */
+ result= recvfrom(mysql_socket.fd, buf, IF_WIN((int),) n, flags, addr, addr_len);
+
+ /* Instrumentation end */
+ if (locker != NULL)
+ {
+ size_t bytes_read;
+ bytes_read = (result > -1) ? result : 0;
+ PSI_SOCKET_CALL(end_socket_wait)(locker, bytes_read);
+ }
+
+ return result;
+ }
+#endif
+
+ /* Non instrumented code */
+ result= recvfrom(mysql_socket.fd, buf, IF_WIN((int),) n, flags, addr, addr_len);
+
+ return result;
+}
+
+/** mysql_socket_getsockopt */
+
+static inline int
+inline_mysql_socket_getsockopt
+(
+#ifdef HAVE_PSI_SOCKET_INTERFACE
+ const char *src_file, uint src_line,
+#endif
+ MYSQL_SOCKET mysql_socket, int level, int optname, SOCKBUF_T *optval, socklen_t *optlen)
+{
+ int result;
+
+#ifdef HAVE_PSI_SOCKET_INTERFACE
+ if (mysql_socket.m_psi != NULL)
+ {
+ /* Instrumentation start */
+ PSI_socket_locker *locker;
+ PSI_socket_locker_state state;
+ locker= PSI_SOCKET_CALL(start_socket_wait)
+ (&state, mysql_socket.m_psi, PSI_SOCKET_OPT, (size_t)0, src_file, src_line);
+
+ /* Instrumented code */
+ result= getsockopt(mysql_socket.fd, level, optname, optval, optlen);
+
+ /* Instrumentation end */
+ if (locker != NULL)
+ PSI_SOCKET_CALL(end_socket_wait)(locker, (size_t)0);
+
+ return result;
+ }
+#endif
+
+ /* Non instrumented code */
+ result= getsockopt(mysql_socket.fd, level, optname, optval, optlen);
+
+ return result;
+}
+
+/** mysql_socket_setsockopt */
+
+static inline int
+inline_mysql_socket_setsockopt
+(
+#ifdef HAVE_PSI_SOCKET_INTERFACE
+ const char *src_file, uint src_line,
+#endif
+ MYSQL_SOCKET mysql_socket, int level, int optname, const SOCKBUF_T *optval,
+ socklen_t optlen)
+{
+ int result;
+
+#ifdef HAVE_PSI_SOCKET_INTERFACE
+ if (mysql_socket.m_psi)
+ {
+ /* Instrumentation start */
+ PSI_socket_locker *locker;
+ PSI_socket_locker_state state;
+ locker= PSI_SOCKET_CALL(start_socket_wait)
+ (&state, mysql_socket.m_psi, PSI_SOCKET_OPT, (size_t)0, src_file, src_line);
+
+ /* Instrumented code */
+ result= setsockopt(mysql_socket.fd, level, optname, optval, optlen);
+
+ /* Instrumentation end */
+ if (locker != NULL)
+ PSI_SOCKET_CALL(end_socket_wait)(locker, (size_t)0);
+
+ return result;
+ }
+#endif
+
+ /* Non instrumented code */
+ result= setsockopt(mysql_socket.fd, level, optname, optval, optlen);
+
+ return result;
+}
+
+/** set_socket_nonblock */
+static inline int
+set_socket_nonblock(my_socket fd)
+{
+ int ret= 0;
+#ifdef _WIN32
+ {
+ u_long nonblocking= 1;
+ ret= ioctlsocket(fd, FIONBIO, &nonblocking);
+ }
+#else
+ {
+ int fd_flags;
+ fd_flags= fcntl(fd, F_GETFL, 0);
+ if (fd_flags < 0)
+ return errno;
+#if defined(O_NONBLOCK)
+ fd_flags |= O_NONBLOCK;
+#elif defined(O_NDELAY)
+ fd_flags |= O_NDELAY;
+#elif defined(O_FNDELAY)
+ fd_flags |= O_FNDELAY;
+#else
+#error "No definition of non-blocking flag found."
+#endif /* O_NONBLOCK */
+ if (fcntl(fd, F_SETFL, fd_flags) == -1)
+ ret= errno;
+ }
+#endif /* _WIN32 */
+ return ret;
+}
+
+/** mysql_socket_set_nonblocking */
+
+static inline int
+inline_mysql_sock_set_nonblocking
+(
+#ifdef HAVE_PSI_SOCKET_INTERFACE
+ const char *src_file, uint src_line,
+#endif
+ MYSQL_SOCKET mysql_socket
+)
+{
+ int result= 0;
+
+#ifdef HAVE_PSI_SOCKET_INTERFACE
+ if (mysql_socket.m_psi)
+ {
+ /* Instrumentation start */
+ PSI_socket_locker *locker;
+ PSI_socket_locker_state state;
+ locker= PSI_SOCKET_CALL(start_socket_wait)
+ (&state, mysql_socket.m_psi, PSI_SOCKET_OPT,
+ (size_t)0, src_file, src_line);
+
+ /* Instrumented code */
+ result= set_socket_nonblock(mysql_socket.fd);
+
+ /* Instrumentation end */
+ if (locker != NULL)
+ PSI_SOCKET_CALL(end_socket_wait)(locker, (size_t)0);
+
+ return result;
+ }
+#endif
+
+ /* Non instrumented code */
+ result= set_socket_nonblock(mysql_socket.fd);
+
+ return result;
+}
+
+/** mysql_socket_listen */
+
+static inline int
+inline_mysql_socket_listen
+(
+#ifdef HAVE_PSI_SOCKET_INTERFACE
+ const char *src_file, uint src_line,
+#endif
+ MYSQL_SOCKET mysql_socket, int backlog)
+{
+ int result;
+
+#ifdef HAVE_PSI_SOCKET_INTERFACE
+ if (mysql_socket.m_psi != NULL)
+ {
+ /* Instrumentation start */
+ PSI_socket_locker *locker;
+ PSI_socket_locker_state state;
+ locker= PSI_SOCKET_CALL(start_socket_wait)
+ (&state, mysql_socket.m_psi, PSI_SOCKET_CONNECT, (size_t)0, src_file, src_line);
+
+ /* Instrumented code */
+ result= listen(mysql_socket.fd, backlog);
+
+ /* Instrumentation end */
+ if (locker != NULL)
+ PSI_SOCKET_CALL(end_socket_wait)(locker, (size_t)0);
+
+ return result;
+ }
+#endif
+
+ /* Non instrumented code */
+ result= listen(mysql_socket.fd, backlog);
+
+ return result;
+}
+
+/** mysql_socket_accept */
+
+static inline MYSQL_SOCKET
+inline_mysql_socket_accept
+(
+#ifdef HAVE_PSI_SOCKET_INTERFACE
+ const char *src_file, uint src_line, PSI_socket_key key,
+#endif
+ MYSQL_SOCKET socket_listen, struct sockaddr *addr, socklen_t *addr_len)
+{
+ MYSQL_SOCKET socket_accept= MYSQL_INVALID_SOCKET;
+ socklen_t addr_length= (addr_len != NULL) ? *addr_len : 0;
+
+#ifdef HAVE_PSI_SOCKET_INTERFACE
+ if (socket_listen.m_psi != NULL)
+ {
+ /* Instrumentation start */
+ PSI_socket_locker *locker;
+ PSI_socket_locker_state state;
+ locker= PSI_SOCKET_CALL(start_socket_wait)
+ (&state, socket_listen.m_psi, PSI_SOCKET_CONNECT, (size_t)0, src_file, src_line);
+
+ /* Instrumented code */
+ socket_accept.fd= accept(socket_listen.fd, addr, &addr_length);
+
+ /* Instrumentation end */
+ if (locker != NULL)
+ PSI_SOCKET_CALL(end_socket_wait)(locker, (size_t)0);
+ }
+ else
+#endif
+ {
+ /* Non instrumented code */
+ socket_accept.fd= accept(socket_listen.fd, addr, &addr_length);
+ }
+
+#ifdef HAVE_PSI_SOCKET_INTERFACE
+ if (likely(socket_accept.fd != INVALID_SOCKET))
+ {
+ /* Initialize the instrument with the new socket descriptor and address */
+ socket_accept.m_psi= PSI_SOCKET_CALL(init_socket)
+ (key, (const my_socket*)&socket_accept.fd, addr, addr_length);
+ }
+#endif
+
+ return socket_accept;
+}
+
+/** mysql_socket_close */
+
+static inline int
+inline_mysql_socket_close
+(
+#ifdef HAVE_PSI_SOCKET_INTERFACE
+ const char *src_file, uint src_line,
+#endif
+ MYSQL_SOCKET mysql_socket)
+{
+ int result;
+
+#ifdef HAVE_PSI_SOCKET_INTERFACE
+ if (mysql_socket.m_psi != NULL)
+ {
+ /* Instrumentation start */
+ PSI_socket_locker *locker;
+ PSI_socket_locker_state state;
+ locker= PSI_SOCKET_CALL(start_socket_wait)
+ (&state, mysql_socket.m_psi, PSI_SOCKET_CLOSE, (size_t)0, src_file, src_line);
+
+ /* Instrumented code */
+ result= closesocket(mysql_socket.fd);
+
+ /* Instrumentation end */
+ if (locker != NULL)
+ PSI_SOCKET_CALL(end_socket_wait)(locker, (size_t)0);
+ /* Remove the instrumentation for this socket. */
+ if (mysql_socket.m_psi != NULL)
+ PSI_SOCKET_CALL(destroy_socket)(mysql_socket.m_psi);
+
+ return result;
+ }
+#endif
+
+ /* Non instrumented code */
+ result= closesocket(mysql_socket.fd);
+
+ return result;
+}
+
+/** mysql_socket_shutdown */
+
+static inline int
+inline_mysql_socket_shutdown
+(
+#ifdef HAVE_PSI_SOCKET_INTERFACE
+ const char *src_file, uint src_line,
+#endif
+ MYSQL_SOCKET mysql_socket, int how)
+{
+ int result;
+
+#ifdef _WIN32
+ static LPFN_DISCONNECTEX DisconnectEx = NULL;
+ if (DisconnectEx == NULL)
+ {
+ DWORD dwBytesReturned;
+ GUID guidDisconnectEx = WSAID_DISCONNECTEX;
+ WSAIoctl(mysql_socket.fd, SIO_GET_EXTENSION_FUNCTION_POINTER,
+ &guidDisconnectEx, sizeof(GUID),
+ &DisconnectEx, sizeof(DisconnectEx),
+ &dwBytesReturned, NULL, NULL);
+ }
+#endif
+
+/* Instrumentation start */
+#ifdef HAVE_PSI_SOCKET_INTERFACE
+ if (mysql_socket.m_psi != NULL)
+ {
+ PSI_socket_locker *locker;
+ PSI_socket_locker_state state;
+ locker= PSI_SOCKET_CALL(start_socket_wait)
+ (&state, mysql_socket.m_psi, PSI_SOCKET_SHUTDOWN, (size_t)0, src_file, src_line);
+
+ /* Instrumented code */
+#ifdef _WIN32
+ if (DisconnectEx)
+ result= (DisconnectEx(mysql_socket.fd, (LPOVERLAPPED) NULL,
+ (DWORD) 0, (DWORD) 0) == TRUE) ? 0 : -1;
+ else
+#endif
+ result= shutdown(mysql_socket.fd, how);
+
+ /* Instrumentation end */
+ if (locker != NULL)
+ PSI_SOCKET_CALL(end_socket_wait)(locker, (size_t)0);
+
+ return result;
+ }
+#endif
+
+ /* Non instrumented code */
+#ifdef _WIN32
+ if (DisconnectEx)
+ result= (DisconnectEx(mysql_socket.fd, (LPOVERLAPPED) NULL,
+ (DWORD) 0, (DWORD) 0) == TRUE) ? 0 : -1;
+ else
+#endif
+ result= shutdown(mysql_socket.fd, how);
+
+ return result;
+}
+
+/** @} (end of group Socket_instrumentation) */
+
+#endif
+
diff --git a/db/include/mysql/psi/mysql_sp.h b/db/include/mysql/psi/mysql_sp.h
new file mode 100644
index 0000000..1fec59c
--- /dev/null
+++ b/db/include/mysql/psi/mysql_sp.h
@@ -0,0 +1,104 @@
+/* Copyright (c) 2013, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 MYSQL_SP_H
+#define MYSQL_SP_H
+
+/**
+ @file mysql/psi/mysql_sp.h
+ Instrumentation helpers for stored programs.
+*/
+
+#include "mysql/psi/psi.h"
+
+#ifndef PSI_SP_CALL
+#define PSI_SP_CALL(M) PSI_DYNAMIC_CALL(M)
+#endif
+
+#ifdef HAVE_PSI_SP_INTERFACE
+ #define MYSQL_START_SP(STATE, SP_SHARE) \
+ inline_mysql_start_sp(STATE, SP_SHARE)
+#else
+ #define MYSQL_START_SP(STATE, SP_SHARE) \
+ NULL
+#endif
+
+
+#ifdef HAVE_PSI_SP_INTERFACE
+ #define MYSQL_END_SP(LOCKER) \
+ inline_mysql_end_sp(LOCKER)
+#else
+ #define MYSQL_END_SP(LOCKER) \
+ do {} while (0)
+#endif
+
+#ifdef HAVE_PSI_SP_INTERFACE
+ #define MYSQL_DROP_SP(OT, SN, SNL, ON, ONL) \
+ inline_mysql_drop_sp(OT, SN, SNL, ON, ONL)
+#else
+ #define MYSQL_DROP_SP(OT, SN, SNL, ON, ONL) \
+ do {} while (0)
+#endif
+
+#ifdef HAVE_PSI_SP_INTERFACE
+ #define MYSQL_GET_SP_SHARE(OT, SN, SNL, ON, ONL) \
+ inline_mysql_get_sp_share(OT, SN, SNL, ON, ONL)
+#else
+ #define MYSQL_GET_SP_SHARE(OT, SN, SNL, ON, ONL) \
+ NULL
+#endif
+
+#ifdef HAVE_PSI_SP_INTERFACE
+static inline struct PSI_sp_locker*
+inline_mysql_start_sp(PSI_sp_locker_state *state, PSI_sp_share *sp_share)
+{
+ return PSI_SP_CALL(start_sp)(state, sp_share);
+}
+
+static inline void inline_mysql_end_sp(PSI_sp_locker *locker)
+{
+ if (likely(locker != NULL))
+ PSI_SP_CALL(end_sp)(locker);
+}
+
+static inline void
+inline_mysql_drop_sp(uint sp_type,
+ const char* schema_name, uint shcema_name_length,
+ const char* object_name, uint object_name_length)
+{
+ PSI_SP_CALL(drop_sp)(sp_type,
+ schema_name, shcema_name_length,
+ object_name, object_name_length);
+}
+
+static inline PSI_sp_share*
+inline_mysql_get_sp_share(uint sp_type,
+ const char* schema_name, uint shcema_name_length,
+ const char* object_name, uint object_name_length)
+{
+ return PSI_SP_CALL(get_sp_share)(sp_type,
+ schema_name, shcema_name_length,
+ object_name, object_name_length);
+}
+#endif
+
+#endif
diff --git a/db/include/mysql/psi/mysql_stage.h b/db/include/mysql/psi/mysql_stage.h
new file mode 100644
index 0000000..473611d
--- /dev/null
+++ b/db/include/mysql/psi/mysql_stage.h
@@ -0,0 +1,205 @@
+/* Copyright (c) 2010, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 MYSQL_STAGE_H
+#define MYSQL_STAGE_H
+
+/**
+ @file mysql/psi/mysql_stage.h
+ Instrumentation helpers for stages.
+*/
+
+#include "mysql/psi/psi.h"
+
+#ifndef PSI_STAGE_CALL
+#define PSI_STAGE_CALL(M) PSI_DYNAMIC_CALL(M)
+#endif
+
+/**
+ @defgroup Stage_instrumentation Stage Instrumentation
+ @ingroup Instrumentation_interface
+ @{
+*/
+
+/**
+ @def mysql_stage_register(P1, P2, P3)
+ Stage registration.
+*/
+#ifdef HAVE_PSI_STAGE_INTERFACE
+#define mysql_stage_register(P1, P2, P3) \
+ inline_mysql_stage_register(P1, P2, P3)
+#else
+#define mysql_stage_register(P1, P2, P3) \
+ do {} while (0)
+#endif
+
+/**
+ @def MYSQL_SET_STAGE
+ Set the current stage.
+ Use this API when the file and line
+ is passed from the caller.
+ @param K the stage key
+ @param F the source file name
+ @param L the source file line
+ @return the current stage progress
+*/
+#ifdef HAVE_PSI_STAGE_INTERFACE
+ #define MYSQL_SET_STAGE(K, F, L) \
+ inline_mysql_set_stage(K, F, L)
+#else
+ #define MYSQL_SET_STAGE(K, F, L) \
+ NULL
+#endif
+
+/**
+ @def mysql_set_stage
+ Set the current stage.
+ @param K the stage key
+ @return the current stage progress
+*/
+#ifdef HAVE_PSI_STAGE_INTERFACE
+ #define mysql_set_stage(K) \
+ inline_mysql_set_stage(K, __FILE__, __LINE__)
+#else
+ #define mysql_set_stage(K) \
+ NULL
+#endif
+
+/**
+ @def mysql_end_stage
+ End the last stage
+*/
+#ifdef HAVE_PSI_STAGE_INTERFACE
+ #define mysql_end_stage \
+ inline_mysql_end_stage
+#else
+ #define mysql_end_stage \
+ do {} while (0)
+#endif
+
+#ifdef HAVE_PSI_STAGE_INTERFACE
+static inline void inline_mysql_stage_register(
+ const char *category, PSI_stage_info **info, int count)
+{
+ PSI_STAGE_CALL(register_stage)(category, info, count);
+}
+#endif
+
+#ifdef HAVE_PSI_STAGE_INTERFACE
+static inline PSI_stage_progress*
+inline_mysql_set_stage(PSI_stage_key key,
+ const char *src_file, int src_line)
+{
+ return PSI_STAGE_CALL(start_stage)(key, src_file, src_line);
+}
+#endif
+
+#ifdef HAVE_PSI_STAGE_INTERFACE
+static inline void
+inline_mysql_end_stage()
+{
+ PSI_STAGE_CALL(end_stage)();
+}
+#endif
+
+#ifdef HAVE_PSI_STAGE_INTERFACE
+#define mysql_stage_set_work_completed(P1, P2) \
+ inline_mysql_stage_set_work_completed(P1, P2)
+
+#define mysql_stage_get_work_completed(P1) \
+ inline_mysql_stage_get_work_completed(P1)
+#else
+#define mysql_stage_set_work_completed(P1, P2) \
+ do {} while (0)
+
+#define mysql_stage_get_work_completed(P1) \
+ do {} while (0)
+#endif
+
+#ifdef HAVE_PSI_STAGE_INTERFACE
+#define mysql_stage_inc_work_completed(P1, P2) \
+ inline_mysql_stage_inc_work_completed(P1, P2)
+#else
+#define mysql_stage_inc_work_completed(P1, P2) \
+ do {} while (0)
+#endif
+
+#ifdef HAVE_PSI_STAGE_INTERFACE
+#define mysql_stage_set_work_estimated(P1, P2) \
+ inline_mysql_stage_set_work_estimated(P1, P2)
+
+#define mysql_stage_get_work_estimated(P1) \
+ inline_mysql_stage_get_work_estimated(P1)
+#else
+#define mysql_stage_set_work_estimated(P1, P2) \
+ do {} while (0)
+
+#define mysql_stage_get_work_estimated(P1) \
+ do {} while (0)
+#endif
+
+#ifdef HAVE_PSI_STAGE_INTERFACE
+static inline void
+inline_mysql_stage_set_work_completed(PSI_stage_progress *progress,
+ ulonglong val)
+{
+ if (progress != NULL)
+ progress->m_work_completed= val;
+}
+
+static inline ulonglong
+inline_mysql_stage_get_work_completed(PSI_stage_progress *progress)
+{
+ return progress->m_work_completed;
+}
+#endif
+
+#ifdef HAVE_PSI_STAGE_INTERFACE
+static inline void
+inline_mysql_stage_inc_work_completed(PSI_stage_progress *progress,
+ ulonglong val)
+{
+ if (progress != NULL)
+ progress->m_work_completed+= val;
+}
+#endif
+
+#ifdef HAVE_PSI_STAGE_INTERFACE
+static inline void
+inline_mysql_stage_set_work_estimated(PSI_stage_progress *progress,
+ ulonglong val)
+{
+ if (progress != NULL)
+ progress->m_work_estimated= val;
+}
+
+static inline ulonglong
+inline_mysql_stage_get_work_estimated(PSI_stage_progress *progress)
+{
+ return progress->m_work_estimated;
+}
+#endif
+
+/** @} (end of group Stage_instrumentation) */
+
+#endif
+
diff --git a/db/include/mysql/psi/mysql_statement.h b/db/include/mysql/psi/mysql_statement.h
new file mode 100644
index 0000000..bee9845
--- /dev/null
+++ b/db/include/mysql/psi/mysql_statement.h
@@ -0,0 +1,242 @@
+/* Copyright (c) 2010, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 MYSQL_STATEMENT_H
+#define MYSQL_STATEMENT_H
+
+/**
+ @file mysql/psi/mysql_statement.h
+ Instrumentation helpers for statements.
+*/
+
+#include "mysql/psi/psi.h"
+
+class Diagnostics_area;
+typedef struct charset_info_st CHARSET_INFO;
+
+#ifndef PSI_STATEMENT_CALL
+#define PSI_STATEMENT_CALL(M) PSI_DYNAMIC_CALL(M)
+#endif
+
+#ifndef PSI_DIGEST_CALL
+#define PSI_DIGEST_CALL(M) PSI_DYNAMIC_CALL(M)
+#endif
+
+/**
+ @defgroup Statement_instrumentation Statement Instrumentation
+ @ingroup Instrumentation_interface
+ @{
+*/
+
+/**
+ @def mysql_statement_register(P1, P2, P3)
+ Statement registration.
+*/
+#ifdef HAVE_PSI_STATEMENT_INTERFACE
+#define mysql_statement_register(P1, P2, P3) \
+ inline_mysql_statement_register(P1, P2, P3)
+#else
+#define mysql_statement_register(P1, P2, P3) \
+ do {} while (0)
+#endif
+
+#ifdef HAVE_PSI_STATEMENT_DIGEST_INTERFACE
+ #define MYSQL_DIGEST_START(LOCKER) \
+ inline_mysql_digest_start(LOCKER)
+#else
+ #define MYSQL_DIGEST_START(LOCKER) \
+ NULL
+#endif
+
+#ifdef HAVE_PSI_STATEMENT_DIGEST_INTERFACE
+ #define MYSQL_DIGEST_END(LOCKER, DIGEST) \
+ inline_mysql_digest_end(LOCKER, DIGEST)
+#else
+ #define MYSQL_DIGEST_END(LOCKER, DIGEST) \
+ do {} while (0)
+#endif
+
+#ifdef HAVE_PSI_STATEMENT_INTERFACE
+ #define MYSQL_START_STATEMENT(STATE, K, DB, DB_LEN, CS, SPS) \
+ inline_mysql_start_statement(STATE, K, DB, DB_LEN, CS, SPS, __FILE__, __LINE__)
+#else
+ #define MYSQL_START_STATEMENT(STATE, K, DB, DB_LEN, CS, SPS) \
+ NULL
+#endif
+
+#ifdef HAVE_PSI_STATEMENT_INTERFACE
+ #define MYSQL_REFINE_STATEMENT(LOCKER, K) \
+ inline_mysql_refine_statement(LOCKER, K)
+#else
+ #define MYSQL_REFINE_STATEMENT(LOCKER, K) \
+ NULL
+#endif
+
+#ifdef HAVE_PSI_STATEMENT_INTERFACE
+ #define MYSQL_SET_STATEMENT_TEXT(LOCKER, P1, P2) \
+ inline_mysql_set_statement_text(LOCKER, P1, P2)
+#else
+ #define MYSQL_SET_STATEMENT_TEXT(LOCKER, P1, P2) \
+ do {} while (0)
+#endif
+
+#ifdef HAVE_PSI_STATEMENT_INTERFACE
+ #define MYSQL_SET_STATEMENT_LOCK_TIME(LOCKER, P1) \
+ inline_mysql_set_statement_lock_time(LOCKER, P1)
+#else
+ #define MYSQL_SET_STATEMENT_LOCK_TIME(LOCKER, P1) \
+ do {} while (0)
+#endif
+
+#ifdef HAVE_PSI_STATEMENT_INTERFACE
+ #define MYSQL_SET_STATEMENT_ROWS_SENT(LOCKER, P1) \
+ inline_mysql_set_statement_rows_sent(LOCKER, P1)
+#else
+ #define MYSQL_SET_STATEMENT_ROWS_SENT(LOCKER, P1) \
+ do {} while (0)
+#endif
+
+#ifdef HAVE_PSI_STATEMENT_INTERFACE
+ #define MYSQL_SET_STATEMENT_ROWS_EXAMINED(LOCKER, P1) \
+ inline_mysql_set_statement_rows_examined(LOCKER, P1)
+#else
+ #define MYSQL_SET_STATEMENT_ROWS_EXAMINED(LOCKER, P1) \
+ do {} while (0)
+#endif
+
+#ifdef HAVE_PSI_STATEMENT_INTERFACE
+ #define MYSQL_END_STATEMENT(LOCKER, DA) \
+ inline_mysql_end_statement(LOCKER, DA)
+#else
+ #define MYSQL_END_STATEMENT(LOCKER, DA) \
+ do {} while (0)
+#endif
+
+#ifdef HAVE_PSI_STATEMENT_INTERFACE
+static inline void inline_mysql_statement_register(
+ const char *category, PSI_statement_info *info, int count)
+{
+ PSI_STATEMENT_CALL(register_statement)(category, info, count);
+}
+
+#ifdef HAVE_PSI_STATEMENT_DIGEST_INTERFACE
+static inline struct PSI_digest_locker *
+inline_mysql_digest_start(PSI_statement_locker *locker)
+{
+ PSI_digest_locker* digest_locker= NULL;
+
+ if (likely(locker != NULL))
+ digest_locker= PSI_DIGEST_CALL(digest_start)(locker);
+ return digest_locker;
+}
+#endif
+
+#ifdef HAVE_PSI_STATEMENT_DIGEST_INTERFACE
+static inline void
+inline_mysql_digest_end(PSI_digest_locker *locker, const sql_digest_storage *digest)
+{
+ if (likely(locker != NULL))
+ PSI_DIGEST_CALL(digest_end)(locker, digest);
+}
+#endif
+
+static inline struct PSI_statement_locker *
+inline_mysql_start_statement(PSI_statement_locker_state *state,
+ PSI_statement_key key,
+ const char *db, uint db_len,
+ const CHARSET_INFO *charset,
+ PSI_sp_share *sp_share,
+ const char *src_file, int src_line)
+{
+ PSI_statement_locker *locker;
+ locker= PSI_STATEMENT_CALL(get_thread_statement_locker)(state, key, charset,
+ sp_share);
+ if (likely(locker != NULL))
+ PSI_STATEMENT_CALL(start_statement)(locker, db, db_len, src_file, src_line);
+ return locker;
+}
+
+static inline struct PSI_statement_locker *
+inline_mysql_refine_statement(PSI_statement_locker *locker,
+ PSI_statement_key key)
+{
+ if (likely(locker != NULL))
+ {
+ locker= PSI_STATEMENT_CALL(refine_statement)(locker, key);
+ }
+ return locker;
+}
+
+static inline void
+inline_mysql_set_statement_text(PSI_statement_locker *locker,
+ const char *text, uint text_len)
+{
+ if (likely(locker != NULL))
+ {
+ PSI_STATEMENT_CALL(set_statement_text)(locker, text, text_len);
+ }
+}
+
+static inline void
+inline_mysql_set_statement_lock_time(PSI_statement_locker *locker,
+ ulonglong count)
+{
+ if (likely(locker != NULL))
+ {
+ PSI_STATEMENT_CALL(set_statement_lock_time)(locker, count);
+ }
+}
+
+static inline void
+inline_mysql_set_statement_rows_sent(PSI_statement_locker *locker,
+ ulonglong count)
+{
+ if (likely(locker != NULL))
+ {
+ PSI_STATEMENT_CALL(set_statement_rows_sent)(locker, count);
+ }
+}
+
+static inline void
+inline_mysql_set_statement_rows_examined(PSI_statement_locker *locker,
+ ulonglong count)
+{
+ if (likely(locker != NULL))
+ {
+ PSI_STATEMENT_CALL(set_statement_rows_examined)(locker, count);
+ }
+}
+
+static inline void
+inline_mysql_end_statement(struct PSI_statement_locker *locker,
+ Diagnostics_area *stmt_da)
+{
+ PSI_STAGE_CALL(end_stage)();
+ if (likely(locker != NULL))
+ PSI_STATEMENT_CALL(end_statement)(locker, stmt_da);
+}
+#endif
+
+/** @} (end of group Statement_instrumentation) */
+
+#endif
+
diff --git a/db/include/mysql/psi/mysql_table.h b/db/include/mysql/psi/mysql_table.h
new file mode 100644
index 0000000..a0755aa
--- /dev/null
+++ b/db/include/mysql/psi/mysql_table.h
@@ -0,0 +1,149 @@
+/* Copyright (c) 2010, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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,
+ 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */
+
+#ifndef MYSQL_TABLE_H
+#define MYSQL_TABLE_H
+
+/**
+ @file mysql/psi/mysql_table.h
+ Instrumentation helpers for table io.
+*/
+
+#include "mysql/psi/psi.h"
+
+#ifndef PSI_TABLE_CALL
+#define PSI_TABLE_CALL(M) PSI_DYNAMIC_CALL(M)
+#endif
+
+/**
+ @defgroup Table_instrumentation Table Instrumentation
+ @ingroup Instrumentation_interface
+ @{
+*/
+
+/**
+ @def MYSQL_TABLE_WAIT_VARIABLES
+ Instrumentation helper for table waits.
+ This instrumentation declares local variables.
+ Do not use a ';' after this macro
+ @param LOCKER the locker
+ @param STATE the locker state
+ @sa MYSQL_START_TABLE_IO_WAIT.
+ @sa MYSQL_END_TABLE_IO_WAIT.
+ @sa MYSQL_START_TABLE_LOCK_WAIT.
+ @sa MYSQL_END_TABLE_LOCK_WAIT.
+*/
+#ifdef HAVE_PSI_TABLE_INTERFACE
+ #define MYSQL_TABLE_WAIT_VARIABLES(LOCKER, STATE) \
+ struct PSI_table_locker* LOCKER; \
+ PSI_table_locker_state STATE;
+#else
+ #define MYSQL_TABLE_WAIT_VARIABLES(LOCKER, STATE)
+#endif
+
+/**
+ @def MYSQL_START_TABLE_LOCK_WAIT
+ Instrumentation helper for table lock waits.
+ This instrumentation marks the start of a wait event.
+ @param LOCKER the locker
+ @param STATE the locker state
+ @param PSI the instrumented table
+ @param OP the table operation to be performed
+ @param FLAGS per table operation flags.
+ @sa MYSQL_END_TABLE_LOCK_WAIT.
+*/
+#ifdef HAVE_PSI_TABLE_INTERFACE
+ #define MYSQL_START_TABLE_LOCK_WAIT(LOCKER, STATE, PSI, OP, FLAGS) \
+ LOCKER= inline_mysql_start_table_lock_wait(STATE, PSI, \
+ OP, FLAGS, __FILE__, __LINE__)
+#else
+ #define MYSQL_START_TABLE_LOCK_WAIT(LOCKER, STATE, PSI, OP, FLAGS) \
+ do {} while (0)
+#endif
+
+/**
+ @def MYSQL_END_TABLE_LOCK_WAIT
+ Instrumentation helper for table lock waits.
+ This instrumentation marks the end of a wait event.
+ @param LOCKER the locker
+ @sa MYSQL_START_TABLE_LOCK_WAIT.
+*/
+#ifdef HAVE_PSI_TABLE_INTERFACE
+ #define MYSQL_END_TABLE_LOCK_WAIT(LOCKER) \
+ inline_mysql_end_table_lock_wait(LOCKER)
+#else
+ #define MYSQL_END_TABLE_LOCK_WAIT(LOCKER) \
+ do {} while (0)
+#endif
+
+#ifdef HAVE_PSI_TABLE_INTERFACE
+ #define MYSQL_UNLOCK_TABLE(T) \
+ inline_mysql_unlock_table(T)
+#else
+ #define MYSQL_UNLOCK_TABLE(T) \
+ do {} while (0)
+#endif
+
+#ifdef HAVE_PSI_TABLE_INTERFACE
+/**
+ Instrumentation calls for MYSQL_START_TABLE_LOCK_WAIT.
+ @sa MYSQL_END_TABLE_LOCK_WAIT.
+*/
+static inline struct PSI_table_locker *
+inline_mysql_start_table_lock_wait(PSI_table_locker_state *state,
+ struct PSI_table *psi,
+ enum PSI_table_lock_operation op,
+ ulong flags, const char *src_file, int src_line)
+{
+ if (psi != NULL)
+ {
+ struct PSI_table_locker *locker;
+ locker= PSI_TABLE_CALL(start_table_lock_wait)
+ (state, psi, op, flags, src_file, src_line);
+ return locker;
+ }
+ return NULL;
+}
+
+/**
+ Instrumentation calls for MYSQL_END_TABLE_LOCK_WAIT.
+ @sa MYSQL_START_TABLE_LOCK_WAIT.
+*/
+static inline void
+inline_mysql_end_table_lock_wait(struct PSI_table_locker *locker)
+{
+ if (locker != NULL)
+ PSI_TABLE_CALL(end_table_lock_wait)(locker);
+}
+
+static inline void
+inline_mysql_unlock_table(struct PSI_table *table)
+{
+ if (table != NULL)
+ PSI_TABLE_CALL(unlock_table)(table);
+}
+#endif
+
+/** @} (end of group Table_instrumentation) */
+
+#endif
+
diff --git a/db/include/mysql/psi/mysql_thread.h b/db/include/mysql/psi/mysql_thread.h
new file mode 100644
index 0000000..c25e90f
--- /dev/null
+++ b/db/include/mysql/psi/mysql_thread.h
@@ -0,0 +1,1337 @@
+/* Copyright (c) 2008, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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,
+ 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */
+
+#ifndef MYSQL_THREAD_H
+#define MYSQL_THREAD_H
+
+/**
+ @file mysql/psi/mysql_thread.h
+ Instrumentation helpers for mysys threads, mutexes,
+ read write locks and conditions.
+ This header file provides the necessary declarations
+ to use the mysys thread API with the performance schema instrumentation.
+ In some compilers (SunStudio), 'static inline' functions, when declared
+ but not used, are not optimized away (because they are unused) by default,
+ so that including a static inline function from a header file does
+ create unwanted dependencies, causing unresolved symbols at link time.
+ Other compilers, like gcc, optimize these dependencies by default.
+
+ Since the instrumented APIs declared here are wrapper on top
+ of my_thread / safemutex / etc APIs,
+ including mysql/psi/mysql_thread.h assumes that
+ the dependency on my_thread and safemutex already exists.
+*/
+/*
+ Note: there are several orthogonal dimensions here.
+
+ Dimension 1: Instrumentation
+ HAVE_PSI_INTERFACE is defined when the instrumentation is compiled in.
+ This may happen both in debug or production builds.
+
+ Dimension 2: Debug
+ SAFE_MUTEX is defined when debug is compiled in.
+ This may happen both with and without instrumentation.
+
+ Dimension 3: Platform
+ Mutexes are implemented with one of:
+ - the pthread library
+ - fast mutexes
+ - window apis
+ This is implemented by various macro definitions in my_thread.h
+
+ This causes complexity with '#ifdef'-ery that can't be avoided.
+*/
+
+#include "my_thread.h"
+#include "my_thread_local.h"
+#include "thr_mutex.h"
+#include "thr_rwlock.h"
+#include "mysql/psi/psi.h"
+#ifdef MYSQL_SERVER
+#ifndef MYSQL_DYNAMIC_PLUGIN
+#include "pfs_thread_provider.h"
+#endif
+#endif
+
+#ifndef PSI_MUTEX_CALL
+#define PSI_MUTEX_CALL(M) PSI_DYNAMIC_CALL(M)
+#endif
+
+#ifndef PSI_RWLOCK_CALL
+#define PSI_RWLOCK_CALL(M) PSI_DYNAMIC_CALL(M)
+#endif
+
+#ifndef PSI_COND_CALL
+#define PSI_COND_CALL(M) PSI_DYNAMIC_CALL(M)
+#endif
+
+#ifndef PSI_THREAD_CALL
+#define PSI_THREAD_CALL(M) PSI_DYNAMIC_CALL(M)
+#endif
+
+/**
+ @defgroup Thread_instrumentation Thread Instrumentation
+ @ingroup Instrumentation_interface
+ @{
+*/
+
+/**
+ An instrumented mutex structure.
+ @sa mysql_mutex_t
+*/
+struct st_mysql_mutex
+{
+ /** The real mutex. */
+ my_mutex_t m_mutex;
+ /**
+ The instrumentation hook.
+ Note that this hook is not conditionally defined,
+ for binary compatibility of the @c mysql_mutex_t interface.
+ */
+ struct PSI_mutex *m_psi;
+};
+
+/**
+ Type of an instrumented mutex.
+ @c mysql_mutex_t is a drop-in replacement for @c my_mutex_t.
+ @sa mysql_mutex_assert_owner
+ @sa mysql_mutex_assert_not_owner
+ @sa mysql_mutex_init
+ @sa mysql_mutex_lock
+ @sa mysql_mutex_unlock
+ @sa mysql_mutex_destroy
+*/
+typedef struct st_mysql_mutex mysql_mutex_t;
+
+/**
+ An instrumented rwlock structure.
+ @sa mysql_rwlock_t
+*/
+struct st_mysql_rwlock
+{
+ /** The real rwlock */
+ native_rw_lock_t m_rwlock;
+ /**
+ The instrumentation hook.
+ Note that this hook is not conditionally defined,
+ for binary compatibility of the @c mysql_rwlock_t interface.
+ */
+ struct PSI_rwlock *m_psi;
+};
+
+/**
+ An instrumented prlock structure.
+ @sa mysql_prlock_t
+*/
+struct st_mysql_prlock
+{
+ /** The real prlock */
+ rw_pr_lock_t m_prlock;
+ /**
+ The instrumentation hook.
+ Note that this hook is not conditionally defined,
+ for binary compatibility of the @c mysql_rwlock_t interface.
+ */
+ struct PSI_rwlock *m_psi;
+};
+
+/**
+ Type of an instrumented rwlock.
+ @c mysql_rwlock_t is a drop-in replacement for @c pthread_rwlock_t.
+ @sa mysql_rwlock_init
+ @sa mysql_rwlock_rdlock
+ @sa mysql_rwlock_tryrdlock
+ @sa mysql_rwlock_wrlock
+ @sa mysql_rwlock_trywrlock
+ @sa mysql_rwlock_unlock
+ @sa mysql_rwlock_destroy
+*/
+typedef struct st_mysql_rwlock mysql_rwlock_t;
+
+/**
+ Type of an instrumented prlock.
+ A prlock is a read write lock that 'prefers readers' (pr).
+ @c mysql_prlock_t is a drop-in replacement for @c rw_pr_lock_t.
+ @sa mysql_prlock_init
+ @sa mysql_prlock_rdlock
+ @sa mysql_prlock_wrlock
+ @sa mysql_prlock_unlock
+ @sa mysql_prlock_destroy
+*/
+typedef struct st_mysql_prlock mysql_prlock_t;
+
+/**
+ An instrumented cond structure.
+ @sa mysql_cond_t
+*/
+struct st_mysql_cond
+{
+ /** The real condition */
+ native_cond_t m_cond;
+ /**
+ The instrumentation hook.
+ Note that this hook is not conditionally defined,
+ for binary compatibility of the @c mysql_cond_t interface.
+ */
+ struct PSI_cond *m_psi;
+};
+
+/**
+ Type of an instrumented condition.
+ @c mysql_cond_t is a drop-in replacement for @c native_cond_t.
+ @sa mysql_cond_init
+ @sa mysql_cond_wait
+ @sa mysql_cond_timedwait
+ @sa mysql_cond_signal
+ @sa mysql_cond_broadcast
+ @sa mysql_cond_destroy
+*/
+typedef struct st_mysql_cond mysql_cond_t;
+
+/*
+ Consider the following code:
+ static inline void foo() { bar(); }
+ when foo() is never called.
+
+ With gcc, foo() is a local static function, so the dependencies
+ are optimized away at compile time, and there is no dependency on bar().
+ With other compilers (HP, Sun Studio), the function foo() implementation
+ is compiled, and bar() needs to be present to link.
+
+ Due to the existing header dependencies in MySQL code, this header file
+ is sometime used when it is not needed, which in turn cause link failures
+ on some platforms.
+ The proper fix would be to cut these extra dependencies in the calling code.
+ DISABLE_MYSQL_THREAD_H is a work around to limit dependencies.
+ DISABLE_MYSQL_PRLOCK_H is similar, and is used to disable specifically
+ the prlock wrappers.
+*/
+#ifndef DISABLE_MYSQL_THREAD_H
+
+/**
+ @def mysql_mutex_assert_owner(M)
+ Wrapper, to use safe_mutex_assert_owner with instrumented mutexes.
+ @c mysql_mutex_assert_owner is a drop-in replacement
+ for @c safe_mutex_assert_owner.
+*/
+#ifdef SAFE_MUTEX
+#define mysql_mutex_assert_owner(M) \
+ safe_mutex_assert_owner(&(M)->m_mutex);
+#else
+#define mysql_mutex_assert_owner(M) { }
+#endif
+
+/**
+ @def mysql_mutex_assert_not_owner(M)
+ Wrapper, to use safe_mutex_assert_not_owner with instrumented mutexes.
+ @c mysql_mutex_assert_not_owner is a drop-in replacement
+ for @c safe_mutex_assert_not_owner.
+*/
+#ifdef SAFE_MUTEX
+#define mysql_mutex_assert_not_owner(M) \
+ safe_mutex_assert_not_owner(&(M)->m_mutex);
+#else
+#define mysql_mutex_assert_not_owner(M) { }
+#endif
+
+/**
+ @def mysql_prlock_assert_write_owner(M)
+ Drop-in replacement
+ for @c rw_pr_lock_assert_write_owner.
+*/
+#define mysql_prlock_assert_write_owner(M) \
+ rw_pr_lock_assert_write_owner(&(M)->m_prlock)
+
+/**
+ @def mysql_prlock_assert_not_write_owner(M)
+ Drop-in replacement
+ for @c rw_pr_lock_assert_not_write_owner.
+*/
+#define mysql_prlock_assert_not_write_owner(M) \
+ rw_pr_lock_assert_not_write_owner(&(M)->m_prlock)
+
+/**
+ @def mysql_mutex_register(P1, P2, P3)
+ Mutex registration.
+*/
+#define mysql_mutex_register(P1, P2, P3) \
+ inline_mysql_mutex_register(P1, P2, P3)
+
+/**
+ @def mysql_mutex_init(K, M, A)
+ Instrumented mutex_init.
+ @c mysql_mutex_init is a replacement for @c pthread_mutex_init.
+ @param K The PSI_mutex_key for this instrumented mutex
+ @param M The mutex to initialize
+ @param A Mutex attributes
+*/
+
+#ifdef HAVE_PSI_MUTEX_INTERFACE
+ #ifdef SAFE_MUTEX
+ #define mysql_mutex_init(K, M, A) \
+ inline_mysql_mutex_init(K, M, A, __FILE__, __LINE__)
+ #else
+ #define mysql_mutex_init(K, M, A) \
+ inline_mysql_mutex_init(K, M, A)
+ #endif
+#else
+ #ifdef SAFE_MUTEX
+ #define mysql_mutex_init(K, M, A) \
+ inline_mysql_mutex_init(M, A, __FILE__, __LINE__)
+ #else
+ #define mysql_mutex_init(K, M, A) \
+ inline_mysql_mutex_init(M, A)
+ #endif
+#endif
+
+/**
+ @def mysql_mutex_destroy(M)
+ Instrumented mutex_destroy.
+ @c mysql_mutex_destroy is a drop-in replacement
+ for @c pthread_mutex_destroy.
+*/
+#ifdef SAFE_MUTEX
+ #define mysql_mutex_destroy(M) \
+ inline_mysql_mutex_destroy(M, __FILE__, __LINE__)
+#else
+ #define mysql_mutex_destroy(M) \
+ inline_mysql_mutex_destroy(M)
+#endif
+
+/**
+ @def mysql_mutex_lock(M)
+ Instrumented mutex_lock.
+ @c mysql_mutex_lock is a drop-in replacement for @c pthread_mutex_lock.
+ @param M The mutex to lock
+*/
+
+#if defined(SAFE_MUTEX) || defined (HAVE_PSI_MUTEX_INTERFACE)
+ #define mysql_mutex_lock(M) \
+ inline_mysql_mutex_lock(M, __FILE__, __LINE__)
+#else
+ #define mysql_mutex_lock(M) \
+ inline_mysql_mutex_lock(M)
+#endif
+
+/**
+ @def mysql_mutex_trylock(M)
+ Instrumented mutex_lock.
+ @c mysql_mutex_trylock is a drop-in replacement
+ for @c my_mutex_trylock.
+*/
+
+#if defined(SAFE_MUTEX) || defined (HAVE_PSI_MUTEX_INTERFACE)
+ #define mysql_mutex_trylock(M) \
+ inline_mysql_mutex_trylock(M, __FILE__, __LINE__)
+#else
+ #define mysql_mutex_trylock(M) \
+ inline_mysql_mutex_trylock(M)
+#endif
+
+/**
+ @def mysql_mutex_unlock(M)
+ Instrumented mutex_unlock.
+ @c mysql_mutex_unlock is a drop-in replacement for @c pthread_mutex_unlock.
+*/
+#ifdef SAFE_MUTEX
+ #define mysql_mutex_unlock(M) \
+ inline_mysql_mutex_unlock(M, __FILE__, __LINE__)
+#else
+ #define mysql_mutex_unlock(M) \
+ inline_mysql_mutex_unlock(M)
+#endif
+
+/**
+ @def mysql_rwlock_register(P1, P2, P3)
+ Rwlock registration.
+*/
+#define mysql_rwlock_register(P1, P2, P3) \
+ inline_mysql_rwlock_register(P1, P2, P3)
+
+/**
+ @def mysql_rwlock_init(K, RW)
+ Instrumented rwlock_init.
+ @c mysql_rwlock_init is a replacement for @c pthread_rwlock_init.
+ Note that pthread_rwlockattr_t is not supported in MySQL.
+ @param K The PSI_rwlock_key for this instrumented rwlock
+ @param RW The rwlock to initialize
+*/
+#ifdef HAVE_PSI_RWLOCK_INTERFACE
+ #define mysql_rwlock_init(K, RW) inline_mysql_rwlock_init(K, RW)
+#else
+ #define mysql_rwlock_init(K, RW) inline_mysql_rwlock_init(RW)
+#endif
+
+/**
+ @def mysql_prlock_init(K, RW)
+ Instrumented rw_pr_init.
+ @c mysql_prlock_init is a replacement for @c rw_pr_init.
+ @param K The PSI_rwlock_key for this instrumented prlock
+ @param RW The prlock to initialize
+*/
+#ifdef HAVE_PSI_RWLOCK_INTERFACE
+ #define mysql_prlock_init(K, RW) inline_mysql_prlock_init(K, RW)
+#else
+ #define mysql_prlock_init(K, RW) inline_mysql_prlock_init(RW)
+#endif
+
+/**
+ @def mysql_rwlock_destroy(RW)
+ Instrumented rwlock_destroy.
+ @c mysql_rwlock_destroy is a drop-in replacement
+ for @c pthread_rwlock_destroy.
+*/
+#define mysql_rwlock_destroy(RW) inline_mysql_rwlock_destroy(RW)
+
+/**
+ @def mysql_prlock_destroy(RW)
+ Instrumented rw_pr_destroy.
+ @c mysql_prlock_destroy is a drop-in replacement
+ for @c rw_pr_destroy.
+*/
+#define mysql_prlock_destroy(RW) inline_mysql_prlock_destroy(RW)
+
+/**
+ @def mysql_rwlock_rdlock(RW)
+ Instrumented rwlock_rdlock.
+ @c mysql_rwlock_rdlock is a drop-in replacement
+ for @c pthread_rwlock_rdlock.
+*/
+#ifdef HAVE_PSI_RWLOCK_INTERFACE
+ #define mysql_rwlock_rdlock(RW) \
+ inline_mysql_rwlock_rdlock(RW, __FILE__, __LINE__)
+#else
+ #define mysql_rwlock_rdlock(RW) \
+ inline_mysql_rwlock_rdlock(RW)
+#endif
+
+/**
+ @def mysql_prlock_rdlock(RW)
+ Instrumented rw_pr_rdlock.
+ @c mysql_prlock_rdlock is a drop-in replacement
+ for @c rw_pr_rdlock.
+*/
+#ifdef HAVE_PSI_RWLOCK_INTERFACE
+ #define mysql_prlock_rdlock(RW) \
+ inline_mysql_prlock_rdlock(RW, __FILE__, __LINE__)
+#else
+ #define mysql_prlock_rdlock(RW) \
+ inline_mysql_prlock_rdlock(RW)
+#endif
+
+/**
+ @def mysql_rwlock_wrlock(RW)
+ Instrumented rwlock_wrlock.
+ @c mysql_rwlock_wrlock is a drop-in replacement
+ for @c pthread_rwlock_wrlock.
+*/
+#ifdef HAVE_PSI_RWLOCK_INTERFACE
+ #define mysql_rwlock_wrlock(RW) \
+ inline_mysql_rwlock_wrlock(RW, __FILE__, __LINE__)
+#else
+ #define mysql_rwlock_wrlock(RW) \
+ inline_mysql_rwlock_wrlock(RW)
+#endif
+
+/**
+ @def mysql_prlock_wrlock(RW)
+ Instrumented rw_pr_wrlock.
+ @c mysql_prlock_wrlock is a drop-in replacement
+ for @c rw_pr_wrlock.
+*/
+#ifdef HAVE_PSI_RWLOCK_INTERFACE
+ #define mysql_prlock_wrlock(RW) \
+ inline_mysql_prlock_wrlock(RW, __FILE__, __LINE__)
+#else
+ #define mysql_prlock_wrlock(RW) \
+ inline_mysql_prlock_wrlock(RW)
+#endif
+
+/**
+ @def mysql_rwlock_tryrdlock(RW)
+ Instrumented rwlock_tryrdlock.
+ @c mysql_rwlock_tryrdlock is a drop-in replacement
+ for @c pthread_rwlock_tryrdlock.
+*/
+#ifdef HAVE_PSI_RWLOCK_INTERFACE
+ #define mysql_rwlock_tryrdlock(RW) \
+ inline_mysql_rwlock_tryrdlock(RW, __FILE__, __LINE__)
+#else
+ #define mysql_rwlock_tryrdlock(RW) \
+ inline_mysql_rwlock_tryrdlock(RW)
+#endif
+
+/**
+ @def mysql_rwlock_trywrlock(RW)
+ Instrumented rwlock_trywrlock.
+ @c mysql_rwlock_trywrlock is a drop-in replacement
+ for @c pthread_rwlock_trywrlock.
+*/
+#ifdef HAVE_PSI_RWLOCK_INTERFACE
+ #define mysql_rwlock_trywrlock(RW) \
+ inline_mysql_rwlock_trywrlock(RW, __FILE__, __LINE__)
+#else
+ #define mysql_rwlock_trywrlock(RW) \
+ inline_mysql_rwlock_trywrlock(RW)
+#endif
+
+/**
+ @def mysql_rwlock_unlock(RW)
+ Instrumented rwlock_unlock.
+ @c mysql_rwlock_unlock is a drop-in replacement
+ for @c pthread_rwlock_unlock.
+*/
+#define mysql_rwlock_unlock(RW) inline_mysql_rwlock_unlock(RW)
+
+/**
+ @def mysql_prlock_unlock(RW)
+ Instrumented rw_pr_unlock.
+ @c mysql_prlock_unlock is a drop-in replacement
+ for @c rw_pr_unlock.
+*/
+#define mysql_prlock_unlock(RW) inline_mysql_prlock_unlock(RW)
+
+/**
+ @def mysql_cond_register(P1, P2, P3)
+ Cond registration.
+*/
+#define mysql_cond_register(P1, P2, P3) \
+ inline_mysql_cond_register(P1, P2, P3)
+
+/**
+ @def mysql_cond_init(K, C)
+ Instrumented cond_init.
+ @c mysql_cond_init is a replacement for @c pthread_cond_init.
+ Note that pthread_condattr_t is not supported in MySQL.
+ @param C The cond to initialize
+ @param K The PSI_cond_key for this instrumented cond
+
+*/
+#ifdef HAVE_PSI_COND_INTERFACE
+ #define mysql_cond_init(K, C) inline_mysql_cond_init(K, C)
+#else
+ #define mysql_cond_init(K, C) inline_mysql_cond_init(C)
+#endif
+
+/**
+ @def mysql_cond_destroy(C)
+ Instrumented cond_destroy.
+ @c mysql_cond_destroy is a drop-in replacement for @c pthread_cond_destroy.
+*/
+#define mysql_cond_destroy(C) inline_mysql_cond_destroy(C)
+
+/**
+ @def mysql_cond_wait(C)
+ Instrumented cond_wait.
+ @c mysql_cond_wait is a drop-in replacement for @c native_cond_wait.
+*/
+#if defined(SAFE_MUTEX) || defined(HAVE_PSI_COND_INTERFACE)
+ #define mysql_cond_wait(C, M) \
+ inline_mysql_cond_wait(C, M, __FILE__, __LINE__)
+#else
+ #define mysql_cond_wait(C, M) \
+ inline_mysql_cond_wait(C, M)
+#endif
+
+/**
+ @def mysql_cond_timedwait(C, M, W)
+ Instrumented cond_timedwait.
+ @c mysql_cond_timedwait is a drop-in replacement
+ for @c native_cond_timedwait.
+*/
+#if defined(SAFE_MUTEX) || defined(HAVE_PSI_COND_INTERFACE)
+ #define mysql_cond_timedwait(C, M, W) \
+ inline_mysql_cond_timedwait(C, M, W, __FILE__, __LINE__)
+#else
+ #define mysql_cond_timedwait(C, M, W) \
+ inline_mysql_cond_timedwait(C, M, W)
+#endif
+
+/**
+ @def mysql_cond_signal(C)
+ Instrumented cond_signal.
+ @c mysql_cond_signal is a drop-in replacement for @c pthread_cond_signal.
+*/
+#define mysql_cond_signal(C) inline_mysql_cond_signal(C)
+
+/**
+ @def mysql_cond_broadcast(C)
+ Instrumented cond_broadcast.
+ @c mysql_cond_broadcast is a drop-in replacement
+ for @c pthread_cond_broadcast.
+*/
+#define mysql_cond_broadcast(C) inline_mysql_cond_broadcast(C)
+
+/**
+ @def mysql_thread_register(P1, P2, P3)
+ Thread registration.
+*/
+#define mysql_thread_register(P1, P2, P3) \
+ inline_mysql_thread_register(P1, P2, P3)
+
+/**
+ @def mysql_thread_create(K, P1, P2, P3, P4)
+ Instrumented my_thread_create.
+ This function creates both the thread instrumentation and a thread.
+ @c mysql_thread_create is a replacement for @c my_thread_create.
+ The parameter P4 (or, if it is NULL, P1) will be used as the
+ instrumented thread "indentity".
+ Providing a P1 / P4 parameter with a different value for each call
+ will on average improve performances, since this thread identity value
+ is used internally to randomize access to data and prevent contention.
+ This is optional, and the improvement is not guaranteed, only statistical.
+ @param K The PSI_thread_key for this instrumented thread
+ @param P1 my_thread_create parameter 1
+ @param P2 my_thread_create parameter 2
+ @param P3 my_thread_create parameter 3
+ @param P4 my_thread_create parameter 4
+*/
+#ifdef HAVE_PSI_THREAD_INTERFACE
+ #define mysql_thread_create(K, P1, P2, P3, P4) \
+ inline_mysql_thread_create(K, P1, P2, P3, P4)
+#else
+ #define mysql_thread_create(K, P1, P2, P3, P4) \
+ my_thread_create(P1, P2, P3, P4)
+#endif
+
+/**
+ @def mysql_thread_set_psi_id(I)
+ Set the thread identifier for the instrumentation.
+ @param I The thread identifier
+*/
+#ifdef HAVE_PSI_THREAD_INTERFACE
+ #define mysql_thread_set_psi_id(I) inline_mysql_thread_set_psi_id(I)
+#else
+ #define mysql_thread_set_psi_id(I) do {} while (0)
+#endif
+
+/**
+ @def mysql_thread_set_psi_THD(T)
+ Set the thread sql session for the instrumentation.
+ @param I The thread identifier
+*/
+#ifdef HAVE_PSI_THREAD_INTERFACE
+ #define mysql_thread_set_psi_THD(T) inline_mysql_thread_set_psi_THD(T)
+#else
+ #define mysql_thread_set_psi_THD(T) do {} while (0)
+#endif
+
+static inline void inline_mysql_mutex_register(
+#ifdef HAVE_PSI_MUTEX_INTERFACE
+ const char *category,
+ PSI_mutex_info *info,
+ int count
+#else
+ const char *category MY_ATTRIBUTE ((unused)),
+ void *info MY_ATTRIBUTE ((unused)),
+ int count MY_ATTRIBUTE ((unused))
+#endif
+)
+{
+#ifdef HAVE_PSI_MUTEX_INTERFACE
+ PSI_MUTEX_CALL(register_mutex)(category, info, count);
+#endif
+}
+
+static inline int inline_mysql_mutex_init(
+#ifdef HAVE_PSI_MUTEX_INTERFACE
+ PSI_mutex_key key,
+#endif
+ mysql_mutex_t *that,
+ const native_mutexattr_t *attr
+#ifdef SAFE_MUTEX
+ , const char *src_file, uint src_line
+#endif
+ )
+{
+#ifdef HAVE_PSI_MUTEX_INTERFACE
+ that->m_psi= PSI_MUTEX_CALL(init_mutex)(key, &that->m_mutex);
+#else
+ that->m_psi= NULL;
+#endif
+ return my_mutex_init(&that->m_mutex, attr
+#ifdef SAFE_MUTEX
+ , src_file, src_line
+#endif
+ );
+}
+
+static inline int inline_mysql_mutex_destroy(
+ mysql_mutex_t *that
+#ifdef SAFE_MUTEX
+ , const char *src_file, uint src_line
+#endif
+ )
+{
+#ifdef HAVE_PSI_MUTEX_INTERFACE
+ if (that->m_psi != NULL)
+ {
+ PSI_MUTEX_CALL(destroy_mutex)(that->m_psi);
+ that->m_psi= NULL;
+ }
+#endif
+ return my_mutex_destroy(&that->m_mutex
+#ifdef SAFE_MUTEX
+ , src_file, src_line
+#endif
+ );
+}
+
+static inline int inline_mysql_mutex_lock(
+ mysql_mutex_t *that
+#if defined(SAFE_MUTEX) || defined (HAVE_PSI_MUTEX_INTERFACE)
+ , const char *src_file, uint src_line
+#endif
+ )
+{
+ int result;
+
+#ifdef HAVE_PSI_MUTEX_INTERFACE
+ if (that->m_psi != NULL)
+ {
+ /* Instrumentation start */
+ PSI_mutex_locker *locker;
+ PSI_mutex_locker_state state;
+ locker= PSI_MUTEX_CALL(start_mutex_wait)(&state, that->m_psi,
+ PSI_MUTEX_LOCK, src_file, src_line);
+
+ /* Instrumented code */
+ result= my_mutex_lock(&that->m_mutex
+#ifdef SAFE_MUTEX
+ , src_file, src_line
+#endif
+ );
+
+ /* Instrumentation end */
+ if (locker != NULL)
+ PSI_MUTEX_CALL(end_mutex_wait)(locker, result);
+
+ return result;
+ }
+#endif
+
+ /* Non instrumented code */
+ result= my_mutex_lock(&that->m_mutex
+#ifdef SAFE_MUTEX
+ , src_file, src_line
+#endif
+ );
+
+ return result;
+}
+
+static inline int inline_mysql_mutex_trylock(
+ mysql_mutex_t *that
+#if defined(SAFE_MUTEX) || defined (HAVE_PSI_MUTEX_INTERFACE)
+ , const char *src_file, uint src_line
+#endif
+ )
+{
+ int result;
+
+#ifdef HAVE_PSI_MUTEX_INTERFACE
+ if (that->m_psi != NULL)
+ {
+ /* Instrumentation start */
+ PSI_mutex_locker *locker;
+ PSI_mutex_locker_state state;
+ locker= PSI_MUTEX_CALL(start_mutex_wait)(&state, that->m_psi,
+ PSI_MUTEX_TRYLOCK, src_file, src_line);
+
+ /* Instrumented code */
+ result= my_mutex_trylock(&that->m_mutex
+#ifdef SAFE_MUTEX
+ , src_file, src_line
+#endif
+ );
+
+ /* Instrumentation end */
+ if (locker != NULL)
+ PSI_MUTEX_CALL(end_mutex_wait)(locker, result);
+
+ return result;
+ }
+#endif
+
+ /* Non instrumented code */
+ result= my_mutex_trylock(&that->m_mutex
+#ifdef SAFE_MUTEX
+ , src_file, src_line
+#endif
+ );
+
+ return result;
+}
+
+static inline int inline_mysql_mutex_unlock(
+ mysql_mutex_t *that
+#ifdef SAFE_MUTEX
+ , const char *src_file, uint src_line
+#endif
+ )
+{
+ int result;
+
+#ifdef HAVE_PSI_MUTEX_INTERFACE
+ if (that->m_psi != NULL)
+ PSI_MUTEX_CALL(unlock_mutex)(that->m_psi);
+#endif
+
+ result= my_mutex_unlock(&that->m_mutex
+#ifdef SAFE_MUTEX
+ , src_file, src_line
+#endif
+ );
+
+ return result;
+}
+
+static inline void inline_mysql_rwlock_register(
+#ifdef HAVE_PSI_RWLOCK_INTERFACE
+ const char *category,
+ PSI_rwlock_info *info,
+ int count
+#else
+ const char *category MY_ATTRIBUTE ((unused)),
+ void *info MY_ATTRIBUTE ((unused)),
+ int count MY_ATTRIBUTE ((unused))
+#endif
+)
+{
+#ifdef HAVE_PSI_RWLOCK_INTERFACE
+ PSI_RWLOCK_CALL(register_rwlock)(category, info, count);
+#endif
+}
+
+static inline int inline_mysql_rwlock_init(
+#ifdef HAVE_PSI_RWLOCK_INTERFACE
+ PSI_rwlock_key key,
+#endif
+ mysql_rwlock_t *that)
+{
+#ifdef HAVE_PSI_RWLOCK_INTERFACE
+ that->m_psi= PSI_RWLOCK_CALL(init_rwlock)(key, &that->m_rwlock);
+#else
+ that->m_psi= NULL;
+#endif
+ return native_rw_init(&that->m_rwlock);
+}
+
+#ifndef DISABLE_MYSQL_PRLOCK_H
+static inline int inline_mysql_prlock_init(
+#ifdef HAVE_PSI_RWLOCK_INTERFACE
+ PSI_rwlock_key key,
+#endif
+ mysql_prlock_t *that)
+{
+#ifdef HAVE_PSI_RWLOCK_INTERFACE
+ that->m_psi= PSI_RWLOCK_CALL(init_rwlock)(key, &that->m_prlock);
+#else
+ that->m_psi= NULL;
+#endif
+ return rw_pr_init(&that->m_prlock);
+}
+#endif
+
+static inline int inline_mysql_rwlock_destroy(
+ mysql_rwlock_t *that)
+{
+#ifdef HAVE_PSI_RWLOCK_INTERFACE
+ if (that->m_psi != NULL)
+ {
+ PSI_RWLOCK_CALL(destroy_rwlock)(that->m_psi);
+ that->m_psi= NULL;
+ }
+#endif
+ return native_rw_destroy(&that->m_rwlock);
+}
+
+#ifndef DISABLE_MYSQL_PRLOCK_H
+static inline int inline_mysql_prlock_destroy(
+ mysql_prlock_t *that)
+{
+#ifdef HAVE_PSI_RWLOCK_INTERFACE
+ if (that->m_psi != NULL)
+ {
+ PSI_RWLOCK_CALL(destroy_rwlock)(that->m_psi);
+ that->m_psi= NULL;
+ }
+#endif
+ return rw_pr_destroy(&that->m_prlock);
+}
+#endif
+
+static inline int inline_mysql_rwlock_rdlock(
+ mysql_rwlock_t *that
+#ifdef HAVE_PSI_RWLOCK_INTERFACE
+ , const char *src_file, uint src_line
+#endif
+ )
+{
+ int result;
+
+#ifdef HAVE_PSI_RWLOCK_INTERFACE
+ if (that->m_psi != NULL)
+ {
+ /* Instrumentation start */
+ PSI_rwlock_locker *locker;
+ PSI_rwlock_locker_state state;
+ locker= PSI_RWLOCK_CALL(start_rwlock_rdwait)(&state, that->m_psi,
+ PSI_RWLOCK_READLOCK, src_file, src_line);
+
+ /* Instrumented code */
+ result= native_rw_rdlock(&that->m_rwlock);
+
+ /* Instrumentation end */
+ if (locker != NULL)
+ PSI_RWLOCK_CALL(end_rwlock_rdwait)(locker, result);
+
+ return result;
+ }
+#endif
+
+ /* Non instrumented code */
+ result= native_rw_rdlock(&that->m_rwlock);
+
+ return result;
+}
+
+#ifndef DISABLE_MYSQL_PRLOCK_H
+static inline int inline_mysql_prlock_rdlock(
+ mysql_prlock_t *that
+#ifdef HAVE_PSI_RWLOCK_INTERFACE
+ , const char *src_file, uint src_line
+#endif
+ )
+{
+ int result;
+
+#ifdef HAVE_PSI_RWLOCK_INTERFACE
+ if (that->m_psi != NULL)
+ {
+ /* Instrumentation start */
+ PSI_rwlock_locker *locker;
+ PSI_rwlock_locker_state state;
+ locker= PSI_RWLOCK_CALL(start_rwlock_rdwait)(&state, that->m_psi,
+ PSI_RWLOCK_READLOCK, src_file, src_line);
+
+ /* Instrumented code */
+ result= rw_pr_rdlock(&that->m_prlock);
+
+ /* Instrumentation end */
+ if (locker != NULL)
+ PSI_RWLOCK_CALL(end_rwlock_rdwait)(locker, result);
+
+ return result;
+ }
+#endif
+
+ /* Non instrumented code */
+ result= rw_pr_rdlock(&that->m_prlock);
+
+ return result;
+}
+#endif
+
+static inline int inline_mysql_rwlock_wrlock(
+ mysql_rwlock_t *that
+#ifdef HAVE_PSI_RWLOCK_INTERFACE
+ , const char *src_file, uint src_line
+#endif
+ )
+{
+ int result;
+
+#ifdef HAVE_PSI_RWLOCK_INTERFACE
+ if (that->m_psi != NULL)
+ {
+ /* Instrumentation start */
+ PSI_rwlock_locker *locker;
+ PSI_rwlock_locker_state state;
+ locker= PSI_RWLOCK_CALL(start_rwlock_wrwait)(&state, that->m_psi,
+ PSI_RWLOCK_WRITELOCK, src_file, src_line);
+
+ /* Instrumented code */
+ result= native_rw_wrlock(&that->m_rwlock);
+
+ /* Instrumentation end */
+ if (locker != NULL)
+ PSI_RWLOCK_CALL(end_rwlock_wrwait)(locker, result);
+
+ return result;
+ }
+#endif
+
+ /* Non instrumented code */
+ result= native_rw_wrlock(&that->m_rwlock);
+
+ return result;
+}
+
+#ifndef DISABLE_MYSQL_PRLOCK_H
+static inline int inline_mysql_prlock_wrlock(
+ mysql_prlock_t *that
+#ifdef HAVE_PSI_RWLOCK_INTERFACE
+ , const char *src_file, uint src_line
+#endif
+ )
+{
+ int result;
+
+#ifdef HAVE_PSI_RWLOCK_INTERFACE
+ if (that->m_psi != NULL)
+ {
+ /* Instrumentation start */
+ PSI_rwlock_locker *locker;
+ PSI_rwlock_locker_state state;
+ locker= PSI_RWLOCK_CALL(start_rwlock_wrwait)(&state, that->m_psi,
+ PSI_RWLOCK_WRITELOCK, src_file, src_line);
+
+ /* Instrumented code */
+ result= rw_pr_wrlock(&that->m_prlock);
+
+ /* Instrumentation end */
+ if (locker != NULL)
+ PSI_RWLOCK_CALL(end_rwlock_wrwait)(locker, result);
+
+ return result;
+ }
+#endif
+
+ /* Non instrumented code */
+ result= rw_pr_wrlock(&that->m_prlock);
+
+ return result;
+}
+#endif
+
+static inline int inline_mysql_rwlock_tryrdlock(
+ mysql_rwlock_t *that
+#ifdef HAVE_PSI_RWLOCK_INTERFACE
+ , const char *src_file, uint src_line
+#endif
+ )
+{
+ int result;
+
+#ifdef HAVE_PSI_RWLOCK_INTERFACE
+ if (that->m_psi != NULL)
+ {
+ /* Instrumentation start */
+ PSI_rwlock_locker *locker;
+ PSI_rwlock_locker_state state;
+ locker= PSI_RWLOCK_CALL(start_rwlock_rdwait)(&state, that->m_psi,
+ PSI_RWLOCK_TRYREADLOCK, src_file, src_line);
+
+ /* Instrumented code */
+ result= native_rw_tryrdlock(&that->m_rwlock);
+
+ /* Instrumentation end */
+ if (locker != NULL)
+ PSI_RWLOCK_CALL(end_rwlock_rdwait)(locker, result);
+
+ return result;
+ }
+#endif
+
+ /* Non instrumented code */
+ result= native_rw_tryrdlock(&that->m_rwlock);
+
+ return result;
+}
+
+static inline int inline_mysql_rwlock_trywrlock(
+ mysql_rwlock_t *that
+#ifdef HAVE_PSI_RWLOCK_INTERFACE
+ , const char *src_file, uint src_line
+#endif
+ )
+{
+ int result;
+
+#ifdef HAVE_PSI_RWLOCK_INTERFACE
+ if (that->m_psi != NULL)
+ {
+ /* Instrumentation start */
+ PSI_rwlock_locker *locker;
+ PSI_rwlock_locker_state state;
+ locker= PSI_RWLOCK_CALL(start_rwlock_wrwait)(&state, that->m_psi,
+ PSI_RWLOCK_TRYWRITELOCK, src_file, src_line);
+
+ /* Instrumented code */
+ result= native_rw_trywrlock(&that->m_rwlock);
+
+ /* Instrumentation end */
+ if (locker != NULL)
+ PSI_RWLOCK_CALL(end_rwlock_wrwait)(locker, result);
+
+ return result;
+ }
+#endif
+
+ /* Non instrumented code */
+ result= native_rw_trywrlock(&that->m_rwlock);
+
+ return result;
+}
+
+static inline int inline_mysql_rwlock_unlock(
+ mysql_rwlock_t *that)
+{
+ int result;
+#ifdef HAVE_PSI_RWLOCK_INTERFACE
+ if (that->m_psi != NULL)
+ PSI_RWLOCK_CALL(unlock_rwlock)(that->m_psi);
+#endif
+ result= native_rw_unlock(&that->m_rwlock);
+ return result;
+}
+
+#ifndef DISABLE_MYSQL_PRLOCK_H
+static inline int inline_mysql_prlock_unlock(
+ mysql_prlock_t *that)
+{
+ int result;
+#ifdef HAVE_PSI_RWLOCK_INTERFACE
+ if (that->m_psi != NULL)
+ PSI_RWLOCK_CALL(unlock_rwlock)(that->m_psi);
+#endif
+ result= rw_pr_unlock(&that->m_prlock);
+ return result;
+}
+#endif
+
+static inline void inline_mysql_cond_register(
+#ifdef HAVE_PSI_COND_INTERFACE
+ const char *category,
+ PSI_cond_info *info,
+ int count
+#else
+ const char *category MY_ATTRIBUTE ((unused)),
+ void *info MY_ATTRIBUTE ((unused)),
+ int count MY_ATTRIBUTE ((unused))
+#endif
+)
+{
+#ifdef HAVE_PSI_COND_INTERFACE
+ PSI_COND_CALL(register_cond)(category, info, count);
+#endif
+}
+
+static inline int inline_mysql_cond_init(
+#ifdef HAVE_PSI_COND_INTERFACE
+ PSI_cond_key key,
+#endif
+ mysql_cond_t *that)
+{
+#ifdef HAVE_PSI_COND_INTERFACE
+ that->m_psi= PSI_COND_CALL(init_cond)(key, &that->m_cond);
+#else
+ that->m_psi= NULL;
+#endif
+ return native_cond_init(&that->m_cond);
+}
+
+static inline int inline_mysql_cond_destroy(
+ mysql_cond_t *that)
+{
+#ifdef HAVE_PSI_COND_INTERFACE
+ if (that->m_psi != NULL)
+ {
+ PSI_COND_CALL(destroy_cond)(that->m_psi);
+ that->m_psi= NULL;
+ }
+#endif
+ return native_cond_destroy(&that->m_cond);
+}
+
+static inline int inline_mysql_cond_wait(
+ mysql_cond_t *that,
+ mysql_mutex_t *mutex
+#if defined(SAFE_MUTEX) || defined(HAVE_PSI_COND_INTERFACE)
+ , const char *src_file, uint src_line
+#endif
+ )
+{
+ int result;
+
+#ifdef HAVE_PSI_COND_INTERFACE
+ if (that->m_psi != NULL)
+ {
+ /* Instrumentation start */
+ PSI_cond_locker *locker;
+ PSI_cond_locker_state state;
+ locker= PSI_COND_CALL(start_cond_wait)(&state, that->m_psi, mutex->m_psi,
+ PSI_COND_WAIT, src_file, src_line);
+
+ /* Instrumented code */
+ result= my_cond_wait(&that->m_cond, &mutex->m_mutex
+#ifdef SAFE_MUTEX
+ , src_file, src_line
+#endif
+ );
+
+ /* Instrumentation end */
+ if (locker != NULL)
+ PSI_COND_CALL(end_cond_wait)(locker, result);
+
+ return result;
+ }
+#endif
+
+ /* Non instrumented code */
+ result= my_cond_wait(&that->m_cond, &mutex->m_mutex
+#ifdef SAFE_MUTEX
+ , src_file, src_line
+#endif
+ );
+
+ return result;
+}
+
+static inline int inline_mysql_cond_timedwait(
+ mysql_cond_t *that,
+ mysql_mutex_t *mutex,
+ const struct timespec *abstime
+#if defined(SAFE_MUTEX) || defined(HAVE_PSI_COND_INTERFACE)
+ , const char *src_file, uint src_line
+#endif
+ )
+{
+ int result;
+
+#ifdef HAVE_PSI_COND_INTERFACE
+ if (that->m_psi != NULL)
+ {
+ /* Instrumentation start */
+ PSI_cond_locker *locker;
+ PSI_cond_locker_state state;
+ locker= PSI_COND_CALL(start_cond_wait)(&state, that->m_psi, mutex->m_psi,
+ PSI_COND_TIMEDWAIT, src_file, src_line);
+
+ /* Instrumented code */
+ result= my_cond_timedwait(&that->m_cond, &mutex->m_mutex, abstime
+#ifdef SAFE_MUTEX
+ , src_file, src_line
+#endif
+ );
+
+ /* Instrumentation end */
+ if (locker != NULL)
+ PSI_COND_CALL(end_cond_wait)(locker, result);
+
+ return result;
+ }
+#endif
+
+ /* Non instrumented code */
+ result= my_cond_timedwait(&that->m_cond, &mutex->m_mutex, abstime
+#ifdef SAFE_MUTEX
+ , src_file, src_line
+#endif
+ );
+
+ return result;
+}
+
+static inline int inline_mysql_cond_signal(
+ mysql_cond_t *that)
+{
+ int result;
+#ifdef HAVE_PSI_COND_INTERFACE
+ if (that->m_psi != NULL)
+ PSI_COND_CALL(signal_cond)(that->m_psi);
+#endif
+ result= native_cond_signal(&that->m_cond);
+ return result;
+}
+
+static inline int inline_mysql_cond_broadcast(
+ mysql_cond_t *that)
+{
+ int result;
+#ifdef HAVE_PSI_COND_INTERFACE
+ if (that->m_psi != NULL)
+ PSI_COND_CALL(broadcast_cond)(that->m_psi);
+#endif
+ result= native_cond_broadcast(&that->m_cond);
+ return result;
+}
+
+static inline void inline_mysql_thread_register(
+#ifdef HAVE_PSI_THREAD_INTERFACE
+ const char *category,
+ PSI_thread_info *info,
+ int count
+#else
+ const char *category MY_ATTRIBUTE ((unused)),
+ void *info MY_ATTRIBUTE ((unused)),
+ int count MY_ATTRIBUTE ((unused))
+#endif
+)
+{
+#ifdef HAVE_PSI_THREAD_INTERFACE
+ PSI_THREAD_CALL(register_thread)(category, info, count);
+#endif
+}
+
+#ifdef HAVE_PSI_THREAD_INTERFACE
+static inline int inline_mysql_thread_create(
+ PSI_thread_key key,
+ my_thread_handle *thread, const my_thread_attr_t *attr,
+ my_start_routine start_routine, void *arg)
+{
+ int result;
+ result= PSI_THREAD_CALL(spawn_thread)(key, thread, attr, start_routine, arg);
+ return result;
+}
+
+static inline void inline_mysql_thread_set_psi_id(my_thread_id id)
+{
+ struct PSI_thread *psi= PSI_THREAD_CALL(get_thread)();
+ PSI_THREAD_CALL(set_thread_id)(psi, id);
+}
+
+#ifdef __cplusplus
+class THD;
+static inline void inline_mysql_thread_set_psi_THD(THD *thd)
+{
+ struct PSI_thread *psi= PSI_THREAD_CALL(get_thread)();
+ PSI_THREAD_CALL(set_thread_THD)(psi, thd);
+}
+#endif /* __cplusplus */
+
+static inline void mysql_thread_set_peer_port(uint port MY_ATTRIBUTE ((unused))) {
+#ifdef HAVE_PSI_THREAD_INTERFACE
+ struct PSI_thread *psi = PSI_THREAD_CALL(get_thread)();
+ PSI_THREAD_CALL(set_thread_peer_port)(psi, port);
+#endif
+}
+
+#endif
+
+#endif /* DISABLE_MYSQL_THREAD_H */
+
+/** @} (end of group Thread_instrumentation) */
+
+#endif
+
diff --git a/db/include/mysql/psi/mysql_transaction.h b/db/include/mysql/psi/mysql_transaction.h
new file mode 100644
index 0000000..763c3aa
--- /dev/null
+++ b/db/include/mysql/psi/mysql_transaction.h
@@ -0,0 +1,220 @@
+/* Copyright (c) 2013, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 MYSQL_TRANSACTION_H
+#define MYSQL_TRANSACTION_H
+
+/**
+ @file mysql/psi/mysql_transaction.h
+ Instrumentation helpers for transactions.
+*/
+
+#include "mysql/psi/psi.h"
+
+#ifndef PSI_TRANSACTION_CALL
+#define PSI_TRANSACTION_CALL(M) PSI_DYNAMIC_CALL(M)
+#endif
+
+/**
+ @defgroup Transaction_instrumentation Transaction Instrumentation
+ @ingroup Instrumentation_interface
+ @{
+*/
+
+#ifdef HAVE_PSI_TRANSACTION_INTERFACE
+ #define MYSQL_START_TRANSACTION(STATE, XID, TRXID, ISO, RO, AC) \
+ inline_mysql_start_transaction(STATE, XID, TRXID, ISO, RO, AC, __FILE__, __LINE__)
+#else
+ #define MYSQL_START_TRANSACTION(STATE, XID, TRXID, ISO, RO, AC) \
+ do {} while (0)
+#endif
+
+#ifdef HAVE_PSI_TRANSACTION_INTERFACE
+ #define MYSQL_SET_TRANSACTION_GTID(LOCKER, P1, P2) \
+ inline_mysql_set_transaction_gtid(LOCKER, P1, P2)
+#else
+ #define MYSQL_SET_TRANSACTION_GTID(LOCKER, P1, P2) \
+ do {} while (0)
+#endif
+
+#ifdef HAVE_PSI_TRANSACTION_INTERFACE
+ #define MYSQL_SET_TRANSACTION_XID(LOCKER, P1, P2) \
+ inline_mysql_set_transaction_xid(LOCKER, P1, P2)
+#else
+ #define MYSQL_SET_TRANSACTION_XID(LOCKER, P1, P2) \
+ do {} while (0)
+#endif
+
+#ifdef HAVE_PSI_TRANSACTION_INTERFACE
+ #define MYSQL_SET_TRANSACTION_XA_STATE(LOCKER, P1) \
+ inline_mysql_set_transaction_xa_state(LOCKER, P1)
+#else
+ #define MYSQL_SET_TRANSACTION_XA_STATE(LOCKER, P1) \
+ do {} while (0)
+#endif
+
+#ifdef HAVE_PSI_TRANSACTION_INTERFACE
+ #define MYSQL_SET_TRANSACTION_TRXID(LOCKER, P1) \
+ inline_mysql_set_transaction_trxid(LOCKER, P1)
+#else
+ #define MYSQL_SET_TRANSACTION_TRXID(LOCKER, P1) \
+ do {} while (0)
+#endif
+
+#ifdef HAVE_PSI_TRANSACTION_INTERFACE
+ #define MYSQL_INC_TRANSACTION_SAVEPOINTS(LOCKER, P1) \
+ inline_mysql_inc_transaction_savepoints(LOCKER, P1)
+#else
+ #define MYSQL_INC_TRANSACTION_SAVEPOINTS(LOCKER, P1) \
+ do {} while (0)
+#endif
+
+#ifdef HAVE_PSI_TRANSACTION_INTERFACE
+ #define MYSQL_INC_TRANSACTION_ROLLBACK_TO_SAVEPOINT(LOCKER, P1) \
+ inline_mysql_inc_transaction_rollback_to_savepoint(LOCKER, P1)
+#else
+ #define MYSQL_INC_TRANSACTION_ROLLBACK_TO_SAVEPOINT(LOCKER, P1) \
+ do {} while (0)
+#endif
+
+#ifdef HAVE_PSI_TRANSACTION_INTERFACE
+ #define MYSQL_INC_TRANSACTION_RELEASE_SAVEPOINT(LOCKER, P1) \
+ inline_mysql_inc_transaction_release_savepoint(LOCKER, P1)
+#else
+ #define MYSQL_INC_TRANSACTION_RELEASE_SAVEPOINT(LOCKER, P1) \
+ do {} while (0)
+#endif
+
+#ifdef HAVE_PSI_TRANSACTION_INTERFACE
+ #define MYSQL_ROLLBACK_TRANSACTION(LOCKER) \
+ inline_mysql_rollback_transaction(LOCKER)
+#else
+ #define MYSQL_ROLLBACK_TRANSACTION(LOCKER) \
+ NULL
+#endif
+
+#ifdef HAVE_PSI_TRANSACTION_INTERFACE
+ #define MYSQL_COMMIT_TRANSACTION(LOCKER) \
+ inline_mysql_commit_transaction(LOCKER)
+#else
+ #define MYSQL_COMMIT_TRANSACTION(LOCKER) \
+ NULL
+#endif
+
+#ifdef HAVE_PSI_TRANSACTION_INTERFACE
+static inline struct PSI_transaction_locker *
+inline_mysql_start_transaction(PSI_transaction_locker_state *state,
+ const void *xid,
+ const ulonglong *trxid,
+ int isolation_level,
+ my_bool read_only,
+ my_bool autocommit,
+ const char *src_file, int src_line)
+{
+ PSI_transaction_locker *locker;
+ locker= PSI_TRANSACTION_CALL(get_thread_transaction_locker)(state,
+ xid, trxid,
+ isolation_level,
+ read_only,
+ autocommit);
+ if (likely(locker != NULL))
+ PSI_TRANSACTION_CALL(start_transaction)(locker, src_file, src_line);
+ return locker;
+}
+
+static inline void
+inline_mysql_set_transaction_gtid(PSI_transaction_locker *locker,
+ const void *sid,
+ const void *gtid_spec)
+{
+ if (likely(locker != NULL))
+ PSI_TRANSACTION_CALL(set_transaction_gtid)(locker, sid, gtid_spec);
+}
+
+static inline void
+inline_mysql_set_transaction_xid(PSI_transaction_locker *locker,
+ const void *xid,
+ int xa_state)
+{
+ if (likely(locker != NULL))
+ PSI_TRANSACTION_CALL(set_transaction_xid)(locker, xid, xa_state);
+}
+
+static inline void
+inline_mysql_set_transaction_xa_state(PSI_transaction_locker *locker,
+ int xa_state)
+{
+ if (likely(locker != NULL))
+ PSI_TRANSACTION_CALL(set_transaction_xa_state)(locker, xa_state);
+}
+
+static inline void
+inline_mysql_set_transaction_trxid(PSI_transaction_locker *locker,
+ const ulonglong *trxid)
+{
+ if (likely(locker != NULL))
+ PSI_TRANSACTION_CALL(set_transaction_trxid)(locker, trxid);
+}
+
+static inline void
+inline_mysql_inc_transaction_savepoints(PSI_transaction_locker *locker,
+ ulong count)
+{
+ if (likely(locker != NULL))
+ PSI_TRANSACTION_CALL(inc_transaction_savepoints)(locker, count);
+}
+
+static inline void
+inline_mysql_inc_transaction_rollback_to_savepoint(PSI_transaction_locker *locker,
+ ulong count)
+{
+ if (likely(locker != NULL))
+ PSI_TRANSACTION_CALL(inc_transaction_rollback_to_savepoint)(locker, count);
+}
+
+static inline void
+inline_mysql_inc_transaction_release_savepoint(PSI_transaction_locker *locker,
+ ulong count)
+{
+ if (likely(locker != NULL))
+ PSI_TRANSACTION_CALL(inc_transaction_release_savepoint)(locker, count);
+}
+
+static inline void
+inline_mysql_rollback_transaction(struct PSI_transaction_locker *locker)
+{
+ if (likely(locker != NULL))
+ PSI_TRANSACTION_CALL(end_transaction)(locker, false);
+}
+
+static inline void
+inline_mysql_commit_transaction(struct PSI_transaction_locker *locker)
+{
+ if (likely(locker != NULL))
+ PSI_TRANSACTION_CALL(end_transaction)(locker, true);
+}
+#endif
+
+/** @} (end of group Transaction_instrumentation) */
+
+#endif
+
diff --git a/db/include/mysql/psi/psi.h b/db/include/mysql/psi/psi.h
new file mode 100644
index 0000000..98bcffd
--- /dev/null
+++ b/db/include/mysql/psi/psi.h
@@ -0,0 +1,3022 @@
+/* Copyright (c) 2008, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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,
+ 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */
+
+#ifndef MYSQL_PERFORMANCE_SCHEMA_INTERFACE_H
+#define MYSQL_PERFORMANCE_SCHEMA_INTERFACE_H
+
+#ifdef EMBEDDED_LIBRARY
+#define DISABLE_ALL_PSI
+#endif /* EMBEDDED_LIBRARY */
+
+#ifndef MY_GLOBAL_INCLUDED
+/*
+ Make sure a .c or .cc file contains an include to my_global.h first.
+ When this include is missing, all the #ifdef HAVE_XXX have no effect,
+ and the resulting binary won't build, or won't link,
+ or will crash at runtime
+ since various structures will have different binary definitions.
+*/
+#error "You must include my_global.h in the code for the build to be correct."
+#endif
+
+#include "psi_base.h"
+#include "psi_memory.h"
+
+/*
+ MAINTAINER:
+ The following pattern:
+ typedef struct XYZ XYZ;
+ is not needed in C++, but required for C.
+*/
+
+C_MODE_START
+
+/** @sa MDL_key. */
+struct MDL_key;
+typedef struct MDL_key MDL_key;
+
+/** @sa enum_mdl_type. */
+typedef int opaque_mdl_type;
+
+/** @sa enum_mdl_duration. */
+typedef int opaque_mdl_duration;
+
+/** @sa MDL_wait::enum_wait_status. */
+typedef int opaque_mdl_status;
+
+/** @sa enum_vio_type. */
+typedef int opaque_vio_type;
+
+struct TABLE_SHARE;
+
+struct sql_digest_storage;
+
+#ifdef __cplusplus
+ class THD;
+#else
+ /*
+ Phony declaration when compiling C code.
+ This is ok, because the C code will never have a THD anyway.
+ */
+ struct opaque_THD
+ {
+ int dummy;
+ };
+ typedef struct opaque_THD THD;
+#endif
+
+/**
+ @file mysql/psi/psi.h
+ Performance schema instrumentation interface.
+
+ @defgroup Instrumentation_interface Instrumentation Interface
+ @ingroup Performance_schema
+ @{
+*/
+
+/**
+ Interface for an instrumented mutex.
+ This is an opaque structure.
+*/
+struct PSI_mutex;
+typedef struct PSI_mutex PSI_mutex;
+
+/**
+ Interface for an instrumented rwlock.
+ This is an opaque structure.
+*/
+struct PSI_rwlock;
+typedef struct PSI_rwlock PSI_rwlock;
+
+/**
+ Interface for an instrumented condition.
+ This is an opaque structure.
+*/
+struct PSI_cond;
+typedef struct PSI_cond PSI_cond;
+
+/**
+ Interface for an instrumented table share.
+ This is an opaque structure.
+*/
+struct PSI_table_share;
+typedef struct PSI_table_share PSI_table_share;
+
+/**
+ Interface for an instrumented table handle.
+ This is an opaque structure.
+*/
+struct PSI_table;
+typedef struct PSI_table PSI_table;
+
+/**
+ Interface for an instrumented thread.
+ This is an opaque structure.
+*/
+struct PSI_thread;
+typedef struct PSI_thread PSI_thread;
+
+/**
+ Interface for an instrumented file handle.
+ This is an opaque structure.
+*/
+struct PSI_file;
+typedef struct PSI_file PSI_file;
+
+/**
+ Interface for an instrumented socket descriptor.
+ This is an opaque structure.
+*/
+struct PSI_socket;
+typedef struct PSI_socket PSI_socket;
+
+/**
+ Interface for an instrumented prepared statement.
+ This is an opaque structure.
+*/
+struct PSI_prepared_stmt;
+typedef struct PSI_prepared_stmt PSI_prepared_stmt;
+
+/**
+ Interface for an instrumented table operation.
+ This is an opaque structure.
+*/
+struct PSI_table_locker;
+typedef struct PSI_table_locker PSI_table_locker;
+
+/**
+ Interface for an instrumented statement.
+ This is an opaque structure.
+*/
+struct PSI_statement_locker;
+typedef struct PSI_statement_locker PSI_statement_locker;
+
+/**
+ Interface for an instrumented transaction.
+ This is an opaque structure.
+*/
+struct PSI_transaction_locker;
+typedef struct PSI_transaction_locker PSI_transaction_locker;
+
+/**
+ Interface for an instrumented idle operation.
+ This is an opaque structure.
+*/
+struct PSI_idle_locker;
+typedef struct PSI_idle_locker PSI_idle_locker;
+
+/**
+ Interface for an instrumented statement digest operation.
+ This is an opaque structure.
+*/
+struct PSI_digest_locker;
+typedef struct PSI_digest_locker PSI_digest_locker;
+
+/**
+ Interface for an instrumented stored procedure share.
+ This is an opaque structure.
+*/
+struct PSI_sp_share;
+typedef struct PSI_sp_share PSI_sp_share;
+
+/**
+ Interface for an instrumented stored program.
+ This is an opaque structure.
+*/
+struct PSI_sp_locker;
+typedef struct PSI_sp_locker PSI_sp_locker;
+
+/**
+ Interface for an instrumented metadata lock.
+ This is an opaque structure.
+*/
+struct PSI_metadata_lock;
+typedef struct PSI_metadata_lock PSI_metadata_lock;
+
+/**
+ Interface for an instrumented stage progress.
+ This is a public structure, for efficiency.
+*/
+struct PSI_stage_progress
+{
+ ulonglong m_work_completed;
+ ulonglong m_work_estimated;
+};
+typedef struct PSI_stage_progress PSI_stage_progress;
+
+/** IO operation performed on an instrumented table. */
+enum PSI_table_io_operation
+{
+ /** Row fetch. */
+ PSI_TABLE_FETCH_ROW= 0,
+ /** Row write. */
+ PSI_TABLE_WRITE_ROW= 1,
+ /** Row update. */
+ PSI_TABLE_UPDATE_ROW= 2,
+ /** Row delete. */
+ PSI_TABLE_DELETE_ROW= 3
+};
+typedef enum PSI_table_io_operation PSI_table_io_operation;
+
+/**
+ State data storage for @c start_table_io_wait_v1_t,
+ @c start_table_lock_wait_v1_t.
+ This structure provide temporary storage to a table locker.
+ The content of this structure is considered opaque,
+ the fields are only hints of what an implementation
+ of the psi interface can use.
+ This memory is provided by the instrumented code for performance reasons.
+ @sa start_table_io_wait_v1_t
+ @sa start_table_lock_wait_v1_t
+*/
+struct PSI_table_locker_state
+{
+ /** Internal state. */
+ uint m_flags;
+ /** Current io operation. */
+ enum PSI_table_io_operation m_io_operation;
+ /** Current table handle. */
+ struct PSI_table *m_table;
+ /** Current table share. */
+ struct PSI_table_share *m_table_share;
+ /** Current thread. */
+ struct PSI_thread *m_thread;
+ /** Timer start. */
+ ulonglong m_timer_start;
+ /** Timer function. */
+ ulonglong (*m_timer)(void);
+ /** Internal data. */
+ void *m_wait;
+ /**
+ Implementation specific.
+ For table io, the table io index.
+ For table lock, the lock type.
+ */
+ uint m_index;
+};
+typedef struct PSI_table_locker_state PSI_table_locker_state;
+
+/** Entry point for the performance schema interface. */
+struct PSI_bootstrap
+{
+ /**
+ ABI interface finder.
+ Calling this method with an interface version number returns either
+ an instance of the ABI for this version, or NULL.
+ @param version the interface version number to find
+ @return a versioned interface (PSI_v1, PSI_v2 or PSI)
+ @sa PSI_VERSION_1
+ @sa PSI_v1
+ @sa PSI_VERSION_2
+ @sa PSI_v2
+ @sa PSI_CURRENT_VERSION
+ @sa PSI
+ */
+ void* (*get_interface)(int version);
+};
+typedef struct PSI_bootstrap PSI_bootstrap;
+
+#ifdef HAVE_PSI_INTERFACE
+
+#ifdef DISABLE_ALL_PSI
+
+#ifndef DISABLE_PSI_THREAD
+#define DISABLE_PSI_THREAD
+#endif
+
+#ifndef DISABLE_PSI_MUTEX
+#define DISABLE_PSI_MUTEX
+#endif
+
+#ifndef DISABLE_PSI_RWLOCK
+#define DISABLE_PSI_RWLOCK
+#endif
+
+#ifndef DISABLE_PSI_COND
+#define DISABLE_PSI_COND
+#endif
+
+#ifndef DISABLE_PSI_FILE
+#define DISABLE_PSI_FILE
+#endif
+
+#ifndef DISABLE_PSI_TABLE
+#define DISABLE_PSI_TABLE
+#endif
+
+#ifndef DISABLE_PSI_SOCKET
+#define DISABLE_PSI_SOCKET
+#endif
+
+#ifndef DISABLE_PSI_STAGE
+#define DISABLE_PSI_STAGE
+#endif
+
+#ifndef DISABLE_PSI_STATEMENT
+#define DISABLE_PSI_STATEMENT
+#endif
+
+#ifndef DISABLE_PSI_SP
+#define DISABLE_PSI_SP
+#endif
+
+#ifndef DISABLE_PSI_IDLE
+#define DISABLE_PSI_IDLE
+#endif
+
+#ifndef DISABLE_PSI_STATEMENT_DIGEST
+#define DISABLE_PSI_STATEMENT_DIGEST
+#endif
+
+#ifndef DISABLE_PSI_METADATA
+#define DISABLE_PSI_METADATA
+#endif
+
+#ifndef DISABLE_PSI_MEMORY
+#define DISABLE_PSI_MEMORY
+#endif
+
+#ifndef DISABLE_PSI_TRANSACTION
+#define DISABLE_PSI_TRANSACTION
+#endif
+
+#ifndef DISABLE_PSI_SP
+#define DISABLE_PSI_SP
+#endif
+
+#ifndef DISABLE_PSI_PS
+#define DISABLE_PSI_PS
+#endif
+
+#endif
+
+/**
+ @def DISABLE_PSI_MUTEX
+ Compiling option to disable the mutex instrumentation.
+ This option is mostly intended to be used during development,
+ when doing special builds with only a subset of the performance schema instrumentation,
+ for code analysis / profiling / performance tuning of a specific instrumentation alone.
+ @sa DISABLE_PSI_RWLOCK
+ @sa DISABLE_PSI_COND
+ @sa DISABLE_PSI_FILE
+ @sa DISABLE_PSI_THREAD
+ @sa DISABLE_PSI_TABLE
+ @sa DISABLE_PSI_STAGE
+ @sa DISABLE_PSI_STATEMENT
+ @sa DISABLE_PSI_SP
+ @sa DISABLE_PSI_STATEMENT_DIGEST
+ @sa DISABLE_PSI_SOCKET
+ @sa DISABLE_PSI_MEMORY
+ @sa DISABLE_PSI_IDLE
+ @sa DISABLE_PSI_METADATA
+ @sa DISABLE PSI_TRANSACTION
+*/
+
+#ifndef DISABLE_PSI_MUTEX
+#define HAVE_PSI_MUTEX_INTERFACE
+#endif
+
+/**
+ @def DISABLE_PSI_RWLOCK
+ Compiling option to disable the rwlock instrumentation.
+ @sa DISABLE_PSI_MUTEX
+*/
+
+#ifndef DISABLE_PSI_RWLOCK
+#define HAVE_PSI_RWLOCK_INTERFACE
+#endif
+
+/**
+ @def DISABLE_PSI_COND
+ Compiling option to disable the cond instrumentation.
+ @sa DISABLE_PSI_MUTEX
+*/
+
+#ifndef DISABLE_PSI_COND
+#define HAVE_PSI_COND_INTERFACE
+#endif
+
+/**
+ @def DISABLE_PSI_FILE
+ Compiling option to disable the file instrumentation.
+ @sa DISABLE_PSI_MUTEX
+*/
+
+#ifndef DISABLE_PSI_FILE
+#define HAVE_PSI_FILE_INTERFACE
+#endif
+
+/**
+ @def DISABLE_PSI_THREAD
+ Compiling option to disable the thread instrumentation.
+ @sa DISABLE_PSI_MUTEX
+*/
+#ifndef DISABLE_PSI_THREAD
+#define HAVE_PSI_THREAD_INTERFACE
+#endif
+
+/**
+ @def DISABLE_PSI_TABLE
+ Compiling option to disable the table instrumentation.
+ @sa DISABLE_PSI_MUTEX
+*/
+
+#ifndef DISABLE_PSI_TABLE
+#define HAVE_PSI_TABLE_INTERFACE
+#endif
+
+/**
+ @def DISABLE_PSI_STAGE
+ Compiling option to disable the stage instrumentation.
+ @sa DISABLE_PSI_MUTEX
+*/
+
+#ifndef DISABLE_PSI_STAGE
+#define HAVE_PSI_STAGE_INTERFACE
+#endif
+
+/**
+ @def DISABLE_PSI_STATEMENT
+ Compiling option to disable the statement instrumentation.
+ @sa DISABLE_PSI_MUTEX
+*/
+
+#ifndef DISABLE_PSI_STATEMENT
+#define HAVE_PSI_STATEMENT_INTERFACE
+#endif
+
+/**
+ @def DISABLE_PSI_SP
+ Compiling option to disable the stored program instrumentation.
+ @sa DISABLE_PSI_MUTEX
+*/
+#ifndef DISABLE_PSI_SP
+#define HAVE_PSI_SP_INTERFACE
+#endif
+
+/**
+ @def DISABLE_PSI_PS
+ Compiling option to disable the prepared statement instrumentation.
+ @sa DISABLE_PSI_MUTEX
+*/
+#ifndef DISABLE_PSI_STATEMENT
+#ifndef DISABLE_PSI_PS
+#define HAVE_PSI_PS_INTERFACE
+#endif
+#endif
+
+/**
+ @def DISABLE_PSI_STATEMENT_DIGEST
+ Compiling option to disable the statement digest instrumentation.
+*/
+
+#ifndef DISABLE_PSI_STATEMENT
+#ifndef DISABLE_PSI_STATEMENT_DIGEST
+#define HAVE_PSI_STATEMENT_DIGEST_INTERFACE
+#endif
+#endif
+
+/**
+ @def DISABLE_PSI_TRANSACTION
+ Compiling option to disable the transaction instrumentation.
+ @sa DISABLE_PSI_MUTEX
+*/
+
+#ifndef DISABLE_PSI_TRANSACTION
+#define HAVE_PSI_TRANSACTION_INTERFACE
+#endif
+
+/**
+ @def DISABLE_PSI_SOCKET
+ Compiling option to disable the statement instrumentation.
+ @sa DISABLE_PSI_MUTEX
+*/
+
+#ifndef DISABLE_PSI_SOCKET
+#define HAVE_PSI_SOCKET_INTERFACE
+#endif
+
+/**
+ @def DISABLE_PSI_MEMORY
+ Compiling option to disable the memory instrumentation.
+ @sa DISABLE_PSI_MUTEX
+*/
+
+#ifndef DISABLE_PSI_MEMORY
+#define HAVE_PSI_MEMORY_INTERFACE
+#endif
+
+/**
+ @def DISABLE_PSI_IDLE
+ Compiling option to disable the idle instrumentation.
+ @sa DISABLE_PSI_MUTEX
+*/
+
+#ifndef DISABLE_PSI_IDLE
+#define HAVE_PSI_IDLE_INTERFACE
+#endif
+
+/**
+ @def DISABLE_PSI_METADATA
+ Compiling option to disable the metadata instrumentation.
+ @sa DISABLE_PSI_MUTEX
+*/
+
+#ifndef DISABLE_PSI_METADATA
+#define HAVE_PSI_METADATA_INTERFACE
+#endif
+
+/**
+ @def PSI_VERSION_1
+ Performance Schema Interface number for version 1.
+ This version is supported.
+*/
+#define PSI_VERSION_1 1
+
+/**
+ @def PSI_VERSION_2
+ Performance Schema Interface number for version 2.
+ This version is not implemented, it's a placeholder.
+*/
+#define PSI_VERSION_2 2
+
+/**
+ @def PSI_CURRENT_VERSION
+ Performance Schema Interface number for the most recent version.
+ The most current version is @c PSI_VERSION_1
+*/
+#define PSI_CURRENT_VERSION 1
+
+#ifndef USE_PSI_2
+#ifndef USE_PSI_1
+#define USE_PSI_1
+#endif
+#endif
+
+/**
+ Interface for an instrumented mutex operation.
+ This is an opaque structure.
+*/
+struct PSI_mutex_locker;
+typedef struct PSI_mutex_locker PSI_mutex_locker;
+
+/**
+ Interface for an instrumented rwlock operation.
+ This is an opaque structure.
+*/
+struct PSI_rwlock_locker;
+typedef struct PSI_rwlock_locker PSI_rwlock_locker;
+
+/**
+ Interface for an instrumented condition operation.
+ This is an opaque structure.
+*/
+struct PSI_cond_locker;
+typedef struct PSI_cond_locker PSI_cond_locker;
+
+/**
+ Interface for an instrumented file operation.
+ This is an opaque structure.
+*/
+struct PSI_file_locker;
+typedef struct PSI_file_locker PSI_file_locker;
+
+/**
+ Interface for an instrumented socket operation.
+ This is an opaque structure.
+*/
+struct PSI_socket_locker;
+typedef struct PSI_socket_locker PSI_socket_locker;
+
+/**
+ Interface for an instrumented MDL operation.
+ This is an opaque structure.
+*/
+struct PSI_metadata_locker;
+typedef struct PSI_metadata_locker PSI_metadata_locker;
+
+/** Operation performed on an instrumented mutex. */
+enum PSI_mutex_operation
+{
+ /** Lock. */
+ PSI_MUTEX_LOCK= 0,
+ /** Lock attempt. */
+ PSI_MUTEX_TRYLOCK= 1
+};
+typedef enum PSI_mutex_operation PSI_mutex_operation;
+
+/**
+ Operation performed on an instrumented rwlock.
+ For basic READ / WRITE lock,
+ operations are "READ" or "WRITE".
+ For SX-locks, operations are "SHARED", "SHARED-EXCLUSIVE" or "EXCLUSIVE".
+*/
+enum PSI_rwlock_operation
+{
+ /** Read lock. */
+ PSI_RWLOCK_READLOCK= 0,
+ /** Write lock. */
+ PSI_RWLOCK_WRITELOCK= 1,
+ /** Read lock attempt. */
+ PSI_RWLOCK_TRYREADLOCK= 2,
+ /** Write lock attempt. */
+ PSI_RWLOCK_TRYWRITELOCK= 3,
+
+ /** Shared lock. */
+ PSI_RWLOCK_SHAREDLOCK= 4,
+ /** Shared Exclusive lock. */
+ PSI_RWLOCK_SHAREDEXCLUSIVELOCK= 5,
+ /** Exclusive lock. */
+ PSI_RWLOCK_EXCLUSIVELOCK= 6,
+ /** Shared lock attempt. */
+ PSI_RWLOCK_TRYSHAREDLOCK= 7,
+ /** Shared Exclusive lock attempt. */
+ PSI_RWLOCK_TRYSHAREDEXCLUSIVELOCK= 8,
+ /** Exclusive lock attempt. */
+ PSI_RWLOCK_TRYEXCLUSIVELOCK= 9
+
+};
+typedef enum PSI_rwlock_operation PSI_rwlock_operation;
+
+/** Operation performed on an instrumented condition. */
+enum PSI_cond_operation
+{
+ /** Wait. */
+ PSI_COND_WAIT= 0,
+ /** Wait, with timeout. */
+ PSI_COND_TIMEDWAIT= 1
+};
+typedef enum PSI_cond_operation PSI_cond_operation;
+
+/** Operation performed on an instrumented file. */
+enum PSI_file_operation
+{
+ /** File creation, as in @c create(). */
+ PSI_FILE_CREATE= 0,
+ /** Temporary file creation, as in @c create_temp_file(). */
+ PSI_FILE_CREATE_TMP= 1,
+ /** File open, as in @c open(). */
+ PSI_FILE_OPEN= 2,
+ /** File open, as in @c fopen(). */
+ PSI_FILE_STREAM_OPEN= 3,
+ /** File close, as in @c close(). */
+ PSI_FILE_CLOSE= 4,
+ /** File close, as in @c fclose(). */
+ PSI_FILE_STREAM_CLOSE= 5,
+ /**
+ Generic file read, such as @c fgets(), @c fgetc(), @c fread(), @c read(),
+ @c pread().
+ */
+ PSI_FILE_READ= 6,
+ /**
+ Generic file write, such as @c fputs(), @c fputc(), @c fprintf(),
+ @c vfprintf(), @c fwrite(), @c write(), @c pwrite().
+ */
+ PSI_FILE_WRITE= 7,
+ /** Generic file seek, such as @c fseek() or @c seek(). */
+ PSI_FILE_SEEK= 8,
+ /** Generic file tell, such as @c ftell() or @c tell(). */
+ PSI_FILE_TELL= 9,
+ /** File flush, as in @c fflush(). */
+ PSI_FILE_FLUSH= 10,
+ /** File stat, as in @c stat(). */
+ PSI_FILE_STAT= 11,
+ /** File stat, as in @c fstat(). */
+ PSI_FILE_FSTAT= 12,
+ /** File chsize, as in @c my_chsize(). */
+ PSI_FILE_CHSIZE= 13,
+ /** File delete, such as @c my_delete() or @c my_delete_with_symlink(). */
+ PSI_FILE_DELETE= 14,
+ /** File rename, such as @c my_rename() or @c my_rename_with_symlink(). */
+ PSI_FILE_RENAME= 15,
+ /** File sync, as in @c fsync() or @c my_sync(). */
+ PSI_FILE_SYNC= 16
+};
+typedef enum PSI_file_operation PSI_file_operation;
+
+/** Lock operation performed on an instrumented table. */
+enum PSI_table_lock_operation
+{
+ /** Table lock, in the server layer. */
+ PSI_TABLE_LOCK= 0,
+ /** Table lock, in the storage engine layer. */
+ PSI_TABLE_EXTERNAL_LOCK= 1
+};
+typedef enum PSI_table_lock_operation PSI_table_lock_operation;
+
+/** State of an instrumented socket. */
+enum PSI_socket_state
+{
+ /** Idle, waiting for the next command. */
+ PSI_SOCKET_STATE_IDLE= 1,
+ /** Active, executing a command. */
+ PSI_SOCKET_STATE_ACTIVE= 2
+};
+typedef enum PSI_socket_state PSI_socket_state;
+
+/** Operation performed on an instrumented socket. */
+enum PSI_socket_operation
+{
+ /** Socket creation, as in @c socket() or @c socketpair(). */
+ PSI_SOCKET_CREATE= 0,
+ /** Socket connection, as in @c connect(), @c listen() and @c accept(). */
+ PSI_SOCKET_CONNECT= 1,
+ /** Socket bind, as in @c bind(), @c getsockname() and @c getpeername(). */
+ PSI_SOCKET_BIND= 2,
+ /** Socket close, as in @c shutdown(). */
+ PSI_SOCKET_CLOSE= 3,
+ /** Socket send, @c send(). */
+ PSI_SOCKET_SEND= 4,
+ /** Socket receive, @c recv(). */
+ PSI_SOCKET_RECV= 5,
+ /** Socket send, @c sendto(). */
+ PSI_SOCKET_SENDTO= 6,
+ /** Socket receive, @c recvfrom). */
+ PSI_SOCKET_RECVFROM= 7,
+ /** Socket send, @c sendmsg(). */
+ PSI_SOCKET_SENDMSG= 8,
+ /** Socket receive, @c recvmsg(). */
+ PSI_SOCKET_RECVMSG= 9,
+ /** Socket seek, such as @c fseek() or @c seek(). */
+ PSI_SOCKET_SEEK= 10,
+ /** Socket options, as in @c getsockopt() and @c setsockopt(). */
+ PSI_SOCKET_OPT= 11,
+ /** Socket status, as in @c sockatmark() and @c isfdtype(). */
+ PSI_SOCKET_STAT= 12,
+ /** Socket shutdown, as in @c shutdown(). */
+ PSI_SOCKET_SHUTDOWN= 13,
+ /** Socket select, as in @c select() and @c poll(). */
+ PSI_SOCKET_SELECT= 14
+};
+typedef enum PSI_socket_operation PSI_socket_operation;
+
+/**
+ Instrumented mutex key.
+ To instrument a mutex, a mutex key must be obtained using @c register_mutex.
+ Using a zero key always disable the instrumentation.
+*/
+typedef unsigned int PSI_mutex_key;
+
+/**
+ Instrumented rwlock key.
+ To instrument a rwlock, a rwlock key must be obtained
+ using @c register_rwlock.
+ Using a zero key always disable the instrumentation.
+*/
+typedef unsigned int PSI_rwlock_key;
+
+/**
+ Instrumented cond key.
+ To instrument a condition, a condition key must be obtained
+ using @c register_cond.
+ Using a zero key always disable the instrumentation.
+*/
+typedef unsigned int PSI_cond_key;
+
+/**
+ Instrumented thread key.
+ To instrument a thread, a thread key must be obtained
+ using @c register_thread.
+ Using a zero key always disable the instrumentation.
+*/
+typedef unsigned int PSI_thread_key;
+
+/**
+ Instrumented file key.
+ To instrument a file, a file key must be obtained using @c register_file.
+ Using a zero key always disable the instrumentation.
+*/
+#ifndef PSI_FILE_KEY_DEFINED
+typedef unsigned int PSI_file_key;
+#define PSI_FILE_KEY_DEFINED
+#endif
+
+/**
+ Instrumented stage key.
+ To instrument a stage, a stage key must be obtained using @c register_stage.
+ Using a zero key always disable the instrumentation.
+*/
+typedef unsigned int PSI_stage_key;
+
+/**
+ Instrumented statement key.
+ To instrument a statement, a statement key must be obtained using @c register_statement.
+ Using a zero key always disable the instrumentation.
+*/
+typedef unsigned int PSI_statement_key;
+
+/**
+ Instrumented socket key.
+ To instrument a socket, a socket key must be obtained using @c register_socket.
+ Using a zero key always disable the instrumentation.
+*/
+typedef unsigned int PSI_socket_key;
+
+#ifdef HAVE_PSI_1
+
+/**
+ @defgroup Group_PSI_v1 Application Binary Interface, version 1
+ @ingroup Instrumentation_interface
+ @{
+*/
+
+/**
+ Mutex information.
+ @since PSI_VERSION_1
+ This structure is used to register an instrumented mutex.
+*/
+struct PSI_mutex_info_v1
+{
+ /**
+ Pointer to the key assigned to the registered mutex.
+ */
+ PSI_mutex_key *m_key;
+ /**
+ The name of the mutex to register.
+ */
+ const char *m_name;
+ /**
+ The flags of the mutex to register.
+ @sa PSI_FLAG_GLOBAL
+ */
+ int m_flags;
+};
+typedef struct PSI_mutex_info_v1 PSI_mutex_info_v1;
+
+/**
+ Rwlock information.
+ @since PSI_VERSION_1
+ This structure is used to register an instrumented rwlock.
+*/
+struct PSI_rwlock_info_v1
+{
+ /**
+ Pointer to the key assigned to the registered rwlock.
+ */
+ PSI_rwlock_key *m_key;
+ /**
+ The name of the rwlock to register.
+ */
+ const char *m_name;
+ /**
+ The flags of the rwlock to register.
+ @sa PSI_FLAG_GLOBAL
+ */
+ int m_flags;
+};
+typedef struct PSI_rwlock_info_v1 PSI_rwlock_info_v1;
+
+/**
+ Condition information.
+ @since PSI_VERSION_1
+ This structure is used to register an instrumented cond.
+*/
+struct PSI_cond_info_v1
+{
+ /**
+ Pointer to the key assigned to the registered cond.
+ */
+ PSI_cond_key *m_key;
+ /**
+ The name of the cond to register.
+ */
+ const char *m_name;
+ /**
+ The flags of the cond to register.
+ @sa PSI_FLAG_GLOBAL
+ */
+ int m_flags;
+};
+typedef struct PSI_cond_info_v1 PSI_cond_info_v1;
+
+/**
+ Thread instrument information.
+ @since PSI_VERSION_1
+ This structure is used to register an instrumented thread.
+*/
+struct PSI_thread_info_v1
+{
+ /**
+ Pointer to the key assigned to the registered thread.
+ */
+ PSI_thread_key *m_key;
+ /**
+ The name of the thread instrument to register.
+ */
+ const char *m_name;
+ /**
+ The flags of the thread to register.
+ @sa PSI_FLAG_GLOBAL
+ */
+ int m_flags;
+};
+typedef struct PSI_thread_info_v1 PSI_thread_info_v1;
+
+/**
+ File instrument information.
+ @since PSI_VERSION_1
+ This structure is used to register an instrumented file.
+*/
+struct PSI_file_info_v1
+{
+ /**
+ Pointer to the key assigned to the registered file.
+ */
+ PSI_file_key *m_key;
+ /**
+ The name of the file instrument to register.
+ */
+ const char *m_name;
+ /**
+ The flags of the file instrument to register.
+ @sa PSI_FLAG_GLOBAL
+ */
+ int m_flags;
+};
+typedef struct PSI_file_info_v1 PSI_file_info_v1;
+
+/**
+ Stage instrument information.
+ @since PSI_VERSION_1
+ This structure is used to register an instrumented stage.
+*/
+struct PSI_stage_info_v1
+{
+ /** The registered stage key. */
+ PSI_stage_key m_key;
+ /** The name of the stage instrument to register. */
+ const char *m_name;
+ /** The flags of the stage instrument to register. */
+ int m_flags;
+};
+typedef struct PSI_stage_info_v1 PSI_stage_info_v1;
+
+/**
+ Statement instrument information.
+ @since PSI_VERSION_1
+ This structure is used to register an instrumented statement.
+*/
+struct PSI_statement_info_v1
+{
+ /** The registered statement key. */
+ PSI_statement_key m_key;
+ /** The name of the statement instrument to register. */
+ const char *m_name;
+ /** The flags of the statement instrument to register. */
+ int m_flags;
+};
+typedef struct PSI_statement_info_v1 PSI_statement_info_v1;
+
+/**
+ Socket instrument information.
+ @since PSI_VERSION_1
+ This structure is used to register an instrumented socket.
+*/
+struct PSI_socket_info_v1
+{
+ /**
+ Pointer to the key assigned to the registered socket.
+ */
+ PSI_socket_key *m_key;
+ /**
+ The name of the socket instrument to register.
+ */
+ const char *m_name;
+ /**
+ The flags of the socket instrument to register.
+ @sa PSI_FLAG_GLOBAL
+ */
+ int m_flags;
+};
+typedef struct PSI_socket_info_v1 PSI_socket_info_v1;
+
+/**
+ State data storage for @c start_idle_wait_v1_t.
+ This structure provide temporary storage to an idle locker.
+ The content of this structure is considered opaque,
+ the fields are only hints of what an implementation
+ of the psi interface can use.
+ This memory is provided by the instrumented code for performance reasons.
+ @sa start_idle_wait_v1_t.
+*/
+struct PSI_idle_locker_state_v1
+{
+ /** Internal state. */
+ uint m_flags;
+ /** Current thread. */
+ struct PSI_thread *m_thread;
+ /** Timer start. */
+ ulonglong m_timer_start;
+ /** Timer function. */
+ ulonglong (*m_timer)(void);
+ /** Internal data. */
+ void *m_wait;
+};
+typedef struct PSI_idle_locker_state_v1 PSI_idle_locker_state_v1;
+
+/**
+ State data storage for @c start_mutex_wait_v1_t.
+ This structure provide temporary storage to a mutex locker.
+ The content of this structure is considered opaque,
+ the fields are only hints of what an implementation
+ of the psi interface can use.
+ This memory is provided by the instrumented code for performance reasons.
+ @sa start_mutex_wait_v1_t
+*/
+struct PSI_mutex_locker_state_v1
+{
+ /** Internal state. */
+ uint m_flags;
+ /** Current operation. */
+ enum PSI_mutex_operation m_operation;
+ /** Current mutex. */
+ struct PSI_mutex *m_mutex;
+ /** Current thread. */
+ struct PSI_thread *m_thread;
+ /** Timer start. */
+ ulonglong m_timer_start;
+ /** Timer function. */
+ ulonglong (*m_timer)(void);
+ /** Internal data. */
+ void *m_wait;
+};
+typedef struct PSI_mutex_locker_state_v1 PSI_mutex_locker_state_v1;
+
+/**
+ State data storage for @c start_rwlock_rdwait_v1_t, @c start_rwlock_wrwait_v1_t.
+ This structure provide temporary storage to a rwlock locker.
+ The content of this structure is considered opaque,
+ the fields are only hints of what an implementation
+ of the psi interface can use.
+ This memory is provided by the instrumented code for performance reasons.
+ @sa start_rwlock_rdwait_v1_t
+ @sa start_rwlock_wrwait_v1_t
+*/
+struct PSI_rwlock_locker_state_v1
+{
+ /** Internal state. */
+ uint m_flags;
+ /** Current operation. */
+ enum PSI_rwlock_operation m_operation;
+ /** Current rwlock. */
+ struct PSI_rwlock *m_rwlock;
+ /** Current thread. */
+ struct PSI_thread *m_thread;
+ /** Timer start. */
+ ulonglong m_timer_start;
+ /** Timer function. */
+ ulonglong (*m_timer)(void);
+ /** Internal data. */
+ void *m_wait;
+};
+typedef struct PSI_rwlock_locker_state_v1 PSI_rwlock_locker_state_v1;
+
+/**
+ State data storage for @c start_cond_wait_v1_t.
+ This structure provide temporary storage to a condition locker.
+ The content of this structure is considered opaque,
+ the fields are only hints of what an implementation
+ of the psi interface can use.
+ This memory is provided by the instrumented code for performance reasons.
+ @sa start_cond_wait_v1_t
+*/
+struct PSI_cond_locker_state_v1
+{
+ /** Internal state. */
+ uint m_flags;
+ /** Current operation. */
+ enum PSI_cond_operation m_operation;
+ /** Current condition. */
+ struct PSI_cond *m_cond;
+ /** Current mutex. */
+ struct PSI_mutex *m_mutex;
+ /** Current thread. */
+ struct PSI_thread *m_thread;
+ /** Timer start. */
+ ulonglong m_timer_start;
+ /** Timer function. */
+ ulonglong (*m_timer)(void);
+ /** Internal data. */
+ void *m_wait;
+};
+typedef struct PSI_cond_locker_state_v1 PSI_cond_locker_state_v1;
+
+/**
+ State data storage for @c get_thread_file_name_locker_v1_t.
+ This structure provide temporary storage to a file locker.
+ The content of this structure is considered opaque,
+ the fields are only hints of what an implementation
+ of the psi interface can use.
+ This memory is provided by the instrumented code for performance reasons.
+ @sa get_thread_file_name_locker_v1_t
+ @sa get_thread_file_stream_locker_v1_t
+ @sa get_thread_file_descriptor_locker_v1_t
+*/
+struct PSI_file_locker_state_v1
+{
+ /** Internal state. */
+ uint m_flags;
+ /** Current operation. */
+ enum PSI_file_operation m_operation;
+ /** Current file. */
+ struct PSI_file *m_file;
+ /** Current file name. */
+ const char *m_name;
+ /** Current file class. */
+ void *m_class;
+ /** Current thread. */
+ struct PSI_thread *m_thread;
+ /** Operation number of bytes. */
+ size_t m_number_of_bytes;
+ /** Timer start. */
+ ulonglong m_timer_start;
+ /** Timer function. */
+ ulonglong (*m_timer)(void);
+ /** Internal data. */
+ void *m_wait;
+};
+typedef struct PSI_file_locker_state_v1 PSI_file_locker_state_v1;
+
+/**
+ State data storage for @c start_metadata_wait_v1_t.
+ This structure provide temporary storage to a metadata locker.
+ The content of this structure is considered opaque,
+ the fields are only hints of what an implementation
+ of the psi interface can use.
+ This memory is provided by the instrumented code for performance reasons.
+ @sa start_metadata_wait_v1_t
+*/
+struct PSI_metadata_locker_state_v1
+{
+ /** Internal state. */
+ uint m_flags;
+ /** Current metadata lock. */
+ struct PSI_metadata_lock *m_metadata_lock;
+ /** Current thread. */
+ struct PSI_thread *m_thread;
+ /** Timer start. */
+ ulonglong m_timer_start;
+ /** Timer function. */
+ ulonglong (*m_timer)(void);
+ /** Internal data. */
+ void *m_wait;
+};
+typedef struct PSI_metadata_locker_state_v1 PSI_metadata_locker_state_v1;
+
+/* Duplicate of NAME_LEN, to avoid dependency on mysql_com.h */
+#define PSI_SCHEMA_NAME_LEN (64 * 3)
+
+/**
+ State data storage for @c get_thread_statement_locker_v1_t,
+ @c get_thread_statement_locker_v1_t.
+ This structure provide temporary storage to a statement locker.
+ The content of this structure is considered opaque,
+ the fields are only hints of what an implementation
+ of the psi interface can use.
+ This memory is provided by the instrumented code for performance reasons.
+ @sa get_thread_statement_locker_v1_t
+*/
+struct PSI_statement_locker_state_v1
+{
+ /** Discarded flag. */
+ my_bool m_discarded;
+ /** In prepare flag. */
+ my_bool m_in_prepare;
+ /** Metric, no index used flag. */
+ uchar m_no_index_used;
+ /** Metric, no good index used flag. */
+ uchar m_no_good_index_used;
+ /** Internal state. */
+ uint m_flags;
+ /** Instrumentation class. */
+ void *m_class;
+ /** Current thread. */
+ struct PSI_thread *m_thread;
+ /** Timer start. */
+ ulonglong m_timer_start;
+ /** Timer function. */
+ ulonglong (*m_timer)(void);
+ /** Internal data. */
+ void *m_statement;
+ /** Locked time. */
+ ulonglong m_lock_time;
+ /** Rows sent. */
+ ulonglong m_rows_sent;
+ /** Rows examined. */
+ ulonglong m_rows_examined;
+ /** Metric, temporary tables created on disk. */
+ ulong m_created_tmp_disk_tables;
+ /** Metric, temporary tables created. */
+ ulong m_created_tmp_tables;
+ /** Metric, number of select full join. */
+ ulong m_select_full_join;
+ /** Metric, number of select full range join. */
+ ulong m_select_full_range_join;
+ /** Metric, number of select range. */
+ ulong m_select_range;
+ /** Metric, number of select range check. */
+ ulong m_select_range_check;
+ /** Metric, number of select scan. */
+ ulong m_select_scan;
+ /** Metric, number of sort merge passes. */
+ ulong m_sort_merge_passes;
+ /** Metric, number of sort merge. */
+ ulong m_sort_range;
+ /** Metric, number of sort rows. */
+ ulong m_sort_rows;
+ /** Metric, number of sort scans. */
+ ulong m_sort_scan;
+ /** Statement digest. */
+ const struct sql_digest_storage *m_digest;
+ /** Current schema name. */
+ char m_schema_name[PSI_SCHEMA_NAME_LEN];
+ /** Length in bytes of @c m_schema_name. */
+ uint m_schema_name_length;
+ /** Statement character set number. */
+ uint m_cs_number;
+ PSI_sp_share *m_parent_sp_share;
+ PSI_prepared_stmt *m_parent_prepared_stmt;
+};
+typedef struct PSI_statement_locker_state_v1 PSI_statement_locker_state_v1;
+
+/**
+ State data storage for @c get_thread_transaction_locker_v1_t,
+ @c get_thread_transaction_locker_v1_t.
+ This structure provide temporary storage to a transaction locker.
+ The content of this structure is considered opaque,
+ the fields are only hints of what an implementation
+ of the psi interface can use.
+ This memory is provided by the instrumented code for performance reasons.
+ @sa get_thread_transaction_locker_v1_t
+*/
+struct PSI_transaction_locker_state_v1
+{
+ /** Internal state. */
+ uint m_flags;
+ /** Instrumentation class. */
+ void *m_class;
+ /** Current thread. */
+ struct PSI_thread *m_thread;
+ /** Timer start. */
+ ulonglong m_timer_start;
+ /** Timer function. */
+ ulonglong (*m_timer)(void);
+ /** Internal data. */
+ void *m_transaction;
+ /** True if read-only transaction, false if read-write. */
+ my_bool m_read_only;
+ /** True if transaction is autocommit. */
+ my_bool m_autocommit;
+ /** Number of statements. */
+ ulong m_statement_count;
+ /** Total number of savepoints. */
+ ulong m_savepoint_count;
+ /** Number of rollback_to_savepoint. */
+ ulong m_rollback_to_savepoint_count;
+ /** Number of release_savepoint. */
+ ulong m_release_savepoint_count;
+};
+
+typedef struct PSI_transaction_locker_state_v1 PSI_transaction_locker_state_v1;
+
+/**
+ State data storage for @c start_socket_wait_v1_t.
+ This structure provide temporary storage to a socket locker.
+ The content of this structure is considered opaque,
+ the fields are only hints of what an implementation
+ of the psi interface can use.
+ This memory is provided by the instrumented code for performance reasons.
+ @sa start_socket_wait_v1_t
+*/
+struct PSI_socket_locker_state_v1
+{
+ /** Internal state. */
+ uint m_flags;
+ /** Current socket. */
+ struct PSI_socket *m_socket;
+ /** Current thread. */
+ struct PSI_thread *m_thread;
+ /** Operation number of bytes. */
+ size_t m_number_of_bytes;
+ /** Timer start. */
+ ulonglong m_timer_start;
+ /** Timer function. */
+ ulonglong (*m_timer)(void);
+ /** Current operation. */
+ enum PSI_socket_operation m_operation;
+ /** Source file. */
+ const char* m_src_file;
+ /** Source line number. */
+ int m_src_line;
+ /** Internal data. */
+ void *m_wait;
+};
+typedef struct PSI_socket_locker_state_v1 PSI_socket_locker_state_v1;
+
+struct PSI_sp_locker_state_v1
+{
+ /** Internal state. */
+ uint m_flags;
+ /** Current thread. */
+ struct PSI_thread *m_thread;
+ /** Timer start. */
+ ulonglong m_timer_start;
+ /** Timer function. */
+ ulonglong (*m_timer)(void);
+ /** Stored Procedure share. */
+ PSI_sp_share* m_sp_share;
+};
+typedef struct PSI_sp_locker_state_v1 PSI_sp_locker_state_v1;
+
+/* Using typedef to make reuse between PSI_v1 and PSI_v2 easier later. */
+
+/**
+ Mutex registration API.
+ @param category a category name (typically a plugin name)
+ @param info an array of mutex info to register
+ @param count the size of the info array
+*/
+typedef void (*register_mutex_v1_t)
+ (const char *category, struct PSI_mutex_info_v1 *info, int count);
+
+/**
+ Rwlock registration API.
+ @param category a category name (typically a plugin name)
+ @param info an array of rwlock info to register
+ @param count the size of the info array
+*/
+typedef void (*register_rwlock_v1_t)
+ (const char *category, struct PSI_rwlock_info_v1 *info, int count);
+
+/**
+ Cond registration API.
+ @param category a category name (typically a plugin name)
+ @param info an array of cond info to register
+ @param count the size of the info array
+*/
+typedef void (*register_cond_v1_t)
+ (const char *category, struct PSI_cond_info_v1 *info, int count);
+
+/**
+ Thread registration API.
+ @param category a category name (typically a plugin name)
+ @param info an array of thread info to register
+ @param count the size of the info array
+*/
+typedef void (*register_thread_v1_t)
+ (const char *category, struct PSI_thread_info_v1 *info, int count);
+
+/**
+ File registration API.
+ @param category a category name (typically a plugin name)
+ @param info an array of file info to register
+ @param count the size of the info array
+*/
+typedef void (*register_file_v1_t)
+ (const char *category, struct PSI_file_info_v1 *info, int count);
+
+/**
+ Stage registration API.
+ @param category a category name
+ @param info an array of stage info to register
+ @param count the size of the info array
+*/
+typedef void (*register_stage_v1_t)
+ (const char *category, struct PSI_stage_info_v1 **info, int count);
+
+/**
+ Statement registration API.
+ @param category a category name
+ @param info an array of stage info to register
+ @param count the size of the info array
+*/
+typedef void (*register_statement_v1_t)
+ (const char *category, struct PSI_statement_info_v1 *info, int count);
+
+/**
+ Socket registration API.
+ @param category a category name (typically a plugin name)
+ @param info an array of socket info to register
+ @param count the size of the info array
+*/
+typedef void (*register_socket_v1_t)
+ (const char *category, struct PSI_socket_info_v1 *info, int count);
+
+/**
+ Mutex instrumentation initialisation API.
+ @param key the registered mutex key
+ @param identity the address of the mutex itself
+ @return an instrumented mutex
+*/
+typedef struct PSI_mutex* (*init_mutex_v1_t)
+ (PSI_mutex_key key, const void *identity);
+
+/**
+ Mutex instrumentation destruction API.
+ @param mutex the mutex to destroy
+*/
+typedef void (*destroy_mutex_v1_t)(struct PSI_mutex *mutex);
+
+/**
+ Rwlock instrumentation initialisation API.
+ @param key the registered rwlock key
+ @param identity the address of the rwlock itself
+ @return an instrumented rwlock
+*/
+typedef struct PSI_rwlock* (*init_rwlock_v1_t)
+ (PSI_rwlock_key key, const void *identity);
+
+/**
+ Rwlock instrumentation destruction API.
+ @param rwlock the rwlock to destroy
+*/
+typedef void (*destroy_rwlock_v1_t)(struct PSI_rwlock *rwlock);
+
+/**
+ Cond instrumentation initialisation API.
+ @param key the registered key
+ @param identity the address of the rwlock itself
+ @return an instrumented cond
+*/
+typedef struct PSI_cond* (*init_cond_v1_t)
+ (PSI_cond_key key, const void *identity);
+
+/**
+ Cond instrumentation destruction API.
+ @param cond the rcond to destroy
+*/
+typedef void (*destroy_cond_v1_t)(struct PSI_cond *cond);
+
+/**
+ Socket instrumentation initialisation API.
+ @param key the registered mutex key
+ @param socket descriptor
+ @param addr the socket ip address
+ @param addr_len length of socket ip address
+ @return an instrumented socket
+*/
+typedef struct PSI_socket* (*init_socket_v1_t)
+ (PSI_socket_key key, const my_socket *fd,
+ const struct sockaddr *addr, socklen_t addr_len);
+
+/**
+ socket instrumentation destruction API.
+ @param socket the socket to destroy
+*/
+typedef void (*destroy_socket_v1_t)(struct PSI_socket *socket);
+
+/**
+ Acquire a table share instrumentation.
+ @param temporary True for temporary tables
+ @param share The SQL layer table share
+ @return a table share instrumentation, or NULL
+*/
+typedef struct PSI_table_share* (*get_table_share_v1_t)
+ (my_bool temporary, struct TABLE_SHARE *share);
+
+/**
+ Release a table share.
+ @param info the table share to release
+*/
+typedef void (*release_table_share_v1_t)(struct PSI_table_share *share);
+
+/**
+ Drop a table share.
+ @param temporary True for temporary tables
+ @param schema_name the table schema name
+ @param schema_name_length the table schema name length
+ @param table_name the table name
+ @param table_name_length the table name length
+*/
+typedef void (*drop_table_share_v1_t)
+ (my_bool temporary, const char *schema_name, int schema_name_length,
+ const char *table_name, int table_name_length);
+
+/**
+ Open an instrumentation table handle.
+ @param share the table to open
+ @param identity table handle identity
+ @return a table handle, or NULL
+*/
+typedef struct PSI_table* (*open_table_v1_t)
+ (struct PSI_table_share *share, const void *identity);
+
+/**
+ Unbind a table handle from the current thread.
+ This operation happens when an opened table is added to the open table cache.
+ @param table the table to unbind
+*/
+typedef void (*unbind_table_v1_t)
+ (struct PSI_table *table);
+
+/**
+ Rebind a table handle to the current thread.
+ This operation happens when a table from the open table cache
+ is reused for a thread.
+ @param table the table to unbind
+*/
+typedef PSI_table* (*rebind_table_v1_t)
+ (PSI_table_share *share, const void *identity, PSI_table *table);
+
+/**
+ Close an instrumentation table handle.
+ Note that the table handle is invalid after this call.
+ @param table the table handle to close
+*/
+typedef void (*close_table_v1_t)(struct TABLE_SHARE *server_share,
+ struct PSI_table *table);
+
+/**
+ Create a file instrumentation for a created file.
+ This method does not create the file itself, but is used to notify the
+ instrumentation interface that a file was just created.
+ @param key the file instrumentation key for this file
+ @param name the file name
+ @param file the file handle
+*/
+typedef void (*create_file_v1_t)(PSI_file_key key, const char *name,
+ File file);
+
+/**
+ Spawn a thread.
+ This method creates a new thread, with instrumentation.
+ @param key the instrumentation key for this thread
+ @param thread the resulting thread
+ @param attr the thread attributes
+ @param start_routine the thread start routine
+ @param arg the thread start routine argument
+*/
+typedef int (*spawn_thread_v1_t)(PSI_thread_key key,
+ my_thread_handle *thread,
+ const my_thread_attr_t *attr,
+ void *(*start_routine)(void*), void *arg);
+
+/**
+ Create instrumentation for a thread.
+ @param key the registered key
+ @param identity an address typical of the thread
+ @return an instrumented thread
+*/
+typedef struct PSI_thread* (*new_thread_v1_t)
+ (PSI_thread_key key, const void *identity, ulonglong thread_id);
+
+/**
+ Assign a THD to an instrumented thread.
+ @param thread the instrumented thread
+ @param THD the sql layer THD to assign
+*/
+typedef void (*set_thread_THD_v1_t)(struct PSI_thread *thread,
+ THD *thd);
+
+/**
+ Assign an id to an instrumented thread.
+ @param thread the instrumented thread
+ @param id the id to assign
+*/
+typedef void (*set_thread_id_v1_t)(struct PSI_thread *thread,
+ ulonglong id);
+
+/**
+ Assign the current operating system thread id to an instrumented thread.
+ The operating system task id is obtained from @c gettid()
+ @param thread the instrumented thread
+*/
+typedef void (*set_thread_os_id_v1_t)(struct PSI_thread *thread);
+
+/**
+ Get the instrumentation for the running thread.
+ For this function to return a result,
+ the thread instrumentation must have been attached to the
+ running thread using @c set_thread()
+ @return the instrumentation for the running thread
+*/
+typedef struct PSI_thread* (*get_thread_v1_t)(void);
+
+/**
+ Assign a user name to the instrumented thread.
+ @param user the user name
+ @param user_len the user name length
+*/
+typedef void (*set_thread_user_v1_t)(const char *user, int user_len);
+
+/**
+ Assign a user name and host name to the instrumented thread.
+ @param user the user name
+ @param user_len the user name length
+ @param host the host name
+ @param host_len the host name length
+*/
+typedef void (*set_thread_account_v1_t)(const char *user, int user_len,
+ const char *host, int host_len);
+
+/**
+ Assign a current database to the instrumented thread.
+ @param db the database name
+ @param db_len the database name length
+*/
+typedef void (*set_thread_db_v1_t)(const char* db, int db_len);
+
+/**
+ Assign a current command to the instrumented thread.
+ @param command the current command
+*/
+typedef void (*set_thread_command_v1_t)(int command);
+
+/**
+ Assign a connection type to the instrumented thread.
+ @param conn_type the connection type
+*/
+typedef void (*set_connection_type_v1_t)(opaque_vio_type conn_type);
+
+
+/**
+ Assign a start time to the instrumented thread.
+ @param start_time the thread start time
+*/
+typedef void (*set_thread_start_time_v1_t)(time_t start_time);
+
+/**
+ Assign a state to the instrumented thread.
+ @param state the thread state
+*/
+typedef void (*set_thread_state_v1_t)(const char* state);
+
+/**
+ Assign a process info to the instrumented thread.
+ @param info the process into string
+ @param info_len the process into string length
+*/
+typedef void (*set_thread_info_v1_t)(const char* info, uint info_len);
+
+/**
+ Attach a thread instrumentation to the running thread.
+ In case of thread pools, this method should be called when
+ a worker thread picks a work item and runs it.
+ Also, this method should be called if the instrumented code does not
+ keep the pointer returned by @c new_thread() and relies on @c get_thread()
+ instead.
+ @param thread the thread instrumentation
+*/
+typedef void (*set_thread_v1_t)(struct PSI_thread *thread);
+
+/**
+ Assign the remote (peer) port to the instrumented thread.
+
+ @param thread pointer to the thread instrumentation
+ @param port the remote port
+*/
+typedef void (*set_thread_peer_port_v1_t)(PSI_thread *thread,
+ unsigned int port);
+
+/** Delete the current thread instrumentation. */
+typedef void (*delete_current_thread_v1_t)(void);
+
+/** Delete a thread instrumentation. */
+typedef void (*delete_thread_v1_t)(struct PSI_thread *thread);
+
+/**
+ Get a file instrumentation locker, for opening or creating a file.
+ @param state data storage for the locker
+ @param key the file instrumentation key
+ @param op the operation to perform
+ @param name the file name
+ @param identity a pointer representative of this file.
+ @return a file locker, or NULL
+*/
+typedef struct PSI_file_locker* (*get_thread_file_name_locker_v1_t)
+ (struct PSI_file_locker_state_v1 *state,
+ PSI_file_key key, enum PSI_file_operation op, const char *name,
+ const void *identity);
+
+/**
+ Get a file stream instrumentation locker.
+ @param state data storage for the locker
+ @param file the file stream to access
+ @param op the operation to perform
+ @return a file locker, or NULL
+*/
+typedef struct PSI_file_locker* (*get_thread_file_stream_locker_v1_t)
+ (struct PSI_file_locker_state_v1 *state,
+ struct PSI_file *file, enum PSI_file_operation op);
+
+/**
+ Get a file instrumentation locker.
+ @param state data storage for the locker
+ @param file the file descriptor to access
+ @param op the operation to perform
+ @return a file locker, or NULL
+*/
+typedef struct PSI_file_locker* (*get_thread_file_descriptor_locker_v1_t)
+ (struct PSI_file_locker_state_v1 *state,
+ File file, enum PSI_file_operation op);
+
+/**
+ Record a mutex instrumentation unlock event.
+ @param mutex the mutex instrumentation
+*/
+typedef void (*unlock_mutex_v1_t)
+ (struct PSI_mutex *mutex);
+
+/**
+ Record a rwlock instrumentation unlock event.
+ @param rwlock the rwlock instrumentation
+*/
+typedef void (*unlock_rwlock_v1_t)
+ (struct PSI_rwlock *rwlock);
+
+/**
+ Record a condition instrumentation signal event.
+ @param cond the cond instrumentation
+*/
+typedef void (*signal_cond_v1_t)
+ (struct PSI_cond *cond);
+
+/**
+ Record a condition instrumentation broadcast event.
+ @param cond the cond instrumentation
+*/
+typedef void (*broadcast_cond_v1_t)
+ (struct PSI_cond *cond);
+
+/**
+ Record an idle instrumentation wait start event.
+ @param state data storage for the locker
+ @param file the source file name
+ @param line the source line number
+ @return an idle locker, or NULL
+*/
+typedef struct PSI_idle_locker* (*start_idle_wait_v1_t)
+ (struct PSI_idle_locker_state_v1 *state, const char *src_file, uint src_line);
+
+/**
+ Record an idle instrumentation wait end event.
+ @param locker a thread locker for the running thread
+*/
+typedef void (*end_idle_wait_v1_t)
+ (struct PSI_idle_locker *locker);
+
+/**
+ Record a mutex instrumentation wait start event.
+ @param state data storage for the locker
+ @param mutex the instrumented mutex to lock
+ @param op the operation to perform
+ @param file the source file name
+ @param line the source line number
+ @return a mutex locker, or NULL
+*/
+typedef struct PSI_mutex_locker* (*start_mutex_wait_v1_t)
+ (struct PSI_mutex_locker_state_v1 *state,
+ struct PSI_mutex *mutex,
+ enum PSI_mutex_operation op,
+ const char *src_file, uint src_line);
+
+/**
+ Record a mutex instrumentation wait end event.
+ @param locker a thread locker for the running thread
+ @param rc the wait operation return code
+*/
+typedef void (*end_mutex_wait_v1_t)
+ (struct PSI_mutex_locker *locker, int rc);
+
+/**
+ Record a rwlock instrumentation read wait start event.
+ @param locker a thread locker for the running thread
+ @param must must block: 1 for lock, 0 for trylock
+*/
+typedef struct PSI_rwlock_locker* (*start_rwlock_rdwait_v1_t)
+ (struct PSI_rwlock_locker_state_v1 *state,
+ struct PSI_rwlock *rwlock,
+ enum PSI_rwlock_operation op,
+ const char *src_file, uint src_line);
+
+/**
+ Record a rwlock instrumentation read wait end event.
+ @param locker a thread locker for the running thread
+ @param rc the wait operation return code
+*/
+typedef void (*end_rwlock_rdwait_v1_t)
+ (struct PSI_rwlock_locker *locker, int rc);
+
+/**
+ Record a rwlock instrumentation write wait start event.
+ @param locker a thread locker for the running thread
+ @param must must block: 1 for lock, 0 for trylock
+*/
+typedef struct PSI_rwlock_locker* (*start_rwlock_wrwait_v1_t)
+ (struct PSI_rwlock_locker_state_v1 *state,
+ struct PSI_rwlock *rwlock,
+ enum PSI_rwlock_operation op,
+ const char *src_file, uint src_line);
+
+/**
+ Record a rwlock instrumentation write wait end event.
+ @param locker a thread locker for the running thread
+ @param rc the wait operation return code
+*/
+typedef void (*end_rwlock_wrwait_v1_t)
+ (struct PSI_rwlock_locker *locker, int rc);
+
+/**
+ Record a condition instrumentation wait start event.
+ @param locker a thread locker for the running thread
+ @param must must block: 1 for wait, 0 for timedwait
+*/
+typedef struct PSI_cond_locker* (*start_cond_wait_v1_t)
+ (struct PSI_cond_locker_state_v1 *state,
+ struct PSI_cond *cond,
+ struct PSI_mutex *mutex,
+ enum PSI_cond_operation op,
+ const char *src_file, uint src_line);
+
+/**
+ Record a condition instrumentation wait end event.
+ @param locker a thread locker for the running thread
+ @param rc the wait operation return code
+*/
+typedef void (*end_cond_wait_v1_t)
+ (struct PSI_cond_locker *locker, int rc);
+
+/**
+ Record a table instrumentation io wait start event.
+ @param locker a table locker for the running thread
+ @param file the source file name
+ @param line the source line number
+*/
+typedef struct PSI_table_locker* (*start_table_io_wait_v1_t)
+ (struct PSI_table_locker_state *state,
+ struct PSI_table *table,
+ enum PSI_table_io_operation op,
+ uint index,
+ const char *src_file, uint src_line);
+
+/**
+ Record a table instrumentation io wait end event.
+ @param locker a table locker for the running thread
+ @param numrows the number of rows involved in io
+*/
+typedef void (*end_table_io_wait_v1_t)
+ (struct PSI_table_locker *locker,
+ ulonglong numrows);
+
+/**
+ Record a table instrumentation lock wait start event.
+ @param locker a table locker for the running thread
+ @param file the source file name
+ @param line the source line number
+*/
+typedef struct PSI_table_locker* (*start_table_lock_wait_v1_t)
+ (struct PSI_table_locker_state *state,
+ struct PSI_table *table,
+ enum PSI_table_lock_operation op,
+ ulong flags,
+ const char *src_file, uint src_line);
+
+/**
+ Record a table instrumentation lock wait end event.
+ @param locker a table locker for the running thread
+*/
+typedef void (*end_table_lock_wait_v1_t)(struct PSI_table_locker *locker);
+
+typedef void (*unlock_table_v1_t)(struct PSI_table *table);
+
+/**
+ Start a file instrumentation open operation.
+ @param locker the file locker
+ @param op the operation to perform
+ @param src_file the source file name
+ @param src_line the source line number
+*/
+typedef void (*start_file_open_wait_v1_t)
+ (struct PSI_file_locker *locker, const char *src_file, uint src_line);
+
+/**
+ End a file instrumentation open operation, for file streams.
+ @param locker the file locker.
+ @param result the opened file (NULL indicates failure, non NULL success).
+ @return an instrumented file handle
+*/
+typedef struct PSI_file* (*end_file_open_wait_v1_t)
+ (struct PSI_file_locker *locker, void *result);
+
+/**
+ End a file instrumentation open operation, for non stream files.
+ @param locker the file locker.
+ @param file the file number assigned by open() or create() for this file.
+*/
+typedef void (*end_file_open_wait_and_bind_to_descriptor_v1_t)
+ (struct PSI_file_locker *locker, File file);
+
+/**
+ End a file instrumentation open operation, for non stream temporary files.
+ @param locker the file locker.
+ @param file the file number assigned by open() or create() for this file.
+ @param filename the file name generated during temporary file creation.
+*/
+typedef void (*end_temp_file_open_wait_and_bind_to_descriptor_v1_t)
+ (struct PSI_file_locker *locker, File file, const char *filename);
+
+/**
+ Record a file instrumentation start event.
+ @param locker a file locker for the running thread
+ @param op file operation to be performed
+ @param count the number of bytes requested, or 0 if not applicable
+ @param src_file the source file name
+ @param src_line the source line number
+*/
+typedef void (*start_file_wait_v1_t)
+ (struct PSI_file_locker *locker, size_t count,
+ const char *src_file, uint src_line);
+
+/**
+ Record a file instrumentation end event.
+ Note that for file close operations, the instrumented file handle
+ associated with the file (which was provided to obtain a locker)
+ is invalid after this call.
+ @param locker a file locker for the running thread
+ @param count the number of bytes actually used in the operation,
+ or 0 if not applicable, or -1 if the operation failed
+ @sa get_thread_file_name_locker
+ @sa get_thread_file_stream_locker
+ @sa get_thread_file_descriptor_locker
+*/
+typedef void (*end_file_wait_v1_t)
+ (struct PSI_file_locker *locker, size_t count);
+
+/**
+ Start a file instrumentation close operation.
+ @param locker the file locker
+ @param op the operation to perform
+ @param src_file the source file name
+ @param src_line the source line number
+*/
+typedef void (*start_file_close_wait_v1_t)
+ (struct PSI_file_locker *locker, const char *src_file, uint src_line);
+
+/**
+ End a file instrumentation close operation.
+ @param locker the file locker.
+ @param rc the close operation return code (0 for success).
+ @return an instrumented file handle
+*/
+typedef void (*end_file_close_wait_v1_t)
+ (struct PSI_file_locker *locker, int rc);
+
+/**
+ Rename a file instrumentation close operation.
+ @param locker the file locker.
+ @param old_name name of the file to be renamed.
+ @param new_name name of the file after rename.
+ @param rc the rename operation return code (0 for success).
+*/
+typedef void (*end_file_rename_wait_v1_t)
+ (struct PSI_file_locker *locker, const char *old_name,
+ const char *new_name, int rc);
+
+/**
+ Start a new stage, and implicitly end the previous stage.
+ @param key the key of the new stage
+ @param src_file the source file name
+ @param src_line the source line number
+ @return the new stage progress
+*/
+typedef PSI_stage_progress* (*start_stage_v1_t)
+ (PSI_stage_key key, const char *src_file, int src_line);
+
+typedef PSI_stage_progress* (*get_current_stage_progress_v1_t)(void);
+
+/** End the current stage. */
+typedef void (*end_stage_v1_t) (void);
+
+/**
+ Get a statement instrumentation locker.
+ @param state data storage for the locker
+ @param key the statement instrumentation key
+ @param charset client character set
+ @return a statement locker, or NULL
+*/
+typedef struct PSI_statement_locker* (*get_thread_statement_locker_v1_t)
+ (struct PSI_statement_locker_state_v1 *state,
+ PSI_statement_key key, const void *charset, PSI_sp_share *sp_share);
+
+/**
+ Refine a statement locker to a more specific key.
+ Note that only events declared mutable can be refined.
+ @param the statement locker for the current event
+ @param key the new key for the event
+ @sa PSI_FLAG_MUTABLE
+*/
+typedef struct PSI_statement_locker* (*refine_statement_v1_t)
+ (struct PSI_statement_locker *locker,
+ PSI_statement_key key);
+
+/**
+ Start a new statement event.
+ @param locker the statement locker for this event
+ @param db the active database name for this statement
+ @param db_length the active database name length for this statement
+ @param src_file source file name
+ @param src_line source line number
+*/
+typedef void (*start_statement_v1_t)
+ (struct PSI_statement_locker *locker,
+ const char *db, uint db_length,
+ const char *src_file, uint src_line);
+
+/**
+ Set the statement text for a statement event.
+ @param locker the current statement locker
+ @param text the statement text
+ @param text_len the statement text length
+*/
+typedef void (*set_statement_text_v1_t)
+ (struct PSI_statement_locker *locker,
+ const char *text, uint text_len);
+
+/**
+ Set a statement event lock time.
+ @param locker the statement locker
+ @param lock_time the locked time, in microseconds
+*/
+typedef void (*set_statement_lock_time_t)
+ (struct PSI_statement_locker *locker, ulonglong lock_time);
+
+/**
+ Set a statement event rows sent metric.
+ @param locker the statement locker
+ @param count the number of rows sent
+*/
+typedef void (*set_statement_rows_sent_t)
+ (struct PSI_statement_locker *locker, ulonglong count);
+
+/**
+ Set a statement event rows examined metric.
+ @param locker the statement locker
+ @param count the number of rows examined
+*/
+typedef void (*set_statement_rows_examined_t)
+ (struct PSI_statement_locker *locker, ulonglong count);
+
+/**
+ Increment a statement event "created tmp disk tables" metric.
+ @param locker the statement locker
+ @param count the metric increment value
+*/
+typedef void (*inc_statement_created_tmp_disk_tables_t)
+ (struct PSI_statement_locker *locker, ulong count);
+
+/**
+ Increment a statement event "created tmp tables" metric.
+ @param locker the statement locker
+ @param count the metric increment value
+*/
+typedef void (*inc_statement_created_tmp_tables_t)
+ (struct PSI_statement_locker *locker, ulong count);
+
+/**
+ Increment a statement event "select full join" metric.
+ @param locker the statement locker
+ @param count the metric increment value
+*/
+typedef void (*inc_statement_select_full_join_t)
+ (struct PSI_statement_locker *locker, ulong count);
+
+/**
+ Increment a statement event "select full range join" metric.
+ @param locker the statement locker
+ @param count the metric increment value
+*/
+typedef void (*inc_statement_select_full_range_join_t)
+ (struct PSI_statement_locker *locker, ulong count);
+
+/**
+ Increment a statement event "select range join" metric.
+ @param locker the statement locker
+ @param count the metric increment value
+*/
+typedef void (*inc_statement_select_range_t)
+ (struct PSI_statement_locker *locker, ulong count);
+
+/**
+ Increment a statement event "select range check" metric.
+ @param locker the statement locker
+ @param count the metric increment value
+*/
+typedef void (*inc_statement_select_range_check_t)
+ (struct PSI_statement_locker *locker, ulong count);
+
+/**
+ Increment a statement event "select scan" metric.
+ @param locker the statement locker
+ @param count the metric increment value
+*/
+typedef void (*inc_statement_select_scan_t)
+ (struct PSI_statement_locker *locker, ulong count);
+
+/**
+ Increment a statement event "sort merge passes" metric.
+ @param locker the statement locker
+ @param count the metric increment value
+*/
+typedef void (*inc_statement_sort_merge_passes_t)
+ (struct PSI_statement_locker *locker, ulong count);
+
+/**
+ Increment a statement event "sort range" metric.
+ @param locker the statement locker
+ @param count the metric increment value
+*/
+typedef void (*inc_statement_sort_range_t)
+ (struct PSI_statement_locker *locker, ulong count);
+
+/**
+ Increment a statement event "sort rows" metric.
+ @param locker the statement locker
+ @param count the metric increment value
+*/
+typedef void (*inc_statement_sort_rows_t)
+ (struct PSI_statement_locker *locker, ulong count);
+
+/**
+ Increment a statement event "sort scan" metric.
+ @param locker the statement locker
+ @param count the metric increment value
+*/
+typedef void (*inc_statement_sort_scan_t)
+ (struct PSI_statement_locker *locker, ulong count);
+
+/**
+ Set a statement event "no index used" metric.
+ @param locker the statement locker
+ @param count the metric value
+*/
+typedef void (*set_statement_no_index_used_t)
+ (struct PSI_statement_locker *locker);
+
+/**
+ Set a statement event "no good index used" metric.
+ @param locker the statement locker
+ @param count the metric value
+*/
+typedef void (*set_statement_no_good_index_used_t)
+ (struct PSI_statement_locker *locker);
+
+/**
+ End a statement event.
+ @param locker the statement locker
+ @param stmt_da the statement diagnostics area.
+ @sa Diagnostics_area
+*/
+typedef void (*end_statement_v1_t)
+ (struct PSI_statement_locker *locker, void *stmt_da);
+
+/**
+ Get a transaction instrumentation locker.
+ @param state data storage for the locker
+ @param xid the xid for this transaction
+ @param trxid the InnoDB transaction id
+ @param iso_level isolation level for this transaction
+ @param read_only true if transaction access mode is read-only
+ @param autocommit true if transaction is autocommit
+ @return a transaction locker, or NULL
+*/
+typedef struct PSI_transaction_locker* (*get_thread_transaction_locker_v1_t)
+ (struct PSI_transaction_locker_state_v1 *state, const void *xid,
+ const ulonglong *trxid, int isolation_level, my_bool read_only,
+ my_bool autocommit);
+
+/**
+ Start a new transaction event.
+ @param locker the transaction locker for this event
+ @param src_file source file name
+ @param src_line source line number
+*/
+typedef void (*start_transaction_v1_t)
+ (struct PSI_transaction_locker *locker,
+ const char *src_file, uint src_line);
+
+/**
+ Set the transaction xid.
+ @param locker the transaction locker for this event
+ @param xid the id of the XA transaction
+ #param xa_state is the state of the XA transaction
+*/
+typedef void (*set_transaction_xid_v1_t)
+ (struct PSI_transaction_locker *locker,
+ const void *xid, int xa_state);
+
+/**
+ Set the state of the XA transaction.
+ @param locker the transaction locker for this event
+ @param xa_state the new state of the xa transaction
+*/
+typedef void (*set_transaction_xa_state_v1_t)
+ (struct PSI_transaction_locker *locker,
+ int xa_state);
+
+/**
+ Set the transaction gtid.
+ @param locker the transaction locker for this event
+ @param sid the source id for the transaction, mapped from sidno
+ @param gtid_spec the gtid specifier for the transaction
+*/
+typedef void (*set_transaction_gtid_v1_t)
+ (struct PSI_transaction_locker *locker,
+ const void *sid, const void *gtid_spec);
+
+/**
+ Set the transaction trx_id.
+ @param locker the transaction locker for this event
+ @param trxid the storage engine transaction ID
+*/
+typedef void (*set_transaction_trxid_v1_t)
+ (struct PSI_transaction_locker *locker,
+ const ulonglong *trxid);
+
+/**
+ Increment a transaction event savepoint count.
+ @param locker the transaction locker
+ @param count the increment value
+*/
+typedef void (*inc_transaction_savepoints_v1_t)
+ (struct PSI_transaction_locker *locker, ulong count);
+
+/**
+ Increment a transaction event rollback to savepoint count.
+ @param locker the transaction locker
+ @param count the increment value
+*/
+typedef void (*inc_transaction_rollback_to_savepoint_v1_t)
+ (struct PSI_transaction_locker *locker, ulong count);
+
+/**
+ Increment a transaction event release savepoint count.
+ @param locker the transaction locker
+ @param count the increment value
+*/
+typedef void (*inc_transaction_release_savepoint_v1_t)
+ (struct PSI_transaction_locker *locker, ulong count);
+
+/**
+ Commit or rollback the transaction.
+ @param locker the transaction locker for this event
+ @param commit true if transaction was committed, false if rolled back
+*/
+typedef void (*end_transaction_v1_t)
+ (struct PSI_transaction_locker *locker,
+ my_bool commit);
+
+/**
+ Record a socket instrumentation start event.
+ @param locker a socket locker for the running thread
+ @param op socket operation to be performed
+ @param count the number of bytes requested, or 0 if not applicable
+ @param src_file the source file name
+ @param src_line the source line number
+*/
+typedef struct PSI_socket_locker* (*start_socket_wait_v1_t)
+ (struct PSI_socket_locker_state_v1 *state,
+ struct PSI_socket *socket,
+ enum PSI_socket_operation op,
+ size_t count,
+ const char *src_file, uint src_line);
+
+/**
+ Record a socket instrumentation end event.
+ Note that for socket close operations, the instrumented socket handle
+ associated with the socket (which was provided to obtain a locker)
+ is invalid after this call.
+ @param locker a socket locker for the running thread
+ @param count the number of bytes actually used in the operation,
+ or 0 if not applicable, or -1 if the operation failed
+ @sa get_thread_socket_locker
+*/
+typedef void (*end_socket_wait_v1_t)
+ (struct PSI_socket_locker *locker, size_t count);
+
+/**
+ Set the socket state for an instrumented socket.
+ @param socket the instrumented socket
+ @param state socket state
+ */
+typedef void (*set_socket_state_v1_t)(struct PSI_socket *socket,
+ enum PSI_socket_state state);
+
+/**
+ Set the socket info for an instrumented socket.
+ @param socket the instrumented socket
+ @param fd the socket descriptor
+ @param addr the socket ip address
+ @param addr_len length of socket ip address
+ @param thread_id associated thread id
+*/
+typedef void (*set_socket_info_v1_t)(struct PSI_socket *socket,
+ const my_socket *fd,
+ const struct sockaddr *addr,
+ socklen_t addr_len);
+
+/**
+ Bind a socket to the thread that owns it.
+ @param socket instrumented socket
+*/
+typedef void (*set_socket_thread_owner_v1_t)(struct PSI_socket *socket);
+
+/**
+ Get a prepare statement.
+ @param locker a statement locker for the running thread.
+*/
+typedef PSI_prepared_stmt* (*create_prepared_stmt_v1_t)
+ (void *identity, uint stmt_id, PSI_statement_locker *locker,
+ const char *stmt_name, size_t stmt_name_length,
+ const char *name, size_t length);
+
+/**
+ destroy a prepare statement.
+ @param prepared_stmt prepared statement.
+*/
+typedef void (*destroy_prepared_stmt_v1_t)
+ (PSI_prepared_stmt *prepared_stmt);
+
+/**
+ repreare a prepare statement.
+ @param prepared_stmt prepared statement.
+*/
+typedef void (*reprepare_prepared_stmt_v1_t)
+ (PSI_prepared_stmt *prepared_stmt);
+
+/**
+ Record a prepare statement instrumentation execute event.
+ @param locker a statement locker for the running thread.
+ @param prepared_stmt prepared statement.
+*/
+typedef void (*execute_prepared_stmt_v1_t)
+ (PSI_statement_locker *locker, PSI_prepared_stmt* prepared_stmt);
+
+/**
+ Set the statement text for a prepared statment event.
+ @param prepared_stmt prepared statement.
+ @param text the prepared statement text
+ @param text_len the prepared statement text length
+*/
+typedef void (*set_prepared_stmt_text_v1_t)(PSI_prepared_stmt *prepared_stmt,
+ const char *text,
+ uint text_len);
+/**
+ Get a digest locker for the current statement.
+ @param locker a statement locker for the running thread
+*/
+typedef struct PSI_digest_locker * (*digest_start_v1_t)
+ (struct PSI_statement_locker *locker);
+
+/**
+ Add a token to the current digest instrumentation.
+ @param locker a digest locker for the current statement
+ @param token the lexical token to add
+ @param yylval the lexical token attributes
+*/
+typedef void (*digest_end_v1_t)
+ (struct PSI_digest_locker *locker, const struct sql_digest_storage *digest);
+
+typedef PSI_sp_locker* (*start_sp_v1_t)
+ (struct PSI_sp_locker_state_v1 *state, struct PSI_sp_share* sp_share);
+
+typedef void (*end_sp_v1_t)
+ (struct PSI_sp_locker *locker);
+
+typedef void (*drop_sp_v1_t)
+ (uint object_type,
+ const char *schema_name, uint schema_name_length,
+ const char *object_name, uint object_name_length);
+
+/**
+ Acquire a sp share instrumentation.
+ @param type of stored program
+ @param schema name of stored program
+ @param name of stored program
+ @return a stored program share instrumentation, or NULL
+*/
+typedef struct PSI_sp_share* (*get_sp_share_v1_t)
+ (uint object_type,
+ const char *schema_name, uint schema_name_length,
+ const char *object_name, uint object_name_length);
+
+/**
+ Release a stored program share.
+ @param info the stored program share to release
+*/
+typedef void (*release_sp_share_v1_t)(struct PSI_sp_share *share);
+
+typedef PSI_metadata_lock* (*create_metadata_lock_v1_t)
+ (void *identity,
+ const MDL_key *key,
+ opaque_mdl_type mdl_type,
+ opaque_mdl_duration mdl_duration,
+ opaque_mdl_status mdl_status,
+ const char *src_file,
+ uint src_line);
+
+typedef void (*set_metadata_lock_status_v1_t)(PSI_metadata_lock *lock,
+ opaque_mdl_status mdl_status);
+
+typedef void (*destroy_metadata_lock_v1_t)(PSI_metadata_lock *lock);
+
+typedef struct PSI_metadata_locker* (*start_metadata_wait_v1_t)
+ (struct PSI_metadata_locker_state_v1 *state,
+ struct PSI_metadata_lock *mdl,
+ const char *src_file, uint src_line);
+
+typedef void (*end_metadata_wait_v1_t)
+ (struct PSI_metadata_locker *locker, int rc);
+
+/**
+ Stores an array of connection attributes
+ @param buffer char array of length encoded connection attributes
+ in network format
+ @param length length of the data in buffer
+ @param from_cs charset in which @c buffer is encoded
+ @return state
+ @retval non_0 attributes truncated
+ @retval 0 stored the attribute
+*/
+typedef int (*set_thread_connect_attrs_v1_t)(const char *buffer, uint length,
+ const void *from_cs);
+
+/**
+ Performance Schema Interface, version 1.
+ @since PSI_VERSION_1
+*/
+struct PSI_v1
+{
+ /** @sa register_mutex_v1_t. */
+ register_mutex_v1_t register_mutex;
+ /** @sa register_rwlock_v1_t. */
+ register_rwlock_v1_t register_rwlock;
+ /** @sa register_cond_v1_t. */
+ register_cond_v1_t register_cond;
+ /** @sa register_thread_v1_t. */
+ register_thread_v1_t register_thread;
+ /** @sa register_file_v1_t. */
+ register_file_v1_t register_file;
+ /** @sa register_stage_v1_t. */
+ register_stage_v1_t register_stage;
+ /** @sa register_statement_v1_t. */
+ register_statement_v1_t register_statement;
+ /** @sa register_socket_v1_t. */
+ register_socket_v1_t register_socket;
+ /** @sa init_mutex_v1_t. */
+ init_mutex_v1_t init_mutex;
+ /** @sa destroy_mutex_v1_t. */
+ destroy_mutex_v1_t destroy_mutex;
+ /** @sa init_rwlock_v1_t. */
+ init_rwlock_v1_t init_rwlock;
+ /** @sa destroy_rwlock_v1_t. */
+ destroy_rwlock_v1_t destroy_rwlock;
+ /** @sa init_cond_v1_t. */
+ init_cond_v1_t init_cond;
+ /** @sa destroy_cond_v1_t. */
+ destroy_cond_v1_t destroy_cond;
+ /** @sa init_socket_v1_t. */
+ init_socket_v1_t init_socket;
+ /** @sa destroy_socket_v1_t. */
+ destroy_socket_v1_t destroy_socket;
+
+ /** @sa get_table_share_v1_t. */
+ get_table_share_v1_t get_table_share;
+ /** @sa release_table_share_v1_t. */
+ release_table_share_v1_t release_table_share;
+ /** @sa drop_table_share_v1_t. */
+ drop_table_share_v1_t drop_table_share;
+ /** @sa open_table_v1_t. */
+ open_table_v1_t open_table;
+ /** @sa unbind_table_v1_t. */
+ unbind_table_v1_t unbind_table;
+ /** @sa rebind_table_v1_t. */
+ rebind_table_v1_t rebind_table;
+ /** @sa close_table_v1_t. */
+ close_table_v1_t close_table;
+ /** @sa create_file_v1_t. */
+ create_file_v1_t create_file;
+ /** @sa spawn_thread_v1_t. */
+ spawn_thread_v1_t spawn_thread;
+ /** @sa new_thread_v1_t. */
+ new_thread_v1_t new_thread;
+ /** @sa set_thread_id_v1_t. */
+ set_thread_id_v1_t set_thread_id;
+ /** @sa set_thread_THD_v1_t. */
+ set_thread_THD_v1_t set_thread_THD;
+ /** @sa set_thread_os_id_v1_t. */
+ set_thread_os_id_v1_t set_thread_os_id;
+ /** @sa get_thread_v1_t. */
+ get_thread_v1_t get_thread;
+ /** @sa set_thread_user_v1_t. */
+ set_thread_user_v1_t set_thread_user;
+ /** @sa set_thread_account_v1_t. */
+ set_thread_account_v1_t set_thread_account;
+ /** @sa set_thread_db_v1_t. */
+ set_thread_db_v1_t set_thread_db;
+ /** @sa set_thread_command_v1_t. */
+ set_thread_command_v1_t set_thread_command;
+ /** @sa set_connection_type_v1_t. */
+ set_connection_type_v1_t set_connection_type;
+ /** @sa set_thread_start_time_v1_t. */
+ set_thread_start_time_v1_t set_thread_start_time;
+ /** @sa set_thread_state_v1_t. */
+ set_thread_state_v1_t set_thread_state;
+ /** @sa set_thread_info_v1_t. */
+ set_thread_info_v1_t set_thread_info;
+ /** @sa set_thread_v1_t. */
+ set_thread_v1_t set_thread;
+ /** @sa delete_current_thread_v1_t. */
+ delete_current_thread_v1_t delete_current_thread;
+ /** @sa delete_thread_v1_t. */
+ delete_thread_v1_t delete_thread;
+ /** @sa get_thread_file_name_locker_v1_t. */
+ get_thread_file_name_locker_v1_t get_thread_file_name_locker;
+ /** @sa get_thread_file_stream_locker_v1_t. */
+ get_thread_file_stream_locker_v1_t get_thread_file_stream_locker;
+ /** @sa get_thread_file_descriptor_locker_v1_t. */
+ get_thread_file_descriptor_locker_v1_t get_thread_file_descriptor_locker;
+ /** @sa unlock_mutex_v1_t. */
+ unlock_mutex_v1_t unlock_mutex;
+ /** @sa unlock_rwlock_v1_t. */
+ unlock_rwlock_v1_t unlock_rwlock;
+ /** @sa signal_cond_v1_t. */
+ signal_cond_v1_t signal_cond;
+ /** @sa broadcast_cond_v1_t. */
+ broadcast_cond_v1_t broadcast_cond;
+ /** @sa start_idle_wait_v1_t. */
+ start_idle_wait_v1_t start_idle_wait;
+ /** @sa end_idle_wait_v1_t. */
+ end_idle_wait_v1_t end_idle_wait;
+ /** @sa start_mutex_wait_v1_t. */
+ start_mutex_wait_v1_t start_mutex_wait;
+ /** @sa end_mutex_wait_v1_t. */
+ end_mutex_wait_v1_t end_mutex_wait;
+ /** @sa start_rwlock_rdwait_v1_t. */
+ start_rwlock_rdwait_v1_t start_rwlock_rdwait;
+ /** @sa end_rwlock_rdwait_v1_t. */
+ end_rwlock_rdwait_v1_t end_rwlock_rdwait;
+ /** @sa start_rwlock_wrwait_v1_t. */
+ start_rwlock_wrwait_v1_t start_rwlock_wrwait;
+ /** @sa end_rwlock_wrwait_v1_t. */
+ end_rwlock_wrwait_v1_t end_rwlock_wrwait;
+ /** @sa start_cond_wait_v1_t. */
+ start_cond_wait_v1_t start_cond_wait;
+ /** @sa end_cond_wait_v1_t. */
+ end_cond_wait_v1_t end_cond_wait;
+ /** @sa start_table_io_wait_v1_t. */
+ start_table_io_wait_v1_t start_table_io_wait;
+ /** @sa end_table_io_wait_v1_t. */
+ end_table_io_wait_v1_t end_table_io_wait;
+ /** @sa start_table_lock_wait_v1_t. */
+ start_table_lock_wait_v1_t start_table_lock_wait;
+ /** @sa end_table_lock_wait_v1_t. */
+ end_table_lock_wait_v1_t end_table_lock_wait;
+ /** @sa start_file_open_wait_v1_t. */
+ start_file_open_wait_v1_t start_file_open_wait;
+ /** @sa end_file_open_wait_v1_t. */
+ end_file_open_wait_v1_t end_file_open_wait;
+ /** @sa end_file_open_wait_and_bind_to_descriptor_v1_t. */
+ end_file_open_wait_and_bind_to_descriptor_v1_t
+ end_file_open_wait_and_bind_to_descriptor;
+ /** @sa end_temp_file_open_wait_and_bind_to_descriptor_v1_t. */
+ end_temp_file_open_wait_and_bind_to_descriptor_v1_t
+ end_temp_file_open_wait_and_bind_to_descriptor;
+ /** @sa start_file_wait_v1_t. */
+ start_file_wait_v1_t start_file_wait;
+ /** @sa end_file_wait_v1_t. */
+ end_file_wait_v1_t end_file_wait;
+ /** @sa start_file_close_wait_v1_t. */
+ start_file_close_wait_v1_t start_file_close_wait;
+ /** @sa end_file_close_wait_v1_t. */
+ end_file_close_wait_v1_t end_file_close_wait;
+ /** @sa rename_file_close_wait_v1_t. */
+ end_file_rename_wait_v1_t end_file_rename_wait;
+ /** @sa start_stage_v1_t. */
+ start_stage_v1_t start_stage;
+ /** @sa get_current_stage_progress_v1_t. */
+ get_current_stage_progress_v1_t get_current_stage_progress;
+ /** @sa end_stage_v1_t. */
+ end_stage_v1_t end_stage;
+ /** @sa get_thread_statement_locker_v1_t. */
+ get_thread_statement_locker_v1_t get_thread_statement_locker;
+ /** @sa refine_statement_v1_t. */
+ refine_statement_v1_t refine_statement;
+ /** @sa start_statement_v1_t. */
+ start_statement_v1_t start_statement;
+ /** @sa set_statement_text_v1_t. */
+ set_statement_text_v1_t set_statement_text;
+ /** @sa set_statement_lock_time_t. */
+ set_statement_lock_time_t set_statement_lock_time;
+ /** @sa set_statement_rows_sent_t. */
+ set_statement_rows_sent_t set_statement_rows_sent;
+ /** @sa set_statement_rows_examined_t. */
+ set_statement_rows_examined_t set_statement_rows_examined;
+ /** @sa inc_statement_created_tmp_disk_tables. */
+ inc_statement_created_tmp_disk_tables_t inc_statement_created_tmp_disk_tables;
+ /** @sa inc_statement_created_tmp_tables. */
+ inc_statement_created_tmp_tables_t inc_statement_created_tmp_tables;
+ /** @sa inc_statement_select_full_join. */
+ inc_statement_select_full_join_t inc_statement_select_full_join;
+ /** @sa inc_statement_select_full_range_join. */
+ inc_statement_select_full_range_join_t inc_statement_select_full_range_join;
+ /** @sa inc_statement_select_range. */
+ inc_statement_select_range_t inc_statement_select_range;
+ /** @sa inc_statement_select_range_check. */
+ inc_statement_select_range_check_t inc_statement_select_range_check;
+ /** @sa inc_statement_select_scan. */
+ inc_statement_select_scan_t inc_statement_select_scan;
+ /** @sa inc_statement_sort_merge_passes. */
+ inc_statement_sort_merge_passes_t inc_statement_sort_merge_passes;
+ /** @sa inc_statement_sort_range. */
+ inc_statement_sort_range_t inc_statement_sort_range;
+ /** @sa inc_statement_sort_rows. */
+ inc_statement_sort_rows_t inc_statement_sort_rows;
+ /** @sa inc_statement_sort_scan. */
+ inc_statement_sort_scan_t inc_statement_sort_scan;
+ /** @sa set_statement_no_index_used. */
+ set_statement_no_index_used_t set_statement_no_index_used;
+ /** @sa set_statement_no_good_index_used. */
+ set_statement_no_good_index_used_t set_statement_no_good_index_used;
+ /** @sa end_statement_v1_t. */
+ end_statement_v1_t end_statement;
+ /** @sa get_thread_transaction_locker_v1_t. */
+ get_thread_transaction_locker_v1_t get_thread_transaction_locker;
+ /** @sa start_transaction_v1_t. */
+ start_transaction_v1_t start_transaction;
+ /** @sa set_transaction_xid_v1_t. */
+ set_transaction_xid_v1_t set_transaction_xid;
+ /** @sa set_transaction_xa_state_v1_t. */
+ set_transaction_xa_state_v1_t set_transaction_xa_state;
+ /** @sa set_transaction_gtid_v1_t. */
+ set_transaction_gtid_v1_t set_transaction_gtid;
+ /** @sa set_transaction_trxid_v1_t. */
+ set_transaction_trxid_v1_t set_transaction_trxid;
+ /** @sa inc_transaction_savepoints_v1_t. */
+ inc_transaction_savepoints_v1_t inc_transaction_savepoints;
+ /** @sa inc_transaction_rollback_to_savepoint_v1_t. */
+ inc_transaction_rollback_to_savepoint_v1_t inc_transaction_rollback_to_savepoint;
+ /** @sa inc_transaction_release_savepoint_v1_t. */
+ inc_transaction_release_savepoint_v1_t inc_transaction_release_savepoint;
+ /** @sa end_transaction_v1_t. */
+ end_transaction_v1_t end_transaction;
+ /** @sa start_socket_wait_v1_t. */
+ start_socket_wait_v1_t start_socket_wait;
+ /** @sa end_socket_wait_v1_t. */
+ end_socket_wait_v1_t end_socket_wait;
+ /** @sa set_socket_state_v1_t. */
+ set_socket_state_v1_t set_socket_state;
+ /** @sa set_socket_info_v1_t. */
+ set_socket_info_v1_t set_socket_info;
+ /** @sa set_socket_thread_owner_v1_t. */
+ set_socket_thread_owner_v1_t set_socket_thread_owner;
+ /** @sa create_prepared_stmt_v1_t. */
+ create_prepared_stmt_v1_t create_prepared_stmt;
+ /** @sa destroy_prepared_stmt_v1_t. */
+ destroy_prepared_stmt_v1_t destroy_prepared_stmt;
+ /** @sa reprepare_prepared_stmt_v1_t. */
+ reprepare_prepared_stmt_v1_t reprepare_prepared_stmt;
+ /** @sa execute_prepared_stmt_v1_t. */
+ execute_prepared_stmt_v1_t execute_prepared_stmt;
+ /** @sa set_prepared_stmt_text_v1_t. */
+ set_prepared_stmt_text_v1_t set_prepared_stmt_text;
+ /** @sa digest_start_v1_t. */
+ digest_start_v1_t digest_start;
+ /** @sa digest_end_v1_t. */
+ digest_end_v1_t digest_end;
+ /** @sa set_thread_connect_attrs_v1_t. */
+ set_thread_connect_attrs_v1_t set_thread_connect_attrs;
+ /** @sa start_sp_v1_t. */
+ start_sp_v1_t start_sp;
+ /** @sa start_sp_v1_t. */
+ end_sp_v1_t end_sp;
+ /** @sa drop_sp_v1_t. */
+ drop_sp_v1_t drop_sp;
+ /** @sa get_sp_share_v1_t. */
+ get_sp_share_v1_t get_sp_share;
+ /** @sa release_sp_share_v1_t. */
+ release_sp_share_v1_t release_sp_share;
+ /** @sa register_memory_v1_t. */
+ register_memory_v1_t register_memory;
+ /** @sa memory_alloc_v1_t. */
+ memory_alloc_v1_t memory_alloc;
+ /** @sa memory_realloc_v1_t. */
+ memory_realloc_v1_t memory_realloc;
+ /** @sa memory_claim_v1_t. */
+ memory_claim_v1_t memory_claim;
+ /** @sa memory_free_v1_t. */
+ memory_free_v1_t memory_free;
+
+ unlock_table_v1_t unlock_table;
+
+ create_metadata_lock_v1_t create_metadata_lock;
+ set_metadata_lock_status_v1_t set_metadata_lock_status;
+ destroy_metadata_lock_v1_t destroy_metadata_lock;
+
+ start_metadata_wait_v1_t start_metadata_wait;
+ end_metadata_wait_v1_t end_metadata_wait;
+
+ set_thread_peer_port_v1_t set_thread_peer_port;
+};
+
+/** @} (end of group Group_PSI_v1) */
+
+#endif /* HAVE_PSI_1 */
+
+#ifdef USE_PSI_2
+#define HAVE_PSI_2
+#endif
+
+#ifdef HAVE_PSI_2
+
+/**
+ @defgroup Group_PSI_v2 Application Binary Interface, version 2
+ @ingroup Instrumentation_interface
+ @{
+*/
+
+/**
+ Performance Schema Interface, version 2.
+ This is a placeholder, this interface is not defined yet.
+ @since PSI_VERSION_2
+*/
+struct PSI_v2
+{
+ /** Placeholder */
+ int placeholder;
+ /* ... extended interface ... */
+};
+
+/** Placeholder */
+struct PSI_mutex_info_v2
+{
+ /** Placeholder */
+ int placeholder;
+};
+
+/** Placeholder */
+struct PSI_rwlock_info_v2
+{
+ /** Placeholder */
+ int placeholder;
+};
+
+/** Placeholder */
+struct PSI_cond_info_v2
+{
+ /** Placeholder */
+ int placeholder;
+};
+
+/** Placeholder */
+struct PSI_thread_info_v2
+{
+ /** Placeholder */
+ int placeholder;
+};
+
+/** Placeholder */
+struct PSI_file_info_v2
+{
+ /** Placeholder */
+ int placeholder;
+};
+
+/** Placeholder */
+struct PSI_stage_info_v2
+{
+ /** Placeholder */
+ int placeholder;
+};
+
+/** Placeholder */
+struct PSI_statement_info_v2
+{
+ /** Placeholder */
+ int placeholder;
+};
+
+/** Placeholder */
+struct PSI_transaction_info_v2
+{
+ /** Placeholder */
+ int placeholder;
+};
+
+/** Placeholder */
+struct PSI_idle_locker_state_v2
+{
+ /** Placeholder */
+ int placeholder;
+};
+
+/** Placeholder */
+struct PSI_mutex_locker_state_v2
+{
+ /** Placeholder */
+ int placeholder;
+};
+
+/** Placeholder */
+struct PSI_rwlock_locker_state_v2
+{
+ /** Placeholder */
+ int placeholder;
+};
+
+/** Placeholder */
+struct PSI_cond_locker_state_v2
+{
+ /** Placeholder */
+ int placeholder;
+};
+
+/** Placeholder */
+struct PSI_file_locker_state_v2
+{
+ /** Placeholder */
+ int placeholder;
+};
+
+/** Placeholder */
+struct PSI_statement_locker_state_v2
+{
+ /** Placeholder */
+ int placeholder;
+};
+
+/** Placeholder */
+struct PSI_transaction_locker_state_v2
+{
+ /** Placeholder */
+ int placeholder;
+};
+
+/** Placeholder */
+struct PSI_socket_locker_state_v2
+{
+ /** Placeholder */
+ int placeholder;
+};
+
+struct PSI_metadata_locker_state_v2
+{
+ int placeholder;
+};
+
+/** @} (end of group Group_PSI_v2) */
+
+#endif /* HAVE_PSI_2 */
+
+/**
+ @typedef PSI
+ The instrumentation interface for the current version.
+ @sa PSI_CURRENT_VERSION
+*/
+
+/**
+ @typedef PSI_mutex_info
+ The mutex information structure for the current version.
+*/
+
+/**
+ @typedef PSI_rwlock_info
+ The rwlock information structure for the current version.
+*/
+
+/**
+ @typedef PSI_cond_info
+ The cond information structure for the current version.
+*/
+
+/**
+ @typedef PSI_thread_info
+ The thread information structure for the current version.
+*/
+
+/**
+ @typedef PSI_file_info
+ The file information structure for the current version.
+*/
+
+/* Export the required version */
+#ifdef USE_PSI_1
+typedef struct PSI_v1 PSI;
+typedef struct PSI_mutex_info_v1 PSI_mutex_info;
+typedef struct PSI_rwlock_info_v1 PSI_rwlock_info;
+typedef struct PSI_cond_info_v1 PSI_cond_info;
+typedef struct PSI_thread_info_v1 PSI_thread_info;
+typedef struct PSI_file_info_v1 PSI_file_info;
+typedef struct PSI_stage_info_v1 PSI_stage_info;
+typedef struct PSI_statement_info_v1 PSI_statement_info;
+typedef struct PSI_transaction_info_v1 PSI_transaction_info;
+typedef struct PSI_socket_info_v1 PSI_socket_info;
+typedef struct PSI_idle_locker_state_v1 PSI_idle_locker_state;
+typedef struct PSI_mutex_locker_state_v1 PSI_mutex_locker_state;
+typedef struct PSI_rwlock_locker_state_v1 PSI_rwlock_locker_state;
+typedef struct PSI_cond_locker_state_v1 PSI_cond_locker_state;
+typedef struct PSI_file_locker_state_v1 PSI_file_locker_state;
+typedef struct PSI_statement_locker_state_v1 PSI_statement_locker_state;
+typedef struct PSI_transaction_locker_state_v1 PSI_transaction_locker_state;
+typedef struct PSI_socket_locker_state_v1 PSI_socket_locker_state;
+typedef struct PSI_sp_locker_state_v1 PSI_sp_locker_state;
+typedef struct PSI_metadata_locker_state_v1 PSI_metadata_locker_state;
+#endif
+
+#ifdef USE_PSI_2
+typedef struct PSI_v2 PSI;
+typedef struct PSI_mutex_info_v2 PSI_mutex_info;
+typedef struct PSI_rwlock_info_v2 PSI_rwlock_info;
+typedef struct PSI_cond_info_v2 PSI_cond_info;
+typedef struct PSI_thread_info_v2 PSI_thread_info;
+typedef struct PSI_file_info_v2 PSI_file_info;
+typedef struct PSI_stage_info_v2 PSI_stage_info;
+typedef struct PSI_statement_info_v2 PSI_statement_info;
+typedef struct PSI_transaction_info_v2 PSI_transaction_info;
+typedef struct PSI_socket_info_v2 PSI_socket_info;
+typedef struct PSI_idle_locker_state_v2 PSI_idle_locker_state;
+typedef struct PSI_mutex_locker_state_v2 PSI_mutex_locker_state;
+typedef struct PSI_rwlock_locker_state_v2 PSI_rwlock_locker_state;
+typedef struct PSI_cond_locker_state_v2 PSI_cond_locker_state;
+typedef struct PSI_file_locker_state_v2 PSI_file_locker_state;
+typedef struct PSI_statement_locker_state_v2 PSI_statement_locker_state;
+typedef struct PSI_transaction_locker_state_v2 PSI_transaction_locker_state;
+typedef struct PSI_socket_locker_state_v2 PSI_socket_locker_state;
+typedef struct PSI_sp_locker_state_v2 PSI_sp_locker_state;
+typedef struct PSI_metadata_locker_state_v2 PSI_metadata_locker_state;
+#endif
+
+#else /* HAVE_PSI_INTERFACE */
+
+/**
+ Dummy structure, used to declare PSI_server when no instrumentation
+ is available.
+ The content does not matter, since PSI_server will be NULL.
+*/
+struct PSI_none
+{
+ int opaque;
+};
+typedef struct PSI_none PSI;
+
+/**
+ Stage instrument information.
+ @since PSI_VERSION_1
+ This structure is used to register an instrumented stage.
+*/
+struct PSI_stage_info_none
+{
+ /** Unused stage key. */
+ unsigned int m_key;
+ /** The name of the stage instrument. */
+ const char *m_name;
+ /** Unused stage flags. */
+ int m_flags;
+};
+
+/**
+ The stage instrumentation has to co exist with the legacy
+ THD::set_proc_info instrumentation.
+ To avoid duplication of the instrumentation in the server,
+ the common PSI_stage_info structure is used,
+ so we export it here, even when not building
+ with HAVE_PSI_INTERFACE.
+*/
+typedef struct PSI_stage_info_none PSI_stage_info;
+
+#endif /* HAVE_PSI_INTERFACE */
+
+extern MYSQL_PLUGIN_IMPORT PSI *PSI_server;
+
+/*
+ Allow to override PSI_XXX_CALL at compile time
+ with more efficient implementations, if available.
+ If nothing better is available,
+ make a dynamic call using the PSI_server function pointer.
+*/
+
+#define PSI_DYNAMIC_CALL(M) PSI_server->M
+
+/** @} */
+
+C_MODE_END
+#endif /* MYSQL_PERFORMANCE_SCHEMA_INTERFACE_H */
+
diff --git a/db/include/mysql/psi/psi_base.h b/db/include/mysql/psi/psi_base.h
new file mode 100644
index 0000000..66d709b
--- /dev/null
+++ b/db/include/mysql/psi/psi_base.h
@@ -0,0 +1,173 @@
+/* Copyright (c) 2008, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ Without limiting anything contained in the foregoing, this file,
+ which is part of C Driver for MySQL (Connector/C), is also subject to the
+ Universal FOSS Exception, version 1.0, a copy of which can be found at
+ http://oss.oracle.com/licenses/universal-foss-exception.
+
+ 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, version 2.0, 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,
+ 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */
+
+#ifndef MYSQL_PSI_BASE_H
+#define MYSQL_PSI_BASE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ @file mysql/psi/psi_base.h
+ Performance schema instrumentation interface.
+
+ @defgroup Instrumentation_interface Instrumentation Interface
+ @ingroup Performance_schema
+ @{
+*/
+
+#define PSI_INSTRUMENT_ME 0
+
+#define PSI_NOT_INSTRUMENTED 0
+
+/**
+ Global flag.
+ This flag indicate that an instrumentation point is a global variable,
+ or a singleton.
+*/
+#define PSI_FLAG_GLOBAL (1 << 0)
+
+/**
+ Mutable flag.
+ This flag indicate that an instrumentation point is a general placeholder,
+ that can mutate into a more specific instrumentation point.
+*/
+#define PSI_FLAG_MUTABLE (1 << 1)
+
+#define PSI_FLAG_THREAD (1 << 2)
+
+/**
+ Stage progress flag.
+ This flag apply to the stage instruments only.
+ It indicates the instrumentation provides progress data.
+*/
+#define PSI_FLAG_STAGE_PROGRESS (1 << 3)
+
+/**
+ Shared Exclusive flag.
+ Indicates that rwlock support the shared exclusive state.
+*/
+#define PSI_RWLOCK_FLAG_SX (1 << 4)
+
+/**
+ Transferable flag.
+ This flag indicate that an instrumented object can
+ be created by a thread and destroyed by another thread.
+*/
+#define PSI_FLAG_TRANSFER (1 << 5)
+
+/**
+ Volatility flag.
+ This flag indicate that an instrumented object
+ has a volatility (life cycle) comparable
+ to the volatility of a session.
+*/
+#define PSI_FLAG_VOLATILITY_SESSION (1 << 6)
+
+/**
+ System thread flag.
+ Indicates that the instrumented object exists on a system thread.
+*/
+#define PSI_FLAG_THREAD_SYSTEM (1 << 9)
+
+#ifdef HAVE_PSI_INTERFACE
+
+/**
+ @def PSI_VERSION_1
+ Performance Schema Interface number for version 1.
+ This version is supported.
+*/
+#define PSI_VERSION_1 1
+
+/**
+ @def PSI_VERSION_2
+ Performance Schema Interface number for version 2.
+ This version is not implemented, it's a placeholder.
+*/
+#define PSI_VERSION_2 2
+
+/**
+ @def PSI_CURRENT_VERSION
+ Performance Schema Interface number for the most recent version.
+ The most current version is @c PSI_VERSION_1
+*/
+#define PSI_CURRENT_VERSION 1
+
+/**
+ @def USE_PSI_1
+ Define USE_PSI_1 to use the interface version 1.
+*/
+
+/**
+ @def USE_PSI_2
+ Define USE_PSI_2 to use the interface version 2.
+*/
+
+/**
+ @def HAVE_PSI_1
+ Define HAVE_PSI_1 if the interface version 1 needs to be compiled in.
+*/
+
+/**
+ @def HAVE_PSI_2
+ Define HAVE_PSI_2 if the interface version 2 needs to be compiled in.
+*/
+
+#ifndef USE_PSI_2
+#ifndef USE_PSI_1
+#define USE_PSI_1
+#endif
+#endif
+
+#ifdef USE_PSI_1
+#define HAVE_PSI_1
+#endif
+
+#ifdef USE_PSI_2
+#define HAVE_PSI_2
+#endif
+
+/*
+ Allow to override PSI_XXX_CALL at compile time
+ with more efficient implementations, if available.
+ If nothing better is available,
+ make a dynamic call using the PSI_server function pointer.
+*/
+
+#define PSI_DYNAMIC_CALL(M) PSI_server->M
+
+#endif /* HAVE_PSI_INTERFACE */
+
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* MYSQL_PSI_BASE_H */
+
diff --git a/db/include/mysql/psi/psi_memory.h b/db/include/mysql/psi/psi_memory.h
new file mode 100644
index 0000000..454c3db
--- /dev/null
+++ b/db/include/mysql/psi/psi_memory.h
@@ -0,0 +1,167 @@
+/* Copyright (c) 2013, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ Without limiting anything contained in the foregoing, this file,
+ which is part of C Driver for MySQL (Connector/C), is also subject to the
+ Universal FOSS Exception, version 1.0, a copy of which can be found at
+ http://oss.oracle.com/licenses/universal-foss-exception.
+
+ 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, version 2.0, 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,
+ 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */
+
+#ifndef MYSQL_PSI_MEMORY_H
+#define MYSQL_PSI_MEMORY_H
+
+#include "psi_base.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ @file mysql/psi/psi_memory.h
+ Performance schema instrumentation interface.
+
+ @defgroup Instrumentation_interface Instrumentation Interface
+ @ingroup Performance_schema
+ @{
+*/
+
+#ifdef HAVE_PSI_INTERFACE
+#ifndef DISABLE_ALL_PSI
+#ifndef DISABLE_PSI_MEMORY
+#define HAVE_PSI_MEMORY_INTERFACE
+#endif /* DISABLE_PSI_MEMORY */
+#endif /* DISABLE_ALL_PSI */
+#endif /* HAVE_PSI_INTERFACE */
+
+struct PSI_thread;
+
+/**
+ Instrumented memory key.
+ To instrument memory, a memory key must be obtained using @c register_memory.
+ Using a zero key always disable the instrumentation.
+*/
+typedef unsigned int PSI_memory_key;
+
+#ifdef HAVE_PSI_1
+
+/**
+ @defgroup Group_PSI_v1 Application Binary Interface, version 1
+ @ingroup Instrumentation_interface
+ @{
+*/
+
+/**
+ Memory instrument information.
+ @since PSI_VERSION_1
+ This structure is used to register instrumented memory.
+*/
+struct PSI_memory_info_v1
+{
+ /** Pointer to the key assigned to the registered memory. */
+ PSI_memory_key *m_key;
+ /** The name of the memory instrument to register. */
+ const char *m_name;
+ /**
+ The flags of the socket instrument to register.
+ @sa PSI_FLAG_GLOBAL
+ */
+ int m_flags;
+};
+typedef struct PSI_memory_info_v1 PSI_memory_info_v1;
+
+/**
+ Memory registration API.
+ @param category a category name (typically a plugin name)
+ @param info an array of memory info to register
+ @param count the size of the info array
+*/
+typedef void (*register_memory_v1_t)
+ (const char *category, struct PSI_memory_info_v1 *info, int count);
+
+/**
+ Instrument memory allocation.
+ @param key the memory instrument key
+ @param size the size of memory allocated
+ @param[out] owner the memory owner
+ @return the effective memory instrument key
+*/
+typedef PSI_memory_key (*memory_alloc_v1_t)
+ (PSI_memory_key key, size_t size, struct PSI_thread ** owner);
+
+/**
+ Instrument memory re allocation.
+ @param key the memory instrument key
+ @param old_size the size of memory previously allocated
+ @param new_size the size of memory re allocated
+ @param[in, out] owner the memory owner
+ @return the effective memory instrument key
+*/
+typedef PSI_memory_key (*memory_realloc_v1_t)
+ (PSI_memory_key key, size_t old_size, size_t new_size, struct PSI_thread ** owner);
+
+/**
+ Instrument memory claim.
+ @param key the memory instrument key
+ @param size the size of memory allocated
+ @param[in, out] owner the memory owner
+ @return the effective memory instrument key
+*/
+typedef PSI_memory_key (*memory_claim_v1_t)
+ (PSI_memory_key key, size_t size, struct PSI_thread ** owner);
+
+/**
+ Instrument memory free.
+ @param key the memory instrument key
+ @param size the size of memory allocated
+ @param owner the memory owner
+*/
+typedef void (*memory_free_v1_t)
+ (PSI_memory_key key, size_t size, struct PSI_thread * owner);
+
+/** @} (end of group Group_PSI_v1) */
+
+#endif /* HAVE_PSI_1 */
+
+#ifdef HAVE_PSI_2
+struct PSI_memory_info_v2
+{
+ int placeholder;
+};
+
+#endif /* HAVE_PSI_2 */
+
+#ifdef USE_PSI_1
+typedef struct PSI_memory_info_v1 PSI_memory_info;
+#endif
+
+#ifdef USE_PSI_2
+typedef struct PSI_memory_info_v2 PSI_memory_info;
+#endif
+
+/** @} (end of group Instrumentation_interface) */
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* MYSQL_PSI_MEMORY_H */
+
diff --git a/db/include/mysql/service_command.h b/db/include/mysql/service_command.h
new file mode 100644
index 0000000..4c298f0
--- /dev/null
+++ b/db/include/mysql/service_command.h
@@ -0,0 +1,442 @@
+#ifndef MYSQL_SERVICE_COMMAND_INCLUDED
+#define MYSQL_SERVICE_COMMAND_INCLUDED
+/* Copyright (c) 2015, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 */
+
+/**
+ @file
+ Header file for the Command service. This service is to provide means
+ of executing different commands, like COM_QUERY, COM_STMT_PREPARE,
+ in the server.
+*/
+
+#include "mysql/service_srv_session.h"
+#include "mysql/com_data.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "mysql_time.h"
+#include "decimal.h"
+#ifndef MYSQL_ABI_CHECK
+#include "m_ctype.h"
+#include /* uint32_t */
+#endif
+
+/* POD structure for the field metadata from the server */
+struct st_send_field
+{
+ const char *db_name;
+ const char *table_name;
+ const char *org_table_name;
+ const char *col_name;
+ const char *org_col_name;
+ unsigned long length;
+ unsigned int charsetnr;
+ unsigned int flags;
+ unsigned int decimals;
+ enum_field_types type;
+};
+
+
+struct st_command_service_cbs
+{
+ /*
+ For a statement that returns a result, the flow of called callbacks will be:
+
+ start_result_metadata()
+ field_metadata()
+ ....
+ end_result_metadata() (in the classic protocol this generates an EOF packet)
+ start_row()
+ get_xxx()
+ ...
+ end_row()
+ start_row()
+ get_xxx()
+ ...
+ end_row()
+ handle_ok() (with data for an EOF packet)
+
+ For a statement that does NOT return a result, but only status, like
+ INSERT, UPDATE, DELETE, REPLACE, TRUNCATE, CREATE, DROP, ALTER, etc. only
+ handle_ok() will be invoked, in case of success.
+
+ All statements that result in an error will invoke handle_error().
+
+ For statements that return a result set, handle_error() might be invoked
+ even after metadata was sent. This will indicate an error during the
+ execution of the statement.
+ */
+
+ /*** Getting metadata ***/
+ /**
+ Indicates beginning of metadata for the result set
+
+ @param ctx Plugin's context
+ @param num_cols Number of fields being sent
+ @param flags Flags to alter the metadata sending
+ @param resultcs Charset of the result set
+
+ @note resultcs is the charset in which the data should be encoded before
+ sent to the client. This is the value of the session variable
+ character_set_results. The implementor most probably will need to save
+ this value in the context and use it as "to" charset in get_string().
+
+ In case of CS_BINARY_REPRESENTATION, get_string() receives as a parameter
+ the charset of the string, as it is stored on disk.
+
+ In case of CS_TEXT_REPRESENTATION, the string value might be already a
+ stringified value or non-string data, which is in character_set_results.
+
+ @returns
+ 1 an error occured, server will abort the command
+ 0 ok
+ */
+ int (*start_result_metadata)(void *ctx, uint num_cols, uint flags,
+ const CHARSET_INFO *resultcs);
+
+ /**
+ Field metadata is provided via this callback
+
+ @param ctx Plugin's context
+ @param field Field's metadata (see field.h)
+ @param charset Field's charset
+
+ @returns
+ 1 an error occured, server will abort the command
+ 0 ok
+ */
+ int (*field_metadata)(void *ctx, struct st_send_field *field,
+ const CHARSET_INFO *charset);
+
+ /**
+ Indicates end of metadata for the result set
+
+ @param ctx Plugin's context
+ @param server_status Status of server (see mysql_com.h, SERVER_STATUS_*)
+ @param warn_count Number of warnings generated during execution to the
+ moment when the metadata is sent.
+ @returns
+ 1 an error occured, server will abort the command
+ 0 ok
+ */
+ int (*end_result_metadata)(void *ctx, uint server_status,
+ uint warn_count);
+
+ /**
+ Indicates the beginning of a new row in the result set/metadata
+
+ @param ctx Plugin's context
+
+ @returns
+ 1 an error occured, server will abort the command
+ 0 ok
+ */
+ int (*start_row)(void *ctx);
+
+ /**
+ Indicates the end of the current row in the result set/metadata
+
+ @param ctx Plugin's context
+
+ @returns
+ 1 an error occured, server will abort the command
+ 0 ok
+ */
+ int (*end_row)(void *ctx);
+
+ /**
+ An error occured during execution
+
+ @details This callback indicates that an error occured during command
+ execution and the partial row should be dropped. Server will raise error
+ and return.
+
+ @param ctx Plugin's context
+
+ @returns
+ true an error occured, server will abort the command
+ false ok
+
+ */
+ void (*abort_row)(void *ctx);
+
+ /**
+ Return client's capabilities (see mysql_com.h, CLIENT_*)
+
+ @param ctx Plugin's context
+
+ @return Bitmap of client's capabilities
+ */
+ ulong (*get_client_capabilities)(void *ctx);
+
+ /****** Getting data ******/
+ /**
+ Receive NULL value from server
+
+ @param ctx Plugin's context
+
+ @returns
+ 1 an error occured, server will abort the command
+ 0 ok
+ */
+ int (*get_null)(void * ctx);
+
+ /**
+ Receive TINY/SHORT/LONG value from server
+
+ @param ctx Plugin's context
+ @param value Value received
+
+ @note In order to know which type exactly was received, the plugin must
+ track the metadata that was sent just prior to the result set.
+
+ @returns
+ 1 an error occured, server will abort the command
+ 0 ok
+ */
+ int (*get_integer)(void * ctx, longlong value);
+
+ /**
+ Get LONGLONG value from server
+
+ @param ctx Plugin's context
+ @param value Value received
+ @param is_unsigned TRUE <=> value is unsigned
+
+ @returns
+ 1 an error occured, server will abort the command
+ 0 ok
+ */
+ int (*get_longlong)(void * ctx, longlong value, uint is_unsigned);
+
+ /**
+ Receive DECIMAL value from server
+
+ @param ctx Plugin's context
+ @param value Value received
+
+ @returns
+ 1 an error occured, server will abort the command
+ 0 ok
+ */
+ int (*get_decimal)(void * ctx, const decimal_t * value);
+
+ /**
+ Receive FLOAT/DOUBLE from server
+
+ @param ctx Plugin's context
+ @param value Value received
+ @param decimals Number of decimals
+
+ @note In order to know which type exactly was received, the plugin must
+ track the metadata that was sent just prior to the result set.
+
+ @returns
+ 1 an error occured, server will abort the command
+ 0 ok
+ */
+ int (*get_double)(void * ctx, double value, uint32_t decimals);
+
+ /**
+ Get DATE value from server
+
+ @param ctx Plugin's context
+ @param value Value received
+
+ @returns
+ 1 an error occured during storing, server will abort the command
+ 0 ok
+ */
+ int (*get_date)(void * ctx, const MYSQL_TIME * value);
+
+ /**
+ Receive TIME value from server
+
+ @param ctx Plugin's context
+ @param value Value received
+ @param decimals Number of decimals
+
+ @returns
+ 1 an error occured during storing, server will abort the command
+ 0 ok
+ */
+ int (*get_time)(void * ctx, const MYSQL_TIME * value, uint decimals);
+
+ /**
+ Receive DATETIME value from server
+
+ @param ctx Plugin's context
+ @param value Value received
+ @param decimals Number of decimals
+
+ @returns
+ 1 an error occured during storing, server will abort the command
+ 0 ok
+ */
+ int (*get_datetime)(void * ctx, const MYSQL_TIME * value, uint decimals);
+
+ /**
+ Get STRING value from server
+
+ @param ctx Plugin's context
+ @param value Data
+ @param length Data length
+ @param valuecs Data charset
+
+ @note In case of CS_BINARY_REPRESENTATION, get_string() receives as
+ a parameter the charset of the string, as it is stored on disk.
+
+ In case of CS_TEXT_REPRESENTATION, the string value might be already a
+ stringified value or non-string data, which is in character_set_results.
+
+ @see start_result_metadata()
+
+ @returns
+ 1 an error occured, server will abort the command
+ 0 ok
+ */
+ int (*get_string)(void * ctx, const char * value, size_t length,
+ const CHARSET_INFO * valuecs);
+
+ /****** Getting execution status ******/
+ /**
+ Command ended with success
+
+ @param ctx Plugin's context
+ @param server_status Status of server (see mysql_com.h,
+ SERVER_STATUS_*)
+ @param statement_warn_count Number of warnings thrown during execution
+ @param affected_rows Number of rows affected by the command
+ @param last_insert_id Last insert id being assigned during execution
+ @param message A message from server
+ */
+ void (*handle_ok)(void * ctx,
+ uint server_status, uint statement_warn_count,
+ ulonglong affected_rows, ulonglong last_insert_id,
+ const char * message);
+
+ /**
+ Command ended with ERROR
+
+ @param ctx Plugin's context
+ @param sql_errno Error code
+ @param err_msg Error message
+ @param sqlstate SQL state correspongin to the error code
+ */
+ void (*handle_error)(void * ctx, uint sql_errno, const char * err_msg,
+ const char * sqlstate);
+
+ /**
+ Callback for shutdown notification from the server.
+
+ @param ctx Plugin's context
+ @param server_shutdown Whether this is a normal connection shutdown (0) or
+ server shutdown (1).
+ */
+ void (*shutdown)(void *ctx, int server_shutdown);
+};
+
+enum cs_text_or_binary
+{
+ CS_TEXT_REPRESENTATION= 1, /* Let the server convert everything to string */
+ CS_BINARY_REPRESENTATION= 2, /* Let the server use native types */
+};
+
+extern struct command_service_st {
+ int (*run_command)(MYSQL_SESSION session,
+ enum enum_server_command command,
+ const union COM_DATA * data,
+ const CHARSET_INFO * client_cs,
+ const struct st_command_service_cbs * callbacks,
+ enum cs_text_or_binary text_or_binary,
+ void * service_callbacks_ctx);
+} *command_service;
+
+#ifdef MYSQL_DYNAMIC_PLUGIN
+
+#define command_service_run_command(t, command, data, cset, cbs, t_or_b, ctx) \
+ command_service->run_command((t), (command), (data), (cset), \
+ (cbs), (t_or_b), (ctx))
+#else
+
+
+/**
+ Executes a server command in a session.
+
+
+ There are two cases. Execution in a physical thread :
+ 1. initialized by the srv_session service
+ 2. NOT initialized by the srv_session service
+
+ In case of 1, if there is currently attached session, and it is
+ different from the passed one, the former will be automatically
+ detached. The session to be used for the execution will then be
+ attached. After the command is executed, the attached session will
+ not be detached. It will be detached by a next call to run_command()
+ with another session as parameter. In other words, for all sessions
+ used in a physical thread, there will be at most one in attached
+ state.
+
+ In case of 2, the current state (current_thd) will be
+ preserved. Then the given session will move to attached state and
+ the command will be executed. After the execution the state of the
+ session will be changed to detached and the preserved state
+ (current_thd) will be restored.
+
+ The client charset is used for commands like COM_QUERY and
+ COM_STMT_PREPARE to know how to threat the char* fields. This
+ charset will be used until the next call of run_command when it may
+ be changed again.
+
+ @param session The session
+ @param command The command to be executed.
+ @param data The data needed for the command to be executed
+ @param client_cs The charset for the string data input(COM_QUERY for example)
+ @param callbacks Callbacks to be used by the server to encode data and
+ to communicate with the client (plugin) side.
+ @param text_or_binary Select which representation the server will use for the
+ data passed to the callbacks. For more information
+ @see cs_text_or_binary enum
+ @param service_callbacks_ctx Context passed to the command service callbacks
+
+ @return
+ 0 success
+ 1 failure
+*/
+int command_service_run_command(MYSQL_SESSION session,
+ enum enum_server_command command,
+ const union COM_DATA * data,
+ const CHARSET_INFO * client_cs,
+ const struct st_command_service_cbs * callbacks,
+ enum cs_text_or_binary text_or_binary,
+ void * service_callbacks_ctx);
+
+#endif /* MYSQL_DYNAMIC_PLUGIN */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/db/include/mysql/service_locking.h b/db/include/mysql/service_locking.h
new file mode 100644
index 0000000..81c2ba3
--- /dev/null
+++ b/db/include/mysql/service_locking.h
@@ -0,0 +1,121 @@
+/*
+ Copyright (c) 2015, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 SERVICE_LOCKING_INCLUDED
+#define SERVICE_LOCKING_INCLUDED
+
+/*
+ This service provides support for taking read/write locks.
+ It is intended for use with fabric, but it is still a general
+ service. The locks are in a separate namespace from other
+ locks in the server, and there is also no interactions with
+ transactions (i.e. locks are not released on commit/abort).
+
+ These locks are implemented using the metadata lock (MDL) subsystem
+ and thus deadlocks involving locking service locks and other types
+ of metadata will be detected using the MDL deadlock detector.
+*/
+
+#ifdef __cplusplus
+class THD;
+#define MYSQL_THD THD*
+#else
+#define MYSQL_THD void*
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ Types of locking service locks.
+ LOCKING_SERVICE_READ is compatible with LOCKING_SERVICE_READ.
+ All other combinations are incompatible.
+*/
+enum enum_locking_service_lock_type
+{ LOCKING_SERVICE_READ, LOCKING_SERVICE_WRITE };
+
+extern struct mysql_locking_service_st {
+ /**
+ Acquire locking service locks.
+
+ @param opaque_thd Thread handle. If NULL, current_thd will be used.
+ @param lock_namespace Namespace of the locks to acquire.
+ @param lock_names Array of names of the locks to acquire.
+ @param lock_num Number of elements in 'lock_names'.
+ @param lock_type Lock type to acquire. LOCKING_SERVICE_READ or _WRITE.
+ @param lock_timeout Number of seconds to wait before giving up.
+
+ @retval 1 Acquisition failed, error has been reported.
+ @retval 0 Acquisition successful, all locks acquired.
+
+ @note both lock_namespace and lock_names are limited to 64 characters max.
+ Names are compared using binary comparison.
+ */
+ int (*mysql_acquire_locks)(MYSQL_THD opaque_thd, const char* lock_namespace,
+ const char**lock_names, size_t lock_num,
+ enum enum_locking_service_lock_type lock_type,
+ unsigned long lock_timeout);
+
+ /**
+ Release all lock service locks taken by the given connection
+ in the given namespace.
+
+ @param opaque_thd Thread handle. If NULL, current_thd will be used.
+ @param lock_namespace Namespace of the locks to release.
+
+ @retval 1 Release failed, error has been reported.
+ @retval 0 Release successful, all locks acquired.
+ */
+ int (*mysql_release_locks)(MYSQL_THD opaque_thd, const char* lock_namespace);
+} *mysql_locking_service;
+
+#ifdef MYSQL_DYNAMIC_PLUGIN
+
+#define mysql_acquire_locking_service_locks(_THD, _NAMESPACE, _NAMES, _NUM, \
+ _TYPE, _TIMEOUT) \
+ mysql_locking_service->mysql_acquire_locks(_THD, _NAMESPACE, _NAMES, _NUM, \
+ _TYPE, _TIMEOUT)
+#define mysql_release_locking_service_locks(_THD, _NAMESPACE) \
+ mysql_locking_service->mysql_release_locks(_THD, _NAMESPACE)
+
+#else
+
+int mysql_acquire_locking_service_locks(MYSQL_THD opaque_thd,
+ const char* lock_namespace,
+ const char**lock_names,
+ size_t lock_num,
+ enum enum_locking_service_lock_type lock_type,
+ unsigned long lock_timeout);
+
+int mysql_release_locking_service_locks(MYSQL_THD opaque_thd,
+ const char* lock_namespace);
+
+#endif /* MYSQL_DYNAMIC_PLUGIN */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* SERVICE_LOCKING_INCLUDED */
diff --git a/db/include/mysql/service_my_plugin_log.h b/db/include/mysql/service_my_plugin_log.h
new file mode 100644
index 0000000..6f1c822
--- /dev/null
+++ b/db/include/mysql/service_my_plugin_log.h
@@ -0,0 +1,70 @@
+/* Copyright (c) 2011, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 */
+
+/**
+ @file
+ This service provides functions to report error conditions and log to
+ mysql error log.
+*/
+
+#ifndef MYSQL_SERVICE_MY_PLUGIN_LOG_INCLUDED
+#define MYSQL_SERVICE_MY_PLUGIN_LOG_INCLUDED
+
+#ifndef MYSQL_ABI_CHECK
+#include
+#endif
+
+/* keep in sync with the loglevel enum in my_sys.h */
+enum plugin_log_level
+{
+ MY_ERROR_LEVEL,
+ MY_WARNING_LEVEL,
+ MY_INFORMATION_LEVEL
+};
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern struct my_plugin_log_service
+{
+ /** write a message to the log */
+ int (*my_plugin_log_message)(MYSQL_PLUGIN *, enum plugin_log_level, const char *, ...);
+} *my_plugin_log_service;
+
+#ifdef MYSQL_DYNAMIC_PLUGIN
+
+#define my_plugin_log_message my_plugin_log_service->my_plugin_log_message
+
+#else
+
+int my_plugin_log_message(MYSQL_PLUGIN *plugin, enum plugin_log_level level,
+ const char *format, ...);
+
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/db/include/mysql/service_my_snprintf.h b/db/include/mysql/service_my_snprintf.h
new file mode 100644
index 0000000..6cbb74e
--- /dev/null
+++ b/db/include/mysql/service_my_snprintf.h
@@ -0,0 +1,108 @@
+#ifndef MYSQL_SERVICE_MY_SNPRINTF_INCLUDED
+#define MYSQL_SERVICE_MY_SNPRINTF_INCLUDED
+/* Copyright (c) 2009, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 */
+
+/**
+ @file
+ my_snprintf service
+
+ Portable and limited vsnprintf() implementation.
+
+ This is a portable, limited vsnprintf() implementation, with some
+ extra features. "Portable" means that it'll produce identical result
+ on all platforms (for example, on Windows and Linux system printf %e
+ formats the exponent differently, on different systems %p either
+ prints leading 0x or not, %s may accept null pointer or crash on
+ it). "Limited" means that it does not support all the C89 features.
+ But it supports few extensions, not in any standard.
+
+ my_vsnprintf(to, n, fmt, ap)
+
+ @param[out] to A buffer to store the result in
+ @param[in] n Store up to n-1 characters, followed by an end 0
+ @param[in] fmt printf-like format string
+ @param[in] ap Arguments
+
+ @return a number of bytes written to a buffer *excluding* terminating '\0'
+
+ @post
+ The syntax of a format string is generally the same:
+ %
+ where everithing but the format is optional.
+
+ Three one-character flags are recognized:
+ '0' has the standard zero-padding semantics;
+ '-' is parsed, but silently ignored;
+ '`' (backtick) is only supported for strings (%s) and means that the
+ string will be quoted according to MySQL identifier quoting rules.
+
+ Both and can be specified as numbers or '*'.
+ If an asterisk is used, an argument of type int is consumed.
+
+ can be 'l', 'll', or 'z'.
+
+ Supported formats are 's' (null pointer is accepted, printed as
+ "(null)"), 'b' (extension, see below), 'c', 'd', 'i', 'u', 'x', 'o',
+ 'X', 'p' (works as 0x%x).
+
+ Standard syntax for positional arguments $n is supported.
+
+ Extensions:
+
+ Flag '`' (backtick): see above.
+
+ Format 'b': binary buffer, prints exactly bytes from the
+ argument, without stopping at '\0'.
+*/
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef MYSQL_ABI_CHECK
+#include
+#include
+#endif
+
+extern struct my_snprintf_service_st {
+ size_t (*my_snprintf_type)(char*, size_t, const char*, ...);
+ size_t (*my_vsnprintf_type)(char *, size_t, const char*, va_list);
+} *my_snprintf_service;
+
+#ifdef MYSQL_DYNAMIC_PLUGIN
+
+#define my_vsnprintf my_snprintf_service->my_vsnprintf_type
+#define my_snprintf my_snprintf_service->my_snprintf_type
+
+#else
+
+size_t my_snprintf(char* to, size_t n, const char* fmt, ...);
+size_t my_vsnprintf(char *to, size_t n, const char* fmt, va_list ap);
+
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* #define MYSQL_SERVICE_MY_SNPRINTF_INCLUDED */
diff --git a/db/include/mysql/service_mysql_alloc.h b/db/include/mysql/service_mysql_alloc.h
new file mode 100644
index 0000000..c5f330d
--- /dev/null
+++ b/db/include/mysql/service_mysql_alloc.h
@@ -0,0 +1,88 @@
+/* Copyright (c) 2012, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 MYSQL_SERVICE_MYSQL_ALLOC_INCLUDED
+#define MYSQL_SERVICE_MYSQL_ALLOC_INCLUDED
+
+#ifndef MYSQL_ABI_CHECK
+#include
+#endif
+
+/* PSI_memory_key */
+#include "mysql/psi/psi_memory.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* myf */
+typedef int myf_t;
+
+typedef void * (*mysql_malloc_t)(PSI_memory_key key, size_t size, myf_t flags);
+typedef void * (*mysql_realloc_t)(PSI_memory_key key, void *ptr, size_t size, myf_t flags);
+typedef void (*mysql_claim_t)(void *ptr);
+typedef void (*mysql_free_t)(void *ptr);
+typedef void * (*my_memdup_t)(PSI_memory_key key, const void *from, size_t length, myf_t flags);
+typedef char * (*my_strdup_t)(PSI_memory_key key, const char *from, myf_t flags);
+typedef char * (*my_strndup_t)(PSI_memory_key key, const char *from, size_t length, myf_t flags);
+
+struct mysql_malloc_service_st
+{
+ mysql_malloc_t mysql_malloc;
+ mysql_realloc_t mysql_realloc;
+ mysql_claim_t mysql_claim;
+ mysql_free_t mysql_free;
+ my_memdup_t my_memdup;
+ my_strdup_t my_strdup;
+ my_strndup_t my_strndup;
+};
+
+extern struct mysql_malloc_service_st *mysql_malloc_service;
+
+#ifdef MYSQL_DYNAMIC_PLUGIN
+
+#define my_malloc mysql_malloc_service->mysql_malloc
+#define my_realloc mysql_malloc_service->mysql_realloc
+#define my_claim mysql_malloc_service->mysql_claim
+#define my_free mysql_malloc_service->mysql_free
+#define my_memdup mysql_malloc_service->my_memdup
+#define my_strdup mysql_malloc_service->my_strdup
+#define my_strndup mysql_malloc_service->my_strndup
+
+#else
+
+extern void * my_malloc(PSI_memory_key key, size_t size, myf_t flags);
+extern void * my_realloc(PSI_memory_key key, void *ptr, size_t size, myf_t flags);
+extern void my_claim(void *ptr);
+extern void my_free(void *ptr);
+extern void * my_memdup(PSI_memory_key key, const void *from, size_t length, myf_t flags);
+extern char * my_strdup(PSI_memory_key key, const char *from, myf_t flags);
+extern char * my_strndup(PSI_memory_key key, const char *from, size_t length, myf_t flags);
+
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
diff --git a/db/include/mysql/service_mysql_keyring.h b/db/include/mysql/service_mysql_keyring.h
new file mode 100644
index 0000000..150ef93
--- /dev/null
+++ b/db/include/mysql/service_mysql_keyring.h
@@ -0,0 +1,69 @@
+/* Copyright (c) 2014, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 MYSQL_SERVICE_MYSQL_PLUGIN_KEYRING_INCLUDED
+#define MYSQL_SERVICE_MYSQL_PLUGIN_KEYRING_INCLUDED
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern struct mysql_keyring_service_st
+{
+ int (*my_key_store_func)(const char *, const char *, const char *,
+ const void *, size_t);
+ int (*my_key_fetch_func)(const char *, char **, const char *, void **,
+ size_t *);
+ int (*my_key_remove_func)(const char *, const char *);
+ int (*my_key_generate_func)(const char *, const char *, const char *,
+ size_t);
+} *mysql_keyring_service;
+
+#ifdef MYSQL_DYNAMIC_PLUGIN
+
+#define my_key_store(key_id, key_type, user_id, key, key_len) \
+ mysql_keyring_service->my_key_store_func(key_id, key_type, user_id, key, \
+ key_len)
+#define my_key_fetch(key_id, key_type, user_id, key, key_len) \
+ mysql_keyring_service->my_key_fetch_func(key_id, key_type, user_id, key, \
+ key_len)
+#define my_key_remove(key_id, user_id) \
+ mysql_keyring_service->my_key_remove_func(key_id, user_id)
+#define my_key_generate(key_id, key_type, user_id, key_len) \
+ mysql_keyring_service->my_key_generate_func(key_id, key_type, user_id, \
+ key_len)
+#else
+
+int my_key_store(const char *, const char *, const char *, const void *, size_t);
+int my_key_fetch(const char *, char **, const char *, void **,
+ size_t *);
+int my_key_remove(const char *, const char *);
+int my_key_generate(const char *, const char *, const char *, size_t);
+
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif //MYSQL_SERVICE_MYSQL_PLUGIN_KEYRING_INCLUDED
+
diff --git a/db/include/mysql/service_mysql_password_policy.h b/db/include/mysql/service_mysql_password_policy.h
new file mode 100644
index 0000000..17af2da
--- /dev/null
+++ b/db/include/mysql/service_mysql_password_policy.h
@@ -0,0 +1,73 @@
+/* Copyright (c) 2014, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 MYSQL_SERVICE_MYSQL_PLUGIN_AUTH_INCLUDED
+#define MYSQL_SERVICE_MYSQL_PLUGIN_AUTH_INCLUDED
+
+/**
+ @file include/mysql/service_mysql_plugin_auth.h
+ This service provides functions to validatete password, check for strength
+ of password based on common policy.
+
+ SYNOPSIS
+ my_validate_password_policy() - function to validate password
+ based on defined policy
+ const char* buffer holding the password value
+ unsigned int buffer length
+
+ my_calculate_password_strength() - function to calculate strength
+ of the password based on the policies defined.
+ const char* buffer holding the password value
+ unsigned int buffer length
+
+ Both the service function returns 0 on SUCCESS and 1 incase input password does not
+ match against the policy rules defined.
+*/
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern struct mysql_password_policy_service_st {
+ int (*my_validate_password_policy_func)(const char *, unsigned int);
+ int (*my_calculate_password_strength_func)(const char *, unsigned int);
+} *mysql_password_policy_service;
+
+#ifdef MYSQL_DYNAMIC_PLUGIN
+
+#define my_validate_password_policy(buffer, length) \
+ mysql_password_policy_service->my_validate_password_policy_func(buffer, length)
+#define my_calculate_password_strength(buffer, length) \
+ mysql_password_policy_service->my_calculate_password_strength_func(buffer, length)
+
+#else
+
+int my_validate_password_policy(const char *, unsigned int);
+int my_calculate_password_strength(const char *, unsigned int);
+
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/db/include/mysql/service_mysql_string.h b/db/include/mysql/service_mysql_string.h
new file mode 100644
index 0000000..71a48cd
--- /dev/null
+++ b/db/include/mysql/service_mysql_string.h
@@ -0,0 +1,140 @@
+/* Copyright (c) 2012, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 */
+
+/* This service provides functions to parse mysql String */
+
+#ifndef MYSQL_SERVICE_MYSQL_STRING_INCLUDED
+#define MYSQL_SERVICE_MYSQL_STRING_INCLUDED
+
+#ifndef MYSQL_ABI_CHECK
+#include
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef void *mysql_string_iterator_handle;
+typedef void *mysql_string_handle;
+
+extern struct mysql_string_service_st {
+ int (*mysql_string_convert_to_char_ptr_type)
+ (mysql_string_handle, const char *, char *, unsigned int, int *);
+ mysql_string_iterator_handle (*mysql_string_get_iterator_type)
+ (mysql_string_handle);
+ int (*mysql_string_iterator_next_type)(mysql_string_iterator_handle);
+ int (*mysql_string_iterator_isupper_type)(mysql_string_iterator_handle);
+ int (*mysql_string_iterator_islower_type)(mysql_string_iterator_handle);
+ int (*mysql_string_iterator_isdigit_type)(mysql_string_iterator_handle);
+ mysql_string_handle (*mysql_string_to_lowercase_type)(mysql_string_handle);
+ void (*mysql_string_free_type)(mysql_string_handle);
+ void (*mysql_string_iterator_free_type)(mysql_string_iterator_handle);
+} *mysql_string_service;
+
+#ifdef MYSQL_DYNAMIC_PLUGIN
+
+#define mysql_string_convert_to_char_ptr(string_handle, charset_name, \
+ buffer, buffer_size, error) \
+ mysql_string_service->mysql_string_convert_to_char_ptr_type \
+ (string_handle, charset_name, buffer, \
+ buffer_size, error)
+
+#define mysql_string_get_iterator(string_handle) \
+ mysql_string_service->mysql_string_get_iterator_type(string_handle)
+
+#define mysql_string_iterator_next(iterator_handle) \
+ mysql_string_service->mysql_string_iterator_next_type(iterator_handle)
+
+#define mysql_string_iterator_isupper(iterator_handle) \
+ mysql_string_service->mysql_string_iterator_isupper_type \
+ (iterator_handle)
+
+#define mysql_string_iterator_islower(iterator_handle) \
+ mysql_string_service->mysql_string_iterator_islower_type \
+ (iterator_handle)
+
+#define mysql_string_iterator_isdigit(iterator_handle) \
+ mysql_string_service->mysql_string_iterator_isdigit_type \
+ (iterator_handle)
+
+#define mysql_string_to_lowercase(string_handle) \
+ mysql_string_service->mysql_string_to_lowercase_type(string_handle)
+
+#define mysql_string_free(mysql_string_handle) \
+ mysql_string_service->mysql_string_free_type(mysql_string_handle)
+
+#define mysql_string_iterator_free(mysql_string_iterator_handle) \
+ mysql_string_service->mysql_string_iterator_free_type \
+ (mysql_string_iterator_handle)
+#else
+
+/* This service function convert string into given character set */
+int mysql_string_convert_to_char_ptr(mysql_string_handle string_handle,
+ const char *charset_name, char *buffer,
+ unsigned int buffer_size, int *error);
+
+/* This service function returns the beginning of the iterator handle */
+mysql_string_iterator_handle mysql_string_get_iterator(mysql_string_handle
+ string_handle);
+/*
+ This service function gets the next iterator handle
+ returns 0 if reached the end else return 1
+*/
+int mysql_string_iterator_next(mysql_string_iterator_handle iterator_handle);
+
+/*
+ This service function return 1 if current iterator handle points to a
+ uppercase character else return 0 for client character set.
+*/
+int mysql_string_iterator_isupper(mysql_string_iterator_handle iterator_handle);
+
+/*
+ This service function return 1 if current iterator handle points to a
+ lowercase character else return 0 for client character set.
+*/
+int mysql_string_iterator_islower(mysql_string_iterator_handle iterator_handle);
+
+/*
+ This service function return 1 if current iterator handle points to a digit
+ else return 0 for client character sets.
+*/
+int mysql_string_iterator_isdigit(mysql_string_iterator_handle iterator_handle);
+
+/* convert string_handle into lowercase */
+mysql_string_handle mysql_string_to_lowercase(mysql_string_handle
+ string_handle);
+
+/* It deallocates the string created on server side during plugin operations */
+void mysql_string_free(mysql_string_handle);
+
+/*
+ It deallocates the string iterator created on server side
+ during plugin operations
+*/
+void mysql_string_iterator_free(mysql_string_iterator_handle);
+
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/db/include/mysql/service_parser.h b/db/include/mysql/service_parser.h
new file mode 100644
index 0000000..c2dd85f
--- /dev/null
+++ b/db/include/mysql/service_parser.h
@@ -0,0 +1,292 @@
+#ifndef MYSQL_SERVICE_PARSER_INCLUDED
+#define MYSQL_SERVICE_PARSER_INCLUDED
+/* Copyright (c) 2015, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 */
+
+#include "my_md5_size.h"
+#include
+
+#ifndef MYSQL_ABI_CHECK
+#include
+#endif
+
+#ifdef __cplusplus
+class THD;
+class Item;
+#define MYSQL_THD THD*
+typedef Item* MYSQL_ITEM;
+#else
+#define MYSQL_THD void*
+typedef void* MYSQL_ITEM;
+#endif /* __cplusplus */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ @file service_parser
+
+ Plugin service that provides access to the parser and some operations on the
+ parse tree.
+*/
+
+#define PARSER_SERVICE_DIGEST_LENGTH MD5_HASH_SIZE
+
+#define STATEMENT_TYPE_SELECT 1
+#define STATEMENT_TYPE_OTHER 2
+
+typedef
+int (*parse_node_visit_function)(MYSQL_ITEM item, unsigned char* arg);
+
+
+typedef
+int (*sql_condition_handler_function)(int sql_errno,
+ const char* sqlstate,
+ const char* msg,
+ void *state);
+
+struct st_my_thread_handle;
+
+extern struct mysql_parser_service_st {
+
+ MYSQL_THD (*mysql_current_session)();
+
+ MYSQL_THD (*mysql_open_session)();
+
+ void (*mysql_start_thread)(MYSQL_THD thd, void *(*callback_fun)(void*),
+ void *arg,
+ struct st_my_thread_handle *thread_handle);
+
+ void (*mysql_join_thread)(struct st_my_thread_handle *thread_handle);
+
+ void (*mysql_set_current_database)(MYSQL_THD thd, const MYSQL_LEX_STRING db);
+
+ /**
+ Parses the query.
+
+ @param thd The session in which to parse.
+
+ @param query The query to parse.
+
+ @param is_prepared If non-zero, the query will be parsed as a prepared
+ statement and won't throw errors when the query string contains '?'.
+
+ @param handle_condition Callback function that is called if a condition is
+ raised during the preparation, parsing or cleanup after parsing. If this
+ argument is non-NULL, the diagnostics area will be cleared before this
+ function returns.
+
+ @param condition_handler_state Will be passed to handle_condition when
+ called. Otherwise ignored.
+
+ @retval 0 Success.
+ @retval 1 Parse error.
+ */
+ int (*mysql_parse)(MYSQL_THD thd, const MYSQL_LEX_STRING query,
+ unsigned char is_prepared,
+ sql_condition_handler_function handle_condition,
+ void *condition_handler_state);
+
+ int (*mysql_get_statement_type)(MYSQL_THD thd);
+
+ /**
+ Returns the digest of the last parsed statement in the session.
+
+ @param thd The session in which the statement was parsed.
+
+ @param digest[out] An area of at least size PARSER_SERVICE_DIGEST_LENGTH,
+ where the digest is written.
+
+ @retval 0 Success.
+ @retval 1 Parse error.
+ */
+ int (*mysql_get_statement_digest)(MYSQL_THD thd, unsigned char *digest);
+
+
+ /**
+ Returns the number of parameters ('?') in the parsed query.
+ This works only if the last query was parsed as a prepared statement.
+
+ @param thd The session in which the query was parsed.
+
+ @return The number of parameter markers.
+ */
+ int (*mysql_get_number_params)(MYSQL_THD thd);
+
+
+ /**
+ Stores in 'positions' the positions in the last parsed query of each
+ parameter marker('?'). Positions must be an already allocated array of at
+ least mysql_parser_service_st::mysql_get_number_params() size. This works
+ only if the last query was parsed as a prepared statement.
+
+ @param thd The session in which the query was parsed.
+
+ @param positions An already allocated array of at least
+ mysql_parser_service_st::mysql_get_number_params() size.
+
+ @return The number of parameter markers and hence number of written
+ positions.
+ */
+ int (*mysql_extract_prepared_params)(MYSQL_THD thd, int *positions);
+
+
+ /**
+ Walks the tree depth first and applies a user defined function on each
+ literal.
+
+ @param thd The session in which the query was parsed.
+
+ @param processor Will be called for each literal in the parse tree.
+
+ @param arg Will be passed as argument to each call to 'processor'.
+ */
+ int (*mysql_visit_tree)(MYSQL_THD thd, parse_node_visit_function processor,
+ unsigned char* arg);
+
+
+ /**
+ Renders the MYSQL_ITEM as a string and returns a reference in the form of
+ a MYSQL_LEX_STRING. The string buffer is allocated by the server and must
+ be freed by mysql_free_string().
+
+ @param item The literal to print.
+
+ @return The result of printing the literal.
+
+ @see mysql_parser_service_st::mysql_free_string().
+ */
+ MYSQL_LEX_STRING (*mysql_item_string)(MYSQL_ITEM item);
+
+
+ /**
+ Frees a string buffer allocated by the server.
+
+ @param The string whose buffer will be freed.
+ */
+ void (*mysql_free_string)(MYSQL_LEX_STRING string);
+
+
+ /**
+ Returns the current query string. This string is managed by the server and
+ should @b not be freed by a plugin.
+
+ @param thd The session in which the query was submitted.
+
+ @return The query string.
+ */
+ MYSQL_LEX_STRING (*mysql_get_query)(MYSQL_THD thd);
+
+
+ /**
+ Returns the current query in normalized form. This string is managed by
+ the server and should @b not be freed by a plugin.
+
+ @param thd The session in which the query was submitted.
+
+ @return The query string normalized.
+ */
+ MYSQL_LEX_STRING (*mysql_get_normalized_query)(MYSQL_THD thd);
+} *mysql_parser_service;
+
+#ifdef MYSQL_DYNAMIC_PLUGIN
+
+#define mysql_parser_current_session() \
+ mysql_parser_service->mysql_current_session()
+
+#define mysql_parser_open_session() \
+ mysql_parser_service->mysql_open_session()
+
+#define mysql_parser_start_thread(thd, func, arg, thread_handle) \
+ mysql_parser_service->mysql_start_thread(thd, func, arg, thread_handle)
+
+#define mysql_parser_join_thread(thread_handle) \
+ mysql_parser_service->mysql_join_thread(thread_handle)
+
+#define mysql_parser_set_current_database(thd, db) \
+ mysql_parser_service->mysql_set_current_database(thd, db)
+
+#define mysql_parser_parse(thd, query, is_prepared, \
+ condition_handler, condition_handler_state) \
+ mysql_parser_service->mysql_parse(thd, query, is_prepared, \
+ condition_handler, \
+ condition_handler_state)
+
+#define mysql_parser_get_statement_type(thd) \
+ mysql_parser_service->mysql_get_statement_type(thd)
+
+#define mysql_parser_get_statement_digest(thd, digest) \
+ mysql_parser_service->mysql_get_statement_digest(thd, digest)
+
+#define mysql_parser_get_number_params(thd) \
+ mysql_parser_service->mysql_get_number_params(thd)
+
+#define mysql_parser_extract_prepared_params(thd, positions) \
+ mysql_parser_service->mysql_extract_prepared_params(thd, positions)
+
+#define mysql_parser_visit_tree(thd, processor, arg) \
+ mysql_parser_service->mysql_visit_tree(thd, processor, arg)
+
+#define mysql_parser_item_string(item) \
+ mysql_parser_service->mysql_item_string(item)
+
+#define mysql_parser_free_string(string) \
+ mysql_parser_service->mysql_free_string(string)
+
+#define mysql_parser_get_query(thd) \
+ mysql_parser_service->mysql_get_query(thd)
+
+#define mysql_parser_get_normalized_query(thd) \
+ mysql_parser_service->mysql_get_normalized_query(thd)
+
+#else
+typedef void *(*callback_function)(void*);
+MYSQL_THD mysql_parser_current_session();
+MYSQL_THD mysql_parser_open_session();
+void mysql_parser_start_thread(MYSQL_THD thd, callback_function fun, void *arg,
+ struct st_my_thread_handle *thread_handle);
+void mysql_parser_join_thread(struct st_my_thread_handle *thread_handle);
+void mysql_parser_set_current_database(MYSQL_THD thd,
+ const MYSQL_LEX_STRING db);
+int mysql_parser_parse(MYSQL_THD thd, const MYSQL_LEX_STRING query,
+ unsigned char is_prepared,
+ sql_condition_handler_function handle_condition,
+ void *condition_handler_state);
+int mysql_parser_get_statement_type(MYSQL_THD thd);
+int mysql_parser_get_statement_digest(MYSQL_THD thd, unsigned char *digest);
+int mysql_parser_get_number_params(MYSQL_THD thd);
+int mysql_parser_extract_prepared_params(MYSQL_THD thd, int *positions);
+int mysql_parser_visit_tree(MYSQL_THD thd, parse_node_visit_function processor,
+ unsigned char* arg);
+MYSQL_LEX_STRING mysql_parser_item_string(MYSQL_ITEM item);
+void mysql_parser_free_string(MYSQL_LEX_STRING string);
+MYSQL_LEX_STRING mysql_parser_get_query(MYSQL_THD thd);
+MYSQL_LEX_STRING mysql_parser_get_normalized_query(MYSQL_THD thd);
+
+#endif /* MYSQL_DYNAMIC_PLUGIN */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* MYSQL_SERVICE_PARSER_INCLUDED */
diff --git a/db/include/mysql/service_rpl_transaction_ctx.h b/db/include/mysql/service_rpl_transaction_ctx.h
new file mode 100644
index 0000000..7a23a10
--- /dev/null
+++ b/db/include/mysql/service_rpl_transaction_ctx.h
@@ -0,0 +1,88 @@
+/* Copyright (c) 2014, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 MYSQL_SERVICE_RPL_TRANSACTION_CTX_INCLUDED
+
+/**
+ @file include/mysql/service_rpl_transaction_ctx.h
+ This service provides a function for plugins to report if a transaction of a
+ given THD should continue or be aborted.
+
+ SYNOPSIS
+ set_transaction_ctx()
+ should be called during RUN_HOOK macro, on which we know that thread is
+ on plugin context and it is before
+ Rpl_transaction_ctx::is_transaction_rollback() check.
+*/
+
+#ifndef MYSQL_ABI_CHECK
+#include
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct st_transaction_termination_ctx
+{
+ unsigned long m_thread_id;
+ unsigned int m_flags; // reserved
+
+ /*
+ If the instruction is to rollback the transaction,
+ then this flag is set to false.
+ Note: type is char like on my_bool.
+ */
+ char m_rollback_transaction;
+
+ /*
+ If the plugin has generated a GTID, then the follwoing
+ fields MUST be set.
+ Note: type is char like on my_bool.
+ */
+ char m_generated_gtid;
+ int m_sidno;
+ long long int m_gno;
+};
+typedef struct st_transaction_termination_ctx Transaction_termination_ctx;
+
+extern struct rpl_transaction_ctx_service_st {
+ int (*set_transaction_ctx)(Transaction_termination_ctx transaction_termination_ctx);
+} *rpl_transaction_ctx_service;
+
+#ifdef MYSQL_DYNAMIC_PLUGIN
+
+#define set_transaction_ctx(transaction_termination_ctx) \
+ (rpl_transaction_ctx_service->set_transaction_ctx((transaction_termination_ctx)))
+
+#else
+
+int set_transaction_ctx(Transaction_termination_ctx transaction_termination_ctx);
+
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#define MYSQL_SERVICE_RPL_TRANSACTION_CTX_INCLUDED
+#endif
diff --git a/db/include/mysql/service_rpl_transaction_write_set.h b/db/include/mysql/service_rpl_transaction_write_set.h
new file mode 100644
index 0000000..4603eb0
--- /dev/null
+++ b/db/include/mysql/service_rpl_transaction_write_set.h
@@ -0,0 +1,102 @@
+/* Copyright (c) 2014, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 MYSQL_SERVICE_TRANSACTION_WRITE_SET_INCLUDED
+
+/**
+ @file include/mysql/service_rpl_transaction_write_set.h
+ This service provides a function for plugins to get the write set of a given
+ transaction.
+
+ SYNOPSIS
+ get_transaction_write_set()
+ This service is used to fetch the write_set extracted for the currently
+ executing transaction by passing the thread_id as an input parameter for
+ the method.
+
+ @param [in] - thread_id - It is the thread identifier of the currently
+ executing thread.
+
+ In the current implementation it is being called during RUN_HOOK macro,
+ on which we know that thread is on plugin context.
+
+ Cleanup :
+ The service caller must take of the memory allocated during the service
+ call to prevent memory leaks.
+*/
+
+#ifndef MYSQL_ABI_CHECK
+#include
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ This structure is used to keep the list of the hash values of the records
+ changed in the transaction.
+*/
+struct st_trans_write_set
+{
+ unsigned int m_flags; // reserved
+ unsigned long write_set_size; // Size of the PKE set of the transaction.
+ unsigned long long* write_set; // A pointer to the PKE set.
+};
+typedef struct st_trans_write_set Transaction_write_set;
+
+extern struct transaction_write_set_service_st {
+ Transaction_write_set* (*get_transaction_write_set)(unsigned long m_thread_id);
+ void (*require_full_write_set)(int requires_ws);
+ void (*set_write_set_memory_size_limit)(long long size_limit);
+ void (*update_write_set_memory_size_limit)(long long size_limit);
+} *transaction_write_set_service;
+
+#ifdef MYSQL_DYNAMIC_PLUGIN
+
+#define get_transaction_write_set(m_thread_id) \
+ (transaction_write_set_service->get_transaction_write_set((m_thread_id)))
+#define require_full_write_set(requires_ws) \
+ transaction_write_set_service->require_full_write_set(requires_ws)
+#define set_write_set_memory_size_limit(size_limit) \
+ transaction_write_set_service->set_write_set_memory_size_limit(size_limit)
+#define update_write_set_memory_size_limit(size_limit) \
+ transaction_write_set_service->update_write_set_memory_size_limit(size_limit)
+
+#else
+
+Transaction_write_set* get_transaction_write_set(unsigned long m_thread_id);
+
+void require_full_write_set(int requires_ws);
+
+void set_write_set_memory_size_limit(long long size_limit);
+
+void update_write_set_memory_size_limit(long long size_limit);
+
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#define MYSQL_SERVICE_TRANSACTION_WRITE_SET_INCLUDED
+#endif
diff --git a/db/include/mysql/service_rules_table.h b/db/include/mysql/service_rules_table.h
new file mode 100644
index 0000000..302eb52
--- /dev/null
+++ b/db/include/mysql/service_rules_table.h
@@ -0,0 +1,198 @@
+#ifdef __cplusplus
+#ifndef SERVICE_RULES_TABLE_INCLUDED
+#define SERVICE_RULES_TABLE_INCLUDED
+
+/* Copyright (c) 2015, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 */
+
+#include
+#include
+#include
+
+#ifndef MYSQL_ABI_CHECK
+#include
+#endif
+
+
+/**
+ @file service_rules_table.h
+
+ Plugin service that provides access to the rewrite rules table that is used
+ by the Rewriter plugin. No other use intended.
+*/
+
+class THD;
+struct TABLE_LIST;
+class Field;
+
+namespace rules_table_service
+{
+
+
+/**
+ There must be one function of this kind in order for the symbols in the
+ server's dynamic library to be visible to plugins.
+*/
+int dummy_function_to_ensure_we_are_linked_into_the_server();
+
+
+/**
+ Frees a const char pointer allocated in the server's dynamic library using
+ new[].
+*/
+void free_string(const char *str);
+
+
+/**
+ Writable cursor that allows reading and updating of rows in a persistent
+ table.
+*/
+class Cursor
+{
+public:
+ typedef int column_id;
+
+ static const column_id ILLEGAL_COLUMN_ID= -1;
+
+ /**
+ Creates a cursor to an already-opened table. The constructor is kept
+ explicit because of implicit conversions from void*.
+ */
+ explicit Cursor(THD *thd);
+
+ /// Creates a past-the-end cursor.
+ Cursor() :
+ m_thd(NULL), m_table_list(NULL), m_is_finished(true)
+ {}
+
+ column_id pattern_column() const { return m_pattern_column; }
+ column_id pattern_database_column() const
+ {
+ return m_pattern_database_column;
+ }
+ column_id replacement_column() const { return m_replacement_column; }
+ column_id enabled_column() const { return m_enabled_column; }
+ column_id message_column() const { return m_message_column; }
+ column_id pattern_digest_column() const { return m_pattern_digest_column; }
+ column_id normalized_pattern_column() const {
+ return m_normalized_pattern_column;
+ }
+
+ /**
+ True if the table does not contain columns named 'pattern', 'replacement',
+ 'enabled' and 'message'. In this case the cursor is equal to any
+ past-the-end Cursor.
+ */
+ bool table_is_malformed() { return m_table_is_malformed; }
+
+ /**
+ Fetches the value of the column with the given number as a C string.
+
+ This interface is meant for crossing dynamic library boundaries, hence the
+ use of C-style const char*. The function casts a column value to a C
+ string and returns a copy, allocated in the callee's DL. The pointer
+ must be freed using free_string().
+
+ @param fieldno One of PATTERN_COLUMN, REPLACEMENT_COLUMN, ENABLED_COLUMN
+ or MESSAGE_COLUMN.
+ */
+ const char *fetch_string(int fieldno);
+
+ /**
+ Equality operator. The only cursors that are equal are past-the-end
+ cursors.
+ */
+ bool operator== (const Cursor &other)
+ {
+ return (m_is_finished == other.m_is_finished);
+ }
+
+ /**
+ Inequality operator. All cursors are considered different except
+ past-the-end cursors.
+ */
+ bool operator!= (const Cursor &other) { return !(*this == other); }
+
+ /**
+ Advances this Cursor. Read errors are kept, and had_serious_read_error()
+ will tell if there was an unexpected error (e.g. not EOF) while reading.
+ */
+ Cursor &operator++ ()
+ {
+ if (!m_is_finished)
+ read();
+ return *this;
+ }
+
+ /// Prepares the write buffer for updating the current row.
+ void make_writeable();
+
+ /**
+ Sets the value of column colno to a string value.
+
+ @param colno The column number.
+ @param str The string.
+ @param length The string's length.
+ */
+ void set(int colno, const char* str, size_t length);
+
+ /// Writes the row in the write buffer to the table at the current row.
+ int write();
+
+ /// True if there was an unexpected error while reading, e.g. other than EOF.
+ bool had_serious_read_error() const;
+
+ /// Closes the table scan if initiated and commits the transaction.
+ ~Cursor();
+
+private:
+ int field_index(const char *field_name);
+
+ int m_pattern_column;
+ int m_pattern_database_column;
+ int m_replacement_column;
+ int m_enabled_column;
+ int m_message_column;
+ int m_pattern_digest_column;
+ int m_normalized_pattern_column;
+
+ THD *m_thd;
+ TABLE_LIST *m_table_list;
+
+ bool m_is_finished;
+ bool m_table_is_malformed;
+ int m_last_read_status;
+
+ int read();
+};
+
+
+/**
+ A past-the-end Cursor. All past-the-end cursors are considered equal
+ when compared with operator ==.
+*/
+Cursor end();
+
+}
+
+#endif // SERVICE_RULES_TABLE_INCLUDED
+#endif // __cplusplus
diff --git a/db/include/mysql/service_security_context.h b/db/include/mysql/service_security_context.h
new file mode 100644
index 0000000..462ccd4
--- /dev/null
+++ b/db/include/mysql/service_security_context.h
@@ -0,0 +1,102 @@
+/* Copyright (c) 2015, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 MYSQL_SERVICE_SECURITY_CONTEXT
+#define MYSQL_SERVICE_SECURITY_CONTEXT
+
+/**
+ @file include/mysql/service_security_context.h
+
+ This service provides functions for plugins and storage engines to
+ manipulate the thread's security context.
+*/
+
+#ifdef __cplusplus
+class Security_context;
+#define MYSQL_SECURITY_CONTEXT Security_context*
+#else
+#define MYSQL_SECURITY_CONTEXT void*
+#endif
+typedef char my_svc_bool;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern struct security_context_service_st {
+ my_svc_bool (*thd_get_security_context)(MYSQL_THD, MYSQL_SECURITY_CONTEXT *out_ctx);
+ my_svc_bool (*thd_set_security_context)(MYSQL_THD, MYSQL_SECURITY_CONTEXT in_ctx);
+
+ my_svc_bool (*security_context_create)(MYSQL_SECURITY_CONTEXT *out_ctx);
+ my_svc_bool (*security_context_destroy)(MYSQL_SECURITY_CONTEXT);
+ my_svc_bool (*security_context_copy)(MYSQL_SECURITY_CONTEXT in_ctx, MYSQL_SECURITY_CONTEXT *out_ctx);
+
+ my_svc_bool (*security_context_lookup)(MYSQL_SECURITY_CONTEXT ctx,
+ const char *user, const char *host,
+ const char *ip, const char *db);
+
+ my_svc_bool (*security_context_get_option)(MYSQL_SECURITY_CONTEXT, const char *name, void *inout_pvalue);
+ my_svc_bool (*security_context_set_option)(MYSQL_SECURITY_CONTEXT, const char *name, void *pvalue);
+} *security_context_service;
+
+#ifdef MYSQL_DYNAMIC_PLUGIN
+
+#define thd_get_security_context(_THD, _CTX) \
+ security_context_service->thd_get_security_context(_THD, _CTX)
+#define thd_set_security_context(_THD, _CTX) \
+ security_context_service->thd_set_security_context(_THD, _CTX)
+
+#define security_context_create(_CTX) \
+ security_context_service->security_context_create(_CTX)
+#define security_context_destroy(_CTX) \
+ security_context_service->security_context_destroy(_CTX)
+#define security_context_copy(_CTX1, _CTX2) \
+ security_context_service->security_context_copy(_CTX1,_CTX2)
+
+#define security_context_lookup(_CTX, _U, _H, _IP, _DB) \
+ security_context_service->security_context_lookup(_CTX, _U, _H, _IP, _DB)
+
+#define security_context_get_option(_SEC_CTX, _NAME, _VALUE) \
+ security_context_service->security_context_get_option(_SEC_CTX, _NAME, _VALUE)
+#define security_context_set_option(_SEC_CTX, _NAME, _VALUE) \
+ security_context_service->security_context_set_option(_SEC_CTX, _NAME, _VALUE)
+#else
+ my_svc_bool thd_get_security_context(MYSQL_THD, MYSQL_SECURITY_CONTEXT *out_ctx);
+ my_svc_bool thd_set_security_context(MYSQL_THD, MYSQL_SECURITY_CONTEXT in_ctx);
+
+ my_svc_bool security_context_create(MYSQL_SECURITY_CONTEXT *out_ctx);
+ my_svc_bool security_context_destroy(MYSQL_SECURITY_CONTEXT ctx);
+ my_svc_bool security_context_copy(MYSQL_SECURITY_CONTEXT in_ctx, MYSQL_SECURITY_CONTEXT *out_ctx);
+
+ my_svc_bool security_context_lookup(MYSQL_SECURITY_CONTEXT ctx,
+ const char *user, const char *host,
+ const char *ip, const char *db);
+
+ my_svc_bool security_context_get_option(MYSQL_SECURITY_CONTEXT, const char *name, void *inout_pvalue);
+ my_svc_bool security_context_set_option(MYSQL_SECURITY_CONTEXT, const char *name, void *pvalue);
+#endif /* !MYSQL_DYNAMIC_PLUGIN */
+
+#ifdef __cplusplus
+}
+#endif /* _cplusplus */
+
+#endif /* !MYSQL_SERVICE_SECURITY_CONTEXT */
diff --git a/db/include/mysql/service_srv_session.h b/db/include/mysql/service_srv_session.h
new file mode 100644
index 0000000..898b90a
--- /dev/null
+++ b/db/include/mysql/service_srv_session.h
@@ -0,0 +1,179 @@
+/* Copyright (c) 2015, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 MYSQL_SRV_SESSION_SERVICE_INCLUDED
+#define MYSQL_SRV_SESSION_SERVICE_INCLUDED
+
+/**
+ @file
+ Header file for the Server session service. This service is to provide
+ of creating sessions with the server. These sessions can be furtherly used
+ together with the Command service to execute commands in the server.
+*/
+
+
+#ifdef __cplusplus
+class Srv_session;
+typedef class Srv_session* MYSQL_SESSION;
+#else
+struct Srv_session;
+typedef struct Srv_session* MYSQL_SESSION;
+#endif
+
+#ifndef MYSQL_ABI_CHECK
+#include "mysql/plugin.h" /* MYSQL_THD */
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef void (*srv_session_error_cb)(void *ctx,
+ unsigned int sql_errno,
+ const char *err_msg);
+
+extern struct srv_session_service_st
+{
+ int (*init_session_thread)(const void *plugin);
+
+ void (*deinit_session_thread)();
+
+ MYSQL_SESSION (*open_session)(srv_session_error_cb error_cb,
+ void *plugix_ctx);
+
+ int (*detach_session)(MYSQL_SESSION session);
+
+ int (*close_session)(MYSQL_SESSION session);
+
+ int (*server_is_available)();
+} *srv_session_service;
+
+#ifdef MYSQL_DYNAMIC_PLUGIN
+
+#define srv_session_init_thread(plugin) \
+ srv_session_service->init_session_thread((plugin))
+
+#define srv_session_deinit_thread() \
+ srv_session_service->deinit_session_thread()
+
+#define srv_session_open(cb, ctx) \
+ srv_session_service->open_session((cb), (ctx))
+
+#define srv_session_detach(session) \
+ srv_session_service->detach_session((session))
+
+#define srv_session_close(session) \
+ srv_session_service->close_session((session))
+
+#define srv_session_server_is_available() \
+ srv_session_service->server_is_available()
+
+#else
+
+/**
+ Initializes the current physical thread to use with session service.
+
+ Call this function ONLY in physical threads which are not initialized in
+ any way by the server.
+
+ @param plugin Pointer to the plugin structure, passed to the plugin over
+ the plugin init function.
+
+ @return
+ 0 success
+ 1 failure
+*/
+int srv_session_init_thread(const void *plugin);
+
+/**
+ Deinitializes the current physical thread to use with session service.
+
+
+ Call this function ONLY in physical threads which were initialized using
+ srv_session_init_thread().
+*/
+void srv_session_deinit_thread();
+
+/**
+ Opens a server session.
+
+ In a thread not initialized by the server itself, this function should be
+ called only after srv_session_init_thread() has already been called.
+
+ @param error_cb Default completion callback
+ @param plugin_ctx Plugin's context, opaque pointer that would
+ be provided to callbacks. Might be NULL.
+ @return
+ session on success
+ NULL on failure
+*/
+MYSQL_SESSION srv_session_open(srv_session_error_cb cb, void *plugix_ctx);
+
+/**
+ Detaches a session from current physical thread.
+
+ Detaches a previously attached session. Sessions are automatically attached
+ when they are used with the Command service (command_service_run_command()).
+ If the session is opened in a spawned thread, then it will stay attached
+ after command_service_run_command() until another session is used in the
+ same physical thread. The command services will detach the previously used
+ session and attach the one to be used for execution.
+
+ This function should be called in case the session has to be used in
+ different physical thread. It will unbound the session from the current
+ physical thread. After that the session can be used in a different thread.
+
+ @param session Session to detach
+
+ @returns
+ 0 success
+ 1 failure
+*/
+int srv_session_detach(MYSQL_SESSION session);
+
+/**
+ Closes a previously opened session.
+
+ @param session Session to close
+
+ @return
+ 0 success
+ 1 failure
+*/
+int srv_session_close(MYSQL_SESSION session);
+
+/**
+ Returns if the server is available (not booting or shutting down)
+
+ @return
+ 0 not available
+ 1 available
+*/
+int srv_session_server_is_available();
+
+
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* MYSQL_SRV_SESSION_SERVICE_INCLUDED */
diff --git a/db/include/mysql/service_srv_session_info.h b/db/include/mysql/service_srv_session_info.h
new file mode 100644
index 0000000..2da5138
--- /dev/null
+++ b/db/include/mysql/service_srv_session_info.h
@@ -0,0 +1,180 @@
+#ifndef MYSQL_SERVICE_SRV_SESSION_INFO_INCLUDED
+#define MYSQL_SERVICE_SRV_SESSION_INFO_INCLUDED
+/* Copyright (c) 2015, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 */
+
+/**
+ @file
+ Service providing setters and getters for some properties of a session
+*/
+
+
+#include "mysql/service_srv_session.h"
+#ifndef MYSQL_ABI_CHECK
+#include "my_thread.h" /* my_thread_id */
+#include "m_string.h" /* LEX_CSTRING */
+#include "plugin.h" /* MYSQL_THD */
+#include "mysql_com.h" /* Vio for violite.h */
+#include "violite.h" /* enum_vio_type */
+#include /* uint16_t */
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern struct srv_session_info_service_st {
+ MYSQL_THD (*get_thd)(MYSQL_SESSION session);
+
+ my_thread_id (*get_session_id)(MYSQL_SESSION session);
+
+ LEX_CSTRING (*get_current_db)(MYSQL_SESSION session);
+
+ uint16_t (*get_client_port)(MYSQL_SESSION session);
+ int (*set_client_port)(MYSQL_SESSION session, uint16_t port);
+
+ int (*set_connection_type)(MYSQL_SESSION session, enum enum_vio_type type);
+
+ int (*killed)(MYSQL_SESSION session);
+
+ unsigned int (*session_count)();
+ unsigned int (*thread_count)(const void *plugin);
+} *srv_session_info_service;
+
+#ifdef MYSQL_DYNAMIC_PLUGIN
+
+#define srv_session_info_get_thd(session) srv_session_info_service->get_thd((session))
+#define srv_session_info_get_session_id(sess) srv_session_info_service->get_session_id((sess))
+#define srv_session_info_get_current_db(sess) srv_session_info_service->get_current_db((sess))
+#define srv_session_info_get_client_port(sess) srv_session_info_service->get_client_port((sess))
+#define srv_session_info_set_client_port(sess, port) srv_session_info_service->set_client_port((sess), (port))
+#define srv_session_info_set_connection_type(sess, type) srv_session_info_service->set_connection_type((sess), (type))
+#define srv_session_info_killed(sess) srv_session_info_service->killed((sess))
+#define srv_session_info_session_count(sess) srv_session_info_service->session_count(sess)
+#define srv_session_info_thread_count(plugin) srv_session_info_service->thread_count(plugin)
+
+#else
+
+/**
+ Returns the THD of a session.
+
+ @param session Session
+
+ @returns
+ address of the THD
+*/
+MYSQL_THD srv_session_info_get_thd(MYSQL_SESSION session);
+
+/**
+ Returns the ID of a session.
+
+ @param session Session
+*/
+my_thread_id srv_session_info_get_session_id(MYSQL_SESSION session);
+
+/**
+ Returns the current database of a session.
+
+ @note {NULL, 0} is returned case of no current database or session is NULL
+
+
+ @param session Session
+*/
+LEX_CSTRING srv_session_info_get_current_db(MYSQL_SESSION session);
+
+/**
+ Returns the client port of a session.
+
+ @note The client port in SHOW PROCESSLIST, INFORMATION_SCHEMA.PROCESSLIST.
+ This port is NOT shown in PERFORMANCE_SCHEMA.THREADS.
+
+ @param session Session
+*/
+uint16_t srv_session_info_get_client_port(MYSQL_SESSION session);
+
+/**
+ Sets the client port of a session.
+
+ @note The client port in SHOW PROCESSLIST, INFORMATION_SCHEMA.PROCESSLIST.
+ This port is NOT shown in PERFORMANCE_SCHEMA.THREADS.
+
+ @param session Session
+ @param port Port number
+
+ @return
+ 0 success
+ 1 failure
+*/
+int srv_session_info_set_client_port(MYSQL_SESSION session, uint16_t port);
+
+/**
+ Sets the connection type of a session.
+
+ @see enum_vio_type
+
+ @note The type is shown in PERFORMANCE_SCHEMA.THREADS. The value is translated
+ from the enum to a string according to @see vio_type_names array
+ in vio/vio.c
+
+ @note If NO_VIO_TYPE passed as type the call will fail.
+
+ @return
+ 0 success
+ 1 failure
+*/
+int srv_session_info_set_connection_type(MYSQL_SESSION session,
+ enum enum_vio_type type);
+
+/**
+ Returns whether the session was killed
+
+ @param session Session
+
+ @return
+ 0 not killed
+ 1 killed
+*/
+int srv_session_info_killed(MYSQL_SESSION session);
+
+/**
+ Returns the number opened sessions in thread initialized by srv_session
+ service.
+*/
+unsigned int srv_session_info_session_count();
+
+
+/**
+ Returns the number opened sessions in thread initialized by srv_session
+ service.
+
+ @param plugin Pointer to the plugin structure, passed to the plugin over
+ the plugin init function.
+*/
+unsigned int srv_session_info_thread_count(const void *plugin);
+
+#endif /* MYSQL_DYNAMIC_PLUGIN */
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* MYSQL_SERVICE_SRV_SESSION_INFO_INCLUDED */
diff --git a/db/include/mysql/service_ssl_wrapper.h b/db/include/mysql/service_ssl_wrapper.h
new file mode 100644
index 0000000..c85907b
--- /dev/null
+++ b/db/include/mysql/service_ssl_wrapper.h
@@ -0,0 +1,180 @@
+#ifndef SSL_WRAPPER_INCLUDED
+#define SSL_WRAPPER_INCLUDED
+
+/* Copyright (c) 2016, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 */
+
+#include "violite.h"
+
+namespace ssl_wrappe_service
+{
+
+int MY_ATTRIBUTE((visibility("default")))
+dummy_function_to_ensure_we_are_linked_into_the_server();
+
+} // ssl_wrappe_service
+
+/**
+ Return version of SSL used in currect connection
+
+ @param vio VIO connection descriptor
+ @param buffer Character buffer in which the version is going to be placed
+ @param buffer_size Size of the character buffer
+*/
+extern "C"
+void ssl_wrapper_version(Vio *vio, char *version, const size_t version_size);
+
+/**
+ Return cipher used in current connection
+
+ @param vio VIO connection descriptor
+ @param buffer Character buffer in which the cipher name is going to be placed
+ @param buffer_size Size of the character buffer
+*/
+extern "C"
+void ssl_wrapper_cipher(Vio *vio, char *cipher, const size_t cipher_size);
+
+/**
+ Return cipher list that can be used for SSL
+
+ @param vio VIO connection descriptor
+ @param clipher_list Pointer to an array of c-strings
+ @param maximun_num_of_elements Size of the pointer array
+*/
+extern "C"
+long ssl_wrapper_cipher_list(Vio *vio, const char **clipher_list, const size_t maximun_num_of_elements);
+
+/**
+ Return the verification depth limit set in SSL
+
+ @param vio VIO connection descriptor
+
+ @return
+ -1 default values should be used
+ >0 verification depth
+*/
+extern "C"
+long ssl_wrapper_verify_depth(Vio *vio);
+
+/**
+ Return the verification mode set in SSL
+
+ @param vio VIO connection descriptor
+
+ @return
+ -1 default values should be used
+ >0 verification mode
+*/
+extern "C"
+long ssl_wrapper_verify_mode(Vio *vio);
+
+/**
+ Return issuer name form peers ssl certificate
+
+ @param vio VIO connection descriptor
+ @param issuer Character buffer in which the issuer name is going to be placed
+ @param issuer_size Size of character buffer for the issuer name
+*/
+extern "C"
+void ssl_wrapper_get_peer_certificate_issuer(Vio *vio, char *issuer, const size_t issuer_size);
+
+/**
+ Return subject field form peers ssl certificate
+
+ @param vio VIO connection descriptor
+ @param subject Character buffer in which the subject is going to be placed
+ @param subject_size Size of character buffer for the subject
+*/
+extern "C"
+void ssl_wrapper_get_peer_certificate_subject(Vio *vio, char *subject, const size_t subject_size);
+
+/**
+ Check is peer certificate is present and try to verify it
+
+ @param vio VIO connection descriptor
+
+ @return
+ X509_V_OK verification of peer certificate succeeded
+ -1 verification failed
+*/
+extern "C"
+long ssl_wrapper_get_verify_result_and_cert(Vio *vio);
+
+/**
+ Return the verification depth limit set in SSL context
+
+ @param vio_ssl VIO SSL contex descriptor
+
+ @return
+ -1 default values should be used
+ >0 verification depth
+*/
+extern "C"
+long ssl_wrapper_ctx_verify_depth(struct st_VioSSLFd *vio_ssl);
+
+/**
+ Return the verification mode set in SSL context
+
+ @param vio_ssl VIO SSL contex descriptor
+
+ @return
+ -1 default values should be used
+ >0 verification mode
+*/
+extern "C"
+long ssl_wrapper_ctx_verify_mode(struct st_VioSSLFd *vio_ssl);
+
+/**
+ Return the last day the server certificate is valid
+
+ @param vio_ssl VIO SSL contex descriptor
+ @param no_after Character buffer for to be filed with the date in human readble format
+ @param no_after_size Size of the character buffer
+*/
+extern "C"
+void ssl_wrapper_ctx_server_not_after(struct st_VioSSLFd *vio_ssl, char *no_after, const size_t no_after_size);
+
+/**
+ Return the first day the server certificate is valid
+
+ @param vio_ssl VIO SSL contex descriptor
+ @param no_before Character buffer for to be filed with the date in human readble format
+ @param no_before_size Size of the character buffer
+*/
+extern "C"
+void ssl_wrapper_ctx_server_not_before(struct st_VioSSLFd *vio_ssl, char *no_before, const size_t no_before_size);
+
+extern "C"
+void ssl_wrapper_thread_cleanup();
+
+extern "C"
+long ssl_wrapper_sess_accept(struct st_VioSSLFd *vio_ssl);
+
+/**
+ Cleanup data allocated by SSL on thread stack
+
+*/
+extern "C"
+long ssl_wrapper_sess_accept_good(struct st_VioSSLFd *vio_ssl);
+
+#endif /* SSL_WRAPPER_INCLUDED */
+
diff --git a/db/include/mysql/service_thd_alloc.h b/db/include/mysql/service_thd_alloc.h
new file mode 100644
index 0000000..061b62d
--- /dev/null
+++ b/db/include/mysql/service_thd_alloc.h
@@ -0,0 +1,139 @@
+#ifndef MYSQL_SERVICE_THD_ALLOC_INCLUDED
+/* Copyright (c) 2009, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 */
+
+/**
+ @file
+ This service provdes functions to allocate memory in a connection local
+ memory pool. The memory allocated there will be automatically freed at the
+ end of the statement, don't use it for allocations that should live longer
+ than that. For short living allocations this is more efficient than
+ using my_malloc and friends, and automatic "garbage collection" allows not
+ to think about memory leaks.
+
+ The pool is best for small to medium objects, don't use it for large
+ allocations - they are better served with my_malloc.
+*/
+
+#ifndef MYSQL_ABI_CHECK
+#include
+#endif
+
+#ifdef __cplusplus
+class THD;
+#define MYSQL_THD THD*
+#else
+#define MYSQL_THD void*
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include
+
+extern struct thd_alloc_service_st {
+ void *(*thd_alloc_func)(MYSQL_THD, size_t);
+ void *(*thd_calloc_func)(MYSQL_THD, size_t);
+ char *(*thd_strdup_func)(MYSQL_THD, const char *);
+ char *(*thd_strmake_func)(MYSQL_THD, const char *, size_t);
+ void *(*thd_memdup_func)(MYSQL_THD, const void*, size_t);
+ MYSQL_LEX_STRING *(*thd_make_lex_string_func)(MYSQL_THD, MYSQL_LEX_STRING *,
+ const char *, size_t, int);
+} *thd_alloc_service;
+
+#ifdef MYSQL_DYNAMIC_PLUGIN
+
+#define thd_alloc(thd,size) (thd_alloc_service->thd_alloc_func((thd), (size)))
+
+#define thd_calloc(thd,size) (thd_alloc_service->thd_calloc_func((thd), (size)))
+
+#define thd_strdup(thd,str) (thd_alloc_service->thd_strdup_func((thd), (str)))
+
+#define thd_strmake(thd,str,size) \
+ (thd_alloc_service->thd_strmake_func((thd), (str), (size)))
+
+#define thd_memdup(thd,str,size) \
+ (thd_alloc_service->thd_memdup_func((thd), (str), (size)))
+
+#define thd_make_lex_string(thd, lex_str, str, size, allocate_lex_string) \
+ (thd_alloc_service->thd_make_lex_string_func((thd), (lex_str), (str), \
+ (size), (allocate_lex_string)))
+
+#else
+
+/**
+ Allocate memory in the connection's local memory pool
+
+ @details
+ When properly used in place of @c my_malloc(), this can significantly
+ improve concurrency. Don't use this or related functions to allocate
+ large chunks of memory. Use for temporary storage only. The memory
+ will be freed automatically at the end of the statement; no explicit
+ code is required to prevent memory leaks.
+
+ @see alloc_root()
+*/
+void *thd_alloc(MYSQL_THD thd, size_t size);
+/**
+ @see thd_alloc()
+*/
+void *thd_calloc(MYSQL_THD thd, size_t size);
+/**
+ @see thd_alloc()
+*/
+char *thd_strdup(MYSQL_THD thd, const char *str);
+/**
+ @see thd_alloc()
+*/
+char *thd_strmake(MYSQL_THD thd, const char *str, size_t size);
+/**
+ @see thd_alloc()
+*/
+void *thd_memdup(MYSQL_THD thd, const void* str, size_t size);
+
+/**
+ Create a LEX_STRING in this connection's local memory pool
+
+ @param thd user thread connection handle
+ @param lex_str pointer to LEX_STRING object to be initialized
+ @param str initializer to be copied into lex_str
+ @param size length of str, in bytes
+ @param allocate_lex_string flag: if TRUE, allocate new LEX_STRING object,
+ instead of using lex_str value
+ @return NULL on failure, or pointer to the LEX_STRING object
+
+ @see thd_alloc()
+*/
+MYSQL_LEX_STRING *thd_make_lex_string(MYSQL_THD thd, MYSQL_LEX_STRING *lex_str,
+ const char *str, size_t size,
+ int allocate_lex_string);
+
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#define MYSQL_SERVICE_THD_ALLOC_INCLUDED
+#endif
+
diff --git a/db/include/mysql/service_thd_engine_lock.h b/db/include/mysql/service_thd_engine_lock.h
new file mode 100644
index 0000000..5cb9574
--- /dev/null
+++ b/db/include/mysql/service_thd_engine_lock.h
@@ -0,0 +1,54 @@
+/* Copyright (c) 2015, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 MYSQL_SERVICE_THD_EGINE_LOCK_INCLUDED
+#define MYSQL_SERVICE_THD_EGINE_LOCK_INCLUDED
+
+/**
+ @file include/mysql/service_thd_engine_lock.h
+ This service provides functions for storage engines to report
+ lock related activities.
+
+ SYNOPSIS
+ thd_row_lock_wait() - call it just when the engine find a transaction should wait
+ another transaction to realease a row lock
+ thd The session which is waiting for the row lock to release.
+ thd_wait_for The session which is holding the row lock.
+*/
+
+#ifdef __cplusplus
+class THD;
+#else
+#define THD void
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+ void thd_report_row_lock_wait(THD* self, THD *wait_for);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/db/include/mysql/service_thd_wait.h b/db/include/mysql/service_thd_wait.h
new file mode 100644
index 0000000..d9a123d
--- /dev/null
+++ b/db/include/mysql/service_thd_wait.h
@@ -0,0 +1,121 @@
+/* Copyright (c) 2010, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 MYSQL_SERVICE_THD_WAIT_INCLUDED
+#define MYSQL_SERVICE_THD_WAIT_INCLUDED
+
+/**
+ @file include/mysql/service_thd_wait.h
+ This service provides functions for plugins and storage engines to report
+ when they are going to sleep/stall.
+
+ SYNOPSIS
+ thd_wait_begin() - call just before a wait begins
+ thd Thread object
+ Use NULL if the thd is NOT known.
+ wait_type Type of wait
+ 1 -- short wait (e.g. for mutex)
+ 2 -- medium wait (e.g. for disk io)
+ 3 -- large wait (e.g. for locked row/table)
+ NOTES
+ This is used by the threadpool to have better knowledge of which
+ threads that currently are actively running on CPUs. When a thread
+ reports that it's going to sleep/stall, the threadpool scheduler is
+ free to start another thread in the pool most likely. The expected wait
+ time is simply an indication of how long the wait is expected to
+ become, the real wait time could be very different.
+
+ thd_wait_end() called immediately after the wait is complete
+
+ thd_wait_end() MUST be called if thd_wait_begin() was called.
+
+ Using thd_wait_...() service is optional but recommended. Using it will
+ improve performance as the thread pool will be more active at managing the
+ thread workload.
+*/
+
+#ifdef __cplusplus
+class THD;
+#define MYSQL_THD THD*
+#else
+#define MYSQL_THD void*
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ One should only report wait events that could potentially block for a
+ long time. A mutex wait is too short of an event to report. The reason
+ is that an event which is reported leads to a new thread starts
+ executing a query and this has a negative impact of usage of CPU caches
+ and thus the expected gain of starting a new thread must be higher than
+ the expected cost of lost performance due to starting a new thread.
+
+ Good examples of events that should be reported are waiting for row locks
+ that could easily be for many milliseconds or even seconds and the same
+ holds true for global read locks, table locks and other meta data locks.
+ Another event of interest is going to sleep for an extended time.
+
+ Note that user-level locks no longer use THD_WAIT_USER_LOCK wait type.
+ Since their implementation relies on metadata locks manager it uses
+ THD_WAIT_META_DATA_LOCK instead.
+*/
+typedef enum _thd_wait_type_e {
+ THD_WAIT_SLEEP= 1,
+ THD_WAIT_DISKIO= 2,
+ THD_WAIT_ROW_LOCK= 3,
+ THD_WAIT_GLOBAL_LOCK= 4,
+ THD_WAIT_META_DATA_LOCK= 5,
+ THD_WAIT_TABLE_LOCK= 6,
+ THD_WAIT_USER_LOCK= 7,
+ THD_WAIT_BINLOG= 8,
+ THD_WAIT_GROUP_COMMIT= 9,
+ THD_WAIT_SYNC= 10,
+ THD_WAIT_LAST= 11
+} thd_wait_type;
+
+extern struct thd_wait_service_st {
+ void (*thd_wait_begin_func)(MYSQL_THD, int);
+ void (*thd_wait_end_func)(MYSQL_THD);
+} *thd_wait_service;
+
+#ifdef MYSQL_DYNAMIC_PLUGIN
+
+#define thd_wait_begin(_THD, _WAIT_TYPE) \
+ thd_wait_service->thd_wait_begin_func(_THD, _WAIT_TYPE)
+#define thd_wait_end(_THD) thd_wait_service->thd_wait_end_func(_THD)
+
+#else
+
+void thd_wait_begin(MYSQL_THD thd, int wait_type);
+void thd_wait_end(MYSQL_THD thd);
+
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
diff --git a/db/include/mysql/service_thread_scheduler.h b/db/include/mysql/service_thread_scheduler.h
new file mode 100644
index 0000000..1fea296
--- /dev/null
+++ b/db/include/mysql/service_thread_scheduler.h
@@ -0,0 +1,92 @@
+/*
+ Copyright (c) 2010, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 SERVICE_THREAD_SCHEDULER_INCLUDED
+#define SERVICE_THREAD_SCHEDULER_INCLUDED
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct Connection_handler_functions;
+struct THD_event_functions;
+
+extern struct my_thread_scheduler_service {
+ int (*connection_handler_set)(struct Connection_handler_functions *,
+ struct THD_event_functions *);
+ int (*connection_handler_reset)();
+} *my_thread_scheduler_service;
+
+
+#ifdef MYSQL_DYNAMIC_PLUGIN
+
+#define my_connection_handler_set(F, M) \
+ my_thread_scheduler_service->connection_handler_set((F), (M))
+#define my_connection_handler_reset() \
+ my_thread_scheduler_service->connection_handler_reset()
+
+#else
+
+/**
+ Instantiates Plugin_connection_handler based on the supplied
+ Conection_handler_functions and sets it as the current
+ connection handler.
+
+ Also sets the THD_event_functions functions which will
+ be called by the server when e.g. begining a wait.
+
+ Remembers the existing connection handler so that it can be restored later.
+
+ @param chf struct with functions to be called when e.g. handling
+ new clients.
+ @param tef struct with functions to be called when events
+ (e.g. lock wait) happens.
+
+ @note Both pointers (i.e. not the structs themselves) will be copied,
+ so the structs must not disappear.
+
+ @note We don't support dynamically loading more than one connection handler.
+
+ @retval 1 failure
+ @retval 0 success
+*/
+int my_connection_handler_set(struct Connection_handler_functions *chf,
+ struct THD_event_functions *tef);
+
+/**
+ Destroys the current connection handler and restores the previous.
+ Should only be called after calling my_connection_handler_set().
+
+ @retval 1 failure
+ @retval 0 success
+*/
+int my_connection_handler_reset();
+
+#endif /* MYSQL_DYNAMIC_PLUGIN */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* SERVICE_THREAD_SCHEDULER_INCLUDED */
diff --git a/db/include/mysql/services.h b/db/include/mysql/services.h
new file mode 100644
index 0000000..f1920fa
--- /dev/null
+++ b/db/include/mysql/services.h
@@ -0,0 +1,66 @@
+#ifndef MYSQL_SERVICES_INCLUDED
+/* Copyright (c) 2009, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 */
+
+
+/*
+ Out of extern because of inclusion of files which include my_compiler.h
+ which in turn complains about C-linkage of templates.
+ service_srv_session.h and service_command.h use proper extern "C" for
+ their exported symbols.
+*/
+#ifndef EMBEDDED_LIBRARY
+#include
+#include
+#include
+#endif
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#ifdef __cplusplus
+}
+#endif
+
+#ifdef __cplusplus
+#include
+#endif
+
+#define MYSQL_SERVICES_INCLUDED
+#endif /* MYSQL_SERVICES_INCLUDED */
diff --git a/db/include/mysql/services.h.pp b/db/include/mysql/services.h.pp
new file mode 100644
index 0000000..4ec117c
--- /dev/null
+++ b/db/include/mysql/services.h.pp
@@ -0,0 +1,512 @@
+#include
+struct Srv_session;
+typedef struct Srv_session* MYSQL_SESSION;
+typedef void (*srv_session_error_cb)(void *ctx,
+ unsigned int sql_errno,
+ const char *err_msg);
+extern struct srv_session_service_st
+{
+ int (*init_session_thread)(const void *plugin);
+ void (*deinit_session_thread)();
+ MYSQL_SESSION (*open_session)(srv_session_error_cb error_cb,
+ void *plugix_ctx);
+ int (*detach_session)(MYSQL_SESSION session);
+ int (*close_session)(MYSQL_SESSION session);
+ int (*server_is_available)();
+} *srv_session_service;
+int srv_session_init_thread(const void *plugin);
+void srv_session_deinit_thread();
+MYSQL_SESSION srv_session_open(srv_session_error_cb cb, void *plugix_ctx);
+int srv_session_detach(MYSQL_SESSION session);
+int srv_session_close(MYSQL_SESSION session);
+int srv_session_server_is_available();
+#include
+#include "mysql/service_srv_session.h"
+extern struct srv_session_info_service_st {
+ MYSQL_THD (*get_thd)(MYSQL_SESSION session);
+ my_thread_id (*get_session_id)(MYSQL_SESSION session);
+ LEX_CSTRING (*get_current_db)(MYSQL_SESSION session);
+ uint16_t (*get_client_port)(MYSQL_SESSION session);
+ int (*set_client_port)(MYSQL_SESSION session, uint16_t port);
+ int (*set_connection_type)(MYSQL_SESSION session, enum enum_vio_type type);
+ int (*killed)(MYSQL_SESSION session);
+ unsigned int (*session_count)();
+ unsigned int (*thread_count)(const void *plugin);
+} *srv_session_info_service;
+MYSQL_THD srv_session_info_get_thd(MYSQL_SESSION session);
+my_thread_id srv_session_info_get_session_id(MYSQL_SESSION session);
+LEX_CSTRING srv_session_info_get_current_db(MYSQL_SESSION session);
+uint16_t srv_session_info_get_client_port(MYSQL_SESSION session);
+int srv_session_info_set_client_port(MYSQL_SESSION session, uint16_t port);
+int srv_session_info_set_connection_type(MYSQL_SESSION session,
+ enum enum_vio_type type);
+int srv_session_info_killed(MYSQL_SESSION session);
+unsigned int srv_session_info_session_count();
+unsigned int srv_session_info_thread_count(const void *plugin);
+#include
+#include "mysql/service_srv_session.h"
+#include "mysql/com_data.h"
+typedef struct st_com_init_db_data
+{
+ const char *db_name;
+ unsigned long length;
+} COM_INIT_DB_DATA;
+typedef struct st_com_refresh_data
+{
+ unsigned char options;
+} COM_REFRESH_DATA;
+typedef struct st_com_shutdown_data
+{
+ enum mysql_enum_shutdown_level level;
+} COM_SHUTDOWN_DATA;
+typedef struct st_com_kill_data
+{
+ unsigned long id;
+} COM_KILL_DATA;
+typedef struct st_com_set_option_data
+{
+ unsigned int opt_command;
+} COM_SET_OPTION_DATA;
+typedef struct st_com_stmt_execute_data
+{
+ unsigned long stmt_id;
+ unsigned long flags;
+ unsigned char *params;
+ unsigned long params_length;
+} COM_STMT_EXECUTE_DATA;
+typedef struct st_com_stmt_fetch_data
+{
+ unsigned long stmt_id;
+ unsigned long num_rows;
+} COM_STMT_FETCH_DATA;
+typedef struct st_com_stmt_send_long_data_data
+{
+ unsigned long stmt_id;
+ unsigned int param_number;
+ unsigned char *longdata;
+ unsigned long length;
+} COM_STMT_SEND_LONG_DATA_DATA;
+typedef struct st_com_stmt_prepare_data
+{
+ const char *query;
+ unsigned int length;
+} COM_STMT_PREPARE_DATA;
+typedef struct st_stmt_close_data
+{
+ unsigned int stmt_id;
+} COM_STMT_CLOSE_DATA;
+typedef struct st_com_stmt_reset_data
+{
+ unsigned int stmt_id;
+} COM_STMT_RESET_DATA;
+typedef struct st_com_query_data
+{
+ const char *query;
+ unsigned int length;
+} COM_QUERY_DATA;
+typedef struct st_com_field_list_data
+{
+ unsigned char *table_name;
+ unsigned int table_name_length;
+ const unsigned char *query;
+ unsigned int query_length;
+} COM_FIELD_LIST_DATA;
+union COM_DATA {
+ COM_INIT_DB_DATA com_init_db;
+ COM_REFRESH_DATA com_refresh;
+ COM_SHUTDOWN_DATA com_shutdown;
+ COM_KILL_DATA com_kill;
+ COM_SET_OPTION_DATA com_set_option;
+ COM_STMT_EXECUTE_DATA com_stmt_execute;
+ COM_STMT_FETCH_DATA com_stmt_fetch;
+ COM_STMT_SEND_LONG_DATA_DATA com_stmt_send_long_data;
+ COM_STMT_PREPARE_DATA com_stmt_prepare;
+ COM_STMT_CLOSE_DATA com_stmt_close;
+ COM_STMT_RESET_DATA com_stmt_reset;
+ COM_QUERY_DATA com_query;
+ COM_FIELD_LIST_DATA com_field_list;
+};
+#include "mysql_time.h"
+enum enum_mysql_timestamp_type
+{
+ MYSQL_TIMESTAMP_NONE= -2, MYSQL_TIMESTAMP_ERROR= -1,
+ MYSQL_TIMESTAMP_DATE= 0, MYSQL_TIMESTAMP_DATETIME= 1, MYSQL_TIMESTAMP_TIME= 2
+};
+typedef struct st_mysql_time
+{
+ unsigned int year, month, day, hour, minute, second;
+ unsigned long second_part;
+ my_bool neg;
+ enum enum_mysql_timestamp_type time_type;
+} MYSQL_TIME;
+#include "decimal.h"
+typedef enum
+{TRUNCATE=0, HALF_EVEN, HALF_UP, CEILING, FLOOR}
+ decimal_round_mode;
+typedef int32 decimal_digit_t;
+typedef struct st_decimal_t {
+ int intg, frac, len;
+ my_bool sign;
+ decimal_digit_t *buf;
+} decimal_t;
+struct st_send_field
+{
+ const char *db_name;
+ const char *table_name;
+ const char *org_table_name;
+ const char *col_name;
+ const char *org_col_name;
+ unsigned long length;
+ unsigned int charsetnr;
+ unsigned int flags;
+ unsigned int decimals;
+ enum_field_types type;
+};
+struct st_command_service_cbs
+{
+ int (*start_result_metadata)(void *ctx, uint num_cols, uint flags,
+ const CHARSET_INFO *resultcs);
+ int (*field_metadata)(void *ctx, struct st_send_field *field,
+ const CHARSET_INFO *charset);
+ int (*end_result_metadata)(void *ctx, uint server_status,
+ uint warn_count);
+ int (*start_row)(void *ctx);
+ int (*end_row)(void *ctx);
+ void (*abort_row)(void *ctx);
+ ulong (*get_client_capabilities)(void *ctx);
+ int (*get_null)(void * ctx);
+ int (*get_integer)(void * ctx, longlong value);
+ int (*get_longlong)(void * ctx, longlong value, uint is_unsigned);
+ int (*get_decimal)(void * ctx, const decimal_t * value);
+ int (*get_double)(void * ctx, double value, uint32_t decimals);
+ int (*get_date)(void * ctx, const MYSQL_TIME * value);
+ int (*get_time)(void * ctx, const MYSQL_TIME * value, uint decimals);
+ int (*get_datetime)(void * ctx, const MYSQL_TIME * value, uint decimals);
+ int (*get_string)(void * ctx, const char * value, size_t length,
+ const CHARSET_INFO * valuecs);
+ void (*handle_ok)(void * ctx,
+ uint server_status, uint statement_warn_count,
+ ulonglong affected_rows, ulonglong last_insert_id,
+ const char * message);
+ void (*handle_error)(void * ctx, uint sql_errno, const char * err_msg,
+ const char * sqlstate);
+ void (*shutdown)(void *ctx, int server_shutdown);
+};
+enum cs_text_or_binary
+{
+ CS_TEXT_REPRESENTATION= 1,
+ CS_BINARY_REPRESENTATION= 2,
+};
+extern struct command_service_st {
+ int (*run_command)(MYSQL_SESSION session,
+ enum enum_server_command command,
+ const union COM_DATA * data,
+ const CHARSET_INFO * client_cs,
+ const struct st_command_service_cbs * callbacks,
+ enum cs_text_or_binary text_or_binary,
+ void * service_callbacks_ctx);
+} *command_service;
+int command_service_run_command(MYSQL_SESSION session,
+ enum enum_server_command command,
+ const union COM_DATA * data,
+ const CHARSET_INFO * client_cs,
+ const struct st_command_service_cbs * callbacks,
+ enum cs_text_or_binary text_or_binary,
+ void * service_callbacks_ctx);
+#include
+extern struct my_snprintf_service_st {
+ size_t (*my_snprintf_type)(char*, size_t, const char*, ...);
+ size_t (*my_vsnprintf_type)(char *, size_t, const char*, va_list);
+} *my_snprintf_service;
+size_t my_snprintf(char* to, size_t n, const char* fmt, ...);
+size_t my_vsnprintf(char *to, size_t n, const char* fmt, va_list ap);
+#include
+#include
+struct st_mysql_lex_string
+{
+ char *str;
+ size_t length;
+};
+typedef struct st_mysql_lex_string MYSQL_LEX_STRING;
+struct st_mysql_const_lex_string
+{
+ const char *str;
+ size_t length;
+};
+typedef struct st_mysql_const_lex_string MYSQL_LEX_CSTRING;
+extern struct thd_alloc_service_st {
+ void *(*thd_alloc_func)(void*, size_t);
+ void *(*thd_calloc_func)(void*, size_t);
+ char *(*thd_strdup_func)(void*, const char *);
+ char *(*thd_strmake_func)(void*, const char *, size_t);
+ void *(*thd_memdup_func)(void*, const void*, size_t);
+ MYSQL_LEX_STRING *(*thd_make_lex_string_func)(void*, MYSQL_LEX_STRING *,
+ const char *, size_t, int);
+} *thd_alloc_service;
+void *thd_alloc(void* thd, size_t size);
+void *thd_calloc(void* thd, size_t size);
+char *thd_strdup(void* thd, const char *str);
+char *thd_strmake(void* thd, const char *str, size_t size);
+void *thd_memdup(void* thd, const void* str, size_t size);
+MYSQL_LEX_STRING *thd_make_lex_string(void* thd, MYSQL_LEX_STRING *lex_str,
+ const char *str, size_t size,
+ int allocate_lex_string);
+#include
+typedef enum _thd_wait_type_e {
+ THD_WAIT_SLEEP= 1,
+ THD_WAIT_DISKIO= 2,
+ THD_WAIT_ROW_LOCK= 3,
+ THD_WAIT_GLOBAL_LOCK= 4,
+ THD_WAIT_META_DATA_LOCK= 5,
+ THD_WAIT_TABLE_LOCK= 6,
+ THD_WAIT_USER_LOCK= 7,
+ THD_WAIT_BINLOG= 8,
+ THD_WAIT_GROUP_COMMIT= 9,
+ THD_WAIT_SYNC= 10,
+ THD_WAIT_LAST= 11
+} thd_wait_type;
+extern struct thd_wait_service_st {
+ void (*thd_wait_begin_func)(void*, int);
+ void (*thd_wait_end_func)(void*);
+} *thd_wait_service;
+void thd_wait_begin(void* thd, int wait_type);
+void thd_wait_end(void* thd);
+#include
+struct Connection_handler_functions;
+struct THD_event_functions;
+extern struct my_thread_scheduler_service {
+ int (*connection_handler_set)(struct Connection_handler_functions *,
+ struct THD_event_functions *);
+ int (*connection_handler_reset)();
+} *my_thread_scheduler_service;
+int my_connection_handler_set(struct Connection_handler_functions *chf,
+ struct THD_event_functions *tef);
+int my_connection_handler_reset();
+#include
+enum plugin_log_level
+{
+ MY_ERROR_LEVEL,
+ MY_WARNING_LEVEL,
+ MY_INFORMATION_LEVEL
+};
+extern struct my_plugin_log_service
+{
+ int (*my_plugin_log_message)(MYSQL_PLUGIN *, enum plugin_log_level, const char *, ...);
+} *my_plugin_log_service;
+int my_plugin_log_message(MYSQL_PLUGIN *plugin, enum plugin_log_level level,
+ const char *format, ...);
+#include
+typedef void *mysql_string_iterator_handle;
+typedef void *mysql_string_handle;
+extern struct mysql_string_service_st {
+ int (*mysql_string_convert_to_char_ptr_type)
+ (mysql_string_handle, const char *, char *, unsigned int, int *);
+ mysql_string_iterator_handle (*mysql_string_get_iterator_type)
+ (mysql_string_handle);
+ int (*mysql_string_iterator_next_type)(mysql_string_iterator_handle);
+ int (*mysql_string_iterator_isupper_type)(mysql_string_iterator_handle);
+ int (*mysql_string_iterator_islower_type)(mysql_string_iterator_handle);
+ int (*mysql_string_iterator_isdigit_type)(mysql_string_iterator_handle);
+ mysql_string_handle (*mysql_string_to_lowercase_type)(mysql_string_handle);
+ void (*mysql_string_free_type)(mysql_string_handle);
+ void (*mysql_string_iterator_free_type)(mysql_string_iterator_handle);
+} *mysql_string_service;
+int mysql_string_convert_to_char_ptr(mysql_string_handle string_handle,
+ const char *charset_name, char *buffer,
+ unsigned int buffer_size, int *error);
+mysql_string_iterator_handle mysql_string_get_iterator(mysql_string_handle
+ string_handle);
+int mysql_string_iterator_next(mysql_string_iterator_handle iterator_handle);
+int mysql_string_iterator_isupper(mysql_string_iterator_handle iterator_handle);
+int mysql_string_iterator_islower(mysql_string_iterator_handle iterator_handle);
+int mysql_string_iterator_isdigit(mysql_string_iterator_handle iterator_handle);
+mysql_string_handle mysql_string_to_lowercase(mysql_string_handle
+ string_handle);
+void mysql_string_free(mysql_string_handle);
+void mysql_string_iterator_free(mysql_string_iterator_handle);
+#include
+#include "mysql/psi/psi_memory.h"
+#include "psi_base.h"
+struct PSI_thread;
+typedef unsigned int PSI_memory_key;
+typedef int myf_t;
+typedef void * (*mysql_malloc_t)(PSI_memory_key key, size_t size, myf_t flags);
+typedef void * (*mysql_realloc_t)(PSI_memory_key key, void *ptr, size_t size, myf_t flags);
+typedef void (*mysql_claim_t)(void *ptr);
+typedef void (*mysql_free_t)(void *ptr);
+typedef void * (*my_memdup_t)(PSI_memory_key key, const void *from, size_t length, myf_t flags);
+typedef char * (*my_strdup_t)(PSI_memory_key key, const char *from, myf_t flags);
+typedef char * (*my_strndup_t)(PSI_memory_key key, const char *from, size_t length, myf_t flags);
+struct mysql_malloc_service_st
+{
+ mysql_malloc_t mysql_malloc;
+ mysql_realloc_t mysql_realloc;
+ mysql_claim_t mysql_claim;
+ mysql_free_t mysql_free;
+ my_memdup_t my_memdup;
+ my_strdup_t my_strdup;
+ my_strndup_t my_strndup;
+};
+extern struct mysql_malloc_service_st *mysql_malloc_service;
+extern void * my_malloc(PSI_memory_key key, size_t size, myf_t flags);
+extern void * my_realloc(PSI_memory_key key, void *ptr, size_t size, myf_t flags);
+extern void my_claim(void *ptr);
+extern void my_free(void *ptr);
+extern void * my_memdup(PSI_memory_key key, const void *from, size_t length, myf_t flags);
+extern char * my_strdup(PSI_memory_key key, const char *from, myf_t flags);
+extern char * my_strndup(PSI_memory_key key, const char *from, size_t length, myf_t flags);
+#include
+extern struct mysql_password_policy_service_st {
+ int (*my_validate_password_policy_func)(const char *, unsigned int);
+ int (*my_calculate_password_strength_func)(const char *, unsigned int);
+} *mysql_password_policy_service;
+int my_validate_password_policy(const char *, unsigned int);
+int my_calculate_password_strength(const char *, unsigned int);
+#include
+#include "my_md5_size.h"
+#include
+typedef void* MYSQL_ITEM;
+typedef
+int (*parse_node_visit_function)(MYSQL_ITEM item, unsigned char* arg);
+typedef
+int (*sql_condition_handler_function)(int sql_errno,
+ const char* sqlstate,
+ const char* msg,
+ void *state);
+struct st_my_thread_handle;
+extern struct mysql_parser_service_st {
+ void* (*mysql_current_session)();
+ void* (*mysql_open_session)();
+ void (*mysql_start_thread)(void* thd, void *(*callback_fun)(void*),
+ void *arg,
+ struct st_my_thread_handle *thread_handle);
+ void (*mysql_join_thread)(struct st_my_thread_handle *thread_handle);
+ void (*mysql_set_current_database)(void* thd, const MYSQL_LEX_STRING db);
+ int (*mysql_parse)(void* thd, const MYSQL_LEX_STRING query,
+ unsigned char is_prepared,
+ sql_condition_handler_function handle_condition,
+ void *condition_handler_state);
+ int (*mysql_get_statement_type)(void* thd);
+ int (*mysql_get_statement_digest)(void* thd, unsigned char *digest);
+ int (*mysql_get_number_params)(void* thd);
+ int (*mysql_extract_prepared_params)(void* thd, int *positions);
+ int (*mysql_visit_tree)(void* thd, parse_node_visit_function processor,
+ unsigned char* arg);
+ MYSQL_LEX_STRING (*mysql_item_string)(MYSQL_ITEM item);
+ void (*mysql_free_string)(MYSQL_LEX_STRING string);
+ MYSQL_LEX_STRING (*mysql_get_query)(void* thd);
+ MYSQL_LEX_STRING (*mysql_get_normalized_query)(void* thd);
+} *mysql_parser_service;
+typedef void *(*callback_function)(void*);
+void* mysql_parser_current_session();
+void* mysql_parser_open_session();
+void mysql_parser_start_thread(void* thd, callback_function fun, void *arg,
+ struct st_my_thread_handle *thread_handle);
+void mysql_parser_join_thread(struct st_my_thread_handle *thread_handle);
+void mysql_parser_set_current_database(void* thd,
+ const MYSQL_LEX_STRING db);
+int mysql_parser_parse(void* thd, const MYSQL_LEX_STRING query,
+ unsigned char is_prepared,
+ sql_condition_handler_function handle_condition,
+ void *condition_handler_state);
+int mysql_parser_get_statement_type(void* thd);
+int mysql_parser_get_statement_digest(void* thd, unsigned char *digest);
+int mysql_parser_get_number_params(void* thd);
+int mysql_parser_extract_prepared_params(void* thd, int *positions);
+int mysql_parser_visit_tree(void* thd, parse_node_visit_function processor,
+ unsigned char* arg);
+MYSQL_LEX_STRING mysql_parser_item_string(MYSQL_ITEM item);
+void mysql_parser_free_string(MYSQL_LEX_STRING string);
+MYSQL_LEX_STRING mysql_parser_get_query(void* thd);
+MYSQL_LEX_STRING mysql_parser_get_normalized_query(void* thd);
+#include
+struct st_transaction_termination_ctx
+{
+ unsigned long m_thread_id;
+ unsigned int m_flags;
+ char m_rollback_transaction;
+ char m_generated_gtid;
+ int m_sidno;
+ long long int m_gno;
+};
+typedef struct st_transaction_termination_ctx Transaction_termination_ctx;
+extern struct rpl_transaction_ctx_service_st {
+ int (*set_transaction_ctx)(Transaction_termination_ctx transaction_termination_ctx);
+} *rpl_transaction_ctx_service;
+int set_transaction_ctx(Transaction_termination_ctx transaction_termination_ctx);
+#include
+struct st_trans_write_set
+{
+ unsigned int m_flags;
+ unsigned long write_set_size;
+ unsigned long long* write_set;
+};
+typedef struct st_trans_write_set Transaction_write_set;
+extern struct transaction_write_set_service_st {
+ Transaction_write_set* (*get_transaction_write_set)(unsigned long m_thread_id);
+ void (*require_full_write_set)(int requires_ws);
+ void (*set_write_set_memory_size_limit)(long long size_limit);
+ void (*update_write_set_memory_size_limit)(long long size_limit);
+} *transaction_write_set_service;
+Transaction_write_set* get_transaction_write_set(unsigned long m_thread_id);
+void require_full_write_set(int requires_ws);
+void set_write_set_memory_size_limit(long long size_limit);
+void update_write_set_memory_size_limit(long long size_limit);
+#include
+typedef char my_svc_bool;
+extern struct security_context_service_st {
+ my_svc_bool (*thd_get_security_context)(void*, void* *out_ctx);
+ my_svc_bool (*thd_set_security_context)(void*, void* in_ctx);
+ my_svc_bool (*security_context_create)(void* *out_ctx);
+ my_svc_bool (*security_context_destroy)(void*);
+ my_svc_bool (*security_context_copy)(void* in_ctx, void* *out_ctx);
+ my_svc_bool (*security_context_lookup)(void* ctx,
+ const char *user, const char *host,
+ const char *ip, const char *db);
+ my_svc_bool (*security_context_get_option)(void*, const char *name, void *inout_pvalue);
+ my_svc_bool (*security_context_set_option)(void*, const char *name, void *pvalue);
+} *security_context_service;
+ my_svc_bool thd_get_security_context(void*, void* *out_ctx);
+ my_svc_bool thd_set_security_context(void*, void* in_ctx);
+ my_svc_bool security_context_create(void* *out_ctx);
+ my_svc_bool security_context_destroy(void* ctx);
+ my_svc_bool security_context_copy(void* in_ctx, void* *out_ctx);
+ my_svc_bool security_context_lookup(void* ctx,
+ const char *user, const char *host,
+ const char *ip, const char *db);
+ my_svc_bool security_context_get_option(void*, const char *name, void *inout_pvalue);
+ my_svc_bool security_context_set_option(void*, const char *name, void *pvalue);
+#include
+enum enum_locking_service_lock_type
+{ LOCKING_SERVICE_READ, LOCKING_SERVICE_WRITE };
+extern struct mysql_locking_service_st {
+ int (*mysql_acquire_locks)(void* opaque_thd, const char* lock_namespace,
+ const char**lock_names, size_t lock_num,
+ enum enum_locking_service_lock_type lock_type,
+ unsigned long lock_timeout);
+ int (*mysql_release_locks)(void* opaque_thd, const char* lock_namespace);
+} *mysql_locking_service;
+int mysql_acquire_locking_service_locks(void* opaque_thd,
+ const char* lock_namespace,
+ const char**lock_names,
+ size_t lock_num,
+ enum enum_locking_service_lock_type lock_type,
+ unsigned long lock_timeout);
+int mysql_release_locking_service_locks(void* opaque_thd,
+ const char* lock_namespace);
+#include
+extern struct mysql_keyring_service_st
+{
+ int (*my_key_store_func)(const char *, const char *, const char *,
+ const void *, size_t);
+ int (*my_key_fetch_func)(const char *, char **, const char *, void **,
+ size_t *);
+ int (*my_key_remove_func)(const char *, const char *);
+ int (*my_key_generate_func)(const char *, const char *, const char *,
+ size_t);
+} *mysql_keyring_service;
+int my_key_store(const char *, const char *, const char *, const void *, size_t);
+int my_key_fetch(const char *, char **, const char *, void **,
+ size_t *);
+int my_key_remove(const char *, const char *);
+int my_key_generate(const char *, const char *, const char *, size_t);
diff --git a/db/include/mysql/thread_pool_priv.h b/db/include/mysql/thread_pool_priv.h
new file mode 100644
index 0000000..ef075f9
--- /dev/null
+++ b/db/include/mysql/thread_pool_priv.h
@@ -0,0 +1,192 @@
+/*
+ Copyright (c) 2010, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 THREAD_POOL_PRIV_INCLUDED
+#define THREAD_POOL_PRIV_INCLUDED
+
+/*
+ The thread pool requires access to some MySQL server error codes, this is
+ accessed from mysqld_error.h.
+ We need access to the struct that defines the thread pool plugin interface
+ which is accessed through scheduler.h.
+ All accesses to THD variables and functions are defined in this header file.
+ A thread pool can also use DEBUG_SYNC and must thus include
+ debug_sync.h
+ To handle definitions of Information Schema plugins it is also required
+ to include sql_profile.h and table.h.
+*/
+#include /* To get ER_ERROR_ON_READ */
+#define MYSQL_SERVER 1
+#include
+#include
+#include
+#include
+#include
+#include "field.h"
+#include "sql_thd_internal_api.h"
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ This structure must be populated by plugins which implement connection
+ handlers and passed as an argument to my_connection_handler_set() in
+ order to activate the connection handler.
+
+ The structure contains pointers to plugin functions which the server
+ will call when a new client connects or when the connection handler is
+ unloaded. It also containts the maximum number of threads the connection
+ handler will create.
+*/
+struct Connection_handler_functions
+{
+ /**
+ The maximum number of threads this connection handler will create.
+ */
+ uint max_threads;
+
+ /**
+ Called by the server when a new client connects.
+
+ @param channel_info Pointer to object containing information
+ about the new connection.
+
+ @retval true failure
+ @retval false success
+ */
+ bool (*add_connection)(Channel_info *channel_info);
+
+ /**
+ Called by the server when the connection handler is destroyed.
+ */
+ void (*end)(void);
+};
+
+/* create thd from channel_info object */
+THD* create_thd(Channel_info* channel_info);
+/* destroy channel_info object */
+void destroy_channel_info(Channel_info* channel_info);
+/* Decrement connection counter */
+void dec_connection_count();
+/*
+ thread_created is maintained by thread pool when activated since
+ user threads are created by the thread pool (and also special
+ threads to maintain the thread pool). This is done through
+ inc_thread_created.
+*/
+void inc_thread_created();
+
+void thd_lock_thread_count(THD *thd);
+void thd_unlock_thread_count(THD *thd);
+
+#ifdef __cplusplus
+}
+#endif
+
+/*
+ Interface to global thread list iterator functions.
+ Executes a function with signature 'void f(THD*, uint64)' for all THDs.
+*/
+typedef void (do_thd_impl_uint64)(THD*, uint64);
+void do_for_all_thd(do_thd_impl_uint64, uint64);
+
+/* Needed to get access to scheduler variables */
+void* thd_get_scheduler_data(THD *thd);
+void thd_set_scheduler_data(THD *thd, void *data);
+PSI_thread* thd_get_psi(THD *thd);
+void thd_set_psi(THD *thd, PSI_thread *psi);
+
+/* Interface to THD variables and functions */
+void thd_set_killed(THD *thd);
+void thd_clear_errors(THD *thd);
+void thd_close_connection(THD *thd);
+THD *thd_get_current_thd();
+void thd_lock_data(THD *thd);
+void thd_unlock_data(THD *thd);
+bool thd_is_transaction_active(THD *thd);
+int thd_connection_has_data(THD *thd);
+void thd_set_net_read_write(THD *thd, uint val);
+uint thd_get_net_read_write(THD *thd);
+void thd_set_not_killable(THD *thd);
+ulong thd_get_net_wait_timeout(THD *thd);
+my_socket thd_get_fd(THD *thd);
+int thd_store_globals(THD* thd);
+
+/* Print to the MySQL error log */
+void sql_print_error(const char *format, ...);
+void sql_print_warning(const char *format, ...);
+void sql_print_information(const char *format, ...);
+
+/* Store a table record */
+bool schema_table_store_record(THD *thd, TABLE *table);
+
+/*
+ The thread pool must be able to execute statements using the connection
+ state in THD object. This is the main objective of the thread pool to
+ schedule the start of these commands.
+*/
+bool do_command(THD *thd);
+
+/*
+ The thread pool requires an interface to the connection logic in the
+ MySQL Server since the thread pool will maintain the event logic on
+ the TCP connection of the MySQL Server. Thus new connections, dropped
+ connections will be discovered by the thread pool and it needs to
+ ensure that the proper MySQL Server logic attached to these events is
+ executed.
+*/
+/* Prepare connection as part of connection set-up */
+bool thd_prepare_connection(THD *thd);
+/* Release auditing before executing statement */
+void mysql_audit_release(THD *thd);
+/* Check if connection is still alive */
+bool thd_connection_alive(THD *thd);
+/* Close connection with possible error code */
+void close_connection(THD *thd, uint sql_errno,
+ bool server_shutdown, bool generate_event);
+/* End the connection before closing it */
+void end_connection(THD *thd);
+/* Reset thread globals */
+void reset_thread_globals(THD *thd);
+
+/*
+ max_connections is needed to calculate the maximum number of threads
+ that is allowed to be started by the thread pool. The method
+ get_max_connections() gets reference to this variable.
+*/
+ulong get_max_connections(void);
+/*
+ connection_attrib is the thread attributes for connection threads,
+ the method get_connection_attrib provides a reference to these
+ attributes.
+*/
+my_thread_attr_t *get_connection_attrib(void);
+
+/* Increment the status variable 'Aborted_connects'. */
+#ifndef EMBEDDED_LIBRARY
+void increment_aborted_connects();
+#endif
+#endif // THREAD_POOL_PRIV_INCLUDED
diff --git a/db/include/mysql/thread_type.h b/db/include/mysql/thread_type.h
new file mode 100644
index 0000000..1fea99d
--- /dev/null
+++ b/db/include/mysql/thread_type.h
@@ -0,0 +1,51 @@
+/* Copyright (c) 2000, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 Street, Fifth Floor, Boston, MA 02110-1301, USA */
+
+/* Defines to make different thread packages compatible */
+
+#ifndef THREAD_TYPE_INCLUDED
+#define THREAD_TYPE_INCLUDED
+
+#ifdef __cplusplus
+extern "C"{
+#endif
+
+/* Flags for the THD::system_thread variable */
+enum enum_thread_type
+{
+ NON_SYSTEM_THREAD= 0,
+ SYSTEM_THREAD_SLAVE_IO= 1,
+ SYSTEM_THREAD_SLAVE_SQL= 2,
+ SYSTEM_THREAD_NDBCLUSTER_BINLOG= 4,
+ SYSTEM_THREAD_EVENT_SCHEDULER= 8,
+ SYSTEM_THREAD_EVENT_WORKER= 16,
+ SYSTEM_THREAD_INFO_REPOSITORY= 32,
+ SYSTEM_THREAD_SLAVE_WORKER= 64,
+ SYSTEM_THREAD_COMPRESS_GTID_TABLE= 128,
+ SYSTEM_THREAD_BACKGROUND= 256
+};
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* THREAD_TYPE_INCLUDED */
diff --git a/db/include/mysql/udf_registration_types.h b/db/include/mysql/udf_registration_types.h
deleted file mode 100644
index 5ebb1ab..0000000
--- a/db/include/mysql/udf_registration_types.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/* Copyright (c) 2017, 2022, Oracle and/or its affiliates.
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License, version 2.0,
-as published by the Free Software Foundation.
-
-This program is also distributed with certain software (including
-but not limited to OpenSSL) that is licensed under separate terms,
-as designated in a particular file or component or in included license
-documentation. The authors of MySQL hereby grant you an additional
-permission to link the program and your derivative works with the
-separately licensed software that they have included with MySQL.
-
-Without limiting anything contained in the foregoing, this file,
-which is part of C Driver for MySQL (Connector/C), is also subject to the
-Universal FOSS Exception, version 1.0, a copy of which can be found at
-http://oss.oracle.com/licenses/universal-foss-exception.
-
-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, version 2.0, 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 UDF_REGISTRATION_TYPES_H
-#define UDF_REGISTRATION_TYPES_H
-
-#ifndef MYSQL_ABI_CHECK
-#include
-#endif
-
-/**
-Type of the user defined function return slot and arguments
-*/
-enum Item_result {
- INVALID_RESULT = -1, /** not valid for UDFs */
- STRING_RESULT = 0, /** char * */
- REAL_RESULT, /** double */
- INT_RESULT, /** long long */
- ROW_RESULT, /** not valid for UDFs */
- DECIMAL_RESULT /** char *, to be converted to/from a decimal */
-};
-
-typedef struct UDF_ARGS {
- unsigned int arg_count; /**< Number of arguments */
- enum Item_result *arg_type; /**< Pointer to item_results */
- char **args; /**< Pointer to argument */
- unsigned long *lengths; /**< Length of string arguments */
- char *maybe_null; /**< Set to 1 for all maybe_null args */
- char **attributes; /**< Pointer to attribute name */
- unsigned long *attribute_lengths; /**< Length of attribute arguments */
- void *extension;
-} UDF_ARGS;
-
-/**
-Information about the result of a user defined function
-
-@todo add a notion for determinism of the UDF.
-
-@sa Item_udf_func::update_used_tables()
-*/
-typedef struct UDF_INIT {
- bool maybe_null; /** 1 if function can return NULL */
- unsigned int decimals; /** for real functions */
- unsigned long max_length; /** For string functions */
- char *ptr; /** free pointer for function data */
- bool const_item; /** 1 if function always returns the same value */
- void *extension;
-} UDF_INIT;
-
-enum Item_udftype { UDFTYPE_FUNCTION = 1, UDFTYPE_AGGREGATE };
-
-typedef void (*Udf_func_clear)(UDF_INIT *, unsigned char *, unsigned char *);
-typedef void (*Udf_func_add)(UDF_INIT *, UDF_ARGS *, unsigned char *,
- unsigned char *);
-typedef void (*Udf_func_deinit)(UDF_INIT *);
-typedef bool (*Udf_func_init)(UDF_INIT *, UDF_ARGS *, char *);
-typedef void (*Udf_func_any)(void);
-typedef double (*Udf_func_double)(UDF_INIT *, UDF_ARGS *, unsigned char *,
- unsigned char *);
-typedef long long (*Udf_func_longlong)(UDF_INIT *, UDF_ARGS *, unsigned char *,
- unsigned char *);
-typedef char *(*Udf_func_string)(UDF_INIT *, UDF_ARGS *, char *,
- unsigned long *, unsigned char *,
- unsigned char *);
-
-#endif /* UDF_REGISTRATION_TYPES_H */
diff --git a/db/include/mysql_com.h b/db/include/mysql_com.h
index ab6cf49..af144c1 100644
--- a/db/include/mysql_com.h
+++ b/db/include/mysql_com.h
@@ -25,47 +25,24 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
-/**
- @file include/mysql_com.h
- Common definition between mysql server & client.
+/*
+** Common definition between mysql server & client
*/
#ifndef _mysql_com_h
#define _mysql_com_h
-
-#ifndef MYSQL_ABI_CHECK
-#include
-#include
-#endif
-
+#include "binary_log_types.h"
#include "my_command.h"
-#include "my_compress.h"
-
-/*
- We need a definition for my_socket. On the client, already provides
- it, but on the server side, we need to get it from a header.
-*/
-#ifndef my_socket_defined
-#include "my_io.h"
-#include "mysql/components/services/bits/my_io_bits.h"
-#endif
-
-#ifndef MYSQL_ABI_CHECK
-#include
-#endif
-
+#define HOSTNAME_LENGTH 60
#define SYSTEM_CHARSET_MBMAXLEN 3
#define FILENAME_CHARSET_MBMAXLEN 5
-#define NAME_CHAR_LEN 64 /**< Field/table name length */
-#define PARTITION_EXPR_CHAR_LEN \
- 2048 /**< Maximum expression length in chars \
- */
+#define NAME_CHAR_LEN 64 /* Field/table name length */
#define USERNAME_CHAR_LENGTH 32
#define USERNAME_CHAR_LENGTH_STR "32"
#ifndef NAME_LEN
-#define NAME_LEN (NAME_CHAR_LEN * SYSTEM_CHARSET_MBMAXLEN)
+#define NAME_LEN (NAME_CHAR_LEN*SYSTEM_CHARSET_MBMAXLEN)
#endif
-#define USERNAME_LENGTH (USERNAME_CHAR_LENGTH * SYSTEM_CHARSET_MBMAXLEN)
+#define USERNAME_LENGTH (USERNAME_CHAR_LENGTH*SYSTEM_CHARSET_MBMAXLEN)
#define CONNECT_STRING_MAXLEN 1024
#define MYSQL_AUTODETECT_CHARSET_NAME "auto"
@@ -74,863 +51,334 @@
#define SQLSTATE_LENGTH 5
/*
- In FIDO terminology, relying party is the server where required services are
- running. Relying party ID is unique name given to server.
-*/
-#define RELYING_PARTY_ID_LENGTH 255
-
-/* Length of random salt sent during fido registration */
-#define CHALLENGE_LENGTH 32
-
-/* Maximum authentication factors server supports */
-#define MAX_AUTH_FACTORS 3
-/**
Maximum length of comments
-
- pre 5.6: 60 characters
*/
-#define TABLE_COMMENT_INLINE_MAXLEN 180
+#define TABLE_COMMENT_INLINE_MAXLEN 180 /* pre 6.0: 60 characters */
#define TABLE_COMMENT_MAXLEN 2048
#define COLUMN_COMMENT_MAXLEN 1024
#define INDEX_COMMENT_MAXLEN 1024
#define TABLE_PARTITION_COMMENT_MAXLEN 1024
-#define TABLESPACE_COMMENT_MAXLEN 2048
-/**
+/*
Maximum length of protocol packet.
- @ref page_protocol_basic_ok_packet length limit also restricted to this value
- as any length greater than this value will have first byte of
- @ref page_protocol_basic_ok_packet to be 254 thus does not
- provide a means to identify if this is @ref page_protocol_basic_ok_packet or
- @ref page_protocol_basic_eof_packet.
+ OK packet length limit also restricted to this value as any length greater
+ than this value will have first byte of OK packet to be 254 thus does not
+ provide a means to identify if this is OK or EOF packet.
*/
-#define MAX_PACKET_LENGTH (256L * 256L * 256L - 1)
+#define MAX_PACKET_LENGTH (256L*256L*256L-1)
-#define LOCAL_HOST "localhost"
+/*
+ USER_HOST_BUFF_SIZE -- length of string buffer, that is enough to contain
+ username and hostname parts of the user identifier with trailing zero in
+ MySQL standard format:
+ user_name_part@host_name_part\0
+*/
+#define USER_HOST_BUFF_SIZE HOSTNAME_LENGTH + USERNAME_LENGTH + 2
+
+#define LOCAL_HOST "localhost"
#define LOCAL_HOST_NAMEDPIPE "."
+
#if defined(_WIN32)
#define MYSQL_NAMEDPIPE "MySQL"
#define MYSQL_SERVICENAME "MySQL"
#endif /* _WIN32 */
-/** The length of the header part for each generated column in the .frm file.*/
+/* The length of the header part for each generated column in the .frm file. */
#define FRM_GCOL_HEADER_SIZE 4
-/**
+/*
Maximum length of the expression statement defined for generated columns.
*/
#define GENERATED_COLUMN_EXPRESSION_MAXLEN 65535 - FRM_GCOL_HEADER_SIZE
-/**
+/*
Length of random string sent by server on handshake; this is also length of
obfuscated password, received from client
*/
#define SCRAMBLE_LENGTH 20
#define AUTH_PLUGIN_DATA_PART_1_LENGTH 8
-/** length of password stored in the db: new passwords are preceded with '*'*/
-#define SCRAMBLED_PASSWORD_CHAR_LENGTH (SCRAMBLE_LENGTH * 2 + 1)
+/* length of password stored in the db: new passwords are preceeded with '*' */
+#define SCRAMBLED_PASSWORD_CHAR_LENGTH (SCRAMBLE_LENGTH*2+1)
-/**
- @defgroup group_cs_column_definition_flags Column Definition Flags
- @ingroup group_cs
- @brief Values for the flags bitmask used by ::Send_field:flags
-
- Currently need to fit into 32 bits.
-
- Each bit represents an optional feature of the protocol.
-
- Both the client and the server are sending these.
-
- The intersection of the two determines what optional parts of the
- protocol will be used.
-*/
-
-/**
- @addtogroup group_cs_column_definition_flags
- @{
-*/
-
-#define NOT_NULL_FLAG 1 /**< Field can't be NULL */
-#define PRI_KEY_FLAG 2 /**< Field is part of a primary key */
-#define UNIQUE_KEY_FLAG 4 /**< Field is part of a unique key */
-#define MULTIPLE_KEY_FLAG 8 /**< Field is part of a key */
-#define BLOB_FLAG 16 /**< Field is a blob */
-#define UNSIGNED_FLAG 32 /**< Field is unsigned */
-#define ZEROFILL_FLAG 64 /**< Field is zerofill */
-#define BINARY_FLAG 128 /**< Field is binary */
+#define NOT_NULL_FLAG 1 /* Field can't be NULL */
+#define PRI_KEY_FLAG 2 /* Field is part of a primary key */
+#define UNIQUE_KEY_FLAG 4 /* Field is part of a unique key */
+#define MULTIPLE_KEY_FLAG 8 /* Field is part of a key */
+#define BLOB_FLAG 16 /* Field is a blob */
+#define UNSIGNED_FLAG 32 /* Field is unsigned */
+#define ZEROFILL_FLAG 64 /* Field is zerofill */
+#define BINARY_FLAG 128 /* Field is binary */
/* The following are only sent to new clients */
-#define ENUM_FLAG 256 /**< field is an enum */
-#define AUTO_INCREMENT_FLAG 512 /**< field is a autoincrement field */
-#define TIMESTAMP_FLAG 1024 /**< Field is a timestamp */
-#define SET_FLAG 2048 /**< field is a set */
-#define NO_DEFAULT_VALUE_FLAG 4096 /**< Field doesn't have default value */
-#define ON_UPDATE_NOW_FLAG 8192 /**< Field is set to NOW on UPDATE */
-#define NUM_FLAG 32768 /**< Field is num (for clients) */
-#define PART_KEY_FLAG 16384 /**< Intern; Part of some key */
-#define GROUP_FLAG 32768 /**< Intern: Group field */
-#define UNIQUE_FLAG 65536 /**< Intern: Used by sql_yacc */
-#define BINCMP_FLAG 131072 /**< Intern: Used by sql_yacc */
-#define GET_FIXED_FIELDS_FLAG \
- (1 << 18) /**< Used to get fields in item tree \
- */
-#define FIELD_IN_PART_FUNC_FLAG (1 << 19) /**< Field part of partition func */
+#define ENUM_FLAG 256 /* field is an enum */
+#define AUTO_INCREMENT_FLAG 512 /* field is a autoincrement field */
+#define TIMESTAMP_FLAG 1024 /* Field is a timestamp */
+#define SET_FLAG 2048 /* field is a set */
+#define NO_DEFAULT_VALUE_FLAG 4096 /* Field doesn't have default value */
+#define ON_UPDATE_NOW_FLAG 8192 /* Field is set to NOW on UPDATE */
+#define NUM_FLAG 32768 /* Field is num (for clients) */
+#define PART_KEY_FLAG 16384 /* Intern; Part of some key */
+#define GROUP_FLAG 32768 /* Intern: Group field */
+#define UNIQUE_FLAG 65536 /* Intern: Used by sql_yacc */
+#define BINCMP_FLAG 131072 /* Intern: Used by sql_yacc */
+#define GET_FIXED_FIELDS_FLAG (1 << 18) /* Used to get fields in item tree */
+#define FIELD_IN_PART_FUNC_FLAG (1 << 19)/* Field part of partition func */
/**
Intern: Field in TABLE object for new version of altered table,
which participates in a newly added index.
*/
#define FIELD_IN_ADD_INDEX (1 << 20)
-#define FIELD_IS_RENAMED (1 << 21) /**< Intern: Field is being renamed */
-#define FIELD_FLAGS_STORAGE_MEDIA 22 /**< Field storage media, bit 22-23 */
+#define FIELD_IS_RENAMED (1<< 21) /* Intern: Field is being renamed */
+#define FIELD_FLAGS_STORAGE_MEDIA 22 /* Field storage media, bit 22-23 */
#define FIELD_FLAGS_STORAGE_MEDIA_MASK (3 << FIELD_FLAGS_STORAGE_MEDIA)
-#define FIELD_FLAGS_COLUMN_FORMAT 24 /**< Field column format, bit 24-25 */
+#define FIELD_FLAGS_COLUMN_FORMAT 24 /* Field column format, bit 24-25 */
#define FIELD_FLAGS_COLUMN_FORMAT_MASK (3 << FIELD_FLAGS_COLUMN_FORMAT)
-#define FIELD_IS_DROPPED (1 << 26) /**< Intern: Field is being dropped */
-#define EXPLICIT_NULL_FLAG \
- (1 << 27) /**< Field is explicitly specified as \
- NULL by the user */
-/* 1 << 28 is unused. */
-
-/** Field will not be loaded in secondary engine. */
-#define NOT_SECONDARY_FLAG (1 << 29)
-/** Field is explicitly marked as invisible by the user. */
-#define FIELD_IS_INVISIBLE (1 << 30)
-
-/** @}*/
-
-/**
- @defgroup group_cs_com_refresh_flags COM_REFRESH Flags
- @ingroup group_cs
-
- @brief Values for the `sub_command` in ::COM_REFRESH
-
- Currently the protocol carries only 8 bits of these flags.
-
- The rest (8-end) are used only internally in the server.
-*/
-
-/**
- @addtogroup group_cs_com_refresh_flags
- @{
-*/
-
-#define REFRESH_GRANT 1 /**< Refresh grant tables, FLUSH PRIVILEGES */
-#define REFRESH_LOG 2 /**< Start on new log file, FLUSH LOGS */
-#define REFRESH_TABLES 4 /**< close all tables, FLUSH TABLES */
-#define REFRESH_HOSTS 8 /**< Flush host cache, FLUSH HOSTS */
-#define REFRESH_STATUS 16 /**< Flush status variables, FLUSH STATUS */
-#define REFRESH_THREADS 32 /**< Flush thread cache */
-#define REFRESH_REPLICA \
- 64 /**< Reset master info and restart replica \
- thread, RESET REPLICA */
-#define REFRESH_SLAVE \
- REFRESH_REPLICA /**< Reset master info and restart replica \
- thread, RESET REPLICA. This is deprecated, \
- use REFRESH_REPLICA instead. */
-
-#define REFRESH_MASTER \
- 128 /**< Remove all bin logs in the index \
- and truncate the index, RESET MASTER */
-#define REFRESH_ERROR_LOG 256 /**< Rotate only the error log */
-#define REFRESH_ENGINE_LOG 512 /**< Flush all storage engine logs */
-#define REFRESH_BINARY_LOG 1024 /**< Flush the binary log */
-#define REFRESH_RELAY_LOG 2048 /**< Flush the relay log */
-#define REFRESH_GENERAL_LOG 4096 /**< Flush the general log */
-#define REFRESH_SLOW_LOG 8192 /**< Flush the slow query log */
-#define REFRESH_READ_LOCK 16384 /**< Lock tables for read. */
-/**
- Wait for an impending flush before closing the tables.
-
- @sa REFRESH_READ_LOCK, handle_reload_request, close_cached_tables
-*/
-#define REFRESH_FAST 32768
-#define REFRESH_USER_RESOURCES 0x80000L /** FLUSH RESOURCES. @sa ::reset_mqh */
-#define REFRESH_FOR_EXPORT 0x100000L /** FLUSH TABLES ... FOR EXPORT */
-#define REFRESH_OPTIMIZER_COSTS 0x200000L /** FLUSH OPTIMIZER_COSTS */
-#define REFRESH_PERSIST 0x400000L /** RESET PERSIST */
-
-/** @}*/
-
-/**
- @defgroup group_cs_capabilities_flags Capabilities Flags
- @ingroup group_cs
-
- @brief Values for the capabilities flag bitmask used by the MySQL protocol
-
- Currently need to fit into 32 bits.
-
- Each bit represents an optional feature of the protocol.
-
- Both the client and the server are sending these.
-
- The intersection of the two determines whast optional parts of the
- protocol will be used.
-*/
-
-/**
- @addtogroup group_cs_capabilities_flags
- @{
-*/
-
-/**
- Use the improved version of Old Password Authentication.
-
- Not used.
-
- @note Assumed to be set since 4.1.1.
-*/
-#define CLIENT_LONG_PASSWORD 1
-/**
- Send found rows instead of affected rows in @ref
- page_protocol_basic_eof_packet
-*/
-#define CLIENT_FOUND_ROWS 2
-/**
- @brief Get all column flags
-
- Longer flags in Protocol::ColumnDefinition320.
-
- @todo Reference Protocol::ColumnDefinition320
-
- Server
- ------
-
- Supports longer flags.
-
- Client
- ------
-
- Expects longer flags.
-*/
-#define CLIENT_LONG_FLAG 4
-/**
- Database (schema) name can be specified on connect in Handshake Response
- Packet.
-
- @todo Reference Handshake Response Packet.
-
- Server
- ------
-
- Supports schema-name in Handshake Response Packet.
-
- Client
- ------
-
- Handshake Response Packet contains a schema-name.
-
- @sa send_client_reply_packet()
-*/
-#define CLIENT_CONNECT_WITH_DB 8
-#define CLIENT_NO_SCHEMA 16 /**< Don't allow database.table.column */
-/**
- Compression protocol supported.
-
- @todo Reference Compression
-
- Server
- ------
-
- Supports compression.
-
- Client
- ------
-
- Switches to Compression compressed protocol after successful authentication.
-*/
-#define CLIENT_COMPRESS 32
-/**
- Special handling of ODBC behavior.
-
- @note No special behavior since 3.22.
-*/
-#define CLIENT_ODBC 64
-/**
- Can use LOAD DATA LOCAL.
-
- Server
- ------
-
- Enables the LOCAL INFILE request of LOAD DATA|XML.
-
- Client
- ------
-
- Will handle LOCAL INFILE request.
-*/
-#define CLIENT_LOCAL_FILES 128
-/**
- Ignore spaces before '('
-
- Server
- ------
-
- Parser can ignore spaces before '('.
-
- Client
- ------
-
- Let the parser ignore spaces before '('.
-*/
-#define CLIENT_IGNORE_SPACE 256
-/**
- New 4.1 protocol
-
- @todo Reference the new 4.1 protocol
-
- Server
- ------
-
- Supports the 4.1 protocol.
-
- Client
- ------
-
- Uses the 4.1 protocol.
-
- @note this value was CLIENT_CHANGE_USER in 3.22, unused in 4.0
-*/
-#define CLIENT_PROTOCOL_41 512
-/**
- This is an interactive client
-
- Use @ref System_variables::net_wait_timeout
- versus @ref System_variables::net_interactive_timeout.
-
- Server
- ------
-
- Supports interactive and noninteractive clients.
-
- Client
- ------
-
- Client is interactive.
-
- @sa mysql_real_connect()
-*/
-#define CLIENT_INTERACTIVE 1024
-/**
- Use SSL encryption for the session
-
- @todo Reference SSL
-
- Server
- ------
-
- Supports SSL
-
- Client
- ------
-
- Switch to SSL after sending the capability-flags.
-*/
-#define CLIENT_SSL 2048
-/**
- Client only flag. Not used.
-
- Client
- ------
-
- Do not issue SIGPIPE if network failures occur (libmysqlclient only).
-
- @sa mysql_real_connect()
-*/
-#define CLIENT_IGNORE_SIGPIPE 4096
-/**
- Client knows about transactions
-
- Server
- ------
-
- Can send status flags in @ref page_protocol_basic_ok_packet /
- @ref page_protocol_basic_eof_packet.
-
- Client
- ------
-
- Expects status flags in @ref page_protocol_basic_ok_packet /
- @ref page_protocol_basic_eof_packet.
-
- @note This flag is optional in 3.23, but always set by the server since 4.0.
- @sa send_server_handshake_packet(), parse_client_handshake_packet(),
- net_send_ok(), net_send_eof()
-*/
-#define CLIENT_TRANSACTIONS 8192
-#define CLIENT_RESERVED 16384 /**< DEPRECATED: Old flag for 4.1 protocol */
-#define CLIENT_RESERVED2 \
- 32768 /**< DEPRECATED: Old flag for 4.1 authentication \
- CLIENT_SECURE_CONNECTION */
-/**
- Enable/disable multi-stmt support
-
- Also sets @ref CLIENT_MULTI_RESULTS. Currently not checked anywhere.
-
- Server
- ------
-
- Can handle multiple statements per COM_QUERY and COM_STMT_PREPARE.
-
- Client
- -------
-
- May send multiple statements per COM_QUERY and COM_STMT_PREPARE.
-
- @note Was named ::CLIENT_MULTI_QUERIES in 4.1.0, renamed later.
-
- Requires
- --------
-
- ::CLIENT_PROTOCOL_41
-
- @todo Reference COM_QUERY and COM_STMT_PREPARE
-*/
-#define CLIENT_MULTI_STATEMENTS (1UL << 16)
-/**
- Enable/disable multi-results
-
- Server
- ------
-
- Can send multiple resultsets for COM_QUERY.
- Error if the server needs to send them and client
- does not support them.
-
- Client
- -------
-
- Can handle multiple resultsets for COM_QUERY.
-
- Requires
- --------
-
- ::CLIENT_PROTOCOL_41
-
- @sa mysql_execute_command(), sp_head::MULTI_RESULTS
-*/
-#define CLIENT_MULTI_RESULTS (1UL << 17)
-/**
- Multi-results and OUT parameters in PS-protocol.
-
- Server
- ------
-
- Can send multiple resultsets for COM_STMT_EXECUTE.
-
- Client
- ------
-
- Can handle multiple resultsets for COM_STMT_EXECUTE.
-
- Requires
- --------
-
- ::CLIENT_PROTOCOL_41
-
- @todo Reference COM_STMT_EXECUTE and PS-protocol
-
- @sa Protocol_binary::send_out_parameters
-*/
-#define CLIENT_PS_MULTI_RESULTS (1UL << 18)
-
-/**
- Client supports plugin authentication
-
- Server
- ------
-
- Sends extra data in Initial Handshake Packet and supports the pluggable
- authentication protocol.
-
- Client
- ------
-
- Supports authentication plugins.
-
- Requires
- --------
-
- ::CLIENT_PROTOCOL_41
-
- @todo Reference plugin authentication, Initial Handshake Packet,
- Authentication plugins
-
- @sa send_change_user_packet(), send_client_reply_packet(), run_plugin_auth(),
- parse_com_change_user_packet(), parse_client_handshake_packet()
-*/
-#define CLIENT_PLUGIN_AUTH (1UL << 19)
-/**
- Client supports connection attributes
-
- Server
- ------
-
- Permits connection attributes in Protocol::HandshakeResponse41.
-
- Client
- ------
-
- Sends connection attributes in Protocol::HandshakeResponse41.
-
- @todo Reference Protocol::HandshakeResponse41
-
- @sa send_client_connect_attrs(), read_client_connect_attrs()
-*/
-#define CLIENT_CONNECT_ATTRS (1UL << 20)
-
-/**
- Enable authentication response packet to be larger than 255 bytes.
-
- When the ability to change default plugin require that the initial password
- field in the Protocol::HandshakeResponse41 paclet can be of arbitrary size.
- However, the 4.1 client-server protocol limits the length of the
- auth-data-field sent from client to server to 255 bytes.
- The solution is to change the type of the field to a true length encoded
- string and indicate the protocol change
- with this client capability flag.
-
- Server
- ------
-
- Understands length-encoded integer for auth response data in
- Protocol::HandshakeResponse41.
-
- Client
- ------
-
- Length of auth response data in Protocol::HandshakeResponse41
- is a length-encoded integer.
-
- @todo Reference Protocol::HandshakeResponse41
-
- @note The flag was introduced in 5.6.6, but had the wrong value.
-
- @sa send_client_reply_packet(), parse_client_handshake_packet(),
- get_56_lenc_string(), get_41_lenc_string()
-*/
+#define FIELD_IS_DROPPED (1<< 26) /* Intern: Field is being dropped */
+#define EXPLICIT_NULL_FLAG (1<< 27) /* Field is explicitly specified as
+ NULL by the user */
+#define SERIAL_FLAG (1<< 28) /* Field is "SERIAL" */
+
+#define REFRESH_GRANT 1 /* Refresh grant tables */
+#define REFRESH_LOG 2 /* Start on new log file */
+#define REFRESH_TABLES 4 /* close all tables */
+#define REFRESH_HOSTS 8 /* Flush host cache */
+#define REFRESH_STATUS 16 /* Flush status variables */
+#define REFRESH_THREADS 32 /* Flush thread cache */
+#define REFRESH_SLAVE 64 /* Reset master info and restart slave
+ thread */
+#define REFRESH_MASTER 128 /* Remove all bin logs in the index
+ and truncate the index */
+#define REFRESH_ERROR_LOG 256 /* Rotate only the erorr log */
+#define REFRESH_ENGINE_LOG 512 /* Flush all storage engine logs */
+#define REFRESH_BINARY_LOG 1024 /* Flush the binary log */
+#define REFRESH_RELAY_LOG 2048 /* Flush the relay log */
+#define REFRESH_GENERAL_LOG 4096 /* Flush the general log */
+#define REFRESH_SLOW_LOG 8192 /* Flush the slow query log */
+
+/* The following can't be set with mysql_refresh() */
+#define REFRESH_READ_LOCK 16384 /* Lock tables for read */
+#define REFRESH_FAST 32768 /* Intern flag */
+
+/* RESET (remove all queries) from query cache */
+#define REFRESH_QUERY_CACHE 65536
+#define REFRESH_QUERY_CACHE_FREE 0x20000L /* pack query cache */
+#define REFRESH_DES_KEY_FILE 0x40000L
+#define REFRESH_USER_RESOURCES 0x80000L
+#define REFRESH_FOR_EXPORT 0x100000L /* FLUSH TABLES ... FOR EXPORT */
+#define REFRESH_OPTIMIZER_COSTS 0x200000L /* FLUSH OPTIMIZER_COSTS */
+
+#define CLIENT_LONG_PASSWORD 1 /* new more secure passwords */
+#define CLIENT_FOUND_ROWS 2 /* Found instead of affected rows */
+#define CLIENT_LONG_FLAG 4 /* Get all column flags */
+#define CLIENT_CONNECT_WITH_DB 8 /* One can specify db on connect */
+#define CLIENT_NO_SCHEMA 16 /* Don't allow database.table.column */
+#define CLIENT_COMPRESS 32 /* Can use compression protocol */
+#define CLIENT_ODBC 64 /* Odbc client */
+#define CLIENT_LOCAL_FILES 128 /* Can use LOAD DATA LOCAL */
+#define CLIENT_IGNORE_SPACE 256 /* Ignore spaces before '(' */
+#define CLIENT_PROTOCOL_41 512 /* New 4.1 protocol */
+#define CLIENT_INTERACTIVE 1024 /* This is an interactive client */
+#define CLIENT_SSL 2048 /* Switch to SSL after handshake */
+#define CLIENT_IGNORE_SIGPIPE 4096 /* IGNORE sigpipes */
+#define CLIENT_TRANSACTIONS 8192 /* Client knows about transactions */
+#define CLIENT_RESERVED 16384 /* Old flag for 4.1 protocol */
+#define CLIENT_RESERVED2 32768 /* Old flag for 4.1 authentication */
+#define CLIENT_MULTI_STATEMENTS (1UL << 16) /* Enable/disable multi-stmt support */
+#define CLIENT_MULTI_RESULTS (1UL << 17) /* Enable/disable multi-results */
+#define CLIENT_PS_MULTI_RESULTS (1UL << 18) /* Multi-results in PS-protocol */
+
+#define CLIENT_PLUGIN_AUTH (1UL << 19) /* Client supports plugin authentication */
+#define CLIENT_CONNECT_ATTRS (1UL << 20) /* Client supports connection attributes */
+
+/* Enable authentication response packet to be larger than 255 bytes. */
#define CLIENT_PLUGIN_AUTH_LENENC_CLIENT_DATA (1UL << 21)
-/**
- Don't close the connection for a user account with expired password.
-
- Server
- ------
-
- Announces support for expired password extension.
-
- Client
- ------
-
- Can handle expired passwords.
-
- @todo Reference expired password
-
- @sa MYSQL_OPT_CAN_HANDLE_EXPIRED_PASSWORDS, disconnect_on_expired_password
- ACL_USER::password_expired, check_password_lifetime(), acl_authenticate()
-*/
+/* Don't close the connection for a connection with expired password. */
#define CLIENT_CAN_HANDLE_EXPIRED_PASSWORDS (1UL << 22)
/**
Capable of handling server state change information. Its a hint to the
- server to include the state change information in
- @ref page_protocol_basic_ok_packet.
-
- Server
- ------
- Can set ::SERVER_SESSION_STATE_CHANGED in the ::SERVER_STATUS_flags_enum
- and send @ref sect_protocol_basic_ok_packet_sessinfo in a
- @ref page_protocol_basic_ok_packet.
-
- Client
- ------
-
- Expects the server to send @ref sect_protocol_basic_ok_packet_sessinfo in
- a @ref page_protocol_basic_ok_packet.
-
- @sa enum_session_state_type, read_ok_ex(), net_send_ok(), Session_tracker,
- State_tracker
+ server to include the state change information in Ok packet.
*/
#define CLIENT_SESSION_TRACK (1UL << 23)
-/**
- Client no longer needs @ref page_protocol_basic_eof_packet and will
- use @ref page_protocol_basic_ok_packet instead.
- @sa net_send_ok()
-
- Server
- ------
-
- Can send OK after a Text Resultset.
-
- Client
- ------
-
- Expects an @ref page_protocol_basic_ok_packet (instead of
- @ref page_protocol_basic_eof_packet) after the resultset rows of a
- Text Resultset.
-
- Background
- ----------
-
- To support ::CLIENT_SESSION_TRACK, additional information must be sent after
- all successful commands. Although the @ref page_protocol_basic_ok_packet is
- extensible, the @ref page_protocol_basic_eof_packet is not due to the overlap
- of its bytes with the content of the Text Resultset Row.
-
- Therefore, the @ref page_protocol_basic_eof_packet in the
- Text Resultset is replaced with an @ref page_protocol_basic_ok_packet.
- @ref page_protocol_basic_eof_packet is deprecated as of MySQL 5.7.5.
-
- @todo Reference Text Resultset
-
- @sa cli_safe_read_with_ok(), read_ok_ex(), net_send_ok(), net_send_eof()
-*/
+/* Client no longer needs EOF packet */
#define CLIENT_DEPRECATE_EOF (1UL << 24)
-/**
- The client can handle optional metadata information in the resultset.
-*/
-#define CLIENT_OPTIONAL_RESULTSET_METADATA (1UL << 25)
-
-/**
- Compression protocol extended to support zstd compression method
-
- This capability flag is used to send zstd compression level between
- client and server provided both client and server are enabled with
- this flag.
-
- Server
- ------
- Server sets this flag when global variable protocol-compression-algorithms
- has zstd in its list of supported values.
-
- Client
- ------
- Client sets this flag when it is configured to use zstd compression method.
-
-*/
-#define CLIENT_ZSTD_COMPRESSION_ALGORITHM (1UL << 26)
-
-/**
- Support optional extension for query parameters into the @ref
- page_protocol_com_query and @ref page_protocol_com_stmt_execute packets.
-
- Server
- ------
-
- Expects an optional part containing the query parameter set(s). Executes the
- query for each set of parameters or returns an error if more than 1 set of
- parameters is sent and the server can't execute it.
-
- Client
- ------
-
- Can send the optional part containing the query parameter set(s).
-*/
-#define CLIENT_QUERY_ATTRIBUTES (1UL << 27)
-
-/**
- Support Multi factor authentication.
-
- Server
- ------
- Server sends AuthNextFactor packet after every nth factor authentication
- method succeeds, except the last factor authentication.
-
- Client
- ------
- Client reads AuthNextFactor packet sent by server and initiates next factor
- authentication method.
-*/
-#define MULTI_FACTOR_AUTHENTICATION (1UL << 28)
-
-/**
- This flag will be reserved to extend the 32bit capabilities structure to
- 64bits.
-*/
-#define CLIENT_CAPABILITY_EXTENSION (1UL << 29)
-
-/**
- Verify server certificate.
-
- Client only flag.
-
- @deprecated in favor of --ssl-mode.
-*/
#define CLIENT_SSL_VERIFY_SERVER_CERT (1UL << 30)
-
-/**
- Don't reset the options after an unsuccessful connect
-
- Client only flag.
-
- Typically passed via ::mysql_real_connect() 's client_flag parameter.
-
- @sa mysql_real_connect()
-*/
#define CLIENT_REMEMBER_OPTIONS (1UL << 31)
-/** @}*/
-/** a compatibility alias for CLIENT_COMPRESS */
+#ifdef HAVE_COMPRESS
#define CAN_CLIENT_COMPRESS CLIENT_COMPRESS
+#else
+#define CAN_CLIENT_COMPRESS 0
+#endif
-/** Gather all possible capabilities (flags) supported by the server */
-#define CLIENT_ALL_FLAGS \
- (CLIENT_LONG_PASSWORD | CLIENT_FOUND_ROWS | CLIENT_LONG_FLAG | \
- CLIENT_CONNECT_WITH_DB | CLIENT_NO_SCHEMA | CLIENT_COMPRESS | CLIENT_ODBC | \
- CLIENT_LOCAL_FILES | CLIENT_IGNORE_SPACE | CLIENT_PROTOCOL_41 | \
- CLIENT_INTERACTIVE | CLIENT_SSL | CLIENT_IGNORE_SIGPIPE | \
- CLIENT_TRANSACTIONS | CLIENT_RESERVED | CLIENT_RESERVED2 | \
- CLIENT_MULTI_STATEMENTS | CLIENT_MULTI_RESULTS | CLIENT_PS_MULTI_RESULTS | \
- CLIENT_SSL_VERIFY_SERVER_CERT | CLIENT_REMEMBER_OPTIONS | \
- CLIENT_PLUGIN_AUTH | CLIENT_CONNECT_ATTRS | \
- CLIENT_PLUGIN_AUTH_LENENC_CLIENT_DATA | \
- CLIENT_CAN_HANDLE_EXPIRED_PASSWORDS | CLIENT_SESSION_TRACK | \
- CLIENT_DEPRECATE_EOF | CLIENT_OPTIONAL_RESULTSET_METADATA | \
- CLIENT_ZSTD_COMPRESSION_ALGORITHM | CLIENT_QUERY_ATTRIBUTES | \
- MULTI_FACTOR_AUTHENTICATION)
+/* Gather all possible capabilites (flags) supported by the server */
+#define CLIENT_ALL_FLAGS (CLIENT_LONG_PASSWORD \
+ | CLIENT_FOUND_ROWS \
+ | CLIENT_LONG_FLAG \
+ | CLIENT_CONNECT_WITH_DB \
+ | CLIENT_NO_SCHEMA \
+ | CLIENT_COMPRESS \
+ | CLIENT_ODBC \
+ | CLIENT_LOCAL_FILES \
+ | CLIENT_IGNORE_SPACE \
+ | CLIENT_PROTOCOL_41 \
+ | CLIENT_INTERACTIVE \
+ | CLIENT_SSL \
+ | CLIENT_IGNORE_SIGPIPE \
+ | CLIENT_TRANSACTIONS \
+ | CLIENT_RESERVED \
+ | CLIENT_RESERVED2 \
+ | CLIENT_MULTI_STATEMENTS \
+ | CLIENT_MULTI_RESULTS \
+ | CLIENT_PS_MULTI_RESULTS \
+ | CLIENT_SSL_VERIFY_SERVER_CERT \
+ | CLIENT_REMEMBER_OPTIONS \
+ | CLIENT_PLUGIN_AUTH \
+ | CLIENT_CONNECT_ATTRS \
+ | CLIENT_PLUGIN_AUTH_LENENC_CLIENT_DATA \
+ | CLIENT_CAN_HANDLE_EXPIRED_PASSWORDS \
+ | CLIENT_SESSION_TRACK \
+ | CLIENT_DEPRECATE_EOF \
+)
-/**
- Switch off from ::CLIENT_ALL_FLAGS the flags that are optional and
- depending on build flags.
+/*
+ Switch off the flags that are optional and depending on build flags
If any of the optional flags is supported by the build it will be switched
on before sending to the client during the connection handshake.
*/
-#define CLIENT_BASIC_FLAGS \
- (CLIENT_ALL_FLAGS & \
- ~(CLIENT_SSL | CLIENT_COMPRESS | CLIENT_SSL_VERIFY_SERVER_CERT | \
- CLIENT_ZSTD_COMPRESSION_ALGORITHM))
+#define CLIENT_BASIC_FLAGS (((CLIENT_ALL_FLAGS & ~CLIENT_SSL) \
+ & ~CLIENT_COMPRESS) \
+ & ~CLIENT_SSL_VERIFY_SERVER_CERT)
-/** The status flags are a bit-field */
-enum SERVER_STATUS_flags_enum {
- /**
- Is raised when a multi-statement transaction
- has been started, either explicitly, by means
- of BEGIN or COMMIT AND CHAIN, or
- implicitly, by the first transactional
- statement, when autocommit=off.
- */
- SERVER_STATUS_IN_TRANS = 1,
- SERVER_STATUS_AUTOCOMMIT = 2, /**< Server in auto_commit mode */
- SERVER_MORE_RESULTS_EXISTS = 8, /**< Multi query - next query exists */
- SERVER_QUERY_NO_GOOD_INDEX_USED = 16,
- SERVER_QUERY_NO_INDEX_USED = 32,
- /**
- The server was able to fulfill the clients request and opened a
- read-only non-scrollable cursor for a query. This flag comes
- in reply to COM_STMT_EXECUTE and COM_STMT_FETCH commands.
- Used by Binary Protocol Resultset to signal that COM_STMT_FETCH
- must be used to fetch the row-data.
- @todo Refify "Binary Protocol Resultset" and "COM_STMT_FETCH".
- */
- SERVER_STATUS_CURSOR_EXISTS = 64,
- /**
- This flag is sent when a read-only cursor is exhausted, in reply to
- COM_STMT_FETCH command.
- */
- SERVER_STATUS_LAST_ROW_SENT = 128,
- SERVER_STATUS_DB_DROPPED = 256, /**< A database was dropped */
- SERVER_STATUS_NO_BACKSLASH_ESCAPES = 512,
- /**
- Sent to the client if after a prepared statement reprepare
- we discovered that the new statement returns a different
- number of result set columns.
- */
- SERVER_STATUS_METADATA_CHANGED = 1024,
- SERVER_QUERY_WAS_SLOW = 2048,
- /**
- To mark ResultSet containing output parameter values.
- */
- SERVER_PS_OUT_PARAMS = 4096,
+/**
+ Is raised when a multi-statement transaction
+ has been started, either explicitly, by means
+ of BEGIN or COMMIT AND CHAIN, or
+ implicitly, by the first transactional
+ statement, when autocommit=off.
+*/
+#define SERVER_STATUS_IN_TRANS 1
+#define SERVER_STATUS_AUTOCOMMIT 2 /* Server in auto_commit mode */
+#define SERVER_MORE_RESULTS_EXISTS 8 /* Multi query - next query exists */
+#define SERVER_QUERY_NO_GOOD_INDEX_USED 16
+#define SERVER_QUERY_NO_INDEX_USED 32
+/**
+ The server was able to fulfill the clients request and opened a
+ read-only non-scrollable cursor for a query. This flag comes
+ in reply to COM_STMT_EXECUTE and COM_STMT_FETCH commands.
+*/
+#define SERVER_STATUS_CURSOR_EXISTS 64
+/**
+ This flag is sent when a read-only cursor is exhausted, in reply to
+ COM_STMT_FETCH command.
+*/
+#define SERVER_STATUS_LAST_ROW_SENT 128
+#define SERVER_STATUS_DB_DROPPED 256 /* A database was dropped */
+#define SERVER_STATUS_NO_BACKSLASH_ESCAPES 512
+/**
+ Sent to the client if after a prepared statement reprepare
+ we discovered that the new statement returns a different
+ number of result set columns.
+*/
+#define SERVER_STATUS_METADATA_CHANGED 1024
+#define SERVER_QUERY_WAS_SLOW 2048
- /**
- Set at the same time as SERVER_STATUS_IN_TRANS if the started
- multi-statement transaction is a read-only transaction. Cleared
- when the transaction commits or aborts. Since this flag is sent
- to clients in OK and EOF packets, the flag indicates the
- transaction status at the end of command execution.
- */
- SERVER_STATUS_IN_TRANS_READONLY = 8192,
+/**
+ To mark ResultSet containing output parameter values.
+*/
+#define SERVER_PS_OUT_PARAMS 4096
- /**
- This status flag, when on, implies that one of the state information has
- changed on the server because of the execution of the last statement.
- */
- SERVER_SESSION_STATE_CHANGED = (1UL << 14)
-};
+/**
+ Set at the same time as SERVER_STATUS_IN_TRANS if the started
+ multi-statement transaction is a read-only transaction. Cleared
+ when the transaction commits or aborts. Since this flag is sent
+ to clients in OK and EOF packets, the flag indicates the
+ transaction status at the end of command execution.
+*/
+#define SERVER_STATUS_IN_TRANS_READONLY 8192
+
+/**
+ This status flag, when on, implies that one of the state information has
+ changed on the server because of the execution of the last statement.
+*/
+#define SERVER_SESSION_STATE_CHANGED (1UL << 14)
/**
Server status flags that must be cleared when starting
execution of a new SQL statement.
Flags from this set are only added to the
- current server status by the execution engine, but
- never removed -- the execution engine expects them
+ current server status by the execution engine, but
+ never removed -- the execution engine expects them
to disappear automagically by the next command.
*/
-#define SERVER_STATUS_CLEAR_SET \
- (SERVER_QUERY_NO_GOOD_INDEX_USED | SERVER_QUERY_NO_INDEX_USED | \
- SERVER_MORE_RESULTS_EXISTS | SERVER_STATUS_METADATA_CHANGED | \
- SERVER_QUERY_WAS_SLOW | SERVER_STATUS_DB_DROPPED | \
- SERVER_STATUS_CURSOR_EXISTS | SERVER_STATUS_LAST_ROW_SENT | \
- SERVER_SESSION_STATE_CHANGED)
+#define SERVER_STATUS_CLEAR_SET (SERVER_QUERY_NO_GOOD_INDEX_USED| \
+ SERVER_QUERY_NO_INDEX_USED|\
+ SERVER_MORE_RESULTS_EXISTS|\
+ SERVER_STATUS_METADATA_CHANGED |\
+ SERVER_QUERY_WAS_SLOW |\
+ SERVER_STATUS_DB_DROPPED |\
+ SERVER_STATUS_CURSOR_EXISTS|\
+ SERVER_STATUS_LAST_ROW_SENT|\
+ SERVER_SESSION_STATE_CHANGED)
-/** Max length of a error message. Should be kept in sync with ::ERRMSGSIZE. */
-#define MYSQL_ERRMSG_SIZE 512
-#define NET_READ_TIMEOUT 30 /**< Timeout on read */
-#define NET_WRITE_TIMEOUT 60 /**< Timeout on write */
-#define NET_WAIT_TIMEOUT 8 * 60 * 60 /**< Wait for new query */
+#define MYSQL_ERRMSG_SIZE 512
+#define NET_READ_TIMEOUT 30 /* Timeout on read */
+#define NET_WRITE_TIMEOUT 60 /* Timeout on write */
+#define NET_WAIT_TIMEOUT 8*60*60 /* Wait for new query */
-/**
- Flag used by the parser. Kill only the query and not the connection.
+#define ONLY_KILL_QUERY 1
- @sa SQLCOM_KILL, sql_kill(), LEX::type
-*/
-#define ONLY_KILL_QUERY 1
-#ifndef MYSQL_VIO
-struct Vio;
-#define MYSQL_VIO struct Vio *
-#endif
+struct st_vio; /* Only C */
+typedef struct st_vio Vio;
-#define MAX_TINYINT_WIDTH 3 /**< Max width for a TINY w.o. sign */
-#define MAX_SMALLINT_WIDTH 5 /**< Max width for a SHORT w.o. sign */
-#define MAX_MEDIUMINT_WIDTH 8 /**< Max width for a INT24 w.o. sign */
-#define MAX_INT_WIDTH 10 /**< Max width for a LONG w.o. sign */
-#define MAX_BIGINT_WIDTH 20 /**< Max width for a LONGLONG */
-/// Max width for a CHAR column, in number of characters
-#define MAX_CHAR_WIDTH 255
-/// Default width for blob in bytes @todo - align this with sizes from field.h
-#define MAX_BLOB_WIDTH 16777216
+#define MAX_TINYINT_WIDTH 3 /* Max width for a TINY w.o. sign */
+#define MAX_SMALLINT_WIDTH 5 /* Max width for a SHORT w.o. sign */
+#define MAX_MEDIUMINT_WIDTH 8 /* Max width for a INT24 w.o. sign */
+#define MAX_INT_WIDTH 10 /* Max width for a LONG w.o. sign */
+#define MAX_BIGINT_WIDTH 20 /* Max width for a LONGLONG */
+#define MAX_CHAR_WIDTH 255 /* Max length for a CHAR colum */
+#define MAX_BLOB_WIDTH 16777216 /* Default width for blob */
-#define NET_ERROR_UNSET 0 /**< No error has occurred yet */
-#define NET_ERROR_SOCKET_RECOVERABLE 1 /**< Socket still usable */
-#define NET_ERROR_SOCKET_UNUSABLE 2 /**< Do not use the socket */
-#define NET_ERROR_SOCKET_NOT_READABLE 3 /**< Try write and close socket */
-#define NET_ERROR_SOCKET_NOT_WRITABLE 4 /**< Try read and close socket */
-
-typedef struct NET {
- MYSQL_VIO vio;
- unsigned char *buff, *buff_end, *write_pos, *read_pos;
- my_socket fd; /* For Perl DBI/dbd */
- /**
- Set if we are doing several queries in one
+typedef struct st_net {
+ Vio *vio;
+ unsigned char *buff,*buff_end,*write_pos,*read_pos;
+ my_socket fd; /* For Perl DBI/dbd */
+ /*
+ The following variable is set if we are doing several queries in one
command ( as in LOAD TABLE ... FROM MASTER ),
and do not want to confuse the client with OK at the wrong time
*/
- unsigned long remain_in_buf, length, buf_length, where_b;
- unsigned long max_packet, max_packet_size;
- unsigned int pkt_nr, compress_pkt_nr;
+ unsigned long remain_in_buf,length, buf_length, where_b;
+ unsigned long max_packet,max_packet_size;
+ unsigned int pkt_nr,compress_pkt_nr;
unsigned int write_timeout, read_timeout, retry_count;
int fcntl;
unsigned int *return_status;
unsigned char reading_or_writing;
- unsigned char save_char;
- bool compress;
+ char save_char;
+ my_bool unused1; /* Please remove with the next incompatible ABI change */
+ my_bool unused2; /* Please remove with the next incompatible ABI change */
+ my_bool compress;
+ my_bool unused3; /* Please remove with the next incompatible ABI change. */
+ /*
+ Pointer to query object in query cache, do not equal NULL (0) for
+ queries in cache that have not stored its results yet
+ */
+ /*
+ Unused, please remove with the next incompatible ABI change.
+ */
+ unsigned char *unused;
unsigned int last_errno;
- unsigned char error;
+ unsigned char error;
+ my_bool unused4; /* Please remove with the next incompatible ABI change. */
+ my_bool unused5; /* Please remove with the next incompatible ABI change. */
/** Client library error message buffer. Actually belongs to struct MYSQL. */
char last_error[MYSQL_ERRMSG_SIZE];
/** Client library sqlstate buffer. Set along with the error message. */
- char sqlstate[SQLSTATE_LENGTH + 1];
+ char sqlstate[SQLSTATE_LENGTH+1];
/**
Extension pointer, for the caller private use.
Any program linking with the networking library can use this pointer,
@@ -942,252 +390,244 @@ typedef struct NET {
void *extension;
} NET;
-#define packet_error (~(unsigned long)0)
-/**
- @addtogroup group_cs_backward_compatibility Backward compatibility
- @ingroup group_cs
- @{
-*/
-#define CLIENT_MULTI_QUERIES CLIENT_MULTI_STATEMENTS
-#define FIELD_TYPE_DECIMAL MYSQL_TYPE_DECIMAL
-#define FIELD_TYPE_NEWDECIMAL MYSQL_TYPE_NEWDECIMAL
-#define FIELD_TYPE_TINY MYSQL_TYPE_TINY
-#define FIELD_TYPE_SHORT MYSQL_TYPE_SHORT
-#define FIELD_TYPE_LONG MYSQL_TYPE_LONG
-#define FIELD_TYPE_FLOAT MYSQL_TYPE_FLOAT
-#define FIELD_TYPE_DOUBLE MYSQL_TYPE_DOUBLE
-#define FIELD_TYPE_NULL MYSQL_TYPE_NULL
-#define FIELD_TYPE_TIMESTAMP MYSQL_TYPE_TIMESTAMP
-#define FIELD_TYPE_LONGLONG MYSQL_TYPE_LONGLONG
-#define FIELD_TYPE_INT24 MYSQL_TYPE_INT24
-#define FIELD_TYPE_DATE MYSQL_TYPE_DATE
-#define FIELD_TYPE_TIME MYSQL_TYPE_TIME
-#define FIELD_TYPE_DATETIME MYSQL_TYPE_DATETIME
-#define FIELD_TYPE_YEAR MYSQL_TYPE_YEAR
-#define FIELD_TYPE_NEWDATE MYSQL_TYPE_NEWDATE
-#define FIELD_TYPE_ENUM MYSQL_TYPE_ENUM
-#define FIELD_TYPE_SET MYSQL_TYPE_SET
-#define FIELD_TYPE_TINY_BLOB MYSQL_TYPE_TINY_BLOB
+#define packet_error (~(unsigned long) 0)
+/* For backward compatibility */
+#define CLIENT_MULTI_QUERIES CLIENT_MULTI_STATEMENTS
+#define FIELD_TYPE_DECIMAL MYSQL_TYPE_DECIMAL
+#define FIELD_TYPE_NEWDECIMAL MYSQL_TYPE_NEWDECIMAL
+#define FIELD_TYPE_TINY MYSQL_TYPE_TINY
+#define FIELD_TYPE_SHORT MYSQL_TYPE_SHORT
+#define FIELD_TYPE_LONG MYSQL_TYPE_LONG
+#define FIELD_TYPE_FLOAT MYSQL_TYPE_FLOAT
+#define FIELD_TYPE_DOUBLE MYSQL_TYPE_DOUBLE
+#define FIELD_TYPE_NULL MYSQL_TYPE_NULL
+#define FIELD_TYPE_TIMESTAMP MYSQL_TYPE_TIMESTAMP
+#define FIELD_TYPE_LONGLONG MYSQL_TYPE_LONGLONG
+#define FIELD_TYPE_INT24 MYSQL_TYPE_INT24
+#define FIELD_TYPE_DATE MYSQL_TYPE_DATE
+#define FIELD_TYPE_TIME MYSQL_TYPE_TIME
+#define FIELD_TYPE_DATETIME MYSQL_TYPE_DATETIME
+#define FIELD_TYPE_YEAR MYSQL_TYPE_YEAR
+#define FIELD_TYPE_NEWDATE MYSQL_TYPE_NEWDATE
+#define FIELD_TYPE_ENUM MYSQL_TYPE_ENUM
+#define FIELD_TYPE_SET MYSQL_TYPE_SET
+#define FIELD_TYPE_TINY_BLOB MYSQL_TYPE_TINY_BLOB
#define FIELD_TYPE_MEDIUM_BLOB MYSQL_TYPE_MEDIUM_BLOB
-#define FIELD_TYPE_LONG_BLOB MYSQL_TYPE_LONG_BLOB
-#define FIELD_TYPE_BLOB MYSQL_TYPE_BLOB
-#define FIELD_TYPE_VAR_STRING MYSQL_TYPE_VAR_STRING
-#define FIELD_TYPE_STRING MYSQL_TYPE_STRING
-#define FIELD_TYPE_CHAR MYSQL_TYPE_TINY
-#define FIELD_TYPE_INTERVAL MYSQL_TYPE_ENUM
-#define FIELD_TYPE_GEOMETRY MYSQL_TYPE_GEOMETRY
-#define FIELD_TYPE_BIT MYSQL_TYPE_BIT
-/** @}*/
+#define FIELD_TYPE_LONG_BLOB MYSQL_TYPE_LONG_BLOB
+#define FIELD_TYPE_BLOB MYSQL_TYPE_BLOB
+#define FIELD_TYPE_VAR_STRING MYSQL_TYPE_VAR_STRING
+#define FIELD_TYPE_STRING MYSQL_TYPE_STRING
+#define FIELD_TYPE_CHAR MYSQL_TYPE_TINY
+#define FIELD_TYPE_INTERVAL MYSQL_TYPE_ENUM
+#define FIELD_TYPE_GEOMETRY MYSQL_TYPE_GEOMETRY
+#define FIELD_TYPE_BIT MYSQL_TYPE_BIT
-/**
- @addtogroup group_cs_shutdown_kill_constants Shutdown/kill enums and constants
- @ingroup group_cs
- @sa THD::is_killable
- @{
-*/
-#define MYSQL_SHUTDOWN_KILLABLE_CONNECT (unsigned char)(1 << 0)
-#define MYSQL_SHUTDOWN_KILLABLE_TRANS (unsigned char)(1 << 1)
+/* Shutdown/kill enums and constants */
+
+/* Bits for THD::killable. */
+#define MYSQL_SHUTDOWN_KILLABLE_CONNECT (unsigned char)(1 << 0)
+#define MYSQL_SHUTDOWN_KILLABLE_TRANS (unsigned char)(1 << 1)
#define MYSQL_SHUTDOWN_KILLABLE_LOCK_TABLE (unsigned char)(1 << 2)
-#define MYSQL_SHUTDOWN_KILLABLE_UPDATE (unsigned char)(1 << 3)
+#define MYSQL_SHUTDOWN_KILLABLE_UPDATE (unsigned char)(1 << 3)
-/**
- We want levels to be in growing order of hardness (because we use number
- comparisons).
-
- @note ::SHUTDOWN_DEFAULT does not respect the growing property, but it's ok.
-*/
enum mysql_enum_shutdown_level {
- SHUTDOWN_DEFAULT = 0,
- /** Wait for existing connections to finish */
- SHUTDOWN_WAIT_CONNECTIONS = MYSQL_SHUTDOWN_KILLABLE_CONNECT,
- /** Wait for existing transactons to finish */
- SHUTDOWN_WAIT_TRANSACTIONS = MYSQL_SHUTDOWN_KILLABLE_TRANS,
- /** Wait for existing updates to finish (=> no partial MyISAM update) */
- SHUTDOWN_WAIT_UPDATES = MYSQL_SHUTDOWN_KILLABLE_UPDATE,
- /** Flush InnoDB buffers and other storage engines' buffers*/
- SHUTDOWN_WAIT_ALL_BUFFERS = (MYSQL_SHUTDOWN_KILLABLE_UPDATE << 1),
- /** Don't flush InnoDB buffers, flush other storage engines' buffers*/
- SHUTDOWN_WAIT_CRITICAL_BUFFERS = (MYSQL_SHUTDOWN_KILLABLE_UPDATE << 1) + 1,
- /** Query level of the KILL command */
- KILL_QUERY = 254,
- /** Connection level of the KILL command */
- KILL_CONNECTION = 255
-};
-/** @}*/
-
-enum enum_resultset_metadata {
- /** No metadata will be sent. */
- RESULTSET_METADATA_NONE = 0,
- /** The server will send all metadata. */
- RESULTSET_METADATA_FULL = 1
-};
-
-#if defined(__clang__)
-// disable -Wdocumentation to workaround
-// https://bugs.llvm.org/show_bug.cgi?id=38905
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wdocumentation"
-#endif
-/**
- The flags used in COM_STMT_EXECUTE.
- @sa @ref Protocol_classic::parse_packet, @ref mysql_int_serialize_param_data
-*/
-#if defined(__clang__)
-#pragma clang diagnostic pop
-#endif
-enum enum_cursor_type {
- CURSOR_TYPE_NO_CURSOR = 0,
- CURSOR_TYPE_READ_ONLY = 1,
- CURSOR_TYPE_FOR_UPDATE = 2,
- CURSOR_TYPE_SCROLLABLE = 4,
- /**
- On when the client will send the parameter count
- even for 0 parameters.
+ /*
+ We want levels to be in growing order of hardness (because we use number
+ comparisons). Note that DEFAULT does not respect the growing property, but
+ it's ok.
*/
- PARAMETER_COUNT_AVAILABLE = 8
+ SHUTDOWN_DEFAULT = 0,
+ /* wait for existing connections to finish */
+ SHUTDOWN_WAIT_CONNECTIONS= MYSQL_SHUTDOWN_KILLABLE_CONNECT,
+ /* wait for existing trans to finish */
+ SHUTDOWN_WAIT_TRANSACTIONS= MYSQL_SHUTDOWN_KILLABLE_TRANS,
+ /* wait for existing updates to finish (=> no partial MyISAM update) */
+ SHUTDOWN_WAIT_UPDATES= MYSQL_SHUTDOWN_KILLABLE_UPDATE,
+ /* flush InnoDB buffers and other storage engines' buffers*/
+ SHUTDOWN_WAIT_ALL_BUFFERS= (MYSQL_SHUTDOWN_KILLABLE_UPDATE << 1),
+ /* don't flush InnoDB buffers, flush other storage engines' buffers*/
+ SHUTDOWN_WAIT_CRITICAL_BUFFERS= (MYSQL_SHUTDOWN_KILLABLE_UPDATE << 1) + 1,
+ /* Now the 2 levels of the KILL command */
+ KILL_QUERY= 254,
+ KILL_CONNECTION= 255
};
-/** options for ::mysql_options() */
-enum enum_mysql_set_option {
+
+enum enum_cursor_type
+{
+ CURSOR_TYPE_NO_CURSOR= 0,
+ CURSOR_TYPE_READ_ONLY= 1,
+ CURSOR_TYPE_FOR_UPDATE= 2,
+ CURSOR_TYPE_SCROLLABLE= 4
+};
+
+
+/* options for mysql_set_option */
+enum enum_mysql_set_option
+{
MYSQL_OPTION_MULTI_STATEMENTS_ON,
MYSQL_OPTION_MULTI_STATEMENTS_OFF
};
-/**
+/*
Type of state change information that the server can include in the Ok
packet.
-
- @note
- - session_state_type shouldn't go past 255 (i.e. 1-byte boundary).
- - Modify the definition of ::SESSION_TRACK_END when a new member is added.
+ Note : 1) session_state_type shouldn't go past 255 (i.e. 1-byte boundary).
+ 2) Modify the definition of SESSION_TRACK_END when a new member is
+ added.
*/
-enum enum_session_state_type {
- SESSION_TRACK_SYSTEM_VARIABLES, /**< Session system variables */
- SESSION_TRACK_SCHEMA, /**< Current schema */
- SESSION_TRACK_STATE_CHANGE, /**< track session state changes */
- SESSION_TRACK_GTIDS, /**< See also: session_track_gtids */
- SESSION_TRACK_TRANSACTION_CHARACTERISTICS, /**< Transaction chistics */
- SESSION_TRACK_TRANSACTION_STATE /**< Transaction state */
+enum enum_session_state_type
+{
+ SESSION_TRACK_SYSTEM_VARIABLES, /* Session system variables */
+ SESSION_TRACK_SCHEMA, /* Current schema */
+ SESSION_TRACK_STATE_CHANGE, /* track session state changes */
+ SESSION_TRACK_GTIDS,
+ SESSION_TRACK_TRANSACTION_CHARACTERISTICS, /* Transaction chistics */
+ SESSION_TRACK_TRANSACTION_STATE /* Transaction state */
};
-/** start of ::enum_session_state_type */
#define SESSION_TRACK_BEGIN SESSION_TRACK_SYSTEM_VARIABLES
-/** End of ::enum_session_state_type */
#define SESSION_TRACK_END SESSION_TRACK_TRANSACTION_STATE
-/** is T a valid session state type */
#define IS_SESSION_STATE_TYPE(T) \
(((int)(T) >= SESSION_TRACK_BEGIN) && ((T) <= SESSION_TRACK_END))
-#define net_new_transaction(net) ((net)->pkt_nr = 0)
+#define net_new_transaction(net) ((net)->pkt_nr=0)
-bool my_net_init(struct NET *net, MYSQL_VIO vio);
-void my_net_local_init(struct NET *net);
-void net_end(struct NET *net);
-void net_clear(struct NET *net, bool check_buffer);
-void net_claim_memory_ownership(struct NET *net, bool claim);
-bool net_realloc(struct NET *net, size_t length);
-bool net_flush(struct NET *net);
-bool my_net_write(struct NET *net, const unsigned char *packet, size_t len);
-bool net_write_command(struct NET *net, unsigned char command,
- const unsigned char *header, size_t head_len,
- const unsigned char *packet, size_t len);
-bool net_write_packet(struct NET *net, const unsigned char *packet,
- size_t length);
-unsigned long my_net_read(struct NET *net);
-void my_net_set_write_timeout(struct NET *net, unsigned int timeout);
-void my_net_set_read_timeout(struct NET *net, unsigned int timeout);
-void my_net_set_retry_count(struct NET *net, unsigned int retry_count);
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+my_bool my_net_init(NET *net, Vio* vio);
+void my_net_local_init(NET *net);
+void net_end(NET *net);
+void net_clear(NET *net, my_bool check_buffer);
+void net_claim_memory_ownership(NET *net);
+my_bool net_realloc(NET *net, size_t length);
+my_bool net_flush(NET *net);
+my_bool my_net_write(NET *net,const unsigned char *packet, size_t len);
+my_bool net_write_command(NET *net,unsigned char command,
+ const unsigned char *header, size_t head_len,
+ const unsigned char *packet, size_t len);
+my_bool net_write_packet(NET *net, const unsigned char *packet, size_t length);
+unsigned long my_net_read(NET *net);
+
+#ifdef MY_GLOBAL_INCLUDED
+void my_net_set_write_timeout(NET *net, uint timeout);
+void my_net_set_read_timeout(NET *net, uint timeout);
+#endif
struct rand_struct {
- unsigned long seed1, seed2, max_value;
+ unsigned long seed1,seed2,max_value;
double max_value_dbl;
};
-/* Include the types here so existing UDFs can keep compiling */
-#include "mysql/udf_registration_types.h"
+#ifdef __cplusplus
+}
+#endif
-/**
- @addtogroup group_cs_compresson_constants Constants when using compression
- @ingroup group_cs
- @{
+ /* The following is for user defined functions */
+
+enum Item_result {STRING_RESULT=0, REAL_RESULT, INT_RESULT, ROW_RESULT,
+ DECIMAL_RESULT};
+
+typedef struct st_udf_args
+{
+ unsigned int arg_count; /* Number of arguments */
+ enum Item_result *arg_type; /* Pointer to item_results */
+ char **args; /* Pointer to argument */
+ unsigned long *lengths; /* Length of string arguments */
+ char *maybe_null; /* Set to 1 for all maybe_null args */
+ char **attributes; /* Pointer to attribute name */
+ unsigned long *attribute_lengths; /* Length of attribute arguments */
+ void *extension;
+} UDF_ARGS;
+
+ /* This holds information about the result */
+
+typedef struct st_udf_init
+{
+ my_bool maybe_null; /* 1 if function can return NULL */
+ unsigned int decimals; /* for real functions */
+ unsigned long max_length; /* For string functions */
+ char *ptr; /* free pointer for function data */
+ my_bool const_item; /* 1 if function always returns the same value */
+ void *extension;
+} UDF_INIT;
+/*
+ TODO: add a notion for determinism of the UDF.
+ See Item_udf_func::update_used_tables ()
*/
-#define NET_HEADER_SIZE 4 /**< standard header size */
-#define COMP_HEADER_SIZE 3 /**< compression header extra size */
-/** @}*/
-/* Prototypes to password functions */
+ /* Constants when using compression */
+#define NET_HEADER_SIZE 4 /* standard header size */
+#define COMP_HEADER_SIZE 3 /* compression header extra size */
+
+ /* Prototypes to password functions */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
/*
These functions are used for authentication by client and server and
implemented in sql/password.c
*/
-void randominit(struct rand_struct *, unsigned long seed1, unsigned long seed2);
+void randominit(struct rand_struct *, unsigned long seed1,
+ unsigned long seed2);
double my_rnd(struct rand_struct *);
-void create_random_string(char *to, unsigned int length,
- struct rand_struct *rand_st);
+void create_random_string(char *to, unsigned int length, struct rand_struct *rand_st);
-void hash_password(unsigned long *to, const char *password,
- unsigned int password_len);
+void hash_password(unsigned long *to, const char *password, unsigned int password_len);
void make_scrambled_password_323(char *to, const char *password);
void scramble_323(char *to, const char *message, const char *password);
-bool check_scramble_323(const unsigned char *reply, const char *message,
- unsigned long *salt);
+my_bool check_scramble_323(const unsigned char *reply, const char *message,
+ unsigned long *salt);
void get_salt_from_password_323(unsigned long *res, const char *password);
void make_password_from_salt_323(char *to, const unsigned long *salt);
void make_scrambled_password(char *to, const char *password);
void scramble(char *to, const char *message, const char *password);
-bool check_scramble(const unsigned char *reply, const char *message,
- const unsigned char *hash_stage2);
+my_bool check_scramble(const unsigned char *reply, const char *message,
+ const unsigned char *hash_stage2);
void get_salt_from_password(unsigned char *res, const char *password);
void make_password_from_salt(char *to, const unsigned char *hash_stage2);
char *octet2hex(char *to, const char *str, unsigned int len);
/* end of password.c */
-bool generate_sha256_scramble(unsigned char *dst, size_t dst_size,
- const char *src, size_t src_size, const char *rnd,
- size_t rnd_size);
+my_bool generate_sha256_scramble(unsigned char *dst, size_t dst_size,
+ const char *src, size_t src_size, const char *rnd,
+ size_t rnd_size);
-// extern "C" since it is an (undocumented) part of the libmysql ABI.
-#ifdef __cplusplus
-extern "C" {
-#endif
char *get_tty_password(const char *opt_message);
-#ifdef __cplusplus
-}
-#endif
-
const char *mysql_errno_to_sqlstate(unsigned int mysql_errno);
/* Some other useful functions */
-// Need to be extern "C" for the time being, due to memcached.
-#ifdef __cplusplus
-extern "C" {
-#endif
-bool my_thread_init(void);
+my_bool my_thread_init(void);
void my_thread_end(void);
+
+#ifdef MY_GLOBAL_INCLUDED
+ulong STDCALL net_field_length(uchar **packet);
+ulong STDCALL net_field_length_checked(uchar **packet, ulong max_length);
+my_ulonglong net_field_length_ll(uchar **packet);
+uchar *net_store_length(uchar *pkg, ulonglong length);
+unsigned int net_length_size(ulonglong num);
+unsigned int net_field_length_size(const unsigned char *pos);
+#endif
+
#ifdef __cplusplus
}
#endif
-#ifdef STDCALL
-unsigned long STDCALL net_field_length(unsigned char **packet);
-unsigned long STDCALL net_field_length_checked(unsigned char **packet,
- unsigned long max_length);
-#endif
-uint64_t net_field_length_ll(unsigned char **packet);
-unsigned char *net_store_length(unsigned char *pkg, unsigned long long length);
-unsigned int net_length_size(unsigned long long num);
-unsigned int net_field_length_size(const unsigned char *pos);
+#define NULL_LENGTH ((unsigned long) ~0) /* For net_store_length */
+#define MYSQL_STMT_HEADER 4
+#define MYSQL_LONG_DATA_HEADER 6
-#define NULL_LENGTH ((unsigned long)~0) /**< For ::net_store_length() */
-#define MYSQL_STMT_HEADER 4
-#define MYSQL_LONG_DATA_HEADER 6
+#define NOT_FIXED_DEC 31
#endif
diff --git a/db/include/mysql_com_server.h b/db/include/mysql_com_server.h
new file mode 100644
index 0000000..3bb0544
--- /dev/null
+++ b/db/include/mysql_com_server.h
@@ -0,0 +1,48 @@
+/* Copyright (c) 2011, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 */
+
+/*
+ Definitions private to the server,
+ used in the networking layer to notify specific events.
+*/
+
+#ifndef _mysql_com_server_h
+#define _mysql_com_server_h
+
+struct st_net_server;
+
+typedef void (*before_header_callback_fn)
+ (struct st_net *net, void *user_data, size_t count);
+
+typedef void (*after_header_callback_fn)
+ (struct st_net *net, void *user_data, size_t count, my_bool rc);
+
+struct st_net_server
+{
+ before_header_callback_fn m_before_header;
+ after_header_callback_fn m_after_header;
+ void *m_user_data;
+};
+
+typedef struct st_net_server NET_SERVER;
+
+#endif
diff --git a/db/include/mysql_embed.h b/db/include/mysql_embed.h
new file mode 100644
index 0000000..d66056d
--- /dev/null
+++ b/db/include/mysql_embed.h
@@ -0,0 +1,36 @@
+#ifndef MYSQL_EMBED_INCLUDED
+#define MYSQL_EMBED_INCLUDED
+
+/* Copyright (c) 2000, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 */
+
+/* Defines that are unique to the embedded version of MySQL */
+
+#ifdef EMBEDDED_LIBRARY
+
+/* Things we don't need in the embedded version of MySQL */
+/* TODO HF add #undef HAVE_VIO if we don't want client in embedded library */
+
+#undef HAVE_DLOPEN /* No udf functions */
+
+#endif /* EMBEDDED_LIBRARY */
+#endif /* MYSQL_EMBED_INCLUDED */
diff --git a/db/include/mysql_time.h b/db/include/mysql_time.h
index 854a51a..dc96348 100644
--- a/db/include/mysql_time.h
+++ b/db/include/mysql_time.h
@@ -23,13 +23,12 @@
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 */
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */
#ifndef _mysql_time_h_
#define _mysql_time_h_
-/**
- @file include/mysql_time.h
+/*
Time declarations shared between the server and client API:
you should not add anything to this header unless it's used
(and hence should be visible) in mysql.h.
@@ -38,34 +37,13 @@
and Time Values" chapter in documentation.
*/
-// Do not not pull in the server header "my_inttypes.h" from client code.
-// IWYU pragma: no_include "my_inttypes.h"
-
-enum enum_mysql_timestamp_type {
- MYSQL_TIMESTAMP_NONE = -2,
- MYSQL_TIMESTAMP_ERROR = -1,
-
- /// Stores year, month and day components.
- MYSQL_TIMESTAMP_DATE = 0,
-
- /**
- Stores all date and time components.
- Value is in UTC for `TIMESTAMP` type.
- Value is in local time zone for `DATETIME` type.
- */
- MYSQL_TIMESTAMP_DATETIME = 1,
-
- /// Stores hour, minute, second and microsecond.
- MYSQL_TIMESTAMP_TIME = 2,
-
- /**
- A temporary type for `DATETIME` or `TIMESTAMP` types equipped with time
- zone information. After the time zone information is reconciled, the type is
- converted to MYSQL_TIMESTAMP_DATETIME.
- */
- MYSQL_TIMESTAMP_DATETIME_TZ = 3
+enum enum_mysql_timestamp_type
+{
+ MYSQL_TIMESTAMP_NONE= -2, MYSQL_TIMESTAMP_ERROR= -1,
+ MYSQL_TIMESTAMP_DATE= 0, MYSQL_TIMESTAMP_DATETIME= 1, MYSQL_TIMESTAMP_TIME= 2
};
+
/*
Structure which is used to represent datetime values inside MySQL.
@@ -78,13 +56,12 @@ enum enum_mysql_timestamp_type {
value (time_type == MYSQL_TIMESTAMP_TIME) days and hour member can hold
bigger values.
*/
-typedef struct MYSQL_TIME {
- unsigned int year, month, day, hour, minute, second;
- unsigned long second_part; /**< microseconds */
- bool neg;
+typedef struct st_mysql_time
+{
+ unsigned int year, month, day, hour, minute, second;
+ unsigned long second_part; /**< microseconds */
+ my_bool neg;
enum enum_mysql_timestamp_type time_type;
- /// The time zone displacement, specified in seconds.
- int time_zone_displacement;
} MYSQL_TIME;
#endif /* _mysql_time_h_ */
diff --git a/db/include/mysql_version.h b/db/include/mysql_version.h
index a75de36..3691fcb 100644
--- a/db/include/mysql_version.h
+++ b/db/include/mysql_version.h
@@ -9,20 +9,19 @@
#define _mysql_version_h
#define PROTOCOL_VERSION 10
-#define MYSQL_SERVER_VERSION "8.0.31"
-#define MYSQL_BASE_VERSION "mysqld-8.0"
+#define MYSQL_SERVER_VERSION "5.7.39"
+#define MYSQL_BASE_VERSION "mysqld-5.7"
#define MYSQL_SERVER_SUFFIX_DEF ""
-#define MYSQL_VERSION_ID 80031
+#define FRM_VER 6
+#define MYSQL_VERSION_ID 50739
#define MYSQL_PORT 3306
-#define MYSQL_ADMIN_PORT 33062
#define MYSQL_PORT_DEFAULT 0
#define MYSQL_UNIX_ADDR "/tmp/mysql.sock"
#define MYSQL_CONFIG_NAME "my"
-#define MYSQL_PERSIST_CONFIG_NAME "mysqld-auto"
-#define MYSQL_COMPILATION_COMMENT "MySQL Community - GPL"
-#define MYSQL_COMPILATION_COMMENT_SERVER "MySQL Community Server - GPL"
-#define LIBMYSQL_VERSION "8.0.31"
-#define LIBMYSQL_VERSION_ID 80031
+#define MYSQL_COMPILATION_COMMENT "MySQL Community Server (GPL)"
+#define LIBMYSQL_VERSION "5.7.39"
+#define LIBMYSQL_VERSION_ID 50739
+#define SYS_SCHEMA_VERSION "1.5.2"
#ifndef LICENSE
#define LICENSE GPL
diff --git a/db/include/mysqld_ername.h b/db/include/mysqld_ername.h
new file mode 100644
index 0000000..39a384a
--- /dev/null
+++ b/db/include/mysqld_ername.h
@@ -0,0 +1,1126 @@
+/* Autogenerated file, please don't edit */
+
+{ "ER_HASHCHK", 1000, "hashchk" },
+{ "ER_NISAMCHK", 1001, "isamchk" },
+{ "ER_NO", 1002, "NO" },
+{ "ER_YES", 1003, "YES" },
+{ "ER_CANT_CREATE_FILE", 1004, "Can\'t create file \'%-.200s\' (errno: %d - %s)" },
+{ "ER_CANT_CREATE_TABLE", 1005, "Can\'t create table \'%-.200s\' (errno: %d)" },
+{ "ER_CANT_CREATE_DB", 1006, "Can\'t create database \'%-.192s\' (errno: %d)" },
+{ "ER_DB_CREATE_EXISTS", 1007, "Can\'t create database \'%-.192s\'; database exists" },
+{ "ER_DB_DROP_EXISTS", 1008, "Can\'t drop database \'%-.192s\'; database doesn\'t exist" },
+{ "ER_DB_DROP_DELETE", 1009, "Error dropping database (can\'t delete \'%-.192s\', errno: %d)" },
+{ "ER_DB_DROP_RMDIR", 1010, "Error dropping database (can\'t rmdir \'%-.192s\', errno: %d)" },
+{ "ER_CANT_DELETE_FILE", 1011, "Error on delete of \'%-.192s\' (errno: %d - %s)" },
+{ "ER_CANT_FIND_SYSTEM_REC", 1012, "Can\'t read record in system table" },
+{ "ER_CANT_GET_STAT", 1013, "Can\'t get status of \'%-.200s\' (errno: %d - %s)" },
+{ "ER_CANT_GET_WD", 1014, "Can\'t get working directory (errno: %d - %s)" },
+{ "ER_CANT_LOCK", 1015, "Can\'t lock file (errno: %d - %s)" },
+{ "ER_CANT_OPEN_FILE", 1016, "Can\'t open file: \'%-.200s\' (errno: %d - %s)" },
+{ "ER_FILE_NOT_FOUND", 1017, "Can\'t find file: \'%-.200s\' (errno: %d - %s)" },
+{ "ER_CANT_READ_DIR", 1018, "Can\'t read dir of \'%-.192s\' (errno: %d - %s)" },
+{ "ER_CANT_SET_WD", 1019, "Can\'t change dir to \'%-.192s\' (errno: %d - %s)" },
+{ "ER_CHECKREAD", 1020, "Record has changed since last read in table \'%-.192s\'" },
+{ "ER_DISK_FULL", 1021, "Disk full (%s); waiting for someone to free some space... (errno: %d - %s)" },
+{ "ER_DUP_KEY", 1022, "Can\'t write; duplicate key in table \'%-.192s\'" },
+{ "ER_ERROR_ON_CLOSE", 1023, "Error on close of \'%-.192s\' (errno: %d - %s)" },
+{ "ER_ERROR_ON_READ", 1024, "Error reading file \'%-.200s\' (errno: %d - %s)" },
+{ "ER_ERROR_ON_RENAME", 1025, "Error on rename of \'%-.210s\' to \'%-.210s\' (errno: %d - %s)" },
+{ "ER_ERROR_ON_WRITE", 1026, "Error writing file \'%-.200s\' (errno: %d - %s)" },
+{ "ER_FILE_USED", 1027, "\'%-.192s\' is locked against change" },
+{ "ER_FILSORT_ABORT", 1028, "Sort aborted" },
+{ "ER_FORM_NOT_FOUND", 1029, "View \'%-.192s\' doesn\'t exist for \'%-.192s\'" },
+{ "ER_GET_ERRNO", 1030, "Got error %d from storage engine" },
+{ "ER_ILLEGAL_HA", 1031, "Table storage engine for \'%-.192s\' doesn\'t have this option" },
+{ "ER_KEY_NOT_FOUND", 1032, "Can\'t find record in \'%-.192s\'" },
+{ "ER_NOT_FORM_FILE", 1033, "Incorrect information in file: \'%-.200s\'" },
+{ "ER_NOT_KEYFILE", 1034, "Incorrect key file for table \'%-.200s\'; try to repair it" },
+{ "ER_OLD_KEYFILE", 1035, "Old key file for table \'%-.192s\'; repair it!" },
+{ "ER_OPEN_AS_READONLY", 1036, "Table \'%-.192s\' is read only" },
+{ "ER_OUTOFMEMORY", 1037, "Out of memory; restart server and try again (needed %d bytes)" },
+{ "ER_OUT_OF_SORTMEMORY", 1038, "Out of sort memory, consider increasing server sort buffer size" },
+{ "ER_UNEXPECTED_EOF", 1039, "Unexpected EOF found when reading file \'%-.192s\' (errno: %d - %s)" },
+{ "ER_CON_COUNT_ERROR", 1040, "Too many connections" },
+{ "ER_OUT_OF_RESOURCES", 1041, "Out of memory; check if mysqld or some other process uses all available memory; if not, you may have to use \'ulimit\' to allow mysqld to use more memory or you can add more swap space" },
+{ "ER_BAD_HOST_ERROR", 1042, "Can\'t get hostname for your address" },
+{ "ER_HANDSHAKE_ERROR", 1043, "Bad handshake" },
+{ "ER_DBACCESS_DENIED_ERROR", 1044, "Access denied for user \'%-.48s\'@\'%-.64s\' to database \'%-.192s\'" },
+{ "ER_ACCESS_DENIED_ERROR", 1045, "Access denied for user \'%-.48s\'@\'%-.64s\' (using password: %s)" },
+{ "ER_NO_DB_ERROR", 1046, "No database selected" },
+{ "ER_UNKNOWN_COM_ERROR", 1047, "Unknown command" },
+{ "ER_BAD_NULL_ERROR", 1048, "Column \'%-.192s\' cannot be null" },
+{ "ER_BAD_DB_ERROR", 1049, "Unknown database \'%-.192s\'" },
+{ "ER_TABLE_EXISTS_ERROR", 1050, "Table \'%-.192s\' already exists" },
+{ "ER_BAD_TABLE_ERROR", 1051, "Unknown table \'%-.100s\'" },
+{ "ER_NON_UNIQ_ERROR", 1052, "Column \'%-.192s\' in %-.192s is ambiguous" },
+{ "ER_SERVER_SHUTDOWN", 1053, "Server shutdown in progress" },
+{ "ER_BAD_FIELD_ERROR", 1054, "Unknown column \'%-.192s\' in \'%-.192s\'" },
+{ "ER_WRONG_FIELD_WITH_GROUP", 1055, "\'%-.192s\' isn\'t in GROUP BY" },
+{ "ER_WRONG_GROUP_FIELD", 1056, "Can\'t group on \'%-.192s\'" },
+{ "ER_WRONG_SUM_SELECT", 1057, "Statement has sum functions and columns in same statement" },
+{ "ER_WRONG_VALUE_COUNT", 1058, "Column count doesn\'t match value count" },
+{ "ER_TOO_LONG_IDENT", 1059, "Identifier name \'%-.100s\' is too long" },
+{ "ER_DUP_FIELDNAME", 1060, "Duplicate column name \'%-.192s\'" },
+{ "ER_DUP_KEYNAME", 1061, "Duplicate key name \'%-.192s\'" },
+{ "ER_DUP_ENTRY", 1062, "Duplicate entry \'%-.192s\' for key %d" },
+{ "ER_WRONG_FIELD_SPEC", 1063, "Incorrect column specifier for column \'%-.192s\'" },
+{ "ER_PARSE_ERROR", 1064, "%s near \'%-.80s\' at line %d" },
+{ "ER_EMPTY_QUERY", 1065, "Query was empty" },
+{ "ER_NONUNIQ_TABLE", 1066, "Not unique table/alias: \'%-.192s\'" },
+{ "ER_INVALID_DEFAULT", 1067, "Invalid default value for \'%-.192s\'" },
+{ "ER_MULTIPLE_PRI_KEY", 1068, "Multiple primary key defined" },
+{ "ER_TOO_MANY_KEYS", 1069, "Too many keys specified; max %d keys allowed" },
+{ "ER_TOO_MANY_KEY_PARTS", 1070, "Too many key parts specified; max %d parts allowed" },
+{ "ER_TOO_LONG_KEY", 1071, "Specified key was too long; max key length is %d bytes" },
+{ "ER_KEY_COLUMN_DOES_NOT_EXITS", 1072, "Key column \'%-.192s\' doesn\'t exist in table" },
+{ "ER_BLOB_USED_AS_KEY", 1073, "BLOB column \'%-.192s\' can\'t be used in key specification with the used table type" },
+{ "ER_TOO_BIG_FIELDLENGTH", 1074, "Column length too big for column \'%-.192s\' (max = %lu); use BLOB or TEXT instead" },
+{ "ER_WRONG_AUTO_KEY", 1075, "Incorrect table definition; there can be only one auto column and it must be defined as a key" },
+{ "ER_READY", 1076, "%s: ready for connections.\nVersion: \'%s\' socket: \'%s\' port: %d" },
+{ "ER_NORMAL_SHUTDOWN", 1077, "%s: Normal shutdown\n" },
+{ "ER_GOT_SIGNAL", 1078, "%s: Got signal %d. Aborting!\n" },
+{ "ER_SHUTDOWN_COMPLETE", 1079, "%s: Shutdown complete\n" },
+{ "ER_FORCING_CLOSE", 1080, "%s: Forcing close of thread %ld user: \'%-.48s\'\n" },
+{ "ER_IPSOCK_ERROR", 1081, "Can\'t create IP socket" },
+{ "ER_NO_SUCH_INDEX", 1082, "Table \'%-.192s\' has no index like the one used in CREATE INDEX; recreate the table" },
+{ "ER_WRONG_FIELD_TERMINATORS", 1083, "Field separator argument is not what is expected; check the manual" },
+{ "ER_BLOBS_AND_NO_TERMINATED", 1084, "You can\'t use fixed rowlength with BLOBs; please use \'fields terminated by\'" },
+{ "ER_TEXTFILE_NOT_READABLE", 1085, "The file \'%-.128s\' must be in the database directory or be readable by all" },
+{ "ER_FILE_EXISTS_ERROR", 1086, "File \'%-.200s\' already exists" },
+{ "ER_LOAD_INFO", 1087, "Records: %ld Deleted: %ld Skipped: %ld Warnings: %ld" },
+{ "ER_ALTER_INFO", 1088, "Records: %ld Duplicates: %ld" },
+{ "ER_WRONG_SUB_KEY", 1089, "Incorrect prefix key; the used key part isn\'t a string, the used length is longer than the key part, or the storage engine doesn\'t support unique prefix keys" },
+{ "ER_CANT_REMOVE_ALL_FIELDS", 1090, "You can\'t delete all columns with ALTER TABLE; use DROP TABLE instead" },
+{ "ER_CANT_DROP_FIELD_OR_KEY", 1091, "Can\'t DROP \'%-.192s\'; check that column/key exists" },
+{ "ER_INSERT_INFO", 1092, "Records: %ld Duplicates: %ld Warnings: %ld" },
+{ "ER_UPDATE_TABLE_USED", 1093, "You can\'t specify target table \'%-.192s\' for update in FROM clause" },
+{ "ER_NO_SUCH_THREAD", 1094, "Unknown thread id: %lu" },
+{ "ER_KILL_DENIED_ERROR", 1095, "You are not owner of thread %lu" },
+{ "ER_NO_TABLES_USED", 1096, "No tables used" },
+{ "ER_TOO_BIG_SET", 1097, "Too many strings for column %-.192s and SET" },
+{ "ER_NO_UNIQUE_LOGFILE", 1098, "Can\'t generate a unique log-filename %-.200s.(1-999)\n" },
+{ "ER_TABLE_NOT_LOCKED_FOR_WRITE", 1099, "Table \'%-.192s\' was locked with a READ lock and can\'t be updated" },
+{ "ER_TABLE_NOT_LOCKED", 1100, "Table \'%-.192s\' was not locked with LOCK TABLES" },
+{ "ER_BLOB_CANT_HAVE_DEFAULT", 1101, "BLOB, TEXT, GEOMETRY or JSON column \'%-.192s\' can\'t have a default value" },
+{ "ER_WRONG_DB_NAME", 1102, "Incorrect database name \'%-.100s\'" },
+{ "ER_WRONG_TABLE_NAME", 1103, "Incorrect table name \'%-.100s\'" },
+{ "ER_TOO_BIG_SELECT", 1104, "The SELECT would examine more than MAX_JOIN_SIZE rows; check your WHERE and use SET SQL_BIG_SELECTS=1 or SET MAX_JOIN_SIZE=# if the SELECT is okay" },
+{ "ER_UNKNOWN_ERROR", 1105, "Unknown error" },
+{ "ER_UNKNOWN_PROCEDURE", 1106, "Unknown procedure \'%-.192s\'" },
+{ "ER_WRONG_PARAMCOUNT_TO_PROCEDURE", 1107, "Incorrect parameter count to procedure \'%-.192s\'" },
+{ "ER_WRONG_PARAMETERS_TO_PROCEDURE", 1108, "Incorrect parameters to procedure \'%-.192s\'" },
+{ "ER_UNKNOWN_TABLE", 1109, "Unknown table \'%-.192s\' in %-.32s" },
+{ "ER_FIELD_SPECIFIED_TWICE", 1110, "Column \'%-.192s\' specified twice" },
+{ "ER_INVALID_GROUP_FUNC_USE", 1111, "Invalid use of group function" },
+{ "ER_UNSUPPORTED_EXTENSION", 1112, "Table \'%-.192s\' uses an extension that doesn\'t exist in this MySQL version" },
+{ "ER_TABLE_MUST_HAVE_COLUMNS", 1113, "A table must have at least 1 column" },
+{ "ER_RECORD_FILE_FULL", 1114, "The table \'%-.192s\' is full" },
+{ "ER_UNKNOWN_CHARACTER_SET", 1115, "Unknown character set: \'%-.64s\'" },
+{ "ER_TOO_MANY_TABLES", 1116, "Too many tables; MySQL can only use %d tables in a join" },
+{ "ER_TOO_MANY_FIELDS", 1117, "Too many columns" },
+{ "ER_TOO_BIG_ROWSIZE", 1118, "Row size too large. The maximum row size for the used table type, not counting BLOBs, is %ld. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs" },
+{ "ER_STACK_OVERRUN", 1119, "Thread stack overrun: Used: %ld of a %ld stack. Use \'mysqld --thread_stack=#\' to specify a bigger stack if needed" },
+{ "ER_WRONG_OUTER_JOIN", 1120, "Cross dependency found in OUTER JOIN; examine your ON conditions" },
+{ "ER_NULL_COLUMN_IN_INDEX", 1121, "Table handler doesn\'t support NULL in given index. Please change column \'%-.192s\' to be NOT NULL or use another handler" },
+{ "ER_CANT_FIND_UDF", 1122, "Can\'t load function \'%-.192s\'" },
+{ "ER_CANT_INITIALIZE_UDF", 1123, "Can\'t initialize function \'%-.192s\'; %-.80s" },
+{ "ER_UDF_NO_PATHS", 1124, "No paths allowed for shared library" },
+{ "ER_UDF_EXISTS", 1125, "Function \'%-.192s\' already exists" },
+{ "ER_CANT_OPEN_LIBRARY", 1126, "Can\'t open shared library \'%-.192s\' (errno: %d %-.128s)" },
+{ "ER_CANT_FIND_DL_ENTRY", 1127, "Can\'t find symbol \'%-.128s\' in library" },
+{ "ER_FUNCTION_NOT_DEFINED", 1128, "Function \'%-.192s\' is not defined" },
+{ "ER_HOST_IS_BLOCKED", 1129, "Host \'%-.64s\' is blocked because of many connection errors; unblock with \'mysqladmin flush-hosts\'" },
+{ "ER_HOST_NOT_PRIVILEGED", 1130, "Host \'%-.64s\' is not allowed to connect to this MySQL server" },
+{ "ER_PASSWORD_ANONYMOUS_USER", 1131, "You are using MySQL as an anonymous user and anonymous users are not allowed to change passwords" },
+{ "ER_PASSWORD_NOT_ALLOWED", 1132, "You must have privileges to update tables in the mysql database to be able to change passwords for others" },
+{ "ER_PASSWORD_NO_MATCH", 1133, "Can\'t find any matching row in the user table" },
+{ "ER_UPDATE_INFO", 1134, "Rows matched: %ld Changed: %ld Warnings: %ld" },
+{ "ER_CANT_CREATE_THREAD", 1135, "Can\'t create a new thread (errno %d); if you are not out of available memory, you can consult the manual for a possible OS-dependent bug" },
+{ "ER_WRONG_VALUE_COUNT_ON_ROW", 1136, "Column count doesn\'t match value count at row %ld" },
+{ "ER_CANT_REOPEN_TABLE", 1137, "Can\'t reopen table: \'%-.192s\'" },
+{ "ER_INVALID_USE_OF_NULL", 1138, "Invalid use of NULL value" },
+{ "ER_REGEXP_ERROR", 1139, "Got error \'%-.64s\' from regexp" },
+{ "ER_MIX_OF_GROUP_FUNC_AND_FIELDS", 1140, "Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause" },
+{ "ER_NONEXISTING_GRANT", 1141, "There is no such grant defined for user \'%-.48s\' on host \'%-.64s\'" },
+{ "ER_TABLEACCESS_DENIED_ERROR", 1142, "%-.128s command denied to user \'%-.48s\'@\'%-.64s\' for table \'%-.64s\'" },
+{ "ER_COLUMNACCESS_DENIED_ERROR", 1143, "%-.16s command denied to user \'%-.48s\'@\'%-.64s\' for column \'%-.192s\' in table \'%-.192s\'" },
+{ "ER_ILLEGAL_GRANT_FOR_TABLE", 1144, "Illegal GRANT/REVOKE command; please consult the manual to see which privileges can be used" },
+{ "ER_GRANT_WRONG_HOST_OR_USER", 1145, "The host or user argument to GRANT is too long" },
+{ "ER_NO_SUCH_TABLE", 1146, "Table \'%-.192s.%-.192s\' doesn\'t exist" },
+{ "ER_NONEXISTING_TABLE_GRANT", 1147, "There is no such grant defined for user \'%-.48s\' on host \'%-.64s\' on table \'%-.192s\'" },
+{ "ER_NOT_ALLOWED_COMMAND", 1148, "The used command is not allowed with this MySQL version" },
+{ "ER_SYNTAX_ERROR", 1149, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use" },
+{ "ER_UNUSED1", 1150, "Delayed insert thread couldn\'t get requested lock for table %-.192s" },
+{ "ER_UNUSED2", 1151, "Too many delayed threads in use" },
+{ "ER_ABORTING_CONNECTION", 1152, "Aborted connection %ld to db: \'%-.192s\' user: \'%-.48s\' (%-.64s)" },
+{ "ER_NET_PACKET_TOO_LARGE", 1153, "Got a packet bigger than \'max_allowed_packet\' bytes" },
+{ "ER_NET_READ_ERROR_FROM_PIPE", 1154, "Got a read error from the connection pipe" },
+{ "ER_NET_FCNTL_ERROR", 1155, "Got an error from fcntl()" },
+{ "ER_NET_PACKETS_OUT_OF_ORDER", 1156, "Got packets out of order" },
+{ "ER_NET_UNCOMPRESS_ERROR", 1157, "Couldn\'t uncompress communication packet" },
+{ "ER_NET_READ_ERROR", 1158, "Got an error reading communication packets" },
+{ "ER_NET_READ_INTERRUPTED", 1159, "Got timeout reading communication packets" },
+{ "ER_NET_ERROR_ON_WRITE", 1160, "Got an error writing communication packets" },
+{ "ER_NET_WRITE_INTERRUPTED", 1161, "Got timeout writing communication packets" },
+{ "ER_TOO_LONG_STRING", 1162, "Result string is longer than \'max_allowed_packet\' bytes" },
+{ "ER_TABLE_CANT_HANDLE_BLOB", 1163, "The used table type doesn\'t support BLOB/TEXT columns" },
+{ "ER_TABLE_CANT_HANDLE_AUTO_INCREMENT", 1164, "The used table type doesn\'t support AUTO_INCREMENT columns" },
+{ "ER_UNUSED3", 1165, "INSERT DELAYED can\'t be used with table \'%-.192s\' because it is locked with LOCK TABLES" },
+{ "ER_WRONG_COLUMN_NAME", 1166, "Incorrect column name \'%-.100s\'" },
+{ "ER_WRONG_KEY_COLUMN", 1167, "The used storage engine can\'t index column \'%-.192s\'" },
+{ "ER_WRONG_MRG_TABLE", 1168, "Unable to open underlying table which is differently defined or of non-MyISAM type or doesn\'t exist" },
+{ "ER_DUP_UNIQUE", 1169, "Can\'t write, because of unique constraint, to table \'%-.192s\'" },
+{ "ER_BLOB_KEY_WITHOUT_LENGTH", 1170, "BLOB/TEXT column \'%-.192s\' used in key specification without a key length" },
+{ "ER_PRIMARY_CANT_HAVE_NULL", 1171, "All parts of a PRIMARY KEY must be NOT NULL; if you need NULL in a key, use UNIQUE instead" },
+{ "ER_TOO_MANY_ROWS", 1172, "Result consisted of more than one row" },
+{ "ER_REQUIRES_PRIMARY_KEY", 1173, "This table type requires a primary key" },
+{ "ER_NO_RAID_COMPILED", 1174, "This version of MySQL is not compiled with RAID support" },
+{ "ER_UPDATE_WITHOUT_KEY_IN_SAFE_MODE", 1175, "You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column. %s" },
+{ "ER_KEY_DOES_NOT_EXITS", 1176, "Key \'%-.192s\' doesn\'t exist in table \'%-.192s\'" },
+{ "ER_CHECK_NO_SUCH_TABLE", 1177, "Can\'t open table" },
+{ "ER_CHECK_NOT_IMPLEMENTED", 1178, "The storage engine for the table doesn\'t support %s" },
+{ "ER_CANT_DO_THIS_DURING_AN_TRANSACTION", 1179, "You are not allowed to execute this command in a transaction" },
+{ "ER_ERROR_DURING_COMMIT", 1180, "Got error %d during COMMIT" },
+{ "ER_ERROR_DURING_ROLLBACK", 1181, "Got error %d during ROLLBACK" },
+{ "ER_ERROR_DURING_FLUSH_LOGS", 1182, "Got error %d during FLUSH_LOGS" },
+{ "ER_ERROR_DURING_CHECKPOINT", 1183, "Got error %d during CHECKPOINT" },
+{ "ER_NEW_ABORTING_CONNECTION", 1184, "Aborted connection %u to db: \'%-.192s\' user: \'%-.48s\' host: \'%-.64s\' (%-.64s)" },
+{ "ER_DUMP_NOT_IMPLEMENTED", 1185, "The storage engine for the table does not support binary table dump" },
+{ "ER_FLUSH_MASTER_BINLOG_CLOSED", 1186, "Binlog closed, cannot RESET MASTER" },
+{ "ER_INDEX_REBUILD", 1187, "Failed rebuilding the index of dumped table \'%-.192s\'" },
+{ "ER_MASTER", 1188, "Error from master: \'%-.64s\'" },
+{ "ER_MASTER_NET_READ", 1189, "Net error reading from master" },
+{ "ER_MASTER_NET_WRITE", 1190, "Net error writing to master" },
+{ "ER_FT_MATCHING_KEY_NOT_FOUND", 1191, "Can\'t find FULLTEXT index matching the column list" },
+{ "ER_LOCK_OR_ACTIVE_TRANSACTION", 1192, "Can\'t execute the given command because you have active locked tables or an active transaction" },
+{ "ER_UNKNOWN_SYSTEM_VARIABLE", 1193, "Unknown system variable \'%-.64s\'" },
+{ "ER_CRASHED_ON_USAGE", 1194, "Table \'%-.192s\' is marked as crashed and should be repaired" },
+{ "ER_CRASHED_ON_REPAIR", 1195, "Table \'%-.192s\' is marked as crashed and last (automatic?) repair failed" },
+{ "ER_WARNING_NOT_COMPLETE_ROLLBACK", 1196, "Some non-transactional changed tables couldn\'t be rolled back" },
+{ "ER_TRANS_CACHE_FULL", 1197, "Multi-statement transaction required more than \'max_binlog_cache_size\' bytes of storage; increase this mysqld variable and try again" },
+{ "ER_SLAVE_MUST_STOP", 1198, "This operation cannot be performed with a running slave; run STOP SLAVE first" },
+{ "ER_SLAVE_NOT_RUNNING", 1199, "This operation requires a running slave; configure slave and do START SLAVE" },
+{ "ER_BAD_SLAVE", 1200, "The server is not configured as slave; fix in config file or with CHANGE MASTER TO" },
+{ "ER_MASTER_INFO", 1201, "Could not initialize master info structure; more error messages can be found in the MySQL error log" },
+{ "ER_SLAVE_THREAD", 1202, "Could not create slave thread; check system resources" },
+{ "ER_TOO_MANY_USER_CONNECTIONS", 1203, "User %-.64s already has more than \'max_user_connections\' active connections" },
+{ "ER_SET_CONSTANTS_ONLY", 1204, "You may only use constant expressions with SET" },
+{ "ER_LOCK_WAIT_TIMEOUT", 1205, "Lock wait timeout exceeded; try restarting transaction" },
+{ "ER_LOCK_TABLE_FULL", 1206, "The total number of locks exceeds the lock table size" },
+{ "ER_READ_ONLY_TRANSACTION", 1207, "Update locks cannot be acquired during a READ UNCOMMITTED transaction" },
+{ "ER_DROP_DB_WITH_READ_LOCK", 1208, "DROP DATABASE not allowed while thread is holding global read lock" },
+{ "ER_CREATE_DB_WITH_READ_LOCK", 1209, "CREATE DATABASE not allowed while thread is holding global read lock" },
+{ "ER_WRONG_ARGUMENTS", 1210, "Incorrect arguments to %s" },
+{ "ER_NO_PERMISSION_TO_CREATE_USER", 1211, "\'%-.48s\'@\'%-.64s\' is not allowed to create new users" },
+{ "ER_UNION_TABLES_IN_DIFFERENT_DIR", 1212, "Incorrect table definition; all MERGE tables must be in the same database" },
+{ "ER_LOCK_DEADLOCK", 1213, "Deadlock found when trying to get lock; try restarting transaction" },
+{ "ER_TABLE_CANT_HANDLE_FT", 1214, "The used table type doesn\'t support FULLTEXT indexes" },
+{ "ER_CANNOT_ADD_FOREIGN", 1215, "Cannot add foreign key constraint" },
+{ "ER_NO_REFERENCED_ROW", 1216, "Cannot add or update a child row: a foreign key constraint fails" },
+{ "ER_ROW_IS_REFERENCED", 1217, "Cannot delete or update a parent row: a foreign key constraint fails" },
+{ "ER_CONNECT_TO_MASTER", 1218, "Error connecting to master: %-.128s" },
+{ "ER_QUERY_ON_MASTER", 1219, "Error running query on master: %-.128s" },
+{ "ER_ERROR_WHEN_EXECUTING_COMMAND", 1220, "Error when executing command %s: %-.128s" },
+{ "ER_WRONG_USAGE", 1221, "Incorrect usage of %s and %s" },
+{ "ER_WRONG_NUMBER_OF_COLUMNS_IN_SELECT", 1222, "The used SELECT statements have a different number of columns" },
+{ "ER_CANT_UPDATE_WITH_READLOCK", 1223, "Can\'t execute the query because you have a conflicting read lock" },
+{ "ER_MIXING_NOT_ALLOWED", 1224, "Mixing of transactional and non-transactional tables is disabled" },
+{ "ER_DUP_ARGUMENT", 1225, "Option \'%s\' used twice in statement" },
+{ "ER_USER_LIMIT_REACHED", 1226, "User \'%-.64s\' has exceeded the \'%s\' resource (current value: %ld)" },
+{ "ER_SPECIFIC_ACCESS_DENIED_ERROR", 1227, "Access denied; you need (at least one of) the %-.128s privilege(s) for this operation" },
+{ "ER_LOCAL_VARIABLE", 1228, "Variable \'%-.64s\' is a SESSION variable and can\'t be used with SET GLOBAL" },
+{ "ER_GLOBAL_VARIABLE", 1229, "Variable \'%-.64s\' is a GLOBAL variable and should be set with SET GLOBAL" },
+{ "ER_NO_DEFAULT", 1230, "Variable \'%-.64s\' doesn\'t have a default value" },
+{ "ER_WRONG_VALUE_FOR_VAR", 1231, "Variable \'%-.64s\' can\'t be set to the value of \'%-.200s\'" },
+{ "ER_WRONG_TYPE_FOR_VAR", 1232, "Incorrect argument type to variable \'%-.64s\'" },
+{ "ER_VAR_CANT_BE_READ", 1233, "Variable \'%-.64s\' can only be set, not read" },
+{ "ER_CANT_USE_OPTION_HERE", 1234, "Incorrect usage/placement of \'%s\'" },
+{ "ER_NOT_SUPPORTED_YET", 1235, "This version of MySQL doesn\'t yet support \'%s\'" },
+{ "ER_MASTER_FATAL_ERROR_READING_BINLOG", 1236, "Got fatal error %d from master when reading data from binary log: \'%-.512s\'" },
+{ "ER_SLAVE_IGNORED_TABLE", 1237, "Slave SQL thread ignored the query because of replicate-*-table rules" },
+{ "ER_INCORRECT_GLOBAL_LOCAL_VAR", 1238, "Variable \'%-.192s\' is a %s variable" },
+{ "ER_WRONG_FK_DEF", 1239, "Incorrect foreign key definition for \'%-.192s\': %s" },
+{ "ER_KEY_REF_DO_NOT_MATCH_TABLE_REF", 1240, "Key reference and table reference don\'t match" },
+{ "ER_OPERAND_COLUMNS", 1241, "Operand should contain %d column(s)" },
+{ "ER_SUBQUERY_NO_1_ROW", 1242, "Subquery returns more than 1 row" },
+{ "ER_UNKNOWN_STMT_HANDLER", 1243, "Unknown prepared statement handler (%.*s) given to %s" },
+{ "ER_CORRUPT_HELP_DB", 1244, "Help database is corrupt or does not exist" },
+{ "ER_CYCLIC_REFERENCE", 1245, "Cyclic reference on subqueries" },
+{ "ER_AUTO_CONVERT", 1246, "Converting column \'%s\' from %s to %s" },
+{ "ER_ILLEGAL_REFERENCE", 1247, "Reference \'%-.64s\' not supported (%s)" },
+{ "ER_DERIVED_MUST_HAVE_ALIAS", 1248, "Every derived table must have its own alias" },
+{ "ER_SELECT_REDUCED", 1249, "Select %u was reduced during optimization" },
+{ "ER_TABLENAME_NOT_ALLOWED_HERE", 1250, "Table \'%-.192s\' from one of the SELECTs cannot be used in %-.32s" },
+{ "ER_NOT_SUPPORTED_AUTH_MODE", 1251, "Client does not support authentication protocol requested by server; consider upgrading MySQL client" },
+{ "ER_SPATIAL_CANT_HAVE_NULL", 1252, "All parts of a SPATIAL index must be NOT NULL" },
+{ "ER_COLLATION_CHARSET_MISMATCH", 1253, "COLLATION \'%s\' is not valid for CHARACTER SET \'%s\'" },
+{ "ER_SLAVE_WAS_RUNNING", 1254, "Slave is already running" },
+{ "ER_SLAVE_WAS_NOT_RUNNING", 1255, "Slave already has been stopped" },
+{ "ER_TOO_BIG_FOR_UNCOMPRESS", 1256, "Uncompressed data size too large; the maximum size is %d (probably, length of uncompressed data was corrupted)" },
+{ "ER_ZLIB_Z_MEM_ERROR", 1257, "ZLIB: Not enough memory" },
+{ "ER_ZLIB_Z_BUF_ERROR", 1258, "ZLIB: Not enough room in the output buffer (probably, length of uncompressed data was corrupted)" },
+{ "ER_ZLIB_Z_DATA_ERROR", 1259, "ZLIB: Input data corrupted" },
+{ "ER_CUT_VALUE_GROUP_CONCAT", 1260, "Row %u was cut by GROUP_CONCAT()" },
+{ "ER_WARN_TOO_FEW_RECORDS", 1261, "Row %ld doesn\'t contain data for all columns" },
+{ "ER_WARN_TOO_MANY_RECORDS", 1262, "Row %ld was truncated; it contained more data than there were input columns" },
+{ "ER_WARN_NULL_TO_NOTNULL", 1263, "Column set to default value; NULL supplied to NOT NULL column \'%s\' at row %ld" },
+{ "ER_WARN_DATA_OUT_OF_RANGE", 1264, "Out of range value for column \'%s\' at row %ld" },
+{ "WARN_DATA_TRUNCATED", 1265, "Data truncated for column \'%s\' at row %ld" },
+{ "ER_WARN_USING_OTHER_HANDLER", 1266, "Using storage engine %s for table \'%s\'" },
+{ "ER_CANT_AGGREGATE_2COLLATIONS", 1267, "Illegal mix of collations (%s,%s) and (%s,%s) for operation \'%s\'" },
+{ "ER_DROP_USER", 1268, "Cannot drop one or more of the requested users" },
+{ "ER_REVOKE_GRANTS", 1269, "Can\'t revoke all privileges for one or more of the requested users" },
+{ "ER_CANT_AGGREGATE_3COLLATIONS", 1270, "Illegal mix of collations (%s,%s), (%s,%s), (%s,%s) for operation \'%s\'" },
+{ "ER_CANT_AGGREGATE_NCOLLATIONS", 1271, "Illegal mix of collations for operation \'%s\'" },
+{ "ER_VARIABLE_IS_NOT_STRUCT", 1272, "Variable \'%-.64s\' is not a variable component (can\'t be used as XXXX.variable_name)" },
+{ "ER_UNKNOWN_COLLATION", 1273, "Unknown collation: \'%-.64s\'" },
+{ "ER_SLAVE_IGNORED_SSL_PARAMS", 1274, "SSL parameters in CHANGE MASTER are ignored because this MySQL slave was compiled without SSL support; they can be used later if MySQL slave with SSL is started" },
+{ "ER_SERVER_IS_IN_SECURE_AUTH_MODE", 1275, "Server is running in --secure-auth mode, but \'%s\'@\'%s\' has a password in the old format; please change the password to the new format" },
+{ "ER_WARN_FIELD_RESOLVED", 1276, "Field or reference \'%-.192s%s%-.192s%s%-.192s\' of SELECT #%d was resolved in SELECT #%d" },
+{ "ER_BAD_SLAVE_UNTIL_COND", 1277, "Incorrect parameter or combination of parameters for START SLAVE UNTIL" },
+{ "ER_MISSING_SKIP_SLAVE", 1278, "It is recommended to use --skip-slave-start when doing step-by-step replication with START SLAVE UNTIL; otherwise, you will get problems if you get an unexpected slave\'s mysqld restart" },
+{ "ER_UNTIL_COND_IGNORED", 1279, "SQL thread is not to be started so UNTIL options are ignored" },
+{ "ER_WRONG_NAME_FOR_INDEX", 1280, "Incorrect index name \'%-.100s\'" },
+{ "ER_WRONG_NAME_FOR_CATALOG", 1281, "Incorrect catalog name \'%-.100s\'" },
+{ "ER_WARN_QC_RESIZE", 1282, "Query cache failed to set size %lu; new query cache size is %lu" },
+{ "ER_BAD_FT_COLUMN", 1283, "Column \'%-.192s\' cannot be part of FULLTEXT index" },
+{ "ER_UNKNOWN_KEY_CACHE", 1284, "Unknown key cache \'%-.100s\'" },
+{ "ER_WARN_HOSTNAME_WONT_WORK", 1285, "MySQL is started in --skip-name-resolve mode; you must restart it without this switch for this grant to work" },
+{ "ER_UNKNOWN_STORAGE_ENGINE", 1286, "Unknown storage engine \'%s\'" },
+{ "ER_WARN_DEPRECATED_SYNTAX", 1287, "\'%s\' is deprecated and will be removed in a future release. Please use %s instead" },
+{ "ER_NON_UPDATABLE_TABLE", 1288, "The target table %-.100s of the %s is not updatable" },
+{ "ER_FEATURE_DISABLED", 1289, "The \'%s\' feature is disabled; you need MySQL built with \'%s\' to have it working" },
+{ "ER_OPTION_PREVENTS_STATEMENT", 1290, "The MySQL server is running with the %s option so it cannot execute this statement" },
+{ "ER_DUPLICATED_VALUE_IN_TYPE", 1291, "Column \'%-.100s\' has duplicated value \'%-.64s\' in %s" },
+{ "ER_TRUNCATED_WRONG_VALUE", 1292, "Truncated incorrect %-.32s value: \'%-.128s\'" },
+{ "ER_TOO_MUCH_AUTO_TIMESTAMP_COLS", 1293, "Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause" },
+{ "ER_INVALID_ON_UPDATE", 1294, "Invalid ON UPDATE clause for \'%-.192s\' column" },
+{ "ER_UNSUPPORTED_PS", 1295, "This command is not supported in the prepared statement protocol yet" },
+{ "ER_GET_ERRMSG", 1296, "Got error %d \'%-.100s\' from %s" },
+{ "ER_GET_TEMPORARY_ERRMSG", 1297, "Got temporary error %d \'%-.100s\' from %s" },
+{ "ER_UNKNOWN_TIME_ZONE", 1298, "Unknown or incorrect time zone: \'%-.64s\'" },
+{ "ER_WARN_INVALID_TIMESTAMP", 1299, "Invalid TIMESTAMP value in column \'%s\' at row %ld" },
+{ "ER_INVALID_CHARACTER_STRING", 1300, "Invalid %s character string: \'%.64s\'" },
+{ "ER_WARN_ALLOWED_PACKET_OVERFLOWED", 1301, "Result of %s() was larger than max_allowed_packet (%ld) - truncated" },
+{ "ER_CONFLICTING_DECLARATIONS", 1302, "Conflicting declarations: \'%s%s\' and \'%s%s\'" },
+{ "ER_SP_NO_RECURSIVE_CREATE", 1303, "Can\'t create a %s from within another stored routine" },
+{ "ER_SP_ALREADY_EXISTS", 1304, "%s %s already exists" },
+{ "ER_SP_DOES_NOT_EXIST", 1305, "%s %s does not exist" },
+{ "ER_SP_DROP_FAILED", 1306, "Failed to DROP %s %s" },
+{ "ER_SP_STORE_FAILED", 1307, "Failed to CREATE %s %s" },
+{ "ER_SP_LILABEL_MISMATCH", 1308, "%s with no matching label: %s" },
+{ "ER_SP_LABEL_REDEFINE", 1309, "Redefining label %s" },
+{ "ER_SP_LABEL_MISMATCH", 1310, "End-label %s without match" },
+{ "ER_SP_UNINIT_VAR", 1311, "Referring to uninitialized variable %s" },
+{ "ER_SP_BADSELECT", 1312, "PROCEDURE %s can\'t return a result set in the given context" },
+{ "ER_SP_BADRETURN", 1313, "RETURN is only allowed in a FUNCTION" },
+{ "ER_SP_BADSTATEMENT", 1314, "%s is not allowed in stored procedures" },
+{ "ER_UPDATE_LOG_DEPRECATED_IGNORED", 1315, "The update log is deprecated and replaced by the binary log; SET SQL_LOG_UPDATE has been ignored." },
+{ "ER_UPDATE_LOG_DEPRECATED_TRANSLATED", 1316, "The update log is deprecated and replaced by the binary log; SET SQL_LOG_UPDATE has been translated to SET SQL_LOG_BIN." },
+{ "ER_QUERY_INTERRUPTED", 1317, "Query execution was interrupted" },
+{ "ER_SP_WRONG_NO_OF_ARGS", 1318, "Incorrect number of arguments for %s %s; expected %u, got %u" },
+{ "ER_SP_COND_MISMATCH", 1319, "Undefined CONDITION: %s" },
+{ "ER_SP_NORETURN", 1320, "No RETURN found in FUNCTION %s" },
+{ "ER_SP_NORETURNEND", 1321, "FUNCTION %s ended without RETURN" },
+{ "ER_SP_BAD_CURSOR_QUERY", 1322, "Cursor statement must be a SELECT" },
+{ "ER_SP_BAD_CURSOR_SELECT", 1323, "Cursor SELECT must not have INTO" },
+{ "ER_SP_CURSOR_MISMATCH", 1324, "Undefined CURSOR: %s" },
+{ "ER_SP_CURSOR_ALREADY_OPEN", 1325, "Cursor is already open" },
+{ "ER_SP_CURSOR_NOT_OPEN", 1326, "Cursor is not open" },
+{ "ER_SP_UNDECLARED_VAR", 1327, "Undeclared variable: %s" },
+{ "ER_SP_WRONG_NO_OF_FETCH_ARGS", 1328, "Incorrect number of FETCH variables" },
+{ "ER_SP_FETCH_NO_DATA", 1329, "No data - zero rows fetched, selected, or processed" },
+{ "ER_SP_DUP_PARAM", 1330, "Duplicate parameter: %s" },
+{ "ER_SP_DUP_VAR", 1331, "Duplicate variable: %s" },
+{ "ER_SP_DUP_COND", 1332, "Duplicate condition: %s" },
+{ "ER_SP_DUP_CURS", 1333, "Duplicate cursor: %s" },
+{ "ER_SP_CANT_ALTER", 1334, "Failed to ALTER %s %s" },
+{ "ER_SP_SUBSELECT_NYI", 1335, "Subquery value not supported" },
+{ "ER_STMT_NOT_ALLOWED_IN_SF_OR_TRG", 1336, "%s is not allowed in stored function or trigger" },
+{ "ER_SP_VARCOND_AFTER_CURSHNDLR", 1337, "Variable or condition declaration after cursor or handler declaration" },
+{ "ER_SP_CURSOR_AFTER_HANDLER", 1338, "Cursor declaration after handler declaration" },
+{ "ER_SP_CASE_NOT_FOUND", 1339, "Case not found for CASE statement" },
+{ "ER_FPARSER_TOO_BIG_FILE", 1340, "Configuration file \'%-.192s\' is too big" },
+{ "ER_FPARSER_BAD_HEADER", 1341, "Malformed file type header in file \'%-.192s\'" },
+{ "ER_FPARSER_EOF_IN_COMMENT", 1342, "Unexpected end of file while parsing comment \'%-.200s\'" },
+{ "ER_FPARSER_ERROR_IN_PARAMETER", 1343, "Error while parsing parameter \'%-.192s\' (line: \'%-.192s\')" },
+{ "ER_FPARSER_EOF_IN_UNKNOWN_PARAMETER", 1344, "Unexpected end of file while skipping unknown parameter \'%-.192s\'" },
+{ "ER_VIEW_NO_EXPLAIN", 1345, "EXPLAIN/SHOW can not be issued; lacking privileges for underlying table" },
+{ "ER_FRM_UNKNOWN_TYPE", 1346, "File \'%-.192s\' has unknown type \'%-.64s\' in its header" },
+{ "ER_WRONG_OBJECT", 1347, "\'%-.192s.%-.192s\' is not %s" },
+{ "ER_NONUPDATEABLE_COLUMN", 1348, "Column \'%-.192s\' is not updatable" },
+{ "ER_VIEW_SELECT_DERIVED_UNUSED", 1349, "View\'s SELECT contains a subquery in the FROM clause" },
+{ "ER_VIEW_SELECT_CLAUSE", 1350, "View\'s SELECT contains a \'%s\' clause" },
+{ "ER_VIEW_SELECT_VARIABLE", 1351, "View\'s SELECT contains a variable or parameter" },
+{ "ER_VIEW_SELECT_TMPTABLE", 1352, "View\'s SELECT refers to a temporary table \'%-.192s\'" },
+{ "ER_VIEW_WRONG_LIST", 1353, "View\'s SELECT and view\'s field list have different column counts" },
+{ "ER_WARN_VIEW_MERGE", 1354, "View merge algorithm can\'t be used here for now (assumed undefined algorithm)" },
+{ "ER_WARN_VIEW_WITHOUT_KEY", 1355, "View being updated does not have complete key of underlying table in it" },
+{ "ER_VIEW_INVALID", 1356, "View \'%-.192s.%-.192s\' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them" },
+{ "ER_SP_NO_DROP_SP", 1357, "Can\'t drop or alter a %s from within another stored routine" },
+{ "ER_SP_GOTO_IN_HNDLR", 1358, "GOTO is not allowed in a stored procedure handler" },
+{ "ER_TRG_ALREADY_EXISTS", 1359, "Trigger already exists" },
+{ "ER_TRG_DOES_NOT_EXIST", 1360, "Trigger does not exist" },
+{ "ER_TRG_ON_VIEW_OR_TEMP_TABLE", 1361, "Trigger\'s \'%-.192s\' is view or temporary table" },
+{ "ER_TRG_CANT_CHANGE_ROW", 1362, "Updating of %s row is not allowed in %strigger" },
+{ "ER_TRG_NO_SUCH_ROW_IN_TRG", 1363, "There is no %s row in %s trigger" },
+{ "ER_NO_DEFAULT_FOR_FIELD", 1364, "Field \'%-.192s\' doesn\'t have a default value" },
+{ "ER_DIVISION_BY_ZERO", 1365, "Division by 0" },
+{ "ER_TRUNCATED_WRONG_VALUE_FOR_FIELD", 1366, "Incorrect %-.32s value: \'%-.128s\' for column \'%.192s\' at row %ld" },
+{ "ER_ILLEGAL_VALUE_FOR_TYPE", 1367, "Illegal %s \'%-.192s\' value found during parsing" },
+{ "ER_VIEW_NONUPD_CHECK", 1368, "CHECK OPTION on non-updatable view \'%-.192s.%-.192s\'" },
+{ "ER_VIEW_CHECK_FAILED", 1369, "CHECK OPTION failed \'%-.192s.%-.192s\'" },
+{ "ER_PROCACCESS_DENIED_ERROR", 1370, "%-.16s command denied to user \'%-.48s\'@\'%-.64s\' for routine \'%-.192s\'" },
+{ "ER_RELAY_LOG_FAIL", 1371, "Failed purging old relay logs: %s" },
+{ "ER_PASSWD_LENGTH", 1372, "Password hash should be a %d-digit hexadecimal number" },
+{ "ER_UNKNOWN_TARGET_BINLOG", 1373, "Target log not found in binlog index" },
+{ "ER_IO_ERR_LOG_INDEX_READ", 1374, "I/O error reading log index file" },
+{ "ER_BINLOG_PURGE_PROHIBITED", 1375, "Server configuration does not permit binlog purge" },
+{ "ER_FSEEK_FAIL", 1376, "Failed on fseek()" },
+{ "ER_BINLOG_PURGE_FATAL_ERR", 1377, "Fatal error during log purge" },
+{ "ER_LOG_IN_USE", 1378, "A purgeable log is in use, will not purge" },
+{ "ER_LOG_PURGE_UNKNOWN_ERR", 1379, "Unknown error during log purge" },
+{ "ER_RELAY_LOG_INIT", 1380, "Failed initializing relay log position: %s" },
+{ "ER_NO_BINARY_LOGGING", 1381, "You are not using binary logging" },
+{ "ER_RESERVED_SYNTAX", 1382, "The \'%-.64s\' syntax is reserved for purposes internal to the MySQL server" },
+{ "ER_WSAS_FAILED", 1383, "WSAStartup Failed" },
+{ "ER_DIFF_GROUPS_PROC", 1384, "Can\'t handle procedures with different groups yet" },
+{ "ER_NO_GROUP_FOR_PROC", 1385, "Select must have a group with this procedure" },
+{ "ER_ORDER_WITH_PROC", 1386, "Can\'t use ORDER clause with this procedure" },
+{ "ER_LOGGING_PROHIBIT_CHANGING_OF", 1387, "Binary logging and replication forbid changing the global server %s" },
+{ "ER_NO_FILE_MAPPING", 1388, "Can\'t map file: %-.200s, errno: %d" },
+{ "ER_WRONG_MAGIC", 1389, "Wrong magic in %-.64s" },
+{ "ER_PS_MANY_PARAM", 1390, "Prepared statement contains too many placeholders" },
+{ "ER_KEY_PART_0", 1391, "Key part \'%-.192s\' length cannot be 0" },
+{ "ER_VIEW_CHECKSUM", 1392, "View text checksum failed" },
+{ "ER_VIEW_MULTIUPDATE", 1393, "Can not modify more than one base table through a join view \'%-.192s.%-.192s\'" },
+{ "ER_VIEW_NO_INSERT_FIELD_LIST", 1394, "Can not insert into join view \'%-.192s.%-.192s\' without fields list" },
+{ "ER_VIEW_DELETE_MERGE_VIEW", 1395, "Can not delete from join view \'%-.192s.%-.192s\'" },
+{ "ER_CANNOT_USER", 1396, "Operation %s failed for %.256s" },
+{ "ER_XAER_NOTA", 1397, "XAER_NOTA: Unknown XID" },
+{ "ER_XAER_INVAL", 1398, "XAER_INVAL: Invalid arguments (or unsupported command)" },
+{ "ER_XAER_RMFAIL", 1399, "XAER_RMFAIL: The command cannot be executed when global transaction is in the %.64s state" },
+{ "ER_XAER_OUTSIDE", 1400, "XAER_OUTSIDE: Some work is done outside global transaction" },
+{ "ER_XAER_RMERR", 1401, "XAER_RMERR: Fatal error occurred in the transaction branch - check your data for consistency" },
+{ "ER_XA_RBROLLBACK", 1402, "XA_RBROLLBACK: Transaction branch was rolled back" },
+{ "ER_NONEXISTING_PROC_GRANT", 1403, "There is no such grant defined for user \'%-.48s\' on host \'%-.64s\' on routine \'%-.192s\'" },
+{ "ER_PROC_AUTO_GRANT_FAIL", 1404, "Failed to grant EXECUTE and ALTER ROUTINE privileges" },
+{ "ER_PROC_AUTO_REVOKE_FAIL", 1405, "Failed to revoke all privileges to dropped routine" },
+{ "ER_DATA_TOO_LONG", 1406, "Data too long for column \'%s\' at row %ld" },
+{ "ER_SP_BAD_SQLSTATE", 1407, "Bad SQLSTATE: \'%s\'" },
+{ "ER_STARTUP", 1408, "%s: ready for connections.\nVersion: \'%s\' socket: \'%s\' port: %d %s" },
+{ "ER_LOAD_FROM_FIXED_SIZE_ROWS_TO_VAR", 1409, "Can\'t load value from file with fixed size rows to variable" },
+{ "ER_CANT_CREATE_USER_WITH_GRANT", 1410, "You are not allowed to create a user with GRANT" },
+{ "ER_WRONG_VALUE_FOR_TYPE", 1411, "Incorrect %-.32s value: \'%-.128s\' for function %-.32s" },
+{ "ER_TABLE_DEF_CHANGED", 1412, "Table definition has changed, please retry transaction" },
+{ "ER_SP_DUP_HANDLER", 1413, "Duplicate handler declared in the same block" },
+{ "ER_SP_NOT_VAR_ARG", 1414, "OUT or INOUT argument %d for routine %s is not a variable or NEW pseudo-variable in BEFORE trigger" },
+{ "ER_SP_NO_RETSET", 1415, "Not allowed to return a result set from a %s" },
+{ "ER_CANT_CREATE_GEOMETRY_OBJECT", 1416, "Cannot get geometry object from data you send to the GEOMETRY field" },
+{ "ER_FAILED_ROUTINE_BREAK_BINLOG", 1417, "A routine failed and has neither NO SQL nor READS SQL DATA in its declaration and binary logging is enabled; if non-transactional tables were updated, the binary log will miss their changes" },
+{ "ER_BINLOG_UNSAFE_ROUTINE", 1418, "This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)" },
+{ "ER_BINLOG_CREATE_ROUTINE_NEED_SUPER", 1419, "You do not have the SUPER privilege and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)" },
+{ "ER_EXEC_STMT_WITH_OPEN_CURSOR", 1420, "You can\'t execute a prepared statement which has an open cursor associated with it. Reset the statement to re-execute it." },
+{ "ER_STMT_HAS_NO_OPEN_CURSOR", 1421, "The statement (%lu) has no open cursor." },
+{ "ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG", 1422, "Explicit or implicit commit is not allowed in stored function or trigger." },
+{ "ER_NO_DEFAULT_FOR_VIEW_FIELD", 1423, "Field of view \'%-.192s.%-.192s\' underlying table doesn\'t have a default value" },
+{ "ER_SP_NO_RECURSION", 1424, "Recursive stored functions and triggers are not allowed." },
+{ "ER_TOO_BIG_SCALE", 1425, "Too big scale %d specified for column \'%-.192s\'. Maximum is %lu." },
+{ "ER_TOO_BIG_PRECISION", 1426, "Too-big precision %d specified for \'%-.192s\'. Maximum is %lu." },
+{ "ER_M_BIGGER_THAN_D", 1427, "For float(M,D), double(M,D) or decimal(M,D), M must be >= D (column \'%-.192s\')." },
+{ "ER_WRONG_LOCK_OF_SYSTEM_TABLE", 1428, "You can\'t combine write-locking of system tables with other tables or lock types" },
+{ "ER_CONNECT_TO_FOREIGN_DATA_SOURCE", 1429, "Unable to connect to foreign data source: %.64s" },
+{ "ER_QUERY_ON_FOREIGN_DATA_SOURCE", 1430, "There was a problem processing the query on the foreign data source. Data source error: %-.64s" },
+{ "ER_FOREIGN_DATA_SOURCE_DOESNT_EXIST", 1431, "The foreign data source you are trying to reference does not exist. Data source error: %-.64s" },
+{ "ER_FOREIGN_DATA_STRING_INVALID_CANT_CREATE", 1432, "Can\'t create federated table. The data source connection string \'%-.64s\' is not in the correct format" },
+{ "ER_FOREIGN_DATA_STRING_INVALID", 1433, "The data source connection string \'%-.64s\' is not in the correct format" },
+{ "ER_CANT_CREATE_FEDERATED_TABLE", 1434, "Can\'t create federated table. Foreign data src error: %-.64s" },
+{ "ER_TRG_IN_WRONG_SCHEMA", 1435, "Trigger in wrong schema" },
+{ "ER_STACK_OVERRUN_NEED_MORE", 1436, "Thread stack overrun: %ld bytes used of a %ld byte stack, and %ld bytes needed. Use \'mysqld --thread_stack=#\' to specify a bigger stack." },
+{ "ER_TOO_LONG_BODY", 1437, "Routine body for \'%-.100s\' is too long" },
+{ "ER_WARN_CANT_DROP_DEFAULT_KEYCACHE", 1438, "Cannot drop default keycache" },
+{ "ER_TOO_BIG_DISPLAYWIDTH", 1439, "Display width out of range for column \'%-.192s\' (max = %lu)" },
+{ "ER_XAER_DUPID", 1440, "XAER_DUPID: The XID already exists" },
+{ "ER_DATETIME_FUNCTION_OVERFLOW", 1441, "Datetime function: %-.32s field overflow" },
+{ "ER_CANT_UPDATE_USED_TABLE_IN_SF_OR_TRG", 1442, "Can\'t update table \'%-.192s\' in stored function/trigger because it is already used by statement which invoked this stored function/trigger." },
+{ "ER_VIEW_PREVENT_UPDATE", 1443, "The definition of table \'%-.192s\' prevents operation %.192s on table \'%-.192s\'." },
+{ "ER_PS_NO_RECURSION", 1444, "The prepared statement contains a stored routine call that refers to that same statement. It\'s not allowed to execute a prepared statement in such a recursive manner" },
+{ "ER_SP_CANT_SET_AUTOCOMMIT", 1445, "Not allowed to set autocommit from a stored function or trigger" },
+{ "ER_MALFORMED_DEFINER", 1446, "Definer is not fully qualified" },
+{ "ER_VIEW_FRM_NO_USER", 1447, "View \'%-.192s\'.\'%-.192s\' has no definer information (old table format). Current user is used as definer. Please recreate the view!" },
+{ "ER_VIEW_OTHER_USER", 1448, "You need the SUPER privilege for creation view with \'%-.192s\'@\'%-.192s\' definer" },
+{ "ER_NO_SUCH_USER", 1449, "The user specified as a definer (\'%-.64s\'@\'%-.64s\') does not exist" },
+{ "ER_FORBID_SCHEMA_CHANGE", 1450, "Changing schema from \'%-.192s\' to \'%-.192s\' is not allowed." },
+{ "ER_ROW_IS_REFERENCED_2", 1451, "Cannot delete or update a parent row: a foreign key constraint fails (%.192s)" },
+{ "ER_NO_REFERENCED_ROW_2", 1452, "Cannot add or update a child row: a foreign key constraint fails (%.192s)" },
+{ "ER_SP_BAD_VAR_SHADOW", 1453, "Variable \'%-.64s\' must be quoted with `...`, or renamed" },
+{ "ER_TRG_NO_DEFINER", 1454, "No definer attribute for trigger \'%-.192s\'.\'%-.192s\'. The trigger will be activated under the authorization of the invoker, which may have insufficient privileges. Please recreate the trigger." },
+{ "ER_OLD_FILE_FORMAT", 1455, "\'%-.192s\' has an old format, you should re-create the \'%s\' object(s)" },
+{ "ER_SP_RECURSION_LIMIT", 1456, "Recursive limit %d (as set by the max_sp_recursion_depth variable) was exceeded for routine %.192s" },
+{ "ER_SP_PROC_TABLE_CORRUPT", 1457, "Failed to load routine %-.192s. The table mysql.proc is missing, corrupt, or contains bad data (internal code %d)" },
+{ "ER_SP_WRONG_NAME", 1458, "Incorrect routine name \'%-.192s\'" },
+{ "ER_TABLE_NEEDS_UPGRADE", 1459, "Table upgrade required. Please do \"REPAIR TABLE `%-.64s`\" or dump/reload to fix it!" },
+{ "ER_SP_NO_AGGREGATE", 1460, "AGGREGATE is not supported for stored functions" },
+{ "ER_MAX_PREPARED_STMT_COUNT_REACHED", 1461, "Can\'t create more than max_prepared_stmt_count statements (current value: %lu)" },
+{ "ER_VIEW_RECURSIVE", 1462, "`%-.192s`.`%-.192s` contains view recursion" },
+{ "ER_NON_GROUPING_FIELD_USED", 1463, "Non-grouping field \'%-.192s\' is used in %-.64s clause" },
+{ "ER_TABLE_CANT_HANDLE_SPKEYS", 1464, "The used table type doesn\'t support SPATIAL indexes" },
+{ "ER_NO_TRIGGERS_ON_SYSTEM_SCHEMA", 1465, "Triggers can not be created on system tables" },
+{ "ER_REMOVED_SPACES", 1466, "Leading spaces are removed from name \'%s\'" },
+{ "ER_AUTOINC_READ_FAILED", 1467, "Failed to read auto-increment value from storage engine" },
+{ "ER_USERNAME", 1468, "user name" },
+{ "ER_HOSTNAME", 1469, "host name" },
+{ "ER_WRONG_STRING_LENGTH", 1470, "String \'%-.70s\' is too long for %s (should be no longer than %d)" },
+{ "ER_NON_INSERTABLE_TABLE", 1471, "The target table %-.100s of the %s is not insertable-into" },
+{ "ER_ADMIN_WRONG_MRG_TABLE", 1472, "Table \'%-.64s\' is differently defined or of non-MyISAM type or doesn\'t exist" },
+{ "ER_TOO_HIGH_LEVEL_OF_NESTING_FOR_SELECT", 1473, "Too high level of nesting for select" },
+{ "ER_NAME_BECOMES_EMPTY", 1474, "Name \'%-.64s\' has become \'\'" },
+{ "ER_AMBIGUOUS_FIELD_TERM", 1475, "First character of the FIELDS TERMINATED string is ambiguous; please use non-optional and non-empty FIELDS ENCLOSED BY" },
+{ "ER_FOREIGN_SERVER_EXISTS", 1476, "The foreign server, %s, you are trying to create already exists." },
+{ "ER_FOREIGN_SERVER_DOESNT_EXIST", 1477, "The foreign server name you are trying to reference does not exist. Data source error: %-.64s" },
+{ "ER_ILLEGAL_HA_CREATE_OPTION", 1478, "Table storage engine \'%-.64s\' does not support the create option \'%.64s\'" },
+{ "ER_PARTITION_REQUIRES_VALUES_ERROR", 1479, "Syntax error: %-.64s PARTITIONING requires definition of VALUES %-.64s for each partition" },
+{ "ER_PARTITION_WRONG_VALUES_ERROR", 1480, "Only %-.64s PARTITIONING can use VALUES %-.64s in partition definition" },
+{ "ER_PARTITION_MAXVALUE_ERROR", 1481, "MAXVALUE can only be used in last partition definition" },
+{ "ER_PARTITION_SUBPARTITION_ERROR", 1482, "Subpartitions can only be hash partitions and by key" },
+{ "ER_PARTITION_SUBPART_MIX_ERROR", 1483, "Must define subpartitions on all partitions if on one partition" },
+{ "ER_PARTITION_WRONG_NO_PART_ERROR", 1484, "Wrong number of partitions defined, mismatch with previous setting" },
+{ "ER_PARTITION_WRONG_NO_SUBPART_ERROR", 1485, "Wrong number of subpartitions defined, mismatch with previous setting" },
+{ "ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR", 1486, "Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed" },
+{ "ER_NO_CONST_EXPR_IN_RANGE_OR_LIST_ERROR", 1487, "Expression in RANGE/LIST VALUES must be constant" },
+{ "ER_FIELD_NOT_FOUND_PART_ERROR", 1488, "Field in list of fields for partition function not found in table" },
+{ "ER_LIST_OF_FIELDS_ONLY_IN_HASH_ERROR", 1489, "List of fields is only allowed in KEY partitions" },
+{ "ER_INCONSISTENT_PARTITION_INFO_ERROR", 1490, "The partition info in the frm file is not consistent with what can be written into the frm file" },
+{ "ER_PARTITION_FUNC_NOT_ALLOWED_ERROR", 1491, "The %-.192s function returns the wrong type" },
+{ "ER_PARTITIONS_MUST_BE_DEFINED_ERROR", 1492, "For %-.64s partitions each partition must be defined" },
+{ "ER_RANGE_NOT_INCREASING_ERROR", 1493, "VALUES LESS THAN value must be strictly increasing for each partition" },
+{ "ER_INCONSISTENT_TYPE_OF_FUNCTIONS_ERROR", 1494, "VALUES value must be of same type as partition function" },
+{ "ER_MULTIPLE_DEF_CONST_IN_LIST_PART_ERROR", 1495, "Multiple definition of same constant in list partitioning" },
+{ "ER_PARTITION_ENTRY_ERROR", 1496, "Partitioning can not be used stand-alone in query" },
+{ "ER_MIX_HANDLER_ERROR", 1497, "The mix of handlers in the partitions is not allowed in this version of MySQL" },
+{ "ER_PARTITION_NOT_DEFINED_ERROR", 1498, "For the partitioned engine it is necessary to define all %-.64s" },
+{ "ER_TOO_MANY_PARTITIONS_ERROR", 1499, "Too many partitions (including subpartitions) were defined" },
+{ "ER_SUBPARTITION_ERROR", 1500, "It is only possible to mix RANGE/LIST partitioning with HASH/KEY partitioning for subpartitioning" },
+{ "ER_CANT_CREATE_HANDLER_FILE", 1501, "Failed to create specific handler file" },
+{ "ER_BLOB_FIELD_IN_PART_FUNC_ERROR", 1502, "A BLOB field is not allowed in partition function" },
+{ "ER_UNIQUE_KEY_NEED_ALL_FIELDS_IN_PF", 1503, "A %-.192s must include all columns in the table\'s partitioning function" },
+{ "ER_NO_PARTS_ERROR", 1504, "Number of %-.64s = 0 is not an allowed value" },
+{ "ER_PARTITION_MGMT_ON_NONPARTITIONED", 1505, "Partition management on a not partitioned table is not possible" },
+{ "ER_FOREIGN_KEY_ON_PARTITIONED", 1506, "Foreign keys are not yet supported in conjunction with partitioning" },
+{ "ER_DROP_PARTITION_NON_EXISTENT", 1507, "Error in list of partitions to %-.64s" },
+{ "ER_DROP_LAST_PARTITION", 1508, "Cannot remove all partitions, use DROP TABLE instead" },
+{ "ER_COALESCE_ONLY_ON_HASH_PARTITION", 1509, "COALESCE PARTITION can only be used on HASH/KEY partitions" },
+{ "ER_REORG_HASH_ONLY_ON_SAME_NO", 1510, "REORGANIZE PARTITION can only be used to reorganize partitions not to change their numbers" },
+{ "ER_REORG_NO_PARAM_ERROR", 1511, "REORGANIZE PARTITION without parameters can only be used on auto-partitioned tables using HASH PARTITIONs" },
+{ "ER_ONLY_ON_RANGE_LIST_PARTITION", 1512, "%-.64s PARTITION can only be used on RANGE/LIST partitions" },
+{ "ER_ADD_PARTITION_SUBPART_ERROR", 1513, "Trying to Add partition(s) with wrong number of subpartitions" },
+{ "ER_ADD_PARTITION_NO_NEW_PARTITION", 1514, "At least one partition must be added" },
+{ "ER_COALESCE_PARTITION_NO_PARTITION", 1515, "At least one partition must be coalesced" },
+{ "ER_REORG_PARTITION_NOT_EXIST", 1516, "More partitions to reorganize than there are partitions" },
+{ "ER_SAME_NAME_PARTITION", 1517, "Duplicate partition name %-.192s" },
+{ "ER_NO_BINLOG_ERROR", 1518, "It is not allowed to shut off binlog on this command" },
+{ "ER_CONSECUTIVE_REORG_PARTITIONS", 1519, "When reorganizing a set of partitions they must be in consecutive order" },
+{ "ER_REORG_OUTSIDE_RANGE", 1520, "Reorganize of range partitions cannot change total ranges except for last partition where it can extend the range" },
+{ "ER_PARTITION_FUNCTION_FAILURE", 1521, "Partition function not supported in this version for this handler" },
+{ "ER_PART_STATE_ERROR", 1522, "Partition state cannot be defined from CREATE/ALTER TABLE" },
+{ "ER_LIMITED_PART_RANGE", 1523, "The %-.64s handler only supports 32 bit integers in VALUES" },
+{ "ER_PLUGIN_IS_NOT_LOADED", 1524, "Plugin \'%-.192s\' is not loaded" },
+{ "ER_WRONG_VALUE", 1525, "Incorrect %-.32s value: \'%-.128s\'" },
+{ "ER_NO_PARTITION_FOR_GIVEN_VALUE", 1526, "Table has no partition for value %-.64s" },
+{ "ER_FILEGROUP_OPTION_ONLY_ONCE", 1527, "It is not allowed to specify %s more than once" },
+{ "ER_CREATE_FILEGROUP_FAILED", 1528, "Failed to create %s" },
+{ "ER_DROP_FILEGROUP_FAILED", 1529, "Failed to drop %s" },
+{ "ER_TABLESPACE_AUTO_EXTEND_ERROR", 1530, "The handler doesn\'t support autoextend of tablespaces" },
+{ "ER_WRONG_SIZE_NUMBER", 1531, "A size parameter was incorrectly specified, either number or on the form 10M" },
+{ "ER_SIZE_OVERFLOW_ERROR", 1532, "The size number was correct but we don\'t allow the digit part to be more than 2 billion" },
+{ "ER_ALTER_FILEGROUP_FAILED", 1533, "Failed to alter: %s" },
+{ "ER_BINLOG_ROW_LOGGING_FAILED", 1534, "Writing one row to the row-based binary log failed" },
+{ "ER_BINLOG_ROW_WRONG_TABLE_DEF", 1535, "Table definition on master and slave does not match: %s" },
+{ "ER_BINLOG_ROW_RBR_TO_SBR", 1536, "Slave running with --log-slave-updates must use row-based binary logging to be able to replicate row-based binary log events" },
+{ "ER_EVENT_ALREADY_EXISTS", 1537, "Event \'%-.192s\' already exists" },
+{ "ER_EVENT_STORE_FAILED", 1538, "Failed to store event %s. Error code %d from storage engine." },
+{ "ER_EVENT_DOES_NOT_EXIST", 1539, "Unknown event \'%-.192s\'" },
+{ "ER_EVENT_CANT_ALTER", 1540, "Failed to alter event \'%-.192s\'" },
+{ "ER_EVENT_DROP_FAILED", 1541, "Failed to drop %s" },
+{ "ER_EVENT_INTERVAL_NOT_POSITIVE_OR_TOO_BIG", 1542, "INTERVAL is either not positive or too big" },
+{ "ER_EVENT_ENDS_BEFORE_STARTS", 1543, "ENDS is either invalid or before STARTS" },
+{ "ER_EVENT_EXEC_TIME_IN_THE_PAST", 1544, "Event execution time is in the past. Event has been disabled" },
+{ "ER_EVENT_OPEN_TABLE_FAILED", 1545, "Failed to open mysql.event" },
+{ "ER_EVENT_NEITHER_M_EXPR_NOR_M_AT", 1546, "No datetime expression provided" },
+{ "ER_OBSOLETE_COL_COUNT_DOESNT_MATCH_CORRUPTED", 1547, "Column count of mysql.%s is wrong. Expected %d, found %d. The table is probably corrupted" },
+{ "ER_OBSOLETE_CANNOT_LOAD_FROM_TABLE", 1548, "Cannot load from mysql.%s. The table is probably corrupted" },
+{ "ER_EVENT_CANNOT_DELETE", 1549, "Failed to delete the event from mysql.event" },
+{ "ER_EVENT_COMPILE_ERROR", 1550, "Error during compilation of event\'s body" },
+{ "ER_EVENT_SAME_NAME", 1551, "Same old and new event name" },
+{ "ER_EVENT_DATA_TOO_LONG", 1552, "Data for column \'%s\' too long" },
+{ "ER_DROP_INDEX_FK", 1553, "Cannot drop index \'%-.192s\': needed in a foreign key constraint" },
+{ "ER_WARN_DEPRECATED_SYNTAX_WITH_VER", 1554, "The syntax \'%s\' is deprecated and will be removed in MySQL %s. Please use %s instead" },
+{ "ER_CANT_WRITE_LOCK_LOG_TABLE", 1555, "You can\'t write-lock a log table. Only read access is possible" },
+{ "ER_CANT_LOCK_LOG_TABLE", 1556, "You can\'t use locks with log tables." },
+{ "ER_FOREIGN_DUPLICATE_KEY_OLD_UNUSED", 1557, "Upholding foreign key constraints for table \'%.192s\', entry \'%-.192s\', key %d would lead to a duplicate entry" },
+{ "ER_COL_COUNT_DOESNT_MATCH_PLEASE_UPDATE", 1558, "Column count of mysql.%s is wrong. Expected %d, found %d. Created with MySQL %d, now running %d. Please use mysql_upgrade to fix this error." },
+{ "ER_TEMP_TABLE_PREVENTS_SWITCH_OUT_OF_RBR", 1559, "Cannot switch out of the row-based binary log format when the session has open temporary tables" },
+{ "ER_STORED_FUNCTION_PREVENTS_SWITCH_BINLOG_FORMAT", 1560, "Cannot change the binary logging format inside a stored function or trigger" },
+{ "ER_NDB_CANT_SWITCH_BINLOG_FORMAT", 1561, "The NDB cluster engine does not support changing the binlog format on the fly yet" },
+{ "ER_PARTITION_NO_TEMPORARY", 1562, "Cannot create temporary table with partitions" },
+{ "ER_PARTITION_CONST_DOMAIN_ERROR", 1563, "Partition constant is out of partition function domain" },
+{ "ER_PARTITION_FUNCTION_IS_NOT_ALLOWED", 1564, "This partition function is not allowed" },
+{ "ER_DDL_LOG_ERROR", 1565, "Error in DDL log" },
+{ "ER_NULL_IN_VALUES_LESS_THAN", 1566, "Not allowed to use NULL value in VALUES LESS THAN" },
+{ "ER_WRONG_PARTITION_NAME", 1567, "Incorrect partition name" },
+{ "ER_CANT_CHANGE_TX_CHARACTERISTICS", 1568, "Transaction characteristics can\'t be changed while a transaction is in progress" },
+{ "ER_DUP_ENTRY_AUTOINCREMENT_CASE", 1569, "ALTER TABLE causes auto_increment resequencing, resulting in duplicate entry \'%-.192s\' for key \'%-.192s\'" },
+{ "ER_EVENT_MODIFY_QUEUE_ERROR", 1570, "Internal scheduler error %d" },
+{ "ER_EVENT_SET_VAR_ERROR", 1571, "Error during starting/stopping of the scheduler. Error code %u" },
+{ "ER_PARTITION_MERGE_ERROR", 1572, "Engine cannot be used in partitioned tables" },
+{ "ER_CANT_ACTIVATE_LOG", 1573, "Cannot activate \'%-.64s\' log" },
+{ "ER_RBR_NOT_AVAILABLE", 1574, "The server was not built with row-based replication" },
+{ "ER_BASE64_DECODE_ERROR", 1575, "Decoding of base64 string failed" },
+{ "ER_EVENT_RECURSION_FORBIDDEN", 1576, "Recursion of EVENT DDL statements is forbidden when body is present" },
+{ "ER_EVENTS_DB_ERROR", 1577, "Cannot proceed because system tables used by Event Scheduler were found damaged at server start" },
+{ "ER_ONLY_INTEGERS_ALLOWED", 1578, "Only integers allowed as number here" },
+{ "ER_UNSUPORTED_LOG_ENGINE", 1579, "This storage engine cannot be used for log tables\"" },
+{ "ER_BAD_LOG_STATEMENT", 1580, "You cannot \'%s\' a log table if logging is enabled" },
+{ "ER_CANT_RENAME_LOG_TABLE", 1581, "Cannot rename \'%s\'. When logging enabled, rename to/from log table must rename two tables: the log table to an archive table and another table back to \'%s\'" },
+{ "ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT", 1582, "Incorrect parameter count in the call to native function \'%-.192s\'" },
+{ "ER_WRONG_PARAMETERS_TO_NATIVE_FCT", 1583, "Incorrect parameters in the call to native function \'%-.192s\'" },
+{ "ER_WRONG_PARAMETERS_TO_STORED_FCT", 1584, "Incorrect parameters in the call to stored function %-.192s" },
+{ "ER_NATIVE_FCT_NAME_COLLISION", 1585, "This function \'%-.192s\' has the same name as a native function" },
+{ "ER_DUP_ENTRY_WITH_KEY_NAME", 1586, "Duplicate entry \'%-.64s\' for key \'%-.192s\'" },
+{ "ER_BINLOG_PURGE_EMFILE", 1587, "Too many files opened, please execute the command again" },
+{ "ER_EVENT_CANNOT_CREATE_IN_THE_PAST", 1588, "Event execution time is in the past and ON COMPLETION NOT PRESERVE is set. The event was dropped immediately after creation." },
+{ "ER_EVENT_CANNOT_ALTER_IN_THE_PAST", 1589, "Event execution time is in the past and ON COMPLETION NOT PRESERVE is set. The event was not changed. Specify a time in the future." },
+{ "ER_SLAVE_INCIDENT", 1590, "The incident %s occured on the master. Message: %s" },
+{ "ER_NO_PARTITION_FOR_GIVEN_VALUE_SILENT", 1591, "Table has no partition for some existing values" },
+{ "ER_BINLOG_UNSAFE_STATEMENT", 1592, "Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. %s" },
+{ "ER_SLAVE_FATAL_ERROR", 1593, "Fatal error: %s" },
+{ "ER_SLAVE_RELAY_LOG_READ_FAILURE", 1594, "Relay log read failure: %s" },
+{ "ER_SLAVE_RELAY_LOG_WRITE_FAILURE", 1595, "Relay log write failure: %s" },
+{ "ER_SLAVE_CREATE_EVENT_FAILURE", 1596, "Failed to create %s" },
+{ "ER_SLAVE_MASTER_COM_FAILURE", 1597, "Master command %s failed: %s" },
+{ "ER_BINLOG_LOGGING_IMPOSSIBLE", 1598, "Binary logging not possible. Message: %s" },
+{ "ER_VIEW_NO_CREATION_CTX", 1599, "View `%-.64s`.`%-.64s` has no creation context" },
+{ "ER_VIEW_INVALID_CREATION_CTX", 1600, "Creation context of view `%-.64s`.`%-.64s\' is invalid" },
+{ "ER_SR_INVALID_CREATION_CTX", 1601, "Creation context of stored routine `%-.64s`.`%-.64s` is invalid" },
+{ "ER_TRG_CORRUPTED_FILE", 1602, "Corrupted TRG file for table `%-.64s`.`%-.64s`" },
+{ "ER_TRG_NO_CREATION_CTX", 1603, "Triggers for table `%-.64s`.`%-.64s` have no creation context" },
+{ "ER_TRG_INVALID_CREATION_CTX", 1604, "Trigger creation context of table `%-.64s`.`%-.64s` is invalid" },
+{ "ER_EVENT_INVALID_CREATION_CTX", 1605, "Creation context of event `%-.64s`.`%-.64s` is invalid" },
+{ "ER_TRG_CANT_OPEN_TABLE", 1606, "Cannot open table for trigger `%-.64s`.`%-.64s`" },
+{ "ER_CANT_CREATE_SROUTINE", 1607, "Cannot create stored routine `%-.64s`. Check warnings" },
+{ "ER_NEVER_USED", 1608, "Ambiguous slave modes combination. %s" },
+{ "ER_NO_FORMAT_DESCRIPTION_EVENT_BEFORE_BINLOG_STATEMENT", 1609, "The BINLOG statement of type `%s` was not preceded by a format description BINLOG statement." },
+{ "ER_SLAVE_CORRUPT_EVENT", 1610, "Corrupted replication event was detected" },
+{ "ER_LOAD_DATA_INVALID_COLUMN_UNUSED", 1611, "Invalid column reference (%-.64s) in LOAD DATA" },
+{ "ER_LOG_PURGE_NO_FILE", 1612, "Being purged log %s was not found" },
+{ "ER_XA_RBTIMEOUT", 1613, "XA_RBTIMEOUT: Transaction branch was rolled back: took too long" },
+{ "ER_XA_RBDEADLOCK", 1614, "XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected" },
+{ "ER_NEED_REPREPARE", 1615, "Prepared statement needs to be re-prepared" },
+{ "ER_DELAYED_NOT_SUPPORTED", 1616, "DELAYED option not supported for table \'%-.192s\'" },
+{ "WARN_NO_MASTER_INFO", 1617, "The master info structure does not exist" },
+{ "WARN_OPTION_IGNORED", 1618, "<%-.64s> option ignored" },
+{ "ER_PLUGIN_DELETE_BUILTIN", 1619, "Built-in plugins cannot be deleted" },
+{ "WARN_PLUGIN_BUSY", 1620, "Plugin is busy and will be uninstalled on shutdown" },
+{ "ER_VARIABLE_IS_READONLY", 1621, "%s variable \'%s\' is read-only. Use SET %s to assign the value" },
+{ "ER_WARN_ENGINE_TRANSACTION_ROLLBACK", 1622, "Storage engine %s does not support rollback for this statement. Transaction rolled back and must be restarted" },
+{ "ER_SLAVE_HEARTBEAT_FAILURE", 1623, "Unexpected master\'s heartbeat data: %s" },
+{ "ER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE", 1624, "The requested value for the heartbeat period is either negative or exceeds the maximum allowed (%s seconds)." },
+{ "ER_NDB_REPLICATION_SCHEMA_ERROR", 1625, "Bad schema for mysql.ndb_replication table. Message: %-.64s" },
+{ "ER_CONFLICT_FN_PARSE_ERROR", 1626, "Error in parsing conflict function. Message: %-.64s" },
+{ "ER_EXCEPTIONS_WRITE_ERROR", 1627, "Write to exceptions table failed. Message: %-.128s\"" },
+{ "ER_TOO_LONG_TABLE_COMMENT", 1628, "Comment for table \'%-.64s\' is too long (max = %lu)" },
+{ "ER_TOO_LONG_FIELD_COMMENT", 1629, "Comment for field \'%-.64s\' is too long (max = %lu)" },
+{ "ER_FUNC_INEXISTENT_NAME_COLLISION", 1630, "FUNCTION %s does not exist. Check the \'Function Name Parsing and Resolution\' section in the Reference Manual" },
+{ "ER_DATABASE_NAME", 1631, "Database" },
+{ "ER_TABLE_NAME", 1632, "Table" },
+{ "ER_PARTITION_NAME", 1633, "Partition" },
+{ "ER_SUBPARTITION_NAME", 1634, "Subpartition" },
+{ "ER_TEMPORARY_NAME", 1635, "Temporary" },
+{ "ER_RENAMED_NAME", 1636, "Renamed" },
+{ "ER_TOO_MANY_CONCURRENT_TRXS", 1637, "Too many active concurrent transactions" },
+{ "WARN_NON_ASCII_SEPARATOR_NOT_IMPLEMENTED", 1638, "Non-ASCII separator arguments are not fully supported" },
+{ "ER_DEBUG_SYNC_TIMEOUT", 1639, "debug sync point wait timed out" },
+{ "ER_DEBUG_SYNC_HIT_LIMIT", 1640, "debug sync point hit limit reached" },
+{ "ER_DUP_SIGNAL_SET", 1641, "Duplicate condition information item \'%s\'" },
+{ "ER_SIGNAL_WARN", 1642, "Unhandled user-defined warning condition" },
+{ "ER_SIGNAL_NOT_FOUND", 1643, "Unhandled user-defined not found condition" },
+{ "ER_SIGNAL_EXCEPTION", 1644, "Unhandled user-defined exception condition" },
+{ "ER_RESIGNAL_WITHOUT_ACTIVE_HANDLER", 1645, "RESIGNAL when handler not active" },
+{ "ER_SIGNAL_BAD_CONDITION_TYPE", 1646, "SIGNAL/RESIGNAL can only use a CONDITION defined with SQLSTATE" },
+{ "WARN_COND_ITEM_TRUNCATED", 1647, "Data truncated for condition item \'%s\'" },
+{ "ER_COND_ITEM_TOO_LONG", 1648, "Data too long for condition item \'%s\'" },
+{ "ER_UNKNOWN_LOCALE", 1649, "Unknown locale: \'%-.64s\'" },
+{ "ER_SLAVE_IGNORE_SERVER_IDS", 1650, "The requested server id %d clashes with the slave startup option --replicate-same-server-id" },
+{ "ER_QUERY_CACHE_DISABLED", 1651, "Query cache is disabled; restart the server with query_cache_type=1 to enable it" },
+{ "ER_SAME_NAME_PARTITION_FIELD", 1652, "Duplicate partition field name \'%-.192s\'" },
+{ "ER_PARTITION_COLUMN_LIST_ERROR", 1653, "Inconsistency in usage of column lists for partitioning" },
+{ "ER_WRONG_TYPE_COLUMN_VALUE_ERROR", 1654, "Partition column values of incorrect type" },
+{ "ER_TOO_MANY_PARTITION_FUNC_FIELDS_ERROR", 1655, "Too many fields in \'%-.192s\'" },
+{ "ER_MAXVALUE_IN_VALUES_IN", 1656, "Cannot use MAXVALUE as value in VALUES IN" },
+{ "ER_TOO_MANY_VALUES_ERROR", 1657, "Cannot have more than one value for this type of %-.64s partitioning" },
+{ "ER_ROW_SINGLE_PARTITION_FIELD_ERROR", 1658, "Row expressions in VALUES IN only allowed for multi-field column partitioning" },
+{ "ER_FIELD_TYPE_NOT_ALLOWED_AS_PARTITION_FIELD", 1659, "Field \'%-.192s\' is of a not allowed type for this type of partitioning" },
+{ "ER_PARTITION_FIELDS_TOO_LONG", 1660, "The total length of the partitioning fields is too large" },
+{ "ER_BINLOG_ROW_ENGINE_AND_STMT_ENGINE", 1661, "Cannot execute statement: impossible to write to binary log since both row-incapable engines and statement-incapable engines are involved." },
+{ "ER_BINLOG_ROW_MODE_AND_STMT_ENGINE", 1662, "Cannot execute statement: impossible to write to binary log since BINLOG_FORMAT = ROW and at least one table uses a storage engine limited to statement-based logging." },
+{ "ER_BINLOG_UNSAFE_AND_STMT_ENGINE", 1663, "Cannot execute statement: impossible to write to binary log since statement is unsafe, storage engine is limited to statement-based logging, and BINLOG_FORMAT = MIXED. %s" },
+{ "ER_BINLOG_ROW_INJECTION_AND_STMT_ENGINE", 1664, "Cannot execute statement: impossible to write to binary log since statement is in row format and at least one table uses a storage engine limited to statement-based logging." },
+{ "ER_BINLOG_STMT_MODE_AND_ROW_ENGINE", 1665, "Cannot execute statement: impossible to write to binary log since BINLOG_FORMAT = STATEMENT and at least one table uses a storage engine limited to row-based logging.%s" },
+{ "ER_BINLOG_ROW_INJECTION_AND_STMT_MODE", 1666, "Cannot execute statement: impossible to write to binary log since statement is in row format and BINLOG_FORMAT = STATEMENT." },
+{ "ER_BINLOG_MULTIPLE_ENGINES_AND_SELF_LOGGING_ENGINE", 1667, "Cannot execute statement: impossible to write to binary log since more than one engine is involved and at least one engine is self-logging." },
+{ "ER_BINLOG_UNSAFE_LIMIT", 1668, "The statement is unsafe because it uses a LIMIT clause. This is unsafe because the set of rows included cannot be predicted." },
+{ "ER_UNUSED4", 1669, "The statement is unsafe because it uses INSERT DELAYED. This is unsafe because the times when rows are inserted cannot be predicted." },
+{ "ER_BINLOG_UNSAFE_SYSTEM_TABLE", 1670, "The statement is unsafe because it uses the general log, slow query log, or performance_schema table(s). This is unsafe because system tables may differ on slaves." },
+{ "ER_BINLOG_UNSAFE_AUTOINC_COLUMNS", 1671, "Statement is unsafe because it invokes a trigger or a stored function that inserts into an AUTO_INCREMENT column. Inserted values cannot be logged correctly." },
+{ "ER_BINLOG_UNSAFE_UDF", 1672, "Statement is unsafe because it uses a UDF which may not return the same value on the slave." },
+{ "ER_BINLOG_UNSAFE_SYSTEM_VARIABLE", 1673, "Statement is unsafe because it uses a system variable that may have a different value on the slave." },
+{ "ER_BINLOG_UNSAFE_SYSTEM_FUNCTION", 1674, "Statement is unsafe because it uses a system function that may return a different value on the slave." },
+{ "ER_BINLOG_UNSAFE_NONTRANS_AFTER_TRANS", 1675, "Statement is unsafe because it accesses a non-transactional table after accessing a transactional table within the same transaction." },
+{ "ER_MESSAGE_AND_STATEMENT", 1676, "%s Statement: %s" },
+{ "ER_SLAVE_CONVERSION_FAILED", 1677, "Column %d of table \'%-.192s.%-.192s\' cannot be converted from type \'%-.32s\' to type \'%-.32s\'" },
+{ "ER_SLAVE_CANT_CREATE_CONVERSION", 1678, "Can\'t create conversion table for table \'%-.192s.%-.192s\'" },
+{ "ER_INSIDE_TRANSACTION_PREVENTS_SWITCH_BINLOG_FORMAT", 1679, "Cannot modify @@session.binlog_format inside a transaction" },
+{ "ER_PATH_LENGTH", 1680, "The path specified for %.64s is too long." },
+{ "ER_WARN_DEPRECATED_SYNTAX_NO_REPLACEMENT", 1681, "\'%s\' is deprecated and will be removed in a future release." },
+{ "ER_WRONG_NATIVE_TABLE_STRUCTURE", 1682, "Native table \'%-.64s\'.\'%-.64s\' has the wrong structure" },
+{ "ER_WRONG_PERFSCHEMA_USAGE", 1683, "Invalid performance_schema usage." },
+{ "ER_WARN_I_S_SKIPPED_TABLE", 1684, "Table \'%s\'.\'%s\' was skipped since its definition is being modified by concurrent DDL statement" },
+{ "ER_INSIDE_TRANSACTION_PREVENTS_SWITCH_BINLOG_DIRECT", 1685, "Cannot modify @@session.binlog_direct_non_transactional_updates inside a transaction" },
+{ "ER_STORED_FUNCTION_PREVENTS_SWITCH_BINLOG_DIRECT", 1686, "Cannot change the binlog direct flag inside a stored function or trigger" },
+{ "ER_SPATIAL_MUST_HAVE_GEOM_COL", 1687, "A SPATIAL index may only contain a geometrical type column" },
+{ "ER_TOO_LONG_INDEX_COMMENT", 1688, "Comment for index \'%-.64s\' is too long (max = %lu)" },
+{ "ER_LOCK_ABORTED", 1689, "Wait on a lock was aborted due to a pending exclusive lock" },
+{ "ER_DATA_OUT_OF_RANGE", 1690, "%s value is out of range in \'%s\'" },
+{ "ER_WRONG_SPVAR_TYPE_IN_LIMIT", 1691, "A variable of a non-integer based type in LIMIT clause" },
+{ "ER_BINLOG_UNSAFE_MULTIPLE_ENGINES_AND_SELF_LOGGING_ENGINE", 1692, "Mixing self-logging and non-self-logging engines in a statement is unsafe." },
+{ "ER_BINLOG_UNSAFE_MIXED_STATEMENT", 1693, "Statement accesses nontransactional table as well as transactional or temporary table, and writes to any of them." },
+{ "ER_INSIDE_TRANSACTION_PREVENTS_SWITCH_SQL_LOG_BIN", 1694, "Cannot modify @@session.sql_log_bin inside a transaction" },
+{ "ER_STORED_FUNCTION_PREVENTS_SWITCH_SQL_LOG_BIN", 1695, "Cannot change the sql_log_bin inside a stored function or trigger" },
+{ "ER_FAILED_READ_FROM_PAR_FILE", 1696, "Failed to read from the .par file" },
+{ "ER_VALUES_IS_NOT_INT_TYPE_ERROR", 1697, "VALUES value for partition \'%-.64s\' must have type INT" },
+{ "ER_ACCESS_DENIED_NO_PASSWORD_ERROR", 1698, "Access denied for user \'%-.48s\'@\'%-.64s\'" },
+{ "ER_SET_PASSWORD_AUTH_PLUGIN", 1699, "SET PASSWORD has no significance for users authenticating via plugins" },
+{ "ER_GRANT_PLUGIN_USER_EXISTS", 1700, "GRANT with IDENTIFIED WITH is illegal because the user %-.*s already exists" },
+{ "ER_TRUNCATE_ILLEGAL_FK", 1701, "Cannot truncate a table referenced in a foreign key constraint (%.192s)" },
+{ "ER_PLUGIN_IS_PERMANENT", 1702, "Plugin \'%s\' is force_plus_permanent and can not be unloaded" },
+{ "ER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE_MIN", 1703, "The requested value for the heartbeat period is less than 1 millisecond. The value is reset to 0, meaning that heartbeating will effectively be disabled." },
+{ "ER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE_MAX", 1704, "The requested value for the heartbeat period exceeds the value of `slave_net_timeout\' seconds. A sensible value for the period should be less than the timeout." },
+{ "ER_STMT_CACHE_FULL", 1705, "Multi-row statements required more than \'max_binlog_stmt_cache_size\' bytes of storage; increase this mysqld variable and try again" },
+{ "ER_MULTI_UPDATE_KEY_CONFLICT", 1706, "Primary key/partition key update is not allowed since the table is updated both as \'%-.192s\' and \'%-.192s\'." },
+{ "ER_TABLE_NEEDS_REBUILD", 1707, "Table rebuild required. Please do \"ALTER TABLE `%-.64s` FORCE\" or dump/reload to fix it!" },
+{ "WARN_OPTION_BELOW_LIMIT", 1708, "The value of \'%s\' should be no less than the value of \'%s\'" },
+{ "ER_INDEX_COLUMN_TOO_LONG", 1709, "Index column size too large. The maximum column size is %lu bytes." },
+{ "ER_ERROR_IN_TRIGGER_BODY", 1710, "Trigger \'%-.64s\' has an error in its body: \'%-.256s\'" },
+{ "ER_ERROR_IN_UNKNOWN_TRIGGER_BODY", 1711, "Unknown trigger has an error in its body: \'%-.256s\'" },
+{ "ER_INDEX_CORRUPT", 1712, "Index %s is corrupted" },
+{ "ER_UNDO_RECORD_TOO_BIG", 1713, "Undo log record is too big." },
+{ "ER_BINLOG_UNSAFE_INSERT_IGNORE_SELECT", 1714, "INSERT IGNORE... SELECT is unsafe because the order in which rows are retrieved by the SELECT determines which (if any) rows are ignored. This order cannot be predicted and may differ on master and the slave." },
+{ "ER_BINLOG_UNSAFE_INSERT_SELECT_UPDATE", 1715, "INSERT... SELECT... ON DUPLICATE KEY UPDATE is unsafe because the order in which rows are retrieved by the SELECT determines which (if any) rows are updated. This order cannot be predicted and may differ on master and the slave." },
+{ "ER_BINLOG_UNSAFE_REPLACE_SELECT", 1716, "REPLACE... SELECT is unsafe because the order in which rows are retrieved by the SELECT determines which (if any) rows are replaced. This order cannot be predicted and may differ on master and the slave." },
+{ "ER_BINLOG_UNSAFE_CREATE_IGNORE_SELECT", 1717, "CREATE... IGNORE SELECT is unsafe because the order in which rows are retrieved by the SELECT determines which (if any) rows are ignored. This order cannot be predicted and may differ on master and the slave." },
+{ "ER_BINLOG_UNSAFE_CREATE_REPLACE_SELECT", 1718, "CREATE... REPLACE SELECT is unsafe because the order in which rows are retrieved by the SELECT determines which (if any) rows are replaced. This order cannot be predicted and may differ on master and the slave." },
+{ "ER_BINLOG_UNSAFE_UPDATE_IGNORE", 1719, "UPDATE IGNORE is unsafe because the order in which rows are updated determines which (if any) rows are ignored. This order cannot be predicted and may differ on master and the slave." },
+{ "ER_PLUGIN_NO_UNINSTALL", 1720, "Plugin \'%s\' is marked as not dynamically uninstallable. You have to stop the server to uninstall it." },
+{ "ER_PLUGIN_NO_INSTALL", 1721, "Plugin \'%s\' is marked as not dynamically installable. You have to stop the server to install it." },
+{ "ER_BINLOG_UNSAFE_WRITE_AUTOINC_SELECT", 1722, "Statements writing to a table with an auto-increment column after selecting from another table are unsafe because the order in which rows are retrieved determines what (if any) rows will be written. This order cannot be predicted and may differ on master and the slave." },
+{ "ER_BINLOG_UNSAFE_CREATE_SELECT_AUTOINC", 1723, "CREATE TABLE... SELECT... on a table with an auto-increment column is unsafe because the order in which rows are retrieved by the SELECT determines which (if any) rows are inserted. This order cannot be predicted and may differ on master and the slave." },
+{ "ER_BINLOG_UNSAFE_INSERT_TWO_KEYS", 1724, "INSERT... ON DUPLICATE KEY UPDATE on a table with more than one UNIQUE KEY is unsafe" },
+{ "ER_TABLE_IN_FK_CHECK", 1725, "Table is being used in foreign key check." },
+{ "ER_UNSUPPORTED_ENGINE", 1726, "Storage engine \'%s\' does not support system tables. [%s.%s]" },
+{ "ER_BINLOG_UNSAFE_AUTOINC_NOT_FIRST", 1727, "INSERT into autoincrement field which is not the first part in the composed primary key is unsafe." },
+{ "ER_CANNOT_LOAD_FROM_TABLE_V2", 1728, "Cannot load from %s.%s. The table is probably corrupted" },
+{ "ER_MASTER_DELAY_VALUE_OUT_OF_RANGE", 1729, "The requested value %s for the master delay exceeds the maximum %u" },
+{ "ER_ONLY_FD_AND_RBR_EVENTS_ALLOWED_IN_BINLOG_STATEMENT", 1730, "Only Format_description_log_event and row events are allowed in BINLOG statements (but %s was provided)" },
+{ "ER_PARTITION_EXCHANGE_DIFFERENT_OPTION", 1731, "Non matching attribute \'%-.64s\' between partition and table" },
+{ "ER_PARTITION_EXCHANGE_PART_TABLE", 1732, "Table to exchange with partition is partitioned: \'%-.64s\'" },
+{ "ER_PARTITION_EXCHANGE_TEMP_TABLE", 1733, "Table to exchange with partition is temporary: \'%-.64s\'" },
+{ "ER_PARTITION_INSTEAD_OF_SUBPARTITION", 1734, "Subpartitioned table, use subpartition instead of partition" },
+{ "ER_UNKNOWN_PARTITION", 1735, "Unknown partition \'%-.64s\' in table \'%-.64s\'" },
+{ "ER_TABLES_DIFFERENT_METADATA", 1736, "Tables have different definitions" },
+{ "ER_ROW_DOES_NOT_MATCH_PARTITION", 1737, "Found a row that does not match the partition" },
+{ "ER_BINLOG_CACHE_SIZE_GREATER_THAN_MAX", 1738, "Option binlog_cache_size (%lu) is greater than max_binlog_cache_size (%lu); setting binlog_cache_size equal to max_binlog_cache_size." },
+{ "ER_WARN_INDEX_NOT_APPLICABLE", 1739, "Cannot use %-.64s access on index \'%-.64s\' due to type or collation conversion on field \'%-.64s\'" },
+{ "ER_PARTITION_EXCHANGE_FOREIGN_KEY", 1740, "Table to exchange with partition has foreign key references: \'%-.64s\'" },
+{ "ER_NO_SUCH_KEY_VALUE", 1741, "Key value \'%-.192s\' was not found in table \'%-.192s.%-.192s\'" },
+{ "ER_RPL_INFO_DATA_TOO_LONG", 1742, "Data for column \'%s\' too long" },
+{ "ER_NETWORK_READ_EVENT_CHECKSUM_FAILURE", 1743, "Replication event checksum verification failed while reading from network." },
+{ "ER_BINLOG_READ_EVENT_CHECKSUM_FAILURE", 1744, "Replication event checksum verification failed while reading from a log file." },
+{ "ER_BINLOG_STMT_CACHE_SIZE_GREATER_THAN_MAX", 1745, "Option binlog_stmt_cache_size (%lu) is greater than max_binlog_stmt_cache_size (%lu); setting binlog_stmt_cache_size equal to max_binlog_stmt_cache_size." },
+{ "ER_CANT_UPDATE_TABLE_IN_CREATE_TABLE_SELECT", 1746, "Can\'t update table \'%-.192s\' while \'%-.192s\' is being created." },
+{ "ER_PARTITION_CLAUSE_ON_NONPARTITIONED", 1747, "PARTITION () clause on non partitioned table" },
+{ "ER_ROW_DOES_NOT_MATCH_GIVEN_PARTITION_SET", 1748, "Found a row not matching the given partition set" },
+{ "ER_NO_SUCH_PARTITION__UNUSED", 1749, "partition \'%-.64s\' doesn\'t exist" },
+{ "ER_CHANGE_RPL_INFO_REPOSITORY_FAILURE", 1750, "Failure while changing the type of replication repository: %s." },
+{ "ER_WARNING_NOT_COMPLETE_ROLLBACK_WITH_CREATED_TEMP_TABLE", 1751, "The creation of some temporary tables could not be rolled back." },
+{ "ER_WARNING_NOT_COMPLETE_ROLLBACK_WITH_DROPPED_TEMP_TABLE", 1752, "Some temporary tables were dropped, but these operations could not be rolled back." },
+{ "ER_MTS_FEATURE_IS_NOT_SUPPORTED", 1753, "%s is not supported in multi-threaded slave mode. %s" },
+{ "ER_MTS_UPDATED_DBS_GREATER_MAX", 1754, "The number of modified databases exceeds the maximum %d; the database names will not be included in the replication event metadata." },
+{ "ER_MTS_CANT_PARALLEL", 1755, "Cannot execute the current event group in the parallel mode. Encountered event %s, relay-log name %s, position %s which prevents execution of this event group in parallel mode. Reason: %s." },
+{ "ER_MTS_INCONSISTENT_DATA", 1756, "%s" },
+{ "ER_FULLTEXT_NOT_SUPPORTED_WITH_PARTITIONING", 1757, "FULLTEXT index is not supported for partitioned tables." },
+{ "ER_DA_INVALID_CONDITION_NUMBER", 1758, "Invalid condition number" },
+{ "ER_INSECURE_PLAIN_TEXT", 1759, "Sending passwords in plain text without SSL/TLS is extremely insecure." },
+{ "ER_INSECURE_CHANGE_MASTER", 1760, "Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the \'START SLAVE Syntax\' in the MySQL Manual for more information." },
+{ "ER_FOREIGN_DUPLICATE_KEY_WITH_CHILD_INFO", 1761, "Foreign key constraint for table \'%.192s\', record \'%-.192s\' would lead to a duplicate entry in table \'%.192s\', key \'%.192s\'" },
+{ "ER_FOREIGN_DUPLICATE_KEY_WITHOUT_CHILD_INFO", 1762, "Foreign key constraint for table \'%.192s\', record \'%-.192s\' would lead to a duplicate entry in a child table" },
+{ "ER_SQLTHREAD_WITH_SECURE_SLAVE", 1763, "Setting authentication options is not possible when only the Slave SQL Thread is being started." },
+{ "ER_TABLE_HAS_NO_FT", 1764, "The table does not have FULLTEXT index to support this query" },
+{ "ER_VARIABLE_NOT_SETTABLE_IN_SF_OR_TRIGGER", 1765, "The system variable %.200s cannot be set in stored functions or triggers." },
+{ "ER_VARIABLE_NOT_SETTABLE_IN_TRANSACTION", 1766, "The system variable %.200s cannot be set when there is an ongoing transaction." },
+{ "ER_GTID_NEXT_IS_NOT_IN_GTID_NEXT_LIST", 1767, "The system variable @@SESSION.GTID_NEXT has the value %.200s, which is not listed in @@SESSION.GTID_NEXT_LIST." },
+{ "ER_CANT_CHANGE_GTID_NEXT_IN_TRANSACTION", 1768, "The system variable @@SESSION.GTID_NEXT cannot change inside a transaction." },
+{ "ER_SET_STATEMENT_CANNOT_INVOKE_FUNCTION", 1769, "The statement \'SET %.200s\' cannot invoke a stored function." },
+{ "ER_GTID_NEXT_CANT_BE_AUTOMATIC_IF_GTID_NEXT_LIST_IS_NON_NULL", 1770, "The system variable @@SESSION.GTID_NEXT cannot be \'AUTOMATIC\' when @@SESSION.GTID_NEXT_LIST is non-NULL." },
+{ "ER_SKIPPING_LOGGED_TRANSACTION", 1771, "Skipping transaction %.200s because it has already been executed and logged." },
+{ "ER_MALFORMED_GTID_SET_SPECIFICATION", 1772, "Malformed GTID set specification \'%.200s\'." },
+{ "ER_MALFORMED_GTID_SET_ENCODING", 1773, "Malformed GTID set encoding." },
+{ "ER_MALFORMED_GTID_SPECIFICATION", 1774, "Malformed GTID specification \'%.200s\'." },
+{ "ER_GNO_EXHAUSTED", 1775, "Impossible to generate GTID: the integer component reached the maximum value. Restart the server with a new server_uuid." },
+{ "ER_BAD_SLAVE_AUTO_POSITION", 1776, "Parameters MASTER_LOG_FILE, MASTER_LOG_POS, RELAY_LOG_FILE and RELAY_LOG_POS cannot be set when MASTER_AUTO_POSITION is active." },
+{ "ER_AUTO_POSITION_REQUIRES_GTID_MODE_NOT_OFF", 1777, "CHANGE MASTER TO MASTER_AUTO_POSITION = 1 cannot be executed because @@GLOBAL.GTID_MODE = OFF." },
+{ "ER_CANT_DO_IMPLICIT_COMMIT_IN_TRX_WHEN_GTID_NEXT_IS_SET", 1778, "Cannot execute statements with implicit commit inside a transaction when @@SESSION.GTID_NEXT == \'UUID:NUMBER\'." },
+{ "ER_GTID_MODE_ON_REQUIRES_ENFORCE_GTID_CONSISTENCY_ON", 1779, "GTID_MODE = ON requires ENFORCE_GTID_CONSISTENCY = ON." },
+{ "ER_GTID_MODE_REQUIRES_BINLOG", 1780, "@@GLOBAL.GTID_MODE = ON or ON_PERMISSIVE or OFF_PERMISSIVE requires --log-bin and --log-slave-updates." },
+{ "ER_CANT_SET_GTID_NEXT_TO_GTID_WHEN_GTID_MODE_IS_OFF", 1781, "@@SESSION.GTID_NEXT cannot be set to UUID:NUMBER when @@GLOBAL.GTID_MODE = OFF." },
+{ "ER_CANT_SET_GTID_NEXT_TO_ANONYMOUS_WHEN_GTID_MODE_IS_ON", 1782, "@@SESSION.GTID_NEXT cannot be set to ANONYMOUS when @@GLOBAL.GTID_MODE = ON." },
+{ "ER_CANT_SET_GTID_NEXT_LIST_TO_NON_NULL_WHEN_GTID_MODE_IS_OFF", 1783, "@@SESSION.GTID_NEXT_LIST cannot be set to a non-NULL value when @@GLOBAL.GTID_MODE = OFF." },
+{ "ER_FOUND_GTID_EVENT_WHEN_GTID_MODE_IS_OFF__UNUSED", 1784, "Found a Gtid_log_event when @@GLOBAL.GTID_MODE = OFF." },
+{ "ER_GTID_UNSAFE_NON_TRANSACTIONAL_TABLE", 1785, "Statement violates GTID consistency: Updates to non-transactional tables can only be done in either autocommitted statements or single-statement transactions, and never in the same statement as updates to transactional tables." },
+{ "ER_GTID_UNSAFE_CREATE_SELECT", 1786, "Statement violates GTID consistency: CREATE TABLE ... SELECT." },
+{ "ER_GTID_UNSAFE_CREATE_DROP_TEMPORARY_TABLE_IN_TRANSACTION", 1787, "Statement violates GTID consistency: CREATE TEMPORARY TABLE and DROP TEMPORARY TABLE can only be executed outside transactional context. These statements are also not allowed in a function or trigger because functions and triggers are also considered to be multi-statement transactions." },
+{ "ER_GTID_MODE_CAN_ONLY_CHANGE_ONE_STEP_AT_A_TIME", 1788, "The value of @@GLOBAL.GTID_MODE can only be changed one step at a time: OFF <-> OFF_PERMISSIVE <-> ON_PERMISSIVE <-> ON. Also note that this value must be stepped up or down simultaneously on all servers. See the Manual for instructions." },
+{ "ER_MASTER_HAS_PURGED_REQUIRED_GTIDS", 1789, "The slave is connecting using CHANGE MASTER TO MASTER_AUTO_POSITION = 1, but the master has purged binary logs containing GTIDs that the slave requires. Replicate the missing transactions from elsewhere, or provision a new slave from backup. Consider increasing the master\'s binary log expiration period. %s." },
+{ "ER_CANT_SET_GTID_NEXT_WHEN_OWNING_GTID", 1790, "@@SESSION.GTID_NEXT cannot be changed by a client that owns a GTID. The client owns %s. Ownership is released on COMMIT or ROLLBACK." },
+{ "ER_UNKNOWN_EXPLAIN_FORMAT", 1791, "Unknown EXPLAIN format name: \'%s\'" },
+{ "ER_CANT_EXECUTE_IN_READ_ONLY_TRANSACTION", 1792, "Cannot execute statement in a READ ONLY transaction." },
+{ "ER_TOO_LONG_TABLE_PARTITION_COMMENT", 1793, "Comment for table partition \'%-.64s\' is too long (max = %lu)" },
+{ "ER_SLAVE_CONFIGURATION", 1794, "Slave is not configured or failed to initialize properly. You must at least set --server-id to enable either a master or a slave. Additional error messages can be found in the MySQL error log." },
+{ "ER_INNODB_FT_LIMIT", 1795, "InnoDB presently supports one FULLTEXT index creation at a time" },
+{ "ER_INNODB_NO_FT_TEMP_TABLE", 1796, "Cannot create FULLTEXT index on temporary InnoDB table" },
+{ "ER_INNODB_FT_WRONG_DOCID_COLUMN", 1797, "Column \'%-.192s\' is of wrong type for an InnoDB FULLTEXT index" },
+{ "ER_INNODB_FT_WRONG_DOCID_INDEX", 1798, "Index \'%-.192s\' is of wrong type for an InnoDB FULLTEXT index" },
+{ "ER_INNODB_ONLINE_LOG_TOO_BIG", 1799, "Creating index \'%-.192s\' required more than \'innodb_online_alter_log_max_size\' bytes of modification log. Please try again." },
+{ "ER_UNKNOWN_ALTER_ALGORITHM", 1800, "Unknown ALGORITHM \'%s\'" },
+{ "ER_UNKNOWN_ALTER_LOCK", 1801, "Unknown LOCK type \'%s\'" },
+{ "ER_MTS_CHANGE_MASTER_CANT_RUN_WITH_GAPS", 1802, "CHANGE MASTER cannot be executed when the slave was stopped with an error or killed in MTS mode. Consider using RESET SLAVE or START SLAVE UNTIL." },
+{ "ER_MTS_RECOVERY_FAILURE", 1803, "Cannot recover after SLAVE errored out in parallel execution mode. Additional error messages can be found in the MySQL error log." },
+{ "ER_MTS_RESET_WORKERS", 1804, "Cannot clean up worker info tables. Additional error messages can be found in the MySQL error log." },
+{ "ER_COL_COUNT_DOESNT_MATCH_CORRUPTED_V2", 1805, "Column count of %s.%s is wrong. Expected %d, found %d. The table is probably corrupted" },
+{ "ER_SLAVE_SILENT_RETRY_TRANSACTION", 1806, "Slave must silently retry current transaction" },
+{ "ER_DISCARD_FK_CHECKS_RUNNING", 1807, "There is a foreign key check running on table \'%-.192s\'. Cannot discard the table." },
+{ "ER_TABLE_SCHEMA_MISMATCH", 1808, "Schema mismatch (%s)" },
+{ "ER_TABLE_IN_SYSTEM_TABLESPACE", 1809, "Table \'%-.192s\' in system tablespace" },
+{ "ER_IO_READ_ERROR", 1810, "IO Read error: (%lu, %s) %s" },
+{ "ER_IO_WRITE_ERROR", 1811, "IO Write error: (%lu, %s) %s" },
+{ "ER_TABLESPACE_MISSING", 1812, "Tablespace is missing for table %s." },
+{ "ER_TABLESPACE_EXISTS", 1813, "Tablespace \'%-.192s\' exists." },
+{ "ER_TABLESPACE_DISCARDED", 1814, "Tablespace has been discarded for table \'%-.192s\'" },
+{ "ER_INTERNAL_ERROR", 1815, "Internal error: %s" },
+{ "ER_INNODB_IMPORT_ERROR", 1816, "ALTER TABLE %-.192s IMPORT TABLESPACE failed with error %lu : \'%s\'" },
+{ "ER_INNODB_INDEX_CORRUPT", 1817, "Index corrupt: %s" },
+{ "ER_INVALID_YEAR_COLUMN_LENGTH", 1818, "Supports only YEAR or YEAR(4) column." },
+{ "ER_NOT_VALID_PASSWORD", 1819, "Your password does not satisfy the current policy requirements" },
+{ "ER_MUST_CHANGE_PASSWORD", 1820, "You must reset your password using ALTER USER statement before executing this statement." },
+{ "ER_FK_NO_INDEX_CHILD", 1821, "Failed to add the foreign key constaint. Missing index for constraint \'%s\' in the foreign table \'%s\'" },
+{ "ER_FK_NO_INDEX_PARENT", 1822, "Failed to add the foreign key constaint. Missing index for constraint \'%s\' in the referenced table \'%s\'" },
+{ "ER_FK_FAIL_ADD_SYSTEM", 1823, "Failed to add the foreign key constraint \'%s\' to system tables" },
+{ "ER_FK_CANNOT_OPEN_PARENT", 1824, "Failed to open the referenced table \'%s\'" },
+{ "ER_FK_INCORRECT_OPTION", 1825, "Failed to add the foreign key constraint on table \'%s\'. Incorrect options in FOREIGN KEY constraint \'%s\'" },
+{ "ER_FK_DUP_NAME", 1826, "Duplicate foreign key constraint name \'%s\'" },
+{ "ER_PASSWORD_FORMAT", 1827, "The password hash doesn\'t have the expected format. Check if the correct password algorithm is being used with the PASSWORD() function." },
+{ "ER_FK_COLUMN_CANNOT_DROP", 1828, "Cannot drop column \'%-.192s\': needed in a foreign key constraint \'%-.192s\'" },
+{ "ER_FK_COLUMN_CANNOT_DROP_CHILD", 1829, "Cannot drop column \'%-.192s\': needed in a foreign key constraint \'%-.192s\' of table \'%-.192s\'" },
+{ "ER_FK_COLUMN_NOT_NULL", 1830, "Column \'%-.192s\' cannot be NOT NULL: needed in a foreign key constraint \'%-.192s\' SET NULL" },
+{ "ER_DUP_INDEX", 1831, "Duplicate index \'%-.64s\' defined on the table \'%-.64s.%-.64s\'. This is deprecated and will be disallowed in a future release." },
+{ "ER_FK_COLUMN_CANNOT_CHANGE", 1832, "Cannot change column \'%-.192s\': used in a foreign key constraint \'%-.192s\'" },
+{ "ER_FK_COLUMN_CANNOT_CHANGE_CHILD", 1833, "Cannot change column \'%-.192s\': used in a foreign key constraint \'%-.192s\' of table \'%-.192s\'" },
+{ "ER_UNUSED5", 1834, "Cannot delete rows from table which is parent in a foreign key constraint \'%-.192s\' of table \'%-.192s\'" },
+{ "ER_MALFORMED_PACKET", 1835, "Malformed communication packet." },
+{ "ER_READ_ONLY_MODE", 1836, "Running in read-only mode" },
+{ "ER_GTID_NEXT_TYPE_UNDEFINED_GROUP", 1837, "When @@SESSION.GTID_NEXT is set to a GTID, you must explicitly set it to a different value after a COMMIT or ROLLBACK. Please check GTID_NEXT variable manual page for detailed explanation. Current @@SESSION.GTID_NEXT is \'%s\'." },
+{ "ER_VARIABLE_NOT_SETTABLE_IN_SP", 1838, "The system variable %.200s cannot be set in stored procedures." },
+{ "ER_CANT_SET_GTID_PURGED_WHEN_GTID_MODE_IS_OFF", 1839, "@@GLOBAL.GTID_PURGED can only be set when @@GLOBAL.GTID_MODE = ON." },
+{ "ER_CANT_SET_GTID_PURGED_WHEN_GTID_EXECUTED_IS_NOT_EMPTY", 1840, "@@GLOBAL.GTID_PURGED can only be set when @@GLOBAL.GTID_EXECUTED is empty." },
+{ "ER_CANT_SET_GTID_PURGED_WHEN_OWNED_GTIDS_IS_NOT_EMPTY", 1841, "@@GLOBAL.GTID_PURGED can only be set when there are no ongoing transactions (not even in other clients)." },
+{ "ER_GTID_PURGED_WAS_CHANGED", 1842, "@@GLOBAL.GTID_PURGED was changed from \'%s\' to \'%s\'." },
+{ "ER_GTID_EXECUTED_WAS_CHANGED", 1843, "@@GLOBAL.GTID_EXECUTED was changed from \'%s\' to \'%s\'." },
+{ "ER_BINLOG_STMT_MODE_AND_NO_REPL_TABLES", 1844, "Cannot execute statement: impossible to write to binary log since BINLOG_FORMAT = STATEMENT, and both replicated and non replicated tables are written to." },
+{ "ER_ALTER_OPERATION_NOT_SUPPORTED", 1845, "%s is not supported for this operation. Try %s." },
+{ "ER_ALTER_OPERATION_NOT_SUPPORTED_REASON", 1846, "%s is not supported. Reason: %s. Try %s." },
+{ "ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_COPY", 1847, "COPY algorithm requires a lock" },
+{ "ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_PARTITION", 1848, "Partition specific operations do not yet support LOCK/ALGORITHM" },
+{ "ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_FK_RENAME", 1849, "Columns participating in a foreign key are renamed" },
+{ "ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_COLUMN_TYPE", 1850, "Cannot change column type INPLACE" },
+{ "ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_FK_CHECK", 1851, "Adding foreign keys needs foreign_key_checks=OFF" },
+{ "ER_UNUSED6", 1852, "Creating unique indexes with IGNORE requires COPY algorithm to remove duplicate rows" },
+{ "ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_NOPK", 1853, "Dropping a primary key is not allowed without also adding a new primary key" },
+{ "ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_AUTOINC", 1854, "Adding an auto-increment column requires a lock" },
+{ "ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_HIDDEN_FTS", 1855, "Cannot replace hidden FTS_DOC_ID with a user-visible one" },
+{ "ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_CHANGE_FTS", 1856, "Cannot drop or rename FTS_DOC_ID" },
+{ "ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_FTS", 1857, "Fulltext index creation requires a lock" },
+{ "ER_SQL_SLAVE_SKIP_COUNTER_NOT_SETTABLE_IN_GTID_MODE", 1858, "sql_slave_skip_counter can not be set when the server is running with @@GLOBAL.GTID_MODE = ON. Instead, for each transaction that you want to skip, generate an empty transaction with the same GTID as the transaction" },
+{ "ER_DUP_UNKNOWN_IN_INDEX", 1859, "Duplicate entry for key \'%-.192s\'" },
+{ "ER_IDENT_CAUSES_TOO_LONG_PATH", 1860, "Long database name and identifier for object resulted in path length exceeding %d characters. Path: \'%s\'." },
+{ "ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_NOT_NULL", 1861, "cannot silently convert NULL values, as required in this SQL_MODE" },
+{ "ER_MUST_CHANGE_PASSWORD_LOGIN", 1862, "Your password has expired. To log in you must change it using a client that supports expired passwords." },
+{ "ER_ROW_IN_WRONG_PARTITION", 1863, "Found a row in wrong partition %s" },
+{ "ER_MTS_EVENT_BIGGER_PENDING_JOBS_SIZE_MAX", 1864, "Cannot schedule event %s, relay-log name %s, position %s to Worker thread because its size %lu exceeds %lu of slave_pending_jobs_size_max." },
+{ "ER_INNODB_NO_FT_USES_PARSER", 1865, "Cannot CREATE FULLTEXT INDEX WITH PARSER on InnoDB table" },
+{ "ER_BINLOG_LOGICAL_CORRUPTION", 1866, "The binary log file \'%s\' is logically corrupted: %s" },
+{ "ER_WARN_PURGE_LOG_IN_USE", 1867, "file %s was not purged because it was being read by %d thread(s), purged only %d out of %d files." },
+{ "ER_WARN_PURGE_LOG_IS_ACTIVE", 1868, "file %s was not purged because it is the active log file." },
+{ "ER_AUTO_INCREMENT_CONFLICT", 1869, "Auto-increment value in UPDATE conflicts with internally generated values" },
+{ "WARN_ON_BLOCKHOLE_IN_RBR", 1870, "Row events are not logged for %s statements that modify BLACKHOLE tables in row format. Table(s): \'%-.192s\'" },
+{ "ER_SLAVE_MI_INIT_REPOSITORY", 1871, "Slave failed to initialize master info structure from the repository" },
+{ "ER_SLAVE_RLI_INIT_REPOSITORY", 1872, "Slave failed to initialize relay log info structure from the repository" },
+{ "ER_ACCESS_DENIED_CHANGE_USER_ERROR", 1873, "Access denied trying to change to user \'%-.48s\'@\'%-.64s\' (using password: %s). Disconnecting." },
+{ "ER_INNODB_READ_ONLY", 1874, "InnoDB is in read only mode." },
+{ "ER_STOP_SLAVE_SQL_THREAD_TIMEOUT", 1875, "STOP SLAVE command execution is incomplete: Slave SQL thread got the stop signal, thread is busy, SQL thread will stop once the current task is complete." },
+{ "ER_STOP_SLAVE_IO_THREAD_TIMEOUT", 1876, "STOP SLAVE command execution is incomplete: Slave IO thread got the stop signal, thread is busy, IO thread will stop once the current task is complete." },
+{ "ER_TABLE_CORRUPT", 1877, "Operation cannot be performed. The table \'%-.64s.%-.64s\' is missing, corrupt or contains bad data." },
+{ "ER_TEMP_FILE_WRITE_FAILURE", 1878, "Temporary file write failure." },
+{ "ER_INNODB_FT_AUX_NOT_HEX_ID", 1879, "Upgrade index name failed, please use create index(alter table) algorithm copy to rebuild index." },
+{ "ER_OLD_TEMPORALS_UPGRADED", 1880, "TIME/TIMESTAMP/DATETIME columns of old format have been upgraded to the new format." },
+{ "ER_INNODB_FORCED_RECOVERY", 1881, "Operation not allowed when innodb_forced_recovery > 0." },
+{ "ER_AES_INVALID_IV", 1882, "The initialization vector supplied to %s is too short. Must be at least %d bytes long" },
+{ "ER_PLUGIN_CANNOT_BE_UNINSTALLED", 1883, "Plugin \'%s\' cannot be uninstalled now. %s" },
+{ "ER_GTID_UNSAFE_BINLOG_SPLITTABLE_STATEMENT_AND_GTID_GROUP", 1884, "Cannot execute statement because it needs to be written to the binary log as multiple statements, and this is not allowed when @@SESSION.GTID_NEXT == \'UUID:NUMBER\'." },
+{ "ER_SLAVE_HAS_MORE_GTIDS_THAN_MASTER", 1885, "Slave has more GTIDs than the master has, using the master\'s SERVER_UUID. This may indicate that the end of the binary log was truncated or that the last binary log file was lost, e.g., after a power or disk failure when sync_binlog != 1. The master may or may not have rolled back transactions that were already replicated to the slave. Suggest to replicate any transactions that master has rolled back from slave to master, and/or commit empty transactions on master to account for transactions that have been committed on master but are not included in GTID_EXECUTED." },
+{ "ER_MISSING_KEY", 1886, "The table \'%s.%s\' does not have the necessary key(s) defined on it. Please check the table definition and create index(s) accordingly." },
+{ "WARN_NAMED_PIPE_ACCESS_EVERYONE", 1887, "Setting named_pipe_full_access_group=\'%s\' is insecure. Consider using a Windows group with fewer members." },
+{ "ER_FOUND_MISSING_GTIDS", 1888, "Cannot replicate to server with server_uuid=\'%.36s\' because the present server has purged required binary logs. The connecting server needs to replicate the missing transactions from elsewhere, or be replaced by a new server created from a more recent backup. To prevent this error in the future, consider increasing the binary log expiration period on the present server. %s." },
+{ "ER_FILE_CORRUPT", 3000, "File %s is corrupted" },
+{ "ER_ERROR_ON_MASTER", 3001, "Query partially completed on the master (error on master: %d) and was aborted. There is a chance that your master is inconsistent at this point. If you are sure that your master is ok, run this query manually on the slave and then restart the slave with SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; START SLAVE;. Query:\'%s\'" },
+{ "ER_INCONSISTENT_ERROR", 3002, "Query caused different errors on master and slave. Error on master: message (format)=\'%s\' error code=%d; Error on slave:actual message=\'%s\', error code=%d. Default database:\'%s\'. Query:\'%s\'" },
+{ "ER_STORAGE_ENGINE_NOT_LOADED", 3003, "Storage engine for table \'%s\'.\'%s\' is not loaded." },
+{ "ER_GET_STACKED_DA_WITHOUT_ACTIVE_HANDLER", 3004, "GET STACKED DIAGNOSTICS when handler not active" },
+{ "ER_WARN_LEGACY_SYNTAX_CONVERTED", 3005, "%s is no longer supported. The statement was converted to %s." },
+{ "ER_BINLOG_UNSAFE_FULLTEXT_PLUGIN", 3006, "Statement is unsafe because it uses a fulltext parser plugin which may not return the same value on the slave." },
+{ "ER_CANNOT_DISCARD_TEMPORARY_TABLE", 3007, "Cannot DISCARD/IMPORT tablespace associated with temporary table" },
+{ "ER_FK_DEPTH_EXCEEDED", 3008, "Foreign key cascade delete/update exceeds max depth of %d." },
+{ "ER_COL_COUNT_DOESNT_MATCH_PLEASE_UPDATE_V2", 3009, "Column count of %s.%s is wrong. Expected %d, found %d. Created with MySQL %d, now running %d. Please use mysql_upgrade to fix this error." },
+{ "ER_WARN_TRIGGER_DOESNT_HAVE_CREATED", 3010, "Trigger %s.%s.%s does not have CREATED attribute." },
+{ "ER_REFERENCED_TRG_DOES_NOT_EXIST", 3011, "Referenced trigger \'%s\' for the given action time and event type does not exist." },
+{ "ER_EXPLAIN_NOT_SUPPORTED", 3012, "EXPLAIN FOR CONNECTION command is supported only for SELECT/UPDATE/INSERT/DELETE/REPLACE" },
+{ "ER_INVALID_FIELD_SIZE", 3013, "Invalid size for column \'%-.192s\'." },
+{ "ER_MISSING_HA_CREATE_OPTION", 3014, "Table storage engine \'%-.64s\' found required create option missing" },
+{ "ER_ENGINE_OUT_OF_MEMORY", 3015, "Out of memory in storage engine \'%-.64s\'." },
+{ "ER_PASSWORD_EXPIRE_ANONYMOUS_USER", 3016, "The password for anonymous user cannot be expired." },
+{ "ER_SLAVE_SQL_THREAD_MUST_STOP", 3017, "This operation cannot be performed with a running slave sql thread; run STOP SLAVE SQL_THREAD first" },
+{ "ER_NO_FT_MATERIALIZED_SUBQUERY", 3018, "Cannot create FULLTEXT index on materialized subquery" },
+{ "ER_INNODB_UNDO_LOG_FULL", 3019, "Undo Log error: %s" },
+{ "ER_INVALID_ARGUMENT_FOR_LOGARITHM", 3020, "Invalid argument for logarithm" },
+{ "ER_SLAVE_CHANNEL_IO_THREAD_MUST_STOP", 3021, "This operation cannot be performed with a running slave io thread; run STOP SLAVE IO_THREAD FOR CHANNEL \'%s\' first." },
+{ "ER_WARN_OPEN_TEMP_TABLES_MUST_BE_ZERO", 3022, "This operation may not be safe when the slave has temporary tables. The tables will be kept open until the server restarts or until the tables are deleted by any replicated DROP statement. Suggest to wait until slave_open_temp_tables = 0." },
+{ "ER_WARN_ONLY_MASTER_LOG_FILE_NO_POS", 3023, "CHANGE MASTER TO with a MASTER_LOG_FILE clause but no MASTER_LOG_POS clause may not be safe. The old position value may not be valid for the new binary log file." },
+{ "ER_QUERY_TIMEOUT", 3024, "Query execution was interrupted, maximum statement execution time exceeded" },
+{ "ER_NON_RO_SELECT_DISABLE_TIMER", 3025, "Select is not a read only statement, disabling timer" },
+{ "ER_DUP_LIST_ENTRY", 3026, "Duplicate entry \'%-.192s\'." },
+{ "ER_SQL_MODE_NO_EFFECT", 3027, "\'%s\' mode no longer has any effect. Use STRICT_ALL_TABLES or STRICT_TRANS_TABLES instead." },
+{ "ER_AGGREGATE_ORDER_FOR_UNION", 3028, "Expression #%u of ORDER BY contains aggregate function and applies to a UNION" },
+{ "ER_AGGREGATE_ORDER_NON_AGG_QUERY", 3029, "Expression #%u of ORDER BY contains aggregate function and applies to the result of a non-aggregated query" },
+{ "ER_SLAVE_WORKER_STOPPED_PREVIOUS_THD_ERROR", 3030, "Slave worker has stopped after at least one previous worker encountered an error when slave-preserve-commit-order was enabled. To preserve commit order, the last transaction executed by this thread has not been committed. When restarting the slave after fixing any failed threads, you should fix this worker as well." },
+{ "ER_DONT_SUPPORT_SLAVE_PRESERVE_COMMIT_ORDER", 3031, "slave_preserve_commit_order is not supported %s." },
+{ "ER_SERVER_OFFLINE_MODE", 3032, "The server is currently in offline mode" },
+{ "ER_GIS_DIFFERENT_SRIDS", 3033, "Binary geometry function %s given two geometries of different srids: %u and %u, which should have been identical." },
+{ "ER_GIS_UNSUPPORTED_ARGUMENT", 3034, "Calling geometry function %s with unsupported types of arguments." },
+{ "ER_GIS_UNKNOWN_ERROR", 3035, "Unknown GIS error occured in function %s." },
+{ "ER_GIS_UNKNOWN_EXCEPTION", 3036, "Unknown exception caught in GIS function %s." },
+{ "ER_GIS_INVALID_DATA", 3037, "Invalid GIS data provided to function %s." },
+{ "ER_BOOST_GEOMETRY_EMPTY_INPUT_EXCEPTION", 3038, "The geometry has no data in function %s." },
+{ "ER_BOOST_GEOMETRY_CENTROID_EXCEPTION", 3039, "Unable to calculate centroid because geometry is empty in function %s." },
+{ "ER_BOOST_GEOMETRY_OVERLAY_INVALID_INPUT_EXCEPTION", 3040, "Geometry overlay calculation error: geometry data is invalid in function %s." },
+{ "ER_BOOST_GEOMETRY_TURN_INFO_EXCEPTION", 3041, "Geometry turn info calculation error: geometry data is invalid in function %s." },
+{ "ER_BOOST_GEOMETRY_SELF_INTERSECTION_POINT_EXCEPTION", 3042, "Analysis procedures of intersection points interrupted unexpectedly in function %s." },
+{ "ER_BOOST_GEOMETRY_UNKNOWN_EXCEPTION", 3043, "Unknown exception thrown in function %s." },
+{ "ER_STD_BAD_ALLOC_ERROR", 3044, "Memory allocation error: %-.256s in function %s." },
+{ "ER_STD_DOMAIN_ERROR", 3045, "Domain error: %-.256s in function %s." },
+{ "ER_STD_LENGTH_ERROR", 3046, "Length error: %-.256s in function %s." },
+{ "ER_STD_INVALID_ARGUMENT", 3047, "Invalid argument error: %-.256s in function %s." },
+{ "ER_STD_OUT_OF_RANGE_ERROR", 3048, "Out of range error: %-.256s in function %s." },
+{ "ER_STD_OVERFLOW_ERROR", 3049, "Overflow error error: %-.256s in function %s." },
+{ "ER_STD_RANGE_ERROR", 3050, "Range error: %-.256s in function %s." },
+{ "ER_STD_UNDERFLOW_ERROR", 3051, "Underflow error: %-.256s in function %s." },
+{ "ER_STD_LOGIC_ERROR", 3052, "Logic error: %-.256s in function %s." },
+{ "ER_STD_RUNTIME_ERROR", 3053, "Runtime error: %-.256s in function %s." },
+{ "ER_STD_UNKNOWN_EXCEPTION", 3054, "Unknown exception: %-.384s in function %s." },
+{ "ER_GIS_DATA_WRONG_ENDIANESS", 3055, "Geometry byte string must be little endian." },
+{ "ER_CHANGE_MASTER_PASSWORD_LENGTH", 3056, "The password provided for the replication user exceeds the maximum length of 32 characters" },
+{ "ER_USER_LOCK_WRONG_NAME", 3057, "Incorrect user-level lock name \'%-.192s\'." },
+{ "ER_USER_LOCK_DEADLOCK", 3058, "Deadlock found when trying to get user-level lock; try rolling back transaction/releasing locks and restarting lock acquisition." },
+{ "ER_REPLACE_INACCESSIBLE_ROWS", 3059, "REPLACE cannot be executed as it requires deleting rows that are not in the view" },
+{ "ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_GIS", 3060, "Do not support online operation on table with GIS index" },
+{ "ER_ILLEGAL_USER_VAR", 3061, "User variable name \'%-.100s\' is illegal" },
+{ "ER_GTID_MODE_OFF", 3062, "Cannot %s when GTID_MODE = OFF." },
+{ "ER_UNSUPPORTED_BY_REPLICATION_THREAD", 3063, "Cannot %s from a replication slave thread." },
+{ "ER_INCORRECT_TYPE", 3064, "Incorrect type for argument %s in function %s." },
+{ "ER_FIELD_IN_ORDER_NOT_SELECT", 3065, "Expression #%u of ORDER BY clause is not in SELECT list, references column \'%-.192s\' which is not in SELECT list; this is incompatible with %s" },
+{ "ER_AGGREGATE_IN_ORDER_NOT_SELECT", 3066, "Expression #%u of ORDER BY clause is not in SELECT list, contains aggregate function; this is incompatible with %s" },
+{ "ER_INVALID_RPL_WILD_TABLE_FILTER_PATTERN", 3067, "Supplied filter list contains a value which is not in the required format \'db_pattern.table_pattern\'" },
+{ "ER_NET_OK_PACKET_TOO_LARGE", 3068, "OK packet too large" },
+{ "ER_INVALID_JSON_DATA", 3069, "Invalid JSON data provided to function %s: %s" },
+{ "ER_INVALID_GEOJSON_MISSING_MEMBER", 3070, "Invalid GeoJSON data provided to function %s: Missing required member \'%s\'" },
+{ "ER_INVALID_GEOJSON_WRONG_TYPE", 3071, "Invalid GeoJSON data provided to function %s: Member \'%s\' must be of type \'%s\'" },
+{ "ER_INVALID_GEOJSON_UNSPECIFIED", 3072, "Invalid GeoJSON data provided to function %s" },
+{ "ER_DIMENSION_UNSUPPORTED", 3073, "Unsupported number of coordinate dimensions in function %s: Found %u, expected %u" },
+{ "ER_SLAVE_CHANNEL_DOES_NOT_EXIST", 3074, "Slave channel \'%s\' does not exist." },
+{ "ER_SLAVE_MULTIPLE_CHANNELS_HOST_PORT", 3075, "A slave channel \'%s\' already exists for the given host and port combination." },
+{ "ER_SLAVE_CHANNEL_NAME_INVALID_OR_TOO_LONG", 3076, "Couldn\'t create channel: Channel name is either invalid or too long." },
+{ "ER_SLAVE_NEW_CHANNEL_WRONG_REPOSITORY", 3077, "To have multiple channels, repository cannot be of type FILE; Please check the repository configuration and convert them to TABLE." },
+{ "ER_SLAVE_CHANNEL_DELETE", 3078, "Cannot delete slave info objects for channel \'%s\'." },
+{ "ER_SLAVE_MULTIPLE_CHANNELS_CMD", 3079, "Multiple channels exist on the slave. Please provide channel name as an argument." },
+{ "ER_SLAVE_MAX_CHANNELS_EXCEEDED", 3080, "Maximum number of replication channels allowed exceeded." },
+{ "ER_SLAVE_CHANNEL_MUST_STOP", 3081, "This operation cannot be performed with running replication threads; run STOP SLAVE FOR CHANNEL \'%s\' first" },
+{ "ER_SLAVE_CHANNEL_NOT_RUNNING", 3082, "This operation requires running replication threads; configure slave and run START SLAVE FOR CHANNEL \'%s\'" },
+{ "ER_SLAVE_CHANNEL_WAS_RUNNING", 3083, "Replication thread(s) for channel \'%s\' are already runnning." },
+{ "ER_SLAVE_CHANNEL_WAS_NOT_RUNNING", 3084, "Replication thread(s) for channel \'%s\' are already stopped." },
+{ "ER_SLAVE_CHANNEL_SQL_THREAD_MUST_STOP", 3085, "This operation cannot be performed with a running slave sql thread; run STOP SLAVE SQL_THREAD FOR CHANNEL \'%s\' first." },
+{ "ER_SLAVE_CHANNEL_SQL_SKIP_COUNTER", 3086, "When sql_slave_skip_counter > 0, it is not allowed to start more than one SQL thread by using \'START SLAVE [SQL_THREAD]\'. Value of sql_slave_skip_counter can only be used by one SQL thread at a time. Please use \'START SLAVE [SQL_THREAD] FOR CHANNEL\' to start the SQL thread which will use the value of sql_slave_skip_counter." },
+{ "ER_WRONG_FIELD_WITH_GROUP_V2", 3087, "Expression #%u of %s is not in GROUP BY clause and contains nonaggregated column \'%-.192s\' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by" },
+{ "ER_MIX_OF_GROUP_FUNC_AND_FIELDS_V2", 3088, "In aggregated query without GROUP BY, expression #%u of %s contains nonaggregated column \'%-.192s\'; this is incompatible with sql_mode=only_full_group_by" },
+{ "ER_WARN_DEPRECATED_SYSVAR_UPDATE", 3089, "Updating \'%s\' is deprecated. It will be made read-only in a future release." },
+{ "ER_WARN_DEPRECATED_SQLMODE", 3090, "Changing sql mode \'%s\' is deprecated. It will be removed in a future release." },
+{ "ER_CANNOT_LOG_PARTIAL_DROP_DATABASE_WITH_GTID", 3091, "DROP DATABASE failed; some tables may have been dropped but the database directory remains. The GTID has not been added to GTID_EXECUTED and the statement was not written to the binary log. Fix this as follows: (1) remove all files from the database directory %-.192s; (2) SET GTID_NEXT=\'%-.192s\'; (3) DROP DATABASE `%-.192s`." },
+{ "ER_GROUP_REPLICATION_CONFIGURATION", 3092, "The server is not configured properly to be an active member of the group. Please see more details on error log." },
+{ "ER_GROUP_REPLICATION_RUNNING", 3093, "The START GROUP_REPLICATION command failed since the group is already running." },
+{ "ER_GROUP_REPLICATION_APPLIER_INIT_ERROR", 3094, "The START GROUP_REPLICATION command failed as the applier module failed to start." },
+{ "ER_GROUP_REPLICATION_STOP_APPLIER_THREAD_TIMEOUT", 3095, "The STOP GROUP_REPLICATION command execution is incomplete: The applier thread got the stop signal while it was busy. The applier thread will stop once the current task is complete." },
+{ "ER_GROUP_REPLICATION_COMMUNICATION_LAYER_SESSION_ERROR", 3096, "The START GROUP_REPLICATION command failed as there was an error when initializing the group communication layer." },
+{ "ER_GROUP_REPLICATION_COMMUNICATION_LAYER_JOIN_ERROR", 3097, "The START GROUP_REPLICATION command failed as there was an error when joining the communication group." },
+{ "ER_BEFORE_DML_VALIDATION_ERROR", 3098, "The table does not comply with the requirements by an external plugin." },
+{ "ER_PREVENTS_VARIABLE_WITHOUT_RBR", 3099, "Cannot change the value of variable %s without binary log format as ROW." },
+{ "ER_RUN_HOOK_ERROR", 3100, "Error on observer while running replication hook \'%s\'." },
+{ "ER_TRANSACTION_ROLLBACK_DURING_COMMIT", 3101, "Plugin instructed the server to rollback the current transaction." },
+{ "ER_GENERATED_COLUMN_FUNCTION_IS_NOT_ALLOWED", 3102, "Expression of generated column \'%s\' contains a disallowed function." },
+{ "ER_UNSUPPORTED_ALTER_INPLACE_ON_VIRTUAL_COLUMN", 3103, "INPLACE ADD or DROP of virtual columns cannot be combined with other ALTER TABLE actions" },
+{ "ER_WRONG_FK_OPTION_FOR_GENERATED_COLUMN", 3104, "Cannot define foreign key with %s clause on a generated column." },
+{ "ER_NON_DEFAULT_VALUE_FOR_GENERATED_COLUMN", 3105, "The value specified for generated column \'%s\' in table \'%s\' is not allowed." },
+{ "ER_UNSUPPORTED_ACTION_ON_GENERATED_COLUMN", 3106, "\'%s\' is not supported for generated columns." },
+{ "ER_GENERATED_COLUMN_NON_PRIOR", 3107, "Generated column can refer only to generated columns defined prior to it." },
+{ "ER_DEPENDENT_BY_GENERATED_COLUMN", 3108, "Column \'%s\' has a generated column dependency." },
+{ "ER_GENERATED_COLUMN_REF_AUTO_INC", 3109, "Generated column \'%s\' cannot refer to auto-increment column." },
+{ "ER_FEATURE_NOT_AVAILABLE", 3110, "The \'%-.64s\' feature is not available; you need to remove \'%-.64s\' or use MySQL built with \'%-.64s\'" },
+{ "ER_CANT_SET_GTID_MODE", 3111, "SET @@GLOBAL.GTID_MODE = %-.64s is not allowed because %-.384s." },
+{ "ER_CANT_USE_AUTO_POSITION_WITH_GTID_MODE_OFF", 3112, "The replication receiver thread%-.192s cannot start in AUTO_POSITION mode: this server uses @@GLOBAL.GTID_MODE = OFF." },
+{ "ER_CANT_REPLICATE_ANONYMOUS_WITH_AUTO_POSITION", 3113, "Cannot replicate anonymous transaction when AUTO_POSITION = 1, at file %.512s, position %lld." },
+{ "ER_CANT_REPLICATE_ANONYMOUS_WITH_GTID_MODE_ON", 3114, "Cannot replicate anonymous transaction when @@GLOBAL.GTID_MODE = ON, at file %.512s, position %lld." },
+{ "ER_CANT_REPLICATE_GTID_WITH_GTID_MODE_OFF", 3115, "Cannot replicate GTID-transaction when @@GLOBAL.GTID_MODE = OFF, at file %.512s, position %lld." },
+{ "ER_CANT_SET_ENFORCE_GTID_CONSISTENCY_ON_WITH_ONGOING_GTID_VIOLATING_TRANSACTIONS", 3116, "Cannot set ENFORCE_GTID_CONSISTENCY = ON because there are ongoing transactions that violate GTID consistency." },
+{ "ER_SET_ENFORCE_GTID_CONSISTENCY_WARN_WITH_ONGOING_GTID_VIOLATING_TRANSACTIONS", 3117, "There are ongoing transactions that violate GTID consistency." },
+{ "ER_ACCOUNT_HAS_BEEN_LOCKED", 3118, "Access denied for user \'%-.48s\'@\'%-.64s\'. Account is locked." },
+{ "ER_WRONG_TABLESPACE_NAME", 3119, "Incorrect tablespace name `%-.192s`" },
+{ "ER_TABLESPACE_IS_NOT_EMPTY", 3120, "Tablespace `%-.192s` is not empty." },
+{ "ER_WRONG_FILE_NAME", 3121, "Incorrect File Name \'%s\'." },
+{ "ER_BOOST_GEOMETRY_INCONSISTENT_TURNS_EXCEPTION", 3122, "Inconsistent intersection points." },
+{ "ER_WARN_OPTIMIZER_HINT_SYNTAX_ERROR", 3123, "Optimizer hint syntax error" },
+{ "ER_WARN_BAD_MAX_EXECUTION_TIME", 3124, "Unsupported MAX_EXECUTION_TIME" },
+{ "ER_WARN_UNSUPPORTED_MAX_EXECUTION_TIME", 3125, "MAX_EXECUTION_TIME hint is supported by top-level standalone SELECT statements only" },
+{ "ER_WARN_CONFLICTING_HINT", 3126, "Hint %s is ignored as conflicting/duplicated" },
+{ "ER_WARN_UNKNOWN_QB_NAME", 3127, "Query block name %s is not found for %s hint" },
+{ "ER_UNRESOLVED_HINT_NAME", 3128, "Unresolved name %s for %s hint" },
+{ "ER_WARN_ON_MODIFYING_GTID_EXECUTED_TABLE", 3129, "Please do not modify the %s table. This is a mysql internal system table to store GTIDs for committed transactions. Modifying it can lead to an inconsistent GTID state." },
+{ "ER_PLUGGABLE_PROTOCOL_COMMAND_NOT_SUPPORTED", 3130, "Command not supported by pluggable protocols" },
+{ "ER_LOCKING_SERVICE_WRONG_NAME", 3131, "Incorrect locking service lock name \'%-.192s\'." },
+{ "ER_LOCKING_SERVICE_DEADLOCK", 3132, "Deadlock found when trying to get locking service lock; try releasing locks and restarting lock acquisition." },
+{ "ER_LOCKING_SERVICE_TIMEOUT", 3133, "Service lock wait timeout exceeded." },
+{ "ER_GIS_MAX_POINTS_IN_GEOMETRY_OVERFLOWED", 3134, "Parameter %s exceeds the maximum number of points in a geometry (%lu) in function %s." },
+{ "ER_SQL_MODE_MERGED", 3135, "\'NO_ZERO_DATE\', \'NO_ZERO_IN_DATE\' and \'ERROR_FOR_DIVISION_BY_ZERO\' sql modes should be used with strict mode. They will be merged with strict mode in a future release." },
+{ "ER_VTOKEN_PLUGIN_TOKEN_MISMATCH", 3136, "Version token mismatch for %.*s. Correct value %.*s" },
+{ "ER_VTOKEN_PLUGIN_TOKEN_NOT_FOUND", 3137, "Version token %.*s not found." },
+{ "ER_CANT_SET_VARIABLE_WHEN_OWNING_GTID", 3138, "Variable %-.192s cannot be changed by a client that owns a GTID. The client owns %s. Ownership is released on COMMIT or ROLLBACK." },
+{ "ER_SLAVE_CHANNEL_OPERATION_NOT_ALLOWED", 3139, "%-.192s cannot be performed on channel \'%-.192s\'." },
+{ "ER_INVALID_JSON_TEXT", 3140, "Invalid JSON text: \"%s\" at position %u in value for column \'%-.200s\'." },
+{ "ER_INVALID_JSON_TEXT_IN_PARAM", 3141, "Invalid JSON text in argument %u to function %s: \"%s\" at position %u.%-.0s" },
+{ "ER_INVALID_JSON_BINARY_DATA", 3142, "The JSON binary value contains invalid data." },
+{ "ER_INVALID_JSON_PATH", 3143, "Invalid JSON path expression. The error is around character position %u.%-.200s" },
+{ "ER_INVALID_JSON_CHARSET", 3144, "Cannot create a JSON value from a string with CHARACTER SET \'%s\'." },
+{ "ER_INVALID_JSON_CHARSET_IN_FUNCTION", 3145, "Invalid JSON character data provided to function %s: \'%s\'; utf8 is required." },
+{ "ER_INVALID_TYPE_FOR_JSON", 3146, "Invalid data type for JSON data in argument %u to function %s; a JSON string or JSON type is required." },
+{ "ER_INVALID_CAST_TO_JSON", 3147, "Cannot CAST value to JSON." },
+{ "ER_INVALID_JSON_PATH_CHARSET", 3148, "A path expression must be encoded in the utf8 character set. The path expression \'%-.200s\' is encoded in character set \'%-.200s\'." },
+{ "ER_INVALID_JSON_PATH_WILDCARD", 3149, "In this situation, path expressions may not contain the * and ** tokens." },
+{ "ER_JSON_VALUE_TOO_BIG", 3150, "The JSON value is too big to be stored in a JSON column." },
+{ "ER_JSON_KEY_TOO_BIG", 3151, "The JSON object contains a key name that is too long." },
+{ "ER_JSON_USED_AS_KEY", 3152, "JSON column \'%-.192s\' cannot be used in key specification." },
+{ "ER_JSON_VACUOUS_PATH", 3153, "The path expression \'$\' is not allowed in this context." },
+{ "ER_JSON_BAD_ONE_OR_ALL_ARG", 3154, "The oneOrAll argument to %s may take these values: \'one\' or \'all\'." },
+{ "ER_NUMERIC_JSON_VALUE_OUT_OF_RANGE", 3155, "Out of range JSON value for CAST to %s%-.0s from column %s at row %ld" },
+{ "ER_INVALID_JSON_VALUE_FOR_CAST", 3156, "Invalid JSON value for CAST to %s%-.0s from column %s at row %ld" },
+{ "ER_JSON_DOCUMENT_TOO_DEEP", 3157, "The JSON document exceeds the maximum depth." },
+{ "ER_JSON_DOCUMENT_NULL_KEY", 3158, "JSON documents may not contain NULL member names." },
+{ "ER_SECURE_TRANSPORT_REQUIRED", 3159, "Connections using insecure transport are prohibited while --require_secure_transport=ON." },
+{ "ER_NO_SECURE_TRANSPORTS_CONFIGURED", 3160, "No secure transports (SSL or Shared Memory) are configured, unable to set --require_secure_transport=ON." },
+{ "ER_DISABLED_STORAGE_ENGINE", 3161, "Storage engine %s is disabled (Table creation is disallowed)." },
+{ "ER_USER_DOES_NOT_EXIST", 3162, "User %s does not exist." },
+{ "ER_USER_ALREADY_EXISTS", 3163, "User %s already exists." },
+{ "ER_AUDIT_API_ABORT", 3164, "Aborted by Audit API (\'%-.48s\';%d)." },
+{ "ER_INVALID_JSON_PATH_ARRAY_CELL", 3165, "A path expression is not a path to a cell in an array." },
+{ "ER_BUFPOOL_RESIZE_INPROGRESS", 3166, "Another buffer pool resize is already in progress." },
+{ "ER_FEATURE_DISABLED_SEE_DOC", 3167, "The \'%s\' feature is disabled; see the documentation for \'%s\'" },
+{ "ER_SERVER_ISNT_AVAILABLE", 3168, "Server isn\'t available" },
+{ "ER_SESSION_WAS_KILLED", 3169, "Session was killed" },
+{ "ER_CAPACITY_EXCEEDED", 3170, "Memory capacity of %llu bytes for \'%s\' exceeded. %s" },
+{ "ER_CAPACITY_EXCEEDED_IN_RANGE_OPTIMIZER", 3171, "Range optimization was not done for this query." },
+{ "ER_TABLE_NEEDS_UPG_PART", 3172, "Partitioning upgrade required. Please dump/reload to fix it or do: ALTER TABLE `%-.192s`.`%-.192s` UPGRADE PARTITIONING" },
+{ "ER_CANT_WAIT_FOR_EXECUTED_GTID_SET_WHILE_OWNING_A_GTID", 3173, "The client holds ownership of the GTID %s. Therefore, WAIT_FOR_EXECUTED_GTID_SET cannot wait for this GTID." },
+{ "ER_CANNOT_ADD_FOREIGN_BASE_COL_VIRTUAL", 3174, "Cannot add foreign key on the base column of indexed virtual column." },
+{ "ER_CANNOT_CREATE_VIRTUAL_INDEX_CONSTRAINT", 3175, "Cannot create index on virtual column whose base column has foreign constraint." },
+{ "ER_ERROR_ON_MODIFYING_GTID_EXECUTED_TABLE", 3176, "Please do not modify the %s table with an XA transaction. This is an internal system table used to store GTIDs for committed transactions. Although modifying it can lead to an inconsistent GTID state, if neccessary you can modify it with a non-XA transaction." },
+{ "ER_LOCK_REFUSED_BY_ENGINE", 3177, "Lock acquisition refused by storage engine." },
+{ "ER_UNSUPPORTED_ALTER_ONLINE_ON_VIRTUAL_COLUMN", 3178, "ADD COLUMN col...VIRTUAL, ADD INDEX(col)" },
+{ "ER_MASTER_KEY_ROTATION_NOT_SUPPORTED_BY_SE", 3179, "Master key rotation is not supported by storage engine." },
+{ "ER_MASTER_KEY_ROTATION_ERROR_BY_SE", 3180, "Encryption key rotation error reported by SE: %s" },
+{ "ER_MASTER_KEY_ROTATION_BINLOG_FAILED", 3181, "Write to binlog failed. However, master key rotation has been completed successfully." },
+{ "ER_MASTER_KEY_ROTATION_SE_UNAVAILABLE", 3182, "Storage engine is not available." },
+{ "ER_TABLESPACE_CANNOT_ENCRYPT", 3183, "This tablespace can\'t be encrypted." },
+{ "ER_INVALID_ENCRYPTION_OPTION", 3184, "Invalid encryption option." },
+{ "ER_CANNOT_FIND_KEY_IN_KEYRING", 3185, "Can\'t find master key from keyring, please check in the server log if a keyring plugin is loaded and initialized successfully." },
+{ "ER_CAPACITY_EXCEEDED_IN_PARSER", 3186, "Parser bailed out for this query." },
+{ "ER_UNSUPPORTED_ALTER_ENCRYPTION_INPLACE", 3187, "Cannot alter encryption attribute by inplace algorithm." },
+{ "ER_KEYRING_UDF_KEYRING_SERVICE_ERROR", 3188, "Function \'%s\' failed because underlying keyring service returned an error. Please check if a keyring plugin is installed and that provided arguments are valid for the keyring you are using." },
+{ "ER_USER_COLUMN_OLD_LENGTH", 3189, "It seems that your db schema is old. The %s column is 77 characters long and should be 93 characters long. Please run mysql_upgrade." },
+{ "ER_CANT_RESET_MASTER", 3190, "RESET MASTER is not allowed because %-.384s." },
+{ "ER_GROUP_REPLICATION_MAX_GROUP_SIZE", 3191, "The START GROUP_REPLICATION command failed since the group already has 9 members." },
+{ "ER_CANNOT_ADD_FOREIGN_BASE_COL_STORED", 3192, "Cannot add foreign key on the base column of stored column. " },
+{ "ER_TABLE_REFERENCED", 3193, "Cannot complete the operation because table is referenced by another connection." },
+{ "ER_PARTITION_ENGINE_DEPRECATED_FOR_TABLE", 3194, "The partition engine, used by table \'%-.192s.%-.192s\', is deprecated and will be removed in a future release. Please use native partitioning instead." },
+{ "ER_WARN_USING_GEOMFROMWKB_TO_SET_SRID_ZERO", 3195, "%.192s(geometry) is deprecated and will be replaced by st_srid(geometry, 0) in a future version. Use %.192s(st_aswkb(geometry), 0) instead." },
+{ "ER_WARN_USING_GEOMFROMWKB_TO_SET_SRID", 3196, "%.192s(geometry, srid) is deprecated and will be replaced by st_srid(geometry, srid) in a future version. Use %.192s(st_aswkb(geometry), srid) instead." },
+{ "ER_XA_RETRY", 3197, "The resource manager is not able to commit the transaction branch at this time. Please retry later." },
+{ "ER_KEYRING_AWS_UDF_AWS_KMS_ERROR", 3198, "Function %s failed due to: %s." },
+{ "ER_BINLOG_UNSAFE_XA", 3199, "Statement is unsafe because it is being used inside a XA transaction. Concurrent XA transactions may deadlock on slaves when replicated using statements." },
+{ "ER_UDF_ERROR", 3200, "%s UDF failed; %s" },
+{ "ER_KEYRING_MIGRATION_FAILURE", 3201, "Can not perform keyring migration : %s" },
+{ "ER_KEYRING_ACCESS_DENIED_ERROR", 3202, "Access denied; you need %-.128s privileges for this operation" },
+{ "ER_KEYRING_MIGRATION_STATUS", 3203, "Keyring migration %s." },
+{ "ER_PLUGIN_FAILED_TO_OPEN_TABLES", 3204, "Failed to open the %s filter tables." },
+{ "ER_PLUGIN_FAILED_TO_OPEN_TABLE", 3205, "Failed to open \'%s.%s\' %s table." },
+{ "ER_AUDIT_LOG_NO_KEYRING_PLUGIN_INSTALLED", 3206, "No keyring plugin installed." },
+{ "ER_AUDIT_LOG_ENCRYPTION_PASSWORD_HAS_NOT_BEEN_SET", 3207, "Audit log encryption password has not been set; it will be generated automatically. Use audit_log_encryption_password_get to obtain the password or audit_log_encryption_password_set to set a new one." },
+{ "ER_AUDIT_LOG_COULD_NOT_CREATE_AES_KEY", 3208, "Could not create AES key. OpenSSL\'s EVP_BytesToKey function failed." },
+{ "ER_AUDIT_LOG_ENCRYPTION_PASSWORD_CANNOT_BE_FETCHED", 3209, "Audit log encryption password cannot be fetched from the keyring. Password used so far is used for encryption." },
+{ "ER_AUDIT_LOG_JSON_FILTERING_NOT_ENABLED", 3210, "Audit Log filtering has not been installed." },
+{ "ER_AUDIT_LOG_UDF_INSUFFICIENT_PRIVILEGE", 3211, "Request ignored for \'%s\'@\'%s\'. SUPER_ACL needed to perform operation" },
+{ "ER_AUDIT_LOG_SUPER_PRIVILEGE_REQUIRED", 3212, "SUPER privilege required for \'%s\'@\'%s\' user." },
+{ "ER_COULD_NOT_REINITIALIZE_AUDIT_LOG_FILTERS", 3213, "Could not reinitialize audit log filters." },
+{ "ER_AUDIT_LOG_UDF_INVALID_ARGUMENT_TYPE", 3214, "Invalid argument type" },
+{ "ER_AUDIT_LOG_UDF_INVALID_ARGUMENT_COUNT", 3215, "Invalid argument count" },
+{ "ER_AUDIT_LOG_HAS_NOT_BEEN_INSTALLED", 3216, "audit_log plugin has not been installed using INSTALL PLUGIN syntax." },
+{ "ER_AUDIT_LOG_UDF_READ_INVALID_MAX_ARRAY_LENGTH_ARG_TYPE", 3217, "Invalid \"max_array_length\" argument type." },
+{ "ER_AUDIT_LOG_UDF_READ_INVALID_MAX_ARRAY_LENGTH_ARG_VALUE", 3218, "Invalid \"max_array_length\" argument value." },
+{ "ER_AUDIT_LOG_JSON_FILTER_PARSING_ERROR", 3219, "%s" },
+{ "ER_AUDIT_LOG_JSON_FILTER_NAME_CANNOT_BE_EMPTY", 3220, "Filter name cannot be empty." },
+{ "ER_AUDIT_LOG_JSON_USER_NAME_CANNOT_BE_EMPTY", 3221, "User cannot be empty." },
+{ "ER_AUDIT_LOG_JSON_FILTER_DOES_NOT_EXISTS", 3222, "Specified filter has not been found." },
+{ "ER_AUDIT_LOG_USER_FIRST_CHARACTER_MUST_BE_ALPHANUMERIC", 3223, "First character of the user name must be alphanumeric." },
+{ "ER_AUDIT_LOG_USER_NAME_INVALID_CHARACTER", 3224, "Invalid character in the user name." },
+{ "ER_AUDIT_LOG_HOST_NAME_INVALID_CHARACTER", 3225, "Invalid character in the host name." },
+{ "WARN_DEPRECATED_MAXDB_SQL_MODE_FOR_TIMESTAMP", 3226, "With the MAXDB SQL mode enabled, TIMESTAMP is identical with DATETIME. The MAXDB SQL mode is deprecated and will be removed in a future release. Please disable the MAXDB SQL mode and use DATETIME instead." },
+{ "ER_XA_REPLICATION_FILTERS", 3227, "The use of replication filters with XA transactions is not supported, and can lead to an undefined state in the replication slave." },
+{ "ER_CANT_OPEN_ERROR_LOG", 3228, "Could not open file \'%s\' for error logging%s%s" },
+{ "ER_GROUPING_ON_TIMESTAMP_IN_DST", 3229, "Grouping on temporal is non-deterministic for timezones having DST. Please consider switching to UTC for this query." },
+{ "ER_CANT_START_SERVER_NAMED_PIPE", 3230, "Can\'t start server : Named Pipe \"%s\" already in use." },
+{ "ER_WRITE_SET_EXCEEDS_LIMIT", 3231, "The size of writeset data for the current transaction exceeds a limit imposed by an external component. If using Group Replication check \'group_replication_transaction_size_limit\'." },
+{ "ER_DEPRECATED_TLS_VERSION_SESSION", 3232, "Accepted a connection with deprecated protocol \'%s\' for account `%s`@`%s` from host `%s`. Client supplied username `%s`" },
+{ "ER_WARN_DEPRECATED_TLS_VERSION", 3233, "A deprecated TLS version %s is enabled. Please use TLSv1.2 or higher." },
+{ "ER_WARN_WRONG_NATIVE_TABLE_STRUCTURE", 3234, "Optional native table \'%-.64s\'.\'%-.64s\' has the wrong structure or is missing." },
diff --git a/db/include/mysqld_error.h b/db/include/mysqld_error.h
index 0e8ee93..0eb96b5 100644
--- a/db/include/mysqld_error.h
+++ b/db/include/mysqld_error.h
@@ -1,36 +1,13 @@
-/* Copyright (c) 2000, 2022, Oracle and/or its affiliates.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License, version 2.0,
- as published by the Free Software Foundation.
-
- This program is also distributed with certain software (including
- but not limited to OpenSSL) that is licensed under separate terms,
- as designated in a particular file or component or in included license
- documentation. The authors of MySQL hereby grant you an additional
- permission to link the program and your derivative works with the
- separately licensed software that they have included with MySQL.
-
- 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, version 2.0, 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 */
/* Autogenerated file, please don't edit */
#ifndef MYSQLD_ERROR_INCLUDED
#define MYSQLD_ERROR_INCLUDED
-static const int errmsg_section_start[] = { 1000, 3000, 3500, 10000 };
-static const int errmsg_section_size[] = { 888, 239, 624, 3957 };
+static const int errmsg_section_start[] = { 1000, 3000 };
+static const int errmsg_section_size[] = { 889, 235 };
-static const int total_error_count = 5708;
-
-//#define OBSOLETE_ER_HASHCHK 1000
-//#define OBSOLETE_ER_NISAMCHK 1001
+#define ER_HASHCHK 1000
+#define ER_NISAMCHK 1001
#define ER_NO 1002
#define ER_YES 1003
#define ER_CANT_CREATE_FILE 1004
@@ -38,27 +15,27 @@ static const int total_error_count = 5708;
#define ER_CANT_CREATE_DB 1006
#define ER_DB_CREATE_EXISTS 1007
#define ER_DB_DROP_EXISTS 1008
-//#define OBSOLETE_ER_DB_DROP_DELETE 1009
+#define ER_DB_DROP_DELETE 1009
#define ER_DB_DROP_RMDIR 1010
-//#define OBSOLETE_ER_CANT_DELETE_FILE 1011
+#define ER_CANT_DELETE_FILE 1011
#define ER_CANT_FIND_SYSTEM_REC 1012
#define ER_CANT_GET_STAT 1013
-//#define OBSOLETE_ER_CANT_GET_WD 1014
+#define ER_CANT_GET_WD 1014
#define ER_CANT_LOCK 1015
#define ER_CANT_OPEN_FILE 1016
#define ER_FILE_NOT_FOUND 1017
#define ER_CANT_READ_DIR 1018
-//#define OBSOLETE_ER_CANT_SET_WD 1019
+#define ER_CANT_SET_WD 1019
#define ER_CHECKREAD 1020
-//#define OBSOLETE_ER_DISK_FULL 1021
+#define ER_DISK_FULL 1021
#define ER_DUP_KEY 1022
-//#define OBSOLETE_ER_ERROR_ON_CLOSE 1023
+#define ER_ERROR_ON_CLOSE 1023
#define ER_ERROR_ON_READ 1024
#define ER_ERROR_ON_RENAME 1025
#define ER_ERROR_ON_WRITE 1026
#define ER_FILE_USED 1027
-//#define OBSOLETE_ER_FILSORT_ABORT 1028
-//#define OBSOLETE_ER_FORM_NOT_FOUND 1029
+#define ER_FILSORT_ABORT 1028
+#define ER_FORM_NOT_FOUND 1029
#define ER_GET_ERRNO 1030
#define ER_ILLEGAL_HA 1031
#define ER_KEY_NOT_FOUND 1032
@@ -68,7 +45,7 @@ static const int total_error_count = 5708;
#define ER_OPEN_AS_READONLY 1036
#define ER_OUTOFMEMORY 1037
#define ER_OUT_OF_SORTMEMORY 1038
-//#define OBSOLETE_ER_UNEXPECTED_EOF 1039
+#define ER_UNEXPECTED_EOF 1039
#define ER_CON_COUNT_ERROR 1040
#define ER_OUT_OF_RESOURCES 1041
#define ER_BAD_HOST_ERROR 1042
@@ -106,8 +83,8 @@ static const int total_error_count = 5708;
#define ER_TOO_BIG_FIELDLENGTH 1074
#define ER_WRONG_AUTO_KEY 1075
#define ER_READY 1076
-//#define OBSOLETE_ER_NORMAL_SHUTDOWN 1077
-//#define OBSOLETE_ER_GOT_SIGNAL 1078
+#define ER_NORMAL_SHUTDOWN 1077
+#define ER_GOT_SIGNAL 1078
#define ER_SHUTDOWN_COMPLETE 1079
#define ER_FORCING_CLOSE 1080
#define ER_IPSOCK_ERROR 1081
@@ -149,7 +126,7 @@ static const int total_error_count = 5708;
#define ER_TOO_MANY_FIELDS 1117
#define ER_TOO_BIG_ROWSIZE 1118
#define ER_STACK_OVERRUN 1119
-#define ER_WRONG_OUTER_JOIN_UNUSED 1120
+#define ER_WRONG_OUTER_JOIN 1120
#define ER_NULL_COLUMN_IN_INDEX 1121
#define ER_CANT_FIND_UDF 1122
#define ER_CANT_INITIALIZE_UDF 1123
@@ -179,8 +156,8 @@ static const int total_error_count = 5708;
#define ER_NONEXISTING_TABLE_GRANT 1147
#define ER_NOT_ALLOWED_COMMAND 1148
#define ER_SYNTAX_ERROR 1149
-//#define OBSOLETE_ER_UNUSED1 1150
-//#define OBSOLETE_ER_UNUSED2 1151
+#define ER_UNUSED1 1150
+#define ER_UNUSED2 1151
#define ER_ABORTING_CONNECTION 1152
#define ER_NET_PACKET_TOO_LARGE 1153
#define ER_NET_READ_ERROR_FROM_PIPE 1154
@@ -194,7 +171,7 @@ static const int total_error_count = 5708;
#define ER_TOO_LONG_STRING 1162
#define ER_TABLE_CANT_HANDLE_BLOB 1163
#define ER_TABLE_CANT_HANDLE_AUTO_INCREMENT 1164
-//#define OBSOLETE_ER_UNUSED3 1165
+#define ER_UNUSED3 1165
#define ER_WRONG_COLUMN_NAME 1166
#define ER_WRONG_KEY_COLUMN 1167
#define ER_WRONG_MRG_TABLE 1168
@@ -203,7 +180,7 @@ static const int total_error_count = 5708;
#define ER_PRIMARY_CANT_HAVE_NULL 1171
#define ER_TOO_MANY_ROWS 1172
#define ER_REQUIRES_PRIMARY_KEY 1173
-//#define OBSOLETE_ER_NO_RAID_COMPILED 1174
+#define ER_NO_RAID_COMPILED 1174
#define ER_UPDATE_WITHOUT_KEY_IN_SAFE_MODE 1175
#define ER_KEY_DOES_NOT_EXITS 1176
#define ER_CHECK_NO_SUCH_TABLE 1177
@@ -212,11 +189,11 @@ static const int total_error_count = 5708;
#define ER_ERROR_DURING_COMMIT 1180
#define ER_ERROR_DURING_ROLLBACK 1181
#define ER_ERROR_DURING_FLUSH_LOGS 1182
-//#define OBSOLETE_ER_ERROR_DURING_CHECKPOINT 1183
+#define ER_ERROR_DURING_CHECKPOINT 1183
#define ER_NEW_ABORTING_CONNECTION 1184
-//#define OBSOLETE_ER_DUMP_NOT_IMPLEMENTED 1185
-//#define OBSOLETE_ER_FLUSH_MASTER_BINLOG_CLOSED 1186
-//#define OBSOLETE_ER_INDEX_REBUILD 1187
+#define ER_DUMP_NOT_IMPLEMENTED 1185
+#define ER_FLUSH_MASTER_BINLOG_CLOSED 1186
+#define ER_INDEX_REBUILD 1187
#define ER_MASTER 1188
#define ER_MASTER_NET_READ 1189
#define ER_MASTER_NET_WRITE 1190
@@ -227,7 +204,7 @@ static const int total_error_count = 5708;
#define ER_CRASHED_ON_REPAIR 1195
#define ER_WARNING_NOT_COMPLETE_ROLLBACK 1196
#define ER_TRANS_CACHE_FULL 1197
-//#define OBSOLETE_ER_SLAVE_MUST_STOP 1198
+#define ER_SLAVE_MUST_STOP 1198
#define ER_SLAVE_NOT_RUNNING 1199
#define ER_BAD_SLAVE 1200
#define ER_MASTER_INFO 1201
@@ -237,18 +214,18 @@ static const int total_error_count = 5708;
#define ER_LOCK_WAIT_TIMEOUT 1205
#define ER_LOCK_TABLE_FULL 1206
#define ER_READ_ONLY_TRANSACTION 1207
-//#define OBSOLETE_ER_DROP_DB_WITH_READ_LOCK 1208
-//#define OBSOLETE_ER_CREATE_DB_WITH_READ_LOCK 1209
+#define ER_DROP_DB_WITH_READ_LOCK 1208
+#define ER_CREATE_DB_WITH_READ_LOCK 1209
#define ER_WRONG_ARGUMENTS 1210
#define ER_NO_PERMISSION_TO_CREATE_USER 1211
-//#define OBSOLETE_ER_UNION_TABLES_IN_DIFFERENT_DIR 1212
+#define ER_UNION_TABLES_IN_DIFFERENT_DIR 1212
#define ER_LOCK_DEADLOCK 1213
#define ER_TABLE_CANT_HANDLE_FT 1214
#define ER_CANNOT_ADD_FOREIGN 1215
#define ER_NO_REFERENCED_ROW 1216
#define ER_ROW_IS_REFERENCED 1217
#define ER_CONNECT_TO_MASTER 1218
-//#define OBSOLETE_ER_QUERY_ON_MASTER 1219
+#define ER_QUERY_ON_MASTER 1219
#define ER_ERROR_WHEN_EXECUTING_COMMAND 1220
#define ER_WRONG_USAGE 1221
#define ER_WRONG_NUMBER_OF_COLUMNS_IN_SELECT 1222
@@ -274,7 +251,7 @@ static const int total_error_count = 5708;
#define ER_SUBQUERY_NO_1_ROW 1242
#define ER_UNKNOWN_STMT_HANDLER 1243
#define ER_CORRUPT_HELP_DB 1244
-//#define OBSOLETE_ER_CYCLIC_REFERENCE 1245
+#define ER_CYCLIC_REFERENCE 1245
#define ER_AUTO_CONVERT 1246
#define ER_ILLEGAL_REFERENCE 1247
#define ER_DERIVED_MUST_HAVE_ALIAS 1248
@@ -283,8 +260,8 @@ static const int total_error_count = 5708;
#define ER_NOT_SUPPORTED_AUTH_MODE 1251
#define ER_SPATIAL_CANT_HAVE_NULL 1252
#define ER_COLLATION_CHARSET_MISMATCH 1253
-//#define OBSOLETE_ER_SLAVE_WAS_RUNNING 1254
-//#define OBSOLETE_ER_SLAVE_WAS_NOT_RUNNING 1255
+#define ER_SLAVE_WAS_RUNNING 1254
+#define ER_SLAVE_WAS_NOT_RUNNING 1255
#define ER_TOO_BIG_FOR_UNCOMPRESS 1256
#define ER_ZLIB_Z_MEM_ERROR 1257
#define ER_ZLIB_Z_BUF_ERROR 1258
@@ -297,21 +274,21 @@ static const int total_error_count = 5708;
#define WARN_DATA_TRUNCATED 1265
#define ER_WARN_USING_OTHER_HANDLER 1266
#define ER_CANT_AGGREGATE_2COLLATIONS 1267
-//#define OBSOLETE_ER_DROP_USER 1268
+#define ER_DROP_USER 1268
#define ER_REVOKE_GRANTS 1269
#define ER_CANT_AGGREGATE_3COLLATIONS 1270
#define ER_CANT_AGGREGATE_NCOLLATIONS 1271
#define ER_VARIABLE_IS_NOT_STRUCT 1272
#define ER_UNKNOWN_COLLATION 1273
#define ER_SLAVE_IGNORED_SSL_PARAMS 1274
-//#define OBSOLETE_ER_SERVER_IS_IN_SECURE_AUTH_MODE 1275
+#define ER_SERVER_IS_IN_SECURE_AUTH_MODE 1275
#define ER_WARN_FIELD_RESOLVED 1276
#define ER_BAD_SLAVE_UNTIL_COND 1277
#define ER_MISSING_SKIP_SLAVE 1278
#define ER_UNTIL_COND_IGNORED 1279
#define ER_WRONG_NAME_FOR_INDEX 1280
#define ER_WRONG_NAME_FOR_CATALOG 1281
-//#define OBSOLETE_ER_WARN_QC_RESIZE 1282
+#define ER_WARN_QC_RESIZE 1282
#define ER_BAD_FT_COLUMN 1283
#define ER_UNKNOWN_KEY_CACHE 1284
#define ER_WARN_HOSTNAME_WONT_WORK 1285
@@ -322,7 +299,7 @@ static const int total_error_count = 5708;
#define ER_OPTION_PREVENTS_STATEMENT 1290
#define ER_DUPLICATED_VALUE_IN_TYPE 1291
#define ER_TRUNCATED_WRONG_VALUE 1292
-//#define OBSOLETE_ER_TOO_MUCH_AUTO_TIMESTAMP_COLS 1293
+#define ER_TOO_MUCH_AUTO_TIMESTAMP_COLS 1293
#define ER_INVALID_ON_UPDATE 1294
#define ER_UNSUPPORTED_PS 1295
#define ER_GET_ERRMSG 1296
@@ -375,10 +352,10 @@ static const int total_error_count = 5708;
#define ER_FPARSER_ERROR_IN_PARAMETER 1343
#define ER_FPARSER_EOF_IN_UNKNOWN_PARAMETER 1344
#define ER_VIEW_NO_EXPLAIN 1345
-//#define OBSOLETE_ER_FRM_UNKNOWN_TYPE 1346
+#define ER_FRM_UNKNOWN_TYPE 1346
#define ER_WRONG_OBJECT 1347
#define ER_NONUPDATEABLE_COLUMN 1348
-//#define OBSOLETE_ER_VIEW_SELECT_DERIVED_UNUSED 1349
+#define ER_VIEW_SELECT_DERIVED_UNUSED 1349
#define ER_VIEW_SELECT_CLAUSE 1350
#define ER_VIEW_SELECT_VARIABLE 1351
#define ER_VIEW_SELECT_TMPTABLE 1352
@@ -387,7 +364,7 @@ static const int total_error_count = 5708;
#define ER_WARN_VIEW_WITHOUT_KEY 1355
#define ER_VIEW_INVALID 1356
#define ER_SP_NO_DROP_SP 1357
-//#define OBSOLETE_ER_SP_GOTO_IN_HNDLR 1358
+#define ER_SP_GOTO_IN_HNDLR 1358
#define ER_TRG_ALREADY_EXISTS 1359
#define ER_TRG_DOES_NOT_EXIST 1360
#define ER_TRG_ON_VIEW_OR_TEMP_TABLE 1361
@@ -401,7 +378,7 @@ static const int total_error_count = 5708;
#define ER_VIEW_CHECK_FAILED 1369
#define ER_PROCACCESS_DENIED_ERROR 1370
#define ER_RELAY_LOG_FAIL 1371
-//#define OBSOLETE_ER_PASSWD_LENGTH 1372
+#define ER_PASSWD_LENGTH 1372
#define ER_UNKNOWN_TARGET_BINLOG 1373
#define ER_IO_ERR_LOG_INDEX_READ 1374
#define ER_BINLOG_PURGE_PROHIBITED 1375
@@ -412,13 +389,13 @@ static const int total_error_count = 5708;
#define ER_RELAY_LOG_INIT 1380
#define ER_NO_BINARY_LOGGING 1381
#define ER_RESERVED_SYNTAX 1382
-//#define OBSOLETE_ER_WSAS_FAILED 1383
-//#define OBSOLETE_ER_DIFF_GROUPS_PROC 1384
-//#define OBSOLETE_ER_NO_GROUP_FOR_PROC 1385
-//#define OBSOLETE_ER_ORDER_WITH_PROC 1386
-//#define OBSOLETE_ER_LOGGING_PROHIBIT_CHANGING_OF 1387
-//#define OBSOLETE_ER_NO_FILE_MAPPING 1388
-//#define OBSOLETE_ER_WRONG_MAGIC 1389
+#define ER_WSAS_FAILED 1383
+#define ER_DIFF_GROUPS_PROC 1384
+#define ER_NO_GROUP_FOR_PROC 1385
+#define ER_ORDER_WITH_PROC 1386
+#define ER_LOGGING_PROHIBIT_CHANGING_OF 1387
+#define ER_NO_FILE_MAPPING 1388
+#define ER_WRONG_MAGIC 1389
#define ER_PS_MANY_PARAM 1390
#define ER_KEY_PART_0 1391
#define ER_VIEW_CHECKSUM 1392
@@ -446,10 +423,10 @@ static const int total_error_count = 5708;
#define ER_SP_NOT_VAR_ARG 1414
#define ER_SP_NO_RETSET 1415
#define ER_CANT_CREATE_GEOMETRY_OBJECT 1416
-//#define OBSOLETE_ER_FAILED_ROUTINE_BREAK_BINLOG 1417
+#define ER_FAILED_ROUTINE_BREAK_BINLOG 1417
#define ER_BINLOG_UNSAFE_ROUTINE 1418
#define ER_BINLOG_CREATE_ROUTINE_NEED_SUPER 1419
-//#define OBSOLETE_ER_EXEC_STMT_WITH_OPEN_CURSOR 1420
+#define ER_EXEC_STMT_WITH_OPEN_CURSOR 1420
#define ER_STMT_HAS_NO_OPEN_CURSOR 1421
#define ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG 1422
#define ER_NO_DEFAULT_FOR_VIEW_FIELD 1423
@@ -463,7 +440,7 @@ static const int total_error_count = 5708;
#define ER_FOREIGN_DATA_SOURCE_DOESNT_EXIST 1431
#define ER_FOREIGN_DATA_STRING_INVALID_CANT_CREATE 1432
#define ER_FOREIGN_DATA_STRING_INVALID 1433
-//#define OBSOLETE_ER_CANT_CREATE_FEDERATED_TABLE 1434
+#define ER_CANT_CREATE_FEDERATED_TABLE 1434
#define ER_TRG_IN_WRONG_SCHEMA 1435
#define ER_STACK_OVERRUN_NEED_MORE 1436
#define ER_TOO_LONG_BODY 1437
@@ -475,7 +452,7 @@ static const int total_error_count = 5708;
#define ER_VIEW_PREVENT_UPDATE 1443
#define ER_PS_NO_RECURSION 1444
#define ER_SP_CANT_SET_AUTOCOMMIT 1445
-//#define OBSOLETE_ER_MALFORMED_DEFINER 1446
+#define ER_MALFORMED_DEFINER 1446
#define ER_VIEW_FRM_NO_USER 1447
#define ER_VIEW_OTHER_USER 1448
#define ER_NO_SUCH_USER 1449
@@ -486,7 +463,7 @@ static const int total_error_count = 5708;
#define ER_TRG_NO_DEFINER 1454
#define ER_OLD_FILE_FORMAT 1455
#define ER_SP_RECURSION_LIMIT 1456
-//#define OBSOLETE_ER_SP_PROC_TABLE_CORRUPT 1457
+#define ER_SP_PROC_TABLE_CORRUPT 1457
#define ER_SP_WRONG_NAME 1458
#define ER_TABLE_NEEDS_UPGRADE 1459
#define ER_SP_NO_AGGREGATE 1460
@@ -511,14 +488,14 @@ static const int total_error_count = 5708;
#define ER_PARTITION_REQUIRES_VALUES_ERROR 1479
#define ER_PARTITION_WRONG_VALUES_ERROR 1480
#define ER_PARTITION_MAXVALUE_ERROR 1481
-//#define OBSOLETE_ER_PARTITION_SUBPARTITION_ERROR 1482
-//#define OBSOLETE_ER_PARTITION_SUBPART_MIX_ERROR 1483
+#define ER_PARTITION_SUBPARTITION_ERROR 1482
+#define ER_PARTITION_SUBPART_MIX_ERROR 1483
#define ER_PARTITION_WRONG_NO_PART_ERROR 1484
#define ER_PARTITION_WRONG_NO_SUBPART_ERROR 1485
#define ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR 1486
-//#define OBSOLETE_ER_NO_CONST_EXPR_IN_RANGE_OR_LIST_ERROR 1487
+#define ER_NO_CONST_EXPR_IN_RANGE_OR_LIST_ERROR 1487
#define ER_FIELD_NOT_FOUND_PART_ERROR 1488
-//#define OBSOLETE_ER_LIST_OF_FIELDS_ONLY_IN_HASH_ERROR 1489
+#define ER_LIST_OF_FIELDS_ONLY_IN_HASH_ERROR 1489
#define ER_INCONSISTENT_PARTITION_INFO_ERROR 1490
#define ER_PARTITION_FUNC_NOT_ALLOWED_ERROR 1491
#define ER_PARTITIONS_MUST_BE_DEFINED_ERROR 1492
@@ -551,7 +528,7 @@ static const int total_error_count = 5708;
#define ER_CONSECUTIVE_REORG_PARTITIONS 1519
#define ER_REORG_OUTSIDE_RANGE 1520
#define ER_PARTITION_FUNCTION_FAILURE 1521
-//#define OBSOLETE_ER_PART_STATE_ERROR 1522
+#define ER_PART_STATE_ERROR 1522
#define ER_LIMITED_PART_RANGE 1523
#define ER_PLUGIN_IS_NOT_LOADED 1524
#define ER_WRONG_VALUE 1525
@@ -564,49 +541,49 @@ static const int total_error_count = 5708;
#define ER_SIZE_OVERFLOW_ERROR 1532
#define ER_ALTER_FILEGROUP_FAILED 1533
#define ER_BINLOG_ROW_LOGGING_FAILED 1534
-//#define OBSOLETE_ER_BINLOG_ROW_WRONG_TABLE_DEF 1535
-//#define OBSOLETE_ER_BINLOG_ROW_RBR_TO_SBR 1536
+#define ER_BINLOG_ROW_WRONG_TABLE_DEF 1535
+#define ER_BINLOG_ROW_RBR_TO_SBR 1536
#define ER_EVENT_ALREADY_EXISTS 1537
-//#define OBSOLETE_ER_EVENT_STORE_FAILED 1538
+#define ER_EVENT_STORE_FAILED 1538
#define ER_EVENT_DOES_NOT_EXIST 1539
-//#define OBSOLETE_ER_EVENT_CANT_ALTER 1540
-//#define OBSOLETE_ER_EVENT_DROP_FAILED 1541
+#define ER_EVENT_CANT_ALTER 1540
+#define ER_EVENT_DROP_FAILED 1541
#define ER_EVENT_INTERVAL_NOT_POSITIVE_OR_TOO_BIG 1542
#define ER_EVENT_ENDS_BEFORE_STARTS 1543
#define ER_EVENT_EXEC_TIME_IN_THE_PAST 1544
-//#define OBSOLETE_ER_EVENT_OPEN_TABLE_FAILED 1545
-//#define OBSOLETE_ER_EVENT_NEITHER_M_EXPR_NOR_M_AT 1546
-//#define OBSOLETE_ER_COL_COUNT_DOESNT_MATCH_CORRUPTED 1547
-//#define OBSOLETE_ER_CANNOT_LOAD_FROM_TABLE 1548
-//#define OBSOLETE_ER_EVENT_CANNOT_DELETE 1549
-//#define OBSOLETE_ER_EVENT_COMPILE_ERROR 1550
+#define ER_EVENT_OPEN_TABLE_FAILED 1545
+#define ER_EVENT_NEITHER_M_EXPR_NOR_M_AT 1546
+#define ER_OBSOLETE_COL_COUNT_DOESNT_MATCH_CORRUPTED 1547
+#define ER_OBSOLETE_CANNOT_LOAD_FROM_TABLE 1548
+#define ER_EVENT_CANNOT_DELETE 1549
+#define ER_EVENT_COMPILE_ERROR 1550
#define ER_EVENT_SAME_NAME 1551
-//#define OBSOLETE_ER_EVENT_DATA_TOO_LONG 1552
+#define ER_EVENT_DATA_TOO_LONG 1552
#define ER_DROP_INDEX_FK 1553
#define ER_WARN_DEPRECATED_SYNTAX_WITH_VER 1554
-//#define OBSOLETE_ER_CANT_WRITE_LOCK_LOG_TABLE 1555
+#define ER_CANT_WRITE_LOCK_LOG_TABLE 1555
#define ER_CANT_LOCK_LOG_TABLE 1556
#define ER_FOREIGN_DUPLICATE_KEY_OLD_UNUSED 1557
#define ER_COL_COUNT_DOESNT_MATCH_PLEASE_UPDATE 1558
-//#define OBSOLETE_ER_TEMP_TABLE_PREVENTS_SWITCH_OUT_OF_RBR 1559
+#define ER_TEMP_TABLE_PREVENTS_SWITCH_OUT_OF_RBR 1559
#define ER_STORED_FUNCTION_PREVENTS_SWITCH_BINLOG_FORMAT 1560
-//#define OBSOLETE_ER_NDB_CANT_SWITCH_BINLOG_FORMAT 1561
+#define ER_NDB_CANT_SWITCH_BINLOG_FORMAT 1561
#define ER_PARTITION_NO_TEMPORARY 1562
#define ER_PARTITION_CONST_DOMAIN_ERROR 1563
#define ER_PARTITION_FUNCTION_IS_NOT_ALLOWED 1564
-//#define OBSOLETE_ER_DDL_LOG_ERROR_UNUSED 1565
+#define ER_DDL_LOG_ERROR 1565
#define ER_NULL_IN_VALUES_LESS_THAN 1566
#define ER_WRONG_PARTITION_NAME 1567
#define ER_CANT_CHANGE_TX_CHARACTERISTICS 1568
#define ER_DUP_ENTRY_AUTOINCREMENT_CASE 1569
-//#define OBSOLETE_ER_EVENT_MODIFY_QUEUE_ERROR 1570
+#define ER_EVENT_MODIFY_QUEUE_ERROR 1570
#define ER_EVENT_SET_VAR_ERROR 1571
#define ER_PARTITION_MERGE_ERROR 1572
-//#define OBSOLETE_ER_CANT_ACTIVATE_LOG 1573
-//#define OBSOLETE_ER_RBR_NOT_AVAILABLE 1574
+#define ER_CANT_ACTIVATE_LOG 1573
+#define ER_RBR_NOT_AVAILABLE 1574
#define ER_BASE64_DECODE_ERROR 1575
#define ER_EVENT_RECURSION_FORBIDDEN 1576
-//#define OBSOLETE_ER_EVENTS_DB_ERROR 1577
+#define ER_EVENTS_DB_ERROR 1577
#define ER_ONLY_INTEGERS_ALLOWED 1578
#define ER_UNSUPORTED_LOG_ENGINE 1579
#define ER_BAD_LOG_STATEMENT 1580
@@ -619,40 +596,40 @@ static const int total_error_count = 5708;
#define ER_BINLOG_PURGE_EMFILE 1587
#define ER_EVENT_CANNOT_CREATE_IN_THE_PAST 1588
#define ER_EVENT_CANNOT_ALTER_IN_THE_PAST 1589
-//#define OBSOLETE_ER_SLAVE_INCIDENT 1590
+#define ER_SLAVE_INCIDENT 1590
#define ER_NO_PARTITION_FOR_GIVEN_VALUE_SILENT 1591
#define ER_BINLOG_UNSAFE_STATEMENT 1592
-#define ER_BINLOG_FATAL_ERROR 1593
-//#define OBSOLETE_ER_SLAVE_RELAY_LOG_READ_FAILURE 1594
-//#define OBSOLETE_ER_SLAVE_RELAY_LOG_WRITE_FAILURE 1595
-//#define OBSOLETE_ER_SLAVE_CREATE_EVENT_FAILURE 1596
-//#define OBSOLETE_ER_SLAVE_MASTER_COM_FAILURE 1597
+#define ER_SLAVE_FATAL_ERROR 1593
+#define ER_SLAVE_RELAY_LOG_READ_FAILURE 1594
+#define ER_SLAVE_RELAY_LOG_WRITE_FAILURE 1595
+#define ER_SLAVE_CREATE_EVENT_FAILURE 1596
+#define ER_SLAVE_MASTER_COM_FAILURE 1597
#define ER_BINLOG_LOGGING_IMPOSSIBLE 1598
#define ER_VIEW_NO_CREATION_CTX 1599
#define ER_VIEW_INVALID_CREATION_CTX 1600
-//#define OBSOLETE_ER_SR_INVALID_CREATION_CTX 1601
+#define ER_SR_INVALID_CREATION_CTX 1601
#define ER_TRG_CORRUPTED_FILE 1602
#define ER_TRG_NO_CREATION_CTX 1603
#define ER_TRG_INVALID_CREATION_CTX 1604
#define ER_EVENT_INVALID_CREATION_CTX 1605
#define ER_TRG_CANT_OPEN_TABLE 1606
-//#define OBSOLETE_ER_CANT_CREATE_SROUTINE 1607
-//#define OBSOLETE_ER_NEVER_USED 1608
+#define ER_CANT_CREATE_SROUTINE 1607
+#define ER_NEVER_USED 1608
#define ER_NO_FORMAT_DESCRIPTION_EVENT_BEFORE_BINLOG_STATEMENT 1609
#define ER_SLAVE_CORRUPT_EVENT 1610
-//#define OBSOLETE_ER_LOAD_DATA_INVALID_COLUMN_UNUSED 1611
+#define ER_LOAD_DATA_INVALID_COLUMN_UNUSED 1611
#define ER_LOG_PURGE_NO_FILE 1612
#define ER_XA_RBTIMEOUT 1613
#define ER_XA_RBDEADLOCK 1614
#define ER_NEED_REPREPARE 1615
-//#define OBSOLETE_ER_DELAYED_NOT_SUPPORTED 1616
+#define ER_DELAYED_NOT_SUPPORTED 1616
#define WARN_NO_MASTER_INFO 1617
#define WARN_OPTION_IGNORED 1618
#define ER_PLUGIN_DELETE_BUILTIN 1619
#define WARN_PLUGIN_BUSY 1620
#define ER_VARIABLE_IS_READONLY 1621
#define ER_WARN_ENGINE_TRANSACTION_ROLLBACK 1622
-//#define OBSOLETE_ER_SLAVE_HEARTBEAT_FAILURE 1623
+#define ER_SLAVE_HEARTBEAT_FAILURE 1623
#define ER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE 1624
#define ER_NDB_REPLICATION_SCHEMA_ERROR 1625
#define ER_CONFLICT_FN_PARSE_ERROR 1626
@@ -680,7 +657,7 @@ static const int total_error_count = 5708;
#define ER_COND_ITEM_TOO_LONG 1648
#define ER_UNKNOWN_LOCALE 1649
#define ER_SLAVE_IGNORE_SERVER_IDS 1650
-//#define OBSOLETE_ER_QUERY_CACHE_DISABLED 1651
+#define ER_QUERY_CACHE_DISABLED 1651
#define ER_SAME_NAME_PARTITION_FIELD 1652
#define ER_PARTITION_COLUMN_LIST_ERROR 1653
#define ER_WRONG_TYPE_COLUMN_VALUE_ERROR 1654
@@ -698,7 +675,7 @@ static const int total_error_count = 5708;
#define ER_BINLOG_ROW_INJECTION_AND_STMT_MODE 1666
#define ER_BINLOG_MULTIPLE_ENGINES_AND_SELF_LOGGING_ENGINE 1667
#define ER_BINLOG_UNSAFE_LIMIT 1668
-//#define OBSOLETE_ER_UNUSED4 1669
+#define ER_UNUSED4 1669
#define ER_BINLOG_UNSAFE_SYSTEM_TABLE 1670
#define ER_BINLOG_UNSAFE_AUTOINC_COLUMNS 1671
#define ER_BINLOG_UNSAFE_UDF 1672
@@ -706,7 +683,7 @@ static const int total_error_count = 5708;
#define ER_BINLOG_UNSAFE_SYSTEM_FUNCTION 1674
#define ER_BINLOG_UNSAFE_NONTRANS_AFTER_TRANS 1675
#define ER_MESSAGE_AND_STATEMENT 1676
-//#define OBSOLETE_ER_SLAVE_CONVERSION_FAILED 1677
+#define ER_SLAVE_CONVERSION_FAILED 1677
#define ER_SLAVE_CANT_CREATE_CONVERSION 1678
#define ER_INSIDE_TRANSACTION_PREVENTS_SWITCH_BINLOG_FORMAT 1679
#define ER_PATH_LENGTH 1680
@@ -720,7 +697,7 @@ static const int total_error_count = 5708;
#define ER_TOO_LONG_INDEX_COMMENT 1688
#define ER_LOCK_ABORTED 1689
#define ER_DATA_OUT_OF_RANGE 1690
-//#define OBSOLETE_ER_WRONG_SPVAR_TYPE_IN_LIMIT 1691
+#define ER_WRONG_SPVAR_TYPE_IN_LIMIT 1691
#define ER_BINLOG_UNSAFE_MULTIPLE_ENGINES_AND_SELF_LOGGING_ENGINE 1692
#define ER_BINLOG_UNSAFE_MIXED_STATEMENT 1693
#define ER_INSIDE_TRANSACTION_PREVENTS_SWITCH_SQL_LOG_BIN 1694
@@ -728,8 +705,8 @@ static const int total_error_count = 5708;
#define ER_FAILED_READ_FROM_PAR_FILE 1696
#define ER_VALUES_IS_NOT_INT_TYPE_ERROR 1697
#define ER_ACCESS_DENIED_NO_PASSWORD_ERROR 1698
-//#define OBSOLETE_ER_SET_PASSWORD_AUTH_PLUGIN 1699
-//#define OBSOLETE_ER_GRANT_PLUGIN_USER_EXISTS 1700
+#define ER_SET_PASSWORD_AUTH_PLUGIN 1699
+#define ER_GRANT_PLUGIN_USER_EXISTS 1700
#define ER_TRUNCATE_ILLEGAL_FK 1701
#define ER_PLUGIN_IS_PERMANENT 1702
#define ER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE_MIN 1703
@@ -770,15 +747,15 @@ static const int total_error_count = 5708;
#define ER_BINLOG_CACHE_SIZE_GREATER_THAN_MAX 1738
#define ER_WARN_INDEX_NOT_APPLICABLE 1739
#define ER_PARTITION_EXCHANGE_FOREIGN_KEY 1740
-//#define OBSOLETE_ER_NO_SUCH_KEY_VALUE 1741
+#define ER_NO_SUCH_KEY_VALUE 1741
#define ER_RPL_INFO_DATA_TOO_LONG 1742
-//#define OBSOLETE_ER_NETWORK_READ_EVENT_CHECKSUM_FAILURE 1743
-//#define OBSOLETE_ER_BINLOG_READ_EVENT_CHECKSUM_FAILURE 1744
+#define ER_NETWORK_READ_EVENT_CHECKSUM_FAILURE 1743
+#define ER_BINLOG_READ_EVENT_CHECKSUM_FAILURE 1744
#define ER_BINLOG_STMT_CACHE_SIZE_GREATER_THAN_MAX 1745
#define ER_CANT_UPDATE_TABLE_IN_CREATE_TABLE_SELECT 1746
#define ER_PARTITION_CLAUSE_ON_NONPARTITIONED 1747
#define ER_ROW_DOES_NOT_MATCH_GIVEN_PARTITION_SET 1748
-//#define OBSOLETE_ER_NO_SUCH_PARTITION__UNUSED 1749
+#define ER_NO_SUCH_PARTITION__UNUSED 1749
#define ER_CHANGE_RPL_INFO_REPOSITORY_FAILURE 1750
#define ER_WARNING_NOT_COMPLETE_ROLLBACK_WITH_CREATED_TEMP_TABLE 1751
#define ER_WARNING_NOT_COMPLETE_ROLLBACK_WITH_DROPPED_TEMP_TABLE 1752
@@ -796,11 +773,11 @@ static const int total_error_count = 5708;
#define ER_TABLE_HAS_NO_FT 1764
#define ER_VARIABLE_NOT_SETTABLE_IN_SF_OR_TRIGGER 1765
#define ER_VARIABLE_NOT_SETTABLE_IN_TRANSACTION 1766
-//#define OBSOLETE_ER_GTID_NEXT_IS_NOT_IN_GTID_NEXT_LIST 1767
-//#define OBSOLETE_ER_CANT_CHANGE_GTID_NEXT_IN_TRANSACTION 1768
+#define ER_GTID_NEXT_IS_NOT_IN_GTID_NEXT_LIST 1767
+#define ER_CANT_CHANGE_GTID_NEXT_IN_TRANSACTION 1768
#define ER_SET_STATEMENT_CANNOT_INVOKE_FUNCTION 1769
#define ER_GTID_NEXT_CANT_BE_AUTOMATIC_IF_GTID_NEXT_LIST_IS_NON_NULL 1770
-//#define OBSOLETE_ER_SKIPPING_LOGGED_TRANSACTION 1771
+#define ER_SKIPPING_LOGGED_TRANSACTION 1771
#define ER_MALFORMED_GTID_SET_SPECIFICATION 1772
#define ER_MALFORMED_GTID_SET_ENCODING 1773
#define ER_MALFORMED_GTID_SPECIFICATION 1774
@@ -809,14 +786,14 @@ static const int total_error_count = 5708;
#define ER_AUTO_POSITION_REQUIRES_GTID_MODE_NOT_OFF 1777
#define ER_CANT_DO_IMPLICIT_COMMIT_IN_TRX_WHEN_GTID_NEXT_IS_SET 1778
#define ER_GTID_MODE_ON_REQUIRES_ENFORCE_GTID_CONSISTENCY_ON 1779
-//#define OBSOLETE_ER_GTID_MODE_REQUIRES_BINLOG 1780
+#define ER_GTID_MODE_REQUIRES_BINLOG 1780
#define ER_CANT_SET_GTID_NEXT_TO_GTID_WHEN_GTID_MODE_IS_OFF 1781
#define ER_CANT_SET_GTID_NEXT_TO_ANONYMOUS_WHEN_GTID_MODE_IS_ON 1782
#define ER_CANT_SET_GTID_NEXT_LIST_TO_NON_NULL_WHEN_GTID_MODE_IS_OFF 1783
-//#define OBSOLETE_ER_FOUND_GTID_EVENT_WHEN_GTID_MODE_IS_OFF__UNUSED 1784
+#define ER_FOUND_GTID_EVENT_WHEN_GTID_MODE_IS_OFF__UNUSED 1784
#define ER_GTID_UNSAFE_NON_TRANSACTIONAL_TABLE 1785
#define ER_GTID_UNSAFE_CREATE_SELECT 1786
-//#define OBSOLETE_ER_GTID_UNSAFE_CREATE_DROP_TEMP_TABLE_IN_TRANSACTION 1787
+#define ER_GTID_UNSAFE_CREATE_DROP_TEMPORARY_TABLE_IN_TRANSACTION 1787
#define ER_GTID_MODE_CAN_ONLY_CHANGE_ONE_STEP_AT_A_TIME 1788
#define ER_MASTER_HAS_PURGED_REQUIRED_GTIDS 1789
#define ER_CANT_SET_GTID_NEXT_WHEN_OWNING_GTID 1790
@@ -863,12 +840,12 @@ static const int total_error_count = 5708;
#define ER_DUP_INDEX 1831
#define ER_FK_COLUMN_CANNOT_CHANGE 1832
#define ER_FK_COLUMN_CANNOT_CHANGE_CHILD 1833
-//#define OBSOLETE_ER_UNUSED5 1834
+#define ER_UNUSED5 1834
#define ER_MALFORMED_PACKET 1835
#define ER_READ_ONLY_MODE 1836
-#define ER_GTID_NEXT_TYPE_UNDEFINED_GTID 1837
+#define ER_GTID_NEXT_TYPE_UNDEFINED_GROUP 1837
#define ER_VARIABLE_NOT_SETTABLE_IN_SP 1838
-//#define OBSOLETE_ER_CANT_SET_GTID_PURGED_WHEN_GTID_MODE_IS_OFF 1839
+#define ER_CANT_SET_GTID_PURGED_WHEN_GTID_MODE_IS_OFF 1839
#define ER_CANT_SET_GTID_PURGED_WHEN_GTID_EXECUTED_IS_NOT_EMPTY 1840
#define ER_CANT_SET_GTID_PURGED_WHEN_OWNED_GTIDS_IS_NOT_EMPTY 1841
#define ER_GTID_PURGED_WAS_CHANGED 1842
@@ -881,20 +858,20 @@ static const int total_error_count = 5708;
#define ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_FK_RENAME 1849
#define ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_COLUMN_TYPE 1850
#define ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_FK_CHECK 1851
-//#define OBSOLETE_ER_UNUSED6 1852
+#define ER_UNUSED6 1852
#define ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_NOPK 1853
#define ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_AUTOINC 1854
#define ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_HIDDEN_FTS 1855
#define ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_CHANGE_FTS 1856
#define ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_FTS 1857
-//#define OBSOLETE_ER_SQL_REPLICA_SKIP_COUNTER_NOT_SETTABLE_IN_GTID_MODE 1858
+#define ER_SQL_SLAVE_SKIP_COUNTER_NOT_SETTABLE_IN_GTID_MODE 1858
#define ER_DUP_UNKNOWN_IN_INDEX 1859
#define ER_IDENT_CAUSES_TOO_LONG_PATH 1860
#define ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_NOT_NULL 1861
#define ER_MUST_CHANGE_PASSWORD_LOGIN 1862
#define ER_ROW_IN_WRONG_PARTITION 1863
#define ER_MTS_EVENT_BIGGER_PENDING_JOBS_SIZE_MAX 1864
-//#define OBSOLETE_ER_INNODB_NO_FT_USES_PARSER 1865
+#define ER_INNODB_NO_FT_USES_PARSER 1865
#define ER_BINLOG_LOGICAL_CORRUPTION 1866
#define ER_WARN_PURGE_LOG_IN_USE 1867
#define ER_WARN_PURGE_LOG_IS_ACTIVE 1868
@@ -913,13 +890,14 @@ static const int total_error_count = 5708;
#define ER_INNODB_FORCED_RECOVERY 1881
#define ER_AES_INVALID_IV 1882
#define ER_PLUGIN_CANNOT_BE_UNINSTALLED 1883
-#define ER_GTID_UNSAFE_BINLOG_SPLITTABLE_STATEMENT_AND_ASSIGNED_GTID 1884
+#define ER_GTID_UNSAFE_BINLOG_SPLITTABLE_STATEMENT_AND_GTID_GROUP 1884
#define ER_SLAVE_HAS_MORE_GTIDS_THAN_MASTER 1885
#define ER_MISSING_KEY 1886
#define WARN_NAMED_PIPE_ACCESS_EVERYONE 1887
+#define ER_FOUND_MISSING_GTIDS 1888
#define ER_FILE_CORRUPT 3000
#define ER_ERROR_ON_MASTER 3001
-//#define OBSOLETE_ER_INCONSISTENT_ERROR 3002
+#define ER_INCONSISTENT_ERROR 3002
#define ER_STORAGE_ENGINE_NOT_LOADED 3003
#define ER_GET_STACKED_DA_WITHOUT_ACTIVE_HANDLER 3004
#define ER_WARN_LEGACY_SYNTAX_CONVERTED 3005
@@ -944,11 +922,11 @@ static const int total_error_count = 5708;
#define ER_QUERY_TIMEOUT 3024
#define ER_NON_RO_SELECT_DISABLE_TIMER 3025
#define ER_DUP_LIST_ENTRY 3026
-//#define OBSOLETE_ER_SQL_MODE_NO_EFFECT 3027
+#define ER_SQL_MODE_NO_EFFECT 3027
#define ER_AGGREGATE_ORDER_FOR_UNION 3028
#define ER_AGGREGATE_ORDER_NON_AGG_QUERY 3029
#define ER_SLAVE_WORKER_STOPPED_PREVIOUS_THD_ERROR 3030
-#define ER_DONT_SUPPORT_REPLICA_PRESERVE_COMMIT_ORDER 3031
+#define ER_DONT_SUPPORT_SLAVE_PRESERVE_COMMIT_ORDER 3031
#define ER_SERVER_OFFLINE_MODE 3032
#define ER_GIS_DIFFERENT_SRIDS 3033
#define ER_GIS_UNSUPPORTED_ARGUMENT 3034
@@ -980,7 +958,7 @@ static const int total_error_count = 5708;
#define ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_GIS 3060
#define ER_ILLEGAL_USER_VAR 3061
#define ER_GTID_MODE_OFF 3062
-//#define OBSOLETE_ER_UNSUPPORTED_BY_REPLICATION_THREAD 3063
+#define ER_UNSUPPORTED_BY_REPLICATION_THREAD 3063
#define ER_INCORRECT_TYPE 3064
#define ER_FIELD_IN_ORDER_NOT_SELECT 3065
#define ER_AGGREGATE_IN_ORDER_NOT_SELECT 3066
@@ -992,10 +970,10 @@ static const int total_error_count = 5708;
#define ER_INVALID_GEOJSON_UNSPECIFIED 3072
#define ER_DIMENSION_UNSUPPORTED 3073
#define ER_SLAVE_CHANNEL_DOES_NOT_EXIST 3074
-//#define OBSOLETE_ER_SLAVE_MULTIPLE_CHANNELS_HOST_PORT 3075
+#define ER_SLAVE_MULTIPLE_CHANNELS_HOST_PORT 3075
#define ER_SLAVE_CHANNEL_NAME_INVALID_OR_TOO_LONG 3076
#define ER_SLAVE_NEW_CHANNEL_WRONG_REPOSITORY 3077
-//#define OBSOLETE_ER_SLAVE_CHANNEL_DELETE 3078
+#define ER_SLAVE_CHANNEL_DELETE 3078
#define ER_SLAVE_MULTIPLE_CHANNELS_CMD 3079
#define ER_SLAVE_MAX_CHANNELS_EXCEEDED 3080
#define ER_SLAVE_CHANNEL_MUST_STOP 3081
@@ -1030,11 +1008,11 @@ static const int total_error_count = 5708;
#define ER_FEATURE_NOT_AVAILABLE 3110
#define ER_CANT_SET_GTID_MODE 3111
#define ER_CANT_USE_AUTO_POSITION_WITH_GTID_MODE_OFF 3112
-//#define OBSOLETE_ER_CANT_REPLICATE_ANONYMOUS_WITH_AUTO_POSITION 3113
-//#define OBSOLETE_ER_CANT_REPLICATE_ANONYMOUS_WITH_GTID_MODE_ON 3114
-//#define OBSOLETE_ER_CANT_REPLICATE_GTID_WITH_GTID_MODE_OFF 3115
-#define ER_CANT_ENFORCE_GTID_CONSISTENCY_WITH_ONGOING_GTID_VIOLATING_TX 3116
-#define ER_ENFORCE_GTID_CONSISTENCY_WARN_WITH_ONGOING_GTID_VIOLATING_TX 3117
+#define ER_CANT_REPLICATE_ANONYMOUS_WITH_AUTO_POSITION 3113
+#define ER_CANT_REPLICATE_ANONYMOUS_WITH_GTID_MODE_ON 3114
+#define ER_CANT_REPLICATE_GTID_WITH_GTID_MODE_OFF 3115
+#define ER_CANT_SET_ENFORCE_GTID_CONSISTENCY_ON_WITH_ONGOING_GTID_VIOLATING_TRANSACTIONS 3116
+#define ER_SET_ENFORCE_GTID_CONSISTENCY_WARN_WITH_ONGOING_GTID_VIOLATING_TRANSACTIONS 3117
#define ER_ACCOUNT_HAS_BEEN_LOCKED 3118
#define ER_WRONG_TABLESPACE_NAME 3119
#define ER_TABLESPACE_IS_NOT_EMPTY 3120
@@ -1089,7 +1067,7 @@ static const int total_error_count = 5708;
#define ER_SESSION_WAS_KILLED 3169
#define ER_CAPACITY_EXCEEDED 3170
#define ER_CAPACITY_EXCEEDED_IN_RANGE_OPTIMIZER 3171
-//#define OBSOLETE_ER_TABLE_NEEDS_UPG_PART 3172
+#define ER_TABLE_NEEDS_UPG_PART 3172
#define ER_CANT_WAIT_FOR_EXECUTED_GTID_SET_WHILE_OWNING_A_GTID 3173
#define ER_CANNOT_ADD_FOREIGN_BASE_COL_VIRTUAL 3174
#define ER_CANNOT_CREATE_VIRTUAL_INDEX_CONSTRAINT 3175
@@ -1097,7 +1075,7 @@ static const int total_error_count = 5708;
#define ER_LOCK_REFUSED_BY_ENGINE 3177
#define ER_UNSUPPORTED_ALTER_ONLINE_ON_VIRTUAL_COLUMN 3178
#define ER_MASTER_KEY_ROTATION_NOT_SUPPORTED_BY_SE 3179
-//#define OBSOLETE_ER_MASTER_KEY_ROTATION_ERROR_BY_SE 3180
+#define ER_MASTER_KEY_ROTATION_ERROR_BY_SE 3180
#define ER_MASTER_KEY_ROTATION_BINLOG_FAILED 3181
#define ER_MASTER_KEY_ROTATION_SE_UNAVAILABLE 3182
#define ER_TABLESPACE_CANNOT_ENCRYPT 3183
@@ -1111,9 +1089,9 @@ static const int total_error_count = 5708;
#define ER_GROUP_REPLICATION_MAX_GROUP_SIZE 3191
#define ER_CANNOT_ADD_FOREIGN_BASE_COL_STORED 3192
#define ER_TABLE_REFERENCED 3193
-//#define OBSOLETE_ER_PARTITION_ENGINE_DEPRECATED_FOR_TABLE 3194
-//#define OBSOLETE_ER_WARN_USING_GEOMFROMWKB_TO_SET_SRID_ZERO 3195
-//#define OBSOLETE_ER_WARN_USING_GEOMFROMWKB_TO_SET_SRID 3196
+#define ER_PARTITION_ENGINE_DEPRECATED_FOR_TABLE 3194
+#define ER_WARN_USING_GEOMFROMWKB_TO_SET_SRID_ZERO 3195
+#define ER_WARN_USING_GEOMFROMWKB_TO_SET_SRID 3196
#define ER_XA_RETRY 3197
#define ER_KEYRING_AWS_UDF_AWS_KMS_ERROR 3198
#define ER_BINLOG_UNSAFE_XA 3199
@@ -1121,4628 +1099,35 @@ static const int total_error_count = 5708;
#define ER_KEYRING_MIGRATION_FAILURE 3201
#define ER_KEYRING_ACCESS_DENIED_ERROR 3202
#define ER_KEYRING_MIGRATION_STATUS 3203
-//#define OBSOLETE_ER_PLUGIN_FAILED_TO_OPEN_TABLES 3204
-//#define OBSOLETE_ER_PLUGIN_FAILED_TO_OPEN_TABLE 3205
-//#define OBSOLETE_ER_AUDIT_LOG_NO_KEYRING_PLUGIN_INSTALLED 3206
-//#define OBSOLETE_ER_AUDIT_LOG_ENCRYPTION_PASSWORD_HAS_NOT_BEEN_SET 3207
-//#define OBSOLETE_ER_AUDIT_LOG_COULD_NOT_CREATE_AES_KEY 3208
-//#define OBSOLETE_ER_AUDIT_LOG_ENCRYPTION_PASSWORD_CANNOT_BE_FETCHED 3209
-//#define OBSOLETE_ER_AUDIT_LOG_JSON_FILTERING_NOT_ENABLED 3210
-//#define OBSOLETE_ER_AUDIT_LOG_UDF_INSUFFICIENT_PRIVILEGE 3211
-//#define OBSOLETE_ER_AUDIT_LOG_SUPER_PRIVILEGE_REQUIRED 3212
-//#define OBSOLETE_ER_COULD_NOT_REINITIALIZE_AUDIT_LOG_FILTERS 3213
-//#define OBSOLETE_ER_AUDIT_LOG_UDF_INVALID_ARGUMENT_TYPE 3214
-//#define OBSOLETE_ER_AUDIT_LOG_UDF_INVALID_ARGUMENT_COUNT 3215
-//#define OBSOLETE_ER_AUDIT_LOG_HAS_NOT_BEEN_INSTALLED 3216
-//#define OBSOLETE_ER_AUDIT_LOG_UDF_READ_INVALID_MAX_ARRAY_LENGTH_ARG_TYPE 3217
+#define ER_PLUGIN_FAILED_TO_OPEN_TABLES 3204
+#define ER_PLUGIN_FAILED_TO_OPEN_TABLE 3205
+#define ER_AUDIT_LOG_NO_KEYRING_PLUGIN_INSTALLED 3206
+#define ER_AUDIT_LOG_ENCRYPTION_PASSWORD_HAS_NOT_BEEN_SET 3207
+#define ER_AUDIT_LOG_COULD_NOT_CREATE_AES_KEY 3208
+#define ER_AUDIT_LOG_ENCRYPTION_PASSWORD_CANNOT_BE_FETCHED 3209
+#define ER_AUDIT_LOG_JSON_FILTERING_NOT_ENABLED 3210
+#define ER_AUDIT_LOG_UDF_INSUFFICIENT_PRIVILEGE 3211
+#define ER_AUDIT_LOG_SUPER_PRIVILEGE_REQUIRED 3212
+#define ER_COULD_NOT_REINITIALIZE_AUDIT_LOG_FILTERS 3213
+#define ER_AUDIT_LOG_UDF_INVALID_ARGUMENT_TYPE 3214
+#define ER_AUDIT_LOG_UDF_INVALID_ARGUMENT_COUNT 3215
+#define ER_AUDIT_LOG_HAS_NOT_BEEN_INSTALLED 3216
+#define ER_AUDIT_LOG_UDF_READ_INVALID_MAX_ARRAY_LENGTH_ARG_TYPE 3217
#define ER_AUDIT_LOG_UDF_READ_INVALID_MAX_ARRAY_LENGTH_ARG_VALUE 3218
-//#define OBSOLETE_ER_AUDIT_LOG_JSON_FILTER_PARSING_ERROR 3219
-//#define OBSOLETE_ER_AUDIT_LOG_JSON_FILTER_NAME_CANNOT_BE_EMPTY 3220
-//#define OBSOLETE_ER_AUDIT_LOG_JSON_USER_NAME_CANNOT_BE_EMPTY 3221
-//#define OBSOLETE_ER_AUDIT_LOG_JSON_FILTER_DOES_NOT_EXISTS 3222
-//#define OBSOLETE_ER_AUDIT_LOG_USER_FIRST_CHARACTER_MUST_BE_ALPHANUMERIC 3223
-//#define OBSOLETE_ER_AUDIT_LOG_USER_NAME_INVALID_CHARACTER 3224
-//#define OBSOLETE_ER_AUDIT_LOG_HOST_NAME_INVALID_CHARACTER 3225
-#define OBSOLETE_WARN_DEPRECATED_MAXDB_SQL_MODE_FOR_TIMESTAMP 3226
-//#define OBSOLETE_ER_XA_REPLICATION_FILTERS 3227
-//#define OBSOLETE_ER_CANT_OPEN_ERROR_LOG 3228
-//#define OBSOLETE_ER_GROUPING_ON_TIMESTAMP_IN_DST 3229
-//#define OBSOLETE_ER_CANT_START_SERVER_NAMED_PIPE 3230
+#define ER_AUDIT_LOG_JSON_FILTER_PARSING_ERROR 3219
+#define ER_AUDIT_LOG_JSON_FILTER_NAME_CANNOT_BE_EMPTY 3220
+#define ER_AUDIT_LOG_JSON_USER_NAME_CANNOT_BE_EMPTY 3221
+#define ER_AUDIT_LOG_JSON_FILTER_DOES_NOT_EXISTS 3222
+#define ER_AUDIT_LOG_USER_FIRST_CHARACTER_MUST_BE_ALPHANUMERIC 3223
+#define ER_AUDIT_LOG_USER_NAME_INVALID_CHARACTER 3224
+#define ER_AUDIT_LOG_HOST_NAME_INVALID_CHARACTER 3225
+#define WARN_DEPRECATED_MAXDB_SQL_MODE_FOR_TIMESTAMP 3226
+#define ER_XA_REPLICATION_FILTERS 3227
+#define ER_CANT_OPEN_ERROR_LOG 3228
+#define ER_GROUPING_ON_TIMESTAMP_IN_DST 3229
+#define ER_CANT_START_SERVER_NAMED_PIPE 3230
#define ER_WRITE_SET_EXCEEDS_LIMIT 3231
-//#define OBSOLETE_ER_DEPRECATED_TLS_VERSION_SESSION_57 3232
-//#define OBSOLETE_ER_WARN_DEPRECATED_TLS_VERSION_57 3233
-//#define OBSOLETE_ER_WARN_WRONG_NATIVE_TABLE_STRUCTURE 3234
-#define ER_AES_INVALID_KDF_NAME 3235
-#define ER_AES_INVALID_KDF_ITERATIONS 3236
-#define WARN_AES_KEY_SIZE 3237
-#define ER_AES_INVALID_KDF_OPTION_SIZE 3238
-#define ER_UNSUPPORT_COMPRESSED_TEMPORARY_TABLE 3500
-#define ER_ACL_OPERATION_FAILED 3501
-#define ER_UNSUPPORTED_INDEX_ALGORITHM 3502
-#define ER_NO_SUCH_DB 3503
-#define ER_TOO_BIG_ENUM 3504
-#define ER_TOO_LONG_SET_ENUM_VALUE 3505
-#define ER_INVALID_DD_OBJECT 3506
-#define ER_UPDATING_DD_TABLE 3507
-#define ER_INVALID_DD_OBJECT_ID 3508
-#define ER_INVALID_DD_OBJECT_NAME 3509
-#define ER_TABLESPACE_MISSING_WITH_NAME 3510
-#define ER_TOO_LONG_ROUTINE_COMMENT 3511
-#define ER_SP_LOAD_FAILED 3512
-#define ER_INVALID_BITWISE_OPERANDS_SIZE 3513
-#define ER_INVALID_BITWISE_AGGREGATE_OPERANDS_SIZE 3514
-#define ER_WARN_UNSUPPORTED_HINT 3515
-#define ER_UNEXPECTED_GEOMETRY_TYPE 3516
-#define ER_SRS_PARSE_ERROR 3517
-#define ER_SRS_PROJ_PARAMETER_MISSING 3518
-#define ER_WARN_SRS_NOT_FOUND 3519
-#define ER_SRS_NOT_CARTESIAN 3520
-#define ER_SRS_NOT_CARTESIAN_UNDEFINED 3521
-#define ER_PK_INDEX_CANT_BE_INVISIBLE 3522
-#define ER_UNKNOWN_AUTHID 3523
-#define ER_FAILED_ROLE_GRANT 3524
-#define ER_OPEN_ROLE_TABLES 3525
-#define ER_FAILED_DEFAULT_ROLES 3526
-#define ER_COMPONENTS_NO_SCHEME 3527
-#define ER_COMPONENTS_NO_SCHEME_SERVICE 3528
-#define ER_COMPONENTS_CANT_LOAD 3529
-#define ER_ROLE_NOT_GRANTED 3530
-#define ER_FAILED_REVOKE_ROLE 3531
-#define ER_RENAME_ROLE 3532
-#define ER_COMPONENTS_CANT_ACQUIRE_SERVICE_IMPLEMENTATION 3533
-#define ER_COMPONENTS_CANT_SATISFY_DEPENDENCY 3534
-#define ER_COMPONENTS_LOAD_CANT_REGISTER_SERVICE_IMPLEMENTATION 3535
-#define ER_COMPONENTS_LOAD_CANT_INITIALIZE 3536
-#define ER_COMPONENTS_UNLOAD_NOT_LOADED 3537
-#define ER_COMPONENTS_UNLOAD_CANT_DEINITIALIZE 3538
-#define ER_COMPONENTS_CANT_RELEASE_SERVICE 3539
-#define ER_COMPONENTS_UNLOAD_CANT_UNREGISTER_SERVICE 3540
-#define ER_COMPONENTS_CANT_UNLOAD 3541
-#define ER_WARN_UNLOAD_THE_NOT_PERSISTED 3542
-#define ER_COMPONENT_TABLE_INCORRECT 3543
-#define ER_COMPONENT_MANIPULATE_ROW_FAILED 3544
-#define ER_COMPONENTS_UNLOAD_DUPLICATE_IN_GROUP 3545
-#define ER_CANT_SET_GTID_PURGED_DUE_SETS_CONSTRAINTS 3546
-#define ER_CANNOT_LOCK_USER_MANAGEMENT_CACHES 3547
-#define ER_SRS_NOT_FOUND 3548
-#define ER_VARIABLE_NOT_PERSISTED 3549
-#define ER_IS_QUERY_INVALID_CLAUSE 3550
-#define ER_UNABLE_TO_STORE_STATISTICS 3551
-#define ER_NO_SYSTEM_SCHEMA_ACCESS 3552
-#define ER_NO_SYSTEM_TABLESPACE_ACCESS 3553
-#define ER_NO_SYSTEM_TABLE_ACCESS 3554
-#define ER_NO_SYSTEM_TABLE_ACCESS_FOR_DICTIONARY_TABLE 3555
-#define ER_NO_SYSTEM_TABLE_ACCESS_FOR_SYSTEM_TABLE 3556
-#define ER_NO_SYSTEM_TABLE_ACCESS_FOR_TABLE 3557
-#define ER_INVALID_OPTION_KEY 3558
-#define ER_INVALID_OPTION_VALUE 3559
-#define ER_INVALID_OPTION_KEY_VALUE_PAIR 3560
-#define ER_INVALID_OPTION_START_CHARACTER 3561
-#define ER_INVALID_OPTION_END_CHARACTER 3562
-#define ER_INVALID_OPTION_CHARACTERS 3563
-#define ER_DUPLICATE_OPTION_KEY 3564
-#define ER_WARN_SRS_NOT_FOUND_AXIS_ORDER 3565
-#define ER_NO_ACCESS_TO_NATIVE_FCT 3566
-#define ER_RESET_MASTER_TO_VALUE_OUT_OF_RANGE 3567
-#define ER_UNRESOLVED_TABLE_LOCK 3568
-#define ER_DUPLICATE_TABLE_LOCK 3569
-#define ER_BINLOG_UNSAFE_SKIP_LOCKED 3570
-#define ER_BINLOG_UNSAFE_NOWAIT 3571
-#define ER_LOCK_NOWAIT 3572
-#define ER_CTE_RECURSIVE_REQUIRES_UNION 3573
-#define ER_CTE_RECURSIVE_REQUIRES_NONRECURSIVE_FIRST 3574
-#define ER_CTE_RECURSIVE_FORBIDS_AGGREGATION 3575
-#define ER_CTE_RECURSIVE_FORBIDDEN_JOIN_ORDER 3576
-#define ER_CTE_RECURSIVE_REQUIRES_SINGLE_REFERENCE 3577
-#define ER_SWITCH_TMP_ENGINE 3578
-#define ER_WINDOW_NO_SUCH_WINDOW 3579
-#define ER_WINDOW_CIRCULARITY_IN_WINDOW_GRAPH 3580
-#define ER_WINDOW_NO_CHILD_PARTITIONING 3581
-#define ER_WINDOW_NO_INHERIT_FRAME 3582
-#define ER_WINDOW_NO_REDEFINE_ORDER_BY 3583
-#define ER_WINDOW_FRAME_START_ILLEGAL 3584
-#define ER_WINDOW_FRAME_END_ILLEGAL 3585
-#define ER_WINDOW_FRAME_ILLEGAL 3586
-#define ER_WINDOW_RANGE_FRAME_ORDER_TYPE 3587
-#define ER_WINDOW_RANGE_FRAME_TEMPORAL_TYPE 3588
-#define ER_WINDOW_RANGE_FRAME_NUMERIC_TYPE 3589
-#define ER_WINDOW_RANGE_BOUND_NOT_CONSTANT 3590
-#define ER_WINDOW_DUPLICATE_NAME 3591
-#define ER_WINDOW_ILLEGAL_ORDER_BY 3592
-#define ER_WINDOW_INVALID_WINDOW_FUNC_USE 3593
-#define ER_WINDOW_INVALID_WINDOW_FUNC_ALIAS_USE 3594
-#define ER_WINDOW_NESTED_WINDOW_FUNC_USE_IN_WINDOW_SPEC 3595
-#define ER_WINDOW_ROWS_INTERVAL_USE 3596
-#define ER_WINDOW_NO_GROUP_ORDER_UNUSED 3597
-#define ER_WINDOW_EXPLAIN_JSON 3598
-#define ER_WINDOW_FUNCTION_IGNORES_FRAME 3599
-#define ER_WL9236_NOW_UNUSED 3600
-#define ER_INVALID_NO_OF_ARGS 3601
-#define ER_FIELD_IN_GROUPING_NOT_GROUP_BY 3602
-#define ER_TOO_LONG_TABLESPACE_COMMENT 3603
-#define ER_ENGINE_CANT_DROP_TABLE 3604
-#define ER_ENGINE_CANT_DROP_MISSING_TABLE 3605
-#define ER_TABLESPACE_DUP_FILENAME 3606
-#define ER_DB_DROP_RMDIR2 3607
-#define ER_IMP_NO_FILES_MATCHED 3608
-#define ER_IMP_SCHEMA_DOES_NOT_EXIST 3609
-#define ER_IMP_TABLE_ALREADY_EXISTS 3610
-#define ER_IMP_INCOMPATIBLE_MYSQLD_VERSION 3611
-#define ER_IMP_INCOMPATIBLE_DD_VERSION 3612
-#define ER_IMP_INCOMPATIBLE_SDI_VERSION 3613
-#define ER_WARN_INVALID_HINT 3614
-#define ER_VAR_DOES_NOT_EXIST 3615
-#define ER_LONGITUDE_OUT_OF_RANGE 3616
-#define ER_LATITUDE_OUT_OF_RANGE 3617
-#define ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS 3618
-#define ER_ILLEGAL_PRIVILEGE_LEVEL 3619
-#define ER_NO_SYSTEM_VIEW_ACCESS 3620
-#define ER_COMPONENT_FILTER_FLABBERGASTED 3621
-#define ER_PART_EXPR_TOO_LONG 3622
-#define ER_UDF_DROP_DYNAMICALLY_REGISTERED 3623
-#define ER_UNABLE_TO_STORE_COLUMN_STATISTICS 3624
-#define ER_UNABLE_TO_UPDATE_COLUMN_STATISTICS 3625
-#define ER_UNABLE_TO_DROP_COLUMN_STATISTICS 3626
-#define ER_UNABLE_TO_BUILD_HISTOGRAM 3627
-#define ER_MANDATORY_ROLE 3628
-#define ER_MISSING_TABLESPACE_FILE 3629
-#define ER_PERSIST_ONLY_ACCESS_DENIED_ERROR 3630
-#define ER_CMD_NEED_SUPER 3631
-#define ER_PATH_IN_DATADIR 3632
-#define ER_CLONE_DDL_IN_PROGRESS 3633
-#define ER_CLONE_TOO_MANY_CONCURRENT_CLONES 3634
-#define ER_APPLIER_LOG_EVENT_VALIDATION_ERROR 3635
-#define ER_CTE_MAX_RECURSION_DEPTH 3636
-#define ER_NOT_HINT_UPDATABLE_VARIABLE 3637
-#define ER_CREDENTIALS_CONTRADICT_TO_HISTORY 3638
-#define ER_WARNING_PASSWORD_HISTORY_CLAUSES_VOID 3639
-#define ER_CLIENT_DOES_NOT_SUPPORT 3640
-#define ER_I_S_SKIPPED_TABLESPACE 3641
-#define ER_TABLESPACE_ENGINE_MISMATCH 3642
-#define ER_WRONG_SRID_FOR_COLUMN 3643
-#define ER_CANNOT_ALTER_SRID_DUE_TO_INDEX 3644
-#define ER_WARN_BINLOG_PARTIAL_UPDATES_DISABLED 3645
-#define ER_WARN_BINLOG_V1_ROW_EVENTS_DISABLED 3646
-#define ER_WARN_BINLOG_PARTIAL_UPDATES_SUGGESTS_PARTIAL_IMAGES 3647
-#define ER_COULD_NOT_APPLY_JSON_DIFF 3648
-#define ER_CORRUPTED_JSON_DIFF 3649
-#define ER_RESOURCE_GROUP_EXISTS 3650
-#define ER_RESOURCE_GROUP_NOT_EXISTS 3651
-#define ER_INVALID_VCPU_ID 3652
-#define ER_INVALID_VCPU_RANGE 3653
-#define ER_INVALID_THREAD_PRIORITY 3654
-#define ER_DISALLOWED_OPERATION 3655
-#define ER_RESOURCE_GROUP_BUSY 3656
-#define ER_RESOURCE_GROUP_DISABLED 3657
-#define ER_FEATURE_UNSUPPORTED 3658
-#define ER_ATTRIBUTE_IGNORED 3659
-#define ER_INVALID_THREAD_ID 3660
-#define ER_RESOURCE_GROUP_BIND_FAILED 3661
-#define ER_INVALID_USE_OF_FORCE_OPTION 3662
-#define ER_GROUP_REPLICATION_COMMAND_FAILURE 3663
-#define ER_SDI_OPERATION_FAILED 3664
-#define ER_MISSING_JSON_TABLE_VALUE 3665
-#define ER_WRONG_JSON_TABLE_VALUE 3666
-#define ER_TF_MUST_HAVE_ALIAS 3667
-#define ER_TF_FORBIDDEN_JOIN_TYPE 3668
-#define ER_JT_VALUE_OUT_OF_RANGE 3669
-#define ER_JT_MAX_NESTED_PATH 3670
-#define ER_PASSWORD_EXPIRATION_NOT_SUPPORTED_BY_AUTH_METHOD 3671
-#define ER_INVALID_GEOJSON_CRS_NOT_TOP_LEVEL 3672
-#define ER_BAD_NULL_ERROR_NOT_IGNORED 3673
-#define WARN_USELESS_SPATIAL_INDEX 3674
-#define ER_DISK_FULL_NOWAIT 3675
-#define ER_PARSE_ERROR_IN_DIGEST_FN 3676
-#define ER_UNDISCLOSED_PARSE_ERROR_IN_DIGEST_FN 3677
-#define ER_SCHEMA_DIR_EXISTS 3678
-#define ER_SCHEMA_DIR_MISSING 3679
-#define ER_SCHEMA_DIR_CREATE_FAILED 3680
-#define ER_SCHEMA_DIR_UNKNOWN 3681
-#define ER_ONLY_IMPLEMENTED_FOR_SRID_0_AND_4326 3682
-#define ER_BINLOG_EXPIRE_LOG_DAYS_AND_SECS_USED_TOGETHER 3683
-#define ER_REGEXP_BUFFER_OVERFLOW 3684
-#define ER_REGEXP_ILLEGAL_ARGUMENT 3685
-#define ER_REGEXP_INDEX_OUTOFBOUNDS_ERROR 3686
-#define ER_REGEXP_INTERNAL_ERROR 3687
-#define ER_REGEXP_RULE_SYNTAX 3688
-#define ER_REGEXP_BAD_ESCAPE_SEQUENCE 3689
-#define ER_REGEXP_UNIMPLEMENTED 3690
-#define ER_REGEXP_MISMATCHED_PAREN 3691
-#define ER_REGEXP_BAD_INTERVAL 3692
-#define ER_REGEXP_MAX_LT_MIN 3693
-#define ER_REGEXP_INVALID_BACK_REF 3694
-#define ER_REGEXP_LOOK_BEHIND_LIMIT 3695
-#define ER_REGEXP_MISSING_CLOSE_BRACKET 3696
-#define ER_REGEXP_INVALID_RANGE 3697
-#define ER_REGEXP_STACK_OVERFLOW 3698
-#define ER_REGEXP_TIME_OUT 3699
-#define ER_REGEXP_PATTERN_TOO_BIG 3700
-#define ER_CANT_SET_ERROR_LOG_SERVICE 3701
-#define ER_EMPTY_PIPELINE_FOR_ERROR_LOG_SERVICE 3702
-#define ER_COMPONENT_FILTER_DIAGNOSTICS 3703
-#define ER_NOT_IMPLEMENTED_FOR_CARTESIAN_SRS 3704
-#define ER_NOT_IMPLEMENTED_FOR_PROJECTED_SRS 3705
-#define ER_NONPOSITIVE_RADIUS 3706
-#define ER_RESTART_SERVER_FAILED 3707
-#define ER_SRS_MISSING_MANDATORY_ATTRIBUTE 3708
-#define ER_SRS_MULTIPLE_ATTRIBUTE_DEFINITIONS 3709
-#define ER_SRS_NAME_CANT_BE_EMPTY_OR_WHITESPACE 3710
-#define ER_SRS_ORGANIZATION_CANT_BE_EMPTY_OR_WHITESPACE 3711
-#define ER_SRS_ID_ALREADY_EXISTS 3712
-#define ER_WARN_SRS_ID_ALREADY_EXISTS 3713
-#define ER_CANT_MODIFY_SRID_0 3714
-#define ER_WARN_RESERVED_SRID_RANGE 3715
-#define ER_CANT_MODIFY_SRS_USED_BY_COLUMN 3716
-#define ER_SRS_INVALID_CHARACTER_IN_ATTRIBUTE 3717
-#define ER_SRS_ATTRIBUTE_STRING_TOO_LONG 3718
-#define ER_DEPRECATED_UTF8_ALIAS 3719
-#define ER_DEPRECATED_NATIONAL 3720
-#define ER_INVALID_DEFAULT_UTF8MB4_COLLATION 3721
-#define ER_UNABLE_TO_COLLECT_LOG_STATUS 3722
-#define ER_RESERVED_TABLESPACE_NAME 3723
-#define ER_UNABLE_TO_SET_OPTION 3724
-#define ER_SLAVE_POSSIBLY_DIVERGED_AFTER_DDL 3725
-#define ER_SRS_NOT_GEOGRAPHIC 3726
-#define ER_POLYGON_TOO_LARGE 3727
-#define ER_SPATIAL_UNIQUE_INDEX 3728
-#define ER_INDEX_TYPE_NOT_SUPPORTED_FOR_SPATIAL_INDEX 3729
-#define ER_FK_CANNOT_DROP_PARENT 3730
-#define ER_GEOMETRY_PARAM_LONGITUDE_OUT_OF_RANGE 3731
-#define ER_GEOMETRY_PARAM_LATITUDE_OUT_OF_RANGE 3732
-#define ER_FK_CANNOT_USE_VIRTUAL_COLUMN 3733
-#define ER_FK_NO_COLUMN_PARENT 3734
-#define ER_CANT_SET_ERROR_SUPPRESSION_LIST 3735
-#define ER_SRS_GEOGCS_INVALID_AXES 3736
-#define ER_SRS_INVALID_SEMI_MAJOR_AXIS 3737
-#define ER_SRS_INVALID_INVERSE_FLATTENING 3738
-#define ER_SRS_INVALID_ANGULAR_UNIT 3739
-#define ER_SRS_INVALID_PRIME_MERIDIAN 3740
-#define ER_TRANSFORM_SOURCE_SRS_NOT_SUPPORTED 3741
-#define ER_TRANSFORM_TARGET_SRS_NOT_SUPPORTED 3742
-#define ER_TRANSFORM_SOURCE_SRS_MISSING_TOWGS84 3743
-#define ER_TRANSFORM_TARGET_SRS_MISSING_TOWGS84 3744
-#define ER_TEMP_TABLE_PREVENTS_SWITCH_SESSION_BINLOG_FORMAT 3745
-#define ER_TEMP_TABLE_PREVENTS_SWITCH_GLOBAL_BINLOG_FORMAT 3746
-#define ER_RUNNING_APPLIER_PREVENTS_SWITCH_GLOBAL_BINLOG_FORMAT 3747
-#define ER_CLIENT_GTID_UNSAFE_CREATE_DROP_TEMP_TABLE_IN_TRX_IN_SBR 3748
-//#define OBSOLETE_ER_XA_CANT_CREATE_MDL_BACKUP 3749
-#define ER_TABLE_WITHOUT_PK 3750
-#define ER_WARN_DATA_TRUNCATED_FUNCTIONAL_INDEX 3751
-#define ER_WARN_DATA_OUT_OF_RANGE_FUNCTIONAL_INDEX 3752
-#define ER_FUNCTIONAL_INDEX_ON_JSON_OR_GEOMETRY_FUNCTION 3753
-#define ER_FUNCTIONAL_INDEX_REF_AUTO_INCREMENT 3754
-#define ER_CANNOT_DROP_COLUMN_FUNCTIONAL_INDEX 3755
-#define ER_FUNCTIONAL_INDEX_PRIMARY_KEY 3756
-#define ER_FUNCTIONAL_INDEX_ON_LOB 3757
-#define ER_FUNCTIONAL_INDEX_FUNCTION_IS_NOT_ALLOWED 3758
-#define ER_FULLTEXT_FUNCTIONAL_INDEX 3759
-#define ER_SPATIAL_FUNCTIONAL_INDEX 3760
-#define ER_WRONG_KEY_COLUMN_FUNCTIONAL_INDEX 3761
-#define ER_FUNCTIONAL_INDEX_ON_FIELD 3762
-#define ER_GENERATED_COLUMN_NAMED_FUNCTION_IS_NOT_ALLOWED 3763
-#define ER_GENERATED_COLUMN_ROW_VALUE 3764
-#define ER_GENERATED_COLUMN_VARIABLES 3765
-#define ER_DEPENDENT_BY_DEFAULT_GENERATED_VALUE 3766
-#define ER_DEFAULT_VAL_GENERATED_NON_PRIOR 3767
-#define ER_DEFAULT_VAL_GENERATED_REF_AUTO_INC 3768
-#define ER_DEFAULT_VAL_GENERATED_FUNCTION_IS_NOT_ALLOWED 3769
-#define ER_DEFAULT_VAL_GENERATED_NAMED_FUNCTION_IS_NOT_ALLOWED 3770
-#define ER_DEFAULT_VAL_GENERATED_ROW_VALUE 3771
-#define ER_DEFAULT_VAL_GENERATED_VARIABLES 3772
-#define ER_DEFAULT_AS_VAL_GENERATED 3773
-#define ER_UNSUPPORTED_ACTION_ON_DEFAULT_VAL_GENERATED 3774
-#define ER_GTID_UNSAFE_ALTER_ADD_COL_WITH_DEFAULT_EXPRESSION 3775
-#define ER_FK_CANNOT_CHANGE_ENGINE 3776
-#define ER_WARN_DEPRECATED_USER_SET_EXPR 3777
-#define ER_WARN_DEPRECATED_UTF8MB3_COLLATION 3778
-#define ER_WARN_DEPRECATED_NESTED_COMMENT_SYNTAX 3779
-#define ER_FK_INCOMPATIBLE_COLUMNS 3780
-#define ER_GR_HOLD_WAIT_TIMEOUT 3781
-#define ER_GR_HOLD_KILLED 3782
-#define ER_GR_HOLD_MEMBER_STATUS_ERROR 3783
-#define ER_RPL_ENCRYPTION_FAILED_TO_FETCH_KEY 3784
-#define ER_RPL_ENCRYPTION_KEY_NOT_FOUND 3785
-#define ER_RPL_ENCRYPTION_KEYRING_INVALID_KEY 3786
-#define ER_RPL_ENCRYPTION_HEADER_ERROR 3787
-#define ER_RPL_ENCRYPTION_FAILED_TO_ROTATE_LOGS 3788
-#define ER_RPL_ENCRYPTION_KEY_EXISTS_UNEXPECTED 3789
-#define ER_RPL_ENCRYPTION_FAILED_TO_GENERATE_KEY 3790
-#define ER_RPL_ENCRYPTION_FAILED_TO_STORE_KEY 3791
-#define ER_RPL_ENCRYPTION_FAILED_TO_REMOVE_KEY 3792
-#define ER_RPL_ENCRYPTION_UNABLE_TO_CHANGE_OPTION 3793
-#define ER_RPL_ENCRYPTION_MASTER_KEY_RECOVERY_FAILED 3794
-#define ER_SLOW_LOG_MODE_IGNORED_WHEN_NOT_LOGGING_TO_FILE 3795
-#define ER_GRP_TRX_CONSISTENCY_NOT_ALLOWED 3796
-#define ER_GRP_TRX_CONSISTENCY_BEFORE 3797
-#define ER_GRP_TRX_CONSISTENCY_AFTER_ON_TRX_BEGIN 3798
-#define ER_GRP_TRX_CONSISTENCY_BEGIN_NOT_ALLOWED 3799
-#define ER_FUNCTIONAL_INDEX_ROW_VALUE_IS_NOT_ALLOWED 3800
-#define ER_RPL_ENCRYPTION_FAILED_TO_ENCRYPT 3801
-#define ER_PAGE_TRACKING_NOT_STARTED 3802
-#define ER_PAGE_TRACKING_RANGE_NOT_TRACKED 3803
-#define ER_PAGE_TRACKING_CANNOT_PURGE 3804
-#define ER_RPL_ENCRYPTION_CANNOT_ROTATE_BINLOG_MASTER_KEY 3805
-#define ER_BINLOG_MASTER_KEY_RECOVERY_OUT_OF_COMBINATION 3806
-#define ER_BINLOG_MASTER_KEY_ROTATION_FAIL_TO_OPERATE_KEY 3807
-#define ER_BINLOG_MASTER_KEY_ROTATION_FAIL_TO_ROTATE_LOGS 3808
-#define ER_BINLOG_MASTER_KEY_ROTATION_FAIL_TO_REENCRYPT_LOG 3809
-#define ER_BINLOG_MASTER_KEY_ROTATION_FAIL_TO_CLEANUP_UNUSED_KEYS 3810
-#define ER_BINLOG_MASTER_KEY_ROTATION_FAIL_TO_CLEANUP_AUX_KEY 3811
-#define ER_NON_BOOLEAN_EXPR_FOR_CHECK_CONSTRAINT 3812
-#define ER_COLUMN_CHECK_CONSTRAINT_REFERENCES_OTHER_COLUMN 3813
-#define ER_CHECK_CONSTRAINT_NAMED_FUNCTION_IS_NOT_ALLOWED 3814
-#define ER_CHECK_CONSTRAINT_FUNCTION_IS_NOT_ALLOWED 3815
-#define ER_CHECK_CONSTRAINT_VARIABLES 3816
-#define ER_CHECK_CONSTRAINT_ROW_VALUE 3817
-#define ER_CHECK_CONSTRAINT_REFERS_AUTO_INCREMENT_COLUMN 3818
-#define ER_CHECK_CONSTRAINT_VIOLATED 3819
-#define ER_CHECK_CONSTRAINT_REFERS_UNKNOWN_COLUMN 3820
-#define ER_CHECK_CONSTRAINT_NOT_FOUND 3821
-#define ER_CHECK_CONSTRAINT_DUP_NAME 3822
-#define ER_CHECK_CONSTRAINT_CLAUSE_USING_FK_REFER_ACTION_COLUMN 3823
-#define WARN_UNENCRYPTED_TABLE_IN_ENCRYPTED_DB 3824
-#define ER_INVALID_ENCRYPTION_REQUEST 3825
-#define ER_CANNOT_SET_TABLE_ENCRYPTION 3826
-#define ER_CANNOT_SET_DATABASE_ENCRYPTION 3827
-#define ER_CANNOT_SET_TABLESPACE_ENCRYPTION 3828
-#define ER_TABLESPACE_CANNOT_BE_ENCRYPTED 3829
-#define ER_TABLESPACE_CANNOT_BE_DECRYPTED 3830
-#define ER_TABLESPACE_TYPE_UNKNOWN 3831
-#define ER_TARGET_TABLESPACE_UNENCRYPTED 3832
-#define ER_CANNOT_USE_ENCRYPTION_CLAUSE 3833
-#define ER_INVALID_MULTIPLE_CLAUSES 3834
-#define ER_UNSUPPORTED_USE_OF_GRANT_AS 3835
-#define ER_UKNOWN_AUTH_ID_OR_ACCESS_DENIED_FOR_GRANT_AS 3836
-#define ER_DEPENDENT_BY_FUNCTIONAL_INDEX 3837
-#define ER_PLUGIN_NOT_EARLY 3838
-#define ER_INNODB_REDO_LOG_ARCHIVE_START_SUBDIR_PATH 3839
-#define ER_INNODB_REDO_LOG_ARCHIVE_START_TIMEOUT 3840
-#define ER_INNODB_REDO_LOG_ARCHIVE_DIRS_INVALID 3841
-#define ER_INNODB_REDO_LOG_ARCHIVE_LABEL_NOT_FOUND 3842
-#define ER_INNODB_REDO_LOG_ARCHIVE_DIR_EMPTY 3843
-#define ER_INNODB_REDO_LOG_ARCHIVE_NO_SUCH_DIR 3844
-#define ER_INNODB_REDO_LOG_ARCHIVE_DIR_CLASH 3845
-#define ER_INNODB_REDO_LOG_ARCHIVE_DIR_PERMISSIONS 3846
-#define ER_INNODB_REDO_LOG_ARCHIVE_FILE_CREATE 3847
-#define ER_INNODB_REDO_LOG_ARCHIVE_ACTIVE 3848
-#define ER_INNODB_REDO_LOG_ARCHIVE_INACTIVE 3849
-#define ER_INNODB_REDO_LOG_ARCHIVE_FAILED 3850
-#define ER_INNODB_REDO_LOG_ARCHIVE_SESSION 3851
-#define ER_STD_REGEX_ERROR 3852
-#define ER_INVALID_JSON_TYPE 3853
-#define ER_CANNOT_CONVERT_STRING 3854
-#define ER_DEPENDENT_BY_PARTITION_FUNC 3855
-#define ER_WARN_DEPRECATED_FLOAT_AUTO_INCREMENT 3856
-#define ER_RPL_CANT_STOP_SLAVE_WHILE_LOCKED_BACKUP 3857
-#define ER_WARN_DEPRECATED_FLOAT_DIGITS 3858
-#define ER_WARN_DEPRECATED_FLOAT_UNSIGNED 3859
-#define ER_WARN_DEPRECATED_INTEGER_DISPLAY_WIDTH 3860
-#define ER_WARN_DEPRECATED_ZEROFILL 3861
-#define ER_CLONE_DONOR 3862
-#define ER_CLONE_PROTOCOL 3863
-#define ER_CLONE_DONOR_VERSION 3864
-#define ER_CLONE_OS 3865
-#define ER_CLONE_PLATFORM 3866
-#define ER_CLONE_CHARSET 3867
-#define ER_CLONE_CONFIG 3868
-#define ER_CLONE_SYS_CONFIG 3869
-#define ER_CLONE_PLUGIN_MATCH 3870
-#define ER_CLONE_LOOPBACK 3871
-#define ER_CLONE_ENCRYPTION 3872
-#define ER_CLONE_DISK_SPACE 3873
-#define ER_CLONE_IN_PROGRESS 3874
-#define ER_CLONE_DISALLOWED 3875
-#define ER_CANNOT_GRANT_ROLES_TO_ANONYMOUS_USER 3876
-#define ER_SECONDARY_ENGINE_PLUGIN 3877
-#define ER_SECOND_PASSWORD_CANNOT_BE_EMPTY 3878
-#define ER_DB_ACCESS_DENIED 3879
-#define ER_DA_AUTH_ID_WITH_SYSTEM_USER_PRIV_IN_MANDATORY_ROLES 3880
-#define ER_DA_RPL_GTID_TABLE_CANNOT_OPEN 3881
-#define ER_GEOMETRY_IN_UNKNOWN_LENGTH_UNIT 3882
-#define ER_DA_PLUGIN_INSTALL_ERROR 3883
-#define ER_NO_SESSION_TEMP 3884
-#define ER_DA_UNKNOWN_ERROR_NUMBER 3885
-#define ER_COLUMN_CHANGE_SIZE 3886
-#define ER_REGEXP_INVALID_CAPTURE_GROUP_NAME 3887
-#define ER_DA_SSL_LIBRARY_ERROR 3888
-#define ER_SECONDARY_ENGINE 3889
-#define ER_SECONDARY_ENGINE_DDL 3890
-#define ER_INCORRECT_CURRENT_PASSWORD 3891
-#define ER_MISSING_CURRENT_PASSWORD 3892
-#define ER_CURRENT_PASSWORD_NOT_REQUIRED 3893
-#define ER_PASSWORD_CANNOT_BE_RETAINED_ON_PLUGIN_CHANGE 3894
-#define ER_CURRENT_PASSWORD_CANNOT_BE_RETAINED 3895
-#define ER_PARTIAL_REVOKES_EXIST 3896
-#define ER_CANNOT_GRANT_SYSTEM_PRIV_TO_MANDATORY_ROLE 3897
-#define ER_XA_REPLICATION_FILTERS 3898
-#define ER_UNSUPPORTED_SQL_MODE 3899
-#define ER_REGEXP_INVALID_FLAG 3900
-#define ER_PARTIAL_REVOKE_AND_DB_GRANT_BOTH_EXISTS 3901
-#define ER_UNIT_NOT_FOUND 3902
-#define ER_INVALID_JSON_VALUE_FOR_FUNC_INDEX 3903
-#define ER_JSON_VALUE_OUT_OF_RANGE_FOR_FUNC_INDEX 3904
-#define ER_EXCEEDED_MV_KEYS_NUM 3905
-#define ER_EXCEEDED_MV_KEYS_SPACE 3906
-#define ER_FUNCTIONAL_INDEX_DATA_IS_TOO_LONG 3907
-#define ER_WRONG_MVI_VALUE 3908
-#define ER_WARN_FUNC_INDEX_NOT_APPLICABLE 3909
-#define ER_GRP_RPL_UDF_ERROR 3910
-#define ER_UPDATE_GTID_PURGED_WITH_GR 3911
-#define ER_GROUPING_ON_TIMESTAMP_IN_DST 3912
-#define ER_TABLE_NAME_CAUSES_TOO_LONG_PATH 3913
-#define ER_AUDIT_LOG_INSUFFICIENT_PRIVILEGE 3914
-//#define OBSOLETE_ER_AUDIT_LOG_PASSWORD_HAS_BEEN_COPIED 3915
-#define ER_DA_GRP_RPL_STARTED_AUTO_REJOIN 3916
-#define ER_SYSVAR_CHANGE_DURING_QUERY 3917
-#define ER_GLOBSTAT_CHANGE_DURING_QUERY 3918
-#define ER_GRP_RPL_MESSAGE_SERVICE_INIT_FAILURE 3919
-#define ER_CHANGE_MASTER_WRONG_COMPRESSION_ALGORITHM_CLIENT 3920
-#define ER_CHANGE_MASTER_WRONG_COMPRESSION_LEVEL_CLIENT 3921
-#define ER_WRONG_COMPRESSION_ALGORITHM_CLIENT 3922
-#define ER_WRONG_COMPRESSION_LEVEL_CLIENT 3923
-#define ER_CHANGE_MASTER_WRONG_COMPRESSION_ALGORITHM_LIST_CLIENT 3924
-#define ER_CLIENT_PRIVILEGE_CHECKS_USER_CANNOT_BE_ANONYMOUS 3925
-#define ER_CLIENT_PRIVILEGE_CHECKS_USER_DOES_NOT_EXIST 3926
-#define ER_CLIENT_PRIVILEGE_CHECKS_USER_CORRUPT 3927
-#define ER_CLIENT_PRIVILEGE_CHECKS_USER_NEEDS_RPL_APPLIER_PRIV 3928
-#define ER_WARN_DA_PRIVILEGE_NOT_REGISTERED 3929
-#define ER_CLIENT_KEYRING_UDF_KEY_INVALID 3930
-#define ER_CLIENT_KEYRING_UDF_KEY_TYPE_INVALID 3931
-#define ER_CLIENT_KEYRING_UDF_KEY_TOO_LONG 3932
-#define ER_CLIENT_KEYRING_UDF_KEY_TYPE_TOO_LONG 3933
-#define ER_JSON_SCHEMA_VALIDATION_ERROR_WITH_DETAILED_REPORT 3934
-#define ER_DA_UDF_INVALID_CHARSET_SPECIFIED 3935
-#define ER_DA_UDF_INVALID_CHARSET 3936
-#define ER_DA_UDF_INVALID_COLLATION 3937
-#define ER_DA_UDF_INVALID_EXTENSION_ARGUMENT_TYPE 3938
-#define ER_MULTIPLE_CONSTRAINTS_WITH_SAME_NAME 3939
-#define ER_CONSTRAINT_NOT_FOUND 3940
-#define ER_ALTER_CONSTRAINT_ENFORCEMENT_NOT_SUPPORTED 3941
-#define ER_TABLE_VALUE_CONSTRUCTOR_MUST_HAVE_COLUMNS 3942
-#define ER_TABLE_VALUE_CONSTRUCTOR_CANNOT_HAVE_DEFAULT 3943
-#define ER_CLIENT_QUERY_FAILURE_INVALID_NON_ROW_FORMAT 3944
-#define ER_REQUIRE_ROW_FORMAT_INVALID_VALUE 3945
-#define ER_FAILED_TO_DETERMINE_IF_ROLE_IS_MANDATORY 3946
-#define ER_FAILED_TO_FETCH_MANDATORY_ROLE_LIST 3947
-#define ER_CLIENT_LOCAL_FILES_DISABLED 3948
-#define ER_IMP_INCOMPATIBLE_CFG_VERSION 3949
-#define ER_DA_OOM 3950
-#define ER_DA_UDF_INVALID_ARGUMENT_TO_SET_CHARSET 3951
-#define ER_DA_UDF_INVALID_RETURN_TYPE_TO_SET_CHARSET 3952
-#define ER_MULTIPLE_INTO_CLAUSES 3953
-#define ER_MISPLACED_INTO 3954
-#define ER_USER_ACCESS_DENIED_FOR_USER_ACCOUNT_BLOCKED_BY_PASSWORD_LOCK 3955
-#define ER_WARN_DEPRECATED_YEAR_UNSIGNED 3956
-#define ER_CLONE_NETWORK_PACKET 3957
-#define ER_SDI_OPERATION_FAILED_MISSING_RECORD 3958
-#define ER_DEPENDENT_BY_CHECK_CONSTRAINT 3959
-#define ER_GRP_OPERATION_NOT_ALLOWED_GR_MUST_STOP 3960
-#define ER_WARN_DEPRECATED_JSON_TABLE_ON_ERROR_ON_EMPTY 3961
-#define ER_WARN_DEPRECATED_INNER_INTO 3962
-#define ER_WARN_DEPRECATED_VALUES_FUNCTION_ALWAYS_NULL 3963
-#define ER_WARN_DEPRECATED_SQL_CALC_FOUND_ROWS 3964
-#define ER_WARN_DEPRECATED_FOUND_ROWS 3965
-#define ER_MISSING_JSON_VALUE 3966
-#define ER_MULTIPLE_JSON_VALUES 3967
-#define ER_HOSTNAME_TOO_LONG 3968
-#define ER_WARN_CLIENT_DEPRECATED_PARTITION_PREFIX_KEY 3969
-#define ER_GROUP_REPLICATION_USER_EMPTY_MSG 3970
-#define ER_GROUP_REPLICATION_USER_MANDATORY_MSG 3971
-#define ER_GROUP_REPLICATION_PASSWORD_LENGTH 3972
-#define ER_SUBQUERY_TRANSFORM_REJECTED 3973
-#define ER_DA_GRP_RPL_RECOVERY_ENDPOINT_FORMAT 3974
-#define ER_DA_GRP_RPL_RECOVERY_ENDPOINT_INVALID 3975
-#define ER_WRONG_VALUE_FOR_VAR_PLUS_ACTIONABLE_PART 3976
-#define ER_STATEMENT_NOT_ALLOWED_AFTER_START_TRANSACTION 3977
-#define ER_FOREIGN_KEY_WITH_ATOMIC_CREATE_SELECT 3978
-#define ER_NOT_ALLOWED_WITH_START_TRANSACTION 3979
-#define ER_INVALID_JSON_ATTRIBUTE 3980
-#define ER_ENGINE_ATTRIBUTE_NOT_SUPPORTED 3981
-#define ER_INVALID_USER_ATTRIBUTE_JSON 3982
-#define ER_INNODB_REDO_DISABLED 3983
-#define ER_INNODB_REDO_ARCHIVING_ENABLED 3984
-#define ER_MDL_OUT_OF_RESOURCES 3985
-#define ER_IMPLICIT_COMPARISON_FOR_JSON 3986
-#define ER_FUNCTION_DOES_NOT_SUPPORT_CHARACTER_SET 3987
-#define ER_IMPOSSIBLE_STRING_CONVERSION 3988
-#define ER_SCHEMA_READ_ONLY 3989
-#define ER_RPL_ASYNC_RECONNECT_GTID_MODE_OFF 3990
-#define ER_RPL_ASYNC_RECONNECT_AUTO_POSITION_OFF 3991
-#define ER_DISABLE_GTID_MODE_REQUIRES_ASYNC_RECONNECT_OFF 3992
-#define ER_DISABLE_AUTO_POSITION_REQUIRES_ASYNC_RECONNECT_OFF 3993
-#define ER_INVALID_PARAMETER_USE 3994
-#define ER_CHARACTER_SET_MISMATCH 3995
-#define ER_WARN_VAR_VALUE_CHANGE_NOT_SUPPORTED 3996
-#define ER_INVALID_TIME_ZONE_INTERVAL 3997
-#define ER_INVALID_CAST 3998
-#define ER_HYPERGRAPH_NOT_SUPPORTED_YET 3999
-#define ER_WARN_HYPERGRAPH_EXPERIMENTAL 4000
-#define ER_DA_NO_ERROR_LOG_PARSER_CONFIGURED 4001
-#define ER_DA_ERROR_LOG_TABLE_DISABLED 4002
-#define ER_DA_ERROR_LOG_MULTIPLE_FILTERS 4003
-#define ER_DA_CANT_OPEN_ERROR_LOG 4004
-#define ER_USER_REFERENCED_AS_DEFINER 4005
-#define ER_CANNOT_USER_REFERENCED_AS_DEFINER 4006
-#define ER_REGEX_NUMBER_TOO_BIG 4007
-#define ER_SPVAR_NONINTEGER_TYPE 4008
-#define WARN_UNSUPPORTED_ACL_TABLES_READ 4009
-#define ER_BINLOG_UNSAFE_ACL_TABLE_READ_IN_DML_DDL 4010
-#define ER_STOP_REPLICA_MONITOR_IO_THREAD_TIMEOUT 4011
-#define ER_STARTING_REPLICA_MONITOR_IO_THREAD 4012
-#define ER_CANT_USE_ANONYMOUS_TO_GTID_WITH_GTID_MODE_NOT_ON 4013
-#define ER_CANT_COMBINE_ANONYMOUS_TO_GTID_AND_AUTOPOSITION 4014
-#define ER_ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS_REQUIRES_GTID_MODE_ON 4015
-#define ER_SQL_REPLICA_SKIP_COUNTER_USED_WITH_GTID_MODE_ON 4016
-#define ER_USING_ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS_AS_LOCAL_OR_UUID 4017
-#define ER_CANT_SET_ANONYMOUS_TO_GTID_AND_WAIT_UNTIL_SQL_THD_AFTER_GTIDS 4018
-#define ER_CANT_SET_SQL_AFTER_OR_BEFORE_GTIDS_WITH_ANONYMOUS_TO_GTID 4019
-#define ER_ANONYMOUS_TO_GTID_UUID_SAME_AS_GROUP_NAME 4020
-#define ER_CANT_USE_SAME_UUID_AS_GROUP_NAME 4021
-#define ER_GRP_RPL_RECOVERY_CHANNEL_STILL_RUNNING 4022
-#define ER_INNODB_INVALID_AUTOEXTEND_SIZE_VALUE 4023
-#define ER_INNODB_INCOMPATIBLE_WITH_TABLESPACE 4024
-#define ER_INNODB_AUTOEXTEND_SIZE_OUT_OF_RANGE 4025
-#define ER_CANNOT_USE_AUTOEXTEND_SIZE_CLAUSE 4026
-#define ER_ROLE_GRANTED_TO_ITSELF 4027
-#define ER_TABLE_MUST_HAVE_A_VISIBLE_COLUMN 4028
-#define ER_INNODB_COMPRESSION_FAILURE 4029
-#define ER_WARN_ASYNC_CONN_FAILOVER_NETWORK_NAMESPACE 4030
-#define ER_CLIENT_INTERACTION_TIMEOUT 4031
-#define ER_INVALID_CAST_TO_GEOMETRY 4032
-#define ER_INVALID_CAST_POLYGON_RING_DIRECTION 4033
-#define ER_GIS_DIFFERENT_SRIDS_AGGREGATION 4034
-#define ER_RELOAD_KEYRING_FAILURE 4035
-#define ER_SDI_GET_KEYS_INVALID_TABLESPACE 4036
-#define ER_CHANGE_RPL_SRC_WRONG_COMPRESSION_ALGORITHM_SIZE 4037
-//#define OBSOLETE_ER_WARN_DEPRECATED_TLS_VERSION_FOR_CHANNEL_CLI 4038
-#define ER_CANT_USE_SAME_UUID_AS_VIEW_CHANGE_UUID 4039
-#define ER_ANONYMOUS_TO_GTID_UUID_SAME_AS_VIEW_CHANGE_UUID 4040
-#define ER_GRP_RPL_VIEW_CHANGE_UUID_FAIL_GET_VARIABLE 4041
-#define ER_WARN_ADUIT_LOG_MAX_SIZE_AND_PRUNE_SECONDS 4042
-#define ER_WARN_ADUIT_LOG_MAX_SIZE_CLOSE_TO_ROTATE_ON_SIZE 4043
-#define ER_KERBEROS_CREATE_USER 4044
-#define ER_INSTALL_PLUGIN_CONFLICT_CLIENT 4045
-#define ER_DA_ERROR_LOG_COMPONENT_FLUSH_FAILED 4046
-#define ER_WARN_SQL_AFTER_MTS_GAPS_GAP_NOT_CALCULATED 4047
-#define ER_INVALID_ASSIGNMENT_TARGET 4048
-#define ER_OPERATION_NOT_ALLOWED_ON_GR_SECONDARY 4049
-#define ER_GRP_RPL_FAILOVER_CHANNEL_STATUS_PROPAGATION 4050
-#define ER_WARN_AUDIT_LOG_FORMAT_UNIX_TIMESTAMP_ONLY_WHEN_JSON 4051
-#define ER_INVALID_MFA_PLUGIN_SPECIFIED 4052
-#define ER_IDENTIFIED_BY_UNSUPPORTED 4053
-#define ER_INVALID_PLUGIN_FOR_REGISTRATION 4054
-#define ER_PLUGIN_REQUIRES_REGISTRATION 4055
-#define ER_MFA_METHOD_EXISTS 4056
-#define ER_MFA_METHOD_NOT_EXISTS 4057
-#define ER_AUTHENTICATION_POLICY_MISMATCH 4058
-#define ER_PLUGIN_REGISTRATION_DONE 4059
-#define ER_INVALID_USER_FOR_REGISTRATION 4060
-#define ER_USER_REGISTRATION_FAILED 4061
-#define ER_MFA_METHODS_INVALID_ORDER 4062
-#define ER_MFA_METHODS_IDENTICAL 4063
-#define ER_INVALID_MFA_OPERATIONS_FOR_PASSWORDLESS_USER 4064
-#define ER_CHANGE_REPLICATION_SOURCE_NO_OPTIONS_FOR_GTID_ONLY 4065
-#define ER_CHANGE_REP_SOURCE_CANT_DISABLE_REQ_ROW_FORMAT_WITH_GTID_ONLY 4066
-#define ER_CHANGE_REP_SOURCE_CANT_DISABLE_AUTO_POSITION_WITH_GTID_ONLY 4067
-#define ER_CHANGE_REP_SOURCE_CANT_DISABLE_GTID_ONLY_WITHOUT_POSITIONS 4068
-#define ER_CHANGE_REP_SOURCE_CANT_DISABLE_AUTO_POS_WITHOUT_POSITIONS 4069
-#define ER_CHANGE_REP_SOURCE_GR_CHANNEL_WITH_GTID_MODE_NOT_ON 4070
-#define ER_CANT_USE_GTID_ONLY_WITH_GTID_MODE_NOT_ON 4071
-#define ER_WARN_C_DISABLE_GTID_ONLY_WITH_SOURCE_AUTO_POS_INVALID_POS 4072
-#define ER_DA_SSL_FIPS_MODE_ERROR 4073
-#define ER_VALUE_OUT_OF_RANGE 4074
-#define ER_FULLTEXT_WITH_ROLLUP 4075
-#define ER_REGEXP_MISSING_RESOURCE 4076
-#define ER_WARN_REGEXP_USING_DEFAULT 4077
-#define ER_REGEXP_MISSING_FILE 4078
-#define ER_WARN_DEPRECATED_COLLATION 4079
-#define ER_CONCURRENT_PROCEDURE_USAGE 4080
-#define ER_DA_GLOBAL_CONN_LIMIT 4081
-#define ER_DA_CONN_LIMIT 4082
-#define ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_COLUMN_TYPE_INSTANT 4083
-#define ER_WARN_SF_UDF_NAME_COLLISION 4084
-#define ER_CANNOT_PURGE_BINLOG_WITH_BACKUP_LOCK 4085
-#define ER_TOO_MANY_WINDOWS 4086
-#define ER_MYSQLBACKUP_CLIENT_MSG 4087
-#define ER_COMMENT_CONTAINS_INVALID_STRING 4088
-#define ER_DEFINITION_CONTAINS_INVALID_STRING 4089
-#define ER_CANT_EXECUTE_COMMAND_WITH_ASSIGNED_GTID_NEXT 4090
-#define ER_XA_TEMP_TABLE 4091
-#define ER_INNODB_MAX_ROW_VERSION 4092
-#define ER_INNODB_INSTANT_ADD_NOT_SUPPORTED_MAX_SIZE 4093
-#define ER_OPERATION_NOT_ALLOWED_WHILE_PRIMARY_CHANGE_IS_RUNNING 4094
-#define ER_WARN_DEPRECATED_DATETIME_DELIMITER 4095
-#define ER_WARN_DEPRECATED_SUPERFLUOUS_DELIMITER 4096
-#define ER_CANNOT_PERSIST_SENSITIVE_VARIABLES 4097
-#define ER_WARN_CANNOT_SECURELY_PERSIST_SENSITIVE_VARIABLES 4098
-#define ER_WARN_TRG_ALREADY_EXISTS 4099
-#define ER_IF_NOT_EXISTS_UNSUPPORTED_TRG_EXISTS_ON_DIFFERENT_TABLE 4100
-#define ER_IF_NOT_EXISTS_UNSUPPORTED_UDF_NATIVE_FCT_NAME_COLLISION 4101
-#define ER_SET_PASSWORD_AUTH_PLUGIN_ERROR 4102
-#define ER_REDUCED_DBLWR_FILE_CORRUPTED 4103
-#define ER_REDUCED_DBLWR_PAGE_FOUND 4104
-#define ER_SRS_INVALID_LATITUDE_OF_ORIGIN 4105
-#define ER_SRS_INVALID_LONGITUDE_OF_ORIGIN 4106
-#define ER_SRS_UNUSED_PROJ_PARAMETER_PRESENT 4107
-#define ER_GIPK_COLUMN_EXISTS 4108
-#define ER_GIPK_FAILED_AUTOINC_COLUMN_EXISTS 4109
-#define ER_GIPK_COLUMN_ALTER_NOT_ALLOWED 4110
-#define ER_DROP_PK_COLUMN_TO_DROP_GIPK 4111
-#define ER_CREATE_SELECT_WITH_GIPK_DISALLOWED_IN_SBR 4112
-#define ER_DA_EXPIRE_LOGS_DAYS_IGNORED 4113
-#define ER_CTE_RECURSIVE_NOT_UNION 4114
-#define ER_COMMAND_BACKEND_FAILED_TO_FETCH_SECURITY_CTX 4115
-#define ER_COMMAND_SERVICE_BACKEND_FAILED 4116
-#define ER_CLIENT_FILE_PRIVILEGE_FOR_REPLICATION_CHECKS 4117
-#define ER_GROUP_REPLICATION_FORCE_MEMBERS_COMMAND_FAILURE 4118
-#define ER_WARN_DEPRECATED_IDENT 4119
-#define ER_INTERSECT_ALL_MAX_DUPLICATES_EXCEEDED 4120
-#define ER_TP_QUERY_THRS_PER_GRP_EXCEEDS_TXN_THR_LIMIT 4121
-#define ER_BAD_TIMESTAMP_FORMAT 4122
-#define ER_SHAPE_PRIDICTION_UDF 4123
-#define ER_PARSER_TRACE 10000
-#define ER_BOOTSTRAP_CANT_THREAD 10001
-#define ER_TRIGGER_INVALID_VALUE 10002
-#define ER_OPT_WRONG_TREE 10003
-#define ER_DD_FAILSAFE 10004
-#define ER_DD_NO_WRITES_NO_REPOPULATION 10005
-#define ER_DD_VERSION_FOUND 10006
-#define ER_DD_VERSION_INSTALLED 10007
-#define ER_DD_VERSION_UNSUPPORTED 10008
-//#define OBSOLETE_ER_LOG_SYSLOG_FACILITY_FAIL 10009
-#define ER_LOG_SYSLOG_CANNOT_OPEN 10010
-#define ER_LOG_SLOW_CANNOT_OPEN 10011
-#define ER_LOG_GENERAL_CANNOT_OPEN 10012
-#define ER_LOG_CANNOT_WRITE 10013
-#define ER_RPL_ZOMBIE_ENCOUNTERED 10014
-#define ER_RPL_GTID_TABLE_CANNOT_OPEN 10015
-#define ER_SYSTEM_SCHEMA_NOT_FOUND 10016
-#define ER_DD_INIT_UPGRADE_FAILED 10017
-#define ER_VIEW_UNKNOWN_CHARSET_OR_COLLATION 10018
-#define ER_DD_VIEW_CANT_ALLOC_CHARSET 10019
-#define ER_DD_INIT_FAILED 10020
-#define ER_DD_UPDATING_PLUGIN_MD_FAILED 10021
-#define ER_DD_POPULATING_TABLES_FAILED 10022
-#define ER_DD_VIEW_CANT_CREATE 10023
-#define ER_DD_METADATA_NOT_FOUND 10024
-#define ER_DD_CACHE_NOT_EMPTY_AT_SHUTDOWN 10025
-#define ER_DD_OBJECT_REMAINS 10026
-#define ER_DD_OBJECT_REMAINS_IN_RELEASER 10027
-#define ER_DD_OBJECT_RELEASER_REMAINS 10028
-#define ER_DD_CANT_GET_OBJECT_KEY 10029
-#define ER_DD_CANT_CREATE_OBJECT_KEY 10030
-#define ER_CANT_CREATE_HANDLE_MGR_THREAD 10031
-#define ER_RPL_REPO_HAS_GAPS 10032
-#define ER_INVALID_VALUE_FOR_ENFORCE_GTID_CONSISTENCY 10033
-#define ER_CHANGED_ENFORCE_GTID_CONSISTENCY 10034
-#define ER_CHANGED_GTID_MODE 10035
-#define ER_DISABLED_STORAGE_ENGINE_AS_DEFAULT 10036
-#define ER_DEBUG_SYNC_HIT 10037
-#define ER_DEBUG_SYNC_EXECUTED 10038
-#define ER_DEBUG_SYNC_THREAD_MAX 10039
-#define ER_DEBUG_SYNC_OOM 10040
-#define ER_CANT_INIT_TC_LOG 10041
-#define ER_EVENT_CANT_INIT_QUEUE 10042
-#define ER_EVENT_PURGING_QUEUE 10043
-#define ER_EVENT_LAST_EXECUTION 10044
-#define ER_EVENT_MESSAGE_STACK 10045
-#define ER_EVENT_EXECUTION_FAILED 10046
-#define ER_CANT_INIT_SCHEDULER_THREAD 10047
-#define ER_SCHEDULER_STOPPED 10048
-#define ER_CANT_CREATE_SCHEDULER_THREAD 10049
-#define ER_SCHEDULER_WAITING 10050
-#define ER_SCHEDULER_STARTED 10051
-#define ER_SCHEDULER_STOPPING_FAILED_TO_GET_EVENT 10052
-#define ER_SCHEDULER_STOPPING_FAILED_TO_CREATE_WORKER 10053
-#define ER_SCHEDULER_KILLING 10054
-#define ER_UNABLE_TO_RESOLVE_IP 10055
-#define ER_UNABLE_TO_RESOLVE_HOSTNAME 10056
-#define ER_HOSTNAME_RESEMBLES_IPV4 10057
-#define ER_HOSTNAME_DOESNT_RESOLVE_TO 10058
-#define ER_ADDRESSES_FOR_HOSTNAME_HEADER 10059
-#define ER_ADDRESSES_FOR_HOSTNAME_LIST_ITEM 10060
-#define ER_TRG_WITHOUT_DEFINER 10061
-#define ER_TRG_NO_CLIENT_CHARSET 10062
-#define ER_PARSING_VIEW 10063
-#define ER_COMPONENTS_INFRASTRUCTURE_BOOTSTRAP 10064
-#define ER_COMPONENTS_INFRASTRUCTURE_SHUTDOWN 10065
-#define ER_COMPONENTS_PERSIST_LOADER_BOOTSTRAP 10066
-#define ER_DEPART_WITH_GRACE 10067
-#define ER_CA_SELF_SIGNED 10068
-#define ER_SSL_LIBRARY_ERROR 10069
-#define ER_NO_THD_NO_UUID 10070
-#define ER_UUID_SALT 10071
-#define ER_UUID_IS 10072
-#define ER_UUID_INVALID 10073
-#define ER_UUID_SCRUB 10074
-#define ER_CREATING_NEW_UUID 10075
-#define ER_CANT_CREATE_UUID 10076
-#define ER_UNKNOWN_UNSUPPORTED_STORAGE_ENGINE 10077
-#define ER_SECURE_AUTH_VALUE_UNSUPPORTED 10078
-#define ER_INVALID_INSTRUMENT 10079
-#define ER_INNODB_MANDATORY 10080
-//#define OBSOLETE_ER_INNODB_CANNOT_BE_IGNORED 10081
-//#define OBSOLETE_ER_OLD_PASSWORDS_NO_MIDDLE_GROUND 10082
-#define ER_VERBOSE_REQUIRES_HELP 10083
-#define ER_POINTLESS_WITHOUT_SLOWLOG 10084
-#define ER_WASTEFUL_NET_BUFFER_SIZE 10085
-#define ER_DEPRECATED_TIMESTAMP_IMPLICIT_DEFAULTS 10086
-#define ER_FT_BOOL_SYNTAX_INVALID 10087
-#define ER_CREDENTIALLESS_AUTO_USER_BAD 10088
-#define ER_CONNECTION_HANDLING_OOM 10089
-#define ER_THREAD_HANDLING_OOM 10090
-#define ER_CANT_CREATE_TEST_FILE 10091
-#define ER_CANT_CREATE_PID_FILE 10092
-#define ER_CANT_REMOVE_PID_FILE 10093
-#define ER_CANT_CREATE_SHUTDOWN_THREAD 10094
-#define ER_SEC_FILE_PRIV_CANT_ACCESS_DIR 10095
-#define ER_SEC_FILE_PRIV_IGNORED 10096
-#define ER_SEC_FILE_PRIV_EMPTY 10097
-#define ER_SEC_FILE_PRIV_NULL 10098
-#define ER_SEC_FILE_PRIV_DIRECTORY_INSECURE 10099
-#define ER_SEC_FILE_PRIV_CANT_STAT 10100
-#define ER_SEC_FILE_PRIV_DIRECTORY_PERMISSIONS 10101
-#define ER_SEC_FILE_PRIV_ARGUMENT_TOO_LONG 10102
-#define ER_CANT_CREATE_NAMED_PIPES_THREAD 10103
-#define ER_CANT_CREATE_TCPIP_THREAD 10104
-#define ER_CANT_CREATE_SHM_THREAD 10105
-#define ER_CANT_CREATE_INTERRUPT_THREAD 10106
-#define ER_WRITABLE_CONFIG_REMOVED 10107
-#define ER_CORE_VALUES 10108
-#define ER_WRONG_DATETIME_SPEC 10109
-#define ER_RPL_BINLOG_FILTERS_OOM 10110
-#define ER_KEYCACHE_OOM 10111
-#define ER_CONFIRMING_THE_FUTURE 10112
-#define ER_BACK_IN_TIME 10113
-#define ER_FUTURE_DATE 10114
-#define ER_UNSUPPORTED_DATE 10115
-#define ER_STARTING_AS 10116
-#define ER_SHUTTING_DOWN_SLAVE_THREADS 10117
-#define ER_DISCONNECTING_REMAINING_CLIENTS 10118
-#define ER_ABORTING 10119
-#define ER_BINLOG_END 10120
-#define ER_CALL_ME_LOCALHOST 10121
-#define ER_USER_REQUIRES_ROOT 10122
-#define ER_REALLY_RUN_AS_ROOT 10123
-#define ER_USER_WHAT_USER 10124
-#define ER_TRANSPORTS_WHAT_TRANSPORTS 10125
-#define ER_FAIL_SETGID 10126
-#define ER_FAIL_SETUID 10127
-#define ER_FAIL_SETREGID 10128
-#define ER_FAIL_SETREUID 10129
-#define ER_FAIL_CHROOT 10130
-#define ER_WIN_LISTEN_BUT_HOW 10131
-#define ER_NOT_RIGHT_NOW 10132
-#define ER_FIXING_CLIENT_CHARSET 10133
-#define ER_OOM 10134
-#define ER_FAILED_TO_LOCK_MEM 10135
-#define ER_MYINIT_FAILED 10136
-#define ER_BEG_INITFILE 10137
-#define ER_END_INITFILE 10138
-#define ER_CHANGED_MAX_OPEN_FILES 10139
-#define ER_CANT_INCREASE_MAX_OPEN_FILES 10140
-#define ER_CHANGED_MAX_CONNECTIONS 10141
-#define ER_CHANGED_TABLE_OPEN_CACHE 10142
-#define ER_THE_USER_ABIDES 10143
-#define ER_RPL_CANT_ADD_DO_TABLE 10144
-#define ER_RPL_CANT_ADD_IGNORE_TABLE 10145
-#define ER_TRACK_VARIABLES_BOGUS 10146
-#define ER_EXCESS_ARGUMENTS 10147
-#define ER_VERBOSE_HINT 10148
-#define ER_CANT_READ_ERRMSGS 10149
-#define ER_CANT_INIT_DBS 10150
-#define ER_LOG_OUTPUT_CONTRADICTORY 10151
-#define ER_NO_CSV_NO_LOG_TABLES 10152
-#define ER_RPL_REWRITEDB_MISSING_ARROW 10153
-#define ER_RPL_REWRITEDB_EMPTY_FROM 10154
-#define ER_RPL_REWRITEDB_EMPTY_TO 10155
-#define ER_LOG_FILES_GIVEN_LOG_OUTPUT_IS_TABLE 10156
-#define ER_LOG_FILE_INVALID 10157
-#define ER_LOWER_CASE_TABLE_NAMES_CS_DD_ON_CI_FS_UNSUPPORTED 10158
-#define ER_LOWER_CASE_TABLE_NAMES_USING_2 10159
-#define ER_LOWER_CASE_TABLE_NAMES_USING_0 10160
-#define ER_NEED_LOG_BIN 10161
-#define ER_NEED_FILE_INSTEAD_OF_DIR 10162
-#define ER_LOG_BIN_BETTER_WITH_NAME 10163
-#define ER_BINLOG_NEEDS_SERVERID 10164
-#define ER_RPL_CANT_MAKE_PATHS 10165
-#define ER_CANT_INITIALIZE_GTID 10166
-#define ER_CANT_INITIALIZE_EARLY_PLUGINS 10167
-#define ER_CANT_INITIALIZE_BUILTIN_PLUGINS 10168
-#define ER_CANT_INITIALIZE_DYNAMIC_PLUGINS 10169
-#define ER_PERFSCHEMA_INIT_FAILED 10170
-#define ER_STACKSIZE_UNEXPECTED 10171
-//#define OBSOLETE_ER_CANT_SET_DATADIR 10172
-#define ER_CANT_STAT_DATADIR 10173
-#define ER_CANT_CHOWN_DATADIR 10174
-#define ER_CANT_SET_UP_PERSISTED_VALUES 10175
-#define ER_CANT_SAVE_GTIDS 10176
-#define ER_AUTH_CANT_SET_DEFAULT_PLUGIN 10177
-#define ER_CANT_JOIN_SHUTDOWN_THREAD 10178
-#define ER_CANT_HASH_DO_AND_IGNORE_RULES 10179
-#define ER_CANT_OPEN_CA 10180
-#define ER_CANT_ACCESS_CAPATH 10181
-#define ER_SSL_TRYING_DATADIR_DEFAULTS 10182
-#define ER_AUTO_OPTIONS_FAILED 10183
-#define ER_CANT_INIT_TIMER 10184
-#define ER_SERVERID_TOO_LARGE 10185
-#define ER_DEFAULT_SE_UNAVAILABLE 10186
-#define ER_CANT_OPEN_ERROR_LOG 10187
-#define ER_INVALID_ERROR_LOG_NAME 10188
-#define ER_RPL_INFINITY_DENIED 10189
-#define ER_RPL_INFINITY_IGNORED 10190
-//#define OBSOLETE_ER_NDB_TABLES_NOT_READY 10191
-#define ER_TABLE_CHECK_INTACT 10192
-#define ER_DD_TABLESPACE_NOT_FOUND 10193
-#define ER_DD_TRG_CONNECTION_COLLATION_MISSING 10194
-#define ER_DD_TRG_DB_COLLATION_MISSING 10195
-#define ER_DD_TRG_DEFINER_OOM 10196
-#define ER_DD_TRG_FILE_UNREADABLE 10197
-#define ER_TRG_CANT_PARSE 10198
-#define ER_DD_TRG_CANT_ADD 10199
-#define ER_DD_CANT_RESOLVE_VIEW 10200
-#define ER_DD_VIEW_WITHOUT_DEFINER 10201
-#define ER_PLUGIN_INIT_FAILED 10202
-#define ER_RPL_TRX_DELEGATES_INIT_FAILED 10203
-#define ER_RPL_BINLOG_STORAGE_DELEGATES_INIT_FAILED 10204
-#define ER_RPL_BINLOG_TRANSMIT_DELEGATES_INIT_FAILED 10205
-#define ER_RPL_BINLOG_RELAY_DELEGATES_INIT_FAILED 10206
-#define ER_RPL_PLUGIN_FUNCTION_FAILED 10207
-#define ER_SQL_HA_READ_FAILED 10208
-#define ER_SR_BOGUS_VALUE 10209
-#define ER_SR_INVALID_CONTEXT 10210
-#define ER_READING_TABLE_FAILED 10211
-#define ER_DES_FILE_WRONG_KEY 10212
-#define ER_CANT_SET_PERSISTED 10213
-#define ER_JSON_PARSE_ERROR 10214
-#define ER_CONFIG_OPTION_WITHOUT_GROUP 10215
-#define ER_VALGRIND_DO_QUICK_LEAK_CHECK 10216
-#define ER_VALGRIND_COUNT_LEAKS 10217
-#define ER_LOAD_DATA_INFILE_FAILED_IN_UNEXPECTED_WAY 10218
-#define ER_UNKNOWN_ERROR_NUMBER 10219
-#define ER_UDF_CANT_ALLOC_FOR_STRUCTURES 10220
-#define ER_UDF_CANT_ALLOC_FOR_FUNCTION 10221
-#define ER_UDF_INVALID_ROW_IN_FUNCTION_TABLE 10222
-#define ER_UDF_CANT_OPEN_FUNCTION_TABLE 10223
-#define ER_XA_RECOVER_FOUND_TRX_IN_SE 10224
-#define ER_XA_RECOVER_FOUND_XA_TRX 10225
-//#define OBSOLETE_ER_XA_IGNORING_XID 10226
-//#define OBSOLETE_ER_XA_COMMITTING_XID 10227
-//#define OBSOLETE_ER_XA_ROLLING_BACK_XID 10228
-#define ER_XA_STARTING_RECOVERY 10229
-#define ER_XA_NO_MULTI_2PC_HEURISTIC_RECOVER 10230
-#define ER_XA_RECOVER_EXPLANATION 10231
-#define ER_XA_RECOVERY_DONE 10232
-#define ER_TRX_GTID_COLLECT_REJECT 10233
-#define ER_SQL_AUTHOR_DEFAULT_ROLES_FAIL 10234
-#define ER_SQL_USER_TABLE_CREATE_WARNING 10235
-#define ER_SQL_USER_TABLE_ALTER_WARNING 10236
-#define ER_ROW_IN_WRONG_PARTITION_PLEASE_REPAIR 10237
-#define ER_MYISAM_CRASHED_ERROR_IN_THREAD 10238
-#define ER_MYISAM_CRASHED_ERROR_IN 10239
-#define ER_TOO_MANY_STORAGE_ENGINES 10240
-#define ER_SE_TYPECODE_CONFLICT 10241
-#define ER_TRX_WRITE_SET_OOM 10242
-#define ER_HANDLERTON_OOM 10243
-#define ER_CONN_SHM_LISTENER 10244
-#define ER_CONN_SHM_CANT_CREATE_SERVICE 10245
-#define ER_CONN_SHM_CANT_CREATE_CONNECTION 10246
-#define ER_CONN_PIP_CANT_CREATE_EVENT 10247
-#define ER_CONN_PIP_CANT_CREATE_PIPE 10248
-#define ER_CONN_PER_THREAD_NO_THREAD 10249
-#define ER_CONN_TCP_NO_SOCKET 10250
-#define ER_CONN_TCP_CREATED 10251
-#define ER_CONN_TCP_ADDRESS 10252
-#define ER_CONN_TCP_IPV6_AVAILABLE 10253
-#define ER_CONN_TCP_IPV6_UNAVAILABLE 10254
-#define ER_CONN_TCP_ERROR_WITH_STRERROR 10255
-#define ER_CONN_TCP_CANT_RESOLVE_HOSTNAME 10256
-#define ER_CONN_TCP_IS_THERE_ANOTHER_USING_PORT 10257
-#define ER_CONN_UNIX_IS_THERE_ANOTHER_USING_SOCKET 10258
-#define ER_CONN_UNIX_PID_CLAIMED_SOCKET_FILE 10259
-#define ER_CONN_TCP_CANT_RESET_V6ONLY 10260
-#define ER_CONN_TCP_BIND_RETRY 10261
-#define ER_CONN_TCP_BIND_FAIL 10262
-#define ER_CONN_TCP_IP_NOT_LOGGED 10263
-#define ER_CONN_TCP_RESOLVE_INFO 10264
-#define ER_CONN_TCP_START_FAIL 10265
-#define ER_CONN_TCP_LISTEN_FAIL 10266
-#define ER_CONN_UNIX_PATH_TOO_LONG 10267
-#define ER_CONN_UNIX_LOCK_FILE_FAIL 10268
-#define ER_CONN_UNIX_NO_FD 10269
-#define ER_CONN_UNIX_NO_BIND_NO_START 10270
-#define ER_CONN_UNIX_LISTEN_FAILED 10271
-#define ER_CONN_UNIX_LOCK_FILE_GIVING_UP 10272
-#define ER_CONN_UNIX_LOCK_FILE_CANT_CREATE 10273
-#define ER_CONN_UNIX_LOCK_FILE_CANT_OPEN 10274
-#define ER_CONN_UNIX_LOCK_FILE_CANT_READ 10275
-#define ER_CONN_UNIX_LOCK_FILE_EMPTY 10276
-#define ER_CONN_UNIX_LOCK_FILE_PIDLESS 10277
-#define ER_CONN_UNIX_LOCK_FILE_CANT_WRITE 10278
-#define ER_CONN_UNIX_LOCK_FILE_CANT_DELETE 10279
-#define ER_CONN_UNIX_LOCK_FILE_CANT_SYNC 10280
-#define ER_CONN_UNIX_LOCK_FILE_CANT_CLOSE 10281
-#define ER_CONN_SOCKET_SELECT_FAILED 10282
-#define ER_CONN_SOCKET_ACCEPT_FAILED 10283
-#define ER_AUTH_RSA_CANT_FIND 10284
-#define ER_AUTH_RSA_CANT_PARSE 10285
-#define ER_AUTH_RSA_CANT_READ 10286
-#define ER_AUTH_RSA_FILES_NOT_FOUND 10287
-#define ER_CONN_ATTR_TRUNCATED 10288
-#define ER_X509_CIPHERS_MISMATCH 10289
-#define ER_X509_ISSUER_MISMATCH 10290
-#define ER_X509_SUBJECT_MISMATCH 10291
-#define ER_AUTH_CANT_ACTIVATE_ROLE 10292
-#define ER_X509_NEEDS_RSA_PRIVKEY 10293
-#define ER_X509_CANT_WRITE_KEY 10294
-#define ER_X509_CANT_CHMOD_KEY 10295
-#define ER_X509_CANT_READ_CA_KEY 10296
-#define ER_X509_CANT_READ_CA_CERT 10297
-#define ER_X509_CANT_CREATE_CERT 10298
-#define ER_X509_CANT_WRITE_CERT 10299
-#define ER_AUTH_CANT_CREATE_RSA_PAIR 10300
-#define ER_AUTH_CANT_WRITE_PRIVKEY 10301
-#define ER_AUTH_CANT_WRITE_PUBKEY 10302
-#define ER_AUTH_SSL_CONF_PREVENTS_CERT_GENERATION 10303
-#define ER_AUTH_USING_EXISTING_CERTS 10304
-#define ER_AUTH_CERTS_SAVED_TO_DATADIR 10305
-#define ER_AUTH_CERT_GENERATION_DISABLED 10306
-#define ER_AUTH_RSA_CONF_PREVENTS_KEY_GENERATION 10307
-#define ER_AUTH_KEY_GENERATION_SKIPPED_PAIR_PRESENT 10308
-#define ER_AUTH_KEYS_SAVED_TO_DATADIR 10309
-#define ER_AUTH_KEY_GENERATION_DISABLED 10310
-#define ER_AUTHCACHE_PROXIES_PRIV_SKIPPED_NEEDS_RESOLVE 10311
-#define ER_AUTHCACHE_PLUGIN_MISSING 10312
-#define ER_AUTHCACHE_PLUGIN_CONFIG 10313
-//#define OBSOLETE_ER_AUTHCACHE_ROLE_TABLES_DODGY 10314
-#define ER_AUTHCACHE_USER_SKIPPED_NEEDS_RESOLVE 10315
-#define ER_AUTHCACHE_USER_TABLE_DODGY 10316
-#define ER_AUTHCACHE_USER_IGNORED_DEPRECATED_PASSWORD 10317
-#define ER_AUTHCACHE_USER_IGNORED_NEEDS_PLUGIN 10318
-#define ER_AUTHCACHE_USER_IGNORED_INVALID_PASSWORD 10319
-#define ER_AUTHCACHE_EXPIRED_PASSWORD_UNSUPPORTED 10320
-#define ER_NO_SUPER_WITHOUT_USER_PLUGIN 10321
-#define ER_AUTHCACHE_DB_IGNORED_EMPTY_NAME 10322
-#define ER_AUTHCACHE_DB_SKIPPED_NEEDS_RESOLVE 10323
-#define ER_AUTHCACHE_DB_ENTRY_LOWERCASED_REVOKE_WILL_FAIL 10324
-#define ER_AUTHCACHE_TABLE_PROXIES_PRIV_MISSING 10325
-#define ER_AUTHCACHE_CANT_OPEN_AND_LOCK_PRIVILEGE_TABLES 10326
-#define ER_AUTHCACHE_CANT_INIT_GRANT_SUBSYSTEM 10327
-#define ER_AUTHCACHE_PROCS_PRIV_SKIPPED_NEEDS_RESOLVE 10328
-#define ER_AUTHCACHE_PROCS_PRIV_ENTRY_IGNORED_BAD_ROUTINE_TYPE 10329
-#define ER_AUTHCACHE_TABLES_PRIV_SKIPPED_NEEDS_RESOLVE 10330
-#define ER_USER_NOT_IN_EXTRA_USERS_BINLOG_POSSIBLY_INCOMPLETE 10331
-#define ER_DD_SCHEMA_NOT_FOUND 10332
-#define ER_DD_TABLE_NOT_FOUND 10333
-#define ER_DD_SE_INIT_FAILED 10334
-#define ER_DD_ABORTING_PARTIAL_UPGRADE 10335
-#define ER_DD_FRM_EXISTS_FOR_TABLE 10336
-#define ER_DD_CREATED_FOR_UPGRADE 10337
-#define ER_ERRMSG_CANT_FIND_FILE 10338
-#define ER_ERRMSG_LOADING_55_STYLE 10339
-#define ER_ERRMSG_MISSING_IN_FILE 10340
-#define ER_ERRMSG_OOM 10341
-#define ER_ERRMSG_CANT_READ 10342
-#define ER_TABLE_INCOMPATIBLE_DECIMAL_FIELD 10343
-#define ER_TABLE_INCOMPATIBLE_YEAR_FIELD 10344
-#define ER_INVALID_CHARSET_AND_DEFAULT_IS_MB 10345
-#define ER_TABLE_WRONG_KEY_DEFINITION 10346
-#define ER_CANT_OPEN_FRM_FILE 10347
-#define ER_CANT_READ_FRM_FILE 10348
-#define ER_TABLE_CREATED_WITH_DIFFERENT_VERSION 10349
-#define ER_VIEW_UNPARSABLE 10350
-#define ER_FILE_TYPE_UNKNOWN 10351
-#define ER_INVALID_INFO_IN_FRM 10352
-#define ER_CANT_OPEN_AND_LOCK_PRIVILEGE_TABLES 10353
-#define ER_AUDIT_PLUGIN_DOES_NOT_SUPPORT_AUDIT_AUTH_EVENTS 10354
-#define ER_AUDIT_PLUGIN_HAS_INVALID_DATA 10355
-#define ER_TZ_OOM_INITIALIZING_TIME_ZONES 10356
-#define ER_TZ_CANT_OPEN_AND_LOCK_TIME_ZONE_TABLE 10357
-#define ER_TZ_OOM_LOADING_LEAP_SECOND_TABLE 10358
-#define ER_TZ_TOO_MANY_LEAPS_IN_LEAP_SECOND_TABLE 10359
-#define ER_TZ_ERROR_LOADING_LEAP_SECOND_TABLE 10360
-#define ER_TZ_UNKNOWN_OR_ILLEGAL_DEFAULT_TIME_ZONE 10361
-#define ER_TZ_CANT_FIND_DESCRIPTION_FOR_TIME_ZONE 10362
-#define ER_TZ_CANT_FIND_DESCRIPTION_FOR_TIME_ZONE_ID 10363
-#define ER_TZ_TRANSITION_TYPE_TABLE_TYPE_TOO_LARGE 10364
-#define ER_TZ_TRANSITION_TYPE_TABLE_ABBREVIATIONS_EXCEED_SPACE 10365
-#define ER_TZ_TRANSITION_TYPE_TABLE_LOAD_ERROR 10366
-#define ER_TZ_TRANSITION_TABLE_TOO_MANY_TRANSITIONS 10367
-#define ER_TZ_TRANSITION_TABLE_BAD_TRANSITION_TYPE 10368
-#define ER_TZ_TRANSITION_TABLE_LOAD_ERROR 10369
-#define ER_TZ_NO_TRANSITION_TYPES_IN_TIME_ZONE 10370
-#define ER_TZ_OOM_LOADING_TIME_ZONE_DESCRIPTION 10371
-#define ER_TZ_CANT_BUILD_MKTIME_MAP 10372
-#define ER_TZ_OOM_WHILE_LOADING_TIME_ZONE 10373
-#define ER_TZ_OOM_WHILE_SETTING_TIME_ZONE 10374
-#define ER_SLAVE_SQL_THREAD_STOPPED_UNTIL_CONDITION_BAD 10375
-#define ER_SLAVE_SQL_THREAD_STOPPED_UNTIL_POSITION_REACHED 10376
-#define ER_SLAVE_SQL_THREAD_STOPPED_BEFORE_GTIDS_ALREADY_APPLIED 10377
-#define ER_SLAVE_SQL_THREAD_STOPPED_BEFORE_GTIDS_REACHED 10378
-#define ER_SLAVE_SQL_THREAD_STOPPED_AFTER_GTIDS_REACHED 10379
-#define ER_SLAVE_SQL_THREAD_STOPPED_GAP_TRX_PROCESSED 10380
-#define ER_GROUP_REPLICATION_PLUGIN_NOT_INSTALLED 10381
-#define ER_GTID_ALREADY_ADDED_BY_USER 10382
-#define ER_FAILED_TO_DELETE_FROM_GTID_EXECUTED_TABLE 10383
-#define ER_FAILED_TO_COMPRESS_GTID_EXECUTED_TABLE 10384
-#define ER_FAILED_TO_COMPRESS_GTID_EXECUTED_TABLE_OOM 10385
-#define ER_FAILED_TO_INIT_THREAD_ATTR_FOR_GTID_TABLE_COMPRESSION 10386
-#define ER_FAILED_TO_CREATE_GTID_TABLE_COMPRESSION_THREAD 10387
-#define ER_FAILED_TO_JOIN_GTID_TABLE_COMPRESSION_THREAD 10388
-#define ER_NPIPE_FAILED_TO_INIT_SECURITY_DESCRIPTOR 10389
-#define ER_NPIPE_FAILED_TO_SET_SECURITY_DESCRIPTOR 10390
-#define ER_NPIPE_PIPE_ALREADY_IN_USE 10391
-//#define OBSOLETE_ER_NDB_SLAVE_SAW_EPOCH_LOWER_THAN_PREVIOUS_ON_START 10392
-//#define OBSOLETE_ER_NDB_SLAVE_SAW_EPOCH_LOWER_THAN_PREVIOUS 10393
-//#define OBSOLETE_ER_NDB_SLAVE_SAW_ALREADY_COMMITTED_EPOCH 10394
-//#define OBSOLETE_ER_NDB_SLAVE_PREVIOUS_EPOCH_NOT_COMMITTED 10395
-//#define OBSOLETE_ER_NDB_SLAVE_MISSING_DATA_FOR_TIMESTAMP_COLUMN 10396
-//#define OBSOLETE_ER_NDB_SLAVE_LOGGING_EXCEPTIONS_TO 10397
-//#define OBSOLETE_ER_NDB_SLAVE_LOW_EPOCH_RESOLUTION 10398
-//#define OBSOLETE_ER_NDB_INFO_FOUND_UNEXPECTED_FIELD_TYPE 10399
-//#define OBSOLETE_ER_NDB_INFO_FAILED_TO_CREATE_NDBINFO 10400
-//#define OBSOLETE_ER_NDB_INFO_FAILED_TO_INIT_NDBINFO 10401
-//#define OBSOLETE_ER_NDB_CLUSTER_WRONG_NUMBER_OF_FUNCTION_ARGUMENTS 10402
-//#define OBSOLETE_ER_NDB_CLUSTER_SCHEMA_INFO 10403
-//#define OBSOLETE_ER_NDB_CLUSTER_GENERIC_MESSAGE 10404
-#define ER_RPL_CANT_OPEN_INFO_TABLE 10405
-#define ER_RPL_CANT_SCAN_INFO_TABLE 10406
-#define ER_RPL_CORRUPTED_INFO_TABLE 10407
-#define ER_RPL_CORRUPTED_KEYS_IN_INFO_TABLE 10408
-#define ER_RPL_WORKER_ID_IS 10409
-#define ER_RPL_INCONSISTENT_TIMESTAMPS_IN_TRX 10410
-#define ER_RPL_INCONSISTENT_SEQUENCE_NO_IN_TRX 10411
-#define ER_RPL_CHANNELS_REQUIRE_TABLES_AS_INFO_REPOSITORIES 10412
-#define ER_RPL_CHANNELS_REQUIRE_NON_ZERO_SERVER_ID 10413
-#define ER_RPL_REPO_SHOULD_BE_TABLE 10414
-#define ER_RPL_ERROR_CREATING_MASTER_INFO 10415
-#define ER_RPL_ERROR_CHANGING_MASTER_INFO_REPO_TYPE 10416
-#define ER_RPL_CHANGING_RELAY_LOG_INFO_REPO_TYPE_FAILED_DUE_TO_GAPS 10417
-#define ER_RPL_ERROR_CREATING_RELAY_LOG_INFO 10418
-#define ER_RPL_ERROR_CHANGING_RELAY_LOG_INFO_REPO_TYPE 10419
-#define ER_RPL_FAILED_TO_DELETE_FROM_SLAVE_WORKERS_INFO_REPOSITORY 10420
-#define ER_RPL_FAILED_TO_RESET_STATE_IN_SLAVE_INFO_REPOSITORY 10421
-#define ER_RPL_ERROR_CHECKING_REPOSITORY 10422
-#define ER_RPL_SLAVE_GENERIC_MESSAGE 10423
-#define ER_RPL_SLAVE_COULD_NOT_CREATE_CHANNEL_LIST 10424
-#define ER_RPL_MULTISOURCE_REQUIRES_TABLE_TYPE_REPOSITORIES 10425
-#define ER_RPL_SLAVE_FAILED_TO_INIT_A_MASTER_INFO_STRUCTURE 10426
-#define ER_RPL_SLAVE_FAILED_TO_INIT_MASTER_INFO_STRUCTURE 10427
-#define ER_RPL_SLAVE_FAILED_TO_CREATE_CHANNEL_FROM_MASTER_INFO 10428
-#define ER_RPL_FAILED_TO_CREATE_NEW_INFO_FILE 10429
-#define ER_RPL_FAILED_TO_CREATE_CACHE_FOR_INFO_FILE 10430
-#define ER_RPL_FAILED_TO_OPEN_INFO_FILE 10431
-#define ER_RPL_GTID_MEMORY_FINALLY_AVAILABLE 10432
-#define ER_SERVER_COST_UNKNOWN_COST_CONSTANT 10433
-#define ER_SERVER_COST_INVALID_COST_CONSTANT 10434
-#define ER_ENGINE_COST_UNKNOWN_COST_CONSTANT 10435
-#define ER_ENGINE_COST_UNKNOWN_STORAGE_ENGINE 10436
-#define ER_ENGINE_COST_INVALID_DEVICE_TYPE_FOR_SE 10437
-#define ER_ENGINE_COST_INVALID_CONST_CONSTANT_FOR_SE_AND_DEVICE 10438
-#define ER_SERVER_COST_FAILED_TO_READ 10439
-#define ER_ENGINE_COST_FAILED_TO_READ 10440
-#define ER_FAILED_TO_OPEN_COST_CONSTANT_TABLES 10441
-#define ER_RPL_UNSUPPORTED_UNIGNORABLE_EVENT_IN_STREAM 10442
-#define ER_RPL_GTID_LOG_EVENT_IN_STREAM 10443
-#define ER_RPL_UNEXPECTED_BEGIN_IN_STREAM 10444
-#define ER_RPL_UNEXPECTED_COMMIT_ROLLBACK_OR_XID_LOG_EVENT_IN_STREAM 10445
-#define ER_RPL_UNEXPECTED_XA_ROLLBACK_IN_STREAM 10446
-#define ER_EVENT_EXECUTION_FAILED_CANT_AUTHENTICATE_USER 10447
-#define ER_EVENT_EXECUTION_FAILED_USER_LOST_EVEN_PRIVILEGE 10448
-#define ER_EVENT_ERROR_DURING_COMPILATION 10449
-#define ER_EVENT_DROPPING 10450
-//#define OBSOLETE_ER_NDB_SCHEMA_GENERIC_MESSAGE 10451
-#define ER_RPL_INCOMPATIBLE_DECIMAL_IN_RBR 10452
-#define ER_INIT_ROOT_WITHOUT_PASSWORD 10453
-#define ER_INIT_GENERATING_TEMP_PASSWORD_FOR_ROOT 10454
-#define ER_INIT_CANT_OPEN_BOOTSTRAP_FILE 10455
-#define ER_INIT_BOOTSTRAP_COMPLETE 10456
-#define ER_INIT_DATADIR_NOT_EMPTY_WONT_INITIALIZE 10457
-#define ER_INIT_DATADIR_EXISTS_WONT_INITIALIZE 10458
-#define ER_INIT_DATADIR_EXISTS_AND_PATH_TOO_LONG_WONT_INITIALIZE 10459
-#define ER_INIT_DATADIR_EXISTS_AND_NOT_WRITABLE_WONT_INITIALIZE 10460
-#define ER_INIT_CREATING_DD 10461
-#define ER_RPL_BINLOG_STARTING_DUMP 10462
-#define ER_RPL_BINLOG_MASTER_SENDS_HEARTBEAT 10463
-#define ER_RPL_BINLOG_SKIPPING_REMAINING_HEARTBEAT_INFO 10464
-#define ER_RPL_BINLOG_MASTER_USES_CHECKSUM_AND_SLAVE_CANT 10465
-//#define OBSOLETE_ER_NDB_QUERY_FAILED 10466
-#define ER_KILLING_THREAD 10467
-#define ER_DETACHING_SESSION_LEFT_BY_PLUGIN 10468
-#define ER_CANT_DETACH_SESSION_LEFT_BY_PLUGIN 10469
-#define ER_DETACHED_SESSIONS_LEFT_BY_PLUGIN 10470
-#define ER_FAILED_TO_DECREMENT_NUMBER_OF_THREADS 10471
-#define ER_PLUGIN_DID_NOT_DEINITIALIZE_THREADS 10472
-#define ER_KILLED_THREADS_OF_PLUGIN 10473
-//#define OBSOLETE_ER_NDB_SLAVE_MAX_REPLICATED_EPOCH_UNKNOWN 10474
-//#define OBSOLETE_ER_NDB_SLAVE_MAX_REPLICATED_EPOCH_SET_TO 10475
-//#define OBSOLETE_ER_NDB_NODE_ID_AND_MANAGEMENT_SERVER_INFO 10476
-//#define OBSOLETE_ER_NDB_DISCONNECT_INFO 10477
-//#define OBSOLETE_ER_NDB_COLUMN_DEFAULTS_DIFFER 10478
-//#define OBSOLETE_ER_NDB_COLUMN_SHOULD_NOT_HAVE_NATIVE_DEFAULT 10479
-//#define OBSOLETE_ER_NDB_FIELD_INFO 10480
-//#define OBSOLETE_ER_NDB_COLUMN_INFO 10481
-//#define OBSOLETE_ER_NDB_OOM_IN_FIX_UNIQUE_INDEX_ATTR_ORDER 10482
-//#define OBSOLETE_ER_NDB_SLAVE_MALFORMED_EVENT_RECEIVED_ON_TABLE 10483
-//#define OBSOLETE_ER_NDB_SLAVE_CONFLICT_FUNCTION_REQUIRES_ROLE 10484
-//#define OBSOLETE_ER_NDB_SLAVE_CONFLICT_TRANSACTION_IDS 10485
-//#define OBSOLETE_ER_NDB_SLAVE_BINLOG_MISSING_INFO_FOR_CONFLICT_DETECTION 10486
-//#define OBSOLETE_ER_NDB_ERROR_IN_READAUTOINCREMENTVALUE 10487
-//#define OBSOLETE_ER_NDB_FOUND_UNCOMMITTED_AUTOCOMMIT 10488
-//#define OBSOLETE_ER_NDB_SLAVE_TOO_MANY_RETRIES 10489
-//#define OBSOLETE_ER_NDB_SLAVE_ERROR_IN_UPDATE_CREATE_INFO 10490
-//#define OBSOLETE_ER_NDB_SLAVE_CANT_ALLOCATE_TABLE_SHARE 10491
-//#define OBSOLETE_ER_NDB_BINLOG_ERROR_INFO_FROM_DA 10492
-//#define OBSOLETE_ER_NDB_BINLOG_CREATE_TABLE_EVENT 10493
-//#define OBSOLETE_ER_NDB_BINLOG_FAILED_CREATE_TABLE_EVENT_OPERATIONS 10494
-//#define OBSOLETE_ER_NDB_BINLOG_RENAME_EVENT 10495
-//#define OBSOLETE_ER_NDB_BINLOG_FAILED_CREATE_DURING_RENAME 10496
-//#define OBSOLETE_ER_NDB_UNEXPECTED_RENAME_TYPE 10497
-//#define OBSOLETE_ER_NDB_ERROR_IN_GET_AUTO_INCREMENT 10498
-//#define OBSOLETE_ER_NDB_CREATING_SHARE_IN_OPEN 10499
-//#define OBSOLETE_ER_NDB_TABLE_OPENED_READ_ONLY 10500
-//#define OBSOLETE_ER_NDB_INITIALIZE_GIVEN_CLUSTER_PLUGIN_DISABLED 10501
-//#define OBSOLETE_ER_NDB_BINLOG_FORMAT_CHANGED_FROM_STMT_TO_MIXED 10502
-//#define OBSOLETE_ER_NDB_TRAILING_SHARE_RELEASED_BY_CLOSE_CACHED_TABLES 10503
-//#define OBSOLETE_ER_NDB_SHARE_ALREADY_EXISTS 10504
-//#define OBSOLETE_ER_NDB_HANDLE_TRAILING_SHARE_INFO 10505
-//#define OBSOLETE_ER_NDB_CLUSTER_GET_SHARE_INFO 10506
-//#define OBSOLETE_ER_NDB_CLUSTER_REAL_FREE_SHARE_INFO 10507
-//#define OBSOLETE_ER_NDB_CLUSTER_REAL_FREE_SHARE_DROP_FAILED 10508
-//#define OBSOLETE_ER_NDB_CLUSTER_FREE_SHARE_INFO 10509
-//#define OBSOLETE_ER_NDB_CLUSTER_MARK_SHARE_DROPPED_INFO 10510
-//#define OBSOLETE_ER_NDB_CLUSTER_MARK_SHARE_DROPPED_DESTROYING_SHARE 10511
-//#define OBSOLETE_ER_NDB_CLUSTER_OOM_THD_NDB 10512
-//#define OBSOLETE_ER_NDB_BINLOG_NDB_TABLES_INITIALLY_READ_ONLY 10513
-//#define OBSOLETE_ER_NDB_UTIL_THREAD_OOM 10514
-//#define OBSOLETE_ER_NDB_ILLEGAL_VALUE_FOR_NDB_RECV_THREAD_CPU_MASK 10515
-//#define OBSOLETE_ER_NDB_TOO_MANY_CPUS_IN_NDB_RECV_THREAD_CPU_MASK 10516
-#define ER_DBUG_CHECK_SHARES_OPEN 10517
-#define ER_DBUG_CHECK_SHARES_INFO 10518
-#define ER_DBUG_CHECK_SHARES_DROPPED 10519
-#define ER_INVALID_OR_OLD_TABLE_OR_DB_NAME 10520
-#define ER_TC_RECOVERING_AFTER_CRASH_USING 10521
-#define ER_TC_CANT_AUTO_RECOVER_WITH_TC_HEURISTIC_RECOVER 10522
-#define ER_TC_BAD_MAGIC_IN_TC_LOG 10523
-#define ER_TC_NEED_N_SE_SUPPORTING_2PC_FOR_RECOVERY 10524
-#define ER_TC_RECOVERY_FAILED_THESE_ARE_YOUR_OPTIONS 10525
-#define ER_TC_HEURISTIC_RECOVERY_MODE 10526
-#define ER_TC_HEURISTIC_RECOVERY_FAILED 10527
-#define ER_TC_RESTART_WITHOUT_TC_HEURISTIC_RECOVER 10528
-#define ER_RPL_SLAVE_FAILED_TO_CREATE_OR_RECOVER_INFO_REPOSITORIES 10529
-#define ER_RPL_SLAVE_AUTO_POSITION_IS_1_AND_GTID_MODE_IS_OFF 10530
-#define ER_RPL_SLAVE_CANT_START_SLAVE_FOR_CHANNEL 10531
-#define ER_RPL_SLAVE_CANT_STOP_SLAVE_FOR_CHANNEL 10532
-#define ER_RPL_RECOVERY_NO_ROTATE_EVENT_FROM_MASTER 10533
-#define ER_RPL_RECOVERY_ERROR_READ_RELAY_LOG 10534
-//#define OBSOLETE_ER_RPL_RECOVERY_ERROR_FREEING_IO_CACHE 10535
-#define ER_RPL_RECOVERY_SKIPPED_GROUP_REPLICATION_CHANNEL 10536
-#define ER_RPL_RECOVERY_ERROR 10537
-#define ER_RPL_RECOVERY_IO_ERROR_READING_RELAY_LOG_INDEX 10538
-#define ER_RPL_RECOVERY_FILE_MASTER_POS_INFO 10539
-#define ER_RPL_RECOVERY_REPLICATE_SAME_SERVER_ID_REQUIRES_POSITION 10540
-#define ER_RPL_MTS_RECOVERY_STARTING_COORDINATOR 10541
-#define ER_RPL_MTS_RECOVERY_FAILED_TO_START_COORDINATOR 10542
-#define ER_RPL_MTS_AUTOMATIC_RECOVERY_FAILED 10543
-#define ER_RPL_MTS_RECOVERY_CANT_OPEN_RELAY_LOG 10544
-#define ER_RPL_MTS_RECOVERY_SUCCESSFUL 10545
-#define ER_RPL_SERVER_ID_MISSING 10546
-#define ER_RPL_CANT_CREATE_SLAVE_THREAD 10547
-#define ER_RPL_SLAVE_IO_THREAD_WAS_KILLED 10548
-#define ER_RPL_SLAVE_MASTER_UUID_HAS_CHANGED 10549
-#define ER_RPL_SLAVE_USES_CHECKSUM_AND_MASTER_PRE_50 10550
-#define ER_RPL_SLAVE_SECONDS_BEHIND_MASTER_DUBIOUS 10551
-#define ER_RPL_SLAVE_CANT_FLUSH_MASTER_INFO_FILE 10552
-#define ER_RPL_SLAVE_REPORT_HOST_TOO_LONG 10553
-#define ER_RPL_SLAVE_REPORT_USER_TOO_LONG 10554
-#define ER_RPL_SLAVE_REPORT_PASSWORD_TOO_LONG 10555
-#define ER_RPL_SLAVE_ERROR_RETRYING 10556
-#define ER_RPL_SLAVE_ERROR_READING_FROM_SERVER 10557
-#define ER_RPL_SLAVE_DUMP_THREAD_KILLED_BY_MASTER 10558
-#define ER_RPL_MTS_STATISTICS 10559
-#define ER_RPL_MTS_RECOVERY_COMPLETE 10560
-#define ER_RPL_SLAVE_CANT_INIT_RELAY_LOG_POSITION 10561
-#define ER_RPL_SLAVE_CONNECTED_TO_MASTER_REPLICATION_STARTED 10562
-#define ER_RPL_SLAVE_IO_THREAD_KILLED 10563
-#define ER_RPL_SLAVE_IO_THREAD_CANT_REGISTER_ON_MASTER 10564
-#define ER_RPL_SLAVE_FORCING_TO_RECONNECT_IO_THREAD 10565
-#define ER_RPL_SLAVE_ERROR_REQUESTING_BINLOG_DUMP 10566
-#define ER_RPL_LOG_ENTRY_EXCEEDS_REPLICA_MAX_ALLOWED_PACKET 10567
-#define ER_RPL_SLAVE_STOPPING_AS_MASTER_OOM 10568
-#define ER_RPL_SLAVE_IO_THREAD_ABORTED_WAITING_FOR_RELAY_LOG_SPACE 10569
-#define ER_RPL_SLAVE_IO_THREAD_EXITING 10570
-#define ER_RPL_SLAVE_CANT_INITIALIZE_SLAVE_WORKER 10571
-#define ER_RPL_MTS_GROUP_RECOVERY_RELAY_LOG_INFO_FOR_WORKER 10572
-#define ER_RPL_ERROR_LOOKING_FOR_LOG 10573
-#define ER_RPL_MTS_GROUP_RECOVERY_RELAY_LOG_INFO 10574
-#define ER_RPL_CANT_FIND_FOLLOWUP_FILE 10575
-#define ER_RPL_MTS_CHECKPOINT_PERIOD_DIFFERS_FROM_CNT 10576
-#define ER_RPL_SLAVE_WORKER_THREAD_CREATION_FAILED 10577
-#define ER_RPL_SLAVE_WORKER_THREAD_CREATION_FAILED_WITH_ERRNO 10578
-#define ER_RPL_SLAVE_FAILED_TO_INIT_PARTITIONS_HASH 10579
-//#define OBSOLETE_ER_RPL_SLAVE_NDB_TABLES_NOT_AVAILABLE 10580
-#define ER_RPL_SLAVE_SQL_THREAD_STARTING 10581
-#define ER_RPL_SLAVE_SKIP_COUNTER_EXECUTED 10582
-#define ER_RPL_SLAVE_ADDITIONAL_ERROR_INFO_FROM_DA 10583
-#define ER_RPL_SLAVE_ERROR_INFO_FROM_DA 10584
-#define ER_RPL_SLAVE_ERROR_LOADING_USER_DEFINED_LIBRARY 10585
-#define ER_RPL_SLAVE_ERROR_RUNNING_QUERY 10586
-#define ER_RPL_SLAVE_SQL_THREAD_EXITING 10587
-#define ER_RPL_SLAVE_READ_INVALID_EVENT_FROM_MASTER 10588
-#define ER_RPL_SLAVE_QUEUE_EVENT_FAILED_INVALID_CONFIGURATION 10589
-#define ER_RPL_SLAVE_IO_THREAD_DETECTED_UNEXPECTED_EVENT_SEQUENCE 10590
-#define ER_RPL_SLAVE_CANT_USE_CHARSET 10591
-#define ER_RPL_SLAVE_CONNECTED_TO_MASTER_REPLICATION_RESUMED 10592
-#define ER_RPL_SLAVE_NEXT_LOG_IS_ACTIVE 10593
-#define ER_RPL_SLAVE_NEXT_LOG_IS_INACTIVE 10594
-#define ER_RPL_SLAVE_SQL_THREAD_IO_ERROR_READING_EVENT 10595
-#define ER_RPL_SLAVE_ERROR_READING_RELAY_LOG_EVENTS 10596
-#define ER_SLAVE_CHANGE_MASTER_TO_EXECUTED 10597
-#define ER_RPL_SLAVE_NEW_MASTER_INFO_NEEDS_REPOS_TYPE_OTHER_THAN_FILE 10598
-#define ER_RPL_FAILED_TO_STAT_LOG_IN_INDEX 10599
-#define ER_RPL_LOG_NOT_FOUND_WHILE_COUNTING_RELAY_LOG_SPACE 10600
-#define ER_SLAVE_CANT_USE_TEMPDIR 10601
-#define ER_RPL_RELAY_LOG_NEEDS_FILE_NOT_DIRECTORY 10602
-#define ER_RPL_RELAY_LOG_INDEX_NEEDS_FILE_NOT_DIRECTORY 10603
-#define ER_RPL_PLEASE_USE_OPTION_RELAY_LOG 10604
-#define ER_RPL_OPEN_INDEX_FILE_FAILED 10605
-#define ER_RPL_CANT_INITIALIZE_GTID_SETS_IN_RLI_INIT_INFO 10606
-#define ER_RPL_CANT_OPEN_LOG_IN_RLI_INIT_INFO 10607
-#define ER_RPL_ERROR_WRITING_RELAY_LOG_CONFIGURATION 10608
-//#define OBSOLETE_ER_NDB_OOM_GET_NDB_BLOBS_VALUE 10609
-//#define OBSOLETE_ER_NDB_THREAD_TIMED_OUT 10610
-//#define OBSOLETE_ER_NDB_TABLE_IS_NOT_DISTRIBUTED 10611
-//#define OBSOLETE_ER_NDB_CREATING_TABLE 10612
-//#define OBSOLETE_ER_NDB_FLUSHING_TABLE_INFO 10613
-//#define OBSOLETE_ER_NDB_CLEANING_STRAY_TABLES 10614
-//#define OBSOLETE_ER_NDB_DISCOVERED_MISSING_DB 10615
-//#define OBSOLETE_ER_NDB_DISCOVERED_REMAINING_DB 10616
-//#define OBSOLETE_ER_NDB_CLUSTER_FIND_ALL_DBS_RETRY 10617
-//#define OBSOLETE_ER_NDB_CLUSTER_FIND_ALL_DBS_FAIL 10618
-//#define OBSOLETE_ER_NDB_SKIPPING_SETUP_TABLE 10619
-//#define OBSOLETE_ER_NDB_FAILED_TO_SET_UP_TABLE 10620
-//#define OBSOLETE_ER_NDB_MISSING_FRM_DISCOVERING 10621
-//#define OBSOLETE_ER_NDB_MISMATCH_IN_FRM_DISCOVERING 10622
-//#define OBSOLETE_ER_NDB_BINLOG_CLEANING_UP_SETUP_LEFTOVERS 10623
-//#define OBSOLETE_ER_NDB_WAITING_INFO 10624
-//#define OBSOLETE_ER_NDB_WAITING_INFO_WITH_MAP 10625
-//#define OBSOLETE_ER_NDB_TIMEOUT_WHILE_DISTRIBUTING 10626
-//#define OBSOLETE_ER_NDB_NOT_WAITING_FOR_DISTRIBUTING 10627
-//#define OBSOLETE_ER_NDB_DISTRIBUTED_INFO 10628
-//#define OBSOLETE_ER_NDB_DISTRIBUTION_COMPLETE 10629
-//#define OBSOLETE_ER_NDB_SCHEMA_DISTRIBUTION_FAILED 10630
-//#define OBSOLETE_ER_NDB_SCHEMA_DISTRIBUTION_REPORTS_SUBSCRIBE 10631
-//#define OBSOLETE_ER_NDB_SCHEMA_DISTRIBUTION_REPORTS_UNSUBSCRIBE 10632
-//#define OBSOLETE_ER_NDB_BINLOG_CANT_DISCOVER_TABLE_FROM_SCHEMA_EVENT 10633
-//#define OBSOLETE_ER_NDB_BINLOG_SIGNALLING_UNKNOWN_VALUE 10634
-//#define OBSOLETE_ER_NDB_BINLOG_REPLY_TO 10635
-//#define OBSOLETE_ER_NDB_BINLOG_CANT_RELEASE_SLOCK 10636
-//#define OBSOLETE_ER_NDB_CANT_FIND_TABLE 10637
-//#define OBSOLETE_ER_NDB_DISCARDING_EVENT_NO_OBJ 10638
-//#define OBSOLETE_ER_NDB_DISCARDING_EVENT_ID_VERSION_MISMATCH 10639
-//#define OBSOLETE_ER_NDB_CLEAR_SLOCK_INFO 10640
-//#define OBSOLETE_ER_NDB_BINLOG_SKIPPING_LOCAL_TABLE 10641
-//#define OBSOLETE_ER_NDB_BINLOG_ONLINE_ALTER_RENAME 10642
-//#define OBSOLETE_ER_NDB_BINLOG_CANT_REOPEN_SHADOW_TABLE 10643
-//#define OBSOLETE_ER_NDB_BINLOG_ONLINE_ALTER_RENAME_COMPLETE 10644
-//#define OBSOLETE_ER_NDB_BINLOG_SKIPPING_DROP_OF_LOCAL_TABLE 10645
-//#define OBSOLETE_ER_NDB_BINLOG_SKIPPING_RENAME_OF_LOCAL_TABLE 10646
-//#define OBSOLETE_ER_NDB_BINLOG_SKIPPING_DROP_OF_TABLES 10647
-//#define OBSOLETE_ER_NDB_BINLOG_GOT_DIST_PRIV_EVENT_FLUSHING_PRIVILEGES 10648
-//#define OBSOLETE_ER_NDB_BINLOG_GOT_SCHEMA_EVENT 10649
-//#define OBSOLETE_ER_NDB_BINLOG_SKIPPING_OLD_SCHEMA_OPERATION 10650
-//#define OBSOLETE_ER_NDB_CLUSTER_FAILURE 10651
-//#define OBSOLETE_ER_NDB_TABLES_INITIALLY_READ_ONLY_ON_RECONNECT 10652
-//#define OBSOLETE_ER_NDB_IGNORING_UNKNOWN_EVENT 10653
-//#define OBSOLETE_ER_NDB_BINLOG_OPENING_INDEX 10654
-//#define OBSOLETE_ER_NDB_BINLOG_CANT_LOCK_NDB_BINLOG_INDEX 10655
-//#define OBSOLETE_ER_NDB_BINLOG_INJECTING_RANDOM_WRITE_FAILURE 10656
-//#define OBSOLETE_ER_NDB_BINLOG_CANT_WRITE_TO_NDB_BINLOG_INDEX 10657
-//#define OBSOLETE_ER_NDB_BINLOG_WRITING_TO_NDB_BINLOG_INDEX 10658
-//#define OBSOLETE_ER_NDB_BINLOG_CANT_COMMIT_TO_NDB_BINLOG_INDEX 10659
-//#define OBSOLETE_ER_NDB_BINLOG_WRITE_INDEX_FAILED_AFTER_KILL 10660
-//#define OBSOLETE_ER_NDB_BINLOG_USING_SERVER_ID_0_SLAVES_WILL_NOT 10661
-//#define OBSOLETE_ER_NDB_SERVER_ID_RESERVED_OR_TOO_LARGE 10662
-//#define OBSOLETE_ER_NDB_BINLOG_REQUIRES_V2_ROW_EVENTS 10663
-//#define OBSOLETE_ER_NDB_BINLOG_STATUS_FORCING_FULL_USE_WRITE 10664
-//#define OBSOLETE_ER_NDB_BINLOG_GENERIC_MESSAGE 10665
-//#define OBSOLETE_ER_NDB_CONFLICT_GENERIC_MESSAGE 10666
-//#define OBSOLETE_ER_NDB_TRANS_DEPENDENCY_TRACKER_ERROR 10667
-//#define OBSOLETE_ER_NDB_CONFLICT_FN_PARSE_ERROR 10668
-//#define OBSOLETE_ER_NDB_CONFLICT_FN_SETUP_ERROR 10669
-//#define OBSOLETE_ER_NDB_BINLOG_FAILED_TO_GET_TABLE 10670
-//#define OBSOLETE_ER_NDB_BINLOG_NOT_LOGGING 10671
-//#define OBSOLETE_ER_NDB_BINLOG_CREATE_TABLE_EVENT_FAILED 10672
-//#define OBSOLETE_ER_NDB_BINLOG_CREATE_TABLE_EVENT_INFO 10673
-//#define OBSOLETE_ER_NDB_BINLOG_DISCOVER_TABLE_EVENT_INFO 10674
-//#define OBSOLETE_ER_NDB_BINLOG_BLOB_REQUIRES_PK 10675
-//#define OBSOLETE_ER_NDB_BINLOG_CANT_CREATE_EVENT_IN_DB 10676
-//#define OBSOLETE_ER_NDB_BINLOG_CANT_CREATE_EVENT_IN_DB_AND_CANT_DROP 10677
-//#define OBSOLETE_ER_NDB_BINLOG_CANT_CREATE_EVENT_IN_DB_DROPPED 10678
-//#define OBSOLETE_ER_NDB_BINLOG_DISCOVER_REUSING_OLD_EVENT_OPS 10679
-//#define OBSOLETE_ER_NDB_BINLOG_CREATING_NDBEVENTOPERATION_FAILED 10680
-//#define OBSOLETE_ER_NDB_BINLOG_CANT_CREATE_BLOB 10681
-//#define OBSOLETE_ER_NDB_BINLOG_NDBEVENT_EXECUTE_FAILED 10682
-//#define OBSOLETE_ER_NDB_CREATE_EVENT_OPS_LOGGING_INFO 10683
-//#define OBSOLETE_ER_NDB_BINLOG_CANT_DROP_EVENT_FROM_DB 10684
-//#define OBSOLETE_ER_NDB_TIMED_OUT_IN_DROP_TABLE 10685
-//#define OBSOLETE_ER_NDB_BINLOG_UNHANDLED_ERROR_FOR_TABLE 10686
-//#define OBSOLETE_ER_NDB_BINLOG_CLUSTER_FAILURE 10687
-//#define OBSOLETE_ER_NDB_BINLOG_UNKNOWN_NON_DATA_EVENT 10688
-//#define OBSOLETE_ER_NDB_BINLOG_INJECTOR_DISCARDING_ROW_EVENT_METADATA 10689
-//#define OBSOLETE_ER_NDB_REMAINING_OPEN_TABLES 10690
-//#define OBSOLETE_ER_NDB_REMAINING_OPEN_TABLE_INFO 10691
-//#define OBSOLETE_ER_NDB_COULD_NOT_GET_APPLY_STATUS_SHARE 10692
-//#define OBSOLETE_ER_NDB_BINLOG_SERVER_SHUTDOWN_DURING_NDB_CLUSTER_START 10693
-//#define OBSOLETE_ER_NDB_BINLOG_CLUSTER_RESTARTED_RESET_MASTER_SUGGESTED 10694
-//#define OBSOLETE_ER_NDB_BINLOG_CLUSTER_HAS_RECONNECTED 10695
-//#define OBSOLETE_ER_NDB_BINLOG_STARTING_LOG_AT_EPOCH 10696
-//#define OBSOLETE_ER_NDB_BINLOG_NDB_TABLES_WRITABLE 10697
-//#define OBSOLETE_ER_NDB_BINLOG_SHUTDOWN_DETECTED 10698
-//#define OBSOLETE_ER_NDB_BINLOG_LOST_SCHEMA_CONNECTION_WAITING 10699
-//#define OBSOLETE_ER_NDB_BINLOG_LOST_SCHEMA_CONNECTION_CONTINUING 10700
-//#define OBSOLETE_ER_NDB_BINLOG_ERROR_HANDLING_SCHEMA_EVENT 10701
-//#define OBSOLETE_ER_NDB_BINLOG_CANT_INJECT_APPLY_STATUS_WRITE_ROW 10702
-//#define OBSOLETE_ER_NDB_BINLOG_ERROR_DURING_GCI_ROLLBACK 10703
-//#define OBSOLETE_ER_NDB_BINLOG_ERROR_DURING_GCI_COMMIT 10704
-//#define OBSOLETE_ER_NDB_BINLOG_LATEST_TRX_IN_EPOCH_NOT_IN_BINLOG 10705
-//#define OBSOLETE_ER_NDB_BINLOG_RELEASING_EXTRA_SHARE_REFERENCES 10706
-//#define OBSOLETE_ER_NDB_BINLOG_REMAINING_OPEN_TABLES 10707
-//#define OBSOLETE_ER_NDB_BINLOG_REMAINING_OPEN_TABLE_INFO 10708
-#define ER_TREE_CORRUPT_PARENT_SHOULD_POINT_AT_PARENT 10709
-#define ER_TREE_CORRUPT_ROOT_SHOULD_BE_BLACK 10710
-#define ER_TREE_CORRUPT_2_CONSECUTIVE_REDS 10711
-#define ER_TREE_CORRUPT_RIGHT_IS_LEFT 10712
-#define ER_TREE_CORRUPT_INCORRECT_BLACK_COUNT 10713
-#define ER_WRONG_COUNT_FOR_ORIGIN 10714
-#define ER_WRONG_COUNT_FOR_KEY 10715
-#define ER_WRONG_COUNT_OF_ELEMENTS 10716
-#define ER_RPL_ERROR_READING_SLAVE_WORKER_CONFIGURATION 10717
-//#define OBSOLETE_ER_RPL_ERROR_WRITING_SLAVE_WORKER_CONFIGURATION 10718
-#define ER_RPL_FAILED_TO_OPEN_RELAY_LOG 10719
-#define ER_RPL_WORKER_CANT_READ_RELAY_LOG 10720
-#define ER_RPL_WORKER_CANT_FIND_NEXT_RELAY_LOG 10721
-#define ER_RPL_MTS_SLAVE_COORDINATOR_HAS_WAITED 10722
-#define ER_BINLOG_FAILED_TO_WRITE_DROP_FOR_TEMP_TABLES 10723
-#define ER_BINLOG_OOM_WRITING_DELETE_WHILE_OPENING_HEAP_TABLE 10724
-#define ER_FAILED_TO_REPAIR_TABLE 10725
-#define ER_FAILED_TO_REMOVE_TEMP_TABLE 10726
-#define ER_SYSTEM_TABLE_NOT_TRANSACTIONAL 10727
-#define ER_RPL_ERROR_WRITING_MASTER_CONFIGURATION 10728
-#define ER_RPL_ERROR_READING_MASTER_CONFIGURATION 10729
-#define ER_RPL_SSL_INFO_IN_MASTER_INFO_IGNORED 10730
-#define ER_PLUGIN_FAILED_DEINITIALIZATION 10731
-#define ER_PLUGIN_HAS_NONZERO_REFCOUNT_AFTER_DEINITIALIZATION 10732
-#define ER_PLUGIN_SHUTTING_DOWN_PLUGIN 10733
-#define ER_PLUGIN_REGISTRATION_FAILED 10734
-#define ER_PLUGIN_CANT_OPEN_PLUGIN_TABLE 10735
-#define ER_PLUGIN_CANT_LOAD 10736
-#define ER_PLUGIN_LOAD_PARAMETER_TOO_LONG 10737
-#define ER_PLUGIN_FORCING_SHUTDOWN 10738
-#define ER_PLUGIN_HAS_NONZERO_REFCOUNT_AFTER_SHUTDOWN 10739
-#define ER_PLUGIN_UNKNOWN_VARIABLE_TYPE 10740
-#define ER_PLUGIN_VARIABLE_SET_READ_ONLY 10741
-#define ER_PLUGIN_VARIABLE_MISSING_NAME 10742
-#define ER_PLUGIN_VARIABLE_NOT_ALLOCATED_THREAD_LOCAL 10743
-#define ER_PLUGIN_OOM 10744
-#define ER_PLUGIN_BAD_OPTIONS 10745
-#define ER_PLUGIN_PARSING_OPTIONS_FAILED 10746
-#define ER_PLUGIN_DISABLED 10747
-#define ER_PLUGIN_HAS_CONFLICTING_SYSTEM_VARIABLES 10748
-#define ER_PLUGIN_CANT_SET_PERSISTENT_OPTIONS 10749
-#define ER_MY_NET_WRITE_FAILED_FALLING_BACK_ON_STDERR 10750
-#define ER_RETRYING_REPAIR_WITHOUT_QUICK 10751
-#define ER_RETRYING_REPAIR_WITH_KEYCACHE 10752
-#define ER_FOUND_ROWS_WHILE_REPAIRING 10753
-#define ER_ERROR_DURING_OPTIMIZE_TABLE 10754
-#define ER_ERROR_ENABLING_KEYS 10755
-#define ER_CHECKING_TABLE 10756
-#define ER_RECOVERING_TABLE 10757
-#define ER_CANT_CREATE_TABLE_SHARE_FROM_FRM 10758
-#define ER_CANT_LOCK_TABLE 10759
-#define ER_CANT_ALLOC_TABLE_OBJECT 10760
-#define ER_CANT_CREATE_HANDLER_OBJECT_FOR_TABLE 10761
-#define ER_CANT_SET_HANDLER_REFERENCE_FOR_TABLE 10762
-#define ER_CANT_LOCK_TABLESPACE 10763
-#define ER_CANT_UPGRADE_GENERATED_COLUMNS_TO_DD 10764
-#define ER_DD_ERROR_CREATING_ENTRY 10765
-#define ER_DD_CANT_FETCH_TABLE_DATA 10766
-#define ER_DD_CANT_FIX_SE_DATA 10767
-#define ER_DD_CANT_CREATE_SP 10768
-#define ER_CANT_OPEN_DB_OPT_USING_DEFAULT_CHARSET 10769
-#define ER_CANT_CREATE_CACHE_FOR_DB_OPT 10770
-#define ER_CANT_IDENTIFY_CHARSET_USING_DEFAULT 10771
-#define ER_DB_OPT_NOT_FOUND_USING_DEFAULT_CHARSET 10772
-#define ER_EVENT_CANT_GET_TIMEZONE_FROM_FIELD 10773
-#define ER_EVENT_CANT_FIND_TIMEZONE 10774
-#define ER_EVENT_CANT_GET_CHARSET 10775
-#define ER_EVENT_CANT_GET_COLLATION 10776
-#define ER_EVENT_CANT_OPEN_TABLE_MYSQL_EVENT 10777
-#define ER_CANT_PARSE_STORED_ROUTINE_BODY 10778
-#define ER_CANT_OPEN_TABLE_MYSQL_PROC 10779
-#define ER_CANT_READ_TABLE_MYSQL_PROC 10780
-#define ER_FILE_EXISTS_DURING_UPGRADE 10781
-#define ER_CANT_OPEN_DATADIR_AFTER_UPGRADE_FAILURE 10782
-#define ER_CANT_SET_PATH_FOR 10783
-#define ER_CANT_OPEN_DIR 10784
-//#define OBSOLETE_ER_NDB_CLUSTER_CONNECTION_POOL_NODEIDS 10785
-//#define OBSOLETE_ER_NDB_CANT_PARSE_NDB_CLUSTER_CONNECTION_POOL_NODEIDS 10786
-//#define OBSOLETE_ER_NDB_INVALID_CLUSTER_CONNECTION_POOL_NODEIDS 10787
-//#define OBSOLETE_ER_NDB_DUPLICATE_CLUSTER_CONNECTION_POOL_NODEIDS 10788
-//#define OBSOLETE_ER_NDB_POOL_SIZE_CLUSTER_CONNECTION_POOL_NODEIDS 10789
-//#define OBSOLETE_ER_NDB_NODEID_NOT_FIRST_CONNECTION_POOL_NODEIDS 10790
-//#define OBSOLETE_ER_NDB_USING_NODEID 10791
-//#define OBSOLETE_ER_NDB_CANT_ALLOC_GLOBAL_NDB_CLUSTER_CONNECTION 10792
-//#define OBSOLETE_ER_NDB_CANT_ALLOC_GLOBAL_NDB_OBJECT 10793
-//#define OBSOLETE_ER_NDB_USING_NODEID_LIST 10794
-//#define OBSOLETE_ER_NDB_CANT_ALLOC_NDB_CLUSTER_CONNECTION 10795
-//#define OBSOLETE_ER_NDB_STARTING_CONNECT_THREAD 10796
-//#define OBSOLETE_ER_NDB_NODE_INFO 10797
-//#define OBSOLETE_ER_NDB_CANT_START_CONNECT_THREAD 10798
-//#define OBSOLETE_ER_NDB_GENERIC_ERROR 10799
-//#define OBSOLETE_ER_NDB_CPU_MASK_TOO_SHORT 10800
-#define ER_EVENT_ERROR_CREATING_QUERY_TO_WRITE_TO_BINLOG 10801
-#define ER_EVENT_SCHEDULER_ERROR_LOADING_FROM_DB 10802
-#define ER_EVENT_SCHEDULER_ERROR_GETTING_EVENT_OBJECT 10803
-#define ER_EVENT_SCHEDULER_GOT_BAD_DATA_FROM_TABLE 10804
-#define ER_EVENT_CANT_GET_LOCK_FOR_DROPPING_EVENT 10805
-#define ER_EVENT_UNABLE_TO_DROP_EVENT 10806
-//#define OBSOLETE_ER_BINLOG_ATTACHING_THREAD_MEMORY_FINALLY_AVAILABLE 10807
-#define ER_BINLOG_CANT_RESIZE_CACHE 10808
-#define ER_BINLOG_FILE_BEING_READ_NOT_PURGED 10809
-#define ER_BINLOG_IO_ERROR_READING_HEADER 10810
-//#define OBSOLETE_ER_BINLOG_CANT_OPEN_LOG 10811
-//#define OBSOLETE_ER_BINLOG_CANT_CREATE_CACHE_FOR_LOG 10812
-#define ER_BINLOG_FILE_EXTENSION_NUMBER_EXHAUSTED 10813
-#define ER_BINLOG_FILE_NAME_TOO_LONG 10814
-#define ER_BINLOG_FILE_EXTENSION_NUMBER_RUNNING_LOW 10815
-#define ER_BINLOG_CANT_OPEN_FOR_LOGGING 10816
-#define ER_BINLOG_FAILED_TO_SYNC_INDEX_FILE 10817
-#define ER_BINLOG_ERROR_READING_GTIDS_FROM_RELAY_LOG 10818
-#define ER_BINLOG_EVENTS_READ_FROM_RELAY_LOG_INFO 10819
-#define ER_BINLOG_ERROR_READING_GTIDS_FROM_BINARY_LOG 10820
-#define ER_BINLOG_EVENTS_READ_FROM_BINLOG_INFO 10821
-#define ER_BINLOG_CANT_GENERATE_NEW_FILE_NAME 10822
-#define ER_BINLOG_FAILED_TO_SYNC_INDEX_FILE_IN_OPEN 10823
-#define ER_BINLOG_CANT_USE_FOR_LOGGING 10824
-#define ER_BINLOG_FAILED_TO_CLOSE_INDEX_FILE_WHILE_REBUILDING 10825
-#define ER_BINLOG_FAILED_TO_DELETE_INDEX_FILE_WHILE_REBUILDING 10826
-#define ER_BINLOG_FAILED_TO_RENAME_INDEX_FILE_WHILE_REBUILDING 10827
-#define ER_BINLOG_FAILED_TO_OPEN_INDEX_FILE_AFTER_REBUILDING 10828
-#define ER_BINLOG_CANT_APPEND_LOG_TO_TMP_INDEX 10829
-#define ER_BINLOG_CANT_LOCATE_OLD_BINLOG_OR_RELAY_LOG_FILES 10830
-#define ER_BINLOG_CANT_DELETE_FILE 10831
-#define ER_BINLOG_CANT_SET_TMP_INDEX_NAME 10832
-#define ER_BINLOG_FAILED_TO_OPEN_TEMPORARY_INDEX_FILE 10833
-//#define OBSOLETE_ER_BINLOG_ERROR_GETTING_NEXT_LOG_FROM_INDEX 10834
-#define ER_BINLOG_CANT_OPEN_TMP_INDEX 10835
-#define ER_BINLOG_CANT_COPY_INDEX_TO_TMP 10836
-#define ER_BINLOG_CANT_CLOSE_TMP_INDEX 10837
-#define ER_BINLOG_CANT_MOVE_TMP_TO_INDEX 10838
-#define ER_BINLOG_PURGE_LOGS_CALLED_WITH_FILE_NOT_IN_INDEX 10839
-#define ER_BINLOG_PURGE_LOGS_CANT_SYNC_INDEX_FILE 10840
-#define ER_BINLOG_PURGE_LOGS_CANT_COPY_TO_REGISTER_FILE 10841
-#define ER_BINLOG_PURGE_LOGS_CANT_FLUSH_REGISTER_FILE 10842
-#define ER_BINLOG_PURGE_LOGS_CANT_UPDATE_INDEX_FILE 10843
-#define ER_BINLOG_PURGE_LOGS_FAILED_TO_PURGE_LOG 10844
-#define ER_BINLOG_FAILED_TO_SET_PURGE_INDEX_FILE_NAME 10845
-#define ER_BINLOG_FAILED_TO_OPEN_REGISTER_FILE 10846
-#define ER_BINLOG_FAILED_TO_REINIT_REGISTER_FILE 10847
-#define ER_BINLOG_FAILED_TO_READ_REGISTER_FILE 10848
-#define ER_CANT_STAT_FILE 10849
-#define ER_BINLOG_CANT_DELETE_LOG_FILE_DOES_INDEX_MATCH_FILES 10850
-#define ER_BINLOG_CANT_DELETE_FILE_AND_READ_BINLOG_INDEX 10851
-#define ER_BINLOG_FAILED_TO_DELETE_LOG_FILE 10852
-#define ER_BINLOG_LOGGING_INCIDENT_TO_STOP_SLAVES 10853
-#define ER_BINLOG_CANT_FIND_LOG_IN_INDEX 10854
-#define ER_BINLOG_RECOVERING_AFTER_CRASH_USING 10855
-#define ER_BINLOG_CANT_OPEN_CRASHED_BINLOG 10856
-#define ER_BINLOG_CANT_TRIM_CRASHED_BINLOG 10857
-#define ER_BINLOG_CRASHED_BINLOG_TRIMMED 10858
-#define ER_BINLOG_CANT_CLEAR_IN_USE_FLAG_FOR_CRASHED_BINLOG 10859
-#define ER_BINLOG_FAILED_TO_RUN_AFTER_SYNC_HOOK 10860
-#define ER_TURNING_LOGGING_OFF_FOR_THE_DURATION 10861
-#define ER_BINLOG_FAILED_TO_RUN_AFTER_FLUSH_HOOK 10862
-//#define OBSOLETE_ER_BINLOG_CRASH_RECOVERY_FAILED 10863
-#define ER_BINLOG_WARNING_SUPPRESSED 10864
-#define ER_NDB_LOG_ENTRY 10865
-#define ER_NDB_LOG_ENTRY_WITH_PREFIX 10866
-//#define OBSOLETE_ER_NDB_BINLOG_CANT_CREATE_PURGE_THD 10867
-#define ER_INNODB_UNKNOWN_COLLATION 10868
-#define ER_INNODB_INVALID_LOG_GROUP_HOME_DIR 10869
-#define ER_INNODB_INVALID_INNODB_UNDO_DIRECTORY 10870
-#define ER_INNODB_ILLEGAL_COLON_IN_POOL 10871
-#define ER_INNODB_INVALID_PAGE_SIZE 10872
-#define ER_INNODB_DIRTY_WATER_MARK_NOT_LOW 10873
-#define ER_INNODB_IO_CAPACITY_EXCEEDS_MAX 10874
-#define ER_INNODB_FILES_SAME 10875
-#define ER_INNODB_UNREGISTERED_TRX_ACTIVE 10876
-#define ER_INNODB_CLOSING_CONNECTION_ROLLS_BACK 10877
-#define ER_INNODB_TRX_XLATION_TABLE_OOM 10878
-#define ER_INNODB_CANT_FIND_INDEX_IN_INNODB_DD 10879
-#define ER_INNODB_INDEX_COLUMN_INFO_UNLIKE_MYSQLS 10880
-//#define OBSOLETE_ER_INNODB_CANT_OPEN_TABLE 10881
-#define ER_INNODB_CANT_BUILD_INDEX_XLATION_TABLE_FOR 10882
-#define ER_INNODB_PK_NOT_IN_MYSQL 10883
-#define ER_INNODB_PK_ONLY_IN_MYSQL 10884
-#define ER_INNODB_CLUSTERED_INDEX_PRIVATE 10885
-//#define OBSOLETE_ER_INNODB_PARTITION_TABLE_LOWERCASED 10886
-#define ER_ERRMSG_REPLACEMENT_DODGY 10887
-#define ER_ERRMSG_REPLACEMENTS_FAILED 10888
-#define ER_NPIPE_CANT_CREATE 10889
-#define ER_PARTITION_MOVE_CREATED_DUPLICATE_ROW_PLEASE_FIX 10890
-#define ER_AUDIT_CANT_ABORT_COMMAND 10891
-#define ER_AUDIT_CANT_ABORT_EVENT 10892
-#define ER_AUDIT_WARNING 10893
-//#define OBSOLETE_ER_NDB_NUMBER_OF_CHANNELS 10894
-//#define OBSOLETE_ER_NDB_REPLICA_PARALLEL_WORKERS 10895
-//#define OBSOLETE_ER_NDB_DISTRIBUTING_ERR 10896
-#define ER_RPL_SLAVE_INSECURE_CHANGE_MASTER 10897
-//#define OBSOLETE_ER_RPL_SLAVE_FLUSH_RELAY_LOGS_NOT_ALLOWED 10898
-#define ER_RPL_SLAVE_INCORRECT_CHANNEL 10899
-#define ER_FAILED_TO_FIND_DL_ENTRY 10900
-#define ER_FAILED_TO_OPEN_SHARED_LIBRARY 10901
-#define ER_THREAD_PRIORITY_IGNORED 10902
-#define ER_BINLOG_CACHE_SIZE_TOO_LARGE 10903
-#define ER_BINLOG_STMT_CACHE_SIZE_TOO_LARGE 10904
-#define ER_FAILED_TO_GENERATE_UNIQUE_LOGFILE 10905
-#define ER_FAILED_TO_READ_FILE 10906
-#define ER_FAILED_TO_WRITE_TO_FILE 10907
-#define ER_BINLOG_UNSAFE_MESSAGE_AND_STATEMENT 10908
-#define ER_FORCE_CLOSE_THREAD 10909
-#define ER_SERVER_SHUTDOWN_COMPLETE 10910
-#define ER_RPL_CANT_HAVE_SAME_BASENAME 10911
-#define ER_RPL_GTID_MODE_REQUIRES_ENFORCE_GTID_CONSISTENCY_ON 10912
-#define ER_WARN_NO_SERVERID_SPECIFIED 10913
-#define ER_ABORTING_USER_CONNECTION 10914
-#define ER_SQL_MODE_MERGED_WITH_STRICT_MODE 10915
-#define ER_GTID_PURGED_WAS_UPDATED 10916
-#define ER_GTID_EXECUTED_WAS_UPDATED 10917
-#define ER_DEPRECATE_MSG_WITH_REPLACEMENT 10918
-#define ER_TRG_CREATION_CTX_NOT_SET 10919
-#define ER_FILE_HAS_OLD_FORMAT 10920
-#define ER_VIEW_CREATION_CTX_NOT_SET 10921
-//#define OBSOLETE_ER_TABLE_NAME_CAUSES_TOO_LONG_PATH 10922
-#define ER_TABLE_UPGRADE_REQUIRED 10923
-#define ER_GET_ERRNO_FROM_STORAGE_ENGINE 10924
-#define ER_ACCESS_DENIED_ERROR_WITHOUT_PASSWORD 10925
-#define ER_ACCESS_DENIED_ERROR_WITH_PASSWORD 10926
-#define ER_ACCESS_DENIED_FOR_USER_ACCOUNT_LOCKED 10927
-//#define OBSOLETE_ER_MUST_CHANGE_EXPIRED_PASSWORD 10928
-#define ER_SYSTEM_TABLES_NOT_SUPPORTED_BY_STORAGE_ENGINE 10929
-//#define OBSOLETE_ER_FILESORT_TERMINATED 10930
-#define ER_SERVER_STARTUP_MSG 10931
-#define ER_FAILED_TO_FIND_LOCALE_NAME 10932
-#define ER_FAILED_TO_FIND_COLLATION_NAME 10933
-#define ER_SERVER_OUT_OF_RESOURCES 10934
-#define ER_SERVER_OUTOFMEMORY 10935
-#define ER_INVALID_COLLATION_FOR_CHARSET 10936
-#define ER_CANT_START_ERROR_LOG_SERVICE 10937
-#define ER_CREATING_NEW_UUID_FIRST_START 10938
-#define ER_FAILED_TO_GET_ABSOLUTE_PATH 10939
-#define ER_PERFSCHEMA_COMPONENTS_INFRASTRUCTURE_BOOTSTRAP 10940
-#define ER_PERFSCHEMA_COMPONENTS_INFRASTRUCTURE_SHUTDOWN 10941
-#define ER_DUP_FD_OPEN_FAILED 10942
-#define ER_SYSTEM_VIEW_INIT_FAILED 10943
-#define ER_RESOURCE_GROUP_POST_INIT_FAILED 10944
-#define ER_RESOURCE_GROUP_SUBSYSTEM_INIT_FAILED 10945
-#define ER_FAILED_START_MYSQLD_DAEMON 10946
-#define ER_CANNOT_CHANGE_TO_ROOT_DIR 10947
-#define ER_PERSISTENT_PRIVILEGES_BOOTSTRAP 10948
-#define ER_BASEDIR_SET_TO 10949
-#define ER_RPL_FILTER_ADD_WILD_DO_TABLE_FAILED 10950
-#define ER_RPL_FILTER_ADD_WILD_IGNORE_TABLE_FAILED 10951
-#define ER_PRIVILEGE_SYSTEM_INIT_FAILED 10952
-#define ER_CANNOT_SET_LOG_ERROR_SERVICES 10953
-#define ER_PERFSCHEMA_TABLES_INIT_FAILED 10954
-#define ER_TX_EXTRACTION_ALGORITHM_FOR_BINLOG_TX_DEPEDENCY_TRACKING 10955
-//#define OBSOLETE_ER_INVALID_REPLICATION_TIMESTAMPS 10956
-//#define OBSOLETE_ER_RPL_TIMESTAMPS_RETURNED_TO_NORMAL 10957
-#define ER_BINLOG_FILE_OPEN_FAILED 10958
-#define ER_BINLOG_EVENT_WRITE_TO_STMT_CACHE_FAILED 10959
-#define ER_SLAVE_RELAY_LOG_TRUNCATE_INFO 10960
-#define ER_SLAVE_RELAY_LOG_PURGE_FAILED 10961
-#define ER_RPL_SLAVE_FILTER_CREATE_FAILED 10962
-#define ER_RPL_SLAVE_GLOBAL_FILTERS_COPY_FAILED 10963
-#define ER_RPL_SLAVE_RESET_FILTER_OPTIONS 10964
-#define ER_MISSING_GRANT_SYSTEM_TABLE 10965
-#define ER_MISSING_ACL_SYSTEM_TABLE 10966
-#define ER_ANONYMOUS_AUTH_ID_NOT_ALLOWED_IN_MANDATORY_ROLES 10967
-#define ER_UNKNOWN_AUTH_ID_IN_MANDATORY_ROLE 10968
-#define ER_WRITE_ROW_TO_PARTITION_FAILED 10969
-#define ER_RESOURCE_GROUP_METADATA_UPDATE_SKIPPED 10970
-#define ER_FAILED_TO_PERSIST_RESOURCE_GROUP_METADATA 10971
-#define ER_FAILED_TO_DESERIALIZE_RESOURCE_GROUP 10972
-#define ER_FAILED_TO_UPDATE_RESOURCE_GROUP 10973
-#define ER_RESOURCE_GROUP_VALIDATION_FAILED 10974
-#define ER_FAILED_TO_ALLOCATE_MEMORY_FOR_RESOURCE_GROUP 10975
-#define ER_FAILED_TO_ALLOCATE_MEMORY_FOR_RESOURCE_GROUP_HASH 10976
-#define ER_FAILED_TO_ADD_RESOURCE_GROUP_TO_MAP 10977
-#define ER_RESOURCE_GROUP_IS_DISABLED 10978
-#define ER_FAILED_TO_APPLY_RESOURCE_GROUP_CONTROLLER 10979
-#define ER_FAILED_TO_ACQUIRE_LOCK_ON_RESOURCE_GROUP 10980
-#define ER_PFS_NOTIFICATION_FUNCTION_REGISTER_FAILED 10981
-#define ER_RES_GRP_SET_THR_AFFINITY_FAILED 10982
-#define ER_RES_GRP_SET_THR_AFFINITY_TO_CPUS_FAILED 10983
-#define ER_RES_GRP_THD_UNBIND_FROM_CPU_FAILED 10984
-#define ER_RES_GRP_SET_THREAD_PRIORITY_FAILED 10985
-#define ER_RES_GRP_FAILED_TO_DETERMINE_NICE_CAPABILITY 10986
-#define ER_RES_GRP_FAILED_TO_GET_THREAD_HANDLE 10987
-#define ER_RES_GRP_GET_THREAD_PRIO_NOT_SUPPORTED 10988
-#define ER_RES_GRP_FAILED_DETERMINE_CPU_COUNT 10989
-#define ER_RES_GRP_FEATURE_NOT_AVAILABLE 10990
-#define ER_RES_GRP_INVALID_THREAD_PRIORITY 10991
-#define ER_RES_GRP_SOLARIS_PROCESSOR_BIND_TO_CPUID_FAILED 10992
-#define ER_RES_GRP_SOLARIS_PROCESSOR_BIND_TO_THREAD_FAILED 10993
-#define ER_RES_GRP_SOLARIS_PROCESSOR_AFFINITY_FAILED 10994
-#define ER_DD_UPGRADE_RENAME_IDX_STATS_FILE_FAILED 10995
-#define ER_DD_UPGRADE_DD_OPEN_FAILED 10996
-#define ER_DD_UPGRADE_FAILED_TO_FETCH_TABLESPACES 10997
-#define ER_DD_UPGRADE_FAILED_TO_ACQUIRE_TABLESPACE 10998
-#define ER_DD_UPGRADE_FAILED_TO_RESOLVE_TABLESPACE_ENGINE 10999
-#define ER_FAILED_TO_CREATE_SDI_FOR_TABLESPACE 11000
-#define ER_FAILED_TO_STORE_SDI_FOR_TABLESPACE 11001
-#define ER_DD_UPGRADE_FAILED_TO_FETCH_TABLES 11002
-#define ER_DD_UPGRADE_DD_POPULATED 11003
-#define ER_DD_UPGRADE_INFO_FILE_OPEN_FAILED 11004
-#define ER_DD_UPGRADE_INFO_FILE_CLOSE_FAILED 11005
-#define ER_DD_UPGRADE_TABLESPACE_MIGRATION_FAILED 11006
-#define ER_DD_UPGRADE_FAILED_TO_CREATE_TABLE_STATS 11007
-#define ER_DD_UPGRADE_TABLE_STATS_MIGRATE_COMPLETED 11008
-#define ER_DD_UPGRADE_FAILED_TO_CREATE_INDEX_STATS 11009
-#define ER_DD_UPGRADE_INDEX_STATS_MIGRATE_COMPLETED 11010
-#define ER_DD_UPGRADE_FAILED_FIND_VALID_DATA_DIR 11011
-#define ER_DD_UPGRADE_START 11012
-#define ER_DD_UPGRADE_FAILED_INIT_DD_SE 11013
-#define ER_DD_UPGRADE_FOUND_PARTIALLY_UPGRADED_DD_ABORT 11014
-#define ER_DD_UPGRADE_FOUND_PARTIALLY_UPGRADED_DD_CONTINUE 11015
-#define ER_DD_UPGRADE_SE_LOGS_FAILED 11016
-#define ER_DD_UPGRADE_SDI_INFO_UPDATE_FAILED 11017
-#define ER_SKIP_UPDATING_METADATA_IN_SE_RO_MODE 11018
-#define ER_CREATED_SYSTEM_WITH_VERSION 11019
-#define ER_UNKNOWN_ERROR_DETECTED_IN_SE 11020
-#define ER_READ_LOG_EVENT_FAILED 11021
-#define ER_ROW_DATA_TOO_BIG_TO_WRITE_IN_BINLOG 11022
-#define ER_FAILED_TO_CONSTRUCT_DROP_EVENT_QUERY 11023
-#define ER_FAILED_TO_BINLOG_DROP_EVENT 11024
-#define ER_FAILED_TO_START_SLAVE_THREAD 11025
-#define ER_RPL_IO_THREAD_KILLED 11026
-#define ER_SLAVE_RECONNECT_FAILED 11027
-#define ER_SLAVE_KILLED_AFTER_RECONNECT 11028
-#define ER_SLAVE_NOT_STARTED_ON_SOME_CHANNELS 11029
-#define ER_FAILED_TO_ADD_RPL_FILTER 11030
-#define ER_PER_CHANNEL_RPL_FILTER_CONF_FOR_GRP_RPL 11031
-#define ER_RPL_FILTERS_NOT_ATTACHED_TO_CHANNEL 11032
-#define ER_FAILED_TO_BUILD_DO_AND_IGNORE_TABLE_HASHES 11033
-#define ER_CLONE_PLUGIN_NOT_LOADED_TRACE 11034
-#define ER_CLONE_HANDLER_EXIST_TRACE 11035
-#define ER_CLONE_CREATE_HANDLER_FAIL_TRACE 11036
-#define ER_CYCLE_TIMER_IS_NOT_AVAILABLE 11037
-#define ER_NANOSECOND_TIMER_IS_NOT_AVAILABLE 11038
-#define ER_MICROSECOND_TIMER_IS_NOT_AVAILABLE 11039
-#define ER_PFS_MALLOC_ARRAY_OVERFLOW 11040
-#define ER_PFS_MALLOC_ARRAY_OOM 11041
-#define ER_INNODB_FAILED_TO_FIND_IDX_WITH_KEY_NO 11042
-#define ER_INNODB_FAILED_TO_FIND_IDX 11043
-#define ER_INNODB_FAILED_TO_FIND_IDX_FROM_DICT_CACHE 11044
-#define ER_INNODB_ACTIVE_INDEX_CHANGE_FAILED 11045
-#define ER_INNODB_DIFF_IN_REF_LEN 11046
-#define ER_WRONG_TYPE_FOR_COLUMN_PREFIX_IDX_FLD 11047
-#define ER_INNODB_CANNOT_CREATE_TABLE 11048
-#define ER_INNODB_INTERNAL_INDEX 11049
-#define ER_INNODB_IDX_CNT_MORE_THAN_DEFINED_IN_MYSQL 11050
-#define ER_INNODB_IDX_CNT_FEWER_THAN_DEFINED_IN_MYSQL 11051
-#define ER_INNODB_IDX_COLUMN_CNT_DIFF 11052
-#define ER_INNODB_USE_MONITOR_GROUP_NAME 11053
-#define ER_INNODB_MONITOR_DEFAULT_VALUE_NOT_DEFINED 11054
-#define ER_INNODB_MONITOR_IS_ENABLED 11055
-#define ER_INNODB_INVALID_MONITOR_COUNTER_NAME 11056
-#define ER_WIN_LOAD_LIBRARY_FAILED 11057
-#define ER_PARTITION_HANDLER_ADMIN_MSG 11058
-#define ER_RPL_RLI_INIT_INFO_MSG 11059
-#define ER_DD_UPGRADE_TABLE_INTACT_ERROR 11060
-#define ER_SERVER_INIT_COMPILED_IN_COMMANDS 11061
-#define ER_MYISAM_CHECK_METHOD_ERROR 11062
-#define ER_MYISAM_CRASHED_ERROR 11063
-#define ER_WAITPID_FAILED 11064
-#define ER_FAILED_TO_FIND_MYSQLD_STATUS 11065
-#define ER_INNODB_ERROR_LOGGER_MSG 11066
-#define ER_INNODB_ERROR_LOGGER_FATAL_MSG 11067
-#define ER_DEPRECATED_SYNTAX_WITH_REPLACEMENT 11068
-#define ER_DEPRECATED_SYNTAX_NO_REPLACEMENT 11069
-#define ER_DEPRECATE_MSG_NO_REPLACEMENT 11070
-#define ER_LOG_PRINTF_MSG 11071
-#define ER_BINLOG_LOGGING_NOT_POSSIBLE 11072
-#define ER_FAILED_TO_SET_PERSISTED_OPTIONS 11073
-#define ER_COMPONENTS_FAILED_TO_ACQUIRE_SERVICE_IMPLEMENTATION 11074
-#define ER_RES_GRP_INVALID_VCPU_RANGE 11075
-#define ER_RES_GRP_INVALID_VCPU_ID 11076
-#define ER_ERROR_DURING_FLUSH_LOG_COMMIT_PHASE 11077
-#define ER_DROP_DATABASE_FAILED_RMDIR_MANUALLY 11078
-#define ER_EXPIRE_LOGS_DAYS_IGNORED 11079
-#define ER_BINLOG_MALFORMED_OR_OLD_RELAY_LOG 11080
-#define ER_DD_UPGRADE_VIEW_COLUMN_NAME_TOO_LONG 11081
-#define ER_TABLE_NEEDS_DUMP_UPGRADE 11082
-#define ER_DD_UPGRADE_FAILED_TO_UPDATE_VER_NO_IN_TABLESPACE 11083
-#define ER_KEYRING_MIGRATION_FAILED 11084
-#define ER_KEYRING_MIGRATION_SUCCESSFUL 11085
-#define ER_RESTART_RECEIVED_INFO 11086
-#define ER_LCTN_CHANGED 11087
-#define ER_DD_INITIALIZE 11088
-#define ER_DD_RESTART 11089
-#define ER_DD_UPGRADE 11090
-#define ER_DD_UPGRADE_OFF 11091
-#define ER_DD_UPGRADE_VERSION_NOT_SUPPORTED 11092
-#define ER_DD_UPGRADE_SCHEMA_UNAVAILABLE 11093
-#define ER_DD_MINOR_DOWNGRADE 11094
-#define ER_DD_MINOR_DOWNGRADE_VERSION_NOT_SUPPORTED 11095
-#define ER_DD_NO_VERSION_FOUND 11096
-#define ER_THREAD_POOL_NOT_SUPPORTED_ON_PLATFORM 11097
-#define ER_THREAD_POOL_SIZE_TOO_LOW 11098
-#define ER_THREAD_POOL_SIZE_TOO_HIGH 11099
-#define ER_THREAD_POOL_ALGORITHM_INVALID 11100
-#define ER_THREAD_POOL_INVALID_STALL_LIMIT 11101
-#define ER_THREAD_POOL_INVALID_PRIO_KICKUP_TIMER 11102
-#define ER_THREAD_POOL_MAX_UNUSED_THREADS_INVALID 11103
-#define ER_THREAD_POOL_CON_HANDLER_INIT_FAILED 11104
-#define ER_THREAD_POOL_INIT_FAILED 11105
-//#define OBSOLETE_ER_THREAD_POOL_PLUGIN_STARTED 11106
-#define ER_THREAD_POOL_CANNOT_SET_THREAD_SPECIFIC_DATA 11107
-#define ER_THREAD_POOL_FAILED_TO_CREATE_CONNECT_HANDLER_THD 11108
-#define ER_THREAD_POOL_FAILED_TO_CREATE_THD_AND_AUTH_CONN 11109
-#define ER_THREAD_POOL_FAILED_PROCESS_CONNECT_EVENT 11110
-#define ER_THREAD_POOL_FAILED_TO_CREATE_POOL 11111
-#define ER_THREAD_POOL_RATE_LIMITED_ERROR_MSGS 11112
-#define ER_TRHEAD_POOL_LOW_LEVEL_INIT_FAILED 11113
-#define ER_THREAD_POOL_LOW_LEVEL_REARM_FAILED 11114
-#define ER_THREAD_POOL_BUFFER_TOO_SMALL 11115
-#define ER_MECAB_NOT_SUPPORTED 11116
-#define ER_MECAB_NOT_VERIFIED 11117
-#define ER_MECAB_CREATING_MODEL 11118
-#define ER_MECAB_FAILED_TO_CREATE_MODEL 11119
-#define ER_MECAB_FAILED_TO_CREATE_TRIGGER 11120
-#define ER_MECAB_UNSUPPORTED_CHARSET 11121
-#define ER_MECAB_CHARSET_LOADED 11122
-#define ER_MECAB_PARSE_FAILED 11123
-#define ER_MECAB_OOM_WHILE_PARSING_TEXT 11124
-#define ER_MECAB_CREATE_LATTICE_FAILED 11125
-#define ER_SEMISYNC_TRACE_ENTER_FUNC 11126
-#define ER_SEMISYNC_TRACE_EXIT_WITH_INT_EXIT_CODE 11127
-#define ER_SEMISYNC_TRACE_EXIT_WITH_BOOL_EXIT_CODE 11128
-#define ER_SEMISYNC_TRACE_EXIT 11129
-#define ER_SEMISYNC_RPL_INIT_FOR_TRX 11130
-#define ER_SEMISYNC_FAILED_TO_ALLOCATE_TRX_NODE 11131
-#define ER_SEMISYNC_BINLOG_WRITE_OUT_OF_ORDER 11132
-#define ER_SEMISYNC_INSERT_LOG_INFO_IN_ENTRY 11133
-#define ER_SEMISYNC_PROBE_LOG_INFO_IN_ENTRY 11134
-#define ER_SEMISYNC_CLEARED_ALL_ACTIVE_TRANSACTION_NODES 11135
-#define ER_SEMISYNC_CLEARED_ACTIVE_TRANSACTION_TILL_POS 11136
-#define ER_SEMISYNC_REPLY_MAGIC_NO_ERROR 11137
-#define ER_SEMISYNC_REPLY_PKT_LENGTH_TOO_SMALL 11138
-#define ER_SEMISYNC_REPLY_BINLOG_FILE_TOO_LARGE 11139
-#define ER_SEMISYNC_SERVER_REPLY 11140
-#define ER_SEMISYNC_FUNCTION_CALLED_TWICE 11141
-#define ER_SEMISYNC_RPL_ENABLED_ON_MASTER 11142
-#define ER_SEMISYNC_MASTER_OOM 11143
-#define ER_SEMISYNC_DISABLED_ON_MASTER 11144
-#define ER_SEMISYNC_FORCED_SHUTDOWN 11145
-#define ER_SEMISYNC_MASTER_GOT_REPLY_AT_POS 11146
-#define ER_SEMISYNC_MASTER_SIGNAL_ALL_WAITING_THREADS 11147
-#define ER_SEMISYNC_MASTER_TRX_WAIT_POS 11148
-#define ER_SEMISYNC_BINLOG_REPLY_IS_AHEAD 11149
-#define ER_SEMISYNC_MOVE_BACK_WAIT_POS 11150
-#define ER_SEMISYNC_INIT_WAIT_POS 11151
-#define ER_SEMISYNC_WAIT_TIME_FOR_BINLOG_SENT 11152
-#define ER_SEMISYNC_WAIT_FOR_BINLOG_TIMEDOUT 11153
-#define ER_SEMISYNC_WAIT_TIME_ASSESSMENT_FOR_COMMIT_TRX_FAILED 11154
-#define ER_SEMISYNC_RPL_SWITCHED_OFF 11155
-#define ER_SEMISYNC_RPL_SWITCHED_ON 11156
-#define ER_SEMISYNC_NO_SPACE_IN_THE_PKT 11157
-#define ER_SEMISYNC_SYNC_HEADER_UPDATE_INFO 11158
-#define ER_SEMISYNC_FAILED_TO_INSERT_TRX_NODE 11159
-#define ER_SEMISYNC_TRX_SKIPPED_AT_POS 11160
-#define ER_SEMISYNC_MASTER_FAILED_ON_NET_FLUSH 11161
-#define ER_SEMISYNC_RECEIVED_ACK_IS_SMALLER 11162
-#define ER_SEMISYNC_ADD_ACK_TO_SLOT 11163
-#define ER_SEMISYNC_UPDATE_EXISTING_SLAVE_ACK 11164
-#define ER_SEMISYNC_FAILED_TO_START_ACK_RECEIVER_THD 11165
-#define ER_SEMISYNC_STARTING_ACK_RECEIVER_THD 11166
-#define ER_SEMISYNC_FAILED_TO_WAIT_ON_DUMP_SOCKET 11167
-#define ER_SEMISYNC_STOPPING_ACK_RECEIVER_THREAD 11168
-#define ER_SEMISYNC_FAILED_REGISTER_SLAVE_TO_RECEIVER 11169
-#define ER_SEMISYNC_START_BINLOG_DUMP_TO_SLAVE 11170
-#define ER_SEMISYNC_STOP_BINLOG_DUMP_TO_SLAVE 11171
-#define ER_SEMISYNC_UNREGISTER_TRX_OBSERVER_FAILED 11172
-#define ER_SEMISYNC_UNREGISTER_BINLOG_STORAGE_OBSERVER_FAILED 11173
-#define ER_SEMISYNC_UNREGISTER_BINLOG_TRANSMIT_OBSERVER_FAILED 11174
-#define ER_SEMISYNC_UNREGISTERED_REPLICATOR 11175
-#define ER_SEMISYNC_SOCKET_FD_TOO_LARGE 11176
-#define ER_SEMISYNC_SLAVE_REPLY 11177
-#define ER_SEMISYNC_MISSING_MAGIC_NO_FOR_SEMISYNC_PKT 11178
-#define ER_SEMISYNC_SLAVE_START 11179
-#define ER_SEMISYNC_SLAVE_REPLY_WITH_BINLOG_INFO 11180
-#define ER_SEMISYNC_SLAVE_NET_FLUSH_REPLY_FAILED 11181
-#define ER_SEMISYNC_SLAVE_SEND_REPLY_FAILED 11182
-#define ER_SEMISYNC_EXECUTION_FAILED_ON_MASTER 11183
-#define ER_SEMISYNC_NOT_SUPPORTED_BY_MASTER 11184
-#define ER_SEMISYNC_SLAVE_SET_FAILED 11185
-#define ER_SEMISYNC_FAILED_TO_STOP_ACK_RECEIVER_THD 11186
-#define ER_FIREWALL_FAILED_TO_READ_FIREWALL_TABLES 11187
-#define ER_FIREWALL_FAILED_TO_REG_DYNAMIC_PRIVILEGES 11188
-#define ER_FIREWALL_RECORDING_STMT_WAS_TRUNCATED 11189
-#define ER_FIREWALL_RECORDING_STMT_WITHOUT_TEXT 11190
-#define ER_FIREWALL_SUSPICIOUS_STMT 11191
-#define ER_FIREWALL_ACCESS_DENIED 11192
-#define ER_FIREWALL_SKIPPED_UNKNOWN_USER_MODE 11193
-#define ER_FIREWALL_RELOADING_CACHE 11194
-#define ER_FIREWALL_RESET_FOR_USER 11195
-#define ER_FIREWALL_STATUS_FLUSHED 11196
-#define ER_KEYRING_LOGGER_ERROR_MSG 11197
-#define ER_AUDIT_LOG_FILTER_IS_NOT_INSTALLED 11198
-#define ER_AUDIT_LOG_SWITCHING_TO_INCLUDE_LIST 11199
-#define ER_AUDIT_LOG_CANNOT_SET_LOG_POLICY_WITH_OTHER_POLICIES 11200
-#define ER_AUDIT_LOG_ONLY_INCLUDE_LIST_USED 11201
-#define ER_AUDIT_LOG_INDEX_MAP_CANNOT_ACCESS_DIR 11202
-#define ER_AUDIT_LOG_WRITER_RENAME_FILE_FAILED 11203
-#define ER_AUDIT_LOG_WRITER_DEST_FILE_ALREADY_EXISTS 11204
-#define ER_AUDIT_LOG_WRITER_RENAME_FILE_FAILED_REMOVE_FILE_MANUALLY 11205
-#define ER_AUDIT_LOG_WRITER_INCOMPLETE_FILE_RENAMED 11206
-#define ER_AUDIT_LOG_WRITER_FAILED_TO_WRITE_TO_FILE 11207
-#define ER_AUDIT_LOG_EC_WRITER_FAILED_TO_INIT_ENCRYPTION 11208
-#define ER_AUDIT_LOG_EC_WRITER_FAILED_TO_INIT_COMPRESSION 11209
-#define ER_AUDIT_LOG_EC_WRITER_FAILED_TO_CREATE_FILE 11210
-#define ER_AUDIT_LOG_RENAME_LOG_FILE_BEFORE_FLUSH 11211
-#define ER_AUDIT_LOG_FILTER_RESULT_MSG 11212
-#define ER_AUDIT_LOG_JSON_READER_FAILED_TO_PARSE 11213
-#define ER_AUDIT_LOG_JSON_READER_BUF_TOO_SMALL 11214
-#define ER_AUDIT_LOG_JSON_READER_FAILED_TO_OPEN_FILE 11215
-#define ER_AUDIT_LOG_JSON_READER_FILE_PARSING_ERROR 11216
-//#define OBSOLETE_ER_AUDIT_LOG_FILTER_INVALID_COLUMN_COUNT 11217
-//#define OBSOLETE_ER_AUDIT_LOG_FILTER_INVALID_COLUMN_DEFINITION 11218
-#define ER_AUDIT_LOG_FILTER_FAILED_TO_STORE_TABLE_FLDS 11219
-#define ER_AUDIT_LOG_FILTER_FAILED_TO_UPDATE_TABLE 11220
-#define ER_AUDIT_LOG_FILTER_FAILED_TO_INSERT_INTO_TABLE 11221
-#define ER_AUDIT_LOG_FILTER_FAILED_TO_DELETE_FROM_TABLE 11222
-#define ER_AUDIT_LOG_FILTER_FAILED_TO_INIT_TABLE_FOR_READ 11223
-#define ER_AUDIT_LOG_FILTER_FAILED_TO_READ_TABLE 11224
-#define ER_AUDIT_LOG_FILTER_FAILED_TO_CLOSE_TABLE_AFTER_READING 11225
-#define ER_AUDIT_LOG_FILTER_USER_AND_HOST_CANNOT_BE_EMPTY 11226
-#define ER_AUDIT_LOG_FILTER_FLD_FILTERNAME_CANNOT_BE_EMPTY 11227
-#define ER_VALIDATE_PWD_DICT_FILE_NOT_SPECIFIED 11228
-#define ER_VALIDATE_PWD_DICT_FILE_NOT_LOADED 11229
-#define ER_VALIDATE_PWD_DICT_FILE_TOO_BIG 11230
-#define ER_VALIDATE_PWD_FAILED_TO_READ_DICT_FILE 11231
-#define ER_VALIDATE_PWD_FAILED_TO_GET_FLD_FROM_SECURITY_CTX 11232
-#define ER_VALIDATE_PWD_FAILED_TO_GET_SECURITY_CTX 11233
-#define ER_VALIDATE_PWD_LENGTH_CHANGED 11234
-#define ER_REWRITER_QUERY_ERROR_MSG 11235
-#define ER_REWRITER_QUERY_FAILED 11236
-#define ER_XPLUGIN_STARTUP_FAILED 11237
-//#define OBSOLETE_ER_XPLUGIN_SERVER_EXITING 11238
-//#define OBSOLETE_ER_XPLUGIN_SERVER_EXITED 11239
-#define ER_XPLUGIN_USING_SSL_CONF_FROM_SERVER 11240
-#define ER_XPLUGIN_USING_SSL_CONF_FROM_MYSQLX 11241
-#define ER_XPLUGIN_FAILED_TO_USE_SSL_CONF 11242
-#define ER_XPLUGIN_USING_SSL_FOR_TLS_CONNECTION 11243
-#define ER_XPLUGIN_REFERENCE_TO_SECURE_CONN_WITH_XPLUGIN 11244
-#define ER_XPLUGIN_ERROR_MSG 11245
-#define ER_SHA_PWD_FAILED_TO_PARSE_AUTH_STRING 11246
-#define ER_SHA_PWD_FAILED_TO_GENERATE_MULTI_ROUND_HASH 11247
-#define ER_SHA_PWD_AUTH_REQUIRES_RSA_OR_SSL 11248
-#define ER_SHA_PWD_RSA_KEY_TOO_LONG 11249
-#define ER_PLUGIN_COMMON_FAILED_TO_OPEN_FILTER_TABLES 11250
-#define ER_PLUGIN_COMMON_FAILED_TO_OPEN_TABLE 11251
-#define ER_AUTH_LDAP_ERROR_LOGGER_ERROR_MSG 11252
-#define ER_CONN_CONTROL_ERROR_MSG 11253
-#define ER_GRP_RPL_ERROR_MSG 11254
-#define ER_SHA_PWD_SALT_FOR_USER_CORRUPT 11255
-#define ER_SYS_VAR_COMPONENT_OOM 11256
-#define ER_SYS_VAR_COMPONENT_VARIABLE_SET_READ_ONLY 11257
-#define ER_SYS_VAR_COMPONENT_UNKNOWN_VARIABLE_TYPE 11258
-#define ER_SYS_VAR_COMPONENT_FAILED_TO_PARSE_VARIABLE_OPTIONS 11259
-#define ER_SYS_VAR_COMPONENT_FAILED_TO_MAKE_VARIABLE_PERSISTENT 11260
-#define ER_COMPONENT_FILTER_CONFUSED 11261
-#define ER_STOP_SLAVE_IO_THREAD_DISK_SPACE 11262
-#define ER_LOG_FILE_CANNOT_OPEN 11263
-//#define OBSOLETE_ER_UNABLE_TO_COLLECT_LOG_STATUS 11264
-//#define OBSOLETE_ER_DEPRECATED_UTF8_ALIAS 11265
-//#define OBSOLETE_ER_DEPRECATED_NATIONAL 11266
-//#define OBSOLETE_ER_SLAVE_POSSIBLY_DIVERGED_AFTER_DDL 11267
-#define ER_PERSIST_OPTION_STATUS 11268
-#define ER_NOT_IMPLEMENTED_GET_TABLESPACE_STATISTICS 11269
-//#define OBSOLETE_ER_UNABLE_TO_SET_OPTION 11270
-//#define OBSOLETE_ER_RESERVED_TABLESPACE_NAME 11271
-#define ER_SSL_FIPS_MODE_ERROR 11272
-#define ER_CONN_INIT_CONNECT_IGNORED 11273
-//#define OBSOLETE_ER_UNSUPPORTED_SQL_MODE 11274
-#define ER_REWRITER_OOM 11275
-#define ER_REWRITER_TABLE_MALFORMED_ERROR 11276
-#define ER_REWRITER_LOAD_FAILED 11277
-#define ER_REWRITER_READ_FAILED 11278
-#define ER_CONN_CONTROL_EVENT_COORDINATOR_INIT_FAILED 11279
-#define ER_CONN_CONTROL_STAT_CONN_DELAY_TRIGGERED_UPDATE_FAILED 11280
-#define ER_CONN_CONTROL_STAT_CONN_DELAY_TRIGGERED_RESET_FAILED 11281
-#define ER_CONN_CONTROL_INVALID_CONN_DELAY_TYPE 11282
-#define ER_CONN_CONTROL_DELAY_ACTION_INIT_FAILED 11283
-#define ER_CONN_CONTROL_FAILED_TO_SET_CONN_DELAY 11284
-#define ER_CONN_CONTROL_FAILED_TO_UPDATE_CONN_DELAY_HASH 11285
-#define ER_XPLUGIN_FORCE_STOP_CLIENT 11286
-#define ER_XPLUGIN_MAX_AUTH_ATTEMPTS_REACHED 11287
-#define ER_XPLUGIN_BUFFER_PAGE_ALLOC_FAILED 11288
-#define ER_XPLUGIN_DETECTED_HANGING_CLIENTS 11289
-#define ER_XPLUGIN_FAILED_TO_ACCEPT_CLIENT 11290
-#define ER_XPLUGIN_FAILED_TO_SCHEDULE_CLIENT 11291
-#define ER_XPLUGIN_FAILED_TO_PREPARE_IO_INTERFACES 11292
-#define ER_XPLUGIN_SRV_SESSION_INIT_THREAD_FAILED 11293
-#define ER_XPLUGIN_UNABLE_TO_USE_USER_SESSION_ACCOUNT 11294
-#define ER_XPLUGIN_REFERENCE_TO_USER_ACCOUNT_DOC_SECTION 11295
-#define ER_XPLUGIN_UNEXPECTED_EXCEPTION_DISPATCHING_CMD 11296
-#define ER_XPLUGIN_EXCEPTION_IN_TASK_SCHEDULER 11297
-#define ER_XPLUGIN_TASK_SCHEDULING_FAILED 11298
-#define ER_XPLUGIN_EXCEPTION_IN_EVENT_LOOP 11299
-#define ER_XPLUGIN_LISTENER_SETUP_FAILED 11300
-#define ER_XPLUING_NET_STARTUP_FAILED 11301
-#define ER_XPLUGIN_FAILED_AT_SSL_CONF 11302
-//#define OBSOLETE_ER_XPLUGIN_CLIENT_SSL_HANDSHAKE_FAILED 11303
-//#define OBSOLETE_ER_XPLUGIN_SSL_HANDSHAKE_WITH_SERVER_FAILED 11304
-#define ER_XPLUGIN_FAILED_TO_CREATE_SESSION_FOR_CONN 11305
-#define ER_XPLUGIN_FAILED_TO_INITIALIZE_SESSION 11306
-#define ER_XPLUGIN_MESSAGE_TOO_LONG 11307
-#define ER_XPLUGIN_UNINITIALIZED_MESSAGE 11308
-#define ER_XPLUGIN_FAILED_TO_SET_MIN_NUMBER_OF_WORKERS 11309
-#define ER_XPLUGIN_UNABLE_TO_ACCEPT_CONNECTION 11310
-#define ER_XPLUGIN_ALL_IO_INTERFACES_DISABLED 11311
-//#define OBSOLETE_ER_XPLUGIN_INVALID_MSG_DURING_CLIENT_INIT 11312
-//#define OBSOLETE_ER_XPLUGIN_CLOSING_CLIENTS_ON_SHUTDOWN 11313
-#define ER_XPLUGIN_ERROR_READING_SOCKET 11314
-#define ER_XPLUGIN_PEER_DISCONNECTED_WHILE_READING_MSG_BODY 11315
-#define ER_XPLUGIN_READ_FAILED_CLOSING_CONNECTION 11316
-//#define OBSOLETE_ER_XPLUGIN_INVALID_AUTH_METHOD 11317
-//#define OBSOLETE_ER_XPLUGIN_UNEXPECTED_MSG_DURING_AUTHENTICATION 11318
-//#define OBSOLETE_ER_XPLUGIN_ERROR_WRITING_TO_CLIENT 11319
-//#define OBSOLETE_ER_XPLUGIN_SCHEDULER_STARTED 11320
-//#define OBSOLETE_ER_XPLUGIN_SCHEDULER_STOPPED 11321
-#define ER_XPLUGIN_LISTENER_SYS_VARIABLE_ERROR 11322
-#define ER_XPLUGIN_LISTENER_STATUS_MSG 11323
-#define ER_XPLUGIN_RETRYING_BIND_ON_PORT 11324
-//#define OBSOLETE_ER_XPLUGIN_SHUTDOWN_TRIGGERED 11325
-//#define OBSOLETE_ER_XPLUGIN_USER_ACCOUNT_WITH_ALL_PERMISSIONS 11326
-#define ER_XPLUGIN_EXISTING_USER_ACCOUNT_WITH_INCOMPLETE_GRANTS 11327
-//#define OBSOLETE_ER_XPLUGIN_SERVER_STARTS_HANDLING_CONNECTIONS 11328
-//#define OBSOLETE_ER_XPLUGIN_SERVER_STOPPED_HANDLING_CONNECTIONS 11329
-//#define OBSOLETE_ER_XPLUGIN_FAILED_TO_INTERRUPT_SESSION 11330
-//#define OBSOLETE_ER_XPLUGIN_CLIENT_RELEASE_TRIGGERED 11331
-#define ER_XPLUGIN_IPv6_AVAILABLE 11332
-//#define OBSOLETE_ER_XPLUGIN_UNIX_SOCKET_NOT_CONFIGURED 11333
-#define ER_XPLUGIN_CLIENT_KILL_MSG 11334
-#define ER_XPLUGIN_FAILED_TO_GET_SECURITY_CTX 11335
-//#define OBSOLETE_ER_XPLUGIN_FAILED_TO_SWITCH_SECURITY_CTX_TO_ROOT 11336
-#define ER_XPLUGIN_FAILED_TO_CLOSE_SQL_SESSION 11337
-#define ER_XPLUGIN_FAILED_TO_EXECUTE_ADMIN_CMD 11338
-#define ER_XPLUGIN_EMPTY_ADMIN_CMD 11339
-#define ER_XPLUGIN_FAILED_TO_GET_SYS_VAR 11340
-#define ER_XPLUGIN_FAILED_TO_GET_CREATION_STMT 11341
-#define ER_XPLUGIN_FAILED_TO_GET_ENGINE_INFO 11342
-//#define OBSOLETE_ER_XPLUGIN_FAIL_TO_GET_RESULT_DATA 11343
-//#define OBSOLETE_ER_XPLUGIN_CAPABILITY_EXPIRED_PASSWORD 11344
-#define ER_XPLUGIN_FAILED_TO_SET_SO_REUSEADDR_FLAG 11345
-#define ER_XPLUGIN_FAILED_TO_OPEN_INTERNAL_SESSION 11346
-#define ER_XPLUGIN_FAILED_TO_SWITCH_CONTEXT 11347
-#define ER_XPLUGIN_FAILED_TO_UNREGISTER_UDF 11348
-//#define OBSOLETE_ER_XPLUGIN_GET_PEER_ADDRESS_FAILED 11349
-//#define OBSOLETE_ER_XPLUGIN_CAPABILITY_CLIENT_INTERACTIVE_FAILED 11350
-#define ER_XPLUGIN_FAILED_TO_RESET_IPV6_V6ONLY_FLAG 11351
-#define ER_KEYRING_INVALID_KEY_TYPE 11352
-#define ER_KEYRING_INVALID_KEY_LENGTH 11353
-#define ER_KEYRING_FAILED_TO_CREATE_KEYRING_DIR 11354
-#define ER_KEYRING_FILE_INIT_FAILED 11355
-#define ER_KEYRING_INTERNAL_EXCEPTION_FAILED_FILE_INIT 11356
-#define ER_KEYRING_FAILED_TO_GENERATE_KEY 11357
-#define ER_KEYRING_CHECK_KEY_FAILED_DUE_TO_INVALID_KEY 11358
-#define ER_KEYRING_CHECK_KEY_FAILED_DUE_TO_EMPTY_KEY_ID 11359
-#define ER_KEYRING_OPERATION_FAILED_DUE_TO_INTERNAL_ERROR 11360
-#define ER_KEYRING_INCORRECT_FILE 11361
-#define ER_KEYRING_FOUND_MALFORMED_BACKUP_FILE 11362
-#define ER_KEYRING_FAILED_TO_RESTORE_FROM_BACKUP_FILE 11363
-#define ER_KEYRING_FAILED_TO_FLUSH_KEYRING_TO_FILE 11364
-#define ER_KEYRING_FAILED_TO_GET_FILE_STAT 11365
-#define ER_KEYRING_FAILED_TO_REMOVE_FILE 11366
-#define ER_KEYRING_FAILED_TO_TRUNCATE_FILE 11367
-#define ER_KEYRING_UNKNOWN_ERROR 11368
-#define ER_KEYRING_FAILED_TO_SET_KEYRING_FILE_DATA 11369
-#define ER_KEYRING_FILE_IO_ERROR 11370
-#define ER_KEYRING_FAILED_TO_LOAD_KEYRING_CONTENT 11371
-#define ER_KEYRING_FAILED_TO_FLUSH_KEYS_TO_KEYRING 11372
-#define ER_KEYRING_FAILED_TO_FLUSH_KEYS_TO_KEYRING_BACKUP 11373
-#define ER_KEYRING_KEY_FETCH_FAILED_DUE_TO_EMPTY_KEY_ID 11374
-#define ER_KEYRING_FAILED_TO_REMOVE_KEY_DUE_TO_EMPTY_ID 11375
-#define ER_KEYRING_OKV_INCORRECT_KEY_VAULT_CONFIGURED 11376
-#define ER_KEYRING_OKV_INIT_FAILED_DUE_TO_INCORRECT_CONF 11377
-#define ER_KEYRING_OKV_INIT_FAILED_DUE_TO_INTERNAL_ERROR 11378
-#define ER_KEYRING_OKV_INVALID_KEY_TYPE 11379
-#define ER_KEYRING_OKV_INVALID_KEY_LENGTH_FOR_CIPHER 11380
-#define ER_KEYRING_OKV_FAILED_TO_GENERATE_KEY_DUE_TO_INTERNAL_ERROR 11381
-#define ER_KEYRING_OKV_FAILED_TO_FIND_SERVER_ENTRY 11382
-#define ER_KEYRING_OKV_FAILED_TO_FIND_STANDBY_SERVER_ENTRY 11383
-#define ER_KEYRING_OKV_FAILED_TO_PARSE_CONF_FILE 11384
-#define ER_KEYRING_OKV_FAILED_TO_LOAD_KEY_UID 11385
-#define ER_KEYRING_OKV_FAILED_TO_INIT_SSL_LAYER 11386
-#define ER_KEYRING_OKV_FAILED_TO_INIT_CLIENT 11387
-#define ER_KEYRING_OKV_CONNECTION_TO_SERVER_FAILED 11388
-#define ER_KEYRING_OKV_FAILED_TO_REMOVE_KEY 11389
-#define ER_KEYRING_OKV_FAILED_TO_ADD_ATTRIBUTE 11390
-#define ER_KEYRING_OKV_FAILED_TO_GENERATE_KEY 11391
-#define ER_KEYRING_OKV_FAILED_TO_STORE_KEY 11392
-#define ER_KEYRING_OKV_FAILED_TO_ACTIVATE_KEYS 11393
-#define ER_KEYRING_OKV_FAILED_TO_FETCH_KEY 11394
-#define ER_KEYRING_OKV_FAILED_TO_STORE_OR_GENERATE_KEY 11395
-#define ER_KEYRING_OKV_FAILED_TO_RETRIEVE_KEY_SIGNATURE 11396
-#define ER_KEYRING_OKV_FAILED_TO_RETRIEVE_KEY 11397
-#define ER_KEYRING_OKV_FAILED_TO_LOAD_SSL_TRUST_STORE 11398
-#define ER_KEYRING_OKV_FAILED_TO_SET_CERTIFICATE_FILE 11399
-#define ER_KEYRING_OKV_FAILED_TO_SET_KEY_FILE 11400
-#define ER_KEYRING_OKV_KEY_MISMATCH 11401
-#define ER_KEYRING_ENCRYPTED_FILE_INCORRECT_KEYRING_FILE 11402
-#define ER_KEYRING_ENCRYPTED_FILE_DECRYPTION_FAILED 11403
-#define ER_KEYRING_ENCRYPTED_FILE_FOUND_MALFORMED_BACKUP_FILE 11404
-#define ER_KEYRING_ENCRYPTED_FILE_FAILED_TO_RESTORE_KEYRING 11405
-#define ER_KEYRING_ENCRYPTED_FILE_FAILED_TO_FLUSH_KEYRING 11406
-#define ER_KEYRING_ENCRYPTED_FILE_ENCRYPTION_FAILED 11407
-#define ER_KEYRING_ENCRYPTED_FILE_INVALID_KEYRING_DIR 11408
-#define ER_KEYRING_ENCRYPTED_FILE_FAILED_TO_CREATE_KEYRING_DIR 11409
-#define ER_KEYRING_ENCRYPTED_FILE_PASSWORD_IS_INVALID 11410
-#define ER_KEYRING_ENCRYPTED_FILE_PASSWORD_IS_TOO_LONG 11411
-#define ER_KEYRING_ENCRYPTED_FILE_INIT_FAILURE 11412
-#define ER_KEYRING_ENCRYPTED_FILE_INIT_FAILED_DUE_TO_INTERNAL_ERROR 11413
-#define ER_KEYRING_ENCRYPTED_FILE_GEN_KEY_FAILED_DUE_TO_INTERNAL_ERROR 11414
-#define ER_KEYRING_AWS_FAILED_TO_SET_CMK_ID 11415
-#define ER_KEYRING_AWS_FAILED_TO_SET_REGION 11416
-#define ER_KEYRING_AWS_FAILED_TO_OPEN_CONF_FILE 11417
-#define ER_KEYRING_AWS_FAILED_TO_ACCESS_KEY_ID_FROM_CONF_FILE 11418
-#define ER_KEYRING_AWS_FAILED_TO_ACCESS_KEY_FROM_CONF_FILE 11419
-#define ER_KEYRING_AWS_INVALID_CONF_FILE_PATH 11420
-#define ER_KEYRING_AWS_INVALID_DATA_FILE_PATH 11421
-#define ER_KEYRING_AWS_FAILED_TO_ACCESS_OR_CREATE_KEYRING_DIR 11422
-#define ER_KEYRING_AWS_FAILED_TO_ACCESS_OR_CREATE_KEYRING_DATA_FILE 11423
-#define ER_KEYRING_AWS_FAILED_TO_INIT_DUE_TO_INTERNAL_ERROR 11424
-#define ER_KEYRING_AWS_FAILED_TO_ACCESS_DATA_FILE 11425
-#define ER_KEYRING_AWS_CMK_ID_NOT_SET 11426
-#define ER_KEYRING_AWS_FAILED_TO_GET_KMS_CREDENTIAL_FROM_CONF_FILE 11427
-#define ER_KEYRING_AWS_INIT_FAILURE 11428
-#define ER_KEYRING_AWS_FAILED_TO_INIT_DUE_TO_PLUGIN_INTERNAL_ERROR 11429
-#define ER_KEYRING_AWS_INVALID_KEY_LENGTH_FOR_CIPHER 11430
-#define ER_KEYRING_AWS_FAILED_TO_GENERATE_KEY_DUE_TO_INTERNAL_ERROR 11431
-#define ER_KEYRING_AWS_INCORRECT_FILE 11432
-#define ER_KEYRING_AWS_FOUND_MALFORMED_BACKUP_FILE 11433
-#define ER_KEYRING_AWS_FAILED_TO_RESTORE_FROM_BACKUP_FILE 11434
-#define ER_KEYRING_AWS_FAILED_TO_FLUSH_KEYRING_TO_FILE 11435
-#define ER_KEYRING_AWS_INCORRECT_REGION 11436
-#define ER_KEYRING_AWS_FAILED_TO_CONNECT_KMS 11437
-#define ER_KEYRING_AWS_FAILED_TO_GENERATE_NEW_KEY 11438
-#define ER_KEYRING_AWS_FAILED_TO_ENCRYPT_KEY 11439
-#define ER_KEYRING_AWS_FAILED_TO_RE_ENCRYPT_KEY 11440
-#define ER_KEYRING_AWS_FAILED_TO_DECRYPT_KEY 11441
-#define ER_KEYRING_AWS_FAILED_TO_ROTATE_CMK 11442
-#define ER_GRP_RPL_GTID_ALREADY_USED 11443
-#define ER_GRP_RPL_APPLIER_THD_KILLED 11444
-#define ER_GRP_RPL_EVENT_HANDLING_ERROR 11445
-#define ER_GRP_RPL_ERROR_GTID_EXECUTION_INFO 11446
-#define ER_GRP_RPL_CERTIFICATE_SIZE_ERROR 11447
-#define ER_GRP_RPL_CREATE_APPLIER_CACHE_ERROR 11448
-#define ER_GRP_RPL_UNBLOCK_WAITING_THD 11449
-#define ER_GRP_RPL_APPLIER_PIPELINE_NOT_DISPOSED 11450
-#define ER_GRP_RPL_APPLIER_THD_EXECUTION_ABORTED 11451
-#define ER_GRP_RPL_APPLIER_EXECUTION_FATAL_ERROR 11452
-#define ER_GRP_RPL_ERROR_STOPPING_CHANNELS 11453
-#define ER_GRP_RPL_ERROR_SENDING_SINGLE_PRIMARY_MSSG 11454
-#define ER_GRP_RPL_UPDATE_TRANS_SNAPSHOT_VER_ERROR 11455
-#define ER_GRP_RPL_SIDNO_FETCH_ERROR 11456
-#define ER_GRP_RPL_BROADCAST_COMMIT_TRANS_MSSG_FAILED 11457
-#define ER_GRP_RPL_GROUP_NAME_PARSE_ERROR 11458
-#define ER_GRP_RPL_ADD_GRPSID_TO_GRPGTIDSID_MAP_ERROR 11459
-#define ER_GRP_RPL_UPDATE_GRPGTID_EXECUTED_ERROR 11460
-#define ER_GRP_RPL_DONOR_TRANS_INFO_ERROR 11461
-#define ER_GRP_RPL_SERVER_CONN_ERROR 11462
-#define ER_GRP_RPL_ERROR_FETCHING_GTID_EXECUTED_SET 11463
-#define ER_GRP_RPL_ADD_GTID_TO_GRPGTID_EXECUTED_ERROR 11464
-#define ER_GRP_RPL_ERROR_FETCHING_GTID_SET 11465
-#define ER_GRP_RPL_ADD_RETRIEVED_SET_TO_GRP_GTID_EXECUTED_ERROR 11466
-#define ER_GRP_RPL_CERTIFICATION_INITIALIZATION_FAILURE 11467
-#define ER_GRP_RPL_UPDATE_LAST_CONFLICT_FREE_TRANS_ERROR 11468
-#define ER_GRP_RPL_UPDATE_TRANS_SNAPSHOT_REF_VER_ERROR 11469
-#define ER_GRP_RPL_FETCH_TRANS_SIDNO_ERROR 11470
-#define ER_GRP_RPL_ERROR_VERIFYING_SIDNO 11471
-#define ER_GRP_RPL_CANT_GENERATE_GTID 11472
-#define ER_GRP_RPL_INVALID_GTID_SET 11473
-#define ER_GRP_RPL_UPDATE_GTID_SET_ERROR 11474
-#define ER_GRP_RPL_RECEIVED_SET_MISSING_GTIDS 11475
-//#define OBSOLETE_ER_GRP_RPL_SKIP_COMPUTATION_TRANS_COMMITTED 11476
-#define ER_GRP_RPL_NULL_PACKET 11477
-#define ER_GRP_RPL_CANT_READ_GTID 11478
-#define ER_GRP_RPL_PROCESS_GTID_SET_ERROR 11479
-#define ER_GRP_RPL_PROCESS_INTERSECTION_GTID_SET_ERROR 11480
-#define ER_GRP_RPL_SET_STABLE_TRANS_ERROR 11481
-#define ER_GRP_RPL_CANT_READ_GRP_GTID_EXTRACTED 11482
-#define ER_GRP_RPL_CANT_READ_WRITE_SET_ITEM 11483
-#define ER_GRP_RPL_INIT_CERTIFICATION_INFO_FAILURE 11484
-#define ER_GRP_RPL_CONFLICT_DETECTION_DISABLED 11485
-#define ER_GRP_RPL_MSG_DISCARDED 11486
-#define ER_GRP_RPL_MISSING_GRP_RPL_APPLIER 11487
-#define ER_GRP_RPL_CERTIFIER_MSSG_PROCESS_ERROR 11488
-#define ER_GRP_RPL_SRV_NOT_ONLINE 11489
-#define ER_GRP_RPL_SRV_ONLINE 11490
-#define ER_GRP_RPL_DISABLE_SRV_READ_MODE_RESTRICTED 11491
-#define ER_GRP_RPL_MEM_ONLINE 11492
-#define ER_GRP_RPL_MEM_UNREACHABLE 11493
-#define ER_GRP_RPL_MEM_REACHABLE 11494
-#define ER_GRP_RPL_SRV_BLOCKED 11495
-#define ER_GRP_RPL_SRV_BLOCKED_FOR_SECS 11496
-#define ER_GRP_RPL_CHANGE_GRP_MEM_NOT_PROCESSED 11497
-#define ER_GRP_RPL_MEMBER_CONTACT_RESTORED 11498
-#define ER_GRP_RPL_MEMBER_REMOVED 11499
-#define ER_GRP_RPL_PRIMARY_MEMBER_LEFT_GRP 11500
-#define ER_GRP_RPL_MEMBER_ADDED 11501
-#define ER_GRP_RPL_MEMBER_EXIT_PLUGIN_ERROR 11502
-#define ER_GRP_RPL_MEMBER_CHANGE 11503
-#define ER_GRP_RPL_MEMBER_LEFT_GRP 11504
-#define ER_GRP_RPL_MEMBER_EXPELLED 11505
-#define ER_GRP_RPL_SESSION_OPEN_FAILED 11506
-#define ER_GRP_RPL_NEW_PRIMARY_ELECTED 11507
-#define ER_GRP_RPL_DISABLE_READ_ONLY_FAILED 11508
-#define ER_GRP_RPL_ENABLE_READ_ONLY_FAILED 11509
-#define ER_GRP_RPL_SRV_PRIMARY_MEM 11510
-#define ER_GRP_RPL_SRV_SECONDARY_MEM 11511
-#define ER_GRP_RPL_NO_SUITABLE_PRIMARY_MEM 11512
-#define ER_GRP_RPL_SUPER_READ_ONLY_ACTIVATE_ERROR 11513
-#define ER_GRP_RPL_EXCEEDS_AUTO_INC_VALUE 11514
-#define ER_GRP_RPL_DATA_NOT_PROVIDED_BY_MEM 11515
-#define ER_GRP_RPL_MEMBER_ALREADY_EXISTS 11516
-//#define OBSOLETE_ER_GRP_RPL_GRP_CHANGE_INFO_EXTRACT_ERROR 11517
-#define ER_GRP_RPL_GTID_EXECUTED_EXTRACT_ERROR 11518
-#define ER_GRP_RPL_GTID_SET_EXTRACT_ERROR 11519
-#define ER_GRP_RPL_START_FAILED 11520
-#define ER_GRP_RPL_MEMBER_VER_INCOMPATIBLE 11521
-#define ER_GRP_RPL_TRANS_NOT_PRESENT_IN_GRP 11522
-#define ER_GRP_RPL_TRANS_GREATER_THAN_GRP 11523
-#define ER_GRP_RPL_MEMBER_VERSION_LOWER_THAN_GRP 11524
-#define ER_GRP_RPL_LOCAL_GTID_SETS_PROCESS_ERROR 11525
-#define ER_GRP_RPL_MEMBER_TRANS_GREATER_THAN_GRP 11526
-#define ER_GRP_RPL_BLOCK_SIZE_DIFF_FROM_GRP 11527
-#define ER_GRP_RPL_TRANS_WRITE_SET_EXTRACT_DIFF_FROM_GRP 11528
-#define ER_GRP_RPL_MEMBER_CFG_INCOMPATIBLE_WITH_GRP_CFG 11529
-#define ER_GRP_RPL_MEMBER_STOP_RPL_CHANNELS_ERROR 11530
-#define ER_GRP_RPL_PURGE_APPLIER_LOGS 11531
-#define ER_GRP_RPL_RESET_APPLIER_MODULE_LOGS_ERROR 11532
-#define ER_GRP_RPL_APPLIER_THD_SETUP_ERROR 11533
-#define ER_GRP_RPL_APPLIER_THD_START_ERROR 11534
-#define ER_GRP_RPL_APPLIER_THD_STOP_ERROR 11535
-#define ER_GRP_RPL_FETCH_TRANS_DATA_FAILED 11536
-#define ER_GRP_RPL_SLAVE_IO_THD_PRIMARY_UNKNOWN 11537
-#define ER_GRP_RPL_SALVE_IO_THD_ON_SECONDARY_MEMBER 11538
-#define ER_GRP_RPL_SLAVE_SQL_THD_PRIMARY_UNKNOWN 11539
-#define ER_GRP_RPL_SLAVE_SQL_THD_ON_SECONDARY_MEMBER 11540
-#define ER_GRP_RPL_NEEDS_INNODB_TABLE 11541
-#define ER_GRP_RPL_PRIMARY_KEY_NOT_DEFINED 11542
-#define ER_GRP_RPL_FK_WITH_CASCADE_UNSUPPORTED 11543
-#define ER_GRP_RPL_AUTO_INC_RESET 11544
-#define ER_GRP_RPL_AUTO_INC_OFFSET_RESET 11545
-#define ER_GRP_RPL_AUTO_INC_SET 11546
-#define ER_GRP_RPL_AUTO_INC_OFFSET_SET 11547
-#define ER_GRP_RPL_FETCH_TRANS_CONTEXT_FAILED 11548
-#define ER_GRP_RPL_FETCH_FORMAT_DESC_LOG_EVENT_FAILED 11549
-#define ER_GRP_RPL_FETCH_TRANS_CONTEXT_LOG_EVENT_FAILED 11550
-#define ER_GRP_RPL_FETCH_SNAPSHOT_VERSION_FAILED 11551
-#define ER_GRP_RPL_FETCH_GTID_LOG_EVENT_FAILED 11552
-#define ER_GRP_RPL_UPDATE_SERV_CERTIFICATE_FAILED 11553
-#define ER_GRP_RPL_ADD_GTID_INFO_WITH_LOCAL_GTID_FAILED 11554
-#define ER_GRP_RPL_ADD_GTID_INFO_WITHOUT_LOCAL_GTID_FAILED 11555
-#define ER_GRP_RPL_NOTIFY_CERTIFICATION_OUTCOME_FAILED 11556
-#define ER_GRP_RPL_ADD_GTID_INFO_WITH_REMOTE_GTID_FAILED 11557
-#define ER_GRP_RPL_ADD_GTID_INFO_WITHOUT_REMOTE_GTID_FAILED 11558
-#define ER_GRP_RPL_FETCH_VIEW_CHANGE_LOG_EVENT_FAILED 11559
-#define ER_GRP_RPL_CONTACT_WITH_SRV_FAILED 11560
-#define ER_GRP_RPL_SRV_WAIT_TIME_OUT 11561
-#define ER_GRP_RPL_FETCH_LOG_EVENT_FAILED 11562
-#define ER_GRP_RPL_START_GRP_RPL_FAILED 11563
-#define ER_GRP_RPL_CONN_INTERNAL_PLUGIN_FAIL 11564
-#define ER_GRP_RPL_SUPER_READ_ON 11565
-#define ER_GRP_RPL_SUPER_READ_OFF 11566
-#define ER_GRP_RPL_KILLED_SESSION_ID 11567
-#define ER_GRP_RPL_KILLED_FAILED_ID 11568
-#define ER_GRP_RPL_INTERNAL_QUERY 11569
-#define ER_GRP_RPL_COPY_FROM_EMPTY_STRING 11570
-#define ER_GRP_RPL_QUERY_FAIL 11571
-#define ER_GRP_RPL_CREATE_SESSION_UNABLE 11572
-#define ER_GRP_RPL_MEMBER_NOT_FOUND 11573
-#define ER_GRP_RPL_MAXIMUM_CONNECTION_RETRIES_REACHED 11574
-#define ER_GRP_RPL_ALL_DONORS_LEFT_ABORT_RECOVERY 11575
-#define ER_GRP_RPL_ESTABLISH_RECOVERY_WITH_DONOR 11576
-#define ER_GRP_RPL_ESTABLISH_RECOVERY_WITH_ANOTHER_DONOR 11577
-#define ER_GRP_RPL_NO_VALID_DONOR 11578
-#define ER_GRP_RPL_CONFIG_RECOVERY 11579
-#define ER_GRP_RPL_ESTABLISHING_CONN_GRP_REC_DONOR 11580
-#define ER_GRP_RPL_CREATE_GRP_RPL_REC_CHANNEL 11581
-#define ER_GRP_RPL_DONOR_SERVER_CONN 11582
-#define ER_GRP_RPL_CHECK_STATUS_TABLE 11583
-#define ER_GRP_RPL_STARTING_GRP_REC 11584
-#define ER_GRP_RPL_DONOR_CONN_TERMINATION 11585
-#define ER_GRP_RPL_STOPPING_GRP_REC 11586
-#define ER_GRP_RPL_PURGE_REC 11587
-#define ER_GRP_RPL_UNABLE_TO_KILL_CONN_REC_DONOR_APPLIER 11588
-#define ER_GRP_RPL_UNABLE_TO_KILL_CONN_REC_DONOR_FAILOVER 11589
-#define ER_GRP_RPL_FAILED_TO_NOTIFY_GRP_MEMBERSHIP_EVENT 11590
-#define ER_GRP_RPL_FAILED_TO_BROADCAST_GRP_MEMBERSHIP_NOTIFICATION 11591
-#define ER_GRP_RPL_FAILED_TO_BROADCAST_MEMBER_STATUS_NOTIFICATION 11592
-#define ER_GRP_RPL_OOM_FAILED_TO_GENERATE_IDENTIFICATION_HASH 11593
-#define ER_GRP_RPL_WRITE_IDENT_HASH_BASE64_ENCODING_FAILED 11594
-#define ER_GRP_RPL_INVALID_BINLOG_FORMAT 11595
-//#define OBSOLETE_ER_GRP_RPL_BINLOG_CHECKSUM_SET 11596
-#define ER_GRP_RPL_TRANS_WRITE_SET_EXTRACTION_NOT_SET 11597
-#define ER_GRP_RPL_UNSUPPORTED_TRANS_ISOLATION 11598
-#define ER_GRP_RPL_CANNOT_EXECUTE_TRANS_WHILE_STOPPING 11599
-#define ER_GRP_RPL_CANNOT_EXECUTE_TRANS_WHILE_RECOVERING 11600
-#define ER_GRP_RPL_CANNOT_EXECUTE_TRANS_IN_ERROR_STATE 11601
-#define ER_GRP_RPL_CANNOT_EXECUTE_TRANS_IN_OFFLINE_MODE 11602
-#define ER_GRP_RPL_MULTIPLE_CACHE_TYPE_NOT_SUPPORTED_FOR_SESSION 11603
-#define ER_GRP_RPL_FAILED_TO_REINIT_BINLOG_CACHE_FOR_READ 11604
-#define ER_GRP_RPL_FAILED_TO_CREATE_TRANS_CONTEXT 11605
-#define ER_GRP_RPL_FAILED_TO_EXTRACT_TRANS_WRITE_SET 11606
-#define ER_GRP_RPL_FAILED_TO_GATHER_TRANS_WRITE_SET 11607
-#define ER_GRP_RPL_TRANS_SIZE_EXCEEDS_LIMIT 11608
-//#define OBSOLETE_ER_GRP_RPL_REINIT_OF_INTERNAL_CACHE_FOR_READ_FAILED 11609
-//#define OBSOLETE_ER_GRP_RPL_APPENDING_DATA_TO_INTERNAL_CACHE_FAILED 11610
-#define ER_GRP_RPL_WRITE_TO_TRANSACTION_MESSAGE_FAILED 11611
-#define ER_GRP_RPL_FAILED_TO_REGISTER_TRANS_OUTCOME_NOTIFICTION 11612
-#define ER_GRP_RPL_MSG_TOO_LONG_BROADCASTING_TRANS_FAILED 11613
-#define ER_GRP_RPL_BROADCASTING_TRANS_TO_GRP_FAILED 11614
-#define ER_GRP_RPL_ERROR_WHILE_WAITING_FOR_CONFLICT_DETECTION 11615
-//#define OBSOLETE_ER_GRP_RPL_REINIT_OF_INTERNAL_CACHE_FOR_WRITE_FAILED 11616
-//#define OBSOLETE_ER_GRP_RPL_FAILED_TO_CREATE_COMMIT_CACHE 11617
-//#define OBSOLETE_ER_GRP_RPL_REINIT_OF_COMMIT_CACHE_FOR_WRITE_FAILED 11618
-//#define OBSOLETE_ER_GRP_RPL_PREV_REC_SESSION_RUNNING 11619
-#define ER_GRP_RPL_FATAL_REC_PROCESS 11620
-//#define OBSOLETE_ER_GRP_RPL_WHILE_STOPPING_REP_CHANNEL 11621
-#define ER_GRP_RPL_UNABLE_TO_EVALUATE_APPLIER_STATUS 11622
-#define ER_GRP_RPL_ONLY_ONE_SERVER_ALIVE 11623
-#define ER_GRP_RPL_CERTIFICATION_REC_PROCESS 11624
-#define ER_GRP_RPL_UNABLE_TO_ENSURE_EXECUTION_REC 11625
-#define ER_GRP_RPL_WHILE_SENDING_MSG_REC 11626
-#define ER_GRP_RPL_READ_UNABLE_FOR_SUPER_READ_ONLY 11627
-#define ER_GRP_RPL_READ_UNABLE_FOR_READ_ONLY_SUPER_READ_ONLY 11628
-#define ER_GRP_RPL_UNABLE_TO_RESET_SERVER_READ_MODE 11629
-#define ER_GRP_RPL_UNABLE_TO_CERTIFY_PLUGIN_TRANS 11630
-#define ER_GRP_RPL_UNBLOCK_CERTIFIED_TRANS 11631
-//#define OBSOLETE_ER_GRP_RPL_SERVER_WORKING_AS_SECONDARY 11632
-#define ER_GRP_RPL_FAILED_TO_START_WITH_INVALID_SERVER_ID 11633
-#define ER_GRP_RPL_FORCE_MEMBERS_MUST_BE_EMPTY 11634
-#define ER_GRP_RPL_PLUGIN_STRUCT_INIT_NOT_POSSIBLE_ON_SERVER_START 11635
-#define ER_GRP_RPL_FAILED_TO_ENABLE_SUPER_READ_ONLY_MODE 11636
-#define ER_GRP_RPL_FAILED_TO_INIT_COMMUNICATION_ENGINE 11637
-#define ER_GRP_RPL_FAILED_TO_START_ON_SECONDARY_WITH_ASYNC_CHANNELS 11638
-#define ER_GRP_RPL_FAILED_TO_START_COMMUNICATION_ENGINE 11639
-#define ER_GRP_RPL_TIMEOUT_ON_VIEW_AFTER_JOINING_GRP 11640
-#define ER_GRP_RPL_FAILED_TO_CALL_GRP_COMMUNICATION_INTERFACE 11641
-#define ER_GRP_RPL_MEMBER_SERVER_UUID_IS_INCOMPATIBLE_WITH_GRP 11642
-#define ER_GRP_RPL_MEMBER_CONF_INFO 11643
-#define ER_GRP_RPL_FAILED_TO_CONFIRM_IF_SERVER_LEFT_GRP 11644
-#define ER_GRP_RPL_SERVER_IS_ALREADY_LEAVING 11645
-#define ER_GRP_RPL_SERVER_ALREADY_LEFT 11646
-#define ER_GRP_RPL_WAITING_FOR_VIEW_UPDATE 11647
-#define ER_GRP_RPL_TIMEOUT_RECEIVING_VIEW_CHANGE_ON_SHUTDOWN 11648
-#define ER_GRP_RPL_REQUESTING_NON_MEMBER_SERVER_TO_LEAVE 11649
-#define ER_GRP_RPL_IS_STOPPING 11650
-#define ER_GRP_RPL_IS_STOPPED 11651
-#define ER_GRP_RPL_FAILED_TO_ENABLE_READ_ONLY_MODE_ON_SHUTDOWN 11652
-#define ER_GRP_RPL_RECOVERY_MODULE_TERMINATION_TIMED_OUT_ON_SHUTDOWN 11653
-#define ER_GRP_RPL_APPLIER_TERMINATION_TIMED_OUT_ON_SHUTDOWN 11654
-#define ER_GRP_RPL_FAILED_TO_SHUTDOWN_REGISTRY_MODULE 11655
-#define ER_GRP_RPL_FAILED_TO_INIT_HANDLER 11656
-#define ER_GRP_RPL_FAILED_TO_REGISTER_SERVER_STATE_OBSERVER 11657
-#define ER_GRP_RPL_FAILED_TO_REGISTER_TRANS_STATE_OBSERVER 11658
-#define ER_GRP_RPL_FAILED_TO_REGISTER_BINLOG_STATE_OBSERVER 11659
-#define ER_GRP_RPL_FAILED_TO_START_ON_BOOT 11660
-#define ER_GRP_RPL_FAILED_TO_STOP_ON_PLUGIN_UNINSTALL 11661
-#define ER_GRP_RPL_FAILED_TO_UNREGISTER_SERVER_STATE_OBSERVER 11662
-#define ER_GRP_RPL_FAILED_TO_UNREGISTER_TRANS_STATE_OBSERVER 11663
-#define ER_GRP_RPL_FAILED_TO_UNREGISTER_BINLOG_STATE_OBSERVER 11664
-#define ER_GRP_RPL_ALL_OBSERVERS_UNREGISTERED 11665
-#define ER_GRP_RPL_FAILED_TO_PARSE_THE_GRP_NAME 11666
-#define ER_GRP_RPL_FAILED_TO_GENERATE_SIDNO_FOR_GRP 11667
-#define ER_GRP_RPL_APPLIER_NOT_STARTED_DUE_TO_RUNNING_PREV_SHUTDOWN 11668
-#define ER_GRP_RPL_FAILED_TO_INIT_APPLIER_MODULE 11669
-#define ER_GRP_RPL_APPLIER_INITIALIZED 11670
-#define ER_GRP_RPL_COMMUNICATION_SSL_CONF_INFO 11671
-#define ER_GRP_RPL_ABORTS_AS_SSL_NOT_SUPPORTED_BY_MYSQLD 11672
-#define ER_GRP_RPL_SSL_DISABLED 11673
-#define ER_GRP_RPL_UNABLE_TO_INIT_COMMUNICATION_ENGINE 11674
-#define ER_GRP_RPL_BINLOG_DISABLED 11675
-#define ER_GRP_RPL_GTID_MODE_OFF 11676
-#define ER_GRP_RPL_LOG_REPLICA_UPDATES_NOT_SET 11677
-#define ER_GRP_RPL_INVALID_TRANS_WRITE_SET_EXTRACTION_VALUE 11678
-#define ER_GRP_RPL_RELAY_LOG_INFO_REPO_MUST_BE_TABLE 11679
-#define ER_GRP_RPL_MASTER_INFO_REPO_MUST_BE_TABLE 11680
-#define ER_GRP_RPL_INCORRECT_TYPE_SET_FOR_PARALLEL_APPLIER 11681
-#define ER_GRP_RPL_REPLICA_PRESERVE_COMMIT_ORDER_NOT_SET 11682
-#define ER_GRP_RPL_SINGLE_PRIM_MODE_NOT_ALLOWED_WITH_UPDATE_EVERYWHERE 11683
-#define ER_GRP_RPL_MODULE_TERMINATE_ERROR 11684
-#define ER_GRP_RPL_GRP_NAME_OPTION_MANDATORY 11685
-#define ER_GRP_RPL_GRP_NAME_IS_TOO_LONG 11686
-#define ER_GRP_RPL_GRP_NAME_IS_NOT_VALID_UUID 11687
-#define ER_GRP_RPL_FLOW_CTRL_MIN_QUOTA_GREATER_THAN_MAX_QUOTA 11688
-#define ER_GRP_RPL_FLOW_CTRL_MIN_RECOVERY_QUOTA_GREATER_THAN_MAX_QUOTA 11689
-#define ER_GRP_RPL_FLOW_CTRL_MAX_QUOTA_SMALLER_THAN_MIN_QUOTAS 11690
-#define ER_GRP_RPL_INVALID_SSL_RECOVERY_STRING 11691
-//#define OBSOLETE_ER_GRP_RPL_SUPPORTS_ONLY_ONE_FORCE_MEMBERS_SET 11692
-//#define OBSOLETE_ER_GRP_RPL_FORCE_MEMBERS_SET_UPDATE_NOT_ALLOWED 11693
-#define ER_GRP_RPL_GRP_COMMUNICATION_INIT_WITH_CONF 11694
-#define ER_GRP_RPL_UNKNOWN_GRP_RPL_APPLIER_PIPELINE_REQUESTED 11695
-#define ER_GRP_RPL_FAILED_TO_BOOTSTRAP_EVENT_HANDLING_INFRASTRUCTURE 11696
-#define ER_GRP_RPL_APPLIER_HANDLER_NOT_INITIALIZED 11697
-#define ER_GRP_RPL_APPLIER_HANDLER_IS_IN_USE 11698
-#define ER_GRP_RPL_APPLIER_HANDLER_ROLE_IS_IN_USE 11699
-#define ER_GRP_RPL_FAILED_TO_INIT_APPLIER_HANDLER 11700
-#define ER_GRP_RPL_SQL_SERVICE_FAILED_TO_INIT_SESSION_THREAD 11701
-#define ER_GRP_RPL_SQL_SERVICE_COMM_SESSION_NOT_INITIALIZED 11702
-#define ER_GRP_RPL_SQL_SERVICE_SERVER_SESSION_KILLED 11703
-#define ER_GRP_RPL_SQL_SERVICE_FAILED_TO_RUN_SQL_QUERY 11704
-#define ER_GRP_RPL_SQL_SERVICE_SERVER_INTERNAL_FAILURE 11705
-#define ER_GRP_RPL_SQL_SERVICE_RETRIES_EXCEEDED_ON_SESSION_STATE 11706
-#define ER_GRP_RPL_SQL_SERVICE_FAILED_TO_FETCH_SECURITY_CTX 11707
-#define ER_GRP_RPL_SQL_SERVICE_SERVER_ACCESS_DENIED_FOR_USER 11708
-#define ER_GRP_RPL_SQL_SERVICE_MAX_CONN_ERROR_FROM_SERVER 11709
-#define ER_GRP_RPL_SQL_SERVICE_SERVER_ERROR_ON_CONN 11710
-#define ER_GRP_RPL_UNREACHABLE_MAJORITY_TIMEOUT_FOR_MEMBER 11711
-#define ER_GRP_RPL_SERVER_SET_TO_READ_ONLY_DUE_TO_ERRORS 11712
-#define ER_GRP_RPL_GMS_LISTENER_FAILED_TO_LOG_NOTIFICATION 11713
-#define ER_GRP_RPL_GRP_COMMUNICATION_ENG_INIT_FAILED 11714
-#define ER_GRP_RPL_SET_GRP_COMMUNICATION_ENG_LOGGER_FAILED 11715
-#define ER_GRP_RPL_DEBUG_OPTIONS 11716
-#define ER_GRP_RPL_INVALID_DEBUG_OPTIONS 11717
-#define ER_GRP_RPL_EXIT_GRP_GCS_ERROR 11718
-#define ER_GRP_RPL_GRP_MEMBER_OFFLINE 11719
-#define ER_GRP_RPL_GCS_INTERFACE_ERROR 11720
-#define ER_GRP_RPL_FORCE_MEMBER_VALUE_SET_ERROR 11721
-#define ER_GRP_RPL_FORCE_MEMBER_VALUE_SET 11722
-#define ER_GRP_RPL_FORCE_MEMBER_VALUE_TIME_OUT 11723
-#define ER_GRP_RPL_BROADCAST_COMMIT_MSSG_TOO_BIG 11724
-#define ER_GRP_RPL_SEND_STATS_ERROR 11725
-#define ER_GRP_RPL_MEMBER_STATS_INFO 11726
-#define ER_GRP_RPL_FLOW_CONTROL_STATS 11727
-#define ER_GRP_RPL_UNABLE_TO_CONVERT_PACKET_TO_EVENT 11728
-#define ER_GRP_RPL_PIPELINE_CREATE_FAILED 11729
-#define ER_GRP_RPL_PIPELINE_REINIT_FAILED_WRITE 11730
-#define ER_GRP_RPL_UNABLE_TO_CONVERT_EVENT_TO_PACKET 11731
-#define ER_GRP_RPL_PIPELINE_FLUSH_FAIL 11732
-#define ER_GRP_RPL_PIPELINE_REINIT_FAILED_READ 11733
-//#define OBSOLETE_ER_GRP_RPL_STOP_REP_CHANNEL 11734
-#define ER_GRP_RPL_GCS_GR_ERROR_MSG 11735
-#define ER_GRP_RPL_SLAVE_IO_THREAD_UNBLOCKED 11736
-#define ER_GRP_RPL_SLAVE_IO_THREAD_ERROR_OUT 11737
-#define ER_GRP_RPL_SLAVE_APPLIER_THREAD_UNBLOCKED 11738
-#define ER_GRP_RPL_SLAVE_APPLIER_THREAD_ERROR_OUT 11739
-#define ER_LDAP_AUTH_FAILED_TO_CREATE_OR_GET_CONNECTION 11740
-#define ER_LDAP_AUTH_DEINIT_FAILED 11741
-#define ER_LDAP_AUTH_SKIPPING_USER_GROUP_SEARCH 11742
-#define ER_LDAP_AUTH_POOL_DISABLE_MAX_SIZE_ZERO 11743
-#define ER_LDAP_AUTH_FAILED_TO_CREATE_LDAP_OBJECT_CREATOR 11744
-#define ER_LDAP_AUTH_FAILED_TO_CREATE_LDAP_OBJECT 11745
-#define ER_LDAP_AUTH_TLS_CONF 11746
-#define ER_LDAP_AUTH_TLS_CONNECTION 11747
-#define ER_LDAP_AUTH_CONN_POOL_NOT_CREATED 11748
-#define ER_LDAP_AUTH_CONN_POOL_INITIALIZING 11749
-#define ER_LDAP_AUTH_CONN_POOL_DEINITIALIZING 11750
-#define ER_LDAP_AUTH_ZERO_MAX_POOL_SIZE_UNCHANGED 11751
-#define ER_LDAP_AUTH_POOL_REINITIALIZING 11752
-#define ER_LDAP_AUTH_FAILED_TO_WRITE_PACKET 11753
-#define ER_LDAP_AUTH_SETTING_USERNAME 11754
-#define ER_LDAP_AUTH_USER_AUTH_DATA 11755
-#define ER_LDAP_AUTH_INFO_FOR_USER 11756
-#define ER_LDAP_AUTH_USER_GROUP_SEARCH_INFO 11757
-#define ER_LDAP_AUTH_GRP_SEARCH_SPECIAL_HDL 11758
-#define ER_LDAP_AUTH_GRP_IS_FULL_DN 11759
-#define ER_LDAP_AUTH_USER_NOT_FOUND_IN_ANY_GRP 11760
-#define ER_LDAP_AUTH_USER_FOUND_IN_MANY_GRPS 11761
-#define ER_LDAP_AUTH_USER_HAS_MULTIPLE_GRP_NAMES 11762
-#define ER_LDAP_AUTH_SEARCHED_USER_GRP_NAME 11763
-#define ER_LDAP_AUTH_OBJECT_CREATE_TIMESTAMP 11764
-#define ER_LDAP_AUTH_CERTIFICATE_NAME 11765
-#define ER_LDAP_AUTH_FAILED_TO_POOL_DEINIT 11766
-#define ER_LDAP_AUTH_FAILED_TO_INITIALIZE_POOL_IN_RECONSTRUCTING 11767
-#define ER_LDAP_AUTH_FAILED_TO_INITIALIZE_POOL_IN_INIT_STATE 11768
-#define ER_LDAP_AUTH_FAILED_TO_INITIALIZE_POOL_IN_DEINIT_STATE 11769
-#define ER_LDAP_AUTH_FAILED_TO_DEINITIALIZE_POOL_IN_RECONSTRUCT_STATE 11770
-#define ER_LDAP_AUTH_FAILED_TO_DEINITIALIZE_NOT_READY_POOL 11771
-#define ER_LDAP_AUTH_FAILED_TO_GET_CONNECTION_AS_PLUGIN_NOT_READY 11772
-#define ER_LDAP_AUTH_CONNECTION_POOL_INIT_FAILED 11773
-#define ER_LDAP_AUTH_MAX_ALLOWED_CONNECTION_LIMIT_HIT 11774
-#define ER_LDAP_AUTH_MAX_POOL_SIZE_SET_FAILED 11775
-#define ER_LDAP_AUTH_PLUGIN_FAILED_TO_READ_PACKET 11776
-#define ER_LDAP_AUTH_CREATING_LDAP_CONNECTION 11777
-#define ER_LDAP_AUTH_GETTING_CONNECTION_FROM_POOL 11778
-#define ER_LDAP_AUTH_RETURNING_CONNECTION_TO_POOL 11779
-#define ER_LDAP_AUTH_SEARCH_USER_GROUP_ATTR_NOT_FOUND 11780
-#define ER_LDAP_AUTH_LDAP_INFO_NULL 11781
-#define ER_LDAP_AUTH_FREEING_CONNECTION 11782
-#define ER_LDAP_AUTH_CONNECTION_PUSHED_TO_POOL 11783
-#define ER_LDAP_AUTH_CONNECTION_CREATOR_ENTER 11784
-#define ER_LDAP_AUTH_STARTING_TLS 11785
-#define ER_LDAP_AUTH_CONNECTION_GET_LDAP_INFO_NULL 11786
-#define ER_LDAP_AUTH_DELETING_CONNECTION_KEY 11787
-#define ER_LDAP_AUTH_POOLED_CONNECTION_KEY 11788
-#define ER_LDAP_AUTH_CREATE_CONNECTION_KEY 11789
-#define ER_LDAP_AUTH_COMMUNICATION_HOST_INFO 11790
-#define ER_LDAP_AUTH_METHOD_TO_CLIENT 11791
-#define ER_LDAP_AUTH_SASL_REQUEST_FROM_CLIENT 11792
-#define ER_LDAP_AUTH_SASL_PROCESS_SASL 11793
-#define ER_LDAP_AUTH_SASL_BIND_SUCCESS_INFO 11794
-#define ER_LDAP_AUTH_STARTED_FOR_USER 11795
-#define ER_LDAP_AUTH_DISTINGUISHED_NAME 11796
-#define ER_LDAP_AUTH_INIT_FAILED 11797
-#define ER_LDAP_AUTH_OR_GROUP_RETRIEVAL_FAILED 11798
-#define ER_LDAP_AUTH_USER_GROUP_SEARCH_FAILED 11799
-#define ER_LDAP_AUTH_USER_BIND_FAILED 11800
-#define ER_LDAP_AUTH_POOL_GET_FAILED_TO_CREATE_CONNECTION 11801
-#define ER_LDAP_AUTH_FAILED_TO_CREATE_LDAP_CONNECTION 11802
-#define ER_LDAP_AUTH_FAILED_TO_ESTABLISH_TLS_CONNECTION 11803
-#define ER_LDAP_AUTH_FAILED_TO_SEARCH_DN 11804
-#define ER_LDAP_AUTH_CONNECTION_POOL_REINIT_ENTER 11805
-#define ER_SYSTEMD_NOTIFY_PATH_TOO_LONG 11806
-#define ER_SYSTEMD_NOTIFY_CONNECT_FAILED 11807
-#define ER_SYSTEMD_NOTIFY_WRITE_FAILED 11808
-#define ER_FOUND_MISSING_GTIDS 11809
-#define ER_PID_FILE_PRIV_DIRECTORY_INSECURE 11810
-#define ER_CANT_CHECK_PID_PATH 11811
-#define ER_VALIDATE_PWD_STATUS_VAR_REGISTRATION_FAILED 11812
-#define ER_VALIDATE_PWD_STATUS_VAR_UNREGISTRATION_FAILED 11813
-#define ER_VALIDATE_PWD_DICT_FILE_OPEN_FAILED 11814
-#define ER_VALIDATE_PWD_COULD_BE_NULL 11815
-#define ER_VALIDATE_PWD_STRING_CONV_TO_LOWERCASE_FAILED 11816
-#define ER_VALIDATE_PWD_STRING_CONV_TO_BUFFER_FAILED 11817
-#define ER_VALIDATE_PWD_STRING_HANDLER_MEM_ALLOCATION_FAILED 11818
-#define ER_VALIDATE_PWD_STRONG_POLICY_DICT_FILE_UNSPECIFIED 11819
-#define ER_VALIDATE_PWD_CONVERT_TO_BUFFER_FAILED 11820
-#define ER_VALIDATE_PWD_VARIABLE_REGISTRATION_FAILED 11821
-#define ER_VALIDATE_PWD_VARIABLE_UNREGISTRATION_FAILED 11822
-#define ER_KEYRING_MIGRATION_EXTRA_OPTIONS 11823
-//#define OBSOLETE_ER_INVALID_DEFAULT_UTF8MB4_COLLATION 11824
-#define ER_IB_MSG_0 11825
-#define ER_IB_MSG_1 11826
-#define ER_IB_MSG_2 11827
-#define ER_IB_MSG_3 11828
-#define ER_IB_MSG_4 11829
-#define ER_IB_MSG_5 11830
-#define ER_IB_MSG_6 11831
-#define ER_IB_MSG_7 11832
-#define ER_IB_MSG_8 11833
-#define ER_IB_MSG_9 11834
-#define ER_IB_MSG_10 11835
-#define ER_IB_MSG_11 11836
-#define ER_IB_MSG_12 11837
-#define ER_IB_MSG_13 11838
-#define ER_IB_MSG_14 11839
-#define ER_IB_MSG_15 11840
-#define ER_IB_MSG_16 11841
-#define ER_IB_MSG_17 11842
-#define ER_IB_MSG_18 11843
-#define ER_IB_MSG_19 11844
-#define ER_IB_MSG_20 11845
-#define ER_IB_MSG_21 11846
-#define ER_IB_MSG_22 11847
-#define ER_IB_MSG_23 11848
-#define ER_IB_MSG_24 11849
-#define ER_IB_MSG_25 11850
-#define ER_IB_MSG_26 11851
-#define ER_IB_MSG_27 11852
-#define ER_IB_MSG_28 11853
-#define ER_IB_MSG_29 11854
-#define ER_IB_MSG_30 11855
-#define ER_IB_MSG_31 11856
-#define ER_IB_MSG_32 11857
-#define ER_IB_MSG_33 11858
-#define ER_IB_MSG_34 11859
-#define ER_IB_MSG_35 11860
-#define ER_IB_MSG_36 11861
-#define ER_IB_MSG_37 11862
-#define ER_IB_MSG_38 11863
-#define ER_IB_MSG_39 11864
-#define ER_IB_MSG_40 11865
-#define ER_IB_MSG_41 11866
-#define ER_IB_MSG_42 11867
-#define ER_IB_MSG_43 11868
-#define ER_IB_MSG_44 11869
-#define ER_IB_MSG_45 11870
-#define ER_IB_MSG_46 11871
-#define ER_IB_MSG_47 11872
-#define ER_IB_MSG_48 11873
-#define ER_IB_MSG_49 11874
-#define ER_IB_MSG_50 11875
-#define ER_IB_MSG_51 11876
-#define ER_IB_MSG_52 11877
-#define ER_IB_MSG_53 11878
-#define ER_IB_MSG_54 11879
-#define ER_IB_MSG_55 11880
-#define ER_IB_MSG_56 11881
-#define ER_IB_MSG_57 11882
-#define ER_IB_MSG_58 11883
-#define ER_IB_MSG_59 11884
-#define ER_IB_MSG_60 11885
-#define ER_IB_MSG_61 11886
-#define ER_IB_MSG_62 11887
-#define ER_IB_MSG_63 11888
-#define ER_IB_MSG_64 11889
-#define ER_IB_MSG_65 11890
-#define ER_IB_MSG_66 11891
-#define ER_IB_MSG_67 11892
-#define ER_IB_MSG_68 11893
-#define ER_IB_MSG_69 11894
-#define ER_IB_MSG_70 11895
-#define ER_IB_MSG_71 11896
-#define ER_IB_MSG_72 11897
-#define ER_IB_MSG_73 11898
-#define ER_IB_MSG_74 11899
-#define ER_IB_MSG_75 11900
-#define ER_IB_MSG_76 11901
-#define ER_IB_MSG_77 11902
-#define ER_IB_MSG_78 11903
-#define ER_IB_MSG_79 11904
-#define ER_IB_MSG_80 11905
-#define ER_IB_MSG_81 11906
-#define ER_IB_MSG_82 11907
-#define ER_IB_MSG_83 11908
-#define ER_IB_MSG_84 11909
-#define ER_IB_MSG_85 11910
-#define ER_IB_MSG_86 11911
-//#define OBSOLETE_ER_IB_MSG_87 11912
-//#define OBSOLETE_ER_IB_MSG_88 11913
-//#define OBSOLETE_ER_IB_MSG_89 11914
-//#define OBSOLETE_ER_IB_MSG_90 11915
-//#define OBSOLETE_ER_IB_MSG_91 11916
-//#define OBSOLETE_ER_IB_MSG_92 11917
-//#define OBSOLETE_ER_IB_MSG_93 11918
-//#define OBSOLETE_ER_IB_MSG_94 11919
-#define ER_IB_MSG_95 11920
-#define ER_IB_MSG_96 11921
-#define ER_IB_MSG_97 11922
-#define ER_IB_MSG_98 11923
-#define ER_IB_MSG_99 11924
-#define ER_IB_MSG_100 11925
-#define ER_IB_MSG_101 11926
-#define ER_IB_MSG_102 11927
-#define ER_IB_MSG_103 11928
-#define ER_IB_MSG_104 11929
-#define ER_IB_MSG_105 11930
-#define ER_IB_MSG_106 11931
-#define ER_IB_MSG_107 11932
-#define ER_IB_MSG_108 11933
-#define ER_IB_MSG_109 11934
-#define ER_IB_MSG_110 11935
-#define ER_IB_MSG_111 11936
-#define ER_IB_MSG_112 11937
-//#define OBSOLETE_ER_IB_MSG_113 11938
-//#define OBSOLETE_ER_IB_MSG_114 11939
-//#define OBSOLETE_ER_IB_MSG_115 11940
-//#define OBSOLETE_ER_IB_MSG_116 11941
-//#define OBSOLETE_ER_IB_MSG_117 11942
-//#define OBSOLETE_ER_IB_MSG_118 11943
-#define ER_IB_MSG_119 11944
-#define ER_IB_MSG_120 11945
-#define ER_IB_MSG_121 11946
-#define ER_IB_MSG_122 11947
-#define ER_IB_MSG_123 11948
-#define ER_IB_MSG_124 11949
-#define ER_IB_MSG_125 11950
-#define ER_IB_MSG_126 11951
-#define ER_IB_MSG_127 11952
-#define ER_IB_MSG_128 11953
-#define ER_IB_MSG_129 11954
-#define ER_IB_MSG_130 11955
-#define ER_IB_MSG_131 11956
-#define ER_IB_MSG_132 11957
-#define ER_IB_MSG_133 11958
-#define ER_IB_MSG_134 11959
-#define ER_IB_MSG_135 11960
-#define ER_IB_MSG_136 11961
-#define ER_IB_MSG_137 11962
-#define ER_IB_MSG_138 11963
-#define ER_IB_MSG_139 11964
-#define ER_IB_MSG_140 11965
-#define ER_IB_MSG_141 11966
-#define ER_IB_MSG_142 11967
-#define ER_IB_MSG_143 11968
-#define ER_IB_MSG_144 11969
-#define ER_IB_MSG_145 11970
-#define ER_IB_MSG_146 11971
-#define ER_IB_MSG_147 11972
-#define ER_IB_MSG_148 11973
-#define ER_IB_CLONE_INTERNAL 11974
-#define ER_IB_CLONE_TIMEOUT 11975
-#define ER_IB_CLONE_STATUS_FILE 11976
-#define ER_IB_CLONE_SQL 11977
-#define ER_IB_CLONE_VALIDATE 11978
-#define ER_IB_CLONE_PUNCH_HOLE 11979
-#define ER_IB_CLONE_GTID_PERSIST 11980
-#define ER_IB_MSG_156 11981
-#define ER_IB_MSG_157 11982
-#define ER_IB_MSG_158 11983
-#define ER_IB_MSG_159 11984
-#define ER_IB_MSG_160 11985
-#define ER_IB_MSG_161 11986
-#define ER_IB_MSG_162 11987
-#define ER_IB_MSG_163 11988
-#define ER_IB_MSG_164 11989
-#define ER_IB_MSG_165 11990
-#define ER_IB_MSG_166 11991
-#define ER_IB_MSG_167 11992
-#define ER_IB_MSG_168 11993
-#define ER_IB_MSG_169 11994
-#define ER_IB_MSG_170 11995
-#define ER_IB_MSG_171 11996
-#define ER_IB_MSG_172 11997
-#define ER_IB_MSG_173 11998
-#define ER_IB_MSG_174 11999
-#define ER_IB_MSG_175 12000
-#define ER_IB_MSG_176 12001
-#define ER_IB_MSG_177 12002
-#define ER_IB_MSG_178 12003
-#define ER_IB_MSG_179 12004
-#define ER_IB_MSG_180 12005
-#define ER_IB_MSG_181 12006
-#define ER_IB_MSG_182 12007
-#define ER_IB_MSG_183 12008
-#define ER_IB_MSG_184 12009
-#define ER_IB_MSG_185 12010
-#define ER_IB_MSG_186 12011
-#define ER_IB_MSG_187 12012
-#define ER_IB_MSG_188 12013
-#define ER_IB_MSG_189 12014
-#define ER_IB_MSG_190 12015
-#define ER_IB_MSG_191 12016
-#define ER_IB_MSG_192 12017
-#define ER_IB_MSG_193 12018
-#define ER_IB_MSG_194 12019
-#define ER_IB_MSG_195 12020
-#define ER_IB_MSG_196 12021
-#define ER_IB_MSG_197 12022
-#define ER_IB_MSG_198 12023
-#define ER_IB_MSG_199 12024
-#define ER_IB_MSG_200 12025
-#define ER_IB_MSG_201 12026
-#define ER_IB_MSG_202 12027
-#define ER_IB_MSG_203 12028
-#define ER_IB_MSG_204 12029
-#define ER_IB_MSG_205 12030
-#define ER_IB_MSG_206 12031
-#define ER_IB_MSG_207 12032
-#define ER_IB_MSG_208 12033
-#define ER_IB_MSG_209 12034
-#define ER_IB_MSG_210 12035
-#define ER_IB_MSG_211 12036
-#define ER_IB_MSG_212 12037
-#define ER_IB_MSG_213 12038
-#define ER_IB_MSG_214 12039
-#define ER_IB_MSG_215 12040
-#define ER_IB_MSG_216 12041
-#define ER_IB_MSG_217 12042
-#define ER_IB_MSG_218 12043
-#define ER_IB_MSG_219 12044
-#define ER_IB_MSG_220 12045
-#define ER_IB_MSG_221 12046
-#define ER_IB_MSG_222 12047
-#define ER_IB_MSG_223 12048
-#define ER_IB_MSG_224 12049
-#define ER_IB_MSG_225 12050
-#define ER_IB_MSG_226 12051
-#define ER_IB_MSG_227 12052
-#define ER_IB_MSG_228 12053
-#define ER_IB_MSG_229 12054
-#define ER_IB_MSG_230 12055
-#define ER_IB_MSG_231 12056
-#define ER_IB_MSG_232 12057
-#define ER_IB_MSG_233 12058
-#define ER_IB_MSG_234 12059
-#define ER_IB_MSG_235 12060
-#define ER_IB_MSG_236 12061
-#define ER_IB_MSG_237 12062
-#define ER_IB_MSG_238 12063
-#define ER_IB_MSG_239 12064
-#define ER_IB_MSG_240 12065
-#define ER_IB_MSG_241 12066
-#define ER_IB_MSG_242 12067
-#define ER_IB_MSG_243 12068
-#define ER_IB_MSG_244 12069
-#define ER_IB_MSG_245 12070
-#define ER_IB_MSG_246 12071
-#define ER_IB_MSG_247 12072
-#define ER_IB_MSG_248 12073
-#define ER_IB_MSG_249 12074
-#define ER_IB_MSG_250 12075
-#define ER_IB_MSG_251 12076
-#define ER_IB_MSG_252 12077
-#define ER_IB_MSG_253 12078
-#define ER_IB_MSG_254 12079
-#define ER_IB_MSG_255 12080
-#define ER_IB_MSG_256 12081
-#define ER_IB_MSG_257 12082
-#define ER_IB_MSG_258 12083
-#define ER_IB_MSG_259 12084
-#define ER_IB_MSG_260 12085
-#define ER_IB_MSG_261 12086
-#define ER_IB_MSG_262 12087
-#define ER_IB_MSG_263 12088
-#define ER_IB_MSG_264 12089
-#define ER_IB_MSG_265 12090
-#define ER_IB_MSG_266 12091
-#define ER_IB_MSG_267 12092
-#define ER_IB_MSG_268 12093
-#define ER_IB_MSG_269 12094
-#define ER_IB_MSG_270 12095
-#define ER_IB_MSG_271 12096
-#define ER_IB_MSG_272 12097
-#define ER_IB_MSG_273 12098
-//#define OBSOLETE_ER_IB_MSG_274 12099
-//#define OBSOLETE_ER_IB_MSG_275 12100
-//#define OBSOLETE_ER_IB_MSG_276 12101
-//#define OBSOLETE_ER_IB_MSG_277 12102
-#define ER_IB_MSG_278 12103
-//#define OBSOLETE_ER_IB_MSG_279 12104
-#define ER_IB_MSG_280 12105
-#define ER_IB_MSG_281 12106
-#define ER_IB_MSG_282 12107
-#define ER_IB_MSG_283 12108
-#define ER_IB_MSG_284 12109
-#define ER_IB_MSG_285 12110
-#define ER_IB_WARN_ACCESSING_NONEXISTINC_SPACE 12111
-#define ER_IB_MSG_287 12112
-#define ER_IB_MSG_288 12113
-#define ER_IB_MSG_289 12114
-//#define OBSOLETE_ER_IB_MSG_290 12115
-#define ER_IB_MSG_291 12116
-#define ER_IB_MSG_292 12117
-#define ER_IB_MSG_293 12118
-#define ER_IB_MSG_294 12119
-#define ER_IB_MSG_295 12120
-#define ER_IB_MSG_296 12121
-#define ER_IB_MSG_297 12122
-#define ER_IB_MSG_298 12123
-#define ER_IB_MSG_299 12124
-#define ER_IB_MSG_300 12125
-#define ER_IB_MSG_301 12126
-#define ER_IB_MSG_UNEXPECTED_FILE_EXISTS 12127
-#define ER_IB_MSG_303 12128
-#define ER_IB_MSG_304 12129
-#define ER_IB_MSG_305 12130
-#define ER_IB_MSG_306 12131
-#define ER_IB_MSG_307 12132
-#define ER_IB_MSG_308 12133
-#define ER_IB_MSG_309 12134
-#define ER_IB_MSG_310 12135
-#define ER_IB_MSG_311 12136
-#define ER_IB_MSG_312 12137
-#define ER_IB_MSG_313 12138
-#define ER_IB_MSG_314 12139
-#define ER_IB_MSG_315 12140
-#define ER_IB_MSG_316 12141
-#define ER_IB_MSG_317 12142
-#define ER_IB_MSG_318 12143
-#define ER_IB_MSG_319 12144
-#define ER_IB_MSG_320 12145
-#define ER_IB_MSG_321 12146
-#define ER_IB_MSG_322 12147
-#define ER_IB_MSG_323 12148
-#define ER_IB_MSG_324 12149
-#define ER_IB_MSG_325 12150
-#define ER_IB_MSG_326 12151
-//#define OBSOLETE_ER_IB_MSG_327 12152
-#define ER_IB_MSG_328 12153
-#define ER_IB_MSG_329 12154
-#define ER_IB_MSG_330 12155
-#define ER_IB_MSG_331 12156
-#define ER_IB_MSG_332 12157
-#define ER_IB_MSG_333 12158
-#define ER_IB_MSG_334 12159
-#define ER_IB_MSG_335 12160
-#define ER_IB_MSG_336 12161
-#define ER_IB_MSG_337 12162
-#define ER_IB_MSG_338 12163
-#define ER_IB_MSG_339 12164
-#define ER_IB_MSG_340 12165
-#define ER_IB_MSG_341 12166
-#define ER_IB_MSG_342 12167
-#define ER_IB_MSG_343 12168
-#define ER_IB_MSG_344 12169
-#define ER_IB_MSG_345 12170
-#define ER_IB_MSG_346 12171
-#define ER_IB_MSG_347 12172
-#define ER_IB_MSG_348 12173
-#define ER_IB_MSG_349 12174
-#define ER_IB_MSG_350 12175
-//#define OBSOLETE_ER_IB_MSG_351 12176
-#define ER_IB_MSG_UNPROTECTED_LOCATION_ALLOWED 12177
-//#define OBSOLETE_ER_IB_MSG_353 12178
-#define ER_IB_MSG_354 12179
-#define ER_IB_MSG_355 12180
-#define ER_IB_MSG_356 12181
-#define ER_IB_MSG_357 12182
-#define ER_IB_MSG_358 12183
-#define ER_IB_MSG_359 12184
-#define ER_IB_MSG_360 12185
-#define ER_IB_MSG_361 12186
-#define ER_IB_MSG_362 12187
-//#define OBSOLETE_ER_IB_MSG_363 12188
-#define ER_IB_MSG_364 12189
-#define ER_IB_MSG_365 12190
-#define ER_IB_MSG_IGNORE_SCAN_PATH 12191
-#define ER_IB_MSG_367 12192
-#define ER_IB_MSG_368 12193
-#define ER_IB_MSG_369 12194
-#define ER_IB_MSG_370 12195
-#define ER_IB_MSG_371 12196
-#define ER_IB_MSG_372 12197
-#define ER_IB_MSG_373 12198
-#define ER_IB_MSG_374 12199
-#define ER_IB_MSG_375 12200
-#define ER_IB_MSG_376 12201
-#define ER_IB_MSG_377 12202
-#define ER_IB_MSG_378 12203
-#define ER_IB_MSG_379 12204
-#define ER_IB_MSG_380 12205
-#define ER_IB_MSG_381 12206
-#define ER_IB_MSG_382 12207
-#define ER_IB_MSG_383 12208
-#define ER_IB_MSG_384 12209
-#define ER_IB_MSG_385 12210
-#define ER_IB_MSG_386 12211
-#define ER_IB_MSG_387 12212
-#define ER_IB_MSG_GENERAL_TABLESPACE_UNDER_DATADIR 12213
-#define ER_IB_MSG_IMPLICIT_TABLESPACE_IN_DATADIR 12214
-#define ER_IB_MSG_390 12215
-#define ER_IB_MSG_391 12216
-#define ER_IB_MSG_392 12217
-#define ER_IB_MSG_393 12218
-#define ER_IB_MSG_394 12219
-#define ER_IB_MSG_395 12220
-#define ER_IB_MSG_396 12221
-#define ER_IB_MSG_397 12222
-#define ER_IB_MSG_398 12223
-#define ER_IB_MSG_399 12224
-//#define OBSOLETE_ER_IB_MSG_400 12225
-#define ER_IB_MSG_401 12226
-#define ER_IB_MSG_402 12227
-#define ER_IB_MSG_403 12228
-#define ER_IB_MSG_404 12229
-#define ER_IB_MSG_405 12230
-#define ER_IB_MSG_406 12231
-#define ER_IB_MSG_407 12232
-#define ER_IB_MSG_408 12233
-#define ER_IB_MSG_409 12234
-#define ER_IB_MSG_410 12235
-#define ER_IB_MSG_411 12236
-#define ER_IB_MSG_412 12237
-#define ER_IB_MSG_413 12238
-#define ER_IB_MSG_414 12239
-#define ER_IB_MSG_415 12240
-#define ER_IB_MSG_416 12241
-#define ER_IB_MSG_417 12242
-#define ER_IB_MSG_418 12243
-#define ER_IB_MSG_419 12244
-#define ER_IB_MSG_420 12245
-#define ER_IB_MSG_421 12246
-#define ER_IB_MSG_422 12247
-#define ER_IB_MSG_423 12248
-#define ER_IB_MSG_424 12249
-#define ER_IB_MSG_425 12250
-#define ER_IB_MSG_426 12251
-#define ER_IB_MSG_427 12252
-#define ER_IB_MSG_428 12253
-#define ER_IB_MSG_429 12254
-#define ER_IB_MSG_430 12255
-#define ER_IB_MSG_431 12256
-#define ER_IB_MSG_432 12257
-#define ER_IB_MSG_433 12258
-#define ER_IB_MSG_434 12259
-#define ER_IB_MSG_435 12260
-#define ER_IB_MSG_436 12261
-#define ER_IB_MSG_437 12262
-#define ER_IB_MSG_438 12263
-#define ER_IB_MSG_439 12264
-#define ER_IB_MSG_440 12265
-#define ER_IB_MSG_441 12266
-#define ER_IB_MSG_442 12267
-#define ER_IB_MSG_443 12268
-#define ER_IB_MSG_444 12269
-#define ER_IB_MSG_445 12270
-#define ER_IB_MSG_446 12271
-#define ER_IB_MSG_447 12272
-#define ER_IB_MSG_448 12273
-#define ER_IB_MSG_449 12274
-#define ER_IB_MSG_450 12275
-#define ER_IB_MSG_451 12276
-#define ER_IB_MSG_452 12277
-#define ER_IB_MSG_453 12278
-#define ER_IB_MSG_454 12279
-#define ER_IB_MSG_455 12280
-#define ER_IB_MSG_456 12281
-#define ER_IB_MSG_457 12282
-#define ER_IB_MSG_458 12283
-#define ER_IB_MSG_459 12284
-#define ER_IB_MSG_460 12285
-#define ER_IB_MSG_461 12286
-#define ER_IB_MSG_462 12287
-#define ER_IB_MSG_463 12288
-#define ER_IB_MSG_464 12289
-#define ER_IB_MSG_465 12290
-#define ER_IB_MSG_466 12291
-#define ER_IB_MSG_467 12292
-#define ER_IB_MSG_468 12293
-#define ER_IB_MSG_469 12294
-#define ER_IB_MSG_470 12295
-#define ER_IB_MSG_471 12296
-#define ER_IB_MSG_472 12297
-#define ER_IB_MSG_473 12298
-#define ER_IB_MSG_474 12299
-#define ER_IB_MSG_475 12300
-#define ER_IB_MSG_476 12301
-#define ER_IB_MSG_477 12302
-#define ER_IB_MSG_478 12303
-#define ER_IB_MSG_479 12304
-#define ER_IB_MSG_480 12305
-#define ER_IB_MSG_481 12306
-#define ER_IB_MSG_482 12307
-#define ER_IB_MSG_483 12308
-#define ER_IB_MSG_484 12309
-#define ER_IB_MSG_485 12310
-#define ER_IB_MSG_486 12311
-#define ER_IB_MSG_487 12312
-#define ER_IB_MSG_488 12313
-#define ER_IB_MSG_489 12314
-#define ER_IB_MSG_490 12315
-#define ER_IB_MSG_491 12316
-#define ER_IB_MSG_492 12317
-#define ER_IB_MSG_493 12318
-#define ER_IB_MSG_494 12319
-#define ER_IB_MSG_495 12320
-#define ER_IB_MSG_496 12321
-#define ER_IB_MSG_497 12322
-#define ER_IB_MSG_498 12323
-#define ER_IB_MSG_499 12324
-#define ER_IB_MSG_500 12325
-#define ER_IB_MSG_501 12326
-#define ER_IB_MSG_502 12327
-#define ER_IB_MSG_503 12328
-#define ER_IB_MSG_504 12329
-#define ER_IB_MSG_505 12330
-#define ER_IB_MSG_506 12331
-#define ER_IB_MSG_507 12332
-#define ER_IB_MSG_508 12333
-#define ER_IB_MSG_509 12334
-#define ER_IB_MSG_510 12335
-#define ER_IB_MSG_511 12336
-#define ER_IB_MSG_512 12337
-#define ER_IB_MSG_513 12338
-#define ER_IB_MSG_514 12339
-#define ER_IB_MSG_515 12340
-#define ER_IB_MSG_516 12341
-#define ER_IB_MSG_517 12342
-#define ER_IB_MSG_518 12343
-#define ER_IB_MSG_519 12344
-#define ER_IB_MSG_520 12345
-#define ER_IB_MSG_521 12346
-#define ER_IB_MSG_522 12347
-#define ER_IB_MSG_523 12348
-#define ER_IB_MSG_524 12349
-#define ER_IB_MSG_525 12350
-#define ER_IB_MSG_526 12351
-#define ER_IB_MSG_527 12352
-//#define OBSOLETE_ER_IB_MSG_528 12353
-//#define OBSOLETE_ER_IB_MSG_529 12354
-#define ER_IB_MSG_530 12355
-#define ER_IB_MSG_531 12356
-#define ER_IB_MSG_532 12357
-#define ER_IB_MSG_533 12358
-#define ER_IB_MSG_534 12359
-//#define OBSOLETE_ER_IB_MSG_535 12360
-//#define OBSOLETE_ER_IB_MSG_536 12361
-#define ER_IB_MSG_537 12362
-#define ER_IB_MSG_538 12363
-#define ER_IB_MSG_539 12364
-#define ER_IB_MSG_540 12365
-#define ER_IB_MSG_541 12366
-#define ER_IB_MSG_542 12367
-#define ER_IB_MSG_543 12368
-#define ER_IB_MSG_544 12369
-#define ER_IB_MSG_545 12370
-#define ER_IB_MSG_546 12371
-#define ER_IB_MSG_547 12372
-#define ER_IB_MSG_548 12373
-#define ER_IB_MSG_549 12374
-#define ER_IB_MSG_550 12375
-#define ER_IB_MSG_551 12376
-#define ER_IB_MSG_552 12377
-#define ER_IB_MSG_553 12378
-#define ER_IB_MSG_554 12379
-#define ER_IB_MSG_555 12380
-#define ER_IB_MSG_556 12381
-#define ER_IB_MSG_557 12382
-#define ER_IB_MSG_558 12383
-#define ER_IB_MSG_559 12384
-#define ER_IB_MSG_560 12385
-#define ER_IB_MSG_561 12386
-#define ER_IB_MSG_562 12387
-#define ER_IB_MSG_563 12388
-#define ER_IB_MSG_564 12389
-#define ER_IB_MSG_INVALID_LOCATION_FOR_TABLE 12390
-#define ER_IB_MSG_566 12391
-#define ER_IB_MSG_567 12392
-#define ER_IB_MSG_568 12393
-#define ER_IB_MSG_569 12394
-#define ER_IB_MSG_570 12395
-#define ER_IB_MSG_571 12396
-//#define OBSOLETE_ER_IB_MSG_572 12397
-#define ER_IB_MSG_573 12398
-#define ER_IB_MSG_574 12399
-//#define OBSOLETE_ER_IB_MSG_575 12400
-//#define OBSOLETE_ER_IB_MSG_576 12401
-//#define OBSOLETE_ER_IB_MSG_577 12402
-#define ER_IB_MSG_578 12403
-#define ER_IB_MSG_579 12404
-#define ER_IB_MSG_580 12405
-#define ER_IB_MSG_581 12406
-#define ER_IB_MSG_582 12407
-#define ER_IB_MSG_583 12408
-#define ER_IB_MSG_584 12409
-#define ER_IB_MSG_585 12410
-#define ER_IB_MSG_586 12411
-#define ER_IB_MSG_587 12412
-#define ER_IB_MSG_588 12413
-#define ER_IB_MSG_589 12414
-#define ER_IB_MSG_590 12415
-#define ER_IB_MSG_591 12416
-#define ER_IB_MSG_592 12417
-#define ER_IB_MSG_593 12418
-#define ER_IB_MSG_594 12419
-#define ER_IB_MSG_595 12420
-#define ER_IB_MSG_596 12421
-#define ER_IB_MSG_597 12422
-#define ER_IB_MSG_598 12423
-#define ER_IB_MSG_599 12424
-#define ER_IB_MSG_600 12425
-#define ER_IB_MSG_601 12426
-#define ER_IB_MSG_602 12427
-#define ER_IB_MSG_603 12428
-#define ER_IB_MSG_604 12429
-#define ER_IB_MSG_605 12430
-#define ER_IB_MSG_606 12431
-#define ER_IB_MSG_607 12432
-#define ER_IB_MSG_608 12433
-#define ER_IB_MSG_609 12434
-#define ER_IB_MSG_610 12435
-#define ER_IB_MSG_611 12436
-#define ER_IB_MSG_612 12437
-#define ER_IB_MSG_613 12438
-#define ER_IB_MSG_614 12439
-#define ER_IB_MSG_615 12440
-#define ER_IB_MSG_616 12441
-#define ER_IB_MSG_617 12442
-#define ER_IB_MSG_618 12443
-#define ER_IB_MSG_619 12444
-#define ER_IB_MSG_620 12445
-#define ER_IB_MSG_621 12446
-#define ER_IB_MSG_622 12447
-#define ER_IB_MSG_623 12448
-#define ER_IB_MSG_624 12449
-#define ER_IB_MSG_625 12450
-#define ER_IB_MSG_626 12451
-#define ER_IB_MSG_627 12452
-#define ER_IB_MSG_628 12453
-#define ER_IB_MSG_629 12454
-#define ER_IB_MSG_630 12455
-#define ER_IB_MSG_631 12456
-#define ER_IB_MSG_632 12457
-#define ER_IB_MSG_633 12458
-#define ER_IB_MSG_634 12459
-#define ER_IB_MSG_635 12460
-#define ER_IB_MSG_636 12461
-#define ER_IB_MSG_637 12462
-#define ER_IB_MSG_638 12463
-#define ER_IB_MSG_639 12464
-//#define OBSOLETE_ER_IB_MSG_640 12465
-//#define OBSOLETE_ER_IB_MSG_641 12466
-#define ER_IB_MSG_642 12467
-#define ER_IB_MSG_643 12468
-#define ER_IB_MSG_644 12469
-#define ER_IB_MSG_645 12470
-#define ER_IB_MSG_646 12471
-#define ER_IB_MSG_647 12472
-#define ER_IB_MSG_648 12473
-#define ER_IB_MSG_649 12474
-#define ER_IB_MSG_650 12475
-#define ER_IB_MSG_651 12476
-#define ER_IB_MSG_652 12477
-#define ER_IB_MSG_DDL_LOG_DELETE_BY_ID_OK 12478
-#define ER_IB_MSG_654 12479
-#define ER_IB_MSG_655 12480
-#define ER_IB_MSG_656 12481
-#define ER_IB_MSG_657 12482
-#define ER_IB_MSG_658 12483
-#define ER_IB_MSG_659 12484
-#define ER_IB_MSG_660 12485
-#define ER_IB_MSG_661 12486
-#define ER_IB_MSG_662 12487
-#define ER_IB_MSG_663 12488
-//#define OBSOLETE_ER_IB_MSG_664 12489
-//#define OBSOLETE_ER_IB_MSG_665 12490
-//#define OBSOLETE_ER_IB_MSG_666 12491
-//#define OBSOLETE_ER_IB_MSG_667 12492
-//#define OBSOLETE_ER_IB_MSG_668 12493
-//#define OBSOLETE_ER_IB_MSG_669 12494
-//#define OBSOLETE_ER_IB_MSG_670 12495
-//#define OBSOLETE_ER_IB_MSG_671 12496
-//#define OBSOLETE_ER_IB_MSG_672 12497
-//#define OBSOLETE_ER_IB_MSG_673 12498
-//#define OBSOLETE_ER_IB_MSG_674 12499
-//#define OBSOLETE_ER_IB_MSG_675 12500
-//#define OBSOLETE_ER_IB_MSG_676 12501
-//#define OBSOLETE_ER_IB_MSG_677 12502
-//#define OBSOLETE_ER_IB_MSG_678 12503
-//#define OBSOLETE_ER_IB_MSG_679 12504
-//#define OBSOLETE_ER_IB_MSG_680 12505
-//#define OBSOLETE_ER_IB_MSG_681 12506
-//#define OBSOLETE_ER_IB_MSG_682 12507
-//#define OBSOLETE_ER_IB_MSG_683 12508
-//#define OBSOLETE_ER_IB_MSG_684 12509
-//#define OBSOLETE_ER_IB_MSG_685 12510
-//#define OBSOLETE_ER_IB_MSG_686 12511
-//#define OBSOLETE_ER_IB_MSG_687 12512
-//#define OBSOLETE_ER_IB_MSG_688 12513
-//#define OBSOLETE_ER_IB_MSG_689 12514
-//#define OBSOLETE_ER_IB_MSG_690 12515
-//#define OBSOLETE_ER_IB_MSG_691 12516
-//#define OBSOLETE_ER_IB_MSG_692 12517
-//#define OBSOLETE_ER_IB_MSG_693 12518
-#define ER_IB_MSG_694 12519
-#define ER_IB_MSG_695 12520
-#define ER_IB_MSG_696 12521
-#define ER_IB_MSG_697 12522
-#define ER_IB_MSG_LOG_CORRUPT 12523
-#define ER_IB_MSG_699 12524
-#define ER_IB_MSG_LOG_FORMAT_OLD_AND_LOG_CORRUPTED 12525
-#define ER_IB_MSG_LOG_FORMAT_OLD_AND_NO_CLEAN_SHUTDOWN 12526
-//#define OBSOLETE_ER_IB_MSG_702 12527
-//#define OBSOLETE_ER_IB_MSG_703 12528
-#define ER_IB_MSG_LOG_FORMAT_BEFORE_8_0_30 12529
-#define ER_IB_MSG_LOG_FILE_FORMAT_UNKNOWN 12530
-#define ER_IB_MSG_RECOVERY_CHECKPOINT_NOT_FOUND 12531
-#define ER_IB_MSG_707 12532
-#define ER_IB_MSG_708 12533
-#define ER_IB_MSG_709 12534
-#define ER_IB_MSG_710 12535
-#define ER_IB_MSG_711 12536
-#define ER_IB_MSG_712 12537
-#define ER_IB_MSG_713 12538
-#define ER_IB_MSG_714 12539
-#define ER_IB_MSG_715 12540
-#define ER_IB_MSG_716 12541
-#define ER_IB_MSG_717 12542
-#define ER_IB_MSG_718 12543
-#define ER_IB_MSG_719 12544
-#define ER_IB_MSG_720 12545
-#define ER_IB_MSG_RECOVERY_SKIPPED_IN_READ_ONLY_MODE 12546
-#define ER_IB_MSG_722 12547
-#define ER_IB_MSG_723 12548
-#define ER_IB_MSG_724 12549
-#define ER_IB_MSG_725 12550
-#define ER_IB_MSG_726 12551
-#define ER_IB_MSG_727 12552
-#define ER_IB_MSG_728 12553
-#define ER_IB_MSG_LOG_FILES_CREATED_BY_MEB_AND_READ_ONLY_MODE 12554
-#define ER_IB_MSG_LOG_FILES_CREATED_BY_MEB 12555
-#define ER_IB_MSG_LOG_FILES_CREATED_BY_CLONE 12556
-#define ER_IB_MSG_LOG_FORMAT_OLD 12557
-#define ER_IB_MSG_LOG_FORMAT_NOT_SUPPORTED 12558
-#define ER_IB_MSG_RECOVERY_CHECKPOINT_FROM_BEFORE_CLEAN_SHUTDOWN 12559
-#define ER_IB_MSG_RECOVERY_IS_NEEDED 12560
-#define ER_IB_MSG_RECOVERY_IN_READ_ONLY 12561
-#define ER_IB_MSG_737 12562
-#define ER_IB_MSG_738 12563
-#define ER_IB_MSG_739 12564
-#define ER_IB_MSG_740 12565
-#define ER_IB_MSG_741 12566
-#define ER_IB_MSG_742 12567
-#define ER_IB_MSG_743 12568
-#define ER_IB_MSG_744 12569
-#define ER_IB_MSG_745 12570
-#define ER_IB_MSG_746 12571
-#define ER_IB_MSG_747 12572
-#define ER_IB_MSG_748 12573
-#define ER_IB_MSG_749 12574
-#define ER_IB_MSG_750 12575
-#define ER_IB_MSG_751 12576
-#define ER_IB_MSG_752 12577
-#define ER_IB_MSG_753 12578
-#define ER_IB_MSG_754 12579
-#define ER_IB_MSG_755 12580
-#define ER_IB_MSG_756 12581
-#define ER_IB_MSG_757 12582
-#define ER_IB_MSG_758 12583
-#define ER_IB_MSG_759 12584
-#define ER_IB_MSG_760 12585
-#define ER_IB_MSG_761 12586
-#define ER_IB_MSG_762 12587
-#define ER_IB_MSG_763 12588
-#define ER_IB_MSG_764 12589
-#define ER_IB_MSG_765 12590
-#define ER_IB_MSG_766 12591
-#define ER_IB_MSG_767 12592
-#define ER_IB_MSG_768 12593
-#define ER_IB_MSG_769 12594
-#define ER_IB_MSG_770 12595
-#define ER_IB_MSG_771 12596
-#define ER_IB_MSG_772 12597
-#define ER_IB_MSG_773 12598
-#define ER_IB_MSG_774 12599
-#define ER_IB_MSG_775 12600
-#define ER_IB_MSG_776 12601
-#define ER_IB_MSG_777 12602
-#define ER_IB_MSG_778 12603
-#define ER_IB_MSG_779 12604
-#define ER_IB_MSG_780 12605
-#define ER_IB_MSG_781 12606
-#define ER_IB_MSG_782 12607
-#define ER_IB_MSG_783 12608
-#define ER_IB_MSG_784 12609
-#define ER_IB_MSG_785 12610
-#define ER_IB_MSG_786 12611
-#define ER_IB_MSG_787 12612
-#define ER_IB_MSG_788 12613
-#define ER_IB_MSG_789 12614
-#define ER_IB_MSG_790 12615
-#define ER_IB_MSG_791 12616
-#define ER_IB_MSG_792 12617
-#define ER_IB_MSG_793 12618
-#define ER_IB_MSG_794 12619
-#define ER_IB_MSG_795 12620
-#define ER_IB_MSG_796 12621
-#define ER_IB_MSG_797 12622
-#define ER_IB_MSG_798 12623
-#define ER_IB_MSG_799 12624
-#define ER_IB_MSG_800 12625
-#define ER_IB_MSG_801 12626
-#define ER_IB_MSG_802 12627
-#define ER_IB_MSG_803 12628
-#define ER_IB_MSG_804 12629
-#define ER_IB_MSG_805 12630
-#define ER_IB_MSG_806 12631
-#define ER_IB_MSG_807 12632
-#define ER_IB_MSG_808 12633
-#define ER_IB_MSG_809 12634
-#define ER_IB_MSG_810 12635
-#define ER_IB_MSG_811 12636
-#define ER_IB_MSG_812 12637
-#define ER_IB_MSG_813 12638
-#define ER_IB_MSG_814 12639
-#define ER_IB_MSG_815 12640
-#define ER_IB_MSG_816 12641
-#define ER_IB_MSG_817 12642
-#define ER_IB_MSG_818 12643
-#define ER_IB_MSG_819 12644
-#define ER_IB_MSG_820 12645
-#define ER_IB_MSG_821 12646
-#define ER_IB_MSG_822 12647
-#define ER_IB_MSG_823 12648
-#define ER_IB_MSG_824 12649
-#define ER_IB_MSG_825 12650
-#define ER_IB_MSG_826 12651
-#define ER_IB_MSG_827 12652
-#define ER_IB_MSG_828 12653
-#define ER_IB_MSG_829 12654
-#define ER_IB_MSG_830 12655
-#define ER_IB_MSG_831 12656
-#define ER_IB_MSG_832 12657
-#define ER_IB_MSG_833 12658
-#define ER_IB_MSG_834 12659
-#define ER_IB_MSG_835 12660
-#define ER_IB_MSG_836 12661
-#define ER_IB_MSG_837 12662
-#define ER_IB_MSG_838 12663
-#define ER_IB_MSG_839 12664
-#define ER_IB_MSG_840 12665
-#define ER_IB_MSG_841 12666
-#define ER_IB_MSG_842 12667
-#define ER_IB_MSG_843 12668
-#define ER_IB_MSG_844 12669
-#define ER_IB_MSG_845 12670
-#define ER_IB_MSG_846 12671
-#define ER_IB_MSG_847 12672
-#define ER_IB_MSG_848 12673
-#define ER_IB_MSG_849 12674
-#define ER_IB_MSG_850 12675
-#define ER_IB_MSG_851 12676
-#define ER_IB_MSG_852 12677
-#define ER_IB_MSG_853 12678
-#define ER_IB_MSG_854 12679
-#define ER_IB_MSG_855 12680
-#define ER_IB_MSG_856 12681
-#define ER_IB_MSG_857 12682
-#define ER_IB_MSG_858 12683
-#define ER_IB_MSG_859 12684
-#define ER_IB_MSG_860 12685
-#define ER_IB_MSG_861 12686
-#define ER_IB_MSG_862 12687
-#define ER_IB_MSG_863 12688
-#define ER_IB_MSG_864 12689
-#define ER_IB_MSG_865 12690
-#define ER_IB_MSG_866 12691
-#define ER_IB_MSG_867 12692
-#define ER_IB_MSG_868 12693
-#define ER_IB_MSG_869 12694
-#define ER_IB_MSG_870 12695
-#define ER_IB_MSG_871 12696
-#define ER_IB_MSG_872 12697
-#define ER_IB_MSG_873 12698
-#define ER_IB_MSG_874 12699
-#define ER_IB_MSG_875 12700
-#define ER_IB_MSG_876 12701
-#define ER_IB_MSG_877 12702
-#define ER_IB_MSG_878 12703
-#define ER_IB_MSG_879 12704
-#define ER_IB_MSG_880 12705
-#define ER_IB_MSG_881 12706
-#define ER_IB_MSG_882 12707
-#define ER_IB_MSG_883 12708
-#define ER_IB_MSG_884 12709
-#define ER_IB_MSG_885 12710
-#define ER_IB_MSG_886 12711
-#define ER_IB_MSG_887 12712
-#define ER_IB_MSG_888 12713
-#define ER_IB_MSG_889 12714
-#define ER_IB_MSG_890 12715
-#define ER_IB_MSG_891 12716
-#define ER_IB_MSG_892 12717
-#define ER_IB_MSG_893 12718
-#define ER_IB_MSG_894 12719
-#define ER_IB_MSG_895 12720
-#define ER_IB_MSG_896 12721
-#define ER_IB_MSG_897 12722
-#define ER_IB_MSG_898 12723
-#define ER_IB_MSG_899 12724
-#define ER_IB_MSG_900 12725
-#define ER_IB_MSG_901 12726
-#define ER_IB_MSG_902 12727
-#define ER_IB_MSG_903 12728
-#define ER_IB_MSG_904 12729
-#define ER_IB_MSG_905 12730
-#define ER_IB_MSG_906 12731
-#define ER_IB_MSG_907 12732
-#define ER_IB_MSG_908 12733
-#define ER_IB_MSG_909 12734
-#define ER_IB_MSG_910 12735
-#define ER_IB_MSG_911 12736
-#define ER_IB_MSG_912 12737
-#define ER_IB_MSG_913 12738
-#define ER_IB_MSG_914 12739
-#define ER_IB_MSG_915 12740
-#define ER_IB_MSG_916 12741
-#define ER_IB_MSG_917 12742
-#define ER_IB_MSG_918 12743
-#define ER_IB_MSG_919 12744
-#define ER_IB_MSG_920 12745
-#define ER_IB_MSG_921 12746
-#define ER_IB_MSG_922 12747
-#define ER_IB_MSG_923 12748
-#define ER_IB_MSG_924 12749
-#define ER_IB_MSG_925 12750
-#define ER_IB_MSG_926 12751
-#define ER_IB_MSG_927 12752
-#define ER_IB_MSG_928 12753
-#define ER_IB_MSG_929 12754
-#define ER_IB_MSG_930 12755
-#define ER_IB_MSG_931 12756
-#define ER_IB_MSG_932 12757
-#define ER_IB_MSG_933 12758
-#define ER_IB_MSG_934 12759
-#define ER_IB_MSG_935 12760
-#define ER_IB_MSG_936 12761
-#define ER_IB_MSG_937 12762
-#define ER_IB_MSG_938 12763
-#define ER_IB_MSG_939 12764
-#define ER_IB_MSG_940 12765
-#define ER_IB_MSG_941 12766
-#define ER_IB_MSG_942 12767
-#define ER_IB_MSG_943 12768
-#define ER_IB_MSG_944 12769
-#define ER_IB_MSG_945 12770
-#define ER_IB_MSG_946 12771
-#define ER_IB_MSG_947 12772
-#define ER_IB_MSG_948 12773
-#define ER_IB_MSG_949 12774
-#define ER_IB_MSG_950 12775
-#define ER_IB_MSG_951 12776
-#define ER_IB_MSG_952 12777
-#define ER_IB_MSG_953 12778
-#define ER_IB_MSG_954 12779
-#define ER_IB_MSG_955 12780
-#define ER_IB_MSG_956 12781
-#define ER_IB_MSG_957 12782
-#define ER_IB_MSG_958 12783
-#define ER_IB_MSG_959 12784
-#define ER_IB_MSG_960 12785
-#define ER_IB_MSG_961 12786
-#define ER_IB_MSG_962 12787
-#define ER_IB_MSG_963 12788
-#define ER_IB_MSG_964 12789
-#define ER_IB_MSG_965 12790
-#define ER_IB_MSG_966 12791
-#define ER_IB_MSG_967 12792
-#define ER_IB_MSG_968 12793
-#define ER_IB_MSG_969 12794
-#define ER_IB_MSG_970 12795
-#define ER_IB_MSG_971 12796
-#define ER_IB_MSG_972 12797
-#define ER_IB_MSG_973 12798
-#define ER_IB_MSG_974 12799
-#define ER_IB_MSG_975 12800
-#define ER_IB_MSG_976 12801
-#define ER_IB_MSG_977 12802
-#define ER_IB_MSG_978 12803
-#define ER_IB_MSG_979 12804
-#define ER_IB_MSG_980 12805
-#define ER_IB_MSG_981 12806
-#define ER_IB_MSG_982 12807
-#define ER_IB_MSG_983 12808
-#define ER_IB_MSG_984 12809
-#define ER_IB_MSG_985 12810
-#define ER_IB_MSG_986 12811
-#define ER_IB_MSG_987 12812
-#define ER_IB_MSG_988 12813
-#define ER_IB_MSG_989 12814
-#define ER_IB_MSG_990 12815
-#define ER_IB_MSG_991 12816
-#define ER_IB_MSG_992 12817
-#define ER_IB_MSG_993 12818
-#define ER_IB_MSG_994 12819
-#define ER_IB_MSG_995 12820
-#define ER_IB_MSG_996 12821
-#define ER_IB_MSG_997 12822
-#define ER_IB_MSG_998 12823
-#define ER_IB_MSG_999 12824
-#define ER_IB_MSG_1000 12825
-#define ER_IB_MSG_1001 12826
-#define ER_IB_MSG_1002 12827
-#define ER_IB_MSG_1003 12828
-#define ER_IB_MSG_1004 12829
-#define ER_IB_MSG_1005 12830
-#define ER_IB_MSG_1006 12831
-#define ER_IB_MSG_1007 12832
-#define ER_IB_MSG_1008 12833
-#define ER_IB_MSG_1009 12834
-#define ER_IB_MSG_1010 12835
-#define ER_IB_MSG_1011 12836
-#define ER_IB_MSG_1012 12837
-#define ER_IB_MSG_1013 12838
-#define ER_IB_MSG_1014 12839
-#define ER_IB_MSG_1015 12840
-#define ER_IB_MSG_1016 12841
-#define ER_IB_MSG_1017 12842
-#define ER_IB_MSG_1018 12843
-#define ER_IB_MSG_1019 12844
-#define ER_IB_MSG_1020 12845
-#define ER_IB_MSG_1021 12846
-#define ER_IB_MSG_1022 12847
-#define ER_IB_MSG_1023 12848
-#define ER_IB_MSG_1024 12849
-#define ER_IB_MSG_1025 12850
-#define ER_IB_MSG_1026 12851
-#define ER_IB_MSG_1027 12852
-#define ER_IB_MSG_1028 12853
-#define ER_IB_MSG_1029 12854
-#define ER_IB_MSG_1030 12855
-#define ER_IB_MSG_1031 12856
-#define ER_IB_MSG_1032 12857
-#define ER_IB_MSG_1033 12858
-#define ER_IB_MSG_1034 12859
-#define ER_IB_MSG_1035 12860
-#define ER_IB_MSG_1036 12861
-#define ER_IB_MSG_1037 12862
-#define ER_IB_MSG_1038 12863
-#define ER_IB_MSG_1039 12864
-#define ER_IB_MSG_1040 12865
-#define ER_IB_MSG_1041 12866
-#define ER_IB_MSG_1042 12867
-#define ER_IB_MSG_1043 12868
-#define ER_IB_MSG_1044 12869
-#define ER_IB_MSG_1045 12870
-#define ER_IB_MSG_1046 12871
-#define ER_IB_MSG_1047 12872
-#define ER_IB_MSG_1048 12873
-#define ER_IB_MSG_1049 12874
-//#define OBSOLETE_ER_IB_MSG_1050 12875
-#define ER_IB_MSG_1051 12876
-#define ER_IB_MSG_1052 12877
-#define ER_IB_MSG_1053 12878
-#define ER_IB_MSG_1054 12879
-#define ER_IB_MSG_1055 12880
-#define ER_IB_MSG_1056 12881
-#define ER_IB_MSG_1057 12882
-#define ER_IB_MSG_1058 12883
-#define ER_IB_MSG_1059 12884
-#define ER_IB_MSG_1060 12885
-#define ER_IB_MSG_LOG_FILE_OS_CREATE_FAILED 12886
-#define ER_IB_MSG_FILE_RESIZE 12887
-#define ER_IB_MSG_LOG_FILE_RESIZE_FAILED 12888
-#define ER_IB_MSG_LOG_FILES_CREATE_AND_READ_ONLY_MODE 12889
-#define ER_IB_MSG_1065 12890
-#define ER_IB_MSG_LOG_FILE_PREPARE_ON_CREATE_FAILED 12891
-//#define OBSOLETE_ER_IB_MSG_1067 12892
-#define ER_IB_MSG_LOG_FILES_INITIALIZED 12893
-#define ER_IB_MSG_LOG_FILE_OPEN_FAILED 12894
-#define ER_IB_MSG_1070 12895
-#define ER_IB_MSG_1071 12896
-#define ER_IB_MSG_1072 12897
-#define ER_IB_MSG_1073 12898
-#define ER_IB_MSG_1074 12899
-#define ER_IB_MSG_1075 12900
-#define ER_IB_MSG_1076 12901
-#define ER_IB_MSG_1077 12902
-#define ER_IB_MSG_1078 12903
-#define ER_IB_MSG_1079 12904
-#define ER_IB_MSG_1080 12905
-#define ER_IB_MSG_1081 12906
-#define ER_IB_MSG_1082 12907
-#define ER_IB_MSG_1083 12908
-#define ER_IB_MSG_CANNOT_OPEN_57_UNDO 12909
-#define ER_IB_MSG_1085 12910
-#define ER_IB_MSG_1086 12911
-#define ER_IB_MSG_1087 12912
-#define ER_IB_MSG_1088 12913
-#define ER_IB_MSG_1089 12914
-#define ER_IB_MSG_1090 12915
-#define ER_IB_MSG_1091 12916
-#define ER_IB_MSG_1092 12917
-#define ER_IB_MSG_1093 12918
-#define ER_IB_MSG_1094 12919
-#define ER_IB_MSG_1095 12920
-#define ER_IB_MSG_1096 12921
-#define ER_IB_MSG_1097 12922
-#define ER_IB_MSG_1098 12923
-#define ER_IB_MSG_1099 12924
-#define ER_IB_MSG_1100 12925
-#define ER_IB_MSG_1101 12926
-#define ER_IB_MSG_1102 12927
-#define ER_IB_MSG_1103 12928
-#define ER_IB_MSG_1104 12929
-#define ER_IB_MSG_1105 12930
-#define ER_IB_MSG_BUF_PENDING_IO 12931
-#define ER_IB_MSG_1107 12932
-#define ER_IB_MSG_1108 12933
-#define ER_IB_MSG_1109 12934
-#define ER_IB_MSG_1110 12935
-#define ER_IB_MSG_1111 12936
-#define ER_IB_MSG_1112 12937
-#define ER_IB_MSG_1113 12938
-#define ER_IB_MSG_1114 12939
-#define ER_IB_MSG_1115 12940
-#define ER_IB_MSG_1116 12941
-#define ER_IB_MSG_1117 12942
-//#define OBSOLETE_ER_IB_MSG_1118 12943
-#define ER_IB_MSG_1119 12944
-#define ER_IB_MSG_1120 12945
-#define ER_IB_MSG_1121 12946
-#define ER_IB_MSG_1122 12947
-#define ER_IB_MSG_1123 12948
-#define ER_IB_MSG_1124 12949
-#define ER_IB_MSG_1125 12950
-#define ER_IB_MSG_1126 12951
-#define ER_IB_MSG_1127 12952
-#define ER_IB_MSG_1128 12953
-#define ER_IB_MSG_1129 12954
-#define ER_IB_MSG_1130 12955
-#define ER_IB_MSG_1131 12956
-#define ER_IB_MSG_1132 12957
-#define ER_IB_MSG_1133 12958
-#define ER_IB_MSG_1134 12959
-#define ER_IB_MSG_DATA_DIRECTORY_NOT_INITIALIZED_OR_CORRUPTED 12960
-#define ER_IB_MSG_LOG_FILES_INVALID_SET 12961
-#define ER_IB_MSG_LOG_FILE_SIZE_INVALID 12962
-#define ER_IB_MSG_LOG_FILES_DIFFERENT_SIZES 12963
-#define ER_IB_MSG_1139 12964
-#define ER_IB_MSG_RECOVERY_CORRUPT 12965
-#define ER_IB_MSG_LOG_FILES_RESIZE_ON_START_IN_READ_ONLY_MODE 12966
-#define ER_IB_MSG_1142 12967
-#define ER_IB_MSG_LOG_FILES_REWRITING 12968
-#define ER_IB_MSG_1144 12969
-#define ER_IB_MSG_1145 12970
-#define ER_IB_MSG_1146 12971
-#define ER_IB_MSG_1147 12972
-#define ER_IB_MSG_1148 12973
-#define ER_IB_MSG_1149 12974
-#define ER_IB_MSG_1150 12975
-#define ER_IB_MSG_1151 12976
-#define ER_IB_MSG_1152 12977
-//#define OBSOLETE_ER_IB_MSG_1153 12978
-#define ER_IB_MSG_1154 12979
-#define ER_IB_MSG_1155 12980
-#define ER_IB_MSG_1156 12981
-#define ER_IB_MSG_1157 12982
-#define ER_IB_MSG_1158 12983
-#define ER_IB_MSG_1159 12984
-#define ER_IB_MSG_1160 12985
-#define ER_IB_MSG_1161 12986
-#define ER_IB_MSG_1162 12987
-#define ER_IB_MSG_1163 12988
-#define ER_IB_MSG_1164 12989
-#define ER_IB_MSG_1165 12990
-#define ER_IB_MSG_UNDO_TRUNCATE_FAIL_TO_READ_LOG_FILE 12991
-#define ER_IB_MSG_UNDO_MARKED_FOR_TRUNCATE 12992
-//#define OBSOLETE_ER_IB_MSG_UNDO_INJECT_BEFORE_MDL 12993
-#define ER_IB_MSG_UNDO_TRUNCATE_START 12994
-//#define OBSOLETE_ER_IB_MSG_UNDO_INJECT_BEFORE_DDL_LOG_START 12995
-#define ER_IB_MSG_UNDO_TRUNCATE_DELAY_BY_LOG_CREATE 12996
-//#define OBSOLETE_ER_IB_MSG_UNDO_INJECT_BEFORE_TRUNCATE 12997
-#define ER_IB_MSG_UNDO_TRUNCATE_DELAY_BY_FAILURE 12998
-//#define OBSOLETE_ER_IB_MSG_UNDO_INJECT_BEFORE_STATE_UPDATE 12999
-#define ER_IB_MSG_UNDO_TRUNCATE_COMPLETE 13000
-//#define OBSOLETE_ER_IB_MSG_UNDO_INJECT_TRUNCATE_DONE 13001
-#define ER_IB_MSG_1177 13002
-#define ER_IB_MSG_1178 13003
-#define ER_IB_MSG_1179 13004
-#define ER_IB_MSG_1180 13005
-#define ER_IB_MSG_1181 13006
-#define ER_IB_MSG_1182 13007
-#define ER_IB_MSG_1183 13008
-#define ER_IB_MSG_1184 13009
-#define ER_IB_MSG_1185 13010
-#define ER_IB_MSG_1186 13011
-#define ER_IB_MSG_1187 13012
-#define ER_IB_MSG_1188 13013
-#define ER_IB_MSG_1189 13014
-#define ER_IB_MSG_TRX_RECOVERY_ROLLBACK_COMPLETED 13015
-#define ER_IB_MSG_1191 13016
-#define ER_IB_MSG_1192 13017
-#define ER_IB_MSG_1193 13018
-#define ER_IB_MSG_1194 13019
-#define ER_IB_MSG_1195 13020
-#define ER_IB_MSG_1196 13021
-#define ER_IB_MSG_1197 13022
-#define ER_IB_MSG_1198 13023
-#define ER_IB_MSG_1199 13024
-#define ER_IB_MSG_1200 13025
-#define ER_IB_MSG_1201 13026
-#define ER_IB_MSG_1202 13027
-#define ER_IB_MSG_1203 13028
-#define ER_IB_MSG_1204 13029
-#define ER_IB_MSG_1205 13030
-#define ER_IB_MSG_1206 13031
-#define ER_IB_MSG_1207 13032
-#define ER_IB_MSG_1208 13033
-#define ER_IB_MSG_1209 13034
-#define ER_IB_MSG_1210 13035
-#define ER_IB_MSG_1211 13036
-#define ER_IB_MSG_1212 13037
-#define ER_IB_MSG_1213 13038
-#define ER_IB_MSG_1214 13039
-#define ER_IB_MSG_1215 13040
-#define ER_IB_MSG_LOG_FILES_RESIZE_ON_START 13041
-#define ER_IB_MSG_1217 13042
-#define ER_IB_MSG_1218 13043
-#define ER_IB_MSG_1219 13044
-#define ER_IB_MSG_1220 13045
-#define ER_IB_MSG_1221 13046
-#define ER_IB_MSG_1222 13047
-#define ER_IB_MSG_1223 13048
-#define ER_IB_MSG_1224 13049
-#define ER_IB_MSG_1225 13050
-#define ER_IB_MSG_1226 13051
-#define ER_IB_MSG_1227 13052
-#define ER_IB_MSG_1228 13053
-#define ER_IB_MSG_1229 13054
-//#define OBSOLETE_ER_IB_MSG_1230 13055
-#define ER_IB_MSG_1231 13056
-//#define OBSOLETE_ER_IB_MSG_1232 13057
-#define ER_IB_MSG_1233 13058
-#define ER_IB_MSG_LOG_WRITER_OUT_OF_SPACE 13059
-#define ER_IB_MSG_1235 13060
-#define ER_IB_MSG_LOG_WRITER_ABORTS_LOG_ARCHIVER 13061
-#define ER_IB_MSG_LOG_WRITER_WAITING_FOR_ARCHIVER 13062
-#define ER_IB_MSG_1238 13063
-#define ER_IB_MSG_1239 13064
-//#define OBSOLETE_ER_IB_MSG_1240 13065
-#define ER_IB_MSG_1241 13066
-#define ER_IB_MSG_LOG_FILES_CANNOT_ENCRYPT_IN_READ_ONLY 13067
-#define ER_IB_MSG_LOG_FILES_ENCRYPTION_INIT_FAILED 13068
-//#define OBSOLETE_ER_IB_MSG_1244 13069
-#define ER_IB_MSG_1245 13070
-#define ER_IB_MSG_1246 13071
-#define ER_IB_MSG_1247 13072
-#define ER_IB_MSG_1248 13073
-#define ER_IB_MSG_1249 13074
-#define ER_IB_MSG_1250 13075
-#define ER_IB_MSG_1251 13076
-#define ER_IB_MSG_BUF_PENDING_IO_ON_SHUTDOWN 13077
-#define ER_IB_MSG_1253 13078
-//#define OBSOLETE_ER_IB_MSG_1254 13079
-#define ER_IB_MSG_1255 13080
-#define ER_IB_MSG_1256 13081
-#define ER_IB_MSG_1257 13082
-#define ER_IB_MSG_1258 13083
-#define ER_IB_MSG_1259 13084
-#define ER_IB_MSG_1260 13085
-#define ER_IB_MSG_1261 13086
-#define ER_IB_MSG_1262 13087
-#define ER_IB_MSG_1263 13088
-#define ER_IB_MSG_LOG_FILE_HEADER_INVALID_CHECKSUM 13089
-#define ER_IB_MSG_LOG_FORMAT_BEFORE_5_7_9 13090
-#define ER_IB_MSG_1266 13091
-#define ER_IB_MSG_LOG_PARAMS_CONCURRENCY_MARGIN_UNSAFE 13092
-#define ER_IB_MSG_1268 13093
-#define ER_IB_MSG_1269 13094
-#define ER_IB_MSG_THREAD_CONCURRENCY_CHANGED 13095
-#define ER_RPL_SLAVE_SQL_THREAD_STOP_CMD_EXEC_TIMEOUT 13096
-#define ER_RPL_SLAVE_IO_THREAD_STOP_CMD_EXEC_TIMEOUT 13097
-#define ER_RPL_GTID_UNSAFE_STMT_ON_NON_TRANS_TABLE 13098
-#define ER_RPL_GTID_UNSAFE_STMT_CREATE_SELECT 13099
-//#define OBSOLETE_ER_RPL_GTID_UNSAFE_STMT_ON_TEMPORARY_TABLE 13100
-#define ER_BINLOG_ROW_VALUE_OPTION_IGNORED 13101
-#define ER_BINLOG_USE_V1_ROW_EVENTS_IGNORED 13102
-#define ER_BINLOG_ROW_VALUE_OPTION_USED_ONLY_FOR_AFTER_IMAGES 13103
-#define ER_CONNECTION_ABORTED 13104
-#define ER_NORMAL_SERVER_SHUTDOWN 13105
-#define ER_KEYRING_MIGRATE_FAILED 13106
-#define ER_GRP_RPL_LOWER_CASE_TABLE_NAMES_DIFF_FROM_GRP 13107
-#define ER_OOM_SAVE_GTIDS 13108
-#define ER_LCTN_NOT_FOUND 13109
-//#define OBSOLETE_ER_REGEXP_INVALID_CAPTURE_GROUP_NAME 13110
-#define ER_COMPONENT_FILTER_WRONG_VALUE 13111
-#define ER_XPLUGIN_FAILED_TO_STOP_SERVICES 13112
-#define ER_INCONSISTENT_ERROR 13113
-#define ER_SERVER_MASTER_FATAL_ERROR_READING_BINLOG 13114
-#define ER_NETWORK_READ_EVENT_CHECKSUM_FAILURE 13115
-#define ER_SLAVE_CREATE_EVENT_FAILURE 13116
-#define ER_SLAVE_FATAL_ERROR 13117
-#define ER_SLAVE_HEARTBEAT_FAILURE 13118
-#define ER_SLAVE_INCIDENT 13119
-#define ER_SLAVE_MASTER_COM_FAILURE 13120
-#define ER_SLAVE_RELAY_LOG_READ_FAILURE 13121
-#define ER_SLAVE_RELAY_LOG_WRITE_FAILURE 13122
-#define ER_SERVER_SLAVE_MI_INIT_REPOSITORY 13123
-#define ER_SERVER_SLAVE_RLI_INIT_REPOSITORY 13124
-#define ER_SERVER_NET_PACKET_TOO_LARGE 13125
-#define ER_SERVER_NO_SYSTEM_TABLE_ACCESS 13126
-#define ER_SERVER_UNKNOWN_ERROR 13127
-#define ER_SERVER_UNKNOWN_SYSTEM_VARIABLE 13128
-#define ER_SERVER_NO_SESSION_TO_SEND_TO 13129
-#define ER_SERVER_NEW_ABORTING_CONNECTION 13130
-#define ER_SERVER_OUT_OF_SORTMEMORY 13131
-#define ER_SERVER_RECORD_FILE_FULL 13132
-#define ER_SERVER_DISK_FULL_NOWAIT 13133
-#define ER_SERVER_HANDLER_ERROR 13134
-#define ER_SERVER_NOT_FORM_FILE 13135
-#define ER_SERVER_CANT_OPEN_FILE 13136
-#define ER_SERVER_FILE_NOT_FOUND 13137
-#define ER_SERVER_FILE_USED 13138
-#define ER_SERVER_CANNOT_LOAD_FROM_TABLE_V2 13139
-#define ER_ERROR_INFO_FROM_DA 13140
-#define ER_SERVER_TABLE_CHECK_FAILED 13141
-#define ER_SERVER_COL_COUNT_DOESNT_MATCH_PLEASE_UPDATE_V2 13142
-#define ER_SERVER_COL_COUNT_DOESNT_MATCH_CORRUPTED_V2 13143
-#define ER_SERVER_ACL_TABLE_ERROR 13144
-#define ER_SERVER_SLAVE_INIT_QUERY_FAILED 13145
-#define ER_SERVER_SLAVE_CONVERSION_FAILED 13146
-#define ER_SERVER_SLAVE_IGNORED_TABLE 13147
-#define ER_CANT_REPLICATE_ANONYMOUS_WITH_AUTO_POSITION 13148
-#define ER_CANT_REPLICATE_ANONYMOUS_WITH_GTID_MODE_ON 13149
-#define ER_CANT_REPLICATE_GTID_WITH_GTID_MODE_OFF 13150
-#define ER_SERVER_TEST_MESSAGE 13151
-#define ER_AUDIT_LOG_JSON_FILTER_PARSING_ERROR 13152
-#define ER_AUDIT_LOG_JSON_FILTERING_NOT_ENABLED 13153
-#define ER_PLUGIN_FAILED_TO_OPEN_TABLES 13154
-#define ER_PLUGIN_FAILED_TO_OPEN_TABLE 13155
-#define ER_AUDIT_LOG_JSON_FILTER_NAME_CANNOT_BE_EMPTY 13156
-#define ER_AUDIT_LOG_USER_NAME_INVALID_CHARACTER 13157
-#define ER_AUDIT_LOG_UDF_INSUFFICIENT_PRIVILEGE 13158
-#define ER_AUDIT_LOG_NO_KEYRING_PLUGIN_INSTALLED 13159
-#define ER_AUDIT_LOG_HOST_NAME_INVALID_CHARACTER 13160
-#define ER_AUDIT_LOG_ENCRYPTION_PASSWORD_HAS_NOT_BEEN_SET 13161
-#define ER_AUDIT_LOG_COULD_NOT_CREATE_AES_KEY 13162
-#define ER_AUDIT_LOG_ENCRYPTION_PASSWORD_CANNOT_BE_FETCHED 13163
-#define ER_COULD_NOT_REINITIALIZE_AUDIT_LOG_FILTERS 13164
-#define ER_AUDIT_LOG_JSON_USER_NAME_CANNOT_BE_EMPTY 13165
-#define ER_AUDIT_LOG_USER_FIRST_CHARACTER_MUST_BE_ALPHANUMERIC 13166
-#define ER_AUDIT_LOG_JSON_FILTER_DOES_NOT_EXIST 13167
-#define ER_IB_MSG_1271 13168
-#define ER_STARTING_INIT 13169
-#define ER_ENDING_INIT 13170
-#define ER_IB_MSG_1272 13171
-#define ER_SERVER_SHUTDOWN_INFO 13172
-#define ER_GRP_RPL_PLUGIN_ABORT 13173
-//#define OBSOLETE_ER_REGEXP_INVALID_FLAG 13174
-//#define OBSOLETE_ER_XA_REPLICATION_FILTERS 13175
-//#define OBSOLETE_ER_UPDATE_GTID_PURGED_WITH_GR 13176
-#define ER_AUDIT_LOG_TABLE_DEFINITION_NOT_UPDATED 13177
-#define ER_DD_INITIALIZE_SQL_ERROR 13178
-#define ER_NO_PATH_FOR_SHARED_LIBRARY 13179
-#define ER_UDF_ALREADY_EXISTS 13180
-#define ER_SET_EVENT_FAILED 13181
-#define ER_FAILED_TO_ALLOCATE_SSL_BIO 13182
-#define ER_IB_MSG_1273 13183
-#define ER_PID_FILEPATH_LOCATIONS_INACCESSIBLE 13184
-#define ER_UNKNOWN_VARIABLE_IN_PERSISTED_CONFIG_FILE 13185
-#define ER_FAILED_TO_HANDLE_DEFAULTS_FILE 13186
-#define ER_DUPLICATE_SYS_VAR 13187
-#define ER_FAILED_TO_INIT_SYS_VAR 13188
-#define ER_SYS_VAR_NOT_FOUND 13189
-#define ER_IB_MSG_1274 13190
-#define ER_IB_MSG_1275 13191
-//#define OBSOLETE_ER_TARGET_TS_UNENCRYPTED 13192
-#define ER_IB_MSG_WAIT_FOR_ENCRYPT_THREAD 13193
-#define ER_IB_MSG_1277 13194
-#define ER_IB_MSG_NO_ENCRYPT_PROGRESS_FOUND 13195
-#define ER_IB_MSG_RESUME_OP_FOR_SPACE 13196
-#define ER_IB_MSG_1280 13197
-#define ER_IB_MSG_1281 13198
-#define ER_IB_MSG_1282 13199
-#define ER_IB_MSG_1283 13200
-#define ER_IB_MSG_1284 13201
-#define ER_CANT_SET_ERROR_SUPPRESSION_LIST_FROM_COMMAND_LINE 13202
-#define ER_INVALID_VALUE_OF_BIND_ADDRESSES 13203
-#define ER_RELAY_LOG_SPACE_LIMIT_DISABLED 13204
-#define ER_GRP_RPL_ERROR_GTID_SET_EXTRACTION 13205
-#define ER_GRP_RPL_MISSING_GRP_RPL_ACTION_COORDINATOR 13206
-#define ER_GRP_RPL_JOIN_WHEN_GROUP_ACTION_RUNNING 13207
-#define ER_GRP_RPL_JOINER_EXIT_WHEN_GROUP_ACTION_RUNNING 13208
-#define ER_GRP_RPL_CHANNEL_THREAD_WHEN_GROUP_ACTION_RUNNING 13209
-#define ER_GRP_RPL_APPOINTED_PRIMARY_NOT_PRESENT 13210
-#define ER_GRP_RPL_ERROR_ON_MESSAGE_SENDING 13211
-#define ER_GRP_RPL_CONFIGURATION_ACTION_ERROR 13212
-#define ER_GRP_RPL_CONFIGURATION_ACTION_LOCAL_TERMINATION 13213
-#define ER_GRP_RPL_CONFIGURATION_ACTION_START 13214
-#define ER_GRP_RPL_CONFIGURATION_ACTION_END 13215
-#define ER_GRP_RPL_CONFIGURATION_ACTION_KILLED_ERROR 13216
-#define ER_GRP_RPL_PRIMARY_ELECTION_PROCESS_ERROR 13217
-#define ER_GRP_RPL_PRIMARY_ELECTION_STOP_ERROR 13218
-#define ER_GRP_RPL_NO_STAGE_SERVICE 13219
-#define ER_GRP_RPL_UDF_REGISTER_ERROR 13220
-#define ER_GRP_RPL_UDF_UNREGISTER_ERROR 13221
-#define ER_GRP_RPL_UDF_REGISTER_SERVICE_ERROR 13222
-#define ER_GRP_RPL_SERVER_UDF_ERROR 13223
-//#define OBSOLETE_ER_CURRENT_PASSWORD_NOT_REQUIRED 13224
-//#define OBSOLETE_ER_INCORRECT_CURRENT_PASSWORD 13225
-//#define OBSOLETE_ER_MISSING_CURRENT_PASSWORD 13226
-#define ER_SERVER_WRONG_VALUE_FOR_VAR 13227
-#define ER_COULD_NOT_CREATE_WINDOWS_REGISTRY_KEY 13228
-#define ER_SERVER_GTID_UNSAFE_CREATE_DROP_TEMP_TABLE_IN_TRX_IN_SBR 13229
-//#define OBSOLETE_ER_SECONDARY_ENGINE 13230
-//#define OBSOLETE_ER_SECONDARY_ENGINE_DDL 13231
-//#define OBSOLETE_ER_NO_SESSION_TEMP 13232
-#define ER_XPLUGIN_FAILED_TO_SWITCH_SECURITY_CTX 13233
-#define ER_RPL_GTID_UNSAFE_ALTER_ADD_COL_WITH_DEFAULT_EXPRESSION 13234
-#define ER_UPGRADE_PARSE_ERROR 13235
-#define ER_DATA_DIRECTORY_UNUSABLE 13236
-#define ER_LDAP_AUTH_USER_GROUP_SEARCH_ROOT_BIND 13237
-#define ER_PLUGIN_INSTALL_ERROR 13238
-#define ER_PLUGIN_UNINSTALL_ERROR 13239
-#define ER_SHARED_TABLESPACE_USED_BY_PARTITIONED_TABLE 13240
-#define ER_UNKNOWN_TABLESPACE_TYPE 13241
-#define ER_WARN_DEPRECATED_UTF8_ALIAS_OPTION 13242
-#define ER_WARN_DEPRECATED_UTF8MB3_CHARSET_OPTION 13243
-#define ER_WARN_DEPRECATED_UTF8MB3_COLLATION_OPTION 13244
-#define ER_SSL_MEMORY_INSTRUMENTATION_INIT_FAILED 13245
-#define ER_IB_MSG_MADV_DONTDUMP_UNSUPPORTED 13246
-#define ER_IB_MSG_MADVISE_FAILED 13247
-//#define OBSOLETE_ER_COLUMN_CHANGE_SIZE 13248
-#define ER_WARN_REMOVED_SQL_MODE 13249
-#define ER_IB_MSG_FAILED_TO_ALLOCATE_WAIT 13250
-//#define OBSOLETE_ER_IB_MSG_NUM_POOLS 13251
-#define ER_IB_MSG_USING_UNDO_SPACE 13252
-#define ER_IB_MSG_FAIL_TO_SAVE_SPACE_STATE 13253
-#define ER_IB_MSG_MAX_UNDO_SPACES_REACHED 13254
-#define ER_IB_MSG_ERROR_OPENING_NEW_UNDO_SPACE 13255
-#define ER_IB_MSG_FAILED_SDI_Z_BUF_ERROR 13256
-#define ER_IB_MSG_FAILED_SDI_Z_MEM_ERROR 13257
-#define ER_IB_MSG_SDI_Z_STREAM_ERROR 13258
-#define ER_IB_MSG_SDI_Z_UNKNOWN_ERROR 13259
-#define ER_IB_MSG_FOUND_WRONG_UNDO_SPACE 13260
-#define ER_IB_MSG_NOT_END_WITH_IBU 13261
-//#define OBSOLETE_ER_IB_MSG_UNDO_TRUNCATE_EMPTY_FILE 13262
-//#define OBSOLETE_ER_IB_MSG_UNDO_INJECT_BEFORE_DD_UPDATE 13263
-//#define OBSOLETE_ER_IB_MSG_UNDO_INJECT_BEFORE_UNDO_LOGGING 13264
-//#define OBSOLETE_ER_IB_MSG_UNDO_INJECT_BEFORE_RSEG 13265
-#define ER_IB_MSG_FAILED_TO_FINISH_TRUNCATE 13266
-#define ER_IB_MSG_DEPRECATED_INNODB_UNDO_TABLESPACES 13267
-#define ER_IB_MSG_WRONG_TABLESPACE_DIR 13268
-#define ER_IB_MSG_LOCK_FREE_HASH_USAGE_STATS 13269
-#define ER_CLONE_DONOR_TRACE 13270
-#define ER_CLONE_PROTOCOL_TRACE 13271
-#define ER_CLONE_CLIENT_TRACE 13272
-#define ER_CLONE_SERVER_TRACE 13273
-#define ER_THREAD_POOL_PFS_TABLES_INIT_FAILED 13274
-#define ER_THREAD_POOL_PFS_TABLES_ADD_FAILED 13275
-#define ER_CANT_SET_DATA_DIR 13276
-#define ER_INNODB_INVALID_INNODB_UNDO_DIRECTORY_LOCATION 13277
-#define ER_SERVER_RPL_ENCRYPTION_FAILED_TO_FETCH_KEY 13278
-#define ER_SERVER_RPL_ENCRYPTION_KEY_NOT_FOUND 13279
-#define ER_SERVER_RPL_ENCRYPTION_KEYRING_INVALID_KEY 13280
-#define ER_SERVER_RPL_ENCRYPTION_HEADER_ERROR 13281
-#define ER_SERVER_RPL_ENCRYPTION_FAILED_TO_ROTATE_LOGS 13282
-#define ER_SERVER_RPL_ENCRYPTION_KEY_EXISTS_UNEXPECTED 13283
-#define ER_SERVER_RPL_ENCRYPTION_FAILED_TO_GENERATE_KEY 13284
-#define ER_SERVER_RPL_ENCRYPTION_FAILED_TO_STORE_KEY 13285
-#define ER_SERVER_RPL_ENCRYPTION_FAILED_TO_REMOVE_KEY 13286
-#define ER_SERVER_RPL_ENCRYPTION_MASTER_KEY_RECOVERY_FAILED 13287
-#define ER_SERVER_RPL_ENCRYPTION_UNABLE_TO_INITIALIZE 13288
-#define ER_SERVER_RPL_ENCRYPTION_UNABLE_TO_ROTATE_MASTER_KEY_AT_STARTUP 13289
-#define ER_SERVER_RPL_ENCRYPTION_IGNORE_ROTATE_MASTER_KEY_AT_STARTUP 13290
-#define ER_INVALID_ADMIN_ADDRESS 13291
-#define ER_SERVER_STARTUP_ADMIN_INTERFACE 13292
-#define ER_CANT_CREATE_ADMIN_THREAD 13293
-#define ER_WARNING_RETAIN_CURRENT_PASSWORD_CLAUSE_VOID 13294
-#define ER_WARNING_DISCARD_OLD_PASSWORD_CLAUSE_VOID 13295
-//#define OBSOLETE_ER_SECOND_PASSWORD_CANNOT_BE_EMPTY 13296
-//#define OBSOLETE_ER_PASSWORD_CANNOT_BE_RETAINED_ON_PLUGIN_CHANGE 13297
-//#define OBSOLETE_ER_CURRENT_PASSWORD_CANNOT_BE_RETAINED 13298
-#define ER_WARNING_AUTHCACHE_INVALID_USER_ATTRIBUTES 13299
-#define ER_MYSQL_NATIVE_PASSWORD_SECOND_PASSWORD_USED_INFORMATION 13300
-#define ER_SHA256_PASSWORD_SECOND_PASSWORD_USED_INFORMATION 13301
-#define ER_CACHING_SHA2_PASSWORD_SECOND_PASSWORD_USED_INFORMATION 13302
-#define ER_GRP_RPL_SEND_TRX_PREPARED_MESSAGE_FAILED 13303
-#define ER_GRP_RPL_RELEASE_COMMIT_AFTER_GROUP_PREPARE_FAILED 13304
-#define ER_GRP_RPL_TRX_ALREADY_EXISTS_ON_TCM_ON_AFTER_CERTIFICATION 13305
-#define ER_GRP_RPL_FAILED_TO_INSERT_TRX_ON_TCM_ON_AFTER_CERTIFICATION 13306
-#define ER_GRP_RPL_REGISTER_TRX_TO_WAIT_FOR_GROUP_PREPARE_FAILED 13307
-#define ER_GRP_RPL_TRX_WAIT_FOR_GROUP_PREPARE_FAILED 13308
-#define ER_GRP_RPL_TRX_DOES_NOT_EXIST_ON_TCM_ON_HANDLE_REMOTE_PREPARE 13309
-#define ER_GRP_RPL_RELEASE_BEGIN_TRX_AFTER_DEPENDENCIES_COMMIT_FAILED 13310
-#define ER_GRP_RPL_REGISTER_TRX_TO_WAIT_FOR_DEPENDENCIES_FAILED 13311
-#define ER_GRP_RPL_WAIT_FOR_DEPENDENCIES_FAILED 13312
-#define ER_GRP_RPL_REGISTER_TRX_TO_WAIT_FOR_SYNC_BEFORE_EXECUTION_FAILED 13313
-#define ER_GRP_RPL_SEND_TRX_SYNC_BEFORE_EXECUTION_FAILED 13314
-#define ER_GRP_RPL_TRX_WAIT_FOR_SYNC_BEFORE_EXECUTION_FAILED 13315
-#define ER_GRP_RPL_RELEASE_BEGIN_TRX_AFTER_WAIT_FOR_SYNC_BEFORE_EXEC 13316
-#define ER_GRP_RPL_TRX_WAIT_FOR_GROUP_GTID_EXECUTED 13317
-//#define OBSOLETE_ER_UNIT_NOT_FOUND 13318
-//#define OBSOLETE_ER_GEOMETRY_IN_UNKNOWN_LENGTH_UNIT 13319
-#define ER_WARN_PROPERTY_STRING_PARSE_FAILED 13320
-#define ER_INVALID_PROPERTY_KEY 13321
-#define ER_GRP_RPL_GTID_SET_EXTRACT_ERROR_DURING_RECOVERY 13322
-#define ER_SERVER_RPL_ENCRYPTION_FAILED_TO_ENCRYPT 13323
-#define ER_CANNOT_GET_SERVER_VERSION_FROM_TABLESPACE_HEADER 13324
-#define ER_CANNOT_SET_SERVER_VERSION_IN_TABLESPACE_HEADER 13325
-#define ER_SERVER_UPGRADE_VERSION_NOT_SUPPORTED 13326
-#define ER_SERVER_UPGRADE_FROM_VERSION 13327
-#define ER_GRP_RPL_ERROR_ON_CERT_DB_INSTALL 13328
-#define ER_GRP_RPL_FORCE_MEMBERS_WHEN_LEAVING 13329
-#define ER_TRG_WRONG_ORDER 13330
-//#define OBSOLETE_ER_SECONDARY_ENGINE_PLUGIN 13331
-#define ER_LDAP_AUTH_GRP_SEARCH_NOT_SPECIAL_HDL 13332
-#define ER_LDAP_AUTH_GRP_USER_OBJECT_HAS_GROUP_INFO 13333
-#define ER_LDAP_AUTH_GRP_INFO_FOUND_IN_MANY_OBJECTS 13334
-#define ER_LDAP_AUTH_GRP_INCORRECT_ATTRIBUTE 13335
-#define ER_LDAP_AUTH_GRP_NULL_ATTRIBUTE_VALUE 13336
-#define ER_LDAP_AUTH_GRP_DN_PARSING_FAILED 13337
-#define ER_LDAP_AUTH_GRP_OBJECT_HAS_USER_INFO 13338
-#define ER_LDAP_AUTH_LDAPS 13339
-#define ER_LDAP_MAPPING_GET_USER_PROXY 13340
-#define ER_LDAP_MAPPING_USER_DONT_BELONG_GROUP 13341
-#define ER_LDAP_MAPPING_INFO 13342
-#define ER_LDAP_MAPPING_EMPTY_MAPPING 13343
-#define ER_LDAP_MAPPING_PROCESS_MAPPING 13344
-#define ER_LDAP_MAPPING_CHECK_DELIMI_QUOTE 13345
-#define ER_LDAP_MAPPING_PROCESS_DELIMITER 13346
-#define ER_LDAP_MAPPING_PROCESS_DELIMITER_EQUAL_NOT_FOUND 13347
-#define ER_LDAP_MAPPING_PROCESS_DELIMITER_TRY_COMMA 13348
-#define ER_LDAP_MAPPING_PROCESS_DELIMITER_COMMA_NOT_FOUND 13349
-#define ER_LDAP_MAPPING_NO_SEPEARATOR_END_OF_GROUP 13350
-#define ER_LDAP_MAPPING_GETTING_NEXT_MAPPING 13351
-#define ER_LDAP_MAPPING_PARSING_CURRENT_STATE 13352
-#define ER_LDAP_MAPPING_PARSING_MAPPING_INFO 13353
-#define ER_LDAP_MAPPING_PARSING_ERROR 13354
-#define ER_LDAP_MAPPING_TRIMMING_SPACES 13355
-#define ER_LDAP_MAPPING_IS_QUOTE 13356
-#define ER_LDAP_MAPPING_NON_DESIRED_STATE 13357
-#define ER_INVALID_NAMED_PIPE_FULL_ACCESS_GROUP 13358
-#define ER_PREPARE_FOR_SECONDARY_ENGINE 13359
-#define ER_SERVER_WARN_DEPRECATED 13360
-#define ER_AUTH_ID_WITH_SYSTEM_USER_PRIV_IN_MANDATORY_ROLES 13361
-#define ER_SERVER_BINLOG_MASTER_KEY_RECOVERY_OUT_OF_COMBINATION 13362
-#define ER_SERVER_BINLOG_MASTER_KEY_ROTATION_FAIL_TO_CLEANUP_AUX_KEY 13363
-//#define OBSOLETE_ER_CANNOT_GRANT_SYSTEM_PRIV_TO_MANDATORY_ROLE 13364
-//#define OBSOLETE_ER_PARTIAL_REVOKE_AND_DB_GRANT_BOTH_EXISTS 13365
-//#define OBSOLETE_ER_DB_ACCESS_DENIED 13366
-//#define OBSOLETE_ER_PARTIAL_REVOKES_EXIST 13367
-#define ER_TURNING_ON_PARTIAL_REVOKES 13368
-#define ER_WARN_PARTIAL_REVOKE_AND_DB_GRANT 13369
-#define ER_WARN_INCORRECT_PRIVILEGE_FOR_DB_RESTRICTIONS 13370
-#define ER_WARN_INVALID_DB_RESTRICTIONS 13371
-#define ER_GRP_RPL_INVALID_COMMUNICATION_PROTOCOL 13372
-#define ER_GRP_RPL_STARTED_AUTO_REJOIN 13373
-#define ER_GRP_RPL_TIMEOUT_RECEIVED_VC_ON_REJOIN 13374
-#define ER_GRP_RPL_FINISHED_AUTO_REJOIN 13375
-#define ER_GRP_RPL_DEFAULT_TABLE_ENCRYPTION_DIFF_FROM_GRP 13376
-#define ER_SERVER_UPGRADE_OFF 13377
-#define ER_SERVER_UPGRADE_SKIP 13378
-#define ER_SERVER_UPGRADE_PENDING 13379
-#define ER_SERVER_UPGRADE_FAILED 13380
-#define ER_SERVER_UPGRADE_STATUS 13381
-#define ER_SERVER_UPGRADE_REPAIR_REQUIRED 13382
-#define ER_SERVER_UPGRADE_REPAIR_STATUS 13383
-#define ER_SERVER_UPGRADE_INFO_FILE 13384
-#define ER_SERVER_UPGRADE_SYS_SCHEMA 13385
-#define ER_SERVER_UPGRADE_MYSQL_TABLES 13386
-#define ER_SERVER_UPGRADE_SYSTEM_TABLES 13387
-#define ER_SERVER_UPGRADE_EMPTY_SYS 13388
-#define ER_SERVER_UPGRADE_NO_SYS_VERSION 13389
-#define ER_SERVER_UPGRADE_SYS_VERSION_EMPTY 13390
-#define ER_SERVER_UPGRADE_SYS_SCHEMA_OUTDATED 13391
-#define ER_SERVER_UPGRADE_SYS_SCHEMA_UP_TO_DATE 13392
-#define ER_SERVER_UPGRADE_SYS_SCHEMA_OBJECT_COUNT 13393
-#define ER_SERVER_UPGRADE_CHECKING_DB 13394
-#define ER_IB_MSG_DDL_LOG_DELETE_BY_ID_TMCT 13395
-#define ER_IB_MSG_POST_RECOVER_DDL_LOG_RECOVER 13396
-#define ER_IB_MSG_POST_RECOVER_POST_TS_ENCRYPT 13397
-#define ER_IB_MSG_DDL_LOG_FAIL_POST_DDL 13398
-#define ER_SERVER_BINLOG_UNSAFE_SYSTEM_FUNCTION 13399
-#define ER_SERVER_UPGRADE_HELP_TABLE_STATUS 13400
-#define ER_GRP_RPL_SRV_GTID_WAIT_ERROR 13401
-#define ER_GRP_DELAYED_VCLE_LOGGING 13402
-//#define OBSOLETE_ER_CANNOT_GRANT_ROLES_TO_ANONYMOUS_USER 13403
-#define ER_BINLOG_UNABLE_TO_ROTATE_GTID_TABLE_READONLY 13404
-#define ER_NETWORK_NAMESPACES_NOT_SUPPORTED 13405
-#define ER_UNKNOWN_NETWORK_NAMESPACE 13406
-#define ER_NETWORK_NAMESPACE_NOT_ALLOWED_FOR_WILDCARD_ADDRESS 13407
-#define ER_SETNS_FAILED 13408
-#define ER_WILDCARD_NOT_ALLOWED_FOR_MULTIADDRESS_BIND 13409
-#define ER_NETWORK_NAMESPACE_FILE_PATH_TOO_LONG 13410
-#define ER_IB_MSG_TOO_LONG_PATH 13411
-#define ER_IB_RECV_FIRST_REC_GROUP_INVALID 13412
-#define ER_DD_UPGRADE_COMPLETED 13413
-#define ER_SSL_SERVER_CERT_VERIFY_FAILED 13414
-#define ER_PERSIST_OPTION_USER_TRUNCATED 13415
-#define ER_PERSIST_OPTION_HOST_TRUNCATED 13416
-#define ER_NET_WAIT_ERROR 13417
-#define ER_IB_MSG_1285 13418
-#define ER_IB_MSG_CLOCK_MONOTONIC_UNSUPPORTED 13419
-#define ER_IB_MSG_CLOCK_GETTIME_FAILED 13420
-#define ER_PLUGIN_NOT_EARLY_DUP 13421
-#define ER_PLUGIN_NO_INSTALL_DUP 13422
-//#define OBSOLETE_ER_WARN_DEPRECATED_SQL_CALC_FOUND_ROWS 13423
-//#define OBSOLETE_ER_WARN_DEPRECATED_FOUND_ROWS 13424
-#define ER_BINLOG_UNSAFE_DEFAULT_EXPRESSION_IN_SUBSTATEMENT 13425
-#define ER_GRP_RPL_MEMBER_VER_READ_COMPATIBLE 13426
-#define ER_LOCK_ORDER_INIT_FAILED 13427
-#define ER_AUDIT_LOG_KEYRING_ID_TIMESTAMP_VALUE_IS_INVALID 13428
-#define ER_AUDIT_LOG_FILE_NAME_TIMESTAMP_VALUE_IS_MISSING_OR_INVALID 13429
-#define ER_AUDIT_LOG_FILE_NAME_DOES_NOT_HAVE_REQUIRED_FORMAT 13430
-#define ER_AUDIT_LOG_FILE_NAME_KEYRING_ID_VALUE_IS_MISSING 13431
-#define ER_AUDIT_LOG_FILE_HAS_BEEN_SUCCESSFULLY_PROCESSED 13432
-#define ER_AUDIT_LOG_COULD_NOT_OPEN_FILE_FOR_READING 13433
-#define ER_AUDIT_LOG_INVALID_FILE_CONTENT 13434
-#define ER_AUDIT_LOG_CANNOT_READ_PASSWORD 13435
-#define ER_AUDIT_LOG_CANNOT_STORE_PASSWORD 13436
-#define ER_AUDIT_LOG_CANNOT_REMOVE_PASSWORD 13437
-#define ER_AUDIT_LOG_PASSWORD_HAS_BEEN_COPIED 13438
-//#define OBSOLETE_ER_AUDIT_LOG_INSUFFICIENT_PRIVILEGE 13439
-//#define OBSOLETE_ER_WRONG_MVI_VALUE 13440
-//#define OBSOLETE_ER_WARN_FUNC_INDEX_NOT_APPLICABLE 13441
-//#define OBSOLETE_ER_EXCEEDED_MV_KEYS_NUM 13442
-//#define OBSOLETE_ER_EXCEEDED_MV_KEYS_SPACE 13443
-//#define OBSOLETE_ER_FUNCTIONAL_INDEX_DATA_IS_TOO_LONG 13444
-//#define OBSOLETE_ER_INVALID_JSON_VALUE_FOR_FUNC_INDEX 13445
-//#define OBSOLETE_ER_JSON_VALUE_OUT_OF_RANGE_FOR_FUNC_INDEX 13446
-#define ER_LDAP_EMPTY_USERDN_PASSWORD 13447
-//#define OBSOLETE_ER_GROUPING_ON_TIMESTAMP_IN_DST 13448
-#define ER_ACL_WRONG_OR_MISSING_ACL_TABLES_LOG 13449
-#define ER_LOCK_ORDER_FAILED_WRITE_FILE 13450
-#define ER_LOCK_ORDER_FAILED_READ_FILE 13451
-#define ER_LOCK_ORDER_MESSAGE 13452
-#define ER_LOCK_ORDER_DEPENDENCIES_SYNTAX 13453
-#define ER_LOCK_ORDER_SCANNER_SYNTAX 13454
-#define ER_DATA_DIRECTORY_UNUSABLE_DELETABLE 13455
-#define ER_IB_MSG_BTREE_LEVEL_LIMIT_EXCEEDED 13456
-#define ER_IB_CLONE_START_STOP 13457
-#define ER_IB_CLONE_OPERATION 13458
-#define ER_IB_CLONE_RESTART 13459
-#define ER_IB_CLONE_USER_DATA 13460
-#define ER_IB_CLONE_NON_INNODB_TABLE 13461
-#define ER_CLONE_SHUTDOWN_TRACE 13462
-#define ER_GRP_RPL_GTID_PURGED_EXTRACT_ERROR 13463
-#define ER_GRP_RPL_CLONE_PROCESS_PREPARE_ERROR 13464
-#define ER_GRP_RPL_CLONE_PROCESS_EXEC_ERROR 13465
-#define ER_GRP_RPL_RECOVERY_EVAL_ERROR 13466
-#define ER_GRP_RPL_NO_POSSIBLE_RECOVERY 13467
-#define ER_GRP_RPL_CANT_KILL_THREAD 13468
-#define ER_GRP_RPL_RECOVERY_STRAT_CLONE_THRESHOLD 13469
-#define ER_GRP_RPL_RECOVERY_STRAT_CLONE_PURGED 13470
-#define ER_GRP_RPL_RECOVERY_STRAT_CHOICE 13471
-#define ER_GRP_RPL_RECOVERY_STRAT_FALLBACK 13472
-#define ER_GRP_RPL_RECOVERY_STRAT_NO_FALLBACK 13473
-#define ER_GRP_RPL_SLAVE_THREAD_ERROR_ON_CLONE 13474
-#define ER_UNKNOWN_TABLE_IN_UPGRADE 13475
-#define ER_IDENT_CAUSES_TOO_LONG_PATH_IN_UPGRADE 13476
-#define ER_XA_CANT_CREATE_MDL_BACKUP 13477
-#define ER_AUDIT_LOG_SUPER_PRIVILEGE_REQUIRED 13478
-#define ER_AUDIT_LOG_UDF_INVALID_ARGUMENT_TYPE 13479
-#define ER_AUDIT_LOG_UDF_INVALID_ARGUMENT_COUNT 13480
-#define ER_AUDIT_LOG_HAS_NOT_BEEN_INSTALLED 13481
-#define ER_AUDIT_LOG_UDF_READ_INVALID_MAX_ARRAY_LENGTH_ARG_TYPE 13482
-#define ER_LOG_CANNOT_WRITE_EXTENDED 13483
-//#define OBSOLETE_ER_UPGRADE_WITH_PARTITIONED_TABLES_REJECTED 13484
-#define ER_KEYRING_AWS_INCORRECT_PROXY 13485
-#define ER_GRP_RPL_SERVER_SET_TO_OFFLINE_MODE_DUE_TO_ERRORS 13486
-#define ER_GRP_RPL_MESSAGE_SERVICE_FATAL_ERROR 13487
-#define ER_WARN_WRONG_COMPRESSION_ALGORITHM_LOG 13488
-#define ER_WARN_WRONG_COMPRESSION_LEVEL_LOG 13489
-#define ER_PROTOCOL_COMPRESSION_RESET_LOG 13490
-#define ER_XPLUGIN_COMPRESSION_ERROR 13491
-#define ER_MYSQLBACKUP_MSG 13492
-#define ER_WARN_UNKNOWN_KEYRING_AWS_REGION 13493
-#define ER_WARN_LOG_PRIVILEGE_CHECKS_USER_DOES_NOT_EXIST 13494
-#define ER_WARN_LOG_PRIVILEGE_CHECKS_USER_CORRUPT 13495
-#define ER_WARN_LOG_PRIVILEGE_CHECKS_USER_NEEDS_RPL_APPLIER_PRIV 13496
-#define ER_OBSOLETE_FILE_PRIVILEGE_FOR_REPLICATION_CHECKS 13497
-#define ER_RPL_SLAVE_SQL_THREAD_STARTING_WITH_PRIVILEGE_CHECKS 13498
-#define ER_AUDIT_LOG_CANNOT_GENERATE_PASSWORD 13499
-#define ER_INIT_FAILED_TO_GENERATE_ROOT_PASSWORD 13500
-#define ER_PLUGIN_LOAD_OPTIONS_IGNORED 13501
-#define ER_WARN_AUTH_ID_WITH_SYSTEM_USER_PRIV_IN_MANDATORY_ROLES 13502
-#define ER_IB_MSG_SKIP_HIDDEN_DIR 13503
-#define ER_WARN_RPL_RECOVERY_NO_ROTATE_EVENT_FROM_MASTER_EOF 13504
-#define ER_IB_LOB_ROLLBACK_INDEX_LEN 13505
-#define ER_CANT_PROCESS_EXPRESSION_FOR_GENERATED_COLUMN_TO_DD 13506
-#define ER_RPL_SLAVE_QUEUE_EVENT_FAILED_INVALID_NON_ROW_FORMAT 13507
-#define ER_OBSOLETE_REQUIRE_ROW_FORMAT_VIOLATION 13508
-#define ER_LOG_PRIV_CHECKS_REQUIRE_ROW_FORMAT_NOT_SET 13509
-#define ER_RPL_SLAVE_SQL_THREAD_DETECTED_UNEXPECTED_EVENT_SEQUENCE 13510
-#define ER_IB_MSG_UPGRADE_PARTITION_FILE 13511
-#define ER_IB_MSG_DOWNGRADE_PARTITION_FILE 13512
-#define ER_IB_MSG_UPGRADE_PARTITION_FILE_IMPORT 13513
-#define ER_IB_WARN_OPEN_PARTITION_FILE 13514
-#define ER_IB_MSG_FIL_STATE_MOVED_CORRECTED 13515
-#define ER_IB_MSG_FIL_STATE_MOVED_CHANGED_PATH 13516
-#define ER_IB_MSG_FIL_STATE_MOVED_CHANGED_NAME 13517
-#define ER_IB_MSG_FIL_STATE_MOVED_TOO_MANY 13518
-#define ER_GR_ELECTED_PRIMARY_GTID_INFORMATION 13519
-#define ER_SCHEMA_NAME_IN_UPPER_CASE_NOT_ALLOWED 13520
-#define ER_TABLE_NAME_IN_UPPER_CASE_NOT_ALLOWED 13521
-#define ER_SCHEMA_NAME_IN_UPPER_CASE_NOT_ALLOWED_FOR_FK 13522
-#define ER_TABLE_NAME_IN_UPPER_CASE_NOT_ALLOWED_FOR_FK 13523
-#define ER_IB_MSG_DICT_PARTITION_NOT_FOUND 13524
-#define ER_ACCESS_DENIED_FOR_USER_ACCOUNT_BLOCKED_BY_PASSWORD_LOCK 13525
-#define ER_INNODB_OUT_OF_RESOURCES 13526
-#define ER_DD_UPGRADE_FOUND_PREPARED_XA_TRANSACTION 13527
-#define ER_MIGRATE_TABLE_TO_DD_OOM 13528
-#define ER_RPL_RELAY_LOG_RECOVERY_INFO_AFTER_CLONE 13529
-#define ER_IB_MSG_57_UNDO_SPACE_DELETE_FAIL 13530
-#define ER_IB_MSG_DBLWR_1285 13531
-#define ER_IB_MSG_DBLWR_1286 13532
-#define ER_IB_MSG_DBLWR_1287 13533
-#define ER_IB_MSG_DBLWR_1288 13534
-#define ER_IB_MSG_DBLWR_1290 13535
-#define ER_IB_MSG_BAD_DBLWR_FILE_NAME 13536
-//#define OBSOLETE_ER_IB_MSG_DBLWR_1292 13537
-#define ER_IB_MSG_DBLWR_1293 13538
-#define ER_IB_MSG_DBLWR_1294 13539
-#define ER_IB_MSG_DBLWR_1295 13540
-#define ER_IB_MSG_DBLWR_1296 13541
-#define ER_IB_MSG_DBLWR_1297 13542
-#define ER_IB_MSG_DBLWR_1298 13543
-#define ER_IB_MSG_DBLWR_1300 13544
-#define ER_IB_MSG_DBLWR_1301 13545
-#define ER_IB_MSG_DBLWR_1304 13546
-#define ER_IB_MSG_DBLWR_1305 13547
-#define ER_IB_MSG_DBLWR_1306 13548
-#define ER_IB_MSG_DBLWR_1307 13549
-#define ER_IB_MSG_DBLWR_1308 13550
-#define ER_IB_MSG_DBLWR_1309 13551
-#define ER_IB_MSG_DBLWR_1310 13552
-#define ER_IB_MSG_DBLWR_1311 13553
-#define ER_IB_MSG_DBLWR_1312 13554
-#define ER_IB_MSG_DBLWR_1313 13555
-#define ER_IB_MSG_DBLWR_1314 13556
-#define ER_IB_MSG_DBLWR_1315 13557
-#define ER_IB_MSG_DBLWR_1316 13558
-#define ER_IB_MSG_DBLWR_1317 13559
-#define ER_IB_MSG_DBLWR_1318 13560
-#define ER_IB_MSG_DBLWR_1319 13561
-#define ER_IB_MSG_DBLWR_1320 13562
-#define ER_IB_MSG_DBLWR_1321 13563
-#define ER_IB_MSG_DBLWR_1322 13564
-#define ER_IB_MSG_DBLWR_1323 13565
-#define ER_IB_MSG_DBLWR_1324 13566
-#define ER_IB_MSG_DBLWR_1325 13567
-#define ER_IB_MSG_DBLWR_1326 13568
-#define ER_IB_MSG_DBLWR_1327 13569
-#define ER_IB_MSG_GTID_FLUSH_AT_SHUTDOWN 13570
-#define ER_IB_MSG_57_STAT_SPACE_DELETE_FAIL 13571
-#define ER_NDBINFO_UPGRADING_SCHEMA 13572
-#define ER_NDBINFO_NOT_UPGRADING_SCHEMA 13573
-#define ER_NDBINFO_UPGRADING_SCHEMA_FAIL 13574
-//#define OBSOLETE_ER_IB_MSG_CREATE_LOG_FILE 13575
-#define ER_IB_MSG_INNODB_START_INITIALIZE 13576
-#define ER_IB_MSG_INNODB_END_INITIALIZE 13577
-#define ER_IB_MSG_PAGE_ARCH_NO_RESET_POINTS 13578
-#define ER_IB_WRN_PAGE_ARCH_FLUSH_DATA 13579
-#define ER_IB_ERR_PAGE_ARCH_INVALID_DOUBLE_WRITE_BUF 13580
-#define ER_IB_ERR_PAGE_ARCH_RECOVERY_FAILED 13581
-#define ER_IB_ERR_PAGE_ARCH_INVALID_FORMAT 13582
-#define ER_INVALID_XPLUGIN_SOCKET_SAME_AS_SERVER 13583
-#define ER_INNODB_UNABLE_TO_ACQUIRE_DD_OBJECT 13584
-#define ER_WARN_LOG_DEPRECATED_PARTITION_PREFIX_KEY 13585
-#define ER_IB_MSG_UNDO_TRUNCATE_TOO_OFTEN 13586
-#define ER_GRP_RPL_IS_STARTING 13587
-#define ER_IB_MSG_INVALID_LOCATION_FOR_TABLESPACE 13588
-#define ER_IB_MSG_INVALID_LOCATION_WRONG_DB 13589
-#define ER_IB_MSG_CANNOT_FIND_DD_UNDO_SPACE 13590
-#define ER_GRP_RPL_RECOVERY_ENDPOINT_FORMAT 13591
-#define ER_GRP_RPL_RECOVERY_ENDPOINT_INVALID 13592
-#define ER_GRP_RPL_RECOVERY_ENDPOINT_INVALID_DONOR_ENDPOINT 13593
-#define ER_GRP_RPL_RECOVERY_ENDPOINT_INTERFACES_IPS 13594
-#define ER_WARN_TLS_CHANNEL_INITIALIZATION_ERROR 13595
-#define ER_XPLUGIN_FAILED_TO_VALIDATE_ADDRESS 13596
-#define ER_XPLUGIN_FAILED_TO_BIND_INTERFACE_ADDRESS 13597
-#define ER_IB_ERR_RECOVERY_REDO_DISABLED 13598
-#define ER_IB_WRN_FAST_SHUTDOWN_REDO_DISABLED 13599
-#define ER_IB_WRN_REDO_DISABLED 13600
-#define ER_IB_WRN_REDO_ENABLED 13601
-#define ER_TLS_CONFIGURED_FOR_CHANNEL 13602
-#define ER_TLS_CONFIGURATION_REUSED 13603
-#define ER_IB_TABLESPACE_PATH_VALIDATION_SKIPPED 13604
-#define ER_IB_CANNOT_UPGRADE_WITH_DISCARDED_TABLESPACES 13605
-#define ER_USERNAME_TRUNKATED 13606
-#define ER_HOSTNAME_TRUNKATED 13607
-#define ER_IB_MSG_TRX_RECOVERY_ROLLBACK_NOT_COMPLETED 13608
-#define ER_AUTHCACHE_ROLE_EDGES_IGNORED_EMPTY_NAME 13609
-#define ER_AUTHCACHE_ROLE_EDGES_UNKNOWN_AUTHORIZATION_ID 13610
-#define ER_AUTHCACHE_DEFAULT_ROLES_IGNORED_EMPTY_NAME 13611
-#define ER_AUTHCACHE_DEFAULT_ROLES_UNKNOWN_AUTHORIZATION_ID 13612
-#define ER_IB_ERR_DDL_LOG_INSERT_FAILURE 13613
-#define ER_IB_LOCK_VALIDATE_LATCH_ORDER_VIOLATION 13614
-#define ER_IB_RELOCK_LATCH_ORDER_VIOLATION 13615
-//#define OBSOLETE_ER_IB_MSG_1352 13616
-//#define OBSOLETE_ER_IB_MSG_1353 13617
-//#define OBSOLETE_ER_IB_MSG_1354 13618
-//#define OBSOLETE_ER_IB_MSG_1355 13619
-//#define OBSOLETE_ER_IB_MSG_1356 13620
-#define ER_IB_MSG_1357 13621
-#define ER_IB_MSG_1358 13622
-#define ER_IB_MSG_1359 13623
-#define ER_IB_FAILED_TO_DELETE_TABLESPACE_FILE 13624
-#define ER_IB_UNABLE_TO_EXPAND_TEMPORARY_TABLESPACE_POOL 13625
-#define ER_IB_TMP_TABLESPACE_CANNOT_CREATE_DIRECTORY 13626
-#define ER_IB_MSG_SCANNING_TEMP_TABLESPACE_DIR 13627
-#define ER_IB_ERR_TEMP_TABLESPACE_DIR_DOESNT_EXIST 13628
-#define ER_IB_ERR_TEMP_TABLESPACE_DIR_EMPTY 13629
-#define ER_IB_ERR_TEMP_TABLESPACE_DIR_CONTAINS_SEMICOLON 13630
-#define ER_IB_ERR_TEMP_TABLESPACE_DIR_SUBDIR_OF_DATADIR 13631
-#define ER_IB_ERR_SCHED_SETAFFNINITY_FAILED 13632
-#define ER_IB_ERR_UNKNOWN_PAGE_FETCH_MODE 13633
-#define ER_IB_ERR_LOG_PARSING_BUFFER_OVERFLOW 13634
-#define ER_IB_ERR_NOT_ENOUGH_MEMORY_FOR_PARSE_BUFFER 13635
-#define ER_IB_MSG_1372 13636
-#define ER_IB_MSG_1373 13637
-#define ER_IB_MSG_1374 13638
-#define ER_IB_MSG_1375 13639
-#define ER_IB_ERR_ZLIB_UNCOMPRESS_FAILED 13640
-#define ER_IB_ERR_ZLIB_BUF_ERROR 13641
-#define ER_IB_ERR_ZLIB_MEM_ERROR 13642
-#define ER_IB_ERR_ZLIB_DATA_ERROR 13643
-#define ER_IB_ERR_ZLIB_UNKNOWN_ERROR 13644
-#define ER_IB_MSG_1381 13645
-#define ER_IB_ERR_INDEX_RECORDS_WRONG_ORDER 13646
-#define ER_IB_ERR_INDEX_DUPLICATE_KEY 13647
-#define ER_IB_ERR_FOUND_N_DUPLICATE_KEYS 13648
-#define ER_IB_ERR_FOUND_N_RECORDS_WRONG_ORDER 13649
-#define ER_IB_ERR_PARALLEL_READ_OOM 13650
-#define ER_IB_MSG_UNDO_MARKED_ACTIVE 13651
-#define ER_IB_MSG_UNDO_ALTERED_ACTIVE 13652
-#define ER_IB_MSG_UNDO_ALTERED_INACTIVE 13653
-#define ER_IB_MSG_UNDO_MARKED_EMPTY 13654
-#define ER_IB_MSG_UNDO_TRUNCATE_DELAY_BY_CLONE 13655
-#define ER_IB_MSG_UNDO_TRUNCATE_DELAY_BY_MDL 13656
-#define ER_IB_MSG_INJECT_CRASH 13657
-#define ER_IB_MSG_INJECT_FAILURE 13658
-#define ER_GRP_RPL_TIMEOUT_RECEIVED_VC_LEAVE_ON_REJOIN 13659
-#define ER_RPL_ASYNC_RECONNECT_FAIL_NO_SOURCE 13660
-#define ER_UDF_REGISTER_SERVICE_ERROR 13661
-#define ER_UDF_REGISTER_ERROR 13662
-#define ER_UDF_UNREGISTER_ERROR 13663
-#define ER_EMPTY_PRIVILEGE_NAME_IGNORED 13664
-#define ER_IB_MSG_INCORRECT_SIZE 13665
-#define ER_TMPDIR_PATH_TOO_LONG 13666
-#define ER_ERROR_LOG_DESTINATION_NOT_A_FILE 13667
-#define ER_NO_ERROR_LOG_PARSER_CONFIGURED 13668
-#define ER_UPGRADE_NONEXISTENT_SCHEMA 13669
-#define ER_IB_MSG_CREATED_UNDO_SPACE 13670
-#define ER_IB_MSG_DROPPED_UNDO_SPACE 13671
-#define ER_IB_MSG_MASTER_KEY_ROTATED 13672
-#define ER_IB_DBLWR_DECOMPRESS_FAILED 13673
-#define ER_IB_DBLWR_DECRYPT_FAILED 13674
-#define ER_IB_DBLWR_KEY_MISSING 13675
-#define ER_INNODB_IO_WRITE_ERROR_RETRYING 13676
-#define ER_INNODB_IO_WRITE_FAILED 13677
-#define ER_LOG_COMPONENT_CANNOT_INIT 13678
-#define ER_RPL_ASYNC_CHANNEL_CANT_CONNECT 13679
-#define ER_RPL_ASYNC_SENDER_ADDED 13680
-#define ER_RPL_ASYNC_SENDER_REMOVED 13681
-#define ER_RPL_ASYNC_CHANNEL_STOPPED_QUORUM_LOST 13682
-#define ER_RPL_ASYNC_CHANNEL_CANT_CONNECT_NO_QUORUM 13683
-#define ER_RPL_ASYNC_EXECUTING_QUERY 13684
-#define ER_RPL_REPLICA_MONITOR_IO_THREAD_EXITING 13685
-#define ER_RPL_ASYNC_MANAGED_NAME_REMOVED 13686
-#define ER_RPL_ASYNC_MANAGED_NAME_ADDED 13687
-#define ER_RPL_ASYNC_READ_FAILOVER_TABLE 13688
-#define ER_RPL_REPLICA_MONITOR_IO_THREAD_RECONNECT_CHANNEL 13689
-#define ER_SLAVE_ANONYMOUS_TO_GTID_IS_LOCAL_OR_UUID_AND_GTID_MODE_NOT_ON 13690
-#define ER_REPLICA_ANONYMOUS_TO_GTID_UUID_SAME_AS_GROUP_NAME 13691
-#define ER_GRP_RPL_GRP_NAME_IS_SAME_AS_ANONYMOUS_TO_GTID_UUID 13692
-#define ER_WARN_GTID_THRESHOLD_BREACH 13693
-#define ER_HEALTH_INFO 13694
-#define ER_HEALTH_WARNING 13695
-#define ER_HEALTH_ERROR 13696
-#define ER_HEALTH_WARNING_DISK_USAGE_LEVEL_1 13697
-#define ER_HEALTH_WARNING_DISK_USAGE_LEVEL_2 13698
-#define ER_HEALTH_WARNING_DISK_USAGE_LEVEL_3 13699
-#define ER_IB_INNODB_TBSP_OUT_OF_SPACE 13700
-#define ER_GRP_RPL_APPLIER_CHANNEL_STILL_RUNNING 13701
-#define ER_RPL_ASYNC_RECONNECT_GTID_MODE_OFF_CHANNEL 13702
-#define ER_FIREWALL_SERVICES_NOT_ACQUIRED 13703
-#define ER_FIREWALL_UDF_REGISTER_FAILED 13704
-#define ER_FIREWALL_PFS_TABLE_REGISTER_FAILED 13705
-#define ER_IB_MSG_STATS_SAMPLING_TOO_LARGE 13706
-#define ER_AUDIT_LOG_FILE_PRUNE_FAILED 13707
-#define ER_AUDIT_LOG_FILE_AUTO_PRUNED 13708
-#define ER_COMPONENTS_INFRASTRUCTURE_MANIFEST_INIT 13709
-#define ER_COMPONENTS_INFRASTRUCTURE_MANIFEST_DEINIT 13710
-#define ER_WARN_COMPONENTS_INFRASTRUCTURE_MANIFEST_NOT_RO 13711
-#define ER_WARN_NO_KEYRING_COMPONENT_SERVICE_FOUND 13712
-#define ER_NOTE_KEYRING_COMPONENT_INITIALIZED 13713
-#define ER_KEYRING_COMPONENT_NOT_INITIALIZED 13714
-#define ER_KEYRING_COMPONENT_EXCEPTION 13715
-#define ER_KEYRING_COMPONENT_MEMORY_ALLOCATION_ERROR 13716
-#define ER_NOTE_KEYRING_COMPONENT_AES_INVALID_MODE_BLOCK_SIZE 13717
-#define ER_NOTE_KEYRING_COMPONENT_AES_DATA_IDENTIFIER_EMPTY 13718
-#define ER_NOTE_KEYRING_COMPONENT_AES_INVALID_KEY 13719
-#define ER_NOTE_KEYRING_COMPONENT_AES_OPERATION_ERROR 13720
-#define ER_NOTE_KEYRING_COMPONENT_READ_DATA_NOT_FOUND 13721
-#define ER_NOTE_KEYRING_COMPONENT_WRITE_MAXIMUM_DATA_LENGTH 13722
-#define ER_NOTE_KEYRING_COMPONENT_STORE_FAILED 13723
-#define ER_NOTE_KEYRING_COMPONENT_REMOVE_FAILED 13724
-#define ER_NOTE_KEYRING_COMPONENT_GENERATE_FAILED 13725
-#define ER_NOTE_KEYRING_COMPONENT_KEYS_METADATA_ITERATOR_FETCH_FAILED 13726
-#define ER_NOTE_KEYRING_COMPONENT_METADATA_ITERATOR_INVALID_OUT_PARAM 13727
-#define ER_IB_WRN_FAILED_TO_ACQUIRE_SERVICE 13728
-#define ER_IB_WRN_OLD_GEOMETRY_TYPE 13729
-#define ER_NET_WAIT_ERROR2 13730
-#define ER_GRP_RPL_MEMBER_ACTION_TRIGGERED 13731
-#define ER_GRP_RPL_MEMBER_ACTION_FAILURE_IGNORE 13732
-#define ER_GRP_RPL_MEMBER_ACTION_FAILURE 13733
-#define ER_GRP_RPL_MEMBER_ACTION_PARSE_ON_RECEIVE 13734
-#define ER_GRP_RPL_MEMBER_ACTION_UPDATE_ACTIONS 13735
-#define ER_GRP_RPL_MEMBER_ACTION_GET_EXCHANGEABLE_DATA 13736
-#define ER_GRP_RPL_MEMBER_ACTION_DEFAULT_CONFIGURATION 13737
-#define ER_GRP_RPL_MEMBER_ACTION_UNABLE_TO_SET_DEFAULT_CONFIGURATION 13738
-#define ER_GRP_RPL_MEMBER_ACTION_PARSE_ON_MEMBER_JOIN 13739
-#define ER_GRP_RPL_MEMBER_ACTION_UPDATE_ACTIONS_ON_MEMBER_JOIN 13740
-#define ER_GRP_RPL_MEMBER_ACTION_INVALID_ACTIONS_ON_MEMBER_JOIN 13741
-#define ER_GRP_RPL_MEMBER_ACTION_ENABLED 13742
-#define ER_GRP_RPL_MEMBER_ACTION_DISABLED 13743
-#define ER_GRP_RPL_MEMBER_ACTIONS_RESET 13744
-//#define OBSOLETE_ER_DEPRECATED_TLS_VERSION_SESSION 13745
-//#define OBSOLETE_ER_WARN_DEPRECATED_TLS_VERSION_FOR_CHANNEL 13746
-#define ER_FIREWALL_DEPRECATED_USER_PROFILE 13747
-#define ER_GRP_RPL_VIEW_CHANGE_UUID_INVALID 13748
-#define ER_GRP_RPL_VIEW_CHANGE_UUID_SAME_AS_GROUP_NAME 13749
-#define ER_GRP_RPL_GROUP_NAME_SAME_AS_VIEW_CHANGE_UUID 13750
-#define ER_GRP_RPL_VIEW_CHANGE_UUID_IS_SAME_AS_ANONYMOUS_TO_GTID_UUID 13751
-#define ER_GRP_RPL_GRP_VIEW_CHANGE_UUID_IS_INCOMPATIBLE_WITH_SERVER_UUID 13752
-#define ER_GRP_RPL_VIEW_CHANGE_UUID_DIFF_FROM_GRP 13753
-#define ER_WARN_REPLICA_ANONYMOUS_TO_GTID_UUID_SAME_AS_VIEW_CHANGE_UUID 13754
-#define ER_GRP_RPL_FAILED_TO_PARSE_THE_VIEW_CHANGE_UUID 13755
-#define ER_GRP_RPL_FAILED_TO_GENERATE_SIDNO_FOR_VIEW_CHANGE_UUID 13756
-#define ER_GRP_RPL_VIEW_CHANGE_UUID_PARSE_ERROR 13757
-#define ER_GRP_RPL_UPDATE_GRPGTID_VIEW_CHANGE_UUID_EXECUTED_ERROR 13758
-#define ER_GRP_RPL_ADD_VIEW_CHANGE_UUID_TO_GRP_SID_MAP_ERROR 13759
-#define ER_GRP_RPL_DONOR_VIEW_CHANGE_UUID_TRANS_INFO_ERROR 13760
-#define ER_WARN_GRP_RPL_VIEW_CHANGE_UUID_FAIL_GET_VARIABLE 13761
-#define ER_WARN_ADUIT_LOG_MAX_SIZE_AND_PRUNE_SECONDS_LOG 13762
-#define ER_WARN_ADUIT_LOG_MAX_SIZE_CLOSE_TO_ROTATE_ON_SIZE_LOG 13763
-#define ER_PLUGIN_INVALID_TABLE_DEFINITION 13764
-#define ER_AUTH_KERBEROS_LOGGER_GENERIC_MSG 13765
-#define ER_INSTALL_PLUGIN_CONFLICT_LOG 13766
-#define ER_DEPRECATED_PERSISTED_VARIABLE_WITH_ALIAS 13767
-#define ER_LOG_COMPONENT_FLUSH_FAILED 13768
-#define ER_IB_MSG_REENCRYPTED_TABLESPACE_KEY 13769
-#define ER_IB_MSG_REENCRYPTED_GENERAL_TABLESPACE_KEY 13770
-#define ER_IB_ERR_PAGE_ARCH_DBLWR_INIT_FAILED 13771
-#define ER_IB_MSG_RECOVERY_NO_SPACE_IN_REDO_LOG__SKIP_IBUF_MERGES 13772
-#define ER_IB_MSG_RECOVERY_NO_SPACE_IN_REDO_LOG__UNEXPECTED 13773
-#define ER_WARN_AUDIT_LOG_FORMAT_UNIX_TIMESTAMP_ONLY_WHEN_JSON_LOG 13774
-#define ER_PREPARE_FOR_PRIMARY_ENGINE 13775
-#define ER_IB_MSG_PAR_RSEG_INIT_COMPLETE_MSG 13776
-#define ER_IB_MSG_PAR_RSEG_INIT_TIME_MSG 13777
-#define ER_DDL_MSG_1 13778
-#define ER_MTR_MSG_1 13779
-#define ER_GRP_RPL_MYSQL_NETWORK_PROVIDER_CLIENT_ERROR_CONN_ERR 13780
-#define ER_GRP_RPL_MYSQL_NETWORK_PROVIDER_CLIENT_ERROR_COMMAND_ERR 13781
-#define ER_GRP_RPL_FAILOVER_CONF_GET_EXCHANGEABLE_DATA 13782
-#define ER_GRP_RPL_FAILOVER_CONF_DEFAULT_CONFIGURATION 13783
-#define ER_GRP_RPL_FAILOVER_CONF_UNABLE_TO_SET_DEFAULT_CONFIGURATION 13784
-#define ER_GRP_RPL_FAILOVER_CONF_PARSE_ON_MEMBER_JOIN 13785
-#define ER_GRP_RPL_FAILOVER_CONF_CHANNEL_DOES_NOT_EXIST 13786
-#define ER_GRP_RPL_FAILOVER_REGISTER_MESSAGE_LISTENER_SERVICE 13787
-#define ER_GRP_RPL_FAILOVER_PRIMARY_WITHOUT_MAJORITY 13788
-#define ER_GRP_RPL_FAILOVER_PRIMARY_BACK_TO_MAJORITY 13789
-#define ER_RPL_INCREMENTING_MEMBER_ACTION_VERSION 13790
-#define ER_GRP_RPL_SLAVE_THREAD_ERROR_ON_SECONDARY_MEMBER 13791
-#define ER_IB_MSG_CLONE_DDL_NTFN 13792
-#define ER_IB_MSG_CLONE_DDL_APPLY 13793
-#define ER_IB_MSG_CLONE_DDL_INVALIDATE 13794
-#define ER_IB_MSG_UNDO_ENCRYPTION_INFO_LOADED 13795
-#define ER_IB_WRN_ENCRYPTION_INFO_SIZE_MISMATCH 13796
-#define ER_INVALID_AUTHENTICATION_POLICY 13797
-#define ER_AUTHENTICATION_PLUGIN_REGISTRATION_FAILED 13798
-#define ER_AUTHENTICATION_PLUGIN_REGISTRATION_INSUFFICIENT_BUFFER 13799
-#define ER_AUTHENTICATION_PLUGIN_AUTH_DATA_CORRUPT 13800
-#define ER_AUTHENTICATION_PLUGIN_SIGNATURE_CORRUPT 13801
-#define ER_AUTHENTICATION_PLUGIN_VERIFY_SIGNATURE_FAILED 13802
-#define ER_AUTHENTICATION_PLUGIN_OOM 13803
-#define ER_AUTHENTICATION_PLUGIN_LOG 13804
-#define ER_WARN_REPLICA_GTID_ONLY_AND_GTID_MODE_NOT_ON 13805
-#define ER_WARN_L_DISABLE_GTID_ONLY_WITH_SOURCE_AUTO_POS_INVALID_POS 13806
-#define ER_RPL_CANNOT_OPEN_RELAY_LOG 13807
-#define ER_AUTHENTICATION_OCI_PLUGIN_NOT_INITIALIZED 13808
-#define ER_AUTHENTICATION_OCI_PRIVATE_KEY_ERROR 13809
-#define ER_AUTHENTICATION_OCI_DOWNLOAD_PUBLIC_KEY 13810
-#define ER_AUTHENTICATION_OCI_IMDS 13811
-#define ER_AUTHENTICATION_OCI_IAM 13812
-#define ER_AUTHENTICATION_OCI_INVALID_AUTHENTICATION_STRING 13813
-#define ER_AUTHENTICATION_OCI_NO_MATCHING_GROUPS 13814
-#define ER_AUTHENTICATION_OCI_NO_GROUPS_FOUND 13815
-#define ER_AUTHENTICATION_OCI_NONCE 13816
-#define ER_HEALTH_WARNING_MEMORY_USAGE_LEVEL_1 13817
-#define ER_HEALTH_WARNING_MEMORY_USAGE_LEVEL_2 13818
-#define ER_HEALTH_WARNING_MEMORY_USAGE_LEVEL_3 13819
-#define ER_GRP_RPL_SET_SINGLE_CONSENSUS_LEADER 13820
-#define ER_GRP_RPL_ERROR_SET_SINGLE_CONSENSUS_LEADER 13821
-#define ER_GRP_RPL_SET_MULTI_CONSENSUS_LEADER 13822
-#define ER_GRP_RPL_ERROR_SET_MULTI_CONSENSUS_LEADER 13823
-#define ER_GRP_RPL_PAXOS_SINGLE_LEADER_DIFF_FROM_GRP 13824
-#define ER_MFA_USER_ATTRIBUTES_CORRUPT 13825
-#define ER_MFA_PLUGIN_NOT_LOADED 13826
-#define ER_WARN_DEPRECATED_CHARSET_OPTION 13827
-#define ER_WARN_DEPRECATED_COLLATION_OPTION 13828
-#define ER_REGEXP_MISSING_ICU_DATADIR 13829
-#define ER_IB_WARN_MANY_NON_LRU_FILES_OPENED 13830
-#define ER_IB_MSG_TRYING_TO_OPEN_FILE_FOR_LONG_TIME 13831
-#define ER_GLOBAL_CONN_LIMIT 13832
-#define ER_CONN_LIMIT 13833
-#define ER_WARN_AUDIT_LOG_DISABLED 13834
-#define ER_INVALID_TLS_VERSION 13835
-#define ER_RPL_RELAY_LOG_RECOVERY_GTID_ONLY 13836
-#define ER_KEYRING_OKV_STANDBY_SERVER_COUNT_EXCEEDED 13837
-#define ER_WARN_MIGRATION_EMPTY_SOURCE_KEYRING 13838
-#define ER_WARN_CANNOT_PERSIST_SENSITIVE_VARIABLES 13839
-#define ER_CANNOT_INTERPRET_PERSISTED_SENSITIVE_VARIABLES 13840
-#define ER_PERSISTED_VARIABLES_KEYRING_SUPPORT_REQUIRED 13841
-#define ER_PERSISTED_VARIABLES_MASTER_KEY_NOT_FOUND 13842
-#define ER_PERSISTED_VARIABLES_MASTER_KEY_CANNOT_BE_GENERATED 13843
-#define ER_PERSISTED_VARIABLES_ENCRYPTION_FAILED 13844
-#define ER_PERSISTED_VARIABLES_DECRYPTION_FAILED 13845
-#define ER_PERSISTED_VARIABLES_LACK_KEYRING_SUPPORT 13846
-#define ER_MY_MALLOC_USING_JEMALLOC 13847
-#define ER_MY_MALLOC_USING_STD_MALLOC 13848
-#define ER_MY_MALLOC_LOADLIBRARY_FAILED 13849
-#define ER_MY_MALLOC_GETPROCADDRESS_FAILED 13850
-#define ER_ACCOUNT_WITH_EXPIRED_PASSWORD 13851
-#define ER_THREAD_POOL_PLUGIN_STARTED 13852
-#define ER_THREAD_POOL_DEDICATED_LISTENERS_INVALID 13853
-#define ER_IB_DBLWR_BYTES_INFO 13854
-#define ER_IB_RDBLWR_BYTES_INFO 13855
-#define ER_IB_MSG_LOG_FILE_IS_EMPTY 13856
-#define ER_IB_MSG_LOG_FILE_TOO_SMALL 13857
-#define ER_IB_MSG_LOG_FILE_TOO_BIG 13858
-#define ER_IB_MSG_LOG_FILE_HEADER_READ_FAILED 13859
-#define ER_IB_MSG_LOG_INIT_DIR_NOT_EMPTY_WONT_INITIALIZE 13860
-#define ER_IB_MSG_LOG_INIT_DIR_LIST_FAILED 13861
-#define ER_IB_MSG_LOG_INIT_DIR_MISSING_SUBDIR 13862
-#define ER_IB_MSG_LOG_FILES_CREATED_BY_CLONE_AND_READ_ONLY_MODE 13863
-#define ER_IB_MSG_LOG_WRITER_WRITE_FAILED 13864
-#define ER_IB_MSG_LOG_WRITER_WAIT_ON_NEW_LOG_FILE 13865
-#define ER_IB_MSG_RECOVERY_CHECKPOINT_OUTSIDE_LOG_FILE 13866
-#define ER_IB_MSG_LOG_WRITER_ENTERED_EXTRA_MARGIN 13867
-#define ER_IB_MSG_LOG_WRITER_EXITED_EXTRA_MARGIN 13868
-#define ER_IB_MSG_LOG_PARAMS_FILE_SIZE_UNUSED 13869
-#define ER_IB_MSG_LOG_PARAMS_N_FILES_UNUSED 13870
-#define ER_IB_MSG_LOG_UPGRADE_FORCED_RECV 13871
-#define ER_IB_MSG_LOG_UPGRADE_IN_READ_ONLY_MODE 13872
-#define ER_IB_MSG_LOG_UPGRADE_CLONED_DB 13873
-#define ER_IB_MSG_LOG_UPGRADE_UNINITIALIZED_FILES 13874
-#define ER_IB_MSG_LOG_UPGRADE_CORRUPTION__UNEXPECTED 13875
-#define ER_IB_MSG_LOG_UPGRADE_NON_PERSISTED_DD_METADATA__UNEXPECTED 13876
-#define ER_IB_MSG_LOG_UPGRADE_FLUSH_FAILED__UNEXPECTED 13877
-#define ER_IB_MSG_LOG_FILES_RESIZE_ON_START_FAILED__UNEXPECTED 13878
-#define ER_IB_MSG_LOG_FILE_FOREIGN_UUID 13879
-#define ER_IB_MSG_LOG_FILE_INVALID_START_LSN 13880
-#define ER_IB_MSG_LOG_FILE_INVALID_LSN_RANGES 13881
-#define ER_IB_MSG_LOG_FILE_MISSING_FOR_ID 13882
-#define ER_IB_MSG_LOG_CHECKPOINT_FOUND 13883
-#define ER_IB_MSG_LOG_FILES_CAPACITY_CHANGED 13884
-#define ER_IB_MSG_LOG_FILES_RESIZE_REQUESTED 13885
-#define ER_IB_MSG_LOG_FILES_RESIZE_CANCELLED 13886
-#define ER_IB_MSG_LOG_FILES_RESIZE_FINISHED 13887
-#define ER_IB_MSG_LOG_FILES_UPGRADE 13888
-#define ER_IB_MSG_LOG_FILE_MARK_CURRENT_AS_INCOMPLETE 13889
-#define ER_IB_MSG_LOG_FILE_REMOVE_FAILED 13890
-#define ER_IB_MSG_LOG_FILE_RENAME_ON_CREATE_FAILED 13891
-#define ER_IB_MSG_LOG_FILES_CREATED_BY_UNKNOWN_CREATOR 13892
-#define ER_IB_MSG_LOG_FILES_FOUND_MISSING 13893
-#define ER_IB_MSG_LOG_FILE_FORMAT_TOO_NEW 13894
-#define ER_IB_MSG_LOG_FILE_FORMAT_TOO_OLD 13895
-#define ER_IB_MSG_LOG_FILE_DIFFERENT_FORMATS 13896
-#define ER_IB_MSG_LOG_PRE_8_0_30_MISSING_FILE0 13897
-#define ER_IB_MSG_LOG_PFS_ACQUIRE_SERVICES_FAILED 13898
-#define ER_IB_MSG_LOG_PFS_CREATE_TABLES_FAILED 13899
-#define ER_IB_MSG_LOG_FILE_TRUNCATE 13900
-#define ER_IB_MSG_LOG_FILE_UNUSED_RESIZE_FAILED 13901
-#define ER_IB_MSG_LOG_FILE_UNUSED_REMOVE_FAILED 13902
-#define ER_IB_MSG_LOG_FILE_UNUSED_RENAME_FAILED 13903
-#define ER_IB_MSG_LOG_FILE_UNUSED_MARK_AS_IN_USE_FAILED 13904
-#define ER_IB_MSG_LOG_FILE_MARK_AS_UNUSED_FAILED 13905
-#define ER_IB_MSG_LOG_PARAMS_DEDICATED_SERVER_IGNORED 13906
-#define ER_IB_MSG_LOG_PARAMS_LEGACY_USAGE 13907
-#define ER_GRP_RPL_FAILED_TO_LOG_VIEW_CHANGE 13908
-#define ER_BINLOG_CRASH_RECOVERY_MALFORMED_LOG 13909
-#define ER_BINLOG_CRASH_RECOVERY_ERROR_RETURNED_SE 13910
-#define ER_BINLOG_CRASH_RECOVERY_ENGINE_RESULTS 13911
-#define ER_BINLOG_CRASH_RECOVERY_COMMIT_FAILED 13912
-#define ER_BINLOG_CRASH_RECOVERY_ROLLBACK_FAILED 13913
-#define ER_BINLOG_CRASH_RECOVERY_PREPARE_FAILED 13914
-#define ER_COMPONENT_EE_SYS_VAR_REGISTRATION_FAILURE 13915
-#define ER_COMPONENT_EE_SYS_VAR_DEREGISTRATION_FAILURE 13916
-#define ER_COMPONENT_EE_FUNCTION_REGISTRATION_FAILURE 13917
-#define ER_COMPONENT_EE_FUNCTION_DEREGISTRATION_FAILURE 13918
-#define ER_COMPONENT_EE_FUNCTION_INVALID_ARGUMENTS 13919
-#define ER_COMPONENT_EE_FUNCTION_INVALID_ALGORITHM 13920
-#define ER_COMPONENT_EE_FUNCTION_KEY_LENGTH_OUT_OF_RANGE 13921
-#define ER_COMPONENT_EE_FUNCTION_PRIVATE_KEY_GENERATION_FAILURE 13922
-#define ER_COMPONENT_EE_FUNCTION_PUBLIC_KEY_GENERATION_FAILURE 13923
-#define ER_COMPONENT_EE_DATA_LENGTH_OUT_OF_RAGE 13924
-#define ER_COMPONENT_EE_DATA_ENCRYPTION_ERROR 13925
-#define ER_COMPONENT_EE_DATA_DECRYPTION_ERROR 13926
-#define ER_COMPONENT_EE_DATA_SIGN_ERROR 13927
-#define ER_COMPONENT_EE_OPENSSL_ERROR 13928
-#define ER_COMPONENT_EE_INSUFFICIENT_LENGTH 13929
-#define ER_SYSTEMD_NOTIFY_DEBUG 13930
-#define ER_TMP_SESSION_FOR_VAR 13931
-#define ER_BUILD_ID 13932
-#define ER_THREAD_POOL_CANNOT_REGISTER_DYNAMIC_PRIVILEGE 13933
-#define ER_IB_MSG_LOG_WRITER_WAIT_ON_CONSUMER 13934
-#define ER_CONDITIONAL_DEBUG 13935
-#define ER_IB_MSG_PARSE_OLD_REDO_INDEX_VERSION 13936
-#define ER_RES_GRP_FAILED_TO_SWITCH_RESOURCE_GROUP 13937
-#define ER_RES_GRP_SWITCH_FAILED_COULD_NOT_ACQUIRE_GLOBAL_LOCK 13938
-#define ER_RES_GRP_SWITCH_FAILED_COULD_NOT_ACQUIRE_LOCK 13939
-#define ER_RES_GRP_SWITCH_FAILED_UNABLE_TO_APPLY_RES_GRP 13940
-#define ER_IB_MSG_CLEAR_INSTANT_DROP_COLUMN_METADATA 13941
-#define ER_COMPONENT_KEYRING_OCI_OPEN_KEY_FILE 13942
-#define ER_COMPONENT_KEYRING_OCI_CREATE_PRIVATE_KEY 13943
-#define ER_COMPONENT_KEYRING_OCI_READ_KEY_FILE 13944
-#define ER_NOTE_COMPONENT_KEYRING_OCI_MISSING_NAME_OR_TYPE 13945
-#define ER_WARN_COMPONENT_KEYRING_OCI_DUPLICATE_KEY 13946
-#define ER_KEYRING_OCI_PARSE_JSON 13947
-#define ER_KEYRING_OCI_INVALID_JSON 13948
-#define ER_KEYRING_OCI_HTTP_REQUEST 13949
-#define ER_THREAD_POOL_SYSVAR_CHANGE 13950
-#define ER_STACK_BACKTRACE 13951
-#define ER_IB_MSG_BUF_POOL_RESIZE_COMPLETE_CUR_CODE 13952
-#define ER_IB_MSG_BUF_POOL_RESIZE_PROGRESS_UPDATE 13953
-#define ER_IB_MSG_BUF_POOL_RESIZE_CODE_STATUS 13954
-#define ER_THREAD_POOL_QUERY_THREADS_PER_GROUP_INVALID 13955
-#define ER_THREAD_POOL_QUERY_THRS_PER_GRP_EXCEEDS_TXN_THR_LIMIT 13956
-static const int obsolete_error_count = 532;
-
-static const int pfs_no_error_stat_count = 2;
-
-static const int pfs_session_error_stat_count = 1599;
-
-static const int pfs_global_error_stat_count = 3575;
-
+#define ER_DEPRECATED_TLS_VERSION_SESSION 3232
+#define ER_WARN_DEPRECATED_TLS_VERSION 3233
+#define ER_WARN_WRONG_NATIVE_TABLE_STRUCTURE 3234
#endif
diff --git a/db/include/mysqlx_ername.h b/db/include/mysqlx_ername.h
index b4a3205..3a4267d 100644
--- a/db/include/mysqlx_ername.h
+++ b/db/include/mysqlx_ername.h
@@ -11,7 +11,7 @@
* documentation. The authors of MySQL hereby grant you an additional
* permission to link the program and your derivative works with the
* separately licensed software that they have included with MySQL.
- *
+ *
* 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
@@ -19,81 +19,55 @@
*
* 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA
*/
/* Autogenerated file, please don't edit */
#include "mysqlx_error.h"
- {"ER_X_BAD_MESSAGE", ER_X_BAD_MESSAGE, "", NULL, NULL, 0 },
- {"ER_X_CAPABILITIES_PREPARE_FAILED", ER_X_CAPABILITIES_PREPARE_FAILED, "", NULL, NULL, 0 },
- {"ER_X_CAPABILITY_NOT_FOUND", ER_X_CAPABILITY_NOT_FOUND, "", NULL, NULL, 0 },
- {"ER_X_INVALID_PROTOCOL_DATA", ER_X_INVALID_PROTOCOL_DATA, "", NULL, NULL, 0 },
- {"ER_X_BAD_CONNECTION_SESSION_ATTRIBUTE_VALUE_LENGTH", ER_X_BAD_CONNECTION_SESSION_ATTRIBUTE_VALUE_LENGTH, "", NULL, NULL, 0 },
- {"ER_X_BAD_CONNECTION_SESSION_ATTRIBUTE_KEY_LENGTH", ER_X_BAD_CONNECTION_SESSION_ATTRIBUTE_KEY_LENGTH, "", NULL, NULL, 0 },
- {"ER_X_BAD_CONNECTION_SESSION_ATTRIBUTE_EMPTY_KEY", ER_X_BAD_CONNECTION_SESSION_ATTRIBUTE_EMPTY_KEY, "", NULL, NULL, 0 },
- {"ER_X_BAD_CONNECTION_SESSION_ATTRIBUTE_LENGTH", ER_X_BAD_CONNECTION_SESSION_ATTRIBUTE_LENGTH, "", NULL, NULL, 0 },
- {"ER_X_BAD_CONNECTION_SESSION_ATTRIBUTE_TYPE", ER_X_BAD_CONNECTION_SESSION_ATTRIBUTE_TYPE, "", NULL, NULL, 0 },
- {"ER_X_CAPABILITY_SET_NOT_ALLOWED", ER_X_CAPABILITY_SET_NOT_ALLOWED, "", NULL, NULL, 0 },
- {"ER_X_SERVICE_ERROR", ER_X_SERVICE_ERROR, "", NULL, NULL, 0 },
- {"ER_X_SESSION", ER_X_SESSION, "", NULL, NULL, 0 },
- {"ER_X_INVALID_ARGUMENT", ER_X_INVALID_ARGUMENT, "", NULL, NULL, 0 },
- {"ER_X_MISSING_ARGUMENT", ER_X_MISSING_ARGUMENT, "", NULL, NULL, 0 },
- {"ER_X_BAD_INSERT_DATA", ER_X_BAD_INSERT_DATA, "", NULL, NULL, 0 },
- {"ER_X_CMD_NUM_ARGUMENTS", ER_X_CMD_NUM_ARGUMENTS, "", NULL, NULL, 0 },
- {"ER_X_CMD_ARGUMENT_TYPE", ER_X_CMD_ARGUMENT_TYPE, "", NULL, NULL, 0 },
- {"ER_X_CMD_ARGUMENT_VALUE", ER_X_CMD_ARGUMENT_VALUE, "", NULL, NULL, 0 },
- {"ER_X_BAD_UPSERT_DATA", ER_X_BAD_UPSERT_DATA, "", NULL, NULL, 0 },
- {"ER_X_DUPLICATED_CAPABILITIES", ER_X_DUPLICATED_CAPABILITIES, "", NULL, NULL, 0 },
- {"ER_X_CMD_ARGUMENT_OBJECT_EMPTY", ER_X_CMD_ARGUMENT_OBJECT_EMPTY, "", NULL, NULL, 0 },
- {"ER_X_CMD_INVALID_ARGUMENT", ER_X_CMD_INVALID_ARGUMENT, "", NULL, NULL, 0 },
- {"ER_X_BAD_UPDATE_DATA", ER_X_BAD_UPDATE_DATA, "", NULL, NULL, 0 },
- {"ER_X_BAD_TYPE_OF_UPDATE", ER_X_BAD_TYPE_OF_UPDATE, "", NULL, NULL, 0 },
- {"ER_X_BAD_COLUMN_TO_UPDATE", ER_X_BAD_COLUMN_TO_UPDATE, "", NULL, NULL, 0 },
- {"ER_X_BAD_MEMBER_TO_UPDATE", ER_X_BAD_MEMBER_TO_UPDATE, "", NULL, NULL, 0 },
- {"ER_X_BAD_STATEMENT_ID", ER_X_BAD_STATEMENT_ID, "", NULL, NULL, 0 },
- {"ER_X_BAD_CURSOR_ID", ER_X_BAD_CURSOR_ID, "", NULL, NULL, 0 },
- {"ER_X_BAD_SCHEMA", ER_X_BAD_SCHEMA, "", NULL, NULL, 0 },
- {"ER_X_BAD_TABLE", ER_X_BAD_TABLE, "", NULL, NULL, 0 },
- {"ER_X_BAD_PROJECTION", ER_X_BAD_PROJECTION, "", NULL, NULL, 0 },
- {"ER_X_DOC_ID_MISSING", ER_X_DOC_ID_MISSING, "", NULL, NULL, 0 },
- {"ER_X_DUPLICATE_ENTRY", ER_X_DUPLICATE_ENTRY, "", NULL, NULL, 0 },
- {"ER_X_DOC_REQUIRED_FIELD_MISSING", ER_X_DOC_REQUIRED_FIELD_MISSING, "", NULL, NULL, 0 },
- {"ER_X_PROJ_BAD_KEY_NAME", ER_X_PROJ_BAD_KEY_NAME, "", NULL, NULL, 0 },
- {"ER_X_BAD_DOC_PATH", ER_X_BAD_DOC_PATH, "", NULL, NULL, 0 },
- {"ER_X_CURSOR_EXISTS", ER_X_CURSOR_EXISTS, "", NULL, NULL, 0 },
- {"ER_X_CURSOR_REACHED_EOF", ER_X_CURSOR_REACHED_EOF, "", NULL, NULL, 0 },
- {"ER_X_PREPARED_STATMENT_CAN_HAVE_ONE_CURSOR", ER_X_PREPARED_STATMENT_CAN_HAVE_ONE_CURSOR, "", NULL, NULL, 0 },
- {"ER_X_PREPARED_EXECUTE_ARGUMENT_NOT_SUPPORTED", ER_X_PREPARED_EXECUTE_ARGUMENT_NOT_SUPPORTED, "", NULL, NULL, 0 },
- {"ER_X_PREPARED_EXECUTE_ARGUMENT_CONSISTENCY", ER_X_PREPARED_EXECUTE_ARGUMENT_CONSISTENCY, "", NULL, NULL, 0 },
- {"ER_X_EXPR_BAD_OPERATOR", ER_X_EXPR_BAD_OPERATOR, "", NULL, NULL, 0 },
- {"ER_X_EXPR_BAD_NUM_ARGS", ER_X_EXPR_BAD_NUM_ARGS, "", NULL, NULL, 0 },
- {"ER_X_EXPR_MISSING_ARG", ER_X_EXPR_MISSING_ARG, "", NULL, NULL, 0 },
- {"ER_X_EXPR_BAD_TYPE_VALUE", ER_X_EXPR_BAD_TYPE_VALUE, "", NULL, NULL, 0 },
- {"ER_X_EXPR_BAD_VALUE", ER_X_EXPR_BAD_VALUE, "", NULL, NULL, 0 },
- {"ER_X_INVALID_COLLECTION", ER_X_INVALID_COLLECTION, "", NULL, NULL, 0 },
- {"ER_X_INVALID_ADMIN_COMMAND", ER_X_INVALID_ADMIN_COMMAND, "", NULL, NULL, 0 },
- {"ER_X_EXPECT_NOT_OPEN", ER_X_EXPECT_NOT_OPEN, "", NULL, NULL, 0 },
- {"ER_X_EXPECT_NO_ERROR_FAILED", ER_X_EXPECT_NO_ERROR_FAILED, "", NULL, NULL, 0 },
- {"ER_X_EXPECT_BAD_CONDITION", ER_X_EXPECT_BAD_CONDITION, "", NULL, NULL, 0 },
- {"ER_X_EXPECT_BAD_CONDITION_VALUE", ER_X_EXPECT_BAD_CONDITION_VALUE, "", NULL, NULL, 0 },
- {"ER_X_INVALID_NAMESPACE", ER_X_INVALID_NAMESPACE, "", NULL, NULL, 0 },
- {"ER_X_BAD_NOTICE", ER_X_BAD_NOTICE, "", NULL, NULL, 0 },
- {"ER_X_CANNOT_DISABLE_NOTICE", ER_X_CANNOT_DISABLE_NOTICE, "", NULL, NULL, 0 },
- {"ER_X_BAD_CONFIGURATION", ER_X_BAD_CONFIGURATION, "", NULL, NULL, 0 },
- {"ER_X_MYSQLX_ACCOUNT_MISSING_PERMISSIONS", ER_X_MYSQLX_ACCOUNT_MISSING_PERMISSIONS, "", NULL, NULL, 0 },
- {"ER_X_EXPECT_FIELD_EXISTS_FAILED", ER_X_EXPECT_FIELD_EXISTS_FAILED, "", NULL, NULL, 0 },
- {"ER_X_BAD_LOCKING", ER_X_BAD_LOCKING, "", NULL, NULL, 0 },
- {"ER_X_FRAME_COMPRESSION_DISABLED", ER_X_FRAME_COMPRESSION_DISABLED, "", NULL, NULL, 0 },
- {"ER_X_DECOMPRESSION_FAILED", ER_X_DECOMPRESSION_FAILED, "", NULL, NULL, 0 },
- {"ER_X_BAD_COMPRESSED_FRAME", ER_X_BAD_COMPRESSED_FRAME, "", NULL, NULL, 0 },
- {"ER_X_CAPABILITY_COMPRESSION_INVALID_ALGORITHM", ER_X_CAPABILITY_COMPRESSION_INVALID_ALGORITHM, "", NULL, NULL, 0 },
- {"ER_X_CAPABILITY_COMPRESSION_INVALID_SERVER_STYLE", ER_X_CAPABILITY_COMPRESSION_INVALID_SERVER_STYLE, "", NULL, NULL, 0 },
- {"ER_X_CAPABILITY_COMPRESSION_INVALID_CLIENT_STYLE", ER_X_CAPABILITY_COMPRESSION_INVALID_CLIENT_STYLE, "", NULL, NULL, 0 },
- {"ER_X_CAPABILITY_COMPRESSION_INVALID_OPTION", ER_X_CAPABILITY_COMPRESSION_INVALID_OPTION, "", NULL, NULL, 0 },
- {"ER_X_CAPABILITY_COMPRESSION_MISSING_REQUIRED_FIELDS", ER_X_CAPABILITY_COMPRESSION_MISSING_REQUIRED_FIELDS, "", NULL, NULL, 0 },
- {"ER_X_DOCUMENT_DOESNT_MATCH_EXPECTED_SCHEMA", ER_X_DOCUMENT_DOESNT_MATCH_EXPECTED_SCHEMA, "", NULL, NULL, 0 },
- {"ER_X_COLLECTION_OPTION_DOESNT_EXISTS", ER_X_COLLECTION_OPTION_DOESNT_EXISTS, "", NULL, NULL, 0 },
- {"ER_X_INVALID_VALIDATION_SCHEMA", ER_X_INVALID_VALIDATION_SCHEMA, "", NULL, NULL, 0 },
+ {"ER_X_BAD_MESSAGE", ER_X_BAD_MESSAGE, ""},
+ {"ER_X_CAPABILITIES_PREPARE_FAILED", ER_X_CAPABILITIES_PREPARE_FAILED, ""},
+ {"ER_X_CAPABILITY_NOT_FOUND", ER_X_CAPABILITY_NOT_FOUND, ""},
+ {"ER_X_INVALID_PROTOCOL_DATA", ER_X_INVALID_PROTOCOL_DATA, ""},
+ {"ER_X_SERVICE_ERROR", ER_X_SERVICE_ERROR, ""},
+ {"ER_X_SESSION", ER_X_SESSION, ""},
+ {"ER_X_INVALID_ARGUMENT", ER_X_INVALID_ARGUMENT, ""},
+ {"ER_X_MISSING_ARGUMENT", ER_X_MISSING_ARGUMENT, ""},
+ {"ER_X_BAD_INSERT_DATA", ER_X_BAD_INSERT_DATA, ""},
+ {"ER_X_CMD_NUM_ARGUMENTS", ER_X_CMD_NUM_ARGUMENTS, ""},
+ {"ER_X_CMD_ARGUMENT_TYPE", ER_X_CMD_ARGUMENT_TYPE, ""},
+ {"ER_X_CMD_ARGUMENT_VALUE", ER_X_CMD_ARGUMENT_VALUE, ""},
+ {"ER_X_BAD_UPDATE_DATA", ER_X_BAD_UPDATE_DATA, ""},
+ {"ER_X_BAD_TYPE_OF_UPDATE", ER_X_BAD_TYPE_OF_UPDATE, ""},
+ {"ER_X_BAD_COLUMN_TO_UPDATE", ER_X_BAD_COLUMN_TO_UPDATE, ""},
+ {"ER_X_BAD_MEMBER_TO_UPDATE", ER_X_BAD_MEMBER_TO_UPDATE, ""},
+ {"ER_X_BAD_STATEMENT_ID", ER_X_BAD_STATEMENT_ID, ""},
+ {"ER_X_BAD_CURSOR_ID", ER_X_BAD_CURSOR_ID, ""},
+ {"ER_X_BAD_SCHEMA", ER_X_BAD_SCHEMA, ""},
+ {"ER_X_BAD_TABLE", ER_X_BAD_TABLE, ""},
+ {"ER_X_BAD_PROJECTION", ER_X_BAD_PROJECTION, ""},
+ {"ER_X_DOC_ID_MISSING", ER_X_DOC_ID_MISSING, ""},
+ {"ER_X_DOC_ID_DUPLICATE", ER_X_DOC_ID_DUPLICATE, ""},
+ {"ER_X_DOC_REQUIRED_FIELD_MISSING", ER_X_DOC_REQUIRED_FIELD_MISSING, ""},
+ {"ER_X_PROJ_BAD_KEY_NAME", ER_X_PROJ_BAD_KEY_NAME, ""},
+ {"ER_X_BAD_DOC_PATH", ER_X_BAD_DOC_PATH, ""},
+ {"ER_X_CURSOR_EXISTS", ER_X_CURSOR_EXISTS, ""},
+ {"ER_X_EXPR_BAD_OPERATOR", ER_X_EXPR_BAD_OPERATOR, ""},
+ {"ER_X_EXPR_BAD_NUM_ARGS", ER_X_EXPR_BAD_NUM_ARGS, ""},
+ {"ER_X_EXPR_MISSING_ARG", ER_X_EXPR_MISSING_ARG, ""},
+ {"ER_X_EXPR_BAD_TYPE_VALUE", ER_X_EXPR_BAD_TYPE_VALUE, ""},
+ {"ER_X_EXPR_BAD_VALUE", ER_X_EXPR_BAD_VALUE, ""},
+ {"ER_X_INVALID_COLLECTION", ER_X_INVALID_COLLECTION, ""},
+ {"ER_X_INVALID_ADMIN_COMMAND", ER_X_INVALID_ADMIN_COMMAND, ""},
+ {"ER_X_EXPECT_NOT_OPEN", ER_X_EXPECT_NOT_OPEN, ""},
+ {"ER_X_EXPECT_FAILED", ER_X_EXPECT_FAILED, ""},
+ {"ER_X_EXPECT_BAD_CONDITION", ER_X_EXPECT_BAD_CONDITION, ""},
+ {"ER_X_EXPECT_BAD_CONDITION_VALUE", ER_X_EXPECT_BAD_CONDITION_VALUE, ""},
+ {"ER_X_INVALID_NAMESPACE", ER_X_INVALID_NAMESPACE, ""},
+ {"ER_X_BAD_NOTICE", ER_X_BAD_NOTICE, ""},
+ {"ER_X_CANNOT_DISABLE_NOTICE", ER_X_CANNOT_DISABLE_NOTICE, ""},
+ {"ER_X_BAD_CONFIGURATION", ER_X_BAD_CONFIGURATION, ""},
+ {"ER_X_MYSQLX_ACCOUNT_MISSING_PERMISSIONS", ER_X_MYSQLX_ACCOUNT_MISSING_PERMISSIONS, ""},
diff --git a/db/include/mysqlx_error.h b/db/include/mysqlx_error.h
index 9072981..a6467f5 100644
--- a/db/include/mysqlx_error.h
+++ b/db/include/mysqlx_error.h
@@ -18,82 +18,55 @@
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 */
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
#ifndef _MYSQLX_ERROR_H_
#define _MYSQLX_ERROR_H_
-#define ER_X_BAD_MESSAGE 5000
+#define ER_X_BAD_MESSAGE 5000
#define ER_X_CAPABILITIES_PREPARE_FAILED 5001
-#define ER_X_CAPABILITY_NOT_FOUND 5002
-#define ER_X_INVALID_PROTOCOL_DATA 5003
-#define ER_X_BAD_CONNECTION_SESSION_ATTRIBUTE_VALUE_LENGTH 5004
-#define ER_X_BAD_CONNECTION_SESSION_ATTRIBUTE_KEY_LENGTH 5005
-#define ER_X_BAD_CONNECTION_SESSION_ATTRIBUTE_EMPTY_KEY 5006
-#define ER_X_BAD_CONNECTION_SESSION_ATTRIBUTE_LENGTH 5007
-#define ER_X_BAD_CONNECTION_SESSION_ATTRIBUTE_TYPE 5008
-#define ER_X_CAPABILITY_SET_NOT_ALLOWED 5009
-#define ER_X_SERVICE_ERROR 5010
-#define ER_X_SESSION 5011
-#define ER_X_INVALID_ARGUMENT 5012
-#define ER_X_MISSING_ARGUMENT 5013
-#define ER_X_BAD_INSERT_DATA 5014
-#define ER_X_CMD_NUM_ARGUMENTS 5015
-#define ER_X_CMD_ARGUMENT_TYPE 5016
-#define ER_X_CMD_ARGUMENT_VALUE 5017
-#define ER_X_BAD_UPSERT_DATA 5018
-#define ER_X_DUPLICATED_CAPABILITIES 5019
-#define ER_X_CMD_ARGUMENT_OBJECT_EMPTY 5020
-#define ER_X_CMD_INVALID_ARGUMENT 5021
-#define ER_X_BAD_UPDATE_DATA 5050
-#define ER_X_BAD_TYPE_OF_UPDATE 5051
-#define ER_X_BAD_COLUMN_TO_UPDATE 5052
-#define ER_X_BAD_MEMBER_TO_UPDATE 5053
-#define ER_X_BAD_STATEMENT_ID 5110
-#define ER_X_BAD_CURSOR_ID 5111
-#define ER_X_BAD_SCHEMA 5112
-#define ER_X_BAD_TABLE 5113
-#define ER_X_BAD_PROJECTION 5114
-#define ER_X_DOC_ID_MISSING 5115
-#define ER_X_DUPLICATE_ENTRY 5116
-#define ER_X_DOC_REQUIRED_FIELD_MISSING 5117
-#define ER_X_PROJ_BAD_KEY_NAME 5120
-#define ER_X_BAD_DOC_PATH 5121
-#define ER_X_CURSOR_EXISTS 5122
-#define ER_X_CURSOR_REACHED_EOF 5123
-#define ER_X_PREPARED_STATMENT_CAN_HAVE_ONE_CURSOR 5131
-#define ER_X_PREPARED_EXECUTE_ARGUMENT_NOT_SUPPORTED 5133
-#define ER_X_PREPARED_EXECUTE_ARGUMENT_CONSISTENCY 5134
-#define ER_X_EXPR_BAD_OPERATOR 5150
-#define ER_X_EXPR_BAD_NUM_ARGS 5151
-#define ER_X_EXPR_MISSING_ARG 5152
-#define ER_X_EXPR_BAD_TYPE_VALUE 5153
-#define ER_X_EXPR_BAD_VALUE 5154
-#define ER_X_INVALID_COLLECTION 5156
-#define ER_X_INVALID_ADMIN_COMMAND 5157
-#define ER_X_EXPECT_NOT_OPEN 5158
-#define ER_X_EXPECT_NO_ERROR_FAILED 5159
-#define ER_X_EXPECT_BAD_CONDITION 5160
-#define ER_X_EXPECT_BAD_CONDITION_VALUE 5161
-#define ER_X_INVALID_NAMESPACE 5162
-#define ER_X_BAD_NOTICE 5163
-#define ER_X_CANNOT_DISABLE_NOTICE 5164
-#define ER_X_BAD_CONFIGURATION 5165
-#define ER_X_MYSQLX_ACCOUNT_MISSING_PERMISSIONS 5167
-#define ER_X_EXPECT_FIELD_EXISTS_FAILED 5168
-#define ER_X_BAD_LOCKING 5169
-#define ER_X_FRAME_COMPRESSION_DISABLED 5170
-#define ER_X_DECOMPRESSION_FAILED 5171
-#define ER_X_BAD_COMPRESSED_FRAME 5174
-#define ER_X_CAPABILITY_COMPRESSION_INVALID_ALGORITHM 5175
-#define ER_X_CAPABILITY_COMPRESSION_INVALID_SERVER_STYLE 5176
-#define ER_X_CAPABILITY_COMPRESSION_INVALID_CLIENT_STYLE 5177
-#define ER_X_CAPABILITY_COMPRESSION_INVALID_OPTION 5178
-#define ER_X_CAPABILITY_COMPRESSION_MISSING_REQUIRED_FIELDS 5179
-#define ER_X_DOCUMENT_DOESNT_MATCH_EXPECTED_SCHEMA 5180
-#define ER_X_COLLECTION_OPTION_DOESNT_EXISTS 5181
-#define ER_X_INVALID_VALIDATION_SCHEMA 5182
+#define ER_X_CAPABILITY_NOT_FOUND 5002
+#define ER_X_INVALID_PROTOCOL_DATA 5003
+#define ER_X_SERVICE_ERROR 5010
+#define ER_X_SESSION 5011
+#define ER_X_INVALID_ARGUMENT 5012
+#define ER_X_MISSING_ARGUMENT 5013
+#define ER_X_BAD_INSERT_DATA 5014
+#define ER_X_CMD_NUM_ARGUMENTS 5015
+#define ER_X_CMD_ARGUMENT_TYPE 5016
+#define ER_X_CMD_ARGUMENT_VALUE 5017
+#define ER_X_BAD_UPDATE_DATA 5050
+#define ER_X_BAD_TYPE_OF_UPDATE 5051
+#define ER_X_BAD_COLUMN_TO_UPDATE 5052
+#define ER_X_BAD_MEMBER_TO_UPDATE 5053
+#define ER_X_BAD_STATEMENT_ID 5110
+#define ER_X_BAD_CURSOR_ID 5111
+#define ER_X_BAD_SCHEMA 5112
+#define ER_X_BAD_TABLE 5113
+#define ER_X_BAD_PROJECTION 5114
+#define ER_X_DOC_ID_MISSING 5115
+#define ER_X_DOC_ID_DUPLICATE 5116
+#define ER_X_DOC_REQUIRED_FIELD_MISSING 5117
+#define ER_X_PROJ_BAD_KEY_NAME 5120
+#define ER_X_BAD_DOC_PATH 5121
+#define ER_X_CURSOR_EXISTS 5122
+#define ER_X_EXPR_BAD_OPERATOR 5150
+#define ER_X_EXPR_BAD_NUM_ARGS 5151
+#define ER_X_EXPR_MISSING_ARG 5152
+#define ER_X_EXPR_BAD_TYPE_VALUE 5153
+#define ER_X_EXPR_BAD_VALUE 5154
+#define ER_X_INVALID_COLLECTION 5156
+#define ER_X_INVALID_ADMIN_COMMAND 5157
+#define ER_X_EXPECT_NOT_OPEN 5158
+#define ER_X_EXPECT_FAILED 5159
+#define ER_X_EXPECT_BAD_CONDITION 5160
+#define ER_X_EXPECT_BAD_CONDITION_VALUE 5161
+#define ER_X_INVALID_NAMESPACE 5162
+#define ER_X_BAD_NOTICE 5163
+#define ER_X_CANNOT_DISABLE_NOTICE 5164
+#define ER_X_BAD_CONFIGURATION 5165
+#define ER_X_MYSQLX_ACCOUNT_MISSING_PERMISSIONS 5167
#endif // _MYSQLX_ERROR_H_
diff --git a/db/include/mysqlx_version.h b/db/include/mysqlx_version.h
index 7ae5936..c98acad 100644
--- a/db/include/mysqlx_version.h
+++ b/db/include/mysqlx_version.h
@@ -11,7 +11,7 @@
* documentation. The authors of MySQL hereby grant you an additional
* permission to link the program and your derivative works with the
* separately licensed software that they have included with MySQL.
- *
+ *
* 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
@@ -19,7 +19,8 @@
*
* 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA
*/
/* Version numbers for X Plugin */
diff --git a/db/include/openssl/applink.c b/db/include/openssl/applink.c
deleted file mode 100644
index 238dbff..0000000
--- a/db/include/openssl/applink.c
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * Copyright 2004-2016 The OpenSSL Project Authors. All Rights Reserved.
- *
- * Licensed under the OpenSSL license (the "License"). You may not use
- * this file except in compliance with the License. You can obtain a copy
- * in the file LICENSE in the source distribution or at
- * https://www.openssl.org/source/license.html
- */
-
-#define APPLINK_STDIN 1
-#define APPLINK_STDOUT 2
-#define APPLINK_STDERR 3
-#define APPLINK_FPRINTF 4
-#define APPLINK_FGETS 5
-#define APPLINK_FREAD 6
-#define APPLINK_FWRITE 7
-#define APPLINK_FSETMOD 8
-#define APPLINK_FEOF 9
-#define APPLINK_FCLOSE 10 /* should not be used */
-
-#define APPLINK_FOPEN 11 /* solely for completeness */
-#define APPLINK_FSEEK 12
-#define APPLINK_FTELL 13
-#define APPLINK_FFLUSH 14
-#define APPLINK_FERROR 15
-#define APPLINK_CLEARERR 16
-#define APPLINK_FILENO 17 /* to be used with below */
-
-#define APPLINK_OPEN 18 /* formally can't be used, as flags can vary */
-#define APPLINK_READ 19
-#define APPLINK_WRITE 20
-#define APPLINK_LSEEK 21
-#define APPLINK_CLOSE 22
-#define APPLINK_MAX 22 /* always same as last macro */
-
-#ifndef APPMACROS_ONLY
-# include
-# include
-# include
-
-static void *app_stdin(void)
-{
- return stdin;
-}
-
-static void *app_stdout(void)
-{
- return stdout;
-}
-
-static void *app_stderr(void)
-{
- return stderr;
-}
-
-static int app_feof(FILE *fp)
-{
- return feof(fp);
-}
-
-static int app_ferror(FILE *fp)
-{
- return ferror(fp);
-}
-
-static void app_clearerr(FILE *fp)
-{
- clearerr(fp);
-}
-
-static int app_fileno(FILE *fp)
-{
- return _fileno(fp);
-}
-
-static int app_fsetmod(FILE *fp, char mod)
-{
- return _setmode(_fileno(fp), mod == 'b' ? _O_BINARY : _O_TEXT);
-}
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-__declspec(dllexport)
-void **
-# if defined(__BORLANDC__)
-/*
- * __stdcall appears to be the only way to get the name
- * decoration right with Borland C. Otherwise it works
- * purely incidentally, as we pass no parameters.
- */
-__stdcall
-# else
-__cdecl
-# endif
-OPENSSL_Applink(void)
-{
- static int once = 1;
- static void *OPENSSL_ApplinkTable[APPLINK_MAX + 1] =
- { (void *)APPLINK_MAX };
-
- if (once) {
- OPENSSL_ApplinkTable[APPLINK_STDIN] = app_stdin;
- OPENSSL_ApplinkTable[APPLINK_STDOUT] = app_stdout;
- OPENSSL_ApplinkTable[APPLINK_STDERR] = app_stderr;
- OPENSSL_ApplinkTable[APPLINK_FPRINTF] = fprintf;
- OPENSSL_ApplinkTable[APPLINK_FGETS] = fgets;
- OPENSSL_ApplinkTable[APPLINK_FREAD] = fread;
- OPENSSL_ApplinkTable[APPLINK_FWRITE] = fwrite;
- OPENSSL_ApplinkTable[APPLINK_FSETMOD] = app_fsetmod;
- OPENSSL_ApplinkTable[APPLINK_FEOF] = app_feof;
- OPENSSL_ApplinkTable[APPLINK_FCLOSE] = fclose;
-
- OPENSSL_ApplinkTable[APPLINK_FOPEN] = fopen;
- OPENSSL_ApplinkTable[APPLINK_FSEEK] = fseek;
- OPENSSL_ApplinkTable[APPLINK_FTELL] = ftell;
- OPENSSL_ApplinkTable[APPLINK_FFLUSH] = fflush;
- OPENSSL_ApplinkTable[APPLINK_FERROR] = app_ferror;
- OPENSSL_ApplinkTable[APPLINK_CLEARERR] = app_clearerr;
- OPENSSL_ApplinkTable[APPLINK_FILENO] = app_fileno;
-
- OPENSSL_ApplinkTable[APPLINK_OPEN] = _open;
- OPENSSL_ApplinkTable[APPLINK_READ] = _read;
- OPENSSL_ApplinkTable[APPLINK_WRITE] = _write;
- OPENSSL_ApplinkTable[APPLINK_LSEEK] = _lseek;
- OPENSSL_ApplinkTable[APPLINK_CLOSE] = _close;
-
- once = 0;
- }
-
- return OPENSSL_ApplinkTable;
-}
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/db/include/plugin.h b/db/include/plugin.h
new file mode 100644
index 0000000..64b83ab
--- /dev/null
+++ b/db/include/plugin.h
@@ -0,0 +1,752 @@
+/* Copyright (c) 2005, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 _my_plugin_h
+#define _my_plugin_h
+
+#ifndef MYSQL_ABI_CHECK
+#include
+#include "mysql_version.h" /* MYSQL_VERSION_ID */
+#endif
+
+/*
+ On Windows, exports from DLL need to be declared.
+ Also, plugin needs to be declared as extern "C" because MSVC
+ unlike other compilers, uses C++ mangling for variables not only
+ for functions.
+*/
+#if defined(_MSC_VER)
+#if defined(MYSQL_DYNAMIC_PLUGIN)
+ #ifdef __cplusplus
+ #define MYSQL_PLUGIN_EXPORT extern "C" __declspec(dllexport)
+ #else
+ #define MYSQL_PLUGIN_EXPORT __declspec(dllexport)
+ #endif
+#else /* MYSQL_DYNAMIC_PLUGIN */
+ #ifdef __cplusplus
+ #define MYSQL_PLUGIN_EXPORT extern "C"
+ #else
+ #define MYSQL_PLUGIN_EXPORT
+ #endif
+#endif /*MYSQL_DYNAMIC_PLUGIN */
+#else /*_MSC_VER */
+#define MYSQL_PLUGIN_EXPORT
+#endif
+
+#ifdef __cplusplus
+class THD;
+class Item;
+#define MYSQL_THD THD*
+#else
+#define MYSQL_THD void*
+#endif
+
+typedef void * MYSQL_PLUGIN;
+
+#ifndef MYSQL_ABI_CHECK
+#include
+#endif
+
+#define MYSQL_XIDDATASIZE 128
+/**
+ struct st_mysql_xid is binary compatible with the XID structure as
+ in the X/Open CAE Specification, Distributed Transaction Processing:
+ The XA Specification, X/Open Company Ltd., 1991.
+ http://www.opengroup.org/bookstore/catalog/c193.htm
+
+ @see XID in sql/handler.h
+*/
+struct st_mysql_xid {
+ long formatID;
+ long gtrid_length;
+ long bqual_length;
+ char data[MYSQL_XIDDATASIZE]; /* Not \0-terminated */
+};
+typedef struct st_mysql_xid MYSQL_XID;
+
+/*************************************************************************
+ Plugin API. Common for all plugin types.
+*/
+
+#define MYSQL_PLUGIN_INTERFACE_VERSION 0x0107
+
+/*
+ The allowable types of plugins
+*/
+#define MYSQL_UDF_PLUGIN 0 /* User-defined function */
+#define MYSQL_STORAGE_ENGINE_PLUGIN 1 /* Storage Engine */
+#define MYSQL_FTPARSER_PLUGIN 2 /* Full-text parser plugin */
+#define MYSQL_DAEMON_PLUGIN 3 /* The daemon/raw plugin type */
+#define MYSQL_INFORMATION_SCHEMA_PLUGIN 4 /* The I_S plugin type */
+#define MYSQL_AUDIT_PLUGIN 5 /* The Audit plugin type */
+#define MYSQL_REPLICATION_PLUGIN 6 /* The replication plugin type */
+#define MYSQL_AUTHENTICATION_PLUGIN 7 /* The authentication plugin type */
+#define MYSQL_VALIDATE_PASSWORD_PLUGIN 8 /* validate password plugin type */
+#define MYSQL_GROUP_REPLICATION_PLUGIN 9 /* The Group Replication plugin */
+#define MYSQL_KEYRING_PLUGIN 10 /* The Keyring plugin type */
+#define MYSQL_MAX_PLUGIN_TYPE_NUM 11 /* The number of plugin types */
+
+/* We use the following strings to define licenses for plugins */
+#define PLUGIN_LICENSE_PROPRIETARY 0
+#define PLUGIN_LICENSE_GPL 1
+#define PLUGIN_LICENSE_BSD 2
+
+#define PLUGIN_LICENSE_PROPRIETARY_STRING "PROPRIETARY"
+#define PLUGIN_LICENSE_GPL_STRING "GPL"
+#define PLUGIN_LICENSE_BSD_STRING "BSD"
+
+/*
+ Macros for beginning and ending plugin declarations. Between
+ mysql_declare_plugin and mysql_declare_plugin_end there should
+ be a st_mysql_plugin struct for each plugin to be declared.
+*/
+
+
+#ifndef MYSQL_DYNAMIC_PLUGIN
+#define __MYSQL_DECLARE_PLUGIN(NAME, VERSION, PSIZE, DECLS) \
+MYSQL_PLUGIN_EXPORT int VERSION= MYSQL_PLUGIN_INTERFACE_VERSION; \
+MYSQL_PLUGIN_EXPORT int PSIZE= sizeof(struct st_mysql_plugin); \
+MYSQL_PLUGIN_EXPORT struct st_mysql_plugin DECLS[]= {
+#else
+#define __MYSQL_DECLARE_PLUGIN(NAME, VERSION, PSIZE, DECLS) \
+MYSQL_PLUGIN_EXPORT int _mysql_plugin_interface_version_= MYSQL_PLUGIN_INTERFACE_VERSION; \
+MYSQL_PLUGIN_EXPORT int _mysql_sizeof_struct_st_plugin_= sizeof(struct st_mysql_plugin); \
+MYSQL_PLUGIN_EXPORT struct st_mysql_plugin _mysql_plugin_declarations_[]= {
+#endif
+
+#define mysql_declare_plugin(NAME) \
+__MYSQL_DECLARE_PLUGIN(NAME, \
+ builtin_ ## NAME ## _plugin_interface_version, \
+ builtin_ ## NAME ## _sizeof_struct_st_plugin, \
+ builtin_ ## NAME ## _plugin)
+
+#define mysql_declare_plugin_end ,{0,0,0,0,0,0,0,0,0,0,0,0,0}}
+
+/**
+ Declarations for SHOW STATUS support in plugins
+*/
+enum enum_mysql_show_type
+{
+ SHOW_UNDEF, SHOW_BOOL,
+ SHOW_INT, ///< shown as _unsigned_ int
+ SHOW_LONG, ///< shown as _unsigned_ long
+ SHOW_LONGLONG, ///< shown as _unsigned_ longlong
+ SHOW_CHAR, SHOW_CHAR_PTR,
+ SHOW_ARRAY, SHOW_FUNC, SHOW_DOUBLE
+#ifdef MYSQL_SERVER
+ /*
+ This include defines server-only values of the enum.
+ Using them in plugins is not supported.
+ */
+ #include "sql_plugin_enum.h"
+#endif
+};
+
+/**
+ Status variable scope.
+ Only GLOBAL status variable scope is available in plugins.
+*/
+enum enum_mysql_show_scope
+{
+ SHOW_SCOPE_UNDEF,
+ SHOW_SCOPE_GLOBAL
+#ifdef MYSQL_SERVER
+ /* Server-only values. Not supported in plugins. */
+ ,
+ SHOW_SCOPE_SESSION,
+ SHOW_SCOPE_ALL
+#endif
+};
+
+/**
+ SHOW STATUS Server status variable
+*/
+struct st_mysql_show_var
+{
+ const char *name;
+ char *value;
+ enum enum_mysql_show_type type;
+ enum enum_mysql_show_scope scope;
+};
+
+#define SHOW_VAR_MAX_NAME_LEN 64
+#define SHOW_VAR_FUNC_BUFF_SIZE 1024
+typedef int (*mysql_show_var_func)(MYSQL_THD, struct st_mysql_show_var*, char *);
+
+
+/*
+ Constants for plugin flags.
+ */
+
+#define PLUGIN_OPT_NO_INSTALL 1UL /* Not dynamically loadable */
+#define PLUGIN_OPT_NO_UNINSTALL 2UL /* Not dynamically unloadable */
+
+
+/*
+ declarations for server variables and command line options
+*/
+
+
+#define PLUGIN_VAR_BOOL 0x0001
+#define PLUGIN_VAR_INT 0x0002
+#define PLUGIN_VAR_LONG 0x0003
+#define PLUGIN_VAR_LONGLONG 0x0004
+#define PLUGIN_VAR_STR 0x0005
+#define PLUGIN_VAR_ENUM 0x0006
+#define PLUGIN_VAR_SET 0x0007
+#define PLUGIN_VAR_DOUBLE 0x0008
+#define PLUGIN_VAR_UNSIGNED 0x0080
+#define PLUGIN_VAR_THDLOCAL 0x0100 /* Variable is per-connection */
+#define PLUGIN_VAR_READONLY 0x0200 /* Server variable is read only */
+#define PLUGIN_VAR_NOSYSVAR 0x0400 /* Not a server variable */
+#define PLUGIN_VAR_NOCMDOPT 0x0800 /* Not a command line option */
+#define PLUGIN_VAR_NOCMDARG 0x1000 /* No argument for cmd line */
+#define PLUGIN_VAR_RQCMDARG 0x0000 /* Argument required for cmd line */
+#define PLUGIN_VAR_OPCMDARG 0x2000 /* Argument optional for cmd line */
+#define PLUGIN_VAR_NODEFAULT 0x4000 /* SET DEFAULT is prohibited */
+#define PLUGIN_VAR_MEMALLOC 0x8000 /* String needs memory allocated */
+#define PLUGIN_VAR_INVISIBLE 0x10000 /* Variable should not be shown */
+
+struct st_mysql_sys_var;
+struct st_mysql_value;
+
+/*
+ SYNOPSIS
+ (*mysql_var_check_func)()
+ thd thread handle
+ var dynamic variable being altered
+ save pointer to temporary storage
+ value user provided value
+ RETURN
+ 0 user provided value is OK and the update func may be called.
+ any other value indicates error.
+
+ This function should parse the user provided value and store in the
+ provided temporary storage any data as required by the update func.
+ There is sufficient space in the temporary storage to store a double.
+ Note that the update func may not be called if any other error occurs
+ so any memory allocated should be thread-local so that it may be freed
+ automatically at the end of the statement.
+*/
+
+typedef int (*mysql_var_check_func)(MYSQL_THD thd,
+ struct st_mysql_sys_var *var,
+ void *save, struct st_mysql_value *value);
+
+/*
+ SYNOPSIS
+ (*mysql_var_update_func)()
+ thd thread handle
+ var dynamic variable being altered
+ var_ptr pointer to dynamic variable
+ save pointer to temporary storage
+ RETURN
+ NONE
+
+ This function should use the validated value stored in the temporary store
+ and persist it in the provided pointer to the dynamic variable.
+ For example, strings may require memory to be allocated.
+*/
+typedef void (*mysql_var_update_func)(MYSQL_THD thd,
+ struct st_mysql_sys_var *var,
+ void *var_ptr, const void *save);
+
+
+/* the following declarations are for internal use only */
+
+
+#define PLUGIN_VAR_MASK \
+ (PLUGIN_VAR_READONLY | PLUGIN_VAR_NOSYSVAR | \
+ PLUGIN_VAR_NOCMDOPT | PLUGIN_VAR_NOCMDARG | \
+ PLUGIN_VAR_OPCMDARG | PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_MEMALLOC | \
+ PLUGIN_VAR_NODEFAULT | PLUGIN_VAR_INVISIBLE)
+
+#define MYSQL_PLUGIN_VAR_HEADER \
+ int flags; \
+ const char *name; \
+ const char *comment; \
+ mysql_var_check_func check; \
+ mysql_var_update_func update
+
+#define MYSQL_SYSVAR_NAME(name) mysql_sysvar_ ## name
+#define MYSQL_SYSVAR(name) \
+ ((struct st_mysql_sys_var *)&(MYSQL_SYSVAR_NAME(name)))
+
+/*
+ for global variables, the value pointer is the first
+ element after the header, the default value is the second.
+ for thread variables, the value offset is the first
+ element after the header, the default value is the second.
+*/
+
+
+#define DECLARE_MYSQL_SYSVAR_BASIC(name, type) struct { \
+ MYSQL_PLUGIN_VAR_HEADER; \
+ type *value; \
+ const type def_val; \
+} MYSQL_SYSVAR_NAME(name)
+
+#define DECLARE_MYSQL_SYSVAR_SIMPLE(name, type) struct { \
+ MYSQL_PLUGIN_VAR_HEADER; \
+ type *value; type def_val; \
+ type min_val; type max_val; \
+ type blk_sz; \
+} MYSQL_SYSVAR_NAME(name)
+
+#define DECLARE_MYSQL_SYSVAR_TYPELIB(name, type) struct { \
+ MYSQL_PLUGIN_VAR_HEADER; \
+ type *value; type def_val; \
+ TYPELIB *typelib; \
+} MYSQL_SYSVAR_NAME(name)
+
+#define DECLARE_THDVAR_FUNC(type) \
+ type *(*resolve)(MYSQL_THD thd, int offset)
+
+#define DECLARE_MYSQL_THDVAR_BASIC(name, type) struct { \
+ MYSQL_PLUGIN_VAR_HEADER; \
+ int offset; \
+ const type def_val; \
+ DECLARE_THDVAR_FUNC(type); \
+} MYSQL_SYSVAR_NAME(name)
+
+#define DECLARE_MYSQL_THDVAR_SIMPLE(name, type) struct { \
+ MYSQL_PLUGIN_VAR_HEADER; \
+ int offset; \
+ type def_val; type min_val; \
+ type max_val; type blk_sz; \
+ DECLARE_THDVAR_FUNC(type); \
+} MYSQL_SYSVAR_NAME(name)
+
+#define DECLARE_MYSQL_THDVAR_TYPELIB(name, type) struct { \
+ MYSQL_PLUGIN_VAR_HEADER; \
+ int offset; \
+ type def_val; \
+ DECLARE_THDVAR_FUNC(type); \
+ TYPELIB *typelib; \
+} MYSQL_SYSVAR_NAME(name)
+
+
+/*
+ the following declarations are for use by plugin implementors
+*/
+
+#define MYSQL_SYSVAR_BOOL(name, varname, opt, comment, check, update, def) \
+DECLARE_MYSQL_SYSVAR_BASIC(name, char) = { \
+ PLUGIN_VAR_BOOL | ((opt) & PLUGIN_VAR_MASK), \
+ #name, comment, check, update, &varname, def}
+
+#define MYSQL_SYSVAR_STR(name, varname, opt, comment, check, update, def) \
+DECLARE_MYSQL_SYSVAR_BASIC(name, char *) = { \
+ PLUGIN_VAR_STR | ((opt) & PLUGIN_VAR_MASK), \
+ #name, comment, check, update, &varname, def}
+
+#define MYSQL_SYSVAR_INT(name, varname, opt, comment, check, update, def, min, max, blk) \
+DECLARE_MYSQL_SYSVAR_SIMPLE(name, int) = { \
+ PLUGIN_VAR_INT | ((opt) & PLUGIN_VAR_MASK), \
+ #name, comment, check, update, &varname, def, min, max, blk }
+
+#define MYSQL_SYSVAR_UINT(name, varname, opt, comment, check, update, def, min, max, blk) \
+DECLARE_MYSQL_SYSVAR_SIMPLE(name, unsigned int) = { \
+ PLUGIN_VAR_INT | PLUGIN_VAR_UNSIGNED | ((opt) & PLUGIN_VAR_MASK), \
+ #name, comment, check, update, &varname, def, min, max, blk }
+
+#define MYSQL_SYSVAR_LONG(name, varname, opt, comment, check, update, def, min, max, blk) \
+DECLARE_MYSQL_SYSVAR_SIMPLE(name, long) = { \
+ PLUGIN_VAR_LONG | ((opt) & PLUGIN_VAR_MASK), \
+ #name, comment, check, update, &varname, def, min, max, blk }
+
+#define MYSQL_SYSVAR_ULONG(name, varname, opt, comment, check, update, def, min, max, blk) \
+DECLARE_MYSQL_SYSVAR_SIMPLE(name, unsigned long) = { \
+ PLUGIN_VAR_LONG | PLUGIN_VAR_UNSIGNED | ((opt) & PLUGIN_VAR_MASK), \
+ #name, comment, check, update, &varname, def, min, max, blk }
+
+#define MYSQL_SYSVAR_LONGLONG(name, varname, opt, comment, check, update, def, min, max, blk) \
+DECLARE_MYSQL_SYSVAR_SIMPLE(name, long long) = { \
+ PLUGIN_VAR_LONGLONG | ((opt) & PLUGIN_VAR_MASK), \
+ #name, comment, check, update, &varname, def, min, max, blk }
+
+#define MYSQL_SYSVAR_ULONGLONG(name, varname, opt, comment, check, update, def, min, max, blk) \
+DECLARE_MYSQL_SYSVAR_SIMPLE(name, unsigned long long) = { \
+ PLUGIN_VAR_LONGLONG | PLUGIN_VAR_UNSIGNED | ((opt) & PLUGIN_VAR_MASK), \
+ #name, comment, check, update, &varname, def, min, max, blk }
+
+#define MYSQL_SYSVAR_ENUM(name, varname, opt, comment, check, update, def, typelib) \
+DECLARE_MYSQL_SYSVAR_TYPELIB(name, unsigned long) = { \
+ PLUGIN_VAR_ENUM | ((opt) & PLUGIN_VAR_MASK), \
+ #name, comment, check, update, &varname, def, typelib }
+
+#define MYSQL_SYSVAR_SET(name, varname, opt, comment, check, update, def, typelib) \
+DECLARE_MYSQL_SYSVAR_TYPELIB(name, unsigned long long) = { \
+ PLUGIN_VAR_SET | ((opt) & PLUGIN_VAR_MASK), \
+ #name, comment, check, update, &varname, def, typelib }
+
+#define MYSQL_SYSVAR_DOUBLE(name, varname, opt, comment, check, update, def, min, max, blk) \
+DECLARE_MYSQL_SYSVAR_SIMPLE(name, double) = { \
+ PLUGIN_VAR_DOUBLE | ((opt) & PLUGIN_VAR_MASK), \
+ #name, comment, check, update, &varname, def, min, max, blk }
+
+#define MYSQL_THDVAR_BOOL(name, opt, comment, check, update, def) \
+DECLARE_MYSQL_THDVAR_BASIC(name, char) = { \
+ PLUGIN_VAR_BOOL | PLUGIN_VAR_THDLOCAL | ((opt) & PLUGIN_VAR_MASK), \
+ #name, comment, check, update, -1, def, NULL}
+
+#define MYSQL_THDVAR_STR(name, opt, comment, check, update, def) \
+DECLARE_MYSQL_THDVAR_BASIC(name, char *) = { \
+ PLUGIN_VAR_STR | PLUGIN_VAR_THDLOCAL | ((opt) & PLUGIN_VAR_MASK), \
+ #name, comment, check, update, -1, def, NULL}
+
+#define MYSQL_THDVAR_INT(name, opt, comment, check, update, def, min, max, blk) \
+DECLARE_MYSQL_THDVAR_SIMPLE(name, int) = { \
+ PLUGIN_VAR_INT | PLUGIN_VAR_THDLOCAL | ((opt) & PLUGIN_VAR_MASK), \
+ #name, comment, check, update, -1, def, min, max, blk, NULL }
+
+#define MYSQL_THDVAR_UINT(name, opt, comment, check, update, def, min, max, blk) \
+DECLARE_MYSQL_THDVAR_SIMPLE(name, unsigned int) = { \
+ PLUGIN_VAR_INT | PLUGIN_VAR_THDLOCAL | PLUGIN_VAR_UNSIGNED | ((opt) & PLUGIN_VAR_MASK), \
+ #name, comment, check, update, -1, def, min, max, blk, NULL }
+
+#define MYSQL_THDVAR_LONG(name, opt, comment, check, update, def, min, max, blk) \
+DECLARE_MYSQL_THDVAR_SIMPLE(name, long) = { \
+ PLUGIN_VAR_LONG | PLUGIN_VAR_THDLOCAL | ((opt) & PLUGIN_VAR_MASK), \
+ #name, comment, check, update, -1, def, min, max, blk, NULL }
+
+#define MYSQL_THDVAR_ULONG(name, opt, comment, check, update, def, min, max, blk) \
+DECLARE_MYSQL_THDVAR_SIMPLE(name, unsigned long) = { \
+ PLUGIN_VAR_LONG | PLUGIN_VAR_THDLOCAL | PLUGIN_VAR_UNSIGNED | ((opt) & PLUGIN_VAR_MASK), \
+ #name, comment, check, update, -1, def, min, max, blk, NULL }
+
+#define MYSQL_THDVAR_LONGLONG(name, opt, comment, check, update, def, min, max, blk) \
+DECLARE_MYSQL_THDVAR_SIMPLE(name, long long) = { \
+ PLUGIN_VAR_LONGLONG | PLUGIN_VAR_THDLOCAL | ((opt) & PLUGIN_VAR_MASK), \
+ #name, comment, check, update, -1, def, min, max, blk, NULL }
+
+#define MYSQL_THDVAR_ULONGLONG(name, opt, comment, check, update, def, min, max, blk) \
+DECLARE_MYSQL_THDVAR_SIMPLE(name, unsigned long long) = { \
+ PLUGIN_VAR_LONGLONG | PLUGIN_VAR_THDLOCAL | PLUGIN_VAR_UNSIGNED | ((opt) & PLUGIN_VAR_MASK), \
+ #name, comment, check, update, -1, def, min, max, blk, NULL }
+
+#define MYSQL_THDVAR_ENUM(name, opt, comment, check, update, def, typelib) \
+DECLARE_MYSQL_THDVAR_TYPELIB(name, unsigned long) = { \
+ PLUGIN_VAR_ENUM | PLUGIN_VAR_THDLOCAL | ((opt) & PLUGIN_VAR_MASK), \
+ #name, comment, check, update, -1, def, NULL, typelib }
+
+#define MYSQL_THDVAR_SET(name, opt, comment, check, update, def, typelib) \
+DECLARE_MYSQL_THDVAR_TYPELIB(name, unsigned long long) = { \
+ PLUGIN_VAR_SET | PLUGIN_VAR_THDLOCAL | ((opt) & PLUGIN_VAR_MASK), \
+ #name, comment, check, update, -1, def, NULL, typelib }
+
+#define MYSQL_THDVAR_DOUBLE(name, opt, comment, check, update, def, min, max, blk) \
+DECLARE_MYSQL_THDVAR_SIMPLE(name, double) = { \
+ PLUGIN_VAR_DOUBLE | PLUGIN_VAR_THDLOCAL | ((opt) & PLUGIN_VAR_MASK), \
+ #name, comment, check, update, -1, def, min, max, blk, NULL }
+
+/* accessor macros */
+
+#define SYSVAR(name) \
+ (*(MYSQL_SYSVAR_NAME(name).value))
+
+/* when thd == null, result points to global value */
+#define THDVAR(thd, name) \
+ (*(MYSQL_SYSVAR_NAME(name).resolve(thd, MYSQL_SYSVAR_NAME(name).offset)))
+
+
+/*
+ Plugin description structure.
+*/
+
+struct st_mysql_plugin
+{
+ int type; /* the plugin type (a MYSQL_XXX_PLUGIN value) */
+ void *info; /* pointer to type-specific plugin descriptor */
+ const char *name; /* plugin name */
+ const char *author; /* plugin author (for I_S.PLUGINS) */
+ const char *descr; /* general descriptive text (for I_S.PLUGINS) */
+ int license; /* the plugin license (PLUGIN_LICENSE_XXX) */
+ int (*init)(MYSQL_PLUGIN); /* the function to invoke when plugin is loaded */
+ int (*deinit)(MYSQL_PLUGIN);/* the function to invoke when plugin is unloaded */
+ unsigned int version; /* plugin version (for I_S.PLUGINS) */
+ struct st_mysql_show_var *status_vars;
+ struct st_mysql_sys_var **system_vars;
+ void * __reserved1; /* reserved for dependency checking */
+ unsigned long flags; /* flags for plugin */
+};
+
+/*************************************************************************
+ API for Full-text parser plugin. (MYSQL_FTPARSER_PLUGIN)
+*/
+#define MYSQL_FTPARSER_INTERFACE_VERSION 0x0101
+
+/*************************************************************************
+ API for Query Rewrite plugin. (MYSQL_QUERY_REWRITE_PLUGIN)
+*/
+
+#define MYSQL_REWRITE_PRE_PARSE_INTERFACE_VERSION 0x0010
+#define MYSQL_REWRITE_POST_PARSE_INTERFACE_VERSION 0x0010
+
+/*************************************************************************
+ API for Storage Engine plugin. (MYSQL_DAEMON_PLUGIN)
+*/
+
+/* handlertons of different MySQL releases are incompatible */
+#define MYSQL_DAEMON_INTERFACE_VERSION (MYSQL_VERSION_ID << 8)
+
+/*
+ Here we define only the descriptor structure, that is referred from
+ st_mysql_plugin.
+*/
+
+struct st_mysql_daemon
+{
+ int interface_version;
+};
+
+
+/*************************************************************************
+ API for I_S plugin. (MYSQL_INFORMATION_SCHEMA_PLUGIN)
+*/
+
+/* handlertons of different MySQL releases are incompatible */
+#define MYSQL_INFORMATION_SCHEMA_INTERFACE_VERSION (MYSQL_VERSION_ID << 8)
+
+/*
+ Here we define only the descriptor structure, that is referred from
+ st_mysql_plugin.
+*/
+
+struct st_mysql_information_schema
+{
+ int interface_version;
+};
+
+
+/*************************************************************************
+ API for Storage Engine plugin. (MYSQL_STORAGE_ENGINE_PLUGIN)
+*/
+
+/* handlertons of different MySQL releases are incompatible */
+#define MYSQL_HANDLERTON_INTERFACE_VERSION (MYSQL_VERSION_ID << 8)
+
+/*
+ The real API is in the sql/handler.h
+ Here we define only the descriptor structure, that is referred from
+ st_mysql_plugin.
+*/
+
+struct st_mysql_storage_engine
+{
+ int interface_version;
+};
+
+struct handlerton;
+
+
+/*
+ API for Replication plugin. (MYSQL_REPLICATION_PLUGIN)
+*/
+ #define MYSQL_REPLICATION_INTERFACE_VERSION 0x0400
+
+ /**
+ Replication plugin descriptor
+ */
+ struct Mysql_replication {
+ int interface_version;
+ };
+
+/*************************************************************************
+ st_mysql_value struct for reading values from mysqld.
+ Used by server variables framework to parse user-provided values.
+ Will be used for arguments when implementing UDFs.
+
+ Note that val_str() returns a string in temporary memory
+ that will be freed at the end of statement. Copy the string
+ if you need it to persist.
+*/
+
+#define MYSQL_VALUE_TYPE_STRING 0
+#define MYSQL_VALUE_TYPE_REAL 1
+#define MYSQL_VALUE_TYPE_INT 2
+
+struct st_mysql_value
+{
+ int (*value_type)(struct st_mysql_value *);
+ const char *(*val_str)(struct st_mysql_value *, char *buffer, int *length);
+ int (*val_real)(struct st_mysql_value *, double *realbuf);
+ int (*val_int)(struct st_mysql_value *, long long *intbuf);
+ int (*is_unsigned)(struct st_mysql_value *);
+};
+
+
+/*************************************************************************
+ Miscellaneous functions for plugin implementors
+*/
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int thd_in_lock_tables(const MYSQL_THD thd);
+int thd_tablespace_op(const MYSQL_THD thd);
+long long thd_test_options(const MYSQL_THD thd, long long test_options);
+int thd_sql_command(const MYSQL_THD thd);
+const char *set_thd_proc_info(MYSQL_THD thd, const char *info,
+ const char *calling_func,
+ const char *calling_file,
+ const unsigned int calling_line);
+void **thd_ha_data(const MYSQL_THD thd, const struct handlerton *hton);
+void thd_storage_lock_wait(MYSQL_THD thd, long long value);
+int thd_tx_isolation(const MYSQL_THD thd);
+int thd_tx_is_read_only(const MYSQL_THD thd);
+MYSQL_THD thd_tx_arbitrate(MYSQL_THD requestor, MYSQL_THD holder);
+int thd_tx_priority(const MYSQL_THD thd);
+int thd_tx_is_dd_trx(const MYSQL_THD thd);
+char *thd_security_context(MYSQL_THD thd, char *buffer, size_t length,
+ size_t max_query_len);
+/* Increments the row counter, see THD::row_count */
+void thd_inc_row_count(MYSQL_THD thd);
+int thd_allow_batch(MYSQL_THD thd);
+
+
+/**
+ Mark transaction to rollback and mark error as fatal to a
+ sub-statement if in sub statement mode.
+
+ @param thd user thread connection handle
+ @param all if all != 0, rollback the main transaction
+*/
+
+void thd_mark_transaction_to_rollback(MYSQL_THD thd, int all);
+
+/**
+ Create a temporary file.
+
+ @details
+ The temporary file is created in a location specified by the mysql
+ server configuration (--tmpdir option). The caller does not need to
+ delete the file, it will be deleted automatically.
+
+ @param prefix prefix for temporary file name
+ @retval -1 error
+ @retval >= 0 a file handle that can be passed to dup or my_close
+*/
+int mysql_tmpfile(const char *prefix);
+
+/**
+ Check the killed state of a connection
+
+ @details
+ In MySQL support for the KILL statement is cooperative. The KILL
+ statement only sets a "killed" flag. This function returns the value
+ of that flag. A thread should check it often, especially inside
+ time-consuming loops, and gracefully abort the operation if it is
+ non-zero.
+
+ @param thd user thread connection handle
+ @retval 0 the connection is active
+ @retval 1 the connection has been killed
+*/
+int thd_killed(const MYSQL_THD thd);
+
+/**
+ Set the killed status of the current statement.
+
+ @param thd user thread connection handle
+*/
+void thd_set_kill_status(const MYSQL_THD thd);
+
+/**
+ Get binary log position for latest written entry.
+
+ @note The file variable will be set to a buffer holding the name of
+ the file name currently, but this can change if a rotation
+ occur. Copy the string if you want to retain it.
+
+ @param thd Use thread connection handle
+ @param file_var Pointer to variable that will hold the file name.
+ @param pos_var Pointer to variable that will hold the file position.
+ */
+void thd_binlog_pos(const MYSQL_THD thd,
+ const char **file_var,
+ unsigned long long *pos_var);
+
+/**
+ Return the thread id of a user thread
+
+ @param thd user thread connection handle
+ @return thread id
+*/
+unsigned long thd_get_thread_id(const MYSQL_THD thd);
+
+/**
+ Get the XID for this connection's transaction
+
+ @param thd user thread connection handle
+ @param xid location where identifier is stored
+*/
+void thd_get_xid(const MYSQL_THD thd, MYSQL_XID *xid);
+
+/**
+ Invalidate the query cache for a given table.
+
+ @param thd user thread connection handle
+ @param key databasename/tablename in the canonical format.
+ @param key_length length of key in bytes, including the PATH separator
+ @param using_trx flag: TRUE if using transactions, FALSE otherwise
+*/
+void mysql_query_cache_invalidate4(MYSQL_THD thd,
+ const char *key, unsigned int key_length,
+ int using_trx);
+
+
+/**
+ Provide a handler data getter to simplify coding
+*/
+void *thd_get_ha_data(const MYSQL_THD thd, const struct handlerton *hton);
+
+
+/**
+ Provide a handler data setter to simplify coding
+
+ @details
+ Set ha_data pointer (storage engine per-connection information).
+
+ To avoid unclean deactivation (uninstall) of storage engine plugin
+ in the middle of transaction, additional storage engine plugin
+ lock is acquired.
+
+ If ha_data is not null and storage engine plugin was not locked
+ by thd_set_ha_data() in this connection before, storage engine
+ plugin gets locked.
+
+ If ha_data is null and storage engine plugin was locked by
+ thd_set_ha_data() in this connection before, storage engine
+ plugin lock gets released.
+
+ If handlerton::close_connection() didn't reset ha_data, server does
+ it immediately after calling handlerton::close_connection().
+*/
+void thd_set_ha_data(MYSQL_THD thd, const struct handlerton *hton,
+ const void *ha_data);
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _my_plugin_h */
diff --git a/db/include/plugin_audit.h b/db/include/plugin_audit.h
new file mode 100644
index 0000000..12dc8b8
--- /dev/null
+++ b/db/include/plugin_audit.h
@@ -0,0 +1,565 @@
+/* Copyright (c) 2007, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 _my_audit_h
+#define _my_audit_h
+
+#include "plugin.h"
+#include "mysql/mysql_lex_string.h"
+#ifndef MYSQL_ABI_CHECK
+#include "m_string.h"
+#endif
+#include "my_command.h"
+#include "my_sqlcommand.h"
+
+#define MYSQL_AUDIT_INTERFACE_VERSION 0x0401
+
+/**
+ @enum mysql_event_class_t
+
+ Audit event classes.
+*/
+typedef enum
+{
+ MYSQL_AUDIT_GENERAL_CLASS = 0,
+ MYSQL_AUDIT_CONNECTION_CLASS = 1,
+ MYSQL_AUDIT_PARSE_CLASS = 2,
+ MYSQL_AUDIT_AUTHORIZATION_CLASS = 3,
+ MYSQL_AUDIT_TABLE_ACCESS_CLASS = 4,
+ MYSQL_AUDIT_GLOBAL_VARIABLE_CLASS = 5,
+ MYSQL_AUDIT_SERVER_STARTUP_CLASS = 6,
+ MYSQL_AUDIT_SERVER_SHUTDOWN_CLASS = 7,
+ MYSQL_AUDIT_COMMAND_CLASS = 8,
+ MYSQL_AUDIT_QUERY_CLASS = 9,
+ MYSQL_AUDIT_STORED_PROGRAM_CLASS = 10,
+ /* This item must be last in the list. */
+ MYSQL_AUDIT_CLASS_MASK_SIZE
+} mysql_event_class_t;
+
+/**
+ @struct st_mysql_audit
+
+ The descriptor structure that is referred from st_mysql_plugin.
+*/
+struct st_mysql_audit
+{
+ /**
+ Interface version.
+ */
+ int interface_version;
+
+ /**
+ Event occurs when the event class consumer is to be
+ disassociated from the specified THD.This would typically occur
+ before some operation which may require sleeping - such as when
+ waiting for the next query from the client.
+ */
+ void (*release_thd)(MYSQL_THD);
+
+ /**
+ Invoked whenever an event occurs which is of any
+ class for which the plugin has interest.The second argument
+ indicates the specific event class and the third argument is data
+ as required for that class.
+ */
+ int (*event_notify)(MYSQL_THD, mysql_event_class_t, const void *);
+
+ /**
+ An array of bits used to indicate what event classes
+ that this plugin wants to receive.
+ */
+ unsigned long class_mask[MYSQL_AUDIT_CLASS_MASK_SIZE];
+};
+
+/**
+ @typedef enum_sql_command_t
+
+ SQL command type definition.
+*/
+typedef enum enum_sql_command enum_sql_command_t;
+
+/**
+ @enum mysql_event_general_subclass_t
+
+ Events for the MYSQL_AUDIT_GENERAL_CLASS event class.
+*/
+typedef enum
+{
+ /** occurs before emitting to the general query log. */
+ MYSQL_AUDIT_GENERAL_LOG = 1 << 0,
+ /** occurs before transmitting errors to the user. */
+ MYSQL_AUDIT_GENERAL_ERROR = 1 << 1,
+ /** occurs after transmitting a resultset to the user. */
+ MYSQL_AUDIT_GENERAL_RESULT = 1 << 2,
+ /** occurs after transmitting a resultset or errors */
+ MYSQL_AUDIT_GENERAL_STATUS = 1 << 3
+} mysql_event_general_subclass_t;
+
+#define MYSQL_AUDIT_GENERAL_ALL (MYSQL_AUDIT_GENERAL_LOG | \
+ MYSQL_AUDIT_GENERAL_ERROR | \
+ MYSQL_AUDIT_GENERAL_RESULT | \
+ MYSQL_AUDIT_GENERAL_STATUS)
+/**
+ @struct mysql_event_general
+
+ Structure for the MYSQL_AUDIT_GENERAL_CLASS event class.
+*/
+struct mysql_event_general
+{
+ mysql_event_general_subclass_t event_subclass;
+ int general_error_code;
+ unsigned long general_thread_id;
+ MYSQL_LEX_CSTRING general_user;
+ MYSQL_LEX_CSTRING general_command;
+ MYSQL_LEX_CSTRING general_query;
+ struct charset_info_st *general_charset;
+ unsigned long long general_time;
+ unsigned long long general_rows;
+ MYSQL_LEX_CSTRING general_host;
+ MYSQL_LEX_CSTRING general_sql_command;
+ MYSQL_LEX_CSTRING general_external_user;
+ MYSQL_LEX_CSTRING general_ip;
+};
+
+/**
+ @enum mysql_event_connection_subclass_t
+
+ Events for MYSQL_AUDIT_CONNECTION_CLASS event class.
+*/
+typedef enum
+{
+ /** occurs after authentication phase is completed. */
+ MYSQL_AUDIT_CONNECTION_CONNECT = 1 << 0,
+ /** occurs after connection is terminated. */
+ MYSQL_AUDIT_CONNECTION_DISCONNECT = 1 << 1,
+ /** occurs after COM_CHANGE_USER RPC is completed. */
+ MYSQL_AUDIT_CONNECTION_CHANGE_USER = 1 << 2,
+ /** occurs before authentication. */
+ MYSQL_AUDIT_CONNECTION_PRE_AUTHENTICATE = 1 << 3
+} mysql_event_connection_subclass_t;
+
+#define MYSQL_AUDIT_CONNECTION_ALL (MYSQL_AUDIT_CONNECTION_CONNECT | \
+ MYSQL_AUDIT_CONNECTION_DISCONNECT | \
+ MYSQL_AUDIT_CONNECTION_CHANGE_USER | \
+ MYSQL_AUDIT_CONNECTION_PRE_AUTHENTICATE)
+/**
+ @struct mysql_event_connection
+
+ Structure for the MYSQL_AUDIT_CONNECTION_CLASS event class.
+*/
+struct mysql_event_connection
+{
+ /** Event subclass. */
+ mysql_event_connection_subclass_t event_subclass;
+ /** Current status of the connection. */
+ int status;
+ /** Connection id. */
+ unsigned long connection_id;
+ /** User name of this connection. */
+ MYSQL_LEX_CSTRING user;
+ /** Priv user name. */
+ MYSQL_LEX_CSTRING priv_user;
+ /** External user name. */
+ MYSQL_LEX_CSTRING external_user;
+ /** Proxy user used for this connection. */
+ MYSQL_LEX_CSTRING proxy_user;
+ /** Connection host. */
+ MYSQL_LEX_CSTRING host;
+ /** IP of the connection. */
+ MYSQL_LEX_CSTRING ip;
+ /** Database name specified at connection time. */
+ MYSQL_LEX_CSTRING database;
+ /** Connection type:
+ - 0 Undefined
+ - 1 TCP/IP
+ - 2 Socket
+ - 3 Named pipe
+ - 4 SSL
+ - 5 Shared memory
+ */
+ int connection_type;
+};
+
+/**
+@enum mysql_event_parse_subclass_t
+
+Events for MYSQL_AUDIT_PARSE_CLASS event class.
+*/
+typedef enum
+{
+ /** occurs before the query parsing. */
+ MYSQL_AUDIT_PARSE_PREPARSE = 1 << 0,
+ /** occurs after the query parsing. */
+ MYSQL_AUDIT_PARSE_POSTPARSE = 1 << 1
+} mysql_event_parse_subclass_t;
+
+#define MYSQL_AUDIT_PARSE_ALL (MYSQL_AUDIT_PARSE_PREPARSE | \
+ MYSQL_AUDIT_PARSE_POSTPARSE)
+
+typedef enum
+{
+ MYSQL_AUDIT_PARSE_REWRITE_PLUGIN_NONE = 0,
+ /// mysql_event_parse::flags Must be set by a plugin if the query is rewritten.
+ MYSQL_AUDIT_PARSE_REWRITE_PLUGIN_QUERY_REWRITTEN = 1 << 0,
+ /// mysql_event_parse::flags Is set by the server if the query is prepared statement.
+ MYSQL_AUDIT_PARSE_REWRITE_PLUGIN_IS_PREPARED_STATEMENT = 1 << 1
+} mysql_event_parse_rewrite_plugin_flag;
+
+/** Data for the MYSQL_AUDIT_PARSE events */
+struct mysql_event_parse
+{
+ /** MYSQL_AUDIT_[PRE|POST]_PARSE event id */
+ mysql_event_parse_subclass_t event_subclass;
+
+ /** one of FLAG_REWRITE_PLUGIN_* */
+ mysql_event_parse_rewrite_plugin_flag *flags;
+
+ /** input: the original query text */
+ MYSQL_LEX_CSTRING query;
+
+ /** output: returns the null-terminated rewriten query allocated by my_malloc() */
+ MYSQL_LEX_CSTRING *rewritten_query;
+};
+
+/**
+ @enum mysql_event_authorization_subclass_t
+
+ Events for MYSQL_AUDIT_AUTHORIZATION_CLASS event class.
+*/
+typedef enum
+{
+ MYSQL_AUDIT_AUTHORIZATION_USER = 1 << 0,
+ /** Occurs when database privilege is checked. */
+ MYSQL_AUDIT_AUTHORIZATION_DB = 1 << 1,
+ /** Occurs when table privilege is checked. */
+ MYSQL_AUDIT_AUTHORIZATION_TABLE = 1 << 2,
+ /** Occurs when column privilege is checked. */
+ MYSQL_AUDIT_AUTHORIZATION_COLUMN = 1 << 3,
+ /** Occurs when procedure privilege is checked. */
+ MYSQL_AUDIT_AUTHORIZATION_PROCEDURE = 1 << 4,
+ /** Occurs when proxy privilege is checked. */
+ MYSQL_AUDIT_AUTHORIZATION_PROXY = 1 << 5
+} mysql_event_authorization_subclass_t;
+
+#define MYSQL_AUDIT_AUTHORIZATION_ALL (MYSQL_AUDIT_AUTHORIZATION_USER | \
+ MYSQL_AUDIT_AUTHORIZATION_DB | \
+ MYSQL_AUDIT_AUTHORIZATION_TABLE | \
+ MYSQL_AUDIT_AUTHORIZATION_COLUMN | \
+ MYSQL_AUDIT_AUTHORIZATION_PROCEDURE | \
+ MYSQL_AUDIT_AUTHORIZATION_PROXY)
+/**
+ @struct mysql_event_authorization
+
+ Structure for MYSQL_AUDIT_AUTHORIZATION_CLASS event class.
+*/
+struct mysql_event_authorization
+{
+ /** Event subclass. */
+ mysql_event_authorization_subclass_t event_subclass;
+ /** Event status. */
+ int status;
+ /** Connection id. */
+ unsigned int connection_id;
+ /** SQL command id. */
+ enum_sql_command_t sql_command_id;
+ /** SQL query text. */
+ MYSQL_LEX_CSTRING query;
+ /** SQL query charset. */
+ const struct charset_info_st *query_charset;
+ /** Database name. */
+ MYSQL_LEX_CSTRING database;
+ /** Table name. */
+ MYSQL_LEX_CSTRING table;
+ /** Other name associated with the event. */
+ MYSQL_LEX_CSTRING object;
+ /** Requested authorization privileges. */
+ unsigned long requested_privilege;
+ /** Currently granted authorization privileges. */
+ unsigned long granted_privilege;
+};
+
+/**
+ @enum mysql_event_table_row_access_subclass_t
+
+ Events for MYSQL_AUDIT_TABLE_ACCES_CLASS event class.
+*/
+typedef enum
+{
+ /** Occurs when table data are read. */
+ MYSQL_AUDIT_TABLE_ACCESS_READ = 1 << 0,
+ /** Occurs when table data are inserted. */
+ MYSQL_AUDIT_TABLE_ACCESS_INSERT = 1 << 1,
+ /** Occurs when table data are updated. */
+ MYSQL_AUDIT_TABLE_ACCESS_UPDATE = 1 << 2,
+ /** Occurs when table data are deleted. */
+ MYSQL_AUDIT_TABLE_ACCESS_DELETE = 1 << 3
+} mysql_event_table_access_subclass_t;
+
+#define MYSQL_AUDIT_TABLE_ACCESS_ALL (MYSQL_AUDIT_TABLE_ACCESS_READ | \
+ MYSQL_AUDIT_TABLE_ACCESS_INSERT | \
+ MYSQL_AUDIT_TABLE_ACCESS_UPDATE | \
+ MYSQL_AUDIT_TABLE_ACCESS_DELETE)
+
+/**
+ @struct mysql_event_table_row_access
+
+ Structure for MYSQL_AUDIT_TABLE_ACCES_CLASS event class.
+*/
+struct mysql_event_table_access
+{
+ /** Event subclass. */
+ mysql_event_table_access_subclass_t event_subclass;
+ /** Connection id. */
+ unsigned long connection_id;
+ /** SQL command id. */
+ enum_sql_command_t sql_command_id;
+ /** SQL query. */
+ MYSQL_LEX_CSTRING query;
+ /** SQL query charset. */
+ const struct charset_info_st *query_charset;
+ /** Database name. */
+ MYSQL_LEX_CSTRING table_database;
+ /** Table name. */
+ MYSQL_LEX_CSTRING table_name;
+};
+
+/**
+ @enum mysql_event_global_variable_subclass_t
+
+ Events for MYSQL_AUDIT_GLOBAL_VARIABLE_CLASS event class.
+*/
+typedef enum
+{
+ /** Occurs when global variable is retrieved. */
+ MYSQL_AUDIT_GLOBAL_VARIABLE_GET = 1 << 0,
+ /** Occurs when global variable is set. */
+ MYSQL_AUDIT_GLOBAL_VARIABLE_SET = 1 << 1
+} mysql_event_global_variable_subclass_t;
+
+#define MYSQL_AUDIT_GLOBAL_VARIABLE_ALL (MYSQL_AUDIT_GLOBAL_VARIABLE_GET | \
+ MYSQL_AUDIT_GLOBAL_VARIABLE_SET)
+
+/** Events for MYSQL_AUDIT_GLOBAL_VARIABLE_CLASS event class. */
+struct mysql_event_global_variable
+{
+ /** Event subclass. */
+ mysql_event_global_variable_subclass_t event_subclass;
+ /** Connection id. */
+ unsigned long connection_id;
+ /** SQL command id. */
+ enum_sql_command_t sql_command_id;
+ /** Variable name. */
+ MYSQL_LEX_CSTRING variable_name;
+ /** Variable value. */
+ MYSQL_LEX_CSTRING variable_value;
+};
+
+/**
+ @enum mysql_event_server_startup_subclass_t
+
+ Events for MYSQL_AUDIT_SERVER_STARTUP_CLASS event class.
+*/
+typedef enum
+{
+ /** Occurs after all subsystem are initialized during system start. */
+ MYSQL_AUDIT_SERVER_STARTUP_STARTUP = 1 << 0
+} mysql_event_server_startup_subclass_t;
+
+#define MYSQL_AUDIT_SERVER_STARTUP_ALL (MYSQL_AUDIT_SERVER_STARTUP_STARTUP)
+
+/**
+ @struct mysql_event_server_startup
+
+ Structure for MYSQL_AUDIT_SERVER_STARTUP_CLASS event class.
+*/
+struct mysql_event_server_startup
+{
+ /** Event subclass. */
+ mysql_event_server_startup_subclass_t event_subclass;
+ /** Command line arguments. */
+ const char **argv;
+ /** Command line arguments count. */
+ unsigned int argc;
+};
+
+/**
+ @enum mysql_event_server_shutdown_subclass_t
+
+ Events for MYSQL_AUDIT_SERVER_SHUTDOWN_CLASS event class.
+*/
+typedef enum
+{
+ /** Occurs when global variable is set. */
+ MYSQL_AUDIT_SERVER_SHUTDOWN_SHUTDOWN = 1 << 0
+} mysql_event_server_shutdown_subclass_t;
+
+#define MYSQL_AUDIT_SERVER_SHUTDOWN_ALL (MYSQL_AUDIT_SERVER_SHUTDOWN_SHUTDOWN)
+
+/**
+ @enum mysql_server_shutdown_reason_t
+
+ Server shutdown reason.
+*/
+typedef enum
+{
+ /** User requested shut down. */
+ MYSQL_AUDIT_SERVER_SHUTDOWN_REASON_SHUTDOWN,
+ /** The server aborts. */
+ MYSQL_AUDIT_SERVER_SHUTDOWN_REASON_ABORT
+} mysql_server_shutdown_reason_t;
+
+/**
+ @struct mysql_event_server_shutdown
+
+ Structure for MYSQL_AUDIT_SERVER_SHUTDOWN_CLASS event class.
+*/
+struct mysql_event_server_shutdown
+{
+ /** Shutdown event. */
+ mysql_event_server_shutdown_subclass_t event_subclass;
+ /** Exit code associated with the shutdown event. */
+ int exit_code;
+ /** Shutdown reason. */
+ mysql_server_shutdown_reason_t reason;
+};
+
+/**
+ @enum mysql_event_command_subclass_t
+
+ Events for MYSQL_AUDIT_COMMAND_CLASS event class.
+*/
+typedef enum
+{
+ /** Command start event. */
+ MYSQL_AUDIT_COMMAND_START = 1 << 0,
+ /** Command end event. */
+ MYSQL_AUDIT_COMMAND_END = 1 << 1
+} mysql_event_command_subclass_t;
+
+#define MYSQL_AUDIT_COMMAND_ALL (MYSQL_AUDIT_COMMAND_START | \
+ MYSQL_AUDIT_COMMAND_END)
+/**
+ @typedef enum_server_command_t
+
+ Server command type definition.
+*/
+typedef enum enum_server_command enum_server_command_t;
+
+/**
+ @struct mysql_event_command
+
+ Event for MYSQL_AUDIT_COMMAND_CLASS event class.
+ Events generated as a result of RPC command requests.
+*/
+struct mysql_event_command
+{
+ /** Command event subclass. */
+ mysql_event_command_subclass_t event_subclass;
+ /** Command event status. */
+ int status;
+ /** Connection id. */
+ unsigned long connection_id;
+ /** Command id. */
+ enum_server_command_t command_id;
+};
+
+/**
+ @enum mysql_event_query_subclass_t
+
+ Events for MYSQL_AUDIT_QUERY_CLASS event class.
+*/
+typedef enum
+{
+ /** Query start event. */
+ MYSQL_AUDIT_QUERY_START = 1 << 0,
+ /** Nested query start event. */
+ MYSQL_AUDIT_QUERY_NESTED_START = 1 << 1,
+ /** Query post parse event. */
+ MYSQL_AUDIT_QUERY_STATUS_END = 1 << 2,
+ /** Nested query status end event. */
+ MYSQL_AUDIT_QUERY_NESTED_STATUS_END = 1 << 3
+} mysql_event_query_subclass_t;
+
+#define MYSQL_AUDIT_QUERY_ALL (MYSQL_AUDIT_QUERY_START | \
+ MYSQL_AUDIT_QUERY_NESTED_START | \
+ MYSQL_AUDIT_QUERY_STATUS_END | \
+ MYSQL_AUDIT_QUERY_NESTED_STATUS_END)
+/**
+ @struct mysql_event_command
+
+ Event for MYSQL_AUDIT_COMMAND_CLASS event class.
+*/
+struct mysql_event_query
+{
+ /** Event subclass. */
+ mysql_event_query_subclass_t event_subclass;
+ /** Event status. */
+ int status;
+ /** Connection id. */
+ unsigned long connection_id;
+ /** SQL command id. */
+ enum_sql_command_t sql_command_id;
+ /** SQL query. */
+ MYSQL_LEX_CSTRING query;
+ /** SQL query charset. */
+ const struct charset_info_st *query_charset;
+};
+
+/**
+ @enum mysql_event_stored_program_subclass_t
+
+ Events for MYSQL_AUDIT_STORED_PROGRAM_CLASS event class.
+*/
+typedef enum
+{
+ /** Stored program execution event. */
+ MYSQL_AUDIT_STORED_PROGRAM_EXECUTE = 1 << 0
+} mysql_event_stored_program_subclass_t;
+
+#define MYSQL_AUDIT_STORED_PROGRAM_ALL (MYSQL_AUDIT_STORED_PROGRAM_EXECUTE)
+
+/**
+ @struct mysql_event_command
+
+Event for MYSQL_AUDIT_COMMAND_CLASS event class.
+*/
+struct mysql_event_stored_program
+{
+ /** Event subclass. */
+ mysql_event_stored_program_subclass_t event_subclass;
+ /** Connection id. */
+ unsigned long connection_id;
+ /** SQL command id. */
+ enum_sql_command_t sql_command_id;
+ /** SQL query text. */
+ MYSQL_LEX_CSTRING query;
+ /** SQL query charset. */
+ const struct charset_info_st *query_charset;
+ /** The Database the procedure is defined in. */
+ MYSQL_LEX_CSTRING database;
+ /** Name of the stored program. */
+ MYSQL_LEX_CSTRING name;
+ /** Stored program parameters. */
+ void *parameters;
+};
+
+#endif
diff --git a/db/include/plugin_ftparser.h b/db/include/plugin_ftparser.h
new file mode 100644
index 0000000..e854bf1
--- /dev/null
+++ b/db/include/plugin_ftparser.h
@@ -0,0 +1,221 @@
+/* Copyright (c) 2005, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 _my_plugin_ftparser_h
+#define _my_plugin_ftparser_h
+
+#include "plugin.h"
+
+/*************************************************************************
+ API for Full-text parser plugin. (MYSQL_FTPARSER_PLUGIN)
+*/
+
+
+/* Parsing modes. Set in MYSQL_FTPARSER_PARAM::mode */
+enum enum_ftparser_mode
+{
+/*
+ Fast and simple mode. This mode is used for indexing, and natural
+ language queries.
+
+ The parser is expected to return only those words that go into the
+ index. Stopwords or too short/long words should not be returned. The
+ 'boolean_info' argument of mysql_add_word() does not have to be set.
+*/
+ MYSQL_FTPARSER_SIMPLE_MODE= 0,
+
+/*
+ Parse with stopwords mode. This mode is used in boolean searches for
+ "phrase matching."
+
+ The parser is not allowed to ignore words in this mode. Every word
+ should be returned, including stopwords and words that are too short
+ or long. The 'boolean_info' argument of mysql_add_word() does not
+ have to be set.
+*/
+ MYSQL_FTPARSER_WITH_STOPWORDS= 1,
+
+/*
+ Parse in boolean mode. This mode is used to parse a boolean query string.
+
+ The parser should provide a valid MYSQL_FTPARSER_BOOLEAN_INFO
+ structure in the 'boolean_info' argument to mysql_add_word().
+ Usually that means that the parser should recognize boolean operators
+ in the parsing stream and set appropriate fields in
+ MYSQL_FTPARSER_BOOLEAN_INFO structure accordingly. As for
+ MYSQL_FTPARSER_WITH_STOPWORDS mode, no word should be ignored.
+ Instead, use FT_TOKEN_STOPWORD for the token type of such a word.
+*/
+ MYSQL_FTPARSER_FULL_BOOLEAN_INFO= 2
+};
+
+/*
+ Token types for boolean mode searching (used for the type member of
+ MYSQL_FTPARSER_BOOLEAN_INFO struct)
+
+ FT_TOKEN_EOF: End of data.
+ FT_TOKEN_WORD: Regular word.
+ FT_TOKEN_LEFT_PAREN: Left parenthesis (start of group/sub-expression).
+ FT_TOKEN_RIGHT_PAREN: Right parenthesis (end of group/sub-expression).
+ FT_TOKEN_STOPWORD: Stopword.
+*/
+
+enum enum_ft_token_type
+{
+ FT_TOKEN_EOF= 0,
+ FT_TOKEN_WORD= 1,
+ FT_TOKEN_LEFT_PAREN= 2,
+ FT_TOKEN_RIGHT_PAREN= 3,
+ FT_TOKEN_STOPWORD= 4
+};
+
+/*
+ This structure is used in boolean search mode only. It conveys
+ boolean-mode metadata to the MySQL search engine for every word in
+ the search query. A valid instance of this structure must be filled
+ in by the plugin parser and passed as an argument in the call to
+ mysql_add_word (the callback function in the MYSQL_FTPARSER_PARAM
+ structure) when a query is parsed in boolean mode.
+
+ type: The token type. Should be one of the enum_ft_token_type values.
+
+ yesno: Whether the word must be present for a match to occur:
+ >0 Must be present
+ <0 Must not be present
+ 0 Neither; the word is optional but its presence increases the relevance
+ With the default settings of the ft_boolean_syntax system variable,
+ >0 corresponds to the '+' operator, <0 corrresponds to the '-' operator,
+ and 0 means neither operator was used.
+
+ weight_adjust: A weighting factor that determines how much a match
+ for the word counts. Positive values increase, negative - decrease the
+ relative word's importance in the query.
+
+ wasign: The sign of the word's weight in the query. If it's non-negative
+ the match for the word will increase document relevance, if it's
+ negative - decrease (the word becomes a "noise word", the less of it the
+ better).
+
+ trunc: Corresponds to the '*' operator in the default setting of the
+ ft_boolean_syntax system variable.
+
+ position: Start position in bytes of the word in the document, used by InnoDB FTS.
+*/
+
+typedef struct st_mysql_ftparser_boolean_info
+{
+ enum enum_ft_token_type type;
+ int yesno;
+ int weight_adjust;
+ char wasign;
+ char trunc;
+ int position;
+ /* These are parser state and must be removed. */
+ char prev;
+ char *quot;
+} MYSQL_FTPARSER_BOOLEAN_INFO;
+
+/*
+ The following flag means that buffer with a string (document, word)
+ may be overwritten by the caller before the end of the parsing (that is
+ before st_mysql_ftparser::deinit() call). If one needs the string
+ to survive between two successive calls of the parsing function, she
+ needs to save a copy of it. The flag may be set by MySQL before calling
+ st_mysql_ftparser::parse(), or it may be set by a plugin before calling
+ st_mysql_ftparser_param::mysql_parse() or
+ st_mysql_ftparser_param::mysql_add_word().
+*/
+#define MYSQL_FTFLAGS_NEED_COPY 1
+
+/*
+ An argument of the full-text parser plugin. This structure is
+ filled in by MySQL server and passed to the parsing function of the
+ plugin as an in/out parameter.
+
+ mysql_parse: A pointer to the built-in parser implementation of the
+ server. It's set by the server and can be used by the parser plugin
+ to invoke the MySQL default parser. If plugin's role is to extract
+ textual data from .doc, .pdf or .xml content, it might extract
+ plaintext from the content, and then pass the text to the default
+ MySQL parser to be parsed.
+
+ mysql_add_word: A server callback to add a new word. When parsing
+ a document, the server sets this to point at a function that adds
+ the word to MySQL full-text index. When parsing a search query,
+ this function will add the new word to the list of words to search
+ for. The boolean_info argument can be NULL for all cases except
+ when mode is MYSQL_FTPARSER_FULL_BOOLEAN_INFO.
+
+ ftparser_state: A generic pointer. The plugin can set it to point
+ to information to be used internally for its own purposes.
+
+ mysql_ftparam: This is set by the server. It is used by MySQL functions
+ called via mysql_parse() and mysql_add_word() callback. The plugin
+ should not modify it.
+
+ cs: Information about the character set of the document or query string.
+
+ doc: A pointer to the document or query string to be parsed.
+
+ length: Length of the document or query string, in bytes.
+
+ flags: See MYSQL_FTFLAGS_* constants above.
+
+ mode: The parsing mode. With boolean operators, with stopwords, or
+ nothing. See enum_ftparser_mode above.
+*/
+
+typedef struct st_mysql_ftparser_param
+{
+ int (*mysql_parse)(struct st_mysql_ftparser_param *,
+ char *doc, int doc_len);
+ int (*mysql_add_word)(struct st_mysql_ftparser_param *,
+ char *word, int word_len,
+ MYSQL_FTPARSER_BOOLEAN_INFO *boolean_info);
+ void *ftparser_state;
+ void *mysql_ftparam;
+ const struct charset_info_st *cs;
+ char *doc;
+ int length;
+ int flags;
+ enum enum_ftparser_mode mode;
+} MYSQL_FTPARSER_PARAM;
+
+/*
+ Full-text parser descriptor.
+
+ interface_version is, e.g., MYSQL_FTPARSER_INTERFACE_VERSION.
+ The parsing, initialization, and deinitialization functions are
+ invoked per SQL statement for which the parser is used.
+*/
+
+struct st_mysql_ftparser
+{
+ int interface_version;
+ int (*parse)(MYSQL_FTPARSER_PARAM *param);
+ int (*init)(MYSQL_FTPARSER_PARAM *param);
+ int (*deinit)(MYSQL_FTPARSER_PARAM *param);
+};
+
+
+#endif
+
diff --git a/db/include/plugin_group_replication.h b/db/include/plugin_group_replication.h
new file mode 100644
index 0000000..7c78612
--- /dev/null
+++ b/db/include/plugin_group_replication.h
@@ -0,0 +1,159 @@
+/* Copyright (c) 2013, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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,
+ 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */
+
+#ifndef MYSQL_PLUGIN_GROUP_REPLICATION_INCLUDED
+#define MYSQL_PLUGIN_GROUP_REPLICATION_INCLUDED
+
+/* API for Group Peplication plugin. (MYSQL_GROUP_REPLICATION_PLUGIN) */
+
+#include
+#define MYSQL_GROUP_REPLICATION_INTERFACE_VERSION 0x0101
+
+/*
+ Callbacks for get_connection_status_info function.
+
+ context field can have NULL value, plugin will always pass it
+ through all callbacks, independent of its value.
+ Its value will not be used by plugin.
+
+ All callbacks are mandatory.
+*/
+typedef struct st_group_replication_connection_status_callbacks
+{
+ void* const context;
+ void (*set_channel_name)(void* const context, const char& value, size_t length);
+ void (*set_group_name)(void* const context, const char& value, size_t length);
+ void (*set_source_uuid)(void* const context, const char& value, size_t length);
+ void (*set_service_state)(void* const context, bool state);
+} GROUP_REPLICATION_CONNECTION_STATUS_CALLBACKS;
+
+/*
+ Callbacks for get_group_members_info function.
+
+ context field can have NULL value, plugin will always pass it
+ through all callbacks, independent of its value.
+ Its value will not be used by plugin.
+
+ All callbacks are mandatory.
+*/
+typedef struct st_group_replication_group_members_callbacks
+{
+ void* const context;
+ void (*set_channel_name)(void* const context, const char& value, size_t length);
+ void (*set_member_id)(void* const context, const char& value, size_t length);
+ void (*set_member_host)(void* const context, const char& value, size_t length);
+ void (*set_member_port)(void* const context, unsigned int value);
+ void (*set_member_state)(void* const context, const char& value, size_t length);
+} GROUP_REPLICATION_GROUP_MEMBERS_CALLBACKS;
+
+/*
+ Callbacks for get_group_member_stats_info function.
+
+ context field can have NULL value, plugin will always pass it
+ through all callbacks, independent of its value.
+ Its value will not be used by plugin.
+
+ All callbacks are mandatory.
+*/
+typedef struct st_group_replication_member_stats_callbacks
+{
+ void* const context;
+ void (*set_channel_name)(void* const context, const char& value, size_t length);
+ void (*set_view_id)(void* const context, const char& value, size_t length);
+ void (*set_member_id)(void* const context, const char& value, size_t length);
+ void (*set_transactions_committed)(void* const context, const char& value, size_t length);
+ void (*set_last_conflict_free_transaction)(void* const context, const char& value, size_t length);
+ void (*set_transactions_in_queue)(void* const context, unsigned long long int value);
+ void (*set_transactions_certified)(void* const context, unsigned long long int value);
+ void (*set_transactions_conflicts_detected)(void* const context, unsigned long long int value);
+ void (*set_transactions_rows_in_validation)(void* const context, unsigned long long int value);
+} GROUP_REPLICATION_GROUP_MEMBER_STATS_CALLBACKS;
+
+struct st_mysql_group_replication
+{
+ int interface_version;
+
+ /*
+ This function is used to start the group replication.
+ */
+ int (*start)();
+ /*
+ This function is used to stop the group replication.
+ */
+ int (*stop)();
+ /*
+ This function is used to get the current group replication running status.
+ */
+ bool (*is_running)();
+ /*
+ This function initializes conflict checking module with info received
+ from group on this member.
+
+ @param info View_change_log_event with conflict checking info.
+ */
+ int (*set_retrieved_certification_info)(void* info);
+
+ /*
+ This function is used to fetch information for group replication kernel stats.
+
+ @param callbacks The set of callbacks and its context used to set the
+ information on caller.
+
+ @note The caller is responsible to free memory from the info structure and
+ from all its fields.
+ */
+ bool (*get_connection_status_info)
+ (const GROUP_REPLICATION_CONNECTION_STATUS_CALLBACKS& callbacks);
+
+ /*
+ This function is used to fetch information for group replication members.
+
+ @param callbacks The set of callbacks and its context used to set the
+ information on caller.
+
+ @note The caller is responsible to free memory from the info structure and
+ from all its fields.
+ */
+ bool (*get_group_members_info)
+ (unsigned int index,
+ const GROUP_REPLICATION_GROUP_MEMBERS_CALLBACKS& callbacks);
+
+ /*
+ This function is used to fetch information for group replication members statistics.
+
+ @param callbacks The set of callbacks and its context used to set the
+ information on caller.
+
+ @note The caller is responsible to free memory from the info structure and
+ from all its fields.
+ */
+ bool (*get_group_member_stats_info)
+ (const GROUP_REPLICATION_GROUP_MEMBER_STATS_CALLBACKS& callbacks);
+
+ /*
+ Get number of group replication members.
+ */
+ unsigned int (*get_members_number_info)();
+};
+
+#endif
+
diff --git a/db/include/plugin_keyring.h b/db/include/plugin_keyring.h
new file mode 100644
index 0000000..79921b2
--- /dev/null
+++ b/db/include/plugin_keyring.h
@@ -0,0 +1,191 @@
+/* Copyright (c) 2016, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 MYSQL_PLUGIN_KEYRING_INCLUDED
+#define MYSQL_PLUGIN_KEYRING_INCLUDED
+
+/**
+ API for keyring plugin. (MYSQL_KEYRING_PLUGIN)
+*/
+
+#include "plugin.h"
+#define MYSQL_KEYRING_INTERFACE_VERSION 0x0101
+
+/**
+ The descriptor structure for the plugin, that is referred from
+ st_mysql_plugin.
+*/
+
+struct st_mysql_keyring
+{
+ int interface_version;
+ /*!
+ Add key to the keyring.
+
+ Obfuscates and adds the key to the keyring. The key is associated with
+ key_id and user_id (unique key identifier).
+
+ @param[in] key_id id of the key to store
+ @param[in] key_type type of the key to store
+ @param[in] user_id id of the owner of the key
+ @param[in] key the key itself to be stored. The memory of the key is
+ copied by the keyring, thus the key itself can be freed
+ after it was stored in the keyring.
+ @param[in] key_len the length of the key to be stored
+
+ @return Operation status
+ @retval 0 OK
+ @retval 1 ERROR
+ */
+ my_bool (*mysql_key_store)(const char *key_id, const char *key_type,
+ const char* user_id, const void *key, size_t key_len);
+ /*!
+ Fetches key from the keyring.
+
+ De-obfuscates and retrieves key associated with key_id and user_id from the
+ keyring.
+
+ @param[in] key_id id of the key to fetch
+ @param[out] key_type type of the fetched key
+ @param[in] user_id id of the owner of the key
+ @param[out] key the fetched key itself. The memory for this key is
+ allocated by the keyring and needs to be freed by the
+ user when no longer needed. Prior to freeing the memory
+ it needs to be obfuscated or zeroed.
+ @param[out] key_len the length of the fetched key
+
+ @return Operation status
+ @retval 0 OK
+ @retval 1 ERROR
+ */
+ my_bool (*mysql_key_fetch)(const char *key_id, char **key_type,
+ const char *user_id, void **key, size_t *key_len);
+
+ /*!
+ Removes key from the keyring.
+
+ Removes the key associated with key_id and user_id from the
+ keyring.
+
+ @param[in] key_id id of the key to remove
+ @param[in] user_id id of the owner of the key to remove
+
+ @return Operation status
+ @retval 0 OK
+ @retval 1 ERROR
+ */
+ my_bool (*mysql_key_remove)(const char *key_id, const char *user_id);
+
+ /*!
+ Generates and stores the key.
+
+ Generates a random key of length key_len, associates it with key_id, user_id
+ and stores it in the keyring.
+
+ @param[in] key_id id of the key to generate
+ @param[in] key_type type of the key to generate
+ @param[in] user_id id of the owner of the generated key
+ @param[in] key_len length of the key to generate
+
+ @return Operation status
+ @retval 0 OK
+ @retval 1 ERROR
+ */
+ my_bool (*mysql_key_generate)(const char *key_id, const char *key_type,
+ const char *user_id, size_t key_len);
+
+ /**
+ Keys_iterator object refers to an iterator which is used to iterate
+ on a list which refers to Key_metadata. Key_metadata hold information
+ about individual keys keyd_id and user_id. Keys_iterator should be used
+ in following sequence only.
+
+ void* iterator_ptr;
+ char key_id[64]= { 0 };
+ char user_id[64]= { 0 };
+
+ plugin_handle->mysql_key_iterator_init(&iterator_ptr);
+
+ if (iterator_ptr == NULL)
+ report error;
+
+ while (!(plugin_handle->mysql_key_iterator_get_key(iterator_ptr,
+ key_id, user_id)))
+ {
+ Fetch the keys.
+ Perform operations on the fetched keys.
+ ..
+ }
+ plugin_handle->mysql_key_iterator_deinit(iterator_ptr);
+
+ init() method accepts a void pointer which is the made to point to
+ Keys_iterator instance. Keys_iterator instance internal pointer points
+ to Key_metadata list. This list holds information about all keys stored
+ in the backed end data store of keyring plugin. After call to init()
+ please check iterator_ptr.
+
+ get_key() method accepts the above iterator_ptr as IN param and then
+ fills the passes in key_id and user_id with valid values. This can be
+ used to fetch actual key information. Every call to this method will
+ change internal pointers to advance to next position, so that the next
+ call will fetch the next key.
+
+ deinit() method frees all internal pointers along with iterator_ptr.
+ */
+ /**
+ Initialize an iterator.
+
+ @param[out] key_iterator Iterator used to fetch individual keys
+ from key_container.
+
+ @return VOID
+ */
+ void (*mysql_key_iterator_init)(void** key_iterator);
+
+ /**
+ Deinitialize an iterator.
+
+ @param[in] key_iterator Iterator used to fetch individual keys
+ from key_container.
+
+ @return VOID
+ */
+ void (*mysql_key_iterator_deinit)(void* key_iterator);
+
+ /**
+ Get details of key. Every call to this service will change
+ internal pointers to advance to next position, so that the next call
+ will fetch the next key. In case iterator moves to the end, this service
+ will return error.
+
+ @param[in] key_iterator Iterator used to fetch individual keys
+ from key_container.
+ @param[out] key_id id of the key
+ @param[out] user_id id of the owner
+
+ @return Operation status
+ @retval 0 OK
+ @retval 1 ERROR
+ */
+ bool (*mysql_key_iterator_get_key)(void* key_iterator, char *key_id, char *user_id);
+};
+#endif
diff --git a/db/include/plugin_validate_password.h b/db/include/plugin_validate_password.h
new file mode 100644
index 0000000..6fbd248
--- /dev/null
+++ b/db/include/plugin_validate_password.h
@@ -0,0 +1,53 @@
+/* Copyright (c) 2012, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 MYSQL_PLUGIN_VALIDATE_PASSWORD_INCLUDED
+#define MYSQL_PLUGIN_VALIDATE_PASSWORD_INCLUDED
+
+/* API for validate_password plugin. (MYSQL_VALIDATE_PASSWORD_PLUGIN) */
+
+#include
+#define MYSQL_VALIDATE_PASSWORD_INTERFACE_VERSION 0x0100
+
+/*
+ The descriptor structure for the plugin, that is referred from
+ st_mysql_plugin.
+*/
+
+typedef void* mysql_string_handle;
+
+struct st_mysql_validate_password
+{
+ int interface_version;
+ /*
+ This function retuns TRUE for passwords which satisfy the password
+ policy (as choosen by plugin variable) and FALSE for all other
+ password
+ */
+ int (*validate_password)(mysql_string_handle password);
+ /*
+ This function returns the password strength (0-100) depending
+ upon the policies
+ */
+ int (*get_password_strength)(mysql_string_handle password);
+};
+#endif
diff --git a/db/include/sql_common.h b/db/include/sql_common.h
new file mode 100644
index 0000000..92e8536
--- /dev/null
+++ b/db/include/sql_common.h
@@ -0,0 +1,217 @@
+#ifndef SQL_COMMON_INCLUDED
+#define SQL_COMMON_INCLUDED
+
+/* Copyright (c) 2003, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 */
+
+#define SQL_COMMON_INCLUDED
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include
+#include
+
+extern const char *unknown_sqlstate;
+extern const char *cant_connect_sqlstate;
+extern const char *not_error_sqlstate;
+
+
+/*
+ Free all memory allocated in MYSQL handle except the
+ current options.
+*/
+void mysql_close_free(MYSQL *mysql);
+
+/*
+ Clear connection options stored in MYSQL handle and
+ free memory used by them.
+*/
+void mysql_close_free_options(MYSQL *mysql);
+
+
+/**
+ The structure is used to hold the state change information
+ received from the server. LIST functions are used for manipulation
+ of the members of the structure.
+*/
+typedef struct st_session_track_info_node {
+ /** head_node->data is a LEX_STRING which contains the variable name. */
+ LIST *head_node;
+ LIST *current_node;
+} STATE_INFO_NODE;
+
+/**
+ Store the change info received from the server in an array of linked lists
+ with STATE_INFO_NODE elements (one per state type).
+*/
+typedef struct st_session_track_info {
+ /** Array of STATE_NODE_INFO elements (one per state type). */
+ struct st_session_track_info_node info_list[SESSION_TRACK_END + 1];
+} STATE_INFO;
+
+/*
+ Access to MYSQL::extension member.
+
+ Note: functions mysql_extension_{init,free}() are defined
+ in client.c.
+*/
+
+struct st_mysql_trace_info;
+
+typedef struct st_mysql_extension {
+ struct st_mysql_trace_info *trace_data;
+ struct st_session_track_info state_change;
+} MYSQL_EXTENSION;
+
+/* "Constructor/destructor" for MYSQL extension structure. */
+struct st_mysql_extension* mysql_extension_init(struct st_mysql*);
+void mysql_extension_free(struct st_mysql_extension*);
+
+/*
+ Note: Allocated extension structure is freed in mysql_close_free()
+ called by mysql_close().
+*/
+#define MYSQL_EXTENSION_PTR(H) \
+( \
+ (struct st_mysql_extension*) \
+ ( (H)->extension ? \
+ (H)->extension : ((H)->extension= mysql_extension_init(H)) \
+ ) \
+)
+
+
+struct st_mysql_options_extention {
+ char *plugin_dir;
+ char *default_auth;
+ char *ssl_crl; /* PEM CRL file */
+ char *ssl_crlpath; /* PEM directory of CRL-s? */
+ HASH connection_attributes;
+ char *server_public_key_path;
+ size_t connection_attributes_length;
+ my_bool enable_cleartext_plugin;
+ my_bool get_server_public_key;
+ char *tls_version; /* TLS version option */
+ long ssl_ctx_flags; /* SSL ctx options flag */
+ unsigned int ssl_mode;
+};
+
+typedef struct st_mysql_methods
+{
+ my_bool (*read_query_result)(MYSQL *mysql);
+ my_bool (*advanced_command)(MYSQL *mysql,
+ enum enum_server_command command,
+ const unsigned char *header,
+ size_t header_length,
+ const unsigned char *arg,
+ size_t arg_length,
+ my_bool skip_check,
+ MYSQL_STMT *stmt);
+ MYSQL_DATA *(*read_rows)(MYSQL *mysql,MYSQL_FIELD *mysql_fields,
+ unsigned int fields);
+ MYSQL_RES * (*use_result)(MYSQL *mysql);
+ void (*fetch_lengths)(unsigned long *to,
+ MYSQL_ROW column, unsigned int field_count);
+ void (*flush_use_result)(MYSQL *mysql, my_bool flush_all_results);
+ int (*read_change_user_result)(MYSQL *mysql);
+#if !defined(MYSQL_SERVER) || defined(EMBEDDED_LIBRARY)
+ MYSQL_FIELD * (*list_fields)(MYSQL *mysql);
+ my_bool (*read_prepare_result)(MYSQL *mysql, MYSQL_STMT *stmt);
+ int (*stmt_execute)(MYSQL_STMT *stmt);
+ int (*read_binary_rows)(MYSQL_STMT *stmt);
+ int (*unbuffered_fetch)(MYSQL *mysql, char **row);
+ void (*free_embedded_thd)(MYSQL *mysql);
+ const char *(*read_statistics)(MYSQL *mysql);
+ my_bool (*next_result)(MYSQL *mysql);
+ int (*read_rows_from_cursor)(MYSQL_STMT *stmt);
+ void (*free_rows)(MYSQL_DATA *cur);
+#endif
+} MYSQL_METHODS;
+
+#define simple_command(mysql, command, arg, length, skip_check) \
+ ((mysql)->methods \
+ ? (*(mysql)->methods->advanced_command)(mysql, command, 0, \
+ 0, arg, length, skip_check, NULL) \
+ : (set_mysql_error(mysql, CR_COMMANDS_OUT_OF_SYNC, unknown_sqlstate), 1))
+#define stmt_command(mysql, command, arg, length, stmt) \
+ ((mysql)->methods \
+ ? (*(mysql)->methods->advanced_command)(mysql, command, 0, \
+ 0, arg, length, 1, stmt) \
+ : (set_mysql_error(mysql, CR_COMMANDS_OUT_OF_SYNC, unknown_sqlstate), 1))
+
+extern CHARSET_INFO *default_client_charset_info;
+MYSQL_FIELD *unpack_fields(MYSQL *mysql, MYSQL_ROWS *data,MEM_ROOT *alloc,
+ uint fields, my_bool default_value,
+ uint server_capabilities);
+MYSQL_FIELD * cli_read_metadata_ex(MYSQL *mysql, MEM_ROOT *alloc,
+ unsigned long field_count,
+ unsigned int fields);
+MYSQL_FIELD * cli_read_metadata(MYSQL *mysql, unsigned long field_count,
+ unsigned int fields);
+void free_rows(MYSQL_DATA *cur);
+void free_old_query(MYSQL *mysql);
+void end_server(MYSQL *mysql);
+my_bool mysql_reconnect(MYSQL *mysql);
+void mysql_read_default_options(struct st_mysql_options *options,
+ const char *filename,const char *group);
+my_bool
+cli_advanced_command(MYSQL *mysql, enum enum_server_command command,
+ const unsigned char *header, size_t header_length,
+ const unsigned char *arg, size_t arg_length,
+ my_bool skip_check, MYSQL_STMT *stmt);
+unsigned long cli_safe_read(MYSQL *mysql, my_bool *is_data_packet);
+unsigned long cli_safe_read_with_ok(MYSQL *mysql, my_bool parse_ok,
+ my_bool *is_data_packet);
+void net_clear_error(NET *net);
+void set_stmt_errmsg(MYSQL_STMT *stmt, NET *net);
+void set_stmt_error(MYSQL_STMT *stmt, int errcode, const char *sqlstate,
+ const char *err);
+void set_mysql_error(MYSQL *mysql, int errcode, const char *sqlstate);
+void set_mysql_extended_error(MYSQL *mysql, int errcode, const char *sqlstate,
+ const char *format, ...);
+#ifdef EMBEDDED_LIBRARY
+int embedded_ssl_check(MYSQL *mysql);
+#endif
+
+/* client side of the pluggable authentication */
+struct st_plugin_vio_info;
+void mpvio_info(Vio *vio, struct st_plugin_vio_info *info);
+int run_plugin_auth(MYSQL *mysql, char *data, uint data_len,
+ const char *data_plugin, const char *db);
+int mysql_client_plugin_init();
+void mysql_client_plugin_deinit();
+
+struct st_mysql_client_plugin;
+extern struct st_mysql_client_plugin *mysql_client_builtins[];
+uchar * send_client_connect_attrs(MYSQL *mysql, uchar *buf);
+extern my_bool libmysql_cleartext_plugin_enabled;
+int is_file_or_dir_world_writable(const char *filepath);
+void read_ok_ex(MYSQL *mysql, unsigned long len);
+
+#ifdef __cplusplus
+}
+#endif
+
+#define protocol_41(A) ((A)->server_capabilities & CLIENT_PROTOCOL_41)
+
+#endif /* SQL_COMMON_INCLUDED */
diff --git a/db/include/sql_state.h b/db/include/sql_state.h
new file mode 100644
index 0000000..125d0e6
--- /dev/null
+++ b/db/include/sql_state.h
@@ -0,0 +1,258 @@
+/* Autogenerated file, please don't edit */
+
+{ ER_DUP_KEY ,"23000", "" },
+{ ER_OUTOFMEMORY ,"HY001", "S1001" },
+{ ER_OUT_OF_SORTMEMORY ,"HY001", "S1001" },
+{ ER_CON_COUNT_ERROR ,"08004", "" },
+{ ER_BAD_HOST_ERROR ,"08S01", "" },
+{ ER_HANDSHAKE_ERROR ,"08S01", "" },
+{ ER_DBACCESS_DENIED_ERROR ,"42000", "" },
+{ ER_ACCESS_DENIED_ERROR ,"28000", "" },
+{ ER_NO_DB_ERROR ,"3D000", "" },
+{ ER_UNKNOWN_COM_ERROR ,"08S01", "" },
+{ ER_BAD_NULL_ERROR ,"23000", "" },
+{ ER_BAD_DB_ERROR ,"42000", "" },
+{ ER_TABLE_EXISTS_ERROR ,"42S01", "" },
+{ ER_BAD_TABLE_ERROR ,"42S02", "" },
+{ ER_NON_UNIQ_ERROR ,"23000", "" },
+{ ER_SERVER_SHUTDOWN ,"08S01", "" },
+{ ER_BAD_FIELD_ERROR ,"42S22", "S0022" },
+{ ER_WRONG_FIELD_WITH_GROUP ,"42000", "S1009" },
+{ ER_WRONG_GROUP_FIELD ,"42000", "S1009" },
+{ ER_WRONG_SUM_SELECT ,"42000", "S1009" },
+{ ER_WRONG_VALUE_COUNT ,"21S01", "" },
+{ ER_TOO_LONG_IDENT ,"42000", "S1009" },
+{ ER_DUP_FIELDNAME ,"42S21", "S1009" },
+{ ER_DUP_KEYNAME ,"42000", "S1009" },
+{ ER_DUP_ENTRY ,"23000", "S1009" },
+{ ER_WRONG_FIELD_SPEC ,"42000", "S1009" },
+{ ER_PARSE_ERROR ,"42000", "s1009" },
+{ ER_EMPTY_QUERY ,"42000", "" },
+{ ER_NONUNIQ_TABLE ,"42000", "S1009" },
+{ ER_INVALID_DEFAULT ,"42000", "S1009" },
+{ ER_MULTIPLE_PRI_KEY ,"42000", "S1009" },
+{ ER_TOO_MANY_KEYS ,"42000", "S1009" },
+{ ER_TOO_MANY_KEY_PARTS ,"42000", "S1009" },
+{ ER_TOO_LONG_KEY ,"42000", "S1009" },
+{ ER_KEY_COLUMN_DOES_NOT_EXITS ,"42000", "S1009" },
+{ ER_BLOB_USED_AS_KEY ,"42000", "S1009" },
+{ ER_TOO_BIG_FIELDLENGTH ,"42000", "S1009" },
+{ ER_WRONG_AUTO_KEY ,"42000", "S1009" },
+{ ER_FORCING_CLOSE ,"08S01", "" },
+{ ER_IPSOCK_ERROR ,"08S01", "" },
+{ ER_NO_SUCH_INDEX ,"42S12", "S1009" },
+{ ER_WRONG_FIELD_TERMINATORS ,"42000", "S1009" },
+{ ER_BLOBS_AND_NO_TERMINATED ,"42000", "S1009" },
+{ ER_CANT_REMOVE_ALL_FIELDS ,"42000", "" },
+{ ER_CANT_DROP_FIELD_OR_KEY ,"42000", "" },
+{ ER_BLOB_CANT_HAVE_DEFAULT ,"42000", "" },
+{ ER_WRONG_DB_NAME ,"42000", "" },
+{ ER_WRONG_TABLE_NAME ,"42000", "" },
+{ ER_TOO_BIG_SELECT ,"42000", "" },
+{ ER_UNKNOWN_PROCEDURE ,"42000", "" },
+{ ER_WRONG_PARAMCOUNT_TO_PROCEDURE ,"42000", "" },
+{ ER_UNKNOWN_TABLE ,"42S02", "" },
+{ ER_FIELD_SPECIFIED_TWICE ,"42000", "" },
+{ ER_UNSUPPORTED_EXTENSION ,"42000", "" },
+{ ER_TABLE_MUST_HAVE_COLUMNS ,"42000", "" },
+{ ER_UNKNOWN_CHARACTER_SET ,"42000", "" },
+{ ER_TOO_BIG_ROWSIZE ,"42000", "" },
+{ ER_WRONG_OUTER_JOIN ,"42000", "" },
+{ ER_NULL_COLUMN_IN_INDEX ,"42000", "" },
+{ ER_PASSWORD_ANONYMOUS_USER ,"42000", "" },
+{ ER_PASSWORD_NOT_ALLOWED ,"42000", "" },
+{ ER_PASSWORD_NO_MATCH ,"42000", "" },
+{ ER_WRONG_VALUE_COUNT_ON_ROW ,"21S01", "" },
+{ ER_INVALID_USE_OF_NULL ,"22004", "" },
+{ ER_REGEXP_ERROR ,"42000", "" },
+{ ER_MIX_OF_GROUP_FUNC_AND_FIELDS ,"42000", "" },
+{ ER_NONEXISTING_GRANT ,"42000", "" },
+{ ER_TABLEACCESS_DENIED_ERROR ,"42000", "" },
+{ ER_COLUMNACCESS_DENIED_ERROR ,"42000", "" },
+{ ER_ILLEGAL_GRANT_FOR_TABLE ,"42000", "" },
+{ ER_GRANT_WRONG_HOST_OR_USER ,"42000", "" },
+{ ER_NO_SUCH_TABLE ,"42S02", "" },
+{ ER_NONEXISTING_TABLE_GRANT ,"42000", "" },
+{ ER_NOT_ALLOWED_COMMAND ,"42000", "" },
+{ ER_SYNTAX_ERROR ,"42000", "" },
+{ ER_ABORTING_CONNECTION ,"08S01", "" },
+{ ER_NET_PACKET_TOO_LARGE ,"08S01", "" },
+{ ER_NET_READ_ERROR_FROM_PIPE ,"08S01", "" },
+{ ER_NET_FCNTL_ERROR ,"08S01", "" },
+{ ER_NET_PACKETS_OUT_OF_ORDER ,"08S01", "" },
+{ ER_NET_UNCOMPRESS_ERROR ,"08S01", "" },
+{ ER_NET_READ_ERROR ,"08S01", "" },
+{ ER_NET_READ_INTERRUPTED ,"08S01", "" },
+{ ER_NET_ERROR_ON_WRITE ,"08S01", "" },
+{ ER_NET_WRITE_INTERRUPTED ,"08S01", "" },
+{ ER_TOO_LONG_STRING ,"42000", "" },
+{ ER_TABLE_CANT_HANDLE_BLOB ,"42000", "" },
+{ ER_TABLE_CANT_HANDLE_AUTO_INCREMENT ,"42000", "" },
+{ ER_WRONG_COLUMN_NAME ,"42000", "" },
+{ ER_WRONG_KEY_COLUMN ,"42000", "" },
+{ ER_DUP_UNIQUE ,"23000", "" },
+{ ER_BLOB_KEY_WITHOUT_LENGTH ,"42000", "" },
+{ ER_PRIMARY_CANT_HAVE_NULL ,"42000", "" },
+{ ER_TOO_MANY_ROWS ,"42000", "" },
+{ ER_REQUIRES_PRIMARY_KEY ,"42000", "" },
+{ ER_KEY_DOES_NOT_EXITS ,"42000", "S1009" },
+{ ER_CHECK_NO_SUCH_TABLE ,"42000", "" },
+{ ER_CHECK_NOT_IMPLEMENTED ,"42000", "" },
+{ ER_CANT_DO_THIS_DURING_AN_TRANSACTION ,"25000", "" },
+{ ER_NEW_ABORTING_CONNECTION ,"08S01", "" },
+{ ER_MASTER_NET_READ ,"08S01", "" },
+{ ER_MASTER_NET_WRITE ,"08S01", "" },
+{ ER_TOO_MANY_USER_CONNECTIONS ,"42000", "" },
+{ ER_READ_ONLY_TRANSACTION ,"25000", "" },
+{ ER_NO_PERMISSION_TO_CREATE_USER ,"42000", "" },
+{ ER_LOCK_DEADLOCK ,"40001", "" },
+{ ER_NO_REFERENCED_ROW ,"23000", "" },
+{ ER_ROW_IS_REFERENCED ,"23000", "" },
+{ ER_CONNECT_TO_MASTER ,"08S01", "" },
+{ ER_WRONG_NUMBER_OF_COLUMNS_IN_SELECT ,"21000", "" },
+{ ER_USER_LIMIT_REACHED ,"42000", "" },
+{ ER_SPECIFIC_ACCESS_DENIED_ERROR ,"42000", "" },
+{ ER_NO_DEFAULT ,"42000", "" },
+{ ER_WRONG_VALUE_FOR_VAR ,"42000", "" },
+{ ER_WRONG_TYPE_FOR_VAR ,"42000", "" },
+{ ER_CANT_USE_OPTION_HERE ,"42000", "" },
+{ ER_NOT_SUPPORTED_YET ,"42000", "" },
+{ ER_WRONG_FK_DEF ,"42000", "" },
+{ ER_OPERAND_COLUMNS ,"21000", "" },
+{ ER_SUBQUERY_NO_1_ROW ,"21000", "" },
+{ ER_ILLEGAL_REFERENCE ,"42S22", "" },
+{ ER_DERIVED_MUST_HAVE_ALIAS ,"42000", "" },
+{ ER_SELECT_REDUCED ,"01000", "" },
+{ ER_TABLENAME_NOT_ALLOWED_HERE ,"42000", "" },
+{ ER_NOT_SUPPORTED_AUTH_MODE ,"08004", "" },
+{ ER_SPATIAL_CANT_HAVE_NULL ,"42000", "" },
+{ ER_COLLATION_CHARSET_MISMATCH ,"42000", "" },
+{ ER_WARN_TOO_FEW_RECORDS ,"01000", "" },
+{ ER_WARN_TOO_MANY_RECORDS ,"01000", "" },
+{ ER_WARN_NULL_TO_NOTNULL ,"22004", "" },
+{ ER_WARN_DATA_OUT_OF_RANGE ,"22003", "" },
+{ WARN_DATA_TRUNCATED ,"01000", "" },
+{ ER_WRONG_NAME_FOR_INDEX ,"42000", "" },
+{ ER_WRONG_NAME_FOR_CATALOG ,"42000", "" },
+{ ER_UNKNOWN_STORAGE_ENGINE ,"42000", "" },
+{ ER_TRUNCATED_WRONG_VALUE ,"22007", "" },
+{ ER_SP_NO_RECURSIVE_CREATE ,"2F003", "" },
+{ ER_SP_ALREADY_EXISTS ,"42000", "" },
+{ ER_SP_DOES_NOT_EXIST ,"42000", "" },
+{ ER_SP_LILABEL_MISMATCH ,"42000", "" },
+{ ER_SP_LABEL_REDEFINE ,"42000", "" },
+{ ER_SP_LABEL_MISMATCH ,"42000", "" },
+{ ER_SP_UNINIT_VAR ,"01000", "" },
+{ ER_SP_BADSELECT ,"0A000", "" },
+{ ER_SP_BADRETURN ,"42000", "" },
+{ ER_SP_BADSTATEMENT ,"0A000", "" },
+{ ER_UPDATE_LOG_DEPRECATED_IGNORED ,"42000", "" },
+{ ER_UPDATE_LOG_DEPRECATED_TRANSLATED ,"42000", "" },
+{ ER_QUERY_INTERRUPTED ,"70100", "" },
+{ ER_SP_WRONG_NO_OF_ARGS ,"42000", "" },
+{ ER_SP_COND_MISMATCH ,"42000", "" },
+{ ER_SP_NORETURN ,"42000", "" },
+{ ER_SP_NORETURNEND ,"2F005", "" },
+{ ER_SP_BAD_CURSOR_QUERY ,"42000", "" },
+{ ER_SP_BAD_CURSOR_SELECT ,"42000", "" },
+{ ER_SP_CURSOR_MISMATCH ,"42000", "" },
+{ ER_SP_CURSOR_ALREADY_OPEN ,"24000", "" },
+{ ER_SP_CURSOR_NOT_OPEN ,"24000", "" },
+{ ER_SP_UNDECLARED_VAR ,"42000", "" },
+{ ER_SP_FETCH_NO_DATA ,"02000", "" },
+{ ER_SP_DUP_PARAM ,"42000", "" },
+{ ER_SP_DUP_VAR ,"42000", "" },
+{ ER_SP_DUP_COND ,"42000", "" },
+{ ER_SP_DUP_CURS ,"42000", "" },
+{ ER_SP_SUBSELECT_NYI ,"0A000", "" },
+{ ER_STMT_NOT_ALLOWED_IN_SF_OR_TRG ,"0A000", "" },
+{ ER_SP_VARCOND_AFTER_CURSHNDLR ,"42000", "" },
+{ ER_SP_CURSOR_AFTER_HANDLER ,"42000", "" },
+{ ER_SP_CASE_NOT_FOUND ,"20000", "" },
+{ ER_DIVISION_BY_ZERO ,"22012", "" },
+{ ER_ILLEGAL_VALUE_FOR_TYPE ,"22007", "" },
+{ ER_PROCACCESS_DENIED_ERROR ,"42000", "" },
+{ ER_XAER_NOTA ,"XAE04", "" },
+{ ER_XAER_INVAL ,"XAE05", "" },
+{ ER_XAER_RMFAIL ,"XAE07", "" },
+{ ER_XAER_OUTSIDE ,"XAE09", "" },
+{ ER_XAER_RMERR ,"XAE03", "" },
+{ ER_XA_RBROLLBACK ,"XA100", "" },
+{ ER_NONEXISTING_PROC_GRANT ,"42000", "" },
+{ ER_DATA_TOO_LONG ,"22001", "" },
+{ ER_SP_BAD_SQLSTATE ,"42000", "" },
+{ ER_CANT_CREATE_USER_WITH_GRANT ,"42000", "" },
+{ ER_SP_DUP_HANDLER ,"42000", "" },
+{ ER_SP_NOT_VAR_ARG ,"42000", "" },
+{ ER_SP_NO_RETSET ,"0A000", "" },
+{ ER_CANT_CREATE_GEOMETRY_OBJECT ,"22003", "" },
+{ ER_TOO_BIG_SCALE ,"42000", "S1009" },
+{ ER_TOO_BIG_PRECISION ,"42000", "S1009" },
+{ ER_M_BIGGER_THAN_D ,"42000", "S1009" },
+{ ER_TOO_LONG_BODY ,"42000", "S1009" },
+{ ER_TOO_BIG_DISPLAYWIDTH ,"42000", "S1009" },
+{ ER_XAER_DUPID ,"XAE08", "" },
+{ ER_DATETIME_FUNCTION_OVERFLOW ,"22008", "" },
+{ ER_ROW_IS_REFERENCED_2 ,"23000", "" },
+{ ER_NO_REFERENCED_ROW_2 ,"23000", "" },
+{ ER_SP_BAD_VAR_SHADOW ,"42000", "" },
+{ ER_SP_WRONG_NAME ,"42000", "" },
+{ ER_SP_NO_AGGREGATE ,"42000", "" },
+{ ER_MAX_PREPARED_STMT_COUNT_REACHED ,"42000", "" },
+{ ER_NON_GROUPING_FIELD_USED ,"42000", "" },
+{ ER_FOREIGN_DUPLICATE_KEY_OLD_UNUSED ,"23000", "S1009" },
+{ ER_CANT_CHANGE_TX_CHARACTERISTICS ,"25001", "" },
+{ ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT ,"42000", "" },
+{ ER_WRONG_PARAMETERS_TO_NATIVE_FCT ,"42000", "" },
+{ ER_WRONG_PARAMETERS_TO_STORED_FCT ,"42000", "" },
+{ ER_DUP_ENTRY_WITH_KEY_NAME ,"23000", "S1009" },
+{ ER_XA_RBTIMEOUT ,"XA106", "" },
+{ ER_XA_RBDEADLOCK ,"XA102", "" },
+{ ER_FUNC_INEXISTENT_NAME_COLLISION ,"42000", "" },
+{ ER_DUP_SIGNAL_SET ,"42000", "" },
+{ ER_SIGNAL_WARN ,"01000", "" },
+{ ER_SIGNAL_NOT_FOUND ,"02000", "" },
+{ ER_SIGNAL_EXCEPTION ,"HY000", "" },
+{ ER_RESIGNAL_WITHOUT_ACTIVE_HANDLER ,"0K000", "" },
+{ ER_SPATIAL_MUST_HAVE_GEOM_COL ,"42000", "" },
+{ ER_DATA_OUT_OF_RANGE ,"22003", "" },
+{ ER_ACCESS_DENIED_NO_PASSWORD_ERROR ,"28000", "" },
+{ ER_TRUNCATE_ILLEGAL_FK ,"42000", "" },
+{ ER_DA_INVALID_CONDITION_NUMBER ,"35000", "" },
+{ ER_FOREIGN_DUPLICATE_KEY_WITH_CHILD_INFO,"23000", "S1009" },
+{ ER_FOREIGN_DUPLICATE_KEY_WITHOUT_CHILD_INFO,"23000", "S1009" },
+{ ER_CANT_EXECUTE_IN_READ_ONLY_TRANSACTION,"25006", "" },
+{ ER_ALTER_OPERATION_NOT_SUPPORTED ,"0A000", "" },
+{ ER_ALTER_OPERATION_NOT_SUPPORTED_REASON ,"0A000", "" },
+{ ER_DUP_UNKNOWN_IN_INDEX ,"23000", "" },
+{ ER_ACCESS_DENIED_CHANGE_USER_ERROR ,"28000", "" },
+{ ER_GET_STACKED_DA_WITHOUT_ACTIVE_HANDLER,"0Z002", "" },
+{ ER_INVALID_ARGUMENT_FOR_LOGARITHM ,"2201E", "" },
+{ ER_GIS_INVALID_DATA ,"22023", "" },
+{ ER_USER_LOCK_WRONG_NAME ,"42000", "" },
+{ ER_ILLEGAL_USER_VAR ,"42000", "S1009" },
+{ ER_NET_OK_PACKET_TOO_LARGE ,"08S01", "" },
+{ ER_WRONG_TABLESPACE_NAME ,"42000", "" },
+{ ER_LOCKING_SERVICE_WRONG_NAME ,"42000", "" },
+{ ER_INVALID_JSON_TEXT ,"22032", "" },
+{ ER_INVALID_JSON_TEXT_IN_PARAM ,"22032", "" },
+{ ER_INVALID_JSON_PATH ,"42000", "" },
+{ ER_INVALID_JSON_CHARSET ,"22032", "" },
+{ ER_INVALID_JSON_CHARSET_IN_FUNCTION ,"22032", "" },
+{ ER_INVALID_TYPE_FOR_JSON ,"22032", "" },
+{ ER_INVALID_CAST_TO_JSON ,"22032", "" },
+{ ER_INVALID_JSON_PATH_CHARSET ,"42000", "" },
+{ ER_INVALID_JSON_PATH_WILDCARD ,"42000", "" },
+{ ER_JSON_VALUE_TOO_BIG ,"22032", "" },
+{ ER_JSON_KEY_TOO_BIG ,"22032", "" },
+{ ER_JSON_USED_AS_KEY ,"42000", "" },
+{ ER_JSON_VACUOUS_PATH ,"42000", "" },
+{ ER_JSON_BAD_ONE_OR_ALL_ARG ,"42000", "" },
+{ ER_NUMERIC_JSON_VALUE_OUT_OF_RANGE ,"22003", "" },
+{ ER_INVALID_JSON_VALUE_FOR_CAST ,"22018", "" },
+{ ER_JSON_DOCUMENT_TOO_DEEP ,"22032", "" },
+{ ER_JSON_DOCUMENT_NULL_KEY ,"22032", "" },
+{ ER_INVALID_JSON_PATH_ARRAY_CELL ,"42000", "" },
+{ ER_WARN_USING_GEOMFROMWKB_TO_SET_SRID_ZERO,"01000", "" },
+{ ER_WARN_USING_GEOMFROMWKB_TO_SET_SRID ,"01000", "" },
+{ ER_KEYRING_ACCESS_DENIED_ERROR ,"42000", "" },
diff --git a/db/include/sslopt-case.h b/db/include/sslopt-case.h
new file mode 100644
index 0000000..c6df49a
--- /dev/null
+++ b/db/include/sslopt-case.h
@@ -0,0 +1,65 @@
+/* Copyright (c) 2000, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 */
+
+#if defined(HAVE_OPENSSL) && !defined(EMBEDDED_LIBRARY)
+
+#ifndef MYSQL_CLIENT
+#error This header is supposed to be used only in the client
+#endif
+
+ case OPT_SSL_MODE:
+ opt_ssl_mode= find_type_or_exit(argument, &ssl_mode_typelib,
+ opt->name);
+ ssl_mode_set_explicitly= TRUE;
+ break;
+ case OPT_SSL_SSL:
+ CLIENT_WARN_DEPRECATED("--ssl", "--ssl-mode");
+ if (!opt_use_ssl_arg)
+ opt_ssl_mode= SSL_MODE_DISABLED;
+ else if (opt_ssl_mode < SSL_MODE_REQUIRED)
+ opt_ssl_mode= SSL_MODE_REQUIRED;
+ break;
+ case OPT_SSL_VERIFY_SERVER_CERT:
+ CLIENT_WARN_DEPRECATED("--ssl-verify-server-cert",
+ "--ssl-mode=VERIFY_IDENTITY");
+ if (!opt_ssl_verify_server_cert_arg)
+ {
+ if (opt_ssl_mode >= SSL_MODE_VERIFY_IDENTITY)
+ opt_ssl_mode= SSL_MODE_VERIFY_CA;
+ }
+ else
+ opt_ssl_mode= SSL_MODE_VERIFY_IDENTITY;
+ break;
+ case OPT_SSL_CA:
+ case OPT_SSL_CAPATH:
+ /* Don't change ssl-mode if set explicitly. */
+ if (!ssl_mode_set_explicitly)
+ opt_ssl_mode= SSL_MODE_VERIFY_CA;
+ break;
+ case OPT_SSL_KEY:
+ case OPT_SSL_CERT:
+ case OPT_SSL_CIPHER:
+ case OPT_SSL_CRL:
+ case OPT_SSL_CRLPATH:
+ case OPT_TLS_VERSION:
+ break;
+#endif /* HAVE_OPENSSL */
diff --git a/db/include/sslopt-longopts.h b/db/include/sslopt-longopts.h
new file mode 100644
index 0000000..9dba229
--- /dev/null
+++ b/db/include/sslopt-longopts.h
@@ -0,0 +1,70 @@
+/* Copyright (c) 2000, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 */
+
+#if defined(HAVE_OPENSSL) && !defined(EMBEDDED_LIBRARY)
+#ifdef MYSQL_CLIENT
+ {"ssl-mode", OPT_SSL_MODE,
+ "SSL connection mode.",
+ 0, 0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
+ {"ssl", OPT_SSL_SSL,
+ "Deprecated. Use --ssl-mode instead.",
+ &opt_use_ssl_arg, &opt_use_ssl_arg, 0, GET_BOOL, OPT_ARG, 1, 0, 0, 0, 0, 0},
+ {"ssl-verify-server-cert", OPT_SSL_VERIFY_SERVER_CERT,
+ "Deprecated. Use --ssl-mode=VERIFY_IDENTITY instead.",
+ &opt_ssl_verify_server_cert_arg, &opt_ssl_verify_server_cert_arg,
+ 0, GET_BOOL, OPT_ARG, 0, 0, 0, 0, 0, 0},
+#else
+ {"ssl", OPT_SSL_SSL,
+ "If set to ON, this option enforces that SSL is established before client "
+ "attempts to authenticate to the server. To disable client SSL capabilities "
+ "use --ssl=OFF.",
+ &opt_use_ssl, &opt_use_ssl, 0, GET_BOOL, OPT_ARG, 1, 0, 0, 0, 0, 0},
+#endif
+ {"ssl-ca", OPT_SSL_CA,
+ "CA file in PEM format.",
+ &opt_ssl_ca, &opt_ssl_ca, 0, GET_STR, REQUIRED_ARG,
+ 0, 0, 0, 0, 0, 0},
+ {"ssl-capath", OPT_SSL_CAPATH,
+ "CA directory.",
+ &opt_ssl_capath, &opt_ssl_capath, 0, GET_STR, REQUIRED_ARG,
+ 0, 0, 0, 0, 0, 0},
+ {"ssl-cert", OPT_SSL_CERT, "X509 cert in PEM format.",
+ &opt_ssl_cert, &opt_ssl_cert, 0, GET_STR, REQUIRED_ARG,
+ 0, 0, 0, 0, 0, 0},
+ {"ssl-cipher", OPT_SSL_CIPHER, "SSL cipher to use.",
+ &opt_ssl_cipher, &opt_ssl_cipher, 0, GET_STR, REQUIRED_ARG,
+ 0, 0, 0, 0, 0, 0},
+ {"ssl-key", OPT_SSL_KEY, "X509 key in PEM format.",
+ &opt_ssl_key, &opt_ssl_key, 0, GET_STR, REQUIRED_ARG,
+ 0, 0, 0, 0, 0, 0},
+ {"ssl-crl", OPT_SSL_CRL, "Certificate revocation list.",
+ &opt_ssl_crl, &opt_ssl_crl, 0, GET_STR, REQUIRED_ARG,
+ 0, 0, 0, 0, 0, 0},
+ {"ssl-crlpath", OPT_SSL_CRLPATH,
+ "Certificate revocation list path.",
+ &opt_ssl_crlpath, &opt_ssl_crlpath, 0, GET_STR, REQUIRED_ARG,
+ 0, 0, 0, 0, 0, 0},
+ {"tls-version", OPT_TLS_VERSION, "TLS version to use, "
+ "permitted values are: TLSv1, TLSv1.1, TLSv1.2",
+ &opt_tls_version, &opt_tls_version, 0, GET_STR, REQUIRED_ARG,
+ 0, 0, 0, 0, 0, 0},
+#endif /* HAVE_OPENSSL */
diff --git a/db/include/sslopt-vars.h b/db/include/sslopt-vars.h
new file mode 100644
index 0000000..8862273
--- /dev/null
+++ b/db/include/sslopt-vars.h
@@ -0,0 +1,82 @@
+/* Copyright (c) 2000, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 SSLOPT_VARS_INCLUDED
+#define SSLOPT_VARS_INCLUDED
+
+#if defined(HAVE_OPENSSL) && !defined(EMBEDDED_LIBRARY)
+
+#ifndef MYSQL_CLIENT
+#error This header is supposed to be used only in the client
+#endif
+
+const char *ssl_mode_names_lib[] =
+ {"DISABLED", "PREFERRED", "REQUIRED", "VERIFY_CA", "VERIFY_IDENTITY",
+ NullS };
+TYPELIB ssl_mode_typelib = {array_elements(ssl_mode_names_lib) - 1, "",
+ ssl_mode_names_lib, NULL};
+
+static uint opt_ssl_mode = SSL_MODE_PREFERRED;
+static char *opt_ssl_ca = 0;
+static char *opt_ssl_capath = 0;
+static char *opt_ssl_cert = 0;
+static char *opt_ssl_cipher = 0;
+static char *opt_ssl_key = 0;
+static char *opt_ssl_crl = 0;
+static char *opt_ssl_crlpath = 0;
+static char *opt_tls_version = 0;
+static my_bool ssl_mode_set_explicitly= FALSE;
+static my_bool opt_use_ssl_arg= TRUE;
+static my_bool opt_ssl_verify_server_cert_arg= FALSE;
+
+static void set_client_ssl_options(MYSQL *mysql)
+{
+ /*
+ Print a warning if explicitly defined combination of --ssl-mode other than
+ VERIFY_CA or VERIFY_IDENTITY with explicit --ssl-ca or --ssl-capath values.
+ */
+ if (ssl_mode_set_explicitly &&
+ opt_ssl_mode < SSL_MODE_VERIFY_CA &&
+ (opt_ssl_ca || opt_ssl_capath))
+ {
+ fprintf(stderr, "WARNING: no verification of server certificate will be done. "
+ "Use --ssl-mode=VERIFY_CA or VERIFY_IDENTITY.\n");
+ }
+
+ /* Set SSL parameters: key, cert, ca, capath, cipher, clr, clrpath. */
+ if (opt_ssl_mode >= SSL_MODE_VERIFY_CA)
+ mysql_ssl_set(mysql, opt_ssl_key, opt_ssl_cert, opt_ssl_ca,
+ opt_ssl_capath, opt_ssl_cipher);
+ else
+ mysql_ssl_set(mysql, opt_ssl_key, opt_ssl_cert, NULL,
+ NULL, opt_ssl_cipher);
+ mysql_options(mysql, MYSQL_OPT_SSL_CRL, opt_ssl_crl);
+ mysql_options(mysql, MYSQL_OPT_SSL_CRLPATH, opt_ssl_crlpath);
+ mysql_options(mysql, MYSQL_OPT_TLS_VERSION, opt_tls_version);
+ mysql_options(mysql, MYSQL_OPT_SSL_MODE, &opt_ssl_mode);
+}
+
+#define SSL_SET_OPTIONS(mysql) set_client_ssl_options(mysql);
+#else
+#define SSL_SET_OPTIONS(mysql) do { } while(0)
+#endif
+#endif /* SSLOPT_VARS_INCLUDED */
diff --git a/db/include/thr_cond.h b/db/include/thr_cond.h
new file mode 100644
index 0000000..52f02ee
--- /dev/null
+++ b/db/include/thr_cond.h
@@ -0,0 +1,208 @@
+#ifndef THR_COND_INCLUDED
+#define THR_COND_INCLUDED
+
+/* Copyright (c) 2014, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 */
+
+/**
+ MySQL condition variable implementation.
+
+ There are three "layers":
+ 1) native_cond_*()
+ Functions that map directly down to OS primitives.
+ Windows - ConditionVariable
+ Other OSes - pthread
+ 2) my_cond_*()
+ Functions that use SAFE_MUTEX (default for debug).
+ Otherwise native_cond_*() is used.
+ 3) mysql_cond*()
+ Functions that include Performance Schema instrumentation.
+ See include/mysql/psi/mysql_thread.h
+*/
+
+#include "my_thread.h"
+#include "thr_mutex.h"
+
+C_MODE_START
+
+#ifdef _WIN32
+typedef CONDITION_VARIABLE native_cond_t;
+#else
+typedef pthread_cond_t native_cond_t;
+#endif
+
+#ifdef _WIN32
+/**
+ Convert abstime to milliseconds
+*/
+
+static DWORD get_milliseconds(const struct timespec *abstime)
+{
+#ifndef HAVE_STRUCT_TIMESPEC
+ long long millis;
+ union ft64 now;
+
+ if (abstime == NULL)
+ return INFINITE;
+
+ GetSystemTimeAsFileTime(&now.ft);
+
+ /*
+ Calculate time left to abstime
+ - subtract start time from current time(values are in 100ns units)
+ - convert to millisec by dividing with 10000
+ */
+ millis= (abstime->tv.i64 - now.i64) / 10000;
+
+ /* Don't allow the timeout to be negative */
+ if (millis < 0)
+ return 0;
+
+ /*
+ Make sure the calculated timeout does not exceed original timeout
+ value which could cause "wait for ever" if system time changes
+ */
+ if (millis > abstime->max_timeout_msec)
+ millis= abstime->max_timeout_msec;
+
+ if (millis > UINT_MAX)
+ millis= UINT_MAX;
+
+ return (DWORD)millis;
+#else
+ /*
+ Convert timespec to millis and subtract current time.
+ my_getsystime() returns time in 100 ns units.
+ */
+ ulonglong future= abstime->tv_sec * 1000 + abstime->tv_nsec / 1000000;
+ ulonglong now= my_getsystime() / 10000;
+ /* Don't allow the timeout to be negative. */
+ if (future < now)
+ return 0;
+ return (DWORD)(future - now);
+#endif
+}
+#endif /* _WIN32 */
+
+static inline int native_cond_init(native_cond_t *cond)
+{
+#ifdef _WIN32
+ InitializeConditionVariable(cond);
+ return 0;
+#else
+ /* pthread_condattr_t is not used in MySQL */
+ return pthread_cond_init(cond, NULL);
+#endif
+}
+
+static inline int native_cond_destroy(native_cond_t *cond)
+{
+#ifdef _WIN32
+ return 0; /* no destroy function */
+#else
+ return pthread_cond_destroy(cond);
+#endif
+}
+
+static inline int native_cond_timedwait(native_cond_t *cond,
+ native_mutex_t *mutex,
+ const struct timespec *abstime)
+{
+#ifdef _WIN32
+ DWORD timeout= get_milliseconds(abstime);
+ if (!SleepConditionVariableCS(cond, mutex, timeout))
+ return ETIMEDOUT;
+ return 0;
+#else
+ return pthread_cond_timedwait(cond, mutex, abstime);
+#endif
+}
+
+static inline int native_cond_wait(native_cond_t *cond, native_mutex_t *mutex)
+{
+#ifdef _WIN32
+ if (!SleepConditionVariableCS(cond, mutex, INFINITE))
+ return ETIMEDOUT;
+ return 0;
+#else
+ return pthread_cond_wait(cond, mutex);
+#endif
+}
+
+static inline int native_cond_signal(native_cond_t *cond)
+{
+#ifdef _WIN32
+ WakeConditionVariable(cond);
+ return 0;
+#else
+ return pthread_cond_signal(cond);
+#endif
+}
+
+static inline int native_cond_broadcast(native_cond_t *cond)
+{
+#ifdef _WIN32
+ WakeAllConditionVariable(cond);
+ return 0;
+#else
+ return pthread_cond_broadcast(cond);
+#endif
+}
+
+#ifdef SAFE_MUTEX
+int safe_cond_wait(native_cond_t *cond, my_mutex_t *mp,
+ const char *file, uint line);
+int safe_cond_timedwait(native_cond_t *cond, my_mutex_t *mp,
+ const struct timespec *abstime,
+ const char *file, uint line);
+#endif
+
+static inline int my_cond_timedwait(native_cond_t *cond, my_mutex_t *mp,
+ const struct timespec *abstime
+#ifdef SAFE_MUTEX
+ , const char *file, uint line
+#endif
+ )
+{
+#ifdef SAFE_MUTEX
+ return safe_cond_timedwait(cond, mp, abstime, file, line);
+#else
+ return native_cond_timedwait(cond, mp, abstime);
+#endif
+}
+
+static inline int my_cond_wait(native_cond_t *cond, my_mutex_t *mp
+#ifdef SAFE_MUTEX
+ , const char *file, uint line
+#endif
+ )
+{
+#ifdef SAFE_MUTEX
+ return safe_cond_wait(cond, mp, file, line);
+#else
+ return native_cond_wait(cond, mp);
+#endif
+}
+
+C_MODE_END
+
+#endif /* THR_COND_INCLUDED */
diff --git a/db/include/thr_mutex.h b/db/include/thr_mutex.h
new file mode 100644
index 0000000..53820aa
--- /dev/null
+++ b/db/include/thr_mutex.h
@@ -0,0 +1,234 @@
+#ifndef THR_MUTEX_INCLUDED
+#define THR_MUTEX_INCLUDED
+
+/* Copyright (c) 2014, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 */
+
+/**
+ MySQL mutex implementation.
+
+ There are three "layers":
+ 1) native_mutex_*()
+ Functions that map directly down to OS primitives.
+ Windows - CriticalSection
+ Other OSes - pthread
+ 2) my_mutex_*()
+ Functions that implement SAFE_MUTEX (default for debug),
+ Otherwise native_mutex_*() is used.
+ 3) mysql_mutex_*()
+ Functions that include Performance Schema instrumentation.
+ See include/mysql/psi/mysql_thread.h
+*/
+
+#include
+#include "my_thread.h"
+
+C_MODE_START
+
+#ifdef _WIN32
+typedef CRITICAL_SECTION native_mutex_t;
+typedef int native_mutexattr_t;
+#else
+typedef pthread_mutex_t native_mutex_t;
+typedef pthread_mutexattr_t native_mutexattr_t;
+#endif
+
+/* Define mutex types, see my_thr_init.c */
+#define MY_MUTEX_INIT_SLOW NULL
+
+/* Can be set in /usr/include/pthread.h */
+#ifdef PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP
+extern native_mutexattr_t my_fast_mutexattr;
+#define MY_MUTEX_INIT_FAST &my_fast_mutexattr
+#else
+#define MY_MUTEX_INIT_FAST NULL
+#endif
+
+/* Can be set in /usr/include/pthread.h */
+#ifdef PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP
+extern native_mutexattr_t my_errorcheck_mutexattr;
+#define MY_MUTEX_INIT_ERRCHK &my_errorcheck_mutexattr
+#else
+#define MY_MUTEX_INIT_ERRCHK NULL
+#endif
+
+static inline int native_mutex_init(native_mutex_t *mutex,
+ const native_mutexattr_t *attr)
+{
+#ifdef _WIN32
+ InitializeCriticalSection(mutex);
+ return 0;
+#else
+ return pthread_mutex_init(mutex, attr);
+#endif
+}
+
+static inline int native_mutex_lock(native_mutex_t *mutex)
+{
+#ifdef _WIN32
+ EnterCriticalSection(mutex);
+ return 0;
+#else
+ return pthread_mutex_lock(mutex);
+#endif
+}
+
+static inline int native_mutex_trylock(native_mutex_t *mutex)
+{
+#ifdef _WIN32
+ if (TryEnterCriticalSection(mutex))
+ {
+ /* Don't allow recursive lock */
+ if (mutex->RecursionCount > 1){
+ LeaveCriticalSection(mutex);
+ return EBUSY;
+ }
+ return 0;
+ }
+ return EBUSY;
+#else
+ return pthread_mutex_trylock(mutex);
+#endif
+}
+
+static inline int native_mutex_unlock(native_mutex_t *mutex)
+{
+#ifdef _WIN32
+ LeaveCriticalSection(mutex);
+ return 0;
+#else
+ return pthread_mutex_unlock(mutex);
+#endif
+}
+
+static inline int native_mutex_destroy(native_mutex_t *mutex)
+{
+#ifdef _WIN32
+ DeleteCriticalSection(mutex);
+ return 0;
+#else
+ return pthread_mutex_destroy(mutex);
+#endif
+}
+
+
+#ifdef SAFE_MUTEX
+/* safe_mutex adds checking to mutex for easier debugging */
+typedef struct st_safe_mutex_t
+{
+ native_mutex_t global, mutex;
+ const char *file;
+ uint line, count;
+ my_thread_t thread;
+} my_mutex_t;
+
+void safe_mutex_global_init();
+int safe_mutex_init(my_mutex_t *mp, const native_mutexattr_t *attr,
+ const char *file, uint line);
+int safe_mutex_lock(my_mutex_t *mp, my_bool try_lock, const char *file, uint line);
+int safe_mutex_unlock(my_mutex_t *mp, const char *file, uint line);
+int safe_mutex_destroy(my_mutex_t *mp, const char *file, uint line);
+
+static inline void safe_mutex_assert_owner(const my_mutex_t *mp)
+{
+ assert(mp->count > 0 &&
+ my_thread_equal(my_thread_self(), mp->thread));
+}
+
+static inline void safe_mutex_assert_not_owner(const my_mutex_t *mp)
+{
+ assert(!mp->count ||
+ !my_thread_equal(my_thread_self(), mp->thread));
+}
+
+#else
+typedef native_mutex_t my_mutex_t;
+#endif
+
+static inline int my_mutex_init(my_mutex_t *mp, const native_mutexattr_t *attr
+#ifdef SAFE_MUTEX
+ , const char *file, uint line
+#endif
+ )
+{
+#ifdef SAFE_MUTEX
+ return safe_mutex_init(mp, attr, file, line);
+#else
+ return native_mutex_init(mp, attr);
+#endif
+}
+
+static inline int my_mutex_lock(my_mutex_t *mp
+#ifdef SAFE_MUTEX
+ , const char *file, uint line
+#endif
+ )
+{
+#ifdef SAFE_MUTEX
+ return safe_mutex_lock(mp, FALSE, file, line);
+#else
+ return native_mutex_lock(mp);
+#endif
+}
+
+static inline int my_mutex_trylock(my_mutex_t *mp
+#ifdef SAFE_MUTEX
+ , const char *file, uint line
+#endif
+ )
+{
+#ifdef SAFE_MUTEX
+ return safe_mutex_lock(mp, TRUE, file, line);
+#else
+ return native_mutex_trylock(mp);
+#endif
+}
+
+static inline int my_mutex_unlock(my_mutex_t *mp
+#ifdef SAFE_MUTEX
+ , const char *file, uint line
+#endif
+ )
+{
+#ifdef SAFE_MUTEX
+ return safe_mutex_unlock(mp, file, line);
+#else
+ return native_mutex_unlock(mp);
+#endif
+}
+
+static inline int my_mutex_destroy(my_mutex_t *mp
+#ifdef SAFE_MUTEX
+ , const char *file, uint line
+#endif
+ )
+{
+#ifdef SAFE_MUTEX
+ return safe_mutex_destroy(mp, file, line);
+#else
+ return native_mutex_destroy(mp);
+#endif
+}
+
+C_MODE_END
+
+#endif /* THR_MUTEX_INCLUDED */
diff --git a/db/include/thr_rwlock.h b/db/include/thr_rwlock.h
new file mode 100644
index 0000000..dd96501
--- /dev/null
+++ b/db/include/thr_rwlock.h
@@ -0,0 +1,221 @@
+#ifndef THR_RWLOCK_INCLUDED
+#define THR_RWLOCK_INCLUDED
+
+/* Copyright (c) 2014, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ 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, version 2.0, 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 */
+
+/**
+ MySQL rwlock implementation.
+
+ There are two "layers":
+ 1) native_rw_*()
+ Functions that map directly down to OS primitives.
+ Windows - SRWLock
+ Other OSes - pthread
+ 2) mysql_rw*()
+ Functions that include Performance Schema instrumentation.
+ See include/mysql/psi/mysql_thread.h
+
+ This file also includes rw_pr_*(), which implements a special
+ version of rwlocks that prefer readers. The P_S version of these
+ are mysql_prlock_*() - see include/mysql/psi/mysql_thread.h
+*/
+
+#include "my_global.h"
+#include "my_thread.h"
+#include "thr_cond.h"
+
+C_MODE_START
+
+#ifdef _WIN32
+typedef struct st_my_rw_lock_t
+{
+ SRWLOCK srwlock; /* native reader writer lock */
+ BOOL have_exclusive_srwlock; /* used for unlock */
+} native_rw_lock_t;
+#else
+typedef pthread_rwlock_t native_rw_lock_t;
+#endif
+
+static inline int native_rw_init(native_rw_lock_t *rwp)
+{
+#ifdef _WIN32
+ InitializeSRWLock(&rwp->srwlock);
+ rwp->have_exclusive_srwlock = FALSE;
+ return 0;
+#else
+ /* pthread_rwlockattr_t is not used in MySQL */
+ return pthread_rwlock_init(rwp, NULL);
+#endif
+}
+
+static inline int native_rw_destroy(native_rw_lock_t *rwp)
+{
+#ifdef _WIN32
+ return 0; /* no destroy function */
+#else
+ return pthread_rwlock_destroy(rwp);
+#endif
+}
+
+static inline int native_rw_rdlock(native_rw_lock_t *rwp)
+{
+#ifdef _WIN32
+ AcquireSRWLockShared(&rwp->srwlock);
+ return 0;
+#else
+ return pthread_rwlock_rdlock(rwp);
+#endif
+}
+
+static inline int native_rw_tryrdlock(native_rw_lock_t *rwp)
+{
+#ifdef _WIN32
+ if (!TryAcquireSRWLockShared(&rwp->srwlock))
+ return EBUSY;
+ return 0;
+#else
+ return pthread_rwlock_tryrdlock(rwp);
+#endif
+}
+
+static inline int native_rw_wrlock(native_rw_lock_t *rwp)
+{
+#ifdef _WIN32
+ AcquireSRWLockExclusive(&rwp->srwlock);
+ rwp->have_exclusive_srwlock= TRUE;
+ return 0;
+#else
+ return pthread_rwlock_wrlock(rwp);
+#endif
+}
+
+static inline int native_rw_trywrlock(native_rw_lock_t *rwp)
+{
+#ifdef _WIN32
+ if (!TryAcquireSRWLockExclusive(&rwp->srwlock))
+ return EBUSY;
+ rwp->have_exclusive_srwlock= TRUE;
+ return 0;
+#else
+ return pthread_rwlock_trywrlock(rwp);
+#endif
+}
+
+static inline int native_rw_unlock(native_rw_lock_t *rwp)
+{
+#ifdef _WIN32
+ if (rwp->have_exclusive_srwlock)
+ {
+ rwp->have_exclusive_srwlock= FALSE;
+ ReleaseSRWLockExclusive(&rwp->srwlock);
+ }
+ else
+ ReleaseSRWLockShared(&rwp->srwlock);
+ return 0;
+#else
+ return pthread_rwlock_unlock(rwp);
+#endif
+}
+
+
+/**
+ Portable implementation of special type of read-write locks.
+
+ These locks have two properties which are unusual for rwlocks:
+ 1) They "prefer readers" in the sense that they do not allow
+ situations in which rwlock is rd-locked and there is a
+ pending rd-lock which is blocked (e.g. due to pending
+ request for wr-lock).
+ This is a stronger guarantee than one which is provided for
+ PTHREAD_RWLOCK_PREFER_READER_NP rwlocks in Linux.
+ MDL subsystem deadlock detector relies on this property for
+ its correctness.
+ 2) They are optimized for uncontended wr-lock/unlock case.
+ This is scenario in which they are most oftenly used
+ within MDL subsystem. Optimizing for it gives significant
+ performance improvements in some of tests involving many
+ connections.
+
+ Another important requirement imposed on this type of rwlock
+ by the MDL subsystem is that it should be OK to destroy rwlock
+ object which is in unlocked state even though some threads might
+ have not yet fully left unlock operation for it (of course there
+ is an external guarantee that no thread will try to lock rwlock
+ which is destroyed).
+ Putting it another way the unlock operation should not access
+ rwlock data after changing its state to unlocked.
+
+ TODO/FIXME: We should consider alleviating this requirement as
+ it blocks us from doing certain performance optimizations.
+*/
+
+typedef struct st_rw_pr_lock_t {
+ /**
+ Lock which protects the structure.
+ Also held for the duration of wr-lock.
+ */
+ native_mutex_t lock;
+ /**
+ Condition variable which is used to wake-up
+ writers waiting for readers to go away.
+ */
+ native_cond_t no_active_readers;
+ /** Number of active readers. */
+ uint active_readers;
+ /** Number of writers waiting for readers to go away. */
+ uint writers_waiting_readers;
+ /** Indicates whether there is an active writer. */
+ my_bool active_writer;
+#ifdef SAFE_MUTEX
+ /** Thread holding wr-lock (for debug purposes only). */
+ my_thread_t writer_thread;
+#endif
+} rw_pr_lock_t;
+
+extern int rw_pr_init(rw_pr_lock_t *);
+extern int rw_pr_rdlock(rw_pr_lock_t *);
+extern int rw_pr_wrlock(rw_pr_lock_t *);
+extern int rw_pr_unlock(rw_pr_lock_t *);
+extern int rw_pr_destroy(rw_pr_lock_t *);
+
+static inline void
+rw_pr_lock_assert_write_owner(const rw_pr_lock_t *rwlock MY_ATTRIBUTE((unused)))
+{
+#ifdef SAFE_MUTEX
+ assert(rwlock->active_writer &&
+ my_thread_equal(my_thread_self(), rwlock->writer_thread));
+#endif
+}
+
+static inline void
+rw_pr_lock_assert_not_write_owner(const rw_pr_lock_t *rwlock MY_ATTRIBUTE((unused)))
+{
+#ifdef SAFE_MUTEX
+ assert(!rwlock->active_writer ||
+ !my_thread_equal(my_thread_self(), rwlock->writer_thread));
+#endif
+}
+
+C_MODE_END
+
+#endif /* THR_RWLOCK_INCLUDED */
diff --git a/db/include/typelib.h b/db/include/typelib.h
new file mode 100644
index 0000000..43318fc
--- /dev/null
+++ b/db/include/typelib.h
@@ -0,0 +1,66 @@
+/* Copyright (c) 2000, 2022, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ Without limiting anything contained in the foregoing, this file,
+ which is part of C Driver for MySQL (Connector/C), is also subject to the
+ Universal FOSS Exception, version 1.0, a copy of which can be found at
+ http://oss.oracle.com/licenses/universal-foss-exception.
+
+ 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, version 2.0, 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 Street, Fifth Floor, Boston, MA 02110-1301, USA */
+
+
+#ifndef _typelib_h
+#define _typelib_h
+
+#include "my_alloc.h"
+
+typedef struct st_typelib { /* Different types saved here */
+ unsigned int count; /* How many types */
+ const char *name; /* Name of typelib */
+ const char **type_names;
+ unsigned int *type_lengths;
+} TYPELIB;
+
+extern my_ulonglong find_typeset(char *x, TYPELIB *typelib,int *error_position);
+extern int find_type_or_exit(const char *x, TYPELIB *typelib,
+ const char *option);
+#define FIND_TYPE_BASIC 0
+/** makes @c find_type() require the whole name, no prefix */
+#define FIND_TYPE_NO_PREFIX (1 << 0)
+/** always implicitely on, so unused, but old code may pass it */
+#define FIND_TYPE_NO_OVERWRITE (1 << 1)
+/** makes @c find_type() accept a number */
+#define FIND_TYPE_ALLOW_NUMBER (1 << 2)
+/** makes @c find_type() treat ',' as terminator */
+#define FIND_TYPE_COMMA_TERM (1 << 3)
+
+extern int find_type(const char *x, const TYPELIB *typelib, unsigned int flags);
+extern void make_type(char *to,unsigned int nr,TYPELIB *typelib);
+extern const char *get_type(TYPELIB *typelib,unsigned int nr);
+extern TYPELIB *copy_typelib(MEM_ROOT *root, TYPELIB *from);
+
+extern TYPELIB sql_protocol_typelib;
+
+my_ulonglong find_set_from_flags(const TYPELIB *lib, unsigned int default_name,
+ my_ulonglong cur_set, my_ulonglong default_set,
+ const char *str, unsigned int length,
+ char **err_pos, unsigned int *err_len);
+
+#endif /* _typelib_h */
diff --git a/db/lib/x64/libmysql.dll b/db/lib/x64/libmysql.dll
index 050b5010e9e28a60514c459f1ceb74200f57dc22..f7e651e7e4ea0880da261ec2cc3977549469884f 100644
GIT binary patch
literal 6165216
zcmd?Sdwf*Y)%blT$&djOPEZ0-K}QWWirPr51_L@nCUQn58UzFZHCCljywGGu;sr^V
z#AG~UVH7e_o-a4O3TzVEsOtnT+=r2ls}L9{pKIHL(@i`&^Ai@-SAgW
z+~5ejdg7d#>+9T0Yj62p?bSEAueti>n{Nrazk8j#HgvQ5`kURpOJ=)oy5-vI&dkjn
zQJAQ@>o*rXzH-N`-sHczesk|?!hLO3J&
z=Ju?Abyn{*o*xqaa_v1*zXyd
zHcUkgKDDLSDP-S0{z~v(O;)>5^6}NM9aH?_Y^^ny@!3CH+aL|>y;iG{fgAX)_U})K
z7`Q^)dy<5SU!iGFUpY&glW6;hkE>>Br3%nQ>c9kT{_rE_RFP)}ud5I8R<(;h3&_%U
zA)2&5x29E}S$pl(!K*cG*Ti#xg*@NlxtnL&p9k_f)6S+bL2o}lD*zh4oaD*Z;BfO=k(>ezdjybJt9{Rd=73Vkm^VJ<2xHq2mQsbSt(
zXn+g1_sY(V)UR0w_+7Pq`*wwwc_5?MbI(E3`HHy^fLG+&g*_B0zN$0c6LCIAf^{@K
zRG4vxr)?!7BXq8H3O%!qhvTg&BQz~M@wdclbfXhkOLlqg*hdprC$hjl8s
z&Cb|UHV}0J#H#Ivxy6XgcLyS#f=CtPW4JDxrv}L5HwVl^3{ms0kUk~9h^kj)m$di)
zgC0bu$HNC4%PI`hx#|Nj4w^@F`wEL?bYf%T`6m-;?v4-xAvFD#Sg>Zk3CgTB{}Yc7
zCOwj#bRuZAlfrRF=o~7YOtF$(Qp`!3(Yz0;vbw&E$7y(+-EeSJGEY4Jx%Ve%&GDc!
z9M24SQZ1gD)?)BfO8$jx0`lT*LfG@k#i)0%*FjAfCVduK;dV6c~|;ym6Cz=~+U8pfAwIncJ(cIez_iu$sjHq)t@13b9
z^;sW)5+m#?wBEO0G7|MjS{;SV9*OAx9j}3Fyi>jUdY@}dWi-cSgxd=OnLR3Em=Vos
zsElUyR+jYykN2AX9HVS!?MScbb!B!KWqq~7{NawG*t>qSqqC%4=&1jCDim62?hT%@
zp>lzyEuP{CO)zM}$n0n=6+I&~YU4;~fAJKfAe6b*(K(rt*BNHk#A0ZON(3L)n@rNp
z?ZFdM35IF7Von1<#+0-V82SsjYg!g+p?^%aW%XJ|Y`?TCWuLIiW?Szg5MswzVZvsQ
z)ni9zO>U26TO9<}Iuuf*3_^Pvtd7ur*sd>G*F#$;5F3(0M_G5;EIpRi{BZ7qm38pzHLI}R;xBiJdhG)lyzi@;`E0#CRR}Hf}p1W=RyiM_r4_JPWN@TI%g7A^OzMSTLJ@PtOh$U9DFtM8vF1bs@>vV
zC}VHe)i5oOqMErU^u6#w$Fdu&TpPlo=C?zIKzXQ{iv21MijU@INJCTXJZFOClEwNh
z&Iy8ma8LYmeTB1^0`SW&9ukx%!MAyIIe*5lLtz{cHZmD#*3EQ5(E-z1M}h*K{{uUO
z>Wyo1i!In9n*T9jBXeux6h)6$ZLsOlTM(KPn6z16?;T@AXB8NkeY`3j2t;$X8j&%D
z{<59H0`sDrKv_ra2y;4I5GZS}g=aPw#oj5|WiYV_rHl#RUZ^dXw-M0gFrFETOba?~
z9Nn|W+OOs_D12no+o5cuC4X0w8a?`v#A7!x+C6)MSxvh_Io44<6J#D7$s^g}6wVPG
zPm!59WKSsD`jV<+x`8N;=H5%R^=_gq1QFtSb8^5a)g-0#rd?z(%$?*964Czx!6f}Z
zA>w2I?&I3`?~W^xA+pH%uRnfQ>kLo4g51a*q4T*$^tnRM7i4bys9k2|JsZa{9P#|E
zZweg-v&?O;p1M&qd20(*f~#odfOkWmXgcGhd4lo$D47lOhZfn4=)=2312VT&l(fh5
zmq-frOf|yS7M7A4-K$bnrU23`5-2PVFtbIYmLw1?k~-zZUD6xRKS@>H+#`umVXH{9
zG$VkhNbiP6rPXjdYF%@yz}Y}I4AU;b#9xg%P?e7|#dD7ENj$&njR_iBgApagAdAO{
zRt)H?!HBQWkVc!yAgy`g`4936KjtvpuBee|y{zW^Cky+emBuZCGnuyJY4l6U6gMRZTnS)e2GWJTc
z8RjvDd9bnUn!20zhQ^2QD98$pHD|k{EB79{@%`|Dj9c>?4{4sq9Kl>A(9j4)kaa3u
z*N7At=2b4srADs6x|nA|e%f_MC!9QI7MPqio=5B`v{dO7)8xI($40o*Wt6>B+iy!s
zRc%TSbsNzM`)8}N13c2pR((y`%`|S94wNMRqxl^^Deastk4amNNt>C2mN~WyALRec
zPW#r7wCs&u(Ddr5A`?|z$mu}Td7ET1J1Dike3s^))b5|uXOwMT2HKnx8ex8V1a6$8
zd5`D6$TTlfTH)O}O*PO%*_SA5OzH!DWn1+hFw)?ON`Wex|A3+oj;OQ
zSTS-d^qgfLL}<7oa|&}pRYo}X9mgCkK5^iJxIV3Ym_rK|O{*T3p#@Kzwp1R+I@ccj
zH){v?vO;5{gVmgf21Ea8N8K2o=?tt`sCmOZ4qwFSZsn)XLP*hHb(Xt^vZ3RzC!m&o#%Ci=9$hfv7dx{T;0x(c@g;>amIM_
z?(1|1OT#_xZs#8fBArOs#oGo=%k1-=yxUi{I|SEKQ{mpJdqcV5+!smpL?--_hj3yM
zBZR_I3>D{HC3I@9D@1NgaR#t$plV69`ioD@K&Heej#s~<)UT#~Kf?kOpZGhZcYNZR
z>bF|`UaEels^4#^UrqfUrG9h~Y&_Zfag-X!U-@uLQ?1t&iepRE}sEJl5WOBLrY0{6}B
z$kEC@6wxbs;`uY_z?i!C{_;_=?bYnO59J+3w&`l=wC!;`tNEV#K$_
zc9A1@nN$Dim$hej^p|%aFX$fA%SI`5ixhgELSJH$isxHk(9>FG#5-e;r|NX;FV931
zx+5OXZ=fjj8_Km4&3BBl1EIYX@1%HFCN=z=8oV1^(yJ)+gYtLp?hJYupkF21t^049
zpar5&7D~7M=E4HMS;y+|Z)(sJh^C?ujG_3ZElrhyEJbmi$V3E&k_nN)ocQ44?
zra#}~H9I=?x>#?Sn|b;WOC=q?%sy}CZknWq+E;{^TwcBH(-Zjl>;zv#_eJJqi3uhz
z#Xj3B%)Wrx8_3+{FWXgjnfIk$bSxi@dZV7csl%6Lz0eoadEd10mn2L*#;aer&6m-k
zue-<*^^)P%+^Bcc)MKLF-di)H-d}p#_hzBfX81<5SF}3(@eXROT|3y?_U&Dc(-H`e
zcl3*0HaW0~r@yVJxp?&>VOKyd~lD8|&ovb;*)J~s1``gN5a{su%igN}5ir*s$7+EYOFu#L>g%%dCTFx}jaI|9v-Tfq*itC-%)U&hoyDB9
z@rx9-8-}u=w4qhf8z>p-w;m9>g^P;~7(qx*3z$1ZhPY90+b)r;SdU&()D3A1;f}fi
z!VPb!y6Q@`5MvC~8p1}93hkwNwl
z%+k^2&{Bv=&@zS5D`9l`ZwE1%5;{I210sHsLM(x6^Gy~q)(@nJl3xKez+x@i
zW({CoOUa<}nj^}fguF@G5{4L^uV)kwdCk5`^HWH5oYx#MqW7->W7fAm5GlQzIVUte
zU^>^+&x(@Xw%tf7!`xvlgP2f)VrPoY#}~aYZbZsmMs%*jZw^Bx_eYL5%$Y9hVZ?i+
zF3*U!$f`hQb!Fa586?t-!6_*q@M6>p+Cm-xU#Ld60H20=+fr6HQ1BEhLo>q$(m+gx
zOZw`qW$y!SB-~0XfUGykQa(LLjWyTK(U8m$NXxNlFGeN9d_onE+z9_HvFeS?PmJcb
z^`=o|3;<4PMae$>1P>O#|Ix$$q#8Xho96Y=nR?zOdHU#?d3xRqw?4YuO}LnFF<}p3
z58*1pRfMYvSARyt($9!l>N97|G0b^I)*~^2zr2VFiG$bYxvj7r2L>b#hM$*b-D1b(
z*>M5l3ao{892%A6^BCqh%TQ67c8rf)F6%pXE*F7fj19qj^3ErNHQr7rCK$^OMCyvY
zW>=(qz7g)OC$!WTsbk^XS+6%|!WseFhA${$C~1rB0K^BYF^J?rcHRbwWZPjm`pYYo
ztY#m#JaBxx3*>Lcb
z(C{v8kr8hv5v8QnWxqD{hW0G()=pszg}xL#4P{zzSeG`D9ET^RNKL(@K%q;GVpI@P
zljXMcTV`{JO2x7B!M;cEL`h*0xy^bwEfE`n>FD<4$uzz{tTxynD5dpyH;86U0iRyc
zUb4&j@wCZ)n=C`o!+da=*Ir7SmoE)OH?C6s`4rv=
zF|9a%_%D0V|3c@j>X}L`$Ow34M)8MN)HsBB=7%yX%?k{8%Md-#16(4As;t+Tj(z4p
z_&_{(8&kedfLY>hSdIx{WW$|>9!+n$n+Cn+8%FfLHPSS4%4&U2q|*V#>W~TqWFRsO
zR|S&DAITO$Bu3u=bK+4*bAlE_}vE-_}i?xsfI&QF?hiVmtMr6Q5#hQnqdO0
z&^xS<>`u3gaB_$>%@G`fbj>sdjIi|0_-l?zues=gkPAxd|j<9joyf1j;;p|bA
z2JTnbV`N%lvM;h`@T!%vJur{l4j3{qyhDN!HHAaq#({S;wC0b4^=4QG;hBuka2DJV
z6*wG(pRN7|bhf4?CP5HV@v7ZLpNS@}X7OSHBhr$Xrh@D;4HW~Pw0geM&y&*IIQvb4l>SPiq>ZP%3qXS+vHPfzRxO
zY<}_yY~Z+}z-+M#R2CRZ25R(mEtk=tk-4nC)nUXd3K}*^SPPbzk0dJ2++|&nsBx3(
z?Yw%U?2S5B>6Hc6PiG65n`?-XHNaIQ{k3l5s)joj$V^tgAYqwD`+BTOpbA~UyiD%D
z*8bVNq5!;1y24e`YnXFgKxu`#WlRS|$}?OgVDIx!207YVSCNu+vNI$EBeD)HLlCZz
zNiBx?hV`8E2|efK-Ce4Gnzf({^{X=mQU6JF!Q-eZ_96{Dm}uayGCXsMJ$!gD$Ai6v
zRH(n)ZZ|T-R%?nBQG(i9SC6FVLxhCB!X(FGw>nHZ4hps}nVyn~>4cY%>nZg>2oZ7*
z25kX;Q)1c{nU0FI&Fb1lJ+`<%oJpTZYa+pnO*Y8LV)fZQol!6LxK~+AT7o*lEZa
zhihf^Yn8(2iUMqB6tYSuSe)t$ZTpjS6Z;dkr@ErU>`xw+-;E#jNTa4R9vj4iiun{w
zo5Nu~tEo?h=K#N(E+_e*Y;cv*NR_^>@oXjFw&80uho!NsF{@A&iybyT#q{fq&KgCOM+R&zxixF@
zA|-|}kcHPWg3x9>53%I*Ox_pE^sI9X@|51Rh60IM))O2a-n+@3Wj#&%^yVhg_O%EE
zj^G{Pmqc6Dg0)FK(RwzR&?TNA-cyRW3ZBL?RcK6*N+%4pZl-;vSu5w$c$_81)ht*_39;W01)&HgxZCRPoKZGX`@%|INAk??X<%0I*gGWD*Tx~f0viN56P)Cr2BY{O_kzj
zQ{4N4BOsDYC4CMr#ZF||S}mjjtM*!X12zpvScZ8mo121ZkMMTMJh6w^-bz(hbq2vz
z^8Y)$%l}&b9cl4D!xi&&{w3~2{)MAFv*#)aAo4>$_4kEq6g@cq^+8G!tWq(T=jrp>
z7wg~N?8TU3ekhtu(Pq8q(5(gfJZDQMt6Jw36EwXDgyhx}jJd3TE>aN~0pdO31KD~@
ziPRL$k8~%-xB5K7GQOYbr|)PTslSZfwYOo#~20VxpFrHaLok@_Z9BfYUUg5CQ1p2d+&f{(_2r83DNo!%YGlEg@+
zipnwD>6Z*vdu%mrw#V*K@n>PhaIV=rfh7Z-K2SUEGkwtkd8^AcHZq9v*MP-NYTUu5
zam;DI0l~a>Rl^C)R<|8X7NLioR)QqjA&K_>Q&`DJo0#Z$69DuD-JgrCWr1|KyMKga
z&_|c`KSn#|+-kk3JACMb+Ec^=BGRCEgUBdlOA|e7iT>}b|q
zmpin56^lHmNUo5oPNp8L
z%ewFHc=CNt4wX~XqC%I@;=P56Iv~fV=g43u=%;aukkeIHUa_#Vxm43O^Zx<=;VGK-
zIR8@__n-1Sihs{+QIIj!I9L9Ch;UFA;8}U`o=TB%2g3(O>Ma%U2(zv6iV%?3ytiTX
zG$yvpp7^^8<-`4rheU?Na{bYj4ZIlBlt_Ve^hb~m&`_SQHLt&!YE%Jsm}eA7A+o6)
zi+z!!`WKT-1sXL_0ZEc;FnLCzw08r86c3J()XK6xl|hQ1Liz?8Z@>i4ZgZ-zq>Usk
z5IM?MddcO%qp<4Vrs!Ic@_-B|RVgC>8v)3o0u#|SWJA38_0u-T*g)FsH@6x)`@?$?
zGChihgrXKhI3>MM5bD6^dLAAU{5q{ojLElqYR7)AFY4h1+7-a$uL05ZIkek>^I2@{
z=TiHS(vn0KR2L`%{q$eND_Ju7XAHu2^?w2zoRoVRkd*X7(Nsv7UwElQaaD)B9R`{3
zQoDjo^*dFLeo0b?T}3)%WXb6NH60V~aC?G_rXwrQsnf
zia<6OD&Ao$%jO*)ymRS$!aJ&j+MIvY!cO)~y5Wxl{GU?>
zzwm#~R83nBrT6iyCA^QPyeI#Yx~)8Az8&thv$)QxEATsop%4Fz5@?5GrG%OS88oNDr7heda}r
z*wAo#8{T!8F26ZFFXE~wz3B2_e&a!gZN;s*#HlGk6_kMRQL2_ffK`3H0W;5>zNo`;
z7CK73mj_Qa6fa9n5Y???{HE8g47dW3JO#GIsXEi*Z1@j@PhYP9T%3S#+=loHT$0Lq
zhQOG?0Hk2dNW)2D{F3&kA^RD7@Q{>2tj}W*mw3upqB4kB=BHa2VHm`$xf8UqC1{{%
zDtTQ#r;u4@*(YkD%78{nMT1cTj4+fTRg2?6mv#D+8ov^IJim&6eVyuGt33dt8xF3x
zH7AArxHi}^-bKGq`+L<0_@BI!67Wzyo}QmFs^ToYGyI<0EUytQ0WFXj3@*;SW|Ii{
z3bU!Pa5|?9GCRESy@r|H%od55Gugw{{H(JBy02Zi