--disable_warnings
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11;
DROP DATABASE IF EXISTS world;
--enable_warnings

set @save_optimizer_switch=@@optimizer_switch;
set @@optimizer_switch='optimize_join_buffer_size=on';
set optimizer_switch='semijoin=on,firstmatch=on,loosescan=on';
set @@optimizer_switch='semijoin_with_cache=on';
set @@optimizer_switch='outer_join_with_cache=on';
set optimizer_switch='mrr=on,mrr_sort_keys=on,index_condition_pushdown=on';

set @local_join_cache_test_optimizer_switch_default=@@optimizer_switch;
set names utf8;

CREATE DATABASE world;

use world;

--source include/world_schema1.inc

--disable_query_log
--disable_result_log
--disable_warnings
--source include/world.inc
--enable_warnings
--enable_result_log
--enable_query_log

SELECT COUNT(*) FROM Country;
SELECT COUNT(*) FROM City;
SELECT COUNT(*) FROM CountryLanguage;

show variables like 'join_buffer_size';

set join_cache_level=1;

show variables like 'join_cache_level';

EXPLAIN
SELECT City.Name, Country.Name FROM City,Country
  WHERE City.Country=Country.Code AND 
        Country.Name LIKE 'L%' AND City.Population > 100000;

SELECT City.Name, Country.Name FROM City,Country
  WHERE City.Country=Country.Code AND 
        Country.Name LIKE 'L%' AND City.Population > 100000;

EXPLAIN
SELECT City.Name, Country.Name, CountryLanguage.Language
  FROM City,Country,CountryLanguage
  WHERE City.Country=Country.Code AND
        CountryLanguage.Country=Country.Code AND
        City.Name LIKE 'L%' AND Country.Population > 3000000 AND
        CountryLanguage.Percentage > 50 AND
        LENGTH(Language) < LENGTH(City.Name) - 2;

SELECT City.Name, Country.Name, CountryLanguage.Language
  FROM City,Country,CountryLanguage
  WHERE City.Country=Country.Code AND
        CountryLanguage.Country=Country.Code AND
        City.Name LIKE 'L%' AND Country.Population > 3000000 AND
        CountryLanguage.Percentage > 50 AND
        LENGTH(Language) < LENGTH(City.Name) - 2;

set join_cache_level=2;
show variables like 'join_cache_level';

EXPLAIN
SELECT City.Name, Country.Name FROM City,Country
  WHERE City.Country=Country.Code AND 
        Country.Name LIKE 'L%' AND City.Population > 100000;

SELECT City.Name, Country.Name FROM City,Country
  WHERE City.Country=Country.Code AND 
        Country.Name LIKE 'L%' AND City.Population > 100000;

EXPLAIN
SELECT City.Name, Country.Name, CountryLanguage.Language
  FROM City,Country,CountryLanguage
  WHERE City.Country=Country.Code AND
        CountryLanguage.Country=Country.Code AND
        City.Name LIKE 'L%' AND Country.Population > 3000000 AND
        CountryLanguage.Percentage > 50 AND
        LENGTH(Language) < LENGTH(City.Name) - 2;

SELECT City.Name, Country.Name, CountryLanguage.Language
  FROM City,Country,CountryLanguage
  WHERE City.Country=Country.Code AND
        CountryLanguage.Country=Country.Code AND
        City.Name LIKE 'L%' AND Country.Population > 3000000 AND
        CountryLanguage.Percentage > 50 AND
        LENGTH(Language) < LENGTH(City.Name) - 2;

set join_cache_level=3;
show variables like 'join_cache_level';

EXPLAIN
SELECT City.Name, Country.Name FROM City,Country
  WHERE City.Country=Country.Code AND 
        Country.Name LIKE 'L%' AND City.Population > 100000;

SELECT City.Name, Country.Name FROM City,Country
  WHERE City.Country=Country.Code AND 
        Country.Name LIKE 'L%' AND City.Population > 100000;

EXPLAIN
SELECT City.Name, Country.Name, CountryLanguage.Language
  FROM City,Country,CountryLanguage
  WHERE City.Country=Country.Code AND
        CountryLanguage.Country=Country.Code AND
        City.Name LIKE 'L%' AND Country.Population > 3000000 AND
        CountryLanguage.Percentage > 50 AND
        LENGTH(Language) < LENGTH(City.Name) - 2;


SELECT City.Name, Country.Name, CountryLanguage.Language
  FROM City,Country,CountryLanguage
  WHERE City.Country=Country.Code AND
        CountryLanguage.Country=Country.Code AND
        City.Name LIKE 'L%' AND Country.Population > 3000000 AND
        CountryLanguage.Percentage > 50 AND
        LENGTH(Language) < LENGTH(City.Name) - 2;


set join_cache_level=4;
show variables like 'join_cache_level';

EXPLAIN
SELECT City.Name, Country.Name FROM City,Country
  WHERE City.Country=Country.Code AND 
        Country.Name LIKE 'L%' AND City.Population > 100000;

SELECT City.Name, Country.Name FROM City,Country
  WHERE City.Country=Country.Code AND 
        Country.Name LIKE 'L%' AND City.Population > 100000;

EXPLAIN
SELECT City.Name, Country.Name, CountryLanguage.Language
  FROM City,Country,CountryLanguage
  WHERE City.Country=Country.Code AND
        CountryLanguage.Country=Country.Code AND
        City.Name LIKE 'L%' AND Country.Population > 3000000 AND
        CountryLanguage.Percentage > 50 AND
        LENGTH(Language) < LENGTH(City.Name) - 2;

SELECT City.Name, Country.Name, CountryLanguage.Language
  FROM City,Country,CountryLanguage
  WHERE City.Country=Country.Code AND
        CountryLanguage.Country=Country.Code AND
        City.Name LIKE 'L%' AND Country.Population > 3000000 AND
        CountryLanguage.Percentage > 50 AND
        LENGTH(Language) < LENGTH(City.Name) - 2;


SELECT Country.Name, Country.Population, City.Name, City.Population 
  FROM Country LEFT JOIN City
       ON City.Country=Country.Code AND City.Population > 5000000
   WHERE Country.Name LIKE 'C%' AND Country.Population > 10000000;

SELECT Country.Name, Country.Population, City.Name, City.Population
  FROM Country LEFT JOIN City 
       ON City.Country=Country.Code AND
          (City.Population > 5000000 OR City.Name LIKE 'Za%')
  WHERE Country.Name LIKE 'C%' AND Country.Population > 10000000;

CREATE INDEX City_Population ON City(Population);
CREATE INDEX City_Name ON City(Name);

--disable_result_log
ANALYZE TABLE City;
--enable_result_log

EXPLAIN
SELECT Country.Name, Country.Population, City.Name, City.Population 
  FROM Country LEFT JOIN City
       ON City.Country=Country.Code AND City.Population > 5000000
   WHERE Country.Name LIKE 'C%' AND Country.Population > 10000000;

SELECT Country.Name, Country.Population, City.Name, City.Population 
  FROM Country LEFT JOIN City
       ON City.Country=Country.Code AND City.Population > 5000000
   WHERE Country.Name LIKE 'C%' AND Country.Population > 10000000;

EXPLAIN
SELECT Country.Name, Country.Population, City.Name, City.Population
  FROM Country LEFT JOIN City 
       ON City.Country=Country.Code AND
          (City.Population > 5000000 OR City.Name LIKE 'Za%')
  WHERE Country.Name LIKE 'C%' AND Country.Population > 10000000;

SELECT Country.Name, Country.Population, City.Name, City.Population
  FROM Country LEFT JOIN City 
       ON City.Country=Country.Code AND
          (City.Population > 5000000 OR City.Name LIKE 'Za%')
  WHERE Country.Name LIKE 'C%' AND Country.Population > 10000000;

DROP INDEX City_Population ON City;
DROP INDEX City_Name ON City;

set join_cache_level=1;

set join_buffer_size=256;
show variables like 'join_buffer_size';

show variables like 'join_cache_level';

EXPLAIN
SELECT City.Name, Country.Name FROM City,Country
  WHERE City.Country=Country.Code AND 
        Country.Name LIKE 'L%' AND City.Population > 100000;

SELECT City.Name, Country.Name FROM City,Country
  WHERE City.Country=Country.Code AND 
        Country.Name LIKE 'L%' AND City.Population > 100000;

EXPLAIN
SELECT City.Name, Country.Name, CountryLanguage.Language
  FROM City,Country,CountryLanguage
  WHERE City.Country=Country.Code AND
        CountryLanguage.Country=Country.Code AND
        City.Name LIKE 'L%' AND Country.Population > 3000000 AND
        CountryLanguage.Percentage > 50 AND
        LENGTH(Language) < LENGTH(City.Name) - 2;

SELECT City.Name, Country.Name, CountryLanguage.Language
  FROM City,Country,CountryLanguage
  WHERE City.Country=Country.Code AND
        CountryLanguage.Country=Country.Code AND
        City.Name LIKE 'L%' AND Country.Population > 3000000 AND
        CountryLanguage.Percentage > 50 AND
        LENGTH(Language) < LENGTH(City.Name) - 2;

set join_cache_level=2;
show variables like 'join_cache_level';

EXPLAIN
SELECT City.Name, Country.Name FROM City,Country
  WHERE City.Country=Country.Code AND 
        Country.Name LIKE 'L%' AND City.Population > 100000;

SELECT City.Name, Country.Name FROM City,Country
  WHERE City.Country=Country.Code AND 
        Country.Name LIKE 'L%' AND City.Population > 100000;

EXPLAIN
SELECT City.Name, Country.Name, CountryLanguage.Language
  FROM City,Country,CountryLanguage
  WHERE City.Country=Country.Code AND
        CountryLanguage.Country=Country.Code AND
        City.Name LIKE 'L%' AND Country.Population > 3000000 AND
        CountryLanguage.Percentage > 50 AND
        LENGTH(Language) < LENGTH(City.Name) - 2;

SELECT City.Name, Country.Name, CountryLanguage.Language
  FROM City,Country,CountryLanguage
  WHERE City.Country=Country.Code AND
        CountryLanguage.Country=Country.Code AND
        City.Name LIKE 'L%' AND Country.Population > 3000000 AND
        CountryLanguage.Percentage > 50 AND
        LENGTH(Language) < LENGTH(City.Name) - 2;

set join_cache_level=3;
show variables like 'join_cache_level';

EXPLAIN
SELECT City.Name, Country.Name FROM City,Country
  WHERE City.Country=Country.Code AND 
        Country.Name LIKE 'L%' AND City.Population > 100000;

SELECT City.Name, Country.Name FROM City,Country
  WHERE City.Country=Country.Code AND 
        Country.Name LIKE 'L%' AND City.Population > 100000;

EXPLAIN
SELECT City.Name, Country.Name, CountryLanguage.Language
  FROM City,Country,CountryLanguage
  WHERE City.Country=Country.Code AND
        CountryLanguage.Country=Country.Code AND
        City.Name LIKE 'L%' AND Country.Population > 3000000 AND
        CountryLanguage.Percentage > 50 AND
        LENGTH(Language) < LENGTH(City.Name) - 2;

SELECT City.Name, Country.Name, CountryLanguage.Language
  FROM City,Country,CountryLanguage
  WHERE City.Country=Country.Code AND
        CountryLanguage.Country=Country.Code AND
        City.Name LIKE 'L%' AND Country.Population > 3000000 AND
        CountryLanguage.Percentage > 50 AND
        LENGTH(Language) < LENGTH(City.Name) - 2;

set join_cache_level=4;
show variables like 'join_cache_level';

EXPLAIN
SELECT City.Name, Country.Name FROM City,Country
  WHERE City.Country=Country.Code AND 
        Country.Name LIKE 'L%' AND City.Population > 100000;

SELECT City.Name, Country.Name FROM City,Country
  WHERE City.Country=Country.Code AND 
        Country.Name LIKE 'L%' AND City.Population > 100000;

EXPLAIN
SELECT City.Name, Country.Name, CountryLanguage.Language
  FROM City,Country,CountryLanguage
  WHERE City.Country=Country.Code AND
        CountryLanguage.Country=Country.Code AND
        City.Name LIKE 'L%' AND Country.Population > 3000000 AND
        CountryLanguage.Percentage > 50 AND
        LENGTH(Language) < LENGTH(City.Name) - 2;

SELECT City.Name, Country.Name, CountryLanguage.Language
  FROM City,Country,CountryLanguage
  WHERE City.Country=Country.Code AND
        CountryLanguage.Country=Country.Code AND
        City.Name LIKE 'L%' AND Country.Population > 3000000 AND
        CountryLanguage.Percentage > 50 AND
        LENGTH(Language) < LENGTH(City.Name) - 2;

set join_cache_level=default;
set join_buffer_size=default;

show variables like 'join_buffer_size';
show variables like 'join_cache_level';

DROP DATABASE world; 


CREATE DATABASE world;

use world;

--source include/world_schema.inc

--disable_query_log
--disable_result_log
--disable_warnings
--source include/world.inc
--enable_warnings
--enable_result_log
--enable_query_log

show variables like 'join_buffer_size';
set join_cache_level=3;
show variables like 'join_cache_level';

EXPLAIN
SELECT City.Name, Country.Name FROM City,Country
  WHERE City.Country=Country.Code AND 
        Country.Name LIKE 'L%' AND City.Population > 100000;

SELECT City.Name, Country.Name FROM City,Country
  WHERE City.Country=Country.Code AND 
        Country.Name LIKE 'L%' AND City.Population > 100000;

EXPLAIN
SELECT City.Name, Country.Name, CountryLanguage.Language
  FROM City,Country,CountryLanguage
  WHERE City.Country=Country.Code AND
        CountryLanguage.Country=Country.Code AND
        City.Name LIKE 'L%' AND Country.Population > 3000000 AND
        CountryLanguage.Percentage > 50 AND
        LENGTH(Language) < LENGTH(City.Name) - 2;

SELECT City.Name, Country.Name, CountryLanguage.Language
  FROM City,Country,CountryLanguage
  WHERE City.Country=Country.Code AND
        CountryLanguage.Country=Country.Code AND
        City.Name LIKE 'L%' AND Country.Population > 3000000 AND
        CountryLanguage.Percentage > 50 AND
        LENGTH(Language) < LENGTH(City.Name) - 2;

EXPLAIN
SELECT Name FROM City
  WHERE City.Country IN (SELECT Code FROM Country WHERE Country.Name LIKE 'L%') AND
        City.Population > 100000;

SELECT Name FROM City
  WHERE City.Country IN (SELECT Code FROM Country WHERE Country.Name LIKE 'L%') AND
        City.Population > 100000;

EXPLAIN
SELECT Country.Name, IF(ISNULL(CountryLanguage.Country), NULL, CountryLanguage.Percentage)
  FROM Country LEFT JOIN CountryLanguage ON
       (CountryLanguage.Country=Country.Code AND Language='English')
  WHERE 
       Country.Population > 10000000;

SELECT Country.Name, IF(ISNULL(CountryLanguage.Country), NULL, CountryLanguage.Percentage)
  FROM Country LEFT JOIN CountryLanguage ON
       (CountryLanguage.Country=Country.Code AND Language='English')
  WHERE 
       Country.Population > 10000000;

show variables like 'join_buffer_size';
set join_cache_level=4;
show variables like 'join_cache_level';

EXPLAIN
SELECT City.Name, Country.Name FROM City,Country
  WHERE City.Country=Country.Code AND 
        Country.Name LIKE 'L%' AND City.Population > 100000;

SELECT City.Name, Country.Name FROM City,Country
  WHERE City.Country=Country.Code AND 
        Country.Name LIKE 'L%' AND City.Population > 100000;

EXPLAIN
SELECT City.Name, Country.Name, CountryLanguage.Language
  FROM City,Country,CountryLanguage
  WHERE City.Country=Country.Code AND
        CountryLanguage.Country=Country.Code AND
        City.Name LIKE 'L%' AND Country.Population > 3000000 AND
        CountryLanguage.Percentage > 50 AND
        LENGTH(Language) < LENGTH(City.Name) - 2;

SELECT City.Name, Country.Name, CountryLanguage.Language
  FROM City,Country,CountryLanguage
  WHERE City.Country=Country.Code AND
        CountryLanguage.Country=Country.Code AND
        City.Name LIKE 'L%' AND Country.Population > 3000000 AND
        CountryLanguage.Percentage > 50 AND
        LENGTH(Language) < LENGTH(City.Name) - 2;

EXPLAIN
SELECT Name FROM City
  WHERE City.Country IN (SELECT Code FROM Country WHERE Country.Name LIKE 'L%') AND
        City.Population > 100000;

SELECT Name FROM City
  WHERE City.Country IN (SELECT Code FROM Country WHERE Country.Name LIKE 'L%') AND
        City.Population > 100000;

EXPLAIN
SELECT Country.Name, IF(ISNULL(CountryLanguage.Country), NULL, CountryLanguage.Percentage)
  FROM Country LEFT JOIN CountryLanguage ON
       (CountryLanguage.Country=Country.Code AND Language='English')
  WHERE 
       Country.Population > 10000000;

SELECT Country.Name, IF(ISNULL(CountryLanguage.Country), NULL, CountryLanguage.Percentage)
  FROM Country LEFT JOIN CountryLanguage ON
       (CountryLanguage.Country=Country.Code AND Language='English')
  WHERE 
       Country.Population > 10000000;


--replace_column 9 #
EXPLAIN
SELECT Country.Name, Country.Population, City.Name, City.Population 
  FROM Country LEFT JOIN City
       ON City.Country=Country.Code AND City.Population > 5000000
   WHERE Country.Name LIKE 'C%' AND Country.Population > 10000000;

SELECT Country.Name, Country.Population, City.Name, City.Population 
  FROM Country LEFT JOIN City
       ON City.Country=Country.Code AND City.Population > 5000000
   WHERE Country.Name LIKE 'C%' AND Country.Population > 10000000;

CREATE INDEX City_Name ON City(Name);

EXPLAIN
SELECT Country.Name, Country.Population, City.Name, City.Population
  FROM Country LEFT JOIN City 
       ON City.Country=Country.Code AND
          (City.Population > 5000000 OR City.Name LIKE 'Za%')
  WHERE Country.Name LIKE 'C%' AND Country.Population > 10000000;

SELECT Country.Name, Country.Population, City.Name, City.Population
  FROM Country LEFT JOIN City 
       ON City.Country=Country.Code AND
          (City.Population > 5000000 OR City.Name LIKE 'Za%')
  WHERE Country.Name LIKE 'C%' AND Country.Population > 10000000;

DROP INDEX City_Name ON City;

show variables like 'join_buffer_size';
set join_cache_level=5;
show variables like 'join_cache_level';

EXPLAIN
SELECT City.Name, Country.Name FROM City,Country
  WHERE City.Country=Country.Code AND 
        Country.Name LIKE 'L%' AND City.Population > 100000;

SELECT City.Name, Country.Name FROM City,Country
  WHERE City.Country=Country.Code AND 
        Country.Name LIKE 'L%' AND City.Population > 100000;

EXPLAIN
SELECT City.Name, Country.Name, CountryLanguage.Language
  FROM City,Country,CountryLanguage
  WHERE City.Country=Country.Code AND
        CountryLanguage.Country=Country.Code AND
        City.Name LIKE 'L%' AND Country.Population > 3000000 AND
        CountryLanguage.Percentage > 50 AND
        LENGTH(Language) < LENGTH(City.Name) - 2;

SELECT City.Name, Country.Name, CountryLanguage.Language
  FROM City,Country,CountryLanguage
  WHERE City.Country=Country.Code AND
        CountryLanguage.Country=Country.Code AND
        City.Name LIKE 'L%' AND Country.Population > 3000000 AND
        CountryLanguage.Percentage > 50 AND
        LENGTH(Language) < LENGTH(City.Name) - 2;

EXPLAIN
SELECT Name FROM City
  WHERE City.Country IN (SELECT Code FROM Country WHERE Country.Name LIKE 'L%') AND
        City.Population > 100000;

SELECT Name FROM City
  WHERE City.Country IN (SELECT Code FROM Country WHERE Country.Name LIKE 'L%') AND
        City.Population > 100000;

EXPLAIN
SELECT Country.Name, IF(ISNULL(CountryLanguage.Country), NULL, CountryLanguage.Percentage)
  FROM Country LEFT JOIN CountryLanguage ON
       (CountryLanguage.Country=Country.Code AND Language='English')
  WHERE 
       Country.Population > 10000000;

SELECT Country.Name, IF(ISNULL(CountryLanguage.Country), NULL, CountryLanguage.Percentage)
  FROM Country LEFT JOIN CountryLanguage ON
       (CountryLanguage.Country=Country.Code AND Language='English')
  WHERE 
       Country.Population > 10000000;

set join_cache_level=6;
show variables like 'join_cache_level';

EXPLAIN
SELECT City.Name, Country.Name FROM City,Country
  WHERE City.Country=Country.Code AND 
        Country.Name LIKE 'L%' AND City.Population > 100000;

SELECT City.Name, Country.Name FROM City,Country
  WHERE City.Country=Country.Code AND 
        Country.Name LIKE 'L%' AND City.Population > 100000;

EXPLAIN
SELECT City.Name, Country.Name, CountryLanguage.Language
  FROM City,Country,CountryLanguage
  WHERE City.Country=Country.Code AND
        CountryLanguage.Country=Country.Code AND
        City.Name LIKE 'L%' AND Country.Population > 3000000 AND
        CountryLanguage.Percentage > 50 AND
        LENGTH(Language) < LENGTH(City.Name) - 2;

SELECT City.Name, Country.Name, CountryLanguage.Language
  FROM City,Country,CountryLanguage
  WHERE City.Country=Country.Code AND
        CountryLanguage.Country=Country.Code AND
        City.Name LIKE 'L%' AND Country.Population > 3000000 AND
        CountryLanguage.Percentage > 50 AND
        LENGTH(Language) < LENGTH(City.Name) - 2;

EXPLAIN
SELECT Name FROM City
  WHERE City.Country IN (SELECT Code FROM Country WHERE Country.Name LIKE 'L%') AND
        City.Population > 100000;

SELECT Name FROM City
  WHERE City.Country IN (SELECT Code FROM Country WHERE Country.Name LIKE 'L%') AND
        City.Population > 100000;

EXPLAIN
SELECT Country.Name, IF(ISNULL(CountryLanguage.Country), NULL, CountryLanguage.Percentage)
  FROM Country LEFT JOIN CountryLanguage ON
       (CountryLanguage.Country=Country.Code AND Language='English')
  WHERE 
       Country.Population > 10000000;

SELECT Country.Name, IF(ISNULL(CountryLanguage.Country), NULL, CountryLanguage.Percentage)
  FROM Country LEFT JOIN CountryLanguage ON
       (CountryLanguage.Country=Country.Code AND Language='English')
  WHERE 
       Country.Population > 10000000;

set join_cache_level=7;
show variables like 'join_cache_level';

EXPLAIN
SELECT City.Name, Country.Name FROM City,Country
  WHERE City.Country=Country.Code AND 
        Country.Name LIKE 'L%' AND City.Population > 100000;

