Skip to content

File query_hash_join.c

FileList > cubrid > src > query > query_hash_join.c

Go to the source code of this file

  • #include "query_hash_join.h"
  • #include "dbtype.h"
  • #include "error_manager.h"
  • #include "fetch.h"
  • #include "list_file.h"
  • #include "memory_alloc.h"
  • #include "object_representation.h"
  • #include "perf_monitor.h"
  • #include "px_hash_join.hpp"
  • #include "px_parallel.hpp"
  • #include "px_worker_manager.hpp"
  • #include "query_list.h"
  • #include "query_manager.h"
  • #include "system_parameter.h"
  • #include "thread_entry.hpp"
  • #include "xasl.h"
  • #include "memory_wrapper.hpp"

Public Types

Type Name
typedef enum hashjoin_print_step HASHJOIN_PRINT_STEP
enum hashjoin_print_step

Public Functions

Type Name
void hjoin_clear_shared_split_info (THREAD_ENTRY * thread_p, HASHJOIN_MANAGER * manager, HASHJOIN_SHARED_SPLIT_INFO * shared_info)
int hjoin_execute (THREAD_ENTRY * thread_p, HASHJOIN_MANAGER * manager, HASHJOIN_CONTEXT * context)
int hjoin_fetch_key (THREAD_ENTRY * thread_p, HASHJOIN_FETCH_INFO * fetch_info, QFILE_TUPLE_RECORD * tuple_record, HASH_SCAN_KEY * key, HASH_SCAN_KEY * compare_key, bool * need_skip_next)
int hjoin_init_shared_split_info (THREAD_ENTRY * thread_p, HASHJOIN_MANAGER * manager, HASHJOIN_SHARED_SPLIT_INFO * shared_info)
int hjoin_merge_qlist (THREAD_ENTRY * thread_p, HASHJOIN_MANAGER * manager, HASHJOIN_CONTEXT * context)
void hjoin_trace_drain_worker_stats (THREAD_ENTRY * thread_p, HASHJOIN_MANAGER * manager)
void hjoin_trace_end (THREAD_ENTRY * thread_p, HASHJOIN_INPUT_STATS * stats, HASHJOIN_START_STATS * start_stats)
UINT64 * hjoin_trace_get_worker_stats (HASHJOIN_MANAGER * manager, int index)
void hjoin_trace_merge_stats (HASHJOIN_STATS * stats, HASHJOIN_STATS * context_stats)
void hjoin_trace_start (THREAD_ENTRY * thread_p, HASHJOIN_START_STATS * start_stats)
void hjoin_update_tuple_hash_key (THREAD_ENTRY * thread_p, QFILE_TUPLE_RECORD * tuple_record, UINT32 hash_key)
int qexec_hash_join (THREAD_ENTRY * thread_p, XASL_NODE * xasl, QUERY_ID query_id, VAL_DESCR * val_descr)

Public Static Functions

