mirror of
https://source.quilibrium.com/quilibrium/ceremonyclient.git
synced 2024-12-27 00:55:17 +00:00
126 lines
3.8 KiB
Go
126 lines
3.8 KiB
Go
|
// Copyright 2022 The LevelDB-Go and Pebble Authors. All rights reserved. Use
|
||
|
// of this source code is governed by a BSD-style license that can be found in
|
||
|
// the LICENSE file.
|
||
|
|
||
|
package keyspan
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
|
||
|
"github.com/cockroachdb/pebble/internal/base"
|
||
|
)
|
||
|
|
||
|
// InternalIteratorShim is a temporary iterator type used as a shim between
|
||
|
// keyspan.MergingIter and base.InternalIterator. It's used temporarily for
|
||
|
// range deletions during compactions, allowing range deletions to be
|
||
|
// interleaved by a compaction input iterator.
|
||
|
//
|
||
|
// TODO(jackson): This type should be removed, and the usages converted to using
|
||
|
// an InterleavingIterator type that interleaves keyspan.Spans from a
|
||
|
// keyspan.FragmentIterator with point keys.
|
||
|
type InternalIteratorShim struct {
|
||
|
miter MergingIter
|
||
|
mbufs MergingBuffers
|
||
|
span *Span
|
||
|
iterKey base.InternalKey
|
||
|
}
|
||
|
|
||
|
// Assert that InternalIteratorShim implements InternalIterator.
|
||
|
var _ base.InternalIterator = &InternalIteratorShim{}
|
||
|
|
||
|
// Init initializes the internal iterator shim to merge the provided fragment
|
||
|
// iterators.
|
||
|
func (i *InternalIteratorShim) Init(cmp base.Compare, iters ...FragmentIterator) {
|
||
|
i.miter.Init(cmp, noopTransform, &i.mbufs, iters...)
|
||
|
}
|
||
|
|
||
|
// Span returns the span containing the full set of keys over the key span at
|
||
|
// the current iterator position.
|
||
|
func (i *InternalIteratorShim) Span() *Span {
|
||
|
return i.span
|
||
|
}
|
||
|
|
||
|
// SeekGE implements (base.InternalIterator).SeekGE.
|
||
|
func (i *InternalIteratorShim) SeekGE(
|
||
|
key []byte, flags base.SeekGEFlags,
|
||
|
) (*base.InternalKey, base.LazyValue) {
|
||
|
panic("unimplemented")
|
||
|
}
|
||
|
|
||
|
// SeekPrefixGE implements (base.InternalIterator).SeekPrefixGE.
|
||
|
func (i *InternalIteratorShim) SeekPrefixGE(
|
||
|
prefix, key []byte, flags base.SeekGEFlags,
|
||
|
) (*base.InternalKey, base.LazyValue) {
|
||
|
panic("unimplemented")
|
||
|
}
|
||
|
|
||
|
// SeekLT implements (base.InternalIterator).SeekLT.
|
||
|
func (i *InternalIteratorShim) SeekLT(
|
||
|
key []byte, flags base.SeekLTFlags,
|
||
|
) (*base.InternalKey, base.LazyValue) {
|
||
|
panic("unimplemented")
|
||
|
}
|
||
|
|
||
|
// First implements (base.InternalIterator).First.
|
||
|
func (i *InternalIteratorShim) First() (*base.InternalKey, base.LazyValue) {
|
||
|
i.span = i.miter.First()
|
||
|
for i.span != nil && i.span.Empty() {
|
||
|
i.span = i.miter.Next()
|
||
|
}
|
||
|
if i.span == nil {
|
||
|
return nil, base.LazyValue{}
|
||
|
}
|
||
|
i.iterKey = base.InternalKey{UserKey: i.span.Start, Trailer: i.span.Keys[0].Trailer}
|
||
|
return &i.iterKey, base.MakeInPlaceValue(i.span.End)
|
||
|
}
|
||
|
|
||
|
// Last implements (base.InternalIterator).Last.
|
||
|
func (i *InternalIteratorShim) Last() (*base.InternalKey, base.LazyValue) {
|
||
|
panic("unimplemented")
|
||
|
}
|
||
|
|
||
|
// Next implements (base.InternalIterator).Next.
|
||
|
func (i *InternalIteratorShim) Next() (*base.InternalKey, base.LazyValue) {
|
||
|
i.span = i.miter.Next()
|
||
|
for i.span != nil && i.span.Empty() {
|
||
|
i.span = i.miter.Next()
|
||
|
}
|
||
|
if i.span == nil {
|
||
|
return nil, base.LazyValue{}
|
||
|
}
|
||
|
i.iterKey = base.InternalKey{UserKey: i.span.Start, Trailer: i.span.Keys[0].Trailer}
|
||
|
return &i.iterKey, base.MakeInPlaceValue(i.span.End)
|
||
|
}
|
||
|
|
||
|
// NextPrefix implements (base.InternalIterator).NextPrefix.
|
||
|
func (i *InternalIteratorShim) NextPrefix([]byte) (*base.InternalKey, base.LazyValue) {
|
||
|
panic("unimplemented")
|
||
|
}
|
||
|
|
||
|
// Prev implements (base.InternalIterator).Prev.
|
||
|
func (i *InternalIteratorShim) Prev() (*base.InternalKey, base.LazyValue) {
|
||
|
panic("unimplemented")
|
||
|
}
|
||
|
|
||
|
// Error implements (base.InternalIterator).Error.
|
||
|
func (i *InternalIteratorShim) Error() error {
|
||
|
return i.miter.Error()
|
||
|
}
|
||
|
|
||
|
// Close implements (base.InternalIterator).Close.
|
||
|
func (i *InternalIteratorShim) Close() error {
|
||
|
return i.miter.Close()
|
||
|
}
|
||
|
|
||
|
// SetBounds implements (base.InternalIterator).SetBounds.
|
||
|
func (i *InternalIteratorShim) SetBounds(lower, upper []byte) {
|
||
|
}
|
||
|
|
||
|
// SetContext implements (base.InternalIterator).SetContext.
|
||
|
func (i *InternalIteratorShim) SetContext(_ context.Context) {}
|
||
|
|
||
|
// String implements fmt.Stringer.
|
||
|
func (i *InternalIteratorShim) String() string {
|
||
|
return i.miter.String()
|
||
|
}
|