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_GETPAGESIZE 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_GETPWNAM 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_SETENV CACHE INTERNAL "")
SET(HAVE_SETLOCALE 1 CACHE INTERNAL "")
SET(HAVE_SETMNTENT CACHE INTERNAL "")
SET(HAVE_SIGACTION CACHE INTERNAL "")
SET(HAVE_SIGINT 1 CACHE INTERNAL "")
SET(HAVE_SIGPIPE CACHE INTERNAL "")

View file

@ -34,6 +34,11 @@
#cmakedefine HAVE_FLOAT_H 1
#cmakedefine HAVE_FNMATCH_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_IA64INTRIN_H 1
#cmakedefine HAVE_IEEEFP_H 1
@ -209,6 +214,7 @@
#cmakedefine HAVE_SELECT 1
#cmakedefine HAVE_SETENV 1
#cmakedefine HAVE_SETLOCALE 1
#cmakedefine HAVE_SETMNTENT 1
#cmakedefine HAVE_SETUPTERM 1
#cmakedefine HAVE_SIGSET 1
#cmakedefine HAVE_SIGACTION 1

View file

@ -17,44 +17,46 @@
#define WSREP_INCLUDED
#include <my_config.h>
#include "log.h"
#ifdef WITH_WSREP
#define IF_WSREP(A,B) 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_) \
if (WSREP_ON && WSREP(thd) && \
wsrep_to_isolation_begin(thd, db_, table_, table_list_)) \
goto wsrep_error_label;
#define WSREP_DEBUG(...) \
if (wsrep_debug) WSREP_LOG(sql_print_information, ##__VA_ARGS__)
#define WSREP_INFO(...) WSREP_LOG(sql_print_information, ##__VA_ARGS__)
#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_) \
if (WSREP_ON && WSREP(thd) && \
wsrep_to_isolation_begin(thd, db_, table_, \
table_list_, nullptr, nullptr, create_info_)) \
goto wsrep_error_label;
#define WSREP_LOG_CONFLICT_THD(thd, role) \
WSREP_INFO("%s: \n " \
" THD: %lu, mode: %s, state: %s, conflict: %s, seqno: %lld\n " \
" SQL: %s", \
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_) \
if (WSREP(thd) && \
wsrep_to_isolation_begin(thd, db_, table_, \
table_list_, alter_info_, \
fk_tables_, create_info_))
#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__); \
}
/*
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 */
@ -62,13 +64,11 @@
* (e.g. embedded) */
#define IF_WSREP(A,B) B
//#define DBUG_ASSERT_IF_WSREP(A)
#define WSREP_DEBUG(...)
//#define WSREP_INFO(...)
//#define WSREP_WARN(...)
#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 /* 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: OPT_PAGE_CHECKSUM mismatch");
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("Plugin 'InnoDB' registration as a STORAGE ENGINE failed");
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: 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: (Unable to apply log to|Discarding log for) corrupted page ");
--enable_query_log
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: OPT_PAGE_CHECKSUM mismatch");
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("Plugin 'InnoDB' registration as a STORAGE ENGINE failed");
# for innodb_checksum_algorithm=full_crc32 only

View file

