Commit 63d9bd0c authored by unknown's avatar unknown
Browse files

Comment and test changes per review request by Timour. All tests pass on production with this code.


mysql-test/r/federated.result:
  added explain results to join test results per Timour's request.
mysql-test/t/federated.test:
  Added explain to test per Timour's request
sql/ha_federated.cc:
  better comment to explain why we need table->status set to 0
parent b4508ef3
Loading
Loading
Loading
Loading
+43 −0
Original line number Diff line number Diff line
@@ -906,6 +906,13 @@ INSERT INTO federated.t1 (name, country_id, other) VALUES ('Lenz', 2, 22222);
INSERT INTO federated.t1 (name, country_id, other) VALUES ('Marizio', 3, 33333);
INSERT INTO federated.t1 (name, country_id, other) VALUES ('Monty', 4, 33333);
INSERT INTO federated.t1 (name, country_id, other) VALUES ('Sanja', 5, 33333);
EXPLAIN SELECT federated.t1.name AS name, federated.t1.country_id AS country_id,
federated.t1.other AS other, federated.countries.country AS country 
FROM federated.t1, federated.countries WHERE
federated.t1.country_id = federated.countries.id;
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
1	SIMPLE	countries	ALL	PRIMARY	NULL	NULL	NULL	5	
1	SIMPLE	t1	ref	country_id	country_id	4	federated.countries.id	120	
SELECT federated.t1.name AS name, federated.t1.country_id AS country_id,
federated.t1.other AS other, federated.countries.country AS country 
FROM federated.t1, federated.countries WHERE
@@ -916,6 +923,13 @@ Lenz 2 22222 Germany
Marizio	3	33333	Italy
Monty	4	33333	Finland
Sanja	5	33333	Ukraine
EXPLAIN SELECT federated.t1.name AS name, federated.t1.country_id AS country_id,
federated.t1.other AS other, federated.countries.country AS country
FROM federated.t1 INNER JOIN federated.countries ON
federated.t1.country_id = federated.countries.id;
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
1	SIMPLE	countries	ALL	PRIMARY	NULL	NULL	NULL	5	
1	SIMPLE	t1	ref	country_id	country_id	4	federated.countries.id	120	
SELECT federated.t1.name AS name, federated.t1.country_id AS country_id,
federated.t1.other AS other, federated.countries.country AS country
FROM federated.t1 INNER JOIN federated.countries ON
@@ -926,6 +940,14 @@ Lenz 2 22222 Germany
Marizio	3	33333	Italy
Monty	4	33333	Finland
Sanja	5	33333	Ukraine
EXPLAIN SELECT federated.t1.name AS name, federated.t1.country_id AS country_id,
federated.t1.other AS other, federated.countries.country AS country
FROM federated.t1 INNER JOIN federated.countries ON
federated.t1.country_id = federated.countries.id
WHERE federated.t1.name = 'Monty';
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
1	SIMPLE	countries	ALL	PRIMARY	NULL	NULL	NULL	5	
1	SIMPLE	t1	ref	country_id	country_id	4	federated.countries.id	120	Using where
SELECT federated.t1.name AS name, federated.t1.country_id AS country_id,
federated.t1.other AS other, federated.countries.country AS country
FROM federated.t1 INNER JOIN federated.countries ON
@@ -933,6 +955,13 @@ federated.t1.country_id = federated.countries.id
WHERE federated.t1.name = 'Monty';
name	country_id	other	country
Monty	4	33333	Finland
EXPLAIN SELECT federated.t1.*, federated.countries.country 
FROM federated.t1 LEFT JOIN federated.countries 
ON federated.t1.country_id = federated.countries.id
ORDER BY federated.countries.id;
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
1	SIMPLE	t1	ALL	NULL	NULL	NULL	NULL	10000	Using temporary; Using filesort
1	SIMPLE	countries	eq_ref	PRIMARY	PRIMARY	4	federated.t1.country_id	1	
SELECT federated.t1.*, federated.countries.country 
FROM federated.t1 LEFT JOIN federated.countries 
ON federated.t1.country_id = federated.countries.id
@@ -943,6 +972,13 @@ id country_id name other country
3	3	Marizio	33333	Italy
4	4	Monty	33333	Finland
5	5	Sanja	33333	Ukraine
EXPLAIN SELECT federated.t1.*, federated.countries.country 
FROM federated.t1 LEFT JOIN federated.countries 
ON federated.t1.country_id = federated.countries.id
ORDER BY federated.countries.country;
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
1	SIMPLE	t1	ALL	NULL	NULL	NULL	NULL	10000	Using temporary; Using filesort
1	SIMPLE	countries	eq_ref	PRIMARY	PRIMARY	4	federated.t1.country_id	1	
SELECT federated.t1.*, federated.countries.country 
FROM federated.t1 LEFT JOIN federated.countries 
ON federated.t1.country_id = federated.countries.id
@@ -953,6 +989,13 @@ id country_id name other country
1	1	Kumar	11111	India
3	3	Marizio	33333	Italy
5	5	Sanja	33333	Ukraine
EXPLAIN SELECT federated.t1.*, federated.countries.country 
FROM federated.t1 RIGHT JOIN federated.countries 
ON federated.t1.country_id = federated.countries.id 
ORDER BY federated.t1.country_id;
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
1	SIMPLE	countries	ALL	NULL	NULL	NULL	NULL	5	Using temporary; Using filesort
1	SIMPLE	t1	ref	country_id	country_id	4	federated.countries.id	120	
SELECT federated.t1.*, federated.countries.country 
FROM federated.t1 RIGHT JOIN federated.countries 
ON federated.t1.country_id = federated.countries.id 
+31 −0
Original line number Diff line number Diff line
@@ -862,16 +862,32 @@ INSERT INTO federated.t1 (name, country_id, other) VALUES ('Monty', 4, 33333);
INSERT INTO federated.t1 (name, country_id, other) VALUES ('Sanja', 5, 33333);

