summaryrefslogtreecommitdiff
path: root/sql/ha_federated.cc
diff options
context:
space:
mode:
authorunknown <konstantin@mysql.com>2006-02-08 00:33:31 +0300
committerunknown <konstantin@mysql.com>2006-02-08 00:33:31 +0300
commit1b2b2b300a6ce657f480e9f59a05da94ca311d42 (patch)
tree755751e8bf9dbc633d3a7b1858214f1de11ab336 /sql/ha_federated.cc
parenta9c1cf7f9ab76717ab47d9ff0f8080bf27b879cf (diff)
parentb16c7d2a0b793597e0f4ca451934221cd8cfe889 (diff)
downloadmariadb-git-1b2b2b300a6ce657f480e9f59a05da94ca311d42.tar.gz
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
Diffstat (limited to 'sql/ha_federated.cc')
-rw-r--r--sql/ha_federated.cc30
1 files changed, 30 insertions, 0 deletions
diff --git a/sql/ha_federated.cc b/sql/ha_federated.cc
index a4282e5013c..f7e0c1242fe 100644
--- a/sql/ha_federated.cc
+++ b/sql/ha_federated.cc
@@ -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)
{