@ -51,25 +51,39 @@ id msg
DROP TABLE t1;
CREATE TABLE t1 (
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,
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;
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_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;
SET DEBUG_SYNC="now WAIT_FOR con1_go";
BEGIN;
SELECT * FROM t1;
id msg
1 aaa
id f1 f2 f3 msg msg_1
1 1 1 1 aaa aaa
SET DEBUG_SYNC="now SIGNAL alter_signal";
connection default;
ERROR 23000: Duplicate entry '' for key '*UNKNOWN*'
CHECK TABLE t1;
Table Op Msg_type Msg_text
test.t1 check status OK
connection con1;
rollback;
INSERT INTO t1 VALUES(2, 'bbb');
INSERT INTO t1 VALUES(2, 2, 2, 2, 'bbb', 'bbb');
disconnect con1;
connection default;
SET DEBUG_SYNC=reset;
@ -77,11 +91,22 @@ SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`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_1` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
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
INSERT INTO t1 VALUES(3, 'ccc');
INSERT INTO t1 VALUES(3, 3, 3, 3, 'ccc', 'ccc');
DROP TABLE t1;
CREATE TABLE t1(id INT PRIMARY KEY, msg VARCHAR(100),
msg_1 VARCHAR(100) AS (msg) VIRTUAL,

View file

@ -17,4 +17,8 @@ pk c
1 sql
SELECT * FROM t1 WHERE pk = 12;
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;

View file

@ -78,15 +78,26 @@ DROP TABLE t1;
CREATE TABLE t1 (
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,
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;
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_SYNC="innodb_inplace_alter_table_enter SIGNAL con1_go WAIT_FOR alter_signal";
--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;
SET DEBUG_SYNC="now WAIT_FOR con1_go";
@ -96,14 +107,15 @@ SET DEBUG_SYNC="now SIGNAL alter_signal";
connection default;
--error ER_DUP_ENTRY
reap;
CHECK TABLE t1;
connection con1;
rollback;
INSERT INTO t1 VALUES(2, 'bbb');
INSERT INTO t1 VALUES(2, 2, 2, 2, 'bbb', 'bbb');
disconnect con1;
connection default;
SET DEBUG_SYNC=reset;
SHOW CREATE TABLE t1;
INSERT INTO t1 VALUES(3, 'ccc');
INSERT INTO t1 VALUES(3, 3, 3, 3, 'ccc', 'ccc');
DROP TABLE t1;
# 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("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: (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("InnoDB: File '.*test/t1\\.ibd' is corrupted");
call mtr.add_suppression("InnoDB: A long wait .* was observed for dict_sys");

View file

@ -4,12 +4,14 @@
--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("\\[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\\] Plugin 'InnoDB' (init function|registration)");
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("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: In page .* of index `PRIMARY` of table `test`\\.`t1`");
--enable_query_log
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;
--error ER_NOT_KEYFILE
SELECT * FROM t1 WHERE pk = 12;
CHECK TABLE t1;
DROP TABLE t1;
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++)
{
#if !defined(_AIX) || !defined(__linux__)
#if defined(__linux___)
#if defined(__linux__)
#define HWADDR_DATA ifr[i].ifr_hwaddr.sa_data
#else
#define HWADDR_DATA ifr[i].ifr_hwaddr

View file

@ -1,7 +1,24 @@
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)
MYSQL_ADD_PLUGIN(DISKS information_schema_disks.cc MODULE_ONLY RECOMPILE_FOR_EMBEDDED)
ENDIF()

View file

@ -17,11 +17,45 @@
#include <my_global.h>
#include <sys/statvfs.h>
#include <sys/types.h>
#if defined(HAVE_GETMNTENT)
#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_i_s.h>
#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);
@ -41,24 +75,40 @@ ST_FIELD_INFO disks_table_fields[]=
};
int disks_table_add_row(THD* pThd,
TABLE* pTable,
const char* zDisk,
const char* zPath,
const struct statvfs& info)
static int disks_table_add_row_stat(
THD* pThd,
TABLE* pTable,
const char* zDisk,
const char* zPath,
const st_info &info)
{
// 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_bfree Total number of free blocks.
// 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 used = ((ulonglong)info.f_frsize *
ulonglong total = ((ulonglong) block_size * info.f_blocks) / 1024;
ulonglong used = ((ulonglong) block_size *
(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[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;
}
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;
struct statvfs info;
st_info info;
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;
}
#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;
TABLE* pTable = pTables->table;
st_info *s;
int count, rv= 0;
TABLE* pTable= pTables->table;
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.
char* pBuffer = new (std::nothrow) char [BUFFER_SIZE];
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);
rv= disks_table_add_row_stat(pThd, pTable, s->f_mntfromname, s->f_mntonname, *s);
count--;
s++;
}
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;
}
#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;
pSchema_table->fields_info = disks_table_fields;
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;
}
@ -148,15 +274,15 @@ maria_declare_plugin(disks)
MYSQL_INFORMATION_SCHEMA_PLUGIN,
&disks_table_info, /* type-specific descriptor */
"DISKS", /* table name */
"Johan Wikman", /* author */
"Johan Wikman, Daniel Black", /* author */
"Disk space information", /* description */
PLUGIN_LICENSE_GPL, /* license type */
Show::disks_table_init, /* init function */
NULL, /* deinit function */
0x0101, /* version = 1.1 */
Show::disks_table_deinit, /* deinit function */
0x0102, /* version = 1.2 */
NULL, /* no status 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)*/
}
mysql_declare_plugin_end;

