summaryrefslogtreecommitdiff
path: root/sql/sql_yacc.yy
diff options
context:
space:
mode:
authorunknown <dlenev@brandersnatch.localdomain>2005-03-16 12:13:35 +0300
committerunknown <dlenev@brandersnatch.localdomain>2005-03-16 12:13:35 +0300
commitec919d742838f491556cb98a894bffab79957cd5 (patch)
treeb8622bdfca30af3b43d99987e30119fd6b8726bf /sql/sql_yacc.yy
parent5f75c8f5b47b73e6c1cd4261de9b99b0fdb8c24e (diff)
downloadmariadb-git-ec919d742838f491556cb98a894bffab79957cd5.tar.gz
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).
Diffstat (limited to 'sql/sql_yacc.yy')
-rw-r--r--sql/sql_yacc.yy22
1 files changed, 13 insertions, 9 deletions
diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy
index e2d0dba7a24..ef5cbb3c79b 100644
--- a/sql/sql_yacc.yy
+++ b/sql/sql_yacc.yy
@@ -6437,16 +6437,20 @@ load_data:
{
LEX *lex=Lex;
lex->fname_end= lex->ptr;
- lex->field_list.empty();
- lex->update_list.empty();
- lex->value_list.empty();
- }
- TABLE_SYM table_ident opt_field_term opt_line_term
- opt_ignore_lines opt_field_or_var_spec opt_load_data_set_spec
- {
- if (!Select->add_table_to_list(YYTHD, $10, NULL, TL_OPTION_UPDATING))
- YYABORT;
}
+ TABLE_SYM table_ident
+ {
+ LEX *lex=Lex;
+ if (!Select->add_table_to_list(YYTHD, $10, NULL, TL_OPTION_UPDATING,
+ lex->lock_option))
+ YYABORT;
+ lex->field_list.empty();
+ lex->update_list.empty();
+ lex->value_list.empty();
+ }
+ opt_field_term opt_line_term opt_ignore_lines opt_field_or_var_spec
+ opt_load_data_set_spec
+ {}
|
FROM MASTER_SYM
{