Bend.StepsStageSubset.scanForward C# (CSharp) Method

scanForward() public method

public scanForward ( IScanner scanner ) : RecordData>>.IEnumerable
scanner IScanner
return RecordData>>.IEnumerable
        public IEnumerable<KeyValuePair<RecordKey, RecordData>> scanForward(IScanner<RecordKey> scanner)
        {
            var new_scanner = new ScanRange<RecordKey>(
                new RecordKeyComparator().appendKeyPart(this.subset_name).appendKeyPart(scanner.genLowestKeyTest()),
                new RecordKeyComparator().appendKeyPart(this.subset_name).appendKeyPart(scanner.genHighestKeyTest()),
                null);

            #if DEBUG_SUBSET
            Console.WriteLine("subset stage scan: " + new_scanner);
            #endif
            foreach (var rec in next_stage.scanForward(new_scanner)) {
                if (this.subset_name.CompareTo(rec.Key.key_parts[0]) != 0) {
                    // Console.WriteLine("SubsetStage.scanForward: no more records");
                    yield break;
                }
                RecordKeyType_RecordKey orig_key = (RecordKeyType_RecordKey)rec.Key.key_parts[1];

                yield return new KeyValuePair<RecordKey, RecordData>(orig_key.GetRecordKey(), rec.Value);
            }
        }

Usage Example

Example #1
0
        public void T000_TestBasic_SubsetScanAll()
        {
            LayerManager db = new LayerManager(InitMode.NEW_REGION, "c:\\BENDtst\\subset");

            var stage1 = new StepsStageSubset(new RecordKeyType_String("stage1"), db);
            var stage2 = new StepsStageSubset(new RecordKeyType_String("stage2"), db);

            string[] keys = new string[] { "1/2/3", "1/3/4", "1/5/3" };

            foreach (var key in keys) {
                stage1.setValue(new RecordKey().appendParsedKey(key), RecordUpdate.WithPayload("st1 data:" + key));
                stage2.setValue(new RecordKey().appendParsedKey(key), RecordUpdate.WithPayload("st2 data:" + key));
            }

            // TODO: check the data contents also to make sure we actually saw the right rows
            {
                int count = 0;
                foreach (var row in stage1.scanForward(ScanRange<RecordKey>.All())) {
                    var match_key = new RecordKey().appendParsedKey(keys[count]);
                    Assert.True(match_key.CompareTo(row.Key) == 0, "scan key mismatch");
                    Console.WriteLine("scanned: " + row);
                    count++;
                }
                Assert.AreEqual(keys.Length, count, "incorrect number of keys in stage1 scan");
            }

            {
                int count = 0;
                foreach (var row in stage2.scanForward(ScanRange<RecordKey>.All())) {
                    var match_key = new RecordKey().appendParsedKey(keys[count]);
                    Assert.True(match_key.CompareTo(row.Key) == 0, "scan key mismatch");
                    Console.WriteLine("scanned: " + row);
                    count++;
                }
                Assert.AreEqual(keys.Length, count, "incorrect number of keys in stage2 scan");
            }
        }