Files
eventstore/sqlite3/init.go
2023-10-31 15:49:01 -03:00

47 lines
1.1 KiB
Go

package sqlite3
import (
"github.com/fiatjaf/eventstore"
"github.com/jmoiron/sqlx"
"github.com/jmoiron/sqlx/reflectx"
_ "github.com/mattn/go-sqlite3"
)
var _ eventstore.Storage = (*SQLite3Backend)(nil)
var ddls = []string{
`CREATE TABLE IF NOT EXISTS event (
id text NOT NULL,
pubkey text NOT NULL,
created_at integer NOT NULL,
kind integer NOT NULL,
tags jsonb NOT NULL,
content text NOT NULL,
sig text NOT NULL);`,
`CREATE UNIQUE INDEX IF NOT EXISTS ididx ON event(id)`,
`CREATE INDEX IF NOT EXISTS pubkeyprefix ON event(pubkey)`,
`CREATE INDEX IF NOT EXISTS timeidx ON event(created_at DESC)`,
`CREATE INDEX IF NOT EXISTS kindidx ON event(kind)`,
}
func (b *SQLite3Backend) Init() error {
db, err := sqlx.Connect("sqlite3", b.DatabaseURL)
if err != nil {
return err
}
db.SetMaxOpenConns(b.MaxOpenConns)
db.SetMaxIdleConns(b.MaxIdleConns)
db.Mapper = reflectx.NewMapperFunc("json", sqlx.NameMapper)
b.DB = db
for _, ddl := range ddls {
_, err = b.DB.Exec(ddl)
if err != nil {
return err
}
}
return nil
}