diff options
author | unknown <bell@sanja.is.com.ua> | 2004-04-10 01:14:32 +0300 |
---|---|---|
committer | unknown <bell@sanja.is.com.ua> | 2004-04-10 01:14:32 +0300 |
commit | 8ab58393c5c9732c032faac3f0d04a4536e5562b (patch) | |
tree | 9b43a6ee50851ff9a0c1df227464a4eb032802e2 /sql/sql_insert.cc | |
parent | 2384ed8c011a6df7091bb758e500cca89c499c7e (diff) | |
download | mariadb-git-8ab58393c5c9732c032faac3f0d04a4536e5562b.tar.gz |
after review PS fixes
sql/item_cmpfunc.cc:
merged in one if
sql/mysql_priv.h:
removed unused paremeter of check_one_table_access
declaration of new function for SP share code
sql/set_var.cc:
function descriotion added
unneeded parantses removed
sql/sql_acl.cc:
new parameter to limit number of checked tables for check_grant
sql/sql_acl.h:
new parameter to limit number of checked tables for check_grant
sql/sql_delete.cc:
preparation moved in separate function
sql/sql_insert.cc:
preparation moved in separate function
sql/sql_lex.cc:
comment style fixed
unneeded assignment removed
sql/sql_parse.cc:
new parameter to limit number of checked tables for check_grant
table list manipulation removed (because of above)
new precheck function
sql/sql_prepare.cc:
function rewrited to shere code with sql_prepare.cc
flow control fixed
sql/sql_show.cc:
new parameter to limit number of checked tables for check_grant
sql/sql_update.cc:
preparation moved in separate function
sql/table.h:
flag renamed
Diffstat (limited to 'sql/sql_insert.cc')
-rw-r--r-- | sql/sql_insert.cc | 52 |
1 files changed, 40 insertions, 12 deletions
diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc index cc2ba29dbd8..8185c716228 100644 --- a/sql/sql_insert.cc +++ b/sql/sql_insert.cc @@ -207,19 +207,10 @@ int mysql_insert(THD *thd,TABLE_LIST *table_list, goto abort; } - if (check_insert_fields(thd,table,fields,*values,1) || - 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) || - setup_fields(thd, 0, insert_table_list, update_values, 0, 0, 0)))) - goto abort; - if (find_real_table_in_list(table_list->next, - table_list->db, table_list->real_name)) - { - my_error(ER_UPDATE_TABLE_USED, MYF(0), table_list->real_name); + if (mysql_prepare_insert(thd, table_list, insert_table_list, table, + fields, values, update_fields, + update_values, duplic)) goto abort; - } value_count= values->elements; while ((values= its++)) @@ -438,6 +429,43 @@ abort: } +/* + Prepare items in INSERT statement + + SYNOPSIS + mysql_prepare_update() + thd - thread handler + table_list - global table list + insert_table_list - local table list of INSERT SELECT_LEX + + RETURN VALUE + 0 - OK + -1 - error (message is not sent to user) +*/ +int mysql_prepare_insert(THD *thd, TABLE_LIST *table_list, + TABLE_LIST *insert_table_list, TABLE *table, + List<Item> &fields, List_item *values, + List<Item> &update_fields, List<Item> &update_values, + enum_duplicates duplic) +{ + DBUG_ENTER("mysql_prepare_insert"); + if (check_insert_fields(thd, table, fields, *values, 1) || + 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) || + setup_fields(thd, 0, insert_table_list, update_values, 0, 0, 0)))) + DBUG_RETURN(-1); + if (find_real_table_in_list(table_list->next, + table_list->db, table_list->real_name)) + { + my_error(ER_UPDATE_TABLE_USED, MYF(0), table_list->real_name); + DBUG_RETURN(-1); + } + DBUG_RETURN(0); +} + + /* Check if there is more uniq keys after field */ static int last_uniq_key(TABLE *table,uint keynr) |