stead from pg
This commit is contained in:
46
kv.go
Normal file
46
kv.go
Normal file
@@ -0,0 +1,46 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user