Skip to content

Instantly share code, notes, and snippets.

@tsileo
Last active January 1, 2016 02:39

Revisions

  1. tsileo revised this gist Dec 22, 2013. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion ter_range.go
    Original file line number Diff line number Diff line change
    @@ -14,7 +14,7 @@ type KeyValue struct {
    }

    func GetRange(db *levigo.DB, kStart []byte, kEnd []byte) (values []KeyValue, err error) {
    values = []KeyValue{}
    values = []KeyValue{}
    ro := levigo.NewReadOptions()
    defer ro.Close()

  2. tsileo created this gist Dec 22, 2013.
    84 changes: 84 additions & 0 deletions ter_range.go
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,84 @@
    package main
    import (
    "log"
    "fmt"
    "bytes"
    // "strconv"
    "github.com/jmhodges/levigo"
    )


    type KeyValue struct {
    Key string
    Value string
    }

    func GetRange(db *levigo.DB, kStart []byte, kEnd []byte) (values []KeyValue, err error) {
    values = []KeyValue{}
    ro := levigo.NewReadOptions()
    defer ro.Close()

    it := db.NewIterator(ro)
    defer func() {
    it.Close()
    }()
    it.Seek(kStart)
    endBytes := kEnd
    for {
    if it.Valid() {
    if bytes.Compare(it.Key(), endBytes) > 0 {
    return
    }
    value := it.Value()
    vstr := string(value[:])
    key := it.Key()
    kstr := string(key[:])
    values = append(values, KeyValue{kstr, vstr})
    it.Next()
    } else {
    err = it.GetError()
    return
    }
    }

    return
    }

    func main() {
    log.Println("Starting")
    // Setup LevelDB
    opts := levigo.NewOptions()
    opts.SetCreateIfMissing(true)
    filter := levigo.NewBloomFilter(10)
    opts.SetFilterPolicy(filter)
    db, err := levigo.Open("/work/opensource/blockchain_playground_golang/tmpdat2", opts)

    defer db.Close()

    if err != nil {
    fmt.Printf("failed to load db: %s\n", err)
    }

    wo := levigo.NewWriteOptions()
    //wo.SetSync(true)
    defer wo.Close()

    ro := levigo.NewReadOptions()
    defer ro.Close()

    wb := levigo.NewWriteBatch()
    defer wb.Close()

    kStart := []byte("last")
    kEnd := []byte("last\xff")

    values, err := GetRange(db, kStart, kEnd)
    if err != nil {
    fmt.Printf("GetRange error: %s\n", err)
    }

    for _, kv := range values {
    log.Println(kv)
    }

    }