MySQL 26.10.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, 2026, 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 designed to work 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 either included with
16 the program or referenced in the documentation.
17
18 This program is distributed in the hope that it will be useful,
19 but WITHOUT ANY WARRANTY; without even the implied warranty of
20 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 GNU General Public License, version 2.0, for more details.
22
23 You should have received a copy of the GNU General Public License
24 along with this program; if not, write to the Free Software
25 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
26
27#include <assert.h>
28
29#include "my_alloc.h"
30#include "my_base.h"
31#include "my_table_map.h"
33#include "sql/mem_root_array.h"
34#include "sql/uniques.h"
35
36class JOIN;
37class THD;
38struct TABLE;
39
40/// An iterator that deletes all rows returned by its child iterator.
41class DeleteRowsIterator final : public RowIterator {
42 public:
44 JOIN *join, table_map tables_to_delete_from,
45 table_map immediate_tables,
46 table_map tables_to_get_rowid_for);
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 /// The tables for which handler::position() must be called to get the row ID.
64 /// For all other tables, the child iterator has already copied the correct
65 /// row ID into handler::ref.
67 /// The target tables that live in transactional storage engines.
69 /// The target tables that have before delete triggers.
71 /// The target tables that have after delete triggers.
73 /// Temporary files holding row IDs to delete after the scan of
74 /// the join result is complete.
76 /// The tables to delete from after the scan of the join result is
77 /// complete.
79 /// The number of rows that have been deleted.
81 /// True if any row ID has been stored in one of the m_tempfiles.
83
84 bool DoInit() override;
85 int DoRead() override;
86 /// Perform all the immediate deletes for the current row returned by the
87 /// join, and buffer row IDs for the non-immediate tables.
89 /// Perform all the delayed deletes.
90 bool DoDelayedDeletes();
91 /// Perform all the delayed deletes for the given table.
93};
94
95/// Sets various flags in the TABLE and handler objects associated with the
96/// target tables of a DELETE statement, in order to make them ready to be
97/// deleted from.
98///
99/// @param thd The session object.
100/// @param join The top-level JOIN object of the DELETE operation.
101void SetUpTablesForDelete(THD *thd, JOIN *join);
102
103#endif // SQL_ITERATORS_DELETE_ROWS_ITERATOR_H_
An iterator that deletes all rows returned by its child iterator.
Definition: delete_rows_iterator.h:41
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:68
table_map m_tables_with_before_triggers
The target tables that have before delete triggers.
Definition: delete_rows_iterator.h:70
void UnlockRow() override
Definition: delete_rows_iterator.h:52
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
bool DoInit() override
Definition: sql_delete.cc:1057
int DoRead() override
Definition: sql_delete.cc:1242
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:78
ha_rows m_deleted_rows
The number of rows that have been deleted.
Definition: delete_rows_iterator.h:80
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:1103
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:82
bool DoDelayedDeletes()
Perform all the delayed deletes.
Definition: sql_delete.cc:1169
unique_ptr_destroy_only< RowIterator > m_source
The iterator producing the rows to delete.
Definition: delete_rows_iterator.h:56
table_map m_tables_with_after_triggers
The target tables that have after delete triggers.
Definition: delete_rows_iterator.h:72
table_map m_tables_to_get_rowid_for
The tables for which handler::position() must be called to get the row ID.
Definition: delete_rows_iterator.h:66
DeleteRowsIterator(THD *thd, unique_ptr_destroy_only< RowIterator > source, JOIN *join, table_map tables_to_delete_from, table_map immediate_tables, table_map tables_to_get_rowid_for)
Definition: sql_delete.cc:977
bool DoDelayedDeletesFromTable(TABLE *table)
Perform all the delayed deletes for the given table.
Definition: sql_delete.cc:1183
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:75
Definition: sql_optimizer.h:133
A typesafe replacement for DYNAMIC_ARRAY.
Definition: mem_root_array.h:432
A context for reading through a single table using a chosen access method: index read,...
Definition: row_iterator.h:82
THD * thd() const
Definition: row_iterator.h:255
For each client connection we create a separate thread with THD serving as a thread/connection descri...
Definition: sql_lexer_thd.h:36
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:1012
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:480
This file includes constants used by all storage engines.
my_off_t ha_rows
Definition: my_base.h:1229
uint64_t table_map
Definition: my_table_map.h:30
static PFS_engine_table_share_proxy table
Definition: pfs.cc:61
std::string join(const detail::range auto &rng, std::string_view delim)
join elements of a range into a string separated by a delimiter.
Definition: string.h:74
repeated Source source
Definition: replication_asynchronous_connection_failover.proto:42
Definition: table.h:1456