Type Name
int hjoin_build (THREAD_ENTRY * thread_p, HASHJOIN_MANAGER * manager, HASHJOIN_CONTEXT * context)
int hjoin_build_key (THREAD_ENTRY * thread_p, HASH_LIST_SCAN * hash_scan, QFILE_LIST_SCAN_ID * list_scan_id, QFILE_TUPLE_RECORD * tuple_record)
int hjoin_build_partitions (THREAD_ENTRY * thread_p, HASHJOIN_MANAGER * manager, HASHJOIN_SPLIT_INFO * split_info)
HASHJOIN_STATUS hjoin_check_empty_inputs (HASHJOIN_MANAGER * manager, HASHJOIN_CONTEXT * context)
HASHJOIN_STATUS hjoin_check_partition (THREAD_ENTRY * thread_p, HASHJOIN_MANAGER * manager, HASHJOIN_CONTEXT * single_context)
void hjoin_clear_context (THREAD_ENTRY * thread_p, HASHJOIN_CONTEXT * context)
void hjoin_clear_manager (THREAD_ENTRY * thread_p, HASHJOIN_MANAGER * manager)
void hjoin_clear_split_info (THREAD_ENTRY * thread_p, HASHJOIN_MANAGER * manager, HASHJOIN_SPLIT_INFO * split_info, bool clear_all)
void hjoin_destroy_qlist (THREAD_ENTRY * thread_p, HASHJOIN_CONTEXT * context)
int hjoin_execute_internal (THREAD_ENTRY * thread_p, HASHJOIN_MANAGER * manager, HASHJOIN_CONTEXT * context)
int hjoin_execute_partitions (THREAD_ENTRY * thread_p, HASHJOIN_MANAGER * manager)
int hjoin_init_context (THREAD_ENTRY * thread_p, HASHJOIN_MANAGER * manager, HASHJOIN_CONTEXT * context)
int hjoin_init_domain_info (THREAD_ENTRY * thread_p, HASHJOIN_MANAGER * manager, HASHJOIN_DOMAIN_INFO * domain_info)
int hjoin_init_manager (THREAD_ENTRY * thread_p, HASHJOIN_MANAGER * manager, XASL_NODE * xasl, QUERY_ID query_id, VAL_DESCR * val_descr)
int hjoin_init_split_info (THREAD_ENTRY * thread_p, HASHJOIN_MANAGER * manager, HASHJOIN_SPLIT_INFO * split_info)
int hjoin_merge_tuple (THREAD_ENTRY * thread_p, QFILE_TUPLE_RECORD * outer_record, QFILE_TUPLE_RECORD * inner_record, QFILE_LIST_MERGE_INFO * merge_info, QFILE_TUPLE_RECORD * overflow_record)
int hjoin_merge_tuple_to_list_id (THREAD_ENTRY * thread_p, QFILE_LIST_ID * list_id, QFILE_TUPLE_RECORD * outer_record, QFILE_TUPLE_RECORD * inner_record, QFILE_LIST_MERGE_INFO * merge_info, QFILE_TUPLE_RECORD * overflow_record)
int hjoin_outer_fill_null_values (THREAD_ENTRY * thread_p, HASHJOIN_MANAGER * manager, HASHJOIN_CONTEXT * context)
int hjoin_outer_probe (THREAD_ENTRY * thread_p, HASHJOIN_MANAGER * manager, HASHJOIN_CONTEXT * context, QFILE_LIST_ID * list_id)
int hjoin_prepare_partition (THREAD_ENTRY * thread_p, HASHJOIN_MANAGER * manager, HASHJOIN_SPLIT_INFO * split_info)
int hjoin_probe (THREAD_ENTRY * thread_p, HASHJOIN_MANAGER * manager, HASHJOIN_CONTEXT * context, QFILE_LIST_ID * list_id)
int hjoin_probe_key (THREAD_ENTRY * thread_p, HASH_LIST_SCAN * hash_scan, QFILE_LIST_SCAN_ID * list_scan_id, QFILE_TUPLE_RECORD * tuple_record)
void hjoin_scan_clear (THREAD_ENTRY * thread_p, HASH_LIST_SCAN * hash_scan)
int hjoin_scan_init (THREAD_ENTRY * thread_p, HASH_LIST_SCAN * hash_scan, int key_cnt, QFILE_LIST_ID * list_id)
int hjoin_split_qlist (THREAD_ENTRY * thread_p, HASHJOIN_MANAGER * manager, HASHJOIN_INPUT_SPLIT_INFO * split_info, QFILE_LIST_ID ** temp_part_list_id, HASH_SCAN_KEY * temp_key)
HASHJOIN_STATUS hjoin_try_parallel (THREAD_ENTRY * thread_p, HASHJOIN_MANAGER * manager, HASHJOIN_CONTEXT * single_context)
HASHJOIN_STATUS hjoin_try_partition (THREAD_ENTRY * thread_p, HASHJOIN_MANAGER * manager, HASHJOIN_CONTEXT * single_context)

Macros

