Commit 7914e244 authored by monty@mysql.com's avatar monty@mysql.com

Merge bk-internal.mysql.com:/home/bk/mysql-4.1

into mysql.com:/home/my/mysql-4.1
parents 22a76c1d babcdb64
...@@ -26,6 +26,7 @@ bar@deer.(none) ...@@ -26,6 +26,7 @@ bar@deer.(none)
bar@gw.udmsearch.izhnet.ru bar@gw.udmsearch.izhnet.ru
bar@mysql.com bar@mysql.com
bar@noter.intranet.mysql.r18.ru bar@noter.intranet.mysql.r18.ru
bell@51.0.168.192.in-addr.arpa
bell@laptop.sanja.is.com.ua bell@laptop.sanja.is.com.ua
bell@sanja.is.com.ua bell@sanja.is.com.ua
bk@admin.bk bk@admin.bk
......
...@@ -339,3 +339,22 @@ select distinct sum(b) from (select a,b from t1) y group by a; ...@@ -339,3 +339,22 @@ select distinct sum(b) from (select a,b from t1) y group by a;
sum(b) sum(b)
4 4
drop table t1; drop table t1;
create table t1(a int);
create table t2(a int);
create table t3(a int);
insert into t1 values(1),(1);
insert into t2 values(2),(2);
insert into t3 values(3),(3);
select * from t1 union distinct select * from t2 union all select * from t3;
a
1
2
3
3
select * from (select * from t1 union distinct select * from t2 union all select * from t3) X;
a
1
2
3
3
drop table t1, t2, t3;
...@@ -123,7 +123,7 @@ drop table t1; ...@@ -123,7 +123,7 @@ drop table t1;
set @a=_latin2'test'; set @a=_latin2'test';
select charset(@a),collation(@a),coercibility(@a); select charset(@a),collation(@a),coercibility(@a);
charset(@a) collation(@a) coercibility(@a) charset(@a) collation(@a) coercibility(@a)
latin2 latin2_general_ci 3 latin2 latin2_general_ci 2
select @a=_latin2'TEST'; select @a=_latin2'TEST';
@a=_latin2'TEST' @a=_latin2'TEST'
1 1
...@@ -133,12 +133,13 @@ select @a=_latin2'TEST' collate latin2_bin; ...@@ -133,12 +133,13 @@ select @a=_latin2'TEST' collate latin2_bin;
set @a=_latin2'test' collate latin2_general_ci; set @a=_latin2'test' collate latin2_general_ci;
select charset(@a),collation(@a),coercibility(@a); select charset(@a),collation(@a),coercibility(@a);
charset(@a) collation(@a) coercibility(@a) charset(@a) collation(@a) coercibility(@a)
latin2 latin2_general_ci 0 latin2 latin2_general_ci 2
select @a=_latin2'TEST'; select @a=_latin2'TEST';
@a=_latin2'TEST' @a=_latin2'TEST'
1 1
select @a=_latin2'TEST' collate latin2_bin; select @a=_latin2'TEST' collate latin2_bin;
ERROR HY000: Illegal mix of collations (latin2_general_ci,EXPLICIT) and (latin2_bin,EXPLICIT) for operation '=' @a=_latin2'TEST' collate latin2_bin
0
select charset(@a:=_latin2'test'); select charset(@a:=_latin2'test');
charset(@a:=_latin2'test') charset(@a:=_latin2'test')
latin2 latin2
...@@ -147,21 +148,22 @@ collation(@a:=_latin2'test') ...@@ -147,21 +148,22 @@ collation(@a:=_latin2'test')
latin2_general_ci latin2_general_ci
select coercibility(@a:=_latin2'test'); select coercibility(@a:=_latin2'test');
coercibility(@a:=_latin2'test') coercibility(@a:=_latin2'test')
3 2
select collation(@a:=_latin2'test' collate latin2_bin); select collation(@a:=_latin2'test' collate latin2_bin);
collation(@a:=_latin2'test' collate latin2_bin) collation(@a:=_latin2'test' collate latin2_bin)
latin2_bin latin2_bin
select coercibility(@a:=_latin2'test' collate latin2_bin); select coercibility(@a:=_latin2'test' collate latin2_bin);
coercibility(@a:=_latin2'test' collate latin2_bin) coercibility(@a:=_latin2'test' collate latin2_bin)
0 2
select (@a:=_latin2'test' collate latin2_bin) = _latin2'TEST'; select (@a:=_latin2'test' collate latin2_bin) = _latin2'TEST';
(@a:=_latin2'test' collate latin2_bin) = _latin2'TEST' (@a:=_latin2'test' collate latin2_bin) = _latin2'TEST'
0 0
select charset(@a),collation(@a),coercibility(@a); select charset(@a),collation(@a),coercibility(@a);
charset(@a) collation(@a) coercibility(@a) charset(@a) collation(@a) coercibility(@a)
latin2 latin2_bin 0 latin2 latin2_bin 2
select (@a:=_latin2'test' collate latin2_bin) = _latin2'TEST' collate latin2_general_ci; select (@a:=_latin2'test' collate latin2_bin) = _latin2'TEST' collate latin2_general_ci;
ERROR HY000: Illegal mix of collations (latin2_bin,EXPLICIT) and (latin2_general_ci,EXPLICIT) for operation '=' (@a:=_latin2'test' collate latin2_bin) = _latin2'TEST' collate latin2_general_ci
1
create table t1 (a varchar(50)); create table t1 (a varchar(50));
reset master; reset master;
SET TIMESTAMP=10000; SET TIMESTAMP=10000;
......
...@@ -224,3 +224,15 @@ select distinct sum(b) from t1 group by a; ...@@ -224,3 +224,15 @@ select distinct sum(b) from t1 group by a;
select distinct sum(b) from (select a,b from t1) y group by a; select distinct sum(b) from (select a,b from t1) y group by a;
drop table t1; drop table t1;
#
# test of union subquery in the FROM clause with complex distinct/all (BUG#6565)
#
create table t1(a int);
create table t2(a int);
create table t3(a int);
insert into t1 values(1),(1);
insert into t2 values(2),(2);
insert into t3 values(3),(3);
select * from t1 union distinct select * from t2 union all select * from t3;
select * from (select * from t1 union distinct select * from t2 union all select * from t3) X;
drop table t1, t2, t3;
...@@ -84,7 +84,6 @@ select @a=_latin2'TEST' collate latin2_bin; ...@@ -84,7 +84,6 @@ select @a=_latin2'TEST' collate latin2_bin;
set @a=_latin2'test' collate latin2_general_ci; set @a=_latin2'test' collate latin2_general_ci;
select charset(@a),collation(@a),coercibility(@a); select charset(@a),collation(@a),coercibility(@a);
select @a=_latin2'TEST'; select @a=_latin2'TEST';
--error 1267
select @a=_latin2'TEST' collate latin2_bin; select @a=_latin2'TEST' collate latin2_bin;
# #
...@@ -97,7 +96,6 @@ select collation(@a:=_latin2'test' collate latin2_bin); ...@@ -97,7 +96,6 @@ select collation(@a:=_latin2'test' collate latin2_bin);
select coercibility(@a:=_latin2'test' collate latin2_bin); select coercibility(@a:=_latin2'test' collate latin2_bin);
select (@a:=_latin2'test' collate latin2_bin) = _latin2'TEST'; select (@a:=_latin2'test' collate latin2_bin) = _latin2'TEST';
select charset(@a),collation(@a),coercibility(@a); select charset(@a),collation(@a),coercibility(@a);
--error 1267
select (@a:=_latin2'test' collate latin2_bin) = _latin2'TEST' collate latin2_general_ci; select (@a:=_latin2'test' collate latin2_bin) = _latin2'TEST' collate latin2_general_ci;
# Check that user variables are binlogged correctly (BUG#3875) # Check that user variables are binlogged correctly (BUG#3875)
......
...@@ -2361,7 +2361,7 @@ static user_var_entry *get_variable(HASH *hash, LEX_STRING &name, ...@@ -2361,7 +2361,7 @@ static user_var_entry *get_variable(HASH *hash, LEX_STRING &name,
entry->value=0; entry->value=0;
entry->length=0; entry->length=0;
entry->update_query_id=0; entry->update_query_id=0;
entry->collation.set(NULL, DERIVATION_NONE); entry->collation.set(NULL, DERIVATION_IMPLICIT);
/* /*
If we are here, we were called from a SET or a query which sets a If we are here, we were called from a SET or a query which sets a
variable. Imagine it is this: variable. Imagine it is this:
...@@ -2419,8 +2419,8 @@ bool Item_func_set_user_var::fix_fields(THD *thd, TABLE_LIST *tables, ...@@ -2419,8 +2419,8 @@ bool Item_func_set_user_var::fix_fields(THD *thd, TABLE_LIST *tables,
and the variable has previously been initialized. and the variable has previously been initialized.
*/ */
if (!entry->collation.collation || !args[0]->null_value) if (!entry->collation.collation || !args[0]->null_value)
entry->collation.set(args[0]->collation); entry->collation.set(args[0]->collation.collation, DERIVATION_IMPLICIT);
collation.set(entry->collation); collation.set(entry->collation.collation, DERIVATION_IMPLICIT);
cached_result_type= args[0]->result_type(); cached_result_type= args[0]->result_type();
return 0; return 0;
} }
...@@ -2432,7 +2432,7 @@ Item_func_set_user_var::fix_length_and_dec() ...@@ -2432,7 +2432,7 @@ Item_func_set_user_var::fix_length_and_dec()
maybe_null=args[0]->maybe_null; maybe_null=args[0]->maybe_null;
max_length=args[0]->max_length; max_length=args[0]->max_length;
decimals=args[0]->decimals; decimals=args[0]->decimals;
collation.set(args[0]->collation); collation.set(args[0]->collation.collation, DERIVATION_IMPLICIT);
} }
...@@ -2659,7 +2659,7 @@ Item_func_set_user_var::update() ...@@ -2659,7 +2659,7 @@ Item_func_set_user_var::update()
res= update_hash((void*) save_result.vstr->ptr(), res= update_hash((void*) save_result.vstr->ptr(),
save_result.vstr->length(), STRING_RESULT, save_result.vstr->length(), STRING_RESULT,
save_result.vstr->charset(), save_result.vstr->charset(),
args[0]->collation.derivation); DERIVATION_IMPLICIT);
break; break;
} }
case ROW_RESULT: case ROW_RESULT:
......
...@@ -132,10 +132,16 @@ static int mysql_derived(THD *thd, LEX *lex, SELECT_LEX_UNIT *unit, ...@@ -132,10 +132,16 @@ static int mysql_derived(THD *thd, LEX *lex, SELECT_LEX_UNIT *unit,
/* /*
Temp table is created so that it hounours if UNION without ALL is to be Temp table is created so that it hounours if UNION without ALL is to be
processed processed
As 'distinct' parameter we always pass FALSE (0), because underlying
query will control distinct condition by itself. Correct test of
distinct underlying query will be is_union &&
!unit->union_distinct->next_select() (i.e. it is union and last distinct
SELECT is last SELECT of UNION).
*/ */
if (!(table= create_tmp_table(thd, &derived_result->tmp_table_param, if (!(table= create_tmp_table(thd, &derived_result->tmp_table_param,
unit->types, (ORDER*) 0, unit->types, (ORDER*) 0,
is_union && unit->union_distinct, 1, FALSE, 1,
(first_select->options | thd->options | (first_select->options | thd->options |
TMP_TABLE_ALL_COLUMNS), TMP_TABLE_ALL_COLUMNS),
HA_POS_ERROR, HA_POS_ERROR,
......
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