Line data Source code
1 : // Copyright 2024 The LevelDB-Go and Pebble Authors. All rights reserved. Use 2 : // of this source code is governed by a BSD-style license that can be found in 3 : // the LICENSE file. 4 : 5 : package sstable 6 : 7 : import ( 8 : "context" 9 : 10 : "github.com/cockroachdb/pebble/internal/base" 11 : "github.com/cockroachdb/pebble/internal/keyspan" 12 : "github.com/cockroachdb/pebble/internal/testutils" 13 : "github.com/cockroachdb/pebble/objstorage" 14 : ) 15 : 16 : // ReadAll returns all point keys, range del spans, and range key spans from an 17 : // sstable. Closes the Readable. Panics on errors. 18 : func ReadAll( 19 : r objstorage.Readable, ro ReaderOptions, 20 1 : ) (points []base.InternalKV, rangeDels, rangeKeys []keyspan.Span) { 21 1 : reader := testutils.CheckErr(NewReader(context.Background(), r, ro)) 22 1 : defer reader.Close() 23 1 : pointIter := testutils.CheckErr(reader.NewIter(NoTransforms, nil /* lower */, nil /* upper */)) 24 1 : defer pointIter.Close() 25 1 : 26 1 : for kv := pointIter.First(); kv != nil; kv = pointIter.Next() { 27 0 : val, _ := testutils.CheckErr2(kv.Value(nil)) 28 0 : points = append(points, base.InternalKV{ 29 0 : K: kv.K.Clone(), 30 0 : V: base.MakeInPlaceValue(val), 31 0 : }) 32 0 : } 33 : 34 1 : ctx := context.Background() 35 1 : if rangeDelIter := testutils.CheckErr(reader.NewRawRangeDelIter(ctx, NoFragmentTransforms)); rangeDelIter != nil { 36 1 : defer rangeDelIter.Close() 37 1 : for s := testutils.CheckErr(rangeDelIter.First()); s != nil; s = testutils.CheckErr(rangeDelIter.Next()) { 38 1 : rangeDels = append(rangeDels, s.Clone()) 39 1 : } 40 : } 41 : 42 1 : if rangeKeyIter := testutils.CheckErr(reader.NewRawRangeKeyIter(ctx, NoFragmentTransforms)); rangeKeyIter != nil { 43 1 : defer rangeKeyIter.Close() 44 1 : for s := testutils.CheckErr(rangeKeyIter.First()); s != nil; s = testutils.CheckErr(rangeKeyIter.Next()) { 45 1 : rangeKeys = append(rangeKeys, s.Clone()) 46 1 : } 47 : } 48 1 : return points, rangeDels, rangeKeys 49 : }