MySQL 8.4.2
Source Code Documentation
|
This template class acts as a container of table columns and encapsulates and abstracts a TABLE
object field set iteration logic, by providing an iterator interface implementation.
More...
#include <table_column_iterator.h>
Classes | |
class | iterator |
Iterator class to allow iterating over the replicatable fields in a TABLE object field set. More... | |
Public Types | |
using | filter_fn_type = ExclusionFilter |
Alias for the predicate type, for readability purposes. More... | |
Public Member Functions | |
template<typename U = ExclusionFilter> | |
Table_columns_view (unsigned long options=0, typename std::enable_if< std::is_same< U, std::function< bool(TABLE const *, size_t)> >::value >::type *=nullptr) | |
Empty constructor, only available when the predicate type is a lambda function. More... | |
template<typename U = ExclusionFilter> | |
Table_columns_view (TABLE const *table, unsigned long options=0, typename std::enable_if< std::is_same< U, std::function< bool(TABLE const *, size_t)> >::value >::type *=nullptr) | |
Constructor that takes the target TABLE object, only available when the predicate type is a lambda function. More... | |
Table_columns_view (ExclusionFilter filtering_predicate, unsigned long options=0) | |
Constructor which takes a predicate used to filter this container iteration. More... | |
Table_columns_view (TABLE const *table, ExclusionFilter filtering_predicate, unsigned long options=0) | |
Constructor which takes the TABLE object whose field set will be iterated and a predicate used to filter this container iteration. More... | |
virtual | ~Table_columns_view () |
Destructor for the class. More... | |
virtual Table_columns_view & | set_table (const TABLE *rhs) |
Setter which initializes the internal reference to the TABLE object whose field set will be iterated over. More... | |
virtual Table_columns_view & | set_filter (ExclusionFilter rhs) |
Setter which initializes the internal filtering predicate of type ExclusionFilter . More... | |
Table_columns_view (const Table_columns_view &rhs)=delete | |
Table_columns_view (Table_columns_view &&rhs)=delete | |
Table_columns_view & | operator= (const Table_columns_view &rhs)=delete |
Table_columns_view & | operator= (Table_columns_view &&rhs)=delete |
size_t | absolute_size () const |
Computes the total number of fields in the table. More... | |
size_t | filtered_size () const |
Computes the total number of fields after filtering. More... | |
virtual iterator | begin () |
Creates an iterator object, pointing at the beginning of the table field set. More... | |
virtual iterator | end () |
Creates an iterator object, pointing at the end of the table field set. More... | |
bool | is_excluded (size_t index) const |
Returns whether or not the field at index is to be excluded from the field set iteration process. More... | |
MY_BITMAP & | get_included_fields_bitmap () |
Returns the bitmap for the columns from the local table set that are to be included in the replicated row. More... | |
MY_BITMAP & | get_excluded_fields_bitmap () |
Returns the bitmap for the columns from the local table set that are to be excluded from the replicated row. More... | |
Table_columns_view & | translate_bitmap (MY_BITMAP &source, MY_BITMAP &destination) |
Takes a bitmap object, as received from the replication channel and translates it to a bitmap that matches the local TABLE object. More... | |
size_t | translate_position (size_t source) |
For the absolute position on the table that equals the given position given as a parameter, return the translated position. More... | |
iterator | find_by_absolute_pos (size_t absolute_pos) |
Returns the iterator for the (absolute) position in the table. More... | |
template<typename F > | |
Table_columns_view (F filtering_predicate, unsigned long options) | |
template<typename F > | |
Table_columns_view (TABLE const *target, F filtering_predicate, unsigned long options) | |
Static Public Attributes | |
static constexpr unsigned long | DEFAULTS = 0 |
Default set of options. More... | |
static constexpr unsigned long | VFIELDS_ONLY = 1 |
Request the view excluding filter to operate TABLE::vfields instead of the full set. More... | |
Protected Member Functions | |
Table_columns_view & | init_fields_bitmaps () |
Initializes the internal included and excluded fields bitmaps. More... | |
Static Private Member Functions | |
static bool | default_filter (TABLE const *table, size_t column_index) |
Default filtering predicate. More... | |
Private Attributes | |
TABLE const * | m_table {nullptr} |
The TABLE object reference which contains the field set to be iterated over. More... | |
ExclusionFilter | m_filtering_predicate |
ExclusionFiltering predicate to be invoked when determining if a column is to be included in the iteration. More... | |
size_t | m_filtered_size {0} |
Number of columns to include in iteration. More... | |
MY_BITMAP | m_included_fields_bitmap |
Bitmap that holds the information about which columns from the local table are to be included in the replicated row. More... | |
MY_BITMAP | m_excluded_fields_bitmap |
Bitmap that holds the information about which columns from the local table are to be excluded from the replicated row. More... | |
unsigned long | m_options {0} |
Set of options to apply to view behaviour. More... | |
This template class acts as a container of table columns and encapsulates and abstracts a TABLE
object field set iteration logic, by providing an iterator interface implementation.
The template parameter ExclusionFilter
is a predicate that takes a TABLE
reference and a column index and returns whether or not the field should be filtered out, more specifically, a signature compatible with:
std::function<bool (TABLE const*, size_t)>
This template class accepts an empty parameter set, which provides an unfiltered container and iterates over all the table columns:
void print_all_fields(TABLE *table) { Table_columns_view<> fields{table};
for (auto field : fields) { std::cout << field->field_index << ". " << field << std::endl << std::flush; } }
The template parameter predicate may take the form of a operator()
:
class JSON_fields { public: bool operator()(TABLE const *table, size_t column_index) { return table->field[column_index]->type() != MYSQL_TYPE_JSON; }
void print_json_fields(TABLE *table) { Table_columns_view<JSON_fields &> fields{table, *this}; for (auto field : fields) { std::cout << field->field_index << ". " << field << std::endl << std::flush; } } };
The template parameter predicate may take the form of a lambda function:
void print_int_fields(TABLE *table) { Table_columns_view<> fields{ table, [](TABLE const *table, size_t column_index) -> bool { return table->field[column_index]->type() != MYSQL_TYPE_INT24; }};
for (auto field : fields) { std::cout << field->field_index << ". " << field << std::endl << std::flush; } }
The list of generated columns is kept separately in the TABLE
class, in the TABLE::vfield
member. Although we could achieve accurate filtering using the above described methods, as a performance optimization, this class allows applying the filter and iteration directly and exclusively on the generated columns. For that we can use the VFIELDS_ONLY
option:
void print_virtual_generated_columns(TABLE *table) { Table_columns_view<> fields{ table, [](TABLE const *table, size_t column_index) -> bool { return table->field[column_index]->is_virtual_gcol(); }, Table_columns_view<>::VFIELDS_ONLY };
for (auto field : fields) { std::cout << field->field_index << ". " << field << std::endl << std::flush; } }
using Table_columns_view< ExclusionFilter >::filter_fn_type = ExclusionFilter |
Alias for the predicate type, for readability purposes.
Table_columns_view< F >::Table_columns_view | ( | unsigned long | options = 0 , |
typename std::enable_if< std::is_same< U, std::function< bool(TABLE const *, size_t)> >::value >::type * | = nullptr |
||
) |
Empty constructor, only available when the predicate type is a lambda function.
options | optional parameter for filtering and iterating options. Options should be combined with | . Available options are VFIELDS_ONLY . |
Table_columns_view< F >::Table_columns_view | ( | TABLE const * | table, |
unsigned long | options = 0 , |
||
typename std::enable_if< std::is_same< U, std::function< bool(TABLE const *, size_t)> >::value >::type * | = nullptr |
||
) |
Constructor that takes the target TABLE
object, only available when the predicate type is a lambda function.
table | reference to the target TABLE object. |
options | optional parameter for filtering and iterating options. Options should be combined with | . Available options are VFIELDS_ONLY . |
Table_columns_view< ExclusionFilter >::Table_columns_view | ( | ExclusionFilter | filtering_predicate, |
unsigned long | options = 0 |
||
) |
Constructor which takes a predicate used to filter this container iteration.
filtering_predicate | the predicate to filter this container iteration. |
options | optional parameter for filtering and iterating options. Options should be combined with | . Available options are VFIELDS_ONLY . |
Table_columns_view< ExclusionFilter >::Table_columns_view | ( | TABLE const * | table, |
ExclusionFilter | filtering_predicate, | ||
unsigned long | options = 0 |
||
) |
Constructor which takes the TABLE object whose field set will be iterated and a predicate used to filter this container iteration.
table | reference to the target TABLE object. |
filtering_predicate | the predicate to filter this container iteration. |
options | optional parameter for filtering and iterating options. Options should be combined with | . Available options are VFIELDS_ONLY . |
|
virtual |
Destructor for the class.
|
delete |
|
delete |
Table_columns_view< ExclusionFilter >::Table_columns_view | ( | F | filtering_predicate, |
unsigned long | options | ||
) |
Table_columns_view< ExclusionFilter >::Table_columns_view | ( | TABLE const * | target, |
F | filtering_predicate, | ||
unsigned long | options | ||
) |
size_t Table_columns_view< F >::absolute_size |
Computes the total number of fields in the table.
|
virtual |
Creates an iterator object, pointing at the beginning of the table field set.
Reimplemented in cs::util::ReplicatedColumnsViewWithGipkOnSource.
|
staticprivate |
Default filtering predicate.
|
virtual |
Creates an iterator object, pointing at the end of the table field set.
size_t Table_columns_view< F >::filtered_size |
Computes the total number of fields after filtering.
Table_columns_view< F >::iterator Table_columns_view< F >::find_by_absolute_pos | ( | size_t | absolute_pos | ) |
Returns the iterator for the (absolute) position in the table.
absolute_pos | the position in the local table |
MY_BITMAP & Table_columns_view< F >::get_excluded_fields_bitmap |
Returns the bitmap for the columns from the local table set that are to be excluded from the replicated row.
MY_BITMAP & Table_columns_view< F >::get_included_fields_bitmap |
Returns the bitmap for the columns from the local table set that are to be included in the replicated row.
|
protected |
Initializes the internal included and excluded fields bitmaps.
After each member is set, this method should be invoked in order to remake the bitmaps.
bool Table_columns_view< F >::is_excluded | ( | size_t | index | ) | const |
Returns whether or not the field at index
is to be excluded from the field set iteration process.
index | the index of the field to test for exclusion from iteration. |
|
delete |
|
delete |
|
virtual |
Setter which initializes the internal filtering predicate of type ExclusionFilter
.
rhs | reference to the target filtering predicate ExclusionFilter |
|
virtual |
Setter which initializes the internal reference to the TABLE object whose field set will be iterated over.
rhs | reference to the target TABLE object |
Table_columns_view< F > & Table_columns_view< F >::translate_bitmap | ( | MY_BITMAP & | source, |
MY_BITMAP & | destination | ||
) |
Takes a bitmap object, as received from the replication channel and translates it to a bitmap that matches the local TABLE object.
[in] | source | the bitmap as received from the replication channel |
[out] | destination | the bitmap that matches the local TABLE format |
size_t Table_columns_view< F >::translate_position | ( | size_t | source | ) |
For the absolute position on the table that equals the given position given as a parameter, return the translated position.
source | the position in the local table |
|
staticconstexpr |
Default set of options.
|
private |
Bitmap that holds the information about which columns from the local table are to be excluded from the replicated row.
|
private |
Number of columns to include in iteration.
|
private |
ExclusionFiltering predicate to be invoked when determining if a column is to be included in the iteration.
|
private |
Bitmap that holds the information about which columns from the local table are to be included in the replicated row.
|
private |
Set of options to apply to view behaviour.
|
private |
The TABLE object reference which contains the field set to be iterated over.
|
staticconstexpr |
Request the view excluding filter to operate TABLE::vfields
instead of the full set.