mirror of
https://github.com/MariaDB/server.git
synced 2025-01-18 13:02:28 +01:00
Merge pgalbraith@bk-internal.mysql.com:/home/bk/mysql-5.0
into krsna.patg.net:/home/patg/mysql-5.0
This commit is contained in:
commit
e3579fa672
7 changed files with 522 additions and 389 deletions
|
@ -499,6 +499,8 @@ MYSQL_FIELD_OFFSET STDCALL mysql_field_seek(MYSQL_RES *result,
|
|||
MYSQL_FIELD_OFFSET offset);
|
||||
MYSQL_ROW STDCALL mysql_fetch_row(MYSQL_RES *result);
|
||||
unsigned long * STDCALL mysql_fetch_lengths(MYSQL_RES *result);
|
||||
void STDCALL cli_fetch_lengths(unsigned long *to, MYSQL_ROW column,
|
||||
unsigned int field_count);
|
||||
MYSQL_FIELD * STDCALL mysql_fetch_field(MYSQL_RES *result);
|
||||
MYSQL_RES * STDCALL mysql_list_fields(MYSQL *mysql, const char *table,
|
||||
const char *wild);
|
||||
|
|
|
@ -644,14 +644,19 @@ select * from federated.t1 where fileguts = 'jimbob';
|
|||
id code fileguts creation_date entered_time
|
||||
3 DEUEUEUEUEUEUEUEUEU jimbob 2004-04-04 04:04:04 2004-04-04 04:04:04
|
||||
drop table if exists federated.t1;
|
||||
CREATE TABLE federated.t1 ( `id` int(20) NOT NULL auto_increment, `country_id` int(20) NOT NULL DEFAULT 0, `name` varchar(32), `other` varchar(20), PRIMARY KEY (`id`), key (country_id));
|
||||
CREATE TABLE federated.t1 (a BLOB);
|
||||
drop table if exists federated.t1;
|
||||
CREATE TABLE federated.t1 ( `id` int(20) NOT NULL auto_increment, `country_id` int(20) NOT NULL DEFAULT 0, `name` varchar(32), `other` varchar(20), PRIMARY KEY (`id`), key (country_id) ) ENGINE="FEDERATED" DEFAULT CHARSET=latin1 COMMENT='mysql://root@127.0.0.1:9308/federated/t1';
|
||||
insert into federated.t1 (name, country_id, other) values ('Kumar', 1, 11111);
|
||||
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);
|
||||
CREATE TABLE federated.t1 (a BLOB) ENGINE="FEDERATED" COMMENT='mysql://root@127.0.0.1:9308/federated/t1';
|
||||
INSERT INTO federated.t1 VALUES (0x00);
|
||||
INSERT INTO federated.t1 VALUES (0x0001);
|
||||
INSERT INTO federated.t1 VALUES (0x0100);
|
||||
SELECT HEX(a) FROM federated.t1;
|
||||
HEX(a)
|
||||
00
|
||||
0001
|
||||
0100
|
||||
drop table if exists federated.t1;
|
||||
CREATE TABLE federated.t1 ( `id` int(20) NOT NULL auto_increment, `country_id` int(20) NOT NULL DEFAULT 0, `name` varchar(32), `other` varchar(20), PRIMARY KEY (`id`), key (country_id));
|
||||
drop table if exists federated.countries;
|
||||
Warnings:
|
||||
Note 1051 Unknown table 'countries'
|
||||
|
@ -661,6 +666,13 @@ insert into federated.countries (country) values ('Germany');
|
|||
insert into federated.countries (country) values ('Italy');
|
||||
insert into federated.countries (country) values ('Finland');
|
||||
insert into federated.countries (country) values ('Ukraine');
|
||||
drop table if exists federated.t1;
|
||||
CREATE TABLE federated.t1 ( `id` int(20) NOT NULL auto_increment, `country_id` int(20) NOT NULL DEFAULT 0, `name` varchar(32), `other` varchar(20), PRIMARY KEY (`id`), key (country_id) ) ENGINE="FEDERATED" DEFAULT CHARSET=latin1 COMMENT='mysql://root@127.0.0.1:9308/federated/t1';
|
||||
insert into federated.t1 (name, country_id, other) values ('Kumar', 1, 11111);
|
||||
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.*, federated.countries.country from federated.t1 left join federated.countries on federated.t1.country_id = federated.countries.id;
|
||||
id country_id name other country
|
||||
1 1 Kumar 11111 India
|
||||
|
|
|
@ -522,8 +522,22 @@ insert into federated.t1 (code, fileguts, creation_date) values ('ASDFWERQWETWET
|
|||
insert into federated.t1 (code, fileguts, creation_date) values ('DEUEUEUEUEUEUEUEUEU', '*()w*09*$()*#)(*09*^90*d)(*s()d8g)(s*ned)(*)(s*d)(*hn(d*)(*sbn)D((#$*(#*%%&#&^$#&#&#&#&^&#*&*#$*&^*(&#(&Q*&&(*!&!(*&*(#&*(%&#<S-F8>*<S-F8><S-F8><S-F8>#<S-F8>#<S-F8>#<S-F8>[[', '2004-04-04 04:04:04');
|
||||
insert into federated.t1 (code, fileguts, creation_date) values ('DEUEUEUEUEUEUEUEUEU', 'jimbob', '2004-04-04 04:04:04');
|
||||
select * from federated.t1;
|
||||
select * from federated.t1 where fileguts = 'jimbob';
|
||||
# test blob indexes
|
||||
select * from federated.t1 where fileguts = 'jimbob';
|
||||
|
||||
# test blob with binary
|
||||
connection slave;
|
||||
drop table if exists federated.t1;
|
||||
CREATE TABLE federated.t1 (a BLOB);
|
||||
|
||||
connection master;
|
||||
drop table if exists federated.t1;
|
||||
CREATE TABLE federated.t1 (a BLOB) ENGINE="FEDERATED" COMMENT='mysql://root@127.0.0.1:9308/federated/t1';
|
||||
INSERT INTO federated.t1 VALUES (0x00);
|
||||
INSERT INTO federated.t1 VALUES (0x0001);
|
||||
INSERT INTO federated.t1 VALUES (0x0100);
|
||||
SELECT HEX(a) FROM federated.t1;
|
||||
|
||||
|
||||
# TODO
|
||||
#
|
||||
|
@ -559,15 +573,6 @@ drop table if exists federated.t1;
|
|||
CREATE TABLE federated.t1 ( `id` int(20) NOT NULL auto_increment, `country_id` int(20) NOT NULL DEFAULT 0, `name` varchar(32), `other` varchar(20), PRIMARY KEY (`id`), key (country_id));
|
||||
|
||||
connection master;
|
||||
drop table if exists federated.t1;
|
||||
CREATE TABLE federated.t1 ( `id` int(20) NOT NULL auto_increment, `country_id` int(20) NOT NULL DEFAULT 0, `name` varchar(32), `other` varchar(20), PRIMARY KEY (`id`), key (country_id) ) ENGINE="FEDERATED" DEFAULT CHARSET=latin1 COMMENT='mysql://root@127.0.0.1:9308/federated/t1';
|
||||
insert into federated.t1 (name, country_id, other) values ('Kumar', 1, 11111);
|
||||
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);
|
||||
|
||||
|
||||
drop table if exists federated.countries;
|
||||
CREATE TABLE federated.countries ( `id` int(20) NOT NULL auto_increment, `country` varchar(32), primary key (id));
|
||||
insert into federated.countries (country) values ('India');
|
||||
|
@ -576,6 +581,14 @@ insert into federated.countries (country) values ('Italy');
|
|||
insert into federated.countries (country) values ('Finland');
|
||||
insert into federated.countries (country) values ('Ukraine');
|
||||
|
||||
drop table if exists federated.t1;
|
||||
CREATE TABLE federated.t1 ( `id` int(20) NOT NULL auto_increment, `country_id` int(20) NOT NULL DEFAULT 0, `name` varchar(32), `other` varchar(20), PRIMARY KEY (`id`), key (country_id) ) ENGINE="FEDERATED" DEFAULT CHARSET=latin1 COMMENT='mysql://root@127.0.0.1:9308/federated/t1';
|
||||
insert into federated.t1 (name, country_id, other) values ('Kumar', 1, 11111);
|
||||
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.*, federated.countries.country from federated.t1 left join federated.countries on federated.t1.country_id = federated.countries.id;
|
||||
|
||||
drop table federated.countries;
|
||||
|
|
|
@ -1121,7 +1121,7 @@ void mysql_read_default_options(struct st_mysql_options *options,
|
|||
else the lengths are calculated from the offset between pointers.
|
||||
**************************************************************************/
|
||||
|
||||
static void cli_fetch_lengths(ulong *to, MYSQL_ROW column,
|
||||
void cli_fetch_lengths(ulong *to, MYSQL_ROW column,
|
||||
unsigned int field_count)
|
||||
{
|
||||
ulong *prev_length;
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -32,13 +32,16 @@
|
|||
FEDERATED_SHARE is a structure that will be shared amoung all open handlers
|
||||
The example implements the minimum of what you will probably need.
|
||||
*/
|
||||
//FIX document
|
||||
typedef struct st_federated_share {
|
||||
char *table_name;
|
||||
char *table_base_name;
|
||||
// the primary select query to be used in rnd_init
|
||||
/*
|
||||
the primary select query to be used in rnd_init
|
||||
*/
|
||||
char *select_query;
|
||||
// remote host info, parse_url supplies
|
||||
/*
|
||||
remote host info, parse_url supplies
|
||||
*/
|
||||
char *scheme;
|
||||
char *hostname;
|
||||
char *username;
|
||||
|
@ -62,6 +65,7 @@ class ha_federated: public handler
|
|||
FEDERATED_SHARE *share; /* Shared lock info */
|
||||
MYSQL *mysql;
|
||||
MYSQL_RES *result;
|
||||
bool scan_flag;
|
||||
uint ref_length;
|
||||
uint fetch_num; // stores the fetch num
|
||||
MYSQL_ROW_OFFSET current_position; // Current position used by ::position()
|
||||
|
@ -73,10 +77,12 @@ private:
|
|||
*/
|
||||
uint convert_row_to_internal_format(byte *buf, MYSQL_ROW row);
|
||||
bool create_where_from_key(String *to, KEY *key_info, const byte *key, uint key_length);
|
||||
bool create_where_from_key(String *to, KEY *key_info,
|
||||
const byte *key, uint key_length);
|
||||
|
||||
public:
|
||||
ha_federated(TABLE *table): handler(table),
|
||||
mysql(0),
|
||||
mysql(0), result(0), scan_flag(0),
|
||||
ref_length(sizeof(MYSQL_ROW_OFFSET)), current_position(0)
|
||||
{
|
||||
}
|
||||
|
@ -126,11 +132,16 @@ public:
|
|||
/*
|
||||
Called in test_quick_select to determine if indexes should be used.
|
||||
*/
|
||||
virtual double scan_time() { DBUG_PRINT("ha_federated::scan_time", ("rows %d", records)); return (double)(records*2); }
|
||||
virtual double scan_time()
|
||||
{
|
||||
DBUG_PRINT("ha_federated::scan_time",
|
||||
("rows %d", records)); return (double)(records*2);
|
||||
}
|
||||
/*
|
||||
The next method will never be called if you do not implement indexes.
|
||||
*/
|
||||
virtual double read_time(uint index, uint ranges, ha_rows rows) { return (double) rows / 20.0+1; }
|
||||
virtual double read_time(uint index, uint ranges, ha_rows rows)
|
||||
{ return (double) rows / 20.0+1; }
|
||||
|
||||
/*
|
||||
Everything below are methods that we implment in ha_federated.cc.
|
||||
|
@ -173,3 +184,6 @@ public:
|
|||
THR_LOCK_DATA **store_lock(THD *thd, THR_LOCK_DATA **to,
|
||||
enum thr_lock_type lock_type); //required
|
||||
};
|
||||
|
||||
bool federated_db_init(void);
|
||||
bool federated_db_end(void);
|
||||
|
|
|
@ -395,6 +395,16 @@ int ha_init()
|
|||
ha_was_inited_ok(ht++);
|
||||
}
|
||||
#endif
|
||||
#ifdef HAVE_FEDERATED_DB
|
||||
if (have_federated_db == SHOW_OPTION_YES)
|
||||
{
|
||||
if (federated_db_init())
|
||||
{
|
||||
have_federated_db= SHOW_OPTION_DISABLED;
|
||||
error= 1;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#ifdef HAVE_ARCHIVE_DB
|
||||
if (have_archive_db == SHOW_OPTION_YES)
|
||||
{
|
||||
|
@ -441,6 +451,10 @@ int ha_panic(enum ha_panic_function flag)
|
|||
if (have_ndbcluster == SHOW_OPTION_YES)
|
||||
error|=ndbcluster_end();
|
||||
#endif
|
||||
#ifdef HAVE_FEDERATED_DB
|
||||
if (have_federated_db == SHOW_OPTION_YES)
|
||||
error|= federated_db_end();
|
||||
#endif
|
||||
#ifdef HAVE_ARCHIVE_DB
|
||||
if (have_archive_db == SHOW_OPTION_YES)
|
||||
error|= archive_db_end();
|
||||
|
|
Loading…
Reference in a new issue