本文整理汇总了C++中CExpression::Pgexpr方法的典型用法代码示例。如果您正苦于以下问题:C++ CExpression::Pgexpr方法的具体用法?C++ CExpression::Pgexpr怎么用?C++ CExpression::Pgexpr使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CExpression
的用法示例。
在下文中一共展示了CExpression::Pgexpr方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: FInitChildCursors
//---------------------------------------------------------------------------
// @function:
// CBinding::FAdvanceChildCursors
//
// @doc:
// Advance cursors of child expressions and populate the given array
// with the next child expressions
//
//---------------------------------------------------------------------------
BOOL
CBinding::FAdvanceChildCursors
(
IMemoryPool *pmp,
CGroupExpression *pgexpr,
CExpression *pexprPattern,
CExpression *pexprLast,
DrgPexpr *pdrgpexpr
)
{
GPOS_ASSERT(NULL != pexprPattern);
GPOS_ASSERT(NULL != pdrgpexpr);
const ULONG ulArity = pgexpr->UlArity();
if (NULL == pexprLast)
{
// first call, initialize cursors
return FInitChildCursors(pmp, pgexpr, pexprPattern, pdrgpexpr);
}
// could we advance a child's cursor?
BOOL fCursorAdvanced = false;
// number of exhausted cursors
ULONG ulExhaustedCursors = 0;
for (ULONG ul = 0; ul < ulArity; ul++)
{
CGroup *pgroup = (*pgexpr)[ul];
CExpression *pexprPatternChild = PexprExpandPattern(pexprPattern, ul, ulArity);
CExpression *pexprNewChild = NULL;
if (fCursorAdvanced)
{
// re-use last extracted child expression
(*pexprLast)[ul]->AddRef();
pexprNewChild = (*pexprLast)[ul];
}
else
{
CExpression *pexprLastChild = (*pexprLast)[ul];
GPOS_ASSERT(pgroup == pexprLastChild->Pgexpr()->Pgroup());
// advance current cursor
pexprNewChild = PexprExtract(pmp, pgroup, pexprPatternChild, pexprLastChild);
if (NULL == pexprNewChild)
{
// cursor is exhausted, we need to reset it
pexprNewChild = PexprExtract(pmp, pgroup, pexprPatternChild, NULL /*pexprLastChild*/);
ulExhaustedCursors++;
}
else
{
// advancing current cursor has succeeded
fCursorAdvanced = true;
}
}
GPOS_ASSERT(NULL != pexprNewChild);
pdrgpexpr->Append(pexprNewChild);
}
GPOS_ASSERT(ulExhaustedCursors <= ulArity);
return ulExhaustedCursors < ulArity;
}