@@ -29,17 +29,18 @@ const (
2929var _ server.Dialect = (* Generic )(nil )
3030
3131var (
32- columns = "kv.id AS theid, kv.name AS thename, kv.created, kv.deleted, kv.create_revision, kv.prev_revision, kv.lease, kv.value, kv.old_value"
33- revSQL = `
32+ columns = "kv.id AS theid, kv.name AS thename, kv.created, kv.deleted, kv.create_revision, kv.prev_revision, kv.lease"
33+ withVal = columns + ", kv.value"
34+ withOldVal = withVal + ", kv.old_value"
35+ revSQL = `
3436 SELECT MAX(rkv.id) AS id
3537 FROM kine AS rkv`
3638
3739 compactRevSQL = `
3840 SELECT MAX(crkv.prev_revision) AS prev_revision
3941 FROM kine AS crkv
4042 WHERE crkv.name = 'compact_rev_key'`
41-
42- listSQL = fmt .Sprintf (`
43+ listFmt = `
4344 SELECT *
4445 FROM (
4546 SELECT (%s), (%s), %s
5758 ?
5859 ) AS lkv
5960 ORDER BY lkv.thename ASC
60- ` , revSQL , compactRevSQL , columns )
61+ `
62+ listSQL = fmt .Sprintf (listFmt , revSQL , compactRevSQL , columns )
63+ listValSQL = fmt .Sprintf (listFmt , revSQL , compactRevSQL , withVal )
64+ listOldValSQL = fmt .Sprintf (listFmt , revSQL , compactRevSQL , withOldVal )
6165)
6266
6367type ErrRetry func (error ) bool
@@ -73,30 +77,31 @@ type ConnectionPoolConfig struct {
7377type Generic struct {
7478 sync.Mutex
7579
76- LockWrites bool
77- LastInsertID bool
78- DB * sql.DB
79- GetCurrentSQL string
80- GetRevisionSQL string
81- RevisionSQL string
82- ListRevisionStartSQL string
83- GetRevisionAfterSQL string
84- CountCurrentSQL string
85- CountRevisionSQL string
86- AfterSQL string
87- DeleteSQL string
88- CompactSQL string
89- UpdateCompactSQL string
90- PostCompactSQL string
91- InsertSQL string
92- FillSQL string
93- InsertLastInsertIDSQL string
94- GetSizeSQL string
95- Retry ErrRetry
96- InsertRetry ErrRetry
97- TranslateErr TranslateErr
98- ErrCode ErrCode
99- FillRetryDuration time.Duration
80+ LockWrites bool
81+ LastInsertID bool
82+ DB * sql.DB
83+ GetCurrentSQL string
84+ GetCurrentValSQL string
85+ ListRevisionStartSQL string
86+ ListRevisionStartValSQL string
87+ GetRevisionAfterSQL string
88+ GetRevisionAfterValSQL string
89+ CountCurrentSQL string
90+ CountRevisionSQL string
91+ AfterOldValSQL string
92+ DeleteSQL string
93+ CompactSQL string
94+ UpdateCompactSQL string
95+ PostCompactSQL string
96+ InsertSQL string
97+ FillSQL string
98+ InsertLastInsertIDSQL string
99+ GetSizeSQL string
100+ Retry ErrRetry
101+ InsertRetry ErrRetry
102+ TranslateErr TranslateErr
103+ ErrCode ErrCode
104+ FillRetryDuration time.Duration
100105}
101106
102107func q (sql , param string , numbered bool ) string {
@@ -200,15 +205,12 @@ func Open(ctx context.Context, driverName, dataSourceName string, connPoolConfig
200205 return & Generic {
201206 DB : db ,
202207
203- GetRevisionSQL : q (fmt .Sprintf (`
204- SELECT
205- 0, 0, %s
206- FROM kine AS kv
207- WHERE kv.id = ?` , columns ), paramCharacter , numbered ),
208-
209- GetCurrentSQL : q (fmt .Sprintf (listSQL , "AND mkv.name > ?" ), paramCharacter , numbered ),
210- ListRevisionStartSQL : q (fmt .Sprintf (listSQL , "AND mkv.id <= ?" ), paramCharacter , numbered ),
211- GetRevisionAfterSQL : q (fmt .Sprintf (listSQL , "AND mkv.name > ? AND mkv.id <= ?" ), paramCharacter , numbered ),
208+ GetCurrentSQL : q (fmt .Sprintf (listSQL , "AND mkv.name > ?" ), paramCharacter , numbered ),
209+ GetCurrentValSQL : q (fmt .Sprintf (listValSQL , "AND mkv.name > ?" ), paramCharacter , numbered ),
210+ ListRevisionStartSQL : q (fmt .Sprintf (listSQL , "AND mkv.id <= ?" ), paramCharacter , numbered ),
211+ ListRevisionStartValSQL : q (fmt .Sprintf (listValSQL , "AND mkv.id <= ?" ), paramCharacter , numbered ),
212+ GetRevisionAfterSQL : q (fmt .Sprintf (listSQL , "AND mkv.name > ? AND mkv.id <= ?" ), paramCharacter , numbered ),
213+ GetRevisionAfterValSQL : q (fmt .Sprintf (listValSQL , "AND mkv.name > ? AND mkv.id <= ?" ), paramCharacter , numbered ),
212214
213215 CountCurrentSQL : q (fmt .Sprintf (`
214216 SELECT (%s), COUNT(c.theid)
@@ -222,13 +224,13 @@ func Open(ctx context.Context, driverName, dataSourceName string, connPoolConfig
222224 %s
223225 ) c` , revSQL , fmt .Sprintf (listSQL , "AND mkv.name > ? AND mkv.id <= ?" )), paramCharacter , numbered ),
224226
225- AfterSQL : q (fmt .Sprintf (`
227+ AfterOldValSQL : q (fmt .Sprintf (`
226228 SELECT (%s), (%s), %s
227229 FROM kine AS kv
228230 WHERE
229231 kv.name LIKE ? AND
230232 kv.id > ?
231- ORDER BY kv.id ASC` , revSQL , compactRevSQL , columns ), paramCharacter , numbered ),
233+ ORDER BY kv.id ASC` , revSQL , compactRevSQL , withOldVal ), paramCharacter , numbered ),
232234
233235 DeleteSQL : q (`
234236 DELETE FROM kine AS kv
@@ -323,34 +325,44 @@ func (d *Generic) PostCompact(ctx context.Context) error {
323325 return nil
324326}
325327
326- func (d * Generic ) GetRevision (ctx context.Context , revision int64 ) (* sql.Rows , error ) {
327- return d .query (ctx , d .GetRevisionSQL , revision )
328- }
329-
330328func (d * Generic ) DeleteRevision (ctx context.Context , revision int64 ) error {
331329 logrus .Tracef ("DELETEREVISION %v" , revision )
332330 _ , err := d .execute (ctx , d .DeleteSQL , revision )
333331 return err
334332}
335333
336- func (d * Generic ) ListCurrent (ctx context.Context , prefix , startKey string , limit int64 , includeDeleted bool ) (* sql.Rows , error ) {
337- sql := d .GetCurrentSQL
334+ func (d * Generic ) ListCurrent (ctx context.Context , prefix , startKey string , limit int64 , includeDeleted , keysOnly bool ) (* sql.Rows , error ) {
335+ var sql string
336+ if keysOnly {
337+ sql = d .GetCurrentSQL
338+ } else {
339+ sql = d .GetCurrentValSQL
340+ }
338341 if limit > 0 {
339342 sql = fmt .Sprintf ("%s LIMIT %d" , sql , limit )
340343 }
341344 return d .query (ctx , sql , prefix , startKey , includeDeleted )
342345}
343346
344- func (d * Generic ) List (ctx context.Context , prefix , startKey string , limit , revision int64 , includeDeleted bool ) (* sql.Rows , error ) {
347+ func (d * Generic ) List (ctx context.Context , prefix , startKey string , limit , revision int64 , includeDeleted , keysOnly bool ) (* sql.Rows , error ) {
348+ var sql string
345349 if startKey == "" {
346- sql := d .ListRevisionStartSQL
350+ if keysOnly {
351+ sql = d .ListRevisionStartSQL
352+ } else {
353+ sql = d .ListRevisionStartValSQL
354+ }
347355 if limit > 0 {
348356 sql = fmt .Sprintf ("%s LIMIT %d" , sql , limit )
349357 }
350358 return d .query (ctx , sql , prefix , revision , includeDeleted )
351359 }
352360
353- sql := d .GetRevisionAfterSQL
361+ if keysOnly {
362+ sql = d .GetRevisionAfterSQL
363+ } else {
364+ sql = d .GetRevisionAfterValSQL
365+ }
354366 if limit > 0 {
355367 sql = fmt .Sprintf ("%s LIMIT %d" , sql , limit )
356368 }
@@ -390,7 +402,7 @@ func (d *Generic) CurrentRevision(ctx context.Context) (int64, error) {
390402}
391403
392404func (d * Generic ) After (ctx context.Context , prefix string , rev , limit int64 ) (* sql.Rows , error ) {
393- sql := d .AfterSQL
405+ sql := d .AfterOldValSQL
394406 if limit > 0 {
395407 sql = fmt .Sprintf ("%s LIMIT %d" , sql , limit )
396408 }
0 commit comments