SELECT City.Name, Country.Name FROM City,Country
  WHERE City.Country=Country.Code AND 
        Country.Name LIKE 'L%' AND City.Population > 100000;

EXPLAIN
SELECT City.Name, Country.Name, CountryLanguage.Language
  FROM City,Country,CountryLanguage
  WHERE City.Country=Country.Code AND
        CountryLanguage.Country=Country.Code AND
        City.Name LIKE 'L%' AND Country.Population > 3000000 AND
        CountryLanguage.Percentage > 50 AND
        LENGTH(Language) < LENGTH(City.Name) - 2;

SELECT City.Name, Country.Name, CountryLanguage.Language
  FROM City,Country,CountryLanguage
  WHERE City.Country=Country.Code AND
        CountryLanguage.Country=Country.Code AND
        City.Name LIKE 'L%' AND Country.Population > 3000000 AND
        CountryLanguage.Percentage > 50 AND
        LENGTH(Language) < LENGTH(City.Name) - 2;

EXPLAIN
SELECT Name FROM City
  WHERE City.Country IN (SELECT Code FROM Country WHERE Country.Name LIKE 'L%') AND
        City.Population > 100000;

SELECT Name FROM City
  WHERE City.Country IN (SELECT Code FROM Country WHERE Country.Name LIKE 'L%') AND
        City.Population > 100000;

EXPLAIN
SELECT Country.Name, IF(ISNULL(CountryLanguage.Country), NULL, CountryLanguage.Percentage)
  FROM Country LEFT JOIN CountryLanguage ON
       (CountryLanguage.Country=Country.Code AND Language='English')
  WHERE 
       Country.Population > 10000000;

SELECT Country.Name, IF(ISNULL(CountryLanguage.Country), NULL, CountryLanguage.Percentage)
  FROM Country LEFT JOIN CountryLanguage ON
       (CountryLanguage.Country=Country.Code AND Language='English')
  WHERE 
       Country.Population > 10000000;

set join_cache_level=8;
show variables like 'join_cache_level';

EXPLAIN
SELECT City.Name, Country.Name FROM City,Country
  WHERE City.Country=Country.Code AND 
        Country.Name LIKE 'L%' AND City.Population > 100000;

SELECT City.Name, Country.Name FROM City,Country
  WHERE City.Country=Country.Code AND 
        Country.Name LIKE 'L%' AND City.Population > 100000;

EXPLAIN
SELECT City.Name, Country.Name, CountryLanguage.Language
  FROM City,Country,CountryLanguage
  WHERE City.Country=Country.Code AND
        CountryLanguage.Country=Country.Code AND
        City.Name LIKE 'L%' AND Country.Population > 3000000 AND
        CountryLanguage.Percentage > 50 AND
        LENGTH(Language) < LENGTH(City.Name) - 2;

SELECT City.Name, Country.Name, CountryLanguage.Language
  FROM City,Country,CountryLanguage
  WHERE City.Country=Country.Code AND
        CountryLanguage.Country=Country.Code AND
        City.Name LIKE 'L%' AND Country.Population > 3000000 AND
        CountryLanguage.Percentage > 50 AND
        LENGTH(Language) < LENGTH(City.Name) - 2;

EXPLAIN
SELECT Name FROM City
  WHERE City.Country IN (SELECT Code FROM Country WHERE Country.Name LIKE 'L%') AND
        City.Population > 100000;

SELECT Name FROM City
  WHERE City.Country IN (SELECT Code FROM Country WHERE Country.Name LIKE 'L%') AND
        City.Population > 100000;

EXPLAIN
SELECT Country.Name, IF(ISNULL(CountryLanguage.Country), NULL, CountryLanguage.Percentage)
  FROM Country LEFT JOIN CountryLanguage ON
       (CountryLanguage.Country=Country.Code AND Language='English')
  WHERE 
       Country.Population > 10000000;

SELECT Country.Name, IF(ISNULL(CountryLanguage.Country), NULL, CountryLanguage.Percentage)
  FROM Country LEFT JOIN CountryLanguage ON
       (CountryLanguage.Country=Country.Code AND Language='English')
  WHERE 
       Country.Population > 10000000;

set join_buffer_size=256;
show variables like 'join_buffer_size';

set join_cache_level=3;
show variables like 'join_cache_level';

EXPLAIN
SELECT City.Name, Country.Name FROM City,Country
  WHERE City.Country=Country.Code AND 
        Country.Name LIKE 'L%' AND City.Population > 100000;

SELECT City.Name, Country.Name FROM City,Country
  WHERE City.Country=Country.Code AND 
        Country.Name LIKE 'L%' AND City.Population > 100000;

EXPLAIN
SELECT City.Name, Country.Name, CountryLanguage.Language
  FROM City,Country,CountryLanguage
  WHERE City.Country=Country.Code AND
        CountryLanguage.Country=Country.Code AND
        City.Name LIKE 'L%' AND Country.Population > 3000000 AND
        CountryLanguage.Percentage > 50 AND
        LENGTH(Language) < LENGTH(City.Name) - 2;

SELECT City.Name, Country.Name, CountryLanguage.Language
  FROM City,Country,CountryLanguage
  WHERE City.Country=Country.Code AND
        CountryLanguage.Country=Country.Code AND
        City.Name LIKE 'L%' AND Country.Population > 3000000 AND
        CountryLanguage.Percentage > 50 AND
        LENGTH(Language) < LENGTH(City.Name) - 2;

EXPLAIN
SELECT Name FROM City
  WHERE City.Country IN (SELECT Code FROM Country WHERE Country.Name LIKE 'L%') AND
        City.Population > 100000;

SELECT Name FROM City
  WHERE City.Country IN (SELECT Code FROM Country WHERE Country.Name LIKE 'L%') AND
        City.Population > 100000;

set join_cache_level=4;
show variables like 'join_cache_level';

EXPLAIN
SELECT City.Name, Country.Name FROM City,Country
  WHERE City.Country=Country.Code AND 
        Country.Name LIKE 'L%' AND City.Population > 100000;

SELECT City.Name, Country.Name FROM City,Country
  WHERE City.Country=Country.Code AND 
        Country.Name LIKE 'L%' AND City.Population > 100000;

EXPLAIN
SELECT City.Name, Country.Name, CountryLanguage.Language
  FROM City,Country,CountryLanguage
  WHERE City.Country=Country.Code AND
        CountryLanguage.Country=Country.Code AND
        City.Name LIKE 'L%' AND Country.Population > 3000000 AND
        CountryLanguage.Percentage > 50 AND
        LENGTH(Language) < LENGTH(City.Name) - 2;

SELECT City.Name, Country.Name, CountryLanguage.Language
  FROM City,Country,CountryLanguage
  WHERE City.Country=Country.Code AND
        CountryLanguage.Country=Country.Code AND
        City.Name LIKE 'L%' AND Country.Population > 3000000 AND
        CountryLanguage.Percentage > 50 AND
        LENGTH(Language) < LENGTH(City.Name) - 2;

EXPLAIN
SELECT Name FROM City
  WHERE City.Country IN (SELECT Code FROM Country WHERE Country.Name LIKE 'L%') AND
        City.Population > 100000;

SELECT Name FROM City
  WHERE City.Country IN (SELECT Code FROM Country WHERE Country.Name LIKE 'L%') AND
        City.Population > 100000;

set join_cache_level=5;
show variables like 'join_cache_level';

EXPLAIN
SELECT City.Name, Country.Name FROM City,Country
  WHERE City.Country=Country.Code AND 
        Country.Name LIKE 'L%' AND City.Population > 100000;

SELECT City.Name, Country.Name FROM City,Country
  WHERE City.Country=Country.Code AND 
        Country.Name LIKE 'L%' AND City.Population > 100000;

EXPLAIN
SELECT City.Name, Country.Name, CountryLanguage.Language
  FROM City,Country,CountryLanguage
  WHERE City.Country=Country.Code AND
        CountryLanguage.Country=Country.Code AND
        City.Name LIKE 'L%' AND Country.Population > 3000000 AND
        CountryLanguage.Percentage > 50 AND
        LENGTH(Language) < LENGTH(City.Name) - 2;

SELECT City.Name, Country.Name, CountryLanguage.Language
  FROM City,Country,CountryLanguage
  WHERE City.Country=Country.Code AND
        CountryLanguage.Country=Country.Code AND
        City.Name LIKE 'L%' AND Country.Population > 3000000 AND
        CountryLanguage.Percentage > 50 AND
        LENGTH(Language) < LENGTH(City.Name) - 2;

EXPLAIN
SELECT Name FROM City
  WHERE City.Country IN (SELECT Code FROM Country WHERE Country.Name LIKE 'L%') AND
        City.Population > 100000;

SELECT Name FROM City
  WHERE City.Country IN (SELECT Code FROM Country WHERE Country.Name LIKE 'L%') AND
        City.Population > 100000;

set join_cache_level=6;
show variables like 'join_cache_level';

EXPLAIN
SELECT City.Name, Country.Name FROM City,Country
  WHERE City.Country=Country.Code AND 
        Country.Name LIKE 'L%' AND City.Population > 100000;

SELECT City.Name, Country.Name FROM City,Country
  WHERE City.Country=Country.Code AND 
        Country.Name LIKE 'L%' AND City.Population > 100000;

EXPLAIN
SELECT City.Name, Country.Name, CountryLanguage.Language
  FROM City,Country,CountryLanguage
  WHERE City.Country=Country.Code AND
        CountryLanguage.Country=Country.Code AND
        City.Name LIKE 'L%' AND Country.Population > 3000000 AND
        CountryLanguage.Percentage > 50 AND
        LENGTH(Language) < LENGTH(City.Name) - 2;

SELECT City.Name, Country.Name, CountryLanguage.Language
  FROM City,Country,CountryLanguage
  WHERE City.Country=Country.Code AND
        CountryLanguage.Country=Country.Code AND
        City.Name LIKE 'L%' AND Country.Population > 3000000 AND
        CountryLanguage.Percentage > 50 AND
        LENGTH(Language) < LENGTH(City.Name) - 2;

EXPLAIN
SELECT Name FROM City
  WHERE City.Country IN (SELECT Code FROM Country WHERE Country.Name LIKE 'L%') AND
        City.Population > 100000;

SELECT Name FROM City
  WHERE City.Country IN (SELECT Code FROM Country WHERE Country.Name LIKE 'L%') AND
        City.Population > 100000;

set join_cache_level=7;
show variables like 'join_cache_level';

EXPLAIN
SELECT City.Name, Country.Name FROM City,Country
  WHERE City.Country=Country.Code AND 
        Country.Name LIKE 'L%' AND City.Population > 100000;

SELECT City.Name, Country.Name FROM City,Country
  WHERE City.Country=Country.Code AND 
        Country.Name LIKE 'L%' AND City.Population > 100000;

EXPLAIN
SELECT City.Name, Country.Name, CountryLanguage.Language
  FROM City,Country,CountryLanguage
  WHERE City.Country=Country.Code AND
        CountryLanguage.Country=Country.Code AND
        City.Name LIKE 'L%' AND Country.Population > 3000000 AND
        CountryLanguage.Percentage > 50 AND
        LENGTH(Language) < LENGTH(City.Name) - 2;

SELECT City.Name, Country.Name, CountryLanguage.Language
  FROM City,Country,CountryLanguage
  WHERE City.Country=Country.Code AND
        CountryLanguage.Country=Country.Code AND
        City.Name LIKE 'L%' AND Country.Population > 3000000 AND
        CountryLanguage.Percentage > 50 AND
        LENGTH(Language) < LENGTH(City.Name) - 2;

EXPLAIN
SELECT Name FROM City
  WHERE City.Country IN (SELECT Code FROM Country WHERE Country.Name LIKE 'L%') AND
        City.Population > 100000;

SELECT Name FROM City
  WHERE City.Country IN (SELECT Code FROM Country WHERE Country.Name LIKE 'L%') AND
        City.Population > 100000;

set join_cache_level=8;
show variables like 'join_cache_level';

EXPLAIN
SELECT City.Name, Country.Name FROM City,Country
  WHERE City.Country=Country.Code AND 
        Country.Name LIKE 'L%' AND City.Population > 100000;

SELECT City.Name, Country.Name FROM City,Country
  WHERE City.Country=Country.Code AND 
        Country.Name LIKE 'L%' AND City.Population > 100000;

EXPLAIN
SELECT City.Name, Country.Name, CountryLanguage.Language
  FROM City,Country,CountryLanguage
  WHERE City.Country=Country.Code AND
        CountryLanguage.Country=Country.Code AND
        City.Name LIKE 'L%' AND Country.Population > 3000000 AND
        CountryLanguage.Percentage > 50 AND
        LENGTH(Language) < LENGTH(City.Name) - 2;

SELECT City.Name, Country.Name, CountryLanguage.Language
  FROM City,Country,CountryLanguage
  WHERE City.Country=Country.Code AND
        CountryLanguage.Country=Country.Code AND
        City.Name LIKE 'L%' AND Country.Population > 3000000 AND
        CountryLanguage.Percentage > 50 AND
        LENGTH(Language) < LENGTH(City.Name) - 2;

EXPLAIN
SELECT Name FROM City
  WHERE City.Country IN (SELECT Code FROM Country WHERE Country.Name LIKE 'L%') AND
        City.Population > 100000;

SELECT Name FROM City
  WHERE City.Country IN (SELECT Code FROM Country WHERE Country.Name LIKE 'L%') AND
        City.Population > 100000;

set join_cache_level=default;
set join_buffer_size=default;

show variables like 'join_buffer_size';
show variables like 'join_cache_level';

set join_cache_level=1;

SELECT City.Name, Country.Name FROM City,Country
  WHERE City.Country=Country.Code AND City.Population > 3000000;

set join_cache_level=8;
set join_buffer_size=384;

--replace_column 9 #
EXPLAIN
SELECT City.Name, Country.Name FROM City,Country
  WHERE City.Country=Country.Code AND City.Population > 3000000;

--sorted_result
SELECT City.Name, Country.Name FROM City,Country
  WHERE City.Country=Country.Code AND City.Population > 3000000;

set join_buffer_size=default;

set join_cache_level=6;

ALTER TABLE Country MODIFY Name varchar(52) NOT NULL default '';

SELECT City.Name, Country.Name FROM City,Country
  WHERE City.Country=Country.Code AND 
        Country.Name LIKE 'L%' AND City.Population > 100000;

ALTER TABLE Country MODIFY Name varchar(300) NOT NULL default '';

SELECT City.Name, Country.Name FROM City,Country
  WHERE City.Country=Country.Code AND 
        Country.Name LIKE 'L%' AND City.Population > 100000;

ALTER TABLE Country ADD COLUMN PopulationBar text;
UPDATE Country 
  SET PopulationBar=REPEAT('x', CAST(Population/100000 AS unsigned int));

SELECT City.Name, Country.Name, Country.PopulationBar FROM City,Country
  WHERE City.Country=Country.Code AND 
        Country.Name LIKE 'L%' AND City.Population > 100000;

set join_buffer_size=256;

SELECT City.Name, Country.Name, Country.PopulationBar FROM City,Country
  WHERE City.Country=Country.Code AND 
        Country.Name LIKE 'L%' AND City.Population > 100000;

set join_cache_level=default;
set join_buffer_size=default;

DROP DATABASE world;

use test;

#
# Bug #35685: assertion abort when initializing a BKA cache
#

CREATE TABLE t1(
  affiliatetometaid int  NOT NULL default '0',
  uniquekey int NOT NULL default '0',
  metaid int  NOT NULL default '0',
  affiliateid int  NOT NULL default '0',
  xml text,
  isactive char(1) NOT NULL default 'Y',
  PRIMARY KEY  (affiliatetometaid)
);
CREATE UNIQUE INDEX t1_uniquekey ON t1(uniquekey);
CREATE INDEX t1_affiliateid ON t1(affiliateid);
CREATE INDEX t1_metaid on t1 (metaid);
INSERT INTO t1 VALUES
  (1616, 1571693233, 1391, 2, NULL, 'Y'), (1943, 1993216749, 1726, 2, NULL, 'Y');

CREATE TABLE t2(
  metaid int  NOT NULL default '0',
  name varchar(80) NOT NULL default '',
  dateadded timestamp NOT NULL ,
  xml text,
  status int default NULL,
  origin int default NULL,
  gid int NOT NULL default '1',
  formattypeid int  default NULL,
  PRIMARY KEY  (metaid)
);
CREATE INDEX t2_status ON t2(status);
CREATE INDEX t2_gid ON t2(gid);
CREATE INDEX t2_formattypeid ON t2(formattypeid);
INSERT INTO t2 VALUES
 (1391, "I Just Died", "2003-10-02 10:07:37", "", 1, NULL, 3, NULL),
 (1726, "Me, Myself & I", "2003-12-05 11:24:36", " ", 1, NULL, 3, NULL);

CREATE TABLE t3(
  mediaid int  NOT NULL ,
  metaid int  NOT NULL default '0',
  formatid int  NOT NULL default '0',
  status int default NULL,
  path varchar(100) NOT NULL default '',
  datemodified timestamp NOT NULL ,
  resourcetype int  NOT NULL default '1',
  parameters text,
  signature int  default NULL,
  quality int  NOT NULL default '255',
  PRIMARY KEY  (mediaid)
);
CREATE INDEX t3_metaid ON t3(metaid);
CREATE INDEX t3_formatid ON t3(formatid);
CREATE INDEX t3_status ON t3(status);
CREATE INDEX t3_metaidformatid ON t3(metaid,formatid);
CREATE INDEX t3_signature ON t3(signature);
CREATE INDEX t3_quality ON t3(quality);
INSERT INTO t3 VALUES
  (6, 4, 8, 0, "010101_anastacia_spmidi.mid", "2004-03-16 13:40:00", 1, NULL, NULL, 255),
  (3343, 3, 8, 1, "010102_4VN4bsPwnxRQUJW5Zp1RhG2IL9vvl_8.mid", "2004-03-16 13:40:00", 1, NULL, NULL, 255);

CREATE TABLE t4(
  formatid int  NOT NULL ,
  name varchar(60) NOT NULL default '',
  formatclassid int  NOT NULL default '0',
  mime varchar(60) default NULL,
  extension varchar(10) default NULL,
  priority int NOT NULL default '0',
  canaddtocapability char(1) NOT NULL default 'Y',
  PRIMARY KEY  (formatid)
);
CREATE INDEX t4_formatclassid ON t4(formatclassid);
CREATE INDEX t4_formats_idx ON t4(canaddtocapability);
INSERT INTO t4 VALUES
  (19, "XHTML", 11, "text/html", "xhtml", 10, 'Y'),
  (54, "AMR (wide band)", 13, "audio/amr-wb", "awb", 0, 'Y');

CREATE TABLE t5(
  formatclassid int  NOT NULL ,
  name varchar(60) NOT NULL default '',
  priority int NOT NULL default '0',
  formattypeid int  NOT NULL default '0',
  PRIMARY KEY  (formatclassid)
);
CREATE INDEX t5_formattypeid on t5(formattypeid);
INSERT INTO t5 VALUES
  (11, "Info", 0, 4), (13, "Digital Audio", 0, 2);

CREATE TABLE t6(
  formattypeid int  NOT NULL ,
  name varchar(60) NOT NULL default '',
  priority int default NULL,
  PRIMARY KEY  (formattypeid)
);
INSERT INTO t6 VALUES
 (2, "Ringtones", 0);

CREATE TABLE t7(
  metaid int  NOT NULL default '0',
  artistid int  NOT NULL default '0',
  PRIMARY KEY  (metaid,artistid)
);
INSERT INTO t7 VALUES
  (4, 5), (3, 4);

CREATE TABLE t8(
  artistid int  NOT NULL ,
  name varchar(80) NOT NULL default '',
  PRIMARY KEY  (artistid)
);
INSERT INTO t8 VALUES
  (5, "Anastacia"), (4, "John Mayer");

CREATE TABLE t9(
  subgenreid int  NOT NULL default '0',
  metaid int  NOT NULL default '0',
  PRIMARY KEY  (subgenreid,metaid)
) ;
CREATE INDEX t9_subgenreid ON t9(subgenreid);
CREATE INDEX t9_metaid ON t9(metaid);
INSERT INTO t9 VALUES 
  (138, 4), (31, 3);

CREATE TABLE t10(
  subgenreid int  NOT NULL ,
  genreid int  NOT NULL default '0',
  name varchar(80) NOT NULL default '',
  PRIMARY KEY  (subgenreid)
) ;
CREATE INDEX t10_genreid ON t10(genreid);
INSERT INTO t10 VALUES 
  (138, 19, ''), (31, 3, '');

CREATE TABLE t11(
  genreid int  NOT NULL default '0',
  name char(80) NOT NULL default '',
  priority int NOT NULL default '0',
  masterclip char(1) default NULL,
  PRIMARY KEY  (genreid)
) ;
CREATE INDEX t11_masterclip ON t11( masterclip);
INSERT INTO t11 VALUES
  (19, "Pop & Dance", 95, 'Y'), (3, "Rock & Alternative", 100, 'Y');

set join_cache_level=6;

EXPLAIN
SELECT t1.uniquekey, t1.xml AS affiliateXml,
       t8.name AS artistName, t8.artistid, 
       t11.name AS genreName, t11.genreid, t11.priority AS genrePriority,
       t10.subgenreid, t10.name AS subgenreName,
       t2.name AS metaName, t2.metaid, t2.xml AS metaXml,
       t4.priority + t5.priority + t6.priority AS overallPriority,
       t3.path AS path, t3.mediaid, 
       t4.formatid, t4.name AS formatName, 
       t5.formatclassid, t5.name AS formatclassName, 
       t6.formattypeid, t6.name AS formattypeName 
FROM t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11
WHERE t7.metaid = t2.metaid AND t7.artistid = t8.artistid AND
      t9.metaid = t2.metaid AND t9.subgenreid = t10.subgenreid AND 
      t10.genreid = t11.genreid AND  t3.metaid = t2.metaid AND
      t3.formatid = t4.formatid AND t4.formatclassid = t5.formatclassid AND
      t4.canaddtocapability =  'Y' AND t5.formattypeid = t6.formattypeid AND
      t6.formattypeid IN (2) AND (t3.formatid IN (31, 8, 76)) AND
      t1.metaid = t2.metaid AND t1.affiliateid = '2';

SELECT t1.uniquekey, t1.xml AS affiliateXml,
       t8.name AS artistName, t8.artistid, 
       t11.name AS genreName, t11.genreid, t11.priority AS genrePriority,
       t10.subgenreid, t10.name AS subgenreName,
       t2.name AS metaName, t2.metaid, t2.xml AS metaXml,
       t4.priority + t5.priority + t6.priority AS overallPriority,
       t3.path AS path, t3.mediaid, 
       t4.formatid, t4.name AS formatName, 
       t5.formatclassid, t5.name AS formatclassName, 
       t6.formattypeid, t6.name AS formattypeName 