View file

@ -1,8 +1,8 @@
show create table information_schema.disks;
Table Create Table
DISKS CREATE TEMPORARY TABLE `DISKS` (
`Disk` varchar(4096) NOT NULL,
`Path` varchar(4096) NOT NULL,
`Disk` varchar(pathlen) NOT NULL,
`Path` varchar(pathlen) NOT NULL,
`Total` bigint(32) NOT NULL,
`Used` 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;
select sum(Total) > sum(Available), sum(Total)>sum(Used) from information_schema.disks;

View file

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

View file

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

View file

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

View file

@ -55,6 +55,9 @@
#include "debug_sync.h"
#include "sql_base.h"
#include "sql_cte.h"
#ifdef WITH_WSREP
#include "mysql/service_wsrep.h"
#endif /* WITH_WSREP */
#ifdef NO_EMBEDDED_ACCESS_CHECKS
#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
#include "wsrep_mysqld.h"
#include "wsrep_server_state.h"
/* Format is %d-%d-%llu */
#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_handler.h"
#include <hash.h>
#ifdef WITH_WSREP
#include "wsrep_mysqld.h"
#include "wsrep_server_state.h"
#endif
/**
@defgroup Locking Locking

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -40,6 +40,7 @@
#include <mysql/plugin_data_type.h>
#include <mysql/plugin_function.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_int_mem_root;

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -65,6 +65,9 @@
#include "semisync_master.h"
#include "semisync_slave.h"
#include <ssl_compat.h>
#ifdef WITH_WSREP
#include "wsrep_mysqld.h"
#endif
#define PCRE2_STATIC 1 /* Important on Windows */
#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
it under the terms of the GNU General Public License as published by
@ -18,6 +18,7 @@
#include "my_global.h"
#include "wsrep_mysqld.h"
#include "wsrep_priv.h"
#include "wsrep_schema.h"
#include <algorithm>
#include <memory>

View file

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

View file

@ -19,6 +19,7 @@
#include "sys_vars_shared.h"
#include "wsrep.h"
#include "wsrep_sst.h"
#include "wsrep_mysqld.h"
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
it under the terms of the GNU General Public License as published by
@ -20,6 +20,8 @@
#include "wsrep_thd.h"
#include "wsrep_xid.h"
#include "wsrep_trans_observer.h"
#include "wsrep_server_state.h"
#include "wsrep_mysqld.h"
#include "sql_base.h" /* close_temporary_table() */
#include "sql_class.h" /* THD */

View file

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

View file

@ -1,5 +1,4 @@
/* Copyright 2008-2021 Codership Oy <http://www.codership.com>
Copyright (c) 2020, 2021, MariaDB
/* Copyright 2008-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
@ -20,8 +19,6 @@
#include <wsrep.h>
#ifdef WITH_WSREP
extern bool WSREP_ON_;
extern bool WSREP_PROVIDER_EXISTS_;
#include <mysql/plugin.h>
#include "mysql/service_wsrep.h"
@ -40,21 +37,12 @@ typedef struct st_mysql_show_var SHOW_VAR;
#include "wsrep/provider.hpp"
#include "wsrep/streaming_context.hpp"
#include "wsrep_api.h"
#include <vector>
#include <map>
#include "wsrep_server_state.h"
#define WSREP_UNDEFINED_TRX_ID ULONGLONG_MAX
class set_var;
class THD;
enum wsrep_consistency_check_mode {
NO_CONSISTENCY_CHECK,
CONSISTENCY_CHECK_DECLARED,
CONSISTENCY_CHECK_RUNNING,
};
// Global wsrep parameters
// MySQL wsrep options
@ -83,7 +71,6 @@ extern const char* wsrep_status_file;
extern const char* wsrep_allowlist;
extern my_bool wsrep_certify_nonPK;
extern long int wsrep_protocol_version;
extern ulong wsrep_forced_binlog_format;
extern my_bool wsrep_desync;
extern ulong wsrep_reject_queries;
extern my_bool wsrep_recovery;
@ -102,7 +89,7 @@ extern ulong wsrep_running_applier_threads;
extern ulong wsrep_running_rollbacker_threads;
extern bool wsrep_new_cluster;
extern bool wsrep_gtid_mode;
extern uint wsrep_gtid_domain_id;
extern uint32 wsrep_gtid_domain_id;
extern ulonglong wsrep_mode;
enum enum_wsrep_reject_types {
@ -114,7 +101,7 @@ enum enum_wsrep_reject_types {
enum enum_wsrep_OSU_method {
WSREP_OSU_TOI,
WSREP_OSU_RSU,
WSREP_OSU_NONE
WSREP_OSU_NONE,
};
enum enum_wsrep_sync_wait {
@ -238,68 +225,46 @@ extern bool wsrep_split_allowlist(std::vector<std::string>& allowlist);
/* Other global variables */
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
the log message with WSREP and forward the result buffer to fun. */
void WSREP_LOG(void (*fun)(const char* fmt, ...), const char* fmt, ...);
#define WSREP_DEBUG(...) \
if (wsrep_debug) sql_print_information( "WSREP: " __VA_ARGS__)
#define WSREP_INFO(...) sql_print_information( "WSREP: " __VA_ARGS__)
#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_SYNC_WAIT(thd_, before_) \
{ if (WSREP_CLIENT(thd_) && \
wsrep_sync_wait(thd_, before_)) goto wsrep_error_label; }
#define WSREP_LOG_CONFLICT_THD(thd, role) \
WSREP_INFO( \
"%s: \n " \
" THD: %lu, mode: %s, state: %s, conflict: %s, seqno: %lld\n " \
" SQL: %s", \
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_MYSQL_DB (char *)"mysql"
#define WSREP_TO_ISOLATION_BEGIN(db_, table_, table_list_) \
if (WSREP_ON && WSREP(thd) && wsrep_to_isolation_begin(thd, db_, table_, table_list_)) \
goto wsrep_error_label;
#define WSREP_TO_ISOLATION_BEGIN_CREATE(db_, table_, table_list_, create_info_) \
if (WSREP_ON && WSREP(thd) && \
wsrep_to_isolation_begin(thd, db_, table_, \
table_list_, nullptr, nullptr, create_info_))\
goto wsrep_error_label;
#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_)
@ -313,9 +278,6 @@ static inline bool wsrep_cluster_address_exists()
extern my_bool wsrep_ready_get();
extern void wsrep_ready_wait();
class Ha_trx_info;
struct THD_TRANS;
extern mysql_mutex_t LOCK_wsrep_ready;
extern mysql_cond_t COND_wsrep_ready;
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_donor_monitor;
extern my_bool wsrep_emulate_bin_log;
extern int wsrep_to_isolation;
#ifdef GTID_SUPPORT
extern rpl_sidno wsrep_sidno;
#endif /* GTID_SUPPORT */
extern my_bool wsrep_preordered_opt;
#ifdef HAVE_PSI_INTERFACE
@ -384,8 +348,6 @@ extern PSI_thread_key key_wsrep_sst_donor_monitor;
struct TABLE_LIST;
class Alter_info;
struct HA_CREATE_INFO;
int wsrep_to_isolation_begin(THD *thd, const char *db_, const char *table_,
const TABLE_LIST* table_list,
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
* (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_emulate_bin_log (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_should_replicate_ddl(X,Y) (1)
#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 */

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
#define WSREP_PRIV_H
#include <my_global.h>
#include "wsrep_mysqld.h"
#include "wsrep_schema.h"
#include <log.h>
#include <pthread.h>
#include <cstdio>
#include "wsrep_api.h"
#include "wsrep/server_state.hpp"
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_seqno_t local_seqno;
extern Wsrep_schema* wsrep_schema;
// a helper function
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_storage_service.h"
#include "wsrep_thd.h"
#include "wsrep_server_state.h"
#include <string>
#include <sstream>

View file

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

View file

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

View file

@ -26,6 +26,7 @@
#include <cstdio>
#include <cstdlib>
#include "wsrep_trans_observer.h"
#include "wsrep_server_state.h"
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
extern "C" const char *msglang(void)
{
#if defined(FRENCH)
return "french";
#else // DEFAULT
return "english";
#endif // DEFAULT
} // end of msglang
#endif // !XMSG && !NEWMSG

View file

@ -1,13 +1,5 @@
/**************************************************************************/
/* 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"
#endif /* FRENCH */
/* ---------------------------------------------------------------------- */

View file

@ -14,11 +14,7 @@
/***********************************************************************/
/* DB Constant definitions. */
/***********************************************************************/
#if defined(FRENCH)
#define DEFAULT_LOCALE "French"
#else // !FRENCH
#define DEFAULT_LOCALE "English"
#endif // !FRENCH
#define DOS_MAX_PATH 144 /* Must be the same across systems */
#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;
// 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) {
#include "enids.h"
#if defined(NEWMSG)

View file

@ -4882,6 +4882,7 @@ corrupted:
loop:
if (!block) {
invalid_page:
mtr.commit();
func_exit:
mem_heap_free(heap);
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);
#endif /* BTR_CUR_HASH_ADAPT */
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
@ -2518,6 +2518,9 @@ ignore_block:
return nullptr;
}
if (UNIV_UNLIKELY(!block->page.frame)) {
goto wait_for_unzip;
}
/* A read-fix is released after block->page.lock
in buf_page_t::read_complete() or
buf_pool_t::corrupted_evict(), or
@ -2548,7 +2551,7 @@ ignore_block:
mysql_mutex_lock(&buf_pool.mutex);
block->unfix();
if (!buf_LRU_free_page(&block->page, true)) {
if (!buf_LRU_free_page(&block->page, true)) {
ut_ad(0);
}
@ -2566,6 +2569,7 @@ ignore_block:
if (UNIV_UNLIKELY(!block->page.frame)) {
if (!block->page.lock.x_lock_try()) {
wait_for_unzip:
/* The page is being read or written, or
another thread is executing buf_zip_decompress()
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 "wsrep.h"
# include "log.h"
# include "wsrep_mysqld.h"
#endif
#include <vector>

View file

@ -2590,7 +2590,6 @@ corrupted:
if (UNIV_UNLIKELY(err != DB_SUCCESS)) {
return err;
}
return err;
}
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);
struct trx_t;
#ifdef WITH_WSREP
#include <mysql/service_wsrep.h>
#endif /* WITH_WSREP */
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++)
{
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->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_PAGE_X_MODIFY || ut_is_2pow(type));
/* If this mtr has x-fixed a clean page then we set
the made_dirty flag. This tells mtr_t::commit()
to hold log_sys.latch longer. */
/* If this mtr has U or X latched a clean page then we set
the m_made_dirty flag. This tells us if we need to
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
&& (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(
reinterpret_cast<const buf_block_t*>(object));

View file

@ -217,7 +217,9 @@ public:
/** The page was modified, affecting the encryption parameters */
APPLIED_TO_ENCRYPTION,
/** 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.
@ -299,12 +301,10 @@ public:
ut_ad(*l == OPT_PAGE_CHECKSUM);
if (page_checksum(block, l + 1))
{
applied= APPLIED_YES;
page_corrupted:
sql_print_error("InnoDB: Set innodb_force_recovery=1"
" to ignore corruption.");
recv_sys.set_corrupt_log();
return applied;
return APPLIED_CORRUPTED;
}
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;
continue;
case log_phys_t::APPLIED_YES:
case log_phys_t::APPLIED_CORRUPTED:
goto set_start_lsn;
case log_phys_t::APPLIED_TO_FSP_HEADER:
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:
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) {
init->created = false;
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();
pages.erase(p);
if (!srv_force_recovery)
{
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())

View file

@ -1649,7 +1649,7 @@ inc_dir:
{
const byte *r= 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, "");
if (c <= 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"
#endif
#ifdef WITH_WSREP
#include "wsrep_mysqld.h"
#include <wsrep.h>
#include <mysql/service_wsrep.h>
#endif /* WITH_WSREP */
/*************************************************************************

View file

@ -66,11 +66,6 @@ Created 9/17/2000 Heikki Tuuri
#include <vector>
#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. */