auto-merge

This commit is contained in:
Tatiana A. Nurnberg 2009-01-09 16:48:02 +01:00
commit 7e0ec5c44a
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);
}
/*
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
@ -1346,34 +1375,51 @@ void show_diff(DYNAMIC_STRING* ds,
{
DYNAMIC_STRING ds_tmp;
int have_diff = 0;
if (init_dynamic_string(&ds_tmp, "", 256, 256))
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 (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 */
if (have_diff)
{
dynstr_set(&ds_tmp, "");
/* Fallback to context diff with "diff -c" */
/* First try with unified diff */
if (run_tool("diff",
&ds_tmp, /* Get output from diff in ds_tmp */
"-c",
"-u",
filename1,
filename2,
"2>&1",
NULL) > 1) /* Most "diff" tools return >1 if error */
{
/*
Fallback to dump both files to result file and inform
about installing "diff"
*/
dynstr_set(&ds_tmp, "");
/* 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_append(&ds_tmp,
@ -1397,8 +1443,7 @@ void show_diff(DYNAMIC_STRING* ds,
dynstr_append(&ds_tmp, " >>>\n");
cat_file(&ds_tmp, filename2);
dynstr_append(&ds_tmp, "<<<<\n");
}
}
}
if (ds)
{

View file

@ -617,10 +617,10 @@ call p_verify_status_increment(0, 0, 0, 0);
--echo
--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
truncate table t2;
call p_verify_status_increment(2, 0, 2, 0);
call p_verify_status_increment(4, 0, 4, 0);
commit;
--echo # There is nothing left to commit
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;
call p_verify_status_increment(1, 0, 1, 0);
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;
call p_verify_status_increment(1, 0, 1, 0);
check table t1;

View file

@ -11,6 +11,6 @@ eval SET @@global.sort_buffer_size = $save;
--enable_query_log
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
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
# 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;
call p_verify_status_increment(2, 0, 2, 0);
call p_verify_status_increment(4, 0, 4, 0);
SUCCESS
commit;
@ -853,7 +853,7 @@ call p_verify_status_increment(1, 0, 1, 0);
SUCCESS
truncate table t3;
call p_verify_status_increment(2, 2, 2, 2);
call p_verify_status_increment(4, 4, 2, 2);
SUCCESS
create view v1 as select * from t2;

View file

@ -1767,4 +1767,83 @@ ref NULL
rows 6
Extra Using where; Using index
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

View file

@ -1,4 +1,16 @@
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;
insert into t1 values (1),(2),(3);
explain select * from t1 where a=5 and a=6;

View file

@ -194,4 +194,20 @@ DELETE FROM t1;
SELECT * FROM t1;
a b
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

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 # Xid # # COMMIT /* XID */
DROP TABLE t1;
flush status;
show status like "binlog_cache_use";
Variable_name Value
Binlog_cache_use 13
Binlog_cache_use 0
show status like "binlog_cache_disk_use";
Variable_name Value
Binlog_cache_disk_use 0
create table t1 (a int) engine=innodb;
show status like "binlog_cache_use";
Variable_name Value
Binlog_cache_use 14
Binlog_cache_use 1
show status like "binlog_cache_disk_use";
Variable_name Value
Binlog_cache_disk_use 1
@ -131,7 +132,7 @@ delete from t1;
commit;
show status like "binlog_cache_use";
Variable_name Value
Binlog_cache_use 15
Binlog_cache_use 2
show status like "binlog_cache_disk_use";
Variable_name Value
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
# transactional table.
#
flush status;
show status like "binlog_cache_use";
show status like "binlog_cache_disk_use";

View file

@ -40,9 +40,12 @@
# 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
let $kbrange32 = BETWEEN 32776 AND 32999;
let $mbrange2 = BETWEEN 2097116 AND 2100000;
--disable_warnings
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 = 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 = 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-------------------------#'
@ -68,10 +73,12 @@ SELECT @@session.sort_buffer_size >= 2097116 AND @@session.sort_buffer_size < 30
######################################################################
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;
SELECT @@session.sort_buffer_size >= 2097116 AND @@session.sort_buffer_size < 3000000;
eval
SELECT @@session.sort_buffer_size $mbrange2;
--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;
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;
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;
SELECT @@global.sort_buffer_size;
SET @@global.sort_buffer_size = 4294967294;
@ -94,9 +103,11 @@ SELECT @@global.sort_buffer_size;
###################################################################################
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;
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;
SELECT @@session.sort_buffer_size;
SET @@session.sort_buffer_size = 4294967294;
@ -109,9 +120,11 @@ SELECT @@session.sort_buffer_size;
##################################################################
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;
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;
SELECT @@global.sort_buffer_size;
--Error ER_PARSE_ERROR
@ -122,9 +135,11 @@ SET @@global.sort_buffer_size = test;
SELECT @@global.sort_buffer_size;
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;
SELECT @@session.sort_buffer_size >= 32776 AND @@session.sort_buffer_size < 33000;
eval
SELECT @@session.sort_buffer_size $kbrange32;
--Error ER_PARSE_ERROR
SET @@session.sort_buffer_size = 65530.34.;
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
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-----------------------#'
@ -157,9 +172,11 @@ SELECT @@session.sort_buffer_size = VARIABLE_VALUE FROM
####################################################################
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;
SELECT @@global.sort_buffer_size >= 32776 AND @@global.sort_buffer_size < 33000;
eval
SELECT @@global.sort_buffer_size $kbrange32;
--echo '#---------------------FN_DYNVARS_151_09----------------------#'
####################################################################################
@ -185,7 +202,8 @@ SELECT @@local.sort_buffer_size = @@session.sort_buffer_size;
###################################################################################
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
SELECT local.sort_buffer_size;
--Error ER_UNKNOWN_TABLE

View file

@ -3,31 +3,31 @@ SET @start_session_value = @@session.sort_buffer_size;
'#--------------------FN_DYNVARS_151_01-------------------------#'
SET @@global.sort_buffer_size = 1000;
SET @@global.sort_buffer_size = DEFAULT;
SELECT @@global.sort_buffer_size >= 2097116 AND @@global.sort_buffer_size < 3000000;
@@global.sort_buffer_size >= 2097116 AND @@global.sort_buffer_size < 3000000
SELECT @@global.sort_buffer_size BETWEEN 2097116 AND 2100000;
@@global.sort_buffer_size BETWEEN 2097116 AND 2100000
1
SET @@session.sort_buffer_size = 2000;
SET @@session.sort_buffer_size = DEFAULT;
SELECT @@session.sort_buffer_size >= 2097116 AND @@session.sort_buffer_size < 3000000;
@@session.sort_buffer_size >= 2097116 AND @@session.sort_buffer_size < 3000000
SELECT @@session.sort_buffer_size BETWEEN 2097116 AND 2100000;
@@session.sort_buffer_size BETWEEN 2097116 AND 2100000
1
'#--------------------FN_DYNVARS_151_02-------------------------#'
SET @@global.sort_buffer_size = DEFAULT;
SELECT @@global.sort_buffer_size >= 2097116 AND @@global.sort_buffer_size < 3000000;
@@global.sort_buffer_size >= 2097116 AND @@global.sort_buffer_size < 3000000
SELECT @@global.sort_buffer_size BETWEEN 2097116 AND 2100000;
@@global.sort_buffer_size BETWEEN 2097116 AND 2100000
1
SET @@session.sort_buffer_size = DEFAULT;
SELECT @@session.sort_buffer_size >= 2097116 AND @@session.sort_buffer_size < 3000000;
@@session.sort_buffer_size >= 2097116 AND @@session.sort_buffer_size < 3000000
SELECT @@session.sort_buffer_size BETWEEN 2097116 AND 2100000;
@@session.sort_buffer_size BETWEEN 2097116 AND 2100000
1
'#--------------------FN_DYNVARS_151_03-------------------------#'
SET @@global.sort_buffer_size = 32776;
SELECT @@global.sort_buffer_size >= 32776 AND @@global.sort_buffer_size < 33000;
@@global.sort_buffer_size >= 32776 AND @@global.sort_buffer_size < 33000
SELECT @@global.sort_buffer_size BETWEEN 32776 AND 32999;
@@global.sort_buffer_size BETWEEN 32776 AND 32999
1
SET @@global.sort_buffer_size = 32777;
SELECT @@global.sort_buffer_size >= 32776 AND @@global.sort_buffer_size < 33000;
@@global.sort_buffer_size >= 32776 AND @@global.sort_buffer_size < 33000
SELECT @@global.sort_buffer_size BETWEEN 32776 AND 32999;
@@global.sort_buffer_size BETWEEN 32776 AND 32999
1
SET @@global.sort_buffer_size = 4294967295;
SELECT @@global.sort_buffer_size;
@ -39,12 +39,12 @@ SELECT @@global.sort_buffer_size;
4294967294
'#--------------------FN_DYNVARS_151_04-------------------------#'
SET @@session.sort_buffer_size = 32776;
SELECT @@session.sort_buffer_size >= 32776 AND @@session.sort_buffer_size < 33000;
@@session.sort_buffer_size >= 32776 AND @@session.sort_buffer_size < 33000
SELECT @@session.sort_buffer_size BETWEEN 32776 AND 32999;
@@session.sort_buffer_size BETWEEN 32776 AND 32999
1
SET @@session.sort_buffer_size = 32777;
SELECT @@session.sort_buffer_size >= 32776 AND @@session.sort_buffer_size < 33000;
@@session.sort_buffer_size >= 32776 AND @@session.sort_buffer_size < 33000
SELECT @@session.sort_buffer_size BETWEEN 32776 AND 32999;
@@session.sort_buffer_size BETWEEN 32776 AND 32999
1
SET @@session.sort_buffer_size = 4294967295;
SELECT @@session.sort_buffer_size;
@ -56,12 +56,12 @@ SELECT @@session.sort_buffer_size;
4294967294
'#------------------FN_DYNVARS_151_05-----------------------#'
SET @@global.sort_buffer_size = 32775;
SELECT @@global.sort_buffer_size >= 32776 AND @@global.sort_buffer_size < 33000;
@@global.sort_buffer_size >= 32776 AND @@global.sort_buffer_size < 33000
SELECT @@global.sort_buffer_size BETWEEN 32776 AND 32999;
@@global.sort_buffer_size BETWEEN 32776 AND 32999
1
SET @@global.sort_buffer_size = -1024;
SELECT @@global.sort_buffer_size >= 32776 AND @@global.sort_buffer_size < 33000;
@@global.sort_buffer_size >= 32776 AND @@global.sort_buffer_size < 33000
SELECT @@global.sort_buffer_size BETWEEN 32776 AND 32999;
@@global.sort_buffer_size BETWEEN 32776 AND 32999
1
SET @@global.sort_buffer_size = 4294967296;
SELECT @@global.sort_buffer_size;
@ -78,12 +78,12 @@ SELECT @@global.sort_buffer_size;
@@global.sort_buffer_size
4294967295
SET @@session.sort_buffer_size = 32775;
SELECT @@session.sort_buffer_size >= 32776 AND @@session.sort_buffer_size < 33000;
@@session.sort_buffer_size >= 32776 AND @@session.sort_buffer_size < 33000
SELECT @@session.sort_buffer_size BETWEEN 32776 AND 32999;
@@session.sort_buffer_size BETWEEN 32776 AND 32999
1
SET @@session.sort_buffer_size = -2;
SELECT @@session.sort_buffer_size >= 32776 AND @@session.sort_buffer_size < 33000;
@@session.sort_buffer_size >= 32776 AND @@session.sort_buffer_size < 33000
SELECT @@session.sort_buffer_size BETWEEN 32776 AND 32999;
@@session.sort_buffer_size BETWEEN 32776 AND 32999
1
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
@ -105,12 +105,12 @@ INFORMATION_SCHEMA.SESSION_VARIABLES WHERE VARIABLE_NAME='sort_buffer_size';
1
'#------------------FN_DYNVARS_151_08-----------------------#'
SET @@global.sort_buffer_size = TRUE;
SELECT @@global.sort_buffer_size >= 32776 AND @@global.sort_buffer_size < 33000;
@@global.sort_buffer_size >= 32776 AND @@global.sort_buffer_size < 33000
SELECT @@global.sort_buffer_size BETWEEN 32776 AND 32999;
@@global.sort_buffer_size BETWEEN 32776 AND 32999
1
SET @@global.sort_buffer_size = FALSE;
SELECT @@global.sort_buffer_size >= 32776 AND @@global.sort_buffer_size < 33000;
@@global.sort_buffer_size >= 32776 AND @@global.sort_buffer_size < 33000
SELECT @@global.sort_buffer_size BETWEEN 32776 AND 32999;
@@global.sort_buffer_size BETWEEN 32776 AND 32999
1
'#---------------------FN_DYNVARS_151_09----------------------#'
SET @@global.sort_buffer_size = 9000;
@ -127,8 +127,8 @@ SELECT @@local.sort_buffer_size = @@session.sort_buffer_size;
1
'#---------------------FN_DYNVARS_151_11----------------------#'
SET sort_buffer_size = 9100;
SELECT @@sort_buffer_size >= 32776 AND @@sort_buffer_size < 33000;
@@sort_buffer_size >= 32776 AND @@sort_buffer_size < 33000
SELECT @@sort_buffer_size BETWEEN 32776 AND 32999;
@@sort_buffer_size BETWEEN 32776 AND 32999
1
SELECT local.sort_buffer_size;
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-------------------------#'
SET @@global.sort_buffer_size = 1000;
SET @@global.sort_buffer_size = DEFAULT;
SELECT @@global.sort_buffer_size >= 2097116 AND @@global.sort_buffer_size < 3000000;
@@global.sort_buffer_size >= 2097116 AND @@global.sort_buffer_size < 3000000
SELECT @@global.sort_buffer_size BETWEEN 2097116 AND 2100000;
@@global.sort_buffer_size BETWEEN 2097116 AND 2100000
1
SET @@session.sort_buffer_size = 2000;
SET @@session.sort_buffer_size = DEFAULT;
SELECT @@session.sort_buffer_size >= 2097116 AND @@session.sort_buffer_size < 3000000;
@@session.sort_buffer_size >= 2097116 AND @@session.sort_buffer_size < 3000000
SELECT @@session.sort_buffer_size BETWEEN 2097116 AND 2100000;
@@session.sort_buffer_size BETWEEN 2097116 AND 2100000
1
'#--------------------FN_DYNVARS_151_02-------------------------#'
SET @@global.sort_buffer_size = DEFAULT;
SELECT @@global.sort_buffer_size >= 2097116 AND @@global.sort_buffer_size < 3000000;
@@global.sort_buffer_size >= 2097116 AND @@global.sort_buffer_size < 3000000
SELECT @@global.sort_buffer_size BETWEEN 2097116 AND 2100000;
@@global.sort_buffer_size BETWEEN 2097116 AND 2100000
1
SET @@session.sort_buffer_size = DEFAULT;
SELECT @@session.sort_buffer_size >= 2097116 AND @@session.sort_buffer_size < 3000000;
@@session.sort_buffer_size >= 2097116 AND @@session.sort_buffer_size < 3000000
SELECT @@session.sort_buffer_size BETWEEN 2097116 AND 2100000;
@@session.sort_buffer_size BETWEEN 2097116 AND 2100000
1
'#--------------------FN_DYNVARS_151_03-------------------------#'
SET @@global.sort_buffer_size = 32776;
SELECT @@global.sort_buffer_size >= 32776 AND @@global.sort_buffer_size < 33000;
@@global.sort_buffer_size >= 32776 AND @@global.sort_buffer_size < 33000
SELECT @@global.sort_buffer_size BETWEEN 32776 AND 32999;
@@global.sort_buffer_size BETWEEN 32776 AND 32999
1
SET @@global.sort_buffer_size = 32777;
SELECT @@global.sort_buffer_size >= 32776 AND @@global.sort_buffer_size < 33000;
@@global.sort_buffer_size >= 32776 AND @@global.sort_buffer_size < 33000
SELECT @@global.sort_buffer_size BETWEEN 32776 AND 32999;
@@global.sort_buffer_size BETWEEN 32776 AND 32999
1
SET @@global.sort_buffer_size = 4294967295;
SELECT @@global.sort_buffer_size;
@ -39,12 +39,12 @@ SELECT @@global.sort_buffer_size;
4294967294
'#--------------------FN_DYNVARS_151_04-------------------------#'
SET @@session.sort_buffer_size = 32776;
SELECT @@session.sort_buffer_size >= 32776 AND @@session.sort_buffer_size < 33000;
@@session.sort_buffer_size >= 32776 AND @@session.sort_buffer_size < 33000
SELECT @@session.sort_buffer_size BETWEEN 32776 AND 32999;
@@session.sort_buffer_size BETWEEN 32776 AND 32999
1
SET @@session.sort_buffer_size = 32777;
SELECT @@session.sort_buffer_size >= 32776 AND @@session.sort_buffer_size < 33000;
@@session.sort_buffer_size >= 32776 AND @@session.sort_buffer_size < 33000
SELECT @@session.sort_buffer_size BETWEEN 32776 AND 32999;
@@session.sort_buffer_size BETWEEN 32776 AND 32999
1
SET @@session.sort_buffer_size = 4294967295;
SELECT @@session.sort_buffer_size;
@ -56,12 +56,12 @@ SELECT @@session.sort_buffer_size;
4294967294
'#------------------FN_DYNVARS_151_05-----------------------#'
SET @@global.sort_buffer_size = 32775;
SELECT @@global.sort_buffer_size >= 32776 AND @@global.sort_buffer_size < 33000;
@@global.sort_buffer_size >= 32776 AND @@global.sort_buffer_size < 33000
SELECT @@global.sort_buffer_size BETWEEN 32776 AND 32999;
@@global.sort_buffer_size BETWEEN 32776 AND 32999
1
SET @@global.sort_buffer_size = -1024;
SELECT @@global.sort_buffer_size >= 32776 AND @@global.sort_buffer_size < 33000;
@@global.sort_buffer_size >= 32776 AND @@global.sort_buffer_size < 33000
SELECT @@global.sort_buffer_size BETWEEN 32776 AND 32999;
@@global.sort_buffer_size BETWEEN 32776 AND 32999
1
SET @@global.sort_buffer_size = 4294967296;
SELECT @@global.sort_buffer_size;
@ -78,12 +78,12 @@ SELECT @@global.sort_buffer_size;
@@global.sort_buffer_size
4294967296
SET @@session.sort_buffer_size = 32775;
SELECT @@session.sort_buffer_size >= 32776 AND @@session.sort_buffer_size < 33000;
@@session.sort_buffer_size >= 32776 AND @@session.sort_buffer_size < 33000
SELECT @@session.sort_buffer_size BETWEEN 32776 AND 32999;
@@session.sort_buffer_size BETWEEN 32776 AND 32999
1
SET @@session.sort_buffer_size = -2;
SELECT @@session.sort_buffer_size >= 32776 AND @@session.sort_buffer_size < 33000;
@@session.sort_buffer_size >= 32776 AND @@session.sort_buffer_size < 33000
SELECT @@session.sort_buffer_size BETWEEN 32776 AND 32999;
@@session.sort_buffer_size BETWEEN 32776 AND 32999
1
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
@ -105,12 +105,12 @@ INFORMATION_SCHEMA.SESSION_VARIABLES WHERE VARIABLE_NAME='sort_buffer_size';
1
'#------------------FN_DYNVARS_151_08-----------------------#'
SET @@global.sort_buffer_size = TRUE;
SELECT @@global.sort_buffer_size >= 32776 AND @@global.sort_buffer_size < 33000;
@@global.sort_buffer_size >= 32776 AND @@global.sort_buffer_size < 33000
SELECT @@global.sort_buffer_size BETWEEN 32776 AND 32999;
@@global.sort_buffer_size BETWEEN 32776 AND 32999
1
SET @@global.sort_buffer_size = FALSE;
SELECT @@global.sort_buffer_size >= 32776 AND @@global.sort_buffer_size < 33000;
@@global.sort_buffer_size >= 32776 AND @@global.sort_buffer_size < 33000
SELECT @@global.sort_buffer_size BETWEEN 32776 AND 32999;
@@global.sort_buffer_size BETWEEN 32776 AND 32999
1
'#---------------------FN_DYNVARS_151_09----------------------#'
SET @@global.sort_buffer_size = 9000;
@ -127,8 +127,8 @@ SELECT @@local.sort_buffer_size = @@session.sort_buffer_size;
1
'#---------------------FN_DYNVARS_151_11----------------------#'
SET sort_buffer_size = 9100;
SELECT @@sort_buffer_size >= 32776 AND @@sort_buffer_size < 33000;
@@sort_buffer_size >= 32776 AND @@sort_buffer_size < 33000
SELECT @@sort_buffer_size BETWEEN 32776 AND 32999;
@@sort_buffer_size BETWEEN 32776 AND 32999
1
SELECT local.sort_buffer_size;
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;
#
# 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

View file

@ -8,6 +8,22 @@
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
--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
# no records will match.

View file

@ -204,4 +204,35 @@ DELETE FROM t1;
SELECT * FROM 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

View file

@ -4815,7 +4815,7 @@ int ha_partition::info(uint flag)
/*
Calculates statistical variables
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
deletes
We report sum
@ -4854,13 +4854,13 @@ int ha_partition::info(uint flag)
stats.check_time= file->stats.check_time;
}
} while (*(++file_array));
if (stats.records < 2 &&
if (stats.records && stats.records < 2 &&
!(m_file[0]->ha_table_flags() & HA_STATS_RECORDS_IS_EXACT))
stats.records= 2;
if (stats.records > 0)
stats.mean_rec_length= (ulong) (stats.data_file_length / stats.records);
else
stats.mean_rec_length= 1; //? What should we set here
stats.mean_rec_length= 0;
}
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;
/* we'll catch my_malloc() error in is_valid() */
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
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)
{
// 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[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[INTVAR_EVENT-1]= INTVAR_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[APPEND_BLOCK_EVENT-1]= APPEND_BLOCK_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[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[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[WRITE_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[UPDATE_ROWS_EVENT-1]=
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;
// 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;
@ -4813,7 +4843,9 @@ Intvar_log_event::Intvar_log_event(const char* buf,
const Format_description_log_event* 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];
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)
: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);
seed2= uint8korr(buf+RAND_SEED2_OFFSET);
}
@ -5061,7 +5095,9 @@ Xid_log_event(const char* buf,
const Format_description_log_event *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));
}
@ -5207,7 +5243,9 @@ User_var_log_event(const char* buf,
const Format_description_log_event* 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= (char *) buf + UV_NAME_LEN_SIZE;
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)
// where 5.0 differs: 2 for len of N-bytes vars.
#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 SLAVE_HEADER_LEN 0
#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 INTVAR_HEADER_LEN 0
#define CREATE_FILE_HEADER_LEN 4
#define APPEND_BLOCK_HEADER_LEN 4
#define EXEC_LOAD_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 XID_HEADER_LEN 0
#define BEGIN_LOAD_QUERY_HEADER_LEN APPEND_BLOCK_HEADER_LEN
#define ROWS_HEADER_LEN 8
#define TABLE_MAP_HEADER_LEN 8
#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_TABLE_MAP_FOR_UPDATE_CODE 9
/* Intvar event post-header */
/* Intvar event data */
#define I_TYPE_OFFSET 0
#define I_VAL_OFFSET 1
/* Rand event post-header */
/* Rand event data */
#define RAND_SEED1_OFFSET 0
#define RAND_SEED2_OFFSET 8
/* User_var event post-header */
/* User_var event data */
#define UV_VAL_LEN_SIZE 4
#define UV_VAL_IS_NULL 1
#define UV_VAL_TYPE_SIZE 1
@ -338,7 +344,6 @@ struct sql_ex_info
#define UV_CHARSET_NUMBER_SIZE 4
/* Load event post-header */
#define L_THREAD_ID_OFFSET 0
#define L_EXEC_TIME_OFFSET 4
#define L_SKIP_LINES_OFFSET 8
@ -349,7 +354,6 @@ struct sql_ex_info
#define L_DATA_OFFSET LOAD_HEADER_LEN
/* Rotate event post-header */
#define R_POS_OFFSET 0
#define R_IDENT_OFFSET 8
@ -2206,10 +2210,11 @@ protected:
@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>
<caption>Post-Header for Intvar_log_event</caption>
<caption>Body for Intvar_log_event</caption>
<tr>
<th>Name</th>
@ -2283,11 +2288,12 @@ private:
which are stored internally as two 64-bit numbers.
@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>
<caption>Post-Header for Intvar_log_event</caption>
<caption>Body for Rand_log_event</caption>
<tr>
<th>Name</th>

