//--------------------------------------------------------------------------- // @function: // CLogicalAssert::Maxcard // // @doc: // Derive max card // //--------------------------------------------------------------------------- CMaxCard CLogicalAssert::Maxcard ( IMemoryPool *, // pmp CExpressionHandle &exprhdl ) const { // in case of a false condition or a contradiction, maxcard should be 1 CExpression *pexprScalar = exprhdl.PexprScalarChild(1); GPOS_ASSERT(NULL != pexprScalar); if (CUtils::FScalarConstFalse(pexprScalar) || CDrvdPropRelational::Pdprel(exprhdl.Pdp())->Ppc()->FContradiction()) { return CMaxCard(1 /*ull*/); } // if Assert operator was generated from MaxOneRow operator, // then a max cardinality of 1 is expected if (NULL != exprhdl.Pgexpr() && CXform::ExfMaxOneRow2Assert == exprhdl.Pgexpr()->ExfidOrigin()) { return CMaxCard(1 /*ull*/); } // pass on max card of first child return exprhdl.Pdprel(0)->Maxcard(); }