#inner join
EXPLAIN SELECT federated.t1.name AS name, federated.t1.country_id AS country_id,
federated.t1.other AS other, federated.countries.country AS country 
FROM federated.t1, federated.countries WHERE
federated.t1.country_id = federated.countries.id;

SELECT federated.t1.name AS name, federated.t1.country_id AS country_id,
federated.t1.other AS other, federated.countries.country AS country 
FROM federated.t1, federated.countries WHERE
federated.t1.country_id = federated.countries.id;

EXPLAIN SELECT federated.t1.name AS name, federated.t1.country_id AS country_id,
federated.t1.other AS other, federated.countries.country AS country
FROM federated.t1 INNER JOIN federated.countries ON
federated.t1.country_id = federated.countries.id;

SELECT federated.t1.name AS name, federated.t1.country_id AS country_id,
federated.t1.other AS other, federated.countries.country AS country
FROM federated.t1 INNER JOIN federated.countries ON
federated.t1.country_id = federated.countries.id;

EXPLAIN SELECT federated.t1.name AS name, federated.t1.country_id AS country_id,
federated.t1.other AS other, federated.countries.country AS country
FROM federated.t1 INNER JOIN federated.countries ON
federated.t1.country_id = federated.countries.id
WHERE federated.t1.name = 'Monty';

SELECT federated.t1.name AS name, federated.t1.country_id AS country_id,
federated.t1.other AS other, federated.countries.country AS country
FROM federated.t1 INNER JOIN federated.countries ON
@@ -879,17 +895,32 @@ federated.t1.country_id = federated.countries.id
WHERE federated.t1.name = 'Monty';

#left join
EXPLAIN SELECT federated.t1.*, federated.countries.country 
FROM federated.t1 LEFT JOIN federated.countries 
ON federated.t1.country_id = federated.countries.id
ORDER BY federated.countries.id;

SELECT federated.t1.*, federated.countries.country 
FROM federated.t1 LEFT JOIN federated.countries 
ON federated.t1.country_id = federated.countries.id
ORDER BY federated.countries.id;

EXPLAIN SELECT federated.t1.*, federated.countries.country 
FROM federated.t1 LEFT JOIN federated.countries 
ON federated.t1.country_id = federated.countries.id
ORDER BY federated.countries.country;

SELECT federated.t1.*, federated.countries.country 
FROM federated.t1 LEFT JOIN federated.countries 
ON federated.t1.country_id = federated.countries.id
ORDER BY federated.countries.country;

#right join
EXPLAIN SELECT federated.t1.*, federated.countries.country 
FROM federated.t1 RIGHT JOIN federated.countries 
ON federated.t1.country_id = federated.countries.id 
ORDER BY federated.t1.country_id;

SELECT federated.t1.*, federated.countries.country 
FROM federated.t1 RIGHT JOIN federated.countries 
ON federated.t1.country_id = federated.countries.id 
+5 −1
Original line number Diff line number Diff line
@@ -1526,7 +1526,11 @@ int ha_federated::index_read_idx(byte *buf, uint index, const byte *key,
    table->status= STATUS_NOT_FOUND;
    DBUG_RETURN(mysql_errno(mysql));
  }
  /* very important - joins will not work without this! */
  /* 
     This basically says that the record in table->record[0] is legal, and that it is
     ok to use this record, for whatever reason, such as with a join (without it, joins 
     will not work)
  */
  table->status=0;

  DBUG_RETURN(rnd_next(buf));