MySQL 8.1.0
Source Code Documentation
delete_rows_iterator.h
Go to the documentation of this file.
1#ifndef SQL_ITERATORS_DELETE_ROWS_ITERATOR_H_
2#define SQL_ITERATORS_DELETE_ROWS_ITERATOR_H_
3
4/* Copyright (c) 2021, 2023, Oracle and/or its affiliates.
5
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License, version 2.0,
8 as published by the Free Software Foundation.
9
10 This program is also distributed with certain software (including
11 but not limited to OpenSSL) that is licensed under separate terms,
12 as designated in a particular file or component or in included license
13 documentation. The authors of MySQL hereby grant you an additional
14 permission to link the program and your derivative works with the
15 separately licensed software that they have included with MySQL.
16
17 This program is distributed in the hope that it will be useful,
18 but WITHOUT ANY WARRANTY; without even the implied warranty of
19 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 GNU General Public License, version 2.0, for more details.
21
22 You should have received a copy of the GNU General Public License
23 along with this program; if not, write to the Free Software
24 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
25
26#include <assert.h>
27
28#include "my_alloc.h"
29#include "my_base.h"
30#include "my_table_map.h"
32#include "sql/mem_root_array.h"
33#include "sql/uniques.h"
34
35class JOIN;
36class THD;
37struct TABLE;
38
39/// An iterator that deletes all rows returned by its child iterator.
40class DeleteRowsIterator final : public RowIterator {
41 public:
43 JOIN *join, table_map tables_to_delete_from,
44 table_map immediate_tables);
45 bool Init() override;
46 int Read() override;
47 void StartPSIBatchMode() override { m_source->StartPSIBatchMode(); }
48 void EndPSIBatchModeIfStarted() override {
49 m_source->EndPSIBatchModeIfStarted();
50 }
51 void SetNullRowFlag(bool /*is_null_row*/) override { assert(false); }
52 void UnlockRow() override { assert(false); }
53
54 private:
55 /// The iterator producing the rows to delete.
57 /// The join producing the rows to delete.
59 /// The tables to delete from.
61 /// The tables to delete from immediately while scanning the join result.
63 /// All the tables that are part of a hash join. We use this map to find out
64 /// how to get the row ID from a table when buffering row IDs for delayed
65 /// delete. For those tables that are part of a hash join, the row ID will
66 /// already be available in handler::ref, and calling handler::position() will
67 /// overwrite it with an incorrect row ID (most likely the last row read from
68 /// the table). For those that are not part of a hash join,
69 /// handler::position() must be called to get the current row ID from the
70 /// underlying scan.
72 /// The target tables that live in transactional storage engines.
74 /// The target tables that have before delete triggers.
76 /// The target tables that have after delete triggers.
78 /// Temporary files holding row IDs to delete after the scan of
79 /// the join result is complete.
81 /// The tables to delete from after the scan of the join result is
82 /// complete.
84 /// The number of rows that have been deleted.
86 /// True if any row ID has been stored in one of the m_tempfiles.
88
89 /// Perform all the immediate deletes for the current row returned by the
90 /// join, and buffer row IDs for the non-immediate tables.
92 /// Perform all the delayed deletes.
93 bool DoDelayedDeletes();
94 /// Perform all the delayed deletes for the given table.
96};
97
98/// Sets various flags in the TABLE and handler objects associated with the
99/// target tables of a DELETE statement, in order to make them ready to be
100/// deleted from.
101///
102/// @param thd The session object.
103/// @param join The top-level JOIN object of the DELETE operation.
104void SetUpTablesForDelete(THD *thd, JOIN *join);
105
106#endif // SQL_ITERATORS_DELETE_ROWS_ITERATOR_H_
An iterator that deletes all rows returned by its child iterator.
Definition: delete_rows_iterator.h:40
void StartPSIBatchMode() override
Start performance schema batch mode, if supported (otherwise ignored).
Definition: delete_rows_iterator.h:47
table_map m_transactional_tables
The target tables that live in transactional storage engines.
Definition: delete_rows_iterator.h:73
table_map m_tables_with_before_triggers
The target tables that have before delete triggers.
Definition: delete_rows_iterator.h:75
void UnlockRow() override
Definition: delete_rows_iterator.h:52
int Read() override
Read a single row.
Definition: sql_delete.cc:1189
JOIN * m_join
The join producing the rows to delete.
Definition: delete_rows_iterator.h:58
void SetNullRowFlag(bool) override
Mark the current row buffer as containing a NULL row or not, so that if you read from it and the flag...
Definition: delete_rows_iterator.h:51
table_map m_hash_join_tables
All the tables that are part of a hash join.
Definition: delete_rows_iterator.h:71
Mem_root_array< TABLE * > m_delayed_tables
The tables to delete from after the scan of the join result is complete.
Definition: delete_rows_iterator.h:83
ha_rows m_deleted_rows
The number of rows that have been deleted.
Definition: delete_rows_iterator.h:85
void EndPSIBatchModeIfStarted() override
Ends performance schema batch mode, if started.
Definition: delete_rows_iterator.h:48
table_map m_tables_to_delete_from
The tables to delete from.
Definition: delete_rows_iterator.h:60
bool DoImmediateDeletesAndBufferRowIds()
Perform all the immediate deletes for the current row returned by the join, and buffer row IDs for th...
Definition: sql_delete.cc:1047
table_map m_immediate_tables
The tables to delete from immediately while scanning the join result.
Definition: delete_rows_iterator.h:62
bool m_has_delayed_deletes
True if any row ID has been stored in one of the m_tempfiles.
Definition: delete_rows_iterator.h:87
bool DoDelayedDeletes()
Perform all the delayed deletes.
Definition: sql_delete.cc:1116
unique_ptr_destroy_only< RowIterator > m_source
The iterator producing the rows to delete.
Definition: delete_rows_iterator.h:56
DeleteRowsIterator(THD *thd, unique_ptr_destroy_only< RowIterator > source, JOIN *join, table_map tables_to_delete_from, table_map immediate_tables)
Definition: sql_delete.cc:919
table_map m_tables_with_after_triggers
The target tables that have after delete triggers.
Definition: delete_rows_iterator.h:77
bool DoDelayedDeletesFromTable(TABLE *table)
Perform all the delayed deletes for the given table.
Definition: sql_delete.cc:1130
Mem_root_array< unique_ptr_destroy_only< Unique > > m_tempfiles
Temporary files holding row IDs to delete after the scan of the join result is complete.
Definition: delete_rows_iterator.h:80
bool Init() override
Initialize or reinitialize the iterator.
Definition: sql_delete.cc:1001
Definition: sql_optimizer.h:132
A typesafe replacement for DYNAMIC_ARRAY.
Definition: mem_root_array.h:425
A context for reading through a single table using a chosen access method: index read,...
Definition: row_iterator.h:81
THD * thd() const
Definition: row_iterator.h:227
For each client connection we create a separate thread with THD serving as a thread/connection descri...
Definition: sql_lexer_thd.h:33
void SetUpTablesForDelete(THD *thd, JOIN *join)
Sets various flags in the TABLE and handler objects associated with the target tables of a DELETE sta...
Definition: sql_delete.cc:956
This file follows Google coding style, except for the name MEM_ROOT (which is kept for historical rea...
std::unique_ptr< T, Destroy_only< T > > unique_ptr_destroy_only
std::unique_ptr, but only destroying.
Definition: my_alloc.h:488
This file includes constants used by all storage engines.
my_off_t ha_rows
Definition: my_base.h:1139
uint64_t table_map
Definition: my_table_map.h:29
static PFS_engine_table_share_proxy table
Definition: pfs.cc:60
std::string join(Container cont, const std::string &delim)
join elements of an container into a string separated by a delimiter.
Definition: string.h:150
repeated Source source
Definition: replication_asynchronous_connection_failover.proto:41
Definition: table.h:1394