@@ -13,7 +13,8 @@ import (
1313
1414// SQL is the sql store
1515type 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
4452func (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
7185func (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