Skip to content

Commit f5d4784

Browse files
authored
store: sql add Coder (#85)
1 parent 0096eac commit f5d4784

1 file changed

Lines changed: 23 additions & 15 deletions

File tree

store/sql.go

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@ import (
1313

1414
// SQL is the sql store
1515
type SQL struct {
16-
DB *sql.DB
16+
DB *sql.DB
17+
Coder session.StoreCoder
1718

1819
SetStatement string
1920
GetStatement string
@@ -40,6 +41,13 @@ set value = excluded.value,
4041
pgsqlGC = `delete from %s where expires_at <= now()`
4142
)
4243

44+
func (s *SQL) coder() session.StoreCoder {
45+
if s.Coder == nil {
46+
return session.DefaultStoreCoder
47+
}
48+
return s.Coder
49+
}
50+
4351
// GeneratePostgrSQLStatement generates postgresql statement
4452
func (s *SQL) GeneratePostgreSQLStatement(table string, initSchema bool) *SQL {
4553
if initSchema {
@@ -64,19 +72,31 @@ func (s *SQL) Get(key string) (session.Data, error) {
6472
if errors.Is(err, sql.ErrNoRows) {
6573
return nil, session.ErrNotFound
6674
}
67-
return s.decode(b), nil
75+
76+
var sessData session.Data
77+
err = s.coder().NewDecoder(bytes.NewReader(b)).Decode(&sessData)
78+
if err != nil {
79+
return nil, err
80+
}
81+
return sessData, nil
6882
}
6983

7084
// Set sets session data to sql db
7185
func (s *SQL) Set(key string, value session.Data, opt session.StoreOption) error {
86+
var buf bytes.Buffer
87+
err := s.coder().NewEncoder(&buf).Encode(value)
88+
if err != nil {
89+
return err
90+
}
91+
7292
now := time.Now()
7393
var exp sql.NullTime
7494
if opt.TTL > 0 {
7595
exp.Valid = true
7696
exp.Time = now.Add(opt.TTL)
7797
}
7898

79-
_, err := s.DB.Exec(s.SetStatement, key, s.encode(value), now, exp)
99+
_, err = s.DB.Exec(s.SetStatement, key, buf.Bytes(), now, exp)
80100
return err
81101
}
82102

@@ -102,15 +122,3 @@ func (s *SQL) GCEvery(d time.Duration) *SQL {
102122
time.AfterFunc(d, func() { s.gcWorker(d) })
103123
return s
104124
}
105-
106-
func (s *SQL) encode(v interface{}) []byte {
107-
var buf bytes.Buffer
108-
session.DefaultStoreCoder.NewEncoder(&buf).Encode(v)
109-
return buf.Bytes()
110-
}
111-
112-
func (s *SQL) decode(b []byte) session.Data {
113-
var d session.Data
114-
session.DefaultStoreCoder.NewDecoder(bytes.NewReader(b)).Decode(&d)
115-
return d
116-
}

0 commit comments

Comments
 (0)