Skip to content

Commit f8754d6

Browse files
committed
Merge branch '10.1' of https://github.com/MariaDB/server into ok-debpkg-10.1
2 parents d6c5e7e + 4257442 commit f8754d6

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+2197
-334
lines changed

include/mysql.h.pp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@
100100
enum Item_result
101101
{
102102
STRING_RESULT=0, REAL_RESULT, INT_RESULT, ROW_RESULT, DECIMAL_RESULT,
103-
TIME_RESULT,IMPOSSIBLE_RESULT
103+
TIME_RESULT
104104
};
105105
typedef struct st_udf_args
106106
{

include/mysql_com.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -547,7 +547,7 @@ struct my_rnd_struct;
547547
enum Item_result
548548
{
549549
STRING_RESULT=0, REAL_RESULT, INT_RESULT, ROW_RESULT, DECIMAL_RESULT,
550-
TIME_RESULT,IMPOSSIBLE_RESULT
550+
TIME_RESULT
551551
};
552552

553553
typedef struct st_udf_args
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
2+
# Trailing garbage in string literals
3+
--eval CREATE TABLE t1 (a $TYPE);
4+
INSERT INTO t1 VALUES ('2001-01-01 00:00:00'),('2001-01-01 00:00:01');
5+
SELECT * FROM t1 WHERE a='2001-01-01 00:00:00x';
6+
SELECT * FROM t1 WHERE LENGTH(a) != 20;
7+
SELECT * FROM t1 WHERE LENGTH(a) != 20 AND a='2001-01-01 00:00:00x';
8+
EXPLAIN EXTENDED
9+
SELECT * FROM t1 WHERE LENGTH(a) != 20 AND a='2001-01-01 00:00:00x';
10+
EXPLAIN EXTENDED
11+
SELECT * FROM t1 WHERE LENGTH(a)!=30+RAND() AND a='2001-01-01 00:00:00x';
12+
DROP TABLE t1;
13+
14+
# Leading spaces in string literals
15+
--eval CREATE TABLE t1 (a $TYPE);
16+
INSERT INTO t1 VALUES ('2001-01-01 00:00:00'),('2001-01-01 00:00:01');
17+
SELECT * FROM t1 WHERE LENGTH(a)=19;
18+
SELECT * FROM t1 WHERE LENGTH(a)=19 AND a=' 2001-01-01 00:00:00';
19+
EXPLAIN EXTENDED
20+
SELECT * FROM t1 WHERE LENGTH(a)=19 AND a=' 2001-01-01 00:00:00';
21+
EXPLAIN EXTENDED
22+
SELECT * FROM t1 WHERE LENGTH(a)=19+RAND() AND a=' 2001-01-01 00:00:00';
23+
# This should not propagate
24+
EXPLAIN EXTENDED
25+
SELECT * FROM t1 WHERE LENGTH(a)=30+RAND() AND a=' garbage ';
26+
DROP TABLE t1;
27+
28+
# Trailing fractional digits in temporal literals
29+
--eval CREATE TABLE t1 (a $TYPE);
30+
INSERT INTO t1 VALUES ('2001-01-01 00:00:00'),('2001-01-01 00:00:01');
31+
SELECT * FROM t1 WHERE a=TIMESTAMP'2001-01-01 00:00:00.000000';
32+
SELECT * FROM t1 WHERE LENGTH(a)=19;
33+
SELECT * FROM t1 WHERE LENGTH(a)=19 AND a=TIMESTAMP'2001-01-01 00:00:00.000000';
34+
EXPLAIN EXTENDED
35+
SELECT * FROM t1 WHERE LENGTH(a)=19 AND a=TIMESTAMP'2001-01-01 00:00:00.000000';
36+
EXPLAIN EXTENDED
37+
SELECT * FROM t1 WHERE LENGTH(a)=30+RAND() AND a=TIMESTAMP'2001-01-01 00:00:00.000000';
38+
DROP TABLE t1;
39+
40+
# Trailing fractional digits in temporal literals, the same precision
41+
--eval CREATE TABLE t1 (a $TYPE(6));
42+
INSERT INTO t1 VALUES ('2001-01-01 00:00:00.000000'),('2001-01-01 00:00:01.000000');
43+
SELECT * FROM t1 WHERE a=TIMESTAMP'2001-01-01 00:00:00.000000';
44+
SELECT * FROM t1 WHERE LENGTH(a)=26;
45+
SELECT * FROM t1 WHERE LENGTH(a)=26 AND a=TIMESTAMP'2001-01-01 00:00:00.000000';
46+
EXPLAIN EXTENDED
47+
SELECT * FROM t1 WHERE LENGTH(a)=26 AND a=TIMESTAMP'2001-01-01 00:00:00.000000';
48+
EXPLAIN EXTENDED
49+
SELECT * FROM t1 WHERE LENGTH(a)=40+RAND() AND a=TIMESTAMP'2001-01-01 00:00:00.000000';
50+
DROP TABLE t1;
51+
52+
# DATETIME/TIMESTAMP column vs TIME literal
53+
SET timestamp=UNIX_TIMESTAMP('2001-01-01 10:20:30');
54+
--eval CREATE TABLE t1 (a $TYPE);
55+
INSERT INTO t1 VALUES ('2001-01-01 00:00:00'),('2001-01-01 00:00:01');
56+
SELECT * FROM t1 WHERE a=TIME'00:00:00';
57+
SELECT * FROM t1 WHERE LENGTH(a)=19;
58+
SELECT * FROM t1 WHERE LENGTH(a)=19 AND a=TIME'00:00:00';
59+
EXPLAIN EXTENDED
60+
SELECT * FROM t1 WHERE LENGTH(a)=19 AND a=TIME'00:00:00';
61+
EXPLAIN EXTENDED
62+
SELECT * FROM t1 WHERE LENGTH(a)=40+RAND() AND a=TIME'00:00:00';
63+
DROP TABLE t1;
64+

mysql-test/r/case.result

Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,3 +231,138 @@ case t1.f1 when '00:00:00' then 1 end
231231
1
232232
NULL
233233
drop table t1;
234+
#
235+
# Start of 10.1 test
236+
#
237+
#
238+
# MDEV-8752 Wrong result for SELECT..WHERE CASE enum_field WHEN 1 THEN 1 ELSE 0 END AND a='5'
239+
#
240+
CREATE TABLE t1 (a ENUM('5','6') CHARACTER SET BINARY);
241+
INSERT INTO t1 VALUES ('5'),('6');
242+
SELECT * FROM t1 WHERE a='5';
243+
a
244+
5
245+
SELECT * FROM t1 WHERE a=1;
246+
a
247+
5
248+
SELECT * FROM t1 WHERE CASE a WHEN 1 THEN 1 ELSE 0 END;
249+
a
250+
5
251+
SELECT * FROM t1 WHERE CASE a WHEN 1 THEN 1 ELSE 0 END AND a='5';
252+
a
253+
5
254+
# Multiple comparison types in CASE, not Ok to propagate
255+
EXPLAIN EXTENDED
256+
SELECT * FROM t1 WHERE CASE a WHEN 1 THEN 1 ELSE 0 END AND a='5';
257+
id select_type table type possible_keys key key_len ref rows filtered Extra
258+
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
259+
Warnings:
260+
Note 1003 select `test`.`t1`.`a` AS `a` from `test`.`t1` where ((`test`.`t1`.`a` = '5') and (case `test`.`t1`.`a` when 1 then 1 else 0 end))
261+
DROP TABLE t1;
262+
CREATE TABLE t1 (a ENUM('a','b','100'));
263+
INSERT INTO t1 VALUES ('a'),('b'),('100');
264+
SELECT * FROM t1 WHERE a='a';
265+
a
266+
a
267+
SELECT * FROM t1 WHERE CASE a WHEN 'a' THEN 1 ELSE 0 END;
268+
a
269+
a
270+
SELECT * FROM t1 WHERE CASE a WHEN 'a' THEN 1 ELSE 0 END AND a='a';
271+
a
272+
a
273+
# String comparison in CASE and in the equality, ok to propagate
274+
EXPLAIN EXTENDED
275+
SELECT * FROM t1 WHERE CASE a WHEN 'a' THEN 1 ELSE 0 END AND a='a';
276+
id select_type table type possible_keys key key_len ref rows filtered Extra
277+
1 SIMPLE t1 ALL NULL NULL NULL NULL 3 100.00 Using where
278+
Warnings:
279+
Note 1003 select `test`.`t1`.`a` AS `a` from `test`.`t1` where (`test`.`t1`.`a` = 'a')
280+
SELECT * FROM t1 WHERE a=3;
281+
a
282+
100
283+
SELECT * FROM t1 WHERE CASE a WHEN 3 THEN 1 ELSE 0 END;
284+
a
285+
100
286+
SELECT * FROM t1 WHERE CASE a WHEN 3 THEN 1 ELSE 0 END AND a=3;
287+
a
288+
100
289+
# Integer comparison in CASE and in the equality, not ok to propagate
290+
# ENUM does not support this type of propagation yet.
291+
# This can change in the future. See MDEV-8748.
292+
EXPLAIN EXTENDED
293+
SELECT * FROM t1 WHERE CASE a WHEN 3 THEN 1 ELSE 0 END AND a=3;
294+
id select_type table type possible_keys key key_len ref rows filtered Extra
295+
1 SIMPLE t1 ALL NULL NULL NULL NULL 3 100.00 Using where
296+
Warnings:
297+
Note 1003 select `test`.`t1`.`a` AS `a` from `test`.`t1` where ((case `test`.`t1`.`a` when 3 then 1 else 0 end) and (`test`.`t1`.`a` = 3))
298+
SELECT * FROM t1 WHERE a=3;
299+
a
300+
100
301+
SELECT * FROM t1 WHERE CASE a WHEN '100' THEN 1 ELSE 0 END;
302+
a
303+
100
304+
SELECT * FROM t1 WHERE CASE a WHEN '100' THEN 1 ELSE 0 END AND a=3;
305+
a
306+
100
307+
# String comparison in CASE, integer comparison in the equality, not Ok to propagate
308+
EXPLAIN EXTENDED
309+
SELECT * FROM t1 WHERE CASE a WHEN '100' THEN 1 ELSE 0 END AND a=3;
310+
id select_type table type possible_keys key key_len ref rows filtered Extra
311+
1 SIMPLE t1 ALL NULL NULL NULL NULL 3 100.00 Using where
312+
Warnings:
313+
Note 1003 select `test`.`t1`.`a` AS `a` from `test`.`t1` where ((case `test`.`t1`.`a` when '100' then 1 else 0 end) and (`test`.`t1`.`a` = 3))
314+
SELECT * FROM t1 WHERE a='100';
315+
a
316+
100
317+
SELECT * FROM t1 WHERE CASE a WHEN 3 THEN 1 ELSE 0 END;
318+
a
319+
100
320+
SELECT * FROM t1 WHERE CASE a WHEN 3 THEN 1 ELSE 0 END AND a='100';
321+
a
322+
100
323+
# Integer comparison in CASE, string comparison in the equality, not Ok to propagate
324+
EXPLAIN EXTENDED
325+
SELECT * FROM t1 WHERE CASE a WHEN 3 THEN 1 ELSE 0 END AND a='100';
326+
id select_type table type possible_keys key key_len ref rows filtered Extra
327+
1 SIMPLE t1 ALL NULL NULL NULL NULL 3 100.00 Using where
328+
Warnings:
329+
Note 1003 select `test`.`t1`.`a` AS `a` from `test`.`t1` where ((`test`.`t1`.`a` = '100') and (case `test`.`t1`.`a` when 3 then 1 else 0 end))
330+
SELECT * FROM t1 WHERE a='100';
331+
a
332+
100
333+
SELECT * FROM t1 WHERE CASE a WHEN 3 THEN 1 WHEN '100' THEN 1 ELSE 0 END;
334+
a
335+
100
336+
SELECT * FROM t1 WHERE CASE a WHEN 3 THEN 1 WHEN '100' THEN 1 ELSE 0 END AND a='100';
337+
a
338+
100
339+
# Multiple type comparison in CASE, string comparison in the equality, not Ok to propagate
340+
EXPLAIN EXTENDED
341+
SELECT * FROM t1 WHERE CASE a WHEN 3 THEN 1 WHEN '100' THEN 1 ELSE 0 END AND a='100';
342+
id select_type table type possible_keys key key_len ref rows filtered Extra
343+
1 SIMPLE t1 ALL NULL NULL NULL NULL 3 100.00 Using where
344+
Warnings:
345+
Note 1003 select `test`.`t1`.`a` AS `a` from `test`.`t1` where ((`test`.`t1`.`a` = '100') and (case `test`.`t1`.`a` when 3 then 1 when '100' then 1 else 0 end))
346+
SELECT * FROM t1 WHERE a=3;
347+
a
348+
100
349+
SELECT * FROM t1 WHERE CASE a WHEN 3 THEN 1 WHEN '100' THEN 1 ELSE 0 END;
350+
a
351+
100
352+
SELECT * FROM t1 WHERE CASE a WHEN 3 THEN 1 WHEN '100' THEN 1 ELSE 0 END AND a=3;
353+
a
354+
100
355+
# Multiple type comparison in CASE, integer comparison in the equality, not Ok to propagate
356+
EXPLAIN EXTENDED
357+
SELECT * FROM t1 WHERE CASE a WHEN 3 THEN 1 WHEN '100' THEN 1 ELSE 0 END AND a=3;
358+
id select_type table type possible_keys key key_len ref rows filtered Extra
359+
1 SIMPLE t1 ALL NULL NULL NULL NULL 3 100.00 Using where
360+
Warnings:
361+
Note 1003 select `test`.`t1`.`a` AS `a` from `test`.`t1` where ((case `test`.`t1`.`a` when 3 then 1 when '100' then 1 else 0 end) and (`test`.`t1`.`a` = 3))
362+
DROP TABLE t1;
363+
#
364+
# End of MDEV-8752
365+
#
366+
#
367+
# End of 10.1 test
368+
#

mysql-test/r/derived.result

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -604,3 +604,48 @@ where coalesce(message,0) <> 0;
604604
id message
605605
drop table t1,t2;
606606
set optimizer_switch=@save_derived_optimizer_switch;
607+
#
608+
# Start of 10.1 tests
609+
#
610+
#
611+
# MDEV-8747 Wrong result for SELECT..WHERE derived_table_column='a' AND derived_table_column<>_latin1'A' COLLATE latin1_bin
612+
#
613+
CREATE TABLE t1 (a VARCHAR(10));
614+
INSERT INTO t1 VALUES ('a'),('A');
615+
SELECT * FROM t1 WHERE a='a' AND a <> _latin1'A' COLLATE latin1_bin;
616+
a
617+
a
618+
SELECT * FROM (SELECT * FROM t1) AS table1 WHERE a='a' AND a <> _latin1'A' COLLATE latin1_bin;
619+
a
620+
a
621+
DROP TABLE t1;
622+
CREATE TABLE t1 (a ENUM('5','6'));
623+
INSERT INTO t1 VALUES ('5'),('6');
624+
SELECT * FROM (SELECT * FROM t1) AS table1 WHERE a='5';
625+
a
626+
5
627+
SELECT * FROM (SELECT * FROM t1) AS table1 WHERE a=1;
628+
a
629+
5
630+
SELECT * FROM (SELECT * FROM t1) AS table1 WHERE a='5' AND a=1;
631+
a
632+
5
633+
DROP TABLE t1;
634+
#
635+
# MDEV-8749 Wrong result for SELECT..WHERE derived_table_enum_column='number' AND derived_table_enum_column OP number2
636+
#
637+
CREATE TABLE t1 (a ENUM('5','6'));
638+
INSERT INTO t1 VALUES ('5'),('6');
639+
SELECT * FROM (SELECT * FROM t1) AS table1 WHERE a='5';
640+
a
641+
5
642+
SELECT * FROM (SELECT * FROM t1) AS table1 WHERE a=1;
643+
a
644+
5
645+
SELECT * FROM (SELECT * FROM t1) AS table1 WHERE a='5' AND a=1;
646+
a
647+
5
648+
DROP TABLE t1;
649+
#
650+
# End of 10.1 tests
651+
#

mysql-test/r/group_by.result

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2289,20 +2289,16 @@ field1 field2
22892289
2004-10-11 18:13:00 1
22902290
2009-02-19 02:05:00 5
22912291
Warnings:
2292-
Warning 1292 Truncated incorrect DOUBLE value: 'x'
22932292
Warning 1292 Truncated incorrect DOUBLE value: 'g'
22942293
Warning 1292 Truncated incorrect DOUBLE value: 'o'
2295-
Warning 1292 Truncated incorrect DOUBLE value: 'g'
22962294
Warning 1292 Truncated incorrect DOUBLE value: 'v'
22972295
SELECT alias2.f3 AS field1 , alias2.f1 AS field2 FROM t1 AS alias1 JOIN t1 AS alias2 ON alias2.f1 = alias1.f2 AND alias2.f1 != alias1.f4 GROUP BY field1 , field2 ;
22982296
field1 field2
22992297
2004-10-11 18:13:00 1
23002298
2009-02-19 02:05:00 5
23012299
Warnings:
2302-
Warning 1292 Truncated incorrect DOUBLE value: 'x'
23032300
Warning 1292 Truncated incorrect DOUBLE value: 'g'
23042301
Warning 1292 Truncated incorrect DOUBLE value: 'o'
2305-
Warning 1292 Truncated incorrect DOUBLE value: 'g'
23062302
Warning 1292 Truncated incorrect DOUBLE value: 'v'
23072303
SET SESSION SQL_MODE=default;
23082304
drop table t1;

mysql-test/r/mysqlbinlog_row_big.result

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,6 @@ FLUSH LOGS;
9797
# Cleanup.
9898
#
9999
# reset variable value to pass testcase checks
100-
SET @@global.max_allowed_packet = 1048576;
100+
SET @@global.max_allowed_packet = 4194304;
101101
DROP TABLE t1;
102102
remove_file $MYSQLTEST_VARDIR/tmp/mysqlbinlog_big_1.out

mysql-test/r/type_date.result

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -513,3 +513,86 @@ DROP TABLE t1;
513513
#
514514
# End of 10.1 tests
515515
#
516+
#
517+
# Start of 10.1 tests
518+
#
519+
#
520+
# MDEV-8699 Wrong result for SELECT..WHERE HEX(date_column)!='323030312D30312D3031' AND date_column='2001-01-01x'
521+
#
522+
CREATE TABLE t1 (a DATE);
523+
INSERT INTO t1 VALUES ('2001-01-01'),('2001-01-02');
524+
SELECT * FROM t1 WHERE a='2001-01-01x';
525+
a
526+
2001-01-01
527+
Warnings:
528+
Warning 1292 Truncated incorrect date value: '2001-01-01x'
529+
SELECT * FROM t1 WHERE HEX(a)!='323030312D30312D3031';
530+
a
531+
2001-01-02
532+
SELECT * FROM t1 WHERE HEX(a)!='323030312D30312D3031' AND a='2001-01-01x';
533+
a
534+
Warnings:
535+
Warning 1292 Truncated incorrect date value: '2001-01-01x'
536+
EXPLAIN EXTENDED
537+
SELECT * FROM t1 WHERE HEX(a)!='323030312D30312D3031' AND a='2001-01-01x';
538+
id select_type table type possible_keys key key_len ref rows filtered Extra
539+
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL Impossible WHERE
540+
Warnings:
541+
Warning 1292 Truncated incorrect date value: '2001-01-01x'
542+
Note 1003 select `test`.`t1`.`a` AS `a` from `test`.`t1` where 0
543+
EXPLAIN EXTENDED
544+
SELECT * FROM t1 WHERE HEX(a)!=CONCAT('xx',RAND()) AND a='2001-01-01x';
545+
id select_type table type possible_keys key key_len ref rows filtered Extra
546+
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
547+
Warnings:
548+
Warning 1292 Truncated incorrect date value: '2001-01-01x'
549+
Note 1003 select `test`.`t1`.`a` AS `a` from `test`.`t1` where ((`test`.`t1`.`a` = '2001-01-01x') and (<cache>(hex(DATE'2001-01-01')) <> concat('xx',rand())))
550+
DROP TABLE t1;
551+
CREATE TABLE t1 (a DATE);
552+
INSERT INTO t1 VALUES ('2001-01-01'),('2001-01-02');
553+
SELECT * FROM t1 WHERE LENGTH(a)=11;
554+
a
555+
SELECT * FROM t1 WHERE LENGTH(a)=11 AND a=' 2001-01-01';
556+
a
557+
EXPLAIN EXTENDED
558+
SELECT * FROM t1 WHERE LENGTH(a)=11 AND a=' 2001-01-01';
559+
id select_type table type possible_keys key key_len ref rows filtered Extra
560+
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL Impossible WHERE
561+
Warnings:
562+
Note 1003 select `test`.`t1`.`a` AS `a` from `test`.`t1` where 0
563+
EXPLAIN EXTENDED
564+
SELECT * FROM t1 WHERE LENGTH(a)=11+RAND() AND a=' 2001-01-01';
565+
id select_type table type possible_keys key key_len ref rows filtered Extra
566+
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
567+
Warnings:
568+
Note 1003 select `test`.`t1`.`a` AS `a` from `test`.`t1` where ((`test`.`t1`.`a` = ' 2001-01-01') and (<cache>(length(DATE'2001-01-01')) = (11 + rand())))
569+
EXPLAIN EXTENDED
570+
SELECT * FROM t1 WHERE LENGTH(a)=11+RAND() AND a=' garbage ';
571+
id select_type table type possible_keys key key_len ref rows filtered Extra
572+
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
573+
Warnings:
574+
Warning 1292 Incorrect datetime value: ' garbage '
575+
Note 1003 select `test`.`t1`.`a` AS `a` from `test`.`t1` where ((`test`.`t1`.`a` = ' garbage ') and (length(`test`.`t1`.`a`) = (11 + rand())))
576+
DROP TABLE t1;
577+
CREATE TABLE t1 (a DATE);
578+
INSERT INTO t1 VALUES ('2001-01-01'),('2001-01-01');
579+
SELECT * FROM t1 WHERE LENGTH(a)=8;
580+
a
581+
SELECT * FROM t1 WHERE LENGTH(a)=8 AND a='20010101';
582+
a
583+
EXPLAIN EXTENDED
584+
SELECT * FROM t1 WHERE LENGTH(a)=8 AND a='20010101';
585+
id select_type table type possible_keys key key_len ref rows filtered Extra
586+
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL Impossible WHERE
587+
Warnings:
588+
Note 1003 select `test`.`t1`.`a` AS `a` from `test`.`t1` where 0
589+
EXPLAIN EXTENDED
590+
SELECT * FROM t1 WHERE LENGTH(a)=8+RAND() AND a='20010101';
591+
id select_type table type possible_keys key key_len ref rows filtered Extra
592+
1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where
593+
Warnings:
594+
Note 1003 select `test`.`t1`.`a` AS `a` from `test`.`t1` where ((`test`.`t1`.`a` = '20010101') and (<cache>(length(DATE'2001-01-01')) = (8 + rand())))
595+
DROP TABLE t1;
596+
#
597+
# End of 10.1 tests
598+
#

0 commit comments

Comments
 (0)