MySQL 5.6.14 Source Code Document
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Load_log_event Class Reference

#include <log_event.h>

Inheritance diagram for Load_log_event:
Collaboration diagram for Load_log_event:

Public Member Functions

uint get_query_buffer_length ()
void print_query (bool need_db, const char *cs, char *buf, char **end, char **fn_start, char **fn_end)
void set_fname_outside_temp_buf (const char *afname, uint alen)
int check_fname_outside_temp_buf ()
void print (FILE *file, PRINT_EVENT_INFO *print_event_info)
void print (FILE *file, PRINT_EVENT_INFO *print_event_info, bool commented)
 Load_log_event (const char *buf, uint event_len, const Format_description_log_event *description_event)
Log_event_type get_type_code ()
bool is_valid () const
int get_data_size ()
- Public Member Functions inherited from Log_event
 Log_event (enum_event_cache_type cache_type_arg=EVENT_INVALID_CACHE, enum_event_logging_type logging_type_arg=EVENT_INVALID_LOGGING)
void print_timestamp (IO_CACHE *file, time_t *ts)
void print_header (IO_CACHE *file, PRINT_EVENT_INFO *print_event_info, bool is_more)
void print_base64 (IO_CACHE *file, PRINT_EVENT_INFO *print_event_info, bool is_more)
bool wrapper_my_b_safe_write (IO_CACHE *file, const uchar *buf, ulong data_length)
void set_artificial_event ()
void set_relay_log_event ()
bool is_artificial_event () const
bool is_relay_log_event () const
bool is_ignorable_event () const
bool is_no_filter_event () const
bool is_using_trans_cache () const
bool is_using_stmt_cache () const
bool is_using_immediate_logging () const
 Log_event (const char *buf, const Format_description_log_event *description_event)
void register_temp_buf (char *buf)
void free_temp_buf ()
const char * get_type_str ()

Public Attributes

ulong thread_id
ulong slave_proxy_id
uint32 table_name_len
uint32 db_len
uint32 fname_len
uint32 num_fields
const char * fields
const uchar * field_lens
uint32 field_block_len
const char * table_name
const char * db
const char * fname
uint32 skip_lines
sql_ex_info sql_ex
bool local_fname
bool is_concurrent
- Public Attributes inherited from Log_event
my_off_t log_pos
char * temp_buf
struct timeval when
ulong exec_time
ulong data_written
uint32 server_id
uint32 unmasked_server_id
uint16 flags
ulong slave_exec_mode
enum_event_cache_type event_cache_type
enum_event_logging_type event_logging_type
ha_checksum crc
ulong mts_group_idx
Relay_log_infoworker
ulonglong future_event_relay_log_pos
uint8 checksum_alg

Protected Member Functions

int copy_log_event (const char *buf, ulong event_len, int body_offset, const Format_description_log_event *description_event)

Additional Inherited Members

- Public Types inherited from Log_event
enum  enum_skip_reason { EVENT_SKIP_NOT, EVENT_SKIP_IGNORE, EVENT_SKIP_COUNT }
typedef unsigned char Byte
- Static Public Member Functions inherited from Log_event
static Log_eventread_log_event (IO_CACHE *file, const Format_description_log_event *description_event, my_bool crc_check)
static void * operator new (size_t size)
static void operator delete (void *ptr, size_t)
static void * operator new (size_t, void *ptr)
static void operator delete (void *, void *)
static Log_eventread_log_event (const char *buf, uint event_len, const char **error, const Format_description_log_event *description_event, my_bool crc_check)
static const char * get_type_str (Log_event_type type)
- Protected Types inherited from Log_event
enum  enum_event_cache_type {
  EVENT_INVALID_CACHE = 0, EVENT_STMT_CACHE, EVENT_TRANSACTIONAL_CACHE, EVENT_NO_CACHE,
  EVENT_CACHE_COUNT
}
enum  enum_event_logging_type { EVENT_INVALID_LOGGING = 0, EVENT_NORMAL_LOGGING, EVENT_IMMEDIATE_LOGGING, EVENT_CACHE_LOGGING_COUNT }

Detailed Description

This log event corresponds to a "LOAD DATA INFILE" SQL query on the following form:

 (1)    USE db;
 (2)    LOAD DATA [CONCURRENT] [LOCAL] INFILE 'file_name'
 (3)    [REPLACE | IGNORE]
 (4)    INTO TABLE 'table_name'
 (5)    [FIELDS
 (6)      [TERMINATED BY 'field_term']
 (7)      [[OPTIONALLY] ENCLOSED BY 'enclosed']
 (8)      [ESCAPED BY 'escaped']
 (9)    ]
(10)    [LINES
(11)      [TERMINATED BY 'line_term']
(12)      [LINES STARTING BY 'line_start']
(13)    ]
(14)    [IGNORE skip_lines LINES]
(15)    (field_1, field_2, ..., field_n)