FROM t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11
WHERE t7.metaid = t2.metaid AND t7.artistid = t8.artistid AND
      t9.metaid = t2.metaid AND t9.subgenreid = t10.subgenreid AND 
      t10.genreid = t11.genreid AND  t3.metaid = t2.metaid AND
      t3.formatid = t4.formatid AND t4.formatclassid = t5.formatclassid AND
      t4.canaddtocapability =  'Y' AND t5.formattypeid = t6.formattypeid AND
      t6.formattypeid IN (2) AND (t3.formatid IN (31, 8, 76)) AND
      t1.metaid = t2.metaid AND t1.affiliateid = '2';

DROP TABLE t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11;

#
# Bug #37131: 3-way join query with BKA used with a small buffer and
#             only for the third table
#

CREATE TABLE t1 (a1 int, filler1 char(64) default ' ' );
CREATE TABLE t2 (
  a2 int, b2 int, filler2 char(64) default ' ', 
  PRIMARY KEY idx(a2,b2,filler2)
) ;
CREATE TABLE t3 (b3 int, c3 int, INDEX idx(b3));

INSERT INTO t1(a1) VALUES 
 (4), (7), (1), (9), (8), (5), (3), (6), (2);
INSERT INTO t2(a2,b2) VALUES
 (1,30), (3,40), (2,61), (6,73), (8,92), (9,27), (4,18), (5,84), (7,56),
 (4,14), (6,76), (8,98), (7,55), (1,39), (2,68), (3,45), (9,21), (5,81),
 (5,88), (2,65), (6,74), (9,23), (1,37), (3,44), (4,17), (8,99), (7,51),
 (9,28), (7,52), (1,33), (4,13), (5,87), (3,43), (8,91), (2,62), (6,79),
 (3,49), (8,93), (7,34), (5,82), (6,78), (2,63), (1,32), (9,22), (4,11);
INSERT INTO t3 VALUES
 (30,302), (92,923), (18,187), (45,459), (30,309), 
 (39,393), (68,685), (45,458), (21,210), (81,817),
 (40,405), (61,618), (73,738), (92,929), (27,275),
 (18,188), (84,846), (56,564), (14,144), (76,763), 
 (98,982), (55,551), (17,174), (99,998), (51,513),
 (28,282), (52,527), (33,336), (13,138), (87,878), 
 (43,431), (91,916), (62,624), (79,797), (49,494),
 (93,933), (34,347), (82,829), (78,780), (63,634), 
 (32,329), (22,228), (11,114), (74,749), (23,236);

set join_cache_level=1;

EXPLAIN
SELECT a1<>a2, a1, a2, b2, b3, c3,
       SUBSTR(filler1,1,1) AS s1, SUBSTR(filler2,1,1) AS s2
FROM t1,t2,t3 WHERE a1=a2 AND b2=b3 AND MOD(c3,10)>7; 

SELECT a1<>a2, a1, a2, b2, b3, c3,
       SUBSTR(filler1,1,1) AS s1, SUBSTR(filler2,1,1) AS s2
FROM t1,t2,t3 WHERE a1=a2 AND b2=b3 AND MOD(c3,10)>7;
 
set join_cache_level=5;
set join_buffer_size=512;

EXPLAIN
SELECT a1<>a2, a1, a2, b2, b3, c3,
       SUBSTR(filler1,1,1) AS s1, SUBSTR(filler2,1,1) AS s2
FROM t1,t2,t3 WHERE a1=a2 AND b2=b3 AND MOD(c3,10)>7; 

SELECT a1<>a2, a1, a2, b2, b3, c3,
       SUBSTR(filler1,1,1) AS s1, SUBSTR(filler2,1,1) AS s2
FROM t1,t2,t3 WHERE a1=a2 AND b2=b3 AND MOD(c3,10)>7;
 
DROP TABLE t1,t2,t3;

#
# Bug #37690: crash with a tiny buffer when using BKA_JOIN_CACHE_UNIQUE
#

CREATE TABLE t1 (a int, b int, INDEX idx(b));
CREATE TABLE t2 (a int, b int, INDEX idx(a)); 
INSERT INTO t1 VALUES (5,30), (3,20), (7,40), (2,10), (8,30), (1,10), (4,20);     
INSERT INTO t2 VALUES (7,10), (1,20), (2,20), (8,20), (8,10), (1,20);
INSERT INTO t2 VALUES (1,10), (4,20), (3,20), (7,20), (7,10), (1,20); 
INSERT INTO t2 VALUES (17,10), (11,20), (12,20), (18,20), (18,10), (11,20);
INSERT INTO t2 VALUES (11,10), (14,20), (13,20), (17,20), (17,10), (11,20); 
   
set join_buffer_size=32; 
set join_cache_level=8;  
 
EXPLAIN SELECT * FROM t1,t2 WHERE t1.a=t2.a AND t1.b >= 30; 
--sorted_result  
SELECT * FROM t1,t2 WHERE t1.a=t2.a AND t1.b >= 30;  

DROP TABLE t1,t2;
 
--echo #
--echo # Bug #40134: outer join with not exists optimization and join buffer
--echo #

set join_cache_level=default;
set join_buffer_size=default;

CREATE TABLE t1 (a int NOT NULL);
INSERT INTO t1 VALUES (2), (4), (3), (5), (1);
CREATE TABLE t2 (a int NOT NULL, b int NOT NULL, INDEX i_a(a));
INSERT INTO t2 VALUES (4,10), (2,10), (2,30), (2,20), (4,20);
INSERT INTO t2 VALUES (14,10), (12,10), (15,30), (12,20), (14,20);

EXPLAIN
SELECT * FROM t1 LEFT JOIN t2 ON t1.a=t2.a WHERE t2.b IS NULL;
SELECT * FROM t1 LEFT JOIN t2 ON t1.a=t2.a WHERE t2.b IS NULL;

SET join_cache_level=6;
EXPLAIN
SELECT * FROM t1 LEFT JOIN t2 ON t1.a=t2.a WHERE t2.b IS NULL;
SELECT * FROM t1 LEFT JOIN t2 ON t1.a=t2.a WHERE t2.b IS NULL;

DROP TABLE t1, t2;

set join_cache_level=default;
set join_buffer_size=default;

--echo #
--echo # BUG#40136: Group by is ignored when join buffer is used for an outer join
--echo #
create table t1(a int PRIMARY KEY, b int);
insert into t1 values
  (5, 10), (2, 70), (7, 80), (6, 20), (1, 50), (9, 40), (8, 30), (3, 60);
create table t2 (p int, a int, INDEX i_a(a));
insert into t2 values
  (103, 7), (109, 3), (102, 3), (108, 1), (106, 3),
  (107, 7), (105, 1), (101, 3), (100, 7), (110, 1);
set @save_join_cache_level=@@join_cache_level;
set join_cache_level=6;
--echo The following must not show "using join cache":
explain
select t1.a, count(t2.p) as count
  from t1 left join t2 on t1.a=t2.a and t2.p % 2 = 1 group by t1.a;
select t1.a, count(t2.p) as count
  from t1 left join t2 on t1.a=t2.a and t2.p % 2 = 1 group by t1.a;
set join_cache_level=@save_join_cache_level;
drop table t1, t2;

--echo #
--echo # BUG#40268: Nested outer join with not null-rejecting where condition
--echo #            over an inner table which is not the last in the nest
--echo #

CREATE TABLE t2 (a int, b int, c int);
CREATE TABLE t3 (a int, b int, c int);
CREATE TABLE t4 (a int, b int, c int);

INSERT INTO t2 VALUES (3,3,0), (4,2,0), (5,3,0);
INSERT INTO t3 VALUES (1,2,0), (2,2,0);
INSERT INTO t4 VALUES (3,2,0), (4,2,0);

set join_cache_level=6;

SELECT t2.a,t2.b,t3.a,t3.b,t4.a,t4.b
  FROM t2 LEFT JOIN (t3, t4) ON t2.b=t4.b
     WHERE t3.a+2<t2.a OR t3.c IS NULL;

set join_cache_level=default;
DROP TABLE t2, t3, t4;

--echo #
--echo # Bug #40192: outer join with where clause when using BNL 
--echo #

create table t1 (a int, b int);
insert into t1 values (2, 20), (3, 30), (1, 10);
create table t2 (a int, c int);
insert into t2 values (1, 101), (3, 102), (1, 100);

set join_cache_level=6;

select * from t1 left join t2 on t1.a=t2.a;
explain select * from t1 left join t2 on t1.a=t2.a where t2.c=102 or t2.c is null;
select * from t1 left join t2 on t1.a=t2.a where t2.c=102 or t2.c is null;

set join_cache_level=default;
drop table t1, t2;

--echo #
--echo # Bug #40317: outer join with with constant on expression equal to FALSE
--echo #

create table t1 (a int);
insert into t1 values (30), (40), (20);
create table t2 (b int);
insert into t2 values (200), (100);

set join_cache_level=6;

select * from t1 left join t2 on (1=0);
explain select * from t1 left join t2 on (1=0) where a=40;
select * from t1 left join t2 on (1=0) where a=40;

set join_cache_level=0;
explain select * from t1 left join t2 on (1=0);

set join_cache_level=default;
drop table t1, t2;

--echo #
--echo # Bug #41204: small buffer with big rec_per_key for ref access
--echo #

CREATE TABLE t1 (a int);

INSERT INTO t1 VALUES (0);
INSERT INTO t1(a) SELECT a FROM t1;
INSERT INTO t1(a) SELECT a FROM t1;
INSERT INTO t1(a) SELECT a FROM t1;
INSERT INTO t1(a) SELECT a FROM t1;
INSERT INTO t1(a) SELECT a FROM t1;
INSERT INTO t1(a) SELECT a FROM t1;
INSERT INTO t1(a) SELECT a FROM t1;
INSERT INTO t1(a) SELECT a FROM t1;
INSERT INTO t1(a) SELECT a FROM t1;
INSERT INTO t1(a) SELECT a FROM t1;
INSERT INTO t1(a) SELECT a FROM t1;
INSERT INTO t1 VALUES (20000), (10000);

CREATE TABLE t2 (pk int AUTO_INCREMENT PRIMARY KEY, b int, c int, INDEX idx(b));
INSERT INTO t2(b,c) VALUES (10000, 3), (20000, 7), (20000, 1), (10000, 9), (20000, 5);
INSERT INTO t2(b,c) SELECT b,c FROM t2;
INSERT INTO t2(b,c) SELECT b,c FROM t2;
INSERT INTO t2(b,c) SELECT b,c FROM t2;
INSERT INTO t2(b,c) SELECT b,c FROM t2;
INSERT INTO t2(b,c) SELECT b,c FROM t2;
INSERT INTO t2(b,c) SELECT b,c FROM t2;
INSERT INTO t2(b,c) SELECT b,c FROM t2;
INSERT INTO t2(b,c) SELECT b,c FROM t2;

--disable_result_log
ANALYZE TABLE t1,t2;
--enable_result_log

set join_cache_level=6;
set join_buffer_size=1024;

EXPLAIN SELECT AVG(c) FROM t1,t2 WHERE t1.a=t2.b;
SELECT AVG(c) FROM t1,t2 WHERE t1.a=t2.b;

set join_buffer_size=default;
set join_cache_level=default;

DROP TABLE t1, t2;

--echo #
--echo # Bug #41894: big join buffer of level 7 used to join records
--echo #              with null values in place of varchar strings
--echo #

CREATE TABLE t1 (a int NOT NULL AUTO_INCREMENT PRIMARY KEY,
                 b varchar(127) DEFAULT NULL);

INSERT INTO t1(a) VALUES (1);
INSERT INTO t1(b) SELECT b FROM t1;
INSERT INTO t1(b) SELECT b FROM t1;
INSERT INTO t1(b) SELECT b FROM t1;
INSERT INTO t1(b) SELECT b FROM t1;
INSERT INTO t1(b) SELECT b FROM t1;
INSERT INTO t1(b) SELECT b FROM t1;
INSERT INTO t1(b) SELECT b FROM t1;
INSERT INTO t1(b) SELECT b FROM t1;
INSERT INTO t1(b) SELECT b FROM t1;
INSERT INTO t1(b) SELECT b FROM t1;
INSERT INTO t1(b) SELECT b FROM t1;
INSERT INTO t1(b) SELECT b FROM t1;
INSERT INTO t1(b) SELECT b FROM t1;
INSERT INTO t1(b) SELECT b FROM t1;

CREATE TABLE t2 (a int NOT NULL PRIMARY KEY, b varchar(127) DEFAULT NULL);
INSERT INTO t2 SELECT * FROM t1;

CREATE TABLE t3 (a int NOT NULL PRIMARY KEY, b varchar(127) DEFAULT NULL);
INSERT INTO t3 SELECT * FROM t1;

set join_cache_level=7;
set join_buffer_size=1024*1024;

EXPLAIN
SELECT COUNT(*) FROM t1,t2,t3
  WHERE t1.a=t2.a AND t2.a=t3.a AND
        t1.b IS NULL AND t2.b IS NULL AND t3.b IS NULL;

SELECT COUNT(*) FROM t1,t2,t3
  WHERE t1.a=t2.a AND t2.a=t3.a AND
        t1.b IS NULL AND t2.b IS NULL AND t3.b IS NULL;

set join_buffer_size=default;
set join_cache_level=default;

DROP TABLE t1,t2,t3;

--echo #
--echo # Bug #42020: join buffer is used  for outer join with fields of 
--echo #             several outer tables in join buffer
--echo #

CREATE TABLE t1 (
  a bigint NOT NULL,
  PRIMARY KEY (a) 
);
INSERT INTO t1 VALUES
  (2), (1);

CREATE TABLE t2 (
  a bigint NOT NULL,
  b bigint NOT NULL,
  PRIMARY KEY (a,b)
);
INSERT INTO t2 VALUES
  (2,30), (2,40), (2,50), (2,60), (2,70), (2,80),
  (1,10), (1, 20), (1,30), (1,40), (1,50);

CREATE TABLE t3 (
  pk bigint NOT NULL AUTO_INCREMENT,
  a bigint NOT NULL,
  b bigint NOT NULL,
  val bigint DEFAULT '0',
  PRIMARY KEY (pk),
  KEY idx (a,b)
);
INSERT INTO t3(a,b) VALUES
  (2,30), (2,40), (2,50), (2,60), (2,70), (2,80),
  (4,30), (4,40), (4,50), (4,60), (4,70), (4,80),
  (5,30), (5,40), (5,50), (5,60), (5,70), (5,80),
  (7,30), (7,40), (7,50), (7,60), (7,70), (7,80);

set join_cache_level=0;

SELECT t1.a, t2.a, t3.a, t2.b, t3.b, t3.val 
  FROM (t1,t2) LEFT JOIN t3 ON (t1.a=t3.a AND t2.b=t3.b) 
    WHERE t1.a=t2.a; 

set join_cache_level=6;
set join_buffer_size=256;

EXPLAIN
SELECT t1.a, t2.a, t3.a, t2.b, t3.b, t3.val 
  FROM (t1,t2) LEFT JOIN t3 ON (t1.a=t3.a AND t2.b=t3.b) 
    WHERE t1.a=t2.a; 
--sorted_result
SELECT t1.a, t2.a, t3.a, t2.b, t3.b, t3.val 
  FROM (t1,t2) LEFT JOIN t3 ON (t1.a=t3.a AND t2.b=t3.b) 
    WHERE t1.a=t2.a;

DROP INDEX idx ON t3;
set join_cache_level=2;

EXPLAIN
SELECT t1.a, t2.a, t3.a, t2.b, t3.b, t3.val 
  FROM (t1,t2) LEFT JOIN t3 ON (t1.a=t3.a AND t2.b=t3.b) 
    WHERE t1.a=t2.a; 

--sorted_result
SELECT t1.a, t2.a, t3.a, t2.b, t3.b, t3.val 
  FROM (t1,t2) LEFT JOIN t3 ON (t1.a=t3.a AND t2.b=t3.b) 
    WHERE t1.a=t2.a; 

set join_buffer_size=default;
set join_cache_level=default;

DROP TABLE t1,t2,t3;

#
# WL#4424 Full index condition pushdown with batched key access join
#
create table t1(f1 int, f2 int);
insert into t1 values (1,1),(2,2),(3,3);
create table t2(f1 int not null, f2 int not null, f3 char(200), key(f1,f2));
insert into t2 values (1,1, 'qwerty'),(1,2, 'qwerty'),(1,3, 'qwerty');
insert into t2 values (2,1, 'qwerty'),(2,2, 'qwerty'),(2,3, 'qwerty'),
                      (2,4, 'qwerty'),(2,5, 'qwerty');
insert into t2 values (3,1, 'qwerty'),(3,4, 'qwerty');
insert into t2 values (4,1, 'qwerty'),(4,2, 'qwerty'),(4,3, 'qwerty'),
                      (4,4, 'qwerty');
insert into t2 values (1,1, 'qwerty'),(1,2, 'qwerty'),(1,3, 'qwerty');
insert into t2 values (2,1, 'qwerty'),(2,2, 'qwerty'),(2,3, 'qwerty'),
                      (2,4, 'qwerty'),(2,5, 'qwerty');
insert into t2 values (3,1, 'qwerty'),(3,4, 'qwerty');
insert into t2 values (4,1, 'qwerty'),(4,2, 'qwerty'),(4,3, 'qwerty'),
                      (4,4, 'qwerty');

flush status;
set join_cache_level=5;
select t2.f1, t2.f2, t2.f3 from t1,t2
where t1.f1=t2.f1 and t2.f2 between t1.f1 and t1.f2 and t2.f2 + 1 >= t1.f1 + 1;

explain select t2.f1, t2.f2, t2.f3 from t1,t2
where t1.f1=t2.f1 and t2.f2 between t1.f1 and t2.f2;
show status like "Handler_icp%";

set join_cache_level=6;
select t2.f1, t2.f2, t2.f3 from t1,t2
where t1.f1=t2.f1 and t2.f2 between t1.f1 and t1.f2 and t2.f2 + 1 >= t1.f1 + 1;

explain select t2.f1, t2.f2, t2.f3 from t1,t2
where t1.f1=t2.f1 and t2.f2 between t1.f1 and t2.f2;
show status like "Handler_icp%";

set join_cache_level=7;
select t2.f1, t2.f2, t2.f3 from t1,t2
where t1.f1=t2.f1 and t2.f2 between t1.f1 and t1.f2 and t2.f2 + 1 >= t1.f1 + 1;

explain select t2.f1, t2.f2, t2.f3 from t1,t2
where t1.f1=t2.f1 and t2.f2 between t1.f1 and t2.f2;
show status like "Handler_icp%";

set join_cache_level=8;
select t2.f1, t2.f2, t2.f3 from t1,t2
where t1.f1=t2.f1 and t2.f2 between t1.f1 and t1.f2 and t2.f2 + 1 >= t1.f1 + 1;

explain select t2.f1, t2.f2, t2.f3 from t1,t2
where t1.f1=t2.f1 and t2.f2 between t1.f1 and t2.f2;
show status like "Handler_icp%";

drop table t1,t2;
set join_cache_level=default;

--echo #
--echo # Bug #42955: join with GROUP BY/ORDER BY and when BKA is enabled 
--echo #             

create table t1 (d int, id1 int, index idx1 (d, id1));
insert into t1 values
  (3, 20), (2, 40), (3, 10), (1, 10), (3, 20), (1, 40), (2, 30), (3, 30);

create table t2 (id1 int, id2 int, index idx2 (id1));
insert into t2 values 
  (20, 100), (30, 400), (20, 400), (30, 200), (10, 300), (10, 200), (40, 100),
  (40, 200), (30, 300), (10, 400), (20, 200), (20, 300);   
insert into t2 values 
  (21, 10), (31, 400), (21, 400), (31, 200), (11, 300), (11, 200), (41, 100),
  (41, 200), (31, 300), (11, 400), (21, 200), (21, 300);   

set join_cache_level=6;

explain
select t1.id1, sum(t2.id2) from t1 join t2 on t1.id1=t2.id1 
  where t1.d=3 group by t1.id1;

select t1.id1, sum(t2.id2) from t1 join t2 on t1.id1=t2.id1 
  where t1.d=3 group by t1.id1;

explain
select t1.id1  from t1 join t2 on t1.id1=t2.id1 
 where t1.d=3 and t2.id2 > 200 order by t1.id1;

select t1.id1  from t1 join t2 on t1.id1=t2.id1 
 where t1.d=3 and t2.id2 > 200 order by t1.id1;

set join_cache_level=default;

drop table t1,t2;

--echo #
--echo # Bug #44019: star-like multi-join query executed join_cache_level=6 
--echo #             

create table t1 (a int, b int, c int, d int);
create table t2 (b int, e varchar(16), index idx(b));
create table t3 (d int, f varchar(16), index idx(d));
create table t4 (c int, g varchar(16), index idx(c));

insert into t1 values
  (5, 50, 500, 5000), (3, 30, 300, 3000), (9, 90, 900, 9000),
  (2, 20, 200, 2000), (4, 40, 400, 4000), (8, 80, 800, 800),
  (7, 70, 700, 7000);
insert into t2 values
  (30, 'bbb'), (10, 'b'), (70, 'bbbbbbb'), (60, 'bbbbbb'),
  (31, 'bbb'), (11, 'b'), (71, 'bbbbbbb'), (61, 'bbbbbb'),
  (32, 'bbb'), (12, 'b'), (72, 'bbbbbbb'), (62, 'bbbbbb');
insert into t2 values
  (130, 'bbb'), (110, 'b'), (170, 'bbbbbbb'), (160, 'bbbbbb'),
  (131, 'bbb'), (111, 'b'), (171, 'bbbbbbb'), (161, 'bbbbbb'),
  (132, 'bbb'), (112, 'b'), (172, 'bbbbbbb'), (162, 'bbbbbb');
insert into t3 values
  (4000, 'dddd'), (3000, 'ddd'), (1000, 'd'), (8000, 'dddddddd'),
  (4001, 'dddd'), (3001, 'ddd'), (1001, 'd'), (8001, 'dddddddd'),
  (4002, 'dddd'), (3002, 'ddd'), (1002, 'd'), (8002, 'dddddddd');
insert into t3 values
  (14000, 'dddd'), (13000, 'ddd'), (11000, 'd'), (18000, 'dddddddd'),
  (14001, 'dddd'), (13001, 'ddd'), (11001, 'd'), (18001, 'dddddddd'),
  (4002, 'dddd'), (3002, 'ddd'), (1002, 'd'), (8002, 'dddddddd');
insert into t4 values
  (200, 'cc'), (600, 'cccccc'), (300, 'ccc'), (500, 'ccccc'),
  (201, 'cc'), (601, 'cccccc'), (301, 'ccc'), (501, 'ccccc'),
  (202, 'cc'), (602, 'cccccc'), (302, 'ccc'), (502, 'ccccc');
insert into t4 values
  (1200, 'cc'), (1600, 'cccccc'), (1300, 'ccc'), (1500, 'ccccc'),
  (1201, 'cc'), (1601, 'cccccc'), (1301, 'ccc'), (1501, 'ccccc'),
  (1202, 'cc'), (1602, 'cccccc'), (1302, 'ccc'), (1502, 'ccccc');

--disable_result_log
--disable_warnings
analyze table t2,t3,t4;
--enable_warnings
--enable_result_log

set join_cache_level=1;
explain 
select t1.a, t1.b, t1.c, t1.d, t2.e, t3.f, t4.g from t1,t2,t3,t4
  where t2.b=t1.b and t3.d=t1.d and t4.c=t1.c;

