1
0
mirror of https://github.com/MariaDB/server.git synced 2025-08-01 03:47:19 +03:00

auto-merge

This commit is contained in:
Tatiana A. Nurnberg
2009-01-09 16:48:02 +01:00
28 changed files with 695 additions and 177 deletions

View File

@ -1327,6 +1327,35 @@ static int run_tool(const char *tool_path, DYNAMIC_STRING *ds_res, ...)
DBUG_RETURN(ret); DBUG_RETURN(ret);
} }
/*
Test if diff is present. This is needed on Windows systems
as the OS returns 1 whether diff is successful or if it is
not present.
We run diff -v and look for output in stdout.
We don't redirect stderr to stdout to make for a simplified check
Windows will output '"diff"' is not recognized... to stderr if it is
not present.
*/
int diff_check()
{
char buf[512]= {0};
FILE *res_file;
char *cmd = "diff -v";
int have_diff = 0;
if (!(res_file= popen(cmd, "r")))
die("popen(\"%s\", \"r\") failed", cmd);
/* if diff is not present, nothing will be in stdout to increment have_diff */
if (fgets(buf, sizeof(buf), res_file))
{
have_diff += 1;
}
pclose(res_file);
return have_diff;
}
/* /*
Show the diff of two files using the systems builtin diff Show the diff of two files using the systems builtin diff
@ -1346,34 +1375,51 @@ void show_diff(DYNAMIC_STRING* ds,
{ {
DYNAMIC_STRING ds_tmp; DYNAMIC_STRING ds_tmp;
int have_diff = 0;
if (init_dynamic_string(&ds_tmp, "", 256, 256)) if (init_dynamic_string(&ds_tmp, "", 256, 256))
die("Out of memory"); die("Out of memory");
/* determine if we have diff on Windows
needs special processing due to return values
on that OS
*/
have_diff = diff_check();
/* First try with unified diff */ if (have_diff)
if (run_tool("diff",
&ds_tmp, /* Get output from diff in ds_tmp */
"-u",
filename1,
filename2,
"2>&1",
NULL) > 1) /* Most "diff" tools return >1 if error */
{ {
dynstr_set(&ds_tmp, ""); /* First try with unified diff */
/* Fallback to context diff with "diff -c" */
if (run_tool("diff", if (run_tool("diff",
&ds_tmp, /* Get output from diff in ds_tmp */ &ds_tmp, /* Get output from diff in ds_tmp */
"-c", "-u",
filename1, filename1,
filename2, filename2,
"2>&1", "2>&1",
NULL) > 1) /* Most "diff" tools return >1 if error */ NULL) > 1) /* Most "diff" tools return >1 if error */
{ {
/* dynstr_set(&ds_tmp, "");
Fallback to dump both files to result file and inform
about installing "diff" /* Fallback to context diff with "diff -c" */
*/ if (run_tool("diff",
&ds_tmp, /* Get output from diff in ds_tmp */
"-c",
filename1,
filename2,
"2>&1",
NULL) > 1) /* Most "diff" tools return >1 if error */
{
have_diff= 1;
}
}
}
if (!(have_diff))
{
/*
Fallback to dump both files to result file and inform
about installing "diff"
*/
dynstr_set(&ds_tmp, ""); dynstr_set(&ds_tmp, "");
dynstr_append(&ds_tmp, dynstr_append(&ds_tmp,
@ -1397,8 +1443,7 @@ void show_diff(DYNAMIC_STRING* ds,
dynstr_append(&ds_tmp, " >>>\n"); dynstr_append(&ds_tmp, " >>>\n");
cat_file(&ds_tmp, filename2); cat_file(&ds_tmp, filename2);
dynstr_append(&ds_tmp, "<<<<\n"); dynstr_append(&ds_tmp, "<<<<\n");
} }
}
if (ds) if (ds)
{ {

View File

@ -617,10 +617,10 @@ call p_verify_status_increment(0, 0, 0, 0);
--echo --echo
--echo # No test because of Bug#8729 "rename table fails on temporary table" --echo # No test because of Bug#8729 "rename table fails on temporary table"
--echo # 24. DDL: TRUNCATE TEMPORARY TABLE, does not start a transaction --echo # 24. DDL: TRUNCATE TEMPORARY TABLE
--echo --echo
truncate table t2; truncate table t2;
call p_verify_status_increment(2, 0, 2, 0); call p_verify_status_increment(4, 0, 4, 0);
commit; commit;
--echo # There is nothing left to commit --echo # There is nothing left to commit
call p_verify_status_increment(0, 0, 0, 0); call p_verify_status_increment(0, 0, 0, 0);
@ -733,7 +733,7 @@ call p_verify_status_increment(1, 0, 1, 0);
rename table t4 to t3; rename table t4 to t3;
call p_verify_status_increment(1, 0, 1, 0); call p_verify_status_increment(1, 0, 1, 0);
truncate table t3; truncate table t3;
call p_verify_status_increment(2, 2, 2, 2); call p_verify_status_increment(4, 4, 2, 2);
create view v1 as select * from t2; create view v1 as select * from t2;
call p_verify_status_increment(1, 0, 1, 0); call p_verify_status_increment(1, 0, 1, 0);
check table t1; check table t1;

View File

@ -11,6 +11,6 @@ eval SET @@global.sort_buffer_size = $save;
--enable_query_log --enable_query_log
if (!$mach32) if (!$mach32)
{ {
skip Need a 32 bit machine; skip Need a 32 bit machine/binary;
} }

View File

@ -9,6 +9,6 @@ eval SET @@session.sort_buffer_size = $save;
--enable_query_log --enable_query_log
if (!$mach64) if (!$mach64)
{ {
skip Need a 64 bit machine; skip Need a 64 binary ;
} }

View File

@ -683,10 +683,10 @@ SUCCESS
# 23. DDL: RENAME TEMPORARY TABLE, does not start a transaction # 23. DDL: RENAME TEMPORARY TABLE, does not start a transaction
# No test because of Bug#8729 "rename table fails on temporary table" # No test because of Bug#8729 "rename table fails on temporary table"
# 24. DDL: TRUNCATE TEMPORARY TABLE, does not start a transaction # 24. DDL: TRUNCATE TEMPORARY TABLE
truncate table t2; truncate table t2;
call p_verify_status_increment(2, 0, 2, 0); call p_verify_status_increment(4, 0, 4, 0);
SUCCESS SUCCESS
commit; commit;
@ -853,7 +853,7 @@ call p_verify_status_increment(1, 0, 1, 0);
SUCCESS SUCCESS
truncate table t3; truncate table t3;
call p_verify_status_increment(2, 2, 2, 2); call p_verify_status_increment(4, 4, 2, 2);
SUCCESS SUCCESS
create view v1 as select * from t2; create view v1 as select * from t2;

View File

@ -1767,4 +1767,83 @@ ref NULL
rows 6 rows 6
Extra Using where; Using index Extra Using where; Using index
DROP TABLE foo, bar, foo2; DROP TABLE foo, bar, foo2;
DROP TABLE IF EXISTS t1,t3,t2;
DROP FUNCTION IF EXISTS f1;
CREATE FUNCTION f1() RETURNS VARCHAR(250)
BEGIN
return 'hhhhhhh' ;
END|
CREATE TABLE t1 (a VARCHAR(20), b VARCHAR(20), c VARCHAR(20)) ENGINE=INNODB;
BEGIN WORK;
CREATE TEMPORARY TABLE t2 (a VARCHAR(20), b VARCHAR(20), c varchar(20)) ENGINE=INNODB;
CREATE TEMPORARY TABLE t3 LIKE t2;
INSERT INTO t1 VALUES ('a','b',NULL),('c','d',NULL),('e','f',NULL);
SET @stmt := CONCAT('INSERT INTO t2 SELECT tbl.a, tbl.b, f1()',' FROM t1 tbl');
PREPARE stmt1 FROM @stmt;
SET @stmt := CONCAT('INSERT INTO t3', ' SELECT * FROM t2');
PREPARE stmt3 FROM @stmt;
EXECUTE stmt1;
COMMIT;
DEALLOCATE PREPARE stmt1;
DEALLOCATE PREPARE stmt3;
DROP TABLE t1,t3,t2;
DROP FUNCTION f1;
DROP TABLE IF EXISTS t1,t2;
CREATE TABLE t1 (id INT NOT NULL, PRIMARY KEY (id)) ENGINE=INNODB;
CREATE TABLE t2 (id INT PRIMARY KEY,
t1_id INT, INDEX par_ind (t1_id),
FOREIGN KEY (t1_id) REFERENCES t1(id)) ENGINE=INNODB;
INSERT INTO t1 VALUES (1),(2);
INSERT INTO t2 VALUES (3,2);
SET AUTOCOMMIT = 0;
START TRANSACTION;
TRUNCATE TABLE t1;
ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails (`test`.`t2`, CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`t1_id`) REFERENCES `t1` (`id`))
SELECT * FROM t1;
id
1
2
COMMIT;
SELECT * FROM t1;
id
1
2
START TRANSACTION;
TRUNCATE TABLE t1;
ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails (`test`.`t2`, CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`t1_id`) REFERENCES `t1` (`id`))
SELECT * FROM t1;
id
1
2
ROLLBACK;
SELECT * FROM t1;
id
1
2
SET AUTOCOMMIT = 1;
START TRANSACTION;
SELECT * FROM t1;
id
1
2
COMMIT;
TRUNCATE TABLE t1;
ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails (`test`.`t2`, CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`t1_id`) REFERENCES `t1` (`id`))
SELECT * FROM t1;
id
1
2
DELETE FROM t2 WHERE id = 3;
START TRANSACTION;
SELECT * FROM t1;
id
1
2
TRUNCATE TABLE t1;
ROLLBACK;
SELECT * FROM t1;
id
TRUNCATE TABLE t2;
DROP TABLE t2;
DROP TABLE t1;
End of 5.1 tests End of 5.1 tests

View File

@ -1,4 +1,16 @@
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9; drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
CREATE TABLE t1
(a INT NOT NULL AUTO_INCREMENT,
b DATETIME,
PRIMARY KEY (a,b),
KEY (b))
PARTITION BY RANGE (to_days(b))
(PARTITION p0 VALUES LESS THAN (733681) COMMENT = 'LESS THAN 2008-10-01',
PARTITION p1 VALUES LESS THAN (733712) COMMENT = 'LESS THAN 2008-11-01',
PARTITION pX VALUES LESS THAN MAXVALUE);
SELECT a,b FROM t1 WHERE b >= '2008-12-01' AND b < '2009-12-00';
a b
DROP TABLE t1;
create table t1 ( a int not null) partition by hash(a) partitions 2; create table t1 ( a int not null) partition by hash(a) partitions 2;
insert into t1 values (1),(2),(3); insert into t1 values (1),(2),(3);
explain select * from t1 where a=5 and a=6; explain select * from t1 where a=5 and a=6;

View File

@ -194,4 +194,20 @@ DELETE FROM t1;
SELECT * FROM t1; SELECT * FROM t1;
a b a b
DROP TABLE t1; DROP TABLE t1;
DROP TABLE IF EXISTS t1,t2;
DROP FUNCTION IF EXISTS f1;
CREATE TEMPORARY TABLE t1 (a INT);
CREATE TEMPORARY TABLE t2 LIKE t1;
CREATE FUNCTION f1() RETURNS INT
BEGIN
return 1;
END|
INSERT INTO t2 SELECT * FROM t1;
INSERT INTO t1 SELECT f1();
CREATE TABLE t3 SELECT * FROM t1;
INSERT INTO t1 SELECT f1();
UPDATE t1,t2 SET t1.a = t2.a;
INSERT INTO t2 SELECT f1();
DROP TABLE t1,t2,t3;
DROP FUNCTION f1;
End of 5.1 tests End of 5.1 tests

View File

@ -113,16 +113,17 @@ master-bin.000001 # Table_map # # table_id: # (test.t1)
master-bin.000001 # Update_rows # # table_id: # flags: STMT_END_F master-bin.000001 # Update_rows # # table_id: # flags: STMT_END_F
master-bin.000001 # Xid # # COMMIT /* XID */ master-bin.000001 # Xid # # COMMIT /* XID */
DROP TABLE t1; DROP TABLE t1;
flush status;
show status like "binlog_cache_use"; show status like "binlog_cache_use";
Variable_name Value Variable_name Value
Binlog_cache_use 13 Binlog_cache_use 0
show status like "binlog_cache_disk_use"; show status like "binlog_cache_disk_use";
Variable_name Value Variable_name Value
Binlog_cache_disk_use 0 Binlog_cache_disk_use 0
create table t1 (a int) engine=innodb; create table t1 (a int) engine=innodb;
show status like "binlog_cache_use"; show status like "binlog_cache_use";
Variable_name Value Variable_name Value
Binlog_cache_use 14 Binlog_cache_use 1
show status like "binlog_cache_disk_use"; show status like "binlog_cache_disk_use";
Variable_name Value Variable_name Value
Binlog_cache_disk_use 1 Binlog_cache_disk_use 1
@ -131,7 +132,7 @@ delete from t1;
commit; commit;
show status like "binlog_cache_use"; show status like "binlog_cache_use";
Variable_name Value Variable_name Value
Binlog_cache_use 15 Binlog_cache_use 2
show status like "binlog_cache_disk_use"; show status like "binlog_cache_disk_use";
Variable_name Value Variable_name Value
Binlog_cache_disk_use 1 Binlog_cache_disk_use 1

View File

@ -101,6 +101,7 @@ DROP TABLE t1;
# Actually this test has nothing to do with innodb per se, it just requires # Actually this test has nothing to do with innodb per se, it just requires
# transactional table. # transactional table.
# #
flush status;
show status like "binlog_cache_use"; show status like "binlog_cache_use";
show status like "binlog_cache_disk_use"; show status like "binlog_cache_disk_use";

View File

@ -40,9 +40,12 @@
# Save initial value # # Save initial value #
############################################################# #############################################################
# due to differences when running on Windows (bug filed) # due to differences when running on Windows (Bug#36695)
--source include/not_windows.inc --source include/not_windows.inc
let $kbrange32 = BETWEEN 32776 AND 32999;
let $mbrange2 = BETWEEN 2097116 AND 2100000;
--disable_warnings --disable_warnings
SET @start_global_value = @@global.sort_buffer_size; SET @start_global_value = @@global.sort_buffer_size;
@ -55,11 +58,13 @@ SET @start_session_value = @@session.sort_buffer_size;
SET @@global.sort_buffer_size = 1000; SET @@global.sort_buffer_size = 1000;
SET @@global.sort_buffer_size = DEFAULT; SET @@global.sort_buffer_size = DEFAULT;
SELECT @@global.sort_buffer_size >= 2097116 AND @@global.sort_buffer_size < 3000000; eval
SELECT @@global.sort_buffer_size $mbrange2;
SET @@session.sort_buffer_size = 2000; SET @@session.sort_buffer_size = 2000;
SET @@session.sort_buffer_size = DEFAULT; SET @@session.sort_buffer_size = DEFAULT;
SELECT @@session.sort_buffer_size >= 2097116 AND @@session.sort_buffer_size < 3000000; eval
SELECT @@session.sort_buffer_size $mbrange2;
--echo '#--------------------FN_DYNVARS_151_02-------------------------#' --echo '#--------------------FN_DYNVARS_151_02-------------------------#'
@ -68,10 +73,12 @@ SELECT @@session.sort_buffer_size >= 2097116 AND @@session.sort_buffer_size < 30
###################################################################### ######################################################################
SET @@global.sort_buffer_size = DEFAULT; SET @@global.sort_buffer_size = DEFAULT;
SELECT @@global.sort_buffer_size >= 2097116 AND @@global.sort_buffer_size < 3000000; eval
SELECT @@global.sort_buffer_size $mbrange2;
SET @@session.sort_buffer_size = DEFAULT; SET @@session.sort_buffer_size = DEFAULT;
SELECT @@session.sort_buffer_size >= 2097116 AND @@session.sort_buffer_size < 3000000; eval
SELECT @@session.sort_buffer_size $mbrange2;
--echo '#--------------------FN_DYNVARS_151_03-------------------------#' --echo '#--------------------FN_DYNVARS_151_03-------------------------#'
@ -80,9 +87,11 @@ SELECT @@session.sort_buffer_size >= 2097116 AND @@session.sort_buffer_size < 30
################################################################################ ################################################################################
SET @@global.sort_buffer_size = 32776; SET @@global.sort_buffer_size = 32776;
SELECT @@global.sort_buffer_size >= 32776 AND @@global.sort_buffer_size < 33000; eval
SELECT @@global.sort_buffer_size $kbrange32;
SET @@global.sort_buffer_size = 32777; SET @@global.sort_buffer_size = 32777;
SELECT @@global.sort_buffer_size >= 32776 AND @@global.sort_buffer_size < 33000; eval
SELECT @@global.sort_buffer_size $kbrange32;
SET @@global.sort_buffer_size = 4294967295; SET @@global.sort_buffer_size = 4294967295;
SELECT @@global.sort_buffer_size; SELECT @@global.sort_buffer_size;
SET @@global.sort_buffer_size = 4294967294; SET @@global.sort_buffer_size = 4294967294;
@ -94,9 +103,11 @@ SELECT @@global.sort_buffer_size;
################################################################################### ###################################################################################
SET @@session.sort_buffer_size = 32776; SET @@session.sort_buffer_size = 32776;
SELECT @@session.sort_buffer_size >= 32776 AND @@session.sort_buffer_size < 33000; eval
SELECT @@session.sort_buffer_size $kbrange32;
SET @@session.sort_buffer_size = 32777; SET @@session.sort_buffer_size = 32777;
SELECT @@session.sort_buffer_size >= 32776 AND @@session.sort_buffer_size < 33000; eval
SELECT @@session.sort_buffer_size $kbrange32;
SET @@session.sort_buffer_size = 4294967295; SET @@session.sort_buffer_size = 4294967295;
SELECT @@session.sort_buffer_size; SELECT @@session.sort_buffer_size;
SET @@session.sort_buffer_size = 4294967294; SET @@session.sort_buffer_size = 4294967294;
@ -109,9 +120,11 @@ SELECT @@session.sort_buffer_size;
################################################################## ##################################################################
SET @@global.sort_buffer_size = 32775; SET @@global.sort_buffer_size = 32775;
SELECT @@global.sort_buffer_size >= 32776 AND @@global.sort_buffer_size < 33000; eval
SELECT @@global.sort_buffer_size $kbrange32;
SET @@global.sort_buffer_size = -1024; SET @@global.sort_buffer_size = -1024;
SELECT @@global.sort_buffer_size >= 32776 AND @@global.sort_buffer_size < 33000; eval
SELECT @@global.sort_buffer_size $kbrange32;
SET @@global.sort_buffer_size = 4294967296; SET @@global.sort_buffer_size = 4294967296;
SELECT @@global.sort_buffer_size; SELECT @@global.sort_buffer_size;
--Error ER_PARSE_ERROR --Error ER_PARSE_ERROR
@ -122,9 +135,11 @@ SET @@global.sort_buffer_size = test;
SELECT @@global.sort_buffer_size; SELECT @@global.sort_buffer_size;
SET @@session.sort_buffer_size = 32775; SET @@session.sort_buffer_size = 32775;
SELECT @@session.sort_buffer_size >= 32776 AND @@session.sort_buffer_size < 33000; eval
SELECT @@session.sort_buffer_size $kbrange32;
SET @@session.sort_buffer_size = -2; SET @@session.sort_buffer_size = -2;
SELECT @@session.sort_buffer_size >= 32776 AND @@session.sort_buffer_size < 33000; eval
SELECT @@session.sort_buffer_size $kbrange32;
--Error ER_PARSE_ERROR --Error ER_PARSE_ERROR
SET @@session.sort_buffer_size = 65530.34.; SET @@session.sort_buffer_size = 65530.34.;
SET @@session.sort_buffer_size = 4294967296; SET @@session.sort_buffer_size = 4294967296;
@ -148,7 +163,7 @@ SELECT @@global.sort_buffer_size = VARIABLE_VALUE FROM
#################################################################### ####################################################################
SELECT @@session.sort_buffer_size = VARIABLE_VALUE FROM SELECT @@session.sort_buffer_size = VARIABLE_VALUE FROM
INFORMATION_SCHEMA.SESSION_VARIABLES WHERE VARIABLE_NAME='sort_buffer_size'; INFORMATION_SCHEMA.SESSION_VARIABLES WHERE VARIABLE_NAME='sort_buffer_size';
--echo '#------------------FN_DYNVARS_151_08-----------------------#' --echo '#------------------FN_DYNVARS_151_08-----------------------#'
@ -157,9 +172,11 @@ SELECT @@session.sort_buffer_size = VARIABLE_VALUE FROM
#################################################################### ####################################################################
SET @@global.sort_buffer_size = TRUE; SET @@global.sort_buffer_size = TRUE;
SELECT @@global.sort_buffer_size >= 32776 AND @@global.sort_buffer_size < 33000; eval
SELECT @@global.sort_buffer_size $kbrange32;
SET @@global.sort_buffer_size = FALSE; SET @@global.sort_buffer_size = FALSE;
SELECT @@global.sort_buffer_size >= 32776 AND @@global.sort_buffer_size < 33000; eval
SELECT @@global.sort_buffer_size $kbrange32;
--echo '#---------------------FN_DYNVARS_151_09----------------------#' --echo '#---------------------FN_DYNVARS_151_09----------------------#'
#################################################################################### ####################################################################################
@ -185,7 +202,8 @@ SELECT @@local.sort_buffer_size = @@session.sort_buffer_size;
################################################################################### ###################################################################################
SET sort_buffer_size = 9100; SET sort_buffer_size = 9100;
SELECT @@sort_buffer_size >= 32776 AND @@sort_buffer_size < 33000; eval
SELECT @@sort_buffer_size $kbrange32;
--Error ER_UNKNOWN_TABLE --Error ER_UNKNOWN_TABLE
SELECT local.sort_buffer_size; SELECT local.sort_buffer_size;
--Error ER_UNKNOWN_TABLE --Error ER_UNKNOWN_TABLE

View File

@ -3,31 +3,31 @@ SET @start_session_value = @@session.sort_buffer_size;
'#--------------------FN_DYNVARS_151_01-------------------------#' '#--------------------FN_DYNVARS_151_01-------------------------#'
SET @@global.sort_buffer_size = 1000; SET @@global.sort_buffer_size = 1000;
SET @@global.sort_buffer_size = DEFAULT; SET @@global.sort_buffer_size = DEFAULT;
SELECT @@global.sort_buffer_size >= 2097116 AND @@global.sort_buffer_size < 3000000; SELECT @@global.sort_buffer_size BETWEEN 2097116 AND 2100000;
@@global.sort_buffer_size >= 2097116 AND @@global.sort_buffer_size < 3000000 @@global.sort_buffer_size BETWEEN 2097116 AND 2100000
1 1
SET @@session.sort_buffer_size = 2000; SET @@session.sort_buffer_size = 2000;
SET @@session.sort_buffer_size = DEFAULT; SET @@session.sort_buffer_size = DEFAULT;
SELECT @@session.sort_buffer_size >= 2097116 AND @@session.sort_buffer_size < 3000000; SELECT @@session.sort_buffer_size BETWEEN 2097116 AND 2100000;
@@session.sort_buffer_size >= 2097116 AND @@session.sort_buffer_size < 3000000 @@session.sort_buffer_size BETWEEN 2097116 AND 2100000
1 1
'#--------------------FN_DYNVARS_151_02-------------------------#' '#--------------------FN_DYNVARS_151_02-------------------------#'
SET @@global.sort_buffer_size = DEFAULT; SET @@global.sort_buffer_size = DEFAULT;
SELECT @@global.sort_buffer_size >= 2097116 AND @@global.sort_buffer_size < 3000000; SELECT @@global.sort_buffer_size BETWEEN 2097116 AND 2100000;
@@global.sort_buffer_size >= 2097116 AND @@global.sort_buffer_size < 3000000 @@global.sort_buffer_size BETWEEN 2097116 AND 2100000
1 1
SET @@session.sort_buffer_size = DEFAULT; SET @@session.sort_buffer_size = DEFAULT;
SELECT @@session.sort_buffer_size >= 2097116 AND @@session.sort_buffer_size < 3000000; SELECT @@session.sort_buffer_size BETWEEN 2097116 AND 2100000;
@@session.sort_buffer_size >= 2097116 AND @@session.sort_buffer_size < 3000000 @@session.sort_buffer_size BETWEEN 2097116 AND 2100000
1 1
'#--------------------FN_DYNVARS_151_03-------------------------#' '#--------------------FN_DYNVARS_151_03-------------------------#'
SET @@global.sort_buffer_size = 32776; SET @@global.sort_buffer_size = 32776;
SELECT @@global.sort_buffer_size >= 32776 AND @@global.sort_buffer_size < 33000; SELECT @@global.sort_buffer_size BETWEEN 32776 AND 32999;
@@global.sort_buffer_size >= 32776 AND @@global.sort_buffer_size < 33000 @@global.sort_buffer_size BETWEEN 32776 AND 32999
1 1
SET @@global.sort_buffer_size = 32777; SET @@global.sort_buffer_size = 32777;
SELECT @@global.sort_buffer_size >= 32776 AND @@global.sort_buffer_size < 33000; SELECT @@global.sort_buffer_size BETWEEN 32776 AND 32999;
@@global.sort_buffer_size >= 32776 AND @@global.sort_buffer_size < 33000 @@global.sort_buffer_size BETWEEN 32776 AND 32999
1 1
SET @@global.sort_buffer_size = 4294967295; SET @@global.sort_buffer_size = 4294967295;
SELECT @@global.sort_buffer_size; SELECT @@global.sort_buffer_size;
@ -39,12 +39,12 @@ SELECT @@global.sort_buffer_size;
4294967294 4294967294
'#--------------------FN_DYNVARS_151_04-------------------------#' '#--------------------FN_DYNVARS_151_04-------------------------#'
SET @@session.sort_buffer_size = 32776; SET @@session.sort_buffer_size = 32776;
SELECT @@session.sort_buffer_size >= 32776 AND @@session.sort_buffer_size < 33000; SELECT @@session.sort_buffer_size BETWEEN 32776 AND 32999;
@@session.sort_buffer_size >= 32776 AND @@session.sort_buffer_size < 33000 @@session.sort_buffer_size BETWEEN 32776 AND 32999
1 1
SET @@session.sort_buffer_size = 32777; SET @@session.sort_buffer_size = 32777;
SELECT @@session.sort_buffer_size >= 32776 AND @@session.sort_buffer_size < 33000; SELECT @@session.sort_buffer_size BETWEEN 32776 AND 32999;
@@session.sort_buffer_size >= 32776 AND @@session.sort_buffer_size < 33000 @@session.sort_buffer_size BETWEEN 32776 AND 32999
1 1
SET @@session.sort_buffer_size = 4294967295; SET @@session.sort_buffer_size = 4294967295;
SELECT @@session.sort_buffer_size; SELECT @@session.sort_buffer_size;
@ -56,12 +56,12 @@ SELECT @@session.sort_buffer_size;
4294967294 4294967294
'#------------------FN_DYNVARS_151_05-----------------------#' '#------------------FN_DYNVARS_151_05-----------------------#'
SET @@global.sort_buffer_size = 32775; SET @@global.sort_buffer_size = 32775;
SELECT @@global.sort_buffer_size >= 32776 AND @@global.sort_buffer_size < 33000; SELECT @@global.sort_buffer_size BETWEEN 32776 AND 32999;
@@global.sort_buffer_size >= 32776 AND @@global.sort_buffer_size < 33000 @@global.sort_buffer_size BETWEEN 32776 AND 32999
1 1
SET @@global.sort_buffer_size = -1024; SET @@global.sort_buffer_size = -1024;
SELECT @@global.sort_buffer_size >= 32776 AND @@global.sort_buffer_size < 33000; SELECT @@global.sort_buffer_size BETWEEN 32776 AND 32999;
@@global.sort_buffer_size >= 32776 AND @@global.sort_buffer_size < 33000 @@global.sort_buffer_size BETWEEN 32776 AND 32999
1 1
SET @@global.sort_buffer_size = 4294967296; SET @@global.sort_buffer_size = 4294967296;
SELECT @@global.sort_buffer_size; SELECT @@global.sort_buffer_size;
@ -78,12 +78,12 @@ SELECT @@global.sort_buffer_size;
@@global.sort_buffer_size @@global.sort_buffer_size
4294967295 4294967295
SET @@session.sort_buffer_size = 32775; SET @@session.sort_buffer_size = 32775;
SELECT @@session.sort_buffer_size >= 32776 AND @@session.sort_buffer_size < 33000; SELECT @@session.sort_buffer_size BETWEEN 32776 AND 32999;
@@session.sort_buffer_size >= 32776 AND @@session.sort_buffer_size < 33000 @@session.sort_buffer_size BETWEEN 32776 AND 32999
1 1
SET @@session.sort_buffer_size = -2; SET @@session.sort_buffer_size = -2;
SELECT @@session.sort_buffer_size >= 32776 AND @@session.sort_buffer_size < 33000; SELECT @@session.sort_buffer_size BETWEEN 32776 AND 32999;
@@session.sort_buffer_size >= 32776 AND @@session.sort_buffer_size < 33000 @@session.sort_buffer_size BETWEEN 32776 AND 32999
1 1
SET @@session.sort_buffer_size = 65530.34.; SET @@session.sort_buffer_size = 65530.34.;
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '.' at line 1 ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '.' at line 1
@ -105,12 +105,12 @@ INFORMATION_SCHEMA.SESSION_VARIABLES WHERE VARIABLE_NAME='sort_buffer_size';
1 1
'#------------------FN_DYNVARS_151_08-----------------------#' '#------------------FN_DYNVARS_151_08-----------------------#'
SET @@global.sort_buffer_size = TRUE; SET @@global.sort_buffer_size = TRUE;
SELECT @@global.sort_buffer_size >= 32776 AND @@global.sort_buffer_size < 33000; SELECT @@global.sort_buffer_size BETWEEN 32776 AND 32999;
@@global.sort_buffer_size >= 32776 AND @@global.sort_buffer_size < 33000 @@global.sort_buffer_size BETWEEN 32776 AND 32999
1 1
SET @@global.sort_buffer_size = FALSE; SET @@global.sort_buffer_size = FALSE;
SELECT @@global.sort_buffer_size >= 32776 AND @@global.sort_buffer_size < 33000; SELECT @@global.sort_buffer_size BETWEEN 32776 AND 32999;
@@global.sort_buffer_size >= 32776 AND @@global.sort_buffer_size < 33000 @@global.sort_buffer_size BETWEEN 32776 AND 32999
1 1
'#---------------------FN_DYNVARS_151_09----------------------#' '#---------------------FN_DYNVARS_151_09----------------------#'
SET @@global.sort_buffer_size = 9000; SET @@global.sort_buffer_size = 9000;
@ -127,8 +127,8 @@ SELECT @@local.sort_buffer_size = @@session.sort_buffer_size;
1 1
'#---------------------FN_DYNVARS_151_11----------------------#' '#---------------------FN_DYNVARS_151_11----------------------#'
SET sort_buffer_size = 9100; SET sort_buffer_size = 9100;
SELECT @@sort_buffer_size >= 32776 AND @@sort_buffer_size < 33000; SELECT @@sort_buffer_size BETWEEN 32776 AND 32999;
@@sort_buffer_size >= 32776 AND @@sort_buffer_size < 33000 @@sort_buffer_size BETWEEN 32776 AND 32999
1 1
SELECT local.sort_buffer_size; SELECT local.sort_buffer_size;
ERROR 42S02: Unknown table 'local' in field list ERROR 42S02: Unknown table 'local' in field list

View File

@ -3,31 +3,31 @@ SET @start_session_value = @@session.sort_buffer_size;
'#--------------------FN_DYNVARS_151_01-------------------------#' '#--------------------FN_DYNVARS_151_01-------------------------#'
SET @@global.sort_buffer_size = 1000; SET @@global.sort_buffer_size = 1000;
SET @@global.sort_buffer_size = DEFAULT; SET @@global.sort_buffer_size = DEFAULT;
SELECT @@global.sort_buffer_size >= 2097116 AND @@global.sort_buffer_size < 3000000; SELECT @@global.sort_buffer_size BETWEEN 2097116 AND 2100000;
@@global.sort_buffer_size >= 2097116 AND @@global.sort_buffer_size < 3000000 @@global.sort_buffer_size BETWEEN 2097116 AND 2100000
1 1
SET @@session.sort_buffer_size = 2000; SET @@session.sort_buffer_size = 2000;
SET @@session.sort_buffer_size = DEFAULT; SET @@session.sort_buffer_size = DEFAULT;
SELECT @@session.sort_buffer_size >= 2097116 AND @@session.sort_buffer_size < 3000000; SELECT @@session.sort_buffer_size BETWEEN 2097116 AND 2100000;
@@session.sort_buffer_size >= 2097116 AND @@session.sort_buffer_size < 3000000 @@session.sort_buffer_size BETWEEN 2097116 AND 2100000
1 1
'#--------------------FN_DYNVARS_151_02-------------------------#' '#--------------------FN_DYNVARS_151_02-------------------------#'
SET @@global.sort_buffer_size = DEFAULT; SET @@global.sort_buffer_size = DEFAULT;
SELECT @@global.sort_buffer_size >= 2097116 AND @@global.sort_buffer_size < 3000000; SELECT @@global.sort_buffer_size BETWEEN 2097116 AND 2100000;
@@global.sort_buffer_size >= 2097116 AND @@global.sort_buffer_size < 3000000 @@global.sort_buffer_size BETWEEN 2097116 AND 2100000
1 1
SET @@session.sort_buffer_size = DEFAULT; SET @@session.sort_buffer_size = DEFAULT;
SELECT @@session.sort_buffer_size >= 2097116 AND @@session.sort_buffer_size < 3000000; SELECT @@session.sort_buffer_size BETWEEN 2097116 AND 2100000;
@@session.sort_buffer_size >= 2097116 AND @@session.sort_buffer_size < 3000000 @@session.sort_buffer_size BETWEEN 2097116 AND 2100000
1 1
'#--------------------FN_DYNVARS_151_03-------------------------#' '#--------------------FN_DYNVARS_151_03-------------------------#'
SET @@global.sort_buffer_size = 32776; SET @@global.sort_buffer_size = 32776;
SELECT @@global.sort_buffer_size >= 32776 AND @@global.sort_buffer_size < 33000; SELECT @@global.sort_buffer_size BETWEEN 32776 AND 32999;
@@global.sort_buffer_size >= 32776 AND @@global.sort_buffer_size < 33000 @@global.sort_buffer_size BETWEEN 32776 AND 32999
1 1
SET @@global.sort_buffer_size = 32777; SET @@global.sort_buffer_size = 32777;
SELECT @@global.sort_buffer_size >= 32776 AND @@global.sort_buffer_size < 33000; SELECT @@global.sort_buffer_size BETWEEN 32776 AND 32999;
@@global.sort_buffer_size >= 32776 AND @@global.sort_buffer_size < 33000 @@global.sort_buffer_size BETWEEN 32776 AND 32999
1 1
SET @@global.sort_buffer_size = 4294967295; SET @@global.sort_buffer_size = 4294967295;
SELECT @@global.sort_buffer_size; SELECT @@global.sort_buffer_size;
@ -39,12 +39,12 @@ SELECT @@global.sort_buffer_size;
4294967294 4294967294
'#--------------------FN_DYNVARS_151_04-------------------------#' '#--------------------FN_DYNVARS_151_04-------------------------#'
SET @@session.sort_buffer_size = 32776; SET @@session.sort_buffer_size = 32776;
SELECT @@session.sort_buffer_size >= 32776 AND @@session.sort_buffer_size < 33000; SELECT @@session.sort_buffer_size BETWEEN 32776 AND 32999;
@@session.sort_buffer_size >= 32776 AND @@session.sort_buffer_size < 33000 @@session.sort_buffer_size BETWEEN 32776 AND 32999
1 1
SET @@session.sort_buffer_size = 32777; SET @@session.sort_buffer_size = 32777;
SELECT @@session.sort_buffer_size >= 32776 AND @@session.sort_buffer_size < 33000; SELECT @@session.sort_buffer_size BETWEEN 32776 AND 32999;
@@session.sort_buffer_size >= 32776 AND @@session.sort_buffer_size < 33000 @@session.sort_buffer_size BETWEEN 32776 AND 32999
1 1
SET @@session.sort_buffer_size = 4294967295; SET @@session.sort_buffer_size = 4294967295;
SELECT @@session.sort_buffer_size; SELECT @@session.sort_buffer_size;
@ -56,12 +56,12 @@ SELECT @@session.sort_buffer_size;
4294967294 4294967294
'#------------------FN_DYNVARS_151_05-----------------------#' '#------------------FN_DYNVARS_151_05-----------------------#'
SET @@global.sort_buffer_size = 32775; SET @@global.sort_buffer_size = 32775;
SELECT @@global.sort_buffer_size >= 32776 AND @@global.sort_buffer_size < 33000; SELECT @@global.sort_buffer_size BETWEEN 32776 AND 32999;
@@global.sort_buffer_size >= 32776 AND @@global.sort_buffer_size < 33000 @@global.sort_buffer_size BETWEEN 32776 AND 32999
1 1
SET @@global.sort_buffer_size = -1024; SET @@global.sort_buffer_size = -1024;
SELECT @@global.sort_buffer_size >= 32776 AND @@global.sort_buffer_size < 33000; SELECT @@global.sort_buffer_size BETWEEN 32776 AND 32999;
@@global.sort_buffer_size >= 32776 AND @@global.sort_buffer_size < 33000 @@global.sort_buffer_size BETWEEN 32776 AND 32999
1 1
SET @@global.sort_buffer_size = 4294967296; SET @@global.sort_buffer_size = 4294967296;
SELECT @@global.sort_buffer_size; SELECT @@global.sort_buffer_size;
@ -78,12 +78,12 @@ SELECT @@global.sort_buffer_size;
@@global.sort_buffer_size @@global.sort_buffer_size
4294967296 4294967296
SET @@session.sort_buffer_size = 32775; SET @@session.sort_buffer_size = 32775;
SELECT @@session.sort_buffer_size >= 32776 AND @@session.sort_buffer_size < 33000; SELECT @@session.sort_buffer_size BETWEEN 32776 AND 32999;
@@session.sort_buffer_size >= 32776 AND @@session.sort_buffer_size < 33000 @@session.sort_buffer_size BETWEEN 32776 AND 32999
1 1
SET @@session.sort_buffer_size = -2; SET @@session.sort_buffer_size = -2;
SELECT @@session.sort_buffer_size >= 32776 AND @@session.sort_buffer_size < 33000; SELECT @@session.sort_buffer_size BETWEEN 32776 AND 32999;
@@session.sort_buffer_size >= 32776 AND @@session.sort_buffer_size < 33000 @@session.sort_buffer_size BETWEEN 32776 AND 32999
1 1
SET @@session.sort_buffer_size = 65530.34.; SET @@session.sort_buffer_size = 65530.34.;
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '.' at line 1 ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '.' at line 1
@ -105,12 +105,12 @@ INFORMATION_SCHEMA.SESSION_VARIABLES WHERE VARIABLE_NAME='sort_buffer_size';
1 1
'#------------------FN_DYNVARS_151_08-----------------------#' '#------------------FN_DYNVARS_151_08-----------------------#'
SET @@global.sort_buffer_size = TRUE; SET @@global.sort_buffer_size = TRUE;
SELECT @@global.sort_buffer_size >= 32776 AND @@global.sort_buffer_size < 33000; SELECT @@global.sort_buffer_size BETWEEN 32776 AND 32999;
@@global.sort_buffer_size >= 32776 AND @@global.sort_buffer_size < 33000 @@global.sort_buffer_size BETWEEN 32776 AND 32999
1 1
SET @@global.sort_buffer_size = FALSE; SET @@global.sort_buffer_size = FALSE;
SELECT @@global.sort_buffer_size >= 32776 AND @@global.sort_buffer_size < 33000; SELECT @@global.sort_buffer_size BETWEEN 32776 AND 32999;
@@global.sort_buffer_size >= 32776 AND @@global.sort_buffer_size < 33000 @@global.sort_buffer_size BETWEEN 32776 AND 32999
1 1
'#---------------------FN_DYNVARS_151_09----------------------#' '#---------------------FN_DYNVARS_151_09----------------------#'
SET @@global.sort_buffer_size = 9000; SET @@global.sort_buffer_size = 9000;
@ -127,8 +127,8 @@ SELECT @@local.sort_buffer_size = @@session.sort_buffer_size;
1 1
'#---------------------FN_DYNVARS_151_11----------------------#' '#---------------------FN_DYNVARS_151_11----------------------#'
SET sort_buffer_size = 9100; SET sort_buffer_size = 9100;
SELECT @@sort_buffer_size >= 32776 AND @@sort_buffer_size < 33000; SELECT @@sort_buffer_size BETWEEN 32776 AND 32999;
@@sort_buffer_size >= 32776 AND @@sort_buffer_size < 33000 @@sort_buffer_size BETWEEN 32776 AND 32999
1 1
SELECT local.sort_buffer_size; SELECT local.sort_buffer_size;
ERROR 42S02: Unknown table 'local' in field list ERROR 42S02: Unknown table 'local' in field list

View File

@ -91,4 +91,97 @@ INSERT INTO foo2 SELECT * FROM foo;
DROP TABLE foo, bar, foo2; DROP TABLE foo, bar, foo2;
#
# Bug#41348: INSERT INTO tbl SELECT * FROM temp_tbl overwrites locking type of temp table
#
--disable_warnings
DROP TABLE IF EXISTS t1,t3,t2;
DROP FUNCTION IF EXISTS f1;
--enable_warnings
DELIMITER |;
CREATE FUNCTION f1() RETURNS VARCHAR(250)
BEGIN
return 'hhhhhhh' ;
END|
DELIMITER ;|
CREATE TABLE t1 (a VARCHAR(20), b VARCHAR(20), c VARCHAR(20)) ENGINE=INNODB;
BEGIN WORK;
CREATE TEMPORARY TABLE t2 (a VARCHAR(20), b VARCHAR(20), c varchar(20)) ENGINE=INNODB;
CREATE TEMPORARY TABLE t3 LIKE t2;
INSERT INTO t1 VALUES ('a','b',NULL),('c','d',NULL),('e','f',NULL);
SET @stmt := CONCAT('INSERT INTO t2 SELECT tbl.a, tbl.b, f1()',' FROM t1 tbl');
PREPARE stmt1 FROM @stmt;
SET @stmt := CONCAT('INSERT INTO t3', ' SELECT * FROM t2');
PREPARE stmt3 FROM @stmt;
EXECUTE stmt1;
COMMIT;
DEALLOCATE PREPARE stmt1;
DEALLOCATE PREPARE stmt3;
DROP TABLE t1,t3,t2;
DROP FUNCTION f1;
#
# Bug#37016: TRUNCATE TABLE removes some rows but not all
#
--disable_warnings
DROP TABLE IF EXISTS t1,t2;
--enable_warnings
CREATE TABLE t1 (id INT NOT NULL, PRIMARY KEY (id)) ENGINE=INNODB;
CREATE TABLE t2 (id INT PRIMARY KEY,
t1_id INT, INDEX par_ind (t1_id),
FOREIGN KEY (t1_id) REFERENCES t1(id)) ENGINE=INNODB;
INSERT INTO t1 VALUES (1),(2);
INSERT INTO t2 VALUES (3,2);
SET AUTOCOMMIT = 0;
START TRANSACTION;
--error ER_ROW_IS_REFERENCED_2
TRUNCATE TABLE t1;
SELECT * FROM t1;
COMMIT;
SELECT * FROM t1;
START TRANSACTION;
--error ER_ROW_IS_REFERENCED_2
TRUNCATE TABLE t1;
SELECT * FROM t1;
ROLLBACK;
SELECT * FROM t1;
SET AUTOCOMMIT = 1;
START TRANSACTION;
SELECT * FROM t1;
COMMIT;
--error ER_ROW_IS_REFERENCED_2
TRUNCATE TABLE t1;
SELECT * FROM t1;
DELETE FROM t2 WHERE id = 3;
START TRANSACTION;
SELECT * FROM t1;
TRUNCATE TABLE t1;
ROLLBACK;
SELECT * FROM t1;
TRUNCATE TABLE t2;
DROP TABLE t2;
DROP TABLE t1;
--echo End of 5.1 tests --echo End of 5.1 tests

View File

@ -8,6 +8,22 @@
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9; drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
--enable_warnings --enable_warnings
#
# Bug#40972: some sql execution lead the whole database crashing
#
# Setup so the start is at partition pX and end is at p1
# Pruning does handle 'bad' dates differently.
CREATE TABLE t1
(a INT NOT NULL AUTO_INCREMENT,
b DATETIME,
PRIMARY KEY (a,b),
KEY (b))
PARTITION BY RANGE (to_days(b))
(PARTITION p0 VALUES LESS THAN (733681) COMMENT = 'LESS THAN 2008-10-01',
PARTITION p1 VALUES LESS THAN (733712) COMMENT = 'LESS THAN 2008-11-01',
PARTITION pX VALUES LESS THAN MAXVALUE);
SELECT a,b FROM t1 WHERE b >= '2008-12-01' AND b < '2009-12-00';
DROP TABLE t1;
# Check if we can infer from condition on partition fields that # Check if we can infer from condition on partition fields that
# no records will match. # no records will match.

View File

@ -204,4 +204,35 @@ DELETE FROM t1;
SELECT * FROM t1; SELECT * FROM t1;
DROP TABLE t1; DROP TABLE t1;
#
# Bug#41348: INSERT INTO tbl SELECT * FROM temp_tbl overwrites locking type of temp table
#
--disable_warnings
DROP TABLE IF EXISTS t1,t2;
DROP FUNCTION IF EXISTS f1;
--enable_warnings
CREATE TEMPORARY TABLE t1 (a INT);
CREATE TEMPORARY TABLE t2 LIKE t1;
DELIMITER |;
CREATE FUNCTION f1() RETURNS INT
BEGIN
return 1;
END|
DELIMITER ;|
INSERT INTO t2 SELECT * FROM t1;
INSERT INTO t1 SELECT f1();
CREATE TABLE t3 SELECT * FROM t1;
INSERT INTO t1 SELECT f1();
UPDATE t1,t2 SET t1.a = t2.a;
INSERT INTO t2 SELECT f1();
DROP TABLE t1,t2,t3;
DROP FUNCTION f1;
--echo End of 5.1 tests --echo End of 5.1 tests

View File

@ -4815,7 +4815,7 @@ int ha_partition::info(uint flag)
/* /*
Calculates statistical variables Calculates statistical variables
records: Estimate of number records in table records: Estimate of number records in table
We report sum (always at least 2) We report sum (always at least 2 if not empty)
deleted: Estimate of number holes in the table due to deleted: Estimate of number holes in the table due to
deletes deletes
We report sum We report sum
@ -4854,13 +4854,13 @@ int ha_partition::info(uint flag)
stats.check_time= file->stats.check_time; stats.check_time= file->stats.check_time;
} }
} while (*(++file_array)); } while (*(++file_array));
if (stats.records < 2 && if (stats.records && stats.records < 2 &&
!(m_file[0]->ha_table_flags() & HA_STATS_RECORDS_IS_EXACT)) !(m_file[0]->ha_table_flags() & HA_STATS_RECORDS_IS_EXACT))
stats.records= 2; stats.records= 2;
if (stats.records > 0) if (stats.records > 0)
stats.mean_rec_length= (ulong) (stats.data_file_length / stats.records); stats.mean_rec_length= (ulong) (stats.data_file_length / stats.records);
else else
stats.mean_rec_length= 1; //? What should we set here stats.mean_rec_length= 0;
} }
if (flag & HA_STATUS_CONST) if (flag & HA_STATUS_CONST)
{ {

View File

@ -3425,7 +3425,8 @@ Format_description_log_event(uint8 binlog_ver, const char* server_ver)
number_of_event_types= LOG_EVENT_TYPES; number_of_event_types= LOG_EVENT_TYPES;
/* we'll catch my_malloc() error in is_valid() */ /* we'll catch my_malloc() error in is_valid() */
post_header_len=(uint8*) my_malloc(number_of_event_types*sizeof(uint8), post_header_len=(uint8*) my_malloc(number_of_event_types*sizeof(uint8),
MYF(MY_ZEROFILL)); MYF(0));
/* /*
This long list of assignments is not beautiful, but I see no way to This long list of assignments is not beautiful, but I see no way to
make it nicer, as the right members are #defines, not array members, so make it nicer, as the right members are #defines, not array members, so
@ -3433,16 +3434,40 @@ Format_description_log_event(uint8 binlog_ver, const char* server_ver)
*/ */
if (post_header_len) if (post_header_len)
{ {
// Allows us to sanity-check that all events initialized their
// events (see the end of this 'if' block).
IF_DBUG(memset(post_header_len, 255,
number_of_event_types*sizeof(uint8)););
/* Note: all event types must explicitly fill in their lengths here. */
post_header_len[START_EVENT_V3-1]= START_V3_HEADER_LEN; post_header_len[START_EVENT_V3-1]= START_V3_HEADER_LEN;
post_header_len[QUERY_EVENT-1]= QUERY_HEADER_LEN; post_header_len[QUERY_EVENT-1]= QUERY_HEADER_LEN;
post_header_len[STOP_EVENT-1]= STOP_HEADER_LEN;
post_header_len[ROTATE_EVENT-1]= ROTATE_HEADER_LEN; post_header_len[ROTATE_EVENT-1]= ROTATE_HEADER_LEN;
post_header_len[INTVAR_EVENT-1]= INTVAR_HEADER_LEN;
post_header_len[LOAD_EVENT-1]= LOAD_HEADER_LEN; post_header_len[LOAD_EVENT-1]= LOAD_HEADER_LEN;
post_header_len[SLAVE_EVENT-1]= SLAVE_HEADER_LEN;
post_header_len[CREATE_FILE_EVENT-1]= CREATE_FILE_HEADER_LEN; post_header_len[CREATE_FILE_EVENT-1]= CREATE_FILE_HEADER_LEN;
post_header_len[APPEND_BLOCK_EVENT-1]= APPEND_BLOCK_HEADER_LEN; post_header_len[APPEND_BLOCK_EVENT-1]= APPEND_BLOCK_HEADER_LEN;
post_header_len[EXEC_LOAD_EVENT-1]= EXEC_LOAD_HEADER_LEN; post_header_len[EXEC_LOAD_EVENT-1]= EXEC_LOAD_HEADER_LEN;
post_header_len[DELETE_FILE_EVENT-1]= DELETE_FILE_HEADER_LEN; post_header_len[DELETE_FILE_EVENT-1]= DELETE_FILE_HEADER_LEN;
post_header_len[NEW_LOAD_EVENT-1]= post_header_len[LOAD_EVENT-1]; post_header_len[NEW_LOAD_EVENT-1]= NEW_LOAD_HEADER_LEN;
post_header_len[RAND_EVENT-1]= RAND_HEADER_LEN;
post_header_len[USER_VAR_EVENT-1]= USER_VAR_HEADER_LEN;
post_header_len[FORMAT_DESCRIPTION_EVENT-1]= FORMAT_DESCRIPTION_HEADER_LEN; post_header_len[FORMAT_DESCRIPTION_EVENT-1]= FORMAT_DESCRIPTION_HEADER_LEN;
post_header_len[XID_EVENT-1]= XID_HEADER_LEN;
post_header_len[BEGIN_LOAD_QUERY_EVENT-1]= BEGIN_LOAD_QUERY_HEADER_LEN;
post_header_len[EXECUTE_LOAD_QUERY_EVENT-1]= EXECUTE_LOAD_QUERY_HEADER_LEN;
/*
The PRE_GA events are never be written to any binlog, but
their lengths are included in Format_description_log_event.
Hence, we need to be assign some value here, to avoid reading
uninitialized memory when the array is written to disk.
*/
post_header_len[PRE_GA_WRITE_ROWS_EVENT-1] = 0;
post_header_len[PRE_GA_UPDATE_ROWS_EVENT-1] = 0;
post_header_len[PRE_GA_DELETE_ROWS_EVENT-1] = 0;
post_header_len[TABLE_MAP_EVENT-1]= TABLE_MAP_HEADER_LEN; post_header_len[TABLE_MAP_EVENT-1]= TABLE_MAP_HEADER_LEN;
post_header_len[WRITE_ROWS_EVENT-1]= ROWS_HEADER_LEN; post_header_len[WRITE_ROWS_EVENT-1]= ROWS_HEADER_LEN;
post_header_len[UPDATE_ROWS_EVENT-1]= ROWS_HEADER_LEN; post_header_len[UPDATE_ROWS_EVENT-1]= ROWS_HEADER_LEN;
@ -3462,9 +3487,14 @@ Format_description_log_event(uint8 binlog_ver, const char* server_ver)
post_header_len[WRITE_ROWS_EVENT-1]= post_header_len[WRITE_ROWS_EVENT-1]=
post_header_len[UPDATE_ROWS_EVENT-1]= post_header_len[UPDATE_ROWS_EVENT-1]=
post_header_len[DELETE_ROWS_EVENT-1]= 6;); post_header_len[DELETE_ROWS_EVENT-1]= 6;);
post_header_len[BEGIN_LOAD_QUERY_EVENT-1]= post_header_len[APPEND_BLOCK_EVENT-1];
post_header_len[EXECUTE_LOAD_QUERY_EVENT-1]= EXECUTE_LOAD_QUERY_HEADER_LEN;
post_header_len[INCIDENT_EVENT-1]= INCIDENT_HEADER_LEN; post_header_len[INCIDENT_EVENT-1]= INCIDENT_HEADER_LEN;
// Sanity-check that all post header lengths are initialized.
IF_DBUG({
int i;
for (i=0; i<number_of_event_types; i++)
assert(post_header_len[i] != 255);
});
} }
break; break;
@ -4813,7 +4843,9 @@ Intvar_log_event::Intvar_log_event(const char* buf,
const Format_description_log_event* description_event) const Format_description_log_event* description_event)
:Log_event(buf, description_event) :Log_event(buf, description_event)
{ {
buf+= description_event->common_header_len; /* The Post-Header is empty. The Varible Data part begins immediately. */
buf+= description_event->common_header_len +
description_event->post_header_len[INTVAR_EVENT-1];
type= buf[I_TYPE_OFFSET]; type= buf[I_TYPE_OFFSET];
val= uint8korr(buf+I_VAL_OFFSET); val= uint8korr(buf+I_VAL_OFFSET);
} }
@ -4957,7 +4989,9 @@ Rand_log_event::Rand_log_event(const char* buf,
const Format_description_log_event* description_event) const Format_description_log_event* description_event)
:Log_event(buf, description_event) :Log_event(buf, description_event)
{ {
buf+= description_event->common_header_len; /* The Post-Header is empty. The Variable Data part begins immediately. */
buf+= description_event->common_header_len +
description_event->post_header_len[RAND_EVENT-1];
seed1= uint8korr(buf+RAND_SEED1_OFFSET); seed1= uint8korr(buf+RAND_SEED1_OFFSET);
seed2= uint8korr(buf+RAND_SEED2_OFFSET); seed2= uint8korr(buf+RAND_SEED2_OFFSET);
} }
@ -5061,7 +5095,9 @@ Xid_log_event(const char* buf,
const Format_description_log_event *description_event) const Format_description_log_event *description_event)
:Log_event(buf, description_event) :Log_event(buf, description_event)
{ {
buf+= description_event->common_header_len; /* The Post-Header is empty. The Variable Data part begins immediately. */
buf+= description_event->common_header_len +
description_event->post_header_len[XID_EVENT-1];
memcpy((char*) &xid, buf, sizeof(xid)); memcpy((char*) &xid, buf, sizeof(xid));
} }
@ -5207,7 +5243,9 @@ User_var_log_event(const char* buf,
const Format_description_log_event* description_event) const Format_description_log_event* description_event)
:Log_event(buf, description_event) :Log_event(buf, description_event)
{ {
buf+= description_event->common_header_len; /* The Post-Header is empty. The Variable Data part begins immediately. */
buf+= description_event->common_header_len +
description_event->post_header_len[USER_VAR_EVENT-1];
name_len= uint4korr(buf); name_len= uint4korr(buf);
name= (char *) buf + UV_NAME_LEN_SIZE; name= (char *) buf + UV_NAME_LEN_SIZE;
buf+= UV_NAME_LEN_SIZE + name_len; buf+= UV_NAME_LEN_SIZE + name_len;

View File

@ -227,14 +227,22 @@ struct sql_ex_info
#define QUERY_HEADER_MINIMAL_LEN (4 + 4 + 1 + 2) #define QUERY_HEADER_MINIMAL_LEN (4 + 4 + 1 + 2)
// where 5.0 differs: 2 for len of N-bytes vars. // where 5.0 differs: 2 for len of N-bytes vars.
#define QUERY_HEADER_LEN (QUERY_HEADER_MINIMAL_LEN + 2) #define QUERY_HEADER_LEN (QUERY_HEADER_MINIMAL_LEN + 2)
#define STOP_HEADER_LEN 0
#define LOAD_HEADER_LEN (4 + 4 + 4 + 1 +1 + 4) #define LOAD_HEADER_LEN (4 + 4 + 4 + 1 +1 + 4)
#define SLAVE_HEADER_LEN 0
#define START_V3_HEADER_LEN (2 + ST_SERVER_VER_LEN + 4) #define START_V3_HEADER_LEN (2 + ST_SERVER_VER_LEN + 4)
#define ROTATE_HEADER_LEN 8 // this is FROZEN (the Rotate post-header is frozen) #define ROTATE_HEADER_LEN 8 // this is FROZEN (the Rotate post-header is frozen)
#define INTVAR_HEADER_LEN 0
#define CREATE_FILE_HEADER_LEN 4 #define CREATE_FILE_HEADER_LEN 4
#define APPEND_BLOCK_HEADER_LEN 4 #define APPEND_BLOCK_HEADER_LEN 4
#define EXEC_LOAD_HEADER_LEN 4 #define EXEC_LOAD_HEADER_LEN 4
#define DELETE_FILE_HEADER_LEN 4 #define DELETE_FILE_HEADER_LEN 4
#define NEW_LOAD_HEADER_LEN LOAD_HEADER_LEN
#define RAND_HEADER_LEN 0
#define USER_VAR_HEADER_LEN 0
#define FORMAT_DESCRIPTION_HEADER_LEN (START_V3_HEADER_LEN+1+LOG_EVENT_TYPES) #define FORMAT_DESCRIPTION_HEADER_LEN (START_V3_HEADER_LEN+1+LOG_EVENT_TYPES)
#define XID_HEADER_LEN 0
#define BEGIN_LOAD_QUERY_HEADER_LEN APPEND_BLOCK_HEADER_LEN
#define ROWS_HEADER_LEN 8 #define ROWS_HEADER_LEN 8
#define TABLE_MAP_HEADER_LEN 8 #define TABLE_MAP_HEADER_LEN 8
#define EXECUTE_LOAD_QUERY_EXTRA_HEADER_LEN (4 + 4 + 4 + 1) #define EXECUTE_LOAD_QUERY_EXTRA_HEADER_LEN (4 + 4 + 4 + 1)
@ -319,18 +327,16 @@ struct sql_ex_info
#define Q_CHARSET_DATABASE_CODE 8 #define Q_CHARSET_DATABASE_CODE 8
#define Q_TABLE_MAP_FOR_UPDATE_CODE 9 #define Q_TABLE_MAP_FOR_UPDATE_CODE 9
/* Intvar event post-header */
/* Intvar event data */
#define I_TYPE_OFFSET 0 #define I_TYPE_OFFSET 0
#define I_VAL_OFFSET 1 #define I_VAL_OFFSET 1
/* Rand event post-header */ /* Rand event data */
#define RAND_SEED1_OFFSET 0 #define RAND_SEED1_OFFSET 0
#define RAND_SEED2_OFFSET 8 #define RAND_SEED2_OFFSET 8
/* User_var event post-header */ /* User_var event data */
#define UV_VAL_LEN_SIZE 4 #define UV_VAL_LEN_SIZE 4
#define UV_VAL_IS_NULL 1 #define UV_VAL_IS_NULL 1
#define UV_VAL_TYPE_SIZE 1 #define UV_VAL_TYPE_SIZE 1
@ -338,7 +344,6 @@ struct sql_ex_info
#define UV_CHARSET_NUMBER_SIZE 4 #define UV_CHARSET_NUMBER_SIZE 4
/* Load event post-header */ /* Load event post-header */
#define L_THREAD_ID_OFFSET 0 #define L_THREAD_ID_OFFSET 0
#define L_EXEC_TIME_OFFSET 4 #define L_EXEC_TIME_OFFSET 4
#define L_SKIP_LINES_OFFSET 8 #define L_SKIP_LINES_OFFSET 8
@ -349,7 +354,6 @@ struct sql_ex_info
#define L_DATA_OFFSET LOAD_HEADER_LEN #define L_DATA_OFFSET LOAD_HEADER_LEN
/* Rotate event post-header */ /* Rotate event post-header */
#define R_POS_OFFSET 0 #define R_POS_OFFSET 0
#define R_IDENT_OFFSET 8 #define R_IDENT_OFFSET 8
@ -2206,10 +2210,11 @@ protected:
@section Intvar_log_event_binary_format Binary Format @section Intvar_log_event_binary_format Binary Format
The Post-Header has two components: The Post-Header for this event type is empty. The Body has two
components:
<table> <table>
<caption>Post-Header for Intvar_log_event</caption> <caption>Body for Intvar_log_event</caption>
<tr> <tr>
<th>Name</th> <th>Name</th>
@ -2283,11 +2288,12 @@ private:
which are stored internally as two 64-bit numbers. which are stored internally as two 64-bit numbers.
@section Rand_log_event_binary_format Binary Format @section Rand_log_event_binary_format Binary Format
This event type has no Post-Header. The Body of this event type has
two components: The Post-Header for this event type is empty. The Body has two
components:
<table> <table>
<caption>Post-Header for Intvar_log_event</caption> <caption>Body for Rand_log_event</caption>
<tr> <tr>
<th>Name</th> <th>Name</th>

View File

@ -644,6 +644,16 @@ err:
} }
#endif #endif
/**
Execute a SHOW SLAVE HOSTS statement.
@param thd Pointer to THD object for the client thread executing the
statement.
@retval FALSE success
@retval TRUE failure
*/
bool show_slave_hosts(THD* thd) bool show_slave_hosts(THD* thd)
{ {
List<Item> field_list; List<Item> field_list;

View File

@ -1527,14 +1527,14 @@ bool sys_var_thd_ulong::update(THD *thd, set_var *var)
ulonglong tmp= var->save_result.ulonglong_value; ulonglong tmp= var->save_result.ulonglong_value;
/* Don't use bigger value than given with --maximum-variable-name=.. */ /* Don't use bigger value than given with --maximum-variable-name=.. */
if ((ulong) tmp > max_system_variables.*offset) if (tmp > max_system_variables.*offset)
{ {
throw_bounds_warning(thd, TRUE, TRUE, name, (longlong) tmp); throw_bounds_warning(thd, TRUE, TRUE, name, (longlong) tmp);
tmp= max_system_variables.*offset; tmp= max_system_variables.*offset;
} }
if (option_limits) if (option_limits)
tmp= (ulong) fix_unsigned(thd, tmp, option_limits); tmp= fix_unsigned(thd, tmp, option_limits);
#if SIZEOF_LONG < SIZEOF_LONG_LONG #if SIZEOF_LONG < SIZEOF_LONG_LONG
else if (tmp > ULONG_MAX) else if (tmp > ULONG_MAX)
{ {
@ -1543,6 +1543,7 @@ bool sys_var_thd_ulong::update(THD *thd, set_var *var)
} }
#endif #endif
DBUG_ASSERT(tmp <= ULONG_MAX);
if (var->type == OPT_GLOBAL) if (var->type == OPT_GLOBAL)
global_system_variables.*offset= (ulong) tmp; global_system_variables.*offset= (ulong) tmp;
else else

View File

@ -1357,6 +1357,17 @@ int register_slave_on_master(MYSQL* mysql, Master_info *mi,
} }
/**
Execute a SHOW SLAVE STATUS statement.
@param thd Pointer to THD object for the client thread executing the
statement.
@param mi Pointer to Master_info object for the IO thread.
@retval FALSE success
@retval TRUE failure
*/
bool show_master_info(THD* thd, Master_info* mi) bool show_master_info(THD* thd, Master_info* mi)
{ {
// TODO: fix this for multi-master // TODO: fix this for multi-master
@ -2062,7 +2073,7 @@ int apply_event_and_update_pos(Log_event* ev, THD* thd, Relay_log_info* rli,
fewer times, 0 is returned. fewer times, 0 is returned.
- init_master_info or init_relay_log_pos failed. (These are called - init_master_info or init_relay_log_pos failed. (These are called
if a failure occurs when applying the event.)</li> if a failure occurs when applying the event.)
- An error occurred when updating the binlog position. - An error occurred when updating the binlog position.
@ -2307,8 +2318,14 @@ static int try_to_reconnect(THD *thd, MYSQL *mysql, Master_info *mi,
} }
/* Slave I/O Thread entry point */ /**
Slave IO thread entry point.
@param arg Pointer to Master_info struct that holds information for
the IO thread.
@return Always 0.
*/
pthread_handler_t handle_slave_io(void *arg) pthread_handler_t handle_slave_io(void *arg)
{ {
THD *thd; // needs to be first for thread_stack THD *thd; // needs to be first for thread_stack
@ -2616,8 +2633,14 @@ err:
} }
/* Slave SQL Thread entry point */ /**
Slave SQL thread entry point.
@param arg Pointer to Relay_log_info object that holds information
for the SQL thread.
@return Always 0.
*/
pthread_handler_t handle_slave_sql(void *arg) pthread_handler_t handle_slave_sql(void *arg)
{ {
THD *thd; /* needs to be first for thread_stack */ THD *thd; /* needs to be first for thread_stack */
@ -3710,6 +3733,16 @@ static IO_CACHE *reopen_relay_log(Relay_log_info *rli, const char **errmsg)
} }
/**
Reads next event from the relay log. Should be called from the
slave IO thread.
@param rli Relay_log_info structure for the slave IO thread.
@return The event read, or NULL on error. If an error occurs, the
error is reported through the sql_print_information() or
sql_print_error() functions.
*/
static Log_event* next_event(Relay_log_info* rli) static Log_event* next_event(Relay_log_info* rli)
{ {
Log_event* ev; Log_event* ev;

View File

@ -1111,6 +1111,27 @@ static void mark_temp_tables_as_free_for_reuse(THD *thd)
*/ */
if (table->child_l || table->parent) if (table->child_l || table->parent)
detach_merge_children(table, TRUE); detach_merge_children(table, TRUE);
/*
Reset temporary table lock type to it's default value (TL_WRITE).
Statements such as INSERT INTO .. SELECT FROM tmp, CREATE TABLE
.. SELECT FROM tmp and UPDATE may under some circumstances modify
the lock type of the tables participating in the statement. This
isn't a problem for non-temporary tables since their lock type is
reset at every open, but the same does not occur for temporary
tables for historical reasons.
Furthermore, the lock type of temporary tables is not really that
important because they can only be used by one query at a time and
not even twice in a query -- a temporary table is represented by
only one TABLE object. Nonetheless, it's safer from a maintenance
point of view to reset the lock type of this singleton TABLE object
as to not cause problems when the table is reused.
Even under LOCK TABLES mode its okay to reset the lock type as
LOCK TABLES is allowed (but ignored) for a temporary table.
*/
table->reginfo.lock_type= TL_WRITE;
} }
} }
} }
@ -4681,7 +4702,7 @@ int open_tables(THD *thd, TABLE_LIST **start, uint *counter, uint flags)
else if (tables->lock_type == TL_READ_DEFAULT) else if (tables->lock_type == TL_READ_DEFAULT)
tables->table->reginfo.lock_type= tables->table->reginfo.lock_type=
read_lock_type_for_table(thd, tables->table); read_lock_type_for_table(thd, tables->table);
else if (tables->table->s->tmp_table == NO_TMP_TABLE) else
tables->table->reginfo.lock_type= tables->lock_type; tables->table->reginfo.lock_type= tables->lock_type;
} }
tables->table->grant= tables->grant; tables->table->grant= tables->grant;

