CMDProviderRelcache.cpp 1.8 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
//---------------------------------------------------------------------------
//	Greenplum Database
//	Copyright (C) 2011 EMC Corp.
//
//	@filename:
//		CMDProviderRelcache.cpp
//
//	@doc:
//		Implementation of a relcache-based metadata provider, which uses GPDB's
//		relcache to lookup objects given their ids.
//
//	@test:
//
//
//---------------------------------------------------------------------------

#include "postgres.h"
#include "gpopt/relcache/CMDProviderRelcache.h"
#include "gpopt/translate/CTranslatorRelcacheToDXL.h"
#include "gpopt/mdcache/CMDAccessor.h"

22
#include "naucrates/dxl/CDXLUtils.h"
23

24
#include "naucrates/exception.h"
25 26 27 28 29 30 31 32 33 34 35 36 37

using namespace gpos;
using namespace gpdxl;
using namespace gpmd;

//---------------------------------------------------------------------------
//	@function:
//		CMDProviderRelcache::CMDProviderRelcache
//
//	@doc:
//		Constructs a file-based metadata provider
//
//---------------------------------------------------------------------------
J
Jesse Zhang 已提交
38
CMDProviderRelcache::CMDProviderRelcache(CMemoryPool *mp) : m_mp(mp)
39
{
40
	GPOS_ASSERT(NULL != m_mp);
41 42 43 44
}

//---------------------------------------------------------------------------
//	@function:
45
//		CMDProviderRelcache::GetMDObjDXLStr
46 47 48 49 50 51
//
//	@doc:
//		Returns the DXL of the requested object in the provided memory pool
//
//---------------------------------------------------------------------------
CWStringBase *
J
Jesse Zhang 已提交
52 53
CMDProviderRelcache::GetMDObjDXLStr(CMemoryPool *mp, CMDAccessor *md_accessor,
									IMDId *md_id) const
54
{
J
Jesse Zhang 已提交
55 56
	IMDCacheObject *md_obj =
		CTranslatorRelcacheToDXL::RetrieveObject(mp, md_accessor, md_id);
57

58
	GPOS_ASSERT(NULL != md_obj);
59

J
Jesse Zhang 已提交
60 61
	CWStringDynamic *str = CDXLUtils::SerializeMDObj(
		m_mp, md_obj, true /*fSerializeHeaders*/, false /*findent*/);
62 63

	// cleanup DXL object
64
	md_obj->Release();
65

66
	return str;
67 68 69
}

// EOF