Skip to content

Instantly share code, notes, and snippets.

@fiatjaf
Last active March 13, 2023 23:27
Show Gist options
  • Save fiatjaf/f4bd3d4604ca9ceef33add16d8b9206d to your computer and use it in GitHub Desktop.
Save fiatjaf/f4bd3d4604ca9ceef33add16d8b9206d to your computer and use it in GitHub Desktop.
getting an event payload from the strfry database directly from Go
package main
import (
"encoding/hex"
"fmt"
"github.com/bmatsuo/lmdb-go/lmdb"
"github.com/bmatsuo/lmdb-go/lmdbscan"
)
func main() {
fmt.Println(getEvent(
"/home/fiatjaf/comp/strfry/strfry-db/",
"ff80c31dc005d0ff6aa55daf2e15e9cd804aea781c85bafd17091587aeadaf37",
))
}
func getEvent(lmdbPath, id string) string {
var eventJson string
env, err := lmdb.NewEnv()
if err != nil {
panic(err)
}
env.SetMaxDBs(2)
err = env.Open(lmdbPath, 0, 0644)
if err != nil {
panic(err)
}
defer env.Close()
var eventsByIdIndexDbi lmdb.DBI
var eventsDbi lmdb.DBI
env.Update(func(txn *lmdb.Txn) error {
db1, err := txn.OpenDBI("rasgueadb_defaultDb__Event__id", 0)
if err != nil {
panic(err)
}
eventsByIdIndexDbi = db1
db2, err := txn.OpenDBI("rasgueadb_defaultDb__EventPayload", 0)
if err != nil {
panic(err)
}
eventsDbi = db2
return nil
})
env.View(func(txn *lmdb.Txn) error {
txn.RawRead = true
eventId, err := hex.DecodeString(id)
if err != nil {
panic(err)
}
scanner := lmdbscan.New(txn, eventsByIdIndexDbi)
cursor := scanner.Cursor()
_, val, err := cursor.Get(eventId, nil, lmdb.SetRange)
if err != nil {
panic(err)
}
defer scanner.Close()
res, err := txn.Get(eventsDbi, val)
if err != nil {
return nil
}
eventJson = string(res[1:])
return nil
})
return eventJson
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment