-
Notifications
You must be signed in to change notification settings - Fork 18.3k
Open
Labels
NeedsInvestigationSomeone must examine and confirm this is a valid issue and not a duplicate of an existing one.Someone must examine and confirm this is a valid issue and not a duplicate of an existing one.
Milestone
Description
Hi,
I'm proposing a interface that implements all functions in sql.DB
and sql.Tx
that takes a query string
as one of its arguments. This could be useful when implementing "dumb" functions that retrieves information but in itself dose not need to be prepared however might be used to verify whether to commit or rollback.
The interface I'm proposing is: (The name can of course be changed)
type QueryAble interface {
Exec(query string, args ...interface{}) (sql.Result, error)
Prepare(query string) (*sql.Stmt, error)
Query(query string, args ...interface{}) (*sql.Rows, error)
QueryRow(query string, args ...interface{}) *sql.Row
}
This is an example function Get
that can be used with or without transactions.
func Get (q Queryable)(int){
var test int
res , _ := q.Query("SELECT COUNT(*) FROM table;")
res.Next()
res.Scan(&test)
res.Close()
return test
}
func GetExample(db *sql.DB){
//When you just want to retrieve the information, no need for a transaction
fmt.Printf("Current len of Table %d\n", Get(db))
//Make a change
tx, _ :=db.Begin()
// Add data to table
if Get(tx) > 2 {
fmt.Printf("Table to large: %d robacking to: %d \n", Get(tx) , Get(db))
tx.Rollback()
} else {
fmt.Printf("Table update new len %d\n", Get(tx))
tx.Commit()
}
}
reezer, charlieschwabacher, JWo1F, infogulch, wkhere and 107 morecznic, mauipipe and slrzcodesoap, frederikhors, fadlmms and mxmaxime
Metadata
Metadata
Assignees
Labels
NeedsInvestigationSomeone must examine and confirm this is a valid issue and not a duplicate of an existing one.Someone must examine and confirm this is a valid issue and not a duplicate of an existing one.