MySQL 9.6.0
Source Code Documentation
sql_load.h
Go to the documentation of this file.
1/* Copyright (c) 2006, 2025, Oracle and/or its affiliates.
2
3 This program is free software; you can redistribute it and/or modify
4 it under the terms of the GNU General Public License, version 2.0,
5 as published by the Free Software Foundation.
6
7 This program is designed to work with certain software (including
8 but not limited to OpenSSL) that is licensed under separate terms,
9 as designated in a particular file or component or in included license
10 documentation. The authors of MySQL hereby grant you an additional
11 permission to link the program and your derivative works with the
12 separately licensed software that they have either included with
13 the program or referenced in the documentation.
14
15 This program is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License, version 2.0, for more details.
19
20 You should have received a copy of the GNU General Public License
21 along with this program; if not, write to the Free Software
22 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
23
24#ifndef SQL_LOAD_INCLUDED
25#define SQL_LOAD_INCLUDED
26
27#include <assert.h>
28#include <sys/types.h>
29
30#include "lex_string.h"
31
32#include "my_compress.h"
33#include "my_sqlcommand.h"
36#include "sql/current_thd.h"
37#include "sql/sql_cmd.h" /* Sql_cmd */
38#include "sql/sql_data_change.h" /* enum_duplicates */
39#include "sql/sql_exchange.h" /* sql_exchange */
40#include "sql/sql_lex.h"
41#include "sql/sql_list.h"
42#include "sql_string.h"
43
44class Item;
45class READ_INFO;
46class THD;
47class Table_ref;
48
49class Sql_cmd_load_table final : public Sql_cmd {
50 public:
52 enum_filetype filetype, bool is_local_file, enum_source_type source_type,
53 const LEX_STRING &filename, ulong file_count, bool in_key_order,
54 On_duplicate on_duplicate, Table_ident *table,
55 List<String> *opt_partitions, const CHARSET_INFO *opt_charset,
56 LEX_CSTRING compression_algorithm, String *opt_xml_rows_identified_by,
57 const Field_separators *field_separators,
58 const Line_separators *line_separators, ulong skip_lines,
59 mem_root_deque<Item *> *opt_fields_or_vars,
60 mem_root_deque<Item *> *opt_set_fields,
61 mem_root_deque<Item *> *opt_set_exprs, List<String> *opt_set_expr_strings,
62 ulong concurrency, ulonglong memory_size, bool is_bulk_operation)
64 m_is_local_file(is_local_file),
65 m_bulk_source(source_type),
66 m_file_count(file_count),
67 m_ordered_data(in_key_order),
69 m_memory_size(memory_size),
70 m_on_duplicate(on_duplicate),
72 m_opt_partitions(opt_partitions),
76 m_opt_set_expr_strings(opt_set_expr_strings),
77 m_is_bulk_operation(is_bulk_operation),
78 m_compression_algorithm_string(compression_algorithm) {
79 if (opt_fields_or_vars)
80 m_opt_fields_or_vars = std::move(*opt_fields_or_vars);
81 assert((opt_set_fields == nullptr) ^ (opt_set_exprs != nullptr));
82 if (opt_set_fields) {
83 assert(opt_set_fields->size() == opt_set_exprs->size());
84 m_opt_set_fields = std::move(*opt_set_fields);
85 m_opt_set_exprs = std::move(*opt_set_exprs);
86 }
87
88 m_exchange.file_info.cs = opt_charset;
89
90 if (opt_xml_rows_identified_by != nullptr)
91 m_exchange.line.line_term = opt_xml_rows_identified_by;
92
93 m_exchange.field.merge_field_separators(field_separators);
94 m_exchange.line.merge_line_separators(line_separators);
96 m_exchange.skip_lines = skip_lines;
97 }
98
99 enum_sql_command sql_command_code() const override { return SQLCOM_LOAD; }
100
101 bool execute(THD *thd) override;
102
103 bool is_bulk_load() const override { return m_is_bulk_operation; }
104
105 public:
107 const bool m_is_local_file;
108
109 private:
110 /// Source for bulk data.
112
113 /// Number of input files.
115
116 /// true if input data is in order of Primary Key.
118
119 /// Number of concurrent loaders to use
121
122 /// Maximum memory size to be used in bytes
124
125 /// Loading non empty table
127
128 public:
135
136 /**
137 A list of strings is maintained to store the SET clause command user strings
138 which are specified in load data operation. This list will be used
139 during the reconstruction of "load data" statement at the time of writing
140 to binary log.
141 */
143
144 private:
145 bool execute_inner(THD *thd, enum enum_duplicates handle_duplicates);
146
147 bool execute_bulk(THD *thd);
148
149 bool truncate_table_for_bulk_load(THD *thd, Table_ref *const table_ref,
151
153
154 bool validate_table_for_bulk_load(THD *thd, Table_ref *const table_ref,
156
158 THD *thd, const std::string &schema_name,
159 const std::string &old_table_name, const std::string &new_table_name);
160
161 bool duplicate_table_for_bulk_load(THD *thd, std::string &temp_name,
162 const std::string &schema_name,
163 Table_ref *new_table_ref);
164
165 bool bulk_driver_service(THD *thd, const TABLE *sql_table,
166 const TABLE *duplicate_table,
167 const Bulk_load_file_info &info, Bulk_source src,
168 size_t &affected_rows);
169
170 bool read_fixed_length(THD *thd, COPY_INFO &info, Table_ref *table_list,
171 READ_INFO &read_info, ulong skip_lines);
172
173 bool read_sep_field(THD *thd, COPY_INFO &info, Table_ref *table_list,
174 READ_INFO &read_info, const String &enclosed,
175 ulong skip_lines);
176
177 bool read_xml_field(THD *thd, COPY_INFO &info, Table_ref *table_list,
178 READ_INFO &read_info, ulong skip_lines);
179
181 THD *thd, const char *db, const char *table_name, bool is_concurrent,
182 enum enum_duplicates duplicates, bool transactional_table, int errocode);
183
184 private:
185 /// true if BULK LOAD.
188};
189
190#endif /* SQL_LOAD_INCLUDED */
This service provides interface for loading data in bulk from CSV files.
Bulk_source
Bulk loader source.
Definition: bulk_load_service.h:59
This class encapsulates a data change operation.
Definition: sql_data_change.h:74
Helper for the sql_exchange class.
Definition: sql_exchange.h:84
void merge_field_separators(const Field_separators *field_sep)
Definition: sql_exchange.h:98
const CHARSET_INFO * cs
Definition: sql_exchange.h:159
Base class that is used to represent any kind of expression in a relational query.
Definition: item.h:928
Helper for the sql_exchange class.
Definition: sql_exchange.h:65
void merge_line_separators(const Line_separators *line_sep)
Definition: sql_exchange.h:70
const String * line_term
Definition: sql_exchange.h:67
Definition: sql_list.h:494
Definition: sql_load.cc:137
Definition: sql_load.h:49
sql_exchange m_exchange
Definition: sql_load.h:106
const On_duplicate m_on_duplicate
Definition: sql_load.h:129
bool check_bulk_load_parameters(THD *thd)
Check bulk load parameters for limits.
Definition: sql_load.cc:244
bool is_bulk_load() const override
Definition: sql_load.h:103
mem_root_deque< Item * > m_opt_set_fields
Definition: sql_load.h:133
enum_sql_command sql_command_code() const override
Return the command code for this statement.
Definition: sql_load.h:99
bool read_sep_field(THD *thd, COPY_INFO &info, Table_ref *table_list, READ_INFO &read_info, const String &enclosed, ulong skip_lines)
Read rows in delimiter-separated formats.
Definition: sql_load.cc:1579
bool execute_inner(THD *thd, enum enum_duplicates handle_duplicates)
Execute LOAD DATA query.
Definition: sql_load.cc:829
const bool m_is_local_file
Definition: sql_load.h:107
bool execute_bulk(THD *thd)
Execute BULK LOAD DATA.
Definition: sql_load.cc:419
bool read_fixed_length(THD *thd, COPY_INFO &info, Table_ref *table_list, READ_INFO &read_info, ulong skip_lines)
Read of rows of fixed size + optional garbage + optional newline.
Definition: sql_load.cc:1405
ulong m_concurrency
Number of concurrent loaders to use.
Definition: sql_load.h:120
bool m_ordered_data
true if input data is in order of Primary Key.
Definition: sql_load.h:117
bool truncate_table_for_bulk_load(THD *thd, Table_ref *const table_ref, dd::Table *table_def)
Truncate to create a new table for BULK LOAD.
Definition: sql_load.cc:221
enum_source_type m_bulk_source
Source for bulk data.
Definition: sql_load.h:111
mem_root_deque< Item * > m_opt_set_exprs
Definition: sql_load.h:134
LEX_CSTRING m_compression_algorithm_string
Definition: sql_load.h:187
bool read_xml_field(THD *thd, COPY_INFO &info, Table_ref *table_list, READ_INFO &read_info, ulong skip_lines)
Read rows in xml format.
Definition: sql_load.cc:1807
bool duplicate_table_for_bulk_load(THD *thd, std::string &temp_name, const std::string &schema_name, Table_ref *new_table_ref)
Definition: sql_load.cc:380
ulong m_file_count
Number of input files.
Definition: sql_load.h:114
List< String > *const m_opt_partitions
Definition: sql_load.h:131
Table_ident *const m_table
Definition: sql_load.h:130
ulonglong m_memory_size
Maximum memory size to be used in bytes.
Definition: sql_load.h:123
bool rename_table_for_incremental_bulk_load(THD *thd, const std::string &schema_name, const std::string &old_table_name, const std::string &new_table_name)
Definition: sql_load.cc:357
bool bulk_driver_service(THD *thd, const TABLE *sql_table, const TABLE *duplicate_table, const Bulk_load_file_info &info, Bulk_source src, size_t &affected_rows)
Definition: sql_load.cc:694
Sql_cmd_load_table(enum_filetype filetype, bool is_local_file, enum_source_type source_type, const LEX_STRING &filename, ulong file_count, bool in_key_order, On_duplicate on_duplicate, Table_ident *table, List< String > *opt_partitions, const CHARSET_INFO *opt_charset, LEX_CSTRING compression_algorithm, String *opt_xml_rows_identified_by, const Field_separators *field_separators, const Line_separators *line_separators, ulong skip_lines, mem_root_deque< Item * > *opt_fields_or_vars, mem_root_deque< Item * > *opt_set_fields, mem_root_deque< Item * > *opt_set_exprs, List< String > *opt_set_expr_strings, ulong concurrency, ulonglong memory_size, bool is_bulk_operation)
Definition: sql_load.h:51
mem_root_deque< Item * > m_opt_fields_or_vars
Definition: sql_load.h:132
bool execute(THD *thd) override
Execute this SQL statement.
Definition: sql_load.cc:2802
List< String > *const m_opt_set_expr_strings
A list of strings is maintained to store the SET clause command user strings which are specified in l...
Definition: sql_load.h:142
bool validate_table_for_bulk_load(THD *thd, Table_ref *const table_ref, dd::Table *table_def, handlerton **hton)
Validate table for bulk load operation.
Definition: sql_load.cc:305
bool m_is_bulk_operation
true if BULK LOAD.
Definition: sql_load.h:186
bool write_execute_load_query_log_event(THD *thd, const char *db, const char *table_name, bool is_concurrent, enum enum_duplicates duplicates, bool transactional_table, int errocode)
Definition: sql_load.cc:1334
bool m_non_empty_table
Loading non empty table.
Definition: sql_load.h:126
Representation of an SQL command.
Definition: sql_cmd.h:83
Using this class is fraught with peril, and you need to be very careful when doing so.
Definition: sql_string.h:169
For each client connection we create a separate thread with THD serving as a thread/connection descri...
Definition: sql_lexer_thd.h:36
Definition: sql_lex.h:313
Definition: table.h:2952
Definition: table.h:47
A (partial) implementation of std::deque allocating its blocks on a MEM_ROOT.
Definition: mem_root_deque.h:111
size_t size() const
Definition: mem_root_deque.h:461
Definition: sql_exchange.h:196
Field_separators field
Definition: sql_exchange.h:198
File_information file_info
Definition: sql_exchange.h:201
void assign_default_values()
Definition: query_result.cc:220
unsigned long skip_lines
Definition: sql_exchange.h:205
Line_separators line
Definition: sql_exchange.h:199
A table definition from the master.
Definition: rpl_utility.h:249
A better implementation of the UNIX ctype(3) library.
unsigned long long int ulonglong
Definition: my_inttypes.h:56
enum_sql_command
Definition: my_sqlcommand.h:46
@ SQLCOM_LOAD
Definition: my_sqlcommand.h:77
thread_local MEM_ROOT ** THR_MALLOC
Definition: mysqld.cc:1592
static char * enclosed
Definition: mysqldump.cc:152
uint * concurrency
Definition: mysqlslap.cc:203
std::string str(const mysqlrouter::ConfigGenerator::Options::Endpoint &ep)
Definition: config_generator.cc:1077
static PFS_engine_table_share_proxy table
Definition: pfs.cc:61
const char * table_name
Definition: rules_table_service.cc:56
On_duplicate
Definition: parser_yystype.h:250
const char * filename
Definition: pfs_example_component_population.cc:67
Representation of an SQL command.
Contains classes representing SQL-data change statements.
enum_duplicates
Definition: sql_data_change.h:48
enum_filetype
Definition: sql_exchange.h:34
@ UNDEFINED_DEST
Definition: sql_exchange.h:43
enum_source_type
Definition: sql_exchange.h:32
Our own string classes, used pervasively throughout the executor.
Definition: bulk_load_service.h:73
Definition: m_ctype.h:421
Definition: mysql_lex_string.h:40
Definition: mysql_lex_string.h:35
Definition: table.h:1450
handlerton is a singleton structure - one instance per storage engine - to provide access to storage ...
Definition: handler.h:2856