mirror of
https://github.com/MariaDB/server.git
synced 2026-04-28 11:15:33 +02:00
WL#2985 "Partition Pruning"
sql/ha_ndbcluster.cc:
WL#2985 "Partition Pruning": added part_info->used_partitions initialization
sql/ha_partition.cc:
WL#2985 "Partition Pruning": added part_info->used_partitions initialization
sql/handler.h:
WL#2985 "Partition Pruning":
Added function prototypes
in partition_info:
- Added 'used_partitions' bitmap
- Added comments
sql/item.h:
WL#2985 "Partition Pruning":
- added enum monotonicity_info
- added virtual Item::get_monotonicity_info()
sql/item_timefunc.cc:
WL#2985 "Partition Pruning":
- added Item_func_to_days::get_monotonicity_info()
- added Item_func_year::get_monotonicity_info()
sql/item_timefunc.h:
WL#2985 "Partition Pruning":
- added Item_func_to_days::get_monotonicity_info()
- added Item_func_year::get_monotonicity_info()
sql/opt_range.cc:
WL#2985 "Partition Pruning":
- Split out PARAM structure into PARAM and RANGE_OPT_PARAM part.
- Added partition pruning module code.
sql/opt_range.h:
WL#2985 "Partition Pruning":
Added prune_partitions() function declaration. This is the entry point for partition pruning
module
sql/sql_class.cc:
WL#2985 "Partition Pruning": added support for "EXPLAIN PARTITIONS SELECT ..."
sql/sql_lex.h:
WL#2985 "Partition Pruning": added support for "EXPLAIN PARTITIONS SELECT ..."
sql/sql_partition.cc:
WL#2985 "Partition Pruning":
- Added get_list_array_idx_for_endpoint and get_range_... functions to support partition
pruning on "partition_field < const"-like intervals.
- Added partition_info::used_partitions bitmap.
- Added make_used_partitions_str function
- Fixed BUG#15819
sql/sql_select.cc:
WL#2985 "Partition Pruning":
- Added prune_partitions() invocation right before the range analysis
- Added code to handle return value from prune_partitions()
- Added support for "EXPLAIN PARTITIONS SELECT ..."
sql/sql_yacc.yy:
#2985 "Partition Pruning": added support for "EXPLAIN PARTITIONS SELECT ..."
This commit is contained in:
parent
cdfd9f7f6f
commit
f19fb8709c
15 changed files with 1742 additions and 47 deletions
35
sql/item.h
35
sql/item.h
|
|
@ -368,6 +368,28 @@ public:
|
|||
}
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
This enum is used to report information about monotonicity of function
|
||||
represented by Item* tree.
|
||||
Monotonicity is defined only for Item* trees that represent table
|
||||
partitioning expressions (i.e. have no subselects/user vars/PS parameters
|
||||
etc etc). An Item* tree is assumed to have the same monotonicity properties
|
||||
as its correspoinding function F:
|
||||
|
||||
[signed] longlong F(field1, field2, ...) {
|
||||
put values of field_i into table record buffer;
|
||||
return item->val_int();
|
||||
}
|
||||
*/
|
||||
|
||||
typedef enum monotonicity_info
|
||||
{
|
||||
NON_MONOTONIC, /* none of the below holds */
|
||||
MONOTONIC_INCREASING, /* F() is unary and "x < y" => "F(x) < F(y)" */
|
||||
MONOTONIC_STRICT_INCREASING /* F() is unary and "x < y" => "F(x) <= F(y)" */
|
||||
} enum_monotonicity_info;
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
typedef bool (Item::*Item_processor)(byte *arg);
|
||||
|
|
@ -465,6 +487,15 @@ public:
|
|||
virtual Item_result cast_to_int_type() const { return result_type(); }
|
||||
virtual enum_field_types field_type() const;
|
||||
virtual enum Type type() const =0;
|
||||
|
||||
/*
|
||||
Return information about function monotonicity. See comment for
|
||||
enum_monotonicity_info for details. This function can only be called
|
||||
after fix_fields() call.
|
||||
*/
|
||||
virtual enum_monotonicity_info get_monotonicity_info() const
|
||||
{ return NON_MONOTONIC; }
|
||||
|
||||
/* valXXX methods must return NULL or 0 or 0.0 if null_value is set. */
|
||||
/*
|
||||
Return double precision floating point representation of item.
|
||||
|
|
@ -1138,6 +1169,10 @@ public:
|
|||
{
|
||||
return field->type();
|
||||
}
|
||||
enum_monotonicity_info get_monotonicity_info() const
|
||||
{
|
||||
return MONOTONIC_STRICT_INCREASING;
|
||||
}
|
||||
Field *get_tmp_table_field() { return result_field; }
|
||||
Field *tmp_table_field(TABLE *t_arg) { return result_field; }
|
||||
bool get_date(TIME *ltime,uint fuzzydate);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue