Skip to content

File query_hash_scan.c

FileList > cubrid > src > query > query_hash_scan.c

Go to the source code of this file

  • #include <stdio.h>
  • #include <stdlib.h>
  • #include <string.h>
  • #include <stddef.h>
  • #include <math.h>
  • #include "fetch.h"
  • #include "memory_alloc.h"
  • #include "memory_hash.h"
  • #include "object_domain.h"
  • #include "object_primitive.h"
  • #include "object_representation.h"
  • #include "query_opfunc.h"
  • #include "string_opfunc.h"
  • #include "query_hash_scan.h"
  • #include "db_value_printer.hpp"
  • #include "dbtype.h"
  • #include "chartype.h"
  • #include "storage_common.h"
  • #include "error_manager.h"
  • #include "page_buffer.h"
  • #include "slotted_page.h"
  • #include "file_manager.h"
  • #include "db_date.h"
  • #include "thread_compat.hpp"
  • #include "oid.h"
  • #include "memory_wrapper.hpp"

Classes

Type Name
struct fhs_bucket_header
struct fhs_dir_record
struct fhs_dk_bucket_header

Public Types

Type Name
typedef struct fhs_bucket_header FHS_BUCKET_HEADER
typedef struct fhs_dir_record FHS_DIR_RECORD
typedef struct fhs_dk_bucket_header FHS_DK_BUCKET_HEADER
typedef unsigned int FHS_HASH_KEY
enum FHS_RESULT

Public Functions

Type Name
FHSID * fhs_create (THREAD_ENTRY * thread_p, FHSID * fhsid_p, int exp_num_entries)
int fhs_destroy (THREAD_ENTRY * thread_p, FHSID * fhsid_p)
void fhs_dump (THREAD_ENTRY * thread_p, FHSID * fhsid_p)
void * fhs_insert (THREAD_ENTRY * thread_p, FHSID * fhsid_p, void * key_p, TFTID * value_p)
EH_SEARCH fhs_search (THREAD_ENTRY * thread_p, HASH_LIST_SCAN * hlsid_p, TFTID * value_p)
EH_SEARCH fhs_search_next (THREAD_ENTRY * thread_p, HASH_LIST_SCAN * hlsid_p, TFTID * value_p)
HASH_SCAN_KEY * qdata_alloc_hscan_key (cubthread::entry * thread_p, int val_cnt, bool alloc_vals)
HASH_SCAN_VALUE * qdata_alloc_hscan_value (cubthread::entry * thread_p, QFILE_TUPLE tpl)
HASH_SCAN_VALUE * qdata_alloc_hscan_value_OID (cubthread::entry * thread_p, QFILE_LIST_SCAN_ID * scan_id_p)
int qdata_build_hscan_key (THREAD_ENTRY * thread_p, val_descr * vd, REGU_VARIABLE_LIST regu_list, HASH_SCAN_KEY * key)
HASH_SCAN_KEY * qdata_copy_hscan_key (cubthread::entry * thread_p, HASH_SCAN_KEY * key, REGU_VARIABLE_LIST probe_regu_list, val_descr * vd)
HASH_SCAN_KEY * qdata_copy_hscan_key_without_alloc (cubthread::entry * thread_p, HASH_SCAN_KEY * key, REGU_VARIABLE_LIST probe_regu_list, HASH_SCAN_KEY * new_key)
int qdata_free_hscan_entry (const void * key, void * data, void * args)
void qdata_free_hscan_key (cubthread::entry * thread_p, HASH_SCAN_KEY * key, int val_count)
void qdata_free_hscan_value (cubthread::entry * thread_p, HASH_SCAN_VALUE * value)
unsigned int qdata_hash_scan_key (const void * key, unsigned int ht_size, HASH_METHOD hash_method)
int qdata_hscan_key_eq (const void * key1, const void * key2)
int qdata_print_hash_scan_entry (THREAD_ENTRY * thread_p, FILE * fp, const void * data, const void * type_list, void * args)

Public Static Functions