Type Name
define DUMP_HASH_TABLE_LIMIT 100
define DUMP_PROBE_LIMIT 20
define HJOIN_DUMP_HASH_TABLE (thread_p, hash_scan_p, list_id_p) (([**void**](broker__monitor_8c.md#function-timeout)) 0)
define HJOIN_PRINT_TUPLE (list_scan_id, tuple, step) (([**void**](broker__monitor_8c.md#function-timeout)) 0)
define PARTITION_FILL_FACTOR 0.8

Public Types Documentation

typedef HASHJOIN_PRINT_STEP

typedef enum hashjoin_print_step HASHJOIN_PRINT_STEP;

enum hashjoin_print_step

enum hashjoin_print_step {
    HASHJOIN_PRINT_NONE = 0,
    HASHJOIN_PRINT_READ_KEY,
    HASHJOIN_PRINT_NOT_MATCHED_KEY,
    HASHJOIN_PRINT_NOT_QUALIFIED_KEY,
    HASHJOIN_PRINT_QUALIFIED_KEY,
    HASHJOIN_PRINT_FILL_EMPTY_KEY
};

Public Functions Documentation

function hjoin_clear_shared_split_info

void hjoin_clear_shared_split_info (
    THREAD_ENTRY * thread_p,
    HASHJOIN_MANAGER * manager,
    HASHJOIN_SHARED_SPLIT_INFO * shared_info
) 

function hjoin_execute

int hjoin_execute (
    THREAD_ENTRY * thread_p,
    HASHJOIN_MANAGER * manager,
    HASHJOIN_CONTEXT * context
) 

function hjoin_fetch_key

int hjoin_fetch_key (
    THREAD_ENTRY * thread_p,
    HASHJOIN_FETCH_INFO * fetch_info,
    QFILE_TUPLE_RECORD * tuple_record,
    HASH_SCAN_KEY * key,
    HASH_SCAN_KEY * compare_key,
    bool * need_skip_next
) 

function hjoin_init_shared_split_info

int hjoin_init_shared_split_info (
    THREAD_ENTRY * thread_p,
    HASHJOIN_MANAGER * manager,
    HASHJOIN_SHARED_SPLIT_INFO * shared_info
) 

function hjoin_merge_qlist

int hjoin_merge_qlist (
    THREAD_ENTRY * thread_p,
    HASHJOIN_MANAGER * manager,
    HASHJOIN_CONTEXT * context
) 

function hjoin_trace_drain_worker_stats

void hjoin_trace_drain_worker_stats (
    THREAD_ENTRY * thread_p,
    HASHJOIN_MANAGER * manager
) 

function hjoin_trace_end

void hjoin_trace_end (
    THREAD_ENTRY * thread_p,
    HASHJOIN_INPUT_STATS * stats,
    HASHJOIN_START_STATS * start_stats
) 

function hjoin_trace_get_worker_stats

UINT64 * hjoin_trace_get_worker_stats (
    HASHJOIN_MANAGER * manager,
    int index
) 

function hjoin_trace_merge_stats

void hjoin_trace_merge_stats (
    HASHJOIN_STATS * stats,
    HASHJOIN_STATS * context_stats
) 

function hjoin_trace_start

void hjoin_trace_start (
    THREAD_ENTRY * thread_p,
    HASHJOIN_START_STATS * start_stats
) 

function hjoin_update_tuple_hash_key

void hjoin_update_tuple_hash_key (
    THREAD_ENTRY * thread_p,
    QFILE_TUPLE_RECORD * tuple_record,
    UINT32 hash_key
) 

function qexec_hash_join

int qexec_hash_join (
    THREAD_ENTRY * thread_p,
    XASL_NODE * xasl,
    QUERY_ID query_id,
    VAL_DESCR * val_descr
) 

Public Static Functions Documentation

function hjoin_build

static int hjoin_build (
    THREAD_ENTRY * thread_p,
    HASHJOIN_MANAGER * manager,
    HASHJOIN_CONTEXT * context
) 

function hjoin_build_key

static int hjoin_build_key (
    THREAD_ENTRY * thread_p,
    HASH_LIST_SCAN * hash_scan,
    QFILE_LIST_SCAN_ID * list_scan_id,
    QFILE_TUPLE_RECORD * tuple_record
) 

function hjoin_build_partitions

static int hjoin_build_partitions (
    THREAD_ENTRY * thread_p,
    HASHJOIN_MANAGER * manager,
    HASHJOIN_SPLIT_INFO * split_info
) 

function hjoin_check_empty_inputs

static HASHJOIN_STATUS hjoin_check_empty_inputs (
    HASHJOIN_MANAGER * manager,
    HASHJOIN_CONTEXT * context
) 

function hjoin_check_partition

static HASHJOIN_STATUS hjoin_check_partition (
    THREAD_ENTRY * thread_p,
    HASHJOIN_MANAGER * manager,
    HASHJOIN_CONTEXT * single_context
) 

function hjoin_clear_context

static void hjoin_clear_context (
    THREAD_ENTRY * thread_p,
    HASHJOIN_CONTEXT * context
) 

function hjoin_clear_manager

static void hjoin_clear_manager (
    THREAD_ENTRY * thread_p,
    HASHJOIN_MANAGER * manager
) 

function hjoin_clear_split_info

static void hjoin_clear_split_info (
    THREAD_ENTRY * thread_p,
    HASHJOIN_MANAGER * manager,
    HASHJOIN_SPLIT_INFO * split_info,
    bool clear_all
) 

function hjoin_destroy_qlist

static void hjoin_destroy_qlist (
    THREAD_ENTRY * thread_p,
    HASHJOIN_CONTEXT * context
) 

function hjoin_execute_internal

static int hjoin_execute_internal (
    THREAD_ENTRY * thread_p,
    HASHJOIN_MANAGER * manager,
    HASHJOIN_CONTEXT * context
) 

function hjoin_execute_partitions

static int hjoin_execute_partitions (
    THREAD_ENTRY * thread_p,
    HASHJOIN_MANAGER * manager
) 

function hjoin_init_context

static int hjoin_init_context (
    THREAD_ENTRY * thread_p,
    HASHJOIN_MANAGER * manager,
    HASHJOIN_CONTEXT * context
) 

function hjoin_init_domain_info

static int hjoin_init_domain_info (
    THREAD_ENTRY * thread_p,
    HASHJOIN_MANAGER * manager,
    HASHJOIN_DOMAIN_INFO * domain_info
) 

function hjoin_init_manager

static int hjoin_init_manager (
    THREAD_ENTRY * thread_p,
    HASHJOIN_MANAGER * manager,
    XASL_NODE * xasl,
    QUERY_ID query_id,
    VAL_DESCR * val_descr
) 

function hjoin_init_split_info

static int hjoin_init_split_info (
    THREAD_ENTRY * thread_p,
    HASHJOIN_MANAGER * manager,
    HASHJOIN_SPLIT_INFO * split_info
) 

function hjoin_merge_tuple

static int hjoin_merge_tuple (
    THREAD_ENTRY * thread_p,
    QFILE_TUPLE_RECORD * outer_record,
    QFILE_TUPLE_RECORD * inner_record,
    QFILE_LIST_MERGE_INFO * merge_info,
    QFILE_TUPLE_RECORD * overflow_record
) 

function hjoin_merge_tuple_to_list_id

static int hjoin_merge_tuple_to_list_id (
    THREAD_ENTRY * thread_p,
    QFILE_LIST_ID * list_id,
    QFILE_TUPLE_RECORD * outer_record,
    QFILE_TUPLE_RECORD * inner_record,
    QFILE_LIST_MERGE_INFO * merge_info,
    QFILE_TUPLE_RECORD * overflow_record
) 

function hjoin_outer_fill_null_values

static int hjoin_outer_fill_null_values (
    THREAD_ENTRY * thread_p,
    HASHJOIN_MANAGER * manager,
    HASHJOIN_CONTEXT * context
) 

function hjoin_outer_probe

static int hjoin_outer_probe (
    THREAD_ENTRY * thread_p,
    HASHJOIN_MANAGER * manager,
    HASHJOIN_CONTEXT * context,
    QFILE_LIST_ID * list_id
) 

function hjoin_prepare_partition

static int hjoin_prepare_partition (
    THREAD_ENTRY * thread_p,
    HASHJOIN_MANAGER * manager,
    HASHJOIN_SPLIT_INFO * split_info
) 

function hjoin_probe

static int hjoin_probe (
    THREAD_ENTRY * thread_p,
    HASHJOIN_MANAGER * manager,
    HASHJOIN_CONTEXT * context,
    QFILE_LIST_ID * list_id
) 

function hjoin_probe_key

static int hjoin_probe_key (
    THREAD_ENTRY * thread_p,
    HASH_LIST_SCAN * hash_scan,
    QFILE_LIST_SCAN_ID * list_scan_id,
    QFILE_TUPLE_RECORD * tuple_record
) 

function hjoin_scan_clear

static void hjoin_scan_clear (
    THREAD_ENTRY * thread_p,
    HASH_LIST_SCAN * hash_scan
) 

function hjoin_scan_init

static int hjoin_scan_init (
    THREAD_ENTRY * thread_p,
    HASH_LIST_SCAN * hash_scan,
    int key_cnt,
    QFILE_LIST_ID * list_id
) 

function hjoin_split_qlist

static int hjoin_split_qlist (
    THREAD_ENTRY * thread_p,
    HASHJOIN_MANAGER * manager,
    HASHJOIN_INPUT_SPLIT_INFO * split_info,
    QFILE_LIST_ID ** temp_part_list_id,
    HASH_SCAN_KEY * temp_key
) 

function hjoin_try_parallel

static HASHJOIN_STATUS hjoin_try_parallel (
    THREAD_ENTRY * thread_p,
    HASHJOIN_MANAGER * manager,
    HASHJOIN_CONTEXT * single_context
) 

function hjoin_try_partition

static HASHJOIN_STATUS hjoin_try_partition (
    THREAD_ENTRY * thread_p,
    HASHJOIN_MANAGER * manager,
    HASHJOIN_CONTEXT * single_context
) 

Macro Definition Documentation

define DUMP_HASH_TABLE_LIMIT

#define DUMP_HASH_TABLE_LIMIT `100`

define DUMP_PROBE_LIMIT

#define DUMP_PROBE_LIMIT `20`

define HJOIN_DUMP_HASH_TABLE

#define HJOIN_DUMP_HASH_TABLE (
    thread_p,
    hash_scan_p,
    list_id_p
) `(( void ) 0)`

define HJOIN_PRINT_TUPLE

#define HJOIN_PRINT_TUPLE (
    list_scan_id,
    tuple,
    step
) `(( void ) 0)`

define PARTITION_FILL_FACTOR

#define PARTITION_FILL_FACTOR `0.8`


The documentation for this class was generated from the following file cubrid/src/query/query_hash_join.c