Binary Format

The Post-Header consists of the following six components.

Post-Header for Load_log_event
Name Format

Description

slave_proxy_id 4 byte unsigned integer

An integer identifying the client thread that issued the query. The id is unique per server. (Note, however, that two threads on different servers may have the same slave_proxy_id.) This is used when a client thread creates a temporary table local to the client. The slave_proxy_id is used to distinguish temporary tables that belong to different clients.

exec_time 4 byte unsigned integer

The time from when the query started to when it was logged in the binlog, in seconds.

skip_lines 4 byte unsigned integer

The number on line (14) above, if present, or 0 if line (14) is left out.

table_name_len 1 byte unsigned integer

The length of 'table_name' on line (4) above.

db_len 1 byte unsigned integer

The length of 'db' on line (1) above.

num_fields 4 byte unsigned integer The number n of fields on line (15) above.

The Body contains the following components.

Body of Load_log_event
Name Format

Description

sql_ex

variable length

Describes the part of the query on lines (3) and (5)–(13) above. More precisely, it stores the five strings (on lines) field_term (6), enclosed (7), escaped (8), line_term (11), and line_start (12); as well as a bitfield indicating the presence of the keywords REPLACE (3), IGNORE (3), and OPTIONALLY (7).

The data is stored in one of two formats, called "old" and "new". The type field of Common-Header determines which of these two formats is used: type LOAD_EVENT means that the old format is used, and type NEW_LOAD_EVENT means that the new format is used. When MySQL writes a Load_log_event, it uses the new format if at least one of the five strings is two or more bytes long. Otherwise (i.e., if all strings are 0 or 1 bytes long), the old format is used.

The new and old format differ in the way the five strings are stored.

  • In the new format, the strings are stored in the order field_term, enclosed, escaped, line_term, line_start. Each string consists of a length (1 byte), followed by a sequence of characters (0-255 bytes). Finally, a boolean combination of the following flags is stored in 1 byte: REPLACE_FLAG==0x4, IGNORE_FLAG==0x8, and OPT_ENCLOSED_FLAG==0x2. If a flag is set, it indicates the presence of the corresponding keyword in the SQL query.

  • In the old format, we know that each string has length 0 or
    1. Therefore, only the first byte of each string is stored. The order of the strings is the same as in the new format. These five bytes are followed by the same 1 byte bitfield as in the new format. Finally, a 1 byte bitfield called empty_flags is stored. The low 5 bits of empty_flags indicate which of the five strings have length 0. For each of the following flags that is set, the corresponding string has length 0; for the flags that are not set, the string has length 1: FIELD_TERM_EMPTY==0x1, ENCLOSED_EMPTY==0x2, LINE_TERM_EMPTY==0x4, LINE_START_EMPTY==0x8, ESCAPED_EMPTY==0x10.

Thus, the size of the new format is 6 bytes + the sum of the sizes of the five strings. The size of the old format is always 7 bytes.

field_lens num_fields 1 byte unsigned integers

An array of num_fields integers representing the length of each field in the query. (num_fields is from the Post-Header).

fields num_fields null-terminated strings

An array of num_fields null-terminated strings, each representing a field in the query. (The trailing zero is redundant, since the length are stored in the num_fields array.) The total length of all strings equals to the sum of all field_lens, plus num_fields bytes for all the trailing zeros.

table_name null-terminated string of length table_len+1 bytes

The 'table_name' from the query, as a null-terminated string. (The trailing zero is actually redundant since the table_len is known from Post-Header.)

db null-terminated string of length db_len+1 bytes

The 'db' from the query, as a null-terminated string. (The trailing zero is actually redundant since the db_len is known from Post-Header.)

file_name variable length string without trailing zero, extending to the end of the event (determined by the length field of the Common-Header)

The 'file_name' from the query.

Notes on Previous Versions

This event type is understood by current versions, but only generated by MySQL 3.23 and earlier.

Definition at line 2428 of file log_event.h.

Constructor & Destructor Documentation

Load_log_event::Load_log_event ( const char *  buf,
uint  event_len,
const Format_description_log_event description_event 
)
Note
The caller must do buf[event_len] = 0 before he starts using the constructed event.

Definition at line 5979 of file log_event.cc.

Here is the call graph for this function:

Member Data Documentation

bool Load_log_event::is_concurrent

Indicates that this event corresponds to LOAD DATA CONCURRENT,

Note
Since Load_log_event event coming from the binary log lacks information whether LOAD DATA on master was concurrent or not, this flag is only set to TRUE for an auxiliary Load_log_event object which is used in mysql_load() to re-construct LOAD DATA statement from function parameters, for logging.

Definition at line 2471 of file log_event.h.


The documentation for this class was generated from the following files: