Commit ded99464 authored by unknown's avatar unknown
Browse files

Merge pgalbraith@bk-internal.mysql.com:/home/bk/mysql-5.0

into  radha.local:/Users/patg/mysql-build/mysql-5.0

parents cdf03871 f9e4c6e7
Loading
Loading
Loading
Loading
+15 −304

File changed.

Preview size limit exceeded, changes collapsed.

+7 −134
Original line number Diff line number Diff line
@@ -160,33 +160,22 @@ INSERT INTO federated.t1 (name, other) VALUES ('Ninth Name', 99999);
INSERT INTO federated.t1 (name, other) VALUES ('Tenth Name', 101010);

# basic select
EXPLAIN SELECT * FROM federated.t1;
SELECT * FROM federated.t1;
# with PRIMARY KEY index_read_idx
EXPLAIN SELECT * FROM federated.t1 WHERE id = 5;
SELECT * FROM federated.t1 WHERE id = 5;
EXPLAIN SELECT * FROM federated.t1 WHERE name = 'Sixth Name';
SELECT * FROM federated.t1 WHERE name = 'Sixth Name';
EXPLAIN SELECT * FROM federated.t1 WHERE id = 6 and name = 'Sixth Name';
SELECT * FROM federated.t1 WHERE id = 6 and name = 'Sixth Name';
EXPLAIN SELECT * FROM federated.t1 WHERE name = 'Sixth Name' AND other = 44444;
SELECT * FROM federated.t1 WHERE name = 'Sixth Name' AND other = 44444;
EXPLAIN SELECT * FROM federated.t1 WHERE name like '%th%';
SELECT * FROM federated.t1 WHERE name like '%th%';
UPDATE federated.t1 SET name = '3rd name' WHERE id = 3;
SELECT * FROM federated.t1 WHERE name = '3rd name';
UPDATE federated.t1 SET name = 'Third name' WHERE name = '3rd name';
SELECT * FROM federated.t1 WHERE name = 'Third name';
# rnd_post, ::position
EXPLAIN SELECT * FROM federated.t1 ORDER BY id DESC;
SELECT * FROM federated.t1 ORDER BY id DESC;
EXPLAIN SELECT * FROM federated.t1 ORDER BY name;
SELECT * FROM federated.t1 ORDER BY name;
EXPLAIN SELECT * FROM federated.t1 ORDER BY name DESC;
SELECT * FROM federated.t1 ORDER BY name DESC;
EXPLAIN SELECT * FROM federated.t1 ORDER BY name ASC;
SELECT * FROM federated.t1 ORDER BY name ASC;
EXPLAIN SELECT * FROM federated.t1 GROUP BY other;
SELECT * FROM federated.t1 GROUP BY other;

# ::delete_row
@@ -248,21 +237,14 @@ INSERT INTO federated.t1 (name, other, created)
  VALUES ('Tenth Name', 101010, '2005-03-12 12:00:01');

# basic select
EXPLAIN SELECT * FROM federated.t1;
SELECT * FROM federated.t1;
# with PRIMARY KEY index_read_idx
EXPLAIN SELECT * FROM federated.t1 WHERE id = 5;
SELECT * FROM federated.t1 WHERE id = 5;
# with regular key index_read -> index_read_idx
EXPLAIN SELECT * FROM federated.t1 WHERE name = 'Sixth Name';
SELECT * FROM federated.t1 WHERE name = 'Sixth Name';
# regular and PRIMARY KEY index_read_idx
EXPLAIN SELECT * FROM federated.t1 WHERE id = 6 and name = 'Sixth Name';
SELECT * FROM federated.t1 WHERE id = 6 and name = 'Sixth Name';
# with regular key index_read -> index_read_idx
EXPLAIN SELECT * FROM federated.t1 WHERE other = 44444;
SELECT * FROM federated.t1 WHERE other = 44444;
EXPLAIN SELECT * FROM federated.t1 WHERE name like '%th%';
SELECT * FROM federated.t1 WHERE name like '%th%';
# update - update_row, index_read_idx
UPDATE federated.t1 SET name = '3rd name' WHERE id = 3;
@@ -462,99 +444,49 @@ INSERT INTO federated.t1 (col1, col2, col3, col4)
INSERT INTO federated.t1 (col1, col2, col3, col4) 
  VALUES (10, 'Tenth ten TEN', 1010101, 1010);