View File

@ -18,7 +18,7 @@
#include "base64.h" #include "base64.h"
/** /**
Execute a BINLOG statement Execute a BINLOG statement.
To execute the BINLOG command properly the server needs to know To execute the BINLOG command properly the server needs to know
which format the BINLOG command's event is in. Therefore, the first which format the BINLOG command's event is in. Therefore, the first
@ -26,6 +26,9 @@
Format_description_log_event, as outputted by mysqlbinlog. This Format_description_log_event, as outputted by mysqlbinlog. This
Format_description_log_event is cached in Format_description_log_event is cached in
rli->description_event_for_exec. rli->description_event_for_exec.
@param thd Pointer to THD object for the client thread executing the
statement.
*/ */
void mysql_client_binlog_statement(THD* thd) void mysql_client_binlog_statement(THD* thd)

View File

@ -950,6 +950,26 @@ bool multi_delete::send_eof()
TRUNCATE TABLE TRUNCATE TABLE
****************************************************************************/ ****************************************************************************/
/*
Row-by-row truncation if the engine does not support table recreation.
Probably a InnoDB table.
*/
static bool mysql_truncate_by_delete(THD *thd, TABLE_LIST *table_list)
{
bool error, save_binlog_row_based= thd->current_stmt_binlog_row_based;
DBUG_ENTER("mysql_truncate_by_delete");
table_list->lock_type= TL_WRITE;
mysql_init_select(thd->lex);
thd->clear_current_stmt_binlog_row_based();
error= mysql_delete(thd, table_list, NULL, NULL, HA_POS_ERROR, LL(0), TRUE);
ha_autocommit_or_rollback(thd, error);
end_trans(thd, error ? ROLLBACK : COMMIT);
thd->current_stmt_binlog_row_based= save_binlog_row_based;
DBUG_RETURN(error);
}
/* /*
Optimize delete of all rows by doing a full generate of the table Optimize delete of all rows by doing a full generate of the table
This will work even if the .ISM and .ISD tables are destroyed This will work even if the .ISM and .ISD tables are destroyed
@ -1055,24 +1075,6 @@ end:
DBUG_RETURN(error); DBUG_RETURN(error);
trunc_by_del: trunc_by_del:
/* Probably InnoDB table */ error= mysql_truncate_by_delete(thd, table_list);
ulonglong save_options= thd->options;
table_list->lock_type= TL_WRITE;
thd->options&= ~(OPTION_BEGIN | OPTION_NOT_AUTOCOMMIT);
ha_enable_transaction(thd, FALSE);
mysql_init_select(thd->lex);
bool save_binlog_row_based= thd->current_stmt_binlog_row_based;
thd->clear_current_stmt_binlog_row_based();
error= mysql_delete(thd, table_list, (COND*) 0, (SQL_LIST*) 0,
HA_POS_ERROR, LL(0), TRUE);
ha_enable_transaction(thd, TRUE);
/*
Safety, in case the engine ignored ha_enable_transaction(FALSE)
above. Also clears thd->transaction.*.
*/
error= ha_autocommit_or_rollback(thd, error);
ha_commit(thd);
thd->options= save_options;
thd->current_stmt_binlog_row_based= save_binlog_row_based;
DBUG_RETURN(error); DBUG_RETURN(error);
} }

