Exemple #1
0
//---------------------------------------------------------------------------
//	@function:
//		CMDRelationGPDB::Serialize
//
//	@doc:
//		Serialize relation metadata in DXL format
//
//---------------------------------------------------------------------------
void
CMDRelationGPDB::Serialize
	(
	CXMLSerializer *pxmlser
	) 
	const
{
	GPOS_CHECK_ABORT;

	pxmlser->OpenElement(CDXLTokens::PstrToken(EdxltokenNamespacePrefix), 
						CDXLTokens::PstrToken(EdxltokenRelation));
	
	m_pmdid->Serialize(pxmlser, CDXLTokens::PstrToken(EdxltokenMdid));
	pxmlser->AddAttribute(CDXLTokens::PstrToken(EdxltokenName), m_pmdname->Pstr());
	pxmlser->AddAttribute(CDXLTokens::PstrToken(EdxltokenRelTemporary), m_fTemporary);
	pxmlser->AddAttribute(CDXLTokens::PstrToken(EdxltokenRelHasOids), m_fHasOids);
	pxmlser->AddAttribute(CDXLTokens::PstrToken(EdxltokenRelStorageType), IMDRelation::PstrStorageType(m_erelstorage));
	pxmlser->AddAttribute(CDXLTokens::PstrToken(EdxltokenRelDistrPolicy), PstrDistrPolicy(m_ereldistrpolicy));
	
	if (EreldistrHash == m_ereldistrpolicy)
	{
		GPOS_ASSERT(NULL != m_pdrgpulDistrColumns);
		
		// serialize distribution columns
		CWStringDynamic *pstrDistrColumns = PstrColumns(m_pmp, m_pdrgpulDistrColumns);
		pxmlser->AddAttribute(CDXLTokens::PstrToken(EdxltokenDistrColumns), pstrDistrColumns);
		GPOS_DELETE(pstrDistrColumns);
	}
	
	// serialize key sets
	const ULONG ulKeySets = m_pdrgpdrgpulKeys->UlSafeLength();
	if (0 < ulKeySets)
	{
		CWStringDynamic *pstrKeys = CDXLUtils::PstrSerialize(m_pmp, m_pdrgpdrgpulKeys);
		pxmlser->AddAttribute(CDXLTokens::PstrToken(EdxltokenKeys), pstrKeys);
		GPOS_DELETE(pstrKeys);
	}
	
	if (FPartitioned())
	{
		// serialize partition keys
		CWStringDynamic *pstrPartKeys = CDXLUtils::PstrSerialize(m_pmp, m_pdrgpulPartColumns);
		pxmlser->AddAttribute(CDXLTokens::PstrToken(EdxltokenPartKeys), pstrPartKeys);
		GPOS_DELETE(pstrPartKeys);
	}

	if (m_pdrgpszPartTypes)
	{
		// serialize partition types
		CWStringDynamic *pstrPartTypes = CDXLUtils::PstrSerializeSz(m_pmp, m_pdrgpszPartTypes);
		pxmlser->AddAttribute(CDXLTokens::PstrToken(EdxltokenPartTypes), pstrPartTypes);
		GPOS_DELETE(pstrPartTypes);
	}
	
	if (m_fConvertHashToRandom)
	{
		pxmlser->AddAttribute(CDXLTokens::PstrToken(EdxltokenConvertHashToRandom), m_fConvertHashToRandom);
	}

	pxmlser->AddAttribute(CDXLTokens::PstrToken(EdxltokenNumLeafPartitions), m_ulPartitions);

	// serialize columns
	pxmlser->OpenElement(CDXLTokens::PstrToken(EdxltokenNamespacePrefix), 
						CDXLTokens::PstrToken(EdxltokenColumns));
	for (ULONG ul = 0; ul < m_pdrgpmdcol->UlLength(); ul++)
	{
		CMDColumn *pmdcol = (*m_pdrgpmdcol)[ul];
		pmdcol->Serialize(pxmlser);

		GPOS_CHECK_ABORT;
	}
	
	pxmlser->CloseElement(CDXLTokens::PstrToken(EdxltokenNamespacePrefix), 
						CDXLTokens::PstrToken(EdxltokenColumns));
	
	// serialize index information
	SerializeMDIdList(pxmlser, m_pdrgpmdidIndices, 
						CDXLTokens::PstrToken(EdxltokenIndexes), 
						CDXLTokens::PstrToken(EdxltokenIndex));
	
	// serialize trigger information
	SerializeMDIdList(pxmlser, m_pdrgpmdidTriggers,
						CDXLTokens::PstrToken(EdxltokenTriggers),
						CDXLTokens::PstrToken(EdxltokenTrigger)); 

	// serialize check constraint information
	SerializeMDIdList(pxmlser, m_pdrgpmdidCheckConstraint,
						CDXLTokens::PstrToken(EdxltokenCheckConstraints),
						CDXLTokens::PstrToken(EdxltokenCheckConstraint));

	// serialize part constraint
	if (NULL != m_pmdpartcnstr)
	{
		m_pmdpartcnstr->Serialize(pxmlser);
	}

	pxmlser->CloseElement(CDXLTokens::PstrToken(EdxltokenNamespacePrefix), 
						CDXLTokens::PstrToken(EdxltokenRelation));

	GPOS_CHECK_ABORT;
}
//---------------------------------------------------------------------------
//	@function:
//		CMDRelationExternalGPDB::Serialize
//
//	@doc:
//		Serialize relation metadata in DXL format
//
//---------------------------------------------------------------------------
void
CMDRelationExternalGPDB::Serialize
	(
	CXMLSerializer *pxmlser
	)
	const
{
	pxmlser->OpenElement(CDXLTokens::PstrToken(EdxltokenNamespacePrefix),
						CDXLTokens::PstrToken(EdxltokenRelationExternal));

	m_pmdid->Serialize(pxmlser, CDXLTokens::PstrToken(EdxltokenMdid));
	pxmlser->AddAttribute(CDXLTokens::PstrToken(EdxltokenName), m_pmdname->Pstr());
	pxmlser->AddAttribute(CDXLTokens::PstrToken(EdxltokenRelDistrPolicy), PstrDistrPolicy(m_ereldistrpolicy));

	if (EreldistrHash == m_ereldistrpolicy)
	{
		GPOS_ASSERT(NULL != m_pdrgpulDistrColumns);

		// serialize distribution columns
		CWStringDynamic *pstrDistrColumns = PstrColumns(m_pmp, m_pdrgpulDistrColumns);
		pxmlser->AddAttribute(CDXLTokens::PstrToken(EdxltokenDistrColumns), pstrDistrColumns);
		GPOS_DELETE(pstrDistrColumns);
	}

	// serialize key sets
	const ULONG ulKeySets = m_pdrgpdrgpulKeys->UlSafeLength();
	if (0 < ulKeySets)
	{
		CWStringDynamic *pstrKeys = CDXLUtils::PstrSerialize(m_pmp, m_pdrgpdrgpulKeys);
		pxmlser->AddAttribute(CDXLTokens::PstrToken(EdxltokenKeys), pstrKeys);
		GPOS_DELETE(pstrKeys);
	}

	if (0 <= m_iRejectLimit)
	{
		pxmlser->AddAttribute(CDXLTokens::PstrToken(EdxltokenExtRelRejLimit), m_iRejectLimit);
		pxmlser->AddAttribute(CDXLTokens::PstrToken(EdxltokenExtRelRejLimitInRows), m_fRejLimitInRows);
	}

	if (NULL != m_pmdidFmtErrRel)
	{
		m_pmdidFmtErrRel->Serialize(pxmlser, CDXLTokens::PstrToken(EdxltokenExtRelFmtErrRel));
	}

	if (m_fConvertHashToRandom)
	{
		pxmlser->AddAttribute(CDXLTokens::PstrToken(EdxltokenConvertHashToRandom), m_fConvertHashToRandom);
	}

	// serialize columns
	pxmlser->OpenElement(CDXLTokens::PstrToken(EdxltokenNamespacePrefix),
						CDXLTokens::PstrToken(EdxltokenColumns));
	for (ULONG ul = 0; ul < m_pdrgpmdcol->UlLength(); ul++)
	{
		CMDColumn *pmdcol = (*m_pdrgpmdcol)[ul];
		pmdcol->Serialize(pxmlser);
	}

	pxmlser->CloseElement(CDXLTokens::PstrToken(EdxltokenNamespacePrefix),
						CDXLTokens::PstrToken(EdxltokenColumns));

	// serialize index information
	SerializeMDIdList(pxmlser, m_pdrgpmdidIndices,
						CDXLTokens::PstrToken(EdxltokenIndexes),
						CDXLTokens::PstrToken(EdxltokenIndex));

	// serialize trigger information
	SerializeMDIdList(pxmlser, m_pdrgpmdidTriggers,
						CDXLTokens::PstrToken(EdxltokenTriggers),
						CDXLTokens::PstrToken(EdxltokenTrigger));

	// serialize check constraint information
	SerializeMDIdList(pxmlser, m_pdrgpmdidCheckConstraint,
						CDXLTokens::PstrToken(EdxltokenCheckConstraints),
						CDXLTokens::PstrToken(EdxltokenCheckConstraint));

	pxmlser->CloseElement(CDXLTokens::PstrToken(EdxltokenNamespacePrefix),
						CDXLTokens::PstrToken(EdxltokenRelationExternal));
}