select t1.a, t1.b, t1.c, t1.d, t2.e, t3.f, t4.g from t1,t2,t3,t4
  where t2.b=t1.b and t3.d=t1.d and t4.c=t1.c;

set join_cache_level=6;
explain 
select t1.a, t1.b, t1.c, t1.d, t2.e, t3.f, t4.g from t1,t2,t3,t4
  where t2.b=t1.b and t3.d=t1.d and t4.c=t1.c;

select t1.a, t1.b, t1.c, t1.d, t2.e, t3.f, t4.g from t1,t2,t3,t4
  where t2.b=t1.b and t3.d=t1.d and t4.c=t1.c;

set join_cache_level=default;

drop table t1,t2,t3,t4;

--echo #
--echo # Bug #44250: Corruption of linked join buffers when using BKA 
--echo #             

CREATE TABLE t1 (
  id1 bigint(20) DEFAULT NULL,
  id2 bigint(20) DEFAULT NULL,
  id3 bigint(20) DEFAULT NULL,
  num1 bigint(20) DEFAULT NULL,
  num2 int(11) DEFAULT NULL,
  num3 bigint(20) DEFAULT NULL
);

CREATE TABLE t2 (
  id3 bigint(20) NOT NULL DEFAULT '0',
  id4 bigint(20) DEFAULT NULL,
  enum1 enum('Enabled','Disabled','Paused') DEFAULT NULL,
  PRIMARY KEY (id3)
);

CREATE TABLE t3 (
  id4 bigint(20) NOT NULL DEFAULT '0',
  text1 text,
  PRIMARY KEY (id4)
);

CREATE TABLE t4 (
  id2 bigint(20) NOT NULL DEFAULT '0',
  dummy int(11) DEFAULT '0',
  PRIMARY KEY (id2)
);

CREATE TABLE t5 (
  id1 bigint(20) NOT NULL DEFAULT '0',
  id2 bigint(20) NOT NULL DEFAULT '0',
  enum2 enum('Active','Deleted','Paused') DEFAULT NULL,
  PRIMARY KEY (id1,id2)
);

--disable_query_log
--disable_result_log
--disable_warnings

INSERT INTO t1 VALUES 
(228172702,72485641,2667134182,10,1,14),(228172702,94266195,2667134182,134,0,134),
(228172702,94266195,2667134182,15,0,15),(228172702,94266195,2667134182,2,0,3),
(228172702,818095880,2667134182,1,1,1),(228172702,1004959639,2667134182,3,0,3),
(228172702,1297484422,2667134182,1,2,1),(228172702,1730911800,2667134182,11,0,28),
(228172702,1730911800,2667134182,4,0,4),(228172702,2182755982,2667134182,5,0,15),
(228172702,2182755982,2667134182,1,0,1),(228172702,2968841184,2667134182,1,0,1),
(228172702,4765525626,2667134182,2,0,3),(228172702,4765525626,2667134182,29,0,38),
(228172702,4765525626,2667134182,7,0,7),(228172702,4765525626,2667134182,7,0,8),
(228172702,5330573302,2667134182,1,0,1),(228512602,191149872,935692942,3,0,17),
(228512602,259118753,935692942,13,7,13),(228512602,259118753,935692942,83,33,83),
(228512602,585705465,935692942,1,0,1),(228512602,585716775,935692942,1,0,1),
(228512602,585716775,935692942,6,6,6),(228512602,585716775,935692942,1,1,1),
(228512602,1105371172,935692942,2,0,3),(228512602,1105371172,935692942,7,2,7),
(228512602,1314223462,935692942,1,0,1),(228512602,1314223642,935692942,1,1,1),
(228512602,1411060522,935692942,1,0,1),(228512602,1467398182,935692942,1,0,1),
(228512602,1467398182,935692942,3,0,4),(228512602,1467398242,935692942,10,0,41),
(228512602,1467398242,935692942,28,0,40),(228512602,1467398242,935692942,0,0,0),
(228512602,1467398242,935692942,29,2,33),(228512602,1734178942,935692942,1,0,1),
(228512602,1734179122,935692942,1,0,4),(228512602,1734179122,935692942,3,0,6),
(228512602,1953612870,935692942,1,0,1),(228512602,2271510562,935692942,1,1,1),
(228512602,2271525022,935692942,0,0,0),(228512602,3058831402,935692942,1,1,1),
(228512602,3723638842,935692942,1,1,1),(228512602,3723638842,935692942,4,3,4),
(228512602,3723836602,935692942,1,1,1),(228512602,3723836842,935692942,1,1,1),
(228512602,3723836962,935692942,1,1,1),(228512602,3723988102,935692942,11,4,11),
(228512602,3723989182,935692942,8,3,8),(228512602,5920283002,935692942,1,0,1),
(228512602,5920314232,935692942,1,0,1),(228512602,191149872,1241589892,0,0,0),
(228512602,191149872,1241589892,2,0,4),(228512602,191149872,1241589892,0,0,0),
(228512602,259118753,1241589892,8,4,8),(228512602,259118753,1241589892,70,33,70),
(228512602,259118753,1241589892,1,1,1),(228512602,585716775,1241589892,8,7,8),
(228512602,1105371172,1241589892,1,0,1),(228512602,1105371172,1241589892,9,0,9),
(228512602,1314223462,1241589892,1,0,1),(228512602,1411060522,1241589892,1,1,1),
(228512602,1467398182,1241589892,1,0,1),(228512602,1467398182,1241589892,4,1,4),
(228512602,1467398182,1241589892,1,0,1),(228512602,1467398242,1241589892,10,0,28),
(228512602,1467398242,1241589892,37,1,78),(228512602,1467398242,1241589892,28,9,30),
(228512602,1467398242,1241589892,5,0,6),(228512602,1734179122,1241589892,3,1,18),
(228512602,1734179122,1241589892,1,1,1),(228512602,1734179122,1241589892,2,0,3),
(228512602,1953611430,1241589892,1,1,1),(228512602,1953611430,1241589892,1,1,1),
(228512602,1953612870,1241589892,1,0,1),(228512602,2026844250,1241589892,1,0,1),
(228512602,2271510562,1241589892,1,1,1),(228512602,2271525022,1241589892,1,0,1),
(228512602,2941612417,1241589892,1,0,1),(228512602,3723988102,1241589892,1,0,1);
INSERT INTO t1 VALUES
(228512602,3723988102,1241589892,11,4,11),(228512602,3723989002,1241589892,1,0,1),
(228512602,3752960902,1241589892,2,2,4),(228808822,17304242,935693782,6,0,17),
(228808822,17304242,935693782,28,1,50),(228808822,17304242,935693782,29,3,61),
(228808822,17304242,935693782,6,0,13),(228808822,30931012,935693782,21,0,60),
(228808822,30931012,935693782,5,0,13),(228808822,37254452,935693782,3,0,3),
(228808822,42726891,935693782,1,0,4),(228808822,42726891,935693782,3,0,6),
(228808822,76261151,935693782,8,0,18),(228808822,88240139,935693782,1,0,1),
(228808822,88240139,935693782,3,0,3),(228808822,94730895,935693782,2,0,4),
(228808822,179737402,935693782,10,0,13),(228808822,179737402,935693782,7,0,8),
(228808822,179737402,935693782,3,0,4),(228808822,271288782,935693782,1,0,6),
(228808822,304690943,935693782,5,2,10),(228808822,304691183,935693782,4,0,16),
(228808822,568994960,935693782,1,0,1),(228808822,631705925,935693782,1,0,1),
(228808822,631745165,935693782,1,0,1),(228808822,631749605,935693782,1,0,4),
(228808822,1057787002,935693782,1,0,1),(228808822,1057787002,935693782,2,1,4),
(228808822,1057787002,935693782,12,1,20),(228808822,1057788022,935693782,2,0,40),
(228808822,1057788022,935693782,2,1,3),(228808822,1057788022,935693782,9,2,16),
(228808822,1335646822,935693782,3,1,6),(228808822,1335646882,935693782,1,0,3),
(228808822,1335646882,935693782,1,0,3),(228808822,1335646942,935693782,7,2,15),
(228808822,5510586183,935693782,1,1,1),(228808822,17304242,2482416112,11,0,28),
(228808822,17304242,2482416112,34,0,62),(228808822,17304242,2482416112,43,2,89),
(228808822,17304242,2482416112,9,0,19),(228808822,30931012,2482416112,32,2,84),
(228808822,30931012,2482416112,6,0,14),(228808822,30931012,2482416112,2,0,9),
(228808822,37254452,2482416112,1,1,1),(228808822,42726891,2482416112,2,0,10),
(228808822,76261151,2482416112,11,0,26),(228808822,88240139,2482416112,3,0,3),
(228808822,88240139,2482416112,1,0,1),(228808822,88240139,2482416112,3,0,4),
(228808822,94730895,2482416112,1,0,3),(228808822,125469602,2482416112,0,0,0),
(228808822,179737402,2482416112,4,0,10),(228808822,179737402,2482416112,8,1,9),
(228808822,179737402,2482416112,7,1,9),(228808822,179737402,2482416112,1,0,1),
(228808822,271288782,2482416112,2,0,14),(228808822,304690943,2482416112,3,0,6),
(228808822,304691183,2482416112,1,0,4),(228808822,555689643,2482416112,2,1,8),
(228808822,555689643,2482416112,1,0,4),(228808822,631705925,2482416112,1,0,1),
(228808822,631712555,2482416112,1,0,1),(228808822,631745165,2482416112,1,0,1),
(228808822,710348755,2482416112,1,0,1),(228808822,753718113,2482416112,1,0,1),
(228808822,1057787002,2482416112,1,0,4),(228808822,1057787002,2482416112,1,0,1),
(228808822,1057787002,2482416112,4,1,7),(228808822,1057788022,2482416112,7,0,12),
(228808822,1057788022,2482416112,3,0,37),(228808822,1057788022,2482416112,0,0,0),
(228808822,1057788022,2482416112,12,0,15),(228808822,1335646822,2482416112,14,1,28),
(228808822,1335646882,2482416112,1,1,3),(228808822,1335646942,2482416112,5,1,9),
(228808822,1335646942,2482416112,1,0,1),(230941762,16069490,2691187582,0,0,0),
(230941762,16705991,2691187582,16,0,30),(230941762,16705991,2691187582,12,3,12);
INSERT INTO t1 VALUES
(230941762,16705991,2691187582,1,0,1),(230941762,27714032,2691187582,6,0,16),
(230941762,27714032,2691187582,1,0,1),(230941762,27714032,2691187582,9,0,14),
(230941762,28676710,2691187582,3,1,4),(230941762,370319272,2691187582,7,0,7),
(230941762,1409814802,2691187582,1,0,3),(230941762,1409814982,2691187582,1,0,1),
(230941762,1409814982,2691187582,1,1,1),(230941762,2069703256,2691187582,1,0,3),
(230941762,16705991,2691187672,8,1,20),(230941762,16705991,2691187672,11,6,11),
(230941762,16705991,2691187672,1,0,1),(230941762,27714032,2691187672,5,0,20),
(230941762,27714032,2691187672,1,0,10),(230941762,27714032,2691187672,12,2,17),
(230941762,28676710,2691187672,1,0,1),(230941762,142889951,2691187672,2,0,10),
(230941762,172526592,2691187672,1,1,1),(230941762,293109282,2691187672,1,0,1),
(230941762,370319272,2691187672,10,0,10),(230941762,1409814802,2691187672,1,0,3),
(230941762,1409814922,2691187672,1,0,1),(230941762,1409814982,2691187672,1,0,1),
(230941762,16069490,2694472582,1,1,1),(230941762,16069490,2694472582,1,1,1),
(230941762,16705991,2694472582,15,0,45),(230941762,16705991,2694472582,13,2,15),
(230941762,27714032,2694472582,9,0,34),(230941762,27714032,2694472582,2,0,4),
(230941762,27714032,2694472582,10,2,14),(230941762,28676710,2694472582,4,0,12),
(230941762,28676710,2694472582,1,0,1),(230941762,172526592,2694472582,1,0,4),
(230941762,293109282,2694472582,1,0,1),(230941762,370319272,2694472582,6,0,6),
(230941762,1409814802,2694472582,1,0,3),(230941762,1409814862,2694472582,1,0,4),
(230941762,1409814982,2694472582,1,0,1),(230941762,2680867980,2694472582,1,0,3),
(230942122,25451690,935695702,1,0,9),(230942122,31549341,935695702,2,0,18),
(230942122,31549341,935695702,2,0,4),(230942122,38900150,935695702,4,0,29),
(230942122,38900150,935695702,4,1,13),(230942122,906919252,935695702,39,0,271),
(230942122,906919252,935695702,20,0,83),(230942122,906919252,935695702,2,1,9),
(230942122,1409816782,935695702,3,0,18),(230942122,1409816842,935695702,1,0,7),
(230942122,1409816842,935695702,1,0,3),(230942122,1409816902,935695702,1,0,6),
(230942122,2145075862,935695702,4,1,4),(230942122,25451690,935695822,2,0,16),
(230942122,38900150,935695822,3,0,26),(230942122,38900150,935695822,1,0,3),
(230942122,906919252,935695822,24,0,176),(230942122,906919252,935695822,20,0,74),
(230942122,906919252,935695822,1,0,3),(230942122,1409816782,935695822,2,0,21),
(230942122,1409816782,935695822,2,0,21),(230942122,1409816842,935695822,1,0,3),
(230942122,1409816902,935695822,1,0,7),(231112162,1413675742,935696902,1,0,1),
(231112162,1413675742,935696962,0,0,0),(231112162,1413675742,935696962,4,2,4),
(231112162,1413675922,935696962,1,0,1),(231112162,1413675922,935696962,1,0,1),
(231112162,1413675742,1248588922,1,0,1),(231112162,1413675922,1248588922,3,0,3),
(233937022,12641121,935697562,2,0,13),(233937022,12653871,935697562,1,0,1),
(233937022,12693551,935697562,1,0,1),(233937022,12910461,935697562,2,0,6),
(233937022,12910461,935697562,26,0,65),(233937022,12910461,935697562,44,8,45),
(233937022,12910481,935697562,12,0,19),(233937022,12910481,935697562,7,2,9),
(233937022,12910481,935697562,1,0,1),(233937022,12910511,935697562,8,0,8);
INSERT INTO t1 VALUES
(233937022,12910511,935697562,20,6,22),(233937022,30879781,935697562,34,0,34),
(233937022,30879781,935697562,3,0,4),(233937022,30879781,935697562,1,0,1),
(233937022,45631730,935697562,8,0,39),(233937022,54079090,935697562,12,0,12),
(233937022,54079090,935697562,7,0,11),(233937022,54079090,935697562,14,0,16),
(233937022,94431735,935697562,6,0,31),(233937022,96876131,935697562,3,0,4),
(233937022,105436492,935697562,4,0,4),(233937022,128981555,935697562,3,0,3),
(233937022,145211004,935697562,1,0,1),(233937022,146382622,935697562,1,0,1),
(233937022,175678702,935697562,1,0,4),(233937022,298998998,935697562,1,0,1),
(233937022,335995773,935697562,3,0,3),(233937022,335995773,935697562,2,0,3),
(233937022,347447636,935697562,0,0,0),(233937022,459295955,935697562,3,0,3),
(233937022,459376625,935697562,1,0,1),(233937022,495877773,935697562,1,0,1),
(233937022,497008702,935697562,1,0,3),(233937022,561944105,935697562,1,0,1),
(233937022,561944105,935697562,1,0,1),(233937022,586535965,935697562,3,0,3),
(233937022,631549775,935697562,1,0,7),(233937022,647138479,935697562,1,0,1),
(233937022,655870453,935697562,4,0,7),(233937022,694832725,935697562,1,0,1),
(233937022,864475057,935697562,1,0,1),(233937022,1010757503,935697562,1,0,4),
(233937022,1010847736,935697562,2,0,9),(233937022,1287437116,935697562,2,0,4),
(233937022,1337693056,935697562,1,0,1),(233937022,1569279742,935697562,1,1,1),
(233937022,1569280102,935697562,2,0,7),(233937022,1569280882,935697562,2,1,3),
(233937022,1569281062,935697562,1,0,1),(233937022,1569281962,935697562,1,0,3),
(233937022,2823580588,935697562,2,0,8),(233937022,2823580588,935697562,3,1,10),
(233937022,2842066134,935697562,1,0,1),(233937022,2904542181,935697562,1,0,1),
(233937022,3058483627,935697562,1,0,1),(233937022,4507287318,935697562,1,0,1),
(233937022,5283489892,935697562,1,0,1),(233937022,11890554322,935697562,16,0,16),
(233937022,11890756102,935697562,3,1,3),(233937022,12641121,953996482,1,0,7),
(233937022,12641851,953996482,1,0,1),(233937022,12641851,953996482,1,0,1),
(233937022,12910461,953996482,4,0,14),(233937022,12910461,953996482,20,2,23),
(233937022,12910461,953996482,43,5,43),(233937022,12910461,953996482,1,0,1),
(233937022,12910481,953996482,17,2,30),(233937022,12910511,953996482,7,1,8),
(233937022,12910511,953996482,23,5,23),(233937022,14913951,953996482,2,0,3),
(233937022,21835210,953996482,1,1,1),(233937022,26481052,953996482,1,1,1),
(233937022,26481052,953996482,1,0,1),(233937022,30879781,953996482,2,0,3),
(233937022,30879781,953996482,22,0,22),(233937022,35617681,953996482,1,0,1),
(233937022,45631730,953996482,3,0,11),(233937022,54079090,953996482,13,0,13),
(233937022,54079090,953996482,11,0,16),(233937022,54079090,953996482,29,0,34),
(233937022,94431735,953996482,3,0,9),(233937022,96876131,953996482,3,0,4),
(233937022,105436492,953996482,1,0,1),(233937022,105437952,953996482,3,1,3),
(233937022,123639716,953996482,1,0,6),(233937022,145211004,953996482,2,0,3),
(233937022,145211004,953996482,2,1,3),(233937022,146382622,953996482,1,0,1),
(233937022,146382622,953996482,1,0,1),(233937022,155454324,953996482,1,0,1);
INSERT INTO t1 VALUES
(233937022,298998998,953996482,1,1,1),(233937022,335995773,953996482,1,0,1),
(233937022,335995773,953996482,7,2,9),(233937022,459295955,953996482,2,0,4),
(233937022,561944105,953996482,1,0,1),(233937022,655870453,953996482,5,0,9),
(233937022,694832725,953996482,1,0,1),(233937022,694832725,953996482,1,0,1),
(233937022,864475057,953996482,4,1,4),(233937022,897886118,953996482,1,0,1),
(233937022,897886118,953996482,1,0,3),(233937022,1005147016,953996482,1,0,1),
(233937022,1010757503,953996482,1,0,1),(233937022,1082217873,953996482,1,0,1),
(233937022,1286925326,953996482,1,0,1),(233937022,1337693056,953996482,4,0,4),
(233937022,1407236408,953996482,2,0,3),(233937022,1569280102,953996482,1,0,6),
(233937022,1569280222,953996482,1,0,1),(233937022,1569281062,953996482,1,0,1),
(233937022,1569284362,953996482,1,0,3),(233937022,2823580588,953996482,1,0,3),
(233937022,2904542181,953996482,3,0,7),(233937022,4371581485,953996482,1,0,1),
(233937022,5283491332,953996482,1,0,1),(233937022,7300486013,953996482,1,1,1),
(233937022,11890554322,953996482,16,0,16),(233937022,11890754392,953996482,1,0,1),
(233937022,11890754392,953996482,0,0,0);

INSERT INTO t2 VALUES
(2667134182,2567095402,'Enabled'),(935692942,826927822,'Enabled'),
(1241589892,1130891152,'Enabled'),(935693782,826928662,'Enabled'),
(2482416112,2381969632,'Enabled'),(2691187582,2591198842,'Enabled'),
(2691187672,2591198932,'Enabled'),(2694472582,2594492212,'Paused'),
(935695702,826930582,'Enabled'),(935695822,826930702,'Enabled'),
(935696902,826931782,'Enabled'),(935696962,826931842,'Enabled'),
(1248588922,1137805582,'Enabled'),(935697562,826932442,'Paused'),
(953996482,845181202,'Enabled'),(2702549092,2602579882,'Enabled'),
(2702549182,2602579972,'Enabled'),(2702550712,2602581502,'Enabled'),
(1125312412,1015179502,'Enabled'),(2708245462,2608290202,'Enabled'),
(2708247262,2608292002,'Enabled'),(935699242,826934122,'Enabled'),
(1125312502,1015179592,'Enabled'),(1125312592,1015179682,'Enabled'),
(2711450452,2611502302,'Enabled'),(2711452252,2611504102,'Enabled'),
(935699902,826934782,'Enabled'),(935700262,826935142,'Enabled'),
(1215381442,1104677032,'Enabled'),(2503848082,2403457762,'Enabled'),
(935701762,826936642,'Enabled'),(935701822,826936702,'Enabled'),
(1468810282,1355227402,'Enabled'),(935702842,826937722,'Enabled'),
(1125312682,1015179772,'Enabled'),(2713816102,2613869392,'Enabled'),
(2688452032,2588455012,'Enabled'),(2688452212,2588455192,'Enabled'),
(2701527412,2601556942,'Enabled'),(1623918712,1510242412,'Enabled'),
(2701521922,2601551452,'Enabled'),(2701527772,2601557302,'Enabled');

INSERT INTO `t3` VALUES 
(2567095402,'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'),
(826927822,'BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB'),(1130891152,'BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB'),
(826928662,'CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC'),
(2381969632,'CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC'),
(2591198842,'DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD'),
(2591198932,'EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE'),
(2594492212,'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF'),
(826930582,'GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG'),
(826930702,'GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG'),
(826931782,'BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB'),
(826931842,'BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB'),
(1137805582,'BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB');

INSERT INTO t4 VALUES
(12618121,0),(12641121,0),(12641851,0),(12653871,0),(12665801,0),(12666811,0),
(12693551,0),(12910461,0),(12910481,0),(12910511,0),(14787251,0),(14913941,0),
(14913951,0),(16069490,0),(16705901,0),(16705991,0),(17291062,0),(17304242,0),
(20737411,0),(21524370,0),(21835210,0),(25300361,0),(25451690,0),(25728842,0),
(26481052,0),(27714032,0),(28676710,0),(30879781,0),(30931012,0),(31549341,0),
(35617681,0),(37254452,0),(38619430,0),(38895490,0),(38900150,0),(39798990,0),
(42726891,0),(42867050,0),(43439030,0),(45631730,0),(47171711,0),(49539832,0),
(54079090,0),(60442241,0),(65320501,0),(72485641,0),(76261151,0),(87949714,0),
(88240139,0),(94266195,0),(94431735,0),(94730895,0),(96876131,0);

