Merge 10.9 into 10.10

This commit is contained in:
Jan Lindström 2022-09-06 10:51:18 +03:00
commit c0a6ce61d8
72 changed files with 515 additions and 2967 deletions

View File

@ -63,6 +63,10 @@ SET(HAVE_GETHOSTBYADDR_R CACHE INTERNAL "")
SET(HAVE_GETHRTIME CACHE INTERNAL "") SET(HAVE_GETHRTIME CACHE INTERNAL "")
SET(HAVE_GETPAGESIZE CACHE INTERNAL "") SET(HAVE_GETPAGESIZE CACHE INTERNAL "")
SET(HAVE_GETPASS CACHE INTERNAL "") SET(HAVE_GETPASS CACHE INTERNAL "")
SET(HAVE_GETMNTENT CACHE INTERNAL "")
SET(HAVE_GETMNTENT_IN_SYS_MNTAB CACHE INTERNAL "")
SET(HAVE_GETMNTINFO CACHE INTERNAL "")
SET(HAVE_GETMNTINFO64 CACHE INTERNAL "")
SET(HAVE_GETPASSPHRASE CACHE INTERNAL "") SET(HAVE_GETPASSPHRASE CACHE INTERNAL "")
SET(HAVE_GETPWNAM CACHE INTERNAL "") SET(HAVE_GETPWNAM CACHE INTERNAL "")
SET(HAVE_GETPWUID CACHE INTERNAL "") SET(HAVE_GETPWUID CACHE INTERNAL "")
@ -145,6 +149,7 @@ SET(HAVE_SELECT 1 CACHE INTERNAL "")
SET(HAVE_SELECT_H CACHE INTERNAL "") SET(HAVE_SELECT_H CACHE INTERNAL "")
SET(HAVE_SETENV CACHE INTERNAL "") SET(HAVE_SETENV CACHE INTERNAL "")
SET(HAVE_SETLOCALE 1 CACHE INTERNAL "") SET(HAVE_SETLOCALE 1 CACHE INTERNAL "")
SET(HAVE_SETMNTENT CACHE INTERNAL "")
SET(HAVE_SIGACTION CACHE INTERNAL "") SET(HAVE_SIGACTION CACHE INTERNAL "")
SET(HAVE_SIGINT 1 CACHE INTERNAL "") SET(HAVE_SIGINT 1 CACHE INTERNAL "")
SET(HAVE_SIGPIPE CACHE INTERNAL "") SET(HAVE_SIGPIPE CACHE INTERNAL "")

View File

@ -34,6 +34,11 @@
#cmakedefine HAVE_FLOAT_H 1 #cmakedefine HAVE_FLOAT_H 1
#cmakedefine HAVE_FNMATCH_H 1 #cmakedefine HAVE_FNMATCH_H 1
#cmakedefine HAVE_FPU_CONTROL_H 1 #cmakedefine HAVE_FPU_CONTROL_H 1
#cmakedefine HAVE_GETMNTENT 1
#cmakedefine HAVE_GETMNTENT_IN_SYS_MNTAB 1
#cmakedefine HAVE_GETMNTINFO 1
#cmakedefine HAVE_GETMNTINFO64 1
#cmakedefine HAVE_GETMNTINFO_TAKES_statvfs 1
#cmakedefine HAVE_GRP_H 1 #cmakedefine HAVE_GRP_H 1
#cmakedefine HAVE_IA64INTRIN_H 1 #cmakedefine HAVE_IA64INTRIN_H 1
#cmakedefine HAVE_IEEEFP_H 1 #cmakedefine HAVE_IEEEFP_H 1
@ -209,6 +214,7 @@
#cmakedefine HAVE_SELECT 1 #cmakedefine HAVE_SELECT 1
#cmakedefine HAVE_SETENV 1 #cmakedefine HAVE_SETENV 1
#cmakedefine HAVE_SETLOCALE 1 #cmakedefine HAVE_SETLOCALE 1
#cmakedefine HAVE_SETMNTENT 1
#cmakedefine HAVE_SETUPTERM 1 #cmakedefine HAVE_SETUPTERM 1
#cmakedefine HAVE_SIGSET 1 #cmakedefine HAVE_SIGSET 1
#cmakedefine HAVE_SIGACTION 1 #cmakedefine HAVE_SIGACTION 1

View File

