...
Tawesoft Logo

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

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

     1  package queue
     2  
     3  import (
     4      "database/sql"
     5      "fmt"
     6      
     7      "tawesoft.co.uk/go/sqlp"
     8  )
     9  
    10  type messageSqliteService struct {dbname string}
    11  var nilMessageSqliteService = messageSqliteService{}
    12  
    13  func newMessageSqliteService(db *sql.DB, dbname string) (messageSqliteService, error) {
    14      err := initMessageSqliteService(db, dbname)
    15      if err != nil { return nilMessageSqliteService, err }
    16      
    17      return messageSqliteService{dbname}, nil
    18  }
    19  
    20  func initMessageSqliteService(db *sql.DB, dbname string) error {
    21      _, err := db.Exec(`
    22          CREATE TABLE IF NOT EXISTS `+ dbname +`.messages (
    23              id   INTEGER PRIMARY KEY NOT NULL REFERENCES items(id) ON DELETE CASCADE,
    24              data BLOB NOT NULL
    25          );
    26      `)
    27      if err != nil {
    28          return fmt.Errorf("error initialising messages table: %+v", err)
    29      }
    30      return nil
    31  }
    32  
    33  func (s messageSqliteService) Create(q sqlp.Queryable, itemID ItemID, message string) error {
    34      query := `INSERT INTO `+ s.dbname +`.messages(id, data) VALUES (?, ?)`
    35      
    36      result, err := q.Exec(query, itemID, message)
    37      if err != nil {
    38          return fmt.Errorf("error inserting message: %+v", err)
    39      }
    40      
    41      if n, ok := sqlp.RowsAffectedBetween(result, 1, 1); !ok {
    42          return fmt.Errorf("error creating message %d: rows affected %d != 1", itemID, n)
    43      }
    44      
    45      return nil
    46  }
    47  
    48  

View as plain text