INSERT INTO t5 VALUES
(228172702,72485641,'Active'),(228172702,94266195,'Active'),
(228172702,818095880,'Active'),(228172702,1004959639,'Active'),
(228172702,1297484242,'Active'),(228172702,1297484422,'Active'),
(228172702,1730911800,'Active'),(228172702,1808277389,'Active'),
(228172702,2182755982,'Active'),(228172702,2968841184,'Active'),
(228172702,3015116542,'Active'),(228172702,3752383170,'Active'),
(228172702,4765525626,'Active'),(228172702,5330573302,'Active'),
(228512602,191149872,'Active'),(228512602,259118753,'Active'),
(228512602,585705465,'Active'),(228512602,585716775,'Active'),
(228512602,1105371172,'Active'),(228512602,1314223462,'Active'),
(228512602,1314223642,'Active'),(228512602,1411060522,'Active'),
(228512602,1467398182,'Active'),(228512602,1467398242,'Active'),
(228512602,1734178942,'Active'),(228512602,1734179122,'Active'),
(228512602,1953612870,'Active'),(228512602,2271510562,'Active'),
(228512602,2271525022,'Active'),(228512602,2941612417,'Active'),
(228512602,3058831402,'Active'),(228512602,3723638842,'Active'),
(228512602,3723836602,'Active'),(228512602,3723836842,'Active'),
(228512602,3723836962,'Active'),(228512602,3723988102,'Active'),
(228512602,3723989182,'Active'),(228512602,5920283002,'Active'),
(228512602,5920314232,'Active'),(228512602,585717615,'Active'),
(228512602,1953611430,'Active'),(228512602,2026844250,'Active'),
(228512602,3058831462,'Active'),(228512602,3723836902,'Active'),
(228512602,3723989002,'Active'),(228512602,3752960902,'Active'),
(228808822,17304242,'Active'),(228808822,30931012,'Active'),
(228808822,37254452,'Active'),(228808822,42726891,'Active'),
(228808822,76261151,'Active'),(228808822,88240139,'Active'),
(228808822,94730895,'Active'),(228808822,125469622,'Active'),
(228808822,179737402,'Active'),(228808822,271288782,'Active'),
(228808822,304690943,'Active'),(228808822,304691183,'Active'),
(228808822,496123368,'Active'),(228808822,555689643,'Active'),
(228808822,568994960,'Active'),(228808822,631705925,'Active'),
(228808822,631745165,'Active'),(228808822,631749605,'Active'),
(228808822,1057787002,'Active'),(228808822,1057788022,'Active'),
(228808822,1335646822,'Active'),(228808822,1335646882,'Active'),
(228808822,1335646942,'Active'),(228808822,1612792238,'Active'),
(228808822,5510586183,'Active'),(228808822,47171711,'Active'),
(228808822,125469602,'Active'),(228808822,631712555,'Active'),
(228808822,710348755,'Active'),(228808822,753718113,'Active'),
(230941762,16069490,'Active'),(230941762,16705991,'Active'),
(230941762,27714032,'Active'),(230941762,28676710,'Active');
INSERT INTO t5 VALUES
(230941762,370319272,'Active'),(230941762,1409814802,'Active'),
(230941762,1409814982,'Active'),(230941762,2069703256,'Active'),
(230941762,142889951,'Active'),(230941762,172526592,'Active'),
(230941762,293109282,'Active'),(230941762,1409814922,'Active'),
(230941762,1409814862,'Active'),(230941762,2680867980,'Active'),
(230942122,25451690,'Active'),(230942122,31549341,'Active'),
(230942122,38900150,'Active'),(230942122,464554745,'Active'),
(230942122,906919252,'Active'),(230942122,1409816782,'Active'),
(230942122,1409816842,'Active'),(230942122,1409816902,'Active'),
(230942122,2145075862,'Active'),(231112162,1413675742,'Active'),
(231112162,1413675922,'Active'),(231112162,1413675562,'Active'),
(231112162,1413675802,'Active'),(233937022,12641121,'Active'),
(233937022,12653871,'Active'),(233937022,12693551,'Active'),
(233937022,12910461,'Active'),(233937022,12910481,'Active'),
(233937022,12910511,'Active'),(233937022,14913941,'Active'),
(233937022,30879781,'Active'),(233937022,45631730,'Active'),
(233937022,54079090,'Active'),(233937022,65320501,'Active'),
(233937022,94431735,'Active'),(233937022,96876131,'Active'),
(233937022,105436492,'Active'),(233937022,105437952,'Active'),
(233937022,128981555,'Active'),(233937022,145211004,'Active'),
(233937022,146382622,'Active'),(233937022,148832422,'Active'),
(233937022,175678702,'Active'),(233937022,260507673,'Active'),
(233937022,298998998,'Active'),(233937022,335995773,'Active'),
(233937022,347447636,'Active'),(233937022,459295955,'Active'),
(233937022,459376625,'Active'),(233937022,495877773,'Active'),
(233937022,497008702,'Active'),(233937022,561944105,'Active'),
(233937022,586535965,'Active'),(233937022,631549775,'Active'),
(233937022,647138479,'Active'),(233937022,655870453,'Active'),
(233937022,694832725,'Active'),(233937022,835712045,'Active'),
(233937022,864475057,'Active'),(233937022,864484777,'Active'),
(233937022,1010757503,'Active'),(233937022,1010847736,'Active'),
(233937022,1091554836,'Active'),(233937022,1287437116,'Active'),
(233937022,1337693056,'Active'),(233937022,1569279742,'Active'),
(233937022,1569280102,'Active'),(233937022,1569280222,'Active'),
(233937022,1569280582,'Active'),(233937022,1569280882,'Active'),
(233937022,1569281062,'Active'),(233937022,1569281962,'Active'),
(233937022,1569284362,'Active'),(233937022,1743317015,'Active'),
(233937022,2698799002,'Active'),(233937022,2698800742,'Active'),
(233937022,2823580588,'Active'),(233937022,2842066134,'Active'),
(233937022,2904542181,'Active'),(233937022,3058483627,'Active');
INSERT INTO t5 VALUES
(233937022,4507287318,'Active'),(233937022,5283489892,'Active'),
(233937022,11890554322,'Active'),(233937022,11890756102,'Active'),
(233937022,12641851,'Active'),(233937022,14913951,'Active'),
(233937022,21835210,'Active'),(233937022,26481052,'Active'),
(233937022,35617681,'Active'),(233937022,123639716,'Active'),
(233937022,155454324,'Active'),(233937022,299001668,'Active'),
(233937022,897886118,'Active'),(233937022,1005147016,'Active'),
(233937022,1082217873,'Active'),(233937022,1286925326,'Active'),
(233937022,1407236408,'Active'),(233937022,4371581485,'Active'),
(233937022,5283491332,'Active'),(233937022,7300486013,'Active'),
(233937022,11890754392,'Active');

--enable_warnings
--enable_result_log
--enable_query_log

set join_cache_level=8;
set join_buffer_size=2048;

EXPLAIN
SELECT STRAIGHT_JOIN t1.id1, t1.num3, t3.text1, t3.id4, t2.id3, t4.dummy
  FROM t1 JOIN  t2 JOIN  t3 JOIN  t4 JOIN  t5 
    WHERE t1.id1=t5.id1 AND t1.id2=t5.id2 and  t4.id2=t1.id2 AND
          t5.enum2='Active' AND t3.id4=t2.id4 AND t2.id3=t1.id3 AND t3.text1<'D';

SELECT STRAIGHT_JOIN t1.id1, t1.num3, t3.text1, t3.id4, t2.id3, t4.dummy
  FROM t1 JOIN  t2 JOIN  t3 JOIN  t4 JOIN  t5 
    WHERE t1.id1=t5.id1 AND t1.id2=t5.id2 and  t4.id2=t1.id2 AND
          t5.enum2='Active' AND t3.id4=t2.id4 AND t2.id3=t1.id3 AND t3.text1<'D';

set join_buffer_size=default;
set join_cache_level=default;

DROP TABLE t1,t2,t3,t4,t5;

--echo #
--echo # Bug#45267: Incomplete check caused wrong result.
--echo #
CREATE TABLE t1 (
  `pk` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY
);
CREATE TABLE t3 (
  `pk` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY
);
INSERT INTO t3 VALUES
(1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12),(13),(14),(15),
(16),(17),(18),(19),(20);
CREATE TABLE t2 (
  `pk` int(11) NOT NULL AUTO_INCREMENT,
  `int_nokey` int(11) NOT NULL,
  `time_key` time NOT NULL,
  PRIMARY KEY (`pk`),
  KEY `time_key` (`time_key`)
);
INSERT INTO t2 VALUES (10,9,'22:36:46'),(11,0,'08:46:46');

SELECT DISTINCT t1.`pk`
FROM t1 RIGHT JOIN t2 STRAIGHT_JOIN t3 ON t2.`int_nokey`  ON t2.`time_key`
GROUP BY 1;

DROP TABLE IF EXISTS t1, t2, t3;

--echo #
--echo # Bug #46328: Use of aggregate function without GROUP BY clause 
--echo #             returns many rows (vs. one )
--echo #             

CREATE TABLE t1 (
  int_key int(11) NOT NULL,
  KEY int_key (int_key)
);

INSERT INTO t1 VALUES
(0),(2),(2),(2),(3),(4),(5),(5),(6),(6),(8),(8),(9),(9);

CREATE TABLE t2 (
  int_key int(11) NOT NULL,
  KEY int_key (int_key)
);

INSERT INTO t2 VALUES (2),(3);

--echo

--echo # The query shall return 1 record with a max value 9 and one of the 
--echo # int_key values inserted above (undefined which one). A changed 
--echo # execution plan may change the value in the second column
SELECT  MAX(t1.int_key), t1.int_key
FROM t1 STRAIGHT_JOIN t2  
ORDER BY t1.int_key;

--echo

explain 
SELECT  MAX(t1.int_key), t1.int_key
FROM t1 STRAIGHT_JOIN t2  
ORDER BY t1.int_key;

--echo

DROP TABLE t1,t2;

SET join_cache_level=default;

--echo #
--echo # Regression test for
--echo # Bug#46733 - NULL value not returned for aggregate on empty result 
--echo #             set w/ semijoin on
--echo #

CREATE TABLE t1 (
  i int(11) NOT NULL,
  v varchar(1) DEFAULT NULL,
  PRIMARY KEY (i)
);

INSERT INTO t1 VALUES (10,'a'),(11,'b'),(12,'c'),(13,'d');

CREATE TABLE t2 (
  i int(11) NOT NULL,
  v varchar(1) DEFAULT NULL,
  PRIMARY KEY (i)
);

INSERT INTO t2 VALUES (1,'x'),(2,'y');

--echo

SELECT MAX(t1.i) 
FROM t1 JOIN t2 ON t2.v
ORDER BY t2.v;

--echo

EXPLAIN
SELECT MAX(t1.i) 
FROM t1 JOIN t2 ON t2.v
ORDER BY t2.v;

--echo

DROP TABLE t1,t2;

--echo #
--echo # Bug #45092: join buffer contains two blob columns one of which is
--echo #             used in the key employed to access the joined table
--echo #

CREATE TABLE t1 (c1 int, c2 int, key (c2));
INSERT INTO t1 VALUES (1,1);
INSERT INTO t1 VALUES (2,2);

CREATE TABLE t2 (c1 text, c2 text);
INSERT INTO t2 VALUES('tt', 'uu');
INSERT INTO t2 VALUES('zzzz', 'xxxxxxxxx');

--disable_result_log
ANALYZE TABLE t1,t2;
--enable_result_log

set join_cache_level=6;

SELECT t1.*, t2.*, LENGTH(t2.c1), LENGTH(t2.c2) FROM t1,t2
  WHERE t1.c2=LENGTH(t2.c2) and t1.c1=LENGTH(t2.c1);

set join_cache_level=default;

DROP TABLE t1,t2;

--echo #
--echo # Bug #51092: linked join buffer is used for a 3-way cross join query 
--echo #             that selects only records of the first table
--echo #

create table t1 (a int, b int);
insert into t1 values (1,1),(2,2);
create table t2 (a int, b int);
insert into t2 values (1,1),(2,2);
create table t3 (a int, b int);
insert into t3 values (1,1),(2,2);

set join_cache_level=1;

explain select t1.* from t1,t2,t3;
select t1.* from t1,t2,t3; 

set join_cache_level=2;

explain select t1.* from t1,t2,t3;
select t1.* from t1,t2,t3; 

set join_cache_level=default;

drop table t1,t2,t3;

--echo #
--echo # Bug #52394:  using join buffer for 3 table join with ref access 
--echo # LP #623209: and no references to the columns of the middle table
--echo #


set join_cache_level=6;

CREATE TABLE t1 (a int(11), b varchar(1));
INSERT INTO t1 VALUES (6,'r'),(27,'o');

CREATE TABLE t2(a int);
INSERT INTO t2 VALUES(1),(2),(3),(4),(5);

CREATE TABLE t3 (a int(11) primary key, b varchar(1));
INSERT INTO t3 VALUES
(14,'d'),(15,'z'),(16,'e'),(17,'h'),(18,'b'),(19,'s'),(20,'e'),
(21,'j'),(22,'e'),(23,'f'),(24,'v'),(25,'x'),(26,'m'),(27,'o');

EXPLAIN
SELECT t3.a FROM t1,t2,t3 WHERE t1.a = t3.a AND t1.b = t3.b;
SELECT t3.a FROM t1,t2,t3 WHERE t1.a = t3.a AND t1.b = t3.b;

DROP TABLE t1,t2,t3;

set join_cache_level=default;

--echo #
--echo # Bug #51084: Batched key access crashes for SELECT with
--echo #             derived table and LEFT JOIN 
--echo #

CREATE TABLE t1 (
  carrier int,
  id int PRIMARY KEY
);
INSERT INTO t1 VALUES (1,11),(1,12),(2,13);

CREATE TABLE t2 (
  scan_date int,
  package_id int
);
INSERT INTO t2 VALUES (2008,21),(2008,22);

CREATE TABLE t3 (
  carrier int PRIMARY KEY,
  id int
);
INSERT INTO t3 VALUES (1,31);

CREATE TABLE t4 (
  carrier_id int,
  INDEX carrier_id(carrier_id)
);
INSERT INTO t4 VALUES (31),(32);

SET join_cache_level=8;

SELECT COUNT(*)
  FROM (t2 JOIN t1) LEFT JOIN (t3 JOIN t4 ON t3.id = t4.carrier_id)
       ON t3.carrier = t1.carrier;

EXPLAIN
SELECT COUNT(*)
  FROM (t2 JOIN t1) LEFT JOIN (t3 JOIN t4 ON t3.id = t4.carrier_id)
       ON t3.carrier = t1.carrier;

SET join_cache_level=default;

DROP TABLE t1,t2,t3,t4;

--echo #
--echo # Bug #52636: allowing JOINs on NULL values w/ join_cache_level = 5-8
--echo #

CREATE TABLE t1 (b int);
INSERT INTO t1 VALUES (NULL),(3);

CREATE TABLE t2 (a int, b int, KEY (b));
INSERT INTO t2 VALUES
  (100,NULL),(150,200),(50,150),(250,350),(180,210),(100,150),
  (101,NULL),(151,200),(51,150),(251,350),(181,210),(101,150);

set join_cache_level = 5;
explain SELECT t2.a FROM t1 LEFT JOIN t2 ON t2.b  = t1.b;
--sorted_result
SELECT t2.a FROM t1 LEFT JOIN t2 ON t2.b  = t1.b;

set join_cache_level = 8;
explain SELECT t2.a FROM t1 LEFT JOIN t2 ON t2.b  = t1.b;
--sorted_result
SELECT t2.a FROM t1 LEFT JOIN t2 ON t2.b  = t1.b;

# test crash when no key is worth collecting by BKA for t2's ref
delete from t1;
INSERT INTO t1 VALUES (NULL),(NULL);
set join_cache_level = 5;
explain SELECT t2.a FROM t1 LEFT JOIN t2 ON t2.b  = t1.b;
--sorted_result
SELECT t2.a FROM t1 LEFT JOIN t2 ON t2.b  = t1.b;

DROP TABLE t1,t2;

# test varchar keys
CREATE TABLE t1 (b varchar(100));
INSERT INTO t1 VALUES (NULL),("some varchar");

CREATE TABLE t2 (a int, b varchar(100), KEY (b));
INSERT INTO t2 VALUES (100,NULL),(150,"varchar"),(200,NULL),(250,"long long varchar");
INSERT INTO t2 VALUES (100,NULL),(150,"long varchar"),(200,"varchar"),(250,"long long long varchar");

set join_cache_level = 5;
explain SELECT t2.a FROM t1 LEFT JOIN t2 ON t2.b  = t1.b;
--sorted_result
SELECT t2.a FROM t1 LEFT JOIN t2 ON t2.b  = t1.b;

set join_cache_level = 8;
explain SELECT t2.a FROM t1 LEFT JOIN t2 ON t2.b  = t1.b;
--sorted_result
SELECT t2.a FROM t1 LEFT JOIN t2 ON t2.b  = t1.b;

set join_cache_level = default;
DROP TABLE t1,t2;

--echo #
--echo # Bug #54359: Extra rows with join_cache_level=7,8 and two joins
--echo #             and multi-column index"
--echo #

CREATE TABLE t1 (
  pk int NOT NULL,
  a int DEFAULT NULL,
  b varchar(16) DEFAULT NULL,
  c varchar(16) DEFAULT NULL,
  INDEX idx (b,a))
;

INSERT INTO t1 VALUES (4,9,'k','k');
INSERT INTO t1 VALUES (12,5,'k','k');

set join_cache_level = 8;

EXPLAIN
SELECT t.a FROM t1 t, t1 s FORCE INDEX(idx)
  WHERE s.pk AND s.a  >= t.pk AND  s.b  = t.c;

SELECT t.a FROM t1 t, t1 s FORCE INDEX(idx)
  WHERE s.pk AND s.a  >= t.pk AND  s.b  = t.c;

set join_cache_level = default;
DROP TABLE t1;

--echo #
--echo # Bug #54235: Extra rows with join_cache_level=6,8 and two LEFT JOINs
--echo #

CREATE TABLE t1 (a int);
CREATE TABLE t2 (a int);
CREATE TABLE t3 (a int);
CREATE TABLE t4 (a int);

INSERT INTO t1 VALUES (null), (2), (null), (1);

set join_cache_level = 6;
EXPLAIN
SELECT t1.a 
  FROM t1 LEFT JOIN (t2 LEFT JOIN t3 ON t2.a) ON 0 
    WHERE t1.a OR t3.a;
SELECT t1.a 
  FROM t1 LEFT JOIN (t2 LEFT JOIN t3 ON t2.a) ON 0 
    WHERE t1.a OR t3.a;

EXPLAIN
SELECT t1.a 
  FROM t1 LEFT JOIN (t2 LEFT JOIN (t3 LEFT JOIN t4 ON 1) ON t2.a) ON 0
    WHERE t1.a OR t4.a;
SELECT t1.a 
  FROM t1 LEFT JOIN (t2 LEFT JOIN (t3 LEFT JOIN t4 ON 1) ON t2.a) ON 0
    WHERE t1.a OR t4.a;

set join_cache_level = default;
DROP TABLE t1,t2,t3,t4;

--echo #
--echo # Bug #663840: Memory overwrite causing crash with hash join
--echo #

SET SESSION join_cache_level=3;
SET SESSION join_buffer_size=100;

CREATE TABLE t3 (
  i int NOT NULL,
  j int NOT NULL,
  d date NOT NULL,
  t time NOT NULL,
  v varchar(1) NOT NULL,
  u varchar(1) NOT NULL,
  INDEX idx (v)
)  COLLATE=latin1_bin;

INSERT INTO t3 VALUES
  (3,8,'2008-12-04','00:00:00','v','v'), (3,8,'2009-03-28','00:00:00','f','f'),
  (3,5,'1900-01-01','00:55:47','v','v'), (2,8,'2009-10-02','00:00:00','s','s'),
  (1,8,'1900-01-01','20:51:59','a','a'), (0,6,'2008-06-04','09:47:27','p','p'),
  (8,7,'2009-01-13','21:58:29','z','z'), (5,2,'1900-01-01','22:45:53','a','a'),
  (9,5,'2008-01-28','14:06:48','h','h'), (5,7,'2004-09-18','22:17:16','h','h'),
  (4,2,'2006-10-14','14:59:37','v','v'), (2,9,'1900-01-01','23:37:40','v','v'),
  (33,142,'2000-11-28','14:14:01','b','b'), (5,3,'2008-04-04','02:54:19','y','y'),
  (1,0,'2002-07-13','06:34:26','v','v'), (9,3,'2003-01-03','18:07:38','m','m'),
  (1,5,'2006-04-02','13:55:23','z','z'), (3,9,'2006-10-19','20:32:28','n','n'),
  (8,1,'2005-06-08','11:57:44','d','d'), (231,107,'2006-12-26','03:10:35','a','a');
INSERT INTO t3 VALUES
  (103,108,'2008-12-04','00:00:00','a','v'), (103,108,'2009-03-28','00:00:00','b','f'),
  (103,105,'1900-01-01','00:55:47','c','v'), (102,108,'2009-10-02','00:00:00','d','s'),
  (100,108,'1900-01-01','20:51:59','e','a'), (100,106,'2008-06-04','09:47:27','f','p'),
  (108,107,'2009-01-13','21:58:29','g','z'), (105,102,'1900-01-01','22:45:53','h','a'),
  (109,105,'2008-01-28','14:06:48','i','h'), (105,107,'2004-09-18','22:17:16','j','h'),
  (104,102,'2006-10-14','14:59:37','k','v'), (102,109,'1900-01-01','23:37:40','l','v'),
  (1033,1142,'2000-11-28','14:14:01','m','b'), (105,103,'2008-04-04','02:54:19','n','y'),
  (100,100,'2002-07-13','06:34:26','o','v'), (109,103,'2003-01-03','18:07:38','p','m'),
  (100,105,'2006-04-02','13:55:23','q','z'), (103,109,'2006-10-19','20:32:28','s','n'),
  (108,100,'2005-06-08','11:57:44','t','d'), (1231,1107,'2006-12-26','03:10:35','v','a');

CREATE TABLE t1 SELECT * FROM t3;
DELETE FROM t1 WHERE i > 8;
CREATE TABLE t2 SELECT * FROM t3;
DELETE FROM t2 WHERE j > 10;

EXPLAIN
SELECT t1.i, t1.d,  t1.v, t2.i, t2.d, t2.t, t2.v FROM t1,t2,t3
  WHERE t3.u <='a' AND t2.j < 5 AND t3.v = t2.u;

--sorted_result
SELECT t1.i, t1.d,  t1.v, t2.i, t2.d, t2.t, t2.v FROM t1,t2,t3
  WHERE t3.u <='a' AND t2.j < 5 AND t3.v = t2.u;

DROP TABLE t1,t2,t3;

SET SESSION join_cache_level=DEFAULT;
SET SESSION join_buffer_size=DEFAULT;


--echo #
--echo # Bug #664508: 'Simple' GROUP BY + ORDER BY 
--echo #              when join buffers are used
--echo #

