diff --git a/src/backend/gporca/libgpopt/include/gpopt/operators/CPhysicalDynamicTableScan.h b/src/backend/gporca/libgpopt/include/gpopt/operators/CPhysicalDynamicTableScan.h index 6fa75f7fbe1..94d7435ca05 100644 --- a/src/backend/gporca/libgpopt/include/gpopt/operators/CPhysicalDynamicTableScan.h +++ b/src/backend/gporca/libgpopt/include/gpopt/operators/CPhysicalDynamicTableScan.h @@ -74,6 +74,9 @@ class CPhysicalDynamicTableScan : public CPhysicalDynamicScan CPartitionPropagationSpec *PppsDerive( CMemoryPool *mp, CExpressionHandle &exprhdl) const override; + // return rewindability property enforcing type for this operator + CEnfdProp::EPropEnforcingType EpetRewindability(CExpressionHandle &, const CEnfdRewindability *) const override; + }; // class CPhysicalDynamicTableScan } // namespace gpopt diff --git a/src/backend/gporca/libgpopt/src/operators/CPhysicalDynamicTableScan.cpp b/src/backend/gporca/libgpopt/src/operators/CPhysicalDynamicTableScan.cpp index b768d623963..6b7788a22a2 100644 --- a/src/backend/gporca/libgpopt/src/operators/CPhysicalDynamicTableScan.cpp +++ b/src/backend/gporca/libgpopt/src/operators/CPhysicalDynamicTableScan.cpp @@ -91,4 +91,19 @@ CPhysicalDynamicTableScan::PppsDerive(CMemoryPool *mp, return pps; } + +CEnfdProp::EPropEnforcingType +CPhysicalDynamicTableScan::EpetRewindability(CExpressionHandle &exprhdl, + const CEnfdRewindability *per) const +{ + CRewindabilitySpec *prs = CDrvdPropPlan::Pdpplan(exprhdl.Pdp())->Prs(); + if (per->FCompatible(prs)) + { + // required rewindability is already provided + return CEnfdProp::EpetUnnecessary; + } + + return CEnfdProp::EpetRequired; +} + // EOF