//--------------------------------------------------------------------------- // @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)); }