CREATE TABLE t1 (
  pk int NOT NULL, i int NOT NULL, v  varchar(1) NOT NULL,
  PRIMARY KEY (pk), INDEX idx1(i), INDEX idx2 (v,i)
) COLLATE latin1_bin;
INSERT INTO t1 VALUES
  (10,8,'v'), (11,8,'f'), (13,8,'s'), (14,8,'a'),
  (15,6,'p'), (16,7,'z'), (17,2,'a'), (18,5,'h'), (19,7,'h'),
  (25,3,'m'), (26,5,'a'), (27,9,'n'), (28,1,'d'), (29,107,'a');
INSERT INTO t1 VALUES
  (110,8,'x'), (111,8,'y'), (112,5,'v'), (113,8,'z'), (114,8,'i'),
  (115,6,'j'), (116,7,'t'), (117,2,'b'), (118,5,'j'), (119,7,'w'),
  (125,3,'q'), (126,5,'o'), (127,9,'n'), (128,1,'e'), (129,107,'c');
INSERT INTO t1 VALUES
  (210,8,'b'), (211,8,'c'), (212,5,'d'), (213,8,'e'), (214,8,'g'),
  (215,6,'f'), (216,7,'h'), (217,2,'i'), (218,5,'j'), (219,7,'k'),
  (225,3,'l'), (226,5,'m'), (227,9,'n'), (228,1,'o'), (229,107,'p');

CREATE TABLE t2 (
  pk int NOT NULL, i int NOT NULL, v varchar(1) NOT NULL,
  PRIMARY KEY (pk), INDEX idx1(i), INDEX idx2(v,i)
) COLLATE latin1_bin;
INSERT INTO t2 VALUES
  (10,8,'v'), (11,8,'f'), (12,5,'v'), (13,8,'s'), (14,8,'a'),
  (15,6,'p'), (16,7,'z'), (17,2,'a'), (18,5,'h'), (19,7,'h'),
  (20,2,'v'), (21,9,'v'), (22,142,'b'), (23,3,'y'), (24,0,'v'),
  (25,3,'m'), (26,5,'b'), (27,9,'n'), (28,1,'d'), (29,107,'a');

CREATE TABLE t3 (
  pk int NOT NULL, i int NOT NULL,  v varchar(1) NOT NULL,
  PRIMARY KEY (pk), INDEX idx1(i), INDEX idx2(v,i)
) COLLATE latin1_bin;
INSERT INTO t3 VALUES
  (1,9,'x'), (2,5,'g'), (3,1,'o'), (4,0,'g'), (5,1,'v'),
  (6,190,'m'), (7,6,'x'), (8,3,'c'), (9,4,'z'), (10,3,'i'),
  (11,186,'x'), (12,1,'g'), (13,8,'q'), (14,226,'m'), (15,133,'p'),
  (16,6,'e'), (17,3,'t'), (18,8,'j'), (19,5,'h'), (20,7,'w');

SET SESSION join_cache_level=1;
EXPLAIN
SELECT t2.v FROM t1, t2, t3
WHERE t3.v <> t2.v AND t3.pk = t2.i AND t1.v = t3.v AND t1.pk*2<100 
 GROUP BY t2.v ORDER BY t1.pk,t2.v;
SELECT t2.v FROM t1, t2, t3
WHERE t3.v <> t2.v AND t3.pk = t2.i AND t1.v = t3.v AND t1.pk*2<100 
 GROUP BY t2.v ORDER BY t1.pk,t2.v;

SET SESSION join_cache_level=6;
EXPLAIN
SELECT t2.v FROM t1, t2, t3 
WHERE t3.v <> t2.v AND t3.pk = t2.i AND t1.v = t3.v AND t1.pk*2<100 
 GROUP BY t2.v ORDER BY t1.pk,t2.v;
SELECT t2.v FROM t1, t2, t3 
WHERE t3.v <> t2.v AND t3.pk = t2.i AND t1.v = t3.v AND t1.pk*2<100 
 GROUP BY t2.v ORDER BY t1.pk,t2.v;

SET SESSION join_cache_level=4;
EXPLAIN
SELECT t2.v FROM t1, t2, t3 
WHERE t3.v <> t2.v AND t3.pk = t2.i AND t1.v = t3.v AND t1.pk*2<100 
 GROUP BY t2.v ORDER BY t1.pk,t2.v;
SELECT t2.v FROM t1, t2, t3
WHERE t3.v <> t2.v AND t3.pk = t2.i AND t1.v = t3.v AND t1.pk*2<100 
 GROUP BY t2.v ORDER BY t1.pk,t2.v;

DROP TABLE t1,t2,t3;

SET SESSION join_cache_level=DEFAULT;

--echo #
--echo # Bug #668290: hash join with non-binary collations 
--echo #

CREATE TABLE t1 (
  i int DEFAULT NULL,
  cl varchar(10) CHARACTER SET latin1 DEFAULT NULL,
  cu varchar(10) CHARACTER SET utf8 DEFAULT NULL,
  INDEX cl (cl),
  INDEX cu (cu)
);
INSERT INTO t1 VALUES
  (650903552,'cmxffkpsel','z'), (535298048,'tvtjrcmxff','y'),
  (1626865664,'when','for'), (39649280,'rcvljitvtj','ercvljitvt'),
  (792068096,'ttercvljit','jttercvlji');
INSERT INTO t1 SELECT * FROM t1;

CREATE TABLE t2 (
  cu varchar(10) CHARACTER SET utf8 DEFAULT NULL,
  i int DEFAULT NULL,
  cl varchar(10) CHARACTER SET latin1 DEFAULT NULL,
  INDEX cu (cu),
  INDEX cl (cl)
);
INSERT INTO t2 VALUES 
  ('g',7,'like'), ('fujttercvl',6,'y'),
  ('s',2,'e'), ('didn\'t',0,'v'),
  ('gvdrodpedk',8,'chogvdrodp'), ('jichogvdro',7,'will');

EXPLAIN
SELECT t2.i FROM t1,t2 WHERE t1.cu = t2.cl ;
SELECT t2.i FROM t1,t2 WHERE t1.cu = t2.cl ;

SET SESSION join_cache_level = 4;

EXPLAIN
SELECT t2.i FROM t1,t2 WHERE t1.cu = t2.cl ;
SELECT t2.i FROM t1,t2 WHERE t1.cu = t2.cl ;

SET SESSION join_cache_level = DEFAULT;

DROP TABLE t1,t2;

--echo #
--echo # Bug #669382: hash join using a ref with constant key parts 
--echo #

CREATE TABLE t1 (a int);
INSERT INTO t1 VALUES
  (9), (11), (7), (8), (4), (1), (12), (3), (5);
INSERT INTO t1 SELECT * FROM t1;
INSERT INTO t1 SELECT * FROM t1;

CREATE TABLE t2 (a int, b int, c int, INDEX idx (a,b));
INSERT INTO t2 VALUES
  (8, 80, 800), (1, 10, 100), (1, 11, 101), (3, 30, 300),
  (1, 12, 102), (8, 81, 801), (7, 70, 700), (12, 120, 1200),
  (8, 82, 802), (1, 13, 103), (1, 14, 104), (3, 31, 301),
  (1, 15, 105), (8, 83, 803), (7, 71, 701);

SET SESSION join_cache_level = 4;
SET SESSION join_buffer_size = 256;

EXPLAIN
SELECT t1.a, t2.c FROM t1,t2 WHERE t1.a=t2.a AND t2.b=99; 
SELECT t1.a, t2.c FROM t1,t2 WHERE t1.a=t2.a AND t2.b=99; 

SET SESSION join_cache_level = DEFAULT;
SET SESSION join_buffer_size = DEFAULT;

DROP TABLE t1,t2;

--echo #
--echo # Bug #671901: hash join using a ref to a varchar field
--echo #

CREATE TABLE t1 (
  v varchar(10) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL,
  i int  DEFAULT NULL
);
INSERT INTO t1 VALUES
 ('k',8), ('abcdefjh',-575340544), ('f',77), ('because', 2), ('f',-517472256),
 ('abcdefjhj',5), ('z',7);

CREATE TABLE t2 (
  v varchar(10) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL,
  i int DEFAULT NULL,
  INDEX idx (v)
);
INSERT INTO t2 VALUES
  ('did',5), ('was',-1631322112), ('are',3), ('abcdefjhjk',3), 
  ('abcdefjhjk',4), ('tell',-824573952), ('t',0),('v',-1711013888),
  ('abcdefjhjk',1015414784), ('or',4), ('now',0), ('abcdefjhjk',-32702464),
  ('abcdefjhjk',4), ('time',1078394880), ('f',4), ('m',-1845559296), 
  ('ff', 5), ('abcdefjhjk',-1074397184);
INSERT INTO t2 VALUES
  ('dig',5), ('were',-1631322112), ('is',3), ('abcdefjhjl',3), 
  ('abcdefjh',4), ('told',-824573952), ('tt',0),('vv',-1711013888),
  ('abcdefjhjj',1015414784), ('and',4), ('here',0), ('abcdefjhjm',-32702464),
  ('abcdefjhji',4), ('space',1078394880), ('fs',4), ('mn',-1845559296), 
  ('fq', 5), ('abcdefjhjp',-1074397184);

EXPLAIN 
SELECT t1.v,t2.i FROM t1,t2 WHERE t2.v = t1.v;
SELECT t1.v,t2.i FROM t1,t2 WHERE t2.v = t1.v;
EXPLAIN
SELECT t1.v,t2.i FROM t1,t2 WHERE t2.v = concat(t1.v, t1.v);
SELECT t1.v,t2.i FROM t1,t2 WHERE t2.v = concat(t1.v, t1.v);

SET SESSION join_cache_level = 4;
EXPLAIN 
SELECT t1.v,t2.i FROM t1,t2 WHERE t2.v = t1.v;
SELECT t1.v,t2.i FROM t1,t2 WHERE t2.v = t1.v;
EXPLAIN
SELECT t1.v,t2.i FROM t1,t2 WHERE t2.v = concat(t1.v, t1.v);
SELECT t1.v,t2.i FROM t1,t2 WHERE t2.v = concat(t1.v, t1.v);

SET SESSION join_cache_level = DEFAULT;

DROP TABLE t1,t2;

#--echo #
--echo # Bug #672497: 3 way join with tiny incremental join buffer with
--echo #              and a ref access from the first table 
--echo #

CREATE TABLE t1 (
  pk int PRIMARY KEY,
  v varchar(10) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL,
  INDEX idx (v)
);
INSERT INTO t1 VALUES
  (1,'abcdefjhjk'), (2,'i'),(3,'abcdefjhjk'), (4,'well'), (5,'abcdefjhjk'),
  (6,'abcdefjhjk'), (7,'that');

CREATE TABLE t2 (
  pk int PRIMARY KEY,
  i int DEFAULT NULL,
  v varchar(1000) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL,
  INDEX idx (v)
);
INSERT INTO t2 VALUES 
 (1,6,'yes'), (2,NULL,'will'), (3,NULL,'o'), (4,NULL,'k'), (5,NULL,'she'),
 (6,-1450835968,'abcdefjhjkl'), (7,-975831040,'abcdefjhjkl'), (8,NULL,'z'),
 (10,-343932928,'t'),
 (11,6,'yes'), (12,NULL,'will'), (13,NULL,'o'), (14,NULL,'k'), (15,NULL,'she'),
 (16,-1450835968,'abcdefjhjkl'), (17,-975831040,'abcdefjhjkl'), (18,NULL,'z'),
 (19,-343932928,'t');
INSERT INTO t2 VALUES 
 (101,6,'yes'), (102,NULL,'will'), (103,NULL,'o'), (104,NULL,'k'), (105,NULL,'she'),
 (106,-1450835968,'abcdefjhjkl'), (107,-975831040,'abcdefjhjkl'), (108,NULL,'z'),
 (100,-343932928,'t'),
 (111,6,'yes'), (112,NULL,'will'), (113,NULL,'o'), (114,NULL,'k'), (115,NULL,'she'),
 (116,-1450835968,'abcdefjhjkl'), (117,-975831040,'abcdefjhjkl'), (118,NULL,'z'),
 (119,-343932928,'t');

CREATE TABLE t3 (
  pk int NOT NULL PRIMARY KEY,
  i int,
  v varchar(1024) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
  INDEX idx (v(333))
);
INSERT INTO t3 VALUES 
(1,7,'abcdefjhjkl'),(2,6,'y'), (3,NULL,'to'),(4,7,'n'),(5,7,'look'), (6,NULL,'all'),
(7,1443168256,'c'), (8,1427046400,'right'),
(11,7,'abcdefjhjkl'), (12,6,'y'), (13,NULL,'to'), (14,7,'n'), (15,7,'look'),
(16,NULL,'all'), (17,1443168256,'c'), (18,1427046400,'right'),
(21,7,'abcdefjhjkl'), (22,6,'y'), (23,NULL,'to'), (24,7,'n'), (25,7,'look'),
(26,NULL,'all'), (27,1443168256,'c'), (28,1427046400,'right'),
(31,7,'abcdefjhjkl'), (32,6,'y'), (33,NULL,'to'), (34,7,'n'), (35,7,'look'),
(36,NULL,'all'), (37,1443168256,'c'), (38,1427046400,'right');
INSERT INTO t3 VALUES 
(101,7,'abcdefjhjkl'),(102,6,'y'), (103,NULL,'to'),(104,7,'n'),(105,7,'look'),
(106,NULL,'all'), (107,1443168256,'c'), (108,1427046400,'right'),
(111,7,'abcdefjhjkl'), (112,6,'y'), (113,NULL,'to'), (114,7,'n'), (115,7,'look'),
(116,NULL,'all'), (117,1443168256,'c'), (118,1427046400,'right'),
(121,7,'abcdefjhjkl'), (122,6,'y'), (123,NULL,'to'), (124,7,'n'), (125,7,'look'),
(126,NULL,'all'), (127,1443168256,'c'), (128,1427046400,'right'),
(131,7,'abcdefjhjkl'), (132,6,'y'), (133,NULL,'to'), (134,7,'n'), (135,7,'look'),
(136,NULL,'all'), (137,1443168256,'c'), (138,1427046400,'right');

SET SESSION join_buffer_size = 256;

SET SESSION join_cache_level = 4;
EXPLAIN
SELECT t3.i FROM t1,t2,t3
  WHERE t1.v = t2.v AND t3.v = t1.v AND t2.i <> 0;
SELECT t3.i FROM t1,t2,t3
  WHERE t1.v = t2.v AND t3.v = t1.v AND t2.i <> 0;

SET SESSION join_cache_level = DEFAULT;
SET SESSION join_buffer_size = DEFAULT;

DROP TABLE t1,t2,t3;

--echo #
--echo # Bug #672551: hash join over a long varchar field
--echo #

CREATE TABLE t1 (
  pk int PRIMARY KEY,
  a varchar(512) CHARSET latin1 COLLATE latin1_bin DEFAULT NULL,
  INDEX idx (a)
);
INSERT INTO t1 VALUES (2, 'aa'), (5, 'ccccccc'), (3, 'bb');

CREATE TABLE t2(
  pk int PRIMARY KEY,
  a varchar(512) CHARSET latin1 COLLATE latin1_bin DEFAULT NULL,
  INDEX idx (a)
);
INSERT INTO t2 VALUES 
  (10, 'a'), (20, 'c'), (30, 'aa'), (4, 'bb'),
  (11, 'a'), (21, 'c'), (31, 'aa'), (41, 'cc'),
  (12, 'a'), (22, 'c'), (32, 'bb'), (42, 'aa');
INSERT INTO t2 VALUES 
  (110, 'a'), (120, 'c'), (130, 'aa'), (14, 'bb'),
  (111, 'a'), (121, 'c'), (131, 'aa'), (141, 'cc'),
  (112, 'a'), (122, 'c'), (132, 'bb'), (142, 'aa');

SELECT * FROM t1,t2 WHERE t2.a=t1.a;

SET SESSION join_cache_level = 4;
EXPLAIN
SELECT * FROM t1,t2 WHERE t2.a=t1.a;
SELECT * FROM t1,t2 WHERE t2.a=t1.a;

SET SESSION join_cache_level = DEFAULT;

DROP TABLE t1,t2;

--echo #
--echo # Bug #674431: nested outer join when join_cache_level is set to 7
--echo #

CREATE TABLE t1 (a int, b varchar(32)) ;
INSERT INTO t1 VALUES (5,'h'), (NULL,'j');
CREATE TABLE t2 (a int, b varchar(32), c int) ;
INSERT INTO t2 VALUES (5,'h',100), (NULL,'j',200);
CREATE TABLE t3 (a int, b varchar(32), INDEX idx(b));
INSERT INTO t3 VALUES (77,'h'), (88,'g');

SET SESSION optimizer_switch = 'outer_join_with_cache=on';
SET SESSION join_cache_level = 7;
SELECT t3.a
  FROM t1 LEFT JOIN
       (t2 LEFT OUTER JOIN t3 ON t2.b = t3.b) ON t2.a = t1.b
    WHERE t3.a BETWEEN 3 AND 11 OR t1.a <= t2.c;

SET SESSION optimizer_switch = 'outer_join_with_cache=off';
SET SESSION join_cache_level = DEFAULT;

DROP TABLE t1,t2,t3;

--echo #
--echo # Bug #52540: nested outer join when join_cache_level is set to 3
--echo #

CREATE TABLE t1 (a int);
INSERT INTO t1 VALUES (2);
CREATE TABLE t2 (a varchar(10));
INSERT INTO t2 VALUES ('f'),('x');
CREATE TABLE t3 (pk int(11) PRIMARY KEY);
INSERT INTO t3 VALUES (2);
CREATE TABLE t4 (a varchar(10));

SET SESSION optimizer_switch = 'outer_join_with_cache=on';
SET SESSION join_cache_level = 3;

SELECT *
       FROM t2 LEFT JOIN
           ((t1 JOIN t3 ON t1.a = t3.pk) LEFT JOIN t4 ON 1) ON 1;

SET SESSION optimizer_switch = 'outer_join_with_cache=off';
SET SESSION join_cache_level = DEFAULT;

DROP TABLE t1,t2,t3,t4;

--echo #
--echo # Bug #674423: outer join with ON expression over only outer tables 
--echo #

CREATE TABLE t1 (a int) ;
INSERT INTO t1 VALUES ('9');

CREATE TABLE t2 (pk int, a int) ;
INSERT INTO t2 VALUES ('9',NULL), ('1',NULL);

SET SESSION optimizer_switch = 'outer_join_with_cache=on';

SET SESSION join_cache_level = 0;
EXPLAIN
SELECT * FROM t2 LEFT JOIN t1 ON t2.a <> 0 WHERE t1.a <> 0 OR t2.pk < 9;
SELECT * FROM t2 LEFT JOIN t1 ON t2.a <> 0 WHERE t1.a <>0 OR t2.pk < 9;

SET SESSION join_cache_level = 1;
EXPLAIN
SELECT * FROM t2 LEFT JOIN t1 ON t2.a <> 0 WHERE t1.a <> 0 OR t2.pk < 9;
SELECT * FROM t2 LEFT JOIN t1 ON t2.a <> 0 WHERE t1.a <> 0 OR t2.pk < 9;

SET SESSION optimizer_switch = 'outer_join_with_cache=off';
SET SESSION join_cache_level = DEFAULT;

DROP TABLE t1,t2;

--echo #
--echo # Bug #675095: nested outer join using join buffer 
--echo #

CREATE TABLE t1 (pk int, a1 int) ;
INSERT IGNORE INTO t1 VALUES (2,NULL), (8,0);

CREATE TABLE t2 (pk int, a2 int, c2 int, d2 int) ;
INSERT IGNORE INTO t2 VALUES  (9,0,0,2), (1,0,0,7);

CREATE TABLE t3 (pk int, a3 int, c3 int, d3 int) ;
INSERT IGNORE INTO t3 VALUES  (9,0,0,2), (1,0,0,7);

CREATE TABLE t4 (pk int, a4 int, INDEX idx(a4)) ;
INSERT IGNORE INTO t4 VALUES (2,NULL), (8,0);
INSERT IGNORE INTO t4 VALUES (12,10), (18,20);
INSERT IGNORE INTO t4 VALUES (22,11), (28,21);
INSERT IGNORE INTO t4 VALUES (32,12), (38,22);

CREATE TABLE t5 (pk int, a5 int) ;
INSERT IGNORE INTO t5 VALUES (2,0), (8,0);


SET SESSION optimizer_switch = 'outer_join_with_cache=on';

SET SESSION join_cache_level = 0;

EXPLAIN EXTENDED
SELECT *
  FROM ((t1 LEFT JOIN (t2 JOIN t3 ON t2.c2 = t3.a3) ON t1.pk = t2.d2)
        LEFT JOIN t4 ON t1.a1 = t4.a4) LEFT JOIN t5 ON t3.a3 = t5.a5;
SELECT *
  FROM ((t1 LEFT JOIN (t2 JOIN t3 ON t2.c2 = t3.a3) ON t1.pk = t2.d2)
        LEFT JOIN t4 ON t1.a1 = t4.a4) LEFT JOIN t5 ON t3.a3 = t5.a5;

SET SESSION join_cache_level = 2;

EXPLAIN EXTENDED
SELECT *
  FROM ((t1 LEFT JOIN (t2 JOIN t3 ON t2.c2 = t3.a3) ON t1.pk = t2.d2)
        LEFT JOIN t4 ON t1.a1 = t4.a4) LEFT JOIN t5 ON t3.a3 = t5.a5;
SELECT *
  FROM ((t1 LEFT JOIN (t2 JOIN t3 ON t2.c2 = t3.a3) ON t1.pk = t2.d2)
        LEFT JOIN t4 ON t1.a1 = t4.a4) LEFT JOIN t5 ON t3.a3 = t5.a5;

SET SESSION join_cache_level = 1;

EXPLAIN EXTENDED
SELECT *
  FROM ((t1 LEFT JOIN (t2 JOIN t3 ON t2.c2 = t3.a3) ON t1.pk = t2.d2)
        LEFT JOIN t4 ON t1.a1 = t4.a4) LEFT JOIN t5 ON t3.a3 = t5.a5;
SELECT *
  FROM ((t1 LEFT JOIN (t2 JOIN t3 ON t2.c2 = t3.a3) ON t1.pk = t2.d2)
        LEFT JOIN t4 ON t1.a1 = t4.a4) LEFT JOIN t5 ON t3.a3 = t5.a5;

SET SESSION optimizer_switch = 'outer_join_with_cache=off';
SET SESSION join_cache_level = DEFAULT;

DROP TABLE t1,t2,t3,t4,t5;

--echo #
--echo # Bug #675516: nested outer join with 3 tables in the nest
--echo #             using BNL + BNLH 
--echo #

CREATE TABLE t1 (a1 int, b1 int, c1 int) ;
INSERT INTO t1 VALUES (7,8,0), (6,4,0);

CREATE TABLE t2 (a2 int) ;
INSERT INTO t2 VALUES (5);

CREATE TABLE t3 (a3 int, b3 int, c3 int, PRIMARY KEY (b3)) ;
INSERT INTO t3 VALUES (2,5,0);

CREATE TABLE t4 (a4 int, b4 int, c4 int) ;
INSERT INTO t4 VALUES (7,8,0);

SET SESSION optimizer_switch = 'outer_join_with_cache=on';

