CREATE TABLE t1()

in mysql-test/include/select.inc [3466:4117]


CREATE TABLE t1 (
  c1 int(11) NOT NULL AUTO_INCREMENT,
  c2 varchar(1000) DEFAULT NULL,
  c3 bigint(20) DEFAULT NULL,
  c4 bigint(20) DEFAULT NULL,
  PRIMARY KEY (c1)
) charset utf8mb4;

EXPLAIN EXTENDED 
SELECT  join_2.c1  
FROM 
	t1 AS join_0, 
	t1 AS join_1, 
	t1 AS join_2, 
	t1 AS join_3, 
	t1 AS join_4, 
	t1 AS join_5, 
	t1 AS join_6, 
	t1 AS join_7
WHERE 
	join_0.c1=join_1.c1  AND 
	join_1.c1=join_2.c1  AND 
	join_2.c1=join_3.c1  AND 
	join_3.c1=join_4.c1  AND 
	join_4.c1=join_5.c1  AND 
	join_5.c1=join_6.c1  AND 
	join_6.c1=join_7.c1 
         OR 
	join_0.c2 < '?'  AND 
	join_1.c2 < '?'  AND
	join_2.c2 > '?'  AND
	join_2.c2 < '!'  AND
	join_3.c2 > '?'  AND 
	join_4.c2 = '?'  AND 
	join_5.c2 <> '?' AND
	join_6.c2 <> '?' AND 
	join_7.c2 >= '?' AND
        join_0.c1=join_1.c1  AND 
	join_1.c1=join_2.c1  AND 
        join_2.c1=join_3.c1  AND
	join_3.c1=join_4.c1  AND 
	join_4.c1=join_5.c1  AND 
	join_5.c1=join_6.c1  AND 
	join_6.c1=join_7.c1
GROUP BY 
	join_3.c1,
	join_2.c1,
	join_7.c1,
	join_1.c1,
	join_0.c1;
	
SHOW WARNINGS;

DROP TABLE t1;

#
# Bug #27695: Misleading warning when declaring all space column names and
#             truncation of one-space column names to zero length names.
#

--disable_ps_protocol
SELECT 1 AS ` `;
SELECT 1 AS `  `;
SELECT 1 AS ` x`;
--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 `  `);

CREATE VIEW v1 AS SELECT 1 AS ` x`;
SELECT `x` FROM v1;

--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
--echo #
--echo # Bug#30736: Row Size Too Large Error Creating a Table and
--echo # Inserting Data.
--echo #

--disable_warnings
DROP TABLE IF EXISTS t1;
DROP TABLE IF EXISTS t2;
--enable_warnings

--echo

CREATE TABLE t1(
  c1 DECIMAL(10, 2),
  c2 FLOAT);

--echo

INSERT INTO t1 VALUES (0, 1), (2, 3), (4, 5);

--echo

CREATE TABLE t2(
  c3 DECIMAL(10, 2))
  SELECT
    c1 * c2 AS c3
  FROM t1;

--echo

SELECT * FROM t1;

--echo

SELECT * FROM t2;

--echo

DROP TABLE t1;
DROP TABLE t2;

--echo

###########################################################################

#
# Bug #32335: Error on BIGINT > NULL + 1 
#

CREATE TABLE t1 (c1 BIGINT NOT NULL);
INSERT INTO t1 (c1) VALUES (1);
SELECT * FROM t1 WHERE c1 > NULL + 1;
DROP TABLE t1;

--echo

###########################################################################

#
# Bug #33764: Wrong result with IN(), CONCAT() and implicit type conversion
#

CREATE TABLE t1 (a VARCHAR(10) NOT NULL PRIMARY KEY);
INSERT INTO t1 (a) VALUES ('foo0'), ('bar0'), ('baz0');
SELECT * FROM t1 WHERE a IN (CONCAT('foo', 0), 'bar');
DROP TABLE t1;