EXPLAIN SELECT * FROM federated.t1 WHERE col2 = 'two two'; 
SELECT * FROM federated.t1 WHERE col2 = 'two two'; 
EXPLAIN SELECT * FROM federated.t1 WHERE col2 = 'two Two'; 
SELECT * FROM federated.t1 WHERE col2 = 'two Two'; 
SELECT * FROM federated.t1 WHERE id = 3; 
EXPLAIN SELECT * FROM federated.t1 WHERE id = 3; 
SELECT * FROM federated.t1 WHERE id = 3 AND col1 = 3; 
EXPLAIN SELECT * FROM federated.t1 WHERE id = 3 AND col1 = 3; 
SELECT * FROM federated.t1 WHERE id = 4 AND col1 = 4 AND col2 = 'Two two'; 
EXPLAIN SELECT * FROM federated.t1 WHERE id = 4 AND col1 = 4 AND col2 = 'Two two'; 
SELECT * FROM federated.t1 WHERE id = 4 AND col1 = 4 AND col2 = 'fourfourfour'; 
EXPLAIN SELECT * FROM federated.t1 WHERE id = 4 AND col1 = 4 AND col2 = 'fourfourfour'; 
SELECT * FROM federated.t1 WHERE id = 5 AND col2 = 'five 5 five five 5' 
  AND col3 = 5; 
EXPLAIN SELECT * FROM federated.t1 WHERE id = 5 AND col2 = 'five 5 five five 5' 
  AND col3 = 5; 
EXPLAIN SELECT * FROM federated.t1 WHERE id = 5 AND col2 = 'five 5 five five 5' 
  AND col3 = 5
  AND col4 = 55555;
SELECT * FROM federated.t1 WHERE id = 5 AND col2 = 'five 5 five five 5' 
  AND col3 = 5
  AND col4 = 55555;
EXPLAIN SELECT * FROM federated.t1 WHERE id = 5 
  AND col2 = 'Two two' AND col3 = 22
  AND col4 = 33;
SELECT * FROM federated.t1 WHERE id = 5 
  AND col2 = 'Two two' AND col3 = 22
  AND col4 = 33;
EXPLAIN SELECT * FROM federated.t1 WHERE id = 5 
  AND col2 = 'five 5 five five 5' AND col3 = 5 
  AND col4 = 55555;
SELECT * FROM federated.t1 WHERE id = 5 
  AND col2 = 'five 5 five five 5' AND col3 = 5 
  AND col4 = 55555;
EXPLAIN SELECT * FROM federated.t1 WHERE (id = 5 AND col2 = 'five 5 five five 5')
  OR (col2 = 'three Three' AND col3 = 33);
SELECT * FROM federated.t1 WHERE (id = 5 AND col2 = 'five 5 five five 5')
  OR (col2 = 'three Three' AND col3 = 33);
EXPLAIN SELECT * FROM federated.t1 WHERE (id = 5 AND col2 = 'five 5 five five 5')
  OR (col2 = 'three Three' AND col3 = 33)
  OR col4 = 1010;
SELECT * FROM federated.t1 WHERE (id = 5 AND col2 = 'five 5 five five 5')
  OR (col2 = 'three Three' AND col3 = 33)
  OR col4 = 1010;
EXPLAIN SELECT * FROM federated.t1 WHERE (id = 5 AND col2 = 'Two two')
  OR (col2 = 444 AND col3 = 4444444);
