MySQL 8.4.0
Source Code Documentation
sql_load.h
Go to the documentation of this file.
1/* Copyright (c) 2006, 2024, 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)
63 : m_exchange(filename.str, false, filetype),
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.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);
95 m_exchange.skip_lines = skip_lines;
96 }
97
98 enum_sql_command sql_command_code() const override { return SQLCOM_LOAD; }
99
100 bool execute(THD *thd) override;
101
102 bool is_bulk_load() const override { return m_is_bulk_operation; }
103
104 public:
106 const bool m_is_local_file;
107
108 private:
109 /// Source for bulk data.
111
112 /// Number of input files.
114
115 /// true if input data is in order of Primary Key.
117
118 /// Number of concurrent loaders to use
120
121 /// Maximum memory size to be used in bytes
123
124 public:
131
132 /**
133 A list of strings is maintained to store the SET clause command user strings
134 which are specified in load data operation. This list will be used
135 during the reconstruction of "load data" statement at the time of writing
136 to binary log.
137 */
139
140 private:
141 bool execute_inner(THD *thd, enum enum_duplicates handle_duplicates);
142
143 bool execute_bulk(THD *thd);
144
145 bool truncate_table_for_bulk_load(THD *thd, Table_ref *const table_ref,
147
149
150 bool validate_table_for_bulk_load(THD *thd, Table_ref *const table_ref,
152
153 bool bulk_driver_service(THD *thd, const TABLE *table, size_t &affected_rows);
154
155 bool read_fixed_length(THD *thd, COPY_INFO &info, Table_ref *table_list,
156 READ_INFO &read_info, ulong skip_lines);
157
158 bool read_sep_field(THD *thd, COPY_INFO &info, Table_ref *table_list,
159 READ_INFO &read_info, const String &enclosed,
160 ulong skip_lines);
161
162 bool read_xml_field(THD *thd, COPY_INFO &info, Table_ref *table_list,
163 READ_INFO &read_info, ulong skip_lines);
164
166 THD *thd, const char *db, const char *table_name, bool is_concurrent,
167 enum enum_duplicates duplicates, bool transactional_table, int errocode);
168
169 private:
170 /// true if BULK LOAD.
173};
174
175#endif /* SQL_LOAD_INCLUDED */
This service provides interface for loading data in bulk from CSV files.
This class encapsulates a data change operation.
Definition: sql_data_change.h:74
Base class that is used to represent any kind of expression in a relational query.
Definition: item.h:934
Definition: sql_list.h:467
Definition: sql_load.cc:133
Definition: sql_load.h:49
sql_exchange m_exchange
Definition: sql_load.h:105
const On_duplicate m_on_duplicate
Definition: sql_load.h:125
bool check_bulk_load_parameters(THD *thd)
Check bulk load parameters for limits.
Definition: sql_load.cc:240
bool is_bulk_load() const override
Definition: sql_load.h:102
mem_root_deque< Item * > m_opt_set_fields
Definition: sql_load.h:129
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
enum_sql_command sql_command_code() const override
Return the command code for this statement.
Definition: sql_load.h:98
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:1383
bool execute_inner(THD *thd, enum enum_duplicates handle_duplicates)
Execute LOAD DATA query.
Definition: sql_load.cc:654
const bool m_is_local_file
Definition: sql_load.h:106
bool execute_bulk(THD *thd)
Execute BULK LOAD DATA.
Definition: sql_load.cc:358
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:1218
ulong m_concurrency
Number of concurrent loaders to use.
Definition: sql_load.h:119
bool m_ordered_data
true if input data is in order of Primary Key.
Definition: sql_load.h:116
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:217
enum_source_type m_bulk_source
Source for bulk data.
Definition: sql_load.h:110
mem_root_deque< Item * > m_opt_set_exprs
Definition: sql_load.h:130
LEX_CSTRING m_compression_algorithm_string
Definition: sql_load.h:172
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:1602
ulong m_file_count
Number of input files.
Definition: sql_load.h:113
bool bulk_driver_service(THD *thd, const TABLE *table, size_t &affected_rows)
Definition: sql_load.cc:482
List< String > *const m_opt_partitions
Definition: sql_load.h:127
Table_ident *const m_table
Definition: sql_load.h:126
ulonglong m_memory_size
Maximum memory size to be used in bytes.
Definition: sql_load.h:122
mem_root_deque< Item * > m_opt_fields_or_vars
Definition: sql_load.h:128
bool execute(THD *thd) override
Execute this SQL statement.
Definition: sql_load.cc:2580
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:138
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:301
bool m_is_bulk_operation
true if BULK LOAD.
Definition: sql_load.h:171
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:1147
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:167
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:296
Definition: table.h:2863
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:460
Used to hold information about file and file structure in exchange via non-DB file (....
Definition: sql_exchange.h:79
Field_separators field
Definition: sql_exchange.h:81
const CHARSET_INFO * cs
Definition: sql_exchange.h:87
unsigned long skip_lines
Definition: sql_exchange.h:86
Line_separators line
Definition: sql_exchange.h:82
A table definition from the master.
Definition: rpl_utility.h:248
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:1557
static char * enclosed
Definition: mysqldump.cc:151
uint * concurrency
Definition: mysqlslap.cc:202
std::string str(const mysqlrouter::ConfigGenerator::Options::Endpoint &ep)
Definition: config_generator.cc:1073
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:243
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:32
enum_source_type
Definition: sql_exchange.h:30
Our own string classes, used pervasively throughout the executor.
Definition: m_ctype.h:423
Helper for the sql_exchange class.
Definition: sql_exchange.h:53
void merge_field_separators(const Field_separators &s)
Definition: sql_exchange.h:63
Helper for the sql_exchange class.
Definition: sql_exchange.h:38
void merge_line_separators(const Line_separators &s)
Definition: sql_exchange.h:43
const String * line_term
Definition: sql_exchange.h:39
Definition: mysql_lex_string.h:40
Definition: mysql_lex_string.h:35
Definition: table.h:1405
handlerton is a singleton structure - one instance per storage engine - to provide access to storage ...
Definition: handler.h:2733