Skip to content

Instantly share code, notes, and snippets.

@thePunderWoman
Last active December 16, 2015 08:39
Show Gist options
  • Save thePunderWoman/5406876 to your computer and use it in GitHub Desktop.
Save thePunderWoman/5406876 to your computer and use it in GitHub Desktop.
Prepared Statements with go routines to run the preparation method
// Prepare all MySQL statements
func PrepareAll() error {
UnPreparedStatements := make(map[string]string, 0)
UnPreparedStatements["authenticateUserStmt"] = "select * from user where username=? and encpassword=? and isActive = 1"
UnPreparedStatements["getUserByIDStmt"] = "select * from user where id=?"
UnPreparedStatements["getUserByUsernameStmt"] = "select * from user where username=?"
UnPreparedStatements["getUserByEmailStmt"] = "select * from user where email=?"
UnPreparedStatements["allUserStmt"] = "select * from user"
UnPreparedStatements["userModulesStmt"] = "select module.* from module inner join user_module on module.id = user_module.moduleID where user_module.userID = ? order by module"
UnPreparedStatements["setUserPasswordStmt"] = "update user set encpassword = ? where id = ?"
Statements = make(map[string]mysql.Stmt, 0)
if !AdminDb.IsConnected() {
AdminDb.Connect()
}
for stmtname, stmtsql := range UnPreparedStatements {
go PrepareStatement(stmtsql, stmtname)
}
return nil
}
func PrepareStatement(sql string, name string) {
stmt, err := AdminDb.Prepare(sql)
if err == nil {
Statements[name] = stmt
}
}
package database
import (
"errors"
"expvar"
"github.com/ziutek/mymysql/mysql"
"log"
)
// prepared statements go here
var (
Statements map[string]mysql.Stmt
)
// Prepare all MySQL statements
func PrepareAll() error {
UnPreparedStatements := make(map[string]string, 0)
UnPreparedStatements["authenticateUserStmt"] = "select * from user where username=? and encpassword=? and isActive = 1"
UnPreparedStatements["getUserByIDStmt"] = "select * from user where id=?"
UnPreparedStatements["getUserByUsernameStmt"] = "select * from user where username=?"
UnPreparedStatements["getUserByEmailStmt"] = "select * from user where email=?"
UnPreparedStatements["allUserStmt"] = "select * from user"
UnPreparedStatements["userModulesStmt"] = "select module.* from module inner join user_module on module.id = user_module.moduleID where user_module.userID = ? order by module"
UnPreparedStatements["setUserPasswordStmt"] = "update user set encpassword = ? where id = ?"
Statements = make(map[string]mysql.Stmt, 0)
if !AdminDb.IsConnected() {
AdminDb.Connect()
}
c := make(chan int)
for stmtname, stmtsql := range UnPreparedStatements {
go PrepareStatement(stmtname, stmtsql, c)
}
for _, _ = range UnPreparedStatements {
<-c
}
return nil
}
func PrepareStatement(name string, sql string, ch chan int) {
stmt, err := AdminDb.Prepare(sql)
if err == nil {
Statements[name] = stmt
}
ch <- 1
}
func GetStatement(key string) (stmt mysql.Stmt, err error) {
stmt, ok := Statements[key]
if !ok {
qry := expvar.Get(key)
if qry == nil {
err = errors.New("Invalid query reference")
}
}
return
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment