/* ------------------------------------------------------------------ * ExecShareInputRestrPosScan * ------------------------------------------------------------------ */ void ExecShareInputScanRestrPos(ShareInputScanState *node) { ShareInputScan *sisc = (ShareInputScan *) node->ss.ps.plan; Assert(NULL != node->ts_state); Assert(NULL != node->ts_state->matstore || NULL != node->ts_state->sortstore || NULL != node->ts_state->sortstore_mk); if(sisc->share_type == SHARE_MATERIAL || sisc->share_type == SHARE_MATERIAL_XSLICE) { Assert(node->ts_pos && node->ts_markpos); ntuplestore_acc_seek((NTupleStoreAccessor *) node->ts_pos, (NTupleStorePos *) node->ts_markpos); } else if(sisc->share_type == SHARE_SORT || sisc->share_type == SHARE_SORT_XSLICE) { if(gp_enable_mk_sort) { tuplesort_restorepos_pos_mk(node->ts_state->sortstore_mk, (TuplesortPos_mk *) node->ts_pos); } else { tuplesort_restorepos_pos(node->ts_state->sortstore, (TuplesortPos *) node->ts_pos); } } else Assert(!"ExecShareInputScanRestrPos: invalid share type"); Gpmon_M_Incr(GpmonPktFromShareInputState(node), GPMON_SHAREINPUT_RESTOREPOS); CheckSendPlanStateGpmonPkt(&node->ss.ps); }
/* ---------------------------------------------------------------- * ExecMaterialRestrPos * * Calls tuplestore to restore the last saved file position. * ---------------------------------------------------------------- */ void ExecMaterialRestrPos(MaterialState *node) { Assert(node->randomAccess); #ifdef DEBUG { /* share input should never call this */ Material *ma = (Material *) node->ss.ps.plan; Assert(ma->share_type == SHARE_NOTSHARED); } #endif /* * if we haven't materialized yet, just return. */ if (NULL == node->ts_state->matstore) { return; } Assert(node->ts_pos && node->ts_markpos); ntuplestore_acc_seek((NTupleStoreAccessor *) node->ts_pos, (NTupleStorePos *) node->ts_markpos); }