SELECT * FROM federated.t1 WHERE (id = 5 AND col2 = 'Two two')
  OR (col2 = 444 AND col3 = 4444444);
EXPLAIN SELECT * FROM federated.t1 WHERE id = 1 
  OR col1 = 10
  OR col2 = 'Two two' 
  OR col3 = 33
  OR col4 = 4444444;
SELECT * FROM federated.t1 WHERE id = 1 
  OR col1 = 10
  OR col2 = 'Two two' 
  OR col3 = 33
  OR col4 = 4444444;
EXPLAIN SELECT * FROM federated.t1 WHERE id > 5; 
SELECT * FROM federated.t1 WHERE id > 5; 
EXPLAIN SELECT * FROM federated.t1 WHERE id >= 5; 
SELECT * FROM federated.t1 WHERE id >= 5; 
EXPLAIN SELECT * FROM federated.t1 WHERE id < 5; 
SELECT * FROM federated.t1 WHERE id < 5; 
EXPLAIN SELECT * FROM federated.t1 WHERE id <= 5; 
SELECT * FROM federated.t1 WHERE id <= 5; 
EXPLAIN SELECT * FROM federated.t1 WHERE id != 5; 
SELECT * FROM federated.t1 WHERE id != 5; 
EXPLAIN SELECT * FROM federated.t1 WHERE id > 3 AND id < 7; 
SELECT * FROM federated.t1 WHERE id > 3 AND id < 7; 
EXPLAIN SELECT * FROM federated.t1 WHERE id > 3 AND id <= 7; 
SELECT * FROM federated.t1 WHERE id > 3 AND id <= 7; 
EXPLAIN SELECT * FROM federated.t1 WHERE id >= 3 AND id <= 7; 
SELECT * FROM federated.t1 WHERE id >= 3 AND id <= 7; 
EXPLAIN SELECT * FROM federated.t1 WHERE id < 3 AND id <= 7; 
SELECT * FROM federated.t1 WHERE id < 3 AND id <= 7; 
EXPLAIN SELECT * FROM federated.t1 WHERE id < 3 AND id > 7; 
SELECT * FROM federated.t1 WHERE id < 3 AND id > 7; 
EXPLAIN SELECT * FROM federated.t1 WHERE id < 3 OR id > 7; 
SELECT * FROM federated.t1 WHERE id < 3 OR id > 7; 
EXPLAIN SELECT * FROM federated.t1 WHERE col2 = 'three Three'; 
SELECT * FROM federated.t1 WHERE col2 = 'three Three'; 
EXPLAIN SELECT * FROM federated.t1 WHERE col2 > 'one'; 
SELECT * FROM federated.t1 WHERE col2 > 'one'; 
EXPLAIN SELECT * FROM federated.t1 WHERE col2 LIKE 's%'; 
SELECT * FROM federated.t1 WHERE col2 LIKE 's%'; 
EXPLAIN SELECT * FROM federated.t1 WHERE col2 LIKE 'si%'; 
SELECT * FROM federated.t1 WHERE col2 LIKE 'si%'; 
EXPLAIN SELECT * FROM federated.t1 WHERE col2 LIKE 'se%'; 
SELECT * FROM federated.t1 WHERE col2 LIKE 'se%'; 
EXPLAIN SELECT * FROM federated.t1 WHERE col2 NOT LIKE 'e%'; 
SELECT * FROM federated.t1 WHERE col2 NOT LIKE 'e%'; 
EXPLAIN SELECT * FROM federated.t1 WHERE col2 <> 'one One'; 
SELECT * FROM federated.t1 WHERE col2 <> 'one One'; 

# more multi-column indexes, in the primary key
@@ -602,35 +534,20 @@ INSERT INTO federated.t1 (col1, col2, col3, col4)
INSERT INTO federated.t1 (col1, col2, col3, col4) 
  VALUES ('hhhh', 'hhhhhhhhhhhhhhhhhhh', 'hahahahaha', 'hchchchchchchchc');

