Commit 6065cacb authored by unknown's avatar unknown
Browse files

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

into  govinda.patg.net:/home/patg/mysql-build/mysql-5.0

parents d42c472e e13a840a
Loading
Loading
Loading
Loading
+42 −0
Original line number Diff line number Diff line
@@ -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;
+30 −0
Original line number Diff line number Diff line
@@ -1224,4 +1224,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;
+30 −0
Original line number Diff line number Diff line
@@ -1393,6 +1393,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));
@@ -1695,10 +1701,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)
{
+1 −0
Original line number Diff line number Diff line
@@ -285,6 +285,7 @@ class ha_federated: public handler
  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);