summaryrefslogtreecommitdiff
path: root/rddb/rddb.go
diff options
context:
space:
mode:
Diffstat (limited to 'rddb/rddb.go')
-rw-r--r--rddb/rddb.go132
1 files changed, 88 insertions, 44 deletions
diff --git a/rddb/rddb.go b/rddb/rddb.go
index 7937dce..bbf8a1e 100644
--- a/rddb/rddb.go
+++ b/rddb/rddb.go
@@ -410,39 +410,51 @@ type updateCutCartTitleRequest struct {
response chan<- updateCutCartTitleResult
}
+type updateCartUserDefinedResult struct {
+ err error
+}
+
+type updateCartUserDefinedRequest struct {
+ cart uint
+ value string
+ response chan<- updateCartUserDefinedResult
+}
+
type db struct {
- conf *config
- readonly bool
- dbh *sql.DB
- passwordCache map[string]string
- getPasswordChan chan getPasswordRequest
- getPasswordStmt *sql.Stmt
- getGroupOfCartChan chan getGroupOfCartRequest
- getGroupOfCartStmt *sql.Stmt
- getShowInfoChan chan getShowInfoRequest
- getShowInfoStmt *sql.Stmt
- checkMusicGroupChan chan checkMusicGroupRequest
- checkMusicGroupStmt *sql.Stmt
- getMusicInfoChan chan getMusicInfoRequest
- getMusicInfoStmt *sql.Stmt
- getShowListChan chan getShowListRequest
- getShowListStmt *sql.Stmt
- getShowCartListChan chan getShowCartListRequest
- getCartInfoStmt *sql.Stmt
- getCutInfoStmt *sql.Stmt
- getJingleListChan chan getJingleListRequest
- getJingleListStmt *sql.Stmt
- getJingleCutListChan chan getJingleCutListRequest
- getPoolListChan chan getPoolListRequest
- getPoolListStmt *sql.Stmt
- getPoolCartListChan chan getPoolCartListRequest
- getPoolCartsStmt *sql.Stmt
- updateCutCartTitleChan chan updateCutCartTitleRequest
- getGroupDefaultTitleStmt *sql.Stmt
- updateCutTitleStmt *sql.Stmt
- updateCartTitleMaybeStmt *sql.Stmt
- quit chan bool
- done chan bool
+ conf *config
+ readonly bool
+ dbh *sql.DB
+ passwordCache map[string]string
+ getPasswordChan chan getPasswordRequest
+ getPasswordStmt *sql.Stmt
+ getGroupOfCartChan chan getGroupOfCartRequest
+ getGroupOfCartStmt *sql.Stmt
+ getShowInfoChan chan getShowInfoRequest
+ getShowInfoStmt *sql.Stmt
+ checkMusicGroupChan chan checkMusicGroupRequest
+ checkMusicGroupStmt *sql.Stmt
+ getMusicInfoChan chan getMusicInfoRequest
+ getMusicInfoStmt *sql.Stmt
+ getShowListChan chan getShowListRequest
+ getShowListStmt *sql.Stmt
+ getShowCartListChan chan getShowCartListRequest
+ getCartInfoStmt *sql.Stmt
+ getCutInfoStmt *sql.Stmt
+ getJingleListChan chan getJingleListRequest
+ getJingleListStmt *sql.Stmt
+ getJingleCutListChan chan getJingleCutListRequest
+ getPoolListChan chan getPoolListRequest
+ getPoolListStmt *sql.Stmt
+ getPoolCartListChan chan getPoolCartListRequest
+ getPoolCartsStmt *sql.Stmt
+ updateCutCartTitleChan chan updateCutCartTitleRequest
+ getGroupDefaultTitleStmt *sql.Stmt
+ updateCutTitleStmt *sql.Stmt
+ updateCartTitleMaybeStmt *sql.Stmt
+ updateCartUserDefinedChan chan updateCartUserDefinedRequest
+ updateCartUserDefinedStmt *sql.Stmt
+ quit chan bool
+ done chan bool
}
func (d *db) init() (err error) {
@@ -508,6 +520,9 @@ func (d *db) init() (err error) {
if d.updateCartTitleMaybeStmt, err = d.dbh.Prepare("update CART set TITLE = ? where NUMBER = ? and TITLE = ?;"); err != nil {
return
}
+ if d.updateCartUserDefinedStmt, err = d.dbh.Prepare("update CART set USER_DEFINED = ? where NUMBER = ?;"); err != nil {
+ return
+ }
}
return
@@ -878,6 +893,15 @@ func (d *db) updateCutCartTitle(cart, cut uint, groupName, sourceFile string) (r
return
}
+func (d *db) updateCartUserDefined(cart uint, value string) (result updateCartUserDefinedResult) {
+ if d.readonly {
+ result.err = fmt.Errorf("updating Cart User-defined value prohibited: read-only database connection")
+ return
+ }
+ _, result.err = d.updateCartUserDefinedStmt.Exec(value, cart)
+ return
+}
+
func (d *db) dispatchRequests() {
defer func() { d.done <- true }()
for {
@@ -908,6 +932,8 @@ func (d *db) dispatchRequests() {
req.response <- d.getPoolCartList(req.pool)
case req := <-d.updateCutCartTitleChan:
req.response <- d.updateCutCartTitle(req.cart, req.cut, req.groupName, req.sourceFile)
+ case req := <-d.updateCartUserDefinedChan:
+ req.response <- d.updateCartUserDefined(req.cart, req.value)
}
}
}
@@ -916,18 +942,19 @@ func (d *db) dispatchRequests() {
// Public Interface
type DB struct {
- getPasswordChan chan<- getPasswordRequest
- getGroupOfCartChan chan<- getGroupOfCartRequest
- getShowInfoChan chan<- getShowInfoRequest
- checkMusicGroupChan chan<- checkMusicGroupRequest
- getMusicInfoChan chan<- getMusicInfoRequest
- getShowListChan chan<- getShowListRequest
- getShowCartListChan chan<- getShowCartListRequest
- getJingleListChan chan<- getJingleListRequest
- getJingleCutListChan chan<- getJingleCutListRequest
- getPoolListChan chan<- getPoolListRequest
- getPoolCartListChan chan<- getPoolCartListRequest
- updateCutCartTitleChan chan<- updateCutCartTitleRequest
+ getPasswordChan chan<- getPasswordRequest
+ getGroupOfCartChan chan<- getGroupOfCartRequest
+ getShowInfoChan chan<- getShowInfoRequest
+ checkMusicGroupChan chan<- checkMusicGroupRequest
+ getMusicInfoChan chan<- getMusicInfoRequest
+ getShowListChan chan<- getShowListRequest
+ getShowCartListChan chan<- getShowCartListRequest
+ getJingleListChan chan<- getJingleListRequest
+ getJingleCutListChan chan<- getJingleCutListRequest
+ getPoolListChan chan<- getPoolListRequest
+ getPoolCartListChan chan<- getPoolCartListRequest
+ updateCutCartTitleChan chan<- updateCutCartTitleRequest
+ updateCartUserDefinedChan chan<- updateCartUserDefinedRequest
}
func (d *DB) GetPassword(username string, cached bool) (string, error) {
@@ -1123,6 +1150,18 @@ func (d *DB) UpdateCutCartTitle(cart, cut uint, groupName, sourceFile string) er
return res.err
}
+func (d *DB) UpdateCartUserDefined(cart uint, value string) error {
+ resCh := make(chan updateCartUserDefinedResult)
+ req := updateCartUserDefinedRequest{}
+ req.cart = cart
+ req.value = value
+ req.response = resCh
+ d.updateCartUserDefinedChan <- req
+
+ res := <-resCh
+ return res.err
+}
+
func (d *db) GetInterface() *DB {
ch := &DB{}
ch.getPasswordChan = d.getPasswordChan
@@ -1137,6 +1176,7 @@ func (d *db) GetInterface() *DB {
ch.getPoolListChan = d.getPoolListChan
ch.getPoolCartListChan = d.getPoolCartListChan
ch.updateCutCartTitleChan = d.updateCutCartTitleChan
+ ch.updateCartUserDefinedChan = d.updateCartUserDefinedChan
return ch
}
@@ -1191,6 +1231,9 @@ func (d *db) Cleanup() {
if d.updateCartTitleMaybeStmt != nil {
d.updateCartTitleMaybeStmt.Close()
}
+ if d.updateCartUserDefinedStmt != nil {
+ d.updateCartUserDefinedStmt.Close()
+ }
}
@@ -1215,6 +1258,7 @@ func newDB(configfile string, readonly bool) (d *db, err error) {
d.getPoolListChan = make(chan getPoolListRequest, 10)
d.getPoolCartListChan = make(chan getPoolCartListRequest, 10)
d.updateCutCartTitleChan = make(chan updateCutCartTitleRequest, 10)
+ d.updateCartUserDefinedChan = make(chan updateCartUserDefinedRequest, 10)
if err = d.init(); err != nil {
return