diff --git a/core/stores/sqlc/cachedsql.go b/core/stores/sqlc/cachedsql.go index 8b81e925..addf3b40 100644 --- a/core/stores/sqlc/cachedsql.go +++ b/core/stores/sqlc/cachedsql.go @@ -190,6 +190,17 @@ func (cc CachedConn) QueryRowNoCacheCtx(ctx context.Context, v any, q string, return cc.db.QueryRowCtx(ctx, v, q, args...) } +// QueryRowPartialNoCache unmarshals into v with given statement. +func (cc CachedConn) QueryRowPartialNoCache(v any, q string, args ...any) error { + return cc.QueryRowPartialNoCacheCtx(context.Background(), v, q, args...) +} + +// QueryRowPartialNoCacheCtx unmarshals into v with given statement. +func (cc CachedConn) QueryRowPartialNoCacheCtx(ctx context.Context, v any, q string, + args ...any) error { + return cc.db.QueryRowPartialCtx(ctx, v, q, args...) +} + // QueryRowsNoCache unmarshals into v with given statement. // It doesn't use cache, because it might cause consistency problem. func (cc CachedConn) QueryRowsNoCache(v any, q string, args ...any) error { @@ -203,6 +214,19 @@ func (cc CachedConn) QueryRowsNoCacheCtx(ctx context.Context, v any, q string, return cc.db.QueryRowsCtx(ctx, v, q, args...) } +// QueryRowsPartialNoCache unmarshals into v with given statement. +// It doesn't use cache, because it might cause consistency problem. +func (cc CachedConn) QueryRowsPartialNoCache(v any, q string, args ...any) error { + return cc.QueryRowsPartialNoCacheCtx(context.Background(), v, q, args...) +} + +// QueryRowsPartialNoCacheCtx unmarshals into v with given statement. +// It doesn't use cache, because it might cause consistency problem. +func (cc CachedConn) QueryRowsPartialNoCacheCtx(ctx context.Context, v any, q string, + args ...any) error { + return cc.db.QueryRowsPartialCtx(ctx, v, q, args...) +} + // SetCache sets v into cache with given key. func (cc CachedConn) SetCache(key string, val any) error { return cc.SetCacheCtx(context.Background(), key, val) diff --git a/core/stores/sqlc/cachedsql_test.go b/core/stores/sqlc/cachedsql_test.go index c71ddcb5..8bc1a6d5 100644 --- a/core/stores/sqlc/cachedsql_test.go +++ b/core/stores/sqlc/cachedsql_test.go @@ -16,7 +16,6 @@ import ( "time" "github.com/DATA-DOG/go-sqlmock" - "github.com/alicebob/miniredis/v2" "github.com/stretchr/testify/assert" "github.com/zeromicro/go-zero/core/fx" "github.com/zeromicro/go-zero/core/logx" @@ -546,6 +545,17 @@ func TestCachedConnQueryRows(t *testing.T) { assert.True(t, conn.queryRowsValue) } +func TestCachedConnQueryRowsPartial(t *testing.T) { + r := redistest.CreateRedis(t) + + var conn trackedConn + c := NewNodeConn(&conn, r, cache.WithExpiry(time.Second*10)) + var users []string + err := c.QueryRowsPartialNoCache(&users, "select user from user_table where id='kevin'") + assert.Nil(t, err) + assert.True(t, conn.queryRowsValue) +} + func TestCachedConnTransact(t *testing.T) { r := redistest.CreateRedis(t) @@ -579,6 +589,27 @@ func TestQueryRowNoCache(t *testing.T) { assert.True(t, ran) } +func TestQueryRowPartialNoCache(t *testing.T) { + r := redistest.CreateRedis(t) + + const ( + key = "user" + value = "any" + ) + var user string + var ran bool + conn := dummySqlConn{queryRow: func(v any, q string, args ...any) error { + user = value + ran = true + return nil + }} + c := NewNodeConn(&conn, r, cache.WithExpiry(time.Second*30)) + err := c.QueryRowPartialNoCache(&user, key) + assert.Nil(t, err) + assert.Equal(t, value, user) + assert.True(t, ran) +} + func TestNewConnWithCache(t *testing.T) { r := redistest.CreateRedis(t)