//--------------------------------------------------------------------------- // @function: // CDXLLogicalConstTable::SerializeToDXL // // @doc: // Serialize operator in DXL format // //--------------------------------------------------------------------------- void CDXLLogicalConstTable::SerializeToDXL ( CXMLSerializer *pxmlser, const CDXLNode *//pdxln ) const { const CWStringConst *pstrElemName = PstrOpName(); pxmlser->OpenElement(CDXLTokens::PstrToken(EdxltokenNamespacePrefix), pstrElemName); // serialize columns pxmlser->OpenElement(CDXLTokens::PstrToken(EdxltokenNamespacePrefix), CDXLTokens::PstrToken(EdxltokenColumns)); for (ULONG i = 0; i < UlArity(); i++) { CDXLColDescr *pdxlcd = (*m_pdrgpdxlcd)[i]; pdxlcd->SerializeToDXL(pxmlser); } pxmlser->CloseElement(CDXLTokens::PstrToken(EdxltokenNamespacePrefix), CDXLTokens::PstrToken(EdxltokenColumns)); const CWStringConst *pstrElemNameConstTuple = CDXLTokens::PstrToken(EdxltokenConstTuple); const CWStringConst *pstrElemNameDatum = CDXLTokens::PstrToken(EdxltokenDatum); const ULONG ulTuples = m_pdrgpdrgpdxldatum->UlLength(); for (ULONG ulTuplePos = 0; ulTuplePos < ulTuples; ulTuplePos++) { // serialize a const tuple pxmlser->OpenElement(CDXLTokens::PstrToken(EdxltokenNamespacePrefix), pstrElemNameConstTuple); DrgPdxldatum *pdrgpdxldatum = (*m_pdrgpdrgpdxldatum)[ulTuplePos]; const ULONG ulCols = pdrgpdxldatum->UlLength(); for (ULONG ulColPos = 0; ulColPos < ulCols; ulColPos++) { CDXLDatum *pdxldatum = (*pdrgpdxldatum)[ulColPos]; pdxldatum->Serialize(pxmlser, pstrElemNameDatum); } pxmlser->CloseElement(CDXLTokens::PstrToken(EdxltokenNamespacePrefix), pstrElemNameConstTuple); } pxmlser->CloseElement(CDXLTokens::PstrToken(EdxltokenNamespacePrefix), pstrElemName); }
//--------------------------------------------------------------------------- // @function: // CDXLLogicalCTAS::SerializeToDXL // // @doc: // Serialize function descriptor in DXL format // //--------------------------------------------------------------------------- void CDXLLogicalCTAS::SerializeToDXL ( CXMLSerializer *pxmlser, const CDXLNode *pdxln ) const { const CWStringConst *pstrElemName = PstrOpName(); pxmlser->OpenElement(CDXLTokens::PstrToken(EdxltokenNamespacePrefix), pstrElemName); m_pmdid->Serialize(pxmlser, CDXLTokens::PstrToken(EdxltokenMdid)); if (NULL != m_pmdnameSchema) { pxmlser->AddAttribute(CDXLTokens::PstrToken(EdxltokenSchema), m_pmdnameSchema->Pstr()); } pxmlser->AddAttribute(CDXLTokens::PstrToken(EdxltokenName), m_pmdnameRel->Pstr()); pxmlser->AddAttribute(CDXLTokens::PstrToken(EdxltokenRelTemporary), m_fTemporary); pxmlser->AddAttribute(CDXLTokens::PstrToken(EdxltokenRelHasOids), m_fHasOids); GPOS_ASSERT(NULL != IMDRelation::PstrStorageType(m_erelstorage)); pxmlser->AddAttribute(CDXLTokens::PstrToken(EdxltokenRelStorageType), IMDRelation::PstrStorageType(m_erelstorage)); // serialize distribution columns pxmlser->AddAttribute(CDXLTokens::PstrToken(EdxltokenRelDistrPolicy), IMDRelation::PstrDistrPolicy(m_ereldistrpolicy)); if (IMDRelation::EreldistrHash == m_ereldistrpolicy) { GPOS_ASSERT(NULL != m_pdrgpulDistr); // serialize distribution columns CWStringDynamic *pstrDistrColumns = CDXLUtils::PstrSerialize(m_pmp, m_pdrgpulDistr); GPOS_ASSERT(NULL != pstrDistrColumns); pxmlser->AddAttribute(CDXLTokens::PstrToken(EdxltokenDistrColumns), pstrDistrColumns); GPOS_DELETE(pstrDistrColumns); } // serialize input columns CWStringDynamic *pstrCols = CDXLUtils::PstrSerialize(m_pmp, m_pdrgpulSource); GPOS_ASSERT(NULL != pstrCols); pxmlser->AddAttribute(CDXLTokens::PstrToken(EdxltokenInsertCols), pstrCols); GPOS_DELETE(pstrCols); // serialize vartypmod list CWStringDynamic *pstrVarTypeModList = CDXLUtils::PstrSerialize(m_pmp, m_pdrgpiVarTypeMod); GPOS_ASSERT(NULL != pstrVarTypeModList); pxmlser->AddAttribute(CDXLTokens::PstrToken(EdxltokenVarTypeModList), pstrVarTypeModList); GPOS_DELETE(pstrVarTypeModList); // serialize column descriptors pxmlser->OpenElement(CDXLTokens::PstrToken(EdxltokenNamespacePrefix), CDXLTokens::PstrToken(EdxltokenColumns)); const ULONG ulArity = m_pdrgpdxlcd->UlLength(); for (ULONG ul = 0; ul < ulArity; ul++) { CDXLColDescr *pdxlcd = (*m_pdrgpdxlcd)[ul]; pdxlcd->SerializeToDXL(pxmlser); } pxmlser->CloseElement(CDXLTokens::PstrToken(EdxltokenNamespacePrefix), CDXLTokens::PstrToken(EdxltokenColumns)); m_pdxlctasopt->Serialize(pxmlser); // serialize arguments pdxln->SerializeChildrenToDXL(pxmlser); pxmlser->CloseElement(CDXLTokens::PstrToken(EdxltokenNamespacePrefix), pstrElemName); }