Files
with/kv.go
Bel LaPointe cc18763944 stead from pg
2026-03-09 09:06:33 -06:00

47 lines
806 B
Go

package with
import (
"context"
"database/sql"
)
type SQLKV struct {
db *sql.DB
}
func KV(ctx context.Context, db *sql.DB, foo func(SQLKV) error) error {
if _, err := db.ExecContext(ctx, `
CREATE TABLE IF NOT EXISTS with_kv(
k TEXT PRIMARY KEY
, v TEXT
)
`); err != nil {
return err
}
return foo(SQLKV{db: db})
}
func (kv SQLKV) Get(ctx context.Context, k string) ([]byte, error) {
row := kv.db.QueryRowContext(ctx, `
SELECT v FROM with_kv WHERE k=$1
`, k)
var v []byte
if err := row.Scan(&v); err != nil {
return nil, err
}
return v, row.Err()
}
func (kv SQLKV) Set(ctx context.Context, k string, v []byte) error {
_, err := kv.db.ExecContext(ctx, `
INSERT INTO with_kv
(k, v) VALUES ($1, $2)
ON CONFLICT DO UPDATE
SET v=$2 WHERE k=$1
`, k, v)
return err
}