#
# Bug #32942 now() - interval '7200' second is NOT pre-calculated, causing "full table scan"
#

CREATE TABLE t1 (a INT, b INT);
CREATE TABLE t2 (a INT, c INT, KEY(a));

INSERT INTO t1 VALUES (1, 1), (2, 2);
INSERT INTO t2 VALUES (1, 1), (1, 2), (1, 3), (1, 4), (1, 5),
                      (2, 1), (2, 2), (2, 3), (2, 4), (2, 5),
                      (3, 1), (3, 2), (3, 3), (3, 4), (3, 5),
                      (4, 1), (4, 2), (4, 3), (4, 4), (4, 5);

FLUSH STATUS;
SELECT DISTINCT b FROM t1 LEFT JOIN t2 USING(a) WHERE c <= 3;
SHOW STATUS LIKE 'Handler_read%';
DROP TABLE t1, t2;

#
# Bug#40953 SELECT query throws "ERROR 1062 (23000): Duplicate entry..." error
#
CREATE TABLE t1 (f1 bigint(20) NOT NULL default '0',
                 f2 int(11) NOT NULL default '0',
                 f3 bigint(20) NOT NULL default '0',
                 f4 varchar(255) NOT NULL default '',
                 PRIMARY KEY (f1),
                 KEY key1 (f4),
                 KEY key2 (f2)) charset latin1;
CREATE TABLE t2 (f1 int(11) NOT NULL default '0',
                 f2 enum('A1','A2','A3') NOT NULL default 'A1',
                 f3 int(11) NOT NULL default '0',
                 PRIMARY KEY (f1),
                 KEY key1 (f3)) charset latin1;
CREATE TABLE t3 (f1 bigint(20) NOT NULL default '0',
                 f2 datetime NOT NULL default '1980-01-01 00:00:00',
                 PRIMARY KEY (f1)) charset latin1;

insert into t1 values (1, 1, 1, 'abc');
insert into t1 values (2, 1, 2, 'def');
insert into t1 values (3, 1, 2, 'def');
insert into t2 values (1, 'A1', 1);
insert into t3 values (1, '1980-01-01');

SELECT a.f3, cr.f4, count(*) count
FROM t2 a
STRAIGHT_JOIN t1 cr ON cr.f2 = a.f1
LEFT JOIN
(t1 cr2
  JOIN t3 ae2 ON cr2.f3 = ae2.f1
) ON a.f1 = cr2.f2 AND ae2.f2 < now() - INTERVAL 7 DAY AND
cr.f4 = cr2.f4
GROUP BY a.f3, cr.f4;

drop table t1, t2, t3;


#
# Bug #40925: Equality propagation takes non indexed attribute
#

CREATE TABLE t1 (a INT KEY, b INT);
INSERT INTO t1 VALUES (1,1), (2,2), (3,3), (4,4);

EXPLAIN EXTENDED SELECT a, b FROM t1 WHERE a > 1 AND a = b LIMIT 2;
EXPLAIN EXTENDED SELECT a, b FROM t1 WHERE a > 1 AND b = a LIMIT 2;

DROP TABLE t1;


--echo #
--echo # Bug#47019: Assertion failed: 0, file .\rt_mbr.c, line 138 when 
--echo # forcing a spatial index
--echo #
CREATE TABLE t1(a LINESTRING NOT NULL, SPATIAL KEY(a));
INSERT INTO t1 VALUES
  (ST_GEOMFROMTEXT('LINESTRING(-1 -1, 1 -1, -1 -1, -1 1, 1 1)')),
  (ST_GEOMFROMTEXT('LINESTRING(-1 -1, 1 -1, -1 -1, -1 1, 1 1)'));
