Commit 12d879c9 authored by unknown's avatar unknown

Lot's of clean-ups and fixes for 4.0.14.


include/my_global.h:
  CONFIG_SMP
mysql-test/r/grant.result:
  Test cases for bug fixes
mysql-test/r/insert_select.result:
  Test cases for bug fixes
mysql-test/r/union.result:
  Test cases for bug fixes
mysql-test/t/grant.test:
  Test cases for bug fixes
mysql-test/t/insert_select.test:
  Test cases for bug fixes
mysql-test/t/union.test:
  Test cases for bug fixes
sql/sql_acl.cc:
  Fix for granting global privileges on db level
sql/sql_parse.cc:
  Fix for INSERT... SELECT
sql/sql_select.cc:
  removing a fix
sql/sql_union.cc:
  P
parent 0a23db44
...@@ -263,10 +263,10 @@ C_MODE_END ...@@ -263,10 +263,10 @@ C_MODE_END
#endif #endif
#ifdef HAVE_ATOMIC_ADD #ifdef HAVE_ATOMIC_ADD
#define __SMP__ #define __SMP__
#include <asm/atomic.h>
#ifndef CONFIG_SMP #ifndef CONFIG_SMP
#define CONFIG_SMP #define CONFIG_SMP
#endif #endif
#include <asm/atomic.h>
#endif #endif
#include <errno.h> /* Recommended by debian */ #include <errno.h> /* Recommended by debian */
/* We need the following to go around a problem with openssl on solaris */ /* We need the following to go around a problem with openssl on solaris */
......
...@@ -106,3 +106,5 @@ delete from mysql.tables_priv where user='mysqltest_1'; ...@@ -106,3 +106,5 @@ delete from mysql.tables_priv where user='mysqltest_1';
delete from mysql.columns_priv where user='mysqltest_1'; delete from mysql.columns_priv where user='mysqltest_1';
flush privileges; flush privileges;
drop table t1; drop table t1;
GRANT FILE on mysqltest.* to mysqltest_1@localhost;
Wrong usage of DB GRANT and GLOBAL PRIVILEGES
...@@ -80,3 +80,493 @@ Log_name Pos Event_type Server_id Orig_log_pos Info ...@@ -80,3 +80,493 @@ Log_name Pos Event_type Server_id Orig_log_pos Info
master-bin.001 4 Start 1 4 Server ver: VERSION, Binlog ver: 3 master-bin.001 4 Start 1 4 Server ver: VERSION, Binlog ver: 3
master-bin.001 79 Query 1 79 use test; insert into t1 select * from t2 master-bin.001 79 Query 1 79 use test; insert into t1 select * from t2
drop table t1, t2; drop table t1, t2;
drop table if exists t1, t2;
create table t1 (a int not null);
create table t2 (a int not null);
insert into t1 values (1);
insert into t1 values (a+2);
insert into t1 values (a+3);
insert into t1 values (4),(a+5);
insert into t1 select * from t1;
select * from t1;
a
1
2
3
4
5
1
2
3
4
5
insert into t1 select * from t1 as t2;
select * from t1;
a
1
2
3
4
5
1
2
3
4
5
1
2
3
4
5
1
2
3
4
5
insert into t2 select * from t1 as t2;
select * from t1;
a
1
2
3
4
5
1
2
3
4
5
1
2
3
4
5
1
2
3
4
5
insert into t1 select t2.a from t1,t2;
select * from t1;
a
1
2
3
4
5
1
2
3
4
5
1
2
3
4
5
1
2
3
4
5
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
5
drop table t1,t2;
...@@ -96,6 +96,13 @@ a b ...@@ -96,6 +96,13 @@ a b
select found_rows(); select found_rows();
found_rows() found_rows()
6 6
select sql_calc_found_rows a,b from t1 union all select a,b from t2 limit 2;
a b
1 a
2 b
select found_rows();
found_rows()
6
explain select a,b from t1 union all select a,b from t2; explain select a,b from t1 union all select a,b from t2;
table type possible_keys key key_len ref rows Extra table type possible_keys key key_len ref rows Extra
t1 ALL NULL NULL NULL NULL 4 t1 ALL NULL NULL NULL NULL 4
...@@ -259,3 +266,14 @@ uid rl g1 cid gg ...@@ -259,3 +266,14 @@ uid rl g1 cid gg
uid rl g1 cid gg uid rl g1 cid gg
1 NULL V1 NULL 1 1 NULL V1 NULL 1
drop table t1,t2,t3,t4,t5,t6; drop table t1,t2,t3,t4,t5,t6;
CREATE TABLE t1 (a int not null, b char (10) not null);
insert into t1 values(1,'a'),(2,'b'),(3,'c'),(3,'c');
CREATE TABLE t2 (a int not null, b char (10) not null);
insert into t2 values (3,'c'),(4,'d'),(5,'f'),(6,'e');
create table t3 select a,b from t1 union select a,b from t2;
create table t4 (select a,b from t1) union (select a,b from t2) limit 2;
insert into t4 select a,b from t1 union select a,b from t2;
insert into t3 (select a,b from t1) union (select a,b from t2) limit 2;
select * from t3;
select * from t4;
drop table t1,t2,t3,t4;
...@@ -72,3 +72,5 @@ delete from mysql.tables_priv where user='mysqltest_1'; ...@@ -72,3 +72,5 @@ delete from mysql.tables_priv where user='mysqltest_1';
delete from mysql.columns_priv where user='mysqltest_1'; delete from mysql.columns_priv where user='mysqltest_1';
flush privileges; flush privileges;
drop table t1; drop table t1;
--error 1054
GRANT FILE on mysqltest.* to mysqltest_1@localhost;
...@@ -87,3 +87,19 @@ let $VERSION=`select version()`; ...@@ -87,3 +87,19 @@ let $VERSION=`select version()`;
--replace_result $VERSION VERSION --replace_result $VERSION VERSION
show binlog events; show binlog events;
drop table t1, t2; drop table t1, t2;
drop table if exists t1, t2;
create table t1 (a int not null);
create table t2 (a int not null);
insert into t1 values (1);
insert into t1 values (a+2);
insert into t1 values (a+3);
insert into t1 values (4),(a+5);
insert into t1 select * from t1;
select * from t1;
insert into t1 select * from t1 as t2;
select * from t1;
insert into t2 select * from t1 as t2;
select * from t1;
insert into t1 select t2.a from t1,t2;
select * from t1;
drop table t1,t2;
...@@ -23,6 +23,8 @@ select 't1',b,count(*) from t1 group by b UNION select 't2',b,count(*) from t2 g ...@@ -23,6 +23,8 @@ select 't1',b,count(*) from t1 group by b UNION select 't2',b,count(*) from t2 g
explain (select a,b from t1 limit 2) union all (select a,b from t2 order by a limit 1) order by b desc; explain (select a,b from t1 limit 2) union all (select a,b from t2 order by a limit 1) order by b desc;
(select sql_calc_found_rows a,b from t1 limit 2) union all (select a,b from t2 order by a) limit 2; (select sql_calc_found_rows a,b from t1 limit 2) union all (select a,b from t2 order by a) limit 2;
select found_rows(); select found_rows();
select sql_calc_found_rows a,b from t1 union all select a,b from t2 limit 2;
select found_rows();
# #
# Test some error conditions with UNION # Test some error conditions with UNION
...@@ -157,3 +159,14 @@ SELECT t4.uid, t5.rl, t3.gn as g1, t4.cid, t4.gid as gg FROM t3, t6, t1, t4 left ...@@ -157,3 +159,14 @@ SELECT t4.uid, t5.rl, t3.gn as g1, t4.cid, t4.gid as gg FROM t3, t6, t1, t4 left
(SELECT t4.uid, t5.rl, t3.gn as g1, t4.cid, t4.gid as gg FROM t3, t6, t1, t4 left join t5 on t5.rid = t4.rid left join t2 on t2.cid = t4.cid WHERE t3.gid=t4.gid AND t6.uid = t4.uid AND t3.must IS NOT NULL AND t6.uc = t1.cid AND t1.cv = "dummy" AND t6.un = "test") UNION (SELECT t4.uid, t5.rl, t3.gn as g1, t4.cid, t4.gid as gg FROM t3, t6, t1, t4 left join t5 on t5.rid = t4.rid left join t2 on t2.cid = t4.cid WHERE t3.gid=t4.gid AND t6.uid = t4.uid AND t6.uc = t1.cid AND t1.cv = "dummy" AND t6.un = "test"); (SELECT t4.uid, t5.rl, t3.gn as g1, t4.cid, t4.gid as gg FROM t3, t6, t1, t4 left join t5 on t5.rid = t4.rid left join t2 on t2.cid = t4.cid WHERE t3.gid=t4.gid AND t6.uid = t4.uid AND t3.must IS NOT NULL AND t6.uc = t1.cid AND t1.cv = "dummy" AND t6.un = "test") UNION (SELECT t4.uid, t5.rl, t3.gn as g1, t4.cid, t4.gid as gg FROM t3, t6, t1, t4 left join t5 on t5.rid = t4.rid left join t2 on t2.cid = t4.cid WHERE t3.gid=t4.gid AND t6.uid = t4.uid AND t6.uc = t1.cid AND t1.cv = "dummy" AND t6.un = "test");
drop table t1,t2,t3,t4,t5,t6; drop table t1,t2,t3,t4,t5,t6;
CREATE TABLE t1 (a int not null, b char (10) not null);
insert into t1 values(1,'a'),(2,'b'),(3,'c'),(3,'c');
CREATE TABLE t2 (a int not null, b char (10) not null);
insert into t2 values (3,'c'),(4,'d'),(5,'f'),(6,'e');
create table t3 select a,b from t1 union select a,b from t2;
create table t4 (select a,b from t1) union (select a,b from t2) limit 2;
insert into t4 select a,b from t1 union select a,b from t2;
insert into t3 (select a,b from t1) union (select a,b from t2) limit 2;
select * from t3;
select * from t4;
drop table t1,t2,t3,t4;
...@@ -2325,7 +2325,7 @@ int mysql_grant (THD *thd, const char *db, List <LEX_USER> &list, ...@@ -2325,7 +2325,7 @@ int mysql_grant (THD *thd, const char *db, List <LEX_USER> &list,
} }
else else
{ {
net_printf(&thd->net,ER_WRONG_USAGE,"DB GRANT","GLOBAL PRIVILEGEY"); net_printf(&thd->net,ER_WRONG_USAGE,"DB GRANT","GLOBAL PRIVILEGES");
result= -1; result= -1;
} }
} }
......
...@@ -3386,14 +3386,18 @@ TABLE_LIST *add_table_to_list(Table_ident *table, LEX_STRING *alias, ...@@ -3386,14 +3386,18 @@ TABLE_LIST *add_table_to_list(Table_ident *table, LEX_STRING *alias,
tables ; tables ;
tables=tables->next) tables=tables->next)
{ {
if (!strcmp(alias_str,tables->alias) && !strcmp(ptr->db, tables->db)) if (ptr->db_length == tables->db_length && !memcmp(ptr->db, tables->db, ptr->db_length))
{ {
if ((thd->lex.sql_command & (SQLCOM_INSERT_SELECT | SQLCOM_REPLACE_SELECT)) if ((thd->lex.sql_command & (SQLCOM_INSERT_SELECT | SQLCOM_REPLACE_SELECT))
&& (tables->lock_type & (TL_WRITE_CONCURRENT_INSERT | && (tables->lock_type & (TL_WRITE_CONCURRENT_INSERT |
TL_WRITE_LOW_PRIORITY | TL_WRITE_DELAYED | TL_WRITE_LOW_PRIORITY | TL_WRITE_DELAYED |
TL_WRITE))) TL_WRITE)))
{
if (ptr->real_name_length == tables->real_name_length &&
!memcmp(ptr->real_name, tables->real_name,ptr->real_name_length))
thd->lex.select->options |= OPTION_BUFFER_RESULT; thd->lex.select->options |= OPTION_BUFFER_RESULT;
else }
else if (!strcmp(alias_str,tables->alias))
{ {
net_printf(&thd->net,ER_NONUNIQ_TABLE,alias_str); /* purecov: tested */ net_printf(&thd->net,ER_NONUNIQ_TABLE,alias_str); /* purecov: tested */
DBUG_RETURN(0); /* purecov: tested */ DBUG_RETURN(0); /* purecov: tested */
......
...@@ -974,10 +974,6 @@ mysql_select(THD *thd,TABLE_LIST *tables,List<Item> &fields,COND *conds, ...@@ -974,10 +974,6 @@ mysql_select(THD *thd,TABLE_LIST *tables,List<Item> &fields,COND *conds,
thd->select_limit)) thd->select_limit))
{ {
if (!join.join_tab[join.const_tables].select->quick) if (!join.join_tab[join.const_tables].select->quick)
error= return_zero_rows(&join, result, tables, fields,
0, select_options,
"Impossible WHERE noticed after reading const tables",
having,procedure);
goto err; goto err;
} }
} }
......
...@@ -33,7 +33,7 @@ int mysql_union(THD *thd, LEX *lex,select_result *result) ...@@ -33,7 +33,7 @@ int mysql_union(THD *thd, LEX *lex,select_result *result)
TABLE *table; TABLE *table;
int describe=(lex->select_lex.options & SELECT_DESCRIBE) ? 1 : 0; int describe=(lex->select_lex.options & SELECT_DESCRIBE) ? 1 : 0;
int res; int res;
bool found_rows_for_union= 0; bool found_rows_for_union= lex->select_lex.options & OPTION_FOUND_ROWS;
TABLE_LIST result_table_list; TABLE_LIST result_table_list;
TABLE_LIST *first_table=(TABLE_LIST *)lex->select_lex.table_list.first; TABLE_LIST *first_table=(TABLE_LIST *)lex->select_lex.table_list.first;
TMP_TABLE_PARAM tmp_table_param; TMP_TABLE_PARAM tmp_table_param;
...@@ -63,7 +63,6 @@ int mysql_union(THD *thd, LEX *lex,select_result *result) ...@@ -63,7 +63,6 @@ int mysql_union(THD *thd, LEX *lex,select_result *result)
*/ */
lex_sl= sl; lex_sl= sl;
order= (ORDER *) lex_sl->order_list.first; order= (ORDER *) lex_sl->order_list.first;
found_rows_for_union = lex->select_lex.options & OPTION_FOUND_ROWS && sl->select_limit;
// This is done to eliminate unnecessary slowing down of the first query // This is done to eliminate unnecessary slowing down of the first query
if (!order || !describe) if (!order || !describe)
last_sl->next=0; // Remove this extra element last_sl->next=0; // Remove this extra element
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment