MySQL 8.0.30
Source Code Documentation
sql_load.h
Go to the documentation of this file.
1/* Copyright (c) 2006, 2022, 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 also distributed 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 included with MySQL.
13
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License, version 2.0, for more details.
18
19 You should have received a copy of the GNU General Public License
20 along with this program; if not, write to the Free Software
21 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
22
23#ifndef SQL_LOAD_INCLUDED
24#define SQL_LOAD_INCLUDED
25
26#include <assert.h>
27#include <sys/types.h>
28
29#include "lex_string.h"
30#include "m_ctype.h"
31
32#include "my_sqlcommand.h"
33#include "sql/current_thd.h"
34#include "sql/sql_cmd.h" /* Sql_cmd */
35#include "sql/sql_data_change.h" /* enum_duplicates */
36#include "sql/sql_exchange.h" /* sql_exchange */
37#include "sql/sql_lex.h"
38#include "sql/sql_list.h"
39#include "sql_string.h"
40
41class Item;
42class READ_INFO;
43class THD;
44struct TABLE_LIST;
45
46class Sql_cmd_load_table final : public Sql_cmd {
47 public:
48 Sql_cmd_load_table(enum_filetype filetype, bool is_local_file,
49 const LEX_STRING &filename, On_duplicate on_duplicate,
50 Table_ident *table, List<String> *opt_partitions,
51 const CHARSET_INFO *opt_charset,
52 String *opt_xml_rows_identified_by,
53 const Field_separators &field_separators,
54 const Line_separators &line_separators, ulong skip_lines,
55 mem_root_deque<Item *> *opt_fields_or_vars,
56 mem_root_deque<Item *> *opt_set_fields,
57 mem_root_deque<Item *> *opt_set_exprs,
58 List<String> *opt_set_expr_strings)
59 : m_exchange(filename.str, false, filetype),
60 m_is_local_file(is_local_file),
61 m_on_duplicate(on_duplicate),
62 m_table(table),
63 m_opt_partitions(opt_partitions),
67 m_opt_set_expr_strings(opt_set_expr_strings) {
68 if (opt_fields_or_vars)
69 m_opt_fields_or_vars = std::move(*opt_fields_or_vars);
70 assert((opt_set_fields == nullptr) ^ (opt_set_exprs != nullptr));
71 if (opt_set_fields) {
72 assert(opt_set_fields->size() == opt_set_exprs->size());
73 m_opt_set_fields = std::move(*opt_set_fields);
74 m_opt_set_exprs = std::move(*opt_set_exprs);
75 }
76
77 m_exchange.cs = opt_charset;
78
79 if (opt_xml_rows_identified_by != nullptr)
80 m_exchange.line.line_term = opt_xml_rows_identified_by;
81
82 m_exchange.field.merge_field_separators(field_separators);
83 m_exchange.line.merge_line_separators(line_separators);
84 m_exchange.skip_lines = skip_lines;
85 }
86
87 enum_sql_command sql_command_code() const override { return SQLCOM_LOAD; }
88
89 bool execute(THD *thd) override;
90
91 public:
93 const bool m_is_local_file;
100
101 /**
102 A list of strings is maintained to store the SET clause command user strings
103 which are specified in load data operation. This list will be used
104 during the reconstruction of "load data" statement at the time of writing
105 to binary log.
106 */
108
109 private:
110 bool execute_inner(THD *thd, enum enum_duplicates handle_duplicates);
111
112 bool read_fixed_length(THD *thd, COPY_INFO &info, TABLE_LIST *table_list,
113 READ_INFO &read_info, ulong skip_lines);
114
115 bool read_sep_field(THD *thd, COPY_INFO &info, TABLE_LIST *table_list,
116 READ_INFO &read_info, const String &enclosed,
117 ulong skip_lines);
118
119 bool read_xml_field(THD *thd, COPY_INFO &info, TABLE_LIST *table_list,
120 READ_INFO &read_info, ulong skip_lines);
121
123 THD *thd, const char *db, const char *table_name, bool is_concurrent,
124 enum enum_duplicates duplicates, bool transactional_table, int errocode);
125};
126
127#endif /* SQL_LOAD_INCLUDED */
This class encapsulates a data change operation.
Definition: sql_data_change.h:73
Base class that is used to represent any kind of expression in a relational query.
Definition: item.h:802
Definition: sql_list.h:433
Definition: sql_load.cc:117
Definition: sql_load.h:46
sql_exchange m_exchange
Definition: sql_load.h:92
const On_duplicate m_on_duplicate
Definition: sql_load.h:94
bool read_fixed_length(THD *thd, COPY_INFO &info, TABLE_LIST *table_list, READ_INFO &read_info, ulong skip_lines)
Read of rows of fixed size + optional garbage + optional newline.
Definition: sql_load.cc:763
bool read_xml_field(THD *thd, COPY_INFO &info, TABLE_LIST *table_list, READ_INFO &read_info, ulong skip_lines)
Read rows in xml format.
Definition: sql_load.cc:1143
mem_root_deque< Item * > m_opt_set_fields
Definition: sql_load.h:98
enum_sql_command sql_command_code() const override
Return the command code for this statement.
Definition: sql_load.h:87
bool execute_inner(THD *thd, enum enum_duplicates handle_duplicates)
Execute LOAD DATA query.
Definition: sql_load.cc:201
const bool m_is_local_file
Definition: sql_load.h:93
bool read_sep_field(THD *thd, COPY_INFO &info, TABLE_LIST *table_list, READ_INFO &read_info, const String &enclosed, ulong skip_lines)
Read rows in delimiter-separated formats.
Definition: sql_load.cc:926
mem_root_deque< Item * > m_opt_set_exprs
Definition: sql_load.h:99
Sql_cmd_load_table(enum_filetype filetype, bool is_local_file, const LEX_STRING &filename, On_duplicate on_duplicate, Table_ident *table, List< String > *opt_partitions, const CHARSET_INFO *opt_charset, 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)
Definition: sql_load.h:48
List< String > *const m_opt_partitions
Definition: sql_load.h:96
Table_ident *const m_table
Definition: sql_load.h:95
mem_root_deque< Item * > m_opt_fields_or_vars
Definition: sql_load.h:97
bool execute(THD *thd) override
Execute this SQL statement.
Definition: sql_load.cc:2119
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:107
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:692
Representation of an SQL command.
Definition: sql_cmd.h:64
Using this class is fraught with peril, and you need to be very careful when doing so.
Definition: sql_string.h:166
For each client connection we create a separate thread with THD serving as a thread/connection descri...
Definition: sql_class.h:922
Definition: sql_lex.h:292
A (partial) implementation of std::deque allocating its blocks on a MEM_ROOT.
Definition: mem_root_deque.h:109
size_t size() const
Definition: mem_root_deque.h:458
Used to hold information about file and file structure in exchange via non-DB file (....
Definition: sql_exchange.h:76
Field_separators field
Definition: sql_exchange.h:78
const CHARSET_INFO * cs
Definition: sql_exchange.h:84
unsigned long skip_lines
Definition: sql_exchange.h:83
Line_separators line
Definition: sql_exchange.h:79
A better implementation of the UNIX ctype(3) library.
enum_sql_command
Definition: my_sqlcommand.h:45
@ SQLCOM_LOAD
Definition: my_sqlcommand.h:76
Log info(cout, "NOTE")
thread_local MEM_ROOT ** THR_MALLOC
Definition: mysqld.cc:1540
static char * enclosed
Definition: mysqldump.cc:135
std::string str(const mysqlrouter::ConfigGenerator::Options::Endpoint &ep)
Definition: config_generator.cc:1055
const char * table_name
Definition: rules_table_service.cc:55
On_duplicate
Definition: parser_yystype.h:240
const char * filename
Definition: pfs_example_component_population.cc:66
Representation of an SQL command.
Contains classes representing SQL-data change statements.
enum_duplicates
Definition: sql_data_change.h:47
enum_filetype
Definition: sql_exchange.h:29
Our own string classes, used pervasively throughout the executor.
Definition: m_ctype.h:354
Helper for the sql_exchange class.
Definition: sql_exchange.h:50
void merge_field_separators(const Field_separators &s)
Definition: sql_exchange.h:60
Helper for the sql_exchange class.
Definition: sql_exchange.h:35
void merge_line_separators(const Line_separators &s)
Definition: sql_exchange.h:40
const String * line_term
Definition: sql_exchange.h:36
Definition: mysql_lex_string.h:34
Definition: table.h:2684