void BeginScanAppendOnlyRelation(ScanState *scanState) { Snapshot appendOnlyMetaDataSnapshot; Assert(IsA(scanState, TableScanState) || IsA(scanState, DynamicTableScanState)); AppendOnlyScanState *node = (AppendOnlyScanState *)scanState; Assert(node->ss.scan_state == SCAN_INIT || node->ss.scan_state == SCAN_DONE); Assert(node->aos_ScanDesc == NULL); appendOnlyMetaDataSnapshot = node->ss.ps.state->es_snapshot; if (appendOnlyMetaDataSnapshot == SnapshotAny) { /* * the append-only meta data should never be fetched with * SnapshotAny as bogus results are returned. */ appendOnlyMetaDataSnapshot = GetTransactionSnapshot(); } node->aos_ScanDesc = appendonly_beginscan( node->ss.ss_currentRelation, node->ss.ps.state->es_snapshot, appendOnlyMetaDataSnapshot, 0, NULL); node->ss.scan_state = SCAN_SCAN; }
/* * Open/Close underlying relation for AO Scan. * * Open/Close means resource allocation/release. Here, it is file descriptors * and the buffers in the aos_ScanDesc. * * See nodeSeqscan.c as well. */ static void OpenAOScanRelation(AppendOnlyScanState *node) { Assert(node->ss.scan_state == SCAN_INIT || node->ss.scan_state == SCAN_DONE); Assert(!node->aos_ScanDesc); node->aos_ScanDesc = appendonly_beginscan( node->ss.ss_currentRelation, node->ss.ps.state->es_snapshot, 0, NULL); node->ss.scan_state = SCAN_SCAN; }
void BeginScanAppendOnlyRelation(ScanState *scanState) { Assert(IsA(scanState, TableScanState) || IsA(scanState, DynamicTableScanState)); AppendOnlyScanState *node = (AppendOnlyScanState *)scanState; Assert(node->ss.scan_state == SCAN_INIT || node->ss.scan_state == SCAN_DONE); Assert(node->aos_ScanDesc == NULL); node->aos_ScanDesc = appendonly_beginscan( node->ss.ss_currentRelation, node->ss.ps.state->es_snapshot, 0, NULL); node->aos_ScanDesc->splits = scanState->splits; node->ss.scan_state = SCAN_SCAN; }