Merge sunlight.local:/local_work/tmp_merge-5.0-opt-mysql
into sunlight.local:/local_work/tmp_merge-5.1-opt-mysql client/mysql.cc: Auto merged mysql-test/r/date_formats.result: Auto merged mysql-test/r/func_gconcat.result: Auto merged mysql-test/r/func_group.result: Auto merged mysql-test/r/func_str.result: Auto merged mysql-test/r/group_min_max.result: Auto merged BitKeeper/deleted/.del-make_win_src_distribution.sh~f80d8fca44e4e5f1: Auto merged BitKeeper/deleted/.del-mysqld.dsp~ffdbf2d234e23e56: Auto merged BitKeeper/deleted/.del-mysqld_ia64.dsp~7f8cf84d81ee04e2: Auto merged BitKeeper/deleted/.del-mysqldump.dsp~a8bd23547d3fc27e: Auto merged BitKeeper/deleted/.del-mysqldump_ia64.dsp~a2aabe898be35b31: Auto merged mysql-test/r/innodb.result: Auto merged mysql-test/r/innodb_mysql.result: Auto merged mysql-test/r/ps_7ndb.result: Auto merged mysql-test/r/type_ranges.result: Auto merged mysql-test/r/udf.result: Auto merged mysql-test/r/union.result: Auto merged mysql-test/r/view.result: Auto merged mysql-test/t/date_formats.test: Auto merged mysql-test/t/func_gconcat.test: Auto merged mysql-test/t/func_group.test: Auto merged mysql-test/t/group_min_max.test: Auto merged mysql-test/t/innodb.test: Auto merged mysql-test/t/innodb_mysql.test: Auto merged mysql-test/t/mysql.test: Auto merged mysql-test/t/select.test: Auto merged mysql-test/t/sp.test: Auto merged mysql-test/t/view.test: Auto merged sql/field.cc: Auto merged sql/item_cmpfunc.cc: Auto merged sql/item_cmpfunc.h: Auto merged sql/item_func.cc: Auto merged sql/item_func.h: Auto merged sql/item_strfunc.cc: Auto merged sql/item_subselect.cc: Auto merged sql/item_subselect.h: Auto merged sql/opt_range.h: Auto merged sql/sql_base.cc: Auto merged sql/sql_class.cc: Auto merged sql/sql_insert.cc: Auto merged sql/sql_parse.cc: Auto merged sql/sql_show.cc: Auto merged sql/sql_yacc.yy: Auto merged sql/time.cc: Auto merged storage/ndb/test/ndbapi/Makefile.am: Auto merged strings/decimal.c: Auto merged mysql-test/r/analyse.result: Manual merge mysql-test/r/bigint.result: Manual merge mysql-test/r/create.result: Manual merge mysql-test/r/information_schema.result: Manual merge mysql-test/r/ps_2myisam.result: Manual merge mysql-test/r/ps_3innodb.result: Manual merge mysql-test/r/ps_4heap.result: Manual merge mysql-test/r/ps_5merge.result: Manual merge mysql-test/r/ps_6bdb.result: Manual merge mysql-test/r/rpl_insert_id.result: Manual merge mysql-test/r/select.result: Manual merge mysql-test/r/sp.result: Manual merge mysql-test/r/subselect.result: Manual merge mysql-test/t/information_schema.test: Manual merge mysql-test/t/rpl_insert_id.test: Manual merge sql/field.h: Manual merge sql/item.cc: Manual merge sql/item.h: Manual merge sql/item_strfunc.h: Manual merge sql/item_sum.cc: Manual merge sql/mysql_priv.h: Manual merge sql/share/errmsg.txt: Manual merge sql/sql_class.h: Manual merge sql/sql_select.cc: Manual merge
This commit is contained in:
commit
ddb91478e8
@ -40,8 +40,8 @@ RSC=rc.exe
|
||||
# PROP Output_Dir "Release"
|
||||
# PROP Intermediate_Dir "Release"
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
|
||||
# ADD CPP /nologo /MT /W3 /O2 /I "include" /I "taocrypt\include" /I "mySTL" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
|
||||
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "YASSL_PREFIX" /YX /FD /c
|
||||
# ADD CPP /nologo /MT /W3 /O2 /I "include" /I "taocrypt\include" /I "mySTL" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "YASSL_PREFIX" /YX /FD /c
|
||||
# ADD BASE RSC /l 0x409 /d "NDEBUG"
|
||||
# ADD RSC /l 0x409 /d "NDEBUG"
|
||||
BSC32=bscmake.exe
|
||||
@ -63,8 +63,8 @@ LIB32=link.exe -lib
|
||||
# PROP Output_Dir "Debug"
|
||||
# PROP Intermediate_Dir "Debug"
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
|
||||
# ADD CPP /nologo /MTd /W3 /Gm /ZI /Od /I "include" /I "taocrypt\include" /I "mySTL" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /FR /YX /FD /GZ /c
|
||||
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "YASSL_PREFIX" /YX /FD /GZ /c
|
||||
# ADD CPP /nologo /MTd /W3 /Gm /ZI /Od /I "include" /I "taocrypt\include" /I "mySTL" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "YASSL_PREFIX" /FR /YX /FD /GZ /c
|
||||
# ADD BASE RSC /l 0x409 /d "_DEBUG"
|
||||
# ADD RSC /l 0x409 /d "_DEBUG"
|
||||
BSC32=bscmake.exe
|
||||
|
@ -39,10 +39,10 @@ t2 CREATE TABLE `t2` (
|
||||
`Field_name` varbinary(255) NOT NULL DEFAULT '',
|
||||
`Min_value` varbinary(255) DEFAULT NULL,
|
||||
`Max_value` varbinary(255) DEFAULT NULL,
|
||||
`Min_length` bigint(11) NOT NULL DEFAULT '0',
|
||||
`Max_length` bigint(11) NOT NULL DEFAULT '0',
|
||||
`Empties_or_zeros` bigint(11) NOT NULL DEFAULT '0',
|
||||
`Nulls` bigint(11) NOT NULL DEFAULT '0',
|
||||
`Min_length` int(11) NOT NULL DEFAULT '0',
|
||||
`Max_length` int(11) NOT NULL DEFAULT '0',
|
||||
`Empties_or_zeros` int(11) NOT NULL DEFAULT '0',
|
||||
`Nulls` int(11) NOT NULL DEFAULT '0',
|
||||
`Avg_value_or_avg_length` varbinary(255) NOT NULL DEFAULT '',
|
||||
`Std` varbinary(255) DEFAULT NULL,
|
||||
`Optimal_fieldtype` varbinary(64) NOT NULL DEFAULT ''
|
||||
@ -58,10 +58,10 @@ t2 CREATE TABLE `t2` (
|
||||
`Field_name` varbinary(255) NOT NULL DEFAULT '',
|
||||
`Min_value` varbinary(255) DEFAULT NULL,
|
||||
`Max_value` varbinary(255) DEFAULT NULL,
|
||||
`Min_length` bigint(11) NOT NULL DEFAULT '0',
|
||||
`Max_length` bigint(11) NOT NULL DEFAULT '0',
|
||||
`Empties_or_zeros` bigint(11) NOT NULL DEFAULT '0',
|
||||
`Nulls` bigint(11) NOT NULL DEFAULT '0',
|
||||
`Min_length` int(11) NOT NULL DEFAULT '0',
|
||||
`Max_length` int(11) NOT NULL DEFAULT '0',
|
||||
`Empties_or_zeros` int(11) NOT NULL DEFAULT '0',
|
||||
`Nulls` int(11) NOT NULL DEFAULT '0',
|
||||
`Avg_value_or_avg_length` varbinary(255) NOT NULL DEFAULT '',
|
||||
`Std` varbinary(255) DEFAULT NULL,
|
||||
`Optimal_fieldtype` varbinary(64) NOT NULL DEFAULT ''
|
||||
@ -81,10 +81,10 @@ t2 CREATE TABLE `t2` (
|
||||
`Field_name` varbinary(255) NOT NULL DEFAULT '',
|
||||
`Min_value` varbinary(255) DEFAULT NULL,
|
||||
`Max_value` varbinary(255) DEFAULT NULL,
|
||||
`Min_length` bigint(11) NOT NULL DEFAULT '0',
|
||||
`Max_length` bigint(11) NOT NULL DEFAULT '0',
|
||||
`Empties_or_zeros` bigint(11) NOT NULL DEFAULT '0',
|
||||
`Nulls` bigint(11) NOT NULL DEFAULT '0',
|
||||
`Min_length` int(11) NOT NULL DEFAULT '0',
|
||||
`Max_length` int(11) NOT NULL DEFAULT '0',
|
||||
`Empties_or_zeros` int(11) NOT NULL DEFAULT '0',
|
||||
`Nulls` int(11) NOT NULL DEFAULT '0',
|
||||
`Avg_value_or_avg_length` varbinary(255) NOT NULL DEFAULT '',
|
||||
`Std` varbinary(255) DEFAULT NULL,
|
||||
`Optimal_fieldtype` varbinary(64) NOT NULL DEFAULT ''
|
||||
|
@ -174,7 +174,7 @@ create table t1 select 1 as 'a';
|
||||
show create table t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`a` bigint(1) NOT NULL DEFAULT '0'
|
||||
`a` int(1) NOT NULL DEFAULT '0'
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
drop table t1;
|
||||
create table t1 select 9223372036854775809 as 'a';
|
||||
|
@ -465,7 +465,7 @@ t2 CREATE TABLE `t2` (
|
||||
`ifnull(h,h)` decimal(5,4) DEFAULT NULL,
|
||||
`ifnull(i,i)` year(4) DEFAULT NULL,
|
||||
`ifnull(j,j)` date DEFAULT NULL,
|
||||
`ifnull(k,k)` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`ifnull(k,k)` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`ifnull(l,l)` datetime DEFAULT NULL,
|
||||
`ifnull(m,m)` varchar(1) DEFAULT NULL,
|
||||
`ifnull(n,n)` varchar(3) DEFAULT NULL,
|
||||
@ -681,7 +681,7 @@ Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`b` int(11) NOT NULL,
|
||||
`a` varchar(12) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
|
||||
`c` bigint(1) NOT NULL DEFAULT '0',
|
||||
`c` int(1) NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`a`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
drop table t1;
|
||||
@ -694,7 +694,7 @@ Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`b` int(11) DEFAULT NULL,
|
||||
`a` varchar(12) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
|
||||
`c` bigint(1) NOT NULL DEFAULT '0',
|
||||
`c` int(1) NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`a`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
drop table t1;
|
||||
|
@ -647,3 +647,16 @@ select charset(group_concat(c1 order by c2)) from t1;
|
||||
charset(group_concat(c1 order by c2))
|
||||
latin1
|
||||
drop table t1;
|
||||
CREATE TABLE t1 (a INT(10), b LONGTEXT, PRIMARY KEY (a));
|
||||
SET GROUP_CONCAT_MAX_LEN = 20000000;
|
||||
INSERT INTO t1 VALUES (1,REPEAT(CONCAT('A',CAST(CHAR(0) AS BINARY),'B'), 40000));
|
||||
INSERT INTO t1 SELECT a + 1, b FROM t1;
|
||||
SELECT a, CHAR_LENGTH(b) FROM t1;
|
||||
a CHAR_LENGTH(b)
|
||||
1 120000
|
||||
2 120000
|
||||
SELECT CHAR_LENGTH( GROUP_CONCAT(b) ) FROM t1;
|
||||
CHAR_LENGTH( GROUP_CONCAT(b) )
|
||||
240001
|
||||
SET GROUP_CONCAT_MAX_LEN = 1024;
|
||||
DROP TABLE t1;
|
||||
|
@ -812,6 +812,144 @@ SELECT MAX(id) FROM t1 WHERE id < 3 AND a=2 AND b=6;
|
||||
MAX(id)
|
||||
NULL
|
||||
DROP TABLE t1;
|
||||
create table t1m (a int) engine=myisam;
|
||||
create table t1i (a int) engine=innodb;
|
||||
create table t2m (a int) engine=myisam;
|
||||
create table t2i (a int) engine=innodb;
|
||||
insert into t2m values (5);
|
||||
insert into t2i values (5);
|
||||
select min(a) from t1m;
|
||||
min(a)
|
||||
NULL
|
||||
select min(7) from t1m;
|
||||
min(7)
|
||||
NULL
|
||||
select min(7) from DUAL;
|
||||
min(7)
|
||||
NULL
|
||||
explain select min(7) from t2m join t1m;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Select tables optimized away
|
||||
select min(7) from t2m join t1m;
|
||||
min(7)
|
||||
NULL
|
||||
select max(a) from t1m;
|
||||
max(a)
|
||||
NULL
|
||||
select max(7) from t1m;
|
||||
max(7)
|
||||
NULL
|
||||
select max(7) from DUAL;
|
||||
max(7)
|
||||
NULL
|
||||
explain select max(7) from t2m join t1m;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Select tables optimized away
|
||||
select max(7) from t2m join t1m;
|
||||
max(7)
|
||||
NULL
|
||||
select 1, min(a) from t1m where a=99;
|
||||
1 min(a)
|
||||
1 NULL
|
||||
select 1, min(a) from t1m where 1=99;
|
||||
1 min(a)
|
||||
1 NULL
|
||||
select 1, min(1) from t1m where a=99;
|
||||
1 min(1)
|
||||
1 NULL
|
||||
select 1, min(1) from t1m where 1=99;
|
||||
1 min(1)
|
||||
1 NULL
|
||||
select 1, max(a) from t1m where a=99;
|
||||
1 max(a)
|
||||
1 NULL
|
||||
select 1, max(a) from t1m where 1=99;
|
||||
1 max(a)
|
||||
1 NULL
|
||||
select 1, max(1) from t1m where a=99;
|
||||
1 max(1)
|
||||
1 NULL
|
||||
select 1, max(1) from t1m where 1=99;
|
||||
1 max(1)
|
||||
1 NULL
|
||||
select min(a) from t1i;
|
||||
min(a)
|
||||
NULL
|
||||
select min(7) from t1i;
|
||||
min(7)
|
||||
NULL
|
||||
select min(7) from DUAL;
|
||||
min(7)
|
||||
NULL
|
||||
explain select min(7) from t2i join t1i;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t2i ALL NULL NULL NULL NULL 1
|
||||
1 SIMPLE t1i ALL NULL NULL NULL NULL 1
|
||||
select min(7) from t2i join t1i;
|
||||
min(7)
|
||||
NULL
|
||||
select max(a) from t1i;
|
||||
max(a)
|
||||
NULL
|
||||
select max(7) from t1i;
|
||||
max(7)
|
||||
NULL
|
||||
select max(7) from DUAL;
|
||||
max(7)
|
||||
NULL
|
||||
explain select max(7) from t2i join t1i;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t2i ALL NULL NULL NULL NULL 1
|
||||
1 SIMPLE t1i ALL NULL NULL NULL NULL 1
|
||||
select max(7) from t2i join t1i;
|
||||
max(7)
|
||||
NULL
|
||||
select 1, min(a) from t1i where a=99;
|
||||
1 min(a)
|
||||
1 NULL
|
||||
select 1, min(a) from t1i where 1=99;
|
||||
1 min(a)
|
||||
1 NULL
|
||||
select 1, min(1) from t1i where a=99;
|
||||
1 min(1)
|
||||
1 NULL
|
||||
select 1, min(1) from t1i where 1=99;
|
||||
1 min(1)
|
||||
1 NULL
|
||||
select 1, max(a) from t1i where a=99;
|
||||
1 max(a)
|
||||
1 NULL
|
||||
select 1, max(a) from t1i where 1=99;
|
||||
1 max(a)
|
||||
1 NULL
|
||||
select 1, max(1) from t1i where a=99;
|
||||
1 max(1)
|
||||
1 NULL
|
||||
select 1, max(1) from t1i where 1=99;
|
||||
1 max(1)
|
||||
1 NULL
|
||||
explain select count(*), min(7), max(7) from t1m, t1i;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1m system NULL NULL NULL NULL 0 const row not found
|
||||
1 SIMPLE t1i ALL NULL NULL NULL NULL 1
|
||||
select count(*), min(7), max(7) from t1m, t1i;
|
||||
count(*) min(7) max(7)
|
||||
0 NULL NULL
|
||||
explain select count(*), min(7), max(7) from t1m, t2i;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1m system NULL NULL NULL NULL 0 const row not found
|
||||
1 SIMPLE t2i ALL NULL NULL NULL NULL 1
|
||||
select count(*), min(7), max(7) from t1m, t2i;
|
||||
count(*) min(7) max(7)
|
||||
0 NULL NULL
|
||||
explain select count(*), min(7), max(7) from t2m, t1i;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t2m system NULL NULL NULL NULL 1
|
||||
1 SIMPLE t1i ALL NULL NULL NULL NULL 1
|
||||
select count(*), min(7), max(7) from t2m, t1i;
|
||||
count(*) min(7) max(7)
|
||||
0 NULL NULL
|
||||
drop table t1m, t1i, t2m, t2i;
|
||||
CREATE TABLE t1 (id int PRIMARY KEY, b char(3), INDEX(b));
|
||||
INSERT INTO t1 VALUES (1,'xx'), (2,'aa');
|
||||
SELECT * FROM t1;
|
||||
@ -979,3 +1117,14 @@ SUM(a)
|
||||
6
|
||||
DROP TABLE t1;
|
||||
set div_precision_increment= @sav_dpi;
|
||||
CREATE TABLE t1 (a INT PRIMARY KEY, b INT);
|
||||
INSERT INTO t1 VALUES (1,1), (2,2);
|
||||
CREATE TABLE t2 (a INT PRIMARY KEY, b INT);
|
||||
INSERT INTO t2 VALUES (1,1), (3,3);
|
||||
SELECT SQL_NO_CACHE
|
||||
(SELECT SUM(c.a) FROM t1 ttt, t2 ccc
|
||||
WHERE ttt.a = ccc.b AND ttt.a = t.a GROUP BY ttt.a) AS minid
|
||||
FROM t1 t, t2 c WHERE t.a = c.b;
|
||||
minid
|
||||
NULL
|
||||
DROP TABLE t1,t2;
|
||||
|
@ -1041,6 +1041,49 @@ select * from t1 where f1='test' and (f2= sha("TEST") or f2= sha("test"));
|
||||
f1 f2
|
||||
test a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
|
||||
drop table t1;
|
||||
CREATE TABLE t1 (a varchar(10));
|
||||
INSERT INTO t1 VALUES ('abc'), ('xyz');
|
||||
SELECT a, CONCAT(a,' ',a) AS c FROM t1
|
||||
HAVING LEFT(c,LENGTH(c)-INSTR(REVERSE(c)," ")) = a;
|
||||
a c
|
||||
abc abc abc
|
||||
xyz xyz xyz
|
||||
SELECT a, CONCAT(a,' ',a) AS c FROM t1
|
||||
HAVING LEFT(CONCAT(a,' ',a),
|
||||
LENGTH(CONCAT(a,' ',a))-
|
||||
INSTR(REVERSE(CONCAT(a,' ',a))," ")) = a;
|
||||
a c
|
||||
abc abc abc
|
||||
xyz xyz xyz
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (s varchar(10));
|
||||
INSERT INTO t1 VALUES ('yadda'), ('yaddy');
|
||||
EXPLAIN EXTENDED SELECT s FROM t1 WHERE TRIM(s) > 'ab';
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`s` AS `s` from `test`.`t1` where (trim(`test`.`t1`.`s`) > _latin1'ab')
|
||||
EXPLAIN EXTENDED SELECT s FROM t1 WHERE TRIM('y' FROM s) > 'ab';
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`s` AS `s` from `test`.`t1` where (trim(both _latin1'y' from `test`.`t1`.`s`) > _latin1'ab')
|
||||
EXPLAIN EXTENDED SELECT s FROM t1 WHERE TRIM(LEADING 'y' FROM s) > 'ab';
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`s` AS `s` from `test`.`t1` where (trim(leading _latin1'y' from `test`.`t1`.`s`) > _latin1'ab')
|
||||
EXPLAIN EXTENDED SELECT s FROM t1 WHERE TRIM(TRAILING 'y' FROM s) > 'ab';
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`s` AS `s` from `test`.`t1` where (trim(trailing _latin1'y' from `test`.`t1`.`s`) > _latin1'ab')
|
||||
EXPLAIN EXTENDED SELECT s FROM t1 WHERE TRIM(BOTH 'y' FROM s) > 'ab';
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`s` AS `s` from `test`.`t1` where (trim(both _latin1'y' from `test`.`t1`.`s`) > _latin1'ab')
|
||||
DROP TABLE t1;
|
||||
End of 4.1 tests
|
||||
create table t1 (d decimal default null);
|
||||
insert into t1 values (null);
|
||||
|
@ -796,3 +796,28 @@ aaa
|
||||
show warnings;
|
||||
Level Code Message
|
||||
drop table t1, t2;
|
||||
CREATE TABLE t1 (a tinyint(3), b varchar(255), PRIMARY KEY (a));
|
||||
INSERT INTO t1 VALUES (1,'-----'), (6,'Allemagne'), (17,'Autriche'),
|
||||
(25,'Belgique'), (54,'Danemark'), (62,'Espagne'), (68,'France');
|
||||
CREATE TABLE t2 (a tinyint(3), b tinyint(3), PRIMARY KEY (a), KEY b (b));
|
||||
INSERT INTO t2 VALUES (1,1), (2,1), (6,6), (18,17), (15,25), (16,25),
|
||||
(17,25), (10,54), (5,62),(3,68);
|
||||
CREATE VIEW v1 AS select t1.a, concat(t1.b,'') AS b, t1.b as real_b from t1;
|
||||
explain
|
||||
SELECT straight_join sql_no_cache v1.a, v1.b, v1.real_b from t2, v1
|
||||
where t2.b=v1.a GROUP BY t2.b;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t2 index b b 2 NULL 10 Using index
|
||||
1 PRIMARY t1 eq_ref PRIMARY PRIMARY 1 test.t2.b 1
|
||||
SELECT straight_join sql_no_cache v1.a, v1.b, v1.real_b from t2, v1
|
||||
where t2.b=v1.a GROUP BY t2.b;
|
||||
a b real_b
|
||||
1 ----- -----
|
||||
6 Allemagne Allemagne
|
||||
17 Autriche Autriche
|
||||
25 Belgique Belgique
|
||||
54 Danemark Danemark
|
||||
62 Espagne Espagne
|
||||
68 France France
|
||||
DROP VIEW v1;
|
||||
DROP TABLE t1,t2;
|
||||
|
@ -2099,3 +2099,46 @@ SOUTH EAST SOUTH EAST
|
||||
SOUTH WEST SOUTH WEST
|
||||
WESTERN WESTERN
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (id1 INT, id2 INT);
|
||||
CREATE TABLE t2 (id2 INT, id3 INT, id5 INT);
|
||||
CREATE TABLE t3 (id3 INT, id4 INT);
|
||||
CREATE TABLE t4 (id4 INT);
|
||||
CREATE TABLE t5 (id5 INT, id6 INT);
|
||||
CREATE TABLE t6 (id6 INT);
|
||||
INSERT INTO t1 VALUES(1,1);
|
||||
INSERT INTO t2 VALUES(1,1,1);
|
||||
INSERT INTO t3 VALUES(1,1);
|
||||
INSERT INTO t4 VALUES(1);
|
||||
INSERT INTO t5 VALUES(1,1);
|
||||
INSERT INTO t6 VALUES(1);
|
||||
SELECT * FROM
|
||||
t1
|
||||
NATURAL JOIN
|
||||
(t2 JOIN (t3 NATURAL JOIN t4, t5 NATURAL JOIN t6)
|
||||
ON (t3.id3 = t2.id3 AND t5.id5 = t2.id5));
|
||||
id2 id1 id3 id5 id4 id3 id6 id5
|
||||
1 1 1 1 1 1 1 1
|
||||
SELECT * FROM
|
||||
t1
|
||||
NATURAL JOIN
|
||||
(((t3 NATURAL JOIN t4) join (t5 NATURAL JOIN t6) on t3.id4 = t5.id5) JOIN t2
|
||||
ON (t3.id3 = t2.id3 AND t5.id5 = t2.id5));
|
||||
id2 id1 id4 id3 id6 id5 id3 id5
|
||||
1 1 1 1 1 1 1 1
|
||||
SELECT * FROM t1 NATURAL JOIN ((t3 join (t5 NATURAL JOIN t6)) JOIN t2);
|
||||
id2 id1 id3 id4 id6 id5 id3 id5
|
||||
1 1 1 1 1 1 1 1
|
||||
SELECT * FROM
|
||||
(t2 JOIN (t3 NATURAL JOIN t4, t5 NATURAL JOIN t6)
|
||||
ON (t3.id3 = t2.id3 AND t5.id5 = t2.id5))
|
||||
NATURAL JOIN
|
||||
t1;
|
||||
id2 id3 id5 id4 id3 id6 id5 id1
|
||||
1 1 1 1 1 1 1 1
|
||||
SELECT * FROM
|
||||
(t2 JOIN ((t3 NATURAL JOIN t4) join (t5 NATURAL JOIN t6)))
|
||||
NATURAL JOIN
|
||||
t1;
|
||||
id2 id3 id5 id4 id3 id6 id5 id1
|
||||
1 1 1 1 1 1 1 1
|
||||
DROP TABLE t1,t2,t3,t4,t5,t6;
|
||||
|
@ -1218,6 +1218,76 @@ f1()
|
||||
DROP FUNCTION f1;
|
||||
DROP PROCEDURE p1;
|
||||
DROP USER mysql_bug20230@localhost;
|
||||
SELECT t.table_name, c1.column_name
|
||||
FROM information_schema.tables t
|
||||
INNER JOIN
|
||||
information_schema.columns c1
|
||||
ON t.table_schema = c1.table_schema AND
|
||||
t.table_name = c1.table_name
|
||||
WHERE t.table_schema = 'information_schema' AND
|
||||
c1.ordinal_position =
|
||||
( SELECT COALESCE(MIN(c2.ordinal_position),1)
|
||||
FROM information_schema.columns c2
|
||||
WHERE c2.table_schema = t.table_schema AND
|
||||
c2.table_name = t.table_name AND
|
||||
c2.column_name LIKE '%SCHEMA%'
|
||||
);
|
||||
table_name column_name
|
||||
CHARACTER_SETS CHARACTER_SET_NAME
|
||||
COLLATIONS COLLATION_NAME
|
||||
COLLATION_CHARACTER_SET_APPLICABILITY COLLATION_NAME
|
||||
COLUMNS TABLE_SCHEMA
|
||||
COLUMN_PRIVILEGES TABLE_SCHEMA
|
||||
KEY_COLUMN_USAGE CONSTRAINT_SCHEMA
|
||||
ROUTINES ROUTINE_SCHEMA
|
||||
SCHEMATA SCHEMA_NAME
|
||||
SCHEMA_PRIVILEGES TABLE_SCHEMA
|
||||
STATISTICS TABLE_SCHEMA
|
||||
TABLES TABLE_SCHEMA
|
||||
TABLE_CONSTRAINTS CONSTRAINT_SCHEMA
|
||||
TABLE_PRIVILEGES TABLE_SCHEMA
|
||||
TRIGGERS TRIGGER_SCHEMA
|
||||
USER_PRIVILEGES GRANTEE
|
||||
VIEWS TABLE_SCHEMA
|
||||
SELECT t.table_name, c1.column_name
|
||||
FROM information_schema.tables t
|
||||
INNER JOIN
|
||||
information_schema.columns c1
|
||||
ON t.table_schema = c1.table_schema AND
|
||||
t.table_name = c1.table_name
|
||||
WHERE t.table_schema = 'information_schema' AND
|
||||
c1.ordinal_position =
|
||||
( SELECT COALESCE(MIN(c2.ordinal_position),1)
|
||||
FROM information_schema.columns c2
|
||||
WHERE c2.table_schema = 'information_schema' AND
|
||||
c2.table_name = t.table_name AND
|
||||
c2.column_name LIKE '%SCHEMA%'
|
||||
);
|
||||
table_name column_name
|
||||
CHARACTER_SETS CHARACTER_SET_NAME
|
||||
COLLATIONS COLLATION_NAME
|
||||
COLLATION_CHARACTER_SET_APPLICABILITY COLLATION_NAME
|
||||
COLUMNS TABLE_SCHEMA
|
||||
COLUMN_PRIVILEGES TABLE_SCHEMA
|
||||
KEY_COLUMN_USAGE CONSTRAINT_SCHEMA
|
||||
ROUTINES ROUTINE_SCHEMA
|
||||
SCHEMATA SCHEMA_NAME
|
||||
SCHEMA_PRIVILEGES TABLE_SCHEMA
|
||||
STATISTICS TABLE_SCHEMA
|
||||
TABLES TABLE_SCHEMA
|
||||
TABLE_CONSTRAINTS CONSTRAINT_SCHEMA
|
||||
TABLE_PRIVILEGES TABLE_SCHEMA
|
||||
TRIGGERS TRIGGER_SCHEMA
|
||||
USER_PRIVILEGES GRANTEE
|
||||
VIEWS TABLE_SCHEMA
|
||||
SELECT MAX(table_name) FROM information_schema.tables;
|
||||
MAX(table_name)
|
||||
VIEWS
|
||||
SELECT table_name from information_schema.tables
|
||||
WHERE table_name=(SELECT MAX(table_name)
|
||||
FROM information_schema.tables);
|
||||
table_name
|
||||
VIEWS
|
||||
End of 5.0 tests.
|
||||
select * from information_schema.engines WHERE ENGINE="MyISAM";
|
||||
ENGINE SUPPORT COMMENT TRANSACTIONS XA SAVEPOINTS
|
||||
|
@ -1473,8 +1473,8 @@ Error 1146 Table 'test.t4' doesn't exist
|
||||
drop table t1,t2,t3;
|
||||
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
|
||||
select trim(name2) from t1 union all select trim(name) from t1 union all select trim(id) from t1;
|
||||
trim(name2)
|
||||
fff
|
||||
sss
|
||||
ttt
|
||||
|
@ -60,6 +60,35 @@ c.c_id = 218 and expiredate is null;
|
||||
slai_id
|
||||
12
|
||||
drop table t1, t2;
|
||||
CREATE TABLE t1 (a int, b int, KEY b (b)) Engine=InnoDB;
|
||||
CREATE TABLE t2 (a int, b int, PRIMARY KEY (a,b)) Engine=InnoDB;
|
||||
CREATE TABLE t3 (a int, b int, c int, PRIMARY KEY (a),
|
||||
UNIQUE KEY b (b,c), KEY a (a,b,c)) Engine=InnoDB;
|
||||
INSERT INTO t1 VALUES (1, 1);
|
||||
INSERT INTO t1 SELECT a + 1, b + 1 FROM t1;
|
||||
INSERT INTO t1 SELECT a + 2, b + 2 FROM t1;
|
||||
INSERT INTO t2 VALUES (1,1),(1,2),(1,3),(1,4),(1,5),(1,6),(1,7),(1,8);
|
||||
INSERT INTO t2 SELECT a + 1, b FROM t2;
|
||||
DELETE FROM t2 WHERE a = 1 AND b < 2;
|
||||
INSERT INTO t3 VALUES (1,1,1),(2,1,2);
|
||||
INSERT INTO t3 SELECT a + 2, a + 2, 3 FROM t3;
|
||||
INSERT INTO t3 SELECT a + 4, a + 4, 3 FROM t3;
|
||||
SELECT STRAIGHT_JOIN SQL_NO_CACHE t1.b, t1.a FROM t1, t3, t2 WHERE
|
||||
t3.a = t2.a AND t2.b = t1.a AND t3.b = 1 AND t3.c IN (1, 2)
|
||||
ORDER BY t1.b LIMIT 2;
|
||||
b a
|
||||
1 1
|
||||
2 2
|
||||
SELECT STRAIGHT_JOIN SQL_NO_CACHE t1.b, t1.a FROM t1, t3, t2 WHERE
|
||||
t3.a = t2.a AND t2.b = t1.a AND t3.b = 1 AND t3.c IN (1, 2)
|
||||
ORDER BY t1.b LIMIT 5;
|
||||
b a
|
||||
1 1
|
||||
2 2
|
||||
2 2
|
||||
3 3
|
||||
3 3
|
||||
DROP TABLE t1, t2, t3;
|
||||
create table t1m (a int) engine=myisam;
|
||||
create table t1i (a int) engine=innodb;
|
||||
create table t2m (a int) engine=myisam;
|
||||
|
@ -36,19 +36,19 @@ Tables_in_test
|
||||
t1
|
||||
t2
|
||||
t3
|
||||
|
||||
_
|
||||
Test delimiter : from command line
|
||||
a
|
||||
1
|
||||
|
||||
_
|
||||
Test delimiter :; from command line
|
||||
a
|
||||
1
|
||||
|
||||
_
|
||||
Test 'go' command(vertical output) G
|
||||
*************************** 1. row ***************************
|
||||
a: 1
|
||||
|
||||
_
|
||||
Test 'go' command g
|
||||
a
|
||||
1
|
||||
|
@ -14,3 +14,14 @@ explain select * from t1 where b is null;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Impossible WHERE
|
||||
drop table t1;
|
||||
CREATE TABLE t1 (a INT AUTO_INCREMENT PRIMARY KEY);
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
SELECT sql_no_cache a, last_insert_id() FROM t1 WHERE a IS NULL;
|
||||
a last_insert_id()
|
||||
1 1
|
||||
SELECT sql_no_cache a, last_insert_id() FROM t1 WHERE a IS NULL;
|
||||
a last_insert_id()
|
||||
SELECT sql_no_cache a, last_insert_id() FROM t1;
|
||||
a last_insert_id()
|
||||
1 1
|
||||
DROP TABLE t1;
|
||||
|
@ -620,8 +620,8 @@ CREATE VIEW v1 AS
|
||||
SELECT a, LENGTH(a), COUNT(*) FROM t1 GROUP BY a WITH ROLLUP;
|
||||
DESC v1;
|
||||
Field Type Null Key Default Extra
|
||||
a bigint(11) YES NULL
|
||||
LENGTH(a) bigint(10) YES NULL
|
||||
a int(11) YES 0
|
||||
LENGTH(a) int(10) YES NULL
|
||||
COUNT(*) bigint(21) NO 0
|
||||
SELECT * FROM v1;
|
||||
a LENGTH(a) COUNT(*)
|
||||
|
@ -1775,7 +1775,7 @@ NULL as const12, @arg12 as param12,
|
||||
show create table t5 ;
|
||||
Table Create Table
|
||||
t5 CREATE TABLE `t5` (
|
||||
`const01` bigint(1) NOT NULL DEFAULT '0',
|
||||
`const01` int(1) NOT NULL DEFAULT '0',
|
||||
`param01` bigint(20) DEFAULT NULL,
|
||||
`const02` decimal(2,1) NOT NULL DEFAULT '0.0',
|
||||
`param02` decimal(65,30) DEFAULT NULL,
|
||||
@ -1805,7 +1805,7 @@ t5 CREATE TABLE `t5` (
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
select * from t5 ;
|
||||
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
||||
def test t5 t5 const01 const01 8 1 1 N 32769 0 63
|
||||
def test t5 t5 const01 const01 3 1 1 N 32769 0 63
|
||||
def test t5 t5 param01 param01 8 20 1 Y 32768 0 63
|
||||
def test t5 t5 const02 const02 246 4 3 N 1 1 63
|
||||
def test t5 t5 param02 param02 246 67 32 Y 0 30 63
|
||||
|
@ -1758,7 +1758,7 @@ NULL as const12, @arg12 as param12,
|
||||
show create table t5 ;
|
||||
Table Create Table
|
||||
t5 CREATE TABLE `t5` (
|
||||
`const01` bigint(1) NOT NULL DEFAULT '0',
|
||||
`const01` int(1) NOT NULL DEFAULT '0',
|
||||
`param01` bigint(20) DEFAULT NULL,
|
||||
`const02` decimal(2,1) NOT NULL DEFAULT '0.0',
|
||||
`param02` decimal(65,30) DEFAULT NULL,
|
||||
@ -1788,7 +1788,7 @@ t5 CREATE TABLE `t5` (
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
select * from t5 ;
|
||||
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
||||
def test t5 t5 const01 const01 8 1 1 N 32769 0 63
|
||||
def test t5 t5 const01 const01 3 1 1 N 32769 0 63
|
||||
def test t5 t5 param01 param01 8 20 1 Y 32768 0 63
|
||||
def test t5 t5 const02 const02 246 4 3 N 1 1 63
|
||||
def test t5 t5 param02 param02 246 67 32 Y 0 30 63
|
||||
|
@ -1759,7 +1759,7 @@ NULL as const12, @arg12 as param12,
|
||||
show create table t5 ;
|
||||
Table Create Table
|
||||
t5 CREATE TABLE `t5` (
|
||||
`const01` bigint(1) NOT NULL DEFAULT '0',
|
||||
`const01` int(1) NOT NULL DEFAULT '0',
|
||||
`param01` bigint(20) DEFAULT NULL,
|
||||
`const02` decimal(2,1) NOT NULL DEFAULT '0.0',
|
||||
`param02` decimal(65,30) DEFAULT NULL,
|
||||
@ -1789,7 +1789,7 @@ t5 CREATE TABLE `t5` (
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
select * from t5 ;
|
||||
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
||||
def test t5 t5 const01 const01 8 1 1 N 32769 0 63
|
||||
def test t5 t5 const01 const01 3 1 1 N 32769 0 63
|
||||
def test t5 t5 param01 param01 8 20 1 Y 32768 0 63
|
||||
def test t5 t5 const02 const02 246 4 3 N 1 1 63
|
||||
def test t5 t5 param02 param02 246 67 32 Y 0 30 63
|
||||
|
@ -1695,7 +1695,7 @@ NULL as const12, @arg12 as param12,
|
||||
show create table t5 ;
|
||||
Table Create Table
|
||||
t5 CREATE TABLE `t5` (
|
||||
`const01` bigint(1) NOT NULL DEFAULT '0',
|
||||
`const01` int(1) NOT NULL DEFAULT '0',
|
||||
`param01` bigint(20) DEFAULT NULL,
|
||||
`const02` decimal(2,1) NOT NULL DEFAULT '0.0',
|
||||
`param02` decimal(65,30) DEFAULT NULL,
|
||||
@ -1725,7 +1725,7 @@ t5 CREATE TABLE `t5` (
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
select * from t5 ;
|
||||
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
||||
def test t5 t5 const01 const01 8 1 1 N 32769 0 63
|
||||
def test t5 t5 const01 const01 3 1 1 N 32769 0 63
|
||||
def test t5 t5 param01 param01 8 20 1 Y 32768 0 63
|
||||
def test t5 t5 const02 const02 246 4 3 N 1 1 63
|
||||
def test t5 t5 param02 param02 246 67 32 Y 0 30 63
|
||||
@ -4709,7 +4709,7 @@ NULL as const12, @arg12 as param12,
|
||||
show create table t5 ;
|
||||
Table Create Table
|
||||
t5 CREATE TABLE `t5` (
|
||||
`const01` bigint(1) NOT NULL DEFAULT '0',
|
||||
`const01` int(1) NOT NULL DEFAULT '0',
|
||||
`param01` bigint(20) DEFAULT NULL,
|
||||
`const02` decimal(2,1) NOT NULL DEFAULT '0.0',
|
||||
`param02` decimal(65,30) DEFAULT NULL,
|
||||
@ -4739,7 +4739,7 @@ t5 CREATE TABLE `t5` (
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
select * from t5 ;
|
||||
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
||||
def test t5 t5 const01 const01 8 1 1 N 32769 0 63
|
||||
def test t5 t5 const01 const01 3 1 1 N 32769 0 63
|
||||
def test t5 t5 param01 param01 8 20 1 Y 32768 0 63
|
||||
def test t5 t5 const02 const02 246 4 3 N 1 1 63
|
||||
def test t5 t5 param02 param02 246 67 32 Y 0 30 63
|
||||
|
@ -1758,7 +1758,7 @@ NULL as const12, @arg12 as param12,
|
||||
show create table t5 ;
|
||||
Table Create Table
|
||||
t5 CREATE TABLE `t5` (
|
||||
`const01` bigint(1) NOT NULL DEFAULT '0',
|
||||
`const01` int(1) NOT NULL DEFAULT '0',
|
||||
`param01` bigint(20) DEFAULT NULL,
|
||||
`const02` decimal(2,1) NOT NULL DEFAULT '0.0',
|
||||
`param02` decimal(65,30) DEFAULT NULL,
|
||||
@ -1788,7 +1788,7 @@ t5 CREATE TABLE `t5` (
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
select * from t5 ;
|
||||
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
||||
def test t5 t5 const01 const01 8 1 1 N 32769 0 63
|
||||
def test t5 t5 const01 const01 3 1 1 N 32769 0 63
|
||||
def test t5 t5 param01 param01 8 20 1 Y 32768 0 63
|
||||
def test t5 t5 const02 const02 246 4 3 N 1 1 63
|
||||
def test t5 t5 param02 param02 246 67 32 Y 0 30 63
|
||||
|
@ -1758,7 +1758,7 @@ NULL as const12, @arg12 as param12,
|
||||
show create table t5 ;
|
||||
Table Create Table
|
||||
t5 CREATE TABLE `t5` (
|
||||
`const01` bigint(1) NOT NULL default '0',
|
||||
`const01` int(1) NOT NULL default '0',
|
||||
`param01` bigint(20) default NULL,
|
||||
`const02` decimal(2,1) NOT NULL default '0.0',
|
||||
`param02` decimal(65,30) default NULL,
|
||||
@ -1788,7 +1788,7 @@ t5 CREATE TABLE `t5` (
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
select * from t5 ;
|
||||
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
||||
def test t5 t5 const01 const01 8 1 1 N 32769 0 63
|
||||
def test t5 t5 const01 const01 3 1 1 N 32769 0 63
|
||||
def test t5 t5 param01 param01 8 20 1 Y 32768 0 63
|
||||
def test t5 t5 const02 const02 246 4 3 N 1 1 63
|
||||
def test t5 t5 param02 param02 246 67 32 Y 0 30 63
|
||||
|
@ -73,6 +73,19 @@ CREATE TABLE t1 ( a INT UNIQUE );
|
||||
SET FOREIGN_KEY_CHECKS=0;
|
||||
INSERT INTO t1 VALUES (1),(1);
|
||||
Got one of the listed errors
|
||||
create table t1(a int auto_increment, key(a));
|
||||
create table t2(a int);
|
||||
insert into t1 (a) values (null);
|
||||
insert into t2 (a) select a from t1 where a is null;
|
||||
insert into t2 (a) select a from t1 where a is null;
|
||||
select * from t2;
|
||||
a
|
||||
1
|
||||
select * from t2;
|
||||
a
|
||||
1
|
||||
drop table t1;
|
||||
drop table t2;
|
||||
drop function if exists bug15728;
|
||||
drop function if exists bug15728_insert;
|
||||
drop table if exists t1, t2;
|
||||
|
@ -2730,6 +2730,32 @@ ERROR 42000: Key 'a' doesn't exist in table 't1'
|
||||
EXPLAIN SELECT * FROM t1 FORCE INDEX (a);
|
||||
ERROR 42000: Key 'a' doesn't exist in table 't1'
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (a int, b int);
|
||||
INSERT INTO t1 VALUES (1,1), (2,1), (4,10);
|
||||
CREATE TABLE t2 (a int PRIMARY KEY, b int, KEY b (b));
|
||||
INSERT INTO t2 VALUES (1,NULL), (2,10);
|
||||
ALTER TABLE t1 ENABLE KEYS;
|
||||
EXPLAIN SELECT STRAIGHT_JOIN SQL_NO_CACHE COUNT(*) FROM t2, t1 WHERE t1.b = t2.b OR t2.b IS NULL;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t2 index b b 5 NULL 2 Using index
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 3 Using where
|
||||
SELECT STRAIGHT_JOIN SQL_NO_CACHE * FROM t2, t1 WHERE t1.b = t2.b OR t2.b IS NULL;
|
||||
a b a b
|
||||
1 NULL 1 1
|
||||
1 NULL 2 1
|
||||
1 NULL 4 10
|
||||
2 10 4 10
|
||||
EXPLAIN SELECT STRAIGHT_JOIN SQL_NO_CACHE COUNT(*) FROM t2, t1 WHERE t1.b = t2.b OR t2.b IS NULL;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t2 index b b 5 NULL 2 Using index
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 3 Using where
|
||||
SELECT STRAIGHT_JOIN SQL_NO_CACHE * FROM t2, t1 WHERE t1.b = t2.b OR t2.b IS NULL;
|
||||
a b a b
|
||||
1 NULL 1 1
|
||||
1 NULL 2 1
|
||||
1 NULL 4 10
|
||||
2 10 4 10
|
||||
DROP TABLE IF EXISTS t1,t2;
|
||||
CREATE TABLE t1 (i BIGINT UNSIGNED NOT NULL);
|
||||
INSERT INTO t1 VALUES (10);
|
||||
SELECT i='1e+01',i=1e+01, i in (1e+01,1e+01), i in ('1e+01','1e+01') FROM t1;
|
||||
@ -3125,6 +3151,55 @@ select count(*)
|
||||
from t1 inner join (t2 right join t3 on t2.id = t3.b_id) on t1.id = t3.a_id;
|
||||
count(*)
|
||||
6
|
||||
CREATE TABLE t1 (key1 float default NULL, UNIQUE KEY key1 (key1));
|
||||
CREATE TABLE t2 (key2 float default NULL, UNIQUE KEY key2 (key2));
|
||||
INSERT INTO t1 VALUES (0.3762),(0.3845),(0.6158),(0.7941);
|
||||
INSERT INTO t2 VALUES (1.3762),(1.3845),(1.6158),(1.7941);
|
||||
explain select max(key1) from t1 where key1 <= 0.6158;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Select tables optimized away
|
||||
explain select max(key2) from t2 where key2 <= 1.6158;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Select tables optimized away
|
||||
explain select min(key1) from t1 where key1 >= 0.3762;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Select tables optimized away
|
||||
explain select min(key2) from t2 where key2 >= 1.3762;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Select tables optimized away
|
||||
explain select max(key1), min(key2) from t1, t2
|
||||
where key1 <= 0.6158 and key2 >= 1.3762;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Select tables optimized away
|
||||
explain select max(key1) from t1 where key1 <= 0.6158 and rand() + 0.5 >= 0.5;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Select tables optimized away
|
||||
explain select min(key1) from t1 where key1 >= 0.3762 and rand() + 0.5 >= 0.5;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Select tables optimized away
|
||||
select max(key1) from t1 where key1 <= 0.6158;
|
||||
max(key1)
|
||||
0.61580002307892
|
||||
select max(key2) from t2 where key2 <= 1.6158;
|
||||
max(key2)
|
||||
1.6158000230789
|
||||
select min(key1) from t1 where key1 >= 0.3762;
|
||||
min(key1)
|
||||
0.37619999051094
|
||||
select min(key2) from t2 where key2 >= 1.3762;
|
||||
min(key2)
|
||||
1.3761999607086
|
||||
select max(key1), min(key2) from t1, t2
|
||||
where key1 <= 0.6158 and key2 >= 1.3762;
|
||||
max(key1) min(key2)
|
||||
0.61580002307892 1.3761999607086
|
||||
select max(key1) from t1 where key1 <= 0.6158 and rand() + 0.5 >= 0.5;
|
||||
max(key1)
|
||||
0.61580002307892
|
||||
select min(key1) from t1 where key1 >= 0.3762 and rand() + 0.5 >= 0.5;
|
||||
min(key1)
|
||||
0.37619999051094
|
||||
DROP TABLE t1,t2;
|
||||
drop table t1,t2,t3;
|
||||
create table t1 (a int);
|
||||
create table t2 (b int);
|
||||
@ -3395,3 +3470,12 @@ a t1.b + 0 t1.c + 0 a t2.b + 0 c d
|
||||
1 0 1 1 0 1 NULL
|
||||
2 0 1 NULL NULL NULL NULL
|
||||
drop table t1,t2;
|
||||
SELECT 0.9888889889 * 1.011111411911;
|
||||
0.9888889889 * 1.011111411911
|
||||
0.9998769417899202067879
|
||||
prepare stmt from 'select 1 as " a "';
|
||||
Warnings:
|
||||
Warning 1466 Leading spaces are removed from name ' a '
|
||||
execute stmt;
|
||||
a
|
||||
1
|
||||
|
@ -4915,7 +4915,7 @@ create table t3 as select * from v1|
|
||||
show create table t3|
|
||||
Table Create Table
|
||||
t3 CREATE TABLE `t3` (
|
||||
`j` bigint(11) DEFAULT NULL
|
||||
`j` int(11) DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
select * from t3|
|
||||
j
|
||||
@ -5051,4 +5051,23 @@ concat('data was: /', var1, '/')
|
||||
data was: /1/
|
||||
drop table t3|
|
||||
drop procedure bug15217|
|
||||
drop procedure if exists bug19862|
|
||||
CREATE TABLE t11 (a INT)|
|
||||
CREATE TABLE t12 (a INT)|
|
||||
CREATE FUNCTION bug19862(x INT) RETURNS INT
|
||||
BEGIN
|
||||
INSERT INTO t11 VALUES (x);
|
||||
RETURN x+1;
|
||||
END|
|
||||
INSERT INTO t12 VALUES (1), (2)|
|
||||
SELECT bug19862(a) FROM t12 ORDER BY 1|
|
||||
bug19862(a)
|
||||
2
|
||||
3
|
||||
SELECT * FROM t11|
|
||||
a
|
||||
1
|
||||
2
|
||||
DROP TABLE t11, t12|
|
||||
DROP FUNCTION bug19862|
|
||||
drop table t1,t2;
|
||||
|
@ -1087,24 +1087,24 @@ CREATE TABLE t1 SELECT * FROM (SELECT 1 as a,(SELECT 1)) a;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`a` bigint(1) NOT NULL DEFAULT '0',
|
||||
`(SELECT 1)` bigint(1) NOT NULL DEFAULT '0'
|
||||
`a` int(1) NOT NULL DEFAULT '0',
|
||||
`(SELECT 1)` int(1) NOT NULL DEFAULT '0'
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
drop table t1;
|
||||
CREATE TABLE t1 SELECT * FROM (SELECT 1 as a,(SELECT a)) a;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`a` bigint(1) NOT NULL DEFAULT '0',
|
||||
`(SELECT a)` bigint(1) NOT NULL DEFAULT '0'
|
||||
`a` int(1) NOT NULL DEFAULT '0',
|
||||
`(SELECT a)` int(1) NOT NULL DEFAULT '0'
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
drop table t1;
|
||||
CREATE TABLE t1 SELECT * FROM (SELECT 1 as a,(SELECT a+0)) a;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`a` bigint(1) NOT NULL DEFAULT '0',
|
||||
`(SELECT a+0)` bigint(3) NOT NULL DEFAULT '0'
|
||||
`a` int(1) NOT NULL DEFAULT '0',
|
||||
`(SELECT a+0)` int(3) NOT NULL DEFAULT '0'
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
drop table t1;
|
||||
CREATE TABLE t1 SELECT (SELECT 1 as a UNION SELECT 1+1 limit 1,1) as a;
|
||||
@ -2854,6 +2854,67 @@ a
|
||||
3
|
||||
4
|
||||
DROP TABLE t1,t2,t3;
|
||||
purge master logs before (select adddate(current_timestamp(), interval -4 day));
|
||||
CREATE TABLE t1 (f1 INT);
|
||||
CREATE TABLE t2 (f2 INT);
|
||||
INSERT INTO t1 VALUES (1);
|
||||
SELECT * FROM t1 WHERE f1 > ALL (SELECT f2 FROM t2);
|
||||
f1
|
||||
1
|
||||
SELECT * FROM t1 WHERE f1 > ALL (SELECT f2 FROM t2 WHERE 1=0);
|
||||
f1
|
||||
1
|
||||
INSERT INTO t2 VALUES (1);
|
||||
INSERT INTO t2 VALUES (2);
|
||||
SELECT * FROM t1 WHERE f1 > ALL (SELECT f2 FROM t2 WHERE f2=0);
|
||||
f1
|
||||
1
|
||||
DROP TABLE t1, t2;
|
||||
select 1 from dual where 1 < any (select 2);
|
||||
1
|
||||
1
|
||||
select 1 from dual where 1 < all (select 2);
|
||||
1
|
||||
1
|
||||
select 1 from dual where 2 > any (select 1);
|
||||
1
|
||||
1
|
||||
select 1 from dual where 2 > all (select 1);
|
||||
1
|
||||
1
|
||||
select 1 from dual where 1 < any (select 2 from dual);
|
||||
1
|
||||
1
|
||||
select 1 from dual where 1 < all (select 2 from dual where 1!=1);
|
||||
1
|
||||
1
|
||||
create table t1 (s1 char);
|
||||
insert into t1 values (1),(2);
|
||||
select * from t1 where (s1 < any (select s1 from t1));
|
||||
s1
|
||||
1
|
||||
select * from t1 where not (s1 < any (select s1 from t1));
|
||||
s1
|
||||
2
|
||||
select * from t1 where (s1 < ALL (select s1+1 from t1));
|
||||
s1
|
||||
1
|
||||
select * from t1 where not(s1 < ALL (select s1+1 from t1));
|
||||
s1
|
||||
2
|
||||
select * from t1 where (s1+1 = ANY (select s1 from t1));
|
||||
s1
|
||||
1
|
||||
select * from t1 where NOT(s1+1 = ANY (select s1 from t1));
|
||||
s1
|
||||
2
|
||||
select * from t1 where (s1 = ALL (select s1/s1 from t1));
|
||||
s1
|
||||
1
|
||||
select * from t1 where NOT(s1 = ALL (select s1/s1 from t1));
|
||||
s1
|
||||
2
|
||||
drop table t1;
|
||||
create table t1 (df decimal(5,1));
|
||||
insert into t1 values(1.1);
|
||||
insert into t1 values(2.2);
|
||||
@ -3204,3 +3265,84 @@ i
|
||||
10000000000000000000
|
||||
DROP TABLE t1;
|
||||
DROP TABLE t2;
|
||||
CREATE TABLE t1 (
|
||||
id bigint(20) unsigned NOT NULL auto_increment,
|
||||
name varchar(255) NOT NULL,
|
||||
PRIMARY KEY (id)
|
||||
);
|
||||
INSERT INTO t1 VALUES
|
||||
(1, 'Balazs'), (2, 'Joe'), (3, 'Frank');
|
||||
CREATE TABLE t2 (
|
||||
id bigint(20) unsigned NOT NULL auto_increment,
|
||||
mid bigint(20) unsigned NOT NULL,
|
||||
date date NOT NULL,
|
||||
PRIMARY KEY (id)
|
||||
);
|
||||
INSERT INTO t2 VALUES
|
||||
(1, 1, '2006-03-30'), (2, 2, '2006-04-06'), (3, 3, '2006-04-13'),
|
||||
(4, 2, '2006-04-20'), (5, 1, '2006-05-01');
|
||||
SELECT *,
|
||||
(SELECT date FROM t2 WHERE mid = t1.id
|
||||
ORDER BY date DESC LIMIT 0, 1) AS date_last,
|
||||
(SELECT date FROM t2 WHERE mid = t1.id
|
||||
ORDER BY date DESC LIMIT 3, 1) AS date_next_to_last
|
||||
FROM t1;
|
||||
id name date_last date_next_to_last
|
||||
1 Balazs 2006-05-01 NULL
|
||||
2 Joe 2006-04-20 NULL
|
||||
3 Frank 2006-04-13 NULL
|
||||
SELECT *,
|
||||
(SELECT COUNT(*) FROM t2 WHERE mid = t1.id
|
||||
ORDER BY date DESC LIMIT 1, 1) AS date_count
|
||||
FROM t1;
|
||||
id name date_count
|
||||
1 Balazs NULL
|
||||
2 Joe NULL
|
||||
3 Frank NULL
|
||||
SELECT *,
|
||||
(SELECT date FROM t2 WHERE mid = t1.id
|
||||
ORDER BY date DESC LIMIT 0, 1) AS date_last,
|
||||
(SELECT date FROM t2 WHERE mid = t1.id
|
||||
ORDER BY date DESC LIMIT 1, 1) AS date_next_to_last
|
||||
FROM t1;
|
||||
id name date_last date_next_to_last
|
||||
1 Balazs 2006-05-01 2006-03-30
|
||||
2 Joe 2006-04-20 2006-04-06
|
||||
3 Frank 2006-04-13 NULL
|
||||
DROP TABLE t1,t2;
|
||||
CREATE TABLE t1 (
|
||||
i1 int(11) NOT NULL default '0',
|
||||
i2 int(11) NOT NULL default '0',
|
||||
t datetime NOT NULL default '0000-00-00 00:00:00',
|
||||
PRIMARY KEY (i1,i2,t)
|
||||
);
|
||||
INSERT INTO t1 VALUES
|
||||
(24,1,'2005-03-03 16:31:31'),(24,1,'2005-05-27 12:40:07'),
|
||||
(24,1,'2005-05-27 12:40:08'),(24,1,'2005-05-27 12:40:10'),
|
||||
(24,1,'2005-05-27 12:40:25'),(24,1,'2005-05-27 12:40:30'),
|
||||
(24,2,'2005-03-03 13:43:05'),(24,2,'2005-03-03 16:23:31'),
|
||||
(24,2,'2005-03-03 16:31:30'),(24,2,'2005-05-27 12:37:02'),
|
||||
(24,2,'2005-05-27 12:40:06');
|
||||
CREATE TABLE t2 (
|
||||
i1 int(11) NOT NULL default '0',
|
||||
i2 int(11) NOT NULL default '0',
|
||||
t datetime default NULL,
|
||||
PRIMARY KEY (i1)
|
||||
);
|
||||
INSERT INTO t2 VALUES (24,1,'2006-06-20 12:29:40');
|
||||
EXPLAIN
|
||||
SELECT * FROM t1,t2
|
||||
WHERE t1.t = (SELECT t1.t FROM t1
|
||||
WHERE t1.t < t2.t AND t1.i2=1 AND t2.i1=t1.i1
|
||||
ORDER BY t1.t DESC LIMIT 1);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t2 system NULL NULL NULL NULL 1
|
||||
1 PRIMARY t1 index NULL PRIMARY 16 NULL 11 Using where; Using index
|
||||
2 DEPENDENT SUBQUERY t1 range PRIMARY PRIMARY 16 NULL 5 Using where; Using index
|
||||
SELECT * FROM t1,t2
|
||||
WHERE t1.t = (SELECT t1.t FROM t1
|
||||
WHERE t1.t < t2.t AND t1.i2=1 AND t2.i1=t1.i1
|
||||
ORDER BY t1.t DESC LIMIT 1);
|
||||
i1 i2 t i1 i2 t
|
||||
24 1 2005-05-27 12:40:30 24 1 2006-06-20 12:29:40
|
||||
DROP TABLE t1, t2;
|
||||
|
@ -132,3 +132,15 @@ id select_type table type possible_keys key key_len ref rows Extra
|
||||
5 DEPENDENT SUBQUERY t3 unique_subquery PRIMARY,FFOLDERID_IDX PRIMARY 34 func 1 Using index; Using where
|
||||
6 DEPENDENT SUBQUERY t3 unique_subquery PRIMARY,FFOLDERID_IDX,CMFLDRPARNT_IDX PRIMARY 34 func 1 Using index; Using where
|
||||
drop table t1, t2, t3, t4;
|
||||
CREATE TABLE t1 (a int(10) , PRIMARY KEY (a)) Engine=InnoDB;
|
||||
INSERT INTO t1 VALUES (1),(2);
|
||||
CREATE TABLE t2 (a int(10), PRIMARY KEY (a)) Engine=InnoDB;
|
||||
INSERT INTO t2 VALUES (1);
|
||||
CREATE TABLE t3 (a int(10), b int(10), c int(10),
|
||||
PRIMARY KEY (a)) Engine=InnoDB;
|
||||
INSERT INTO t3 VALUES (1,2,1);
|
||||
SELECT t1.* FROM t1 WHERE (SELECT COUNT(*) FROM t3,t2 WHERE t3.c=t2.a
|
||||
and t2.a='1' AND t1.a=t3.b) > 0;
|
||||
a
|
||||
2
|
||||
DROP TABLE t1,t2,t3;
|
||||
|
@ -273,7 +273,7 @@ create table t2 (primary key (auto)) select auto+1 as auto,1 as t1, 'a' as t2, r
|
||||
show full columns from t2;
|
||||
Field Type Collation Null Key Default Extra Privileges Comment
|
||||
auto bigint(12) unsigned NULL NO PRI 0 #
|
||||
t1 bigint(1) NULL NO 0 #
|
||||
t1 int(1) NULL NO 0 #
|
||||
t2 varchar(1) latin1_swedish_ci NO #
|
||||
t3 varchar(256) latin1_swedish_ci NO #
|
||||
t4 varbinary(256) NULL NO #
|
||||
@ -301,7 +301,7 @@ show full columns from t3;
|
||||
Field Type Collation Null Key Default Extra Privileges Comment
|
||||
c1 int(11) NULL YES NULL #
|
||||
c2 int(11) NULL YES NULL #
|
||||
const bigint(1) NULL NO 0 #
|
||||
const int(1) NULL NO 0 #
|
||||
drop table t1,t2,t3;
|
||||
create table t1 ( myfield INT NOT NULL, UNIQUE INDEX (myfield), unique (myfield), index(myfield));
|
||||
drop table t1;
|
||||
|
@ -93,6 +93,12 @@ NULL
|
||||
0R
|
||||
FR
|
||||
DROP TABLE bug19904;
|
||||
create table t1(f1 int);
|
||||
insert into t1 values(1),(2);
|
||||
explain select myfunc_int(f1) from t1 order by 1;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 Using temporary; Using filesort
|
||||
drop table t1;
|
||||
End of 5.0 tests.
|
||||
DROP FUNCTION metaphon;
|
||||
DROP FUNCTION myfunc_double;
|
||||
|
@ -691,9 +691,9 @@ t1 CREATE TABLE `t1` (
|
||||
`da` datetime DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
drop table t1;
|
||||
create table t1 SELECT dt from t2 UNION select sc from t2;
|
||||
select * from t1;
|
||||
dt
|
||||
create table t1 SELECT dt from t2 UNION select trim(sc) from t2;
|
||||
select trim(dt) from t1;
|
||||
trim(dt)
|
||||
1972-10-22 11:50:00
|
||||
testc
|
||||
show create table t1;
|
||||
@ -732,7 +732,7 @@ tetetetetest
|
||||
show create table t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`dt` longblob
|
||||
`dt` blob
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
drop table t1;
|
||||
create table t1 SELECT sv from t2 UNION select b from t2;
|
||||
@ -743,7 +743,7 @@ tetetetetest
|
||||
show create table t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`sv` longblob
|
||||
`sv` blob
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
drop table t1;
|
||||
create table t1 SELECT i from t2 UNION select d from t2 UNION select b from t2;
|
||||
@ -755,7 +755,7 @@ tetetetetest
|
||||
show create table t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`i` longblob
|
||||
`i` blob
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
drop table t1;
|
||||
create table t1 SELECT sv from t2 UNION select tx from t2;
|
||||
@ -766,7 +766,7 @@ teeeeeeeeeeeest
|
||||
show create table t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`sv` longtext
|
||||
`sv` text
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
drop table t1;
|
||||
create table t1 SELECT b from t2 UNION select tx from t2;
|
||||
@ -777,7 +777,7 @@ teeeeeeeeeeeest
|
||||
show create table t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`b` longblob
|
||||
`b` blob
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
drop table t1,t2;
|
||||
create table t1 select 1 union select -1;
|
||||
@ -1306,6 +1306,21 @@ id
|
||||
5
|
||||
99
|
||||
drop table t1;
|
||||
create table t1(f1 char(1), f2 char(5), f3 binary(1), f4 binary(5), f5 timestamp, f6 varchar(1) character set utf8 collate utf8_general_ci, f7 text);
|
||||
create table t2 as select *, f6 as f8 from t1 union select *, f7 from t1;
|
||||
show create table t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`f1` char(1) default NULL,
|
||||
`f2` char(5) default NULL,
|
||||
`f3` binary(1) default NULL,
|
||||
`f4` binary(5) default NULL,
|
||||
`f5` timestamp NOT NULL default '0000-00-00 00:00:00',
|
||||
`f6` varchar(1) character set utf8 default NULL,
|
||||
`f7` text,
|
||||
`f8` text character set utf8
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
drop table t1, t2;
|
||||
(select avg(1)) union (select avg(1)) union (select avg(1)) union
|
||||
(select avg(1)) union (select avg(1)) union (select avg(1)) union
|
||||
(select avg(1)) union (select avg(1)) union (select avg(1)) union
|
||||
|
@ -2735,4 +2735,88 @@ m e
|
||||
4 a
|
||||
1 b
|
||||
DROP VIEW v1;
|
||||
DROP TABLE IF EXISTS t1,t2;
|
||||
DROP TABLE t1,t2;
|
||||
CREATE TABLE t1 (a INT NOT NULL, b INT NULL DEFAULT NULL);
|
||||
CREATE VIEW v1 AS SELECT a, b FROM t1;
|
||||
INSERT INTO v1 (b) VALUES (2);
|
||||
Warnings:
|
||||
Warning 1423 Field of view 'test.v1' underlying table doesn't have a default value
|
||||
SET SQL_MODE = STRICT_ALL_TABLES;
|
||||
INSERT INTO v1 (b) VALUES (4);
|
||||
ERROR HY000: Field of view 'test.v1' underlying table doesn't have a default value
|
||||
SET SQL_MODE = '';
|
||||
SELECT * FROM t1;
|
||||
a b
|
||||
0 2
|
||||
DROP VIEW v1;
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (firstname text, surname text);
|
||||
INSERT INTO t1 VALUES
|
||||
("Bart","Simpson"),("Milhouse","van Houten"),("Montgomery","Burns");
|
||||
CREATE VIEW v1 AS SELECT CONCAT(firstname," ",surname) AS name FROM t1;
|
||||
SELECT CONCAT(LEFT(name,LENGTH(name)-INSTR(REVERSE(name)," ")),
|
||||
LEFT(name,LENGTH(name)-INSTR(REVERSE(name)," "))) AS f1
|
||||
FROM v1;
|
||||
f1
|
||||
BartBart
|
||||
Milhouse vanMilhouse van
|
||||
MontgomeryMontgomery
|
||||
DROP VIEW v1;
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (i int, j int);
|
||||
CREATE VIEW v1 AS SELECT COALESCE(i,j) FROM t1;
|
||||
DESCRIBE v1;
|
||||
Field Type Null Key Default Extra
|
||||
COALESCE(i,j) int(11) YES NULL
|
||||
CREATE TABLE t2 SELECT COALESCE(i,j) FROM t1;
|
||||
DESCRIBE t2;
|
||||
Field Type Null Key Default Extra
|
||||
COALESCE(i,j) int(11) YES NULL
|
||||
DROP VIEW v1;
|
||||
DROP TABLE t1,t2;
|
||||
CREATE TABLE t1 (s varchar(10));
|
||||
INSERT INTO t1 VALUES ('yadda'), ('yady');
|
||||
SELECT TRIM(BOTH 'y' FROM s) FROM t1;
|
||||
TRIM(BOTH 'y' FROM s)
|
||||
adda
|
||||
ad
|
||||
CREATE VIEW v1 AS SELECT TRIM(BOTH 'y' FROM s) FROM t1;
|
||||
SELECT * FROM v1;
|
||||
TRIM(BOTH 'y' FROM s)
|
||||
adda
|
||||
ad
|
||||
DROP VIEW v1;
|
||||
SELECT TRIM(LEADING 'y' FROM s) FROM t1;
|
||||
TRIM(LEADING 'y' FROM s)
|
||||
adda
|
||||
ady
|
||||
CREATE VIEW v1 AS SELECT TRIM(LEADING 'y' FROM s) FROM t1;
|
||||
SELECT * FROM v1;
|
||||
TRIM(LEADING 'y' FROM s)
|
||||
adda
|
||||
ady
|
||||
DROP VIEW v1;
|
||||
SELECT TRIM(TRAILING 'y' FROM s) FROM t1;
|
||||
TRIM(TRAILING 'y' FROM s)
|
||||
yadda
|
||||
yad
|
||||
CREATE VIEW v1 AS SELECT TRIM(TRAILING 'y' FROM s) FROM t1;
|
||||
SELECT * FROM v1;
|
||||
TRIM(TRAILING 'y' FROM s)
|
||||
yadda
|
||||
yad
|
||||
DROP VIEW v1;
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (s1 char);
|
||||
INSERT INTO t1 VALUES ('Z');
|
||||
CREATE VIEW v1 AS SELECT s1 collate latin1_german1_ci AS col FROM t1;
|
||||
CREATE VIEW v2 (col) AS SELECT s1 collate latin1_german1_ci FROM t1;
|
||||
INSERT INTO v1 (col) VALUES ('b');
|
||||
INSERT INTO v2 (col) VALUES ('c');
|
||||
SELECT s1 FROM t1;
|
||||
s1
|
||||
Z
|
||||
b
|
||||
c
|
||||
DROP VIEW v1, v2;
|
||||
DROP TABLE t1;
|
||||
|
@ -433,3 +433,17 @@ create table t1 (c1 varchar(10), c2 int);
|
||||
select charset(group_concat(c1 order by c2)) from t1;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Bug #16712: group_concat returns odd string instead of intended result
|
||||
#
|
||||
CREATE TABLE t1 (a INT(10), b LONGTEXT, PRIMARY KEY (a));
|
||||
|
||||
SET GROUP_CONCAT_MAX_LEN = 20000000;
|
||||
|
||||
INSERT INTO t1 VALUES (1,REPEAT(CONCAT('A',CAST(CHAR(0) AS BINARY),'B'), 40000));
|
||||
INSERT INTO t1 SELECT a + 1, b FROM t1;
|
||||
|
||||
SELECT a, CHAR_LENGTH(b) FROM t1;
|
||||
SELECT CHAR_LENGTH( GROUP_CONCAT(b) ) FROM t1;
|
||||
SET GROUP_CONCAT_MAX_LEN = 1024;
|
||||
DROP TABLE t1;
|
||||
|
@ -667,3 +667,18 @@ SELECT SUM(a) FROM t1 GROUP BY b/c;
|
||||
DROP TABLE t1;
|
||||
set div_precision_increment= @sav_dpi;
|
||||
|
||||
#
|
||||
# Bug #20868: Client connection is broken on SQL query error
|
||||
#
|
||||
CREATE TABLE t1 (a INT PRIMARY KEY, b INT);
|
||||
INSERT INTO t1 VALUES (1,1), (2,2);
|
||||
|
||||
CREATE TABLE t2 (a INT PRIMARY KEY, b INT);
|
||||
INSERT INTO t2 VALUES (1,1), (3,3);
|
||||
|
||||
SELECT SQL_NO_CACHE
|
||||
(SELECT SUM(c.a) FROM t1 ttt, t2 ccc
|
||||
WHERE ttt.a = ccc.b AND ttt.a = t.a GROUP BY ttt.a) AS minid
|
||||
FROM t1 t, t2 c WHERE t.a = c.b;
|
||||
|
||||
DROP TABLE t1,t2;
|
||||
|
@ -690,6 +690,38 @@ select * from t1 where f1='test' and (f2= sha("test") or f2= sha("TEST"));
|
||||
select * from t1 where f1='test' and (f2= sha("TEST") or f2= sha("test"));
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Bug#18243: REVERSE changes its argument
|
||||
#
|
||||
|
||||
CREATE TABLE t1 (a varchar(10));
|
||||
INSERT INTO t1 VALUES ('abc'), ('xyz');
|
||||
|
||||
SELECT a, CONCAT(a,' ',a) AS c FROM t1
|
||||
HAVING LEFT(c,LENGTH(c)-INSTR(REVERSE(c)," ")) = a;
|
||||
|
||||
SELECT a, CONCAT(a,' ',a) AS c FROM t1
|
||||
HAVING LEFT(CONCAT(a,' ',a),
|
||||
LENGTH(CONCAT(a,' ',a))-
|
||||
INSTR(REVERSE(CONCAT(a,' ',a))," ")) = a;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
#
|
||||
# Bug#17526: WRONG PRINT for TRIM FUNCTION with two arguments
|
||||
#
|
||||
|
||||
CREATE TABLE t1 (s varchar(10));
|
||||
INSERT INTO t1 VALUES ('yadda'), ('yaddy');
|
||||
|
||||
EXPLAIN EXTENDED SELECT s FROM t1 WHERE TRIM(s) > 'ab';
|
||||
EXPLAIN EXTENDED SELECT s FROM t1 WHERE TRIM('y' FROM s) > 'ab';
|
||||
EXPLAIN EXTENDED SELECT s FROM t1 WHERE TRIM(LEADING 'y' FROM s) > 'ab';
|
||||
EXPLAIN EXTENDED SELECT s FROM t1 WHERE TRIM(TRAILING 'y' FROM s) > 'ab';
|
||||
EXPLAIN EXTENDED SELECT s FROM t1 WHERE TRIM(BOTH 'y' FROM s) > 'ab';
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo End of 4.1 tests
|
||||
|
||||
#
|
||||
|
@ -632,3 +632,26 @@ group by t1.c1;
|
||||
show warnings;
|
||||
drop table t1, t2;
|
||||
|
||||
#
|
||||
# Bug #20466: a view is mixing data when there's a trigger on the table
|
||||
#
|
||||
CREATE TABLE t1 (a tinyint(3), b varchar(255), PRIMARY KEY (a));
|
||||
|
||||
INSERT INTO t1 VALUES (1,'-----'), (6,'Allemagne'), (17,'Autriche'),
|
||||
(25,'Belgique'), (54,'Danemark'), (62,'Espagne'), (68,'France');
|
||||
|
||||
CREATE TABLE t2 (a tinyint(3), b tinyint(3), PRIMARY KEY (a), KEY b (b));
|
||||
|
||||
INSERT INTO t2 VALUES (1,1), (2,1), (6,6), (18,17), (15,25), (16,25),
|
||||
(17,25), (10,54), (5,62),(3,68);
|
||||
|
||||
CREATE VIEW v1 AS select t1.a, concat(t1.b,'') AS b, t1.b as real_b from t1;
|
||||
|
||||
explain
|
||||
SELECT straight_join sql_no_cache v1.a, v1.b, v1.real_b from t2, v1
|
||||
where t2.b=v1.a GROUP BY t2.b;
|
||||
SELECT straight_join sql_no_cache v1.a, v1.b, v1.real_b from t2, v1
|
||||
where t2.b=v1.a GROUP BY t2.b;
|
||||
|
||||
DROP VIEW v1;
|
||||
DROP TABLE t1,t2;
|
||||
|
@ -771,3 +771,51 @@ EXPLAIN SELECT DISTINCT a,a FROM t1 ORDER BY a;
|
||||
SELECT DISTINCT a,a FROM t1 ORDER BY a;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
#
|
||||
# Bug #21007: NATURAL JOIN (any JOIN (2 x NATURAL JOIN)) crashes the server
|
||||
#
|
||||
|
||||
CREATE TABLE t1 (id1 INT, id2 INT);
|
||||
CREATE TABLE t2 (id2 INT, id3 INT, id5 INT);
|
||||
CREATE TABLE t3 (id3 INT, id4 INT);
|
||||
CREATE TABLE t4 (id4 INT);
|
||||
CREATE TABLE t5 (id5 INT, id6 INT);
|
||||
CREATE TABLE t6 (id6 INT);
|
||||
|
||||
INSERT INTO t1 VALUES(1,1);
|
||||
INSERT INTO t2 VALUES(1,1,1);
|
||||
INSERT INTO t3 VALUES(1,1);
|
||||
INSERT INTO t4 VALUES(1);
|
||||
INSERT INTO t5 VALUES(1,1);
|
||||
INSERT INTO t6 VALUES(1);
|
||||
|
||||
-- original bug query
|
||||
SELECT * FROM
|
||||
t1
|
||||
NATURAL JOIN
|
||||
(t2 JOIN (t3 NATURAL JOIN t4, t5 NATURAL JOIN t6)
|
||||
ON (t3.id3 = t2.id3 AND t5.id5 = t2.id5));
|
||||
|
||||
-- inner join swapped
|
||||
SELECT * FROM
|
||||
t1
|
||||
NATURAL JOIN
|
||||
(((t3 NATURAL JOIN t4) join (t5 NATURAL JOIN t6) on t3.id4 = t5.id5) JOIN t2
|
||||
ON (t3.id3 = t2.id3 AND t5.id5 = t2.id5));
|
||||
|
||||
-- one join less, no ON cond
|
||||
SELECT * FROM t1 NATURAL JOIN ((t3 join (t5 NATURAL JOIN t6)) JOIN t2);
|
||||
|
||||
-- wrong error message: 'id2' - ambiguous column
|
||||
SELECT * FROM
|
||||
(t2 JOIN (t3 NATURAL JOIN t4, t5 NATURAL JOIN t6)
|
||||
ON (t3.id3 = t2.id3 AND t5.id5 = t2.id5))
|
||||
NATURAL JOIN
|
||||
t1;
|
||||
SELECT * FROM
|
||||
(t2 JOIN ((t3 NATURAL JOIN t4) join (t5 NATURAL JOIN t6)))
|
||||
NATURAL JOIN
|
||||
t1;
|
||||
|
||||
DROP TABLE t1,t2,t3,t4,t5,t6;
|
||||
|
@ -892,6 +892,49 @@ DROP FUNCTION f1;
|
||||
DROP PROCEDURE p1;
|
||||
DROP USER mysql_bug20230@localhost;
|
||||
|
||||
#
|
||||
# Bug#18925: subqueries with MIN/MAX functions on INFORMARTION_SCHEMA
|
||||
#
|
||||
|
||||
SELECT t.table_name, c1.column_name
|
||||
FROM information_schema.tables t
|
||||
INNER JOIN
|
||||
information_schema.columns c1
|
||||
ON t.table_schema = c1.table_schema AND
|
||||
t.table_name = c1.table_name
|
||||
WHERE t.table_schema = 'information_schema' AND
|
||||
c1.ordinal_position =
|
||||
( SELECT COALESCE(MIN(c2.ordinal_position),1)
|
||||
FROM information_schema.columns c2
|
||||
WHERE c2.table_schema = t.table_schema AND
|
||||
c2.table_name = t.table_name AND
|
||||
c2.column_name LIKE '%SCHEMA%'
|
||||
);
|
||||
SELECT t.table_name, c1.column_name
|
||||
FROM information_schema.tables t
|
||||
INNER JOIN
|
||||
information_schema.columns c1
|
||||
ON t.table_schema = c1.table_schema AND
|
||||
t.table_name = c1.table_name
|
||||
WHERE t.table_schema = 'information_schema' AND
|
||||
c1.ordinal_position =
|
||||
( SELECT COALESCE(MIN(c2.ordinal_position),1)
|
||||
FROM information_schema.columns c2
|
||||
WHERE c2.table_schema = 'information_schema' AND
|
||||
c2.table_name = t.table_name AND
|
||||
c2.column_name LIKE '%SCHEMA%'
|
||||
);
|
||||
|
||||
#
|
||||
# Bug#21231: query with a simple non-correlated subquery over
|
||||
# INFORMARTION_SCHEMA.TABLES
|
||||
#
|
||||
|
||||
SELECT MAX(table_name) FROM information_schema.tables;
|
||||
SELECT table_name from information_schema.tables
|
||||
WHERE table_name=(SELECT MAX(table_name)
|
||||
FROM information_schema.tables);
|
||||
|
||||
--echo End of 5.0 tests.
|
||||
#
|
||||
# Show engines
|
||||
|
@ -1079,7 +1079,7 @@ drop table t1,t2,t3;
|
||||
#
|
||||
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;
|
||||
select trim(name2) from t1 union all select trim(name) from t1 union all select trim(id) from t1;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
|
@ -66,6 +66,38 @@ where
|
||||
|
||||
drop table t1, t2;
|
||||
|
||||
#
|
||||
# Bug#17212: results not sorted correctly by ORDER BY when using index
|
||||
# (repeatable only w/innodb because of index props)
|
||||
#
|
||||
CREATE TABLE t1 (a int, b int, KEY b (b)) Engine=InnoDB;
|
||||
CREATE TABLE t2 (a int, b int, PRIMARY KEY (a,b)) Engine=InnoDB;
|
||||
CREATE TABLE t3 (a int, b int, c int, PRIMARY KEY (a),
|
||||
UNIQUE KEY b (b,c), KEY a (a,b,c)) Engine=InnoDB;
|
||||
|
||||
INSERT INTO t1 VALUES (1, 1);
|
||||
INSERT INTO t1 SELECT a + 1, b + 1 FROM t1;
|
||||
INSERT INTO t1 SELECT a + 2, b + 2 FROM t1;
|
||||
|
||||
INSERT INTO t2 VALUES (1,1),(1,2),(1,3),(1,4),(1,5),(1,6),(1,7),(1,8);
|
||||
INSERT INTO t2 SELECT a + 1, b FROM t2;
|
||||
DELETE FROM t2 WHERE a = 1 AND b < 2;
|
||||
|
||||
INSERT INTO t3 VALUES (1,1,1),(2,1,2);
|
||||
INSERT INTO t3 SELECT a + 2, a + 2, 3 FROM t3;
|
||||
INSERT INTO t3 SELECT a + 4, a + 4, 3 FROM t3;
|
||||
|
||||
# demonstrate a problem when a must-use-sort table flag
|
||||
# (sort_by_table=1) is being neglected.
|
||||
SELECT STRAIGHT_JOIN SQL_NO_CACHE t1.b, t1.a FROM t1, t3, t2 WHERE
|
||||
t3.a = t2.a AND t2.b = t1.a AND t3.b = 1 AND t3.c IN (1, 2)
|
||||
ORDER BY t1.b LIMIT 2;
|
||||
|
||||
# demonstrate the problem described in the bug report
|
||||
SELECT STRAIGHT_JOIN SQL_NO_CACHE t1.b, t1.a FROM t1, t3, t2 WHERE
|
||||
t3.a = t2.a AND t2.b = t1.a AND t3.b = 1 AND t3.c IN (1, 2)
|
||||
ORDER BY t1.b LIMIT 5;
|
||||
DROP TABLE t1, t2, t3;
|
||||
#
|
||||
# Bug #12882 min/max inconsistent on empty table
|
||||
#
|
||||
|
@ -20,16 +20,16 @@ insert into t1 values(1);
|
||||
|
||||
--disable_query_log
|
||||
# Test delimiter : supplied on the command line
|
||||
select "Test delimiter : from command line" as " ";
|
||||
select "Test delimiter : from command line" as "_";
|
||||
--exec $MYSQL test --delimiter=":" -e "select * from t1:"
|
||||
# Test delimiter :; supplied on the command line
|
||||
select "Test delimiter :; from command line" as " ";
|
||||
select "Test delimiter :; from command line" as "_";
|
||||
--exec $MYSQL test --delimiter=":;" -e "select * from t1:;"
|
||||
# Test 'go' command (vertical output) \G
|
||||
select "Test 'go' command(vertical output) \G" as " ";
|
||||
select "Test 'go' command(vertical output) \G" as "_";
|
||||
--exec $MYSQL test -e "select * from t1\G"
|
||||
# Test 'go' command \g
|
||||
select "Test 'go' command \g" as " ";
|
||||
select "Test 'go' command \g" as "_";
|
||||
--exec $MYSQL test -e "select * from t1\g"
|
||||
--enable_query_log
|
||||
drop table t1;
|
||||
|
@ -21,4 +21,14 @@ select * from t1 where a is null;
|
||||
explain select * from t1 where b is null;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Bug #14553: NULL in WHERE resets LAST_INSERT_ID
|
||||
#
|
||||
CREATE TABLE t1 (a INT AUTO_INCREMENT PRIMARY KEY);
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
SELECT sql_no_cache a, last_insert_id() FROM t1 WHERE a IS NULL;
|
||||
SELECT sql_no_cache a, last_insert_id() FROM t1 WHERE a IS NULL;
|
||||
SELECT sql_no_cache a, last_insert_id() FROM t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
# End of 4.1 tests
|
||||
|
@ -9,3 +9,24 @@
|
||||
-- source include/have_innodb.inc
|
||||
let $engine_type=innodb;
|
||||
-- source extra/rpl_tests/rpl_insert_id.test
|
||||
|
||||
connection master;
|
||||
drop table t1;
|
||||
sync_slave_with_master;
|
||||
|
||||
#
|
||||
# Bug#14553: NULL in WHERE resets LAST_INSERT_ID
|
||||
#
|
||||
connection master;
|
||||
create table t1(a int auto_increment, key(a));
|
||||
create table t2(a int);
|
||||
insert into t1 (a) values (null);
|
||||
insert into t2 (a) select a from t1 where a is null;
|
||||
insert into t2 (a) select a from t1 where a is null;
|
||||
select * from t2;
|
||||
sync_slave_with_master;
|
||||
connection slave;
|
||||
select * from t2;
|
||||
connection master;
|
||||
drop table t1;
|
||||
drop table t2;
|
||||
|
@ -2304,6 +2304,51 @@ INSERT INTO t1 VALUES (10);
|
||||
SELECT i='1e+01',i=1e+01, i in (1e+01,1e+01), i in ('1e+01','1e+01') FROM t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
#
|
||||
# Bug #21019: First result of SELECT COUNT(*) different than consecutive runs
|
||||
#
|
||||
CREATE TABLE t1 (a int, b int);
|
||||
INSERT INTO t1 VALUES (1,1), (2,1), (4,10);
|
||||
|
||||
CREATE TABLE t2 (a int PRIMARY KEY, b int, KEY b (b));
|
||||
INSERT INTO t2 VALUES (1,NULL), (2,10);
|
||||
ALTER TABLE t1 ENABLE KEYS;
|
||||
|
||||
EXPLAIN SELECT STRAIGHT_JOIN SQL_NO_CACHE COUNT(*) FROM t2, t1 WHERE t1.b = t2.b OR t2.b IS NULL;
|
||||
SELECT STRAIGHT_JOIN SQL_NO_CACHE * FROM t2, t1 WHERE t1.b = t2.b OR t2.b IS NULL;
|
||||
EXPLAIN SELECT STRAIGHT_JOIN SQL_NO_CACHE COUNT(*) FROM t2, t1 WHERE t1.b = t2.b OR t2.b IS NULL;
|
||||
SELECT STRAIGHT_JOIN SQL_NO_CACHE * FROM t2, t1 WHERE t1.b = t2.b OR t2.b IS NULL;
|
||||
DROP TABLE IF EXISTS t1,t2;
|
||||
#
|
||||
# Bug #20954 "avg(keyval) retuns 0.38 but max(keyval) returns an empty set"
|
||||
#
|
||||
--disable_ps_protocol
|
||||
CREATE TABLE t1 (key1 float default NULL, UNIQUE KEY key1 (key1));
|
||||
CREATE TABLE t2 (key2 float default NULL, UNIQUE KEY key2 (key2));
|
||||
INSERT INTO t1 VALUES (0.3762),(0.3845),(0.6158),(0.7941);
|
||||
INSERT INTO t2 VALUES (1.3762),(1.3845),(1.6158),(1.7941);
|
||||
|
||||
explain select max(key1) from t1 where key1 <= 0.6158;
|
||||
explain select max(key2) from t2 where key2 <= 1.6158;
|
||||
explain select min(key1) from t1 where key1 >= 0.3762;
|
||||
explain select min(key2) from t2 where key2 >= 1.3762;
|
||||
explain select max(key1), min(key2) from t1, t2
|
||||
where key1 <= 0.6158 and key2 >= 1.3762;
|
||||
explain select max(key1) from t1 where key1 <= 0.6158 and rand() + 0.5 >= 0.5;
|
||||
explain select min(key1) from t1 where key1 >= 0.3762 and rand() + 0.5 >= 0.5;
|
||||
|
||||
select max(key1) from t1 where key1 <= 0.6158;
|
||||
select max(key2) from t2 where key2 <= 1.6158;
|
||||
select min(key1) from t1 where key1 >= 0.3762;
|
||||
select min(key2) from t2 where key2 >= 1.3762;
|
||||
select max(key1), min(key2) from t1, t2
|
||||
where key1 <= 0.6158 and key2 >= 1.3762;
|
||||
select max(key1) from t1 where key1 <= 0.6158 and rand() + 0.5 >= 0.5;
|
||||
select min(key1) from t1 where key1 >= 0.3762 and rand() + 0.5 >= 0.5;
|
||||
|
||||
DROP TABLE t1,t2;
|
||||
--enable_ps_protocol
|
||||
|
||||
# End of 4.1 tests
|
||||
|
||||
#
|
||||
@ -2901,3 +2946,14 @@ from t1 left outer join t2 on t1.a = t2.c and t2.b <> 1
|
||||
where t1.b <> 1 order by t1.a;
|
||||
|
||||
drop table t1,t2;
|
||||
|
||||
#
|
||||
# Bug #20569: Garbage in DECIMAL results from some mathematical functions
|
||||
#
|
||||
SELECT 0.9888889889 * 1.011111411911;
|
||||
|
||||
#
|
||||
# Bug #10977: No warning issued if a column name is truncated
|
||||
#
|
||||
prepare stmt from 'select 1 as " a "';
|
||||
execute stmt;
|
||||
|
@ -5950,6 +5950,24 @@ call bug15217()|
|
||||
drop table t3|
|
||||
drop procedure bug15217|
|
||||
|
||||
#
|
||||
# BUG#19862: Sort with filesort by function evaluates function twice
|
||||
#
|
||||
--disable_warnings
|
||||
drop procedure if exists bug19862|
|
||||
--enable_warnings
|
||||
CREATE TABLE t11 (a INT)|
|
||||
CREATE TABLE t12 (a INT)|
|
||||
CREATE FUNCTION bug19862(x INT) RETURNS INT
|
||||
BEGIN
|
||||
INSERT INTO t11 VALUES (x);
|
||||
RETURN x+1;
|
||||
END|
|
||||
INSERT INTO t12 VALUES (1), (2)|
|
||||
SELECT bug19862(a) FROM t12 ORDER BY 1|
|
||||
SELECT * FROM t11|
|
||||
DROP TABLE t11, t12|
|
||||
DROP FUNCTION bug19862|
|
||||
#
|
||||
# BUG#NNNN: New bug synopsis
|
||||
#
|
||||
|
@ -1821,6 +1821,54 @@ SELECT * FROM t1
|
||||
|
||||
DROP TABLE t1,t2,t3;
|
||||
|
||||
#
|
||||
# BUG #10308: purge log with subselect
|
||||
#
|
||||
|
||||
purge master logs before (select adddate(current_timestamp(), interval -4 day));
|
||||
|
||||
|
||||
#
|
||||
# Bug#18503: Queries with a quantified subquery returning empty set may
|
||||
# return a wrong result.
|
||||
#
|
||||
CREATE TABLE t1 (f1 INT);
|
||||
CREATE TABLE t2 (f2 INT);
|
||||
INSERT INTO t1 VALUES (1);
|
||||
SELECT * FROM t1 WHERE f1 > ALL (SELECT f2 FROM t2);
|
||||
SELECT * FROM t1 WHERE f1 > ALL (SELECT f2 FROM t2 WHERE 1=0);
|
||||
INSERT INTO t2 VALUES (1);
|
||||
INSERT INTO t2 VALUES (2);
|
||||
SELECT * FROM t1 WHERE f1 > ALL (SELECT f2 FROM t2 WHERE f2=0);
|
||||
DROP TABLE t1, t2;
|
||||
|
||||
#
|
||||
# Bug#16302: Quantified subquery without any tables gives wrong results
|
||||
#
|
||||
select 1 from dual where 1 < any (select 2);
|
||||
select 1 from dual where 1 < all (select 2);
|
||||
select 1 from dual where 2 > any (select 1);
|
||||
select 1 from dual where 2 > all (select 1);
|
||||
select 1 from dual where 1 < any (select 2 from dual);
|
||||
select 1 from dual where 1 < all (select 2 from dual where 1!=1);
|
||||
|
||||
# BUG#20975 Wrong query results for subqueries within NOT
|
||||
create table t1 (s1 char);
|
||||
insert into t1 values (1),(2);
|
||||
|
||||
select * from t1 where (s1 < any (select s1 from t1));
|
||||
select * from t1 where not (s1 < any (select s1 from t1));
|
||||
|
||||
select * from t1 where (s1 < ALL (select s1+1 from t1));
|
||||
select * from t1 where not(s1 < ALL (select s1+1 from t1));
|
||||
|
||||
select * from t1 where (s1+1 = ANY (select s1 from t1));
|
||||
select * from t1 where NOT(s1+1 = ANY (select s1 from t1));
|
||||
|
||||
select * from t1 where (s1 = ALL (select s1/s1 from t1));
|
||||
select * from t1 where NOT(s1 = ALL (select s1/s1 from t1));
|
||||
drop table t1;
|
||||
# End of 4.1 tests
|
||||
# End of 4.1 tests
|
||||
|
||||
#
|
||||
@ -2131,3 +2179,81 @@ SELECT t1.i FROM t1 WHERE t1.i = CAST((SELECT MAX(i) FROM t2) AS UNSIGNED);
|
||||
|
||||
DROP TABLE t1;
|
||||
DROP TABLE t2;
|
||||
|
||||
#
|
||||
# Bug#20519: subselect with LIMIT M, N
|
||||
#
|
||||
|
||||
CREATE TABLE t1 (
|
||||
id bigint(20) unsigned NOT NULL auto_increment,
|
||||
name varchar(255) NOT NULL,
|
||||
PRIMARY KEY (id)
|
||||
);
|
||||
INSERT INTO t1 VALUES
|
||||
(1, 'Balazs'), (2, 'Joe'), (3, 'Frank');
|
||||
|
||||
CREATE TABLE t2 (
|
||||
id bigint(20) unsigned NOT NULL auto_increment,
|
||||
mid bigint(20) unsigned NOT NULL,
|
||||
date date NOT NULL,
|
||||
PRIMARY KEY (id)
|
||||
);
|
||||
INSERT INTO t2 VALUES
|
||||
(1, 1, '2006-03-30'), (2, 2, '2006-04-06'), (3, 3, '2006-04-13'),
|
||||
(4, 2, '2006-04-20'), (5, 1, '2006-05-01');
|
||||
|
||||
SELECT *,
|
||||
(SELECT date FROM t2 WHERE mid = t1.id
|
||||
ORDER BY date DESC LIMIT 0, 1) AS date_last,
|
||||
(SELECT date FROM t2 WHERE mid = t1.id
|
||||
ORDER BY date DESC LIMIT 3, 1) AS date_next_to_last
|
||||
FROM t1;
|
||||
SELECT *,
|
||||
(SELECT COUNT(*) FROM t2 WHERE mid = t1.id
|
||||
ORDER BY date DESC LIMIT 1, 1) AS date_count
|
||||
FROM t1;
|
||||
SELECT *,
|
||||
(SELECT date FROM t2 WHERE mid = t1.id
|
||||
ORDER BY date DESC LIMIT 0, 1) AS date_last,
|
||||
(SELECT date FROM t2 WHERE mid = t1.id
|
||||
ORDER BY date DESC LIMIT 1, 1) AS date_next_to_last
|
||||
FROM t1;
|
||||
DROP TABLE t1,t2;
|
||||
|
||||
#
|
||||
# Bug#20869: subselect with range access by DESC
|
||||
#
|
||||
|
||||
CREATE TABLE t1 (
|
||||
i1 int(11) NOT NULL default '0',
|
||||
i2 int(11) NOT NULL default '0',
|
||||
t datetime NOT NULL default '0000-00-00 00:00:00',
|
||||
PRIMARY KEY (i1,i2,t)
|
||||
);
|
||||
INSERT INTO t1 VALUES
|
||||
(24,1,'2005-03-03 16:31:31'),(24,1,'2005-05-27 12:40:07'),
|
||||
(24,1,'2005-05-27 12:40:08'),(24,1,'2005-05-27 12:40:10'),
|
||||
(24,1,'2005-05-27 12:40:25'),(24,1,'2005-05-27 12:40:30'),
|
||||
(24,2,'2005-03-03 13:43:05'),(24,2,'2005-03-03 16:23:31'),
|
||||
(24,2,'2005-03-03 16:31:30'),(24,2,'2005-05-27 12:37:02'),
|
||||
(24,2,'2005-05-27 12:40:06');
|
||||
|
||||
CREATE TABLE t2 (
|
||||
i1 int(11) NOT NULL default '0',
|
||||
i2 int(11) NOT NULL default '0',
|
||||
t datetime default NULL,
|
||||
PRIMARY KEY (i1)
|
||||
);
|
||||
INSERT INTO t2 VALUES (24,1,'2006-06-20 12:29:40');
|
||||
|
||||
EXPLAIN
|
||||
SELECT * FROM t1,t2
|
||||
WHERE t1.t = (SELECT t1.t FROM t1
|
||||
WHERE t1.t < t2.t AND t1.i2=1 AND t2.i1=t1.i1
|
||||
ORDER BY t1.t DESC LIMIT 1);
|
||||
SELECT * FROM t1,t2
|
||||
WHERE t1.t = (SELECT t1.t FROM t1
|
||||
WHERE t1.t < t2.t AND t1.i2=1 AND t2.i1=t1.i1
|
||||
ORDER BY t1.t DESC LIMIT 1);
|
||||
|
||||
DROP TABLE t1, t2;
|
||||
|
@ -150,3 +150,21 @@ EXPLAIN SELECT t2.*, t4.DOCTYPENAME, t1.CONTENTSIZE,t1.MIMETYPE FROM t2 INNER JO
|
||||
|
||||
drop table t1, t2, t3, t4;
|
||||
# End of 4.1 tests
|
||||
|
||||
#
|
||||
# Bug #20792: Incorrect results from aggregate subquery
|
||||
#
|
||||
CREATE TABLE t1 (a int(10) , PRIMARY KEY (a)) Engine=InnoDB;
|
||||
INSERT INTO t1 VALUES (1),(2);
|
||||
|
||||
CREATE TABLE t2 (a int(10), PRIMARY KEY (a)) Engine=InnoDB;
|
||||
INSERT INTO t2 VALUES (1);
|
||||
|
||||
CREATE TABLE t3 (a int(10), b int(10), c int(10),
|
||||
PRIMARY KEY (a)) Engine=InnoDB;
|
||||
INSERT INTO t3 VALUES (1,2,1);
|
||||
|
||||
SELECT t1.* FROM t1 WHERE (SELECT COUNT(*) FROM t3,t2 WHERE t3.c=t2.a
|
||||
and t2.a='1' AND t1.a=t3.b) > 0;
|
||||
|
||||
DROP TABLE t1,t2,t3;
|
||||
|
@ -109,6 +109,13 @@ SELECT myfunc_double(n) AS f FROM bug19904;
|
||||
SELECT metaphon(v) AS f FROM bug19904;
|
||||
DROP TABLE bug19904;
|
||||
|
||||
#
|
||||
# Bug#19862: Sort with filesort by function evaluates function twice
|
||||
#
|
||||
create table t1(f1 int);
|
||||
insert into t1 values(1),(2);
|
||||
explain select myfunc_int(f1) from t1 order by 1;
|
||||
drop table t1;
|
||||
--echo End of 5.0 tests.
|
||||
|
||||
#
|
||||
|
@ -390,8 +390,8 @@ create table t1 SELECT da from t2 UNION select dt from t2;
|
||||
select * from t1;
|
||||
show create table t1;
|
||||
drop table t1;
|
||||
create table t1 SELECT dt from t2 UNION select sc from t2;
|
||||
select * from t1;
|
||||
create table t1 SELECT dt from t2 UNION select trim(sc) from t2;
|
||||
select trim(dt) from t1;
|
||||
show create table t1;
|
||||
drop table t1;
|
||||
create table t1 SELECT dt from t2 UNION select sv from t2;
|
||||
@ -794,6 +794,14 @@ drop table t1;
|
||||
|
||||
# End of 4.1 tests
|
||||
|
||||
#
|
||||
# Bug#12185: Data type aggregation may produce wrong result
|
||||
#
|
||||
create table t1(f1 char(1), f2 char(5), f3 binary(1), f4 binary(5), f5 timestamp, f6 varchar(1) character set utf8 collate utf8_general_ci, f7 text);
|
||||
create table t2 as select *, f6 as f8 from t1 union select *, f7 from t1;
|
||||
show create table t2;
|
||||
drop table t1, t2;
|
||||
|
||||
#
|
||||
# Bug#18175: Union select over 129 tables with a sum function fails.
|
||||
#
|
||||
|
@ -2600,4 +2600,94 @@ CREATE TABLE t2 SELECT * FROM v1;
|
||||
SELECT * FROM t2;
|
||||
|
||||
DROP VIEW v1;
|
||||
DROP TABLE IF EXISTS t1,t2;
|
||||
DROP TABLE t1,t2;
|
||||
|
||||
#
|
||||
# Bug#16110: insert permitted into view col w/o default value
|
||||
#
|
||||
CREATE TABLE t1 (a INT NOT NULL, b INT NULL DEFAULT NULL);
|
||||
CREATE VIEW v1 AS SELECT a, b FROM t1;
|
||||
|
||||
INSERT INTO v1 (b) VALUES (2);
|
||||
|
||||
SET SQL_MODE = STRICT_ALL_TABLES;
|
||||
--error 1423
|
||||
INSERT INTO v1 (b) VALUES (4);
|
||||
SET SQL_MODE = '';
|
||||
|
||||
SELECT * FROM t1;
|
||||
|
||||
DROP VIEW v1;
|
||||
DROP TABLE t1;
|
||||
|
||||
#
|
||||
# Bug #18243: expression over a view column that with the REVERSE function
|
||||
#
|
||||
|
||||
CREATE TABLE t1 (firstname text, surname text);
|
||||
INSERT INTO t1 VALUES
|
||||
("Bart","Simpson"),("Milhouse","van Houten"),("Montgomery","Burns");
|
||||
|
||||
CREATE VIEW v1 AS SELECT CONCAT(firstname," ",surname) AS name FROM t1;
|
||||
SELECT CONCAT(LEFT(name,LENGTH(name)-INSTR(REVERSE(name)," ")),
|
||||
LEFT(name,LENGTH(name)-INSTR(REVERSE(name)," "))) AS f1
|
||||
FROM v1;
|
||||
|
||||
DROP VIEW v1;
|
||||
DROP TABLE t1;
|
||||
|
||||
#
|
||||
# Bug #19714: wrong type of a view column specified by an expressions over ints
|
||||
#
|
||||
|
||||
CREATE TABLE t1 (i int, j int);
|
||||
CREATE VIEW v1 AS SELECT COALESCE(i,j) FROM t1;
|
||||
DESCRIBE v1;
|
||||
CREATE TABLE t2 SELECT COALESCE(i,j) FROM t1;
|
||||
DESCRIBE t2;
|
||||
|
||||
DROP VIEW v1;
|
||||
DROP TABLE t1,t2;
|
||||
|
||||
#
|
||||
# Bug #17526: views with TRIM functions
|
||||
#
|
||||
|
||||
CREATE TABLE t1 (s varchar(10));
|
||||
INSERT INTO t1 VALUES ('yadda'), ('yady');
|
||||
|
||||
SELECT TRIM(BOTH 'y' FROM s) FROM t1;
|
||||
CREATE VIEW v1 AS SELECT TRIM(BOTH 'y' FROM s) FROM t1;
|
||||
SELECT * FROM v1;
|
||||
DROP VIEW v1;
|
||||
|
||||
SELECT TRIM(LEADING 'y' FROM s) FROM t1;
|
||||
CREATE VIEW v1 AS SELECT TRIM(LEADING 'y' FROM s) FROM t1;
|
||||
SELECT * FROM v1;
|
||||
DROP VIEW v1;
|
||||
|
||||
SELECT TRIM(TRAILING 'y' FROM s) FROM t1;
|
||||
CREATE VIEW v1 AS SELECT TRIM(TRAILING 'y' FROM s) FROM t1;
|
||||
SELECT * FROM v1;
|
||||
DROP VIEW v1;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
#
|
||||
# Bug #21086: server crashes when VIEW defined with a SELECT with COLLATE
|
||||
# clause is called
|
||||
#
|
||||
CREATE TABLE t1 (s1 char);
|
||||
INSERT INTO t1 VALUES ('Z');
|
||||
|
||||
CREATE VIEW v1 AS SELECT s1 collate latin1_german1_ci AS col FROM t1;
|
||||
|
||||
CREATE VIEW v2 (col) AS SELECT s1 collate latin1_german1_ci FROM t1;
|
||||
|
||||
# either of these statements will cause crash
|
||||
INSERT INTO v1 (col) VALUES ('b');
|
||||
INSERT INTO v2 (col) VALUES ('c');
|
||||
|
||||
SELECT s1 FROM t1;
|
||||
DROP VIEW v1, v2;
|
||||
DROP TABLE t1;
|
||||
|
18
sql/field.cc
18
sql/field.cc
@ -4585,6 +4585,24 @@ Field_timestamp::Field_timestamp(char *ptr_arg, uint32 len_arg,
|
||||
}
|
||||
|
||||
|
||||
Field_timestamp::Field_timestamp(bool maybe_null_arg,
|
||||
const char *field_name_arg,
|
||||
struct st_table *table_arg, CHARSET_INFO *cs)
|
||||
:Field_str((char*) 0, 19, maybe_null_arg ? (uchar*) "": 0, 0,
|
||||
NONE, field_name_arg, table_arg, cs)
|
||||
{
|
||||
/* For 4.0 MYD and 4.0 InnoDB compatibility */
|
||||
flags|= ZEROFILL_FLAG | UNSIGNED_FLAG;
|
||||
if (table && !table->timestamp_field &&
|
||||
unireg_check != NONE)
|
||||
{
|
||||
/* This timestamp has auto-update */
|
||||
table->timestamp_field= this;
|
||||
flags|=TIMESTAMP_FLAG;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Get auto-set type for TIMESTAMP field.
|
||||
|
||||
|
18
sql/field.h
18
sql/field.h
@ -793,7 +793,10 @@ public:
|
||||
Field_timestamp(char *ptr_arg, uint32 len_arg,
|
||||
uchar *null_ptr_arg, uchar null_bit_arg,
|
||||
enum utype unireg_check_arg, const char *field_name_arg,
|
||||
struct st_table *table_arg,
|
||||
TABLE_SHARE *share, CHARSET_INFO *cs);
|
||||
Field_timestamp(bool maybe_null_arg, const char *field_name_arg,
|
||||
struct st_table *table_arg, CHARSET_INFO *cs);
|
||||
enum_field_types type() const { return FIELD_TYPE_TIMESTAMP;}
|
||||
enum ha_base_keytype key_type() const { return HA_KEYTYPE_ULONG_INT; }
|
||||
enum Item_result cmp_type () const { return INT_RESULT; }
|
||||
@ -1144,6 +1147,21 @@ public:
|
||||
{
|
||||
flags|= BLOB_FLAG;
|
||||
}
|
||||
Field_blob(uint32 len_arg,bool maybe_null_arg, const char *field_name_arg,
|
||||
struct st_table *table_arg, CHARSET_INFO *cs, bool set_packlength)
|
||||
:Field_longstr((char*) 0,len_arg, maybe_null_arg ? (uchar*) "": 0, 0,
|
||||
NONE, field_name_arg, table_arg, cs)
|
||||
{
|
||||
flags|= BLOB_FLAG;
|
||||
packlength= 4;
|
||||
if (set_packlength)
|
||||
{
|
||||
uint32 char_length= len_arg/cs->mbmaxlen;
|
||||
packlength= char_length <= 255 ? 1 :
|
||||
char_length <= 65535 ? 2 :
|
||||
char_length <= 16777215 ? 3 : 4;
|
||||
}
|
||||
}
|
||||
enum_field_types type() const { return FIELD_TYPE_BLOB;}
|
||||
enum ha_base_keytype key_type() const
|
||||
{ return binary() ? HA_KEYTYPE_VARBINARY2 : HA_KEYTYPE_VARTEXT2; }
|
||||
|
19
sql/item.cc
19
sql/item.cc
@ -587,6 +587,7 @@ void Item::set_name(const char *str, uint length, CHARSET_INFO *cs)
|
||||
}
|
||||
if (cs->ctype)
|
||||
{
|
||||
uint orig_len= length;
|
||||
/*
|
||||
This will probably need a better implementation in the future:
|
||||
a function in CHARSET_INFO structure.
|
||||
@ -596,6 +597,11 @@ void Item::set_name(const char *str, uint length, CHARSET_INFO *cs)
|
||||
length--;
|
||||
str++;
|
||||
}
|
||||
if (orig_len != length && !is_autogenerated_name)
|
||||
push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_WARN,
|
||||
ER_REMOVED_SPACES, ER(ER_REMOVED_SPACES),
|
||||
str + length - orig_len);
|
||||
|
||||
}
|
||||
if (!my_charset_same(cs, system_charset_info))
|
||||
{
|
||||
@ -3949,7 +3955,9 @@ Field *Item::make_string_field(TABLE *table)
|
||||
if (max_length/collation.collation->mbmaxlen > CONVERT_IF_BIGGER_TO_BLOB)
|
||||
field= new Field_blob(max_length, maybe_null, name,
|
||||
collation.collation);
|
||||
else if (max_length > 0)
|
||||
/* Item_type_holder holds the exact type, do not change it */
|
||||
else if (max_length > 0 &&
|
||||
(type() != Item::TYPE_HOLDER || field_type() != MYSQL_TYPE_STRING))
|
||||
field= new Field_varstring(max_length, maybe_null, name, table->s,
|
||||
collation.collation);
|
||||
else
|
||||
@ -4029,6 +4037,7 @@ Field *Item::tmp_table_field_from_field_type(TABLE *table, bool fixed_length)
|
||||
field= new Field_time(maybe_null, name, &my_charset_bin);
|
||||
break;
|
||||
case MYSQL_TYPE_TIMESTAMP:
|
||||
return new Field_timestamp(maybe_null, name, table, &my_charset_bin);
|
||||
case MYSQL_TYPE_DATETIME:
|
||||
field= new Field_datetime(maybe_null, name, &my_charset_bin);
|
||||
break;
|
||||
@ -4062,7 +4071,11 @@ Field *Item::tmp_table_field_from_field_type(TABLE *table, bool fixed_length)
|
||||
case MYSQL_TYPE_LONG_BLOB:
|
||||
case MYSQL_TYPE_BLOB:
|
||||
case MYSQL_TYPE_GEOMETRY:
|
||||
field= new Field_blob(max_length, maybe_null, name, collation.collation);
|
||||
if (this->type() == Item::TYPE_HOLDER)
|
||||
field= new Field_blob(max_length, maybe_null, name, table,
|
||||
collation.collation, 1);
|
||||
else
|
||||
field= new Field_blob(max_length, maybe_null, name, table, collation.collation);
|
||||
break; // Blob handled outside of case
|
||||
}
|
||||
if (field)
|
||||
@ -6232,7 +6245,7 @@ uint32 Item_type_holder::display_length(Item *item)
|
||||
case MYSQL_TYPE_DOUBLE:
|
||||
return 53;
|
||||
case MYSQL_TYPE_NULL:
|
||||
return 4;
|
||||
return 0;
|
||||
case MYSQL_TYPE_LONGLONG:
|
||||
return 20;
|
||||
case MYSQL_TYPE_INT24:
|
||||
|
12
sql/item.h
12
sql/item.h
@ -737,9 +737,16 @@ public:
|
||||
Any new item which can be NULL must implement this call.
|
||||
*/
|
||||
virtual bool is_null() { return 0; }
|
||||
|
||||
/*
|
||||
it is "top level" item of WHERE clause and we do not need correct NULL
|
||||
handling
|
||||
Inform the item that there will be no distinction between its result
|
||||
being FALSE or NULL.
|
||||
|
||||
NOTE
|
||||
This function will be called for eg. Items that are top-level AND-parts
|
||||
of the WHERE clause. Items implementing this function (currently
|
||||
Item_cond_and and subquery-related item) enable special optimizations
|
||||
when they are "top level".
|
||||
*/
|
||||
virtual void top_level_item() {}
|
||||
/*
|
||||
@ -784,6 +791,7 @@ public:
|
||||
virtual bool collect_item_field_processor(byte * arg) { return 0; }
|
||||
virtual bool find_item_in_field_list_processor(byte *arg) { return 0; }
|
||||
virtual bool change_context_processor(byte *context) { return 0; }
|
||||
virtual bool is_expensive_processor(byte *arg) { return 0; }
|
||||
virtual bool register_field_in_read_map(byte *arg) { return 0; }
|
||||
/*
|
||||
Check if a partition function is allowed
|
||||
|
@ -3671,6 +3671,28 @@ Item *Item_cond_or::neg_transformer(THD *thd) /* NOT(a OR b OR ...) -> */
|
||||
}
|
||||
|
||||
|
||||
Item *Item_func_nop_all::neg_transformer(THD *thd)
|
||||
{
|
||||
/* "NOT (e $cmp$ ANY (SELECT ...)) -> e $rev_cmp$" ALL (SELECT ...) */
|
||||
Item_func_not_all *new_item= new Item_func_not_all(args[0]);
|
||||
Item_allany_subselect *allany= (Item_allany_subselect*)args[0];
|
||||
allany->func= allany->func_creator(FALSE);
|
||||
allany->all= !allany->all;
|
||||
allany->upper_item= new_item;
|
||||
return new_item;
|
||||
}
|
||||
|
||||
Item *Item_func_not_all::neg_transformer(THD *thd)
|
||||
{
|
||||
/* "NOT (e $cmp$ ALL (SELECT ...)) -> e $rev_cmp$" ANY (SELECT ...) */
|
||||
Item_func_nop_all *new_item= new Item_func_nop_all(args[0]);
|
||||
Item_allany_subselect *allany= (Item_allany_subselect*)args[0];
|
||||
allany->all= !allany->all;
|
||||
allany->func= allany->func_creator(TRUE);
|
||||
allany->upper_item= new_item;
|
||||
return new_item;
|
||||
}
|
||||
|
||||
Item *Item_func_eq::negated_item() /* a = b -> a != b */
|
||||
{
|
||||
return new Item_func_ne(args[0], args[1]);
|
||||
|
@ -313,6 +313,7 @@ public:
|
||||
void set_sum_test(Item_sum_hybrid *item) { test_sum_item= item; };
|
||||
void set_sub_test(Item_maxmin_subselect *item) { test_sub_item= item; };
|
||||
bool empty_underlying_subquery();
|
||||
Item *neg_transformer(THD *thd);
|
||||
};
|
||||
|
||||
|
||||
@ -323,6 +324,7 @@ public:
|
||||
Item_func_nop_all(Item *a) :Item_func_not_all(a) {}
|
||||
longlong val_int();
|
||||
const char *func_name() const { return "<nop>"; }
|
||||
Item *neg_transformer(THD *thd);
|
||||
};
|
||||
|
||||
|
||||
|
@ -402,6 +402,12 @@ Field *Item_func::tmp_table_field(TABLE *table)
|
||||
}
|
||||
|
||||
|
||||
bool Item_func::is_expensive_processor(byte *arg)
|
||||
{
|
||||
return is_expensive();
|
||||
}
|
||||
|
||||
|
||||
my_decimal *Item_func::val_decimal(my_decimal *decimal_value)
|
||||
{
|
||||
DBUG_ASSERT(fixed);
|
||||
|
@ -55,7 +55,7 @@ public:
|
||||
NOT_FUNC, NOT_ALL_FUNC,
|
||||
NOW_FUNC, TRIG_COND_FUNC,
|
||||
GUSERVAR_FUNC, COLLATE_FUNC,
|
||||
EXTRACT_FUNC, CHAR_TYPECAST_FUNC, FUNC_SP };
|
||||
EXTRACT_FUNC, CHAR_TYPECAST_FUNC, FUNC_SP, UDF_FUNC };
|
||||
enum optimize_type { OPTIMIZE_NONE,OPTIMIZE_KEY,OPTIMIZE_OP, OPTIMIZE_NULL,
|
||||
OPTIMIZE_EQUAL };
|
||||
enum Type type() const { return FUNC_ITEM; }
|
||||
@ -189,6 +189,8 @@ public:
|
||||
Item *transform(Item_transformer transformer, byte *arg);
|
||||
void traverse_cond(Cond_traverser traverser,
|
||||
void * arg, traverse_order order);
|
||||
bool is_expensive_processor(byte *arg);
|
||||
virtual bool is_expensive() { return 0; }
|
||||
};
|
||||
|
||||
|
||||
@ -962,6 +964,7 @@ public:
|
||||
Item_udf_func(udf_func *udf_arg, List<Item> &list)
|
||||
:Item_func(list), udf(udf_arg) {}
|
||||
const char *func_name() const { return udf.name(); }
|
||||
enum Functype functype() const { return UDF_FUNC; }
|
||||
bool fix_fields(THD *thd, Item **ref)
|
||||
{
|
||||
DBUG_ASSERT(fixed == 0);
|
||||
@ -974,6 +977,7 @@ public:
|
||||
void cleanup();
|
||||
Item_result result_type () const { return udf.result_type(); }
|
||||
table_map not_null_tables() const { return 0; }
|
||||
bool is_expensive() { return 1; }
|
||||
};
|
||||
|
||||
|
||||
@ -1503,6 +1507,7 @@ public:
|
||||
virtual enum Functype functype() const { return FUNC_SP; }
|
||||
|
||||
bool fix_fields(THD *thd, Item **ref);
|
||||
bool is_expensive() { return 1; }
|
||||
};
|
||||
|
||||
|
||||
|
@ -752,44 +752,47 @@ String *Item_func_reverse::val_str(String *str)
|
||||
{
|
||||
DBUG_ASSERT(fixed == 1);
|
||||
String *res = args[0]->val_str(str);
|
||||
char *ptr,*end;
|
||||
char *ptr, *end, *tmp;
|
||||
|
||||
if ((null_value=args[0]->null_value))
|
||||
return 0;
|
||||
/* An empty string is a special case as the string pointer may be null */
|
||||
if (!res->length())
|
||||
return &my_empty_string;
|
||||
res=copy_if_not_alloced(str,res,res->length());
|
||||
ptr = (char *) res->ptr();
|
||||
end=ptr+res->length();
|
||||
if (tmp_value.alloced_length() < res->length() &&
|
||||
tmp_value.realloc(res->length()))
|
||||
{
|
||||
null_value= 1;
|
||||
return 0;
|
||||
}
|
||||
tmp_value.length(res->length());
|
||||
tmp_value.set_charset(res->charset());
|
||||
ptr= (char *) res->ptr();
|
||||
end= ptr + res->length();
|
||||
tmp= (char *) tmp_value.ptr() + tmp_value.length();
|
||||
#ifdef USE_MB
|
||||
if (use_mb(res->charset()))
|
||||
{
|
||||
String tmpstr;
|
||||
tmpstr.copy(*res);
|
||||
char *tmp = (char *) tmpstr.ptr() + tmpstr.length();
|
||||
register uint32 l;
|
||||
while (ptr < end)
|
||||
{
|
||||
if ((l=my_ismbchar(res->charset(), ptr,end)))
|
||||
tmp-=l, memcpy(tmp,ptr,l), ptr+=l;
|
||||
if ((l= my_ismbchar(res->charset(),ptr,end)))
|
||||
{
|
||||
tmp-= l;
|
||||
memcpy(tmp,ptr,l);
|
||||
ptr+= l;
|
||||
}
|
||||
else
|
||||
*--tmp=*ptr++;
|
||||
*--tmp= *ptr++;
|
||||
}
|
||||
memcpy((char *) res->ptr(),(char *) tmpstr.ptr(), res->length());
|
||||
}
|
||||
else
|
||||
#endif /* USE_MB */
|
||||
{
|
||||
char tmp;
|
||||
while (ptr < end)
|
||||
{
|
||||
tmp=*ptr;
|
||||
*ptr++=*--end;
|
||||
*end=tmp;
|
||||
}
|
||||
*--tmp= *ptr++;
|
||||
}
|
||||
return res;
|
||||
return &tmp_value;
|
||||
}
|
||||
|
||||
|
||||
@ -1500,6 +1503,23 @@ void Item_func_trim::fix_length_and_dec()
|
||||
}
|
||||
}
|
||||
|
||||
void Item_func_trim::print(String *str)
|
||||
{
|
||||
if (arg_count == 1)
|
||||
{
|
||||
Item_func::print(str);
|
||||
return;
|
||||
}
|
||||
str->append(Item_func_trim::func_name());
|
||||
str->append('(');
|
||||
str->append(mode_name());
|
||||
str->append(' ');
|
||||
args[1]->print(str);
|
||||
str->append(STRING_WITH_LEN(" from "));
|
||||
args[0]->print(str);
|
||||
str->append(')');
|
||||
}
|
||||
|
||||
|
||||
/* Item_func_password */
|
||||
|
||||
|
@ -105,6 +105,7 @@ public:
|
||||
|
||||
class Item_func_reverse :public Item_str_func
|
||||
{
|
||||
String tmp_value;
|
||||
public:
|
||||
Item_func_reverse(Item *a) :Item_str_func(a) {}
|
||||
String *val_str(String *);
|
||||
@ -239,6 +240,8 @@ public:
|
||||
String *val_str(String *);
|
||||
void fix_length_and_dec();
|
||||
const char *func_name() const { return "trim"; }
|
||||
void print(String *str);
|
||||
virtual const char *mode_name() const { return "both"; }
|
||||
bool check_partition_func_processor(byte *bool_arg) { return 0;}
|
||||
};
|
||||
|
||||
@ -250,6 +253,7 @@ public:
|
||||
Item_func_ltrim(Item *a) :Item_func_trim(a) {}
|
||||
String *val_str(String *);
|
||||
const char *func_name() const { return "ltrim"; }
|
||||
const char *mode_name() const { return "leading"; }
|
||||
};
|
||||
|
||||
|
||||
@ -260,6 +264,7 @@ public:
|
||||
Item_func_rtrim(Item *a) :Item_func_trim(a) {}
|
||||
String *val_str(String *);
|
||||
const char *func_name() const { return "rtrim"; }
|
||||
const char *mode_name() const { return "trailing"; }
|
||||
};
|
||||
|
||||
|
||||
@ -741,7 +746,7 @@ public:
|
||||
void fix_length_and_dec();
|
||||
bool eq(const Item *item, bool binary_cmp) const;
|
||||
const char *func_name() const { return "collate"; }
|
||||
enum Functype func_type() const { return COLLATE_FUNC; }
|
||||
enum Functype functype() const { return COLLATE_FUNC; }
|
||||
void print(String *str);
|
||||
Item_field *filed_for_view_update()
|
||||
{
|
||||
|
@ -615,14 +615,14 @@ Item_in_subselect::Item_in_subselect(Item * left_exp,
|
||||
}
|
||||
|
||||
Item_allany_subselect::Item_allany_subselect(Item * left_exp,
|
||||
Comp_creator *fn,
|
||||
chooser_compare_func_creator fc,
|
||||
st_select_lex *select_lex,
|
||||
bool all_arg)
|
||||
:Item_in_subselect(), all(all_arg)
|
||||
:Item_in_subselect(), func_creator(fc), all(all_arg)
|
||||
{
|
||||
DBUG_ENTER("Item_in_subselect::Item_in_subselect");
|
||||
left_expr= left_exp;
|
||||
func= fn;
|
||||
func= func_creator(all_arg);
|
||||
init(select_lex, new select_exists_subselect(this));
|
||||
max_columns= 1;
|
||||
abort_on_null= 0;
|
||||
@ -845,7 +845,8 @@ Item_in_subselect::single_value_transformer(JOIN *join,
|
||||
if (!select_lex->group_list.elements &&
|
||||
!select_lex->having &&
|
||||
!select_lex->with_sum_func &&
|
||||
!(select_lex->next_select()))
|
||||
!(select_lex->next_select()) &&
|
||||
select_lex->table_list.elements)
|
||||
{
|
||||
Item_sum_hybrid *item;
|
||||
nesting_map save_allow_sum_func;
|
||||
|
@ -270,14 +270,13 @@ public:
|
||||
/* ALL/ANY/SOME subselect */
|
||||
class Item_allany_subselect :public Item_in_subselect
|
||||
{
|
||||
protected:
|
||||
Comp_creator *func;
|
||||
|
||||
public:
|
||||
chooser_compare_func_creator func_creator;
|
||||
Comp_creator *func;
|
||||
bool all;
|
||||
|
||||
Item_allany_subselect(Item * left_expr, Comp_creator *f,
|
||||
st_select_lex *select_lex, bool all);
|
||||
Item_allany_subselect(Item * left_expr, chooser_compare_func_creator fc,
|
||||
st_select_lex *select_lex, bool all);
|
||||
|
||||
// only ALL subquery has upper not
|
||||
subs_type substype() { return all?ALL_SUBS:ANY_SUBS; }
|
||||
|
@ -381,7 +381,9 @@ Field *Item_sum::create_tmp_field(bool group, TABLE *table,
|
||||
field= new Field_longlong(max_length, maybe_null, name, unsigned_flag);
|
||||
break;
|
||||
case STRING_RESULT:
|
||||
if (max_length/collation.collation->mbmaxlen <= 255 || !convert_blob_length)
|
||||
if (max_length/collation.collation->mbmaxlen <= 255 ||
|
||||
max_length/collation.collation->mbmaxlen >=UINT_MAX16 ||
|
||||
!convert_blob_length)
|
||||
return make_string_field(table);
|
||||
field= new Field_varstring(convert_blob_length, maybe_null,
|
||||
name, table->s, collation.collation);
|
||||
|
@ -538,11 +538,13 @@ enum enum_var_type
|
||||
OPT_DEFAULT= 0, OPT_SESSION, OPT_GLOBAL
|
||||
};
|
||||
class sys_var;
|
||||
#include "item.h"
|
||||
extern my_decimal decimal_zero;
|
||||
#ifdef MYSQL_SERVER
|
||||
class Comp_creator;
|
||||
typedef Comp_creator* (*chooser_compare_func_creator)(bool invert);
|
||||
#endif
|
||||
#include "item.h"
|
||||
extern my_decimal decimal_zero;
|
||||
|
||||
/* sql_parse.cc */
|
||||
void free_items(Item *item);
|
||||
void cleanup_items(Item *item);
|
||||
|
@ -670,7 +670,7 @@ private:
|
||||
#ifdef NOT_USED
|
||||
bool test_if_null_range(QUICK_RANGE *range, uint used_key_parts);
|
||||
#endif
|
||||
int reset(void) { next=0; rev_it.rewind(); return 0; }
|
||||
int reset(void) { rev_it.rewind(); return QUICK_RANGE_SELECT::reset(); }
|
||||
List<QUICK_RANGE> rev_ranges;
|
||||
List_iterator<QUICK_RANGE> rev_it;
|
||||
};
|
||||
|
@ -5802,6 +5802,8 @@ ER_FOREIGN_DUPLICATE_KEY 23000 S1009
|
||||
eng "Upholding foreign key constraints for table '%.64s', entry '%-.64s', key %d would lead to a duplicate entry"
|
||||
ER_COL_COUNT_DOESNT_MATCH_PLEASE_UPDATE
|
||||
eng "Column count of mysql.%s is wrong. Expected %d, found %d. Created with MySQL %d, now running %d. Please use scripts/mysql_fix_privilege_tables"
|
||||
ER_REMOVED_SPACES
|
||||
eng "Leading spaces are removed from name '%s'"
|
||||
ER_TEMP_TABLE_PREVENTS_SWITCH_OUT_OF_RBR
|
||||
eng "Cannot switch out of the row-based binary log format when the session has open temporary tables"
|
||||
ER_STORED_FUNCTION_PREVENTS_SWITCH_BINLOG_FORMAT
|
||||
|
@ -4974,36 +4974,48 @@ store_top_level_join_columns(THD *thd, TABLE_LIST *table_ref,
|
||||
if (table_ref->nested_join)
|
||||
{
|
||||
List_iterator_fast<TABLE_LIST> nested_it(table_ref->nested_join->join_list);
|
||||
TABLE_LIST *cur_left_neighbor= nested_it++;
|
||||
TABLE_LIST *cur_right_neighbor= NULL;
|
||||
TABLE_LIST *same_level_left_neighbor= nested_it++;
|
||||
TABLE_LIST *same_level_right_neighbor= NULL;
|
||||
/* Left/right-most neighbors, possibly at higher levels in the join tree. */
|
||||
TABLE_LIST *real_left_neighbor, *real_right_neighbor;
|
||||
|
||||
while (cur_left_neighbor)
|
||||
while (same_level_left_neighbor)
|
||||
{
|
||||
TABLE_LIST *cur_table_ref= cur_left_neighbor;
|
||||
cur_left_neighbor= nested_it++;
|
||||
TABLE_LIST *cur_table_ref= same_level_left_neighbor;
|
||||
same_level_left_neighbor= nested_it++;
|
||||
/*
|
||||
The order of RIGHT JOIN operands is reversed in 'join list' to
|
||||
transform it into a LEFT JOIN. However, in this procedure we need
|
||||
the join operands in their lexical order, so below we reverse the
|
||||
join operands. Notice that this happens only in the first loop, and
|
||||
not in the second one, as in the second loop cur_left_neighbor == NULL.
|
||||
This is the correct behavior, because the second loop
|
||||
sets cur_table_ref reference correctly after the join operands are
|
||||
join operands. Notice that this happens only in the first loop,
|
||||
and not in the second one, as in the second loop
|
||||
same_level_left_neighbor == NULL.
|
||||
This is the correct behavior, because the second loop sets
|
||||
cur_table_ref reference correctly after the join operands are
|
||||
swapped in the first loop.
|
||||
*/
|
||||
if (cur_left_neighbor &&
|
||||
if (same_level_left_neighbor &&
|
||||
cur_table_ref->outer_join & JOIN_TYPE_RIGHT)
|
||||
{
|
||||
/* This can happen only for JOIN ... ON. */
|
||||
DBUG_ASSERT(table_ref->nested_join->join_list.elements == 2);
|
||||
swap_variables(TABLE_LIST*, cur_left_neighbor, cur_table_ref);
|
||||
swap_variables(TABLE_LIST*, same_level_left_neighbor, cur_table_ref);
|
||||
}
|
||||
|
||||
/*
|
||||
Pick the parent's left and right neighbors if there are no immediate
|
||||
neighbors at the same level.
|
||||
*/
|
||||
real_left_neighbor= (same_level_left_neighbor) ?
|
||||
same_level_left_neighbor : left_neighbor;
|
||||
real_right_neighbor= (same_level_right_neighbor) ?
|
||||
same_level_right_neighbor : right_neighbor;
|
||||
|
||||
if (cur_table_ref->nested_join &&
|
||||
store_top_level_join_columns(thd, cur_table_ref,
|
||||
cur_left_neighbor, cur_right_neighbor))
|
||||
real_left_neighbor, real_right_neighbor))
|
||||
goto err;
|
||||
cur_right_neighbor= cur_table_ref;
|
||||
same_level_right_neighbor= cur_table_ref;
|
||||
}
|
||||
}
|
||||
|
||||
@ -5876,12 +5888,17 @@ fill_record(THD * thd, List<Item> &fields, List<Item> &values,
|
||||
bool ignore_errors)
|
||||
{
|
||||
List_iterator_fast<Item> f(fields),v(values);
|
||||
Item *value;
|
||||
Item *value, *fld;
|
||||
Item_field *field;
|
||||
DBUG_ENTER("fill_record");
|
||||
|
||||
while ((field=(Item_field*) f++))
|
||||
while ((fld= f++))
|
||||
{
|
||||
if (!(field= fld->filed_for_view_update()))
|
||||
{
|
||||
my_error(ER_NONUPDATEABLE_COLUMN, MYF(0), fld->name);
|
||||
DBUG_RETURN(TRUE);
|
||||
}
|
||||
value=v++;
|
||||
Field *rfield= field->field;
|
||||
TABLE *table= rfield->table;
|
||||
|
@ -310,6 +310,7 @@ THD::THD()
|
||||
tablespace_op=FALSE;
|
||||
ulong tmp=sql_rnd_with_mutex();
|
||||
randominit(&rand, tmp + (ulong) &rand, tmp + (ulong) ::query_id);
|
||||
substitute_null_with_insert_id = FALSE;
|
||||
thr_lock_info_init(&lock_info); /* safety: will be reset after start */
|
||||
thr_lock_owner_init(&main_lock_id, &lock_info);
|
||||
}
|
||||
|
@ -1276,6 +1276,8 @@ public:
|
||||
bool last_cuted_field;
|
||||
bool no_errors, password, is_fatal_error;
|
||||
bool query_start_used, rand_used, time_zone_used;
|
||||
/* for IS NULL => = last_insert_id() fix in remove_eq_conds() */
|
||||
bool substitute_null_with_insert_id;
|
||||
bool in_lock_tables;
|
||||
bool query_error, bootstrap, cleanup_done;
|
||||
bool tmp_table_used;
|
||||
|
@ -730,6 +730,7 @@ static bool check_view_insertability(THD * thd, TABLE_LIST *view)
|
||||
uint used_fields_buff_size= bitmap_buffer_size(table->s->fields);
|
||||
uint32 *used_fields_buff= (uint32*)thd->alloc(used_fields_buff_size);
|
||||
MY_BITMAP used_fields;
|
||||
bool save_set_query_id= thd->set_query_id;
|
||||
DBUG_ENTER("check_key_in_view");
|
||||
|
||||
if (!used_fields_buff)
|
||||
@ -741,15 +742,26 @@ static bool check_view_insertability(THD * thd, TABLE_LIST *view)
|
||||
bitmap_clear_all(&used_fields);
|
||||
|
||||
view->contain_auto_increment= 0;
|
||||
/*
|
||||
we must not set query_id for fields as they're not
|
||||
really used in this context
|
||||
*/
|
||||
thd->set_query_id= 0;
|
||||
/* check simplicity and prepare unique test of view */
|
||||
for (trans= trans_start; trans != trans_end; trans++)
|
||||
{
|
||||
if (!trans->item->fixed && trans->item->fix_fields(thd, &trans->item))
|
||||
return TRUE;
|
||||
{
|
||||
thd->set_query_id= save_set_query_id;
|
||||
DBUG_RETURN(TRUE);
|
||||
}
|
||||
Item_field *field;
|
||||
/* simple SELECT list entry (field without expression) */
|
||||
if (!(field= trans->item->filed_for_view_update()))
|
||||
{
|
||||
thd->set_query_id= save_set_query_id;
|
||||
DBUG_RETURN(TRUE);
|
||||
}
|
||||
if (field->field->unireg_check == Field::NEXT_NUMBER)
|
||||
view->contain_auto_increment= 1;
|
||||
/* prepare unique test */
|
||||
@ -759,6 +771,7 @@ static bool check_view_insertability(THD * thd, TABLE_LIST *view)
|
||||
*/
|
||||
trans->item= field;
|
||||
}
|
||||
thd->set_query_id= save_set_query_id;
|
||||
/* unique test */
|
||||
for (trans= trans_start; trans != trans_end; trans++)
|
||||
{
|
||||
|
@ -7305,7 +7305,7 @@ Item * all_any_subquery_creator(Item *left_expr,
|
||||
return new Item_func_not(new Item_in_subselect(left_expr, select_lex));
|
||||
|
||||
Item_allany_subselect *it=
|
||||
new Item_allany_subselect(left_expr, (*cmp)(all), select_lex, all);
|
||||
new Item_allany_subselect(left_expr, cmp, select_lex, all);
|
||||
if (all)
|
||||
return it->upper_item= new Item_func_not_all(it); /* ALL */
|
||||
|
||||
|
@ -689,6 +689,24 @@ JOIN::optimize()
|
||||
DBUG_PRINT("info",("Select tables optimized away"));
|
||||
zero_result_cause= "Select tables optimized away";
|
||||
tables_list= 0; // All tables resolved
|
||||
/*
|
||||
Extract all table-independent conditions and replace the WHERE
|
||||
clause with them. All other conditions were computed by opt_sum_query
|
||||
and the MIN/MAX/COUNT function(s) have been replaced by constants,
|
||||
so there is no need to compute the whole WHERE clause again.
|
||||
Notice that make_cond_for_table() will always succeed to remove all
|
||||
computed conditions, because opt_sum_query() is applicable only to
|
||||
conjunctions.
|
||||
*/
|
||||
if (conds)
|
||||
{
|
||||
COND *table_independent_conds=
|
||||
make_cond_for_table(conds, PSEUDO_TABLE_BITS, 0);
|
||||
DBUG_EXECUTE("where",
|
||||
print_where(table_independent_conds,
|
||||
"where after opt_sum_query()"););
|
||||
conds= table_independent_conds;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!tables_list)
|
||||
@ -1067,6 +1085,23 @@ JOIN::optimize()
|
||||
{
|
||||
need_tmp=1; simple_order=simple_group=0; // Force tmp table without sort
|
||||
}
|
||||
if (order)
|
||||
{
|
||||
/*
|
||||
Force using of tmp table if sorting by a SP or UDF function due to
|
||||
their expensive and probably non-deterministic nature.
|
||||
*/
|
||||
for (ORDER *tmp_order= order; tmp_order ; tmp_order=tmp_order->next)
|
||||
{
|
||||
Item *item= *tmp_order->item;
|
||||
if (item->walk(&Item::is_expensive_processor,(byte*)0))
|
||||
{
|
||||
/* Force tmp table without sort */
|
||||
need_tmp=1; simple_order=simple_group=0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
tmp_having= having;
|
||||
@ -1212,6 +1247,11 @@ int
|
||||
JOIN::reinit()
|
||||
{
|
||||
DBUG_ENTER("JOIN::reinit");
|
||||
|
||||
unit->offset_limit_cnt= (ha_rows)(select_lex->offset_limit ?
|
||||
select_lex->offset_limit->val_uint() :
|
||||
ULL(0));
|
||||
|
||||
first_record= 0;
|
||||
|
||||
if (exec_tmp_table1)
|
||||
@ -2492,8 +2532,11 @@ merge_key_fields(KEY_FIELD *start,KEY_FIELD *new_fields,KEY_FIELD *end,
|
||||
/* field = expression OR field IS NULL */
|
||||
old->level= and_level;
|
||||
old->optimize= KEY_OPTIMIZE_REF_OR_NULL;
|
||||
/* Remember the NOT NULL value */
|
||||
if (old->val->is_null())
|
||||
/*
|
||||
Remember the NOT NULL value unless the value does not depend
|
||||
on other tables.
|
||||
*/
|
||||
if (!old->val->used_tables() && old->val->is_null())
|
||||
old->val= new_fields->val;
|
||||
/* The referred expression can be NULL: */
|
||||
old->null_rejecting= 0;
|
||||
@ -5520,6 +5563,7 @@ make_join_readinfo(JOIN *join, uint options)
|
||||
{
|
||||
uint i;
|
||||
bool statistics= test(!(join->select_options & SELECT_DESCRIBE));
|
||||
bool ordered_set= 0;
|
||||
bool sorted= 1;
|
||||
DBUG_ENTER("make_join_readinfo");
|
||||
|
||||
@ -5530,6 +5574,22 @@ make_join_readinfo(JOIN *join, uint options)
|
||||
tab->read_record.table= table;
|
||||
tab->read_record.file=table->file;
|
||||
tab->next_select=sub_select; /* normal select */
|
||||
|
||||
/*
|
||||
Determine if the set is already ordered for ORDER BY, so it can
|
||||
disable join cache because it will change the ordering of the results.
|
||||
Code handles sort table that is at any location (not only first after
|
||||
the const tables) despite the fact that it's currently prohibited.
|
||||
*/
|
||||
if (!ordered_set &&
|
||||
(table == join->sort_by_table &&
|
||||
(!join->order || join->skip_sort_order ||
|
||||
test_if_skip_sort_order(tab, join->order, join->select_limit,
|
||||
1))
|
||||
) ||
|
||||
(join->sort_by_table == (TABLE *) 1 && i != join->const_tables))
|
||||
ordered_set= 1;
|
||||
|
||||
tab->sorted= sorted;
|
||||
sorted= 0; // only first must be sorted
|
||||
switch (tab->type) {
|
||||
@ -5602,10 +5662,11 @@ make_join_readinfo(JOIN *join, uint options)
|
||||
case JT_ALL:
|
||||
/*
|
||||
If previous table use cache
|
||||
If the incoming data set is already sorted don't use cache.
|
||||
*/
|
||||
table->status=STATUS_NO_RECORD;
|
||||
if (i != join->const_tables && !(options & SELECT_NO_JOIN_CACHE) &&
|
||||
tab->use_quick != 2 && !tab->first_inner)
|
||||
tab->use_quick != 2 && !tab->first_inner && !ordered_set)
|
||||
{
|
||||
if ((options & SELECT_DESCRIBE) ||
|
||||
!join_init_cache(join->thd,join->join_tab+join->const_tables,
|
||||
@ -6192,10 +6253,16 @@ return_zero_rows(JOIN *join, select_result *result,TABLE_LIST *tables,
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
used only in JOIN::clear
|
||||
*/
|
||||
static void clear_tables(JOIN *join)
|
||||
{
|
||||
for (uint i=0 ; i < join->tables ; i++)
|
||||
/*
|
||||
must clear only the non-const tables, as const tables
|
||||
are not re-calculated.
|
||||
*/
|
||||
for (uint i=join->const_tables ; i < join->tables ; i++)
|
||||
mark_as_null_row(join->table[i]); // All fields are NULL
|
||||
}
|
||||
|
||||
@ -8056,7 +8123,12 @@ Field *create_tmp_field_from_field(THD *thd, Field *org_field,
|
||||
{
|
||||
Field *new_field;
|
||||
|
||||
if (convert_blob_length && (org_field->flags & BLOB_FLAG))
|
||||
/*
|
||||
Make sure that the blob fits into a Field_varstring which has
|
||||
2-byte lenght.
|
||||
*/
|
||||
if (convert_blob_length && convert_blob_length < UINT_MAX16 &&
|
||||
(org_field->flags & BLOB_FLAG))
|
||||
new_field= new Field_varstring(convert_blob_length,
|
||||
org_field->maybe_null(),
|
||||
org_field->field_name, table->s,
|
||||
@ -8121,8 +8193,13 @@ static Field *create_tmp_field_from_item(THD *thd, Item *item, TABLE *table,
|
||||
item->name, item->decimals);
|
||||
break;
|
||||
case INT_RESULT:
|
||||
new_field= new Field_longlong(item->max_length, maybe_null,
|
||||
item->name, item->unsigned_flag);
|
||||
/* Select an integer type with the minimal fit precision */
|
||||
if (item->max_length > 11)
|
||||
new_field=new Field_longlong(item->max_length, maybe_null,
|
||||
item->name, item->unsigned_flag);
|
||||
else
|
||||
new_field=new Field_long(item->max_length, maybe_null,
|
||||
item->name, item->unsigned_flag);
|
||||
break;
|
||||
case STRING_RESULT:
|
||||
DBUG_ASSERT(item->collation.collation);
|
||||
@ -8135,8 +8212,13 @@ static Field *create_tmp_field_from_item(THD *thd, Item *item, TABLE *table,
|
||||
if ((type= item->field_type()) == MYSQL_TYPE_DATETIME ||
|
||||
type == MYSQL_TYPE_TIME || type == MYSQL_TYPE_DATE)
|
||||
new_field= item->tmp_table_field_from_field_type(table, 1);
|
||||
/*
|
||||
Make sure that the blob fits into a Field_varstring which has
|
||||
2-byte lenght.
|
||||
*/
|
||||
else if (item->max_length/item->collation.collation->mbmaxlen > 255 &&
|
||||
convert_blob_length)
|
||||
item->max_length/item->collation.collation->mbmaxlen < UINT_MAX16
|
||||
&& convert_blob_length)
|
||||
new_field= new Field_varstring(convert_blob_length, maybe_null,
|
||||
item->name, table->s,
|
||||
item->collation.collation);
|
||||
@ -10710,8 +10792,13 @@ end_send_group(JOIN *join, JOIN_TAB *join_tab __attribute__((unused)),
|
||||
{
|
||||
if (!join->first_record)
|
||||
{
|
||||
List_iterator_fast<Item> it(*join->fields);
|
||||
Item *item;
|
||||
/* No matching rows for group function */
|
||||
join->clear();
|
||||
|
||||
while ((item= it++))
|
||||
item->no_rows_in_result();
|
||||
}
|
||||
if (join->having && join->having->val_int() == 0)
|
||||
error= -1; // Didn't satisfy having
|
||||
@ -12881,7 +12968,7 @@ count_field_types(TMP_TABLE_PARAM *param, List<Item> &fields,
|
||||
{
|
||||
if (! field->const_item())
|
||||
{
|
||||
Item_sum *sum_item=(Item_sum*) field;
|
||||
Item_sum *sum_item=(Item_sum*) field->real_item();
|
||||
if (!sum_item->quick_group)
|
||||
param->quick_group=0; // UDF SUM function
|
||||
param->sum_func_count++;
|
||||
@ -13141,10 +13228,11 @@ setup_copy_fields(THD *thd, TMP_TABLE_PARAM *param,
|
||||
param->copy_funcs.empty();
|
||||
for (i= 0; (pos= li++); i++)
|
||||
{
|
||||
if (pos->real_item()->type() == Item::FIELD_ITEM)
|
||||
Item *real_pos= pos->real_item();
|
||||
if (real_pos->type() == Item::FIELD_ITEM)
|
||||
{
|
||||
Item_field *item;
|
||||
pos= pos->real_item();
|
||||
pos= real_pos;
|
||||
if (!(item= new Item_field(thd, ((Item_field*) pos))))
|
||||
goto err;
|
||||
pos= item;
|
||||
@ -13183,12 +13271,13 @@ setup_copy_fields(THD *thd, TMP_TABLE_PARAM *param,
|
||||
}
|
||||
}
|
||||
}
|
||||
else if ((pos->type() == Item::FUNC_ITEM ||
|
||||
pos->type() == Item::SUBSELECT_ITEM ||
|
||||
pos->type() == Item::CACHE_ITEM ||
|
||||
pos->type() == Item::COND_ITEM) &&
|
||||
!pos->with_sum_func)
|
||||
else if ((real_pos->type() == Item::FUNC_ITEM ||
|
||||
real_pos->type() == Item::SUBSELECT_ITEM ||
|
||||
real_pos->type() == Item::CACHE_ITEM ||
|
||||
real_pos->type() == Item::COND_ITEM) &&
|
||||
!real_pos->with_sum_func)
|
||||
{ // Save for send fields
|
||||
pos= real_pos;
|
||||
/* TODO:
|
||||
In most cases this result will be sent to the user.
|
||||
This should be changed to use copy_int or copy_real depending
|
||||
|
@ -5107,6 +5107,7 @@ bool get_schema_tables_result(JOIN *join)
|
||||
table_list->table->file->delete_all_rows();
|
||||
free_io_cache(table_list->table);
|
||||
filesort_free_buffers(table_list->table);
|
||||
table_list->table->null_row= 0;
|
||||
}
|
||||
else
|
||||
table_list->table->file->stats.records= 0;
|
||||
|
@ -5766,8 +5766,8 @@ select_item:
|
||||
YYABORT;
|
||||
if ($4.str)
|
||||
{
|
||||
$2->set_name($4.str, $4.length, system_charset_info);
|
||||
$2->is_autogenerated_name= FALSE;
|
||||
$2->set_name($4.str, $4.length, system_charset_info);
|
||||
}
|
||||
else if (!$2->name) {
|
||||
char *str = $1;
|
||||
@ -6655,8 +6655,8 @@ udf_expr:
|
||||
{
|
||||
if ($4.str)
|
||||
{
|
||||
$2->set_name($4.str, $4.length, system_charset_info);
|
||||
$2->is_autogenerated_name= FALSE;
|
||||
$2->set_name($4.str, $4.length, system_charset_info);
|
||||
}
|
||||
else
|
||||
$2->set_name($1, (uint) ($3 - $1), YYTHD->charset());
|
||||
|
@ -38,6 +38,10 @@ DbCreate DbAsyncGenerator \
|
||||
testSRBank \
|
||||
test_event_merge
|
||||
|
||||
EXTRA_PROGRAMS = \
|
||||
test_event \
|
||||
test_event_merge \
|
||||
test_event_multi_table
|
||||
#flexTimedAsynch
|
||||
#testBlobs
|
||||
#flex_bench_mysql
|
||||
|
@ -171,6 +171,7 @@ static const dec1 frac_max[DIG_PER_DEC1-1]={
|
||||
do \
|
||||
{ \
|
||||
dec1 a=(from1)+(from2)+(carry); \
|
||||
DBUG_ASSERT((carry) <= 1); \
|
||||
if (((carry)= a >= DIG_BASE)) /* no division here! */ \
|
||||
a-=DIG_BASE; \
|
||||
(to)=a; \
|
||||
@ -179,7 +180,7 @@ static const dec1 frac_max[DIG_PER_DEC1-1]={
|
||||
#define ADD2(to, from1, from2, carry) \
|
||||
do \
|
||||
{ \
|
||||
dec1 a=(from1)+(from2)+(carry); \
|
||||
dec2 a=((dec2)(from1))+(from2)+(carry); \
|
||||
if (((carry)= a >= DIG_BASE)) \
|
||||
a-=DIG_BASE; \
|
||||
if (unlikely(a >= DIG_BASE)) \
|
||||
@ -187,7 +188,7 @@ static const dec1 frac_max[DIG_PER_DEC1-1]={
|
||||
a-=DIG_BASE; \
|
||||
carry++; \
|
||||
} \
|
||||
(to)=a; \
|
||||
(to)=(dec1) a; \
|
||||
} while(0)
|
||||
|
||||
#define SUB(to, from1, from2, carry) /* to=from1-from2 */ \
|
||||
@ -2004,7 +2005,13 @@ int decimal_mul(decimal_t *from1, decimal_t *from2, decimal_t *to)
|
||||
ADD2(*buf0, *buf0, lo, carry);
|
||||
carry+=hi;
|
||||
}
|
||||
for (; carry; buf0--)
|
||||
if (carry)
|
||||
{
|
||||
if (buf0 < to->buf)
|
||||
return E_DEC_OVERFLOW;
|
||||
ADD2(*buf0, *buf0, 0, carry);
|
||||
}
|
||||
for (buf0--; carry; buf0--)
|
||||
{
|
||||
if (buf0 < to->buf)
|
||||
return E_DEC_OVERFLOW;
|
||||
|
Loading…
x
Reference in New Issue
Block a user