EXPLAIN SELECT 1 FROM t1 NATURAL LEFT JOIN t1 AS t2;
SELECT 1 FROM t1 NATURAL LEFT JOIN t1 AS t2;
EXPLAIN SELECT 1 FROM t1 NATURAL LEFT JOIN t1 AS t2 FORCE INDEX(a);
SELECT 1 FROM t1 NATURAL LEFT JOIN t1 AS t2 FORCE INDEX(a);
DROP TABLE t1;


--echo #
--echo # Bug #48291 : crash with row() operator,select into @var, and 
--echo #   subquery returning multiple rows
--echo #

CREATE TABLE t1(a INT);
INSERT INTO t1 VALUES (2),(3);

--echo # Should not crash
--error ER_SUBQUERY_NO_1_ROW
SELECT 1 FROM t1 WHERE a <> 1 AND NOT
ROW(1,a) <=> ROW(1,(SELECT 1 FROM t1))
INTO @var0;

DROP TABLE t1;
 
--echo #
--echo # Bug #48458: simple query tries to allocate enormous amount of
--echo #   memory
--echo #
SET sql_mode = 'NO_ENGINE_SUBSTITUTION';
CREATE TABLE t1(a INT NOT NULL, b YEAR);
INSERT INTO t1 VALUES ();
CREATE TABLE t2(c INT);
--echo # Should not err out because of out-of-memory
SELECT 1 FROM t2 JOIN t1 ON 1=1
  WHERE a != '1' AND NOT a >= b OR NOT ROW(b,a )<> ROW(a,a);
DROP TABLE t1,t2;
SET sql_mode = default;

--echo #
--echo # Bug #49199: Optimizer handles incorrectly: 
--echo # field='const1' AND field='const2' in some cases
--echo
CREATE TABLE t1(a DATETIME NOT NULL);
INSERT INTO t1 VALUES('2001-01-01');
SELECT * FROM t1 WHERE a='2001-01-01' AND a='2001-01-01 00:00:00';
EXPLAIN EXTENDED SELECT * FROM t1 WHERE a='2001-01-01' AND a='2001-01-01 00:00:00';
DROP TABLE t1;

CREATE TABLE t1(a DATE NOT NULL);
INSERT INTO t1 VALUES('2001-01-01');
SELECT * FROM t1 WHERE a='2001-01-01' AND a='2001-01-01 00:00:00';
EXPLAIN EXTENDED SELECT * FROM t1 WHERE a='2001-01-01' AND a='2001-01-01 00:00:00';
DROP TABLE t1;

CREATE TABLE t1(a TIMESTAMP NOT NULL NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP);
INSERT INTO t1 VALUES('2001-01-01');
SELECT * FROM t1 WHERE a='2001-01-01' AND a='2001-01-01 00:00:00';
EXPLAIN EXTENDED SELECT * FROM t1 WHERE a='2001-01-01' AND a='2001-01-01 00:00:00';
DROP TABLE t1;

CREATE TABLE t1(a DATETIME NOT NULL, b DATE NOT NULL);
INSERT INTO t1 VALUES('2001-01-01', '2001-01-01');
SELECT * FROM t1 WHERE a='2001-01-01' AND a=b AND b='2001-01-01 00:00:00';
EXPLAIN EXTENDED SELECT * FROM t1 WHERE a='2001-01-01' AND a=b AND b='2001-01-01 00:00:00';
DROP TABLE t1;

CREATE TABLE t1(a DATETIME NOT NULL, b VARCHAR(20) NOT NULL) charset utf8mb4;
INSERT INTO t1 VALUES('2001-01-01', '2001-01-01');
SELECT * FROM t1 WHERE a='2001-01-01' AND a=b AND b='2001-01-01 00:00:00';
EXPLAIN EXTENDED SELECT * FROM t1 WHERE a='2001-01-01' AND a=b AND b='2001-01-01 00:00:00';

SELECT * FROM t1 WHERE a='2001-01-01 00:00:00' AND a=b AND b='2001-01-01';
EXPLAIN EXTENDED SELECT * FROM t1 WHERE a='2001-01-01 00:00:00' AND a=b AND b='2001-01-01';
DROP TABLE t1;

