Skip to content

Commit 00f85ac

Browse files
adde (#28)
1 parent 8d7f44f commit 00f85ac

2 files changed

Lines changed: 66 additions & 0 deletions

File tree

mdbx/txn.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -684,3 +684,22 @@ func (txn *Txn) Sequence(dbi DBI, increment uint64) (uint64, error) {
684684
}
685685
return uint64(res), nil
686686
}
687+
688+
// ListDBI - return all dbi names. they stored as keys of un-named (main) dbi
689+
func (txn *Txn) ListDBI() (res []string, err error) {
690+
root, err := txn.OpenRoot(0)
691+
if err != nil {
692+
return nil, err
693+
}
694+
c, err := txn.OpenCursor(root)
695+
if err != nil {
696+
return nil, err
697+
}
698+
for k, _, err := c.Get(nil, nil, First); k != nil; k, _, err = c.Get(nil, nil, Next) {
699+
if err != nil {
700+
return nil, err
701+
}
702+
res = append(res, string(k))
703+
}
704+
return res, nil
705+
}

mdbx/txn_test.go

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -982,6 +982,53 @@ func TestSequence(t *testing.T) {
982982
}
983983
}
984984

985+
func TestListDBI(t *testing.T) {
986+
env := setup(t)
987+
988+
if err := env.View(func(txn *Txn) (err error) {
989+
v, err := txn.ListDBI()
990+
if err != nil {
991+
return err
992+
}
993+
if len(v) != 0 {
994+
t.Errorf("unexpected value: %d (expected %d)", len(v), 0)
995+
}
996+
997+
return nil
998+
}); err != nil {
999+
t.Errorf("%s", err)
1000+
}
1001+
1002+
if err := env.Update(func(txn *Txn) (err error) {
1003+
_, err = txn.OpenDBISimple("testdb", Create)
1004+
if err != nil {
1005+
return err
1006+
}
1007+
_, err = txn.OpenDBISimple("testdb2", Create)
1008+
return err
1009+
}); err != nil {
1010+
t.Errorf("%s", err)
1011+
return
1012+
}
1013+
1014+
if err := env.View(func(txn *Txn) (err error) {
1015+
v, err := txn.ListDBI()
1016+
if err != nil {
1017+
return err
1018+
}
1019+
if v == nil {
1020+
t.Errorf("unexpected nil")
1021+
}
1022+
if len(v) != 2 {
1023+
t.Errorf("unexpected value: %d (expected %d)", len(v), 2)
1024+
}
1025+
1026+
return nil
1027+
}); err != nil {
1028+
t.Errorf("%s", err)
1029+
}
1030+
}
1031+
9851032
func BenchmarkTxn_abort(b *testing.B) {
9861033
env := setup(b)
9871034

0 commit comments

Comments
 (0)