Skip to content

Commit c108019

Browse files
author
Alexander Barkov
committed
MDEV-8747 Wrong result for SELECT..WHERE derived_table_column='a' AND derived_table_column<>_latin1'A' COLLATE latin1_bin
MDEV-8749 Wrong result for SELECT..WHERE derived_table_enum_column='number' AND derived_table_enum_column OP number
1 parent 3d9abaf commit c108019

File tree

11 files changed

+373
-138
lines changed

11 files changed

+373
-138
lines changed

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/view.result

Lines changed: 82 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4430,36 +4430,58 @@ CREATE TABLE t1 (a varchar(10), KEY (a)) ;
44304430
INSERT INTO t1 VALUES
44314431
('DD'), ('ZZ'), ('ZZ'), ('KK'), ('FF'), ('HH'),('MM');
44324432
CREATE VIEW v1 AS SELECT * FROM t1;
4433+
# t1 and v1 should return the same result set
44334434
SELECT * FROM v1 WHERE a > 'JJ' OR a <> 0 AND a = 'VV';
44344435
a
44354436
KK
44364437
MM
44374438
ZZ
44384439
ZZ
4439-
Warnings:
4440-
Warning 1292 Truncated incorrect DOUBLE value: 'VV'
4440+
SELECT * FROM t1 WHERE a > 'JJ' OR a <> 0 AND a = 'VV';
4441+
a
4442+
KK
4443+
MM
4444+
ZZ
4445+
ZZ
4446+
# t1 and v1 should propagate constants in the same way
44414447
EXPLAIN EXTENDED
44424448
SELECT * FROM v1 WHERE a > 'JJ' OR a <> 0 AND a = 'VV';
44434449
id select_type table type possible_keys key key_len ref rows filtered Extra
44444450
1 SIMPLE t1 range a a 13 NULL 4 100.00 Using where; Using index
44454451
Warnings:
4446-
Warning 1292 Truncated incorrect DOUBLE value: 'VV'
4447-
Note 1003 select `test`.`t1`.`a` AS `a` from `test`.`t1` where (`test`.`t1`.`a` > 'JJ')
4452+
Note 1003 select `test`.`t1`.`a` AS `a` from `test`.`t1` where ((`test`.`t1`.`a` > 'JJ') or ((`test`.`t1`.`a` = 'VV') and (`test`.`t1`.`a` <> 0)))
4453+
EXPLAIN EXTENDED
4454+
SELECT * FROM t1 WHERE a > 'JJ' OR a <> 0 AND a = 'VV';
4455+
id select_type table type possible_keys key key_len ref rows filtered Extra
4456+
1 SIMPLE t1 range a a 13 NULL 4 100.00 Using where; Using index
4457+
Warnings:
4458+
Note 1003 select `test`.`t1`.`a` AS `a` from `test`.`t1` where ((`test`.`t1`.`a` > 'JJ') or ((`test`.`t1`.`a` = 'VV') and (`test`.`t1`.`a` <> 0)))
4459+
# t1 and v1 should return the same result set
44484460
SELECT * FROM v1 WHERE a > 'JJ' OR a AND a = 'VV';
44494461
a
44504462
KK
44514463
MM
44524464
ZZ
44534465
ZZ
4454-
Warnings:
4455-
Warning 1292 Truncated incorrect DOUBLE value: 'VV'
4466+
SELECT * FROM t1 WHERE a > 'JJ' OR a AND a = 'VV';
4467+
a
4468+
KK
4469+
MM
4470+
ZZ
4471+
ZZ
4472+
# t1 and v1 should propagate constants in the same way
44564473
EXPLAIN EXTENDED
44574474
SELECT * FROM v1 WHERE a > 'JJ' OR a AND a = 'VV';
44584475
id select_type table type possible_keys key key_len ref rows filtered Extra
44594476
1 SIMPLE t1 range a a 13 NULL 4 100.00 Using where; Using index
44604477
Warnings:
4461-
Warning 1292 Truncated incorrect DOUBLE value: 'VV'
4462-
Note 1003 select `test`.`t1`.`a` AS `a` from `test`.`t1` where (`test`.`t1`.`a` > 'JJ')
4478+
Note 1003 select `test`.`t1`.`a` AS `a` from `test`.`t1` where ((`test`.`t1`.`a` > 'JJ') or ((`test`.`t1`.`a` = 'VV') and (`test`.`t1`.`a` <> 0)))
4479+
EXPLAIN EXTENDED
4480+
SELECT * FROM t1 WHERE a > 'JJ' OR a AND a = 'VV';
4481+
id select_type table type possible_keys key key_len ref rows filtered Extra
4482+
1 SIMPLE t1 range a a 13 NULL 4 100.00 Using where; Using index
4483+
Warnings:
4484+
Note 1003 select `test`.`t1`.`a` AS `a` from `test`.`t1` where ((`test`.`t1`.`a` > 'JJ') or ((`test`.`t1`.`a` = 'VV') and (`test`.`t1`.`a` <> 0)))
44634485
DROP VIEW v1;
44644486
DROP TABLE t1;
44654487
#
@@ -5571,3 +5593,55 @@ drop view v3;
55715593
# -- End of 10.0 tests.
55725594
# -----------------------------------------------------------------
55735595
SET optimizer_switch=@save_optimizer_switch;
5596+
#
5597+
# Start of 10.1 tests
5598+
#
5599+
#
5600+
# MDEV-8747 Wrong result for SELECT..WHERE derived_table_column='a' AND derived_table_column<>_latin1'A' COLLATE latin1_bin
5601+
#
5602+
CREATE TABLE t1 (a varchar(10) character set cp1251 collate cp1251_ukrainian_ci, KEY (a)) ;
5603+
INSERT INTO t1 VALUES ('DD'), ('ZZ'), ('ZZ'), ('KK'), ('FF'), ('HH'),('MM'),('`1');
5604+
CREATE VIEW v1 AS SELECT * FROM t1;
5605+
SELECT * FROM t1 WHERE a <> 0 AND a = ' 1';
5606+
a
5607+
SELECT * FROM v1 WHERE a <> 0 AND a = ' 1';
5608+
a
5609+
DROP VIEW v1;
5610+
DROP TABLE t1;
5611+
CREATE TABLE t1 (a ENUM('5','6'));
5612+
INSERT INTO t1 VALUES ('5'),('6');
5613+
CREATE VIEW v1 AS SELECT * FROM t1;
5614+
SELECT * FROM t1 WHERE a='5' AND a<2;
5615+
a
5616+
5
5617+
SELECT * FROM v1 WHERE a='5' AND a<2;
5618+
a
5619+
5
5620+
DROP VIEW v1;
5621+
DROP TABLE t1;
5622+
#
5623+
# MDEV-8749 Wrong result for SELECT..WHERE derived_table_enum_column='number' AND derived_table_enum_column OP number2
5624+
#
5625+
CREATE TABLE t1 (a varchar(10) character set cp1251 collate cp1251_ukrainian_ci, KEY (a));
5626+
INSERT INTO t1 VALUES ('DD'), ('ZZ'), ('ZZ'), ('KK'), ('FF'), ('HH'),('MM'),('`1');
5627+
CREATE VIEW v1 AS SELECT * FROM t1;
5628+
SELECT * FROM t1 WHERE a <> 0 AND a = ' 1';
5629+
a
5630+
SELECT * FROM v1 WHERE a <> 0 AND a = ' 1';
5631+
a
5632+
DROP VIEW v1;
5633+
DROP TABLE t1;
5634+
CREATE TABLE t1 (a ENUM('5','6'));
5635+
INSERT INTO t1 VALUES ('5'),('6');
5636+
CREATE VIEW v1 AS SELECT * FROM t1;
5637+
SELECT * FROM t1 WHERE a='5' AND a<2;
5638+
a
5639+
5
5640+
SELECT * FROM v1 WHERE a='5' AND a<2;
5641+
a
5642+
5
5643+
DROP VIEW v1;
5644+
DROP TABLE t1;
5645+
#
5646+
# End of 10.1 tests
5647+
#