Type Name
char * fhs_allocate_recdes (THREAD_ENTRY * thread_p, RECDES * recdes_p, int size, short type)
bool fhs_binary_search_bucket (THREAD_ENTRY * thread_p, PAGE_PTR bucket_page_p, PGSLOTID num_record, void * key_p, PGSLOTID * out_position_p, bool need_to_backward)
int fhs_compare_key (THREAD_ENTRY * thread_p, char * bucket_record_p, void * key_p, INT16 record_type, int * out_compare_result_p)
int fhs_compose_record (THREAD_ENTRY * thread_p, void * key_p, TFTID * value_p, RECDES * recdes_p, short flag)
int fhs_connect_bucket (THREAD_ENTRY * thread_p, FHSID * fhsid_p, int local_depth, FHS_HASH_KEY hash_key, VPID * bucket_vpid_p)
void fhs_dir_locate (int * out_page_no_p, int * out_offset_p)
int fhs_distribute_records_into_two_bucket (THREAD_ENTRY * thread_p, FHSID * fhsid_p, PAGE_PTR bucket_page_p, FHS_BUCKET_HEADER * bucket_header_p, int num_recs, PGSLOTID first_slot_id, PAGE_PTR sibling_page_p)
void fhs_dump_bucket (THREAD_ENTRY * thread_p, PAGE_PTR bucket_page_p)
int fhs_expand_directory (THREAD_ENTRY * thread_p, FHSID * fhsid_p, int new_depth)
PAGE_PTR fhs_extend_bucket (THREAD_ENTRY * thread_p, FHSID * fhsid_p, PAGE_PTR bucket_page_p, void * key_p, FHS_HASH_KEY hash_key, int * out_new_bit_p, VPID * bucket_vpid)
int fhs_find_bucket_vpid_with_hash (THREAD_ENTRY * thread_p, FHSID * fhsid_p, void * key_p, PGBUF_LATCH_MODE root_latch, PGBUF_LATCH_MODE bucket_latch, VPID * out_vpid_p, FHS_HASH_KEY * out_hash_key_p, int * out_location_p)
char fhs_find_depth (THREAD_ENTRY * thread_p, FHSID * fhsid_p, int location, VPID * bucket_vpid_p, VPID * sibling_vpid_p)
int fhs_find_first_bit_position (THREAD_ENTRY * thread_p, FHSID * fhsid_p, PAGE_PTR bucket_page_p, FHS_BUCKET_HEADER * bucket_header_p, void * key_p, int num_recs, PGSLOTID first_slot_id, int * out_old_local_depth_p, int * out_new_local_depth_p)
PAGE_PTR fhs_fix_ehid_page (THREAD_ENTRY * thread_p, EHID * ehid, PGBUF_LATCH_MODE latch_mode)
PAGE_PTR fhs_fix_nth_page (THREAD_ENTRY * thread_p, const VFID * vfid_p, int offset, PGBUF_LATCH_MODE latch_mode)
PAGE_PTR fhs_fix_old_page (THREAD_ENTRY * thread_p, const VFID * vfid_p, const VPID * vpid_p, PGBUF_LATCH_MODE latch_mode)
void fhs_free_recdes (THREAD_ENTRY * thread_p, RECDES * recdes_p)
int fhs_get_pseudo_key (THREAD_ENTRY * thread_p, RECDES * recdes_p, FHS_HASH_KEY * out_hash_key_p)
FHS_HASH_KEY fhs_hash (void * original_key_p)
FHS_HASH_KEY fhs_hash_four_bytes_type (char * key_p)
int fhs_initialize_bucket_new_page (THREAD_ENTRY * thread_p, PAGE_PTR page_p, void * args)
int fhs_initialize_dir_new_page (THREAD_ENTRY * thread_p, PAGE_PTR page_p, void * args)
int fhs_initialize_dk_bucket_new_page (THREAD_ENTRY * thread_p, PAGE_PTR page_p, void * args)
FHS_RESULT fhs_insert_bucket_after_extend_if_need (THREAD_ENTRY * thread_p, FHSID * fhsid_p, VPID * bucket_vpid_p, void * key_p, FHS_HASH_KEY hash_key, TFTID * value_p)
FHS_RESULT fhs_insert_to_bucket (THREAD_ENTRY * thread_p, FHSID * fhsid_p, PAGE_PTR bucket_page_p, void * key_p, TFTID * value_p)
int fhs_insert_to_bucket_after_create (THREAD_ENTRY * thread_p, FHSID * fhsid_p, VPID * bucket_vpid_p, int location, FHS_HASH_KEY hash_key, void * key_p, TFTID * value_p)
FHS_RESULT fhs_insert_to_dk_bucket (THREAD_ENTRY * thread_p, FHSID * fhsid_p, VPID * next_bucket, void * key_p, TFTID * value_p)
bool fhs_locate_slot (THREAD_ENTRY * thread_p, PAGE_PTR bucket_page_p, void * key_p, PGSLOTID * out_position_p, bool need_to_backward)
void fhs_read_flag_from_record (char * record_p, short * flag)
void fhs_read_key_from_record (char * record_p, int * key)
void fhs_read_tftid_from_record (char * record_p, TFTID * tftid_p)
PAGE_PTR fhs_split_bucket (THREAD_ENTRY * thread_p, FHSID * fhsid_p, PAGE_PTR bucket_page_p, void * key_p, int * out_old_local_depth_p, int * out_new_local_depth_p, VPID * sibling_vpid_p)
char * fhs_write_flag_to_record (char * record_p, short flag)
char * fhs_write_key_to_record (char * record_p, void * key_p)
char * fhs_write_tftid_to_record (char * record_p, TFTID * tftid_p)
DB_VALUE_COMPARE_RESULT qdata_hscan_key_compare (HASH_SCAN_KEY * ckey1, HASH_SCAN_KEY * ckey2, int * diff_pos)
bool safe_memcpy (void * data, void * source, int size)