View File

@ -190,6 +190,15 @@ typedef struct st_lex_server_options
char *server_name, *host, *db, *username, *password, *scheme, *socket, *owner; char *server_name, *host, *db, *username, *password, *scheme, *socket, *owner;
} LEX_SERVER_OPTIONS; } LEX_SERVER_OPTIONS;
/**
Structure to hold parameters for CHANGE MASTER or START/STOP SLAVE
or SHOW NEW MASTER.
Remark: this should not be confused with Master_info (and perhaps
would better be renamed to st_lex_replication_info). Some fields,
e.g., delay, are saved in Relay_log_info, not in Master_info.
*/
typedef struct st_lex_master_info typedef struct st_lex_master_info
{ {
char *host, *user, *password, *log_file_name; char *host, *user, *password, *log_file_name;

View File

@ -6760,7 +6760,7 @@ int get_part_iter_for_interval_via_mapping(partition_info *part_info,
store_key_image_to_rec(field, max_value, field_len); store_key_image_to_rec(field, max_value, field_len);
bool include_endp= !test(flags & NEAR_MAX); bool include_endp= !test(flags & NEAR_MAX);
part_iter->part_nums.end= get_endpoint(part_info, 0, include_endp); part_iter->part_nums.end= get_endpoint(part_info, 0, include_endp);
if (part_iter->part_nums.start == part_iter->part_nums.end && if (part_iter->part_nums.start >= part_iter->part_nums.end &&
!part_iter->ret_null_part) !part_iter->ret_null_part)
return 0; /* No partitions */ return 0; /* No partitions */
} }
@ -6938,7 +6938,7 @@ int get_part_iter_for_interval_via_walking(partition_info *part_info,
uint32 get_next_partition_id_range(PARTITION_ITERATOR* part_iter) uint32 get_next_partition_id_range(PARTITION_ITERATOR* part_iter)
{ {
if (part_iter->part_nums.cur == part_iter->part_nums.end) if (part_iter->part_nums.cur >= part_iter->part_nums.end)
{ {
part_iter->part_nums.cur= part_iter->part_nums.start; part_iter->part_nums.cur= part_iter->part_nums.start;
return NOT_A_PARTITION_ID; return NOT_A_PARTITION_ID;

View File

@ -257,6 +257,17 @@ bool purge_error_message(THD* thd, int res)
} }
/**
Execute a PURGE BINARY LOGS TO <log> command.
@param thd Pointer to THD object for the client thread executing the
statement.
@param to_log Name of the last log to purge.
@retval FALSE success
@retval TRUE failure
*/
bool purge_master_logs(THD* thd, const char* to_log) bool purge_master_logs(THD* thd, const char* to_log)
{ {
char search_file_name[FN_REFLEN]; char search_file_name[FN_REFLEN];
@ -273,6 +284,17 @@ bool purge_master_logs(THD* thd, const char* to_log)
} }
/**
Execute a PURGE BINARY LOGS BEFORE <date> command.
@param thd Pointer to THD object for the client thread executing the
statement.
@param purge_time Date before which logs should be purged.
@retval FALSE success
@retval TRUE failure
*/
bool purge_master_logs_before_date(THD* thd, time_t purge_time) bool purge_master_logs_before_date(THD* thd, time_t purge_time)
{ {
if (!mysql_bin_log.is_open()) if (!mysql_bin_log.is_open())
@ -765,6 +787,20 @@ err:
DBUG_VOID_RETURN; DBUG_VOID_RETURN;
} }
/**
Execute a START SLAVE statement.
@param thd Pointer to THD object for the client thread executing the
statement.
@param mi Pointer to Master_info object for the slave's IO thread.
@param net_report If true, saves the exit status into thd->main_da.
@retval 0 success
@retval 1 error
*/
int start_slave(THD* thd , Master_info* mi, bool net_report) int start_slave(THD* thd , Master_info* mi, bool net_report)
{ {
int slave_errno= 0; int slave_errno= 0;
@ -890,6 +926,19 @@ int start_slave(THD* thd , Master_info* mi, bool net_report)
} }
/**
Execute a STOP SLAVE statement.
@param thd Pointer to THD object for the client thread executing the
statement.
@param mi Pointer to Master_info object for the slave's IO thread.
@param net_report If true, saves the exit status into thd->main_da.
@retval 0 success
@retval 1 error
*/
int stop_slave(THD* thd, Master_info* mi, bool net_report ) int stop_slave(THD* thd, Master_info* mi, bool net_report )
{ {
DBUG_ENTER("stop_slave"); DBUG_ENTER("stop_slave");
@ -942,20 +991,17 @@ int stop_slave(THD* thd, Master_info* mi, bool net_report )
} }
/* /**
Remove all relay logs and start replication from the start Execute a RESET SLAVE statement.
SYNOPSIS @param thd Pointer to THD object of the client thread executing the
reset_slave() statement.
thd Thread handler
mi Master info for the slave
RETURN @param mi Pointer to Master_info object for the slave.
0 ok
1 error @retval 0 success
@retval 1 error
*/ */
int reset_slave(THD *thd, Master_info* mi) int reset_slave(THD *thd, Master_info* mi)
{ {
MY_STAT stat_area; MY_STAT stat_area;
@ -1070,6 +1116,18 @@ void kill_zombie_dump_threads(uint32 slave_server_id)
} }
/**
Execute a CHANGE MASTER statement.
@param thd Pointer to THD object for the client thread executing the
statement.
@param mi Pointer to Master_info object belonging to the slave's IO
thread.
@retval FALSE success
@retval TRUE error
*/
bool change_master(THD* thd, Master_info* mi) bool change_master(THD* thd, Master_info* mi)
{ {
int thread_mask; int thread_mask;
@ -1283,6 +1341,16 @@ bool change_master(THD* thd, Master_info* mi)
DBUG_RETURN(FALSE); DBUG_RETURN(FALSE);
} }
/**
Execute a RESET MASTER statement.
@param thd Pointer to THD object of the client thread executing the
statement.
@retval 0 success
@retval 1 error
*/
int reset_master(THD* thd) int reset_master(THD* thd)
{ {
if (!mysql_bin_log.is_open()) if (!mysql_bin_log.is_open())
@ -1312,6 +1380,15 @@ int cmp_master_pos(const char* log_file_name1, ulonglong log_pos1,
} }
/**
Execute a SHOW BINLOG EVENTS statement.
@param thd Pointer to THD object for the client thread executing the
statement.
@retval FALSE success
@retval TRUE failure
*/
bool mysql_show_binlog_events(THD* thd) bool mysql_show_binlog_events(THD* thd)
{ {
Protocol *protocol= thd->protocol; Protocol *protocol= thd->protocol;
@ -1462,6 +1539,15 @@ err:
} }
/**
Execute a SHOW MASTER STATUS statement.
@param thd Pointer to THD object for the client thread executing the
statement.
@retval FALSE success
@retval TRUE failure
*/
bool show_binlog_info(THD* thd) bool show_binlog_info(THD* thd)
{ {
Protocol *protocol= thd->protocol; Protocol *protocol= thd->protocol;
@ -1495,18 +1581,15 @@ bool show_binlog_info(THD* thd)
} }
/* /**
Send a list of all binary logs to client Execute a SHOW BINARY LOGS statement.
SYNOPSIS @param thd Pointer to THD object for the client thread executing the
show_binlogs() statement.
thd Thread specific variable
RETURN VALUES @retval FALSE success
FALSE OK @retval TRUE failure
TRUE error
*/ */
bool show_binlogs(THD* thd) bool show_binlogs(THD* thd)
{ {
IO_CACHE *index_file; IO_CACHE *index_file;