greenplumn CDatumGenericGPDB 源码
greenplumn CDatumGenericGPDB 代码
文件路径:/src/backend/gporca/libnaucrates/include/naucrates/base/CDatumGenericGPDB.h
//---------------------------------------------------------------------------
// Greenplum Database
// Copyright (C) 2011 EMC Corp.
//
// @filename:
// CDatumGenericGPDB.h
//
// @doc:
// GPDB-specific generic datum representation
//---------------------------------------------------------------------------
#ifndef GPNAUCRATES_CDatumGenericGPDB_H
#define GPNAUCRATES_CDatumGenericGPDB_H
#include "gpos/base.h"
#include "naucrates/base/IDatumGeneric.h"
#include "naucrates/md/CMDTypeGenericGPDB.h"
#define GPDB_DATUM_HDRSZ 4
namespace gpnaucrates
{
//---------------------------------------------------------------------------
// @class:
// CDatumGenericGPDB
//
// @doc:
// GPDB-specific generic datum representation
//
//---------------------------------------------------------------------------
class CDatumGenericGPDB : public IDatumGeneric
{
private:
// memory pool
CMemoryPool *m_mp;
// size in bytes
ULONG m_size;
// a pointer to datum value
BYTE *m_bytearray_value;
// is null
BOOL m_is_null;
// type information
IMDId *m_mdid;
INT m_type_modifier;
// cached type information (can be set from const methods)
mutable const IMDType *m_cached_type;
// long int value used for statistic computation
LINT m_stats_comp_val_int;
// double value used for statistic computation
CDouble m_stats_comp_val_double;
public:
CDatumGenericGPDB(const CDatumGenericGPDB &) = delete;
// ctor
CDatumGenericGPDB(CMemoryPool *mp, IMDId *mdid, INT type_modifier,
const void *src, ULONG size, BOOL is_null,
LINT stats_comp_val_int, CDouble stats_comp_val_double);
// dtor
~CDatumGenericGPDB() override;
// accessor of metadata type id
IMDId *MDId() const override;
INT TypeModifier() const override;
// accessor of size
ULONG Size() const override;
// accessor of is null
BOOL IsNull() const override;
// return string representation
const CWStringConst *GetStrRepr(CMemoryPool *mp) const override;
// hash function
ULONG HashValue() const override;
// match function for datums
BOOL Matches(const IDatum *datum) const override;
// copy datum
IDatum *MakeCopy(CMemoryPool *mp) const override;
// print function
IOstream &OsPrint(IOstream &os) const override;
// accessor to bytearray, creates a copy
virtual BYTE *MakeCopyOfValue(CMemoryPool *mp, ULONG *pulLength) const;
// statistics related APIs
// can datum be mapped to a double
BOOL IsDatumMappableToDouble() const override;
// map to double for stats computation
CDouble
GetDoubleMapping() const override
{
GPOS_ASSERT(IsDatumMappableToDouble());
return m_stats_comp_val_double;
}
// can datum be mapped to LINT
BOOL IsDatumMappableToLINT() const override;
// map to LINT for statistics computation
LINT
GetLINTMapping() const override
{
GPOS_ASSERT(IsDatumMappableToLINT());
return m_stats_comp_val_int;
}
// byte array representation of datum
const BYTE *GetByteArrayValue() const override;
// stats equality
BOOL StatsAreEqual(const IDatum *datum) const override;
// does the datum need to be padded before statistical derivation
BOOL NeedsPadding() const override;
// return the padded datum
IDatum *MakePaddedDatum(CMemoryPool *mp, ULONG col_len) const override;
// does datum support like predicate
BOOL
SupportsLikePredicate() const override
{
return true;
}
// return the default scale factor of like predicate
CDouble GetLikePredicateScaleFactor() const override;
// default selectivity of the trailing wildcards
virtual CDouble GetTrailingWildcardSelectivity(const BYTE *pba,
ULONG ulPos) const;
// selectivities needed for LIKE predicate statistics evaluation
static const CDouble DefaultFixedCharSelectivity;
static const CDouble DefaultCharRangeSelectivity;
static const CDouble DefaultAnyCharSelectivity;
static const CDouble DefaultCdbRanchorSelectivity;
static const CDouble DefaultCdbRolloffSelectivity;
}; // class CDatumGenericGPDB
} // namespace gpnaucrates
#endif // !GPNAUCRATES_CDatumGenericGPDB_H
// EOF
相关信息
相关文章
0
赞
热门推荐
-
2、 - 优质文章
-
3、 gate.io
-
8、 golang
-
9、 openharmony
-
10、 Vue中input框自动聚焦