text: //---------------------------------------------------------------------------
  //	Greenplum Database
  //	Copyright (C) 2012 EMC Corp.
  //
  //	@filename:
  //		CDXLLogicalCTEAnchor.cpp
  //
  //	@doc:
  //		Implementation of DXL logical CTE anchors
  //		
  //---------------------------------------------------------------------------
  
  #include "naucrates/dxl/operators/CDXLLogicalCTEAnchor.h"
  #include "naucrates/dxl/operators/CDXLNode.h"
  #include "naucrates/dxl/xml/dxltokens.h"
  #include "naucrates/dxl/xml/CXMLSerializer.h"
  
  using namespace gpos;
  using namespace gpdxl;
  
  //---------------------------------------------------------------------------
  //	@function:
  //		CDXLLogicalCTEAnchor::CDXLLogicalCTEAnchor
  //
  //	@doc:
  //		Ctor
  //
  //---------------------------------------------------------------------------
  CDXLLogicalCTEAnchor::CDXLLogicalCTEAnchor
  	(
  	CMemoryPool *mp,
  	ULONG id
  	)
  	:
  	CDXLLogical(mp),
  	m_id(id)
  {
  }
  
  //---------------------------------------------------------------------------
  //	@function:
  //		CDXLLogicalCTEAnchor::GetDXLOperator
  //
  //	@doc:
  //		Operator type
  //
  //---------------------------------------------------------------------------
  Edxlopid
  CDXLLogicalCTEAnchor::GetDXLOperator() const
  {
  	return EdxlopLogicalCTEAnchor;
  }
  
  //---------------------------------------------------------------------------
  //	@function:
  //		CDXLLogicalCTEAnchor::GetOpNameStr
  //
  //	@doc:
  //		Operator name
  //
  //---------------------------------------------------------------------------
  const CWStringConst *
  CDXLLogicalCTEAnchor::GetOpNameStr() const
  {
  	return CDXLTokens::GetDXLTokenStr(EdxltokenLogicalCTEAnchor);
  }
  
  //---------------------------------------------------------------------------
  //	@function:
  //		CDXLLogicalCTEAnchor::SerializeToDXL
  //
  //	@doc:
  //		Serialize operator in DXL format
  //
  //---------------------------------------------------------------------------
  void
  CDXLLogicalCTEAnchor::SerializeToDXL
  	(
  	CXMLSerializer *xml_serializer,
  	const CDXLNode *dxlnode
  	)
  	const
  {
  	const CWStringConst *element_name = GetOpNameStr();
  
  	xml_serializer->OpenElement(CDXLTokens::GetDXLTokenStr(EdxltokenNamespacePrefix), element_name);
  	xml_serializer->AddAttribute(CDXLTokens::GetDXLTokenStr(EdxltokenCTEId), Id());
  	
  	dxlnode->SerializeChildrenToDXL(xml_serializer);
  	xml_serializer->CloseElement(CDXLTokens::GetDXLTokenStr(EdxltokenNamespacePrefix), element_name);
  }
  
  #ifdef GPOS_DEBUG
  //---------------------------------------------------------------------------
  //	@function:
  //		CDXLLogicalCTEAnchor::AssertValid
  //
  //	@doc:
  //		Checks whether operator node is well-structured
  //
  //---------------------------------------------------------------------------
  void
  CDXLLogicalCTEAnchor::AssertValid
  	(
  	const CDXLNode *dxlnode,
  	BOOL validate_children
  	) const
  {
  	GPOS_ASSERT(1 == dxlnode->Arity());
  
  	CDXLNode *child_dxlnode = (*dxlnode)[0];
  	GPOS_ASSERT(EdxloptypeLogical == child_dxlnode->GetOperator()->GetDXLOperatorType());
  
  	if (validate_children)
  	{
  		child_dxlnode->GetOperator()->AssertValid(child_dxlnode, validate_children);
  	}
  }
  #endif // GPOS_DEBUG
  
  // EOF
  