Macros

Type Name
define CLEARBIT (word, pos) ( (word) & ~(1 &lt;&lt; ([**FHS\_HASH\_KEY\_BITS**](query__hash__scan_8c.md#define-fhs_hash_key_bits) - (pos))) )
define FHS_ALIGNMENT (([**char**](broker__monitor_8c.md#function-timeout)) [**FHS\_KEY\_SIZE**](query__hash__scan_8c.md#define-fhs_key_size))
define FHS_FIRST_SLOT_ID 1
define FHS_FLAG_DUMMY_NUM 0 /\* [**meaningless**](broker__monitor_8c.md#function-timeout) [**flag**](classflag.md) [**of**](broker__monitor_8c.md#function-timeout) record in [**dk**](broker__monitor_8c.md#function-timeout) [**bucket**](broker__monitor_8c.md#function-timeout) \*/
define FHS_FLAG_INDIRECT -1 /\* 0xFFFF, record [**is**](broker__monitor_8c.md#function-timeout) page [**id**](thread__worker__pool__impl_8hpp.md#enum-id) [**for**](dynamic__load_8c.md#function-for) duplicate key [**bucket**](broker__monitor_8c.md#function-timeout) \*/
define FHS_HASH_KEY_BITS ([**sizeof**](broker__monitor_8c.md#function-timeout) ([**FHS\_HASH\_KEY**](query__hash__scan_8c.md#typedef-fhs_hash_key)) \* 8)
define FHS_HEADER_SLOT_ID 0
define FHS_KEY_SIZE ([**sizeof**](broker__monitor_8c.md#function-timeout) ([**FHS\_HASH\_KEY**](query__hash__scan_8c.md#typedef-fhs_hash_key)))
define FHS_LAST_OFFSET_IN_FIRST_PAGE (([**FHS\_NUM\_FIRST\_PAGES**](query__hash__scan_8c.md#define-fhs_num_first_pages) - 1) \* [**sizeof**](broker__monitor_8c.md#function-timeout)([**FHS\_DIR\_RECORD**](query__hash__scan_8c.md#typedef-fhs_dir_record)))
define FHS_LAST_OFFSET_IN_NON_FIRST_PAGE (([**FHS\_NUM\_NON\_FIRST\_PAGES**](query__hash__scan_8c.md#define-fhs_num_non_first_pages) - 1) \* [**sizeof**](broker__monitor_8c.md#function-timeout)([**FHS\_DIR\_RECORD**](query__hash__scan_8c.md#typedef-fhs_dir_record)))
define FHS_MAX_DUP_KEY 100 /\* 10% [**of**](broker__monitor_8c.md#function-timeout) [**MAXNUM**](broker__monitor_8c.md#function-timeout) ([**PAGE**](broker__monitor_8c.md#function-timeout) 16K / [**RECORD**](broker__monitor_8c.md#function-timeout) 14 bytes) \*/
define FHS_NUM_FIRST_PAGES (([**DB\_PAGESIZE**](storage__common_8h.md#define-db_pagesize)) / [**SSIZEOF**](broker__monitor_8c.md#function-timeout) ([**FHS\_DIR\_RECORD**](query__hash__scan_8c.md#typedef-fhs_dir_record)))
define FHS_NUM_NON_FIRST_PAGES ([**DB\_PAGESIZE**](storage__common_8h.md#define-db_pagesize) / [**sizeof**](broker__monitor_8c.md#function-timeout)([**FHS\_DIR\_RECORD**](query__hash__scan_8c.md#typedef-fhs_dir_record)))
define FHS_SHORT_BITS ([**sizeof**](broker__monitor_8c.md#function-timeout) ([**short**](broker__monitor_8c.md#function-timeout)) \* 8)
define FIND_OFFSET (hash_key, depth) ([**GETBITS**](query__hash__scan_8c.md#define-getbits)(([**hash\_key**](broker__monitor_8c.md#function-timeout)), 1, (depth)))
define GETBIT (word, pos) ([**GETBITS**](query__hash__scan_8c.md#define-getbits)((word), (pos), 1))
define GETBITS (value, pos, n) ( ((value) &gt;&gt; ( [**FHS\_HASH\_KEY\_BITS**](query__hash__scan_8c.md#define-fhs_hash_key_bits) - (pos) - (n) + 1)) & (~(~0UL &lt;&lt; (n))) )
define SETBIT (word, pos) ( (word) \| (1 &lt;&lt; ([**FHS\_HASH\_KEY\_BITS**](query__hash__scan_8c.md#define-fhs_hash_key_bits) - (pos))) )
define SET_VPID (dest_vpid, vol_id, page_id) /* multi line expression */

Public Types Documentation

typedef FHS_BUCKET_HEADER

typedef struct fhs_bucket_header FHS_BUCKET_HEADER;

typedef FHS_DIR_RECORD

typedef struct fhs_dir_record FHS_DIR_RECORD;

typedef FHS_DK_BUCKET_HEADER

typedef struct fhs_dk_bucket_header FHS_DK_BUCKET_HEADER;

typedef FHS_HASH_KEY

typedef unsigned int FHS_HASH_KEY;

enum FHS_RESULT

enum FHS_RESULT {
    FHS_SUCCESSFUL_COMPLETION,
    FHS_BUCKET_FULL,
    FHS_ERROR_OCCURRED
};

Public Functions Documentation

function fhs_create

FHSID * fhs_create (
    THREAD_ENTRY * thread_p,
    FHSID * fhsid_p,
    int exp_num_entries
) 

function fhs_destroy

int fhs_destroy (
    THREAD_ENTRY * thread_p,
    FHSID * fhsid_p
) 

function fhs_dump

void fhs_dump (
    THREAD_ENTRY * thread_p,
    FHSID * fhsid_p
) 

function fhs_insert

void * fhs_insert (
    THREAD_ENTRY * thread_p,
    FHSID * fhsid_p,
    void * key_p,
    TFTID * value_p
) 

EH_SEARCH fhs_search (
    THREAD_ENTRY * thread_p,
    HASH_LIST_SCAN * hlsid_p,
    TFTID * value_p
) 

function fhs_search_next

EH_SEARCH fhs_search_next (
    THREAD_ENTRY * thread_p,
    HASH_LIST_SCAN * hlsid_p,
    TFTID * value_p
) 

function qdata_alloc_hscan_key

HASH_SCAN_KEY * qdata_alloc_hscan_key (
    cubthread::entry * thread_p,
    int val_cnt,
    bool alloc_vals
) 

function qdata_alloc_hscan_value

HASH_SCAN_VALUE * qdata_alloc_hscan_value (
    cubthread::entry * thread_p,
    QFILE_TUPLE tpl
) 

function qdata_alloc_hscan_value_OID

HASH_SCAN_VALUE * qdata_alloc_hscan_value_OID (
    cubthread::entry * thread_p,
    QFILE_LIST_SCAN_ID * scan_id_p
) 

function qdata_build_hscan_key

int qdata_build_hscan_key (
    THREAD_ENTRY * thread_p,
    val_descr * vd,
    REGU_VARIABLE_LIST regu_list,
    HASH_SCAN_KEY * key
) 

function qdata_copy_hscan_key

HASH_SCAN_KEY * qdata_copy_hscan_key (
    cubthread::entry * thread_p,
    HASH_SCAN_KEY * key,
    REGU_VARIABLE_LIST probe_regu_list,
    val_descr * vd
) 

function qdata_copy_hscan_key_without_alloc

HASH_SCAN_KEY * qdata_copy_hscan_key_without_alloc (
    cubthread::entry * thread_p,
    HASH_SCAN_KEY * key,
    REGU_VARIABLE_LIST probe_regu_list,
    HASH_SCAN_KEY * new_key
) 

function qdata_free_hscan_entry

int qdata_free_hscan_entry (
    const  void * key,
    void * data,
    void * args
) 

function qdata_free_hscan_key

void qdata_free_hscan_key (
    cubthread::entry * thread_p,
    HASH_SCAN_KEY * key,
    int val_count
) 

function qdata_free_hscan_value

void qdata_free_hscan_value (
    cubthread::entry * thread_p,
    HASH_SCAN_VALUE * value
) 

function qdata_hash_scan_key

unsigned  int qdata_hash_scan_key (
    const  void * key,
    unsigned  int ht_size,
    HASH_METHOD hash_method
) 

function qdata_hscan_key_eq

int qdata_hscan_key_eq (
    const  void * key1,
    const  void * key2
) 

function qdata_print_hash_scan_entry

int qdata_print_hash_scan_entry (
    THREAD_ENTRY * thread_p,
    FILE * fp,
    const  void * data,
    const  void * type_list,
    void * args
) 

Public Static Functions Documentation

function fhs_allocate_recdes

static char * fhs_allocate_recdes (
    THREAD_ENTRY * thread_p,
    RECDES * recdes_p,
    int size,
    short type
) 

function fhs_binary_search_bucket

static bool fhs_binary_search_bucket (
    THREAD_ENTRY * thread_p,
    PAGE_PTR bucket_page_p,
    PGSLOTID num_record,
    void * key_p,
    PGSLOTID * out_position_p,
    bool need_to_backward
) 

function fhs_compare_key

static int fhs_compare_key (
    THREAD_ENTRY * thread_p,
    char * bucket_record_p,
    void * key_p,
    INT16 record_type,
    int * out_compare_result_p
) 

function fhs_compose_record

static int fhs_compose_record (
    THREAD_ENTRY * thread_p,
    void * key_p,
    TFTID * value_p,
    RECDES * recdes_p,
    short flag
) 

function fhs_connect_bucket

static int fhs_connect_bucket (
    THREAD_ENTRY * thread_p,
    FHSID * fhsid_p,
    int local_depth,
    FHS_HASH_KEY hash_key,
    VPID * bucket_vpid_p
) 

function fhs_dir_locate

static void fhs_dir_locate (
    int * out_page_no_p,
    int * out_offset_p
) 

function fhs_distribute_records_into_two_bucket

static int fhs_distribute_records_into_two_bucket (
    THREAD_ENTRY * thread_p,
    FHSID * fhsid_p,
    PAGE_PTR bucket_page_p,
    FHS_BUCKET_HEADER * bucket_header_p,
    int num_recs,
    PGSLOTID first_slot_id,
    PAGE_PTR sibling_page_p
) 

function fhs_dump_bucket

static void fhs_dump_bucket (
    THREAD_ENTRY * thread_p,
    PAGE_PTR bucket_page_p
) 

function fhs_expand_directory

static int fhs_expand_directory (
    THREAD_ENTRY * thread_p,
    FHSID * fhsid_p,
    int new_depth
) 

function fhs_extend_bucket

static PAGE_PTR fhs_extend_bucket (
    THREAD_ENTRY * thread_p,
    FHSID * fhsid_p,
    PAGE_PTR bucket_page_p,
    void * key_p,
    FHS_HASH_KEY hash_key,
    int * out_new_bit_p,
    VPID * bucket_vpid
) 

function fhs_find_bucket_vpid_with_hash

static int fhs_find_bucket_vpid_with_hash (
    THREAD_ENTRY * thread_p,
    FHSID * fhsid_p,
    void * key_p,
    PGBUF_LATCH_MODE root_latch,
    PGBUF_LATCH_MODE bucket_latch,
    VPID * out_vpid_p,
    FHS_HASH_KEY * out_hash_key_p,
    int * out_location_p
) 

function fhs_find_depth

static char fhs_find_depth (
    THREAD_ENTRY * thread_p,
    FHSID * fhsid_p,
    int location,
    VPID * bucket_vpid_p,
    VPID * sibling_vpid_p
) 

function fhs_find_first_bit_position

static int fhs_find_first_bit_position (
    THREAD_ENTRY * thread_p,
    FHSID * fhsid_p,
    PAGE_PTR bucket_page_p,
    FHS_BUCKET_HEADER * bucket_header_p,
    void * key_p,
    int num_recs,
    PGSLOTID first_slot_id,
    int * out_old_local_depth_p,
    int * out_new_local_depth_p
) 

function fhs_fix_ehid_page

static PAGE_PTR fhs_fix_ehid_page (
    THREAD_ENTRY * thread_p,
    EHID * ehid,
    PGBUF_LATCH_MODE latch_mode
) 

function fhs_fix_nth_page

static PAGE_PTR fhs_fix_nth_page (
    THREAD_ENTRY * thread_p,
    const  VFID * vfid_p,
    int offset,
    PGBUF_LATCH_MODE latch_mode
) 

function fhs_fix_old_page

static PAGE_PTR fhs_fix_old_page (
    THREAD_ENTRY * thread_p,
    const  VFID * vfid_p,
    const  VPID * vpid_p,
    PGBUF_LATCH_MODE latch_mode
) 

function fhs_free_recdes

static void fhs_free_recdes (
    THREAD_ENTRY * thread_p,
    RECDES * recdes_p
) 

function fhs_get_pseudo_key

static int fhs_get_pseudo_key (
    THREAD_ENTRY * thread_p,
    RECDES * recdes_p,
    FHS_HASH_KEY * out_hash_key_p
) 

function fhs_hash

static FHS_HASH_KEY fhs_hash (
    void * original_key_p
) 

function fhs_hash_four_bytes_type

static FHS_HASH_KEY fhs_hash_four_bytes_type (
    char * key_p
) 

function fhs_initialize_bucket_new_page

static int fhs_initialize_bucket_new_page (
    THREAD_ENTRY * thread_p,
    PAGE_PTR page_p,
    void * args
) 

function fhs_initialize_dir_new_page

static int fhs_initialize_dir_new_page (
    THREAD_ENTRY * thread_p,
    PAGE_PTR page_p,
    void * args
) 

function fhs_initialize_dk_bucket_new_page

static int fhs_initialize_dk_bucket_new_page (
    THREAD_ENTRY * thread_p,
    PAGE_PTR page_p,
    void * args
) 

function fhs_insert_bucket_after_extend_if_need

static FHS_RESULT fhs_insert_bucket_after_extend_if_need (
    THREAD_ENTRY * thread_p,
    FHSID * fhsid_p,
    VPID * bucket_vpid_p,
    void * key_p,
    FHS_HASH_KEY hash_key,
    TFTID * value_p
) 

function fhs_insert_to_bucket

static FHS_RESULT fhs_insert_to_bucket (
    THREAD_ENTRY * thread_p,
    FHSID * fhsid_p,
    PAGE_PTR bucket_page_p,
    void * key_p,
    TFTID * value_p
) 

function fhs_insert_to_bucket_after_create

static int fhs_insert_to_bucket_after_create (
    THREAD_ENTRY * thread_p,
    FHSID * fhsid_p,
    VPID * bucket_vpid_p,
    int location,
    FHS_HASH_KEY hash_key,
    void * key_p,
    TFTID * value_p
) 

function fhs_insert_to_dk_bucket

static FHS_RESULT fhs_insert_to_dk_bucket (
    THREAD_ENTRY * thread_p,
    FHSID * fhsid_p,
    VPID * next_bucket,
    void * key_p,
    TFTID * value_p
) 

function fhs_locate_slot

static bool fhs_locate_slot (
    THREAD_ENTRY * thread_p,
    PAGE_PTR bucket_page_p,
    void * key_p,
    PGSLOTID * out_position_p,
    bool need_to_backward
) 

function fhs_read_flag_from_record

static inline void fhs_read_flag_from_record (
    char * record_p,
    short * flag
) 

function fhs_read_key_from_record

static inline void fhs_read_key_from_record (
    char * record_p,
    int * key
) 

function fhs_read_tftid_from_record

static inline void fhs_read_tftid_from_record (
    char * record_p,
    TFTID * tftid_p
) 

function fhs_split_bucket

static PAGE_PTR fhs_split_bucket (
    THREAD_ENTRY * thread_p,
    FHSID * fhsid_p,
    PAGE_PTR bucket_page_p,
    void * key_p,
    int * out_old_local_depth_p,
    int * out_new_local_depth_p,
    VPID * sibling_vpid_p
) 

function fhs_write_flag_to_record

static inline char * fhs_write_flag_to_record (
    char * record_p,
    short flag
) 

function fhs_write_key_to_record

static inline char * fhs_write_key_to_record (
    char * record_p,
    void * key_p
) 

function fhs_write_tftid_to_record

static inline char * fhs_write_tftid_to_record (
    char * record_p,
    TFTID * tftid_p
) 

function qdata_hscan_key_compare

static DB_VALUE_COMPARE_RESULT qdata_hscan_key_compare (
    HASH_SCAN_KEY * ckey1,
    HASH_SCAN_KEY * ckey2,
    int * diff_pos
) 

function safe_memcpy

static bool safe_memcpy (
    void * data,
    void * source,
    int size
) 

Macro Definition Documentation

define CLEARBIT

#define CLEARBIT (
    word,
    pos
) `( (word) & ~(1 << ( FHS_HASH_KEY_BITS - (pos))) )`

define FHS_ALIGNMENT

#define FHS_ALIGNMENT `(( char ) FHS_KEY_SIZE )`

define FHS_FIRST_SLOT_ID

#define FHS_FIRST_SLOT_ID `1`

define FHS_FLAG_DUMMY_NUM

#define FHS_FLAG_DUMMY_NUM `0   /* meaningless  flag  of record in dk  bucket */`

define FHS_FLAG_INDIRECT

#define FHS_FLAG_INDIRECT `-1   /* 0xFFFF, record is page id  for duplicate key bucket */`

define FHS_HASH_KEY_BITS

#define FHS_HASH_KEY_BITS `( sizeof ( FHS_HASH_KEY ) * 8)`

define FHS_HEADER_SLOT_ID

#define FHS_HEADER_SLOT_ID `0`

define FHS_KEY_SIZE

#define FHS_KEY_SIZE `( sizeof ( FHS_HASH_KEY ))`

define FHS_LAST_OFFSET_IN_FIRST_PAGE

#define FHS_LAST_OFFSET_IN_FIRST_PAGE `(( FHS_NUM_FIRST_PAGES - 1) * sizeof ( FHS_DIR_RECORD ))`

define FHS_LAST_OFFSET_IN_NON_FIRST_PAGE

#define FHS_LAST_OFFSET_IN_NON_FIRST_PAGE `(( FHS_NUM_NON_FIRST_PAGES - 1) * sizeof ( FHS_DIR_RECORD ))`

define FHS_MAX_DUP_KEY

#define FHS_MAX_DUP_KEY `100    /* 10% of  MAXNUM ( PAGE 16K / RECORD 14 bytes) */`

define FHS_NUM_FIRST_PAGES

#define FHS_NUM_FIRST_PAGES `(( DB_PAGESIZE ) / SSIZEOF ( FHS_DIR_RECORD ))`

define FHS_NUM_NON_FIRST_PAGES

#define FHS_NUM_NON_FIRST_PAGES `( DB_PAGESIZE / sizeof ( FHS_DIR_RECORD ))`

define FHS_SHORT_BITS

#define FHS_SHORT_BITS `( sizeof ( short ) * 8)`

define FIND_OFFSET

#define FIND_OFFSET (
    hash_key,
    depth
) `( GETBITS (( hash_key ), 1, (depth)))`

define GETBIT

#define GETBIT (
    word,
    pos
) `( GETBITS ((word), (pos), 1))`

define GETBITS

#define GETBITS (
    value,
    pos,
    n
) `( ((value) >> ( FHS_HASH_KEY_BITS - (pos) - (n) + 1)) & (~(~0UL << (n))) )`

define SETBIT

#define SETBIT (
    word,
    pos
) `( (word) | (1 << ( FHS_HASH_KEY_BITS - (pos))) )`

define SET_VPID

#define SET_VPID (
    dest_vpid,
    vol_id,
    page_id
) `/* multi line expression */`


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