leveldb_iter.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. package ezdb
  2. import "github.com/syndtr/goleveldb/leveldb/iterator"
  3. type LevelDBIterator[T any] struct {
  4. i iterator.Iterator
  5. m DocumentMarshaler[T, []byte]
  6. }
  7. func (i *LevelDBIterator[T]) Count() int {
  8. n := 0
  9. for i.Next() {
  10. n++
  11. }
  12. return n
  13. }
  14. func (i *LevelDBIterator[T]) Filter(f FilterFunc[T]) Iterator[T] {
  15. i.First()
  16. m := map[string]T{}
  17. for i.Next() {
  18. key, value, err := i.Get()
  19. if err != nil {
  20. continue
  21. }
  22. m[key] = value
  23. }
  24. return newMemoryIterator(m, i)
  25. }
  26. func (i *LevelDBIterator[T]) First() bool {
  27. return i.i.First()
  28. }
  29. func (i *LevelDBIterator[T]) Get() (string, T, error) {
  30. value, err := i.Value()
  31. return i.Key(), value, err
  32. }
  33. func (i *LevelDBIterator[T]) GetAll() (map[string]T, error) {
  34. values := map[string]T{}
  35. i.First()
  36. key, value, err := i.Get()
  37. if err != nil {
  38. return values, err
  39. }
  40. values[key] = value
  41. for i.Next() {
  42. key, value, err := i.Get()
  43. if err != nil {
  44. return values, err
  45. }
  46. values[key] = value
  47. }
  48. return values, nil
  49. }
  50. func (i *LevelDBIterator[T]) GetAllKeys() []string {
  51. keys := []string{}
  52. i.First()
  53. keys = append(keys, i.Key())
  54. for i.Next() {
  55. keys = append(keys, i.Key())
  56. }
  57. return keys
  58. }
  59. func (i *LevelDBIterator[T]) Key() string {
  60. return string(i.i.Key())
  61. }
  62. func (i *LevelDBIterator[T]) Last() bool {
  63. return i.i.Last()
  64. }
  65. func (i *LevelDBIterator[T]) Next() bool {
  66. return i.i.Next()
  67. }
  68. func (i *LevelDBIterator[T]) Prev() bool {
  69. return i.i.Prev()
  70. }
  71. func (i *LevelDBIterator[T]) Release() {
  72. i.i.Release()
  73. }
  74. func (i *LevelDBIterator[T]) Sort(f SortFunc[T]) Iterator[T] {
  75. all, _ := i.GetAll()
  76. m := newMemoryIterator(all, i)
  77. return m.Sort(f)
  78. }
  79. func (i *LevelDBIterator[T]) SortKeys(f SortFunc[string]) Iterator[T] {
  80. all, _ := i.GetAll()
  81. m := newMemoryIterator(all, i)
  82. return m.SortKeys(f)
  83. }
  84. func (i *LevelDBIterator[T]) Value() (T, error) {
  85. value := i.m.Factory()
  86. err := i.m.Unmarshal(i.i.Value(), value)
  87. return value, err
  88. }