Commit b4508ef3 authored by unknown's avatar unknown
Browse files

changes to fix joins not working (bug #10848). New tests, as well as...

changes to fix joins not working (bug #10848). New tests, as well as table->status being set in index_read_idx


mysql-test/r/federated.result:
  new join test results
mysql-test/t/federated.test:
  new simple join tests (more to come with subsequent commits)
sql/ha_federated.cc:
  This fixes joins not working. Monty discussed that having to deal 
  with table->status needs to be moved from the handler/storage engine
  to a higher level
BitKeeper/etc/logging_ok:
  Logging to logging@openlogging.org accepted
parent 8ddb0ddc
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -205,6 +205,7 @@ patg@krsna.
patg@krsna.patg.net
patg@patrick-galbraiths-computer.local
patg@pc248.lfp.kcls.org
patg@radha.local
paul@central.snake.net
paul@frost.snake.net
paul@ice.local
+50 −2
Original line number Diff line number Diff line
@@ -906,9 +906,57 @@ 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);
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;
name	country_id	other	country
Kumar	1	11111	India
Lenz	2	22222	Germany
Marizio	3	33333	Italy
Monty	4	33333	Finland
Sanja	5	33333	Ukraine
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;
name	country_id	other	country
Kumar	1	11111	India
Lenz	2	22222	Germany
Marizio	3	33333	Italy
Monty	4	33333	Finland
Sanja	5	33333	Ukraine
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';
name	country_id	other	country
Monty	4	33333	Finland
SELECT federated.t1.*, federated.countries.country 
FROM federated.t1 left join federated.countries 
ON federated.t1.country_id = federated.countries.id;
FROM federated.t1 LEFT JOIN federated.countries 
ON federated.t1.country_id = federated.countries.id
ORDER BY federated.countries.id;
id	country_id	name	other	country
1	1	Kumar	11111	India
2	2	Lenz	22222	Germany
3	3	Marizio	33333	Italy
4	4	Monty	33333	Finland
5	5	Sanja	33333	Ukraine
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	country_id	name	other	country
4	4	Monty	33333	Finland
2	2	Lenz	22222	Germany
1	1	Kumar	11111	India
3	3	Marizio	33333	Italy
5	5	Sanja	33333	Ukraine
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	country_id	name	other	country
1	1	Kumar	11111	India
2	2	Lenz	22222	Germany
+32 −2
Original line number Diff line number Diff line
@@ -861,9 +861,39 @@ 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);

#inner join
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 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
WHERE federated.t1.name = 'Monty';

#left join
SELECT federated.t1.*, federated.countries.country 
FROM federated.t1 left join federated.countries 
ON federated.t1.country_id = federated.countries.id;
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.country;

#right join
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;

DROP TABLE federated.countries;

+2 −0
Original line number Diff line number Diff line
@@ -1526,6 +1526,8 @@ 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! */
  table->status=0;

  DBUG_RETURN(rnd_next(buf));
}