Commit 63d9bd0c authored by unknown's avatar unknown

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
...@@ -906,6 +906,13 @@ INSERT INTO federated.t1 (name, country_id, other) VALUES ('Lenz', 2, 22222); ...@@ -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 ('Marizio', 3, 33333);
INSERT INTO federated.t1 (name, country_id, other) VALUES ('Monty', 4, 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); 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, SELECT federated.t1.name AS name, federated.t1.country_id AS country_id,
federated.t1.other AS other, federated.countries.country AS country federated.t1.other AS other, federated.countries.country AS country
FROM federated.t1, federated.countries WHERE FROM federated.t1, federated.countries WHERE
...@@ -916,6 +923,13 @@ Lenz 2 22222 Germany ...@@ -916,6 +923,13 @@ Lenz 2 22222 Germany
Marizio 3 33333 Italy Marizio 3 33333 Italy
Monty 4 33333 Finland Monty 4 33333 Finland
Sanja 5 33333 Ukraine 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, SELECT federated.t1.name AS name, federated.t1.country_id AS country_id,
federated.t1.other AS other, federated.countries.country AS country federated.t1.other AS other, federated.countries.country AS country
FROM federated.t1 INNER JOIN federated.countries ON FROM federated.t1 INNER JOIN federated.countries ON
...@@ -926,6 +940,14 @@ Lenz 2 22222 Germany ...@@ -926,6 +940,14 @@ Lenz 2 22222 Germany
Marizio 3 33333 Italy Marizio 3 33333 Italy
Monty 4 33333 Finland Monty 4 33333 Finland
Sanja 5 33333 Ukraine 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, SELECT federated.t1.name AS name, federated.t1.country_id AS country_id,
federated.t1.other AS other, federated.countries.country AS country federated.t1.other AS other, federated.countries.country AS country
FROM federated.t1 INNER JOIN federated.countries ON FROM federated.t1 INNER JOIN federated.countries ON
...@@ -933,6 +955,13 @@ federated.t1.country_id = federated.countries.id ...@@ -933,6 +955,13 @@ federated.t1.country_id = federated.countries.id
WHERE federated.t1.name = 'Monty'; WHERE federated.t1.name = 'Monty';
name country_id other country name country_id other country
Monty 4 33333 Finland 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 SELECT federated.t1.*, federated.countries.country
FROM federated.t1 LEFT JOIN federated.countries FROM federated.t1 LEFT JOIN federated.countries
ON federated.t1.country_id = federated.countries.id ON federated.t1.country_id = federated.countries.id
...@@ -943,6 +972,13 @@ id country_id name other country ...@@ -943,6 +972,13 @@ id country_id name other country
3 3 Marizio 33333 Italy 3 3 Marizio 33333 Italy
4 4 Monty 33333 Finland 4 4 Monty 33333 Finland
5 5 Sanja 33333 Ukraine 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 SELECT federated.t1.*, federated.countries.country
FROM federated.t1 LEFT JOIN federated.countries FROM federated.t1 LEFT JOIN federated.countries
ON federated.t1.country_id = federated.countries.id ON federated.t1.country_id = federated.countries.id
...@@ -953,6 +989,13 @@ id country_id name other country ...@@ -953,6 +989,13 @@ id country_id name other country
1 1 Kumar 11111 India 1 1 Kumar 11111 India
3 3 Marizio 33333 Italy 3 3 Marizio 33333 Italy
5 5 Sanja 33333 Ukraine 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 SELECT federated.t1.*, federated.countries.country
FROM federated.t1 RIGHT JOIN federated.countries FROM federated.t1 RIGHT JOIN federated.countries
ON federated.t1.country_id = federated.countries.id ON federated.t1.country_id = federated.countries.id
......
...@@ -862,16 +862,32 @@ INSERT INTO federated.t1 (name, country_id, other) VALUES ('Monty', 4, 33333); ...@@ -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); INSERT INTO federated.t1 (name, country_id, other) VALUES ('Sanja', 5, 33333);
#inner join #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, SELECT federated.t1.name AS name, federated.t1.country_id AS country_id,
federated.t1.other AS other, federated.countries.country AS country federated.t1.other AS other, federated.countries.country AS country
FROM federated.t1, federated.countries WHERE FROM federated.t1, federated.countries WHERE
federated.t1.country_id = federated.countries.id; 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, SELECT federated.t1.name AS name, federated.t1.country_id AS country_id,
federated.t1.other AS other, federated.countries.country AS country federated.t1.other AS other, federated.countries.country AS country
FROM federated.t1 INNER JOIN federated.countries ON FROM federated.t1 INNER JOIN federated.countries ON
federated.t1.country_id = federated.countries.id; 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, SELECT federated.t1.name AS name, federated.t1.country_id AS country_id,
federated.t1.other AS other, federated.countries.country AS country federated.t1.other AS other, federated.countries.country AS country
FROM federated.t1 INNER JOIN federated.countries ON FROM federated.t1 INNER JOIN federated.countries ON
...@@ -879,17 +895,32 @@ federated.t1.country_id = federated.countries.id ...@@ -879,17 +895,32 @@ federated.t1.country_id = federated.countries.id
WHERE federated.t1.name = 'Monty'; WHERE federated.t1.name = 'Monty';
#left join #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 SELECT federated.t1.*, federated.countries.country
FROM federated.t1 LEFT JOIN federated.countries FROM federated.t1 LEFT JOIN federated.countries
ON federated.t1.country_id = federated.countries.id ON federated.t1.country_id = federated.countries.id
ORDER BY 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 SELECT federated.t1.*, federated.countries.country
FROM federated.t1 LEFT JOIN federated.countries FROM federated.t1 LEFT JOIN federated.countries
ON federated.t1.country_id = federated.countries.id ON federated.t1.country_id = federated.countries.id
ORDER BY federated.countries.country; ORDER BY federated.countries.country;
#right join #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 SELECT federated.t1.*, federated.countries.country
FROM federated.t1 RIGHT JOIN federated.countries FROM federated.t1 RIGHT JOIN federated.countries
ON federated.t1.country_id = federated.countries.id ON federated.t1.country_id = federated.countries.id
......
...@@ -1526,7 +1526,11 @@ int ha_federated::index_read_idx(byte *buf, uint index, const byte *key, ...@@ -1526,7 +1526,11 @@ int ha_federated::index_read_idx(byte *buf, uint index, const byte *key,
table->status= STATUS_NOT_FOUND; table->status= STATUS_NOT_FOUND;
DBUG_RETURN(mysql_errno(mysql)); 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; table->status=0;
DBUG_RETURN(rnd_next(buf)); DBUG_RETURN(rnd_next(buf));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment