Below is the list of changes that have just been committed into a local
5.1 repository of dlenev. When dlenev does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html
ChangeSet@stripped, 2006-09-29 19:39:15+04:00, dlenev@stripped +11 -0
Merge mockturtle.local:/home/dlenev/src/mysql-5.0-rt-merge
into mockturtle.local:/home/dlenev/src/mysql-5.1-rt-merge
MERGE: 1.1810.1697.146
BitKeeper/etc/collapsed@stripped, 2006-09-29 19:21:39+04:00, dlenev@stripped +0 -1
auto-union
MERGE: 1.5.1.1
mysql-test/mysql-test-run.pl@stripped, 2006-09-29 19:21:51+04:00, dlenev@stripped +0 -0
Auto merged
MERGE: 1.30.1.85
mysql-test/r/sp.result@stripped, 2006-09-29 19:39:12+04:00, dlenev@stripped +22 -25
Manual merge.
MERGE: 1.170.1.43
mysql-test/r/temp_table.result@stripped, 2006-09-29 19:39:12+04:00, dlenev@stripped +0 -0
Manual merge.
MERGE: 1.20.1.1
mysql-test/t/sp.test@stripped, 2006-09-29 19:39:12+04:00, dlenev@stripped +2 -0
Manual merge.
MERGE: 1.174.1.28
mysql-test/t/temp_table.test@stripped, 2006-09-29 19:39:12+04:00, dlenev@stripped +1 -0
Manual merge.
MERGE: 1.13.1.2
sql/mysql_priv.h@stripped, 2006-09-29 19:21:51+04:00, dlenev@stripped +0 -0
Auto merged
MERGE: 1.290.1.122
sql/sp.cc@stripped, 2006-09-29 19:21:51+04:00, dlenev@stripped +0 -0
Auto merged
MERGE: 1.82.1.38
sql/sql_acl.cc@stripped, 2006-09-29 19:21:51+04:00, dlenev@stripped +0 -0
Auto merged
MERGE: 1.128.1.82
sql/sql_select.cc@stripped, 2006-09-29 19:39:13+04:00, dlenev@stripped +4 -6
Manual merge.
MERGE: 1.312.1.145
sql/sql_table.cc@stripped, 2006-09-29 19:39:13+04:00, dlenev@stripped +0 -0
Manual merge.
MERGE: 1.239.1.83
# This is a BitKeeper patch. What follows are the unified diffs for the
# set of deltas contained in the patch. The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User: dlenev
# Host: mockturtle.local
# Root: /home/dlenev/src/mysql-5.1-rt-merge/RESYNC
--- 1.443/sql/sql_select.cc 2006-09-29 19:39:21 +04:00
+++ 1.444/sql/sql_select.cc 2006-09-29 19:39:21 +04:00
@@ -1137,17 +1137,28 @@
tmp_table_param.hidden_field_count= (all_fields.elements -
fields_list.elements);
+ ORDER *tmp_group= ((!simple_group && !procedure &&
+ !(test_flags & TEST_NO_KEY_GROUP)) ? group_list :
+ (ORDER*) 0);
+ /*
+ Pushing LIMIT to the temporary table creation is not applicable
+ when there is ORDER BY or GROUP BY or there is no GROUP BY, but
+ there are aggregate functions, because in all these cases we need
+ all result rows.
+ */
+ ha_rows tmp_rows_limit= ((order == 0 || skip_sort_order ||
+ test(select_options & OPTION_BUFFER_RESULT)) &&
+ !tmp_group &&
+ !thd->lex->current_select->with_sum_func) ?
+ select_limit : HA_POS_ERROR;
+
if (!(exec_tmp_table1=
create_tmp_table(thd, &tmp_table_param, all_fields,
- ((!simple_group && !procedure &&
- !(test_flags & TEST_NO_KEY_GROUP)) ?
- group_list : (ORDER*) 0),
+ tmp_group,
group_list ? 0 : select_distinct,
group_list && simple_group,
select_options,
- (order == 0 || skip_sort_order ||
- test(select_options & OPTION_BUFFER_RESULT)) ?
- select_limit : HA_POS_ERROR,
+ tmp_rows_limit,
(char *) "")))
DBUG_RETURN(1);
@@ -9197,6 +9208,13 @@
thd->variables.max_heap_table_size) :
thd->variables.tmp_table_size)/ share->reclength);
set_if_bigger(share->max_rows,1); // For dummy start options
+ /*
+ Push the LIMIT clause to the temporary table creation, so that we
+ materialize only up to 'rows_limit' records instead of all result records.
+ */
+ set_if_smaller(share->max_rows, rows_limit);
+ param->end_write_records= rows_limit;
+
keyinfo= param->keyinfo;
if (group)
@@ -9327,19 +9345,6 @@
(ha_base_keytype) key_part_info->type == HA_KEYTYPE_VARTEXT2) ?
0 : FIELDFLAG_BINARY;
}
- }
-
- /*
- Push the LIMIT clause to the temporary table creation, so that we
- materialize only up to 'rows_limit' records instead of all result records.
- This optimization is not applicable when there is GROUP BY or there is
- no GROUP BY, but there are aggregate functions, because both must be
- computed for all result rows.
- */
- if (!group && !thd->lex->current_select->with_sum_func)
- {
- set_if_smaller(table->s->max_rows, rows_limit);
- param->end_write_records= rows_limit;
}
if (thd->is_fatal_error) // If end of memory
--- 1.371/sql/sql_table.cc 2006-09-29 19:39:21 +04:00
+++ 1.372/sql/sql_table.cc 2006-09-29 19:39:21 +04:00
@@ -1633,7 +1633,7 @@
}
}
- if (lock_table_names(thd, tables))
+ if (!drop_temporary && lock_table_names(thd, tables))
DBUG_RETURN(1);
/* Don't give warnings for not found errors, as we already generate notes */
@@ -1818,7 +1818,8 @@
}
}
- unlock_table_names(thd, tables, (TABLE_LIST*) 0);
+ if (!drop_temporary)
+ unlock_table_names(thd, tables, (TABLE_LIST*) 0);
thd->no_warnings_for_error= 0;
DBUG_RETURN(error);
}
--- 1.24/mysql-test/r/temp_table.result 2006-09-29 19:39:22 +04:00
+++ 1.25/mysql-test/r/temp_table.result 2006-09-29 19:39:22 +04:00
@@ -135,6 +135,23 @@
bar 2
foo 1
drop table t1, t2;
+DROP TABLE IF EXISTS t1;
+CREATE TABLE t1 (i INT);
+LOCK TABLE t1 WRITE;
+CREATE TEMPORARY TABLE t1 (i INT);
+The following command should not block
+DROP TEMPORARY TABLE t1;
+DROP TABLE t1;
+CREATE TABLE t1 (i INT);
+CREATE TEMPORARY TABLE t2 (i INT);
+DROP TEMPORARY TABLE t2, t1;
+ERROR 42S02: Unknown table 't1'
+SELECT * FROM t2;
+ERROR 42S02: Table 'test.t2' doesn't exist
+SELECT * FROM t1;
+i
+DROP TABLE t1;
+End of 4.1 tests.
create temporary table t1 (a int);
insert into t1 values (4711);
select * from t1;
--- 1.15/mysql-test/t/temp_table.test 2006-09-29 19:39:22 +04:00
+++ 1.16/mysql-test/t/temp_table.test 2006-09-29 19:39:22 +04:00
@@ -116,7 +116,54 @@
select d, c from t1 left join t2 on b = c where a = 3 order by d;
drop table t1, t2;
-# End of 4.1 tests
+
+#
+# BUG#21096: locking issue ; temporary table conflicts.
+#
+# The problem was that on DROP TEMPORARY table name lock was acquired,
+# which should not be done.
+#
+--disable_warnings
+DROP TABLE IF EXISTS t1;
+--enable_warnings
+
+CREATE TABLE t1 (i INT);
+
+LOCK TABLE t1 WRITE;
+
+connect (conn1, localhost, root,,);
+
+CREATE TEMPORARY TABLE t1 (i INT);
+
+--echo The following command should not block
+DROP TEMPORARY TABLE t1;
+
+disconnect conn1;
+connection default;
+
+DROP TABLE t1;
+
+#
+# Check that it's not possible to drop a base table with
+# DROP TEMPORARY statement.
+#
+CREATE TABLE t1 (i INT);
+CREATE TEMPORARY TABLE t2 (i INT);
+
+--error 1051
+DROP TEMPORARY TABLE t2, t1;
+
+# Table t2 should have been dropped.
+--error 1146
+SELECT * FROM t2;
+# But table t1 should still be there.
+SELECT * FROM t1;
+
+DROP TABLE t1;
+
+
+--echo End of 4.1 tests.
+
#
# Test truncate with temporary tables
--- 1.228/mysql-test/r/sp.result 2006-09-29 19:39:22 +04:00
+++ 1.229/mysql-test/r/sp.result 2006-09-29 19:39:22 +04:00
@@ -5359,6 +5359,21 @@
2
DROP TABLE t11, t12|
DROP FUNCTION bug19862|
+drop table if exists t3|
+drop database if exists mysqltest1|
+create table t3 (a int)|
+insert into t3 (a) values (1), (2)|
+create database mysqltest1|
+use mysqltest1|
+drop database mysqltest1|
+select database()|
+database()
+NULL
+select * from (select 1 as a) as t1 natural join (select * from test.t3) as t2|
+a
+1
+use test|
+drop table t3|
DROP PROCEDURE IF EXISTS bug16899_p1|
DROP FUNCTION IF EXISTS bug16899_f1|
CREATE DEFINER=1234567890abcdefGHIKL@localhost PROCEDURE bug16899_p1()
@@ -5387,6 +5402,13 @@
UNLOCK TABLES|
The following should succeed.
DROP PROCEDURE bug21414|
+set names utf8|
+drop database if exists това_е_дълго_име_за_база_данни_нали|
+create database това_е_дълго_име_за_база_данни_нали|
+INSERT INTO mysql.proc VALUES ('това_е_дълго_име_за_база_данни_нали','това_е_процедура_с_доста_дълго_име_нали_и_още_по_дълго','PROCEDURE','това_е_процедура_с_доста_дълго_име_нали_и_още_по_дълго','SQL','CONTAINS_SQL','NO','DEFINER','','','bad_body','root@localhost',now(), now(),'','')|
+call това_е_дълго_име_за_база_данни_нали.това_е_процедура_с_доста_дълго_име_нали_и_още_по_дълго()|
+ERROR HY000: Failed to load routine това_е_дълго_име_за_база_данни_нали.това_е_процедура_с_доста_дълго_име_нали_и_още_по_дълго. The table mysql.proc is missing, corrupt, or contains bad data (internal code -6)
+drop database това_е_дълго_име_за_база_данни_нали|
CREATE TABLE t3 (
Member_ID varchar(15) NOT NULL,
PRIMARY KEY (Member_ID)
@@ -5423,8 +5445,6 @@
('666666', 'Enrolled', '2006-05-12', 'CHF' ),
('666666', 'Disenrolled', '2006-06-01', 'CAD' )|
DROP FUNCTION IF EXISTS bug21493|
-Warnings:
-Note 1305 FUNCTION bug21493 does not exist
CREATE FUNCTION bug21493(paramMember VARCHAR(15)) RETURNS varchar(45)
BEGIN
DECLARE tracks VARCHAR(45);
@@ -5451,11 +5471,4 @@
DROP FUNCTION bug21493|
DROP TABLE t3,t4|
End of 5.0 tests
-set names utf8|
-drop database if exists това_е_дълго_име_за_база_данни_нали|
-create database това_е_дълго_име_за_база_данни_нали|
-INSERT INTO mysql.proc VALUES ('това_е_дълго_име_за_база_данни_нали','това_е_процедура_с_доста_дълго_име_нали_и_още_по_дълго','PROCEDURE','това_е_процедура_с_доста_дълго_име_нали_и_още_по_дълго','SQL','CONTAINS_SQL','NO','DEFINER','','','bad_body','root@localhost',now(), now(),'','')|
-call това_е_дълго_име_за_база_данни_нали.това_е_процедура_с_доста_дълго_име_нали_и_още_по_дълго()|
-ERROR HY000: Failed to load routine това_е_дълго_име_за_база_данни_нали.. The table mysql.proc is missing, corrupt, or contains bad data (internal code -6)
-drop database това_е_дълго_име_за_база_данни_нали|
drop table t1,t2;
--- 1.207/mysql-test/t/sp.test 2006-09-29 19:39:22 +04:00
+++ 1.208/mysql-test/t/sp.test 2006-09-29 19:39:22 +04:00
@@ -6291,6 +6291,41 @@
call bug21416()|
drop procedure bug21416|
+
+#
+# BUG#21414: SP: Procedure undroppable, to some extent
+#
+--disable_warnings
+DROP PROCEDURE IF EXISTS bug21414|
+--enable_warnings
+
+CREATE PROCEDURE bug21414() SELECT 1|
+
+FLUSH TABLES WITH READ LOCK|
+
+--error ER_CANT_UPDATE_WITH_READLOCK
+DROP PROCEDURE bug21414|
+
+UNLOCK TABLES|
+
+--echo The following should succeed.
+DROP PROCEDURE bug21414|
+
+
+#
+# BUG#21311: Possible stack overrun if SP has non-latin1 name
+#
+set names utf8|
+--disable_warnings
+drop database if exists това_е_дълго_име_за_база_данни_нали|
+--enable_warnings
+create database това_е_дълго_име_за_база_данни_нали|
+INSERT INTO mysql.proc VALUES ('това_е_дълго_име_за_база_данни_нали','това_е_процедура_с_доста_дълго_име_нали_и_още_по_дълго','PROCEDURE','това_е_процедура_с_доста_дълго_име_нали_и_още_по_дълго','SQL','CONTAINS_SQL','NO','DEFINER','','','bad_body','root@localhost',now(), now(),'','')|
+--error ER_SP_PROC_TABLE_CORRUPT
+call това_е_дълго_име_за_база_данни_нали.това_е_процедура_с_доста_дълго_име_нали_и_още_по_дълго()|
+drop database това_е_дълго_име_за_база_данни_нали|
+
+
#
# BUG#21414: SP: Procedure undroppable, to some extent
#
@@ -6355,9 +6390,9 @@
('666666', 'Enrolled', '2006-05-12', 'CHF' ),
('666666', 'Disenrolled', '2006-06-01', 'CAD' )|
-#--disable_warnings
+--disable_warnings
DROP FUNCTION IF EXISTS bug21493|
-#--enable_warnings
+--enable_warnings
CREATE FUNCTION bug21493(paramMember VARCHAR(15)) RETURNS varchar(45)
BEGIN
@@ -6379,19 +6414,6 @@
--echo End of 5.0 tests
-
-#
-# BUG#21311: Possible stack overrun if SP has non-latin1 name
-#
-set names utf8|
---disable_warnings
-drop database if exists това_е_дълго_име_за_база_данни_нали|
---enable_warnings
-create database това_е_дълго_име_за_база_данни_нали|
-INSERT INTO mysql.proc VALUES ('това_е_дълго_име_за_база_данни_нали','това_е_процедура_с_доста_дълго_име_нали_и_още_по_дълго','PROCEDURE','това_е_процедура_с_доста_дълго_име_нали_и_още_по_дълго','SQL','CONTAINS_SQL','NO','DEFINER','','','bad_body','root@localhost',now(), now(),'','')|
---error ER_SP_PROC_TABLE_CORRUPT
-call това_е_дълго_име_за_база_данни_нали.това_е_процедура_с_доста_дълго_име_нали_и_още_по_дълго()|
-drop database това_е_дълго_име_за_база_данни_нали|
#
# BUG#NNNN: New bug synopsis
| Thread |
|---|
| • bk commit into 5.1 tree (dlenev:1.2332) | dlenev | 29 Sep |