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:
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)
}