//--------------------------------------------------------------------------- // @function: // CParseHandlerMetadata::PdrgpsysidParse // // @doc: // Parse a list of source system ids // //--------------------------------------------------------------------------- DrgPsysid * CParseHandlerMetadata::PdrgpsysidParse ( const Attributes &attrs, Edxltoken edxltokenAttr, Edxltoken edxltokenElement ) { const XMLCh *xmlszAttrName = CDXLTokens::XmlstrToken(edxltokenAttr); // extract systemids const XMLCh *xmlsz = attrs.getValue(xmlszAttrName); if (NULL == xmlsz) { return NULL; } DrgPsysid *pdrgpsysid = GPOS_NEW(m_pmp) DrgPsysid(m_pmp); // extract separate system ids XMLStringTokenizer xmlsztok(xmlsz, CDXLTokens::XmlstrToken(EdxltokenComma)); XMLCh *xmlszSysId = NULL; while (NULL != (xmlszSysId = xmlsztok.nextToken())) { // get sysid components XMLStringTokenizer xmlsztokSysid(xmlszSysId, CDXLTokens::XmlstrToken(EdxltokenDot)); GPOS_ASSERT(2 == xmlsztokSysid.countTokens()); XMLCh *xmlszType = xmlsztokSysid.nextToken(); ULONG ulType = CDXLOperatorFactory::UlValueFromXmlstr(m_pphm->Pmm(), xmlszType, edxltokenAttr, edxltokenElement); XMLCh *xmlszName = xmlsztokSysid.nextToken(); CWStringDynamic *pstrName = CDXLUtils::PstrFromXMLCh(m_pphm->Pmm(), xmlszName); pdrgpsysid->Append(GPOS_NEW(m_pmp) CSystemId((IMDId::EMDIdType) ulType, pstrName->Wsz(), pstrName->UlLength())); GPOS_DELETE(pstrName); } return pdrgpsysid; }