mysql-test/t/derived.test

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -539,3 +539,37 @@ where coalesce(message,0) <> 0;
539539
drop table t1,t2;
540540

541541
set optimizer_switch=@save_derived_optimizer_switch;
542+
543+
--echo #
544+
--echo # Start of 10.1 tests
545+
--echo #
546+
547+
--echo #
548+
--echo # MDEV-8747 Wrong result for SELECT..WHERE derived_table_column='a' AND derived_table_column<>_latin1'A' COLLATE latin1_bin
549+
--echo #
550+
CREATE TABLE t1 (a VARCHAR(10));
551+
INSERT INTO t1 VALUES ('a'),('A');
552+
SELECT * FROM t1 WHERE a='a' AND a <> _latin1'A' COLLATE latin1_bin;
553+
SELECT * FROM (SELECT * FROM t1) AS table1 WHERE a='a' AND a <> _latin1'A' COLLATE latin1_bin;
554+
DROP TABLE t1;
555+
556+
CREATE TABLE t1 (a ENUM('5','6'));
557+
INSERT INTO t1 VALUES ('5'),('6');
558+
SELECT * FROM (SELECT * FROM t1) AS table1 WHERE a='5';
559+
SELECT * FROM (SELECT * FROM t1) AS table1 WHERE a=1;
560+
SELECT * FROM (SELECT * FROM t1) AS table1 WHERE a='5' AND a=1;
561+
DROP TABLE t1;
562+
563+
--echo #
564+
--echo # MDEV-8749 Wrong result for SELECT..WHERE derived_table_enum_column='number' AND derived_table_enum_column OP number2
565+
--echo #
566+
CREATE TABLE t1 (a ENUM('5','6'));
567+
INSERT INTO t1 VALUES ('5'),('6');
568+
SELECT * FROM (SELECT * FROM t1) AS table1 WHERE a='5';
569+
SELECT * FROM (SELECT * FROM t1) AS table1 WHERE a=1;
570+
SELECT * FROM (SELECT * FROM t1) AS table1 WHERE a='5' AND a=1;
571+
DROP TABLE t1;
572+
573+
--echo #
574+
--echo # End of 10.1 tests
575+
--echo #

