mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Merge mysql.com:/home/gluh/MySQL/Merge/5.1
into mysql.com:/home/gluh/MySQL/Merge/5.1-opt
This commit is contained in:
@ -2361,6 +2361,27 @@ insert into t1 values (0xfffffffffffffffff, 0xfffffffffffffffff),
|
||||
select hex(a), hex(b) from t1;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Bug #32103: optimizer crash when join on int and mediumint with variable in
|
||||
# where clause
|
||||
#
|
||||
|
||||
CREATE TABLE t1 (c0 int);
|
||||
CREATE TABLE t2 (c0 int);
|
||||
|
||||
# We need any variable that:
|
||||
# 1. has integer type,
|
||||
# 2. can be used with the "@@name" syntax
|
||||
# 3. available in every server build
|
||||
INSERT INTO t1 VALUES(@@connect_timeout);
|
||||
INSERT INTO t2 VALUES(@@connect_timeout);
|
||||
|
||||
# We only need to ensure 1 row is returned to validate the results
|
||||
--replace_column 1 X 2 X
|
||||
SELECT * FROM t1 JOIN t2 ON t1.c0 = t2.c0 WHERE (t1.c0 <=> @@connect_timeout);
|
||||
|
||||
DROP TABLE t1, t2;
|
||||
|
||||
--echo End of 4.1 tests
|
||||
|
||||
#
|
||||
@ -2743,14 +2764,14 @@ create table t1(f1 int, f2 date);
|
||||
insert into t1 values(1,'2005-01-01'),(2,'2005-09-01'),(3,'2005-09-30'),
|
||||
(4,'2005-10-01'),(5,'2005-12-30');
|
||||
# should return all records
|
||||
select * from t1 where f2 >= 0;
|
||||
select * from t1 where f2 >= '0000-00-00';
|
||||
select * from t1 where f2 >= 0 order by f2;
|
||||
select * from t1 where f2 >= '0000-00-00' order by f2;
|
||||
# should return 4,5
|
||||
select * from t1 where f2 >= '2005-09-31';
|
||||
select * from t1 where f2 >= '2005-09-3a';
|
||||
select * from t1 where f2 >= '2005-09-31' order by f2;
|
||||
select * from t1 where f2 >= '2005-09-3a' order by f2;
|
||||
# should return 1,2,3
|
||||
select * from t1 where f2 <= '2005-09-31';
|
||||
select * from t1 where f2 <= '2005-09-3a';
|
||||
select * from t1 where f2 <= '2005-09-31' order by f2;
|
||||
select * from t1 where f2 <= '2005-09-3a' order by f2;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
@ -3455,24 +3476,129 @@ DROP TABLE t1;
|
||||
#
|
||||
|
||||
--disable_ps_protocol
|
||||
|
||||
SELECT 1 AS ` `;
|
||||
SELECT 1 AS ` `;
|
||||
SELECT 1 AS ` x`;
|
||||
|
||||
CREATE VIEW v1 AS SELECT 1 AS ` `;
|
||||
SELECT `` FROM v1;
|
||||
|
||||
CREATE VIEW v2 AS SELECT 1 AS ` `;
|
||||
SELECT `` FROM v2;
|
||||
|
||||
CREATE VIEW v3 AS SELECT 1 AS ` x`;
|
||||
SELECT `x` FROM v3;
|
||||
|
||||
DROP VIEW v1, v2, v3;
|
||||
|
||||
--enable_ps_protocol
|
||||
|
||||
--error 1166
|
||||
CREATE VIEW v1 AS SELECT 1 AS ``;
|
||||
|
||||
--error 1166
|
||||
CREATE VIEW v1 AS SELECT 1 AS ` `;
|
||||
|
||||
--error 1166
|
||||
CREATE VIEW v1 AS SELECT 1 AS ` `;
|
||||
|
||||
--error 1166
|
||||
CREATE VIEW v1 AS SELECT (SELECT 1 AS ` `);
|
||||
|
||||
--error 1166
|
||||
ALTER VIEW v1 AS SELECT 1 AS ` `;
|
||||
|
||||
DROP VIEW v1;
|
||||
|
||||
#
|
||||
# Bug#31800: Date comparison fails with timezone and slashes for greater
|
||||
# than comparison
|
||||
#
|
||||
|
||||
# On DATETIME-like literals with trailing garbage, BETWEEN fudged in a
|
||||
# DATETIME comparator, while greater/less-than used bin-string comparisons.
|
||||
# Should correctly be compared as DATE or DATETIME, but throw a warning:
|
||||
|
||||
select str_to_date('2007-10-09','%Y-%m-%d') between '2007/10/01 00:00:00 GMT'
|
||||
and '2007/10/20 00:00:00 GMT';
|
||||
select str_to_date('2007-10-09','%Y-%m-%d') > '2007/10/01 00:00:00 GMT-6';
|
||||
select str_to_date('2007-10-09','%Y-%m-%d') <= '2007/10/2000:00:00 GMT-6';
|
||||
|
||||
# We have all we need -- and trailing garbage:
|
||||
# (leaving out a leading zero in first example to prove it's a
|
||||
# value-comparison, not a string-comparison!)
|
||||
select str_to_date('2007-10-01','%Y-%m-%d') = '2007-10-1 00:00:00 GMT-6';
|
||||
select str_to_date('2007-10-01','%Y-%m-%d') = '2007-10-01 x00:00:00 GMT-6';
|
||||
select str_to_date('2007-10-01','%Y-%m-%d %H:%i:%s') = '2007-10-01 00:00:00 GMT-6';
|
||||
select str_to_date('2007-10-01','%Y-%m-%d %H:%i:%s') = '2007-10-01 00:x00:00 GMT-6';
|
||||
# no time at all:
|
||||
select str_to_date('2007-10-01','%Y-%m-%d %H:%i:%s') = '2007-10-01 x12:34:56 GMT-6';
|
||||
# partial time:
|
||||
select str_to_date('2007-10-01 12:34:00','%Y-%m-%d %H:%i:%s') = '2007-10-01 12:34x:56 GMT-6';
|
||||
# fail, different second part:
|
||||
select str_to_date('2007-10-01 12:34:56','%Y-%m-%d %H:%i:%s') = '2007-10-01 12:34x:56 GMT-6';
|
||||
# correct syntax, no trailing nonsense -- this one must throw no warning:
|
||||
select str_to_date('2007-10-01 12:34:56','%Y-%m-%d %H:%i:%s') = '2007-10-01 12:34:56';
|
||||
# no warning, but failure (different hour parts):
|
||||
select str_to_date('2007-10-01','%Y-%m-%d') = '2007-10-01 12:00:00';
|
||||
# succeed:
|
||||
select str_to_date('2007-10-01 12','%Y-%m-%d %H') = '2007-10-01 12:00:00';
|
||||
# succeed, but warn for "trailing garbage" (":34"):
|
||||
select str_to_date('2007-10-01 12:34','%Y-%m-%d %H') = '2007-10-01 12:00:00';
|
||||
# invalid date (Feb 30) succeeds
|
||||
select str_to_date('2007-02-30 12:34','%Y-%m-%d %H:%i') = '2007-02-30 12:34';
|
||||
# 0-day for both, just works in default SQL mode.
|
||||
select str_to_date('2007-10-00 12:34','%Y-%m-%d %H:%i') = '2007-10-00 12:34';
|
||||
# 0-day, succeed
|
||||
select str_to_date('2007-10-00','%Y-%m-%d') between '2007/09/01 00:00:00'
|
||||
and '2007/10/20 00:00:00';
|
||||
set SQL_MODE=TRADITIONAL;
|
||||
# 0-day throws warning in traditional mode, and fails
|
||||
select str_to_date('2007-10-00 12:34','%Y-%m-%d %H:%i') = '2007-10-00 12:34';
|
||||
select str_to_date('2007-10-01 12:34','%Y-%m-%d %H:%i') = '2007-10-00 12:34';
|
||||
# different code-path: get_datetime_value() with 0-day
|
||||
select str_to_date('2007-10-00 12:34','%Y-%m-%d %H:%i') = '2007-10-01 12:34';
|
||||
select str_to_date('2007-10-00','%Y-%m-%d') between '2007/09/01'
|
||||
and '2007/10/20';
|
||||
set SQL_MODE=DEFAULT;
|
||||
select str_to_date('2007-10-00','%Y-%m-%d') between '' and '2007/10/20';
|
||||
select str_to_date('','%Y-%m-%d') between '2007/10/01' and '2007/10/20';
|
||||
select str_to_date('','%Y-%m-%d %H:%i') = '2007-10-01 12:34';
|
||||
select str_to_date(NULL,'%Y-%m-%d %H:%i') = '2007-10-01 12:34';
|
||||
select str_to_date('2007-10-00 12:34','%Y-%m-%d %H:%i') = '';
|
||||
|
||||
select str_to_date('1','%Y-%m-%d') = '1';
|
||||
select str_to_date('1','%Y-%m-%d') = '1';
|
||||
select str_to_date('','%Y-%m-%d') = '';
|
||||
|
||||
# these three should work!
|
||||
select str_to_date('1000-01-01','%Y-%m-%d') between '0000-00-00' and NULL;
|
||||
select str_to_date('1000-01-01','%Y-%m-%d') between NULL and '2000-00-00';
|
||||
select str_to_date('1000-01-01','%Y-%m-%d') between NULL and NULL;
|
||||
|
||||
#
|
||||
# Bug #30666: Incorrect order when using range conditions on 2 tables or more
|
||||
#
|
||||
|
||||
CREATE TABLE t1 (c11 INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY);
|
||||
CREATE TABLE t2 (c21 INT UNSIGNED NOT NULL,
|
||||
c22 INT DEFAULT NULL,
|
||||
KEY(c21, c22));
|
||||
CREATE TABLE t3 (c31 INT UNSIGNED NOT NULL DEFAULT 0,
|
||||
c32 INT DEFAULT NULL,
|
||||
c33 INT NOT NULL,
|
||||
c34 INT UNSIGNED DEFAULT 0,
|
||||
KEY (c33, c34, c32));
|
||||
|
||||
INSERT INTO t1 values (),(),(),(),();
|
||||
INSERT INTO t2 SELECT a.c11, b.c11 FROM t1 a, t1 b;
|
||||
INSERT INTO t3 VALUES (1, 1, 1, 0),
|
||||
(2, 2, 0, 0),
|
||||
(3, 3, 1, 0),
|
||||
(4, 4, 0, 0),
|
||||
(5, 5, 1, 0);
|
||||
|
||||
# Show that ORDER BY produces the correct results order
|
||||
SELECT c32 FROM t1, t2, t3 WHERE t1.c11 IN (1, 3, 5) AND
|
||||
t3.c31 = t1.c11 AND t2.c21 = t1.c11 AND
|
||||
t3.c33 = 1 AND t2.c22 in (1, 3)
|
||||
ORDER BY c32;
|
||||
|
||||
# Show that ORDER BY DESC produces the correct results order
|
||||
SELECT c32 FROM t1, t2, t3 WHERE t1.c11 IN (1, 3, 5) AND
|
||||
t3.c31 = t1.c11 AND t2.c21 = t1.c11 AND
|
||||
t3.c33 = 1 AND t2.c22 in (1, 3)
|
||||
ORDER BY c32 DESC;
|
||||
|
||||
DROP TABLE t1, t2, t3;
|
||||
###########################################################################
|
||||
|
||||
--echo
|
||||
|
Reference in New Issue
Block a user