CREATE TABLE t1(a DATETIME NOT NULL, b DATE NOT NULL);
INSERT INTO t1 VALUES('2001-01-01', '2001-01-01');
SELECT x.a, y.a, z.a FROM t1 x 
  JOIN t1 y ON x.a=y.a 
  JOIN t1 z ON y.a=z.a 
  WHERE x.a='2001-01-01' AND z.a='2001-01-01 00:00:00';
EXPLAIN EXTENDED SELECT x.a, y.a, z.a FROM t1 x 
  JOIN t1 y ON x.a=y.a 
  JOIN t1 z ON y.a=z.a 
  WHERE x.a='2001-01-01' AND z.a='2001-01-01 00:00:00';
DROP TABLE t1;


--echo #
--echo # Bug #49897: crash in ptr_compare when char(0) NOT NULL 
--echo # column is used for ORDER BY
--echo #
SET @old_sort_buffer_size= @@session.sort_buffer_size;
SET @@sort_buffer_size= 40000;
SET sql_mode = 'NO_ENGINE_SUBSTITUTION';
CREATE TABLE t1(a CHAR(0) NOT NULL);
--disable_warnings
INSERT INTO t1 VALUES (0), (0), (0);
--enable_warnings
INSERT INTO t1 SELECT t11.a FROM t1 t11, t1 t12;
INSERT INTO t1 SELECT t11.a FROM t1 t11, t1 t12;
INSERT INTO t1 SELECT t11.a FROM t1 t11, t1 t12;
EXPLAIN SELECT a FROM t1 ORDER BY a;
--disable_result_log
SELECT a FROM t1 ORDER BY a;
--enable_result_log
DROP TABLE t1;

CREATE TABLE t1(a CHAR(0) NOT NULL, b CHAR(0) NOT NULL, c int);
--disable_warnings
INSERT INTO t1 VALUES (0, 0, 0), (0, 0, 2), (0, 0, 1);
--enable_warnings
INSERT INTO t1 SELECT t11.a, t11.b, t11.c FROM t1 t11, t1 t12;
INSERT INTO t1 SELECT t11.a, t11.b, t11.c FROM t1 t11, t1 t12;
INSERT INTO t1 SELECT t11.a, t11.b, t11.c FROM t1 t11, t1 t12;
EXPLAIN SELECT a FROM t1 ORDER BY a LIMIT 5;
SELECT a FROM t1 ORDER BY a LIMIT 5;
EXPLAIN SELECT * FROM t1 ORDER BY a, b LIMIT 5;
SELECT * FROM t1 ORDER BY a, b LIMIT 5;
EXPLAIN SELECT * FROM t1 ORDER BY a, b, c LIMIT 5;
SELECT * FROM t1 ORDER BY a, b, c LIMIT 5;
EXPLAIN SELECT * FROM t1 ORDER BY c, a LIMIT 5;
SELECT * FROM t1 ORDER BY c, a LIMIT 5;

SET @@sort_buffer_size= @old_sort_buffer_size;
DROP TABLE t1;
SET sql_mode = default;

--echo End of 5.0 tests

#
# Bug #30639: limit offset,rowcount wraps when rowcount >= 2^32 in windows
#
create table t1(a INT, KEY (a));
INSERT INTO t1 VALUES (1),(2),(3),(4),(5);
SELECT a FROM t1 ORDER BY a LIMIT 2;
SELECT a FROM t1 ORDER BY a LIMIT 2,4294967296;
SELECT a FROM t1 ORDER BY a LIMIT 2,4294967297;
DROP TABLE t1;

#
# Bug #37936: ASSERT_COLUMN_MARKED_FOR_WRITE in Field_datetime::store ,
# Field_varstring::store
#

CREATE TABLE A (date_key date);

