mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
Move all ddl log code to ddl_log.cc and ddl_log.h
Part of prepration for: MDEV-17567 Atomic DDL No notable code changes except moving code around
This commit is contained in:
111
sql/ddl_log.h
Normal file
111
sql/ddl_log.h
Normal file
@@ -0,0 +1,111 @@
|
||||
/*
|
||||
Copyright (c) 2000, 2019, Oracle and/or its affiliates.
|
||||
Copyright (c) 2010, 2020, MariaDB
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; version 2 of the License.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA
|
||||
*/
|
||||
|
||||
/* External interfaces to ddl log functions */
|
||||
|
||||
#ifndef DDL_LOG_INCLUDED
|
||||
#define DDL_LOG_INCLUDED
|
||||
|
||||
enum ddl_log_entry_code
|
||||
{
|
||||
/*
|
||||
DDL_LOG_EXECUTE_CODE:
|
||||
This is a code that indicates that this is a log entry to
|
||||
be executed, from this entry a linked list of log entries
|
||||
can be found and executed.
|
||||
DDL_LOG_ENTRY_CODE:
|
||||
An entry to be executed in a linked list from an execute log
|
||||
entry.
|
||||
DDL_IGNORE_LOG_ENTRY_CODE:
|
||||
An entry that is to be ignored
|
||||
*/
|
||||
DDL_LOG_EXECUTE_CODE = 'e',
|
||||
DDL_LOG_ENTRY_CODE = 'l',
|
||||
DDL_IGNORE_LOG_ENTRY_CODE = 'i'
|
||||
};
|
||||
|
||||
enum ddl_log_action_code
|
||||
{
|
||||
/*
|
||||
The type of action that a DDL_LOG_ENTRY_CODE entry is to
|
||||
perform.
|
||||
DDL_LOG_DELETE_ACTION:
|
||||
Delete an entity
|
||||
DDL_LOG_RENAME_ACTION:
|
||||
Rename an entity
|
||||
DDL_LOG_REPLACE_ACTION:
|
||||
Rename an entity after removing the previous entry with the
|
||||
new name, that is replace this entry.
|
||||
DDL_LOG_EXCHANGE_ACTION:
|
||||
Exchange two entities by renaming them a -> tmp, b -> a, tmp -> b.
|
||||
*/
|
||||
DDL_LOG_DELETE_ACTION = 'd',
|
||||
DDL_LOG_RENAME_ACTION = 'r',
|
||||
DDL_LOG_REPLACE_ACTION = 's',
|
||||
DDL_LOG_EXCHANGE_ACTION = 'e'
|
||||
};
|
||||
|
||||
enum enum_ddl_log_exchange_phase {
|
||||
EXCH_PHASE_NAME_TO_TEMP= 0,
|
||||
EXCH_PHASE_FROM_TO_NAME= 1,
|
||||
EXCH_PHASE_TEMP_TO_FROM= 2
|
||||
};
|
||||
|
||||
|
||||
typedef struct st_ddl_log_entry
|
||||
{
|
||||
const char *name;
|
||||
const char *from_name;
|
||||
const char *handler_name;
|
||||
const char *tmp_name;
|
||||
uint next_entry;
|
||||
uint entry_pos;
|
||||
enum ddl_log_entry_code entry_type;
|
||||
enum ddl_log_action_code action_type;
|
||||
/*
|
||||
Most actions have only one phase. REPLACE does however have two
|
||||
phases. The first phase removes the file with the new name if
|
||||
there was one there before and the second phase renames the
|
||||
old name to the new name.
|
||||
*/
|
||||
char phase;
|
||||
} DDL_LOG_ENTRY;
|
||||
|
||||
typedef struct st_ddl_log_memory_entry
|
||||
{
|
||||
uint entry_pos;
|
||||
struct st_ddl_log_memory_entry *next_log_entry;
|
||||
struct st_ddl_log_memory_entry *prev_log_entry;
|
||||
struct st_ddl_log_memory_entry *next_active_log_entry;
|
||||
} DDL_LOG_MEMORY_ENTRY;
|
||||
|
||||
|
||||
bool write_ddl_log_entry(DDL_LOG_ENTRY *ddl_log_entry,
|
||||
DDL_LOG_MEMORY_ENTRY **active_entry);
|
||||
bool write_execute_ddl_log_entry(uint first_entry,
|
||||
bool complete,
|
||||
DDL_LOG_MEMORY_ENTRY **active_entry);
|
||||
bool deactivate_ddl_log_entry(uint entry_no);
|
||||
void release_ddl_log_memory_entry(DDL_LOG_MEMORY_ENTRY *log_entry);
|
||||
bool sync_ddl_log();
|
||||
void release_ddl_log();
|
||||
void execute_ddl_log_recovery();
|
||||
bool execute_ddl_log_entry(THD *thd, uint first_entry);
|
||||
|
||||
extern mysql_mutex_t LOCK_gdl;
|
||||
#endif /* DDL_LOG_INCLUDED */
|
Reference in New Issue
Block a user