func copyColl(srcColl *gkvlite.Collection, dstColl *gkvlite.Collection, writeEvery int) (numItems uint64, lastItem *gkvlite.Item, err error) { minItem, err := srcColl.MinItem(true) if err != nil { return 0, nil, err } if minItem == nil { return 0, nil, nil } var errVisit error = nil err = srcColl.VisitItemsAscend(minItem.Key, true, func(i *gkvlite.Item) bool { if errVisit = dstColl.SetItem(i); errVisit != nil { return false } numItems++ lastItem = i if writeEvery > 0 && numItems%uint64(writeEvery) == 0 { if errVisit = dstColl.Write(); errVisit != nil { return false } } return true }) if err != nil { return 0, nil, err } if errVisit != nil { return 0, nil, errVisit } return numItems, lastItem, nil }
func collRangeCopy(src *gkvlite.Collection, dst *gkvlite.Collection, minKey []byte, minKeyInclusive []byte, maxKeyExclusive []byte) error { var errVisit error visitor := func(i *gkvlite.Item) bool { if len(minKeyInclusive) > 0 && bytes.Compare(i.Key, minKeyInclusive) < 0 { return true } if len(maxKeyExclusive) > 0 && bytes.Compare(i.Key, maxKeyExclusive) >= 0 { return true } errVisit = dst.SetItem(i) if errVisit != nil { return false } return true } if errVisit != nil { return errVisit } return src.VisitItemsAscend(minKey, true, visitor) }
func testFillColl(x *gkvlite.Collection, arr []string) { for i, s := range arr { x.SetItem(&gkvlite.Item{ Key: []byte(s), Val: []byte(s), Priority: int32(i), }) } }