github.com/lmorg/murex@v0.0.0-20240217211045-e081c89cd4ef/utils/cache/cachedb/trim.go (about) 1 package cachedb 2 3 import ( 4 "context" 5 "database/sql" 6 "fmt" 7 ) 8 9 const ( 10 sqlTrimRead = `SELECT key FROM %s WHERE ttl < unixepoch();` 11 sqlTrimDelete = `DELETE FROM %s WHERE ttl < unixepoch();` 12 ) 13 14 func Trim(ctx context.Context, namespace string) ([]string, error) { 15 opts := new(sql.TxOptions) 16 tx, err := db.BeginTx(ctx, opts) 17 if err != nil { 18 return nil, err 19 } 20 21 rows, err := tx.QueryContext(ctx, fmt.Sprintf(sqlTrimRead, namespace)) 22 if err != nil { 23 return nil, err 24 } 25 26 defer rows.Close() 27 28 var ( 29 slice []string 30 key string 31 ) 32 33 for rows.Next() { 34 err = rows.Scan(&key) 35 if err != nil { 36 return slice, err 37 } 38 slice = append(slice, key) 39 } 40 41 _, err = tx.ExecContext(ctx, fmt.Sprintf(sqlTrimDelete, namespace)) 42 if err != nil { 43 return slice, err 44 } 45 return slice, tx.Commit() 46 }