Skip to content

Commit 1b70416

Browse files
committed
Add missing interface methods to Postgres store.
1 parent ad5265b commit 1b70416

File tree

2 files changed

+151
-6
lines changed

2 files changed

+151
-6
lines changed

stores/postgres/postgres.go

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -328,6 +328,104 @@ func (s *Store) Clear(id string) error {
328328
return nil
329329
}
330330

331+
// Int is a helper method to type assert as integer.
332+
func (s *Store) Int(r interface{}, err error) (int, error) {
333+
if err != nil {
334+
return 0, err
335+
}
336+
337+
v, ok := r.(float64)
338+
if !ok {
339+
return 0, ErrAssertType
340+
}
341+
342+
return int(v), err
343+
}
344+
345+
// Int64 is a helper method to type assert as Int64
346+
func (s *Store) Int64(r interface{}, err error) (int64, error) {
347+
if err != nil {
348+
return 0, err
349+
}
350+
351+
v, ok := r.(float64)
352+
if !ok {
353+
return 0, ErrAssertType
354+
}
355+
356+
return int64(v), err
357+
}
358+
359+
// UInt64 is a helper method to type assert as UInt64
360+
func (s *Store) UInt64(r interface{}, err error) (uint64, error) {
361+
if err != nil {
362+
return 0, err
363+
}
364+
365+
v, ok := r.(float64)
366+
if !ok {
367+
return 0, ErrAssertType
368+
}
369+
370+
return uint64(v), err
371+
}
372+
373+
// Float64 is a helper method to type assert as Float64
374+
func (s *Store) Float64(r interface{}, err error) (float64, error) {
375+
if err != nil {
376+
return 0, err
377+
}
378+
379+
v, ok := r.(float64)
380+
if !ok {
381+
return 0, ErrAssertType
382+
}
383+
384+
return v, err
385+
}
386+
387+
// String is a helper method to type assert as String
388+
func (s *Store) String(r interface{}, err error) (string, error) {
389+
if err != nil {
390+
return "", err
391+
}
392+
393+
v, ok := r.(string)
394+
if !ok {
395+
return "", ErrAssertType
396+
}
397+
398+
return v, err
399+
}
400+
401+
// Bytes is a helper method to type assert as Bytes
402+
func (s *Store) Bytes(r interface{}, err error) ([]byte, error) {
403+
if err != nil {
404+
return nil, err
405+
}
406+
407+
v, ok := r.(string)
408+
if !ok {
409+
return nil, ErrAssertType
410+
}
411+
412+
return []byte(v), err
413+
}
414+
415+
// Bool is a helper method to type assert as Bool
416+
func (s *Store) Bool(r interface{}, err error) (bool, error) {
417+
if err != nil {
418+
return false, err
419+
}
420+
421+
v, ok := r.(bool)
422+
if !ok {
423+
return false, ErrAssertType
424+
}
425+
426+
return v, nil
427+
}
428+
331429
// Prune deletes rows that have exceeded the TTL. This should be run externally periodically (ideally as a separate goroutine)
332430
// at desired intervals, hourly/daily etc. based on the expected volume of sessions.
333431
func (s *Store) Prune() error {

stores/postgres/postgres_test.go

Lines changed: 53 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ func TestSet(t *testing.T) {
6363
assert.NotEmpty(t, id)
6464

6565
assert.NoError(t, st.Set(id, "num", 123))
66+
assert.NoError(t, st.Set(id, "float", 12.3))
6667
assert.NoError(t, st.Set(id, "str", "hello 123"))
6768
assert.NoError(t, st.Set(id, "bool", true))
6869

@@ -81,13 +82,59 @@ func TestSet(t *testing.T) {
8182
assert.NoError(t, err)
8283
assert.Equal(t, v, float64(123))
8384

84-
v, err = st.Get(id, "str")
85-
assert.NoError(t, err)
86-
assert.Equal(t, v, "hello 123")
85+
{
86+
v, err := st.Int(st.Get(id, "num"))
87+
assert.NoError(t, err)
88+
assert.Equal(t, v, int(123))
89+
}
8790

88-
v, err = st.Get(id, "bool")
89-
assert.NoError(t, err)
90-
assert.Equal(t, v, true)
91+
{
92+
v, err := st.Int64(st.Get(id, "num"))
93+
assert.NoError(t, err)
94+
assert.Equal(t, v, int64(123))
95+
}
96+
97+
{
98+
v, err := st.UInt64(st.Get(id, "num"))
99+
assert.NoError(t, err)
100+
assert.Equal(t, v, uint64(123))
101+
}
102+
103+
{
104+
v, err := st.Float64(st.Get(id, "float"))
105+
assert.NoError(t, err)
106+
assert.Equal(t, v, float64(12.3))
107+
}
108+
109+
{
110+
v, err := st.String(st.Get(id, "str"))
111+
assert.NoError(t, err)
112+
assert.Equal(t, v, "hello 123")
113+
}
114+
115+
{
116+
v, err := st.Bytes(st.Get(id, "str"))
117+
assert.NoError(t, err)
118+
assert.Equal(t, v, []byte("hello 123"))
119+
}
120+
121+
{
122+
v, err := st.Bool(st.Get(id, "bool"))
123+
assert.NoError(t, err)
124+
assert.Equal(t, v, true)
125+
}
126+
127+
{
128+
v, err := st.Get(id, "str")
129+
assert.NoError(t, err)
130+
assert.Equal(t, v, "hello 123")
131+
}
132+
133+
{
134+
v, err := st.Get(id, "bool")
135+
assert.NoError(t, err)
136+
assert.Equal(t, v, true)
137+
}
91138

92139
// Non-existent field.
93140
_, err = st.Get(id, "xx")

0 commit comments

Comments
 (0)