1
0
mirror of https://github.com/MariaDB/server.git synced 2025-08-01 03:47:19 +03:00

Fixed behavior of LOAD DATA with subqueries in SET clause.

The idea is to use TABLE_LIST::lock_type for passing type of lock for
target table to mysql_load() instead of using LEX::lock_option 
(which were rewritten by first subselect in SET clause).

This should also fix potential problem with LOAD DATA in SP
(it is important for them to have right lock_type in the table
 list by the end of statement parsing).


mysql-test/r/loaddata.result:
  Added nice test for LOAD DATA with subquery.
mysql-test/t/loaddata.test:
  Added nice test for LOAD DATA with subquery.
sql/log_event.cc:
  Now we don't pass type of lock for target table to mysql_load()
  explicitly . Instead we use TABLE_LIST::lock_type for this table
  which is already properly set here.
sql/mysql_priv.h:
  Now we don't pass type of lock for target table to mysql_load()
  explicitly . Instead we properly set TABLE_LIST::lock_type for
  this table in parser.
sql/sql_load.cc:
  Now we don't pass type of lock for target table to mysql_load()
  explicitly . Instead we properly set TABLE_LIST::lock_type for
  this table in parser.
sql/sql_parse.cc:
  Now we don't pass type of lock for target table to mysql_load()
  explicitly . Instead we properly set TABLE_LIST::lock_type for
  this table in parser.
sql/sql_yacc.yy:
  load_data:
    Let us use TABLE_LIST::lock_type for passing type of lock for target
    table to mysql_load() instead of using LEX::lock_option (which will
    be rewritten by first subselect in SET clause).
This commit is contained in:
unknown
2005-03-16 12:13:35 +03:00
parent 5f75c8f5b4
commit ec919d7428
7 changed files with 38 additions and 19 deletions

View File

@ -99,7 +99,6 @@ static int read_sep_field(THD *thd, COPY_INFO &info, TABLE_LIST *table_list,
replace row if we will meet duplicates.
ignore - - indicates whenever we should ignore duplicates
read_file_from_client - is this LOAD DATA LOCAL ?
lock_type - what type of concurrency do we allow then we are inserting data
RETURN VALUES
TRUE - error / FALSE - success
@ -109,7 +108,7 @@ bool mysql_load(THD *thd,sql_exchange *ex,TABLE_LIST *table_list,
List<Item> &fields_vars, List<Item> &set_fields,
List<Item> &set_values,
enum enum_duplicates handle_duplicates, bool ignore,
bool read_file_from_client, thr_lock_type lock_type)
bool read_file_from_client)
{
char name[FN_REFLEN];
File file;
@ -143,7 +142,6 @@ bool mysql_load(THD *thd,sql_exchange *ex,TABLE_LIST *table_list,
MYF(0));
DBUG_RETURN(TRUE);
}
table_list->lock_type= lock_type;
if (open_and_lock_tables(thd, table_list))
DBUG_RETURN(TRUE);
if (setup_tables(thd, table_list, &unused_conds,