Commit 8c225bca authored by unknown's avatar unknown

merge fixes


sql/sql_class.h:
  Auto merged
sql/sql_select.cc:
  Auto merged
sql/sql_table.cc:
  Auto merged
sql/sql_union.cc:
  Auto merged
parents f2753fe9 425ae918
...@@ -16,6 +16,7 @@ load data infile '../../std_data/words.dat' into table t1 ignore 1 lines; ...@@ -16,6 +16,7 @@ load data infile '../../std_data/words.dat' into table t1 ignore 1 lines;
select count(*) from t1; select count(*) from t1;
count(*) count(*)
69 69
create table t2 like t1;
drop table t1; drop table t1;
show binlog events; show binlog events;
Log_name Pos Event_type Server_id Orig_log_pos Info Log_name Pos Event_type Server_id Orig_log_pos Info
...@@ -27,7 +28,8 @@ master-bin.000001 263 Query 1 263 use `test`; drop table t1 ...@@ -27,7 +28,8 @@ master-bin.000001 263 Query 1 263 use `test`; drop table t1
master-bin.000001 311 Query 1 311 use `test`; create table t1 (word char(20) not null) master-bin.000001 311 Query 1 311 use `test`; create table t1 (word char(20) not null)
master-bin.000001 386 Create_file 1 386 db=test;table=t1;file_id=1;block_len=581 master-bin.000001 386 Create_file 1 386 db=test;table=t1;file_id=1;block_len=581
master-bin.000001 1056 Exec_load 1 1056 ;file_id=1 master-bin.000001 1056 Exec_load 1 1056 ;file_id=1
master-bin.000001 1079 Query 1 1079 use `test`; drop table t1 master-bin.000001 1079 Query 1 1079 use `test`; create table t2 like t1
master-bin.000001 1137 Query 1 1137 use `test`; drop table t1
show binlog events from 79 limit 1; show binlog events from 79 limit 1;
Log_name Pos Event_type Server_id Orig_log_pos Info Log_name Pos Event_type Server_id Orig_log_pos Info
master-bin.000001 79 Query 1 79 use `test`; create table t1(n int not null auto_increment primary key) master-bin.000001 79 Query 1 79 use `test`; create table t1(n int not null auto_increment primary key)
...@@ -38,6 +40,10 @@ master-bin.000001 172 Intvar 1 172 INSERT_ID=1 ...@@ -38,6 +40,10 @@ master-bin.000001 172 Intvar 1 172 INSERT_ID=1
show binlog events from 79 limit 2,1; show binlog events from 79 limit 2,1;
Log_name Pos Event_type Server_id Orig_log_pos Info Log_name Pos Event_type Server_id Orig_log_pos Info
master-bin.000001 200 Query 1 200 use `test`; insert into t1 values (NULL) master-bin.000001 200 Query 1 200 use `test`; insert into t1 values (NULL)
show binlog events from 79 limit 2,2;
Log_name Pos Event_type Server_id Orig_log_pos Info
master-bin.000001 200 Query 1 200 use `test`; insert into t1 values (NULL)
master-bin.000001 263 Query 1 263 use `test`; drop table t1
flush logs; flush logs;
create table t5 (a int); create table t5 (a int);
drop table t5; drop table t5;
...@@ -57,8 +63,9 @@ master-bin.000001 263 Query 1 263 use `test`; drop table t1 ...@@ -57,8 +63,9 @@ master-bin.000001 263 Query 1 263 use `test`; drop table t1
master-bin.000001 311 Query 1 311 use `test`; create table t1 (word char(20) not null) master-bin.000001 311 Query 1 311 use `test`; create table t1 (word char(20) not null)
master-bin.000001 386 Create_file 1 386 db=test;table=t1;file_id=1;block_len=581 master-bin.000001 386 Create_file 1 386 db=test;table=t1;file_id=1;block_len=581
master-bin.000001 1056 Exec_load 1 1056 ;file_id=1 master-bin.000001 1056 Exec_load 1 1056 ;file_id=1
master-bin.000001 1079 Query 1 1079 use `test`; drop table t1 master-bin.000001 1079 Query 1 1079 use `test`; create table t2 like t1
master-bin.000001 1127 Rotate 1 1127 master-bin.000002;pos=4 master-bin.000001 1137 Query 1 1137 use `test`; drop table t1
master-bin.000001 1185 Rotate 1 1185 master-bin.000002;pos=4
show binlog events in 'master-bin.000002'; show binlog events in 'master-bin.000002';
Log_name Pos Event_type Server_id Orig_log_pos Info Log_name Pos Event_type Server_id Orig_log_pos Info
master-bin.000002 4 Query 1 4 use `test`; create table t5 (a int) master-bin.000002 4 Query 1 4 use `test`; create table t5 (a int)
...@@ -85,10 +92,11 @@ slave-bin.000001 263 Query 1 263 use `test`; drop table t1 ...@@ -85,10 +92,11 @@ slave-bin.000001 263 Query 1 263 use `test`; drop table t1
slave-bin.000001 311 Query 1 311 use `test`; create table t1 (word char(20) not null) slave-bin.000001 311 Query 1 311 use `test`; create table t1 (word char(20) not null)
slave-bin.000001 386 Create_file 1 386 db=test;table=t1;file_id=1;block_len=581 slave-bin.000001 386 Create_file 1 386 db=test;table=t1;file_id=1;block_len=581
slave-bin.000001 1065 Exec_load 1 1065 ;file_id=1 slave-bin.000001 1065 Exec_load 1 1065 ;file_id=1
slave-bin.000001 1088 Query 1 1088 use `test`; drop table t1 slave-bin.000001 1088 Query 1 1088 use `test`; create table t2 like t1
slave-bin.000001 1136 Query 1 1136 use `test`; create table t5 (a int) slave-bin.000001 1146 Query 1 1146 use `test`; drop table t1
slave-bin.000001 1194 Query 1 1194 use `test`; drop table t5 slave-bin.000001 1194 Query 1 1194 use `test`; create table t5 (a int)
slave-bin.000001 1242 Rotate 2 1242 slave-bin.000002;pos=4 slave-bin.000001 1252 Query 1 1252 use `test`; drop table t5
slave-bin.000001 1300 Rotate 2 1300 slave-bin.000002;pos=4
show binlog events in 'slave-bin.000002' from 4; show binlog events in 'slave-bin.000002' from 4;
Log_name Pos Event_type Server_id Orig_log_pos Info Log_name Pos Event_type Server_id Orig_log_pos Info
slave-bin.000002 4 Query 1 4 use `test`; create table t1 (n int) slave-bin.000002 4 Query 1 4 use `test`; create table t1 (n int)
......
...@@ -539,7 +539,7 @@ aa ...@@ -539,7 +539,7 @@ aa
show create table t1; show create table t1;
Table Create Table Table Create Table
t1 CREATE TABLE `t1` ( t1 CREATE TABLE `t1` (
`a` char(2) NOT NULL default '' `a` char(2) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1; drop table t1;
create table t1 SELECT 12 as a UNION select "aa" as a; create table t1 SELECT 12 as a UNION select "aa" as a;
...@@ -550,7 +550,7 @@ aa ...@@ -550,7 +550,7 @@ aa
show create table t1; show create table t1;
Table Create Table Table Create Table
t1 CREATE TABLE `t1` ( t1 CREATE TABLE `t1` (
`a` char(2) NOT NULL default '' `a` char(2) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1; drop table t1;
create table t1 SELECT 12 as a UNION select 12.2 as a; create table t1 SELECT 12 as a UNION select 12.2 as a;
...@@ -561,7 +561,7 @@ a ...@@ -561,7 +561,7 @@ a
show create table t1; show create table t1;
Table Create Table Table Create Table
t1 CREATE TABLE `t1` ( t1 CREATE TABLE `t1` (
`a` double(4,1) NOT NULL default '0.0' `a` double(4,1) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1; drop table t1;
create table t2 (it1 tinyint, it2 tinyint not null, i int not null, ib bigint, f float, d double, y year, da date, dt datetime, sc char(10), sv varchar(10), b blob, tx text); create table t2 (it1 tinyint, it2 tinyint not null, i int not null, ib bigint, f float, d double, y year, da date, dt datetime, sc char(10), sv varchar(10), b blob, tx text);
...@@ -585,7 +585,7 @@ it2 ...@@ -585,7 +585,7 @@ it2
show create table t1; show create table t1;
Table Create Table Table Create Table
t1 CREATE TABLE `t1` ( t1 CREATE TABLE `t1` (
`it2` int(11) NOT NULL default '0' `it2` int(11) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1; drop table t1;
create table t1 SELECT i from t2 UNION select f from t2; create table t1 SELECT i from t2 UNION select f from t2;
...@@ -799,7 +799,7 @@ select * from t1; ...@@ -799,7 +799,7 @@ select * from t1;
show create table t1; show create table t1;
Table Create Table Table Create Table
t1 CREATE TABLE `t1` ( t1 CREATE TABLE `t1` (
`1` bigint(1) NOT NULL default '0' `1` bigint(1) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1; drop table t1;
create table t1 select _latin1"test" union select _latin2"testt" ; create table t1 select _latin1"test" union select _latin2"testt" ;
...@@ -808,7 +808,7 @@ create table t1 select _latin2"test" union select _latin2"testt" ; ...@@ -808,7 +808,7 @@ create table t1 select _latin2"test" union select _latin2"testt" ;
show create table t1; show create table t1;
Table Create Table Table Create Table
t1 CREATE TABLE `t1` ( t1 CREATE TABLE `t1` (
`test` char(5) character set latin2 NOT NULL default '' `test` char(5) character set latin2 default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1; drop table t1;
create table t1 (s char(200)); create table t1 (s char(200));
...@@ -869,3 +869,27 @@ show status like 'Slow_queries'; ...@@ -869,3 +869,27 @@ show status like 'Slow_queries';
Variable_name Value Variable_name Value
Slow_queries 3 Slow_queries 3
drop table t1; drop table t1;
create table t1 ( RID int(11) not null default '0', IID int(11) not null default '0', nada varchar(50) not null,NAME varchar(50) not null,PHONE varchar(50) not null) engine=MyISAM;
insert into t1 ( RID,IID,nada,NAME,PHONE) values (1, 1, 'main', 'a', '111'), (2, 1, 'main', 'b', '222'), (3, 1, 'main', 'c', '333'), (4, 1, 'main', 'd', '444'), (5, 1, 'main', 'e', '555'), (6, 2, 'main', 'c', '333'), (7, 2, 'main', 'd', '454'), (8, 2, 'main', 'e', '555'), (9, 2, 'main', 'f', '666'), (10, 2, 'main', 'g', '777');
select A.NAME, A.PHONE, B.NAME, B.PHONE from t1 A left join t1 B on A.NAME = B.NAME and B.IID = 2 where A.IID = 1 and (A.PHONE <> B.PHONE or B.NAME is null) union select A.NAME, A.PHONE, B.NAME, B.PHONE from t1 B left join t1 A on B.NAME = A.NAME and A.IID = 1 where B.IID = 2 and (A.PHONE <> B.PHONE or A.NAME is null);
NAME PHONE NAME PHONE
a 111 NULL NULL
b 222 NULL NULL
d 444 d 454
NULL NULL f 666
NULL NULL g 777
drop table t1;
create table t1 ( id int, name char(10) not null, name2 char(10) not null ) engine=innodb;
insert into t1 values(1,'first','fff'),(2,'second','sss'),(3,'third','ttt');
select name2 from t1 union all select name from t1 union all select id from t1;
name2
fff
sss
ttt
first
second
third
1
2
3
drop table t1;
...@@ -35,12 +35,14 @@ drop table t1; ...@@ -35,12 +35,14 @@ drop table t1;
create table t1 (word char(20) not null); create table t1 (word char(20) not null);
load data infile '../../std_data/words.dat' into table t1 ignore 1 lines; load data infile '../../std_data/words.dat' into table t1 ignore 1 lines;
select count(*) from t1; select count(*) from t1;
create table t2 like t1;
drop table t1; drop table t1;
--replace_result $VERSION VERSION --replace_result $VERSION VERSION
show binlog events; show binlog events;
show binlog events from 79 limit 1; show binlog events from 79 limit 1;
show binlog events from 79 limit 2; show binlog events from 79 limit 2;
show binlog events from 79 limit 2,1; show binlog events from 79 limit 2,1;
show binlog events from 79 limit 2,2;
flush logs; flush logs;
# We need an extra update before doing save_master_pos. # We need an extra update before doing save_master_pos.
......
...@@ -465,3 +465,12 @@ show status like 'Slow_queries'; ...@@ -465,3 +465,12 @@ show status like 'Slow_queries';
select count(*) from t1 where a=7 union select count(*) from t1 where b=13; select count(*) from t1 where a=7 union select count(*) from t1 where b=13;
show status like 'Slow_queries'; show status like 'Slow_queries';
drop table t1; drop table t1;
create table t1 ( RID int(11) not null default '0', IID int(11) not null default '0', nada varchar(50) not null,NAME varchar(50) not null,PHONE varchar(50) not null) engine=MyISAM;
insert into t1 ( RID,IID,nada,NAME,PHONE) values (1, 1, 'main', 'a', '111'), (2, 1, 'main', 'b', '222'), (3, 1, 'main', 'c', '333'), (4, 1, 'main', 'd', '444'), (5, 1, 'main', 'e', '555'), (6, 2, 'main', 'c', '333'), (7, 2, 'main', 'd', '454'), (8, 2, 'main', 'e', '555'), (9, 2, 'main', 'f', '666'), (10, 2, 'main', 'g', '777');
select A.NAME, A.PHONE, B.NAME, B.PHONE from t1 A left join t1 B on A.NAME = B.NAME and B.IID = 2 where A.IID = 1 and (A.PHONE <> B.PHONE or B.NAME is null) union select A.NAME, A.PHONE, B.NAME, B.PHONE from t1 B left join t1 A on B.NAME = A.NAME and A.IID = 1 where B.IID = 2 and (A.PHONE <> B.PHONE or A.NAME is null);
drop table t1;
create table t1 ( id int, name char(10) not null, name2 char(10) not null ) engine=innodb;
insert into t1 values(1,'first','fff'),(2,'second','sss'),(3,'third','ttt');
select name2 from t1 union all select name from t1 union all select id from t1;
drop table t1;
...@@ -2551,7 +2551,7 @@ my_bool grant_init(THD *org_thd) ...@@ -2551,7 +2551,7 @@ my_bool grant_init(THD *org_thd)
do do
{ {
GRANT_TABLE *mem_check; GRANT_TABLE *mem_check;
if (!(mem_check=new GRANT_TABLE(t_table,c_table)) || !mem_check->ok()) if (!(mem_check=new GRANT_TABLE(t_table,c_table)))
{ {
/* This could only happen if we are out memory */ /* This could only happen if we are out memory */
grant_option= FALSE; /* purecov: deadcode */ grant_option= FALSE; /* purecov: deadcode */
...@@ -2570,7 +2570,7 @@ my_bool grant_init(THD *org_thd) ...@@ -2570,7 +2570,7 @@ my_bool grant_init(THD *org_thd)
} }
} }
if (my_hash_insert(&column_priv_hash,(byte*) mem_check)) if (mem_check->ok() && my_hash_insert(&column_priv_hash,(byte*) mem_check))
{ {
grant_option= FALSE; grant_option= FALSE;
goto end_unlock; goto end_unlock;
......
...@@ -1077,11 +1077,11 @@ public: ...@@ -1077,11 +1077,11 @@ public:
uint hidden_field_count; uint hidden_field_count;
uint group_parts,group_length,group_null_parts; uint group_parts,group_length,group_null_parts;
uint quick_group; uint quick_group;
bool using_indirect_summary_function; bool using_indirect_summary_function, all_nulls;
TMP_TABLE_PARAM() TMP_TABLE_PARAM()
:copy_funcs_it(copy_funcs), copy_field(0), group_parts(0), :copy_funcs_it(copy_funcs), copy_field(0), group_parts(0),
group_length(0), group_null_parts(0) group_length(0), group_null_parts(0), all_nulls(0)
{} {}
~TMP_TABLE_PARAM() ~TMP_TABLE_PARAM()
{ {
......
...@@ -4964,6 +4964,8 @@ create_tmp_table(THD *thd,TMP_TABLE_PARAM *param,List<Item> &fields, ...@@ -4964,6 +4964,8 @@ create_tmp_table(THD *thd,TMP_TABLE_PARAM *param,List<Item> &fields,
tmp_from_field, group != 0,not_all_columns); tmp_from_field, group != 0,not_all_columns);
if (!new_field) if (!new_field)
goto err; // Should be OOM goto err; // Should be OOM
if (param->all_nulls)
new_field->flags&= ~NOT_NULL_FLAG; // Because of outer join
tmp_from_field++; tmp_from_field++;
*(reg_field++)= new_field; *(reg_field++)= new_field;
reclength+=new_field->pack_length(); reclength+=new_field->pack_length();
...@@ -4999,6 +5001,8 @@ create_tmp_table(THD *thd,TMP_TABLE_PARAM *param,List<Item> &fields, ...@@ -4999,6 +5001,8 @@ create_tmp_table(THD *thd,TMP_TABLE_PARAM *param,List<Item> &fields,
goto err; // Got OOM goto err; // Got OOM
continue; // Some kindf of const item continue; // Some kindf of const item
} }
if (param->all_nulls)
new_field->flags&= ~NOT_NULL_FLAG; // Because of outer join
if (type == Item::SUM_FUNC_ITEM) if (type == Item::SUM_FUNC_ITEM)
((Item_sum *) item)->result_field= new_field; ((Item_sum *) item)->result_field= new_field;
tmp_from_field++; tmp_from_field++;
......
...@@ -1845,6 +1845,20 @@ int mysql_create_like_table(THD* thd, TABLE_LIST* table, ...@@ -1845,6 +1845,20 @@ int mysql_create_like_table(THD* thd, TABLE_LIST* table,
table_name); /* purecov: inspected */ table_name); /* purecov: inspected */
DBUG_RETURN(-1); /* purecov: inspected */ DBUG_RETURN(-1); /* purecov: inspected */
} }
else
{
// Must be written before unlock
mysql_update_log.write(thd,thd->query, thd->query_length);
if (mysql_bin_log.is_open())
{
thd->clear_error();
Query_log_event qinfo(thd, thd->query, thd->query_length,
test(create_info->options &
HA_LEX_CREATE_TMP_TABLE));
mysql_bin_log.write(&qinfo);
}
}
DBUG_RETURN(0); DBUG_RETURN(0);
table_exists: table_exists:
......
...@@ -206,6 +206,7 @@ int st_select_lex_unit::prepare(THD *thd_arg, select_result *sel_result, ...@@ -206,6 +206,7 @@ int st_select_lex_unit::prepare(THD *thd_arg, select_result *sel_result,
if (first_select->next_select()) if (first_select->next_select())
{ {
union_result->tmp_table_param.field_count= types.elements; union_result->tmp_table_param.field_count= types.elements;
union_result->tmp_table_param.all_nulls= true;
if (!(table= create_tmp_table(thd_arg, if (!(table= create_tmp_table(thd_arg,
&union_result->tmp_table_param, types, &union_result->tmp_table_param, types,
(ORDER*) 0, !union_option, 1, (ORDER*) 0, !union_option, 1,
...@@ -315,6 +316,7 @@ int st_select_lex_unit::exec() ...@@ -315,6 +316,7 @@ int st_select_lex_unit::exec()
if it use same tables if it use same tables
*/ */
uint tablenr=0; uint tablenr=0;
ulong query_id= thd->query_id;
for (TABLE_LIST *table_list= (TABLE_LIST*) sl->table_list.first; for (TABLE_LIST *table_list= (TABLE_LIST*) sl->table_list.first;
table_list; table_list;
table_list= table_list->next, tablenr++) table_list= table_list->next, tablenr++)
...@@ -329,6 +331,8 @@ int st_select_lex_unit::exec() ...@@ -329,6 +331,8 @@ int st_select_lex_unit::exec()
*/ */
setup_table_map(table_list->table, table_list, tablenr); setup_table_map(table_list->table, table_list, tablenr);
} }
for (unsigned int i=0; i < table_list->table->fields; i++)
table_list->table->field[i]->query_id= query_id;
} }
res= sl->join->optimize(); res= sl->join->optimize();
} }
......
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