@ -17,44 +17,46 @@
#define WSREP_INCLUDED #define WSREP_INCLUDED
#include <my_config.h> #include <my_config.h>
#include "log.h"
#ifdef WITH_WSREP #ifdef WITH_WSREP
#define IF_WSREP(A,B) A #define IF_WSREP(A,B) A
#define DBUG_ASSERT_IF_WSREP(A) DBUG_ASSERT(A) #define DBUG_ASSERT_IF_WSREP(A) DBUG_ASSERT(A)
#define WSREP_MYSQL_DB (char *)"mysql" extern ulong wsrep_debug; // wsrep_mysqld.cc
extern void WSREP_LOG(void (*fun)(const char* fmt, ...), const char* fmt, ...);
#define WSREP_TO_ISOLATION_BEGIN(db_, table_, table_list_) \ #define WSREP_DEBUG(...) \
if (WSREP_ON && WSREP(thd) && \ if (wsrep_debug) WSREP_LOG(sql_print_information, ##__VA_ARGS__)
wsrep_to_isolation_begin(thd, db_, table_, table_list_)) \ #define WSREP_INFO(...) WSREP_LOG(sql_print_information, ##__VA_ARGS__)
goto wsrep_error_label; #define WSREP_WARN(...) WSREP_LOG(sql_print_warning, ##__VA_ARGS__)
#define WSREP_ERROR(...) WSREP_LOG(sql_print_error, ##__VA_ARGS__)
#define WSREP_UNKNOWN(fmt, ...) WSREP_ERROR("UNKNOWN: " fmt, ##__VA_ARGS__)
#define WSREP_TO_ISOLATION_BEGIN_CREATE(db_, table_, table_list_, create_info_) \ #define WSREP_LOG_CONFLICT_THD(thd, role) \
if (WSREP_ON && WSREP(thd) && \ WSREP_INFO("%s: \n " \
wsrep_to_isolation_begin(thd, db_, table_, \ " THD: %lu, mode: %s, state: %s, conflict: %s, seqno: %lld\n " \
table_list_, nullptr, nullptr, create_info_)) \ " SQL: %s", \
goto wsrep_error_label; role, \
thd_get_thread_id(thd), \
wsrep_thd_client_mode_str(thd), \
wsrep_thd_client_state_str(thd), \
wsrep_thd_transaction_state_str(thd), \
wsrep_thd_trx_seqno(thd), \
wsrep_thd_query(thd) \
);
#define WSREP_TO_ISOLATION_BEGIN_ALTER(db_, table_, table_list_, alter_info_, fk_tables_, create_info_) \ #define WSREP_LOG_CONFLICT(bf_thd, victim_thd, bf_abort) \
if (WSREP(thd) && \ if (wsrep_debug || wsrep_log_conflicts) \
wsrep_to_isolation_begin(thd, db_, table_, \ { \
table_list_, alter_info_, \ WSREP_INFO("cluster conflict due to %s for threads:", \
fk_tables_, create_info_)) (bf_abort) ? "high priority abort" : "certification failure" \
); \
if (bf_thd) WSREP_LOG_CONFLICT_THD(bf_thd, "Winning thread"); \
if (victim_thd) WSREP_LOG_CONFLICT_THD(victim_thd, "Victim thread"); \
WSREP_INFO("context: %s:%d", __FILE__, __LINE__); \
}
/*
Checks if lex->no_write_to_binlog is set for statements that use LOCAL or
NO_WRITE_TO_BINLOG.
*/
#define WSREP_TO_ISOLATION_BEGIN_WRTCHK(db_, table_, table_list_) \
if (WSREP(thd) && !thd->lex->no_write_to_binlog && \
wsrep_to_isolation_begin(thd, db_, table_, table_list_)) \
goto wsrep_error_label;
#define WSREP_SYNC_WAIT(thd_, before_) \
{ if (WSREP_CLIENT(thd_) && \
wsrep_sync_wait(thd_, before_)) goto wsrep_error_label; }
#else /* !WITH_WSREP */ #else /* !WITH_WSREP */
@ -62,13 +64,11 @@
* (e.g. embedded) */ * (e.g. embedded) */
#define IF_WSREP(A,B) B #define IF_WSREP(A,B) B
//#define DBUG_ASSERT_IF_WSREP(A)
#define WSREP_DEBUG(...) #define WSREP_DEBUG(...)
//#define WSREP_INFO(...)
//#define WSREP_WARN(...)
#define WSREP_ERROR(...) #define WSREP_ERROR(...)
#define WSREP_TO_ISOLATION_BEGIN(db_, table_, table_list_) do { } while(0)
#define WSREP_TO_ISOLATION_BEGIN_ALTER(db_, table_, table_list_, alter_info_, fk_tables_, create_info_)
#define WSREP_TO_ISOLATION_BEGIN_CREATE(db_, table_, table_list_, create_info_)
#define WSREP_TO_ISOLATION_BEGIN_WRTCHK(db_, table_, table_list_)
#define WSREP_SYNC_WAIT(thd_, before_)
#endif /* WITH_WSREP */ #endif /* WITH_WSREP */
#endif /* WSREP_INCLUDED */ #endif /* WSREP_INCLUDED */

View File

@ -8,6 +8,7 @@ call mtr.add_suppression("InnoDB: Database page corruption on disk or a failed r
call mtr.add_suppression("InnoDB: Failed to read page .* from file '.*'"); call mtr.add_suppression("InnoDB: Failed to read page .* from file '.*'");
call mtr.add_suppression("InnoDB: OPT_PAGE_CHECKSUM mismatch"); call mtr.add_suppression("InnoDB: OPT_PAGE_CHECKSUM mismatch");
call mtr.add_suppression("InnoDB: Set innodb_force_recovery=1 to ignore corruption"); call mtr.add_suppression("InnoDB: Set innodb_force_recovery=1 to ignore corruption");
call mtr.add_suppression("InnoDB: (Unable to apply log to|Discarding log for) corrupted page ");
call mtr.add_suppression("InnoDB: Plugin initialization aborted"); call mtr.add_suppression("InnoDB: Plugin initialization aborted");
call mtr.add_suppression("Plugin 'InnoDB' registration as a STORAGE ENGINE failed"); call mtr.add_suppression("Plugin 'InnoDB' registration as a STORAGE ENGINE failed");
call mtr.add_suppression("\\[ERROR\\] InnoDB: Cannot decrypt \\[page id: space="); call mtr.add_suppression("\\[ERROR\\] InnoDB: Cannot decrypt \\[page id: space=");

View File

@ -9,6 +9,7 @@ call mtr.add_suppression("InnoDB: Database page corruption on disk or a failed r
call mtr.add_suppression("InnoDB: Failed to read page [123] from file '.*test.t1\\.ibd': Table is compressed or encrypted but uncompress or decrypt failed"); call mtr.add_suppression("InnoDB: Failed to read page [123] from file '.*test.t1\\.ibd': Table is compressed or encrypted but uncompress or decrypt failed");
call mtr.add_suppression("InnoDB: The page \\[page id: space=\\d+, page number=3\\] in file '.*test.t1\\.ibd' cannot be decrypted"); call mtr.add_suppression("InnoDB: The page \\[page id: space=\\d+, page number=3\\] in file '.*test.t1\\.ibd' cannot be decrypted");
call mtr.add_suppression("InnoDB: Table in tablespace \\d+ encrypted. However key management plugin or used key_version \\d+ is not found or used encryption algorithm or method does not match. Can't continue opening the table."); call mtr.add_suppression("InnoDB: Table in tablespace \\d+ encrypted. However key management plugin or used key_version \\d+ is not found or used encryption algorithm or method does not match. Can't continue opening the table.");
call mtr.add_suppression("InnoDB: (Unable to apply log to|Discarding log for) corrupted page ");
--enable_query_log --enable_query_log
let INNODB_PAGE_SIZE=`select @@innodb_page_size`; let INNODB_PAGE_SIZE=`select @@innodb_page_size`;

View File

@ -17,6 +17,7 @@ call mtr.add_suppression("InnoDB: Database page corruption on disk or a failed r
call mtr.add_suppression("InnoDB: Failed to read page .* from file '.*'"); call mtr.add_suppression("InnoDB: Failed to read page .* from file '.*'");
call mtr.add_suppression("InnoDB: OPT_PAGE_CHECKSUM mismatch"); call mtr.add_suppression("InnoDB: OPT_PAGE_CHECKSUM mismatch");
call mtr.add_suppression("InnoDB: Set innodb_force_recovery=1 to ignore corruption"); call mtr.add_suppression("InnoDB: Set innodb_force_recovery=1 to ignore corruption");
call mtr.add_suppression("InnoDB: (Unable to apply log to|Discarding log for) corrupted page ");
call mtr.add_suppression("InnoDB: Plugin initialization aborted"); call mtr.add_suppression("InnoDB: Plugin initialization aborted");
call mtr.add_suppression("Plugin 'InnoDB' registration as a STORAGE ENGINE failed"); call mtr.add_suppression("Plugin 'InnoDB' registration as a STORAGE ENGINE failed");
# for innodb_checksum_algorithm=full_crc32 only # for innodb_checksum_algorithm=full_crc32 only

View File

@ -51,25 +51,39 @@ id msg
DROP TABLE t1; DROP TABLE t1;
CREATE TABLE t1 ( CREATE TABLE t1 (
id INT PRIMARY KEY, id INT PRIMARY KEY,
f1 INT NOT NULL,
f2 INT NOT NULL,
f3 INT NOT NULL,
msg VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_bin, msg VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_bin,
unique index(msg) msg_1 VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_bin,
unique index(f1, msg, f2, msg_1, f3),
unique index(f1, msg_1, f2, msg, f3),
unique index(f1, msg, f3, msg_1, f2),
unique index(f1, msg_1, f3, msg, f2),
unique index(f2, msg_1, f1, msg, f3),
unique index(f2, msg, f3, msg_1, f1),
unique index(f3, f2, msg, msg_1, f1),
unique index(f3, msg, msg_1, f1, f2)
) ENGINE=INNODB; ) ENGINE=INNODB;
INSERT INTO t1 VALUES (1, 'aaa'); INSERT INTO t1 VALUES (1, 1, 1, 1, 'aaa', 'aaa');
SET DEBUG_DBUG="+d,create_index_fail"; SET DEBUG_DBUG="+d,create_index_fail";
SET DEBUG_SYNC="innodb_inplace_alter_table_enter SIGNAL con1_go WAIT_FOR alter_signal"; SET DEBUG_SYNC="innodb_inplace_alter_table_enter SIGNAL con1_go WAIT_FOR alter_signal";
ALTER TABLE t1 MODIFY msg VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci, ALGORITHM=NOCOPY; ALTER TABLE t1 MODIFY msg VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci, MODIFY msg_1 VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci, ALGORITHM=NOCOPY;
connection con1; connection con1;
SET DEBUG_SYNC="now WAIT_FOR con1_go"; SET DEBUG_SYNC="now WAIT_FOR con1_go";
BEGIN; BEGIN;
SELECT * FROM t1; SELECT * FROM t1;
id msg id f1 f2 f3 msg msg_1
1 aaa 1 1 1 1 aaa aaa
SET DEBUG_SYNC="now SIGNAL alter_signal"; SET DEBUG_SYNC="now SIGNAL alter_signal";
connection default; connection default;
ERROR 23000: Duplicate entry '' for key '*UNKNOWN*' ERROR 23000: Duplicate entry '' for key '*UNKNOWN*'
CHECK TABLE t1;
Table Op Msg_type Msg_text
test.t1 check status OK
connection con1; connection con1;
rollback; rollback;
INSERT INTO t1 VALUES(2, 'bbb'); INSERT INTO t1 VALUES(2, 2, 2, 2, 'bbb', 'bbb');
disconnect con1; disconnect con1;
connection default; connection default;
SET DEBUG_SYNC=reset; SET DEBUG_SYNC=reset;
@ -77,11 +91,22 @@ SHOW CREATE TABLE t1;
Table Create Table Table Create Table
t1 CREATE TABLE `t1` ( t1 CREATE TABLE `t1` (
`id` int(11) NOT NULL, `id` int(11) NOT NULL,
`f1` int(11) NOT NULL,
`f2` int(11) NOT NULL,
`f3` int(11) NOT NULL,
`msg` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL, `msg` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
`msg_1` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
PRIMARY KEY (`id`), PRIMARY KEY (`id`),
UNIQUE KEY `msg` (`msg`) UNIQUE KEY `f1` (`f1`,`msg`,`f2`,`msg_1`,`f3`),
UNIQUE KEY `f1_2` (`f1`,`msg_1`,`f2`,`msg`,`f3`),
UNIQUE KEY `f1_3` (`f1`,`msg`,`f3`,`msg_1`,`f2`),
UNIQUE KEY `f1_4` (`f1`,`msg_1`,`f3`,`msg`,`f2`),
UNIQUE KEY `f2` (`f2`,`msg_1`,`f1`,`msg`,`f3`),
UNIQUE KEY `f2_2` (`f2`,`msg`,`f3`,`msg_1`,`f1`),
UNIQUE KEY `f3` (`f3`,`f2`,`msg`,`msg_1`,`f1`),
UNIQUE KEY `f3_2` (`f3`,`msg`,`msg_1`,`f1`,`f2`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
INSERT INTO t1 VALUES(3, 'ccc'); INSERT INTO t1 VALUES(3, 3, 3, 3, 'ccc', 'ccc');
DROP TABLE t1; DROP TABLE t1;
CREATE TABLE t1(id INT PRIMARY KEY, msg VARCHAR(100), CREATE TABLE t1(id INT PRIMARY KEY, msg VARCHAR(100),
msg_1 VARCHAR(100) AS (msg) VIRTUAL, msg_1 VARCHAR(100) AS (msg) VIRTUAL,

View File

@ -17,4 +17,8 @@ pk c
1 sql 1 sql
SELECT * FROM t1 WHERE pk = 12; SELECT * FROM t1 WHERE pk = 12;
ERROR HY000: Index for table 't1' is corrupt; try to repair it ERROR HY000: Index for table 't1' is corrupt; try to repair it
CHECK TABLE t1;
Table Op Msg_type Msg_text
test.t1 check Warning InnoDB: The B-tree of index PRIMARY is corrupted.
test.t1 check error Corrupt
DROP TABLE t1; DROP TABLE t1;

View File

@ -78,15 +78,26 @@ DROP TABLE t1;
CREATE TABLE t1 ( CREATE TABLE t1 (
id INT PRIMARY KEY, id INT PRIMARY KEY,
f1 INT NOT NULL,
f2 INT NOT NULL,
f3 INT NOT NULL,
msg VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_bin, msg VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_bin,
unique index(msg) msg_1 VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_bin,
unique index(f1, msg, f2, msg_1, f3),
unique index(f1, msg_1, f2, msg, f3),
unique index(f1, msg, f3, msg_1, f2),
unique index(f1, msg_1, f3, msg, f2),
unique index(f2, msg_1, f1, msg, f3),
unique index(f2, msg, f3, msg_1, f1),
unique index(f3, f2, msg, msg_1, f1),
unique index(f3, msg, msg_1, f1, f2)
) ENGINE=INNODB; ) ENGINE=INNODB;
INSERT INTO t1 VALUES (1, 'aaa'); INSERT INTO t1 VALUES (1, 1, 1, 1, 'aaa', 'aaa');
SET DEBUG_DBUG="+d,create_index_fail"; SET DEBUG_DBUG="+d,create_index_fail";
SET DEBUG_SYNC="innodb_inplace_alter_table_enter SIGNAL con1_go WAIT_FOR alter_signal"; SET DEBUG_SYNC="innodb_inplace_alter_table_enter SIGNAL con1_go WAIT_FOR alter_signal";
--send --send
ALTER TABLE t1 MODIFY msg VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci, ALGORITHM=NOCOPY; ALTER TABLE t1 MODIFY msg VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci, MODIFY msg_1 VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci, ALGORITHM=NOCOPY;
connection con1; connection con1;
SET DEBUG_SYNC="now WAIT_FOR con1_go"; SET DEBUG_SYNC="now WAIT_FOR con1_go";
@ -96,14 +107,15 @@ SET DEBUG_SYNC="now SIGNAL alter_signal";
connection default; connection default;
--error ER_DUP_ENTRY --error ER_DUP_ENTRY
reap; reap;
CHECK TABLE t1;
connection con1; connection con1;
rollback; rollback;
INSERT INTO t1 VALUES(2, 'bbb'); INSERT INTO t1 VALUES(2, 2, 2, 2, 'bbb', 'bbb');
disconnect con1; disconnect con1;
connection default; connection default;
SET DEBUG_SYNC=reset; SET DEBUG_SYNC=reset;
SHOW CREATE TABLE t1; SHOW CREATE TABLE t1;
INSERT INTO t1 VALUES(3, 'ccc'); INSERT INTO t1 VALUES(3, 3, 3, 3, 'ccc', 'ccc');
DROP TABLE t1; DROP TABLE t1;
# Inplace Collation change is not supported for virtual column # Inplace Collation change is not supported for virtual column

View File

@ -6,6 +6,7 @@ call mtr.add_suppression("Plugin 'InnoDB' init function returned error");
call mtr.add_suppression("Plugin 'InnoDB' registration as a STORAGE ENGINE failed"); call mtr.add_suppression("Plugin 'InnoDB' registration as a STORAGE ENGINE failed");
call mtr.add_suppression("InnoDB: Database page corruption on disk or a failed read of file '.*test.t1\\.ibd' page"); call mtr.add_suppression("InnoDB: Database page corruption on disk or a failed read of file '.*test.t1\\.ibd' page");
call mtr.add_suppression("InnoDB: Failed to read page 3 from file '.*test.t1\\.ibd': Page read from tablespace is corrupted."); call mtr.add_suppression("InnoDB: Failed to read page 3 from file '.*test.t1\\.ibd': Page read from tablespace is corrupted.");
call mtr.add_suppression("InnoDB: (Unable to apply log to|Discarding log for) corrupted page .*, page number=3\\]");
call mtr.add_suppression("Table test/t1 is corrupted. Please drop the table and recreate\\."); call mtr.add_suppression("Table test/t1 is corrupted. Please drop the table and recreate\\.");
call mtr.add_suppression("InnoDB: File '.*test/t1\\.ibd' is corrupted"); call mtr.add_suppression("InnoDB: File '.*test/t1\\.ibd' is corrupted");
call mtr.add_suppression("InnoDB: A long wait .* was observed for dict_sys"); call mtr.add_suppression("InnoDB: A long wait .* was observed for dict_sys");

View File

@ -4,12 +4,14 @@
--disable_query_log --disable_query_log
call mtr.add_suppression("InnoDB: Database page corruption on disk or a failed read of file '.*test.t1\\.ibd' page"); call mtr.add_suppression("InnoDB: Database page corruption on disk or a failed read of file '.*test.t1\\.ibd' page");
call mtr.add_suppression("\\[ERROR\\] InnoDB: Failed to read page 19 from file '.*test.t1\\.ibd': Page read from tablespace is corrupted\\."); call mtr.add_suppression("\\[ERROR\\] InnoDB: Failed to read page 19 from file '.*test.t1\\.ibd': Page read from tablespace is corrupted\\.");
call mtr.add_suppression("InnoDB: (Unable to apply log to|Discarding log for) corrupted page .*, page number=19\\]");
call mtr.add_suppression("\\[ERROR\\] InnoDB: Plugin initialization aborted at srv0start\\.cc.* with error Data structure corruption"); call mtr.add_suppression("\\[ERROR\\] InnoDB: Plugin initialization aborted at srv0start\\.cc.* with error Data structure corruption");
call mtr.add_suppression("\\[ERROR\\] Plugin 'InnoDB' (init function|registration)"); call mtr.add_suppression("\\[ERROR\\] Plugin 'InnoDB' (init function|registration)");
call mtr.add_suppression("\\[ERROR\\] InnoDB: We detected index corruption"); call mtr.add_suppression("\\[ERROR\\] InnoDB: We detected index corruption");
call mtr.add_suppression("\\[ERROR\\] (mysqld|mariadbd).*: Index for table 't1' is corrupt; try to repair it"); call mtr.add_suppression("\\[ERROR\\] (mysqld|mariadbd).*: Index for table 't1' is corrupt; try to repair it");
call mtr.add_suppression("InnoDB: btr_pcur_open_low level: 0 table: `test`\\.`t1` index: `PRIMARY`"); call mtr.add_suppression("InnoDB: btr_pcur_open_low level: 0 table: `test`\\.`t1` index: `PRIMARY`");
call mtr.add_suppression("InnoDB: File '.*test/t1\\.ibd' is corrupted"); call mtr.add_suppression("InnoDB: File '.*test/t1\\.ibd' is corrupted");
call mtr.add_suppression("InnoDB: In page .* of index `PRIMARY` of table `test`\\.`t1`");
--enable_query_log --enable_query_log
CREATE TABLE t1 (pk INT PRIMARY KEY, c CHAR(255))ENGINE=InnoDB STATS_PERSISTENT=0; CREATE TABLE t1 (pk INT PRIMARY KEY, c CHAR(255))ENGINE=InnoDB STATS_PERSISTENT=0;
@ -53,6 +55,7 @@ let $restart_parameters=--innodb-force-recovery=2;
SELECT * FROM t1 WHERE PK = 1; SELECT * FROM t1 WHERE PK = 1;
--error ER_NOT_KEYFILE --error ER_NOT_KEYFILE
SELECT * FROM t1 WHERE pk = 12; SELECT * FROM t1 WHERE pk = 12;
CHECK TABLE t1;
DROP TABLE t1; DROP TABLE t1;
let $restart_parameters=; let $restart_parameters=;

View File

@ -111,7 +111,7 @@ my_bool my_gethwaddr(uchar *to)
for (i= 0; res && i < ifc.ifc_len / sizeof(ifr[0]); i++) for (i= 0; res && i < ifc.ifc_len / sizeof(ifr[0]); i++)
{ {
#if !defined(_AIX) || !defined(__linux__) #if !defined(_AIX) || !defined(__linux__)
#if defined(__linux___) #if defined(__linux__)
#define HWADDR_DATA ifr[i].ifr_hwaddr.sa_data #define HWADDR_DATA ifr[i].ifr_hwaddr.sa_data
#else #else
#define HWADDR_DATA ifr[i].ifr_hwaddr #define HWADDR_DATA ifr[i].ifr_hwaddr

View File

@ -1,7 +1,24 @@
INCLUDE (CheckIncludeFiles) INCLUDE (CheckIncludeFiles)
CHECK_INCLUDE_FILES ("sys/statvfs.h;mntent.h" INFO_HEADERS LANGUAGE CXX)
IF (INFO_HEADERS) CHECK_SYMBOL_EXISTS (getmntent "mntent.h" HAVE_GETMNTENT)
CHECK_SYMBOL_EXISTS (getmntent "sys/mnttab.h" HAVE_GETMNTENT_IN_SYS_MNTAB)
CHECK_SYMBOL_EXISTS (setmntent "mntent.h" HAVE_SETMNTENT)
CHECK_SYMBOL_EXISTS (getmntinfo "sys/types.h;sys/mount.h" HAVE_GETMNTINFO)
CHECK_SYMBOL_EXISTS (getmntinfo64 "sys/types.h;sys/mount.h" HAVE_GETMNTINFO64)
IF (HAVE_GETMNTINFO)
CHECK_CXX_SOURCE_COMPILES("
#include <sys/types.h>
#include <sys/statvfs.h>
int main()
{
struct statvfs *s;
return getmntinfo(&s, ST_WAIT);
}
" HAVE_GETMNTINFO_TAKES_statvfs)
ENDIF()
IF (HAVE_GETMNTENT OR HAVE_GETMNTENT_IN_SYS_MNTAB OR
HAVE_GETMNTINFO OR HAVE_GETMNTINFO64)
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/sql) INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/sql)
MYSQL_ADD_PLUGIN(DISKS information_schema_disks.cc MODULE_ONLY RECOMPILE_FOR_EMBEDDED) MYSQL_ADD_PLUGIN(DISKS information_schema_disks.cc MODULE_ONLY RECOMPILE_FOR_EMBEDDED)
ENDIF() ENDIF()

View File

@ -17,11 +17,45 @@
#include <my_global.h> #include <my_global.h>
#include <sys/statvfs.h> #include <sys/statvfs.h>
#include <sys/types.h> #include <sys/types.h>
#if defined(HAVE_GETMNTENT)
#include <mntent.h> #include <mntent.h>
#elif !defined(HAVE_GETMNTINFO_TAKES_statvfs)
/* getmntinfo (the not NetBSD variants) */
#include <sys/param.h>
#include <sys/ucred.h>
#include <sys/mount.h>
#endif
#if defined(HAVE_GETMNTENT_IN_SYS_MNTAB)
#include <sys/mnttab.h>
#define HAVE_GETMNTENT
#endif
#include <sql_class.h> #include <sql_class.h>
#include <sql_i_s.h> #include <sql_i_s.h>
#include <sql_acl.h> /* check_global_access() */ #include <sql_acl.h> /* check_global_access() */
/*
This intends to support *BSD's, macOS, Solaris, AIX, HP-UX, and Linux.
specificly:
FreeBSD/OpenBSD/DragonFly (statfs) NetBSD (statvfs) uses getmntinfo().
macOS uses getmntinfo64().
Linux can use getmntent_r(), but we've just used getmntent for simplification.
Linux/Solaris/AIX/HP-UX uses setmntent()/getmntent().
Solaris uses getmntent() with a diffent prototype, return structure, and
no setmntent(fopen instead)
*/
#if defined(HAVE_GETMNTINFO_TAKES_statvfs) || defined(HAVE_GETMNTENT)
typedef struct statvfs st_info;
#elif defined(HAVE_GETMNTINFO64)
typedef struct statfs64 st_info;
#else // GETMNTINFO
typedef struct statfs st_info;
#endif
#ifndef MOUNTED
/* HPUX - https://docstore.mik.ua/manuals/hp-ux/en/B2355-60130/getmntent.3X.html */
#define MOUNTED MNT_MNTTAB
#endif
bool schema_table_store_record(THD *thd, TABLE *table); bool schema_table_store_record(THD *thd, TABLE *table);
@ -41,24 +75,40 @@ ST_FIELD_INFO disks_table_fields[]=
}; };
static int disks_table_add_row_stat(
int disks_table_add_row(THD* pThd, THD* pThd,
TABLE* pTable, TABLE* pTable,
const char* zDisk, const char* zDisk,
const char* zPath, const char* zPath,
const struct statvfs& info) const st_info &info)
{ {
// From: http://pubs.opengroup.org/onlinepubs/009695399/basedefs/sys/statvfs.h.html // From: http://pubs.opengroup.org/onlinepubs/009695399/basedefs/sys/statvfs.h.html
// and same for statfs:
// From: https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/statfs.2.html#//apple_ref/doc/man/2/statfs
// and: https://www.freebsd.org/cgi/man.cgi?query=statfs&sektion=2&apropos=0&manpath=FreeBSD+13.1-RELEASE+and+Ports
// //
// f_frsize Fundamental file system block size. // f_bsize Fundamental file system block size.
// f_blocks Total number of blocks on file system in units of f_frsize. // f_blocks Total number of blocks on file system in units of f_frsize.
// f_bfree Total number of free blocks. // f_bfree Total number of free blocks.
// f_bavail Number of free blocks available to non-privileged process. // f_bavail Number of free blocks available to non-privileged process.
ulong block_size= (ulong) info.f_bsize;
ulonglong total = ((ulonglong)info.f_frsize * info.f_blocks) / 1024; ulonglong total = ((ulonglong) block_size * info.f_blocks) / 1024;
ulonglong used = ((ulonglong)info.f_frsize * ulonglong used = ((ulonglong) block_size *
(info.f_blocks - info.f_bfree)) / 1024; (info.f_blocks - info.f_bfree)) / 1024;
ulonglong avail = ((ulonglong)info.f_frsize * info.f_bavail) / 1024; ulonglong avail = ((ulonglong) block_size * info.f_bavail) / 1024;
/* skip filesystems that don't have any space */
if (!info.f_blocks)
return 0;
/* skip RO mounted filesystems */
#if defined(HAVE_GETMNTINFO_TAKES_statvfs) || defined(HAVE_GETMNTENT)
if (info.f_flag & ST_RDONLY)
#else
if (info.f_flags & MNT_RDONLY)
#endif
return 0;
pTable->field[0]->store(zDisk, strlen(zDisk), system_charset_info); pTable->field[0]->store(zDisk, strlen(zDisk), system_charset_info);
pTable->field[1]->store(zPath, strlen(zPath), system_charset_info); pTable->field[1]->store(zPath, strlen(zPath), system_charset_info);
@ -70,71 +120,147 @@ int disks_table_add_row(THD* pThd,
return (schema_table_store_record(pThd, pTable) != 0) ? 1 : 0; return (schema_table_store_record(pThd, pTable) != 0) ? 1 : 0;
} }
int disks_table_add_row(THD* pThd, TABLE* pTable, const char* zDisk, const char* zPath)
#ifdef HAVE_GETMNTENT
static int disks_table_add_row(THD* pThd, TABLE* pTable, const char* zDisk, const char* zPath)
{ {
int rv = 0; int rv = 0;
struct statvfs info; st_info info;
if (statvfs(zPath, &info) == 0) // We ignore failures. if (statvfs(zPath, &info) == 0) // We ignore failures.
{ {
rv = disks_table_add_row(pThd, pTable, zDisk, zPath, info); rv = disks_table_add_row_stat(pThd, pTable, zDisk, zPath, info);
} }
return rv; return rv;
} }
#endif
int disks_fill_table(THD* pThd, TABLE_LIST* pTables, Item* pCond)
#ifdef HAVE_GETMNTINFO
static int disks_fill_table(THD* pThd, TABLE_LIST* pTables, Item* pCond)
{ {
int rv = 1; st_info *s;
TABLE* pTable = pTables->table; int count, rv= 0;
TABLE* pTable= pTables->table;
if (check_global_access(pThd, FILE_ACL, true)) if (check_global_access(pThd, FILE_ACL, true))
return 0; return 0;
FILE* pFile = setmntent("/etc/mtab", "r"); #if defined(HAVE_GETMNTINFO_TAKES_statvfs)
count= getmntinfo(&s, ST_WAIT);
#elif defined(HAVE_GETMNTINFO64)
count= getmntinfo64(&s, MNT_WAIT);
#else
count= getmntinfo(&s, MNT_WAIT);
#endif
if (count == 0)
return 1;
if (pFile) while (count && rv == 0)
{ {
const size_t BUFFER_SIZE = 4096; // 4K should be sufficient. rv= disks_table_add_row_stat(pThd, pTable, s->f_mntfromname, s->f_mntonname, *s);
count--;
char* pBuffer = new (std::nothrow) char [BUFFER_SIZE]; s++;
if (pBuffer)
{
rv = 0;
struct mntent ent;
struct mntent* pEnt;
while ((rv == 0) && (pEnt = getmntent_r(pFile, &ent, pBuffer, BUFFER_SIZE)))
{
// We only report the ones that refer to physical disks.
if (pEnt->mnt_fsname[0] == '/')
{
rv = disks_table_add_row(pThd, pTable, pEnt->mnt_fsname, pEnt->mnt_dir);
}
}
delete [] pBuffer;
}
else
{
rv = 1;
}
endmntent(pFile);
} }
return rv;
}
#else /* HAVE_GETMNTINFO */
static mysql_mutex_t m_getmntent;
/* HAVE_GETMNTENT */
static int disks_fill_table(THD* pThd, TABLE_LIST* pTables, Item* pCond)
{
int rv= 1;
#ifdef HAVE_SETMNTENT
struct mntent* pEnt;
#else
struct mnttab mnttabent, *pEnt= &mnttabent;
#endif
FILE* pFile;
TABLE* pTable= pTables->table;
if (check_global_access(pThd, FILE_ACL, true))
return 0;
#ifdef HAVE_SETMNTENT
pFile= setmntent(MOUNTED, "r");
#else
/* Solaris */
pFile= fopen("/etc/mnttab", "r");
#endif
if (!pFile)
return 1;
rv= 0;
/*
We lock the outer loop rather than between getmntent so the multiple
infomation_schema.disks reads don't all start blocking each other and
no-one gets any answers.
*/
mysql_mutex_lock(&m_getmntent);
while ((rv == 0) &&
#if defined(HAVE_SETMNTENT)
(pEnt = getmntent(pFile))
#else
getmntent(pFile, pEnt) != 0
#endif
)
{
struct stat f;
const char *path, *point;
#ifdef HAVE_SETMNTENT
path= pEnt->mnt_dir;
point= pEnt->mnt_fsname;
#else
path= pEnt->mnt_mountp;
point= pEnt->mnt_special;
#endif
// Try to keep to real storage by excluding
// read only mounts, and mount points that aren't directories
if (hasmntopt(pEnt, MNTOPT_RO) != NULL)
continue;
if (stat(path, &f))
continue;
if (!S_ISDIR(f.st_mode))
continue;
rv= disks_table_add_row(pThd, pTable, point, path);
}
mysql_mutex_unlock(&m_getmntent);
#ifdef HAVE_SETMNTENT
endmntent(pFile);
#else
fclose(pFile);
#endif
return rv; return rv;
} }
#endif /* HAVE_GETMNTINFO */
int disks_table_init(void *ptr) static int disks_table_init(void *ptr)
{ {
ST_SCHEMA_TABLE* pSchema_table = (ST_SCHEMA_TABLE*)ptr; ST_SCHEMA_TABLE* pSchema_table = (ST_SCHEMA_TABLE*)ptr;
pSchema_table->fields_info = disks_table_fields; pSchema_table->fields_info = disks_table_fields;
pSchema_table->fill_table = disks_fill_table; pSchema_table->fill_table = disks_fill_table;
#ifndef HAVE_GETMNTINFO
mysql_mutex_init(0, &m_getmntent, MY_MUTEX_INIT_SLOW);
#endif
return 0;
}
static int disks_table_deinit(void *ptr __attribute__((unused)))
{
#ifndef HAVE_GETMNTINFO
mysql_mutex_destroy(&m_getmntent);
#endif
return 0; return 0;
} }
@ -148,15 +274,15 @@ maria_declare_plugin(disks)
MYSQL_INFORMATION_SCHEMA_PLUGIN, MYSQL_INFORMATION_SCHEMA_PLUGIN,
&disks_table_info, /* type-specific descriptor */ &disks_table_info, /* type-specific descriptor */
"DISKS", /* table name */ "DISKS", /* table name */
"Johan Wikman", /* author */ "Johan Wikman, Daniel Black", /* author */
"Disk space information", /* description */ "Disk space information", /* description */
PLUGIN_LICENSE_GPL, /* license type */ PLUGIN_LICENSE_GPL, /* license type */
Show::disks_table_init, /* init function */ Show::disks_table_init, /* init function */
NULL, /* deinit function */ Show::disks_table_deinit, /* deinit function */
0x0101, /* version = 1.1 */ 0x0102, /* version = 1.2 */
NULL, /* no status variables */ NULL, /* no status variables */
NULL, /* no system variables */ NULL, /* no system variables */
"1.1", /* String version representation */ "1.2", /* String version representation */
MariaDB_PLUGIN_MATURITY_STABLE /* Maturity (see include/mysql/plugin.h)*/ MariaDB_PLUGIN_MATURITY_STABLE /* Maturity (see include/mysql/plugin.h)*/
} }
mysql_declare_plugin_end; mysql_declare_plugin_end;

View File

@ -1,8 +1,8 @@
show create table information_schema.disks; show create table information_schema.disks;
Table Create Table Table Create Table
DISKS CREATE TEMPORARY TABLE `DISKS` ( DISKS CREATE TEMPORARY TABLE `DISKS` (
`Disk` varchar(4096) NOT NULL, `Disk` varchar(pathlen) NOT NULL,
`Path` varchar(4096) NOT NULL, `Path` varchar(pathlen) NOT NULL,
`Total` bigint(32) NOT NULL, `Total` bigint(32) NOT NULL,
`Used` bigint(32) NOT NULL, `Used` bigint(32) NOT NULL,
`Available` bigint(32) NOT NULL `Available` bigint(32) NOT NULL

View File

@ -1,2 +1,3 @@
--replace_regex /varchar\([0-9]+\)/varchar(pathlen)/
show create table information_schema.disks; show create table information_schema.disks;
select sum(Total) > sum(Available), sum(Total)>sum(Used) from information_schema.disks; select sum(Total) > sum(Available), sum(Total)>sum(Used) from information_schema.disks;

View File

@ -36,6 +36,9 @@
#include <my_sys.h> #include <my_sys.h>
#include <strfunc.h> // strconvert() #include <strfunc.h> // strconvert()
#include "wsrep_mysqld.h" #include "wsrep_mysqld.h"
#ifdef WITH_WSREP
#include "wsrep_server_state.h"
#endif /* WITH_WSREP */
static const char *stage_names[]= static const char *stage_names[]=
{"START", "FLUSH", "BLOCK_DDL", "BLOCK_COMMIT", "END", 0}; {"START", "FLUSH", "BLOCK_DDL", "BLOCK_COMMIT", "END", 0};

View File

@ -32,6 +32,7 @@
#include "sp_head.h" #include "sp_head.h"
#include "sql_show.h" // append_definer, append_identifier #include "sql_show.h" // append_definer, append_identifier
#include "mysql/psi/mysql_sp.h" #include "mysql/psi/mysql_sp.h"
#include "wsrep_mysqld.h"
#ifdef WITH_WSREP #ifdef WITH_WSREP
#include "wsrep_trans_observer.h" #include "wsrep_trans_observer.h"
#endif /* WITH_WSREP */ #endif /* WITH_WSREP */

View File

@ -35,6 +35,7 @@
#include "set_var.h" #include "set_var.h"
#include "lock.h" // lock_object_name #include "lock.h" // lock_object_name
#include "mysql/psi/mysql_sp.h" #include "mysql/psi/mysql_sp.h"
#include "wsrep_mysqld.h"
/** /**
@addtogroup Event_Scheduler @addtogroup Event_Scheduler

View File

@ -55,6 +55,9 @@
#include "debug_sync.h" #include "debug_sync.h"
#include "sql_base.h" #include "sql_base.h"
#include "sql_cte.h" #include "sql_cte.h"
#ifdef WITH_WSREP
#include "mysql/service_wsrep.h"
#endif /* WITH_WSREP */
#ifdef NO_EMBEDDED_ACCESS_CHECKS #ifdef NO_EMBEDDED_ACCESS_CHECKS
#define sp_restore_security_context(A,B) while (0) {} #define sp_restore_security_context(A,B) while (0) {}

View File

@ -5813,8 +5813,8 @@ bool Item_func_natural_sort_key::check_vcol_func_processor(void *arg)
} }
#ifdef WITH_WSREP #ifdef WITH_WSREP
#include "wsrep_mysqld.h" #include "wsrep_mysqld.h"
#include "wsrep_server_state.h"
/* Format is %d-%d-%llu */ /* Format is %d-%d-%llu */
#define WSREP_MAX_WSREP_SERVER_GTID_STR_LEN 10+1+10+1+20 #define WSREP_MAX_WSREP_SERVER_GTID_STR_LEN 10+1+10+1+20

View File

@ -79,7 +79,10 @@
#include "sql_parse.h" // is_log_table_write_query #include "sql_parse.h" // is_log_table_write_query
#include "sql_handler.h" #include "sql_handler.h"
#include <hash.h> #include <hash.h>
#ifdef WITH_WSREP
#include "wsrep_mysqld.h" #include "wsrep_mysqld.h"
#include "wsrep_server_state.h"
#endif
/** /**
@defgroup Locking Locking @defgroup Locking Locking

View File

@ -18,7 +18,6 @@
#define LOG_H #define LOG_H
#include "handler.h" /* my_xid */ #include "handler.h" /* my_xid */
#include "wsrep_mysqld.h"
#include "rpl_constants.h" #include "rpl_constants.h"
class Relay_log_info; class Relay_log_info;

View File

@ -43,6 +43,9 @@
#include <strfunc.h> #include <strfunc.h>
#include "compat56.h" #include "compat56.h"
#include "sql_insert.h" #include "sql_insert.h"
#ifdef WITH_WSREP
#include "wsrep_mysqld.h"
#endif /* WITH_WSREP */
#else #else
#include "mysqld_error.h" #include "mysqld_error.h"
#endif /* MYSQL_CLIENT */ #endif /* MYSQL_CLIENT */

View File

@ -30,6 +30,9 @@
#include <mysql/psi/mysql_mdl.h> #include <mysql/psi/mysql_mdl.h>
#include <algorithm> #include <algorithm>
#include <array> #include <array>
#ifdef WITH_WSREP
#include "wsrep_mysqld.h"
#endif
static PSI_memory_key key_memory_MDL_context_acquire_locks; static PSI_memory_key key_memory_MDL_context_acquire_locks;

View File

@ -78,6 +78,7 @@
#ifdef WITH_WSREP #ifdef WITH_WSREP
#include "wsrep_thd.h" #include "wsrep_thd.h"
#include "wsrep_sst.h" #include "wsrep_sst.h"
#include "wsrep_server_state.h"
#endif /* WITH_WSREP */ #endif /* WITH_WSREP */
#include "proxy_protocol.h" #include "proxy_protocol.h"

View File

@ -46,6 +46,7 @@
#include "sql_audit.h" #include "sql_audit.h"
#include "debug_sync.h" #include "debug_sync.h"
#ifdef WITH_WSREP #ifdef WITH_WSREP
#include "wsrep.h"
#include "wsrep_trans_observer.h" #include "wsrep_trans_observer.h"
#endif /* WITH_WSREP */ #endif /* WITH_WSREP */

View File

@ -56,6 +56,7 @@
#include "password.h" #include "password.h"
#include "sql_plugin_compat.h" #include "sql_plugin_compat.h"
#include "wsrep_mysqld.h"
#define MAX_SCRAMBLE_LENGTH 1024 #define MAX_SCRAMBLE_LENGTH 1024

View File

@ -347,6 +347,9 @@ TODO list:
#include "probes_mysql.h" #include "probes_mysql.h"
#include "transaction.h" #include "transaction.h"
#include "strfunc.h" #include "strfunc.h"
#ifdef WITH_WSREP
#include "wsrep_mysqld.h"
#endif
const uchar *query_state_map; const uchar *query_state_map;

View File

@ -68,6 +68,7 @@
#ifdef WITH_WSREP #ifdef WITH_WSREP
#include "wsrep_thd.h" #include "wsrep_thd.h"
#include "wsrep_trans_observer.h" #include "wsrep_trans_observer.h"
#include "wsrep_server_state.h"
#else #else
static inline bool wsrep_is_bf_aborted(THD* thd) { return false; } static inline bool wsrep_is_bf_aborted(THD* thd) { return false; }
#endif /* WITH_WSREP */ #endif /* WITH_WSREP */

View File

@ -66,7 +66,8 @@ void set_thd_stage_info(void *thd,
#include "my_apc.h" #include "my_apc.h"
#include "rpl_gtid.h" #include "rpl_gtid.h"
#include "wsrep_mysqld.h" #include "wsrep.h"
#include "wsrep_on.h"
#ifdef WITH_WSREP #ifdef WITH_WSREP
#include <inttypes.h> #include <inttypes.h>
/* wsrep-lib */ /* wsrep-lib */
@ -76,6 +77,11 @@ void set_thd_stage_info(void *thd,
#include "wsrep_condition_variable.h" #include "wsrep_condition_variable.h"
class Wsrep_applier_service; class Wsrep_applier_service;
enum wsrep_consistency_check_mode {
NO_CONSISTENCY_CHECK,
CONSISTENCY_CHECK_DECLARED,
CONSISTENCY_CHECK_RUNNING,
};
#endif /* WITH_WSREP */ #endif /* WITH_WSREP */
class Reprepare_observer; class Reprepare_observer;
@ -7869,7 +7875,9 @@ extern THD_list server_threads;
void setup_tmp_table_column_bitmaps(TABLE *table, uchar *bitmaps, void setup_tmp_table_column_bitmaps(TABLE *table, uchar *bitmaps,
uint field_count); uint field_count);
#ifdef WITH_WSREP
extern void wsrep_to_isolation_end(THD*);
#endif
/* /*
RAII utility class to ease binlogging with temporary setting RAII utility class to ease binlogging with temporary setting
THD etc context and restoring the original one upon logger execution. THD etc context and restoring the original one upon logger execution.

View File

@ -37,6 +37,9 @@
#include "sql_partition.h" #include "sql_partition.h"
#include "sql_partition_admin.h" // Sql_cmd_alter_table_*_part #include "sql_partition_admin.h" // Sql_cmd_alter_table_*_part
#include "event_parse_data.h" #include "event_parse_data.h"
#ifdef WITH_WSREP
#include "mysql/service_wsrep.h"
#endif
void LEX::parse_error(uint err_number) void LEX::parse_error(uint err_number)
{ {

View File

@ -33,6 +33,7 @@
#endif #endif
#include "sql_base.h" // open_and_lock_tables #include "sql_base.h" // open_and_lock_tables
#include "ddl_log.h" #include "ddl_log.h"
#include "wsrep_mysqld.h"
#ifndef WITH_PARTITION_STORAGE_ENGINE #ifndef WITH_PARTITION_STORAGE_ENGINE

View File

@ -40,6 +40,7 @@
#include <mysql/plugin_data_type.h> #include <mysql/plugin_data_type.h>
#include <mysql/plugin_function.h> #include <mysql/plugin_function.h>
#include "sql_plugin_compat.h" #include "sql_plugin_compat.h"
#include "wsrep_mysqld.h"
static PSI_memory_key key_memory_plugin_mem_root; static PSI_memory_key key_memory_plugin_mem_root;
static PSI_memory_key key_memory_plugin_int_mem_root; static PSI_memory_key key_memory_plugin_int_mem_root;

View File

@ -33,6 +33,9 @@
#include "debug_sync.h" #include "debug_sync.h"
#include "des_key_file.h" #include "des_key_file.h"
#include "transaction.h" #include "transaction.h"
#ifdef WITH_WSREP
#include "wsrep_mysqld.h"
#endif
static void disable_checkpoints(THD *thd); static void disable_checkpoints(THD *thd);

View File

@ -29,8 +29,9 @@
#include "sql_trigger.h" #include "sql_trigger.h"
#include "sql_base.h" // tdc_remove_table, lock_table_names, #include "sql_base.h" // tdc_remove_table, lock_table_names,
#include "sql_handler.h" // mysql_ha_rm_tables #include "sql_handler.h" // mysql_ha_rm_tables
#include "sql_statistics.h" #include "sql_statistics.h"
#include "ddl_log.h" #include "ddl_log.h"
#include "wsrep_mysqld.h"
#include "debug.h" #include "debug.h"
/* used to hold table entries for as part of list of renamed temporary tables */ /* used to hold table entries for as part of list of renamed temporary tables */

View File

@ -26,6 +26,9 @@
#include "transaction.h" #include "transaction.h"
#include "lock.h" #include "lock.h"
#include "sql_acl.h" #include "sql_acl.h"
#ifdef WITH_WSREP
#include "wsrep_mysqld.h"
#endif
struct Field_definition struct Field_definition
{ {

View File

@ -59,6 +59,7 @@
#include "ddl_log.h" #include "ddl_log.h"
#include "debug.h" // debug_crash_here() #include "debug.h" // debug_crash_here()
#include <algorithm> #include <algorithm>
#include "wsrep_mysqld.h"
#include "rpl_mi.h" #include "rpl_mi.h"
#include "rpl_rli.h" #include "rpl_rli.h"
#include "log.h" #include "log.h"

View File

@ -37,6 +37,7 @@
#include "debug_sync.h" // DEBUG_SYNC #include "debug_sync.h" // DEBUG_SYNC
#include "debug.h" // debug_crash_here #include "debug.h" // debug_crash_here
#include "mysql/psi/mysql_sp.h" #include "mysql/psi/mysql_sp.h"
#include "wsrep_mysqld.h"
/*************************************************************************/ /*************************************************************************/

View File

@ -65,6 +65,9 @@
#include "semisync_master.h" #include "semisync_master.h"
#include "semisync_slave.h" #include "semisync_slave.h"
#include <ssl_compat.h> #include <ssl_compat.h>
#ifdef WITH_WSREP
#include "wsrep_mysqld.h"
#endif
#define PCRE2_STATIC 1 /* Important on Windows */ #define PCRE2_STATIC 1 /* Important on Windows */
#include "pcre2.h" /* pcre2 header file */ #include "pcre2.h" /* pcre2 header file */

View File

@ -1,4 +1,4 @@
/* Copyright 2021 Codership Oy <info@codership.com> /* Copyright 2021-2022 Codership Oy <info@codership.com>
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
@ -18,6 +18,7 @@
#include "my_global.h" #include "my_global.h"
#include "wsrep_mysqld.h" #include "wsrep_mysqld.h"
#include "wsrep_priv.h" #include "wsrep_priv.h"
#include "wsrep_schema.h"
#include <algorithm> #include <algorithm>
#include <memory> #include <memory>

View File

@ -16,11 +16,11 @@
#include "mariadb.h" #include "mariadb.h"
#include "mysql/service_wsrep.h" #include "mysql/service_wsrep.h"
#include "wsrep_binlog.h" #include "wsrep_binlog.h"
#include "wsrep_priv.h"
#include "log.h" #include "log.h"
#include "slave.h" #include "slave.h"
#include "log_event.h" #include "log_event.h"
#include "wsrep_applier.h" #include "wsrep_applier.h"
#include "wsrep_mysqld.h"
#include "transaction.h" #include "transaction.h"

View File

@ -19,6 +19,7 @@
#include "sys_vars_shared.h" #include "sys_vars_shared.h"
#include "wsrep.h" #include "wsrep.h"
#include "wsrep_sst.h" #include "wsrep_sst.h"
#include "wsrep_mysqld.h"
extern char *my_bind_addr_str; extern char *my_bind_addr_str;

View File

@ -1,4 +1,4 @@
/* Copyright 2018-2021 Codership Oy <info@codership.com> /* Copyright 2018-2022 Codership Oy <info@codership.com>
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
@ -20,6 +20,8 @@
#include "wsrep_thd.h" #include "wsrep_thd.h"
#include "wsrep_xid.h" #include "wsrep_xid.h"
#include "wsrep_trans_observer.h" #include "wsrep_trans_observer.h"
#include "wsrep_server_state.h"
#include "wsrep_mysqld.h"
#include "sql_base.h" /* close_temporary_table() */ #include "sql_base.h" /* close_temporary_table() */
#include "sql_class.h" /* THD */ #include "sql_class.h" /* THD */

View File

@ -19,6 +19,7 @@
#include "wsrep_schema.h" #include "wsrep_schema.h"
#include "wsrep_xid.h" #include "wsrep_xid.h"
#include "wsrep_trans_observer.h" #include "wsrep_trans_observer.h"
#include "wsrep_server_state.h"
#include "sql_class.h" /* THD */ #include "sql_class.h" /* THD */
#include "transaction.h" #include "transaction.h"

View File

@ -1,5 +1,4 @@
/* Copyright 2008-2021 Codership Oy <http://www.codership.com> /* Copyright 2008-2022 Codership Oy <http://www.codership.com>
Copyright (c) 2020, 2021, MariaDB
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
@ -20,8 +19,6 @@
#include <wsrep.h> #include <wsrep.h>
#ifdef WITH_WSREP #ifdef WITH_WSREP
extern bool WSREP_ON_;
extern bool WSREP_PROVIDER_EXISTS_;
#include <mysql/plugin.h> #include <mysql/plugin.h>
#include "mysql/service_wsrep.h" #include "mysql/service_wsrep.h"
@ -40,21 +37,12 @@ typedef struct st_mysql_show_var SHOW_VAR;
#include "wsrep/provider.hpp" #include "wsrep/provider.hpp"
#include "wsrep/streaming_context.hpp" #include "wsrep/streaming_context.hpp"
#include "wsrep_api.h" #include "wsrep_api.h"
#include <vector>
#include <map> #include <map>
#include "wsrep_server_state.h"
#define WSREP_UNDEFINED_TRX_ID ULONGLONG_MAX #define WSREP_UNDEFINED_TRX_ID ULONGLONG_MAX
class set_var;
class THD; class THD;
enum wsrep_consistency_check_mode {
NO_CONSISTENCY_CHECK,
CONSISTENCY_CHECK_DECLARED,
CONSISTENCY_CHECK_RUNNING,
};
// Global wsrep parameters // Global wsrep parameters
// MySQL wsrep options // MySQL wsrep options
@ -83,7 +71,6 @@ extern const char* wsrep_status_file;
extern const char* wsrep_allowlist; extern const char* wsrep_allowlist;
extern my_bool wsrep_certify_nonPK; extern my_bool wsrep_certify_nonPK;
extern long int wsrep_protocol_version; extern long int wsrep_protocol_version;
extern ulong wsrep_forced_binlog_format;
extern my_bool wsrep_desync; extern my_bool wsrep_desync;
extern ulong wsrep_reject_queries; extern ulong wsrep_reject_queries;
extern my_bool wsrep_recovery; extern my_bool wsrep_recovery;
@ -102,7 +89,7 @@ extern ulong wsrep_running_applier_threads;
extern ulong wsrep_running_rollbacker_threads; extern ulong wsrep_running_rollbacker_threads;
extern bool wsrep_new_cluster; extern bool wsrep_new_cluster;
extern bool wsrep_gtid_mode; extern bool wsrep_gtid_mode;
extern uint wsrep_gtid_domain_id; extern uint32 wsrep_gtid_domain_id;
extern ulonglong wsrep_mode; extern ulonglong wsrep_mode;
enum enum_wsrep_reject_types { enum enum_wsrep_reject_types {
@ -114,7 +101,7 @@ enum enum_wsrep_reject_types {
enum enum_wsrep_OSU_method { enum enum_wsrep_OSU_method {
WSREP_OSU_TOI, WSREP_OSU_TOI,
WSREP_OSU_RSU, WSREP_OSU_RSU,
WSREP_OSU_NONE WSREP_OSU_NONE,
}; };
enum enum_wsrep_sync_wait { enum enum_wsrep_sync_wait {
@ -238,68 +225,46 @@ extern bool wsrep_split_allowlist(std::vector<std::string>& allowlist);
/* Other global variables */ /* Other global variables */
extern wsrep_seqno_t wsrep_locked_seqno; extern wsrep_seqno_t wsrep_locked_seqno;
#define WSREP_ON unlikely(WSREP_ON_)
/* use xxxxxx_NNULL macros when thd pointer is guaranteed to be non-null to
* avoid compiler warnings (GCC 6 and later) */
#define WSREP_NNULL(thd) \
(WSREP_PROVIDER_EXISTS_ && thd->variables.wsrep_on)
#define WSREP(thd) \
(thd && WSREP_NNULL(thd))
#define WSREP_CLIENT_NNULL(thd) \
(WSREP_NNULL(thd) && thd->wsrep_client_thread)
#define WSREP_CLIENT(thd) \
(WSREP(thd) && thd->wsrep_client_thread)
#define WSREP_EMULATE_BINLOG_NNULL(thd) \
(WSREP_NNULL(thd) && wsrep_emulate_bin_log)
#define WSREP_EMULATE_BINLOG(thd) \
(WSREP(thd) && wsrep_emulate_bin_log)
#define WSREP_BINLOG_FORMAT(my_format) \
((wsrep_forced_binlog_format != BINLOG_FORMAT_UNSPEC) ? \
wsrep_forced_binlog_format : my_format)
/* A wrapper function for MySQL log functions. The call will prefix /* A wrapper function for MySQL log functions. The call will prefix
the log message with WSREP and forward the result buffer to fun. */ the log message with WSREP and forward the result buffer to fun. */
void WSREP_LOG(void (*fun)(const char* fmt, ...), const char* fmt, ...); void WSREP_LOG(void (*fun)(const char* fmt, ...), const char* fmt, ...);
#define WSREP_DEBUG(...) \ #define WSREP_SYNC_WAIT(thd_, before_) \
if (wsrep_debug) sql_print_information( "WSREP: " __VA_ARGS__) { if (WSREP_CLIENT(thd_) && \
#define WSREP_INFO(...) sql_print_information( "WSREP: " __VA_ARGS__) wsrep_sync_wait(thd_, before_)) goto wsrep_error_label; }
#define WSREP_WARN(...) sql_print_warning( "WSREP: " __VA_ARGS__)
#define WSREP_ERROR(...) sql_print_error( "WSREP: " __VA_ARGS__)
#define WSREP_UNKNOWN(fmt, ...) WSREP_ERROR("UNKNOWN: " fmt, ##__VA_ARGS__)
#define WSREP_LOG_CONFLICT_THD(thd, role) \ #define WSREP_MYSQL_DB (char *)"mysql"
WSREP_INFO( \
"%s: \n " \ #define WSREP_TO_ISOLATION_BEGIN(db_, table_, table_list_) \
" THD: %lu, mode: %s, state: %s, conflict: %s, seqno: %lld\n " \ if (WSREP_ON && WSREP(thd) && wsrep_to_isolation_begin(thd, db_, table_, table_list_)) \
" SQL: %s", \ goto wsrep_error_label;
role, \
thd_get_thread_id(thd), \ #define WSREP_TO_ISOLATION_BEGIN_CREATE(db_, table_, table_list_, create_info_) \
wsrep_thd_client_mode_str(thd), \ if (WSREP_ON && WSREP(thd) && \
wsrep_thd_client_state_str(thd), \ wsrep_to_isolation_begin(thd, db_, table_, \
wsrep_thd_transaction_state_str(thd), \ table_list_, nullptr, nullptr, create_info_))\
wsrep_thd_trx_seqno(thd), \ goto wsrep_error_label;
wsrep_thd_query(thd) \
); #define WSREP_TO_ISOLATION_BEGIN_ALTER(db_, table_, table_list_, alter_info_, fk_tables_, create_info_) \
if (WSREP(thd) && wsrep_thd_is_local(thd) && \
wsrep_to_isolation_begin(thd, db_, table_, \
table_list_, alter_info_, fk_tables_, create_info_))
#define WSREP_TO_ISOLATION_END \
if ((WSREP(thd) && wsrep_thd_is_local_toi(thd)) || \
wsrep_thd_is_in_rsu(thd)) \
wsrep_to_isolation_end(thd);
/*
Checks if lex->no_write_to_binlog is set for statements that use LOCAL or
NO_WRITE_TO_BINLOG.
*/
#define WSREP_TO_ISOLATION_BEGIN_WRTCHK(db_, table_, table_list_) \
if (WSREP(thd) && !thd->lex->no_write_to_binlog \
&& wsrep_to_isolation_begin(thd, db_, table_, table_list_)) \
goto wsrep_error_label;
#define WSREP_LOG_CONFLICT(bf_thd, victim_thd, bf_abort) \
if (wsrep_debug || wsrep_log_conflicts) \
{ \
WSREP_INFO("cluster conflict due to %s for threads:", \
(bf_abort) ? "high priority abort" : "certification failure" \
); \
if (bf_thd) WSREP_LOG_CONFLICT_THD(bf_thd, "Winning thread"); \
if (victim_thd) WSREP_LOG_CONFLICT_THD(victim_thd, "Victim thread"); \
WSREP_INFO("context: %s:%d", __FILE__, __LINE__); \
}
#define WSREP_PROVIDER_EXISTS (WSREP_PROVIDER_EXISTS_) #define WSREP_PROVIDER_EXISTS (WSREP_PROVIDER_EXISTS_)
@ -313,9 +278,6 @@ static inline bool wsrep_cluster_address_exists()
extern my_bool wsrep_ready_get(); extern my_bool wsrep_ready_get();
extern void wsrep_ready_wait(); extern void wsrep_ready_wait();
class Ha_trx_info;
struct THD_TRANS;
extern mysql_mutex_t LOCK_wsrep_ready; extern mysql_mutex_t LOCK_wsrep_ready;
extern mysql_cond_t COND_wsrep_ready; extern mysql_cond_t COND_wsrep_ready;
extern mysql_mutex_t LOCK_wsrep_sst; extern mysql_mutex_t LOCK_wsrep_sst;
@ -339,8 +301,10 @@ extern mysql_mutex_t LOCK_wsrep_donor_monitor;
extern mysql_cond_t COND_wsrep_joiner_monitor; extern mysql_cond_t COND_wsrep_joiner_monitor;
extern mysql_cond_t COND_wsrep_donor_monitor; extern mysql_cond_t COND_wsrep_donor_monitor;
extern my_bool wsrep_emulate_bin_log;
extern int wsrep_to_isolation; extern int wsrep_to_isolation;
#ifdef GTID_SUPPORT
extern rpl_sidno wsrep_sidno;
#endif /* GTID_SUPPORT */
extern my_bool wsrep_preordered_opt; extern my_bool wsrep_preordered_opt;
#ifdef HAVE_PSI_INTERFACE #ifdef HAVE_PSI_INTERFACE
@ -384,8 +348,6 @@ extern PSI_thread_key key_wsrep_sst_donor_monitor;
struct TABLE_LIST; struct TABLE_LIST;
class Alter_info; class Alter_info;
struct HA_CREATE_INFO;
int wsrep_to_isolation_begin(THD *thd, const char *db_, const char *table_, int wsrep_to_isolation_begin(THD *thd, const char *db_, const char *table_,
const TABLE_LIST* table_list, const TABLE_LIST* table_list,
const Alter_info* alter_info= nullptr, const Alter_info* alter_info= nullptr,
@ -639,12 +601,6 @@ wsrep::key wsrep_prepare_key_for_toi(const char* db, const char* table,
/* These macros are needed to compile MariaDB without WSREP support /* These macros are needed to compile MariaDB without WSREP support
* (e.g. embedded) */ * (e.g. embedded) */
#define WSREP_ON false
#define WSREP(T) (0)
#define WSREP_NNULL(T) (0)
#define WSREP_EMULATE_BINLOG(thd) (0)
#define WSREP_EMULATE_BINLOG_NNULL(thd) (0)
#define WSREP_BINLOG_FORMAT(my_format) ((ulong)my_format)
#define WSREP_PROVIDER_EXISTS (0) #define WSREP_PROVIDER_EXISTS (0)
#define wsrep_emulate_bin_log (0) #define wsrep_emulate_bin_log (0)
#define wsrep_to_isolation (0) #define wsrep_to_isolation (0)
@ -657,6 +613,12 @@ wsrep::key wsrep_prepare_key_for_toi(const char* db, const char* table,
#define wsrep_create_appliers(X) do {} while(0) #define wsrep_create_appliers(X) do {} while(0)
#define wsrep_should_replicate_ddl(X,Y) (1) #define wsrep_should_replicate_ddl(X,Y) (1)
#define wsrep_cluster_address_exists() (false) #define wsrep_cluster_address_exists() (false)
#define WSREP_MYSQL_DB (0)
#define WSREP_TO_ISOLATION_BEGIN(db_, table_, table_list_) do { } while(0)
#define WSREP_TO_ISOLATION_BEGIN_ALTER(db_, table_, table_list_, alter_info_, fk_tables_)
#define WSREP_TO_ISOLATION_END
#define WSREP_TO_ISOLATION_BEGIN_WRTCHK(db_, table_, table_list_)
#define WSREP_SYNC_WAIT(thd_, before_)
#endif /* WITH_WSREP */ #endif /* WITH_WSREP */

63
sql/wsrep_on.h Normal file
View File

@ -0,0 +1,63 @@
/* Copyright 2022 Codership Oy <http://www.codership.com>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; version 2 of the License.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA */
#ifndef WSREP_ON_H
#define WSREP_ON_H
#ifdef WITH_WSREP
extern bool WSREP_ON_;
extern bool WSREP_PROVIDER_EXISTS_;
extern my_bool wsrep_emulate_bin_log;
extern ulong wsrep_forced_binlog_format;
#define WSREP_ON unlikely(WSREP_ON_)
/* use xxxxxx_NNULL macros when thd pointer is guaranteed to be non-null to
* avoid compiler warnings (GCC 6 and later) */
#define WSREP_NNULL(thd) \
(WSREP_PROVIDER_EXISTS_ && thd->variables.wsrep_on)
#define WSREP(thd) \
(thd && WSREP_NNULL(thd))
#define WSREP_CLIENT_NNULL(thd) \
(WSREP_NNULL(thd) && thd->wsrep_client_thread)
#define WSREP_CLIENT(thd) \
(WSREP(thd) && thd->wsrep_client_thread)
#define WSREP_EMULATE_BINLOG_NNULL(thd) \
(WSREP_NNULL(thd) && wsrep_emulate_bin_log)
#define WSREP_EMULATE_BINLOG(thd) \
(WSREP(thd) && wsrep_emulate_bin_log)
#define WSREP_BINLOG_FORMAT(my_format) \
((wsrep_forced_binlog_format != BINLOG_FORMAT_UNSPEC) ? \
wsrep_forced_binlog_format : my_format)
#else
#define WSREP_ON false
#define WSREP(T) (0)
#define WSREP_NNULL(T) (0)
#define WSREP_EMULATE_BINLOG(thd) (0)
#define WSREP_EMULATE_BINLOG_NNULL(thd) (0)
#define WSREP_BINLOG_FORMAT(my_format) ((ulong)my_format)
#endif
#endif

View File

@ -19,13 +19,8 @@
#ifndef WSREP_PRIV_H #ifndef WSREP_PRIV_H
#define WSREP_PRIV_H #define WSREP_PRIV_H
#include <my_global.h> #include "wsrep_api.h"
#include "wsrep_mysqld.h" #include "wsrep/server_state.hpp"
#include "wsrep_schema.h"
#include <log.h>
#include <pthread.h>
#include <cstdio>
my_bool wsrep_ready_set (my_bool x); my_bool wsrep_ready_set (my_bool x);
@ -39,7 +34,6 @@ wsrep_cb_status wsrep_sst_donate_cb (void* app_ctx,
extern wsrep_uuid_t local_uuid; extern wsrep_uuid_t local_uuid;
extern wsrep_seqno_t local_seqno; extern wsrep_seqno_t local_seqno;
extern Wsrep_schema* wsrep_schema;
// a helper function // a helper function
bool wsrep_sst_received(THD*, const wsrep_uuid_t&, wsrep_seqno_t, bool wsrep_sst_received(THD*, const wsrep_uuid_t&, wsrep_seqno_t,

View File

@ -30,6 +30,7 @@
#include "wsrep_high_priority_service.h" #include "wsrep_high_priority_service.h"
#include "wsrep_storage_service.h" #include "wsrep_storage_service.h"
#include "wsrep_thd.h" #include "wsrep_thd.h"
#include "wsrep_server_state.h"
#include <string> #include <string>
#include <sstream> #include <sstream>

View File

@ -30,7 +30,7 @@
#include "wsrep_utils.h" #include "wsrep_utils.h"
#include "wsrep_xid.h" #include "wsrep_xid.h"
#include "wsrep_thd.h" #include "wsrep_thd.h"
#include "wsrep_mysqld.h" #include "wsrep_server_state.h"
#include <cstdio> #include <cstdio>
#include <cstdlib> #include <cstdlib>

View File

@ -18,6 +18,7 @@
#include "wsrep_trans_observer.h" #include "wsrep_trans_observer.h"
#include "wsrep_high_priority_service.h" #include "wsrep_high_priority_service.h"
#include "wsrep_storage_service.h" #include "wsrep_storage_service.h"
#include "wsrep_server_state.h"
#include "transaction.h" #include "transaction.h"
#include "rpl_rli.h" #include "rpl_rli.h"
#include "log_event.h" #include "log_event.h"

View File

@ -26,6 +26,7 @@
#include <cstdio> #include <cstdio>
#include <cstdlib> #include <cstdlib>
#include "wsrep_trans_observer.h" #include "wsrep_trans_observer.h"
#include "wsrep_server_state.h"
ulong wsrep_reject_queries; ulong wsrep_reject_queries;

View File

@ -1,320 +0,0 @@
case MSG_ACCESS_VIOLATN: p = "Violation accès mémoire"; break;
case MSG_ADD_BAD_TYPE: p = "Ajout d'une valeur de type %s non conforme dans un tableau %s"; break;
case MSG_ALLOC_ERROR: p = "Erreur d'allocation de %s"; break;
case MSG_ANSWER_TYPE: p = "Réponse de type"; break;
case MSG_API_CONF_ERROR: p = "Erreur SQL: API_CONFORMANCE"; break;
case MSG_APPL_NOT_INIT: p = "Application non initialisée"; break;
case MSG_ARRAY_BNDS_EXCD: p = "Hors limite de tableau"; break;
case MSG_BAD_ARRAY_OPER: p = "Les tableaux doivent utiliser l'opérateur IN"; break;
case MSG_BAD_ARRAY_TYPE: p = "Type=%d invalide pour un tableau"; break;
case MSG_BAD_ARRAY_VAL: p = "Les tableaux doivent avoir le même nombre de valeurs"; break;
case MSG_BAD_BIN_FMT: p = "Format invalide %c pour la colonne BIN %s"; break;
case MSG_BAD_BLK_ESTIM: p = "Nombre de blocs supérieur à l'estimation"; break;
case MSG_BAD_BLK_SIZE: p = "Taille du bloc %d non conforme"; break;
case MSG_BAD_BYTE_NUM: p = "Le nombre d'octets écrits est faux"; break;
case MSG_BAD_BYTE_READ: p = "Le nombre d'octets lus est faux"; break;
case MSG_BAD_COL_TYPE: p = "Type invalide %s pour la colonne %s"; break;
case MSG_BAD_COL_XPATH: p = "Xpath invalide colonne %s de la table HTML %s"; break;
case MSG_BAD_CONST_TYPE: p = "Type=%d invalide pour une constante"; break;
case MSG_BAD_CONV_TYPE: p = "Convertion de type invalide %d"; break;
case MSG_BAD_DATETIME: p = "Valeur date/temps invalide"; break;
case MSG_BAD_DBF_FILE: p = "Le fichier DBF %s est altéré"; break;
case MSG_BAD_DBF_REC: p = "Fichier DBF %s altéré enregistrement %d"; break;
case MSG_BAD_DBF_TYPE: p = "Type DBF %c non supporté colonne %s"; break;
case MSG_BAD_DIRECTORY: p = "Répertoire invalide %s: %s"; break;
case MSG_BAD_FIELD_RANK: p = "Rang %d invalide pour la colonne %s"; break;
case MSG_BAD_FIELD_TYPE: p = "Mauvais type de champ %s"; break;
case MSG_BAD_FILE_HANDLE: p = "Handle de fichier invalide: %s"; break;
case MSG_BAD_FILTER: p = "Mauvais filtre: Opc=%d B_T=%d %d Type=%d %d"; break;
case MSG_BAD_FILTER_CONV: p = "Conversion filtre incorrecte, B_T=%d,%d"; break;
case MSG_BAD_FILTER_OP: p = "Opérateur de filtre invalide %d"; break;
case MSG_BAD_FLD_FORMAT: p = "Format invalide pour le champs %d de %s"; break;
case MSG_BAD_FLD_LENGTH: p = "Champs %s trop long (%s --> %d) ligne %d de %s"; break;
case MSG_BAD_FREQ_SET: p = "Spécification erronnée de Freq pour la colonne %s"; break;
case MSG_BAD_FUNC_MODE: p = "%s: mode invalide %d"; break;
case MSG_BAD_HANDLE_VAL: p = "Valeur Handle invalide"; break;
case MSG_BAD_HEADER: p = "Fichier %s: bloc en-tête altéré"; break;
case MSG_BAD_HEAD_END: p = "Lecture fin d'en-tête impossible"; break;
case MSG_BAD_INDEX_FILE: p = "Fichier index %s corrompu"; break;
case MSG_BAD_LINEFLD_FMT: p = "Format invalide ligne %d champs %d de %s"; break;
case MSG_BAD_LINE_LEN: p = "Longueur ligne non égale à Lrecl"; break;
case MSG_BAD_LRECL: p = "Disparité lrecl table/fichier (%d,%hd)"; break;
case MSG_BAD_NODE_TYPE: p = "Type noeud erroné pour la table"; break;
case MSG_BAD_OFFSET_VAL: p = "Nul offset invalide pour une table CSV"; break;
case MSG_BAD_OPEN_MODE: p = "Mode d'ouverture invalide %d"; break;
case MSG_BAD_PARAM_TYPE: p = "%.8s: Paramètre de type=%d invalide"; break;
case MSG_BAD_PARM_COUNT: p = "Nombre de paramètres incohérent"; break;
case MSG_BAD_QUOTE_FIELD: p = "Quote manquante dans %s champs %d ligne %d"; break;
case MSG_BAD_READ_NUMBER: p = "Mauvais nombre %d de valeurs lues dans %s"; break;
case MSG_BAD_RECFM: p = "Recfm type %d invalide pour DOSCOL"; break;
case MSG_BAD_RECFM_VAL: p = "Valeur invalide %d de Recfm"; break;
case MSG_BAD_SET_CASE: p = "La casse d'un tableau ne peut pas passer de non respect à respecter"; break;
case MSG_BAD_SET_STRING: p = "SetValue: appel invalide pour STRING"; break;
case MSG_BAD_SPECIAL_COL: p = "Colonne spéciale invalide %s"; break;
case MSG_BAD_SPEC_COLUMN: p = "Colonne spéciale invalide pour ce type de table"; break;
case MSG_BAD_TABLE_TYPE: p = "Type invalide %s pour la table %s"; break;
case MSG_BAD_TYPE_LIKE: p = "Type(%d)= %d invalide pour LIKE"; break;
case MSG_BAD_VALBLK_INDX: p = "Valeur hors limites de l'index du bloc de valeurs"; break;
case MSG_BAD_VALBLK_TYPE: p = "Type=%d invalide pour un bloc de valeurs"; break;
case MSG_BAD_VALNODE: p = "Type %d invalide pour le noeud valeur colonne %s"; break;
case MSG_BAD_VALUE_TYPE: p = "Type de valeur invalide %d"; break;
case MSG_BAD_VAL_UPDATE: p = "Impossible de déterminer quelle valeur %s doit être mise à jour"; break;
case MSG_BAS_NS_LIST: p = "Format invalide de la liste des espace-noms"; break;
case MSG_BIN_F_TOO_LONG: p = "Valeur trop longue pour le champ %s (%d --> %d)"; break;
case MSG_BIN_MODE_FAIL: p = "Echec mode binaire: %s"; break;
case MSG_BLKTYPLEN_MISM: p = "Disparité types/longueurs de bloc dans SetValue"; break;
case MSG_BLK_IS_NULL: p = "Blk est nul"; break;
case MSG_BREAKPOINT: p = "Point de contrôle"; break;
case MSG_BUILD_INDEX: p = "Construction index %s sur %s"; break;
case MSG_CANNOT_OPEN: p = "Ouverture impossible de %s"; break;
case MSG_CHSIZE_ERROR: p = "Erreur dans chsize: %s"; break;
case MSG_COL_ALLOC_ERR: p = "Allocation impossible du noeud colonne"; break;
case MSG_COL_ISNOT_TABLE: p = "La colonne %s n'est pas dans la table %s"; break;
case MSG_COL_NOT_SORTED: p = "La colonne %s de la table %s n'est pas triée"; break;
case MSG_COL_NUM_MISM: p = "Disparité du nombre de colonnes"; break;
case MSG_COM_ERROR: p = "Erreur Com"; break;
case MSG_CONCAT_SUBNODE: p = "Concaténation de sous-noeuds impossible"; break;
case MSG_CONNECT_CANCEL: p = "Connection interrompue par l'utilisateur"; break;
case MSG_CONTROL_C_EXIT: p = "Exit par Ctrl-C"; break;
case MSG_DATABASE_LOADED: p = "Base de données %s chargée"; break;
case MSG_DATA_MISALIGN: p = "Mauvais alignement pour ce type de données"; break;
case MSG_DBASE_FILE: p = "Fichier dBASE dbf: "; break;
case MSG_DEF_ALLOC_ERROR: p = "Erreur d'allocation de la classe DEF %s"; break;
case MSG_DEL_FILE_ERR: p = "Erreur à l'effacement de %s"; break;
case MSG_DEL_READ_ERROR: p = "Delete: erreur en lecture req=%d len=%d"; break;
case MSG_DEL_WRITE_ERROR: p = "Delete: erreur en écriture: %s"; break;
case MSG_DEPREC_FLAG: p = "Option Flag périmée, utiliser Coltype"; break;
case MSG_DLL_LOAD_ERROR: p = "Erreur %d au chargement du module %s"; break;
case MSG_DOM_NOT_SUPP: p = "MS-DOM non supporté par cette version"; break;
case MSG_DVAL_NOTIN_LIST: p = "Valeur %s non trouvée dans la liste des valeurs distinctes de la colonne %s"; break;
case MSG_EMPTY_DOC: p = "Document vide"; break;
case MSG_EMPTY_FILE: p = "%s du fichier vide %s: "; break;
case MSG_EOF_AFTER_LINE: p = "Fin de fichier après la ligne %d"; break;
case MSG_EOF_INDEX_FILE: p = "EOF lisant le fichier index"; break;
case MSG_ERROR_IN_LSK: p = "Erreur %d dans lseek64"; break;
case MSG_ERROR_IN_SFP: p = "Erreur %d dans SetFilePointer"; break;
case MSG_ERR_READING_REC: p = "Erreur lisant l'enregistrement %d de %s"; break;
case MSG_FAIL_ADD_NODE: p = "L'ajout du noeud %s dans la table a échoué"; break;
case MSG_FETCH_NO_RES: p = "Fetch: Pas de Résultats"; break;
case MSG_FIELD_TOO_LONG: p = "Valeur trop longue pour le champs %d ligne %d"; break;
case MSG_FILELEN_ERROR: p = "Erreur dans %s pour %s"; break;
case MSG_FILE_IS_EMPTY: p = "Le fichier %s est vide"; break;
case MSG_FILE_MAP_ERR: p = "Erreur de File mapping"; break;
case MSG_FILE_MAP_ERROR: p = "CreateFileMapping %s erreur rc=%d"; break;
case MSG_FILE_OPEN_YET: p = "Fichier %s déjà ouvert"; break;
case MSG_FILE_UNFOUND: p = "Fichier %s non trouvé"; break;
case MSG_FLD_TOO_LNG_FOR: p = "Champs %d trop long pour %s ligne %d de %s"; break;
case MSG_FLT_BAD_RESULT: p = "Virgule flottante: résultat inexacte"; break;
case MSG_FLT_DENORMAL_OP: p = "Opérande virgule flottante non normalisé"; break;
case MSG_FLT_INVALID_OP: p = "Opération virgule flottante invalide"; break;
case MSG_FLT_OVERFLOW: p = "Dépassement de capacité virgule flottante"; break;
case MSG_FLT_STACK_CHECK: p = "Virgule flottante: Erreur de la pile"; break;
case MSG_FLT_UNDERFLOW: p = "Sous-dépassement de capacité virgule flottante"; break;
case MSG_FLT_ZERO_DIVIDE: p = "Virgule flottante: division par zéro"; break;
case MSG_FMT_WRITE_NIY: p = "L'écriture des fichiers %s n'est pas encore implémentée"; break;
case MSG_FOXPRO_FILE: p = "Fichier FoxPro: "; break;
case MSG_FPUTS_ERROR: p = "Erreur dans fputs: %s"; break;
case MSG_FSEEK_ERROR: p = "Erreur dans fseek: %s"; break;
case MSG_FSETPOS_ERROR: p = "Erreur dans fseek pour i=%d"; break;
case MSG_FTELL_ERROR: p = "Erreur dans ftell enregistrement=%d: %s"; break;
case MSG_FUNCTION_ERROR: p = "Erreur dans %s: %d"; break;
case MSG_FUNC_ERRNO: p = "Erreur %d dans %s"; break;
case MSG_FUNC_ERROR: p = "Erreur dans %s"; break;
case MSG_FUNC_ERR_S: p = "Erreur dans %s: %s"; break;
case MSG_FWRITE_ERROR: p = "Erreur dans fwrite: %s"; break;
case MSG_GET_DIST_VALS: p = "Récupération des valeurs distinctes de "; break;
case MSG_GET_FUNC_ERR: p = "Erreur en recherche de la fonction %s: %s"; break;
case MSG_GLOBAL_ERROR: p = "Erreur d'allocation de Global (taille=%d)\n"; break;
case MSG_GUARD_PAGE: p = "Violation de page de garde"; break;
case MSG_GZOPEN_ERROR: p = "gzopen %s: erreur %d sur %s"; break;
case MSG_ILLEGAL_INSTR: p = "Instruction illégale"; break;
case MSG_ILL_FILTER_CONV: p = "Conversion implicite illégale dans un filtre"; break;
case MSG_INDEX_NOT_UNIQ: p = "L'index n'est pas Unique"; break;
case MSG_INDEX_YET_ON: p = "L'index %s existe déjà sur %s"; break;
case MSG_INDX_COL_NOTIN: p = "La colonne index %s n'existe pas dans la table %s"; break;
case MSG_INDX_EXIST_YET: p = "L'entrée index existe déjà"; break;
case MSG_INIT_FAILED: p = "L'initialisation de %s a échoué"; break;
case MSG_INT_COL_ERROR: p = "Erreur interne sur la colonne index %s"; break;
case MSG_INT_OVERFLOW: p = "Dépassement de capacité sur entier"; break;
case MSG_INT_ZERO_DIVIDE: p = "Division entière par zéro"; break;
case MSG_INVALID_DISP: p = "Disposition invalide"; break;
case MSG_INVALID_FTYPE: p = "SBV: Ftype %d invalide"; break;
case MSG_INVALID_HANDLE: p = "Poignée invalide"; break;
case MSG_INVALID_OPER: p = "Opérateur invalide %d pour %s"; break;
case MSG_INV_COLUMN_TYPE: p = "Type %d Invalide pour la colonne %s"; break;
case MSG_INV_COL_TYPE: p = "Type de colonne %s invalide"; break;
case MSG_INV_DEF_READ: p = "Lecture différée invalide rc=%d"; break;
case MSG_INV_DIRCOL_OFST: p = "Offset invalide pour une colonne DIR"; break;
case MSG_INV_MAP_POS: p = "Position mémoire invalide"; break;
case MSG_INV_RAND_ACC: p = "L'accès aléatoire d'une table non optimisée est impossible"; break;
case MSG_INV_REC_POS: p = "Position d'enregistrement invalide"; break;
case MSG_INV_RESULT_TYPE: p = "Type de résultat invalide %s"; break;
case MSG_INV_UPDT_TABLE: p = "Table %s invalide pour Update"; break;
case MSG_IN_WITHOUT_SUB: p = "IN ou EXISTS sans tableau ou subquery"; break;
case MSG_KEY_ALLOC_ERR: p = "Erreur d'allocation d'un bloc offset clé"; break;
case MSG_KEY_ALLOC_ERROR: p = "Erreur d'allocation mémoire, Klen=%d n=%d"; break;
case MSG_LINE_TOO_LONG: p = "La nouvelle ligne est trop longue"; break;
case MSG_LIST: p = "--Liste--"; break;
case MSG_LOADING_FAILED: p = "Le chargement de %s a échoué"; break;
case MSG_LRECL_TOO_SMALL: p = "Lrecl trop petit (longueur en-tête = %d)"; break;
case MSG_MAKE_EMPTY_FILE: p = "Génération du fichier vide %s: %s"; break;
case MSG_MAKING: p = "Génération"; break;
case MSG_MALLOC_ERROR: p = "Allocation mémoire impossible par %s"; break;
case MSG_MAP_VIEW_ERROR: p = "MapViewOfFile %s erreur rc=%d"; break;
case MSG_MAXSIZE_ERROR: p = "Maxsize incalculable sur table ouverte"; break;
case MSG_MEM_ALLOC_ERR: p = "Erreur d'allocation mémoire, taille %s = %d"; break;
case MSG_MEM_ALLOC_ERROR: p = "Erreur d'allocation mémoire"; break;
case MSG_MISPLACED_QUOTE: p = "Appostrophe mal placée ligne %d"; break;
case MSG_MISSING_ARG: p = "Argument manquant pour l'opérateur %d"; break;
case MSG_MISSING_FIELD: p = "Champs %d manquant dans %s ligne %d"; break;
case MSG_MISSING_FNAME: p = "Nom du fichier manquant"; break;
case MSG_MISSING_NODE: p = "Noeud %s manquant dans %s"; break;
case MSG_MISSING_ROWNODE: p = "Impossible de trouver le noeud de la ligne %d"; break;
case MSG_MIS_TAG_LIST: p = "Liste des balises colonne manquante"; break;
case MSG_MUL_MAKECOL_ERR: p = "Erreur logique dans TABMUL::MakeCol"; break;
case MSG_NAME_CONV_ERR: p = "Erreur de convertion du nom de noeud"; break;
case MSG_NEW_DOC_FAILED: p = "Impossible de créer le nouveau document"; break;
case MSG_NEW_RETURN_NULL: p = "NULL renvoyé par New dans PlugEvalLike"; break;
case MSG_NEXT_FILE_ERROR: p = "Erreur en recherche du fichier suivant. rc=%s"; break;
case MSG_NONCONT_EXCEPT: p = "Exception non-continuable"; break;
case MSG_NOP_ZLIB_INDEX: p = "L'indexage d'une table zlib non optimisée est impossible"; break;
case MSG_NOT_A_DBF_FILE: p = "Le fichier n'a pas le format dBASE dbf "; break;
case MSG_NOT_FIXED_LEN: p = "Fichier %s non fixe, len=%d lrecl=%d"; break;
case MSG_NO_0DH_HEAD: p = "0DH manquant en fin d'en-tête (dbc=%d)"; break;
case MSG_NO_ACTIVE_DB: p = "Pas de base de données active"; break;
case MSG_NO_CHAR_FROM: p = "Conversion de type %d en caractères impossible"; break;
case MSG_NO_DATE_FMT: p = "Pas de format date pour le valblock de type %d"; break;
case MSG_NO_DEF_FNCCOL: p = "Colonne fonction par défaut introuvable"; break;
case MSG_NO_DEF_PIVOTCOL: p = "Colonne pivot par défaut introuvable"; break;
case MSG_NO_DIR_INDX_RD: p = "Pas d'accès directe des tables %s"; break;
case MSG_NO_FEAT_SUPPORT: p = "%s non supporté dans cette version"; break;
case MSG_NO_FLD_FORMAT: p = "Format absent pour le champs %d de %s"; break;
case MSG_NO_FORMAT_COL: p = "Type COLUMN informattable"; break;
case MSG_NO_FORMAT_TYPE: p = "Le format ne peut pas être défini à partir du type %d"; break;
case MSG_NO_INDEX_READ: p = "Pas d'accès directe des tables multiples"; break;
case MSG_NO_KEY_COL: p = "Pas de colonne clé trouvée"; break;
case MSG_NO_KEY_UPDATE: p = "Le nom des clés ne peut pas être modifié"; break;
case MSG_NO_MAP_INSERT: p = "MAP incompatible avec Insert"; break;
case MSG_NO_MATCHING_COL: p = "Pas de colonne correspondant à %s dans %s"; break;
case MSG_NO_MATCH_COL: p = "Colonne correspondante introuvable"; break;
case MSG_NO_MEMORY: p = "Mémoire pleine"; break;
case MSG_NO_MODE_PADDED: p = "Mode non supporté pour les fichiers 'padded'"; break;
case MSG_NO_MUL_VCT: p = "Les tables VCT ne peuvent pas être multiples"; break;
case MSG_NO_ODBC_DELETE: p = "Delete ne devrait pas être appelé pour les tables ODBC"; break;
case MSG_NO_ODBC_DIRECT: p = "Accès directe des tables ODBC non encore implémenté"; break;
case MSG_NO_ODBC_MUL: p = "Multiple(2) non supporté pour les tables ODBC"; break;
case MSG_NO_ODBC_SPECOL: p = "Pas de colonne spéciale ODBC"; break;
case MSG_NO_PART_DEL: p = "Delete partiel des fichier %s impossible"; break;
case MSG_NO_PART_MAP: p = "Mapping partiel non implémenté pour cet OS"; break;
case MSG_NO_PAR_BLK_INS: p = "Insertion de bloc partiel impossible"; break;
case MSG_NO_PIV_DIR_ACC: p = "Pas d'accès directe aux tables PIVOT"; break;
case MSG_NO_READ_32: p = "Lecture de 32 octets impossible"; break;
case MSG_NO_RECOV_SPACE: p = "Espace non recouvrable dans le fichier index"; break;
case MSG_NO_ROWID_FOR_AM: p = "Accès direct impossible de ROWID pour les tables de type %s"; break;
case MSG_NO_ROW_NODE: p = "Le nom du Rownode n'est pas défini"; break;
case MSG_NO_SECTION_NAME: p = "Nom de section manquant"; break;
case MSG_NO_SEC_UPDATE: p = "Les noms de section ne peuvent pas être modifiés"; break;
case MSG_NO_SETPOS_YET: p = "SetPos pas encore implémenté pour les fichier %s"; break;
case MSG_NO_SPEC_COL: p = "Pas de colonne spéciales MYSQL"; break;
case MSG_NO_SUB_VAL: p = "Pas de sous-value d'un tableau de type %d"; break;
case MSG_NO_TABCOL_DATA: p = "Pas de données pour la table %s colonne %s"; break;
case MSG_NO_TABLE_DEL: p = "Delete non autorisé pour les tables %s "; break;
case MSG_NO_TAB_DATA: p = "Pas de données pour la table %s"; break;
case MSG_NO_VCT_DELETE: p = "Délétion Partielle non implémentée pour les fichiers VCT"; break;
case MSG_NO_ZIP_DELETE: p = "Delete sur fichier Zip non encore implementé"; break;
case MSG_OPENING: p = "Ouverture"; break;
case MSG_OPEN_EMPTY_FILE: p = "Ouverture du fichier vide %s: %s"; break;
case MSG_OPEN_ERROR: p = "Erreur d'ouverture %d en mode %d sur %s: "; break;
case MSG_OPEN_ERROR_IS: p = "Erreur à l'ouverture de %s: %s"; break;
case MSG_OPEN_MODE_ERROR: p = "Erreur d'ouverture(%s) %d sur %s"; break;
case MSG_OPEN_STRERROR: p = "Erreur à l'ouverture: %s"; break;
case MSG_OPTBLK_RD_ERR: p = "Erreur à la lecture d'un bloc optimisation: %s"; break;
case MSG_OPTBLK_WR_ERR: p = "Erreur à l'écriture d'un bloc optimisation: %s"; break;
case MSG_OPTIMIZING: p = "Optimisation de "; break;
case MSG_OPT_BMAP_RD_ERR: p = "Erreur en lecture des bitmaps d'optimisation: %s"; break;
case MSG_OPT_BMAP_WR_ERR: p = "Erreur en écriture des bitmaps d'optimisation: %s"; break;
case MSG_OPT_CANCELLED: p = "Optimisation interrompue par l'utilisateur"; break;
case MSG_OPT_DVAL_RD_ERR: p = "Erreur en lecture des valeurs distinctes: %s"; break;
case MSG_OPT_DVAL_WR_ERR: p = "Erreur en écriture des valeurs distinctes: %s"; break;
case MSG_OPT_HEAD_RD_ERR: p = "Erreur en lecture de l'entête du fichier opt: %s"; break;
case MSG_OPT_HEAD_WR_ERR: p = "Erreur en écriture de l'entête du fichier opt: %s"; break;
case MSG_OPT_LOGIC_ERR: p = "Erreur logique dans SetBitmap, i=%d"; break;
case MSG_OPT_MAX_RD_ERR: p = "Erreur en lecture des valeurs maxi: %s"; break;
case MSG_OPT_MAX_WR_ERR: p = "Erreur en écriture des valeurs maxi: %s"; break;
case MSG_OPT_MIN_RD_ERR: p = "Erreur en lecture des valeurs mini: %s"; break;
case MSG_OPT_MIN_WR_ERR: p = "Erreur en écriture des valeurs mini: %s"; break;
case MSG_OPT_NOT_MATCH: p = "Le fichier opt %s n'est pas à jour"; break;
case MSG_PAGE_ERROR: p = "Erreur de pagination"; break;
case MSG_PARM_CNT_MISS: p = "Disparité du nombre de Paramètres"; break;
case MSG_PREC_VBLP_NULL: p = "ARRAY SetPrecision: Vblp est NULL"; break;
case MSG_PRIV_INSTR: p = "Instruction privilégiée"; break;
case MSG_PROCADD_ERROR: p = "Erreur %d sur l'adresse de %s"; break;
case MSG_QUERY_CANCELLED: p = "Requête interrompue par l'utilisateur"; break;
case MSG_RANGE_NO_JOIN: p = "Range non compatible avec les index de jointure"; break;
case MSG_RC_READING: p = "rc=%d en lecture de la table %s"; break;
case MSG_READY: p = "Prêt"; break;
case MSG_READ_ERROR: p = "Erreur en lecture sur %s: %s"; break;
case MSG_READ_ONLY: p = "Cette table protégée en lecture seule ne peut être modifiée"; break;
case MSG_READ_SEEK_ERROR: p = "Erreur de recherche en lecture: %s"; break;
case MSG_REGISTER_ERR: p = "Enregistrement NS impossible, préfix='%s' et href='%s'"; break;
case MSG_REMOVE_ERROR: p = "Erreur en supprimant %s: %s"; break;
case MSG_RENAME_ERROR: p = "Erreur renommant %s en %s: %s"; break;
case MSG_ROWID_NOT_IMPL: p = "RowNumber non implémenté pour les tables de type %s"; break;
case MSG_SEC_KEY_FIRST: p = "Les sections et clés doivent être insérées en premier"; break;
case MSG_SEC_NAME_FIRST: p = "Le nom de section doit être en tête de liste en insertion"; break;
case MSG_SEP_IN_FIELD: p = "Le champ %d contient le caractère séparateur"; break;
case MSG_SEQUENCE_ERROR: p = "HSTMT: Allocation hors séquence"; break;
case MSG_SETEOF_ERROR: p = "Erreur %d dans SetEndOfFile"; break;
case MSG_SETRECPOS_NIY: p = "SetRecpos non implémenté pour ce type de table"; break;
case MSG_SET_STR_TRUNC: p = "SetValue: Chaîne de caractères tronquée"; break;
case MSG_SFP_ERROR: p = "Erreur sur SetFilePointer: %s"; break;
case MSG_SHARED_LIB_ERR: p = "Erreur au chargement de la librairie partagée %s: %s"; break;
case MSG_SINGLE_STEP: p = "Pas à pas"; break;
case MSG_SORTING_VAL: p = "Tri de %d valeurs"; break;
case MSG_SPCOL_READONLY: p = "La colonne spéciale %s est en lecture seulement"; break;
case MSG_SQL_CONF_ERROR: p = "Erreur SQL: SQL_CONFORMANCE"; break;
case MSG_SRCH_CLOSE_ERR: p = "Erreur à la fermeture de l'Handle de recherche"; break;
case MSG_SRC_TABLE_UNDEF: p = "La table source n'est pas définie"; break;
case MSG_STACK_OVERFLOW: p = "Dépassement de capacité de la pile"; break;
case MSG_TABDIR_READONLY: p = "Les tables DIR sont en lecture seulement"; break;
case MSG_TABLE_NOT_OPT: p = "Table non optimisable"; break;
case MSG_TABLE_NO_INDEX: p = "La table %s n'est pas indexable"; break;
case MSG_TABLE_READ_ONLY: p = "Les tables %s sont en lecture seulement "; break;
case MSG_TABMUL_READONLY: p = "Les tables multiples sont en lecture seulement"; break;
case MSG_TOO_MANY_FIELDS: p = "Trop de champs ligne %d de %s"; break;
case MSG_TOO_MANY_JUMPS: p = "Trop de niveaux de saut"; break;
case MSG_TOO_MANY_KEYS: p = "Trop de clés (%d)"; break;
case MSG_TO_BLK_IS_NULL: p = "To Blk est nul"; break;
case MSG_TRUNCATE_ERROR: p = "Erreur en troncation: %s"; break;
case MSG_TRUNC_BY_ESTIM: p = "Tronqué par l'option Estimate"; break;
case MSG_TYPE_MISMATCH: p = "Clé et source ne sont pas du même type"; break;
case MSG_TYPE_VALUE_ERR: p = "Colonne %s: disparité type(%s)/valeur(%s)"; break;
case MSG_UNBALANCE_QUOTE: p = "Appostrophe en trop ligne %d"; break;
case MSG_UNDEFINED_AM: p = "COLBLK %s: méthode d'accès indéfinie"; break;
case MSG_UNKNOWN_EXCPT: p = "Exception non répertoriée"; break;
case MSG_UNMATCH_FIL_ARG: p = "Argument de filtre dépareillé"; break;
case MSG_UPDATE_ERROR: p = "Erreur en Update sur %s"; break;
case MSG_UPD_ZIP_NOT_IMP: p = "Mise à jour des tables ZDOS non encore implementé"; break;
case MSG_VALSTR_TOO_LONG: p = "Valeur %s trop longue pour une chaîne de longueur %d"; break;
case MSG_VALTYPE_NOMATCH: p = "Disparité types de valeur"; break;
case MSG_VALUE_ERROR: p = "Colonne %s: bloc valeur nul"; break;
case MSG_VALUE_TOO_BIG: p = "Valeur %lld trop grande pour la colonne %s"; break;
case MSG_VALUE_TOO_LONG: p = "Valeur %s trop longue pour la colonne %s de longueur %d"; break;
case MSG_VAL_ALLOC_ERR: p = "Allocation impossible du noeud valeur"; break;
case MSG_VIR_NO_DELETE: p = "Delete impossible sur les tables %s"; break;
case MSG_VIR_READ_ONLY: p = "Les tables virtuelles %s sont en lecture seulement"; break;
case MSG_VOID_FIRST_ARG: p = "Le premier argument ne doit pas être vide"; break;
case MSG_WORK_AREA: p = "Espace de travail: %s"; break;
case MSG_WRITE_SEEK_ERR: p = "Erreur de recherche en écriture: %s"; break;
case MSG_WRITE_STRERROR: p = "Erreur en écriture sur %s: %s"; break;
case MSG_WRITING: p = "Ecriture"; break;
case MSG_WRITING_ERROR: p = "Erreur à l'écriture de %s: %s"; break;
case MSG_WS_CONV_ERR: p = "Erreur de convertion de %s en WS"; break;
case MSG_XCOL_MISMATCH: p = "La colonne %s ne correspond pas à l'index"; break;
case MSG_XFILE_READERR: p = "Erreur %d en lisant le fichier index"; break;
case MSG_XFILE_WRITERR: p = "Erreur en écrivant le fichier index: %s"; break;
case MSG_XMLTAB_INIT_ERR: p = "Erreur d'initialisation de la table XML"; break;
case MSG_XML_INIT_ERROR: p = "Erreur d'initialisation du nouveau fichier XML"; break;
case MSG_XPATH_CNTX_ERR: p = "Le nouveau contexte XPath ne peut être créé"; break;
case MSG_XPATH_EVAL_ERR: p = "Impossible d'évaluer l'emplacement xpath '%s'"; break;
case MSG_XPATH_NOT_SUPP: p = "Xpath non supporté colonne %s"; break;

View File

@ -1,46 +0,0 @@
case IDS_TABLES: p = "Table Entêtes"; break;
case IDS_TAB_01: p = "Catalogue"; break;
case IDS_TAB_02: p = "Schéma"; break;
case IDS_TAB_03: p = "Nom"; break;
case IDS_TAB_04: p = "Type"; break;
case IDS_TAB_05: p = "Remarque"; break;
case IDS_COLUMNS: p = "Colonne Entêtes"; break;
case IDS_COL_01: p = "Cat_Table"; break;
case IDS_COL_02: p = "Schem_Table"; break;
case IDS_COL_03: p = "Nom_Table"; break;
case IDS_COL_04: p = "Nom_Colonne"; break;
case IDS_COL_05: p = "Type_Données"; break;
case IDS_COL_06: p = "Nom_Type"; break;
case IDS_COL_07: p = "Précision"; break;
case IDS_COL_08: p = "Longueur"; break;
case IDS_COL_09: p = "Echelle"; break;
case IDS_COL_10: p = "Base"; break;
case IDS_COL_11: p = "Nullifiable"; break;
case IDS_COL_12: p = "Remarques"; break;
case IDS_PKEY: p = "Clé Entêtes"; break;
case IDS_PKY_01: p = "Cat_Table"; break;
case IDS_PKY_02: p = "Schem_Table"; break;
case IDS_PKY_03: p = "Nom_Table"; break;
case IDS_PKY_04: p = "Nom_Colonne"; break;
case IDS_PKY_05: p = "Numéro_Clé"; break;
case IDS_PKY_06: p = "Nom_Clé"; break;
case IDS_STAT: p = "Stat Entêtes"; break;
case IDS_STA_01: p = "Table_Catalog"; break;
case IDS_STA_02: p = "Table_Schema"; break;
case IDS_STA_03: p = "Table_Name"; break;
case IDS_STA_04: p = "Non_Unique"; break;
case IDS_STA_05: p = "Index_Qualifier"; break;
case IDS_STA_06: p = "Index_Name"; break;
case IDS_STA_07: p = "Type"; break;
case IDS_STA_08: p = "Seq_in_Index"; break;
case IDS_STA_09: p = "Column_Name"; break;
case IDS_STA_10: p = "Collation"; break;
case IDS_STA_11: p = "Cardinality"; break;
case IDS_STA_12: p = "Pages"; break;
case IDS_STA_13: p = "Filter_Condition"; break;
case IDS_DRIVER: p = "Driver Entêtes"; break;
case IDS_DRV_01: p = "Description"; break;
case IDS_DRV_02: p = "Attributs"; break;
case IDS_DSRC: p = "DataSrc Entêtes"; break;
case IDS_DSC_01: p = "Nom"; break;
case IDS_DSC_02: p = "Description"; break;

View File

@ -1,320 +0,0 @@
#define MSG_ACCESS_VIOLATN "Violation accès mémoire"
#define MSG_ADD_BAD_TYPE "Ajout d'une valeur de type %s non conforme dans un tableau %s"
#define MSG_ALLOC_ERROR "Erreur d'allocation de %s"
#define MSG_ANSWER_TYPE "Réponse de type"
#define MSG_API_CONF_ERROR "Erreur SQL: API_CONFORMANCE"
#define MSG_APPL_NOT_INIT "Application non initialisée"
#define MSG_ARRAY_BNDS_EXCD "Hors limite de tableau"
#define MSG_BAD_ARRAY_OPER "Les tableaux doivent utiliser l'opérateur IN"
#define MSG_BAD_ARRAY_TYPE "Type=%d invalide pour un tableau"
#define MSG_BAD_ARRAY_VAL "Les tableaux doivent avoir le même nombre de valeurs"
#define MSG_BAD_BIN_FMT "Format invalide %c pour la colonne BIN %s"
#define MSG_BAD_BLK_ESTIM "Nombre de blocs supérieur à l'estimation"
#define MSG_BAD_BLK_SIZE "Taille du bloc %d non conforme"
#define MSG_BAD_BYTE_NUM "Le nombre d'octets écrits est faux"
#define MSG_BAD_BYTE_READ "Le nombre d'octets lus est faux"
#define MSG_BAD_COL_TYPE "Type invalide %s pour la colonne %s"
#define MSG_BAD_COL_XPATH "Xpath invalide colonne %s de la table HTML %s"
#define MSG_BAD_CONST_TYPE "Type=%d invalide pour une constante"
#define MSG_BAD_CONV_TYPE "Convertion de type invalide %d"
#define MSG_BAD_DATETIME "Valeur date/temps invalide"
#define MSG_BAD_DBF_FILE "Le fichier DBF %s est altéré"
#define MSG_BAD_DBF_REC "Fichier DBF %s altéré enregistrement %d"
#define MSG_BAD_DBF_TYPE "Type DBF %c non supporté colonne %s"
#define MSG_BAD_DIRECTORY "Répertoire invalide %s: %s"
#define MSG_BAD_FIELD_RANK "Rang %d invalide pour la colonne %s"
#define MSG_BAD_FIELD_TYPE "Mauvais type de champ %s"
#define MSG_BAD_FILE_HANDLE "Handle de fichier invalide: %s"
#define MSG_BAD_FILTER "Mauvais filtre: Opc=%d B_T=%d %d Type=%d %d"
#define MSG_BAD_FILTER_CONV "Conversion filtre incorrecte, B_T=%d,%d"
#define MSG_BAD_FILTER_OP "Opérateur de filtre invalide %d"
#define MSG_BAD_FLD_FORMAT "Format invalide pour le champs %d de %s"
#define MSG_BAD_FLD_LENGTH "Champs %s trop long (%s --> %d) ligne %d de %s"
#define MSG_BAD_FREQ_SET "Spécification erronnée de Freq pour la colonne %s"
#define MSG_BAD_FUNC_MODE "%s: mode invalide %d"
#define MSG_BAD_HANDLE_VAL "Valeur Handle invalide"
#define MSG_BAD_HEADER "Fichier %s: bloc en-tête altéré"
#define MSG_BAD_HEAD_END "Lecture fin d'en-tête impossible"
#define MSG_BAD_INDEX_FILE "Fichier index %s corrompu"
#define MSG_BAD_LINEFLD_FMT "Format invalide ligne %d champs %d de %s"
#define MSG_BAD_LINE_LEN "Longueur ligne non égale à Lrecl"
#define MSG_BAD_LRECL "Disparité lrecl table/fichier (%d,%hd)"
#define MSG_BAD_NODE_TYPE "Type noeud erroné pour la table"
#define MSG_BAD_OFFSET_VAL "Nul offset invalide pour une table CSV"
#define MSG_BAD_OPEN_MODE "Mode d'ouverture invalide %d"
#define MSG_BAD_PARAM_TYPE "%.8s: Paramètre de type=%d invalide"
#define MSG_BAD_PARM_COUNT "Nombre de paramètres incohérent"
#define MSG_BAD_QUOTE_FIELD "Quote manquante dans %s champs %d ligne %d"
#define MSG_BAD_READ_NUMBER "Mauvais nombre %d de valeurs lues dans %s"
#define MSG_BAD_RECFM "Recfm type %d invalide pour DOSCOL"
#define MSG_BAD_RECFM_VAL "Valeur invalide %d de Recfm"
#define MSG_BAD_SET_CASE "La casse d'un tableau ne peut pas passer de non respect à respecter"
#define MSG_BAD_SET_STRING "SetValue: appel invalide pour STRING"
#define MSG_BAD_SPECIAL_COL "Colonne spéciale invalide %s"
#define MSG_BAD_SPEC_COLUMN "Colonne spéciale invalide pour ce type de table"
#define MSG_BAD_TABLE_TYPE "Type invalide %s pour la table %s"
#define MSG_BAD_TYPE_LIKE "Type(%d)= %d invalide pour LIKE"
#define MSG_BAD_VALBLK_INDX "Valeur hors limites de l'index du bloc de valeurs"
#define MSG_BAD_VALBLK_TYPE "Type=%d invalide pour un bloc de valeurs"
#define MSG_BAD_VALNODE "Type %d invalide pour le noeud valeur colonne %s"
#define MSG_BAD_VALUE_TYPE "Type de valeur invalide %d"
#define MSG_BAD_VAL_UPDATE "Impossible de déterminer quelle valeur %s doit être mise à jour"
#define MSG_BAS_NS_LIST "Format invalide de la liste des espace-noms"
#define MSG_BIN_F_TOO_LONG "Valeur trop longue pour le champ %s (%d --> %d)"
#define MSG_BIN_MODE_FAIL "Echec mode binaire: %s"
#define MSG_BLKTYPLEN_MISM "Disparité types/longueurs de bloc dans SetValue"
#define MSG_BLK_IS_NULL "Blk est nul"
#define MSG_BREAKPOINT "Point de contrôle"
#define MSG_BUILD_INDEX "Construction index %s sur %s"
#define MSG_CANNOT_OPEN "Ouverture impossible de %s"
#define MSG_CHSIZE_ERROR "Erreur dans chsize: %s"
#define MSG_COL_ALLOC_ERR "Allocation impossible du noeud colonne"
#define MSG_COL_ISNOT_TABLE "La colonne %s n'est pas dans la table %s"
#define MSG_COL_NOT_SORTED "La colonne %s de la table %s n'est pas triée"
#define MSG_COL_NUM_MISM "Disparité du nombre de colonnes"
#define MSG_COM_ERROR "Erreur Com"
#define MSG_CONCAT_SUBNODE "Concaténation de sous-noeuds impossible"
#define MSG_CONNECT_CANCEL "Connection interrompue par l'utilisateur"
#define MSG_CONTROL_C_EXIT "Exit par Ctrl-C"
#define MSG_DATABASE_LOADED "Base de données %s chargée"
#define MSG_DATA_MISALIGN "Mauvais alignement pour ce type de données"
#define MSG_DBASE_FILE "Fichier dBASE dbf: "
#define MSG_DEF_ALLOC_ERROR "Erreur d'allocation de la classe DEF %s"
#define MSG_DEL_FILE_ERR "Erreur à l'effacement de %s"
#define MSG_DEL_READ_ERROR "Delete: erreur en lecture req=%d len=%d"
#define MSG_DEL_WRITE_ERROR "Delete: erreur en écriture: %s"
#define MSG_DEPREC_FLAG "Option Flag périmée, utiliser Coltype"
#define MSG_DLL_LOAD_ERROR "Erreur %d au chargement du module %s"
#define MSG_DOM_NOT_SUPP "MS-DOM non supporté par cette version"
#define MSG_DVAL_NOTIN_LIST "Valeur %s non trouvée dans la liste des valeurs distinctes de la colonne %s"
#define MSG_EMPTY_DOC "Document vide"
#define MSG_EMPTY_FILE "%s du fichier vide %s: "
#define MSG_EOF_AFTER_LINE "Fin de fichier après la ligne %d"
#define MSG_EOF_INDEX_FILE "EOF lisant le fichier index"
#define MSG_ERROR_IN_LSK "Erreur %d dans lseek64"
#define MSG_ERROR_IN_SFP "Erreur %d dans SetFilePointer"
#define MSG_ERR_READING_REC "Erreur lisant l'enregistrement %d de %s"
#define MSG_FAIL_ADD_NODE "L'ajout du noeud %s dans la table a échoué"
#define MSG_FETCH_NO_RES "Fetch: Pas de Résultats"
#define MSG_FIELD_TOO_LONG "Valeur trop longue pour le champs %d ligne %d"
#define MSG_FILELEN_ERROR "Erreur dans %s pour %s"
#define MSG_FILE_IS_EMPTY "Le fichier %s est vide"
#define MSG_FILE_MAP_ERR "Erreur de File mapping"
#define MSG_FILE_MAP_ERROR "CreateFileMapping %s erreur rc=%d"
#define MSG_FILE_OPEN_YET "Fichier %s déjà ouvert"
#define MSG_FILE_UNFOUND "Fichier %s non trouvé"
#define MSG_FLD_TOO_LNG_FOR "Champs %d trop long pour %s ligne %d de %s"
#define MSG_FLT_BAD_RESULT "Virgule flottante: résultat inexacte"
#define MSG_FLT_DENORMAL_OP "Opérande virgule flottante non normalisé"
#define MSG_FLT_INVALID_OP "Opération virgule flottante invalide"
#define MSG_FLT_OVERFLOW "Dépassement de capacité virgule flottante"
#define MSG_FLT_STACK_CHECK "Virgule flottante: Erreur de la pile"
#define MSG_FLT_UNDERFLOW "Sous-dépassement de capacité virgule flottante"
#define MSG_FLT_ZERO_DIVIDE "Virgule flottante: division par zéro"
#define MSG_FMT_WRITE_NIY "L'écriture des fichiers %s n'est pas encore implémentée"
#define MSG_FOXPRO_FILE "Fichier FoxPro: "
#define MSG_FPUTS_ERROR "Erreur dans fputs: %s"
#define MSG_FSEEK_ERROR "Erreur dans fseek: %s"
#define MSG_FSETPOS_ERROR "Erreur dans fseek pour i=%d"
#define MSG_FTELL_ERROR "Erreur dans ftell enregistrement=%d: %s"
#define MSG_FUNCTION_ERROR "Erreur dans %s: %d"
#define MSG_FUNC_ERRNO "Erreur %d dans %s"
#define MSG_FUNC_ERROR "Erreur dans %s"
#define MSG_FUNC_ERR_S "Erreur dans %s: %s"
#define MSG_FWRITE_ERROR "Erreur dans fwrite: %s"
#define MSG_GET_DIST_VALS "Récupération des valeurs distinctes de "
#define MSG_GET_FUNC_ERR "Erreur en recherche de la fonction %s: %s"
#define MSG_GLOBAL_ERROR "Erreur d'allocation de Global (taille=%d)\n"
#define MSG_GUARD_PAGE "Violation de page de garde"
#define MSG_GZOPEN_ERROR "gzopen %s: erreur %d sur %s"
#define MSG_ILLEGAL_INSTR "Instruction illégale"
#define MSG_ILL_FILTER_CONV "Conversion implicite illégale dans un filtre"
#define MSG_INDEX_NOT_UNIQ "L'index n'est pas Unique"
#define MSG_INDEX_YET_ON "L'index %s existe déjà sur %s"
#define MSG_INDX_COL_NOTIN "La colonne index %s n'existe pas dans la table %s"
#define MSG_INDX_EXIST_YET "L'entrée index existe déjà"
#define MSG_INIT_FAILED "L'initialisation de %s a échoué"
#define MSG_INT_COL_ERROR "Erreur interne sur la colonne index %s"
#define MSG_INT_OVERFLOW "Dépassement de capacité sur entier"
#define MSG_INT_ZERO_DIVIDE "Division entière par zéro"
#define MSG_INVALID_DISP "Disposition invalide"
#define MSG_INVALID_FTYPE "SBV: Ftype %d invalide"
#define MSG_INVALID_HANDLE "Poignée invalide"
#define MSG_INVALID_OPER "Opérateur invalide %d pour %s"
#define MSG_INV_COLUMN_TYPE "Type %d Invalide pour la colonne %s"
#define MSG_INV_COL_TYPE "Type de colonne %s invalide"
#define MSG_INV_DEF_READ "Lecture différée invalide rc=%d"
#define MSG_INV_DIRCOL_OFST "Offset invalide pour une colonne DIR"
#define MSG_INV_MAP_POS "Position mémoire invalide"
#define MSG_INV_RAND_ACC "L'accès aléatoire d'une table non optimisée est impossible"
#define MSG_INV_REC_POS "Position d'enregistrement invalide"
#define MSG_INV_RESULT_TYPE "Type de résultat invalide %s"
#define MSG_INV_UPDT_TABLE "Table %s invalide pour Update"
#define MSG_IN_WITHOUT_SUB "IN ou EXISTS sans tableau ou subquery"
#define MSG_KEY_ALLOC_ERR "Erreur d'allocation d'un bloc offset clé"
#define MSG_KEY_ALLOC_ERROR "Erreur d'allocation mémoire, Klen=%d n=%d"
#define MSG_LINE_TOO_LONG "La nouvelle ligne est trop longue"
#define MSG_LIST "--Liste--"
#define MSG_LOADING_FAILED "Le chargement de %s a échoué"
#define MSG_LRECL_TOO_SMALL "Lrecl trop petit (longueur en-tête = %d)"
#define MSG_MAKE_EMPTY_FILE "Génération du fichier vide %s: %s"
#define MSG_MAKING "Génération"
#define MSG_MALLOC_ERROR "Allocation mémoire impossible par %s"
#define MSG_MAP_VIEW_ERROR "MapViewOfFile %s erreur rc=%d"
#define MSG_MAXSIZE_ERROR "Maxsize incalculable sur table ouverte"
#define MSG_MEM_ALLOC_ERR "Erreur d'allocation mémoire, taille %s = %d"
#define MSG_MEM_ALLOC_ERROR "Erreur d'allocation mémoire"
#define MSG_MISPLACED_QUOTE "Appostrophe mal placée ligne %d"
#define MSG_MISSING_ARG "Argument manquant pour l'opérateur %d"
#define MSG_MISSING_FIELD "Champs %d manquant dans %s ligne %d"
#define MSG_MISSING_FNAME "Nom du fichier manquant"
#define MSG_MISSING_NODE "Noeud %s manquant dans %s"
#define MSG_MISSING_ROWNODE "Impossible de trouver le noeud de la ligne %d"
#define MSG_MIS_TAG_LIST "Liste des balises colonne manquante"
#define MSG_MUL_MAKECOL_ERR "Erreur logique dans TABMUL::MakeCol"
#define MSG_NAME_CONV_ERR "Erreur de convertion du nom de noeud"
#define MSG_NEW_DOC_FAILED "Impossible de créer le nouveau document"
#define MSG_NEW_RETURN_NULL "NULL renvoyé par New dans PlugEvalLike"
#define MSG_NEXT_FILE_ERROR "Erreur en recherche du fichier suivant. rc=%s"
#define MSG_NONCONT_EXCEPT "Exception non-continuable"
#define MSG_NOP_ZLIB_INDEX "L'indexage d'une table zlib non optimisée est impossible"
#define MSG_NOT_A_DBF_FILE "Le fichier n'a pas le format dBASE dbf "
#define MSG_NOT_FIXED_LEN "Fichier %s non fixe, len=%d lrecl=%d"
#define MSG_NO_0DH_HEAD "0DH manquant en fin d'en-tête (dbc=%d)"
#define MSG_NO_ACTIVE_DB "Pas de base de données active"
#define MSG_NO_CHAR_FROM "Conversion de type %d en caractères impossible"
#define MSG_NO_DATE_FMT "Pas de format date pour le valblock de type %d"
#define MSG_NO_DEF_FNCCOL "Colonne fonction par défaut introuvable"
#define MSG_NO_DEF_PIVOTCOL "Colonne pivot par défaut introuvable"
#define MSG_NO_DIR_INDX_RD "Pas d'accès directe des tables %s"
#define MSG_NO_FEAT_SUPPORT "%s non supporté dans cette version"
#define MSG_NO_FLD_FORMAT "Format absent pour le champs %d de %s"
#define MSG_NO_FORMAT_COL "Type COLUMN informattable"
#define MSG_NO_FORMAT_TYPE "Le format ne peut pas être défini à partir du type %d"
#define MSG_NO_INDEX_READ "Pas d'accès directe des tables multiples"
#define MSG_NO_KEY_COL "Pas de colonne clé trouvée"
#define MSG_NO_KEY_UPDATE "Le nom des clés ne peut pas être modifié"
#define MSG_NO_MAP_INSERT "MAP incompatible avec Insert"
#define MSG_NO_MATCHING_COL "Pas de colonne correspondant à %s dans %s"
#define MSG_NO_MATCH_COL "Colonne correspondante introuvable"
#define MSG_NO_MEMORY "Mémoire pleine"
#define MSG_NO_MODE_PADDED "Mode non supporté pour les fichiers 'padded'"
#define MSG_NO_MUL_VCT "Les tables VCT ne peuvent pas être multiples"
#define MSG_NO_ODBC_DELETE "Delete ne devrait pas être appelé pour les tables ODBC"
#define MSG_NO_ODBC_DIRECT "Accès directe des tables ODBC non encore implémenté"
#define MSG_NO_ODBC_MUL "Multiple(2) non supporté pour les tables ODBC"
#define MSG_NO_ODBC_SPECOL "Pas de colonne spéciale ODBC"
#define MSG_NO_PART_DEL "Delete partiel des fichier %s impossible"
#define MSG_NO_PART_MAP "Mapping partiel non implémenté pour cet OS"
#define MSG_NO_PAR_BLK_INS "Insertion de bloc partiel impossible"
#define MSG_NO_PIV_DIR_ACC "Pas d'accès directe aux tables PIVOT"
#define MSG_NO_READ_32 "Lecture de 32 octets impossible"
#define MSG_NO_RECOV_SPACE "Espace non recouvrable dans le fichier index"
#define MSG_NO_ROWID_FOR_AM "Accès direct impossible de ROWID pour les tables de type %s"
#define MSG_NO_ROW_NODE "Le nom du Rownode n'est pas défini"
#define MSG_NO_SECTION_NAME "Nom de section manquant"
#define MSG_NO_SEC_UPDATE "Les noms de section ne peuvent pas être modifiés"
#define MSG_NO_SETPOS_YET "SetPos pas encore implémenté pour les fichier %s"
#define MSG_NO_SPEC_COL "Pas de colonne spéciales MYSQL"
#define MSG_NO_SUB_VAL "Pas de sous-value d'un tableau de type %d"
#define MSG_NO_TABCOL_DATA "Pas de données pour la table %s colonne %s"
#define MSG_NO_TABLE_DEL "Delete non autorisé pour les tables %s "
#define MSG_NO_TAB_DATA "Pas de données pour la table %s"
#define MSG_NO_VCT_DELETE "Délétion Partielle non implémentée pour les fichiers VCT"
#define MSG_NO_ZIP_DELETE "Delete sur fichier Zip non encore implementé"
#define MSG_OPENING "Ouverture"
#define MSG_OPEN_EMPTY_FILE "Ouverture du fichier vide %s: %s"
#define MSG_OPEN_ERROR "Erreur d'ouverture %d en mode %d sur %s: "
#define MSG_OPEN_ERROR_IS "Erreur à l'ouverture de %s: %s"
#define MSG_OPEN_MODE_ERROR "Erreur d'ouverture(%s) %d sur %s"
#define MSG_OPEN_STRERROR "Erreur à l'ouverture: %s"
#define MSG_OPTBLK_RD_ERR "Erreur à la lecture d'un bloc optimisation: %s"
#define MSG_OPTBLK_WR_ERR "Erreur à l'écriture d'un bloc optimisation: %s"
#define MSG_OPTIMIZING "Optimisation de "
#define MSG_OPT_BMAP_RD_ERR "Erreur en lecture des bitmaps d'optimisation: %s"
#define MSG_OPT_BMAP_WR_ERR "Erreur en écriture des bitmaps d'optimisation: %s"
#define MSG_OPT_CANCELLED "Optimisation interrompue par l'utilisateur"
#define MSG_OPT_DVAL_RD_ERR "Erreur en lecture des valeurs distinctes: %s"
#define MSG_OPT_DVAL_WR_ERR "Erreur en écriture des valeurs distinctes: %s"
#define MSG_OPT_HEAD_RD_ERR "Erreur en lecture de l'entête du fichier opt: %s"
#define MSG_OPT_HEAD_WR_ERR "Erreur en écriture de l'entête du fichier opt: %s"
#define MSG_OPT_LOGIC_ERR "Erreur logique dans SetBitmap, i=%d"
#define MSG_OPT_MAX_RD_ERR "Erreur en lecture des valeurs maxi: %s"
#define MSG_OPT_MAX_WR_ERR "Erreur en écriture des valeurs maxi: %s"
#define MSG_OPT_MIN_RD_ERR "Erreur en lecture des valeurs mini: %s"
#define MSG_OPT_MIN_WR_ERR "Erreur en écriture des valeurs mini: %s"
#define MSG_OPT_NOT_MATCH "Le fichier opt %s n'est pas à jour"
#define MSG_PAGE_ERROR "Erreur de pagination"
#define MSG_PARM_CNT_MISS "Disparité du nombre de Paramètres"
#define MSG_PREC_VBLP_NULL "ARRAY SetPrecision: Vblp est NULL"
#define MSG_PRIV_INSTR "Instruction privilégiée"
#define MSG_PROCADD_ERROR "Erreur %d sur l'adresse de %s"
#define MSG_QUERY_CANCELLED "Requête interrompue par l'utilisateur"
#define MSG_RANGE_NO_JOIN "Range non compatible avec les index de jointure"
#define MSG_RC_READING "rc=%d en lecture de la table %s"
#define MSG_READY "Prêt"
#define MSG_READ_ERROR "Erreur en lecture sur %s: %s"
#define MSG_READ_ONLY "Cette table protégée en lecture seule ne peut être modifiée"
#define MSG_READ_SEEK_ERROR "Erreur de recherche en lecture: %s"
#define MSG_REGISTER_ERR "Enregistrement NS impossible, préfix='%s' et href='%s'"
#define MSG_REMOVE_ERROR "Erreur en supprimant %s: %s"
#define MSG_RENAME_ERROR "Erreur renommant %s en %s: %s"
#define MSG_ROWID_NOT_IMPL "RowNumber non implémenté pour les tables de type %s"
#define MSG_SEC_KEY_FIRST "Les sections et clés doivent être insérées en premier"
#define MSG_SEC_NAME_FIRST "Le nom de section doit être en tête de liste en insertion"
#define MSG_SEP_IN_FIELD "Le champ %d contient le caractère séparateur"
#define MSG_SEQUENCE_ERROR "HSTMT: Allocation hors séquence"
#define MSG_SETEOF_ERROR "Erreur %d dans SetEndOfFile"
#define MSG_SETRECPOS_NIY "SetRecpos non implémenté pour ce type de table"
#define MSG_SET_STR_TRUNC "SetValue: Chaîne de caractères tronquée"
#define MSG_SFP_ERROR "Erreur sur SetFilePointer: %s"
#define MSG_SHARED_LIB_ERR "Erreur au chargement de la librairie partagée %s: %s"
#define MSG_SINGLE_STEP "Pas à pas"
#define MSG_SORTING_VAL "Tri de %d valeurs"
#define MSG_SPCOL_READONLY "La colonne spéciale %s est en lecture seulement"
#define MSG_SQL_CONF_ERROR "Erreur SQL: SQL_CONFORMANCE"
#define MSG_SRCH_CLOSE_ERR "Erreur à la fermeture de l'Handle de recherche"
#define MSG_SRC_TABLE_UNDEF "La table source n'est pas définie"
#define MSG_STACK_OVERFLOW "Dépassement de capacité de la pile"
#define MSG_TABDIR_READONLY "Les tables DIR sont en lecture seulement"
#define MSG_TABLE_NOT_OPT "Table non optimisable"
#define MSG_TABLE_NO_INDEX "La table %s n'est pas indexable"
#define MSG_TABLE_READ_ONLY "Les tables %s sont en lecture seulement "
#define MSG_TABMUL_READONLY "Les tables multiples sont en lecture seulement"
#define MSG_TOO_MANY_FIELDS "Trop de champs ligne %d de %s"
#define MSG_TOO_MANY_JUMPS "Trop de niveaux de saut"
#define MSG_TOO_MANY_KEYS "Trop de clés (%d)"
#define MSG_TO_BLK_IS_NULL "To Blk est nul"
#define MSG_TRUNCATE_ERROR "Erreur en troncation: %s"
#define MSG_TRUNC_BY_ESTIM "Tronqué par l'option Estimate"
#define MSG_TYPE_MISMATCH "Clé et source ne sont pas du même type"
#define MSG_TYPE_VALUE_ERR "Colonne %s: disparité type(%s)/valeur(%s)"
#define MSG_UNBALANCE_QUOTE "Appostrophe en trop ligne %d"
#define MSG_UNDEFINED_AM "COLBLK %s: méthode d'accès indéfinie"
#define MSG_UNKNOWN_EXCPT "Exception non répertoriée"
#define MSG_UNMATCH_FIL_ARG "Argument de filtre dépareillé"
#define MSG_UPDATE_ERROR "Erreur en Update sur %s"
#define MSG_UPD_ZIP_NOT_IMP "Mise à jour des tables ZDOS non encore implementé"
#define MSG_VALSTR_TOO_LONG "Valeur %s trop longue pour une chaîne de longueur %d"
#define MSG_VALTYPE_NOMATCH "Disparité types de valeur"
#define MSG_VALUE_ERROR "Colonne %s: bloc valeur nul"
#define MSG_VALUE_TOO_BIG "Valeur %lld trop grande pour la colonne %s"
#define MSG_VALUE_TOO_LONG "Valeur %s trop longue pour la colonne %s de longueur %d"
#define MSG_VAL_ALLOC_ERR "Allocation impossible du noeud valeur"
#define MSG_VIR_NO_DELETE "Delete impossible sur les tables %s"
#define MSG_VIR_READ_ONLY "Les tables virtuelles %s sont en lecture seulement"
#define MSG_VOID_FIRST_ARG "Le premier argument ne doit pas être vide"
#define MSG_WORK_AREA "Espace de travail: %s"
#define MSG_WRITE_SEEK_ERR "Erreur de recherche en écriture: %s"
#define MSG_WRITE_STRERROR "Erreur en écriture sur %s: %s"
#define MSG_WRITING "Ecriture"
#define MSG_WRITING_ERROR "Erreur à l'écriture de %s: %s"
#define MSG_WS_CONV_ERR "Erreur de convertion de %s en WS"
#define MSG_XCOL_MISMATCH "La colonne %s ne correspond pas à l'index"
#define MSG_XFILE_READERR "Erreur %d en lisant le fichier index"
#define MSG_XFILE_WRITERR "Erreur en écrivant le fichier index: %s"
#define MSG_XMLTAB_INIT_ERR "Erreur d'initialisation de la table XML"
#define MSG_XML_INIT_ERROR "Erreur d'initialisation du nouveau fichier XML"
#define MSG_XPATH_CNTX_ERR "Le nouveau contexte XPath ne peut être créé"
#define MSG_XPATH_EVAL_ERR "Impossible d'évaluer l'emplacement xpath '%s'"
#define MSG_XPATH_NOT_SUPP "Xpath non supporté colonne %s"

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -540,11 +540,7 @@ extern "C" const char *msglang(void)
#else // !XMSG && !NEWMSG #else // !XMSG && !NEWMSG
extern "C" const char *msglang(void) extern "C" const char *msglang(void)
{ {
#if defined(FRENCH)
return "french";
#else // DEFAULT
return "english"; return "english";
#endif // DEFAULT
} // end of msglang } // end of msglang
#endif // !XMSG && !NEWMSG #endif // !XMSG && !NEWMSG

View File

@ -1,13 +1,5 @@
/**************************************************************************/ /**************************************************************************/
/* NLS messsages definition. */ /* NLS messsages definition. */
/**************************************************************************/ /**************************************************************************/
#if defined(FRENCH)
#if defined(CPX)
#include "frmsg1.h"
#else /* not CPX */
#include "frmsg2.h"
#endif /* CPX */
#else /* not FRENCH */
#include "engmsg.h" #include "engmsg.h"
#endif /* FRENCH */
/* ---------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- */

View File

@ -14,11 +14,7 @@
/***********************************************************************/ /***********************************************************************/
/* DB Constant definitions. */ /* DB Constant definitions. */
/***********************************************************************/ /***********************************************************************/
#if defined(FRENCH)
#define DEFAULT_LOCALE "French"
#else // !FRENCH
#define DEFAULT_LOCALE "English" #define DEFAULT_LOCALE "English"
#endif // !FRENCH
#define DOS_MAX_PATH 144 /* Must be the same across systems */ #define DOS_MAX_PATH 144 /* Must be the same across systems */
#define DOS_BUFF_LEN 100 /* Number of lines in binary file buffer */ #define DOS_BUFF_LEN 100 /* Number of lines in binary file buffer */

View File

@ -32,17 +32,6 @@ const char *GetMsgid(int id)
const char *p = NULL; const char *p = NULL;
// This conditional until a real fix is found for MDEV-7304 // This conditional until a real fix is found for MDEV-7304
#if defined(FRENCH)
if (!stricmp(msglang(), "french"))
switch (id) {
#include "frids.h"
#if defined(NEWMSG)
#include "frcas.h"
#endif // NEWMSG
} // endswitch(id)
else // English
#endif // FRENCH
switch (id) { switch (id) {
#include "enids.h" #include "enids.h"
#if defined(NEWMSG) #if defined(NEWMSG)

View File

@ -4882,6 +4882,7 @@ corrupted:
loop: loop:
if (!block) { if (!block) {
invalid_page: invalid_page:
mtr.commit();
func_exit: func_exit:
mem_heap_free(heap); mem_heap_free(heap);
return err; return err;

View File

@ -2117,7 +2117,7 @@ void buf_page_free(fil_space_t *space, uint32_t page, mtr_t *mtr)
btr_search_drop_page_hash_index(block); btr_search_drop_page_hash_index(block);
#endif /* BTR_CUR_HASH_ADAPT */ #endif /* BTR_CUR_HASH_ADAPT */
block->page.set_freed(block->page.state()); block->page.set_freed(block->page.state());
mtr->memo_push(block, MTR_MEMO_PAGE_X_FIX); mtr->memo_push(block, MTR_MEMO_PAGE_X_MODIFY);
} }
/** Get read access to a compressed page (usually of type /** Get read access to a compressed page (usually of type
@ -2518,6 +2518,9 @@ ignore_block:
return nullptr; return nullptr;
} }
if (UNIV_UNLIKELY(!block->page.frame)) {
goto wait_for_unzip;
}
/* A read-fix is released after block->page.lock /* A read-fix is released after block->page.lock
in buf_page_t::read_complete() or in buf_page_t::read_complete() or
buf_pool_t::corrupted_evict(), or buf_pool_t::corrupted_evict(), or
@ -2548,7 +2551,7 @@ ignore_block:
mysql_mutex_lock(&buf_pool.mutex); mysql_mutex_lock(&buf_pool.mutex);
block->unfix(); block->unfix();
if (!buf_LRU_free_page(&block->page, true)) { if (!buf_LRU_free_page(&block->page, true)) {
ut_ad(0); ut_ad(0);
} }
@ -2566,6 +2569,7 @@ ignore_block:
if (UNIV_UNLIKELY(!block->page.frame)) { if (UNIV_UNLIKELY(!block->page.frame)) {
if (!block->page.lock.x_lock_try()) { if (!block->page.lock.x_lock_try()) {
wait_for_unzip:
/* The page is being read or written, or /* The page is being read or written, or
another thread is executing buf_zip_decompress() another thread is executing buf_zip_decompress()
in buf_page_get_low() on it. */ in buf_page_get_low() on it. */

View File

@ -37,7 +37,6 @@ Created Apr 25, 2012 Vasil Dimov
# include "mysql/service_wsrep.h" # include "mysql/service_wsrep.h"
# include "wsrep.h" # include "wsrep.h"
# include "log.h" # include "log.h"
# include "wsrep_mysqld.h"
#endif #endif
#include <vector> #include <vector>

View File

@ -2590,7 +2590,6 @@ corrupted:
if (UNIV_UNLIKELY(err != DB_SUCCESS)) { if (UNIV_UNLIKELY(err != DB_SUCCESS)) {
return err; return err;
} }
return err;
} }
mtr->free(*space, static_cast<uint32_t>(offset)); mtr->free(*space, static_cast<uint32_t>(offset));

View File

@ -565,9 +565,6 @@ bool thd_is_strict_mode(const MYSQL_THD thd);
extern void mysql_bin_log_commit_pos(THD *thd, ulonglong *out_pos, const char **out_file); extern void mysql_bin_log_commit_pos(THD *thd, ulonglong *out_pos, const char **out_file);
struct trx_t; struct trx_t;
#ifdef WITH_WSREP
#include <mysql/service_wsrep.h>
#endif /* WITH_WSREP */
extern const struct _ft_vft ft_vft_result; extern const struct _ft_vft ft_vft_result;

View File

@ -1444,9 +1444,13 @@ struct ha_innobase_inplace_ctx : public inplace_alter_handler_ctx
for (unsigned i= 0, j= 0; i < index->n_fields; i++) for (unsigned i= 0, j= 0; i < index->n_fields; i++)
{ {
const dict_col_t *col= index->fields[i].col; const dict_col_t *col= index->fields[i].col;
if (change_col_collate.find(col->ind) == collate_end) auto it= change_col_collate.find(col->ind);
if (it != collate_end)
{
ut_ad(it->second == col);
index->fields[i].col= index->fields[i].col=
index->change_col_info->add(index->heap, *col, j++); index->change_col_info->add(index->heap, *col, j++);
}
} }
} }
} }

View File

@ -48,12 +48,13 @@ mtr_t::memo_push(void* object, mtr_memo_type_t type)
ut_ad(type <= MTR_MEMO_SPACE_S_LOCK); ut_ad(type <= MTR_MEMO_SPACE_S_LOCK);
ut_ad(type == MTR_MEMO_PAGE_X_MODIFY || ut_is_2pow(type)); ut_ad(type == MTR_MEMO_PAGE_X_MODIFY || ut_is_2pow(type));
/* If this mtr has x-fixed a clean page then we set /* If this mtr has U or X latched a clean page then we set
the made_dirty flag. This tells mtr_t::commit() the m_made_dirty flag. This tells us if we need to
to hold log_sys.latch longer. */ grab log_sys.flush_order_mutex at mtr_t::commit() so that we
can insert the dirtied page into the buf_pool.flush_list. */
if (!m_made_dirty if (!m_made_dirty
&& (type == MTR_MEMO_PAGE_X_FIX || type == MTR_MEMO_PAGE_SX_FIX)) { && (type & (MTR_MEMO_PAGE_X_FIX | MTR_MEMO_PAGE_SX_FIX))) {
m_made_dirty = is_block_dirtied( m_made_dirty = is_block_dirtied(
reinterpret_cast<const buf_block_t*>(object)); reinterpret_cast<const buf_block_t*>(object));

View File

@ -217,7 +217,9 @@ public:
/** The page was modified, affecting the encryption parameters */ /** The page was modified, affecting the encryption parameters */
APPLIED_TO_ENCRYPTION, APPLIED_TO_ENCRYPTION,
/** The page was modified, affecting the tablespace header */ /** The page was modified, affecting the tablespace header */
APPLIED_TO_FSP_HEADER APPLIED_TO_FSP_HEADER,
/** The page was found to be corrupted */
APPLIED_CORRUPTED,
}; };
/** Apply log to a page frame. /** Apply log to a page frame.
@ -299,12 +301,10 @@ public:
ut_ad(*l == OPT_PAGE_CHECKSUM); ut_ad(*l == OPT_PAGE_CHECKSUM);
if (page_checksum(block, l + 1)) if (page_checksum(block, l + 1))
{ {
applied= APPLIED_YES;
page_corrupted: page_corrupted:
sql_print_error("InnoDB: Set innodb_force_recovery=1" sql_print_error("InnoDB: Set innodb_force_recovery=1"
" to ignore corruption."); " to ignore corruption.");
recv_sys.set_corrupt_log(); return APPLIED_CORRUPTED;
return applied;
} }
goto next_after_applying; goto next_after_applying;
} }
@ -3007,6 +3007,7 @@ static buf_block_t *recv_recover_page(buf_block_t *block, mtr_t &mtr,
start_lsn = 0; start_lsn = 0;
continue; continue;
case log_phys_t::APPLIED_YES: case log_phys_t::APPLIED_YES:
case log_phys_t::APPLIED_CORRUPTED:
goto set_start_lsn; goto set_start_lsn;
case log_phys_t::APPLIED_TO_FSP_HEADER: case log_phys_t::APPLIED_TO_FSP_HEADER:
case log_phys_t::APPLIED_TO_ENCRYPTION: case log_phys_t::APPLIED_TO_ENCRYPTION:
@ -3060,7 +3061,8 @@ static buf_block_t *recv_recover_page(buf_block_t *block, mtr_t &mtr,
} }
set_start_lsn: set_start_lsn:
if (recv_sys.is_corrupt_log() && !srv_force_recovery) { if ((a == log_phys_t::APPLIED_CORRUPTED
|| recv_sys.is_corrupt_log()) && !srv_force_recovery) {
if (init) { if (init) {
init->created = false; init->created = false;
if (space || block->page.id().page_no()) { if (space || block->page.id().page_no()) {
@ -3157,7 +3159,13 @@ ATTRIBUTE_COLD void recv_sys_t::free_corrupted_page(page_id_t page_id)
p->second.log.clear(); p->second.log.clear();
pages.erase(p); pages.erase(p);
if (!srv_force_recovery) if (!srv_force_recovery)
{
set_corrupt_fs(); set_corrupt_fs();
ib::error() << "Unable to apply log to corrupted page " << page_id
<< "; set innodb_force_recovery to ignore";
}
else
ib::warn() << "Discarding log for corrupted page " << page_id;
} }
if (pages.empty()) if (pages.empty())

View File

@ -1649,7 +1649,7 @@ inc_dir:
{ {
const byte *r= rec; const byte *r= rec;
const byte *c= cur->rec; const byte *c= cur->rec;
const byte *c_end= cur->rec + data_size; const byte *c_end= c + (page_rec_is_infimum(c) ? 8 : data_size);
static_assert(REC_N_OLD_EXTRA_BYTES == REC_N_NEW_EXTRA_BYTES + 1, ""); static_assert(REC_N_OLD_EXTRA_BYTES == REC_N_NEW_EXTRA_BYTES + 1, "");
if (c <= insert_buf && c_end > insert_buf) if (c <= insert_buf && c_end > insert_buf)
c_end= insert_buf; c_end= insert_buf;

View File

@ -47,7 +47,8 @@ Created 4/20/1996 Heikki Tuuri
# include "btr0sea.h" # include "btr0sea.h"
#endif #endif
#ifdef WITH_WSREP #ifdef WITH_WSREP
#include "wsrep_mysqld.h" #include <wsrep.h>
#include <mysql/service_wsrep.h>
#endif /* WITH_WSREP */ #endif /* WITH_WSREP */
/************************************************************************* /*************************************************************************

View File

@ -66,11 +66,6 @@ Created 9/17/2000 Heikki Tuuri
#include <vector> #include <vector>
#include <thread> #include <thread>
#ifdef WITH_WSREP
#include "mysql/service_wsrep.h"
#include "wsrep.h"
#include "wsrep_mysqld.h"
#endif
/*******************************************************************//** /*******************************************************************//**
Delays an INSERT, DELETE or UPDATE operation if the purge is lagging. */ Delays an INSERT, DELETE or UPDATE operation if the purge is lagging. */