コード例 #1
0
ファイル: execAOScan.c プロジェクト: qiuyesuifeng/gpdb
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;
}
コード例 #2
0
/*
 * 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;
}
コード例 #3
0
ファイル: execAOScan.c プロジェクト: BALDELab/incubator-hawq
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;
}