mysql-test/t/view.test

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4318,13 +4318,23 @@ INSERT INTO t1 VALUES
43184318

43194319
CREATE VIEW v1 AS SELECT * FROM t1;
43204320

4321+
--echo # t1 and v1 should return the same result set
43214322
SELECT * FROM v1 WHERE a > 'JJ' OR a <> 0 AND a = 'VV';
4323+
SELECT * FROM t1 WHERE a > 'JJ' OR a <> 0 AND a = 'VV';
4324+
--echo # t1 and v1 should propagate constants in the same way
43224325
EXPLAIN EXTENDED
43234326
SELECT * FROM v1 WHERE a > 'JJ' OR a <> 0 AND a = 'VV';
4327+
EXPLAIN EXTENDED
4328+
SELECT * FROM t1 WHERE a > 'JJ' OR a <> 0 AND a = 'VV';
43244329

4330+
--echo # t1 and v1 should return the same result set
43254331
SELECT * FROM v1 WHERE a > 'JJ' OR a AND a = 'VV';
4332+
SELECT * FROM t1 WHERE a > 'JJ' OR a AND a = 'VV';
4333+
--echo # t1 and v1 should propagate constants in the same way
43264334
EXPLAIN EXTENDED
43274335
SELECT * FROM v1 WHERE a > 'JJ' OR a AND a = 'VV';
4336+
EXPLAIN EXTENDED
4337+
SELECT * FROM t1 WHERE a > 'JJ' OR a AND a = 'VV';
43284338

43294339
DROP VIEW v1;
43304340
DROP TABLE t1;
@@ -5450,3 +5460,49 @@ drop view v3;
54505460
--echo # -- End of 10.0 tests.
54515461
--echo # -----------------------------------------------------------------
54525462
SET optimizer_switch=@save_optimizer_switch;
5463+
5464+
--echo #
5465+
--echo # Start of 10.1 tests
5466+
--echo #
5467+
5468+
--echo #
5469+
--echo # MDEV-8747 Wrong result for SELECT..WHERE derived_table_column='a' AND derived_table_column<>_latin1'A' COLLATE latin1_bin
5470+
--echo #
5471+
CREATE TABLE t1 (a varchar(10) character set cp1251 collate cp1251_ukrainian_ci, KEY (a)) ;
5472+
INSERT INTO t1 VALUES ('DD'), ('ZZ'), ('ZZ'), ('KK'), ('FF'), ('HH'),('MM'),('`1');
5473+
CREATE VIEW v1 AS SELECT * FROM t1;
5474+
SELECT * FROM t1 WHERE a <> 0 AND a = ' 1';
5475+
SELECT * FROM v1 WHERE a <> 0 AND a = ' 1';
5476+
DROP VIEW v1;
5477+
DROP TABLE t1;
5478+
5479+
CREATE TABLE t1 (a ENUM('5','6'));
5480+
INSERT INTO t1 VALUES ('5'),('6');
5481+
CREATE VIEW v1 AS SELECT * FROM t1;
5482+
SELECT * FROM t1 WHERE a='5' AND a<2;
5483+
SELECT * FROM v1 WHERE a='5' AND a<2;
5484+
DROP VIEW v1;
5485+
DROP TABLE t1;
5486+
5487+
--echo #
5488+
--echo # MDEV-8749 Wrong result for SELECT..WHERE derived_table_enum_column='number' AND derived_table_enum_column OP number2
5489+
--echo #
5490+
CREATE TABLE t1 (a varchar(10) character set cp1251 collate cp1251_ukrainian_ci, KEY (a));
5491+
INSERT INTO t1 VALUES ('DD'), ('ZZ'), ('ZZ'), ('KK'), ('FF'), ('HH'),('MM'),('`1');
5492+
CREATE VIEW v1 AS SELECT * FROM t1;
5493+
SELECT * FROM t1 WHERE a <> 0 AND a = ' 1';
5494+
SELECT * FROM v1 WHERE a <> 0 AND a = ' 1';
5495+
DROP VIEW v1;
5496+
DROP TABLE t1;
5497+
5498+
CREATE TABLE t1 (a ENUM('5','6'));
5499+
INSERT INTO t1 VALUES ('5'),('6');
5500+
CREATE VIEW v1 AS SELECT * FROM t1;
5501+
SELECT * FROM t1 WHERE a='5' AND a<2;
5502+
SELECT * FROM v1 WHERE a='5' AND a<2;
5503+
DROP VIEW v1;
5504+
DROP TABLE t1;
5505+
5506+
--echo #
5507+
--echo # End of 10.1 tests
5508+
--echo #

0 commit comments

Comments
 (0)