go-vise

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

commit 61d1d00abf7794c1b7e77defbcc1d0c9d55d25cc
parent 9361c0f03fa32573fda3ac7d4b5a7e10f0590a7f
Author: alfred-mk <alfredmwaik@gmail.com>
Date:   Thu, 17 Oct 2024 10:16:37 +0300

fixed postgres Put and Get error

Diffstat:
Mdb/postgres/pg.go | 40+++++++++++++++++++++++++++++++---------
Mdb/postgres/pg_test.go | 12++++++------
2 files changed, 37 insertions(+), 15 deletions(-)

diff --git a/db/postgres/pg.go b/db/postgres/pg.go @@ -53,61 +53,83 @@ func(pdb *pgDb) Put(ctx context.Context, key []byte, val []byte) error { if !pdb.CheckPut() { return errors.New("unsafe put and safety set") } - k, err := pdb.ToKey(ctx, key) + + lk, err := pdb.ToKey(ctx, key) if err != nil { return err } + tx, err := pdb.conn.Begin(ctx) if err != nil { return err } + defer tx.Rollback(ctx) + 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) + + // Use lk.Default if Translation is nil, otherwise use Translation + actualKey := lk.Default + if lk.Translation != nil { + actualKey = lk.Translation + } + + _, err = tx.Exec(ctx, query, actualKey, val) if err != nil { - tx.Rollback(ctx) return err } - tx.Commit(ctx) - return nil + + return tx.Commit(ctx) } // Get implements Db. -func(pdb *pgDb) Get(ctx context.Context, key []byte) ([]byte, error) { +func (pdb *pgDb) Get(ctx context.Context, key []byte) ([]byte, error) { lk, err := pdb.ToKey(ctx, key) if err != nil { return nil, err } + + query := fmt.Sprintf("SELECT value FROM %s.kv_vise WHERE key = $1", pdb.schema) + + // Try Translation key if it exists 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) + defer tx.Rollback(ctx) + rs, err := tx.Query(ctx, query, lk.Translation) if err != nil { return nil, err } defer rs.Close() + if rs.Next() { r := rs.RawValues() + tx.Commit(ctx) return r[0], nil } } + // If Translation key doesn't exist or we didn't find a value, try Default key 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) + defer tx.Rollback(ctx) + + rs, err := tx.Query(ctx, query, lk.Default) if err != nil { return nil, err } defer rs.Close() + if !rs.Next() { return nil, db.NewErrNotFound(key) } + r := rs.RawValues() + tx.Commit(ctx) return r[0], nil } diff --git a/db/postgres/pg_test.go b/db/postgres/pg_test.go @@ -12,10 +12,10 @@ import ( func TestCasesPg(t *testing.T) { ctx := context.Background() - store := NewPgDb().WithSchema("vvise") - t.Skip("need postgresql mock") + store := NewPgDb().WithSchema("public") + //t.Skip("need postgresql mock") - err := store.Connect(ctx, "postgres://vise:esiv@localhost:5432/visedb") + err := store.Connect(ctx, "postgres://postgres:rooter@localhost:5432/visedb") if err != nil { t.Fatal(err) } @@ -29,7 +29,7 @@ func TestCasesPg(t *testing.T) { func TestPutGetPg(t *testing.T) { var dbi db.Db ses := "xyzzy" - store := NewPgDb().WithSchema("vvise") + store := NewPgDb().WithSchema("public") store.SetPrefix(db.DATATYPE_USERDATA) store.SetSession(ses) ctx := context.Background() @@ -37,8 +37,8 @@ func TestPutGetPg(t *testing.T) { dbi = store _ = dbi - t.Skip("need postgresql mock") - err := store.Connect(ctx, "postgres://vise:esiv@localhost:5432/visedb") + // t.Skip("need postgresql mock") + err := store.Connect(ctx, "postgres://postgres:rooter@localhost:5432/visedb") if err != nil { t.Fatal(err) }