mirror of
https://github.com/aclindsa/moneygo.git
synced 2024-12-26 23:42:29 -05:00
Rebind all SQL queries to acommodate Postgres
This commit is contained in:
parent
f9c234c2f3
commit
00e1e899c0
@ -14,8 +14,6 @@ type ResponseWriterWriter interface {
|
|||||||
Write(http.ResponseWriter) error
|
Write(http.ResponseWriter) error
|
||||||
}
|
}
|
||||||
|
|
||||||
type Tx = gorp.Transaction
|
|
||||||
|
|
||||||
type Context struct {
|
type Context struct {
|
||||||
Tx *Tx
|
Tx *Tx
|
||||||
User *User
|
User *User
|
||||||
@ -51,7 +49,7 @@ type APIHandler struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (ah *APIHandler) txWrapper(h Handler, r *http.Request, context *Context) (writer ResponseWriterWriter) {
|
func (ah *APIHandler) txWrapper(h Handler, r *http.Request, context *Context) (writer ResponseWriterWriter) {
|
||||||
tx, err := ah.DB.Begin()
|
tx, err := GetTx(ah.DB)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Print(err)
|
log.Print(err)
|
||||||
return NewError(999 /*Internal Error*/)
|
return NewError(999 /*Internal Error*/)
|
||||||
|
65
internal/handlers/tx.go
Normal file
65
internal/handlers/tx.go
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
package handlers
|
||||||
|
|
||||||
|
import (
|
||||||
|
"database/sql"
|
||||||
|
"gopkg.in/gorp.v1"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Tx struct {
|
||||||
|
Dialect gorp.Dialect
|
||||||
|
Tx *gorp.Transaction
|
||||||
|
}
|
||||||
|
|
||||||
|
func (tx *Tx) Rebind(query string) string {
|
||||||
|
chunks := strings.Split(query, "?")
|
||||||
|
str := chunks[0]
|
||||||
|
for i := 1; i < len(chunks); i++ {
|
||||||
|
str += tx.Dialect.BindVar(i-1) + chunks[i]
|
||||||
|
}
|
||||||
|
return str
|
||||||
|
}
|
||||||
|
|
||||||
|
func (tx *Tx) Select(i interface{}, query string, args ...interface{}) ([]interface{}, error) {
|
||||||
|
return tx.Tx.Select(i, tx.Rebind(query), args...)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (tx *Tx) Exec(query string, args ...interface{}) (sql.Result, error) {
|
||||||
|
return tx.Tx.Exec(tx.Rebind(query), args...)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (tx *Tx) SelectInt(query string, args ...interface{}) (int64, error) {
|
||||||
|
return tx.Tx.SelectInt(tx.Rebind(query), args...)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (tx *Tx) SelectOne(holder interface{}, query string, args ...interface{}) error {
|
||||||
|
return tx.Tx.SelectOne(holder, tx.Rebind(query), args...)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (tx *Tx) Insert(list ...interface{}) error {
|
||||||
|
return tx.Tx.Insert(list...)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (tx *Tx) Update(list ...interface{}) (int64, error) {
|
||||||
|
return tx.Tx.Update(list...)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (tx *Tx) Delete(list ...interface{}) (int64, error) {
|
||||||
|
return tx.Tx.Delete(list...)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (tx *Tx) Commit() error {
|
||||||
|
return tx.Tx.Commit()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (tx *Tx) Rollback() error {
|
||||||
|
return tx.Tx.Rollback()
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetTx(db *gorp.DbMap) (*Tx, error) {
|
||||||
|
tx, err := db.Begin()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return &Tx{db.Dialect, tx}, nil
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user