github.com/lmorg/murex@v0.0.0-20240217211045-e081c89cd4ef/utils/cache/cachedb/flush.go (about)

     1  package cachedb
     2  
     3  import (
     4  	"context"
     5  	"database/sql"
     6  	"fmt"
     7  )
     8  
     9  const (
    10  	sqlFlushRead   = `SELECT key FROM %s;`
    11  	sqlFlushDelete = `DELETE FROM %s;`
    12  )
    13  
    14  func Flush(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(sqlFlushRead, 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(sqlFlushDelete, namespace))
    42  	if err != nil {
    43  		return slice, err
    44  	}
    45  	return slice, tx.Commit()
    46  }