go-vise

Constrained Size Output Virtual Machine
Info | Log | Files | Refs | README | LICENSE

commit 790225c2dc474989bde244c8516b7892784924c2
parent b616752bedfae63a9fd5ae23de0328fe5960b9f2
Author: lash <dev@holbrook.no>
Date:   Thu, 19 Sep 2024 18:56:52 +0100

Add update field on pg kv store

Diffstat:
Mdb/postgres/pg.go | 31+++++++++++++++++++------------
Mdb/postgres/pg_test.go | 3+--
2 files changed, 20 insertions(+), 14 deletions(-)

diff --git a/db/postgres/pg.go b/db/postgres/pg.go @@ -61,8 +61,12 @@ func(pdb *pgDb) Put(ctx context.Context, key []byte, val []byte) error { if err != nil { return err } - query := fmt.Sprintf("INSERT INTO %s.kv_vise (key, value) VALUES ($1, $2) ON CONFLICT(key) DO UPDATE SET value = $2;", pdb.schema) - _, err = tx.Exec(ctx, query, k, val) + query := fmt.Sprintf("INSERT INTO %s.kv_vise (key, value, updated) VALUES ($1, $2, 'now') ON CONFLICT(key) DO UPDATE SET value = $2, updated = 'now';", pdb.schema) + if k.Translation != nil { + _, err = tx.Exec(ctx, query, k.Translation, val) + } else { + _, err = tx.Exec(ctx, query, k.Default, val) + } if err != nil { tx.Rollback(ctx) return err @@ -77,37 +81,39 @@ func(pdb *pgDb) Get(ctx context.Context, key []byte) ([]byte, error) { if err != nil { return nil, err } + tx, err := pdb.conn.Begin(ctx) + if err != nil { + return nil, err + } + if lk.Translation != nil { - tx, err := pdb.conn.Begin(ctx) - if err != nil { - return nil, err - } query := fmt.Sprintf("SELECT value FROM %s.kv_vise WHERE key = $1", pdb.schema) rs, err := tx.Query(ctx, query, lk.Translation) if err != nil { + tx.Rollback(ctx) return nil, err } defer rs.Close() if rs.Next() { r := rs.RawValues() + tx.Rollback(ctx) return r[0], nil } } - tx, err := pdb.conn.Begin(ctx) - if err != nil { - return nil, err - } query := fmt.Sprintf("SELECT value FROM %s.kv_vise WHERE key = $1", pdb.schema) - rs, err := tx.Query(ctx, query, lk.Translation) + rs, err := tx.Query(ctx, query, lk.Default) if err != nil { + tx.Rollback(ctx) return nil, err } defer rs.Close() if !rs.Next() { + tx.Rollback(ctx) return nil, db.NewErrNotFound(key) } r := rs.RawValues() + tx.Commit(ctx) return r[0], nil } @@ -127,7 +133,8 @@ func(pdb *pgDb) prepare(ctx context.Context) error { query := fmt.Sprintf(`CREATE TABLE IF NOT EXISTS %s.kv_vise ( id SERIAL NOT NULL, key BYTEA NOT NULL UNIQUE, - value BYTEA NOT NULL + value BYTEA NOT NULL, + updated TIMESTAMP NOT NULL ); `, pdb.schema) _, err = tx.Exec(ctx, query) diff --git a/db/postgres/pg_test.go b/db/postgres/pg_test.go @@ -1,3 +1,4 @@ +//go:build testlive package postgres import ( @@ -13,7 +14,6 @@ func TestCasesPg(t *testing.T) { ctx := context.Background() store := NewPgDb().WithSchema("vvise") - t.Skip("need postgresql mock") err := store.Connect(ctx, "postgres://vise:esiv@localhost:5432/visedb") if err != nil { @@ -37,7 +37,6 @@ func TestPutGetPg(t *testing.T) { dbi = store _ = dbi - t.Skip("need postgresql mock") err := store.Connect(ctx, "postgres://vise:esiv@localhost:5432/visedb") if err != nil { t.Fatal(err)