mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Backport of:
---------------------------------------------------------- revno: 2617.69.24 committer: Konstantin Osipov <kostja@sun.com> branch nick: 5.4-42546 timestamp: Fri 2009-08-14 19:22:05 +0400 message: A pre-requisite for a fix for Bug#42546 "Backup: RESTORE fails, thinking it finds an existing table" Back-port from WL 148 "Foreign keys" feature tree a patch that introduced Prelocking_strategy class -- a way to parameterize open_tables() behaviour, implemented by Dmitry Lenev. (Part of WL#4284). sql/sql_base.cc: Implement different prelocking strategies. Use an instance of prelocking_strategy in open_tables(). sql/sql_class.h: Add declarations for class Prelocking_strategy. sql/sql_lex.h: Add a helper method to access last table of the global table list (lex->query_tables). sql/sql_parse.cc: Use a special prelocking strategy when locking tables for LOCK TABLES. sql/sql_table.cc: Use normal open_and_lock_tables_derived() in ALTER TABLE. sql/sql_yacc.yy: Modify the grammar to not pollute the global table list with tables that should not be opened.
This commit is contained in:
@ -1052,6 +1052,17 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
/** Return a pointer to the last element in query table list. */
|
||||
TABLE_LIST *last_table()
|
||||
{
|
||||
/* Don't use offsetof() macro in order to avoid warnings. */
|
||||
return query_tables ?
|
||||
(TABLE_LIST*) ((char*) query_tables_last -
|
||||
((char*) &(query_tables->next_global) -
|
||||
(char*) query_tables)) :
|
||||
0;
|
||||
}
|
||||
|
||||
/**
|
||||
Has the parser/scanner detected that this statement is unsafe?
|
||||
*/
|
||||
@ -1751,6 +1762,12 @@ struct LEX: public Query_tables_list
|
||||
bool subqueries, ignore;
|
||||
st_parsing_options parsing_options;
|
||||
Alter_info alter_info;
|
||||
/*
|
||||
For CREATE TABLE statement last element of table list which is not
|
||||
part of SELECT or LIKE part (i.e. either element for table we are
|
||||
creating or last of tables referenced by foreign keys).
|
||||
*/
|
||||
TABLE_LIST *create_last_non_select_table;
|
||||
/* Prepared statements SQL syntax:*/
|
||||
LEX_STRING prepared_stmt_name; /* Statement name (in all queries) */
|
||||
/*
|
||||
|
Reference in New Issue
Block a user