EXPLAIN SELECT * FROM federated.t1 WHERE col1 = 'cccc'; 
SELECT * FROM federated.t1 WHERE col1 = 'cccc'; 
EXPLAIN SELECT * FROM federated.t1 WHERE col2 = 'eeeeeeeeeeeeeeeeeee'; 
SELECT * FROM federated.t1 WHERE col2 = 'eeeeeeeeeeeeeeeeeee'; 
EXPLAIN SELECT * FROM federated.t1 WHERE col3 = 'bababababa'; 
SELECT * FROM federated.t1 WHERE col3 = 'bababababa'; 
EXPLAIN SELECT * FROM federated.t1 WHERE col1 =  'gggg' AND col2 = 'ggggggggggggggggggg'; 
SELECT * FROM federated.t1 WHERE col1 =  'gggg' AND col2 = 'ggggggggggggggggggg'; 
EXPLAIN SELECT * FROM federated.t1 WHERE col1 =  'gggg' AND col3 = 'gagagagaga'; 
SELECT * FROM federated.t1 WHERE col1 =  'gggg' AND col3 = 'gagagagaga'; 
EXPLAIN SELECT * FROM federated.t1 WHERE col1 =  'ffff' AND col4 = 'fcfcfcfcfcfcfcfc'; 
SELECT * FROM federated.t1 WHERE col1 =  'ffff' AND col4 = 'fcfcfcfcfcfcfcfc'; 
EXPLAIN SELECT * FROM federated.t1 WHERE col1 >  'bbbb';
SELECT * FROM federated.t1 WHERE col1 >  'bbbb';
EXPLAIN SELECT * FROM federated.t1 WHERE col1 >=  'bbbb';
SELECT * FROM federated.t1 WHERE col1 >=  'bbbb';
EXPLAIN SELECT * FROM federated.t1 WHERE col1 <  'bbbb';
SELECT * FROM federated.t1 WHERE col1 <  'bbbb';
EXPLAIN SELECT * FROM federated.t1 WHERE col1 <=  'bbbb';
SELECT * FROM federated.t1 WHERE col1 <=  'bbbb';
EXPLAIN SELECT * FROM federated.t1 WHERE col1 <>  'bbbb';
SELECT * FROM federated.t1 WHERE col1 <>  'bbbb';
EXPLAIN SELECT * FROM federated.t1 WHERE col1 LIKE  'b%';
SELECT * FROM federated.t1 WHERE col1 LIKE  'b%';
EXPLAIN SELECT * FROM federated.t1 WHERE col4 LIKE  '%b%';
SELECT * FROM federated.t1 WHERE col4 LIKE  '%b%';
EXPLAIN SELECT * FROM federated.t1 WHERE col1 NOT LIKE  'c%';
SELECT * FROM federated.t1 WHERE col1 NOT LIKE  'c%';
EXPLAIN SELECT * FROM federated.t1 WHERE col4 NOT LIKE  '%c%';
SELECT * FROM federated.t1 WHERE col4 NOT LIKE  '%c%';
connection slave;
DROP TABLE IF EXISTS federated.t1;
@@ -660,17 +577,11 @@ INSERT INTO federated.t1 VALUES ('ccd', '112', 'zzzz');

# let's see what the foreign database says 
connection slave;
EXPLAIN SELECT col3 FROM federated.t1 WHERE  (
(col1 = 'aaa' AND col2 >= '111') OR col1 > 'aaa') AND 
(col1 < 'ccc' OR ( col1 = 'ccc' AND col2 <= '111')); 
SELECT col3 FROM federated.t1 WHERE  (
(col1 = 'aaa' AND col2 >= '111') OR col1 > 'aaa') AND 
(col1 < 'ccc' OR ( col1 = 'ccc' AND col2 <= '111')); 

