mirror of
https://github.com/MariaDB/server.git
synced 2025-01-29 10:14:19 +01:00
Merge mysql.com:/home/kostja/mysql/tmp_merge
into mysql.com:/home/kostja/mysql/mysql-5.1-merge mysql-test/t/federated.test: Auto merged sql/ha_federated.cc: Auto merged sql/ha_federated.h: Auto merged
This commit is contained in:
commit
1b2b2b300a
4 changed files with 103 additions and 0 deletions
|
@ -1517,6 +1517,48 @@ bitty
|
|||
drop table federated.t1;
|
||||
drop table federated.t1;
|
||||
DROP TABLE IF EXISTS federated.t1;
|
||||
Warnings:
|
||||
Note 1051 Unknown table 't1'
|
||||
CREATE TABLE federated.t1 (
|
||||
`id` int(20) NOT NULL auto_increment,
|
||||
PRIMARY KEY (`id`));
|
||||
DROP TABLE IF EXISTS federated.t1;
|
||||
Warnings:
|
||||
Note 1051 Unknown table 't1'
|
||||
CREATE TABLE federated.t1 (
|
||||
`id` int(20) NOT NULL auto_increment,
|
||||
PRIMARY KEY (`id`)
|
||||
)
|
||||
ENGINE="FEDERATED" DEFAULT CHARSET=latin1
|
||||
CONNECTION='mysql://root@127.0.0.1:9308/federated/t1';
|
||||
INSERT INTO federated.t1 VALUES ();
|
||||
SELECT LAST_INSERT_ID();
|
||||
LAST_INSERT_ID()
|
||||
1
|
||||
INSERT INTO federated.t1 VALUES ();
|
||||
SELECT LAST_INSERT_ID();
|
||||
LAST_INSERT_ID()
|
||||
2
|
||||
INSERT INTO federated.t1 VALUES ();
|
||||
SELECT LAST_INSERT_ID();
|
||||
LAST_INSERT_ID()
|
||||
3
|
||||
INSERT INTO federated.t1 VALUES ();
|
||||
SELECT LAST_INSERT_ID();
|
||||
LAST_INSERT_ID()
|
||||
4
|
||||
INSERT INTO federated.t1 VALUES ();
|
||||
SELECT LAST_INSERT_ID();
|
||||
LAST_INSERT_ID()
|
||||
5
|
||||
SELECT * FROM federated.t1;
|
||||
id
|
||||
1
|
||||
2
|
||||
3
|
||||
4
|
||||
5
|
||||
DROP TABLE IF EXISTS federated.t1;
|
||||
DROP DATABASE IF EXISTS federated;
|
||||
DROP TABLE IF EXISTS federated.t1;
|
||||
DROP DATABASE IF EXISTS federated;
|
||||
|
|
|
@ -1226,4 +1226,34 @@ drop table federated.t1;
|
|||
connection slave;
|
||||
drop table federated.t1;
|
||||
|
||||
#
|
||||
# BUG# 14768 test auto_increment last_insert_id()
|
||||
#
|
||||
connection slave;
|
||||
DROP TABLE IF EXISTS federated.t1;
|
||||
CREATE TABLE federated.t1 (
|
||||
`id` int(20) NOT NULL auto_increment,
|
||||
PRIMARY KEY (`id`));
|
||||
|
||||
connection master;
|
||||
DROP TABLE IF EXISTS federated.t1;
|
||||
eval CREATE TABLE federated.t1 (
|
||||
`id` int(20) NOT NULL auto_increment,
|
||||
PRIMARY KEY (`id`)
|
||||
)
|
||||
ENGINE="FEDERATED" DEFAULT CHARSET=latin1
|
||||
CONNECTION='mysql://root@127.0.0.1:$SLAVE_MYPORT/federated/t1';
|
||||
|
||||
INSERT INTO federated.t1 VALUES ();
|
||||
SELECT LAST_INSERT_ID();
|
||||
INSERT INTO federated.t1 VALUES ();
|
||||
SELECT LAST_INSERT_ID();
|
||||
INSERT INTO federated.t1 VALUES ();
|
||||
SELECT LAST_INSERT_ID();
|
||||
INSERT INTO federated.t1 VALUES ();
|
||||
SELECT LAST_INSERT_ID();
|
||||
INSERT INTO federated.t1 VALUES ();
|
||||
SELECT LAST_INSERT_ID();
|
||||
SELECT * FROM federated.t1;
|
||||
|
||||
source include/federated_cleanup.inc;
|
||||
|
|
|
@ -1409,6 +1409,12 @@ static int free_share(FEDERATED_SHARE *share)
|
|||
hash_delete(&federated_open_tables, (byte*) share);
|
||||
my_free((gptr) share->scheme, MYF(MY_ALLOW_ZERO_PTR));
|
||||
share->scheme= 0;
|
||||
if (share->socket)
|
||||
{
|
||||
my_free((gptr) share->socket, MYF(MY_ALLOW_ZERO_PTR));
|
||||
share->socket= 0;
|
||||
}
|
||||
|
||||
thr_lock_delete(&share->lock);
|
||||
VOID(pthread_mutex_destroy(&share->mutex));
|
||||
my_free((gptr) share, MYF(0));
|
||||
|
@ -1688,10 +1694,34 @@ int ha_federated::write_row(byte *buf)
|
|||
{
|
||||
DBUG_RETURN(stash_remote_error());
|
||||
}
|
||||
/*
|
||||
If the table we've just written a record to contains an auto_increment field,
|
||||
then store the last_insert_id() value from the foreign server
|
||||
*/
|
||||
if (table->next_number_field)
|
||||
update_auto_increment();
|
||||
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
|
||||
/*
|
||||
ha_federated::update_auto_increment
|
||||
|
||||
This method ensures that last_insert_id() works properly. What it simply does
|
||||
is calls last_insert_id() on the foreign database immediately after insert
|
||||
(if the table has an auto_increment field) and sets the insert id via
|
||||
thd->insert_id(ID) (as well as storing thd->prev_insert_id)
|
||||
*/
|
||||
void ha_federated::update_auto_increment(void)
|
||||
{
|
||||
THD *thd= current_thd;
|
||||
DBUG_ENTER("ha_federated::update_auto_increment");
|
||||
|
||||
thd->insert_id(mysql->last_used_con->insert_id);
|
||||
DBUG_PRINT("info",("last_insert_id %d", auto_increment_value));
|
||||
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
||||
int ha_federated::optimize(THD* thd, HA_CHECK_OPT* check_opt)
|
||||
{
|
||||
|
|
|
@ -286,6 +286,7 @@ public:
|
|||
void position(const byte *record); //required
|
||||
void info(uint); //required
|
||||
|
||||
void update_auto_increment(void);
|
||||
int repair(THD* thd, HA_CHECK_OPT* check_opt);
|
||||
int optimize(THD* thd, HA_CHECK_OPT* check_opt);
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue