summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <bell@sanja.is.com.ua>2003-10-30 12:57:26 +0200
committerunknown <bell@sanja.is.com.ua>2003-10-30 12:57:26 +0200
commit87e6c2ba77a514456f9f33e69984d67d0a588469 (patch)
treefeb3d108a684e5356467c6eca482627ae8d30859
parent683dcaae6bfc101d352755f834ecda48f4ea4700 (diff)
downloadmariadb-git-87e6c2ba77a514456f9f33e69984d67d0a588469.tar.gz
added code covarage for functions convert(), nullif(), crc32(), is_used_lock(), char_lengtrh(), bit_xor()
added string length for more speed made code covarage for print() method of Item fixed printability of some items (SCRUM) (WL#1274) mysql-test/r/auto_increment.result: print() code coverage mysql-test/r/bench_count_distinct.result: print() code coverage mysql-test/r/case.result: print() code coverage mysql-test/r/cast.result: print() code coverage mysql-test/r/ctype_collate.result: print() code coverage mysql-test/r/ctype_many.result: convert with 3 arguments code covarage print() code coverage mysql-test/r/ctype_utf8.result: char_length code coverage mysql-test/r/date_formats.result: print() code coverage mysql-test/r/fulltext.result: print() code coverage mysql-test/r/func_compress.result: print() code coverage mysql-test/r/func_gconcat.result: print() code coverage mysql-test/r/func_group.result: bit_xor() code coverage print() code coverage mysql-test/r/func_if.result: nullif() code coverage print() code coverage mysql-test/r/func_in.result: print() code coverage mysql-test/r/func_math.result: print() code coverage mysql-test/r/func_op.result: print() code coverage mysql-test/r/func_regexp.result: print() code coverage mysql-test/r/func_set.result: print() code coverage mysql-test/r/func_str.result: crc32() code coverage print() code coverage mysql-test/r/func_system.result: print() code coverage mysql-test/r/func_test.result: print() code coverage mysql-test/r/func_time.result: print() code coverage mysql-test/r/group_by.result: print() code coverage mysql-test/r/having.result: print() code coverage mysql-test/r/insert_update.result: print() code coverage mysql-test/r/null.result: print() code coverage mysql-test/r/olap.result: print() code coverage mysql-test/r/query_cache.result: print() code coverage mysql-test/r/row.result: print() code coverage mysql-test/r/rpl000001.result: print() code coverage mysql-test/r/rpl_get_lock.result: print() code coverage mysql-test/r/rpl_master_pos_wait.result: print() code coverage mysql-test/r/select.result: print() code coverage mysql-test/r/subselect.result: print() code coverage mysql-test/r/type_blob.result: print() code coverage mysql-test/r/varbinary.result: print() code coverage mysql-test/r/variables.result: print() code coverage mysql-test/t/auto_increment.test: print() code coverage mysql-test/t/bench_count_distinct.test: print() code coverage mysql-test/t/case.test: print() code coverage mysql-test/t/cast.test: print() code coverage mysql-test/t/ctype_collate.test: print() code coverage mysql-test/t/ctype_many.test: convert with 3 arguments code covarage print() code coverage mysql-test/t/ctype_utf8.test: char_length code coverage mysql-test/t/date_formats.test: print() code coverage mysql-test/t/fulltext.test: print() code coverage mysql-test/t/func_compress.test: print() code coverage mysql-test/t/func_gconcat.test: print() code coverage mysql-test/t/func_group.test: bit_xor() code coverage print() code coverage mysql-test/t/func_if.test: nullif() code coverage print() code coverage mysql-test/t/func_in.test: print() code coverage mysql-test/t/func_math.test: print() code coverage mysql-test/t/func_op.test: print() code coverage mysql-test/t/func_regexp.test: print() code coverage mysql-test/t/func_set.test: print() code coverage mysql-test/t/func_str.test: crc32() code covarage print() code coverage mysql-test/t/func_system.test: print() code coverage mysql-test/t/func_test.test: print() code coverage mysql-test/t/func_time.test: print() code coverage mysql-test/t/group_by.test: print() code coverage mysql-test/t/having.test: print() code coverage mysql-test/t/insert_update.test: print() code coverage mysql-test/t/null.test: print() code coverage mysql-test/t/olap.test: print() code coverage mysql-test/t/query_cache.test: print() code coverage mysql-test/t/row.test: print() code coverage mysql-test/t/rpl000001.test: print() code coverage mysql-test/t/rpl_get_lock.test: print() code coverage mysql-test/t/rpl_master_pos_wait.test: print() code coverage mysql-test/t/select.test: print() code coverage mysql-test/t/type_blob.test: print() code coverage mysql-test/t/varbinary.test: print() code coverage mysql-test/t/variables.test: print() code coverage sql/item.cc: added string length for more speed layout fix fixed string printability sql/item.h: added string length for more speed sql/item_cmpfunc.cc: added string length for more speed sql/item_cmpfunc.h: fixed printability sql/item_create.cc: fixed printability sql/item_func.cc: fixed printability added string length for more speed sql/item_func.h: fixed printability sql/item_strfunc.cc: fixed printability added string length for more speed sql/item_strfunc.h: fixed printability sql/item_subselect.cc: added string length for more speed sql/item_sum.cc: added string length for more speed sql/item_timefunc.cc: added string length for more speed sql/item_timefunc.h: fixed printability sql/item_uniq.h: added string length for more speed sql/key.cc: added string length for more speed sql/sql_lex.cc: added string length for more speed sql/sql_parse.cc: after merge fix sql/sql_repl.cc: string changed with character for more speed sql/sql_select.cc: added string length for more speed sql/sql_show.cc: added string length for more speed
-rw-r--r--mysql-test/r/auto_increment.result5
-rw-r--r--mysql-test/r/bench_count_distinct.result5
-rw-r--r--mysql-test/r/case.result18
-rw-r--r--mysql-test/r/cast.result5
-rw-r--r--mysql-test/r/ctype_collate.result5
-rw-r--r--mysql-test/r/ctype_many.result123
-rw-r--r--mysql-test/r/ctype_utf8.result3
-rw-r--r--mysql-test/r/date_formats.result5
-rw-r--r--mysql-test/r/fulltext.result10
-rw-r--r--mysql-test/r/func_compress.result10
-rw-r--r--mysql-test/r/func_gconcat.result15
-rw-r--r--mysql-test/r/func_group.result15
-rw-r--r--mysql-test/r/func_if.result19
-rw-r--r--mysql-test/r/func_in.result5
-rw-r--r--mysql-test/r/func_math.result5
-rw-r--r--mysql-test/r/func_op.result10
-rw-r--r--mysql-test/r/func_regexp.result5
-rw-r--r--mysql-test/r/func_set.result5
-rw-r--r--mysql-test/r/func_str.result20
-rw-r--r--mysql-test/r/func_system.result5
-rw-r--r--mysql-test/r/func_test.result33
-rw-r--r--mysql-test/r/func_time.result5
-rw-r--r--mysql-test/r/group_by.result4
-rw-r--r--mysql-test/r/having.result5
-rw-r--r--mysql-test/r/insert_update.result10
-rw-r--r--mysql-test/r/null.result15
-rw-r--r--mysql-test/r/olap.result4
-rw-r--r--mysql-test/r/query_cache.result5
-rw-r--r--mysql-test/r/row.result5
-rw-r--r--mysql-test/r/rpl000001.result10
-rw-r--r--mysql-test/r/rpl_get_lock.result11
-rw-r--r--mysql-test/r/rpl_master_pos_wait.result5
-rw-r--r--mysql-test/r/select.result5
-rw-r--r--mysql-test/r/subselect.result14
-rw-r--r--mysql-test/r/type_blob.result8
-rw-r--r--mysql-test/r/varbinary.result4
-rw-r--r--mysql-test/r/variables.result15
-rw-r--r--mysql-test/t/auto_increment.test1
-rw-r--r--mysql-test/t/bench_count_distinct.test1
-rw-r--r--mysql-test/t/case.test6
-rw-r--r--mysql-test/t/cast.test1
-rw-r--r--mysql-test/t/ctype_collate.test1
-rw-r--r--mysql-test/t/ctype_many.test6
-rw-r--r--mysql-test/t/ctype_utf8.test2
-rw-r--r--mysql-test/t/date_formats.test1
-rw-r--r--mysql-test/t/fulltext.test2
-rw-r--r--mysql-test/t/func_compress.test2
-rw-r--r--mysql-test/t/func_gconcat.test3
-rw-r--r--mysql-test/t/func_group.test3
-rw-r--r--mysql-test/t/func_if.test7
-rw-r--r--mysql-test/t/func_in.test1
-rw-r--r--mysql-test/t/func_math.test13
-rw-r--r--mysql-test/t/func_op.test2
-rw-r--r--mysql-test/t/func_regexp.test1
-rw-r--r--mysql-test/t/func_set.test1
-rw-r--r--mysql-test/t/func_str.test7
-rw-r--r--mysql-test/t/func_system.test1
-rw-r--r--mysql-test/t/func_test.test7
-rw-r--r--mysql-test/t/func_time.test3
-rw-r--r--mysql-test/t/group_by.test2
-rw-r--r--mysql-test/t/having.test1
-rw-r--r--mysql-test/t/insert_update.test2
-rw-r--r--mysql-test/t/null.test3
-rw-r--r--mysql-test/t/olap.test2
-rw-r--r--mysql-test/t/query_cache.test1
-rw-r--r--mysql-test/t/row.test1
-rw-r--r--mysql-test/t/rpl000001.test2
-rw-r--r--mysql-test/t/rpl_get_lock.test4
-rw-r--r--mysql-test/t/rpl_master_pos_wait.test1
-rw-r--r--mysql-test/t/select.test1
-rw-r--r--mysql-test/t/type_blob.test4
-rw-r--r--mysql-test/t/varbinary.test2
-rw-r--r--mysql-test/t/variables.test3
-rw-r--r--sql/item.cc61
-rw-r--r--sql/item.h2
-rw-r--r--sql/item_cmpfunc.cc22
-rw-r--r--sql/item_cmpfunc.h3
-rw-r--r--sql/item_create.cc2
-rw-r--r--sql/item_func.cc62
-rw-r--r--sql/item_func.h5
-rw-r--r--sql/item_strfunc.cc50
-rw-r--r--sql/item_strfunc.h11
-rw-r--r--sql/item_subselect.cc44
-rw-r--r--sql/item_sum.cc11
-rw-r--r--sql/item_timefunc.cc33
-rw-r--r--sql/item_timefunc.h2
-rw-r--r--sql/item_uniq.h4
-rw-r--r--sql/key.cc4
-rw-r--r--sql/sql_lex.cc22
-rw-r--r--sql/sql_parse.cc2
-rw-r--r--sql/sql_repl.cc2
-rw-r--r--sql/sql_select.cc44
-rw-r--r--sql/sql_show.cc14
93 files changed, 794 insertions, 158 deletions
diff --git a/mysql-test/r/auto_increment.result b/mysql-test/r/auto_increment.result
index 8c898bae699..113c2930977 100644
--- a/mysql-test/r/auto_increment.result
+++ b/mysql-test/r/auto_increment.result
@@ -112,6 +112,11 @@ insert into t1 set i = null;
select last_insert_id();
last_insert_id()
255
+explain extended select last_insert_id();
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
+Warnings:
+Note 1003 select high_priority no_cache 255 AS `last_insert_id()`
insert into t1 set i = 254;
ERROR 23000: Duplicate entry '254' for key 1
select last_insert_id();
diff --git a/mysql-test/r/bench_count_distinct.result b/mysql-test/r/bench_count_distinct.result
index d414e8e466e..2b4701389db 100644
--- a/mysql-test/r/bench_count_distinct.result
+++ b/mysql-test/r/bench_count_distinct.result
@@ -3,4 +3,9 @@ create table t1(n int not null, key(n)) delay_key_write = 1;
select count(distinct n) from t1;
count(distinct n)
100
+explain extended select count(distinct n) from t1;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 index NULL n 4 NULL 200 Using index
+Warnings:
+Note 1003 select high_priority count(distinct test.t1.n) AS `count(distinct n)` from test.t1
drop table t1;
diff --git a/mysql-test/r/case.result b/mysql-test/r/case.result
index 08f148f94c0..4aab3defa2b 100644
--- a/mysql-test/r/case.result
+++ b/mysql-test/r/case.result
@@ -23,6 +23,11 @@ false
select CASE 1 when 1 then "one" WHEN 2 then "two" ELSE "more" END;
CASE 1 when 1 then "one" WHEN 2 then "two" ELSE "more" END
one
+explain extended select CASE 1 when 1 then "one" WHEN 2 then "two" ELSE "more" END;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
+Warnings:
+Note 1003 select high_priority (case 1 when 1 then _latin1'one' when 2 then _latin1'two' else _latin1'more' end) AS `CASE 1 when 1 then "one" WHEN 2 then "two" ELSE "more" END`
select CASE 2.0 when 1 then "one" WHEN 2.0 then "two" ELSE "more" END;
CASE 2.0 when 1 then "one" WHEN 2.0 then "two" ELSE "more" END
two
@@ -57,6 +62,11 @@ fcase count(*)
0 2
2 1
3 1
+explain extended select case a when 1 then 2 when 2 then 3 else 0 end as fcase, count(*) from t1 group by fcase;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 ALL NULL NULL NULL NULL 4 Using temporary; Using filesort
+Warnings:
+Note 1003 select high_priority (case test.t1.a when 1 then 2 when 2 then 3 else 0 end) AS `fcase`,count(0) AS `count(*)` from test.t1 group by (case test.t1.a when 1 then 2 when 2 then 3 else 0 end)
select case a when 1 then "one" when 2 then "two" else "nothing" end as fcase, count(*) from t1 group by fcase;
fcase count(*)
nothing 2
@@ -122,6 +132,14 @@ CREATE TABLE t1 SELECT
COALESCE(1), COALESCE(1.0),COALESCE('a'),
COALESCE(1,1.0), COALESCE(1,'1'),COALESCE(1.1,'1'),
COALESCE('a' COLLATE latin1_bin,'b');
+explain extended SELECT
+COALESCE(1), COALESCE(1.0),COALESCE('a'),
+COALESCE(1,1.0), COALESCE(1,'1'),COALESCE(1.1,'1'),
+COALESCE('a' COLLATE latin1_bin,'b');
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
+Warnings:
+Note 1003 select high_priority coalesce(1) AS `COALESCE(1)`,coalesce(1.0) AS `COALESCE(1.0)`,coalesce(_latin1'a') AS `COALESCE('a')`,coalesce(1,1.0) AS `COALESCE(1,1.0)`,coalesce(1,_latin1'1') AS `COALESCE(1,'1')`,coalesce(1.1,_latin1'1') AS `COALESCE(1.1,'1')`,coalesce((_latin1'a' collate _latin1'latin1_bin'),_latin1'b') AS `COALESCE('a' COLLATE latin1_bin,'b')`
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
diff --git a/mysql-test/r/cast.result b/mysql-test/r/cast.result
index d604a17d270..974a79580ae 100644
--- a/mysql-test/r/cast.result
+++ b/mysql-test/r/cast.result
@@ -16,6 +16,11 @@ cast(-5 as unsigned) -1 cast(-5 as unsigned) + 1
select ~5, cast(~5 as signed);
~5 cast(~5 as signed)
18446744073709551610 -6
+explain extended select ~5, cast(~5 as signed);
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
+Warnings:
+Note 1003 select high_priority ~(5) AS `~5`,cast(~(5) as signed) AS `cast(~5 as signed)`
select cast(5 as unsigned) -6.0;
cast(5 as unsigned) -6.0
-1.0
diff --git a/mysql-test/r/ctype_collate.result b/mysql-test/r/ctype_collate.result
index b865084b409..6a9da97042b 100644
--- a/mysql-test/r/ctype_collate.result
+++ b/mysql-test/r/ctype_collate.result
@@ -521,6 +521,11 @@ character_set_client latin1
SELECT charset('a'),collation('a'),coercibility('a'),'a'='A';
charset('a') collation('a') coercibility('a') 'a'='A'
latin1 latin1_swedish_ci 3 1
+explain extended SELECT charset('a'),collation('a'),coercibility('a'),'a'='A';
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
+Warnings:
+Note 1003 select high_priority charset(_latin1'a') AS `charset('a')`,collation(_latin1'a') AS `collation('a')`,coercibility(_latin1'a') AS `coercibility('a')`,(_latin1'a' = _latin1'A') AS `'a'='A'`
SET CHARACTER SET koi8r;
SHOW VARIABLES LIKE 'collation_client';
Variable_name Value
diff --git a/mysql-test/r/ctype_many.result b/mysql-test/r/ctype_many.result
index ebc84db7115..c465655473d 100644
--- a/mysql-test/r/ctype_many.result
+++ b/mysql-test/r/ctype_many.result
@@ -340,6 +340,129 @@ CYR CAPIT SOFT SIGN ø ø
CYR CAPIT E ü ü
CYR CAPIT YU à à
CYR CAPIT YA ñ ñ
+select CONVERT(koi8_ru_f, 'cp1251_general_ci', 'utf8_general_ci'), comment from t1;
+CONVERT(koi8_ru_f, 'cp1251_general_ci', 'utf8_general_ci') comment
+a LAT SMALL A
+b LAT SMALL B
+c LAT SMALL C
+d LAT SMALL D
+e LAT SMALL E
+f LAT SMALL F
+g LAT SMALL G
+h LAT SMALL H
+i LAT SMALL I
+j LAT SMALL J
+k LAT SMALL K
+l LAT SMALL L
+m LAT SMALL M
+n LAT SMALL N
+o LAT SMALL O
+p LAT SMALL P
+q LAT SMALL Q
+r LAT SMALL R
+s LAT SMALL S
+t LAT SMALL T
+u LAT SMALL U
+v LAT SMALL V
+w LAT SMALL W
+x LAT SMALL X
+y LAT SMALL Y
+z LAT SMALL Z
+A LAT CAPIT A
+B LAT CAPIT B
+C LAT CAPIT C
+D LAT CAPIT D
+E LAT CAPIT E
+F LAT CAPIT F
+G LAT CAPIT G
+H LAT CAPIT H
+I LAT CAPIT I
+J LAT CAPIT J
+K LAT CAPIT K
+L LAT CAPIT L
+M LAT CAPIT M
+N LAT CAPIT N
+O LAT CAPIT O
+P LAT CAPIT P
+Q LAT CAPIT Q
+R LAT CAPIT R
+S LAT CAPIT S
+T LAT CAPIT T
+U LAT CAPIT U
+V LAT CAPIT V
+W LAT CAPIT W
+X LAT CAPIT X
+Y LAT CAPIT Y
+Z LAT CAPIT Z
+â CYR SMALL A
+÷ CYR SMALL BE
+þ CYR SMALL VE
+ú CYR SMALL GE
+ä CYR SMALL DE
+å CYR SMALL IE
+? CYR SMALL IO
+ã CYR SMALL ZHE
+ÿ CYR SMALL ZE
+ê CYR SMALL I
+ì CYR SMALL KA
+í CYR SMALL EL
+î CYR SMALL EM
+ï CYR SMALL EN
+ð CYR SMALL O
+ò CYR SMALL PE
+ô CYR SMALL ER
+õ CYR SMALL ES
+æ CYR SMALL TE
+è CYR SMALL U
+ö CYR SMALL EF
+é CYR SMALL HA
+ç CYR SMALL TSE
+à CYR SMALL CHE
+ù CYR SMALL SHA
+ü CYR SMALL SCHA
+ñ CYR SMALL HARD SIGN
+ý CYR SMALL YERU
+û CYR SMALL SOFT SIGN
+ø CYR SMALL E
+á CYR SMALL YU
+ó CYR SMALL YA
+Â CYR CAPIT A
+× CYR CAPIT BE
+Þ CYR CAPIT VE
+Ú CYR CAPIT GE
+Ä CYR CAPIT DE
+Å CYR CAPIT IE
+? CYR CAPIT IO
+Ã CYR CAPIT ZHE
+ß CYR CAPIT ZE
+Ê CYR CAPIT I
+Ì CYR CAPIT KA
+Í CYR CAPIT EL
+Î CYR CAPIT EM
+Ï CYR CAPIT EN
+Ð CYR CAPIT O
+Ò CYR CAPIT PE
+Ô CYR CAPIT ER
+Õ CYR CAPIT ES
+Æ CYR CAPIT TE
+È CYR CAPIT U
+Ö CYR CAPIT EF
+É CYR CAPIT HA
+Ç CYR CAPIT TSE
+À CYR CAPIT CHE
+Ù CYR CAPIT SHA
+Ü CYR CAPIT SCHA
+Ñ CYR CAPIT HARD SIGN
+Ý CYR CAPIT YERU
+Û CYR CAPIT SOFT SIGN
+Ø CYR CAPIT E
+Á CYR CAPIT YU
+Ó CYR CAPIT YA
+explain extended select CONVERT(koi8_ru_f, 'cp1251_general_ci', 'utf8_general_ci'), comment from t1;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 ALL NULL NULL NULL NULL 116
+Warnings:
+Note 1003 select high_priority convert(test.t1.koi8_ru_f,_latin1'utf8_general_ci',_latin1'cp1251_general_ci') AS `CONVERT(koi8_ru_f, 'cp1251_general_ci', 'utf8_general_ci')`,test.t1.comment AS `comment` from test.t1
ALTER TABLE t1 ADD bin_f CHAR(32) BYTE NOT NULL;
UPDATE t1 SET bin_f=koi8_ru_f;
SELECT COUNT(DISTINCT bin_f),COUNT(DISTINCT koi8_ru_f),COUNT(DISTINCT utf8_f) FROM t1;
diff --git a/mysql-test/r/ctype_utf8.result b/mysql-test/r/ctype_utf8.result
index 1f07de17b14..1aef43cd570 100644
--- a/mysql-test/r/ctype_utf8.result
+++ b/mysql-test/r/ctype_utf8.result
@@ -47,6 +47,9 @@ locate(_utf8 0xD091, _utf8 0xD0B0D0B1D0B2 collate utf8_bin)
select locate(_utf8 0xD0B1, _utf8 0xD0B0D091D0B2 collate utf8_bin);
locate(_utf8 0xD0B1, _utf8 0xD0B0D091D0B2 collate utf8_bin)
0
+select length(_utf8 0xD0B1), bit_length(_utf8 0xD0B1), char_length(_utf8 0xD0B1);
+length(_utf8 0xD0B1) bit_length(_utf8 0xD0B1) char_length(_utf8 0xD0B1)
+2 16 1
select 'a' like 'a';
'a' like 'a'
1
diff --git a/mysql-test/r/date_formats.result b/mysql-test/r/date_formats.result
index 590a1d6904b..e21e05b4dfe 100644
--- a/mysql-test/r/date_formats.result
+++ b/mysql-test/r/date_formats.result
@@ -155,3 +155,8 @@ a
select get_format(DATETIME, 'eur') as a;
a
%Y-%m-%d-%H.%i.%s
+explain extended select makedate(1997,1), addtime("31.12.97 11.59.59.999999 PM", "1 1.1.1.000002"),subtime("31.12.97 11.59.59.999999 PM", "1 1.1.1.000002"),timediff("01.01.97 11:59:59.000001 PM","31.12.95 11:59:59.000002 PM"),cast(str_to_date("15-01-2001 12:59:59", "%d-%m-%Y %H:%i:%S") as TIME), maketime(23,11,12),microsecond("1997-12-31 23:59:59.000001");
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
+Warnings:
+Note 1003 select high_priority makedate(1997,1) AS `makedate(1997,1)`,addtime(_latin1'31.12.97 11.59.59.999999 PM',_latin1'31.12.97 11.59.59.999999 PM') AS `addtime("31.12.97 11.59.59.999999 PM", "1 1.1.1.000002")`,subtime(_latin1'31.12.97 11.59.59.999999 PM',_latin1'31.12.97 11.59.59.999999 PM') AS `subtime("31.12.97 11.59.59.999999 PM", "1 1.1.1.000002")`,timediff(_latin1'01.01.97 11:59:59.000001 PM',_latin1'31.12.95 11:59:59.000002 PM') AS `timediff("01.01.97 11:59:59.000001 PM","31.12.95 11:59:59.000002 PM")`,cast(str_to_date(_latin1'15-01-2001 12:59:59',_latin1'%d-%m-%Y %H:%i:%S') as time) AS `cast(str_to_date("15-01-2001 12:59:59", "%d-%m-%Y %H:%i:%S") as TIME)`,maketime(23,11,12) AS `maketime(23,11,12)`,microsecond(_latin1'1997-12-31 23:59:59.000001') AS `microsecond("1997-12-31 23:59:59.000001")`
diff --git a/mysql-test/r/fulltext.result b/mysql-test/r/fulltext.result
index e2d35973383..e3993b89b23 100644
--- a/mysql-test/r/fulltext.result
+++ b/mysql-test/r/fulltext.result
@@ -9,6 +9,11 @@ select * from t1 where MATCH(a,b) AGAINST ("collections");
a b
Only MyISAM tables support collections
Full-text indexes are called collections
+explain extended select * from t1 where MATCH(a,b) AGAINST ("collections");
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 fulltext a a 0 1 Using where
+Warnings:
+Note 1003 select high_priority test.t1.a AS `a`,test.t1.b AS `b` from test.t1 where (match test.t1.a,test.t1.b against (_latin1'collections'))
select * from t1 where MATCH(a,b) AGAINST ("indexes");
a b
Full-text indexes are called collections
@@ -56,6 +61,11 @@ id select_type table type possible_keys key key_len ref rows Extra
select * from t1 where MATCH(a,b) AGAINST("support -collections" IN BOOLEAN MODE);
a b
MySQL has now support for full-text search
+explain extended select * from t1 where MATCH(a,b) AGAINST("support -collections" IN BOOLEAN MODE);
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 fulltext a a 0 1 Using where
+Warnings:
+Note 1003 select high_priority test.t1.a AS `a`,test.t1.b AS `b` from test.t1 where (match test.t1.a,test.t1.b against (_latin1'support -collections' in boolean mode))
select * from t1 where MATCH(a,b) AGAINST("support collections" IN BOOLEAN MODE);
a b
MySQL has now support for full-text search
diff --git a/mysql-test/r/func_compress.result b/mysql-test/r/func_compress.result
index 85842f28e64..0e46f7dd16d 100644
--- a/mysql-test/r/func_compress.result
+++ b/mysql-test/r/func_compress.result
@@ -7,9 +7,19 @@ length(@test_compress_string)
select uncompress(compress(@test_compress_string));
uncompress(compress(@test_compress_string))
string for test compress function aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+explain extended select uncompress(compress(@test_compress_string));
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
+Warnings:
+Note 1003 select high_priority no_cache uncompress(compress((@test_compress_string))) AS `uncompress(compress(@test_compress_string))`
select uncompressed_length(compress(@test_compress_string))=length(@test_compress_string);
uncompressed_length(compress(@test_compress_string))=length(@test_compress_string)
1
+explain extended select uncompressed_length(compress(@test_compress_string))=length(@test_compress_string);
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
+Warnings:
+Note 1003 select high_priority no_cache (uncompressed_length(compress((@test_compress_string))) = length((@test_compress_string))) AS `uncompressed_length(compress(@test_compress_string))=length(@test_compress_string)`
select uncompressed_length(compress(@test_compress_string));
uncompressed_length(compress(@test_compress_string))
117
diff --git a/mysql-test/r/func_gconcat.result b/mysql-test/r/func_gconcat.result
index 5eae6b4b871..af6f7956fe3 100644
--- a/mysql-test/r/func_gconcat.result
+++ b/mysql-test/r/func_gconcat.result
@@ -14,6 +14,11 @@ grp group_concat(c)
1 a
2 b,c
3 E,C,D,d,d,D
+explain extended select grp,group_concat(c) from t1 group by grp;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 ALL NULL NULL NULL NULL 9 Using filesort
+Warnings:
+Note 1003 select high_priority test.t1.grp AS `grp`,group_concat(test.t1.c seperator ',') AS `group_concat(c)` from test.t1 group by test.t1.grp
select grp,group_concat(a,c) from t1 group by grp;
grp group_concat(a,c)
1 1a
@@ -79,6 +84,11 @@ grp group_concat(distinct c order by c desc)
1 a
2 c,b
3 E,D,C
+explain extended select grp,group_concat(distinct c order by c desc) from t1 group by grp;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 ALL NULL NULL NULL NULL 9 Using filesort
+Warnings:
+Note 1003 select high_priority test.t1.grp AS `grp`,group_concat(distinct test.t1.c order by test.t1.c seperator ',') AS `group_concat(distinct c order by c desc)` from test.t1 group by test.t1.grp
select grp,group_concat(c order by c separator ",") from t1 group by grp;
grp group_concat(c order by c separator ",")
1 a
@@ -94,6 +104,11 @@ grp group_concat(distinct c order by c separator ",")
1 a
2 b,c
3 C,D,E
+explain extended select grp,group_concat(distinct c order by c separator ",") from t1 group by grp;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 ALL NULL NULL NULL NULL 9 Using filesort
+Warnings:
+Note 1003 select high_priority test.t1.grp AS `grp`,group_concat(distinct test.t1.c order by test.t1.c seperator ',') AS `group_concat(distinct c order by c separator ",")` from test.t1 group by test.t1.grp
select grp,group_concat(distinct c order by c desc separator ",") from t1 group by grp;
grp group_concat(distinct c order by c desc separator ",")
1 a
diff --git a/mysql-test/r/func_group.result b/mysql-test/r/func_group.result
index 8b7581c3cc8..8977652fb6a 100644
--- a/mysql-test/r/func_group.result
+++ b/mysql-test/r/func_group.result
@@ -597,11 +597,16 @@ a count(b) sum(b) avg(b) std(b) min(b) max(b) bit_and(b) bit_or(b)
1 0 NULL NULL NULL NULL NULL 0 0
2 1 1 1.0000 0.0000 1 1 0 1
3 1 1 1.0000 0.0000 1 1 1 1
-select SQL_BIG_RESULT a,count(b), sum(b), avg(b), std(b), min(b), max(b), bit_and(b), bit_or(b) from t1 group by a;
-a count(b) sum(b) avg(b) std(b) min(b) max(b) bit_and(b) bit_or(b)
-1 0 NULL NULL NULL NULL NULL 18446744073709551615 0
-2 1 1 1.0000 0.0000 1 1 1 1
-3 1 1 1.0000 0.0000 1 1 1 1
+select SQL_BIG_RESULT a,count(b), sum(b), avg(b), std(b), min(b), max(b), bit_and(b), bit_or(b), bit_xor(b) from t1 group by a;
+a count(b) sum(b) avg(b) std(b) min(b) max(b) bit_and(b) bit_or(b) bit_xor(b)
+1 0 NULL NULL NULL NULL NULL 18446744073709551615 0 0
+2 1 1 1.0000 0.0000 1 1 1 1 1
+3 1 1 1.0000 0.0000 1 1 1 1 1
+explain extended select SQL_BIG_RESULT a,count(b), sum(b), avg(b), std(b), min(b), max(b), bit_and(b), bit_or(b), bit_xor(b) from t1 group by a;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 ALL NULL NULL NULL NULL 5 Using filesort
+Warnings:
+Note 1003 select high_priority big_result test.t1.a AS `a`,count(test.t1.b) AS `count(b)`,sum(test.t1.b) AS `sum(b)`,avg(test.t1.b) AS `avg(b)`,std(test.t1.b) AS `std(b)`,min(test.t1.b) AS `min(b)`,max(test.t1.b) AS `max(b)`,bit_and(test.t1.b) AS `bit_and(b)`,bit_or(test.t1.b) AS `bit_or(b)`,bit_xor(test.t1.b) AS `bit_xor(b)` from test.t1 group by test.t1.a
drop table t1;
create table t1 (USR_ID integer not null, MAX_REQ integer not null, constraint PK_SEA_USER primary key (USR_ID)) type=InnoDB;
insert into t1 values (1, 3);
diff --git a/mysql-test/r/func_if.result b/mysql-test/r/func_if.result
index 0ab41258091..64070179395 100644
--- a/mysql-test/r/func_if.result
+++ b/mysql-test/r/func_if.result
@@ -39,6 +39,25 @@ a
a
aa
aaa
+explain extended select if(u=1,st,binary st) s from t1 where st like "%a%" order by s;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 ALL NULL NULL NULL NULL 7 Using where; Using filesort
+Warnings:
+Note 1003 select high_priority if((test.t1.u = 1),test.t1.st,(test.t1.st collate _latin1'BINARY')) AS `s` from test.t1 where (test.t1.st like _latin1'%a%') order by if((test.t1.u = 1),test.t1.st,(test.t1.st collate _latin1'BINARY'))
+select nullif(u=0, 'test') from t1;
+nullif(u=0, 'test')
+NULL
+NULL
+NULL
+NULL
+NULL
+1
+1
+explain extended select nullif(u=0, 'test') from t1;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 ALL NULL NULL NULL NULL 7
+Warnings:
+Note 1003 select high_priority nullif((test.t1.u = 0),_latin1'test') AS `nullif(u=0, 'test')` from test.t1
drop table t1;
create table t1 (num double(12,2));
insert into t1 values (144.54);
diff --git a/mysql-test/r/func_in.result b/mysql-test/r/func_in.result
index a197371b345..a13c3f50265 100644
--- a/mysql-test/r/func_in.result
+++ b/mysql-test/r/func_in.result
@@ -142,6 +142,11 @@ a c c
select * from t1 where 'a' in (a,b,c collate latin1_bin);
a b c
a c c
+explain extended select * from t1 where 'a' in (a,b,c collate latin1_bin);
+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 high_priority test.t1.a AS `a`,test.t1.b AS `b`,test.t1.c AS `c` from test.t1 where (_latin1'a' IN (test.t1.a,test.t1.b,(test.t1.c collate _latin1'latin1_bin')))
drop table t1;
select '1.0' in (1,2);
'1.0' in (1,2)
diff --git a/mysql-test/r/func_math.result b/mysql-test/r/func_math.result
index d6596e51db4..cdf21250e6d 100644
--- a/mysql-test/r/func_math.result
+++ b/mysql-test/r/func_math.result
@@ -16,6 +16,11 @@ round(5.64,1) round(5.64,2) round(5.64,-1) round(5.64,-2)
select abs(-10), sign(-5), sign(5), sign(0);
abs(-10) sign(-5) sign(5) sign(0)
10 -1 1 0
+explain extended select abs(-10), sign(-5), sign(5), sign(0);
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
+Warnings:
+Note 1003 select high_priority abs(-(10)) AS `abs(-10)`,sign(-(5)) AS `sign(-5)`,sign(5) AS `sign(5)`,sign(0) AS `sign(0)`
select log(exp(10)),exp(log(sqrt(10))*2),log(-1),log(NULL),log(1,1),log(3,9),log(-1,2),log(NULL,2);
log(exp(10)) exp(log(sqrt(10))*2) log(-1) log(NULL) log(1,1) log(3,9) log(-1,2) log(NULL,2)
10.000000 10.000000 NULL NULL NULL 2.000000 NULL NULL
diff --git a/mysql-test/r/func_op.result b/mysql-test/r/func_op.result
index 9f49b5809df..25a7ac20b66 100644
--- a/mysql-test/r/func_op.result
+++ b/mysql-test/r/func_op.result
@@ -1,9 +1,19 @@
select 1+1,1-1,1+1*2,8/5,8%5,mod(8,5),mod(8,5)|0,-(1+1)*-2;
1+1 1-1 1+1*2 8/5 8%5 mod(8,5) mod(8,5)|0 -(1+1)*-2
2 0 3 1.60 3 3 3 4
+explain extended select 1+1,1-1,1+1*2,8/5,8%5,mod(8,5),mod(8,5)|0,-(1+1)*-2;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
+Warnings:
+Note 1003 select high_priority (1 + 1) AS `1+1`,(1 - 1) AS `1-1`,(1 + (1 * 2)) AS `1+1*2`,(8 / 5) AS `8/5`,(8 % 5) AS `8%5`,(8 % 5) AS `mod(8,5)`,((8 % 5) | 0) AS `mod(8,5)|0`,(-((1 + 1)) * -(2)) AS `-(1+1)*-2`
select 1 | (1+1),5 & 3,bit_count(7) ;
1 | (1+1) 5 & 3 bit_count(7)
3 1 3
+explain extended select 1 | (1+1),5 & 3,bit_count(7) ;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
+Warnings:
+Note 1003 select high_priority (1 | (1 + 1)) AS `1 | (1+1)`,(5 & 3) AS `5 & 3`,bit_count(7) AS `bit_count(7)`
select 1 << 32,1 << 63, 1 << 64, 4 >> 2, 4 >> 63, 1<< 63 >> 60;
1 << 32 1 << 63 1 << 64 4 >> 2 4 >> 63 1<< 63 >> 60
4294967296 9223372036854775808 0 1 0 8
diff --git a/mysql-test/r/func_regexp.result b/mysql-test/r/func_regexp.result
index 35742136ee6..323642cab8c 100644
--- a/mysql-test/r/func_regexp.result
+++ b/mysql-test/r/func_regexp.result
@@ -36,6 +36,11 @@ insert into t1 (xxx) values('this is a test of some long text to see what happen
select * from t1 where xxx regexp('is a test of some long text to');
xxx
this is a test of some long text to see what happens
+explain extended select * from t1 where xxx regexp('is a test of some long text to');
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 system NULL NULL NULL NULL 1
+Warnings:
+Note 1003 select high_priority test.t1.xxx AS `xxx` from test.t1 where (test.t1.xxx regexp _latin1'is a test of some long text to')
select * from t1 where xxx regexp('is a test of some long text to ');
xxx
this is a test of some long text to see what happens
diff --git a/mysql-test/r/func_set.result b/mysql-test/r/func_set.result
index 86608e7c247..2a3631140b0 100644
--- a/mysql-test/r/func_set.result
+++ b/mysql-test/r/func_set.result
@@ -1,6 +1,11 @@
select interval(55,10,20,30,40,50,60,70,80,90,100),interval(3,1,1+1,1+1+1+1),field("IBM","NCA","ICL","SUN","IBM","DIGITAL"),field("A","B","C"),elt(2,"ONE","TWO","THREE"),interval(0,1,2,3,4),elt(1,1,2,3)|0,elt(1,1.1,1.2,1.3)+0;
interval(55,10,20,30,40,50,60,70,80,90,100) interval(3,1,1+1,1+1+1+1) field("IBM","NCA","ICL","SUN","IBM","DIGITAL") field("A","B","C") elt(2,"ONE","TWO","THREE") interval(0,1,2,3,4) elt(1,1,2,3)|0 elt(1,1.1,1.2,1.3)+0
5 2 4 0 TWO 0 1 1.1
+explain extended select INTERVAL(55,10,20,30,40,50,60,70,80,90,100),interval(3,1,1+1,1+1+1+1),field("IBM","NCA","ICL","SUN","IBM","DIGITAL"),field("A","B","C"),elt(2,"ONE","TWO","THREE"),interval(0,1,2,3,4),elt(1,1,2,3)|0,elt(1,1.1,1.2,1.3)+0;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
+Warnings:
+Note 1003 select high_priority interval((55,10,20,30,40,50,60,70,80,90,100)) AS `INTERVAL(55,10,20,30,40,50,60,70,80,90,100)`,interval((3,1,(1 + 1),(((1 + 1) + 1) + 1))) AS `interval(3,1,1+1,1+1+1+1)`,field(_latin1'IBM',_latin1'NCA',_latin1'ICL',_latin1'SUN',_latin1'IBM',_latin1'DIGITAL') AS `field("IBM","NCA","ICL","SUN","IBM","DIGITAL")`,field(_latin1'A',_latin1'B',_latin1'C') AS `field("A","B","C")`,elt(2,_latin1'ONE',_latin1'TWO',_latin1'THREE') AS `elt(2,"ONE","TWO","THREE")`,interval((0,1,2,3,4)) AS `interval(0,1,2,3,4)`,(elt(1,1,2,3) | 0) AS `elt(1,1,2,3)|0`,(elt(1,1.1,1.2,1.3) + 0) AS `elt(1,1.1,1.2,1.3)+0`
select find_in_set("b","a,b,c"),find_in_set("c","a,b,c"),find_in_set("dd","a,bbb,dd"),find_in_set("bbb","a,bbb,dd");
find_in_set("b","a,b,c") find_in_set("c","a,b,c") find_in_set("dd","a,bbb,dd") find_in_set("bbb","a,bbb,dd")
2 3 3 2
diff --git a/mysql-test/r/func_str.result b/mysql-test/r/func_str.result
index ac25277351c..1a4e2fa498b 100644
--- a/mysql-test/r/func_str.result
+++ b/mysql-test/r/func_str.result
@@ -12,9 +12,15 @@ length('\n\t\r\b\0\_\%\\')
select bit_length('\n\t\r\b\0\_\%\\');
bit_length('\n\t\r\b\0\_\%\\')
80
-select concat('monty',' was here ','again'),length('hello'),char(ascii('h'));
-concat('monty',' was here ','again') length('hello') char(ascii('h'))
-monty was here again 5 h
+select char_length('\n\t\r\b\0\_\%\\');
+char_length('\n\t\r\b\0\_\%\\')
+10
+select length(_latin1'\n\t\n\b\0\\_\\%\\');
+length(_latin1'\n\t\n\b\0\\_\\%\\')
+10
+select concat('monty',' was here ','again'),length('hello'),char(ascii('h')),ord('h');
+concat('monty',' was here ','again') length('hello') char(ascii('h')) ord('h')
+monty was here again 5 h 104
select locate('he','hello'),locate('he','hello',2),locate('lo','hello',2) ;
locate('he','hello') locate('he','hello',2) locate('lo','hello',2)
1 0 4
@@ -99,6 +105,9 @@ NULL
select md5('hello');
md5('hello')
5d41402abc4b2a76b9719d911017c592
+select crc32("123");
+crc32("123")
+2286445522
select sha('abc');
sha('abc')
a9993e364706816aba3e25717850c26c9cd0d89d
@@ -579,3 +588,8 @@ CONCAT("</a>",RPAD("",(55 - LENGTH(title)),"."))
NULL
</a>..........................
DROP TABLE t1;
+explain extended select md5('hello'), sha('abc'), sha1('abc'), soundex(''), 'mood' sounds like 'mud', aes_decrypt(aes_encrypt('abc','1'),'1'),concat('*',space(5),'*'), reverse('abc'), rpad('a',4,'1'), lpad('a',4,'1'), concat_ws(',','',NULL,'a'),make_set(255,_latin2'a',_latin2'b',_latin2'c'),elt(2,1),locate("a","b",2),format(130,10),char(0),conv(130,16,10),hex(130),binary 'HE', export_set(255,_latin2'y',_latin2'n',_latin2' '),FIELD('b' COLLATE latin1_bin,'A','B'),FIND_IN_SET(_latin1'B',_latin1'a,b,c,d'),collation(conv(130,16,10)), coercibility(conv(130,16,10)),length('\n\t\r\b\0\_\%\\'),bit_length('\n\t\r\b\0\_\%\\'),bit_length('\n\t\r\b\0\_\%\\'),concat('monty',' was here ','again'),length('hello'),char(ascii('h')),ord('h'),quote(1/0),crc32("123");
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
+Warnings:
+Note 1003 select high_priority md5(_latin1'hello') AS `md5('hello')`,sha(_latin1'abc') AS `sha('abc')`,sha(_latin1'abc') AS `sha1('abc')`,soundex(_latin1'') AS `soundex('')`,(soundex(_latin1'mood') = soundex(_latin1'mud')) AS `'mood' sounds like 'mud'`,aes_decrypt(aes_encrypt(_latin1'abc',_latin1'1'),_latin1'1') AS `aes_decrypt(aes_encrypt('abc','1'),'1')`,concat(_latin1'*',repeat(_latin1' ',5),_latin1'*') AS `concat('*',space(5),'*')`,reverse(_latin1'abc') AS `reverse('abc')`,rpad(_latin1'a',4,_latin1'1') AS `rpad('a',4,'1')`,lpad(_latin1'a',4,_latin1'1') AS `lpad('a',4,'1')`,concat_ws(_latin1',',_latin1'',NULL,_latin1'a') AS `concat_ws(',','',NULL,'a')`,make_set(255,_latin2'a',_latin2'b',_latin2'c') AS `make_set(255,_latin2'a',_latin2'b',_latin2'c')`,elt(2,1) AS `elt(2,1)`,locate(_latin1'a',_latin1'b',2) AS `locate("a","b",2)`,format(130,10) AS `format(130,10)`,char(0) AS `char(0)`,conv(130,16,10) AS `conv(130,16,10)`,hex(130) AS `hex(130)`,(_latin1'HE' collate _latin1'BINARY') AS `binary 'HE'`,export_set(255,_latin2'y',_latin2'n',_latin2' ') AS `export_set(255,_latin2'y',_latin2'n',_latin2' ')`,field((_latin1'b' collate _latin1'latin1_bin'),_latin1'A',_latin1'B') AS `FIELD('b' COLLATE latin1_bin,'A','B')`,find_in_set(_latin1'B',_latin1'a,b,c,d') AS `FIND_IN_SET(_latin1'B',_latin1'a,b,c,d')`,collation(conv(130,16,10)) AS `collation(conv(130,16,10))`,coercibility(conv(130,16,10)) AS `coercibility(conv(130,16,10))`,length(_latin1'\n\t\r\b\0\\_\\%\\') AS `length('\n\t\r\b\0\_\%\\')`,bit_length(_latin1'\n\t\r\b\0\\_\\%\\') AS `bit_length('\n\t\r\b\0\_\%\\')`,bit_length(_latin1'\n\t\r\b\0\\_\\%\\') AS `bit_length('\n\t\r\b\0\_\%\\')`,concat(_latin1'monty',_latin1' was here ',_latin1'again') AS `concat('monty',' was here ','again')`,length(_latin1'hello') AS `length('hello')`,char(ascii(_latin1'h')) AS `char(ascii('h'))`,ord(_latin1'h') AS `ord('h')`,quote((1 / 0)) AS `quote(1/0)`,crc32(_latin1'123') AS `crc32("123")`
diff --git a/mysql-test/r/func_system.result b/mysql-test/r/func_system.result
index a52d5613c04..9d370b43099 100644
--- a/mysql-test/r/func_system.result
+++ b/mysql-test/r/func_system.result
@@ -37,6 +37,11 @@ version()>=_latin1"3.23.29"
select charset(version());
charset(version())
utf8
+explain extended select database(), user();
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
+Warnings:
+Note 1003 select high_priority no_cache database() AS `database()`,user() AS `user()`
create table t1 (version char(40)) select database(), user(), version() as 'version';
show create table t1;
Table Create Table
diff --git a/mysql-test/r/func_test.result b/mysql-test/r/func_test.result
index 851c308ba3e..4951d954abb 100644
--- a/mysql-test/r/func_test.result
+++ b/mysql-test/r/func_test.result
@@ -44,19 +44,47 @@ select -1.49 or -1.49,0.6 or 0.6;
select 3 ^ 11, 1 ^ 1, 1 ^ 0, 1 ^ NULL, NULL ^ 1;
3 ^ 11 1 ^ 1 1 ^ 0 1 ^ NULL NULL ^ 1
8 0 1 NULL NULL
+explain extended select 3 ^ 11, 1 ^ 1, 1 ^ 0, 1 ^ NULL, NULL ^ 1;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
+Warnings:
+Note 1003 select high_priority (3 ^ 11) AS `3 ^ 11`,(1 ^ 1) AS `1 ^ 1`,(1 ^ 0) AS `1 ^ 0`,(1 ^ NULL) AS `1 ^ NULL`,(NULL ^ 1) AS `NULL ^ 1`
select 1 XOR 1, 1 XOR 0, 0 XOR 1, 0 XOR 0, NULL XOR 1, 1 XOR NULL, 0 XOR NULL;
1 XOR 1 1 XOR 0 0 XOR 1 0 XOR 0 NULL XOR 1 1 XOR NULL 0 XOR NULL
0 1 1 0 NULL NULL NULL
select 10 % 7, 10 mod 7, 10 div 3;
10 % 7 10 mod 7 10 div 3
3 3 3
+explain extended select 10 % 7, 10 mod 7, 10 div 3;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
+Warnings:
+Note 1003 select high_priority (10 % 7) AS `10 % 7`,(10 % 7) AS `10 mod 7`,(10 DIV 3) AS `10 div 3`
select (1 << 64)-1, ((1 << 64)-1) DIV 1, ((1 << 64)-1) DIV 2;
(1 << 64)-1 ((1 << 64)-1) DIV 1 ((1 << 64)-1) DIV 2
18446744073709551615 18446744073709551615 9223372036854775807
+explain extended select (1 << 64)-1, ((1 << 64)-1) DIV 1, ((1 << 64)-1) DIV 2;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
+Warnings:
+Note 1003 select high_priority ((1 << 64) - 1) AS `(1 << 64)-1`,(((1 << 64) - 1) DIV 1) AS `((1 << 64)-1) DIV 1`,(((1 << 64) - 1) DIV 2) AS `((1 << 64)-1) DIV 2`
create table t1 (a int);
insert t1 values (1);
select * from t1 where 1 xor 1;
a
+explain extended select * from t1 where 1 xor 1;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables
+Warnings:
+Note 1003 select high_priority test.t1.a AS `a` from test.t1 where (1 xor 1)
+select - a from t1;
+- a
+-1
+explain extended select - a from t1;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 system NULL NULL NULL NULL 1
+Warnings:
+Note 1003 select high_priority -(test.t1.a) AS `- a` from test.t1
drop table t1;
select 5 between 0 and 10 between 0 and 1,(5 between 0 and 10) between 0 and 1;
5 between 0 and 10 between 0 and 1 (5 between 0 and 10) between 0 and 1
@@ -73,6 +101,11 @@ _koi8r'a' = _koi8r'A'
select _koi8r'a' = _koi8r'A' COLLATE koi8r_general_ci;
_koi8r'a' = _koi8r'A' COLLATE koi8r_general_ci
1
+explain extended select _koi8r'a' = _koi8r'A' COLLATE koi8r_general_ci;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
+Warnings:
+Note 1003 select high_priority (_koi8r'a' = (_koi8r'A' collate _latin1'koi8r_general_ci')) AS `_koi8r'a' = _koi8r'A' COLLATE koi8r_general_ci`
select _koi8r'a' = _koi8r'A' COLLATE koi8r_bin;
_koi8r'a' = _koi8r'A' COLLATE koi8r_bin
0
diff --git a/mysql-test/r/func_time.result b/mysql-test/r/func_time.result
index b8709487c6d..9d38083f48a 100644
--- a/mysql-test/r/func_time.result
+++ b/mysql-test/r/func_time.result
@@ -486,3 +486,8 @@ strcmp(date_format(utc_timestamp(),"%Y-%m-%d"), utc_date())=0
select strcmp(concat(utc_date(),' ',utc_time()),utc_timestamp())=0;
strcmp(concat(utc_date(),' ',utc_time()),utc_timestamp())=0
1
+explain extended select period_add("9602",-12),period_diff(199505,"9404"),from_days(to_days("960101")),dayofmonth("1997-01-02"), month("1997-01-02"), monthname("1972-03-04"),dayofyear("0000-00-00"),HOUR("1997-03-03 23:03:22"),MINUTE("23:03:22"),SECOND(230322),QUARTER(980303),WEEK("1998-03-03"),yearweek("2000-01-01",1),week(19950101,1),year("98-02-03"),weekday(curdate())-weekday(now()),dayname("1962-03-03"),unix_timestamp(),sec_to_time(time_to_sec("0:30:47")/6.21),curtime(),utc_time(),curdate(),utc_date(),utc_timestamp(),date_format("1997-01-02 03:04:05", "%M %W %D %Y %y %m %d %h %i %s %w"),from_unixtime(unix_timestamp("1994-03-02 10:11:12")),"1997-12-31 23:59:59" + INTERVAL 1 SECOND,"1998-01-01 00:00:00" - INTERVAL 1 SECOND,INTERVAL 1 DAY + "1997-12-31", extract(YEAR FROM "1999-01-02 10:11:12"),date_add("1997-12-31 23:59:59",INTERVAL 1 SECOND);
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
+Warnings:
+Note 1003 select high_priority no_cache period_add(_latin1'9602',-(12)) AS `period_add("9602",-12)`,period_diff(199505,_latin1'9404') AS `period_diff(199505,"9404")`,from_days(to_days(_latin1'960101')) AS `from_days(to_days("960101"))`,dayofmonth(_latin1'1997-01-02') AS `dayofmonth("1997-01-02")`,month(_latin1'1997-01-02') AS `month("1997-01-02")`,monthname(_latin1'1972-03-04') AS `monthname("1972-03-04")`,dayofyear(_latin1'0000-00-00') AS `dayofyear("0000-00-00")`,hour(_latin1'1997-03-03 23:03:22') AS `HOUR("1997-03-03 23:03:22")`,minute(_latin1'23:03:22') AS `MINUTE("23:03:22")`,second(230322) AS `SECOND(230322)`,quarter(980303) AS `QUARTER(980303)`,week(_latin1'1998-03-03',0) AS `WEEK("1998-03-03")`,yearweek(_latin1'2000-01-01',1) AS `yearweek("2000-01-01",1)`,week(19950101,1) AS `week(19950101,1)`,year(_latin1'98-02-03') AS `year("98-02-03")`,(weekday(to_days(curdate())) - weekday(to_days(now()))) AS `weekday(curdate())-weekday(now())`,dayname(to_days(_latin1'1962-03-03')) AS `dayname("1962-03-03")`,unix_timestamp() AS `unix_timestamp()`,sec_to_time((time_to_sec(_latin1'0:30:47') / 6.21)) AS `sec_to_time(time_to_sec("0:30:47")/6.21)`,curtime() AS `curtime()`,utc_time() AS `utc_time()`,curdate() AS `curdate()`,utc_date() AS `utc_date()`,utc_timestamp() AS `utc_timestamp()`,date_format(_latin1'1997-01-02 03:04:05',_latin1'%M %W %D %Y %y %m %d %h %i %s %w') AS `date_format("1997-01-02 03:04:05", "%M %W %D %Y %y %m %d %h %i %s %w")`,from_unixtime(unix_timestamp(_latin1'1994-03-02 10:11:12')) AS `from_unixtime(unix_timestamp("1994-03-02 10:11:12"))`,(_latin1'1997-12-31 23:59:59' + interval 1 second) AS `"1997-12-31 23:59:59" + INTERVAL 1 SECOND`,(_latin1'1998-01-01 00:00:00' - interval 1 second) AS `"1998-01-01 00:00:00" - INTERVAL 1 SECOND`,(_latin1'1997-12-31' + interval 1 day) AS `INTERVAL 1 DAY + "1997-12-31"`,extract(year from _latin1'1999-01-02 10:11:12') AS `extract(YEAR FROM "1999-01-02 10:11:12")`,(_latin1'1997-12-31 23:59:59' + interval 1 second) AS `date_add("1997-12-31 23:59:59",INTERVAL 1 SECOND)`
diff --git a/mysql-test/r/group_by.result b/mysql-test/r/group_by.result
index c286b4d8fc4..b9eaa81ba2a 100644
--- a/mysql-test/r/group_by.result
+++ b/mysql-test/r/group_by.result
@@ -284,9 +284,11 @@ select spid,count(*) from t1 where spid between 1 and 2 group by spid desc;
spid count(*)
2 2
1 1
-explain select sql_big_result spid,sum(userid) from t1 group by spid desc;
+explain extended select sql_big_result spid,sum(userid) from t1 group by spid desc;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 ALL NULL NULL NULL NULL 8 Using filesort
+Warnings:
+Note 1003 select high_priority big_result test.t1.spID AS `spid`,sum(test.t1.userID) AS `sum(userid)` from test.t1 group by test.t1.spID desc
explain select sql_big_result spid,sum(userid) from t1 group by spid desc order by null;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 ALL NULL NULL NULL NULL 8
diff --git a/mysql-test/r/having.result b/mysql-test/r/having.result
index fc0b3c652ef..7c88776579b 100644
--- a/mysql-test/r/having.result
+++ b/mysql-test/r/having.result
@@ -8,6 +8,11 @@ b
select count(a) as b from t1 where a=0 having b >=0;
b
0
+explain extended select count(a) as b from t1 where a=0 having b >=0;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables
+Warnings:
+Note 1003 select high_priority count(test.t1.a) AS `b` from test.t1 where (test.t1.a = 0) having (count(test.t1.a) >= 0)
drop table t1;
CREATE TABLE t1 (
raw_id int(10) NOT NULL default '0',
diff --git a/mysql-test/r/insert_update.result b/mysql-test/r/insert_update.result
index 4ef25781331..3a7679ce1e3 100644
--- a/mysql-test/r/insert_update.result
+++ b/mysql-test/r/insert_update.result
@@ -56,4 +56,14 @@ a b c VALUES(a)
5 0 30 NULL
8 9 60 NULL
2 1 11 NULL
+explain extended SELECT *, VALUES(a) FROM t1;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 ALL NULL NULL NULL NULL 5
+Warnings:
+Note 1003 select high_priority test.t1.a AS `a`,test.t1.b AS `b`,test.t1.c AS `c`,values(test.t1.a) AS `VALUES(a)` from test.t1
+explain extended select * from t1 where values(a);
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Impossible WHERE
+Warnings:
+Note 1003 select high_priority test.t1.a AS `a`,test.t1.b AS `b`,test.t1.c AS `c` from test.t1
DROP TABLE t1;
diff --git a/mysql-test/r/null.result b/mysql-test/r/null.result
index 2ef1f0c86f9..9de9fdce2db 100644
--- a/mysql-test/r/null.result
+++ b/mysql-test/r/null.result
@@ -2,6 +2,11 @@ drop table if exists t1;
select null,\N,isnull(null),isnull(1/0),isnull(1/0 = null),ifnull(null,1),ifnull(null,"TRUE"),ifnull("TRUE","ERROR"),1/0 is null,1 is not null;
NULL NULL isnull(null) isnull(1/0) isnull(1/0 = null) ifnull(null,1) ifnull(null,"TRUE") ifnull("TRUE","ERROR") 1/0 is null 1 is not null
NULL NULL 1 1 1 1 TRUE TRUE 1 1
+explain extended select null,\N,isnull(null),isnull(1/0),isnull(1/0 = null),ifnull(null,1),ifnull(null,"TRUE"),ifnull("TRUE","ERROR"),1/0 is null,1 is not null;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
+Warnings:
+Note 1003 select high_priority NULL AS `NULL`,NULL AS `NULL`,isnull(NULL) AS `isnull(null)`,isnull((1 / 0)) AS `isnull(1/0)`,isnull(((1 / 0) = NULL)) AS `isnull(1/0 = null)`,ifnull(NULL,1) AS `ifnull(null,1)`,ifnull(NULL,_latin1'TRUE') AS `ifnull(null,"TRUE")`,ifnull(_latin1'TRUE',_latin1'ERROR') AS `ifnull("TRUE","ERROR")`,isnull((1 / 0)) AS `1/0 is null`,(1 is not null) AS `1 is not null`
select 1 | NULL,1 & NULL,1+NULL,1-NULL;
1 | NULL 1 & NULL 1+NULL 1-NULL
NULL NULL NULL NULL
@@ -23,6 +28,11 @@ field(NULL,"a","b","c")
select 2 between null and 1,2 between 3 AND NULL,NULL between 1 and 2,2 between NULL and 3, 2 between 1 AND null;
2 between null and 1 2 between 3 AND NULL NULL between 1 and 2 2 between NULL and 3 2 between 1 AND null
0 0 NULL NULL NULL
+explain extended select 2 between null and 1,2 between 3 AND NULL,NULL between 1 and 2,2 between NULL and 3, 2 between 1 AND null;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
+Warnings:
+Note 1003 select high_priority (2 between NULL and 1) AS `2 between null and 1`,(2 between 3 and NULL) AS `2 between 3 AND NULL`,(NULL between 1 and 2) AS `NULL between 1 and 2`,(2 between NULL and 3) AS `2 between NULL and 3`,(2 between 1 and NULL) AS `2 between 1 AND null`
SELECT NULL AND NULL, 1 AND NULL, NULL AND 1, NULL OR NULL, 0 OR NULL, NULL OR 0;
NULL AND NULL 1 AND NULL NULL AND 1 NULL OR NULL 0 OR NULL NULL OR 0
NULL NULL NULL NULL NULL NULL
@@ -35,6 +45,11 @@ NULL AND 0 0 and NULL
select inet_ntoa(null),inet_aton(null),inet_aton("122.256"),inet_aton("122.226."),inet_aton("");
inet_ntoa(null) inet_aton(null) inet_aton("122.256") inet_aton("122.226.") inet_aton("")
NULL NULL NULL NULL NULL
+explain extended select inet_ntoa(null),inet_aton(null),inet_aton("122.256"),inet_aton("122.226."),inet_aton("");
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
+Warnings:
+Note 1003 select high_priority inet_ntoa(NULL) AS `inet_ntoa(null)`,inet_aton(NULL) AS `inet_aton(null)`,inet_aton(_latin1'122.256') AS `inet_aton("122.256")`,inet_aton(_latin1'122.226.') AS `inet_aton("122.226.")`,inet_aton(_latin1'') AS `inet_aton("")`
create table t1 (x int);
insert into t1 values (null);
select * from t1 where x != 0;
diff --git a/mysql-test/r/olap.result b/mysql-test/r/olap.result
index 84e37bf56a9..37e68d8b13e 100644
--- a/mysql-test/r/olap.result
+++ b/mysql-test/r/olap.result
@@ -81,9 +81,11 @@ TV 2 2000 200
TV 2 NULL 200
TV NULL NULL 600
NULL NULL NULL 7785
-explain select product, country_id , year, sum(profit) from t1 group by product, country_id, year with rollup;
+explain extended select product, country_id , year, sum(profit) from t1 group by product, country_id, year with rollup;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 ALL NULL NULL NULL NULL 15 Using temporary; Using filesort
+Warnings:
+Note 1003 select high_priority test.t1.product AS `product`,test.t1.country_id AS `country_id`,test.t1.year AS `year`,sum(test.t1.profit) AS `sum(profit)` from test.t1 group by test.t1.product,test.t1.country_id,test.t1.year with rollup
select product, country_id , sum(profit) from t1 group by product desc, country_id with rollup;
product country_id sum(profit)
TV 1 400
diff --git a/mysql-test/r/query_cache.result b/mysql-test/r/query_cache.result
index 1a1eec1f915..b446d30c83f 100644
--- a/mysql-test/r/query_cache.result
+++ b/mysql-test/r/query_cache.result
@@ -300,6 +300,11 @@ select USER() from t1;
USER()
select benchmark(1,1) from t1;
benchmark(1,1)
+explain extended select benchmark(1,1) from t1;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 system NULL NULL NULL NULL 0 const row not found
+Warnings:
+Note 1003 select high_priority no_cache benchmark(1,1) AS `benchmark(1,1)` from test.t1
show status like "Qcache_queries_in_cache";
Variable_name Value
Qcache_queries_in_cache 0
diff --git a/mysql-test/r/row.result b/mysql-test/r/row.result
index ab60f714d82..37d4f1d9b26 100644
--- a/mysql-test/r/row.result
+++ b/mysql-test/r/row.result
@@ -40,6 +40,11 @@ ERROR 21000: Operand should contain 2 column(s)
select row(1,2,row(3,4)) IN (row(3,2,row(3,4)), row(1,2,row(3,NULL)));
row(1,2,row(3,4)) IN (row(3,2,row(3,4)), row(1,2,row(3,NULL)))
NULL
+explain extended select row(1,2,row(3,4)) IN (row(3,2,row(3,4)), row(1,2,row(3,NULL)));
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
+Warnings:
+Note 1003 select high_priority ((1,2,(3,4)) in ((3,2,(3,4)),(1,2,(3,NULL)))) AS `row(1,2,row(3,4)) IN (row(3,2,row(3,4)), row(1,2,row(3,NULL)))`
SELECT (1,2,3)=(0,NULL,3);
(1,2,3)=(0,NULL,3)
0
diff --git a/mysql-test/r/rpl000001.result b/mysql-test/r/rpl000001.result
index 79438f8fa40..b8071b16c2e 100644
--- a/mysql-test/r/rpl000001.result
+++ b/mysql-test/r/rpl000001.result
@@ -40,10 +40,20 @@ create table t1(n int);
select get_lock("hold_slave",10);
get_lock("hold_slave",10)
1
+explain extended select get_lock("hold_slave",10);
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
+Warnings:
+Note 1003 select high_priority no_cache get_lock(_latin1'hold_slave',10) AS `get_lock("hold_slave",10)`
start slave;
select release_lock("hold_slave");
release_lock("hold_slave")
1
+explain extended select release_lock("hold_slave");
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
+Warnings:
+Note 1003 select high_priority no_cache release_lock(_latin1'hold_slave') AS `release_lock("hold_slave")`
unlock tables;
create table t2(id int);
insert into t2 values(connection_id());
diff --git a/mysql-test/r/rpl_get_lock.result b/mysql-test/r/rpl_get_lock.result
index 369fde7ef8f..8e3e335b2d0 100644
--- a/mysql-test/r/rpl_get_lock.result
+++ b/mysql-test/r/rpl_get_lock.result
@@ -18,9 +18,14 @@ get_lock("lock",3)
select * from t1;
n
1
-select is_free_lock("lock");
-is_free_lock("lock")
-0
+select is_free_lock("lock"), is_used_lock("lock");
+is_free_lock("lock") is_used_lock("lock")
+0 6
+explain extended select is_free_lock("lock"), is_used_lock("lock");
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
+Warnings:
+Note 1003 select high_priority no_cache is_free_lock(_latin1'lock') AS `is_free_lock("lock")`,is_used_lock(_latin1'lock') AS `is_used_lock("lock")`
select is_free_lock("lock2");
is_free_lock("lock2")
1
diff --git a/mysql-test/r/rpl_master_pos_wait.result b/mysql-test/r/rpl_master_pos_wait.result
index bbd125a98d6..ea917805560 100644
--- a/mysql-test/r/rpl_master_pos_wait.result
+++ b/mysql-test/r/rpl_master_pos_wait.result
@@ -7,6 +7,11 @@ start slave;
select master_pos_wait('master-bin.999999',0,2);
master_pos_wait('master-bin.999999',0,2)
-1
+explain extended select master_pos_wait('master-bin.999999',0,2);
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
+Warnings:
+Note 1003 select high_priority no_cache master_pos_wait(_latin1'master-bin.999999',0,2) AS `master_pos_wait('master-bin.999999',0,2)`
select master_pos_wait('master-bin.999999',0);
stop slave sql_thread;
master_pos_wait('master-bin.999999',0)
diff --git a/mysql-test/r/select.result b/mysql-test/r/select.result
index fca4a0549d3..b9218942a5e 100644
--- a/mysql-test/r/select.result
+++ b/mysql-test/r/select.result
@@ -1466,6 +1466,11 @@ companynr count(*)
select count(*),min(fld4),max(fld4),sum(fld1),avg(fld1),std(fld1),variance(fld1) from t2 where companynr = 34 and fld4<>"";
count(*) min(fld4) max(fld4) sum(fld1) avg(fld1) std(fld1) variance(fld1)
70 absentee vest 17788966 254128.0857 3272.5940 10709871.3069
+explain extended select count(*),min(fld4),max(fld4),sum(fld1),avg(fld1),std(fld1),variance(fld1) from t2 where companynr = 34 and fld4<>"";
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t2 ALL NULL NULL NULL NULL 1199 Using where
+Warnings:
+Note 1003 select high_priority count(0) AS `count(*)`,min(test.t2.fld4) AS `min(fld4)`,max(test.t2.fld4) AS `max(fld4)`,sum(test.t2.fld1) AS `sum(fld1)`,avg(test.t2.fld1) AS `avg(fld1)`,std(test.t2.fld1) AS `std(fld1)`,variance(test.t2.fld1) AS `variance(fld1)` from test.t2 where ((test.t2.companynr = 34) and (test.t2.fld4 <> _latin1''))
select companynr,count(*),min(fld4),max(fld4),sum(fld1),avg(fld1),std(fld1),variance(fld1) from t2 group by companynr limit 3;
companynr count(*) min(fld4) max(fld4) sum(fld1) avg(fld1) std(fld1) variance(fld1)
00 82 Anthony windmills 10355753 126289.6707 115550.9757 13352027981.7087
diff --git a/mysql-test/r/subselect.result b/mysql-test/r/subselect.result
index 96defcfa79b..048464e6b84 100644
--- a/mysql-test/r/subselect.result
+++ b/mysql-test/r/subselect.result
@@ -199,7 +199,7 @@ id select_type table type possible_keys key key_len ref rows Extra
3 DERIVED t2 ALL NULL NULL NULL NULL 2 Using where
2 SUBQUERY t3 ALL NULL NULL NULL NULL 3 Using where; Using filesort
Warnings:
-Note 1003 select high_priority (select test.t3.a AS `a` from test.t3 where (test.t3.a < 8) order by test.t3.a desc limit 1) AS `(select t3.a from t3 where a<8 order by 1 desc limit 1)`,t2.a AS `a` from (select test.t2.a AS `a`,test.t2.b AS `b` from test.t2 where (test.t2.a > 1)) tt
+Note 1003 select high_priority (select test.t3.a AS `a` from test.t3 where (test.t3.a < 8) order by test.t3.a desc limit 1) AS `(select t3.a from t3 where a<8 order by 1 desc limit 1)`,tt.a AS `a` from (select test.t2.a AS `a`,test.t2.b AS `b` from test.t2 where (test.t2.a > 1)) tt
select * from t1 where t1.a=(select t2.a from t2 where t2.b=(select max(a) from t3) order by 1 desc limit 1);
a
2
@@ -1013,7 +1013,7 @@ id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t1 system NULL NULL NULL NULL 0 const row not found
2 UNCACHEABLE SUBQUERY t1 system NULL NULL NULL NULL 0 const row not found
Warnings:
-Note 1003 select high_priority no_cache (select no_cache benchmark(1) AS `BENCHMARK(1,1)` from test.t1) AS `(SELECT BENCHMARK(1,1) FROM t1)` from test.t1
+Note 1003 select high_priority no_cache (select no_cache benchmark(1,1) AS `BENCHMARK(1,1)` from test.t1) AS `(SELECT BENCHMARK(1,1) FROM t1)` from test.t1
drop table t1;
CREATE TABLE `t1` (
`mot` varchar(30) character set latin1 NOT NULL default '',
@@ -1486,16 +1486,20 @@ explain extended select s1, s1 NOT IN (SELECT s1 FROM t2) from t1;
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t1 index NULL s1 6 NULL 3 Using index
2 DEPENDENT SUBQUERY t2 index_subquery s1 s1 6 func 2 Using index
-explain select s1, s1 = ANY (SELECT s1 FROM t2) from t1;
+Warnings:
+Note 1003 select high_priority test.t1.s1 AS `s1`,not(<in_optimizer>(test.t1.s1,<exists>(<index_lookup>(<cache>(test.t1.s1) in t2 on s1 chicking NULL)))) AS `s1 NOT IN (SELECT s1 FROM t2)` from test.t1
+explain extended select s1, s1 = ANY (SELECT s1 FROM t2) from t1;
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t1 index NULL s1 6 NULL 3 Using index
2 DEPENDENT SUBQUERY t2 index_subquery s1 s1 6 func 2 Using index
-explain select s1, s1 <> ALL (SELECT s1 FROM t2) from t1;
+Warnings:
+Note 1003 select high_priority test.t1.s1 AS `s1`,<in_optimizer>(test.t1.s1,<exists>(<index_lookup>(<cache>(test.t1.s1) in t2 on s1 chicking NULL))) AS `s1 = ANY (SELECT s1 FROM t2)` from test.t1
+explain extended select s1, s1 <> ALL (SELECT s1 FROM t2) from t1;
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t1 index NULL s1 6 NULL 3 Using index
2 DEPENDENT SUBQUERY t2 index_subquery s1 s1 6 func 2 Using index
Warnings:
-Note 1003 select high_priority test.t1.s1 AS `s1`,not(<in_optimizer>(test.t1.s1,<exists>(<index_lookup>(<cache>(test.t1.s1) in t2 on s1 chicking NULL)))) AS `s1 NOT IN (SELECT s1 FROM t2)` from test.t1
+Note 1003 select high_priority test.t1.s1 AS `s1`,not(<in_optimizer>(test.t1.s1,<exists>(<index_lookup>(<cache>(test.t1.s1) in t2 on s1 chicking NULL)))) AS `s1 <> ALL (SELECT s1 FROM t2)` from test.t1
explain extended select s1, s1 NOT IN (SELECT s1 FROM t2 WHERE s1 < 'a2') from t1;
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t1 index NULL s1 6 NULL 3 Using index
diff --git a/mysql-test/r/type_blob.result b/mysql-test/r/type_blob.result
index f12be1d363c..82aefa78bb2 100644
--- a/mysql-test/r/type_blob.result
+++ b/mysql-test/r/type_blob.result
@@ -492,6 +492,14 @@ collation(load_file('../../std_data/words.dat')),
coercibility(load_file('../../std_data/words.dat'));
charset(load_file('../../std_data/words.dat')) collation(load_file('../../std_data/words.dat')) coercibility(load_file('../../std_data/words.dat'))
binary binary 3
+explain extended select
+charset(load_file('../../std_data/words.dat')),
+collation(load_file('../../std_data/words.dat')),
+coercibility(load_file('../../std_data/words.dat'));
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
+Warnings:
+Note 1003 select high_priority no_cache charset(load_file(_latin1'../../std_data/words.dat')) AS `charset(load_file('../../std_data/words.dat'))`,collation(load_file(_latin1'../../std_data/words.dat')) AS `collation(load_file('../../std_data/words.dat'))`,coercibility(load_file(_latin1'../../std_data/words.dat')) AS `coercibility(load_file('../../std_data/words.dat'))`
update t1 set imagem=load_file('../../std_data/words.dat') where id=1;
select if(imagem is null, "ERROR", "OK"),length(imagem) from t1 where id = 1;
if(imagem is null, "ERROR", "OK") length(imagem)
diff --git a/mysql-test/r/varbinary.result b/mysql-test/r/varbinary.result
index 5464d741f70..cf001158ae2 100644
--- a/mysql-test/r/varbinary.result
+++ b/mysql-test/r/varbinary.result
@@ -11,9 +11,11 @@ x'31' X'ffff'+0
create table t1 (ID int(8) unsigned zerofill not null auto_increment,UNIQ bigint(21) unsigned zerofill not null,primary key (ID),unique (UNIQ) );
insert into t1 set UNIQ=0x38afba1d73e6a18a;
insert into t1 set UNIQ=123;
-explain select * from t1 where UNIQ=0x38afba1d73e6a18a;
+explain extended select * from t1 where UNIQ=0x38afba1d73e6a18a;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 const UNIQ UNIQ 8 const 1
+Warnings:
+Note 1003 select high_priority test.t1.ID AS `ID`,test.t1.UNIQ AS `UNIQ` from test.t1 where (test.t1.UNIQ = 4084688022709641610)
drop table t1;
select x'hello';
ERROR 42000: You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'x'hello'' at line 1
diff --git a/mysql-test/r/variables.result b/mysql-test/r/variables.result
index 52ea28e6076..90654bece2e 100644
--- a/mysql-test/r/variables.result
+++ b/mysql-test/r/variables.result
@@ -22,6 +22,11 @@ NULL NULL NULL NULL
select @t1:=(@t2:=1)+@t3:=4,@t1,@t2,@t3;
@t1:=(@t2:=1)+@t3:=4 @t1 @t2 @t3
5 5 1 4
+explain extended select @t1:=(@t2:=1)+@t3:=4,@t1,@t2,@t3;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
+Warnings:
+Note 1003 select high_priority no_cache (@t1:=((@t2:=1) + (@t3:=4))) AS `@t1:=(@t2:=1)+@t3:=4`,(@t1) AS `@t1`,(@t2) AS `@t2`,(@t3) AS `@t3`
select @t5;
@t5
1.23456
@@ -76,9 +81,19 @@ select @@VERSION=version();
select last_insert_id(345);
last_insert_id(345)
345
+explain extended select last_insert_id(345);
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
+Warnings:
+Note 1003 select high_priority no_cache last_insert_id(345) AS `last_insert_id(345)`
select @@IDENTITY,last_insert_id(), @@identity;
@@IDENTITY last_insert_id() @@identity
345 345 345
+explain extended select @@IDENTITY,last_insert_id(), @@identity;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used
+Warnings:
+Note 1003 select high_priority no_cache 345 AS `@@IDENTITY`,345 AS `last_insert_id()`,345 AS `@@identity`
set big_tables=OFF, big_tables=ON, big_tables=0, big_tables=1, big_tables="OFF", big_tables="ON";
set global concurrent_insert=ON;
show variables like 'concurrent_insert';
diff --git a/mysql-test/t/auto_increment.test b/mysql-test/t/auto_increment.test
index a036121f297..d02850f6745 100644
--- a/mysql-test/t/auto_increment.test
+++ b/mysql-test/t/auto_increment.test
@@ -80,6 +80,7 @@ create table t1 (i tinyint unsigned not null auto_increment primary key);
insert into t1 set i = 254;
insert into t1 set i = null;
select last_insert_id();
+explain extended select last_insert_id();
--error 1062
insert into t1 set i = 254;
select last_insert_id();
diff --git a/mysql-test/t/bench_count_distinct.test b/mysql-test/t/bench_count_distinct.test
index c1adeab2c44..3ffb95a69c2 100644
--- a/mysql-test/t/bench_count_distinct.test
+++ b/mysql-test/t/bench_count_distinct.test
@@ -16,4 +16,5 @@ while ($1)
}
enable_query_log;
select count(distinct n) from t1;
+explain extended select count(distinct n) from t1;
drop table t1;
diff --git a/mysql-test/t/case.test b/mysql-test/t/case.test
index 4d4ceb062e4..9a1b6b6bbfe 100644
--- a/mysql-test/t/case.test
+++ b/mysql-test/t/case.test
@@ -14,6 +14,7 @@ select CASE "b" when "a" then 1 when binary "B" then 2 WHEN "b" then "ok" END;
select CASE concat("a","b") when concat("ab","") then "a" when "b" then "b" end;
select CASE when 1=0 then "true" else "false" END;
select CASE 1 when 1 then "one" WHEN 2 then "two" ELSE "more" END;
+explain extended select CASE 1 when 1 then "one" WHEN 2 then "two" ELSE "more" END;
select CASE 2.0 when 1 then "one" WHEN 2.0 then "two" ELSE "more" END;
select (CASE "two" when "one" then "1" WHEN "two" then "2" END) | 0;
select (CASE "two" when "one" then 1.00 WHEN "two" then 2.00 END) +0.0;
@@ -30,6 +31,7 @@ select case when 1<0 then "TRUE" else "FALSE" END;
create table t1 (a int);
insert into t1 values(1),(2),(3),(4);
select case a when 1 then 2 when 2 then 3 else 0 end as fcase, count(*) from t1 group by fcase;
+explain extended select case a when 1 then 2 when 2 then 3 else 0 end as fcase, count(*) from t1 group by fcase;
select case a when 1 then "one" when 2 then "two" else "nothing" end as fcase, count(*) from t1 group by fcase;
drop table t1;
@@ -98,5 +100,9 @@ CREATE TABLE t1 SELECT
COALESCE(1), COALESCE(1.0),COALESCE('a'),
COALESCE(1,1.0), COALESCE(1,'1'),COALESCE(1.1,'1'),
COALESCE('a' COLLATE latin1_bin,'b');
+explain extended SELECT
+ COALESCE(1), COALESCE(1.0),COALESCE('a'),
+ COALESCE(1,1.0), COALESCE(1,'1'),COALESCE(1.1,'1'),
+ COALESCE('a' COLLATE latin1_bin,'b');
SHOW CREATE TABLE t1;
DROP TABLE t1;
diff --git a/mysql-test/t/cast.test b/mysql-test/t/cast.test
index b3ae8981671..dd17904effb 100644
--- a/mysql-test/t/cast.test
+++ b/mysql-test/t/cast.test
@@ -8,6 +8,7 @@ select CONVERT('-1',UNSIGNED);
select cast(-5 as unsigned) | 1, cast(-5 as unsigned) & -1;
select cast(-5 as unsigned) -1, cast(-5 as unsigned) + 1;
select ~5, cast(~5 as signed);
+explain extended select ~5, cast(~5 as signed);
select cast(5 as unsigned) -6.0;
select cast("A" as binary) = "a", cast(BINARY "a" as CHAR) = "A";
select cast("2001-1-1" as DATE), cast("2001-1-1" as DATETIME);
diff --git a/mysql-test/t/ctype_collate.test b/mysql-test/t/ctype_collate.test
index d42696e693b..2d9a4be5b36 100644
--- a/mysql-test/t/ctype_collate.test
+++ b/mysql-test/t/ctype_collate.test
@@ -139,6 +139,7 @@ SHOW FIELDS FROM t1;
SET CHARACTER SET 'latin1';
SHOW VARIABLES LIKE 'character_set_client';
SELECT charset('a'),collation('a'),coercibility('a'),'a'='A';
+explain extended SELECT charset('a'),collation('a'),coercibility('a'),'a'='A';
SET CHARACTER SET koi8r;
SHOW VARIABLES LIKE 'collation_client';
diff --git a/mysql-test/t/ctype_many.test b/mysql-test/t/ctype_many.test
index 66732520f4d..a1549f952e5 100644
--- a/mysql-test/t/ctype_many.test
+++ b/mysql-test/t/ctype_many.test
@@ -147,6 +147,12 @@ UPDATE t1 SET utf8_f=CONVERT(koi8_ru_f USING utf8);
SET CHARACTER SET koi8r;
SELECT * FROM t1;
+#
+# codecovarage for Item_func_conv_charset3
+#
+select CONVERT(koi8_ru_f, 'cp1251_general_ci', 'utf8_general_ci'), comment from t1;
+explain extended select CONVERT(koi8_ru_f, 'cp1251_general_ci', 'utf8_general_ci'), comment from t1;
+
ALTER TABLE t1 ADD bin_f CHAR(32) BYTE NOT NULL;
UPDATE t1 SET bin_f=koi8_ru_f;
SELECT COUNT(DISTINCT bin_f),COUNT(DISTINCT koi8_ru_f),COUNT(DISTINCT utf8_f) FROM t1;
diff --git a/mysql-test/t/ctype_utf8.test b/mysql-test/t/ctype_utf8.test
index 46359e84f1d..54d934b66db 100644
--- a/mysql-test/t/ctype_utf8.test
+++ b/mysql-test/t/ctype_utf8.test
@@ -23,6 +23,8 @@ select locate(_utf8 0xD0B1, _utf8 0xD0B0D091D0B2);
select locate(_utf8 0xD091, _utf8 0xD0B0D0B1D0B2 collate utf8_bin);
select locate(_utf8 0xD0B1, _utf8 0xD0B0D091D0B2 collate utf8_bin);
+select length(_utf8 0xD0B1), bit_length(_utf8 0xD0B1), char_length(_utf8 0xD0B1);
+
select 'a' like 'a';
select 'A' like 'a';
select 'A' like 'a' collate utf8_bin;
diff --git a/mysql-test/t/date_formats.test b/mysql-test/t/date_formats.test
index 9551efaa648..e2d0e5d2c6d 100644
--- a/mysql-test/t/date_formats.test
+++ b/mysql-test/t/date_formats.test
@@ -80,3 +80,4 @@ select get_format(DATE, 'USA') as a;
select get_format(TIME, 'internal') as a;
select get_format(DATETIME, 'eur') as a;
+explain extended select makedate(1997,1), addtime("31.12.97 11.59.59.999999 PM", "1 1.1.1.000002"),subtime("31.12.97 11.59.59.999999 PM", "1 1.1.1.000002"),timediff("01.01.97 11:59:59.000001 PM","31.12.95 11:59:59.000002 PM"),cast(str_to_date("15-01-2001 12:59:59", "%d-%m-%Y %H:%i:%S") as TIME), maketime(23,11,12),microsecond("1997-12-31 23:59:59.000001");
diff --git a/mysql-test/t/fulltext.test b/mysql-test/t/fulltext.test
index 8c6bb97edf1..41e6d310c08 100644
--- a/mysql-test/t/fulltext.test
+++ b/mysql-test/t/fulltext.test
@@ -16,6 +16,7 @@ INSERT INTO t1 VALUES('MySQL has now support', 'for full-text search'),
# nl search
select * from t1 where MATCH(a,b) AGAINST ("collections");
+explain extended select * from t1 where MATCH(a,b) AGAINST ("collections");
select * from t1 where MATCH(a,b) AGAINST ("indexes");
select * from t1 where MATCH(a,b) AGAINST ("indexes collections");
select * from t1 where MATCH(a,b) AGAINST ("only");
@@ -40,6 +41,7 @@ explain select * from t1 where MATCH(a,b) AGAINST ("collections")>0 and a like '
# boolean search
select * from t1 where MATCH(a,b) AGAINST("support -collections" IN BOOLEAN MODE);
+explain extended select * from t1 where MATCH(a,b) AGAINST("support -collections" IN BOOLEAN MODE);
select * from t1 where MATCH(a,b) AGAINST("support collections" IN BOOLEAN MODE);
select * from t1 where MATCH(a,b) AGAINST("support +collections" IN BOOLEAN MODE);
select * from t1 where MATCH(a,b) AGAINST("sear*" IN BOOLEAN MODE);
diff --git a/mysql-test/t/func_compress.test b/mysql-test/t/func_compress.test
index 069fbed8562..06ebb388517 100644
--- a/mysql-test/t/func_compress.test
+++ b/mysql-test/t/func_compress.test
@@ -7,7 +7,9 @@ select @test_compress_string:='string for test compress function aaaaaaaaaaaaaaa
select length(@test_compress_string);
select uncompress(compress(@test_compress_string));
+explain extended select uncompress(compress(@test_compress_string));
select uncompressed_length(compress(@test_compress_string))=length(@test_compress_string);
+explain extended select uncompressed_length(compress(@test_compress_string))=length(@test_compress_string);
select uncompressed_length(compress(@test_compress_string));
select length(compress(@test_compress_string))<length(@test_compress_string);
diff --git a/mysql-test/t/func_gconcat.test b/mysql-test/t/func_gconcat.test
index 041225bdaf5..d004c81f14e 100644
--- a/mysql-test/t/func_gconcat.test
+++ b/mysql-test/t/func_gconcat.test
@@ -18,6 +18,7 @@ insert into t1 values (3,9,"D","c");
# Test of MySQL simple request
select grp,group_concat(c) from t1 group by grp;
+explain extended select grp,group_concat(c) from t1 group by grp;
select grp,group_concat(a,c) from t1 group by grp;
select grp,group_concat("(",a,":",c,")") from t1 group by grp;
@@ -33,9 +34,11 @@ select grp,group_concat(c order by 1) from t1 group by grp;
select grp,group_concat(c order by "c") from t1 group by grp;
select grp,group_concat(distinct c order by c) from t1 group by grp;
select grp,group_concat(distinct c order by c desc) from t1 group by grp;
+explain extended select grp,group_concat(distinct c order by c desc) from t1 group by grp;
select grp,group_concat(c order by c separator ",") from t1 group by grp;
select grp,group_concat(c order by c desc separator ",") from t1 group by grp;
select grp,group_concat(distinct c order by c separator ",") from t1 group by grp;
+explain extended select grp,group_concat(distinct c order by c separator ",") from t1 group by grp;
select grp,group_concat(distinct c order by c desc separator ",") from t1 group by grp;
# Test of SQL_LIST objects
diff --git a/mysql-test/t/func_group.test b/mysql-test/t/func_group.test
index ac3a1986d93..9e0184d35ce 100644
--- a/mysql-test/t/func_group.test
+++ b/mysql-test/t/func_group.test
@@ -346,7 +346,8 @@ select a,count(b), sum(b), avg(b), std(b), min(b), max(b), bit_and(b), bit_or(b)
select SQL_BIG_RESULT a,count(b), sum(b), avg(b), std(b), min(b), max(b), bit_and(b), bit_or(b) from t1 group by a;
insert into t1 values (3,1);
select a,count(b), sum(b), avg(b), std(b), min(b), max(b), bit_and(b), bit_or(b) from t1 group by a;
-select SQL_BIG_RESULT a,count(b), sum(b), avg(b), std(b), min(b), max(b), bit_and(b), bit_or(b) from t1 group by a;
+select SQL_BIG_RESULT a,count(b), sum(b), avg(b), std(b), min(b), max(b), bit_and(b), bit_or(b), bit_xor(b) from t1 group by a;
+explain extended select SQL_BIG_RESULT a,count(b), sum(b), avg(b), std(b), min(b), max(b), bit_and(b), bit_or(b), bit_xor(b) from t1 group by a;
drop table t1;
--disable_warnings
create table t1 (USR_ID integer not null, MAX_REQ integer not null, constraint PK_SEA_USER primary key (USR_ID)) type=InnoDB;
diff --git a/mysql-test/t/func_if.test b/mysql-test/t/func_if.test
index 21e5836c781..7842df4fd0a 100644
--- a/mysql-test/t/func_if.test
+++ b/mysql-test/t/func_if.test
@@ -20,6 +20,13 @@ select if(1,st,st) s from t1 order by s;
select if(u=1,st,st) s from t1 order by s;
select if(u=1,binary st,st) s from t1 order by s;
select if(u=1,st,binary st) s from t1 where st like "%a%" order by s;
+explain extended select if(u=1,st,binary st) s from t1 where st like "%a%" order by s;
+
+#
+# NULLIF test
+#
+select nullif(u=0, 'test') from t1;
+explain extended select nullif(u=0, 'test') from t1;
drop table t1;
#
diff --git a/mysql-test/t/func_in.test b/mysql-test/t/func_in.test
index 689b061f88d..9ff768ec76b 100644
--- a/mysql-test/t/func_in.test
+++ b/mysql-test/t/func_in.test
@@ -72,6 +72,7 @@ select * from t1 where a in ('a');
select * from t1 where 'a' collate latin1_general_ci in (a,b,c);
select * from t1 where 'a' collate latin1_bin in (a,b,c);
select * from t1 where 'a' in (a,b,c collate latin1_bin);
+explain extended select * from t1 where 'a' in (a,b,c collate latin1_bin);
drop table t1;
select '1.0' in (1,2);
diff --git a/mysql-test/t/func_math.test b/mysql-test/t/func_math.test
index bd125dafd53..b6e2d3bd725 100644
--- a/mysql-test/t/func_math.test
+++ b/mysql-test/t/func_math.test
@@ -3,17 +3,30 @@
#
select floor(5.5),floor(-5.5);
+explain extended select floor(5.5),floor(-5.5);
select ceiling(5.5),ceiling(-5.5);
+explain extended select ceiling(5.5),ceiling(-5.5);
select truncate(52.64,1),truncate(52.64,2),truncate(52.64,-1),truncate(52.64,-2), truncate(-52.64,1),truncate(-52.64,-1);
+explain extended select truncate(52.64,1),truncate(52.64,2),truncate(52.64,-1),truncate(52.64,-2), truncate(-52.64,1),truncate(-52.64,-1);
select round(5.5),round(-5.5);
+explain extended select round(5.5),round(-5.5);
select round(5.64,1),round(5.64,2),round(5.64,-1),round(5.64,-2);
select abs(-10), sign(-5), sign(5), sign(0);
+explain extended select abs(-10), sign(-5), sign(5), sign(0);
select log(exp(10)),exp(log(sqrt(10))*2),log(-1),log(NULL),log(1,1),log(3,9),log(-1,2),log(NULL,2);
+explain extended select log(exp(10)),exp(log(sqrt(10))*2),log(-1),log(NULL),log(1,1),log(3,9),log(-1,2),log(NULL,2);
select ln(exp(10)),exp(ln(sqrt(10))*2),ln(-1),ln(0),ln(NULL);
+explain extended select ln(exp(10)),exp(ln(sqrt(10))*2),ln(-1),ln(0),ln(NULL);
select log2(8),log2(15),log2(-2),log2(0),log2(NULL);
+explain extended select log2(8),log2(15),log2(-2),log2(0),log2(NULL);
select log10(100),log10(18),log10(-4),log10(0),log10(NULL);
+explain extended select log10(100),log10(18),log10(-4),log10(0),log10(NULL);
select pow(10,log10(10)),power(2,4);
+explain extended select pow(10,log10(10)),power(2,4);
set @@rand_seed1=10000000,@@rand_seed2=1000000;
select rand(999999),rand();
+explain extended select rand(999999),rand();
select pi(),sin(pi()/2),cos(pi()/2),abs(tan(pi())),cot(1),asin(1),acos(0),atan(1);
+explain extended select pi(),sin(pi()/2),cos(pi()/2),abs(tan(pi())),cot(1),asin(1),acos(0),atan(1);
select degrees(pi()),radians(360);
+explain extended select degrees(pi()),radians(360);
diff --git a/mysql-test/t/func_op.test b/mysql-test/t/func_op.test
index 778c8406b8d..cb6ca58f193 100644
--- a/mysql-test/t/func_op.test
+++ b/mysql-test/t/func_op.test
@@ -3,5 +3,7 @@
# Simple operands and arithmetic grouping
select 1+1,1-1,1+1*2,8/5,8%5,mod(8,5),mod(8,5)|0,-(1+1)*-2;
+explain extended select 1+1,1-1,1+1*2,8/5,8%5,mod(8,5),mod(8,5)|0,-(1+1)*-2;
select 1 | (1+1),5 & 3,bit_count(7) ;
+explain extended select 1 | (1+1),5 & 3,bit_count(7) ;
select 1 << 32,1 << 63, 1 << 64, 4 >> 2, 4 >> 63, 1<< 63 >> 60;
diff --git a/mysql-test/t/func_regexp.test b/mysql-test/t/func_regexp.test
index 6ecb56ef9c4..edfa9afcfa6 100644
--- a/mysql-test/t/func_regexp.test
+++ b/mysql-test/t/func_regexp.test
@@ -36,6 +36,7 @@ drop table t1;
create table t1 (xxx char(128));
insert into t1 (xxx) values('this is a test of some long text to see what happens');
select * from t1 where xxx regexp('is a test of some long text to');
+explain extended select * from t1 where xxx regexp('is a test of some long text to');
select * from t1 where xxx regexp('is a test of some long text to ');
select * from t1 where xxx regexp('is a test of some long text to s');
select * from t1 where xxx regexp('is a test of some long text to se');
diff --git a/mysql-test/t/func_set.test b/mysql-test/t/func_set.test
index b152c94096c..7d24140c75d 100644
--- a/mysql-test/t/func_set.test
+++ b/mysql-test/t/func_set.test
@@ -3,6 +3,7 @@
#
select interval(55,10,20,30,40,50,60,70,80,90,100),interval(3,1,1+1,1+1+1+1),field("IBM","NCA","ICL","SUN","IBM","DIGITAL"),field("A","B","C"),elt(2,"ONE","TWO","THREE"),interval(0,1,2,3,4),elt(1,1,2,3)|0,elt(1,1.1,1.2,1.3)+0;
+explain extended select INTERVAL(55,10,20,30,40,50,60,70,80,90,100),interval(3,1,1+1,1+1+1+1),field("IBM","NCA","ICL","SUN","IBM","DIGITAL"),field("A","B","C"),elt(2,"ONE","TWO","THREE"),interval(0,1,2,3,4),elt(1,1,2,3)|0,elt(1,1.1,1.2,1.3)+0;
select find_in_set("b","a,b,c"),find_in_set("c","a,b,c"),find_in_set("dd","a,bbb,dd"),find_in_set("bbb","a,bbb,dd");
select find_in_set("d","a,b,c"),find_in_set("dd","a,bbb,d"),find_in_set("bb","a,bbb,dd");
select make_set(0,'a','b','c'),make_set(-1,'a','b','c'),make_set(1,'a','b','c'),make_set(2,'a','b','c'),make_set(1+2,concat('a','b'),'c');
diff --git a/mysql-test/t/func_str.test b/mysql-test/t/func_str.test
index b421f47e5b8..835172fe3fa 100644
--- a/mysql-test/t/func_str.test
+++ b/mysql-test/t/func_str.test
@@ -14,7 +14,9 @@ select 'hello',"'hello'",'""hello""','''h''e''l''l''o''',"hel""lo",'hel\'lo';
select 'hello' 'monty';
select length('\n\t\r\b\0\_\%\\');
select bit_length('\n\t\r\b\0\_\%\\');
-select concat('monty',' was here ','again'),length('hello'),char(ascii('h'));
+select char_length('\n\t\r\b\0\_\%\\');
+select length(_latin1'\n\t\n\b\0\\_\\%\\');
+select concat('monty',' was here ','again'),length('hello'),char(ascii('h')),ord('h');
select locate('he','hello'),locate('he','hello',2),locate('lo','hello',2) ;
select instr('hello','HE'), instr('hello',binary 'HE'), instr(binary 'hello','HE');
select position(binary 'll' in 'hello'),position('a' in binary 'hello');
@@ -46,6 +48,7 @@ select null sounds like 'null';
select 'null' sounds like null;
select null sounds like null;
select md5('hello');
+select crc32("123");
select sha('abc');
select sha1('abc');
select aes_decrypt(aes_encrypt('abc','1'),'1');
@@ -336,3 +339,5 @@ INSERT INTO t1 VALUES ('Congress reconvenes in September to debate welfare and a
INSERT INTO t1 VALUES ('House passes the CAREERS bill');
SELECT CONCAT("</a>",RPAD("",(55 - LENGTH(title)),".")) from t1;
DROP TABLE t1;
+
+explain extended select md5('hello'), sha('abc'), sha1('abc'), soundex(''), 'mood' sounds like 'mud', aes_decrypt(aes_encrypt('abc','1'),'1'),concat('*',space(5),'*'), reverse('abc'), rpad('a',4,'1'), lpad('a',4,'1'), concat_ws(',','',NULL,'a'),make_set(255,_latin2'a',_latin2'b',_latin2'c'),elt(2,1),locate("a","b",2),format(130,10),char(0),conv(130,16,10),hex(130),binary 'HE', export_set(255,_latin2'y',_latin2'n',_latin2' '),FIELD('b' COLLATE latin1_bin,'A','B'),FIND_IN_SET(_latin1'B',_latin1'a,b,c,d'),collation(conv(130,16,10)), coercibility(conv(130,16,10)),length('\n\t\r\b\0\_\%\\'),bit_length('\n\t\r\b\0\_\%\\'),bit_length('\n\t\r\b\0\_\%\\'),concat('monty',' was here ','again'),length('hello'),char(ascii('h')),ord('h'),quote(1/0),crc32("123");
diff --git a/mysql-test/t/func_system.test b/mysql-test/t/func_system.test
index 998b2a5c3f4..f3b9b4ffc3f 100644
--- a/mysql-test/t/func_system.test
+++ b/mysql-test/t/func_system.test
@@ -17,6 +17,7 @@ select version()>="3.23.29";
select version()>=_utf8"3.23.29";
select version()>=_latin1"3.23.29";
select charset(version());
+explain extended select database(), user();
create table t1 (version char(40)) select database(), user(), version() as 'version';
show create table t1;
diff --git a/mysql-test/t/func_test.test b/mysql-test/t/func_test.test
index 95b10c4ffb9..86e0ee2637b 100644
--- a/mysql-test/t/func_test.test
+++ b/mysql-test/t/func_test.test
@@ -19,13 +19,19 @@ select 'b' between 'a' and 'c', 'B' between 'a' and 'c';
select 2 in (3,2,5,9,5,1),"monty" in ("david","monty","allan"), 1.2 in (1.4,1.2,1.0);
select -1.49 or -1.49,0.6 or 0.6;
select 3 ^ 11, 1 ^ 1, 1 ^ 0, 1 ^ NULL, NULL ^ 1;
+explain extended select 3 ^ 11, 1 ^ 1, 1 ^ 0, 1 ^ NULL, NULL ^ 1;
select 1 XOR 1, 1 XOR 0, 0 XOR 1, 0 XOR 0, NULL XOR 1, 1 XOR NULL, 0 XOR NULL;
select 10 % 7, 10 mod 7, 10 div 3;
+explain extended select 10 % 7, 10 mod 7, 10 div 3;
select (1 << 64)-1, ((1 << 64)-1) DIV 1, ((1 << 64)-1) DIV 2;
+explain extended select (1 << 64)-1, ((1 << 64)-1) DIV 1, ((1 << 64)-1) DIV 2;
create table t1 (a int);
insert t1 values (1);
select * from t1 where 1 xor 1;
+explain extended select * from t1 where 1 xor 1;
+select - a from t1;
+explain extended select - a from t1;
drop table t1;
#
@@ -41,6 +47,7 @@ select 1 and 0 or 2, 2 or 1 and 0;
#
select _koi8r'a' = _koi8r'A';
select _koi8r'a' = _koi8r'A' COLLATE koi8r_general_ci;
+explain extended select _koi8r'a' = _koi8r'A' COLLATE koi8r_general_ci;
select _koi8r'a' = _koi8r'A' COLLATE koi8r_bin;
select _koi8r'a' COLLATE koi8r_general_ci = _koi8r'A';
select _koi8r'a' COLLATE koi8r_bin = _koi8r'A';
diff --git a/mysql-test/t/func_time.test b/mysql-test/t/func_time.test
index 30d616915ab..96bdb547469 100644
--- a/mysql-test/t/func_time.test
+++ b/mysql-test/t/func_time.test
@@ -7,6 +7,7 @@ drop table if exists t1,t2,t3;
select from_days(to_days("960101")),to_days(960201)-to_days("19960101"),to_days(date_add(curdate(), interval 1 day))-to_days(curdate()),weekday("1997-11-29");
select period_add("9602",-12),period_diff(199505,"9404") ;
+
select now()-now(),weekday(curdate())-weekday(now()),unix_timestamp()-unix_timestamp(now());
select from_unixtime(unix_timestamp("1994-03-02 10:11:12")),from_unixtime(unix_timestamp("1994-03-02 10:11:12"),"%Y-%m-%d %h:%i:%s"),from_unixtime(unix_timestamp("1994-03-02 10:11:12"))+0;
select sec_to_time(9001),sec_to_time(9001)+0,time_to_sec("15:12:22"),
@@ -231,3 +232,5 @@ select strcmp(date_format(date_sub(localtimestamp(), interval 3 hour),"%Y-%m-%d"
select strcmp(date_format(utc_timestamp(),"%T"), utc_time())=0;
select strcmp(date_format(utc_timestamp(),"%Y-%m-%d"), utc_date())=0;
select strcmp(concat(utc_date(),' ',utc_time()),utc_timestamp())=0;
+
+explain extended select period_add("9602",-12),period_diff(199505,"9404"),from_days(to_days("960101")),dayofmonth("1997-01-02"), month("1997-01-02"), monthname("1972-03-04"),dayofyear("0000-00-00"),HOUR("1997-03-03 23:03:22"),MINUTE("23:03:22"),SECOND(230322),QUARTER(980303),WEEK("1998-03-03"),yearweek("2000-01-01",1),week(19950101,1),year("98-02-03"),weekday(curdate())-weekday(now()),dayname("1962-03-03"),unix_timestamp(),sec_to_time(time_to_sec("0:30:47")/6.21),curtime(),utc_time(),curdate(),utc_date(),utc_timestamp(),date_format("1997-01-02 03:04:05", "%M %W %D %Y %y %m %d %h %i %s %w"),from_unixtime(unix_timestamp("1994-03-02 10:11:12")),"1997-12-31 23:59:59" + INTERVAL 1 SECOND,"1998-01-01 00:00:00" - INTERVAL 1 SECOND,INTERVAL 1 DAY + "1997-12-31", extract(YEAR FROM "1999-01-02 10:11:12"),date_add("1997-12-31 23:59:59",INTERVAL 1 SECOND);
diff --git a/mysql-test/t/group_by.test b/mysql-test/t/group_by.test
index 752896ce7b2..705e32c82df 100644
--- a/mysql-test/t/group_by.test
+++ b/mysql-test/t/group_by.test
@@ -260,7 +260,7 @@ explain select spid,count(*) from t1 where spid between 1 and 2 group by spid;
explain select spid,count(*) from t1 where spid between 1 and 2 group by spid order by null;
select spid,count(*) from t1 where spid between 1 and 2 group by spid;
select spid,count(*) from t1 where spid between 1 and 2 group by spid desc;
-explain select sql_big_result spid,sum(userid) from t1 group by spid desc;
+explain extended select sql_big_result spid,sum(userid) from t1 group by spid desc;
explain select sql_big_result spid,sum(userid) from t1 group by spid desc order by null;
select sql_big_result spid,sum(userid) from t1 group by spid desc;
explain select sql_big_result score,count(*) from t1 group by score desc;
diff --git a/mysql-test/t/having.test b/mysql-test/t/having.test
index 7d5fbee011f..7e4cbe76cca 100644
--- a/mysql-test/t/having.test
+++ b/mysql-test/t/having.test
@@ -10,6 +10,7 @@ select count(a) as b from t1 where a=0 having b > 0;
insert into t1 values (null);
select count(a) as b from t1 where a=0 having b > 0;
select count(a) as b from t1 where a=0 having b >=0;
+explain extended select count(a) as b from t1 where a=0 having b >=0;
drop table t1;
#
diff --git a/mysql-test/t/insert_update.test b/mysql-test/t/insert_update.test
index 4f19aca8738..550bce867cd 100644
--- a/mysql-test/t/insert_update.test
+++ b/mysql-test/t/insert_update.test
@@ -23,4 +23,6 @@ INSERT t1 SET a=5 ON DUPLICATE KEY UPDATE b=0;
SELECT * FROM t1;
INSERT t1 VALUES (2,1,11), (7,4,40) ON DUPLICATE KEY UPDATE c=c+VALUES(a);
SELECT *, VALUES(a) FROM t1;
+explain extended SELECT *, VALUES(a) FROM t1;
+explain extended select * from t1 where values(a);
DROP TABLE t1;
diff --git a/mysql-test/t/null.test b/mysql-test/t/null.test
index fa36249dce0..0be755ba7ad 100644
--- a/mysql-test/t/null.test
+++ b/mysql-test/t/null.test
@@ -8,6 +8,7 @@ drop table if exists t1;
#
select null,\N,isnull(null),isnull(1/0),isnull(1/0 = null),ifnull(null,1),ifnull(null,"TRUE"),ifnull("TRUE","ERROR"),1/0 is null,1 is not null;
+explain extended select null,\N,isnull(null),isnull(1/0),isnull(1/0 = null),ifnull(null,1),ifnull(null,"TRUE"),ifnull("TRUE","ERROR"),1/0 is null,1 is not null;
select 1 | NULL,1 & NULL,1+NULL,1-NULL;
select NULL=NULL,NULL<>NULL,IFNULL(NULL,1.1)+0,IFNULL(NULL,1) | 0;
select strcmp("a",NULL),(1<NULL)+0.0,NULL regexp "a",null like "a%","a%" like null;
@@ -15,10 +16,12 @@ select concat("a",NULL),replace(NULL,"a","b"),replace("string","i",NULL),replace
select repeat("a",0),repeat("ab",5+5),repeat("ab",-1),reverse(NULL);
select field(NULL,"a","b","c");
select 2 between null and 1,2 between 3 AND NULL,NULL between 1 and 2,2 between NULL and 3, 2 between 1 AND null;
+explain extended select 2 between null and 1,2 between 3 AND NULL,NULL between 1 and 2,2 between NULL and 3, 2 between 1 AND null;
SELECT NULL AND NULL, 1 AND NULL, NULL AND 1, NULL OR NULL, 0 OR NULL, NULL OR 0;
SELECT (NULL OR NULL) IS NULL;
select NULL AND 0, 0 and NULL;
select inet_ntoa(null),inet_aton(null),inet_aton("122.256"),inet_aton("122.226."),inet_aton("");
+explain extended select inet_ntoa(null),inet_aton(null),inet_aton("122.256"),inet_aton("122.226."),inet_aton("");
create table t1 (x int);
insert into t1 values (null);
diff --git a/mysql-test/t/olap.test b/mysql-test/t/olap.test
index 17bf6230f76..7443aeee6f4 100644
--- a/mysql-test/t/olap.test
+++ b/mysql-test/t/olap.test
@@ -32,7 +32,7 @@ select product, sum(profit),avg(profit) from t1 group by product with rollup;
# Sub totals
select product, country_id , year, sum(profit) from t1 group by product, country_id, year;
select product, country_id , year, sum(profit) from t1 group by product, country_id, year with rollup;
-explain select product, country_id , year, sum(profit) from t1 group by product, country_id, year with rollup;
+explain extended select product, country_id , year, sum(profit) from t1 group by product, country_id, year with rollup;
select product, country_id , sum(profit) from t1 group by product desc, country_id with rollup;
# limit
diff --git a/mysql-test/t/query_cache.test b/mysql-test/t/query_cache.test
index ed4c5c91c4d..0ec6e5ecb73 100644
--- a/mysql-test/t/query_cache.test
+++ b/mysql-test/t/query_cache.test
@@ -184,6 +184,7 @@ select RAND() from t1;
select UNIX_TIMESTAMP() from t1;
select USER() from t1;
select benchmark(1,1) from t1;
+explain extended select benchmark(1,1) from t1;
show status like "Qcache_queries_in_cache";
#
# Tests when the cache is filled
diff --git a/mysql-test/t/row.test b/mysql-test/t/row.test
index 252830cfc98..ecb0c6adfc1 100644
--- a/mysql-test/t/row.test
+++ b/mysql-test/t/row.test
@@ -18,6 +18,7 @@ select (1,2,(3,4)) IN ((3,2,(3,4)), (1,2,(3,4)));
-- error 1240
select row(1,2,row(3,4)) IN (row(3,2,row(3,4)), row(1,2,4));
select row(1,2,row(3,4)) IN (row(3,2,row(3,4)), row(1,2,row(3,NULL)));
+explain extended select row(1,2,row(3,4)) IN (row(3,2,row(3,4)), row(1,2,row(3,NULL)));
SELECT (1,2,3)=(0,NULL,3);
SELECT (1,2,3)=(1,NULL,3);
diff --git a/mysql-test/t/rpl000001.test b/mysql-test/t/rpl000001.test
index f464f1e2751..445bd579279 100644
--- a/mysql-test/t/rpl000001.test
+++ b/mysql-test/t/rpl000001.test
@@ -62,10 +62,12 @@ enable_query_log;
# Try to cause a large relay log lag on the slave
connection slave;
select get_lock("hold_slave",10);
+explain extended select get_lock("hold_slave",10);
start slave;
#hope this is long enough for I/O thread to fetch over 16K relay log data
sleep 3;
select release_lock("hold_slave");
+explain extended select release_lock("hold_slave");
unlock tables;
connection master;
diff --git a/mysql-test/t/rpl_get_lock.test b/mysql-test/t/rpl_get_lock.test
index e93268e6074..c3b033fb03a 100644
--- a/mysql-test/t/rpl_get_lock.test
+++ b/mysql-test/t/rpl_get_lock.test
@@ -5,6 +5,7 @@ insert into t1 values(get_lock("lock",2));
dirty_close master;
connection master1;
select get_lock("lock",2);
+
select release_lock("lock");
#ignore
disable_query_log;
@@ -21,7 +22,8 @@ connection slave;
sync_with_master;
select get_lock("lock",3);
select * from t1;
-select is_free_lock("lock");
+select is_free_lock("lock"), is_used_lock("lock");
+explain extended select is_free_lock("lock"), is_used_lock("lock");
# Check lock functions
select is_free_lock("lock2");
select is_free_lock(NULL);
diff --git a/mysql-test/t/rpl_master_pos_wait.test b/mysql-test/t/rpl_master_pos_wait.test
index 24479636c91..4d4d51b04ab 100644
--- a/mysql-test/t/rpl_master_pos_wait.test
+++ b/mysql-test/t/rpl_master_pos_wait.test
@@ -7,6 +7,7 @@ sync_with_master;
# Ask for a master log that has certainly not been reached yet
# timeout= 2 seconds
select master_pos_wait('master-bin.999999',0,2);
+explain extended select master_pos_wait('master-bin.999999',0,2);
# Testcase for bug 651 (master_pos_wait() hangs if slave idle and STOP SLAVE).
send select master_pos_wait('master-bin.999999',0);
connection slave1;
diff --git a/mysql-test/t/select.test b/mysql-test/t/select.test
index d727befe661..b817544bfb9 100644
--- a/mysql-test/t/select.test
+++ b/mysql-test/t/select.test
@@ -1596,6 +1596,7 @@ select count(*) from t1;
select companynr,count(*),sum(fld1) from t2 group by companynr;
select companynr,count(*) from t2 group by companynr order by companynr desc limit 5;
select count(*),min(fld4),max(fld4),sum(fld1),avg(fld1),std(fld1),variance(fld1) from t2 where companynr = 34 and fld4<>"";
+explain extended select count(*),min(fld4),max(fld4),sum(fld1),avg(fld1),std(fld1),variance(fld1) from t2 where companynr = 34 and fld4<>"";
select companynr,count(*),min(fld4),max(fld4),sum(fld1),avg(fld1),std(fld1),variance(fld1) from t2 group by companynr limit 3;
select companynr,t2nr,count(price),sum(price),min(price),max(price),avg(price) from t3 where companynr = 37 group by companynr,t2nr limit 10;
select /*! SQL_SMALL_RESULT */ companynr,t2nr,count(price),sum(price),min(price),max(price),avg(price) from t3 where companynr = 37 group by companynr,t2nr limit 10;
diff --git a/mysql-test/t/type_blob.test b/mysql-test/t/type_blob.test
index ebe342a4ef5..c9c3284fe0d 100644
--- a/mysql-test/t/type_blob.test
+++ b/mysql-test/t/type_blob.test
@@ -298,6 +298,10 @@ select
charset(load_file('../../std_data/words.dat')),
collation(load_file('../../std_data/words.dat')),
coercibility(load_file('../../std_data/words.dat'));
+explain extended select
+ charset(load_file('../../std_data/words.dat')),
+ collation(load_file('../../std_data/words.dat')),
+ coercibility(load_file('../../std_data/words.dat'));
update t1 set imagem=load_file('../../std_data/words.dat') where id=1;
select if(imagem is null, "ERROR", "OK"),length(imagem) from t1 where id = 1;
drop table t1;
diff --git a/mysql-test/t/varbinary.test b/mysql-test/t/varbinary.test
index d58954a189b..9425bd7bd99 100644
--- a/mysql-test/t/varbinary.test
+++ b/mysql-test/t/varbinary.test
@@ -18,7 +18,7 @@ select x'31',X'ffff'+0;
create table t1 (ID int(8) unsigned zerofill not null auto_increment,UNIQ bigint(21) unsigned zerofill not null,primary key (ID),unique (UNIQ) );
insert into t1 set UNIQ=0x38afba1d73e6a18a;
insert into t1 set UNIQ=123;
-explain select * from t1 where UNIQ=0x38afba1d73e6a18a;
+explain extended select * from t1 where UNIQ=0x38afba1d73e6a18a;
drop table t1;
#
diff --git a/mysql-test/t/variables.test b/mysql-test/t/variables.test
index c53559ed4cf..6365ad77c57 100644
--- a/mysql-test/t/variables.test
+++ b/mysql-test/t/variables.test
@@ -16,6 +16,7 @@ select @test_int,@test_double,@test_string,@test_string2;
set @test_int=null,@test_double=null,@test_string=null,@test_string2=null;
select @test_int,@test_double,@test_string,@test_string2;
select @t1:=(@t2:=1)+@t3:=4,@t1,@t2,@t3;
+explain extended select @t1:=(@t2:=1)+@t3:=4,@t1,@t2,@t3;
select @t5;
#
@@ -52,7 +53,9 @@ select @@local.max_join_size, @@global.max_join_size;
select @@identity, length(@@version)>0;
select @@VERSION=version();
select last_insert_id(345);
+explain extended select last_insert_id(345);
select @@IDENTITY,last_insert_id(), @@identity;
+explain extended select @@IDENTITY,last_insert_id(), @@identity;
set big_tables=OFF, big_tables=ON, big_tables=0, big_tables=1, big_tables="OFF", big_tables="ON";
diff --git a/sql/item.cc b/sql/item.cc
index 933d219d29d..735d67c6c3f 100644
--- a/sql/item.cc
+++ b/sql/item.cc
@@ -93,7 +93,7 @@ void Item::print_item_w_name(String *str)
print(str);
if (name)
{
- str->append(" AS `");
+ str->append(" AS `", 5);
str->append(name);
str->append('`');
}
@@ -435,6 +435,7 @@ bool Item_field::eq(const Item *item, bool binary_cmp) const
db_name))))));
}
+
table_map Item_field::used_tables() const
{
if (field->table->const_table)
@@ -442,6 +443,7 @@ table_map Item_field::used_tables() const
return (depended_from ? OUTER_REF_TABLE_BIT : field->table->map);
}
+
Item *Item_field::get_tmp_table_item(THD *thd)
{
Item_field *new_item= new Item_field(thd, *this);
@@ -450,6 +452,7 @@ Item *Item_field::get_tmp_table_item(THD *thd)
return new_item;
}
+
String *Item_int::val_str(String *str)
{
str->set(value, default_charset());
@@ -458,18 +461,22 @@ String *Item_int::val_str(String *str)
void Item_int::print(String *str)
{
- str_value.set(value, default_charset());
+ // latin1 is good enough for numbers
+ str_value.set(value, &my_charset_latin1);
str->append(str_value);
}
+
String *Item_uint::val_str(String *str)
{
str->set((ulonglong) value, default_charset());
return str;
}
+
void Item_uint::print(String *str)
{
+ // latin1 is good enough for numbers
str_value.set((ulonglong) value, default_charset());
str->append(str_value);
}
@@ -481,12 +488,46 @@ String *Item_real::val_str(String *str)
return str;
}
+
void Item_string::print(String *str)
{
str->append('_');
str->append(collation.collation->csname);
str->append('\'');
- str->append(str_value);
+ char *st= (char*)str_value.ptr(), *end= st+str_value.length();
+ for(; st < end; st++)
+ {
+ uchar c= *st;
+ switch (c)
+ {
+ case '\\':
+ str->append("\\\\", 2);
+ break;
+ case '\0':
+ str->append("\\0", 2);
+ break;
+ case '\'':
+ str->append("\\'", 2);
+ break;
+ case '\n':
+ str->append("\\n", 2);
+ break;
+ case '\r':
+ str->append("\\r", 2);
+ break;
+ case '\t':
+ str->append("\\t", 2);
+ break;
+ case '\b':
+ str->append("\\b", 2);
+ break;
+ case 26: //Ctrl-Z
+ str->append("\\z", 2);
+ break;
+ default:
+ str->append(c);
+ }
+ }
str->append('\'');
}
@@ -707,7 +748,7 @@ String *Item_param::query_val_str(String* str)
make_datetime(str, &ltime, is_time_only, 0,
tmp_format->format, tmp_format->format_length, 0);
}
- str->append("'");
+ str->append('\'');
}
return str;
}
@@ -1551,7 +1592,7 @@ void Item_ref::print(String *str)
void Item_ref_null_helper::print(String *str)
{
- str->append("<ref_null_helper>(");
+ str->append("<ref_null_helper>(", 18);
if (ref && *ref)
(*ref)->print(str);
else
@@ -1562,7 +1603,7 @@ void Item_ref_null_helper::print(String *str)
void Item_null_helper::print(String *str)
{
- str->append("<null_helper>(");
+ str->append("<null_helper>(", 14);
store->print(str);
str->append(')');
}
@@ -1609,10 +1650,10 @@ void Item_default_value::print(String *str)
{
if (!arg)
{
- str->append("DEFAULT");
+ str->append("default", 6);
return;
}
- str->append("DEFAULT(");
+ str->append("default", 7);
arg->print(str);
str->append(')');
}
@@ -1665,7 +1706,7 @@ bool Item_insert_value::fix_fields(THD *thd, struct st_table_list *table_list, I
void Item_insert_value::print(String *str)
{
- str->append("VALUE(");
+ str->append("values(", 7);
arg->print(str);
str->append(')');
}
@@ -1792,7 +1833,7 @@ Item_cache* Item_cache::get_cache(Item_result type)
void Item_cache::print(String *str)
{
- str->append("<cache>(");
+ str->append("<cache>(", 8);
if (example)
example->print(str);
else
diff --git a/sql/item.h b/sql/item.h
index 5f691c9e4e4..9751458b810 100644
--- a/sql/item.h
+++ b/sql/item.h
@@ -316,7 +316,7 @@ public:
bool basic_const_item() const { return 1; }
Item *new_item() { return new Item_null(name); }
bool is_null() { return 1; }
- void print(String *str) { str->append("NULL"); }
+ void print(String *str) { str->append("NULL", 4); }
};
class Item_param :public Item
diff --git a/sql/item_cmpfunc.cc b/sql/item_cmpfunc.cc
index d183c81b230..1731f5859b3 100644
--- a/sql/item_cmpfunc.cc
+++ b/sql/item_cmpfunc.cc
@@ -717,9 +717,9 @@ void Item_func_between::print(String *str)
{
str->append('(');
args[0]->print(str);
- str->append(" between ");
+ str->append(" between ", 9);
args[1]->print(str);
- str->append(" and ");
+ str->append(" and ", 5);
args[2]->print(str);
str->append(')');
}
@@ -880,7 +880,7 @@ Item_func_nullif::fix_length_and_dec()
}
/*
- nullif () returns NULL if arguments are different, else it returns the
+ nullif () returns NULL if arguments are equal, else it returns the
first argument.
Note that we have to evaluate the first argument twice as the compare
may have been done with a different type than return value
@@ -1117,7 +1117,7 @@ void Item_func_case::fix_length_and_dec()
void Item_func_case::print(String *str)
{
- str->append("(case ");
+ str->append("(case ", 6);
if (first_expr_num != -1)
{
args[first_expr_num]->print(str);
@@ -1125,19 +1125,19 @@ void Item_func_case::print(String *str)
}
for (uint i=0 ; i < ncases ; i+=2)
{
- str->append("when ");
+ str->append("when ", 5);
args[i]->print(str);
- str->append(" then ");
+ str->append(" then ", 6);
args[i+1]->print(str);
str->append(' ');
}
if (else_expr_num != -1)
{
- str->append("else ");
+ str->append("else ", 5);
args[else_expr_num]->print(str);
str->append(' ');
}
- str->append("end)");
+ str->append("end)", 4);
}
/*
@@ -1545,14 +1545,14 @@ void Item_func_in::print(String *str)
{
str->append('(');
args[0]->print(str);
- str->append(" IN (");
+ str->append(" in (", 5);
for (uint i=1 ; i < arg_count ; i++)
{
if (i > 1)
str->append(',');
args[i]->print(str);
}
- str->append("))");
+ str->append("))", 2);
}
@@ -1924,7 +1924,7 @@ void Item_func_isnotnull::print(String *str)
{
str->append('(');
args[0]->print(str);
- str->append(" is not null)");
+ str->append(" is not null)", 13);
}
diff --git a/sql/item_cmpfunc.h b/sql/item_cmpfunc.h
index eb473a1a73d..36ed849a650 100644
--- a/sql/item_cmpfunc.h
+++ b/sql/item_cmpfunc.h
@@ -349,6 +349,7 @@ public:
enum Item_result result_type () const { return cached_result_type; }
void fix_length_and_dec();
const char *func_name() const { return "nullif"; }
+ void print(String *str) { Item_func::print(str); }
table_map not_null_tables() const { return 0; }
};
@@ -780,7 +781,7 @@ public:
~Item_func_regex();
longlong val_int();
bool fix_fields(THD *thd, struct st_table_list *tlist, Item **ref);
- const char *func_name() const { return "regex"; }
+ const char *func_name() const { return "regexp"; }
void print(String *str) { print_op(str); }
};
diff --git a/sql/item_create.cc b/sql/item_create.cc
index fce59d68c1f..0755a43a48e 100644
--- a/sql/item_create.cc
+++ b/sql/item_create.cc
@@ -292,7 +292,7 @@ Item *create_func_period_diff(Item* a, Item *b)
Item *create_func_pi(void)
{
- return new Item_real(NullS,M_PI,6,8);
+ return new Item_real("Pi()",M_PI,6,8);
}
Item *create_func_pow(Item* a, Item *b)
diff --git a/sql/item_func.cc b/sql/item_func.cc
index bff7c9a6bf3..7bc8f2954da 100644
--- a/sql/item_func.cc
+++ b/sql/item_func.cc
@@ -287,13 +287,19 @@ void Item_func::print(String *str)
{
str->append(func_name());
str->append('(');
+ print_args(str);
+ str->append(')');
+}
+
+
+void Item_func::print_args(String *str)
+{
for (uint i=0 ; i < arg_count ; i++)
{
if (i)
str->append(',');
args[i]->print(str);
}
- str->append(')');
}
@@ -464,18 +470,18 @@ String *Item_num_op::val_str(String *str)
void Item_func_signed::print(String *str)
{
- str->append("cast(");
+ str->append("cast(", 5);
args[0]->print(str);
- str->append("as signed)");
+ str->append(" as signed)", 11);
}
void Item_func_unsigned::print(String *str)
{
- str->append("cast(");
+ str->append("cast(", 5);
args[0]->print(str);
- str->append("as unsigned)");
+ str->append(" as unsigned)", 13);
}
@@ -1202,6 +1208,21 @@ longlong Item_func_locate::val_int()
}
+void Item_func_locate::print(String *str)
+{
+ str->append("locate(", 7);
+ args[1]->print(str);
+ str->append(',');
+ args[0]->print(str);
+ if (arg_count == 3)
+ {
+ str->append(',');
+ args[2]->print(str);
+ }
+ str->append(')');
+}
+
+
longlong Item_func_field::val_int()
{
if (cmp_type == STRING_RESULT)
@@ -1782,7 +1803,7 @@ void item_user_lock_release(ULL *ull)
String tmp(buf,sizeof(buf), system_charset_info);
tmp.copy(command, strlen(command), tmp.charset());
tmp.append(ull->key,ull->key_length);
- tmp.append("\")");
+ tmp.append("\")", 2);
Query_log_event qev(current_thd, tmp.ptr(), tmp.length(),1);
qev.error_code=0; // this query is always safe to run on slave
mysql_bin_log.write(&qev);
@@ -2067,6 +2088,19 @@ longlong Item_func_benchmark::val_int()
}
+void Item_func_benchmark::print(String *str)
+{
+ str->append("benchmark(", 10);
+ char buffer[20];
+ // latin1 is good enough for numbers
+ String st(buffer, sizeof(buffer), &my_charset_latin1);
+ st.set((ulonglong)loop_count, &my_charset_latin1);
+ str->append(st);
+ str->append(',');
+ args[0]->print(str);
+ str->append(')');
+}
+
#define extra_size sizeof(double)
static user_var_entry *get_variable(HASH *hash, LEX_STRING &name,
@@ -2405,9 +2439,9 @@ String *Item_func_set_user_var::val_str(String *str)
void Item_func_set_user_var::print(String *str)
{
- str->append("(@@",3);
- str->append(name.str,name.length);
- str->append(":=",2);
+ str->append("(@", 2);
+ str->append(name.str, name.length);
+ str->append(":=", 2);
args[0]->print(str);
str->append(')');
}
@@ -2553,7 +2587,7 @@ enum Item_result Item_func_get_user_var::result_type() const
void Item_func_get_user_var::print(String *str)
{
- str->append('@');
+ str->append("(@", 2);
str->append(name.str,name.length);
str->append(')');
}
@@ -2840,7 +2874,7 @@ double Item_func_match::val()
void Item_func_match::print(String *str)
{
- str->append("(match ");
+ str->append("(match ", 7);
List_iterator_fast<Item> li(fields);
Item *item;
bool first= 1;
@@ -2852,11 +2886,11 @@ void Item_func_match::print(String *str)
str->append(',');
item->print(str);
}
- str->append(" against (");
+ str->append(" against (", 10);
args[0]->print(str);
if (mode == FT_BOOL)
- str->append(" in boolean mode");
- str->append("))");
+ str->append(" in boolean mode", 16);
+ str->append("))", 2);
}
longlong Item_func_bit_xor::val_int()
diff --git a/sql/item_func.h b/sql/item_func.h
index 541ced0f1ba..235b1ea18f2 100644
--- a/sql/item_func.h
+++ b/sql/item_func.h
@@ -124,6 +124,7 @@ public:
virtual void split_sum_func(Item **ref_pointer_array, List<Item> &fields);
void print(String *str);
void print_op(String *str);
+ void print_args(String *str);
void fix_num_length_and_dec();
inline bool get_arg0_date(TIME *ltime,bool fuzzy_date)
{
@@ -608,6 +609,7 @@ public:
const char *func_name() const { return "locate"; }
longlong val_int();
void fix_length_and_dec();
+ void print(String *str);
};
@@ -733,6 +735,7 @@ class Item_func_benchmark :public Item_int_func
longlong val_int();
const char *func_name() const { return "benchmark"; }
void fix_length_and_dec() { max_length=1; maybe_null=0; }
+ void print(String *str);
};
@@ -1056,7 +1059,7 @@ class Item_func_is_free_lock :public Item_int_func
public:
Item_func_is_free_lock(Item *a) :Item_int_func(a) {}
longlong val_int();
- const char *func_name() const { return "check_lock"; }
+ const char *func_name() const { return "is_free_lock"; }
void fix_length_and_dec() { decimals=0; max_length=1; maybe_null=1;}
};
diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc
index 5afd52e3738..70f98783624 100644
--- a/sql/item_strfunc.cc
+++ b/sql/item_strfunc.cc
@@ -654,6 +654,17 @@ void Item_func_concat_ws::update_used_tables()
const_item_cache&=separator->const_item();
}
+void Item_func_concat_ws::print(String *str)
+{
+ str->append("concat_ws(", 10);
+ separator->print(str);
+ if (arg_count)
+ {
+ str->append(',');
+ print_args(str);
+ }
+ str->append(')');
+}
String *Item_func_reverse::val_str(String *str)
{
@@ -1613,6 +1624,19 @@ String *Item_func_format::val_str(String *str)
}
+void Item_func_format::print(String *str)
+{
+ str->append("format(", 7);
+ args[0]->print(str);
+ str->append(',');
+ // latin1 is good enough for numbers
+ char buffer[20];
+ String st(buffer, sizeof(buffer), &my_charset_latin1);
+ st.set((ulonglong)decimals, &my_charset_latin1);
+ str->append(st);
+ str->append(')');
+}
+
void Item_func_elt::fix_length_and_dec()
{
max_length=0;
@@ -1764,6 +1788,19 @@ String *Item_func_make_set::val_str(String *str)
}
+void Item_func_make_set::print(String *str)
+{
+ str->append("make_set(", 9);
+ item->print(str);
+ if (arg_count)
+ {
+ str->append(',');
+ print_args(str);
+ }
+ str->append(')');
+}
+
+
String *Item_func_char::val_str(String *str)
{
str->length(0);
@@ -2077,7 +2114,14 @@ void Item_func_conv_charset::fix_length_and_dec()
max_length = args[0]->max_length*conv_charset->mbmaxlen;
}
-
+void Item_func_conv_charset::print(String *str)
+{
+ str->append("convert(", 8);
+ args[0]->print(str);
+ str->append(" using ", 7);
+ str->append(conv_charset->csname);
+ str->append(')');
+}
String *Item_func_conv_charset3::val_str(String *str)
{
@@ -2273,9 +2317,9 @@ String *Item_func_hex::val_str(String *str)
void Item_func_binary::print(String *str)
{
- str->append("cast(");
+ str->append("cast(", 5);
args[0]->print(str);
- str->append("as binary)");
+ str->append(" as binary)", 11);
}
diff --git a/sql/item_strfunc.h b/sql/item_strfunc.h
index 51dff0fbaf2..00b1ebb0732 100644
--- a/sql/item_strfunc.h
+++ b/sql/item_strfunc.h
@@ -112,6 +112,7 @@ public:
return separator->walk(processor, arg) ||
Item_str_func::walk(processor, arg);
}
+ void print(String *str);
};
class Item_func_reverse :public Item_str_func
@@ -426,6 +427,7 @@ public:
return item->walk(processor, arg) ||
Item_str_func::walk(processor, arg);
}
+ void print(String *str);
};
@@ -441,6 +443,7 @@ public:
max_length=args[0]->max_length+(args[0]->max_length-args[0]->decimals)/3;
}
const char *func_name() const { return "format"; }
+ void print(String *);
};
@@ -602,7 +605,8 @@ public:
{ conv_charset=cs; }
String *val_str(String *);
void fix_length_and_dec();
- const char *func_name() const { return "conv_charset"; }
+ const char *func_name() const { return "convert"; }
+ void print(String *str);
};
class Item_func_set_collation :public Item_str_func
@@ -612,7 +616,8 @@ public:
String *val_str(String *);
void fix_length_and_dec();
bool eq(const Item *item, bool binary_cmp) const;
- const char *func_name() const { return "set_collation"; }
+ const char *func_name() const { return "collate"; }
+ void print(String *str) { print_op(str); }
};
class Item_func_conv_charset3 :public Item_str_func
@@ -622,7 +627,7 @@ public:
:Item_str_func(arg1,arg2,arg3) {}
String *val_str(String *);
void fix_length_and_dec();
- const char *func_name() const { return "conv_charset3"; }
+ const char *func_name() const { return "convert"; }
};
class Item_func_charset :public Item_str_func
diff --git a/sql/item_subselect.cc b/sql/item_subselect.cc
index 5105323be22..ae44647b11c 100644
--- a/sql/item_subselect.cc
+++ b/sql/item_subselect.cc
@@ -219,7 +219,7 @@ Item_maxmin_subselect::Item_maxmin_subselect(Item_subselect *parent,
void Item_maxmin_subselect::print(String *str)
{
- str->append(max?"<max>":"<min>");
+ str->append(max?"<max>":"<min>", 5);
Item_singlerow_subselect::print(str);
}
@@ -403,7 +403,7 @@ Item_exists_subselect::Item_exists_subselect(st_select_lex *select_lex):
void Item_exists_subselect::print(String *str)
{
- str->append("exists");
+ str->append("exists", 6);
Item_subselect::print(str);
}
@@ -841,11 +841,11 @@ Item_in_subselect::select_transformer(JOIN *join)
void Item_in_subselect::print(String *str)
{
if (transformed)
- str->append("<exists>");
+ str->append("<exists>", 8);
else
{
left_expr->print(str);
- str->append(" in ");
+ str->append(" in ", 4);
}
Item_subselect::print(str);
}
@@ -864,7 +864,7 @@ Item_allany_subselect::select_transformer(JOIN *join)
void Item_allany_subselect::print(String *str)
{
if (transformed)
- str->append("<exists>");
+ str->append("<exists>", 8);
else
{
left_expr->print(str);
@@ -872,22 +872,22 @@ void Item_allany_subselect::print(String *str)
if (all)
{
if (func == &Item_bool_func2::lt_creator)
- str->append(">=");
+ str->append(">=", 2);
else if (func == &Item_bool_func2::gt_creator)
- str->append("<=");
+ str->append("<=", 2);
else if (func == &Item_bool_func2::le_creator)
str->append('>');
else if (func == &Item_bool_func2::ge_creator)
str->append('<');
else if (func == &Item_bool_func2::eq_creator)
- str->append("<>");
+ str->append("<>", 2);
else if (func == &Item_bool_func2::ne_creator)
str->append('=');
else
{
DBUG_ASSERT(0); // Impossible
}
- str->append(" all ");
+ str->append(" all ", 5);
}
else
{
@@ -896,18 +896,18 @@ void Item_allany_subselect::print(String *str)
else if (func == &Item_bool_func2::gt_creator)
str->append('>');
else if (func == &Item_bool_func2::le_creator)
- str->append("<=");
+ str->append("<=", 2);
else if (func == &Item_bool_func2::ge_creator)
- str->append(">=");
+ str->append(">=", 2);
else if (func == &Item_bool_func2::eq_creator)
str->append('=');
else if (func == &Item_bool_func2::ne_creator)
- str->append("<>");
+ str->append("<>", 2);
else
{
DBUG_ASSERT(0); // Impossible
}
- str->append(" any ");
+ str->append(" any ", 5);
}
}
Item_subselect::print(str);
@@ -1330,16 +1330,16 @@ void subselect_union_engine::print(String *str)
void subselect_uniquesubquery_engine::print(String *str)
{
- str->append("<primary_index_lookup>(");
+ str->append("<primary_index_lookup>(", 23);
tab->ref.items[0]->print(str);
- str->append(" in ");
+ str->append(" in ", 4);
str->append(tab->table->real_name);
KEY *key_info= tab->table->key_info+ tab->ref.key;
- str->append(" on ");
+ str->append(" on ", 4);
str->append(key_info->name);
if (cond)
{
- str->append(" where ");
+ str->append(" where ", 7);
cond->print(str);
}
str->append(')');
@@ -1348,18 +1348,18 @@ void subselect_uniquesubquery_engine::print(String *str)
void subselect_indexsubquery_engine::print(String *str)
{
- str->append("<index_lookup>(");
+ str->append("<index_lookup>(", 15);
tab->ref.items[0]->print(str);
- str->append(" in ");
+ str->append(" in ", 4);
str->append(tab->table->real_name);
KEY *key_info= tab->table->key_info+ tab->ref.key;
- str->append(" on ");
+ str->append(" on ", 4);
str->append(key_info->name);
if (check_null)
- str->append(" chicking NULL");
+ str->append(" chicking NULL", 14);
if (cond)
{
- str->append(" where ");
+ str->append(" where ", 7);
cond->print(str);
}
str->append(')');
diff --git a/sql/item_sum.cc b/sql/item_sum.cc
index 1a5df9e8ccc..e5f88156c2d 100644
--- a/sql/item_sum.cc
+++ b/sql/item_sum.cc
@@ -1369,7 +1369,7 @@ longlong Item_sum_count_distinct::val_int()
void Item_sum_count_distinct::print(String *str)
{
- str->append("count(distinct ");
+ str->append("count(distinct ", 15);
args[0]->print(str);
str->append(')');
}
@@ -1971,9 +1971,9 @@ String* Item_func_group_concat::val_str(String* str)
void Item_func_group_concat::print(String *str)
{
- str->append("group concat(");
+ str->append("group_concat(", 13);
if (distinct)
- str->append(" distinct ");
+ str->append("distinct ", 9);
for (uint i= 0; i < arg_count; i++)
{
if (i)
@@ -1982,6 +1982,7 @@ void Item_func_group_concat::print(String *str)
}
if (arg_count_order)
{
+ str->append(" order by ", 10);
for (uint i= 0 ; i < arg_count_order ; i++)
{
if (i)
@@ -1989,7 +1990,7 @@ void Item_func_group_concat::print(String *str)
(*order[i]->item)->print(str);
}
}
- str->append(" seperator \'");
+ str->append(" seperator \'", 12);
str->append(*separator);
- str->append("\')");
+ str->append("\')", 2);
}
diff --git a/sql/item_timefunc.cc b/sql/item_timefunc.cc
index a8c8f9bcf7f..4f1d6c5d63e 100644
--- a/sql/item_timefunc.cc
+++ b/sql/item_timefunc.cc
@@ -433,7 +433,7 @@ String *make_datetime(String *str, TIME *l_time,
length= int10_to_str(l_time->day, intbuff, 10) - intbuff;
str->append_with_prefill(intbuff, length, 1, '0');
if (l_time->day >= 10 && l_time->day <= 19)
- str->append("th");
+ str->append("th", 2);
else
{
switch (l_time->day %10) {
@@ -531,7 +531,7 @@ String *make_datetime(String *str, TIME *l_time,
str->append_with_prefill(intbuff, length, 2, '0');
if (add_second_frac)
{
- str->append(".", 1);
+ str->append('.');
length= int10_to_str(l_time->second_part, intbuff, 10) - intbuff;
str->append_with_prefill(intbuff, length, 6, '0');
}
@@ -1660,15 +1660,16 @@ void Item_date_add_interval::print(String *str)
args[0]->print(str);
str->append(date_sub_interval?" - interval ":" + interval ");
args[1]->print(str);
+ str->append(' ');
str->append(interval_names[int_type]);
str->append(')');
}
void Item_extract::print(String *str)
{
- str->append("extract(");
+ str->append("extract(", 8);
str->append(interval_names[int_type]);
- str->append(' ');
+ str->append(" from ", 6);
args[0]->print(str);
str->append(')');
}
@@ -1780,29 +1781,31 @@ bool Item_extract::eq(const Item *item, bool binary_cmp) const
void Item_typecast::print(String *str)
{
- str->append("cast(");
+ str->append("cast(", 5);
args[0]->print(str);
- str->append(" as ");
+ str->append(" as ", 4);
str->append(cast_type());
str->append(')');
}
void Item_char_typecast::print(String *str)
{
- str->append("cast(");
+ str->append("cast(", 5);
args[0]->print(str);
- str->append(" as char");
+ str->append(" as char", 8);
if (cast_length >= 0)
{
str->append('(');
- char buff[10];
- snprintf(buff, 10, "%d", cast_length);
- str->append(buff);
+ char buffer[20];
+ // latin1 is good enough for numbers
+ String st(buffer, sizeof(buffer), &my_charset_latin1);
+ st.set((ulonglong)cast_length, &my_charset_latin1);
+ str->append(st);
str->append(')');
}
if (cast_cs)
{
- str->append(" charset ");
+ str->append(" charset ", 9);
str->append(cast_cs->name);
}
str->append(')');
@@ -2095,14 +2098,14 @@ void Item_func_add_time::print(String *str)
if (is_date)
{
DBUG_ASSERT(sign > 0);
- str->append("timestamp(");
+ str->append("timestamp(", 10);
}
else
{
if (sign > 0)
- str->append("addtime(");
+ str->append("addtime(", 8);
else
- str->append("subtime(");
+ str->append("subtime(", 8);
}
args[0]->print(str);
str->append(',');
diff --git a/sql/item_timefunc.h b/sql/item_timefunc.h
index ea1e51614c7..af71322ff0c 100644
--- a/sql/item_timefunc.h
+++ b/sql/item_timefunc.h
@@ -285,7 +285,7 @@ public:
Item_func_unix_timestamp() :Item_int_func() {}
Item_func_unix_timestamp(Item *a) :Item_int_func(a) {}
longlong val_int();
- const char *func_name() const { return "timestamp"; }
+ const char *func_name() const { return "unix_timestamp"; }
void fix_length_and_dec()
{
decimals=0;
diff --git a/sql/item_uniq.h b/sql/item_uniq.h
index 2101fc4e45a..5c6f6eefb6b 100644
--- a/sql/item_uniq.h
+++ b/sql/item_uniq.h
@@ -29,7 +29,7 @@ public:
:Item_real_func(list) {}
double val() { return 0.0; }
void fix_length_and_dec() { decimals=0; max_length=6; }
- void print(String *str) { str->append("0.0"); }
+ void print(String *str) { str->append("0.0", 3); }
};
@@ -55,5 +55,5 @@ public:
{
return new Item_sum_unique_users(thd, *this);
}
- void print(String *str) { str->append("0.0"); }
+ void print(String *str) { str->append("0.0", 3); }
};
diff --git a/sql/key.cc b/sql/key.cc
index 37ef6339f20..639b1e535a6 100644
--- a/sql/key.cc
+++ b/sql/key.cc
@@ -227,7 +227,7 @@ void key_unpack(String *to,TABLE *table,uint idx)
{
if (table->record[0][key_part->null_offset] & key_part->null_bit)
{
- to->append("NULL");
+ to->append("NULL", 4);
continue;
}
}
@@ -239,7 +239,7 @@ void key_unpack(String *to,TABLE *table,uint idx)
to->append(tmp);
}
else
- to->append("???");
+ to->append("???", 3);
}
DBUG_VOID_RETURN;
}
diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc
index ee0743d531e..d47bd2170a2 100644
--- a/sql/sql_lex.cc
+++ b/sql/sql_lex.cc
@@ -1477,9 +1477,9 @@ void st_select_lex_unit::print(String *str)
{
if (sl != first_select())
{
- str->append(" union ");
+ str->append(" union ", 7);
if (union_option & UNION_ALL)
- str->append("all ");
+ str->append("all ", 4);
}
if (sl->braces)
str->append('(');
@@ -1491,7 +1491,7 @@ void st_select_lex_unit::print(String *str)
{
if (fake_select_lex->order_list.elements)
{
- str->append(" order by ");
+ str->append(" order by ", 10);
fake_select_lex->print_order(str,
(ORDER *) fake_select_lex->
order_list.first);
@@ -1507,7 +1507,7 @@ void st_select_lex::print_order(String *str, ORDER *order)
{
(*order->item)->print(str);
if (!order->asc)
- str->append(" desc");
+ str->append(" desc", 5);
if (order->next)
str->append(',');
}
@@ -1522,15 +1522,17 @@ void st_select_lex::print_limit(THD *thd, String *str)
select_limit != HA_POS_ERROR ||
offset_limit != 0L)
{
- str->append(" limit ");
- char buff[21];
- snprintf(buff, 21, "%ld", select_limit);
- str->append(buff);
+ str->append(" limit ", 7);
+ char buff[20];
+ // latin1 is good enough for numbers
+ String st(buff, sizeof(buff), &my_charset_latin1);
+ st.set((ulonglong)select_limit, &my_charset_latin1);
+ str->append(st);
if (offset_limit)
{
str->append(',');
- snprintf(buff, 21, "%ld", offset_limit);
- str->append(buff);
+ st.set((ulonglong)select_limit, &my_charset_latin1);
+ str->append(st);
}
}
}
diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc
index 270a249073d..525df80bc71 100644
--- a/sql/sql_parse.cc
+++ b/sql/sql_parse.cc
@@ -4741,7 +4741,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);
+ new Item_allany_subselect(left_expr, (*cmp)(all), select_lex, all);
if (all)
return it->upper_not= new Item_func_not_all(it); /* ALL */
diff --git a/sql/sql_repl.cc b/sql/sql_repl.cc
index 5db3be7599b..ecad84ba0cb 100644
--- a/sql/sql_repl.cc
+++ b/sql/sql_repl.cc
@@ -625,7 +625,7 @@ Increase max_allowed_packet on master";
goto err;
}
packet->length(0);
- packet->append("\0",1);
+ packet->append('\0');
}
}
diff --git a/sql/sql_select.cc b/sql/sql_select.cc
index 278839442e3..cfc7b2824ee 100644
--- a/sql/sql_select.cc
+++ b/sql/sql_select.cc
@@ -8948,28 +8948,28 @@ void st_select_lex::print(THD *thd, String *str)
if (!thd)
thd= current_thd;
- str->append("select ");
+ str->append("select ", 7);
//options
if (options & SELECT_STRAIGHT_JOIN)
- str->append("straight_join ");
+ str->append("straight_join ", 14);
if ((thd->lex.lock_option & TL_READ_HIGH_PRIORITY) &&
(this == &thd->lex.select_lex))
- str->append("high_priority ");
+ str->append("high_priority ", 14);
if (options & SELECT_DISTINCT)
- str->append("distinct ");
+ str->append("distinct ", 9);
if (options & SELECT_SMALL_RESULT)
- str->append("small_result ");
+ str->append("small_result ", 13);
if (options & SELECT_BIG_RESULT)
- str->append("big_result ");
+ str->append("big_result ", 11);
if (options & OPTION_BUFFER_RESULT)
- str->append("buffer_result ");
+ str->append("buffer_result ", 14);
if (options & OPTION_FOUND_ROWS)
- str->append("calc_found_rows ");
+ str->append("calc_found_rows ", 16);
if (!thd->lex.safe_to_cache_query)
- str->append("no_cache ");
+ str->append("no_cache ", 9);
if (options & OPTION_TO_QUERY_CACHE)
- str->append("cache ");
+ str->append("cache ", 6);
//Item List
bool first= 1;
@@ -8990,7 +8990,7 @@ void st_select_lex::print(THD *thd, String *str)
*/
if (table_list.elements)
{
- str->append(" from ");
+ str->append(" from ", 6);
Item *next_on= 0;
for (TABLE_LIST *table= (TABLE_LIST *) table_list.first;
table;
@@ -9021,7 +9021,7 @@ void st_select_lex::print(THD *thd, String *str)
if (next_on)
{
- str->append(" on(");
+ str->append(" on(", 4);
next_on->print(str);
str->append(')');
next_on= 0;
@@ -9032,17 +9032,17 @@ void st_select_lex::print(THD *thd, String *str)
{
if (table->outer_join & JOIN_TYPE_RIGHT)
{
- str->append(" right join ");
+ str->append(" right join ", 12);
if (!(table->outer_join & JOIN_TYPE_LEFT) &&
table->on_expr)
next_on= table->on_expr;
}
else if (next->straight)
- str->append(" straight_join ");
+ str->append(" straight_join ", 15);
else if (next->outer_join & JOIN_TYPE_LEFT)
- str->append(" left join ");
+ str->append(" left join ", 11);
else
- str->append(" join ");
+ str->append(" join ", 6);
}
}
}
@@ -9053,22 +9053,22 @@ void st_select_lex::print(THD *thd, String *str)
where= join->conds;
if (where)
{
- str->append(" where ");
+ str->append(" where ", 7);
where->print(str);
}
//group by & olap
if (group_list.elements)
{
- str->append(" group by ");
+ str->append(" group by ", 10);
print_order(str, (ORDER *) group_list.first);
switch (olap)
{
case CUBE_TYPE:
- str->append(" with cube");
+ str->append(" with cube", 10);
break;
case ROLLUP_TYPE:
- str->append(" with rollup");
+ str->append(" with rollup", 12);
break;
default:
; //satisfy compiler
@@ -9082,13 +9082,13 @@ void st_select_lex::print(THD *thd, String *str)
if (having)
{
- str->append(" having ");
+ str->append(" having ", 8);
having->print(str);
}
if (order_list.elements)
{
- str->append(" order by ");
+ str->append(" order by ", 10);
print_order(str, (ORDER *) order_list.first);
}
diff --git a/sql/sql_show.cc b/sql/sql_show.cc
index c667824224e..f4826fafff4 100644
--- a/sql/sql_show.cc
+++ b/sql/sql_show.cc
@@ -1111,12 +1111,12 @@ store_create_info(THD *thd, TABLE *table, String *packet)
if (field->has_charset())
{
if (field->charset() == &my_charset_bin)
- packet->append(" binary");
+ packet->append(" binary", 7);
else if (!limited_mysql_mode && !foreign_db_mode)
{
if (field->charset() != table->table_charset)
{
- packet->append(" character set ");
+ packet->append(" character set ", 15);
packet->append(field->charset()->csname);
}
/*
@@ -1253,32 +1253,32 @@ store_create_info(THD *thd, TABLE *table, String *packet)
!(thd->variables.sql_mode & MODE_MYSQL323) &&
!(thd->variables.sql_mode & MODE_MYSQL40))
{
- packet->append(" CHARSET=");
+ packet->append(" CHARSET=", 9);
packet->append(table->table_charset->csname);
if (!(table->table_charset->state & MY_CS_PRIMARY))
{
- packet->append(" COLLATE=");
+ packet->append(" COLLATE=", 9);
packet->append(table->table_charset->name);
}
}
if (table->min_rows)
{
- packet->append(" MIN_ROWS=");
+ packet->append(" MIN_ROWS=", 10);
end= longlong10_to_str(table->min_rows, buff, 10);
packet->append(buff, (uint) (end- buff));
}
if (table->max_rows)
{
- packet->append(" MAX_ROWS=");
+ packet->append(" MAX_ROWS=", 10);
end= longlong10_to_str(table->max_rows, buff, 10);
packet->append(buff, (uint) (end - buff));
}
if (table->avg_row_length)
{
- packet->append(" AVG_ROW_LENGTH=");
+ packet->append(" AVG_ROW_LENGTH=", 16);
end= longlong10_to_str(table->avg_row_length, buff,10);
packet->append(buff, (uint) (end - buff));
}