CREATE TABLE C (
  pk int,
  int_nokey int,
  int_key int,
  date_key date NOT NULL,
  date_nokey date,
  varchar_key varchar(1)
);

INSERT IGNORE INTO C VALUES 
(1,1,1,'0000-00-00',NULL,NULL),
(1,1,1,'0000-00-00',NULL,NULL);

SELECT 1 FROM C WHERE pk > ANY (SELECT 1 FROM C);

SELECT COUNT(DISTINCT 1) FROM C 
  WHERE date_key = (SELECT 1 FROM A WHERE C.date_key IS NULL) GROUP BY pk; 
SELECT date_nokey FROM C 
  WHERE int_key IN (SELECT 1 FROM A) 
  HAVING date_nokey = '10:41:7' 
  ORDER BY date_key;

DROP TABLE A,C;

#
# Bug #42957: no results from 
# select where .. (col=col and col=col) or ... (false expression)
#
CREATE TABLE t1 (a INT NOT NULL, b INT);
INSERT INTO t1 VALUES (1, 1);
EXPLAIN EXTENDED SELECT * FROM t1 WHERE (a=a AND a=a) OR b > 2;
SELECT * FROM t1 WHERE (a=a AND a=a) OR b > 2;
DROP TABLE t1;

CREATE TABLE t1 (a INT NOT NULL, b INT NOT NULL, c INT NOT NULL);
EXPLAIN EXTENDED SELECT * FROM t1 WHERE (a=a AND b=b AND c=c) OR b > 20;
EXPLAIN EXTENDED SELECT * FROM t1 WHERE (a=a AND a=a AND b=b) OR b > 20;
EXPLAIN EXTENDED SELECT * FROM t1 WHERE (a=a AND b=b AND a=a) OR b > 20;
DROP TABLE t1;


--echo #
--echo # Bug#45266: Uninitialized variable lead to an empty result.
--echo #
--disable_warnings
drop table if exists A,AA,B,BB;
CREATE TABLE `A` (
  `pk` int(11) NOT NULL AUTO_INCREMENT,
  `date_key` date NOT NULL,
  `date_nokey` date NOT NULL,
  `datetime_key` datetime NOT NULL,
  `int_nokey` int(11) NOT NULL,
  `time_key` time NOT NULL,
  `time_nokey` time NOT NULL,
  PRIMARY KEY (`pk`),
  KEY `date_key` (`date_key`),
  KEY `time_key` (`time_key`),
  KEY `datetime_key` (`datetime_key`)
);

CREATE TABLE `AA` (
  `pk` int(11) NOT NULL AUTO_INCREMENT,
  `int_nokey` int(11) NOT NULL,
  `time_key` time NOT NULL,
  KEY `time_key` (`time_key`),
  PRIMARY KEY (`pk`)
);

CREATE TABLE `B` (
  `date_nokey` date NOT NULL,
  `date_key` date NOT NULL,
  `time_key` time NOT NULL,
  `datetime_nokey` datetime NOT NULL,
  `varchar_key` varchar(1) NOT NULL,
  KEY `date_key` (`date_key`),
  KEY `time_key` (`time_key`),
  KEY `varchar_key` (`varchar_key`)
);

INSERT IGNORE INTO `B` VALUES ('2003-07-28','2003-07-28','15:13:38','0000-00-00 00:00:00','f'),('0000-00-00','0000-00-00','00:05:48','2004-07-02 14:34:13','x');

CREATE TABLE `BB` (
  `pk` int(11) NOT NULL AUTO_INCREMENT,
  `int_nokey` int(11) NOT NULL,
  `date_key` date NOT NULL,
  `varchar_nokey` varchar(1) NOT NULL,
  `date_nokey` date NOT NULL,
  PRIMARY KEY (`pk`),
  KEY `date_key` (`date_key`)
);

