...
Tawesoft Logo

Source file src/tawesoft.co.uk/go/queue/queueSqliteService.go

Documentation: src/tawesoft.co.uk/go/queue/queueSqliteService.go

     1  package queue
     2  
     3  import (
     4      "database/sql"
     5      "fmt"
     6      
     7      "tawesoft.co.uk/go/sqlp/sqlite3"
     8  )
     9  
    10  type queueSqliteService struct {
    11      db *sql.DB
    12      uuidSvc UUIDService
    13  }
    14  
    15  // NewQueueSqliteService creates a new QueueService implemented by a SQLite
    16  // backend that persists queues to individual database files.
    17  //
    18  // The SQLite backend may place a limit on the number of attached queue
    19  // databases per connection (default 7).
    20  //
    21  // SQLite is used in SecureDelete mode so that deleted items are overwritten
    22  // by zeros on disk to protect possibly sensitive data.
    23  //
    24  // A queue databases is VACUUMed when first attached by OpenQueue
    25  func NewQueueSqliteService() (QueueService, error) {
    26      
    27      db, err := sqlite3.Open("sqlite3", ":memory:", sqlite3.Config{
    28          ForeignKeys:  true,
    29          SecureDelete: true,
    30          JournalMode:  sqlite3.JournalModeWAL,
    31      })
    32      if err != nil {
    33          return nil, fmt.Errorf("error opening main database: %+v", err)
    34      }
    35      
    36      return queueSqliteService{
    37          db:      db,
    38      }, nil
    39  }
    40  
    41  func (s queueSqliteService) OpenQueue(name string, path string) (Queue, error) {
    42      return newItemSqliteService(s.db, name, path)
    43  }
    44  
    45  func (s queueSqliteService) Close() error {
    46      return s.db.Close()
    47  }
    48  
    49  

View as plain text