leveldb_iter.go 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  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. if i.First() {
  10. n++
  11. }
  12. for i.Next() {
  13. n++
  14. }
  15. return n
  16. }
  17. func (i *LevelDBIterator[T]) Filter(f FilterFunc[T]) Iterator[T] {
  18. m := map[string]T{}
  19. if i.First() {
  20. key, value, err := i.Get()
  21. if err == nil {
  22. m[key] = value
  23. }
  24. }
  25. for i.Next() {
  26. key, value, err := i.Get()
  27. if err != nil {
  28. continue
  29. }
  30. m[key] = value
  31. }
  32. return newMemoryIterator(m, nil, i)
  33. }
  34. func (i *LevelDBIterator[T]) First() bool {
  35. return i.i.First()
  36. }
  37. func (i *LevelDBIterator[T]) Get() (string, T, error) {
  38. value, err := i.Value()
  39. return i.Key(), value, err
  40. }
  41. func (i *LevelDBIterator[T]) GetAll() (map[string]T, error) {
  42. values := map[string]T{}
  43. if i.First() {
  44. key, value, err := i.Get()
  45. if err != nil {
  46. return values, err
  47. }
  48. values[key] = value
  49. }
  50. for i.Next() {
  51. key, value, err := i.Get()
  52. if err != nil {
  53. return values, err
  54. }
  55. values[key] = value
  56. }
  57. return values, nil
  58. }
  59. func (i *LevelDBIterator[T]) GetAllKeys() []string {
  60. keys := []string{}
  61. if i.First() {
  62. keys = append(keys, i.Key())
  63. }
  64. for i.Next() {
  65. keys = append(keys, i.Key())
  66. }
  67. return keys
  68. }
  69. func (i *LevelDBIterator[T]) Key() string {
  70. return string(i.i.Key())
  71. }
  72. func (i *LevelDBIterator[T]) Last() bool {
  73. return i.i.Last()
  74. }
  75. func (i *LevelDBIterator[T]) Next() bool {
  76. return i.i.Next()
  77. }
  78. func (i *LevelDBIterator[T]) Prev() bool {
  79. return i.i.Prev()
  80. }
  81. func (i *LevelDBIterator[T]) Release() {
  82. i.i.Release()
  83. }
  84. func (i *LevelDBIterator[T]) Sort(f SortFunc[T]) Iterator[T] {
  85. all, _ := i.GetAll()
  86. m := newMemoryIterator(all, nil, i)
  87. return m.Sort(f)
  88. }
  89. func (i *LevelDBIterator[T]) SortKeys(f SortFunc[string]) Iterator[T] {
  90. all, _ := i.GetAll()
  91. m := newMemoryIterator(all, nil, i)
  92. return m.SortKeys(f)
  93. }
  94. func (i *LevelDBIterator[T]) Value() (T, error) {
  95. value := i.m.Factory()
  96. err := i.m.Unmarshal(i.i.Value(), value)
  97. return value, err
  98. }