INSERT IGNORE INTO `BB` VALUES (10,8,'0000-00-00','i','0000-00-00'),(11,0,'2005-08-18','','2005-08-18');
# Test #1
SELECT table1 . `pk` AS field1 
  FROM 
    (BB AS table1 INNER JOIN 
      (AA AS table2 STRAIGHT_JOIN A AS table3 
        ON ( table3 . `date_key` = table2 . `pk` ))
       ON ( table3 . `datetime_key` = table2 . `int_nokey` ))
  WHERE  ( table3 . `date_key` <= 4 AND table2 . `pk` = table1 . `varchar_nokey`)
  GROUP BY field1 ;

SELECT table3 .`date_key` field1
  FROM
    B table1 LEFT JOIN B table3 JOIN
      (BB table6 JOIN A table7 ON table6 .`varchar_nokey`)
       ON table6 .`int_nokey` ON table6 .`date_key`
  WHERE  NOT ( table1 .`varchar_key`  AND table7 .`pk`) GROUP  BY field1;

# Test #2
SELECT table4 . `time_nokey` AS field1 FROM 
  (AA AS table1 CROSS JOIN 
    (AA AS table2 STRAIGHT_JOIN 
      (B AS table3 STRAIGHT_JOIN A AS table4 
       ON ( table4 . `date_key` = table3 . `time_key` ))
     ON ( table4 . `pk` = table3 . `date_nokey` ))
   ON ( table4 . `time_key` = table3 . `datetime_nokey` ))
  WHERE  ( table4 . `time_key` < table1 . `time_key` AND
            table1 . `int_nokey` != 'f')
  GROUP BY field1  ORDER BY field1 , field1;

SELECT table1 .`time_key` field2  FROM B table1  LEFT JOIN  BB JOIN A table5 ON table5 .`date_nokey`  ON table5 .`int_nokey` GROUP  BY field2;
--enable_warnings

drop table A,AA,B,BB;
--echo #end of test for bug#45266

--echo #
--echo # Bug#33546: Slowdown on re-evaluation of constant expressions.
--echo #
CREATE TABLE t1 (a INT);
INSERT INTO t1 VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10);
CREATE TABLE t2 (b INT);
INSERT INTO t2 VALUES (2);
SELECT * FROM t1 WHERE a = 1 + 1;
EXPLAIN EXTENDED SELECT * FROM t1 WHERE a = 1 + 1;
SELECT * FROM t1 HAVING a = 1 + 1;
EXPLAIN EXTENDED SELECT * FROM t1 HAVING a = 1 + 1;
SELECT * FROM t1, t2 WHERE a = b + (1 + 1);
EXPLAIN EXTENDED SELECT * FROM t1, t2 WHERE a = b + (1 + 1);
SELECT * FROM t2 LEFT JOIN t1 ON a = b + 1;
EXPLAIN EXTENDED SELECT * FROM t2 LEFT JOIN t1 ON a = b + 1;
EXPLAIN EXTENDED SELECT * FROM t1 WHERE a > UNIX_TIMESTAMP('2009-03-10 00:00:00');

delimiter |;
CREATE FUNCTION f1() RETURNS INT DETERMINISTIC
BEGIN
  SET @cnt := @cnt + 1;
  RETURN 1;
END;|
delimiter ;|

SET @cnt := 0;
SELECT * FROM t1 WHERE a = f1();
SELECT @cnt;
EXPLAIN EXTENDED SELECT * FROM t1 WHERE a = f1();
DROP TABLE t1, t2;
DROP FUNCTION f1;
--echo # End of bug#33546

--echo # 
--echo # BUG#48052: Valgrind warning - uninitialized value in init_read_record()
--echo # 

--echo # Disable Index condition pushdown
--replace_column 1 #
SELECT @old_optimizer_switch:=@@optimizer_switch;
--disable_query_log
if (`select locate('index_condition_pushdown', @@optimizer_switch) > 0`) 
{
  set optimizer_switch='index_condition_pushdown=off';
}