diff options
author | unknown <paul@teton.kitebird.com> | 2004-02-17 13:15:38 -0600 |
---|---|---|
committer | unknown <paul@teton.kitebird.com> | 2004-02-17 13:15:38 -0600 |
commit | 3d20c8ce5257575833b97ba2ff652c0a11a13a61 (patch) | |
tree | d1ac886850991243acf78e3ed59dd1725b485c6a /sql/sql_insert.cc | |
parent | 9f719835759657ac42a20a7c74a195ce54970941 (diff) | |
parent | 18d1234ada5b66836e8f5f2f4d49e85b9cc87e09 (diff) | |
download | mariadb-git-3d20c8ce5257575833b97ba2ff652c0a11a13a61.tar.gz |
Merge paul@bk-internal.mysql.com:/home/bk/mysql-4.1
into teton.kitebird.com:/home/paul/mysql-4.1
include/m_string.h:
Auto merged
sql/share/czech/errmsg.txt:
Auto merged
sql/share/danish/errmsg.txt:
Auto merged
sql/share/dutch/errmsg.txt:
Auto merged
sql/share/english/errmsg.txt:
Auto merged
sql/share/estonian/errmsg.txt:
Auto merged
sql/share/french/errmsg.txt:
Auto merged
sql/share/german/errmsg.txt:
Auto merged
sql/share/greek/errmsg.txt:
Auto merged
sql/share/hungarian/errmsg.txt:
Auto merged
sql/share/italian/errmsg.txt:
Auto merged
sql/share/japanese/errmsg.txt:
Auto merged
sql/share/korean/errmsg.txt:
Auto merged
sql/share/norwegian-ny/errmsg.txt:
Auto merged
sql/share/norwegian/errmsg.txt:
Auto merged
sql/share/polish/errmsg.txt:
Auto merged
sql/share/portuguese/errmsg.txt:
Auto merged
sql/share/romanian/errmsg.txt:
Auto merged
sql/share/russian/errmsg.txt:
Auto merged
sql/share/slovak/errmsg.txt:
Auto merged
sql/share/spanish/errmsg.txt:
Auto merged
sql/share/swedish/errmsg.txt:
Auto merged
sql/share/ukrainian/errmsg.txt:
Auto merged
Diffstat (limited to 'sql/sql_insert.cc')
-rw-r--r-- | sql/sql_insert.cc | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc index 58c3d143a4f..ccb8296b929 100644 --- a/sql/sql_insert.cc +++ b/sql/sql_insert.cc @@ -84,7 +84,7 @@ check_insert_fields(THD *thd,TABLE *table,List<Item> &fields, table_list.grant=table->grant; thd->dupp_field=0; - if (setup_tables(&table_list, 0) || + if (setup_tables(&table_list) || setup_fields(thd, 0, &table_list,fields,1,0,0)) return -1; if (thd->dupp_field) @@ -204,7 +204,7 @@ int mysql_insert(THD *thd,TABLE_LIST *table_list, } if (check_insert_fields(thd,table,fields,*values,1) || - setup_tables(insert_table_list, 0) || + setup_tables(insert_table_list) || setup_fields(thd, 0, insert_table_list, *values, 0, 0, 0) || (duplic == DUP_UPDATE && (setup_fields(thd, 0, insert_table_list, update_fields, 0, 0, 0) || @@ -534,7 +534,14 @@ int write_record(TABLE *table,COPY_INFO *info) } else /* DUP_REPLACE */ { - if (last_uniq_key(table,key_nr)) + /* + The manual defines the REPLACE semantics that it is either + an INSERT or DELETE(s) + INSERT; FOREIGN KEY checks in + InnoDB do not function in the defined way if we allow MySQL + to convert the latter operation internally to an UPDATE. + */ + if (last_uniq_key(table,key_nr) && + !table->file->referenced_by_foreign_key()) { if ((error=table->file->update_row(table->record[1], table->record[0]))) @@ -1552,8 +1559,8 @@ select_create::prepare(List<Item> &values, SELECT_LEX_UNIT *u) DBUG_ENTER("select_create::prepare"); unit= u; - table=create_table_from_items(thd, create_info, db, name, - extra_fields, keys, &values, &lock); + table= create_table_from_items(thd, create_info, db, name, + extra_fields, keys, &values, &lock); if (!table) DBUG_RETURN(-1); // abort() deletes table |