Browse Source

Use pre-built sql statements in queries

gek/load-tests
Gabe Kangas 3 years ago
parent
commit
8c6d84575e
No known key found for this signature in database
GPG Key ID: 9A56337728BC81EA
  1. 40
      core/user/user.go

40
core/user/user.go

@ -132,31 +132,26 @@ func addAccessTokenForUser(accessToken, userID string) error {
}) })
} }
var createUserStatement *sql.Stmt
func create(user *User) error { func create(user *User) error {
_datastore.DbLock.Lock() _datastore.DbLock.Lock()
defer _datastore.DbLock.Unlock() defer _datastore.DbLock.Unlock()
tx, err := _datastore.DB.Begin() if createUserStatement == nil {
if err != nil { stmt, err := _datastore.DB.Prepare("INSERT INTO users(id, access_token, display_name, display_color, previous_names, created_at) values(?, ?, ?, ?, ?, ?)")
log.Debugln(err) if err != nil {
return errors.Wrap(err, "error preparing create user statement")
}
createUserStatement = stmt
} }
defer func() {
_ = tx.Rollback()
}()
stmt, err := tx.Prepare("INSERT INTO users(id, display_name, display_color, previous_names, created_at) values(?, ?, ?, ?, ?)") _, err := createUserStatement.Exec(user.ID, user.AccessToken, user.DisplayName, user.DisplayColor, user.DisplayName, user.CreatedAt)
if err != nil { if err != nil {
log.Debugln(err) return errors.Wrap(err, "error creating user")
} }
defer stmt.Close()
_, err = stmt.Exec(user.ID, user.DisplayName, user.DisplayColor, user.DisplayName, user.CreatedAt) return nil
if err != nil {
log.Errorln("error creating new user", err)
return err
}
return tx.Commit()
} }
// SetEnabled will set the enabled status of a single user by ID. // SetEnabled will set the enabled status of a single user by ID.
@ -191,6 +186,8 @@ func SetEnabled(userID string, enabled bool) error {
return tx.Commit() return tx.Commit()
} }
var cachedGUserByTokenStatement *sql.Stmt
// GetUserByToken will return a user by an access token. // GetUserByToken will return a user by an access token.
func GetUserByToken(token string) *User { func GetUserByToken(token string) *User {
u, err := _datastore.GetQueries().GetUserByAccessToken(context.Background(), token) u, err := _datastore.GetQueries().GetUserByAccessToken(context.Background(), token)
@ -198,10 +195,15 @@ func GetUserByToken(token string) *User {
return nil return nil
} }
var scopes []string if cachedGUserByTokenStatement == nil {
if u.Scopes.Valid { stmt, err := _datastore.DB.Prepare("SELECT id, display_name, display_color, created_at, disabled_at, previous_names, namechanged_at, scopes FROM users WHERE access_token = ?")
scopes = strings.Split(u.Scopes.String, ",") if err != nil {
log.Errorln(err)
return nil
}
cachedGUserByTokenStatement = stmt
} }
row := cachedGUserByTokenStatement.QueryRow(token)
var disabledAt *time.Time var disabledAt *time.Time
if u.DisabledAt.Valid { if u.DisabledAt.Valid {

Loading…
Cancel
Save