mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
merge from 5.5 main
This commit is contained in:
@ -1,4 +1,4 @@
|
|||||||
# Copyright (C) 2009 Sun Microsystems, Inc
|
# Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License as published by
|
# it under the terms of the GNU General Public License as published by
|
||||||
@ -13,17 +13,19 @@
|
|||||||
# along with this program; if not, write to the Free Software
|
# along with this program; if not, write to the Free Software
|
||||||
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
#Charsets and collations
|
# Charsets and collations
|
||||||
IF(NOT DEFAULT_CHARSET)
|
IF(NOT DEFAULT_CHARSET)
|
||||||
SET(DEFAULT_CHARSET "latin1")
|
SET(DEFAULT_CHARSET "latin1")
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
IF(NOT DEFAULT_COLLATIONS)
|
IF(NOT DEFAULT_COLLATION)
|
||||||
SET(DEFAULT_COLLATION "latin1_swedish_ci")
|
SET(DEFAULT_COLLATION "latin1_swedish_ci")
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
SET(CHARSETS ${DEFAULT_CHARSET} latin1 utf8 utf8mb4)
|
SET(CHARSETS ${DEFAULT_CHARSET} latin1 utf8 utf8mb4)
|
||||||
SET(CHARSETS_COMPLEX big5 cp1250 cp932 eucjpms euckr gb2312 gbk latin1 latin2 sjis tis620 ucs2 ujis utf8 utf8mb4 utf16 utf32)
|
SET(CHARSETS_COMPLEX
|
||||||
|
big5 cp1250 cp932 eucjpms euckr gb2312 gbk latin1 latin2
|
||||||
|
sjis tis620 ucs2 ujis utf8 utf8mb4 utf16 utf32)
|
||||||
|
|
||||||
SET(CHARSETS_AVAILABLE
|
SET(CHARSETS_AVAILABLE
|
||||||
binary armscii8 ascii big5 cp1250 cp1251 cp1256 cp1257
|
binary armscii8 ascii big5 cp1250 cp1251 cp1256 cp1257
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
/* Copyright (C) 2009, 2011, Oracle and/or its affiliates. All rights
|
/* Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||||
reserved
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
the Free Software Foundation; version 2 of the License.
|
the Free Software Foundation; version 2 of the License.
|
||||||
@ -516,8 +515,8 @@
|
|||||||
#cmakedefine CYBOZU 1
|
#cmakedefine CYBOZU 1
|
||||||
|
|
||||||
/* Character sets and collations */
|
/* Character sets and collations */
|
||||||
#cmakedefine MYSQL_DEFAULT_CHARSET_NAME "latin1"
|
#cmakedefine MYSQL_DEFAULT_CHARSET_NAME "@MYSQL_DEFAULT_CHARSET_NAME@"
|
||||||
#cmakedefine MYSQL_DEFAULT_COLLATION_NAME "latin1_swedish_ci"
|
#cmakedefine MYSQL_DEFAULT_COLLATION_NAME "@MYSQL_DEFAULT_COLLATION_NAME@"
|
||||||
|
|
||||||
#cmakedefine USE_MB 1
|
#cmakedefine USE_MB 1
|
||||||
#cmakedefine USE_MB_IDENT 1
|
#cmakedefine USE_MB_IDENT 1
|
||||||
|
@ -193,7 +193,7 @@ int main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (argument= arguments+1 ; *argument ; argument++)
|
for (argument= arguments+1 ; *argument ; argument++)
|
||||||
if (*argument != args_separator) /* skip arguments separator */
|
if (!my_getopt_is_args_separator(*argument)) /* skip arguments separator */
|
||||||
puts(*argument);
|
puts(*argument);
|
||||||
my_free(load_default_groups);
|
my_free(load_default_groups);
|
||||||
free_defaults(arguments);
|
free_defaults(arguments);
|
||||||
|
@ -817,7 +817,8 @@ extern void *memdup_root(MEM_ROOT *root,const void *str, size_t len);
|
|||||||
extern int get_defaults_options(int argc, char **argv,
|
extern int get_defaults_options(int argc, char **argv,
|
||||||
char **defaults, char **extra_defaults,
|
char **defaults, char **extra_defaults,
|
||||||
char **group_suffix);
|
char **group_suffix);
|
||||||
extern const char *args_separator;
|
extern my_bool my_getopt_use_args_separator;
|
||||||
|
extern my_bool my_getopt_is_args_separator(const char* arg);
|
||||||
extern int my_load_defaults(const char *conf_file, const char **groups,
|
extern int my_load_defaults(const char *conf_file, const char **groups,
|
||||||
int *argc, char ***argv, const char ***);
|
int *argc, char ***argv, const char ***);
|
||||||
extern int load_defaults(const char *conf_file, const char **groups,
|
extern int load_defaults(const char *conf_file, const char **groups,
|
||||||
|
@ -10,7 +10,6 @@ innodb.innodb_information_schema # Bug#48883 2010-05-11 alik Test "innod
|
|||||||
main.func_math @freebsd # Bug#43020 2010-05-04 alik main.func_math fails on FreeBSD in PB2
|
main.func_math @freebsd # Bug#43020 2010-05-04 alik main.func_math fails on FreeBSD in PB2
|
||||||
main.gis # Bug#52208 2010-11-24 alik gis fails on some platforms (Solaris, HP-UX, Linux)
|
main.gis # Bug#52208 2010-11-24 alik gis fails on some platforms (Solaris, HP-UX, Linux)
|
||||||
main.gis-rtree @freebsd # Bug#38965 2010-05-04 alik test cases gis-rtree, type_float, type_newdecimal fail in embedded server
|
main.gis-rtree @freebsd # Bug#38965 2010-05-04 alik test cases gis-rtree, type_float, type_newdecimal fail in embedded server
|
||||||
main.information_schema # Bug#47449 2009-09-19 alik main.information_schema and innodb.innodb_information_schema fail sporadically
|
|
||||||
main.lock_multi_bug38499 # Bug#47448 2009-09-19 alik main.lock_multi_bug38499 times out sporadically
|
main.lock_multi_bug38499 # Bug#47448 2009-09-19 alik main.lock_multi_bug38499 times out sporadically
|
||||||
main.outfile_loaddata @solaris # Bug#46895 2010-01-20 alik Test "outfile_loaddata" fails (reproducible)
|
main.outfile_loaddata @solaris # Bug#46895 2010-01-20 alik Test "outfile_loaddata" fails (reproducible)
|
||||||
main.signal_demo3 @solaris # Bug#47791 2010-01-20 alik Several test cases fail on Solaris with error Thread stack overrun
|
main.signal_demo3 @solaris # Bug#47791 2010-01-20 alik Several test cases fail on Solaris with error Thread stack overrun
|
||||||
|
43
mysql-test/include/restart_slave_sql.inc
Normal file
43
mysql-test/include/restart_slave_sql.inc
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
# ==== Purpose ====
|
||||||
|
#
|
||||||
|
# Provide a earier way to restart SQL thread when you want to stop sql thread
|
||||||
|
# and then start it immediately.
|
||||||
|
#
|
||||||
|
# Sources stop_slave_sql.inc to stop SQL thread on the current connection.
|
||||||
|
# Then issues START SLAVE SQL_THREAD and then waits until
|
||||||
|
# the SQL threads have started, or until a timeout is reached.
|
||||||
|
#
|
||||||
|
# Please use this instead of 'STOP|START SLAVE SQL_THREAD', to reduce the risk of
|
||||||
|
# test case bugs.
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# ==== Usage ====
|
||||||
|
#
|
||||||
|
# [--let $slave_timeout= NUMBER]
|
||||||
|
# [--let $rpl_debug= 1]
|
||||||
|
# --source include/restart_slave_sql.inc
|
||||||
|
#
|
||||||
|
# Parameters:
|
||||||
|
# $slave_timeout
|
||||||
|
# See include/wait_for_slave_param.inc
|
||||||
|
#
|
||||||
|
# $rpl_debug
|
||||||
|
# See include/rpl_init.inc
|
||||||
|
|
||||||
|
|
||||||
|
--let $include_filename= restart_slave.inc
|
||||||
|
--source include/begin_include_file.inc
|
||||||
|
|
||||||
|
|
||||||
|
if (!$rpl_debug)
|
||||||
|
{
|
||||||
|
--disable_query_log
|
||||||
|
}
|
||||||
|
|
||||||
|
source include/stop_slave_sql.inc;
|
||||||
|
START SLAVE SQL_THREAD;
|
||||||
|
source include/wait_for_slave_sql_to_start.inc;
|
||||||
|
|
||||||
|
|
||||||
|
--let $include_filename= restart_slave.inc
|
||||||
|
--source include/end_include_file.inc
|
2
mysql-test/include/rpl_connection_master.inc
Normal file
2
mysql-test/include/rpl_connection_master.inc
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
let $rpl_connection_name= master;
|
||||||
|
source include/rpl_connection.inc;
|
2
mysql-test/include/rpl_connection_slave.inc
Normal file
2
mysql-test/include/rpl_connection_slave.inc
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
let $rpl_connection_name= slave;
|
||||||
|
source include/rpl_connection.inc;
|
2
mysql-test/include/rpl_connection_slave1.inc
Normal file
2
mysql-test/include/rpl_connection_slave1.inc
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
let $rpl_connection_name= slave1;
|
||||||
|
source include/rpl_connection.inc;
|
@ -1684,6 +1684,21 @@ ARMENIAN CAPIT ECH 2
|
|||||||
ARMENIAN CAPIT ZA 2
|
ARMENIAN CAPIT ZA 2
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
#
|
#
|
||||||
|
# Start of 5.1 tests
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# Bug#58371 Assertion failed: !s.uses_buffer_owned_by(this) with format string function
|
||||||
|
#
|
||||||
|
SET NAMES latin1;
|
||||||
|
DO CONVERT(CAST(SUBSTRING_INDEX(FORMAT(1,'1111'), FORMAT('','Zpq'),1)
|
||||||
|
AS BINARY(0)) USING utf8);
|
||||||
|
Warnings:
|
||||||
|
Warning 1292 Truncated incorrect INTEGER value: 'Zpq'
|
||||||
|
Warning 1292 Truncated incorrect BINARY(0) value: '1.'
|
||||||
|
#
|
||||||
|
# End of 5.1 tests
|
||||||
|
#
|
||||||
|
#
|
||||||
# Start of 5.5 tests
|
# Start of 5.5 tests
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
|
@ -182,4 +182,9 @@ INSERT INTO t2 VALUES (1), (2), (3);
|
|||||||
SELECT 1 FROM t2 JOIN t1 ON 1 LIKE a GROUP BY a;
|
SELECT 1 FROM t2 JOIN t1 ON 1 LIKE a GROUP BY a;
|
||||||
1
|
1
|
||||||
DROP TABLE t1, t2;
|
DROP TABLE t1, t2;
|
||||||
|
#
|
||||||
|
# Bug#59149 valgrind warnings with "like .. escape .." function
|
||||||
|
#
|
||||||
|
SELECT '' LIKE '1' ESCAPE COUNT(1);
|
||||||
|
ERROR HY000: Incorrect arguments to ESCAPE
|
||||||
End of 5.1 tests
|
End of 5.1 tests
|
||||||
|
@ -1334,7 +1334,7 @@ CREATE DATABASE `
|
|||||||
CREATE TABLE `<60>`.`<60>` (a int) ENGINE=Memory;
|
CREATE TABLE `<60>`.`<60>` (a int) ENGINE=Memory;
|
||||||
SHOW TABLE STATUS FROM `<60>` LIKE '<27>';
|
SHOW TABLE STATUS FROM `<60>` LIKE '<27>';
|
||||||
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
|
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
|
||||||
<EFBFBD> MEMORY 10 Fixed 0 8 # # # 0 NULL NULL NULL NULL latin1_swedish_ci NULL
|
<EFBFBD> MEMORY 10 Fixed 0 # # # # 0 NULL NULL NULL NULL latin1_swedish_ci NULL
|
||||||
DROP DATABASE `<60>`;
|
DROP DATABASE `<60>`;
|
||||||
show columns from `#mysql50#????????`;
|
show columns from `#mysql50#????????`;
|
||||||
Got one of the listed errors
|
Got one of the listed errors
|
||||||
|
@ -1113,6 +1113,17 @@ SELECT UPDATEXML(NULL, (LPAD(0.1111E-15, '2011', 1)), 1);
|
|||||||
ERROR 22007: Illegal double '111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111' value found during parsing
|
ERROR 22007: Illegal double '111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111' value found during parsing
|
||||||
SELECT EXTRACTVALUE('', LPAD(0.1111E-15, '2011', 1));
|
SELECT EXTRACTVALUE('', LPAD(0.1111E-15, '2011', 1));
|
||||||
ERROR 22007: Illegal double '111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111' value found during parsing
|
ERROR 22007: Illegal double '111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111' value found during parsing
|
||||||
|
#
|
||||||
|
# Bug #44332 my_xml_scan reads behind the end of buffer
|
||||||
|
#
|
||||||
|
SELECT UPDATEXML(CONVERT(_latin1'<' USING utf8),'1','1');
|
||||||
|
UPDATEXML(CONVERT(_latin1'<' USING utf8),'1','1')
|
||||||
|
NULL
|
||||||
|
Warnings:
|
||||||
|
Warning 1525 Incorrect XML value: 'parse error at line 1 pos 2: END-OF-INPUT unexpected (ident or '/' wanted)'
|
||||||
|
SELECT UPDATEXML(CONVERT(_latin1'<!--' USING utf8),'1','1');
|
||||||
|
UPDATEXML(CONVERT(_latin1'<!--' USING utf8),'1','1')
|
||||||
|
NULL
|
||||||
End of 5.1 tests
|
End of 5.1 tests
|
||||||
#
|
#
|
||||||
# Start of 5.5 tests
|
# Start of 5.5 tests
|
||||||
|
@ -74,5 +74,47 @@ include/wait_for_slave_sql_to_start.inc
|
|||||||
|
|
||||||
# Test end
|
# Test end
|
||||||
SET GLOBAL debug= '$debug_save';
|
SET GLOBAL debug= '$debug_save';
|
||||||
|
include/restart_slave.inc
|
||||||
|
[connection master]
|
||||||
DROP TABLE t1, t2;
|
DROP TABLE t1, t2;
|
||||||
|
|
||||||
|
# Bug#58546 test rpl_packet timeout failure sporadically on PB
|
||||||
|
# ----------------------------------------------------------------------
|
||||||
|
# STOP SLAVE stopped IO thread first and then stopped SQL thread. It was
|
||||||
|
# possible that IO thread stopped after replicating part of a transaction
|
||||||
|
# which SQL thread was executing. SQL thread would be hung if the
|
||||||
|
# transaction could not be rolled back safely.
|
||||||
|
# It caused some sporadic failures on PB2.
|
||||||
|
#
|
||||||
|
# This test verifies that when 'STOP SLAVE' is issued by a user, IO
|
||||||
|
# thread will continue to fetch the rest events of the transaction which
|
||||||
|
# is being executed by SQL thread and is not able to be rolled back safely.
|
||||||
|
CREATE TABLE t1 (c1 INT KEY, c2 INT) ENGINE=InnoDB;
|
||||||
|
CREATE TABLE t2 (c1 INT) ENGINE=MyISAM;
|
||||||
|
INSERT INTO t1 VALUES(1, 1);
|
||||||
|
SET GLOBAL debug= 'd,dump_thread_wait_before_send_xid';
|
||||||
|
[connection slave]
|
||||||
|
include/restart_slave.inc
|
||||||
|
BEGIN;
|
||||||
|
UPDATE t1 SET c2 = 2 WHERE c1 = 1;
|
||||||
|
[connection master]
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO t1 VALUES(2, 2);
|
||||||
|
INSERT INTO t2 VALUES(1);
|
||||||
|
UPDATE t1 SET c2 = 3 WHERE c1 = 1;
|
||||||
|
COMMIT;
|
||||||
|
[connection slave1]
|
||||||
|
STOP SLAVE;
|
||||||
|
[connection slave]
|
||||||
|
ROLLBACK;
|
||||||
|
[connection master]
|
||||||
|
SET DEBUG_SYNC= 'now SIGNAL signal.continue';
|
||||||
|
SET DEBUG_SYNC= 'RESET';
|
||||||
|
[connection slave]
|
||||||
|
include/wait_for_slave_to_stop.inc
|
||||||
|
[connection slave1]
|
||||||
|
include/start_slave.inc
|
||||||
|
[connection master]
|
||||||
|
DROP TABLE t1, t2;
|
||||||
|
SET GLOBAL debug= $debug_save;
|
||||||
include/rpl_end.inc
|
include/rpl_end.inc
|
||||||
|
@ -12,11 +12,6 @@
|
|||||||
|
|
||||||
--source include/master-slave.inc
|
--source include/master-slave.inc
|
||||||
|
|
||||||
# The test is disabled for windows due to
|
|
||||||
# Bug #42879 CHANGE MASTER RELAY_LOG_FILE=path fails on windows
|
|
||||||
# Todo: release it from not_windows
|
|
||||||
--source include/not_windows.inc
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Bug#31240 load data infile replication between (4.0 or 4.1) and 5.1 fails
|
# Bug#31240 load data infile replication between (4.0 or 4.1) and 5.1 fails
|
||||||
#
|
#
|
||||||
|
@ -26,8 +26,8 @@ let $old_net_buffer_length= `SELECT @@global.net_buffer_length`;
|
|||||||
SET @@global.max_allowed_packet=1024;
|
SET @@global.max_allowed_packet=1024;
|
||||||
SET @@global.net_buffer_length=1024;
|
SET @@global.net_buffer_length=1024;
|
||||||
|
|
||||||
|
sync_slave_with_master;
|
||||||
# Restart slave for setting to take effect
|
# Restart slave for setting to take effect
|
||||||
connection slave;
|
|
||||||
source include/stop_slave.inc;
|
source include/stop_slave.inc;
|
||||||
source include/start_slave.inc;
|
source include/start_slave.inc;
|
||||||
|
|
||||||
|
@ -45,7 +45,69 @@ source extra/rpl_tests/rpl_stop_slave.test;
|
|||||||
--echo
|
--echo
|
||||||
--echo # Test end
|
--echo # Test end
|
||||||
SET GLOBAL debug= '$debug_save';
|
SET GLOBAL debug= '$debug_save';
|
||||||
|
source include/restart_slave_sql.inc;
|
||||||
|
|
||||||
connection master;
|
--source include/rpl_connection_master.inc
|
||||||
DROP TABLE t1, t2;
|
DROP TABLE t1, t2;
|
||||||
|
|
||||||
|
--echo
|
||||||
|
--echo # Bug#58546 test rpl_packet timeout failure sporadically on PB
|
||||||
|
--echo # ----------------------------------------------------------------------
|
||||||
|
--echo # STOP SLAVE stopped IO thread first and then stopped SQL thread. It was
|
||||||
|
--echo # possible that IO thread stopped after replicating part of a transaction
|
||||||
|
--echo # which SQL thread was executing. SQL thread would be hung if the
|
||||||
|
--echo # transaction could not be rolled back safely.
|
||||||
|
--echo # It caused some sporadic failures on PB2.
|
||||||
|
--echo #
|
||||||
|
--echo # This test verifies that when 'STOP SLAVE' is issued by a user, IO
|
||||||
|
--echo # thread will continue to fetch the rest events of the transaction which
|
||||||
|
--echo # is being executed by SQL thread and is not able to be rolled back safely.
|
||||||
|
|
||||||
|
CREATE TABLE t1 (c1 INT KEY, c2 INT) ENGINE=InnoDB;
|
||||||
|
CREATE TABLE t2 (c1 INT) ENGINE=MyISAM;
|
||||||
|
INSERT INTO t1 VALUES(1, 1);
|
||||||
|
|
||||||
|
let $debug_save= `SELECT @@GLOBAL.debug`;
|
||||||
|
SET GLOBAL debug= 'd,dump_thread_wait_before_send_xid';
|
||||||
|
|
||||||
|
sync_slave_with_master;
|
||||||
|
|
||||||
|
--source include/rpl_connection_slave.inc
|
||||||
|
source include/restart_slave_sql.inc;
|
||||||
|
|
||||||
|
BEGIN;
|
||||||
|
UPDATE t1 SET c2 = 2 WHERE c1 = 1;
|
||||||
|
|
||||||
|
--source include/rpl_connection_master.inc
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO t1 VALUES(2, 2);
|
||||||
|
INSERT INTO t2 VALUES(1);
|
||||||
|
UPDATE t1 SET c2 = 3 WHERE c1 = 1;
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
--source include/rpl_connection_slave1.inc
|
||||||
|
let $show_statement= SHOW PROCESSLIST;
|
||||||
|
let $field= Info;
|
||||||
|
let $condition= = 'UPDATE t1 SET c2 = 3 WHERE c1 = 1';
|
||||||
|
source include/wait_show_condition.inc;
|
||||||
|
|
||||||
|
send STOP SLAVE;
|
||||||
|
|
||||||
|
--source include/rpl_connection_slave.inc
|
||||||
|
ROLLBACK;
|
||||||
|
|
||||||
|
--source include/rpl_connection_master.inc
|
||||||
|
SET DEBUG_SYNC= 'now SIGNAL signal.continue';
|
||||||
|
SET DEBUG_SYNC= 'RESET';
|
||||||
|
|
||||||
|
--source include/rpl_connection_slave.inc
|
||||||
|
source include/wait_for_slave_to_stop.inc;
|
||||||
|
|
||||||
|
--source include/rpl_connection_slave1.inc
|
||||||
|
reap;
|
||||||
|
source include/start_slave.inc;
|
||||||
|
|
||||||
|
--source include/rpl_connection_master.inc
|
||||||
|
DROP TABLE t1, t2;
|
||||||
|
SET GLOBAL debug= $debug_save;
|
||||||
--source include/rpl_end.inc
|
--source include/rpl_end.inc
|
||||||
|
@ -64,12 +64,12 @@ SET last = pct;
|
|||||||
END IF;
|
END IF;
|
||||||
END WHILE;
|
END WHILE;
|
||||||
END//
|
END//
|
||||||
CREATE PROCEDURE check_pct(IN num DECIMAL)
|
CREATE PROCEDURE check_pct(IN success_on_wait BOOLEAN)
|
||||||
BEGIN
|
BEGIN
|
||||||
IF (dirty_pct() < num) THEN
|
IF (success_on_wait > 0) THEN
|
||||||
SELECT 'BELOW_MAX' AS PCT_VALUE;
|
SELECT 'BELOW_MAX' AS PCT_VALUE;
|
||||||
ELSE
|
ELSE
|
||||||
SELECT 'ABOVE_MAX' AS PCT_VALUE;
|
SELECT 'ABOVE_MAX or TimeOut Of The Test' AS PCT_VALUE;
|
||||||
END IF;
|
END IF;
|
||||||
END//
|
END//
|
||||||
CREATE TABLE t1(
|
CREATE TABLE t1(
|
||||||
@ -83,7 +83,7 @@ CALL add_until(10);
|
|||||||
FLUSH TABLES;
|
FLUSH TABLES;
|
||||||
CALL add_records(500);
|
CALL add_records(500);
|
||||||
'We expect dirty pages pct to be BELOW_MAX after some time depending on performance'
|
'We expect dirty pages pct to be BELOW_MAX after some time depending on performance'
|
||||||
CALL check_pct(10);
|
CALL check_pct(1);
|
||||||
PCT_VALUE
|
PCT_VALUE
|
||||||
BELOW_MAX
|
BELOW_MAX
|
||||||
DROP PROCEDURE add_records;
|
DROP PROCEDURE add_records;
|
||||||
|
@ -117,12 +117,12 @@ BEGIN
|
|||||||
END WHILE;
|
END WHILE;
|
||||||
END//
|
END//
|
||||||
|
|
||||||
CREATE PROCEDURE check_pct(IN num DECIMAL)
|
CREATE PROCEDURE check_pct(IN success_on_wait BOOLEAN)
|
||||||
BEGIN
|
BEGIN
|
||||||
IF (dirty_pct() < num) THEN
|
IF (success_on_wait > 0) THEN
|
||||||
SELECT 'BELOW_MAX' AS PCT_VALUE;
|
SELECT 'BELOW_MAX' AS PCT_VALUE;
|
||||||
ELSE
|
ELSE
|
||||||
SELECT 'ABOVE_MAX' AS PCT_VALUE;
|
SELECT 'ABOVE_MAX or TimeOut Of The Test' AS PCT_VALUE;
|
||||||
END IF;
|
END IF;
|
||||||
END//
|
END//
|
||||||
|
|
||||||
@ -155,7 +155,8 @@ let $wait_condition= SELECT (dirty_pct() <= @@global.innodb_max_dirty_pages_pct)
|
|||||||
--source include/wait_condition.inc
|
--source include/wait_condition.inc
|
||||||
|
|
||||||
--echo 'We expect dirty pages pct to be BELOW_MAX after some time depending on performance'
|
--echo 'We expect dirty pages pct to be BELOW_MAX after some time depending on performance'
|
||||||
CALL check_pct(10);
|
# Value For $sucess will be set from include/wait_condition.inc file. It can have values 1 or 0. It will be 1 if dirty_pct() <= @@global.innodb_max_dirty_pages_pct else it will be 0.
|
||||||
|
eval CALL check_pct($success);
|
||||||
DROP PROCEDURE add_records;
|
DROP PROCEDURE add_records;
|
||||||
DROP PROCEDURE add_until;
|
DROP PROCEDURE add_until;
|
||||||
DROP PROCEDURE check_pct;
|
DROP PROCEDURE check_pct;
|
||||||
|
@ -216,6 +216,21 @@ DROP TABLE t1;
|
|||||||
# End of 4.1 tests
|
# End of 4.1 tests
|
||||||
|
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Start of 5.1 tests
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Bug#58371 Assertion failed: !s.uses_buffer_owned_by(this) with format string function
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
SET NAMES latin1;
|
||||||
|
DO CONVERT(CAST(SUBSTRING_INDEX(FORMAT(1,'1111'), FORMAT('','Zpq'),1)
|
||||||
|
AS BINARY(0)) USING utf8);
|
||||||
|
--echo #
|
||||||
|
--echo # End of 5.1 tests
|
||||||
|
--echo #
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
--echo # Start of 5.5 tests
|
--echo # Start of 5.5 tests
|
||||||
--echo #
|
--echo #
|
||||||
|
@ -126,5 +126,10 @@ INSERT INTO t2 VALUES (1), (2), (3);
|
|||||||
SELECT 1 FROM t2 JOIN t1 ON 1 LIKE a GROUP BY a;
|
SELECT 1 FROM t2 JOIN t1 ON 1 LIKE a GROUP BY a;
|
||||||
DROP TABLE t1, t2;
|
DROP TABLE t1, t2;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Bug#59149 valgrind warnings with "like .. escape .." function
|
||||||
|
--echo #
|
||||||
|
--error ER_WRONG_ARGUMENTS
|
||||||
|
SELECT '' LIKE '1' ESCAPE COUNT(1);
|
||||||
|
|
||||||
--echo End of 5.1 tests
|
--echo End of 5.1 tests
|
||||||
|
@ -1073,7 +1073,7 @@ set names latin1;
|
|||||||
SET NAMES latin1;
|
SET NAMES latin1;
|
||||||
CREATE DATABASE `<60>`;
|
CREATE DATABASE `<60>`;
|
||||||
CREATE TABLE `<60>`.`<60>` (a int) ENGINE=Memory;
|
CREATE TABLE `<60>`.`<60>` (a int) ENGINE=Memory;
|
||||||
--replace_column 7 # 8 # 9 #
|
--replace_column 6 # 7 # 8 # 9 #
|
||||||
SHOW TABLE STATUS FROM `<60>` LIKE '<27>';
|
SHOW TABLE STATUS FROM `<60>` LIKE '<27>';
|
||||||
DROP DATABASE `<60>`;
|
DROP DATABASE `<60>`;
|
||||||
|
|
||||||
|
@ -640,6 +640,11 @@ SELECT UPDATEXML(NULL, (LPAD(0.1111E-15, '2011', 1)), 1);
|
|||||||
--error ER_ILLEGAL_VALUE_FOR_TYPE
|
--error ER_ILLEGAL_VALUE_FOR_TYPE
|
||||||
SELECT EXTRACTVALUE('', LPAD(0.1111E-15, '2011', 1));
|
SELECT EXTRACTVALUE('', LPAD(0.1111E-15, '2011', 1));
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Bug #44332 my_xml_scan reads behind the end of buffer
|
||||||
|
--echo #
|
||||||
|
SELECT UPDATEXML(CONVERT(_latin1'<' USING utf8),'1','1');
|
||||||
|
SELECT UPDATEXML(CONVERT(_latin1'<!--' USING utf8),'1','1');
|
||||||
|
|
||||||
--echo End of 5.1 tests
|
--echo End of 5.1 tests
|
||||||
|
|
||||||
|
@ -61,9 +61,23 @@
|
|||||||
check the pointer, use "----args-separator----" here to ease debug
|
check the pointer, use "----args-separator----" here to ease debug
|
||||||
if someone misused it.
|
if someone misused it.
|
||||||
|
|
||||||
|
The args seprator will only be added when
|
||||||
|
my_getopt_use_args_seprator is set to TRUE before calling
|
||||||
|
load_defaults();
|
||||||
|
|
||||||
See BUG#25192
|
See BUG#25192
|
||||||
*/
|
*/
|
||||||
const char *args_separator= "----args-separator----";
|
static const char *args_separator= "----args-separator----";
|
||||||
|
inline static void set_args_separator(char** arg)
|
||||||
|
{
|
||||||
|
DBUG_ASSERT(my_getopt_use_args_separator);
|
||||||
|
*arg= (char*)args_separator;
|
||||||
|
}
|
||||||
|
my_bool my_getopt_use_args_separator= FALSE;
|
||||||
|
my_bool my_getopt_is_args_separator(const char* arg)
|
||||||
|
{
|
||||||
|
return (arg == args_separator);
|
||||||
|
}
|
||||||
const char *my_defaults_file=0;
|
const char *my_defaults_file=0;
|
||||||
const char *my_defaults_group_suffix=0;
|
const char *my_defaults_group_suffix=0;
|
||||||
const char *my_defaults_extra_file=0;
|
const char *my_defaults_extra_file=0;
|
||||||
@ -503,6 +517,7 @@ int my_load_defaults(const char *conf_file, const char **groups,
|
|||||||
char *ptr,**res;
|
char *ptr,**res;
|
||||||
struct handle_option_ctx ctx;
|
struct handle_option_ctx ctx;
|
||||||
const char **dirs;
|
const char **dirs;
|
||||||
|
uint args_sep= my_getopt_use_args_separator ? 1 : 0;
|
||||||
DBUG_ENTER("load_defaults");
|
DBUG_ENTER("load_defaults");
|
||||||
|
|
||||||
init_alloc_root(&alloc,512,0);
|
init_alloc_root(&alloc,512,0);
|
||||||
@ -515,17 +530,28 @@ int my_load_defaults(const char *conf_file, const char **groups,
|
|||||||
if (*argc >= 2 && !strcmp(argv[0][1],"--no-defaults"))
|
if (*argc >= 2 && !strcmp(argv[0][1],"--no-defaults"))
|
||||||
{
|
{
|
||||||
/* remove the --no-defaults argument and return only the other arguments */
|
/* remove the --no-defaults argument and return only the other arguments */
|
||||||
uint i;
|
uint i, j;
|
||||||
if (!(ptr=(char*) alloc_root(&alloc,sizeof(alloc)+
|
if (!(ptr=(char*) alloc_root(&alloc,sizeof(alloc)+
|
||||||
(*argc + 1)*sizeof(char*))))
|
(*argc + 1)*sizeof(char*))))
|
||||||
goto err;
|
goto err;
|
||||||
res= (char**) (ptr+sizeof(alloc));
|
res= (char**) (ptr+sizeof(alloc));
|
||||||
res[0]= **argv; /* Copy program name */
|
res[0]= **argv; /* Copy program name */
|
||||||
/* set arguments separator */
|
j= 1; /* Start from 1 for the reset result args */
|
||||||
res[1]= (char *)args_separator;
|
if (my_getopt_use_args_separator)
|
||||||
for (i=2 ; i < (uint) *argc ; i++)
|
{
|
||||||
res[i]=argv[0][i];
|
/* set arguments separator */
|
||||||
res[i]=0; /* End pointer */
|
set_args_separator(&res[1]);
|
||||||
|
j++;
|
||||||
|
}
|
||||||
|
for (i=2 ; i < (uint) *argc ; i++, j++)
|
||||||
|
res[j]=argv[0][i];
|
||||||
|
res[j]=0; /* End pointer */
|
||||||
|
/*
|
||||||
|
Update the argc, if have not added args separator, then we have
|
||||||
|
to decrease argc because we have removed the "--no-defaults".
|
||||||
|
*/
|
||||||
|
if (!my_getopt_use_args_separator)
|
||||||
|
(*argc)--;
|
||||||
*argv=res;
|
*argv=res;
|
||||||
*(MEM_ROOT*) ptr= alloc; /* Save alloc root for free */
|
*(MEM_ROOT*) ptr= alloc; /* Save alloc root for free */
|
||||||
if (default_directories)
|
if (default_directories)
|
||||||
@ -559,7 +585,7 @@ int my_load_defaults(const char *conf_file, const char **groups,
|
|||||||
or a forced default file
|
or a forced default file
|
||||||
*/
|
*/
|
||||||
if (!(ptr=(char*) alloc_root(&alloc,sizeof(alloc)+
|
if (!(ptr=(char*) alloc_root(&alloc,sizeof(alloc)+
|
||||||
(args.elements + *argc + 1 + 1) *sizeof(char*))))
|
(args.elements + *argc + 1 + args_sep) *sizeof(char*))))
|
||||||
goto err;
|
goto err;
|
||||||
res= (char**) (ptr+sizeof(alloc));
|
res= (char**) (ptr+sizeof(alloc));
|
||||||
|
|
||||||
@ -580,16 +606,19 @@ int my_load_defaults(const char *conf_file, const char **groups,
|
|||||||
--*argc; ++*argv; /* skip argument */
|
--*argc; ++*argv; /* skip argument */
|
||||||
}
|
}
|
||||||
|
|
||||||
/* set arguments separator for arguments from config file and
|
if (my_getopt_use_args_separator)
|
||||||
command line */
|
{
|
||||||
res[args.elements+1]= (char *)args_separator;
|
/* set arguments separator for arguments from config file and
|
||||||
|
command line */
|
||||||
|
set_args_separator(&res[args.elements+1]);
|
||||||
|
}
|
||||||
|
|
||||||
if (*argc)
|
if (*argc)
|
||||||
memcpy((uchar*) (res+1+args.elements+1), (char*) ((*argv)+1),
|
memcpy((uchar*) (res+1+args.elements+args_sep), (char*) ((*argv)+1),
|
||||||
(*argc-1)*sizeof(char*));
|
(*argc-1)*sizeof(char*));
|
||||||
res[args.elements+ *argc+1]=0; /* last null */
|
res[args.elements+ *argc+args_sep]=0; /* last null */
|
||||||
|
|
||||||
(*argc)+=args.elements+1;
|
(*argc)+=args.elements+args_sep;
|
||||||
*argv= (char**) res;
|
*argv= (char**) res;
|
||||||
*(MEM_ROOT*) ptr= alloc; /* Save alloc root for free */
|
*(MEM_ROOT*) ptr= alloc; /* Save alloc root for free */
|
||||||
delete_dynamic(&args);
|
delete_dynamic(&args);
|
||||||
@ -599,7 +628,7 @@ int my_load_defaults(const char *conf_file, const char **groups,
|
|||||||
printf("%s would have been started with the following arguments:\n",
|
printf("%s would have been started with the following arguments:\n",
|
||||||
**argv);
|
**argv);
|
||||||
for (i=1 ; i < *argc ; i++)
|
for (i=1 ; i < *argc ; i++)
|
||||||
if ((*argv)[i] != args_separator) /* skip arguments separator */
|
if (!my_getopt_is_args_separator((*argv)[i])) /* skip arguments separator */
|
||||||
printf("%s ", (*argv)[i]);
|
printf("%s ", (*argv)[i]);
|
||||||
puts("");
|
puts("");
|
||||||
exit(0);
|
exit(0);
|
||||||
|
@ -176,7 +176,7 @@ int handle_options(int *argc, char ***argv,
|
|||||||
*/
|
*/
|
||||||
for (pos= *argv, pos_end=pos+ *argc; pos != pos_end ; pos++)
|
for (pos= *argv, pos_end=pos+ *argc; pos != pos_end ; pos++)
|
||||||
{
|
{
|
||||||
if (*pos == args_separator)
|
if (my_getopt_is_args_separator(*pos))
|
||||||
{
|
{
|
||||||
is_cmdline_arg= 0;
|
is_cmdline_arg= 0;
|
||||||
break;
|
break;
|
||||||
@ -188,7 +188,7 @@ int handle_options(int *argc, char ***argv,
|
|||||||
char **first= pos;
|
char **first= pos;
|
||||||
char *cur_arg= *pos;
|
char *cur_arg= *pos;
|
||||||
opt_found= 0;
|
opt_found= 0;
|
||||||
if (!is_cmdline_arg && (cur_arg == args_separator))
|
if (!is_cmdline_arg && (my_getopt_is_args_separator(cur_arg)))
|
||||||
{
|
{
|
||||||
is_cmdline_arg= 1;
|
is_cmdline_arg= 1;
|
||||||
|
|
||||||
|
@ -1207,7 +1207,7 @@ void mysql_read_default_options(struct st_mysql_options *options,
|
|||||||
char **option=argv;
|
char **option=argv;
|
||||||
while (*++option)
|
while (*++option)
|
||||||
{
|
{
|
||||||
if (option[0] == args_separator) /* skip arguments separator */
|
if (my_getopt_is_args_separator(option[0])) /* skip arguments separator */
|
||||||
continue;
|
continue;
|
||||||
/* DBUG_PRINT("info",("option: %s",option[0])); */
|
/* DBUG_PRINT("info",("option: %s",option[0])); */
|
||||||
if (option[0][0] == '-' && option[0][1] == '-')
|
if (option[0][0] == '-' && option[0][1] == '-')
|
||||||
|
@ -2959,22 +2959,16 @@ String *Item_func_conv_charset::val_str(String *str)
|
|||||||
DBUG_ASSERT(fixed == 1);
|
DBUG_ASSERT(fixed == 1);
|
||||||
if (use_cached_value)
|
if (use_cached_value)
|
||||||
return null_value ? 0 : &str_value;
|
return null_value ? 0 : &str_value;
|
||||||
/*
|
String *arg= args[0]->val_str(str);
|
||||||
Here we don't pass 'str' as a parameter to args[0]->val_str()
|
|
||||||
as 'str' may point to 'str_value' (e.g. see Item::save_in_field()),
|
|
||||||
which we use below to convert string.
|
|
||||||
Use argument's 'str_value' instead.
|
|
||||||
*/
|
|
||||||
String *arg= args[0]->val_str(&args[0]->str_value);
|
|
||||||
uint dummy_errors;
|
uint dummy_errors;
|
||||||
if (!arg)
|
if (!arg)
|
||||||
{
|
{
|
||||||
null_value=1;
|
null_value=1;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
null_value= str_value.copy(arg->ptr(),arg->length(),arg->charset(),
|
null_value= tmp_value.copy(arg->ptr(), arg->length(), arg->charset(),
|
||||||
conv_charset, &dummy_errors);
|
conv_charset, &dummy_errors);
|
||||||
return null_value ? 0 : check_well_formed_result(&str_value);
|
return null_value ? 0 : check_well_formed_result(&tmp_value);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Item_func_conv_charset::fix_length_and_dec()
|
void Item_func_conv_charset::fix_length_and_dec()
|
||||||
|
@ -791,6 +791,7 @@ public:
|
|||||||
class Item_func_conv_charset :public Item_str_func
|
class Item_func_conv_charset :public Item_str_func
|
||||||
{
|
{
|
||||||
bool use_cached_value;
|
bool use_cached_value;
|
||||||
|
String tmp_value;
|
||||||
public:
|
public:
|
||||||
bool safe;
|
bool safe;
|
||||||
CHARSET_INFO *conv_charset; // keep it public
|
CHARSET_INFO *conv_charset; // keep it public
|
||||||
|
@ -445,6 +445,7 @@ public:
|
|||||||
forced_const= TRUE;
|
forced_const= TRUE;
|
||||||
}
|
}
|
||||||
virtual bool const_item() const { return forced_const; }
|
virtual bool const_item() const { return forced_const; }
|
||||||
|
virtual bool const_during_execution() const { return false; }
|
||||||
virtual void print(String *str, enum_query_type query_type);
|
virtual void print(String *str, enum_query_type query_type);
|
||||||
void fix_num_length_and_dec();
|
void fix_num_length_and_dec();
|
||||||
|
|
||||||
|
@ -4207,8 +4207,10 @@ int mysqld_main(int argc, char **argv)
|
|||||||
|
|
||||||
orig_argc= argc;
|
orig_argc= argc;
|
||||||
orig_argv= argv;
|
orig_argv= argv;
|
||||||
|
my_getopt_use_args_separator= TRUE;
|
||||||
if (load_defaults(MYSQL_CONFIG_NAME, load_default_groups, &argc, &argv))
|
if (load_defaults(MYSQL_CONFIG_NAME, load_default_groups, &argc, &argv))
|
||||||
return 1;
|
return 1;
|
||||||
|
my_getopt_use_args_separator= FALSE;
|
||||||
defaults_argc= argc;
|
defaults_argc= argc;
|
||||||
defaults_argv= argv;
|
defaults_argv= argv;
|
||||||
remaining_argc= argc;
|
remaining_argc= argc;
|
||||||
|
48
sql/slave.cc
48
sql/slave.cc
@ -504,6 +504,30 @@ int terminate_slave_threads(Master_info* mi,int thread_mask,bool skip_lock)
|
|||||||
mysql_mutex_t *sql_lock = &mi->rli.run_lock, *io_lock = &mi->run_lock;
|
mysql_mutex_t *sql_lock = &mi->rli.run_lock, *io_lock = &mi->run_lock;
|
||||||
mysql_mutex_t *log_lock= mi->rli.relay_log.get_log_lock();
|
mysql_mutex_t *log_lock= mi->rli.relay_log.get_log_lock();
|
||||||
|
|
||||||
|
if (thread_mask & (SLAVE_SQL|SLAVE_FORCE_ALL))
|
||||||
|
{
|
||||||
|
DBUG_PRINT("info",("Terminating SQL thread"));
|
||||||
|
mi->rli.abort_slave=1;
|
||||||
|
if ((error=terminate_slave_thread(mi->rli.sql_thd, sql_lock,
|
||||||
|
&mi->rli.stop_cond,
|
||||||
|
&mi->rli.slave_running,
|
||||||
|
skip_lock)) &&
|
||||||
|
!force_all)
|
||||||
|
DBUG_RETURN(error);
|
||||||
|
|
||||||
|
mysql_mutex_lock(log_lock);
|
||||||
|
|
||||||
|
DBUG_PRINT("info",("Flushing relay-log info file."));
|
||||||
|
if (current_thd)
|
||||||
|
thd_proc_info(current_thd, "Flushing relay-log info file.");
|
||||||
|
if (flush_relay_log_info(&mi->rli))
|
||||||
|
DBUG_RETURN(ER_ERROR_DURING_FLUSH_LOGS);
|
||||||
|
|
||||||
|
if (my_sync(mi->rli.info_fd, MYF(MY_WME)))
|
||||||
|
DBUG_RETURN(ER_ERROR_DURING_FLUSH_LOGS);
|
||||||
|
|
||||||
|
mysql_mutex_unlock(log_lock);
|
||||||
|
}
|
||||||
if (thread_mask & (SLAVE_IO|SLAVE_FORCE_ALL))
|
if (thread_mask & (SLAVE_IO|SLAVE_FORCE_ALL))
|
||||||
{
|
{
|
||||||
DBUG_PRINT("info",("Terminating IO thread"));
|
DBUG_PRINT("info",("Terminating IO thread"));
|
||||||
@ -532,30 +556,6 @@ int terminate_slave_threads(Master_info* mi,int thread_mask,bool skip_lock)
|
|||||||
|
|
||||||
mysql_mutex_unlock(log_lock);
|
mysql_mutex_unlock(log_lock);
|
||||||
}
|
}
|
||||||
if (thread_mask & (SLAVE_SQL|SLAVE_FORCE_ALL))
|
|
||||||
{
|
|
||||||
DBUG_PRINT("info",("Terminating SQL thread"));
|
|
||||||
mi->rli.abort_slave=1;
|
|
||||||
if ((error=terminate_slave_thread(mi->rli.sql_thd, sql_lock,
|
|
||||||
&mi->rli.stop_cond,
|
|
||||||
&mi->rli.slave_running,
|
|
||||||
skip_lock)) &&
|
|
||||||
!force_all)
|
|
||||||
DBUG_RETURN(error);
|
|
||||||
|
|
||||||
mysql_mutex_lock(log_lock);
|
|
||||||
|
|
||||||
DBUG_PRINT("info",("Flushing relay-log info file."));
|
|
||||||
if (current_thd)
|
|
||||||
thd_proc_info(current_thd, "Flushing relay-log info file.");
|
|
||||||
if (flush_relay_log_info(&mi->rli))
|
|
||||||
DBUG_RETURN(ER_ERROR_DURING_FLUSH_LOGS);
|
|
||||||
|
|
||||||
if (my_sync(mi->rli.info_fd, MYF(MY_WME)))
|
|
||||||
DBUG_RETURN(ER_ERROR_DURING_FLUSH_LOGS);
|
|
||||||
|
|
||||||
mysql_mutex_unlock(log_lock);
|
|
||||||
}
|
|
||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,6 +25,7 @@
|
|||||||
#include "rpl_filter.h"
|
#include "rpl_filter.h"
|
||||||
#include <my_dir.h>
|
#include <my_dir.h>
|
||||||
#include "rpl_handler.h"
|
#include "rpl_handler.h"
|
||||||
|
#include "debug_sync.h"
|
||||||
|
|
||||||
int max_binlog_dump_events = 0; // unlimited
|
int max_binlog_dump_events = 0; // unlimited
|
||||||
my_bool opt_sporadic_binlog_dump_fail = 0;
|
my_bool opt_sporadic_binlog_dump_fail = 0;
|
||||||
@ -693,6 +694,19 @@ impossible position";
|
|||||||
coord->pos= uint4korr(packet->ptr() + ev_offset + LOG_POS_OFFSET);
|
coord->pos= uint4korr(packet->ptr() + ev_offset + LOG_POS_OFFSET);
|
||||||
|
|
||||||
event_type= (Log_event_type)((*packet)[LOG_EVENT_OFFSET+ev_offset]);
|
event_type= (Log_event_type)((*packet)[LOG_EVENT_OFFSET+ev_offset]);
|
||||||
|
DBUG_EXECUTE_IF("dump_thread_wait_before_send_xid",
|
||||||
|
{
|
||||||
|
if (event_type == XID_EVENT)
|
||||||
|
{
|
||||||
|
net_flush(net);
|
||||||
|
const char act[]=
|
||||||
|
"now "
|
||||||
|
"wait_for signal.continue";
|
||||||
|
DBUG_ASSERT(opt_debug_sync_timeout > 0);
|
||||||
|
DBUG_ASSERT(!debug_sync_set_action(current_thd,
|
||||||
|
STRING_WITH_LEN(act)));
|
||||||
|
}
|
||||||
|
});
|
||||||
if (event_type == FORMAT_DESCRIPTION_EVENT)
|
if (event_type == FORMAT_DESCRIPTION_EVENT)
|
||||||
{
|
{
|
||||||
binlog_can_be_corrupted= test((*packet)[FLAGS_OFFSET+ev_offset] &
|
binlog_can_be_corrupted= test((*packet)[FLAGS_OFFSET+ev_offset] &
|
||||||
@ -718,6 +732,14 @@ impossible position";
|
|||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DBUG_EXECUTE_IF("dump_thread_wait_before_send_xid",
|
||||||
|
{
|
||||||
|
if (event_type == XID_EVENT)
|
||||||
|
{
|
||||||
|
net_flush(net);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
DBUG_PRINT("info", ("log event code %d", event_type));
|
DBUG_PRINT("info", ("log event code %d", event_type));
|
||||||
if (event_type == LOAD_EVENT)
|
if (event_type == LOAD_EVENT)
|
||||||
{
|
{
|
||||||
|
@ -105,7 +105,7 @@ setup_config(atrt_config& config)
|
|||||||
*/
|
*/
|
||||||
for (j = 0; j<(size_t)argc; j++)
|
for (j = 0; j<(size_t)argc; j++)
|
||||||
{
|
{
|
||||||
if (tmp[j] == args_separator) /* skip arguments separator */
|
if (my_getopt_is_args_separator(tmp[j])) /* skip arguments separator */
|
||||||
continue;
|
continue;
|
||||||
for (k = 0; proc_args[k].name; k++)
|
for (k = 0; proc_args[k].name; k++)
|
||||||
{
|
{
|
||||||
@ -375,7 +375,7 @@ load_options(int argc, char** argv, int type, atrt_options& opts)
|
|||||||
* Skip the separator for arguments from config file and command
|
* Skip the separator for arguments from config file and command
|
||||||
* line
|
* line
|
||||||
*/
|
*/
|
||||||
if (argv[i] == args_separator)
|
if (my_getopt_is_args_separator(argv[i]))
|
||||||
continue;
|
continue;
|
||||||
for (size_t j = 0; f_options[j].name; j++)
|
for (size_t j = 0; f_options[j].name; j++)
|
||||||
{
|
{
|
||||||
|
@ -106,6 +106,13 @@ static void my_xml_norm_text(MY_XML_ATTR *a)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static inline my_bool
|
||||||
|
my_xml_parser_prefix_cmp(MY_XML_PARSER *p, const char *s, size_t slen)
|
||||||
|
{
|
||||||
|
return (p->cur + slen > p->end) || memcmp(p->cur, s, slen);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static int my_xml_scan(MY_XML_PARSER *p,MY_XML_ATTR *a)
|
static int my_xml_scan(MY_XML_PARSER *p,MY_XML_ATTR *a)
|
||||||
{
|
{
|
||||||
int lex;
|
int lex;
|
||||||
@ -123,16 +130,20 @@ static int my_xml_scan(MY_XML_PARSER *p,MY_XML_ATTR *a)
|
|||||||
a->beg=p->cur;
|
a->beg=p->cur;
|
||||||
a->end=p->cur;
|
a->end=p->cur;
|
||||||
|
|
||||||
if ((p->end - p->cur > 3) && !memcmp(p->cur,"<!--",4))
|
if (!my_xml_parser_prefix_cmp(p, C_STRING_WITH_LEN("<!--")))
|
||||||
{
|
{
|
||||||
for (; (p->cur < p->end) && memcmp(p->cur, "-->", 3); p->cur++)
|
for (; p->cur < p->end; p->cur++)
|
||||||
{}
|
{
|
||||||
if (!memcmp(p->cur, "-->", 3))
|
if (!my_xml_parser_prefix_cmp(p, C_STRING_WITH_LEN("-->")))
|
||||||
p->cur+=3;
|
{
|
||||||
|
p->cur+= 3;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
a->end=p->cur;
|
a->end=p->cur;
|
||||||
lex=MY_XML_COMMENT;
|
lex=MY_XML_COMMENT;
|
||||||
}
|
}
|
||||||
else if (!memcmp(p->cur, "<![CDATA[",9))
|
else if (!my_xml_parser_prefix_cmp(p, C_STRING_WITH_LEN("<![CDATA[")))
|
||||||
{
|
{
|
||||||
p->cur+= 9;
|
p->cur+= 9;
|
||||||
for (; p->cur < p->end - 2 ; p->cur++)
|
for (; p->cur < p->end - 2 ; p->cur++)
|
||||||
|
Reference in New Issue
Block a user