connection master;
EXPLAIN SELECT col3 FROM federated.t1 WHERE  (
(col1 = 'aaa' AND col2 >= '111') OR col1 > 'aaa') AND 
(col1 < 'ccc' OR ( col1 = 'ccc' AND col2 <= '111')); 
SELECT col3 FROM federated.t1 WHERE  (
(col1 = 'aaa' AND col2 >= '111') OR col1 > 'aaa') AND 
(col1 < 'ccc' OR ( col1 = 'ccc' AND col2 <= '111')); 
@@ -711,11 +622,6 @@ WHERE id IS NULL
AND name IS NULL 
AND floatval IS NULL
AND other IS NULL;
EXPLAIN SELECT count(*) FROM federated.t1 
WHERE id IS NULL 
AND name IS NULL 
AND floatval IS NULL
AND other IS NULL;

connection slave;
DROP TABLE IF EXISTS federated.t1;
@@ -764,14 +670,6 @@ eval CREATE TABLE federated.t1 (
  COMMENT='mysql://root@127.0.0.1:$SLAVE_MYPORT/federated/t1';

INSERT INTO federated.t1 VALUES (3,3,3),(1,1,1),(2,2,2),(4,4,4);
EXPLAIN SELECT * FROM federated.t1 ORDER BY a;
EXPLAIN SELECT * FROM federated.t1 ORDER BY b;
EXPLAIN SELECT * FROM federated.t1 ORDER BY c;
EXPLAIN SELECT a FROM federated.t1 ORDER BY a;
EXPLAIN SELECT b FROM federated.t1 ORDER BY b;
EXPLAIN SELECT a,b FROM federated.t1 ORDER BY b;
EXPLAIN SELECT a,b FROM federated.t1;
EXPLAIN SELECT a,b,c FROM federated.t1;

connection slave;
DROP TABLE IF EXISTS federated.t1;
@@ -1077,7 +975,6 @@ values (1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, "PatrickG");
UPDATE federated.t1 SET b=repeat('a',256);
UPDATE federated.t1 SET i1=0, i2=0, i3=0, i4=0, i5=0, i6=0, i7=0, i8=0, i9=0, i10=0;
EXPLAIN SELECT * FROM federated.t1 WHERE i9=0 and i10=0;
SELECT * FROM federated.t1 WHERE i9=0 and i10=0;
UPDATE federated.t1 SET i50=20;
SELECT * FROM federated.t1;
@@ -1205,32 +1102,16 @@ 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
@@ -1238,32 +1119,17 @@ 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 
@@ -1271,4 +1137,11 @@ ORDER BY federated.t1.country_id;

DROP TABLE federated.countries;

# optimize and repair tests
OPTIMIZE TABLE federated.t1;
REPAIR TABLE federated.t1;
REPAIR TABLE federated.t1 QUICK;
REPAIR TABLE federated.t1 EXTENDED;
REPAIR TABLE federated.t1 USE_FRM;

source include/federated_cleanup.inc;
+57 −1
Original line number Diff line number Diff line
@@ -495,7 +495,7 @@ static int check_foreign_data_source(
    query.append(escaped_table_name);
    query.append(FEDERATED_BTICK);
    query.append(FEDERATED_WHERE);
    query.append(FEDERATED_1EQ0);
    query.append(FEDERATED_FALSE);

    DBUG_PRINT("info", ("check_foreign_data_source query %s", query.c_ptr_quick()));
    if (mysql_real_query(mysql, query.ptr(), query.length()))
@@ -1661,6 +1661,62 @@ int ha_federated::write_row(byte *buf)
}


int ha_federated::optimize(THD* thd, HA_CHECK_OPT* check_opt)
{
  char query_buffer[STRING_BUFFER_USUAL_SIZE];
  String query(query_buffer, sizeof(query_buffer), &my_charset_bin);

  DBUG_ENTER("ha_federated::optimize");
  
  query.length(0);

  query.set_charset(system_charset_info);
  query.append(FEDERATED_OPTIMIZE);
  query.append(FEDERATED_BTICK);
  query.append(share->table_name, share->table_name_length);
  query.append(FEDERATED_BTICK);

  if (mysql_real_query(mysql, query.ptr(), query.length()))
  {
    my_error(-1, MYF(0), mysql_error(mysql));
    DBUG_RETURN(-1);
  }

  DBUG_RETURN(0);
}


int ha_federated::repair(THD* thd, HA_CHECK_OPT* check_opt)
{
  char query_buffer[STRING_BUFFER_USUAL_SIZE];
  String query(query_buffer, sizeof(query_buffer), &my_charset_bin);
  
  DBUG_ENTER("ha_federated::repair");

  query.length(0);

  query.set_charset(system_charset_info);
  query.append(FEDERATED_REPAIR);
  query.append(FEDERATED_BTICK);
  query.append(share->table_name, share->table_name_length);
  query.append(FEDERATED_BTICK);
  if (check_opt->flags & T_QUICK)
    query.append(FEDERATED_QUICK);
  if (check_opt->flags & T_EXTEND)
    query.append(FEDERATED_EXTENDED);
  if (check_opt->sql_flags & TT_USEFRM)
    query.append(FEDERATED_USE_FRM);
      
  if (mysql_real_query(mysql, query.ptr(), query.length()))
  {
    my_error(-1, MYF(0), mysql_error(mysql));
    DBUG_RETURN(-1);
  }

  DBUG_RETURN(0);
}


/*
  Yes, update_row() does what you expect, it updates a row. old_data will have
  the previous row record in it, while new_data will have the newest data in
+50 −4
Original line number Diff line number Diff line
@@ -31,40 +31,83 @@
#define FEDERATED_RECORDS_IN_RANGE 2

#define FEDERATED_INFO " SHOW TABLE STATUS LIKE "
#define FEDERATED_INFO_LEN sizeof(FEDERATED_INFO)
#define FEDERATED_SELECT "SELECT "
#define FEDERATED_SELECT_LEN sizeof(FEDERATED_SELECT)
#define FEDERATED_WHERE " WHERE "
#define FEDERATED_WHERE_LEN sizeof(FEDERATED_WHERE)
#define FEDERATED_FROM " FROM "
#define FEDERATED_FROM_LEN sizeof(FEDERATED_FROM)
#define FEDERATED_PERCENT "%"
#define FEDERATED_PERCENT_LEN sizeof(FEDERATED_PERCENT)
#define FEDERATED_IS " IS "
#define FEDERATED_IS_LEN sizeof(FEDERATED_IS)
#define FEDERATED_NULL " NULL "
#define FEDERATED_NULL_LEN sizeof(FEDERATED_NULL)
#define FEDERATED_ISNULL " IS NULL "
#define FEDERATED_ISNULL_LEN sizeof(FEDERATED_ISNULL)
#define FEDERATED_LIKE " LIKE "
#define FEDERATED_LIKE_LEN sizeof(FEDERATED_LIKE)
#define FEDERATED_TRUNCATE "TRUNCATE "
#define FEDERATED_TRUNCATE_LEN sizeof(FEDERATED_TRUNCATE)
#define FEDERATED_DELETE "DELETE "
#define FEDERATED_DELETE_LEN sizeof(FEDERATED_DELETE)
#define FEDERATED_INSERT "INSERT INTO "
#define FEDERATED_INSERT_LEN sizeof(FEDERATED_INSERT)
#define FEDERATED_OPTIMIZE "OPTIMIZE TABLE "
#define FEDERATED_OPTIMIZE_LEN sizeof(FEDERATED_OPTIMIZE)
#define FEDERATED_REPAIR "REPAIR TABLE "
#define FEDERATED_REPAIR_LEN sizeof(FEDERATED_REPAIR)
#define FEDERATED_QUICK " QUICK"
#define FEDERATED_QUICK_LEN sizeof(FEDERATED_QUICK)
#define FEDERATED_EXTENDED " EXTENDED"
#define FEDERATED_EXTENDED_LEN sizeof(FEDERATED_EXTENDED)
#define FEDERATED_USE_FRM " USE_FRM"
#define FEDERATED_USE_FRM_LEN sizeof(FEDERATED_USE_FRM)
#define FEDERATED_LIMIT1 " LIMIT 1"
#define FEDERATED_LIMIT1_LEN sizeof(FEDERATED_LIMIT1)
#define FEDERATED_VALUES "VALUES "
#define FEDERATED_VALUES_LEN sizeof(FEDERATED_VALUES)
#define FEDERATED_UPDATE "UPDATE "
#define FEDERATED_UPDATE_LEN sizeof(FEDERATED_UPDATE)
#define FEDERATED_SET "SET "
#define FEDERATED_SET_LEN sizeof(FEDERATED_SET)
#define FEDERATED_AND " AND "
#define FEDERATED_AND_LEN sizeof(FEDERATED_AND)
#define FEDERATED_CONJUNCTION ") AND ("
#define FEDERATED_CONJUNCTION_LEN sizeof(FEDERATED_CONJUNCTION)
#define FEDERATED_OR " OR "
#define FEDERATED_OR_LEN sizeof(FEDERATED_OR)
#define FEDERATED_NOT " NOT "
#define FEDERATED_NOT_LEN sizeof(FEDERATED_NOT)
#define FEDERATED_STAR "* "
#define FEDERATED_STAR_LEN sizeof(FEDERATED_STAR)
#define FEDERATED_SPACE " "
#define FEDERATED_SPACE_LEN sizeof(FEDERATED_SPACE)
#define FEDERATED_SQUOTE "'"
#define FEDERATED_SQUOTE_LEN sizeof(FEDERATED_SQUOTE)
#define FEDERATED_COMMA ", "
#define FEDERATED_DQOUTE '"' 
#define FEDERATED_COMMA_LEN sizeof(FEDERATED_COMMA)
#define FEDERATED_BTICK "`" 
#define FEDERATED_BTICK_LEN sizeof(FEDERATED_BTICK)
#define FEDERATED_OPENPAREN " ("
#define FEDERATED_OPENPAREN_LEN sizeof(FEDERATED_OPENPAREN)
#define FEDERATED_CLOSEPAREN ") "
#define FEDERATED_CLOSEPAREN_LEN sizeof(FEDERATED_CLOSEPAREN)
#define FEDERATED_NE " != "
#define FEDERATED_NE_LEN sizeof(FEDERATED_NE)
#define FEDERATED_GT " > "
#define FEDERATED_GT_LEN sizeof(FEDERATED_GT)
#define FEDERATED_LT " < "
#define FEDERATED_LT_LEN sizeof(FEDERATED_LT)
#define FEDERATED_LE " <= "
#define FEDERATED_LE_LEN sizeof(FEDERATED_LE)
#define FEDERATED_GE " >= "
#define FEDERATED_GE_LEN sizeof(FEDERATED_GE)
#define FEDERATED_EQ " = "
#define FEDERATED_1EQ0   " 1=0"
#define FEDERATED_EQ_LEN sizeof(FEDERATED_EQ)
#define FEDERATED_FALSE " 1=0"
#define FEDERATED_FALSE_LEN sizeof(FEDERATED_FALSE)

/*
  FEDERATED_SHARE is a structure that will be shared amoung all open handlers
@@ -235,6 +278,9 @@ class ha_federated: public handler
  void position(const byte *record);                            //required
  void info(uint);                                              //required

  int repair(THD* thd, HA_CHECK_OPT* check_opt);
  int optimize(THD* thd, HA_CHECK_OPT* check_opt);

  int delete_all_rows(void);
  int create(const char *name, TABLE *form,
             HA_CREATE_INFO *create_info);                      //required