SET SESSION join_cache_level = 4;
EXPLAIN
SELECT * FROM
  t1 LEFT JOIN 
  ((t2 JOIN t3 ON t2.a2 = t3.b3) JOIN t4 ON t4.b4 <> 0) ON t1.c1 = t3.c3
   WHERE t3.a3 IS NULL;
SELECT * FROM
  t1 LEFT JOIN 
  ((t2 JOIN t3 ON t2.a2 = t3.b3) JOIN t4 ON t4.b4 <> 0) ON t1.c1 = t3.c3
   WHERE t3.a3 IS NULL;

SET SESSION join_cache_level = 0;
EXPLAIN
SELECT * FROM
  t1 LEFT JOIN 
  ((t2 JOIN t3 ON t2.a2 = t3.b3) JOIN t4 ON t4.b4 <> 0) ON t1.c1 = t3.c3
   WHERE t3.a3 IS NULL;
SELECT * FROM
  t1 LEFT JOIN 
  ((t2 JOIN t3 ON t2.a2 = t3.b3) JOIN t4 ON t4.b4 <> 0) ON t1.c1 = t3.c3
   WHERE t3.a3 IS NULL;

SET SESSION optimizer_switch = 'outer_join_with_cache=off';
SET SESSION join_cache_level = DEFAULT;

DROP TABLE t1,t2,t3,t4;

--echo #
--echo # Bug #660963: nested outer join with join_cache_level set to 5
--echo #

CREATE TABLE t1 (a1 int) ;
INSERT INTO t1 VALUES (0),(0);

CREATE TABLE t2 (a2 int, b2 int, PRIMARY KEY (a2)) ;
INSERT INTO t2 VALUES (2,1);

CREATE TABLE t3 (a3 int, b3 int, PRIMARY KEY (a3)) ;
INSERT INTO t3 VALUES (2,1);

SET SESSION optimizer_switch = 'outer_join_with_cache=on';

SET SESSION join_cache_level = 6;
EXPLAIN
SELECT * FROM t1 LEFT JOIN t2 JOIN t3 ON t3.a3 = t2.a2 ON t3.b3 <> 0;
SELECT * FROM t1 LEFT JOIN t2 JOIN t3 ON t3.a3 = t2.a2 ON t3.b3 <> 0;

SET SESSION join_cache_level = 5;
EXPLAIN
SELECT * FROM t1 LEFT JOIN t2 JOIN t3 ON t3.a3 = t2.a2 ON t3.b3 <> 0;
SELECT * FROM t1 LEFT JOIN t2 JOIN t3 ON t3.a3 = t2.a2 ON t3.b3 <> 0;

SET SESSION optimizer_switch = 'outer_join_with_cache=off';
SET SESSION join_cache_level = DEFAULT;

DROP TABLE t1,t2,t3;

--echo #
--echo # Bug #675922: incremental buffer for BKA with access from previous
--echo #      buffers from non-nullable columns whose values may be null
--echo #

CREATE TABLE t1 (a1 varchar(32)) ;
INSERT INTO t1 VALUES ('s'),('k');

CREATE TABLE t2 (a2 int PRIMARY KEY, b2 varchar(32)) ;
INSERT INTO t2 VALUES (7,'s');

CREATE TABLE t3 (a3 int PRIMARY KEY, b3 varchar(32)) ;
INSERT INTO t3 VALUES (7,'s');

CREATE TABLE t4 (a4 int) ;
INSERT INTO t4 VALUES (9);

CREATE TABLE t5(a5 int PRIMARY KEY, b5 int) ;
INSERT INTO t5 VALUES (7,0);

SET SESSION optimizer_switch = 'outer_join_with_cache=on';

SET SESSION join_cache_level = 0;
EXPLAIN
SELECT t4.a4, t5.b5 
  FROM ((t1 LEFT JOIN (t2 JOIN t3 ON t2.a2 = t3.a3) ON t2.b2 = t1.a1)
       LEFT JOIN t4 ON t4.a4 <> 0) LEFT JOIN t5 ON t5.a5 = t2.a2;
SELECT t4.a4, t5.b5 
  FROM ((t1 LEFT JOIN (t2 JOIN t3 ON t2.a2 = t3.a3) ON t2.b2 = t1.a1)
       LEFT JOIN t4 ON t4.a4 <> 0) LEFT JOIN t5 ON t5.a5 = t2.a2;

SET SESSION join_cache_level = 6;
EXPLAIN
SELECT t4.a4, t5.b5 
  FROM ((t1 LEFT JOIN (t2 JOIN t3 ON t2.a2 = t3.a3) ON t2.b2 = t1.a1)
       LEFT JOIN t4 ON t4.a4 <> 0) LEFT JOIN t5 ON t5.a5 = t2.a2;
SELECT t4.a4, t5.b5 
  FROM ((t1 LEFT JOIN (t2 JOIN t3 ON t2.a2 = t3.a3) ON t2.b2 = t1.a1)
       LEFT JOIN t4 ON t4.a4 <> 0) LEFT JOIN t5 ON t5.a5 = t2.a2;

SET SESSION optimizer_switch = 'outer_join_with_cache=off';
SET SESSION join_cache_level = DEFAULT;

DROP TABLE t1,t2,t3,t4,t5;

--echo #
--echo # Bug #670380: hash join for non-binary collation
--echo #


CREATE TABLE t1 (pk int PRIMARY KEY, a varchar(32));
CREATE TABLE t2 (pk int PRIMARY KEY, a varchar(32), INDEX idx(a));
INSERT INTO t1 VALUES
  (10,'AAA'), (20,'BBBB'), (30,'Cc'), (40,'DD'), (50,'ee');
INSERT INTO t2 VALUES
  (1,'Bbbb'), (2,'BBB'), (3,'bbbb'), (4,'AaA'), (5,'CC'),
  (6,'cC'), (7,'CCC'), (8,'AAA'), (9,'bBbB'), (10,'aaaa'),
  (11,'a'), (12,'dd'), (13,'EE'), (14,'ee'), (15,'D'),
  (101,'Bbbb'), (102,'BBB'), (103,'bbbb'), (104,'AaA'), (105,'CC'),
  (106,'cC'), (107,'CCC'), (108,'AAA'), (109,'bBbB'), (110,'aaaa'),
  (111,'a'), (112,'dd'), (113,'EE'), (114,'ee'), (115,'D');

SET SESSION join_cache_level = 4;

EXPLAIN
SELECT * FROM t1,t2 WHERE t1.a=t2.a;
SELECT * FROM t1,t2 WHERE t1.a=t2.a;

SET SESSION join_cache_level = DEFAULT;

DROP TABLE t1,t2;

--echo #
--echo # Bug #694092: incorrect detection of index only pushdown conditions
--echo #

CREATE TABLE t1 (
  f1 varchar(10), f3 int(11), PRIMARY KEY (f3)
);
INSERT INTO t1 VALUES ('y',1),('or',5);

CREATE TABLE t2 (
 f3 int(11), f2 varchar(1024), f4 varchar(10), PRIMARY KEY (f3)
);
INSERT INTO t2 VALUES (6,'RPOYT','y'),(10,'JINQE','m');

SET SESSION join_cache_level = 1;

SET SESSION optimizer_switch = 'index_condition_pushdown=off';
EXPLAIN
SELECT * FROM t1,t2
  WHERE t1.f1 = t2.f4 AND (t1.f3 = 1 AND t2.f3 = 4 OR t1.f3 = 2 AND t2.f3 = 6);
SELECT * FROM t1,t2
  WHERE t1.f1 = t2.f4 AND (t1.f3 = 1 AND t2.f3 = 4 OR t1.f3 = 2 AND t2.f3 = 6);

SET SESSION optimizer_switch = 'index_condition_pushdown=on';
EXPLAIN
SELECT * FROM t1,t2
  WHERE t1.f1 = t2.f4 AND (t1.f3 = 1 AND t2.f3 = 4 OR t1.f3 = 2 AND t2.f3 = 6);
SELECT * FROM t1,t2
  WHERE t1.f1 = t2.f4 AND (t1.f3 = 1 AND t2.f3 = 4 OR t1.f3 = 2 AND t2.f3 = 6);

SET SESSION join_cache_level = DEFAULT;
SET SESSION optimizer_switch = @local_join_cache_test_optimizer_switch_default;

DROP TABLE t1,t2;

# The same cause of the problem but no join buffer is used (see bug #695442)

CREATE TABLE t1 (f1 int, f2 varchar(10), KEY (f1), KEY (f2)) ;
INSERT INTO t1 VALUES
  (4,'e'), (891879424,'l'), (-243400704,'ectlyqupbk'), (1851981824,'of'),
  (-1495203840,'you'), (4,'no'), (-1436942336,'c'), (891420672,'DQQYO'),
  (608698368,'qergldqmec'), (1,'x');

CREATE TABLE t2 (f3 varchar(64), KEY (f3));
INSERT INTO t2 VALUES 
  ('d'), ('UALLN'), ('d'), ('z'), ('r'), ('YVAKV'), ('d'), ('TNGZK'), ('e'),
  ('xucupaxdyythsgiw'), ('why'), ('ttugkxucupaxdyyt'), ('l'), ('LHTKN'),
  ('d'), ('o'), ('v'), ('KGLCJ'), ('your');


SET SESSION optimizer_switch='index_merge_sort_intersection=off';

SET SESSION optimizer_switch = 'index_condition_pushdown=off';
EXPLAIN SELECT * FROM t1,t2 
  WHERE t2.f3 = t1.f2 AND t1.f1 IN (9, 0, 100) ORDER BY t1.f2 LIMIT 1;
SELECT * FROM t1,t2 
  WHERE t2.f3 = t1.f2 AND t1.f1 IN (9, 0 ,100) ORDER BY t1.f2 LIMIT 1;
SET SESSION optimizer_switch = @local_join_cache_test_optimizer_switch_default;

SET SESSION optimizer_switch = 'index_condition_pushdown=on';
EXPLAIN SELECT * FROM t1,t2 
  WHERE t2.f3 = t1.f2 AND t1.f1 IN (9, 0 ,100) ORDER BY t1.f2 LIMIT 1;
SELECT * FROM t1,t2 
  WHERE t2.f3 = t1.f2 AND t1.f1 IN (9, 0 ,100) ORDER BY t1.f2 LIMIT 1;

SET SESSION optimizer_switch = @local_join_cache_test_optimizer_switch_default;

DROP TABLE t1,t2;

--echo #
--echo # Bug #694443: hash join using IS NULL the an equi-join condition
--echo #

CREATE TABLE t1 (a int PRIMARY KEY);
INSERT INTO t1 VALUES
  (7), (4), (9), (1), (3), (8), (2);

CREATE TABLE t2 (a int, b int, INDEX idx (a));
INSERT INTO t2 VALUES
  (NULL,10), (4,80), (7,70), (6,11), (7,90), (NULL,40),
  (4,77), (4,50), (NULL,41), (7,99), (7,88), (8,12),
  (1,21), (4,90), (7,91), (8,22), (6,92), (NULL,42),
  (2,78), (2,51), (1,43), (5,97), (5,89);

SET SESSION join_cache_level = 1;
EXPLAIN 
SELECT * FROM t1,t2 WHERE t1.a < 3 and t2.a IS NULL;
SELECT * FROM t1,t2 WHERE t1.a < 3 and t2.a IS NULL;

SET SESSION join_cache_level = 4;
EXPLAIN 
SELECT * FROM t1,t2 WHERE t1.a < 3 and t2.a IS NULL;
SELECT * FROM t1,t2 WHERE t1.a < 3 and t2.a IS NULL;


SET SESSION join_cache_level = DEFAULT;

DROP TABLE t1,t2;
  
--echo #
--echo # Bug #697557: hash join on a varchar field 
--echo #

CREATE TABLE t1 ( f1 varchar(10) , f2 int(11) , KEY (f1));
INSERT INTO t1 VALUES ('r',1), ('m',2);

CREATE TABLE t2 ( f1 varchar(10) , f2 int(11) , KEY (f1));
INSERT INTO t2 VALUES
  ('hgtofubn',1), ('GDOXZ',91), ('n',2), ('fggxgalh',88),
  ('hgtofu',1), ('GDO',101), ('n',3), ('fggxga',55),
  ('hgtofu',3), ('GDO',33), ('nn',3), ('fggxgarrr',77),
  ('jgtofu',3), ('JDO',33), ('mn',3), ('jggxgarrr',77),
  ('igtofu',3), ('IDO',33), ('ln',3), ('iggxgarrr',77);


SET SESSION join_cache_level=3;

EXPLAIN 
SELECT * FROM t1,t2 WHERE t2.f1 = t1.f1;
SELECT * FROM t1,t2 WHERE t2.f1 = t1.f1;

SET SESSION join_cache_level = DEFAULT;

DROP TABLE t1,t2;

--echo #
--echo # Bug #707827: hash join on varchar column with NULLs 
--echo #

CREATE TABLE t1 (v varchar(1));
INSERT INTO t1 VALUES ('o'), ('u');

CREATE TABLE t2 (a int, v varchar(1), INDEX idx (v)) ;
INSERT INTO t2 VALUES
  (8,NULL), (10,'b'), (5,'k'), (4,NULL),
  (1,NULL), (11,'u'), (7,NULL), (2,'d'), 
  (18,'u'), (11,'b'), (15,'k'), (12,'d'), 
  (18,'x'), (11,'y'), (15,'l'), (12,'e'); 

SET SESSION join_buffer_size = 256;

SET SESSION join_cache_level = 4;
EXPLAIN
SELECT a FROM t1,t2 WHERE t2.v = t1.v ;
SELECT a FROM t1,t2 WHERE t2.v = t1.v ;

SET SESSION join_cache_level = 1;
EXPLAIN
SELECT a FROM t1,t2 WHERE t2.v = t1.v ;
SELECT a FROM t1,t2 WHERE t2.v = t1.v ;

SET SESSION join_cache_level = DEFAULT;
SET SESSION join_buffer_size = DEFAULT;

DROP TABLE t1,t2;

--echo #
--echo # Bug #802860: crash on join cache + derived + duplicate_weedout 
--echo #

SET SESSION optimizer_switch=
  'semijoin=on,materialization=off,firstmatch=off,loosescan=off,derived_with_keys=on';

CREATE TABLE t1 (a int) ;
INSERT IGNORE INTO t1 VALUES (0), (1), (0);

CREATE TABLE t2 (a int) ;
INSERT IGNORE INTO t2 VALUES (0), (3), (0), (2);

SET SESSION join_cache_level = 0;

EXPLAIN
SELECT * FROM (SELECT DISTINCT * FROM t1) t
  WHERE t.a IN (SELECT t2.a FROM t2);
SELECT * FROM (SELECT DISTINCT * FROM t1) t
  WHERE t.a IN (SELECT t2.a FROM t2);

SET SESSION join_cache_level = 1;

EXPLAIN
SELECT * FROM (SELECT DISTINCT * FROM t1) t
  WHERE t.a  IN (SELECT t2.a FROM t2);
SELECT * FROM (SELECT DISTINCT * FROM t1) t
  WHERE t.a  IN (SELECT t2.a FROM t2);

SET SESSION join_cache_level = DEFAULT;

DROP TABLE t1, t2;

--echo #
--echo # Bug #887479: join_cache_level=3 + semijoin=on 
--echo #

CREATE TABLE t1 (a int, b int);
INSERT INTO t1 VALUES (3914,17), (3710,5), (3888,20);

CREATE TABLE t2 (c int, KEY (c));
INSERT INTO t2 VALUES (27), (17), (33), (20), (3), (7), (18), (2);

SET @tmp887479_optimizer_switch=@@optimizer_switch;
SET SESSION optimizer_switch='semijoin=on';
SET SESSION optimizer_switch='semijoin_with_cache=on';

SET SESSION join_cache_level=1;
EXPLAIN
SELECT * FROM t1 WHERE (t1.b) IN (SELECT c FROM t2);
SELECT * FROM t1 WHERE (t1.b) IN (SELECT c FROM t2);

SET SESSION join_cache_level=3;
EXPLAIN
SELECT * FROM t1 WHERE (t1.b) IN (SELECT c FROM t2);
SELECT * FROM t1 WHERE (t1.b) IN (SELECT c FROM t2);

SET SESSION join_cache_level = DEFAULT;
SET optimizer_switch=@tmp887479_optimizer_switch;

DROP TABLE t1,t2;

--echo #
--echo # Bug #899777: join_cache_level=4 + semijoin=on 
--echo #

CREATE TABLE t1 (a int, b int, c int, UNIQUE INDEX idx (a));
INSERT INTO t1 VALUES (1,8,6), (2,2,8);
CREATE TABLE t2 (a int, b int, c int, UNIQUE INDEX idx (a));
INSERT INTO t2 VALUES (1,8,6), (2,2,8);
CREATE TABLE t3 (a int, b int, c int, UNIQUE INDEX idx (a));
INSERT INTO t3 VALUES (1,8,6), (2,2,8);
CREATE TABLE t4 (a int, b int, c int, UNIQUE INDEX idx (a));
INSERT INTO t4 VALUES (1,8,6), (2,2,8);

SET @tmp_optimizer_switch=@@optimizer_switch;
SET SESSION optimizer_switch='semijoin=on';
SET SESSION optimizer_switch='semijoin_with_cache=on';

SET SESSION join_cache_level=1;
EXPLAIN 
SELECT t1.* FROM t1,t2
  WHERE (t1.b,t2.b) IN (SELECT t3.b,t4.b FROM t3,t4 WHERE t4.c=t3.b)
        AND t1.a = 1;
SELECT t1.* FROM t1,t2
  WHERE (t1.b,t2.b) IN (SELECT t3.b,t4.b FROM t3,t4 WHERE t4.c=t3.b)
        AND t1.a = 1;

SET SESSION join_cache_level=4;
EXPLAIN 
SELECT t1.* FROM t1,t2
  WHERE (t1.b,t2.b) IN (SELECT t3.b,t4.b FROM t3,t4 WHERE t4.c=t3.b)
        AND t1.a = 1;
SELECT t1.* FROM t1,t2
  WHERE (t1.b,t2.b) IN (SELECT t3.b,t4.b FROM t3,t4 WHERE t4.c=t3.b)
        AND t1.a = 1;

SET SESSION join_cache_level = DEFAULT;
SET optimizer_switch=@tmp_optimizer_switch;

DROP TABLE t1,t2,t3,t4;

--echo #
--echo # Bug #899509: an attempt to use hash join with join_cache_level=0 
--echo #

CREATE TABLE t1 (a int);
INSERT INTO t1 VALUES (8), (7);
CREATE TABLE t2 (a int);
INSERT INTO t2 VALUES (8), (7);
CREATE TABLE t3 (a int);
INSERT INTO t3 VALUES (8), (7);

SET @tmp_optimizer_switch=@@optimizer_switch;
set optimizer_switch=default;
set @@optimizer_switch='semijoin_with_cache=off';
set @@optimizer_switch='outer_join_with_cache=off';
SET optimizer_switch='derived_merge=off,derived_with_keys=off';
SET join_cache_level=0;

EXPLAIN
SELECT * FROM (SELECT t1.* FROM t1, t2) t WHERE t.a IN (SELECT * FROM t3);
SELECT * FROM (SELECT t1.* FROM t1, t2) t WHERE t.a IN (SELECT * FROM t3);

SELECT * FROM ( SELECT ta.* FROM t1 AS ta, t1 ) tb WHERE a IN ( SELECT * FROM t1 );

SET SESSION join_cache_level = DEFAULT;
SET optimizer_switch=@tmp_optimizer_switch;

DROP TABLE t1,t2,t3;

--echo #
--echo # Bug #900469: semijoin + BNLH + ORDER BY 
--echo #

CREATE TABLE t1 (a int, b int);
INSERT INTO t1 VALUES (8,10);

CREATE TABLE t2 (c int, d int);
INSERT INTO t2 VALUES (8,10);
INSERT INTO t2 VALUES (9,11);

CREATE TABLE t3 (c int, d int);
INSERT INTO t3 VALUES (8,10);
INSERT INTO t3 VALUES (9,11);

SET @tmp_optimizer_switch=@@optimizer_switch;
set @@optimizer_switch='semijoin_with_cache=on';

SET join_cache_level=1;
EXPLAIN
SELECT * FROM t1,t2 WHERE b IN (SELECT d FROM t3 WHERE c <= t2.c) ORDER BY a,d;
SELECT * FROM t1,t2 WHERE b IN (SELECT d FROM t3 WHERE c <= t2.c) ORDER BY a,d;

SET join_cache_level=3;
EXPLAIN
SELECT * FROM t1,t2 WHERE b IN (SELECT d FROM t3 WHERE c <= t2.c);
SELECT * FROM t1,t2 WHERE b IN (SELECT d FROM t3 WHERE c <= t2.c);

SET join_cache_level=3;
EXPLAIN
SELECT * FROM t1,t2 WHERE b IN (SELECT d FROM t3 WHERE c <= t2.c) ORDER BY a,d;
SELECT * FROM t1,t2 WHERE b IN (SELECT d FROM t3 WHERE c <= t2.c) ORDER BY a,d;

SET SESSION join_cache_level = DEFAULT;
SET optimizer_switch=@tmp_optimizer_switch;

DROP TABLE t1,t2,t3;

--echo #
--echo # Bug #901478: semijoin + ORDER BY + join_cache_level=4|6 
--echo #

CREATE TABLE t1 (a char(1));
INSERT INTO t1 VALUES ('x');
CREATE TABLE t2 (a int, b int, c int, KEY(a), KEY(b), KEY(c));
INSERT INTO t2 VALUES
  (9,1,0), (7,2,8), (2,3,5), (4,2,9), (8,3,8), (3,4,1), (5,5,4);
CREATE TABLE t3 (a CHAR(1));
INSERT INTO t3 VALUES ('x');
CREATE TABLE t4 (a int, b int, c int, KEY(b), KEY(c));
INSERT INTO t4 VALUES
  (9,1,0), (7,2,8), (2,3,5), (4,2,9), (8,3,8), (3,4,1), (5,5,4);
INSERT INTO t4 VALUES
  (19,11,10), (17,12,18), (12,13,15), (14,12,19),
  (18,13,18), (13,14,11), (15,15,14);

SET @tmp_optimizer_switch=@@optimizer_switch;
SET @@optimizer_switch='semijoin=on';
SET @@optimizer_switch='firstmatch=off';
SET @@optimizer_switch='mrr=off';
SET @@optimizer_switch='semijoin_with_cache=off';

set join_cache_level=1;
EXPLAIN
SELECT * FROM t1,t2
  WHERE t2.c IN (SELECT c FROM t3,t4 WHERE t4.a < 10) AND
        t2.a BETWEEN 4 and 5
  ORDER BY t2.b;
SELECT * FROM t1,t2
  WHERE t2.c IN (SELECT c FROM t3,t4 WHERE t4.a < 10) AND
        t2.a BETWEEN 4 and 5
  ORDER BY t2.b;

set join_cache_level=4;
EXPLAIN
SELECT * FROM t1,t2
  WHERE t2.c IN (SELECT c FROM t3,t4 WHERE t4.a < 10) AND
        t2.a BETWEEN 4 and 5
  ORDER BY t2.b;
