...
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