57 lines
2.9 KiB
C
57 lines
2.9 KiB
C
/* -------------------------------------------------------------------------
|
|
*
|
|
* nodeHash.h
|
|
* prototypes for nodeHash.c
|
|
*
|
|
*
|
|
* Portions Copyright (c) 1996-2012, PostgreSQL Global Development Group
|
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
*
|
|
* src/include/executor/nodeHash.h
|
|
*
|
|
* -------------------------------------------------------------------------
|
|
*/
|
|
#ifndef NODEHASH_H
|
|
#define NODEHASH_H
|
|
|
|
#include "nodes/execnodes.h"
|
|
#include "nodes/relation.h"
|
|
|
|
#define MIN_HASH_BUCKET_SIZE 32768 /* min bucketsize for hash join */
|
|
#define BUCKET_OVERHEAD 8
|
|
|
|
extern HashState* ExecInitHash(Hash* node, EState* estate, int eflags);
|
|
extern Node* MultiExecHash(HashState* node);
|
|
extern void ExecEndHash(HashState* node);
|
|
extern void ExecReScanHash(HashState* node);
|
|
|
|
extern HashJoinTable ExecHashTableCreate(Hash* node, List* hashOperators, bool keepNulls, List *hash_collations);
|
|
extern void ExecHashTableDestroy(HashJoinTable hashtable);
|
|
extern void ExecHashTableInsert(HashJoinTable hashtable, TupleTableSlot* slot, uint32 hashvalue, int planid, int dop,
|
|
Instrumentation* instrument = NULL);
|
|
#ifdef USE_SPQ
|
|
extern bool ExecHashGetHashValue(HashJoinTable hashtable, ExprContext* econtext, List* hashkeys, bool outer_tuple,
|
|
bool keep_nulls, uint32* hashvalue, bool *hashkeys_null);
|
|
#endif
|
|
extern bool ExecHashGetHashValue(HashJoinTable hashtable, ExprContext* econtext, List* hashkeys, bool outer_tuple,
|
|
bool keep_nulls, uint32* hashvalue);
|
|
extern void ExecHashGetBucketAndBatch(HashJoinTable hashtable, uint32 hashvalue, int* bucketno, int* batchno);
|
|
extern bool ExecScanHashBucket(HashJoinState* hjstate, ExprContext* econtext);
|
|
extern void ExecPrepHashTableForUnmatched(HashJoinState* hjstate);
|
|
extern bool ExecScanHashTableForUnmatched(HashJoinState* hjstate, ExprContext* econtext);
|
|
extern void ExecHashTableReset(HashJoinTable hashtable);
|
|
extern void ExecHashTableResetMatchFlags(HashJoinTable hashtable);
|
|
extern void ExecChooseHashTableSize(double ntuples, int tupwidth, bool useskew, int* numbuckets, int* numbatches,
|
|
int* num_skew_mcvs, int4 localWorkMem, bool vectorized = false, OpMemInfo* memInfo = NULL);
|
|
extern double ExecChooseHashTableMaxTuples(int tupwidth, bool useskew, bool vectorized, double hash_table_bytes);
|
|
extern int ExecHashGetSkewBucket(HashJoinTable hashtable, uint32 hashvalue);
|
|
extern void ExecHashTableStats(HashJoinTable hashtable, int planid);
|
|
extern int ExecSonicHashGetAtomTypeSize(Oid typeOid, int typeMod, bool isHashKey);
|
|
extern int64 ExecSonicHashGetAtomArrayBytes(
|
|
double ntuples, int m_arrSize, int m_atomSize, int64 atomTypeSize, bool hasNullFlag);
|
|
extern void ExecChooseSonicHashTableSize(Path* inner_path, List* hashclauses, int* inner_width,
|
|
bool isComplicateHashKey, int* numbuckets, int* numbatches, int4 localWorkMem, OpMemInfo* memInfo, int dop);
|
|
extern uint8 EstimateBucketTypeSize(int nbuckets);
|
|
|
|
#endif /* NODEHASH_H */
|