SELECT * FROM t1,t2
  WHERE t2.c IN (SELECT c FROM t3,t4 WHERE t4.a < 10) AND
        t2.a BETWEEN 4 and 5
  ORDER BY t2.b;

SET @@optimizer_switch='semijoin_with_cache=on';
set join_cache_level=6;
EXPLAIN
SELECT * FROM t1,t2
  WHERE t2.c IN (SELECT c FROM t3,t4 WHERE t4.a < 10) AND
        t2.a BETWEEN 4 and 5
  ORDER BY t2.b;
SELECT * FROM t1,t2
  WHERE t2.c IN (SELECT c FROM t3,t4 WHERE t4.a < 10) AND
        t2.a BETWEEN 4 and 5
  ORDER BY t2.b;

SET join_cache_level = DEFAULT;
SET optimizer_switch=@tmp_optimizer_switch;

DROP TABLE t1,t2,t3,t4;

--echo #
--echo # Bug#53305 Duplicate weedout + join buffer (join cache --level=7,8)
--echo #

create table t1 (uid int, fid int, index(uid));
insert into t1 values
  (1,1), (1,2), (1,3), (1,4),
  (2,5), (2,6), (2,7), (2,8),
  (3,1), (3,2), (3,9);

create table t2 (uid int primary key, name varchar(128), index(name));
insert into t2 values 
  (1, "A"), (2, "B"), (3, "C"), (4, "D"), (5, "E"),
  (6, "F"), (7, "G"), (8, "H"), (9, "I");

create table t3 (uid int, fid int, index(uid));
insert into t3 values
  (1,1), (1,2), (1,3),(1,4),
  (2,5), (2,6), (2,7), (2,8),
  (3,1), (3,2), (3,9);

set @tmp_optimizer_switch=@@optimizer_switch;
set  @@optimizer_switch='semijoin=on';
set optimizer_switch='materialization=off';
set optimizer_switch='loosescan=off,firstmatch=off';
set optimizer_switch='mrr_sort_keys=off';
set join_cache_level=7;

create table t4 (uid int primary key, name varchar(128), index(name));
insert into t4 values 
  (1, "A"), (2, "B"), (3, "C"), (4, "D"), (5, "E"),
  (6, "F"), (7, "G"), (8, "H"), (9, "I");

explain select name from t2, t1 
  where t1.uid in (select t4.uid from t4, t3 where t3.uid=1 and t4.uid=t3.fid)
        and t2.uid=t1.fid;

--sorted_result
select name from t2, t1 
  where t1.uid in (select t4.uid from t4, t3 where t3.uid=1 and t4.uid=t3.fid)
        and t2.uid=t1.fid;

set join_cache_level = default;
set optimizer_switch=@tmp_optimizer_switch;

drop table t1,t2,t3,t4;

--echo #
--echo # Bug#50358 - semijoin execution of subquery with outerjoin
--echo #             emplying join buffer
--echo #

CREATE TABLE t1 (i int);
CREATE TABLE t2 (i int);
CREATE TABLE t3 (i int);
INSERT INTO t1 VALUES (1), (2);
INSERT INTO t2 VALUES (6);
INSERT INTO t3 VALUES (1), (2);

set @tmp_optimizer_switch=@@optimizer_switch;
set  @@optimizer_switch='semijoin=on';
set optimizer_switch='materialization=on';

set join_cache_level=0;
EXPLAIN
SELECT * FROM t1 WHERE t1.i IN 
                       (SELECT t3.i FROM t3 LEFT JOIN t2 ON t2.i=t3.i);
SELECT * FROM t1 WHERE t1.i IN 
                       (SELECT t3.i FROM t3 LEFT JOIN t2 ON t2.i=t3.i);

set join_cache_level=2;
EXPLAIN
SELECT * FROM t1 WHERE t1.i IN 
                       (SELECT t3.i FROM t3 LEFT JOIN t2 ON t2.i=t3.i);
SELECT * FROM t1 WHERE t1.i IN 
                       (SELECT t3.i FROM t3 LEFT JOIN t2 ON t2.i=t3.i);

set join_cache_level = default;
set optimizer_switch=@tmp_optimizer_switch;

DROP TABLE t1,t2,t3;

--echo #
--echo # Bug #12546542: missing row with semijoin=off + join cache
--echo # (LP bug #922971)
--echo #

CREATE TABLE t1 (a varchar(1024));
INSERT INTO t1 VALUES ('v'), ('we');
CREATE TABLE t2 (
  a varchar(1024) CHARACTER SET utf8 DEFAULT NULL, b int, c int
);
INSERT INTO t2 VALUES ('we',4,NULL), ('v',1305673728,6);
CREATE TABLE t3 (b int, c int);
INSERT INTO t3 VALUES (4,4);

set @tmp_optimizer_switch=@@optimizer_switch;
set optimizer_switch='semijoin=off';
set optimizer_switch='materialization=off';

set join_cache_level=0;
EXPLAIN
SELECT * FROM t1
  WHERE a IN (SELECT t2.a FROM t2 LEFT JOIN t3 ON t2.b = t3.b 
                WHERE t2.c < 10 OR t3.c > 1);

SELECT * FROM t1
  WHERE a IN (SELECT t2.a FROM t2 LEFT JOIN t3 ON t2.b = t3.b 
                WHERE t2.c < 10 OR t3.c > 1);

set join_cache_level=2;
EXPLAIN
SELECT * FROM t1
  WHERE a IN (SELECT t2.a FROM t2 LEFT JOIN t3 ON t2.b = t3.b
                WHERE t2.c < 10 OR t3.c > 1);
SELECT * FROM t1
  WHERE a IN (SELECT t2.a FROM t2 LEFT JOIN t3 ON t2.b = t3.b
                WHERE t2.c < 10 OR t3.c > 1);

set join_cache_level = default;
set optimizer_switch=@tmp_optimizer_switch;

DROP TABLE t1,t2,t3;

--echo #
--echo # Bug #925985: LEFT JOIN with optimize_join_buffer_size=off +
--echo #              join_buffer_size > join_buffer_space_limit
--echo #

CREATE TABLE t1 (a int);
INSERT INTO t1 VALUES (5), (3);

CREATE TABLE t2 (a int, b int);
INSERT INTO t2 VALUES
  (3,30), (1,10), (7,70), (2,20),
  (3,31), (1,11), (7,71), (2,21),
  (3,32), (1,12), (7,72), (2,22);

CREATE TABLE t3 (b int, c int);
INSERT INTO t3 VALUES (32, 302), (42,400), (30,300);

set @tmp_optimizer_switch=@@optimizer_switch;
set optimizer_switch='optimize_join_buffer_size=off';
set join_buffer_space_limit=4096;
set join_buffer_size=4096*2;
set join_cache_level=2;
set optimizer_switch='outer_join_with_cache=on';

EXPLAIN
SELECT * FROM t1, t2 LEFT JOIN t3 ON t2.b=t3.b WHERE t1.a=t2.a;
SELECT * FROM t1, t2 LEFT JOIN t3 ON t2.b=t3.b WHERE t1.a=t2.a;
  
set join_buffer_space_limit=default;
set join_buffer_size=default;
set join_cache_level=default;
set optimizer_switch=@tmp_optimizer_switch;

DROP TABLE t1,t2,t3;

--echo #
--echo # Bug #1058071: LEFT JOIN using blobs 
--echo # (mdev-564)    when join buffer size is small 
--echo #

CREATE TABLE t1 (
  col269 decimal(31,10) unsigned DEFAULT NULL,
  col280 geometry DEFAULT NULL,
  col281 tinyint(1) DEFAULT NULL,
  col282 time NOT NULL,
  col284 datetime DEFAULT NULL,
  col286 date DEFAULT NULL,
  col287 datetime DEFAULT NULL,
  col288 decimal(30,29) DEFAULT NULL,
  col291 time DEFAULT NULL,
  col292 time DEFAULT NULL
) ENGINE=Aria;

INSERT INTO t1 VALUES
(0.0,PointFromText('POINT(9 0)'),0,'11:24:05','2013-04-14 21:30:28',NULL,'2011-12-20 06:00:34',9.9,'13:04:39',NULL),
(0.0,NULL,127,'05:43:12','2012-09-05 06:15:27','2027-01-01','2011-10-29 10:48:29',0.0,'06:24:05','11:33:37'),
(0.0,NULL,127,'12:54:41','2013-01-12 11:32:58','2011-11-03','2013-01-03 02:00:34',00,'11:54:15','20:19:15'),
(0.0,PointFromText('POINT(9 0)'),0,'19:48:07','2012-07-16 15:45:25','2012-03-25','2013-09-07 17:21:52',0.5,'17:36:54','21:24:19'),
(0.0,PointFromText('POINT(9 0)'),0,'03:43:48','2012-09-28 00:00:00','2012-06-26','2011-11-16 05:01:09',00,'01:25:42','19:30:06'),
(0.0,LineStringFromText('LINESTRING(0 0,9 9,0 0,9 0,0 0)'),127,'11:33:21','2012-03-31 10:29:22','2012-10-10','2012-04-21 19:21:06',NULL,'05:13:22','09:48:34'),
(NULL,PointFromText('POINT(9 0)'),127,'00:00:00','0000-00-00','2012-04-04 21:26:12','2013-03-04',0.0,'12:54:30',NULL),
(NULL,PointFromText('POINT(9 0)'),1,'00:00:00','2013-05-01 22:37:49','2013-06-26','2012-09-22 17:31:03',0.0,'08:09:57','11:15:36');

CREATE TABLE t2 (b int) ENGINE=Aria;
INSERT INTO t2 VALUES (NULL);
CREATE TABLE t3 (c int) ENGINE=Aria;
INSERT INTO t3 VALUES (NULL);

set @tmp_optimizer_switch=@@optimizer_switch;
set optimizer_switch = 'outer_join_with_cache=on,join_cache_incremental=on';
set join_buffer_size=128;

EXPLAIN
SELECT 1 AS c FROM t1 NATURAL LEFT JOIN t2 LEFT OUTER JOIN t3 ON 1
  GROUP BY elt(t1.col282,1,t1.col280);

SELECT 1 AS c FROM t1 NATURAL LEFT JOIN t2 LEFT OUTER JOIN t3 ON 1
  GROUP BY elt(t1.col282,1,t1.col280);

set join_buffer_size=default;
set optimizer_switch=@tmp_optimizer_switch;

DROP table t1,t2,t3;
set join_buffer_size= default;
set @@optimizer_switch=@save_optimizer_switch;


--echo #
--echo # MDEV-5293: outer join, join buffering, and order by - invalid query plan
--echo #
create table t0 (a int primary key) engine=myisam;
insert into t0 values (1);

create table t1(a int) engine=myisam;
insert into t1 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
alter table t1 add b int;

create table t2 like t1;
insert into t2 select * from t1;
--echo #The following must use "Using temporary; Using filesort" and not just "Using filesort":
explain select * from t0,t1 left join t2 on t1.b=t2.b order by t0.a, t1.a;

drop table t0,t1,t2;

--echo #
--echo # mdev-6292: huge performance degradation for a sequence
--echo #            of LEFT JOIN operations when using join buffer
--echo #

--source include/have_innodb.inc

CREATE TABLE t1 (
  id int(11) NOT NULL AUTO_INCREMENT,
  col1 varchar(255) NOT NULL DEFAULT '',
  PRIMARY KEY (id)
) ENGINE=INNODB;

CREATE TABLE t2 (
  id int(11) NOT NULL AUTO_INCREMENT,
  parent_id smallint(3) NOT NULL DEFAULT '0',
  col2 varchar(25) NOT NULL DEFAULT '',
  PRIMARY KEY (id)
) ENGINE=INNODB;

set join_buffer_size=8192;

set join_cache_level=0;

set @init_time:=now(); 
SELECT t.* 
FROM 
  t1 t 
  LEFT JOIN t2 c1 ON c1.parent_id = t.id AND c1.col2 = "val"
  LEFT JOIN t2 c2 ON c2.parent_id = t.id AND c2.col2 = "val"
  LEFT JOIN t2 c3 ON c3.parent_id = t.id AND c3.col2 = "val"
  LEFT JOIN t2 c4 ON c4.parent_id = t.id AND c4.col2 = "val"
  LEFT JOIN t2 c5 ON c5.parent_id = t.id AND c5.col2 = "val"
  LEFT JOIN t2 c6 ON c6.parent_id = t.id AND c6.col2 = "val"
  LEFT JOIN t2 c7 ON c7.parent_id = t.id AND c7.col2 = "val"
  LEFT JOIN t2 c8 ON c8.parent_id = t.id AND c8.col2 = "val"
  LEFT JOIN t2 c9 ON c9.parent_id = t.id AND c9.col2 = "val"
  LEFT JOIN t2 c10 ON c10.parent_id = t.id AND c10.col2 = "val"
  LEFT JOIN t2 c11 ON c11.parent_id = t.id AND c11.col2 = "val"
  LEFT JOIN t2 c12 ON c12.parent_id = t.id AND c12.col2 = "val"
  LEFT JOIN t2 c13 ON c13.parent_id = t.id AND c13.col2 = "val"
  LEFT JOIN t2 c14 ON c14.parent_id = t.id AND c14.col2 = "val"
  LEFT JOIN t2 c15 ON c15.parent_id = t.id AND c15.col2 = "val"
  LEFT JOIN t2 c16 ON c16.parent_id = t.id AND c16.col2 = "val"
  LEFT JOIN t2 c17 ON c17.parent_id = t.id AND c17.col2 = "val"
  LEFT JOIN t2 c18 ON c18.parent_id = t.id AND c18.col2 = "val"
  LEFT JOIN t2 c19 ON c19.parent_id = t.id AND c19.col2 = "val"
  LEFT JOIN t2 c20 ON c20.parent_id = t.id AND c20.col2 = "val"
  LEFT JOIN t2 c21 ON c21.parent_id = t.id AND c21.col2 = "val"
  LEFT JOIN t2 c22 ON c22.parent_id = t.id AND c22.col2 = "val"
  LEFT JOIN t2 c23 ON c23.parent_id = t.id AND c23.col2 = "val"
  LEFT JOIN t2 c24 ON c24.parent_id = t.id AND c24.col2 = "val"
  LEFT JOIN t2 c25 ON c25.parent_id = t.id AND c25.col2 = "val"
  LEFT JOIN t2 c26 ON c26.parent_id = t.id AND c26.col2 = "val"
  LEFT JOIN t2 c27 ON c27.parent_id = t.id AND c27.col2 = "val"
ORDER BY 
  col1;
select timestampdiff(second, @init_time, now()) <= 5;

set join_cache_level=2;

set @init_time:=now(); 
SELECT t.* 
FROM 
  t1 t 
  LEFT JOIN t2 c1 ON c1.parent_id = t.id AND c1.col2 = "val"
  LEFT JOIN t2 c2 ON c2.parent_id = t.id AND c2.col2 = "val"
  LEFT JOIN t2 c3 ON c3.parent_id = t.id AND c3.col2 = "val"
  LEFT JOIN t2 c4 ON c4.parent_id = t.id AND c4.col2 = "val"
  LEFT JOIN t2 c5 ON c5.parent_id = t.id AND c5.col2 = "val"
  LEFT JOIN t2 c6 ON c6.parent_id = t.id AND c6.col2 = "val"
  LEFT JOIN t2 c7 ON c7.parent_id = t.id AND c7.col2 = "val"
  LEFT JOIN t2 c8 ON c8.parent_id = t.id AND c8.col2 = "val"
  LEFT JOIN t2 c9 ON c9.parent_id = t.id AND c9.col2 = "val"
  LEFT JOIN t2 c10 ON c10.parent_id = t.id AND c10.col2 = "val"
  LEFT JOIN t2 c11 ON c11.parent_id = t.id AND c11.col2 = "val"
  LEFT JOIN t2 c12 ON c12.parent_id = t.id AND c12.col2 = "val"
  LEFT JOIN t2 c13 ON c13.parent_id = t.id AND c13.col2 = "val"
  LEFT JOIN t2 c14 ON c14.parent_id = t.id AND c14.col2 = "val"
  LEFT JOIN t2 c15 ON c15.parent_id = t.id AND c15.col2 = "val"
  LEFT JOIN t2 c16 ON c16.parent_id = t.id AND c16.col2 = "val"
  LEFT JOIN t2 c17 ON c17.parent_id = t.id AND c17.col2 = "val"
  LEFT JOIN t2 c18 ON c18.parent_id = t.id AND c18.col2 = "val"
  LEFT JOIN t2 c19 ON c19.parent_id = t.id AND c19.col2 = "val"
  LEFT JOIN t2 c20 ON c20.parent_id = t.id AND c20.col2 = "val"
  LEFT JOIN t2 c21 ON c21.parent_id = t.id AND c21.col2 = "val"
  LEFT JOIN t2 c22 ON c22.parent_id = t.id AND c22.col2 = "val"
  LEFT JOIN t2 c23 ON c23.parent_id = t.id AND c23.col2 = "val"
  LEFT JOIN t2 c24 ON c24.parent_id = t.id AND c24.col2 = "val"
  LEFT JOIN t2 c25 ON c25.parent_id = t.id AND c25.col2 = "val"
  LEFT JOIN t2 c26 ON c26.parent_id = t.id AND c26.col2 = "val"
  LEFT JOIN t2 c27 ON c27.parent_id = t.id AND c27.col2 = "val"
ORDER BY 
  col1;
select timestampdiff(second, @init_time, now()) <= 5;

EXPLAIN
SELECT t.* 
FROM 
  t1 t 
  LEFT JOIN t2 c1 ON c1.parent_id = t.id AND c1.col2 = "val"
  LEFT JOIN t2 c2 ON c2.parent_id = t.id AND c2.col2 = "val"
  LEFT JOIN t2 c3 ON c3.parent_id = t.id AND c3.col2 = "val"
  LEFT JOIN t2 c4 ON c4.parent_id = t.id AND c4.col2 = "val"
  LEFT JOIN t2 c5 ON c5.parent_id = t.id AND c5.col2 = "val"
  LEFT JOIN t2 c6 ON c6.parent_id = t.id AND c6.col2 = "val"
  LEFT JOIN t2 c7 ON c7.parent_id = t.id AND c7.col2 = "val"
  LEFT JOIN t2 c8 ON c8.parent_id = t.id AND c8.col2 = "val"
  LEFT JOIN t2 c9 ON c9.parent_id = t.id AND c9.col2 = "val"
  LEFT JOIN t2 c10 ON c10.parent_id = t.id AND c10.col2 = "val"
  LEFT JOIN t2 c11 ON c11.parent_id = t.id AND c11.col2 = "val"
  LEFT JOIN t2 c12 ON c12.parent_id = t.id AND c12.col2 = "val"
  LEFT JOIN t2 c13 ON c13.parent_id = t.id AND c13.col2 = "val"
  LEFT JOIN t2 c14 ON c14.parent_id = t.id AND c14.col2 = "val"
  LEFT JOIN t2 c15 ON c15.parent_id = t.id AND c15.col2 = "val"
  LEFT JOIN t2 c16 ON c16.parent_id = t.id AND c16.col2 = "val"
  LEFT JOIN t2 c17 ON c17.parent_id = t.id AND c17.col2 = "val"
  LEFT JOIN t2 c18 ON c18.parent_id = t.id AND c18.col2 = "val"
  LEFT JOIN t2 c19 ON c19.parent_id = t.id AND c19.col2 = "val"
  LEFT JOIN t2 c20 ON c20.parent_id = t.id AND c20.col2 = "val"
  LEFT JOIN t2 c21 ON c21.parent_id = t.id AND c21.col2 = "val"
  LEFT JOIN t2 c22 ON c22.parent_id = t.id AND c22.col2 = "val"
  LEFT JOIN t2 c23 ON c23.parent_id = t.id AND c23.col2 = "val"
  LEFT JOIN t2 c24 ON c24.parent_id = t.id AND c24.col2 = "val"
  LEFT JOIN t2 c25 ON c25.parent_id = t.id AND c25.col2 = "val"
  LEFT JOIN t2 c26 ON c26.parent_id = t.id AND c26.col2 = "val"
  LEFT JOIN t2 c27 ON c27.parent_id = t.id AND c27.col2 = "val"
ORDER BY 
  col1;

set join_buffer_size=default;
set join_cache_level = default;

DROP TABLE t1,t2;

--echo #
--echo # MDEV-14960: BNLH used for materialized semi-join
--echo #

CREATE TABLE t1 (i1 int);
CREATE TABLE t2 (e1 int);
CREATE TABLE t4 (e1 int);
CREATE TABLE t5 (e1 int);

INSERT INTO t1 VALUES
  (1),(2),(3),(4),(5),(6),(7),(8);
INSERT INTO t1 SELECT i1+8 FROM t1;
INSERT INTO t1 SELECT i1+16 FROM t1;
INSERT INTO t1 SELECT i1+32 FROM t1;
INSERT INTO t1 SELECT i1+64 FROM t1;
INSERT INTO t2 SELECT * FROM t1;
INSERT INTO t4 SELECT * FROM t1;
INSERT INTO t5 SELECT * FROM t1;

set @save_optimizer_switch= @@optimizer_switch;
SET join_cache_level = 6;
SET join_buffer_size=4096;
SET join_buffer_space_limit=4096;
SET optimizer_switch = 'join_cache_hashed=on,optimize_join_buffer_size=on';

let $q=
SELECT * FROM t1
WHERE
  i1 < 10 AND
  i1 IN
  (SELECT i1 FROM
    (SELECT  (t4.e1) i1  FROM   t4
      LEFT JOIN t5  ON t4.e1 = t5.e1
      LEFT JOIN  (SELECT e1  FROM t2 ) AS d ON  t4.e1 = d.e1) a);

eval EXPLAIN $q;
eval $q;

SET join_cache_level = default;
SET join_buffer_size = default;
SET join_buffer_space_limit= default;
set optimizer_switch=@save_optimizer_switch;

DROP TABLE t1,t4,t5,t2;

--echo #
--echo # MDEV-16603: BNLH for query with materialized semi-join
--echo #

--source include/have_innodb.inc

set join_cache_level=4;

CREATE TABLE t1 ( i1 int, v1 varchar(1)) ENGINE=InnoDB;
INSERT INTO t1 VALUES (7,'x');

CREATE TABLE t2 (i1 int, v1 varchar(1), KEY v1 (v1,i1)) ENGINE=InnoDB;

INSERT INTO t2 VALUES
 (NULL,'x'),(1,'x'),(3,'x'),(5,'x'),(8,'x'),(48,'x'),
 (228,'x'),(3,'y'),(1,'z'),(9,'z');

CREATE TABLE temp
SELECT t1.i1 AS f1, t1.v1 AS f2 FROM (t2 JOIN t1 ON (t1.v1 = t2.v1));

let $q =
SELECT * FROM temp
WHERE (f1,f2) IN (SELECT t1.i1, t1.v1 FROM (t2 JOIN t1 ON (t1.v1 = t2.v1)));

eval $q;
eval EXPLAIN EXTENDED $q;

DROP TABLE t1,t2,temp;

SET join_cache_level = default;

# this must be the last command in the file
set @@optimizer_switch=@save_optimizer_switch;
