MySQL  8.0.27
Source Code Documentation
sql_load.h
Go to the documentation of this file.
1 /* Copyright (c) 2006, 2021, 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 
41 class Item;
42 class READ_INFO;
43 class THD;
44 struct TABLE_LIST;
45 
46 class 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_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:165
For each client connection we create a separate thread with THD serving as a thread/connection descri...
Definition: sql_class.h:821
Definition: sql_lex.h:292
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:1527
static char * enclosed
Definition: mysqldump.cc:132
std::string str(const mysqlrouter::ConfigGenerator::Options::Endpoint &ep)
Definition: config_generator.cc:1056
const char * table_name
Definition: rules_table_service.cc:55
On_duplicate
Definition: parser_yystype.h:241
const char * filename
Definition: pfs_example_component_population.cc:64
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:2694