diff options
author | unknown <konstantin@mysql.com> | 2006-02-08 00:33:31 +0300 |
---|---|---|
committer | unknown <konstantin@mysql.com> | 2006-02-08 00:33:31 +0300 |
commit | 1b2b2b300a6ce657f480e9f59a05da94ca311d42 (patch) | |
tree | 755751e8bf9dbc633d3a7b1858214f1de11ab336 /sql/ha_federated.cc | |
parent | a9c1cf7f9ab76717ab47d9ff0f8080bf27b879cf (diff) | |
parent | b16c7d2a0b793597e0f4ca451934221cd8cfe889 (diff) | |
download | mariadb-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.cc | 30 |
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) { |