View file

@ -644,6 +644,16 @@ err:
}
#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)
{
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;
/* 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);
tmp= max_system_variables.*offset;
}
if (option_limits)
tmp= (ulong) fix_unsigned(thd, tmp, option_limits);
tmp= fix_unsigned(thd, tmp, option_limits);
#if SIZEOF_LONG < SIZEOF_LONG_LONG
else if (tmp > ULONG_MAX)
{
@ -1543,6 +1543,7 @@ bool sys_var_thd_ulong::update(THD *thd, set_var *var)
}
#endif
DBUG_ASSERT(tmp <= ULONG_MAX);
if (var->type == OPT_GLOBAL)
global_system_variables.*offset= (ulong) tmp;
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)
{
// 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.
- 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.
@ -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)
{
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)
{
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)
{
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)
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)
tables->table->reginfo.lock_type=
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->grant= tables->grant;

View file

@ -18,7 +18,7 @@
#include "base64.h"
/**
Execute a BINLOG statement
Execute a BINLOG statement.
To execute the BINLOG command properly the server needs to know
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 is cached in
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)

View file

@ -950,6 +950,26 @@ bool multi_delete::send_eof()
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
This will work even if the .ISM and .ISD tables are destroyed
@ -1055,24 +1075,6 @@ end:
DBUG_RETURN(error);
trunc_by_del:
/* Probably InnoDB table */
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;
error= mysql_truncate_by_delete(thd, table_list);
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;
} 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
{
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);
bool include_endp= !test(flags & NEAR_MAX);
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)
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)
{
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;
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)
{
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)
{
if (!mysql_bin_log.is_open())
@ -765,6 +787,20 @@ err:
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 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 )
{
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
reset_slave()
thd Thread handler
mi Master info for the slave
@param thd Pointer to THD object of the client thread executing the
statement.
RETURN
0 ok
1 error
@param mi Pointer to Master_info object for the slave.
@retval 0 success
@retval 1 error
*/
int reset_slave(THD *thd, Master_info* mi)
{
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)
{
int thread_mask;
@ -1283,6 +1341,16 @@ bool change_master(THD* thd, Master_info* mi)
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)
{
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)
{
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)
{
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
show_binlogs()
thd Thread specific variable
@param thd Pointer to THD object for the client thread executing the
statement.
RETURN VALUES
FALSE OK
TRUE error
@retval FALSE success
@retval TRUE failure
*/
bool show_binlogs(THD* thd)
{
IO_CACHE *index_file;