MySQL 8.4.0
Source Code Documentation
partition_pruning.cc File Reference
#include <assert.h>
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include "field_types.h"
#include "my_alloc.h"
#include "my_base.h"
#include "my_bitmap.h"
#include "my_dbug.h"
#include "my_inttypes.h"
#include "sql/check_stack.h"
#include "sql/field.h"
#include "sql/handler.h"
#include "sql/item.h"
#include "sql/mem_root_array.h"
#include "sql/partition_info.h"
#include "sql/psi_memory_key.h"
#include "sql/range_optimizer/internal.h"
#include "sql/range_optimizer/range_analysis.h"
#include "sql/range_optimizer/range_optimizer.h"
#include "sql/range_optimizer/tree.h"
#include "sql/sql_class.h"
#include "sql/sql_const.h"
#include "sql/sql_lex.h"
#include "sql/sql_list.h"
#include "sql/sql_partition.h"
#include "sql/system_variables.h"
#include "sql/table.h"
#include "sql/thr_malloc.h"

Classes

struct  PART_PRUNE_PARAM
 

Typedefs

typedef void(* mark_full_part_func) (partition_info *, uint32)
 

Functions

static bool create_partition_index_description (PART_PRUNE_PARAM *prune_par)
 
static int find_used_partitions (THD *thd, PART_PRUNE_PARAM *ppar, SEL_ROOT *key_tree)
 
static int find_used_partitions (THD *thd, PART_PRUNE_PARAM *ppar, SEL_ROOT::Type type, SEL_ARG *key_tree)
 
static int find_used_partitions_imerge (THD *thd, PART_PRUNE_PARAM *ppar, SEL_IMERGE *imerge)
 
static int find_used_partitions_imerge_list (THD *thd, PART_PRUNE_PARAM *ppar, List< SEL_IMERGE > &merges)
 
static void mark_all_partitions_as_used (partition_info *part_info)
 
static void print_partitioning_index (KEY_PART *parts, KEY_PART *parts_end)
 
static void dbug_print_segment_range (SEL_ARG *arg, KEY_PART *part)
 
static void dbug_print_singlepoint_range (SEL_ARG **start, uint num)
 
bool prune_partitions (THD *thd, TABLE *table, Query_block *query_block, Item *pprune_cond)
 Perform partition pruning for a given table and condition. More...
 
void store_key_image_to_rec (Field *field, uchar *ptr, uint len)
 
static void store_selargs_to_rec (PART_PRUNE_PARAM *ppar, SEL_ARG **start, int num)
 
static void mark_full_partition_used_no_parts (partition_info *part_info, uint32 part_id)
 
static void mark_full_partition_used_with_parts (partition_info *part_info, uint32 part_id)
 
static bool fields_ok_for_partition_index (Field **pfield)
 

Typedef Documentation

◆ mark_full_part_func

typedef void(* mark_full_part_func) (partition_info *, uint32)

Function Documentation

◆ create_partition_index_description()

static bool create_partition_index_description ( PART_PRUNE_PARAM prune_par)
static

◆ dbug_print_segment_range()

static void dbug_print_segment_range ( SEL_ARG arg,
KEY_PART part 
)
static

◆ dbug_print_singlepoint_range()

static void dbug_print_singlepoint_range ( SEL_ARG **  start,
uint  num 
)
static

◆ fields_ok_for_partition_index()

static bool fields_ok_for_partition_index ( Field **  pfield)
static

◆ find_used_partitions() [1/2]

static int find_used_partitions ( THD thd,
PART_PRUNE_PARAM ppar,
SEL_ROOT key_tree 
)
static

◆ find_used_partitions() [2/2]

static int find_used_partitions ( THD thd,
PART_PRUNE_PARAM ppar,
SEL_ROOT::Type  type,
SEL_ARG key_tree 
)
static

◆ find_used_partitions_imerge()

static int find_used_partitions_imerge ( THD thd,
PART_PRUNE_PARAM ppar,
SEL_IMERGE imerge 
)
static

◆ find_used_partitions_imerge_list()

static int find_used_partitions_imerge_list ( THD thd,
PART_PRUNE_PARAM ppar,
List< SEL_IMERGE > &  merges 
)
static

◆ mark_all_partitions_as_used()

static void mark_all_partitions_as_used ( partition_info part_info)
static

◆ mark_full_partition_used_no_parts()

static void mark_full_partition_used_no_parts ( partition_info part_info,
uint32  part_id 
)
static

◆ mark_full_partition_used_with_parts()

static void mark_full_partition_used_with_parts ( partition_info part_info,
uint32  part_id 
)
static

◆ print_partitioning_index()

static void print_partitioning_index ( KEY_PART parts,
KEY_PART parts_end 
)
static

◆ prune_partitions()

bool prune_partitions ( THD thd,
TABLE table,
Query_block query_block,
Item pprune_cond 
)

Perform partition pruning for a given table and condition.

Parameters
thdThread handle
tableTable to perform partition pruning for
query_blockQuery block the table is part of
pprune_condCondition to use for partition pruning
Note
This function assumes that lock_partitions are setup when it is invoked. The function analyzes the condition, finds partitions that need to be used to retrieve the records that match the condition, and marks them as used by setting appropriate bit in part_info->read_partitions In the worst case all partitions are marked as used. If the table is not yet locked, it will also unset bits in part_info->lock_partitions that is not set in read_partitions.

This function returns promptly if called for non-partitioned table.

Returns
Operation status
Return values
trueFailure
falseSuccess

◆ store_key_image_to_rec()

void store_key_image_to_rec ( Field field,
uchar ptr,
uint  len 
)

◆ store_selargs_to_rec()

static void store_selargs_to_rec ( PART_PRUNE_PARAM ppar,
SEL_ARG **  start,
int  num 
)
static