Add: singleThreadLock for sqlite performance, and change Db.Tag method

This commit is contained in:
2021-12-15 02:53:41 +08:00
parent 1c14997b85
commit 97083114fb
8 changed files with 146 additions and 16 deletions

View File

@@ -1,6 +1,9 @@
package database
func (database *Database) Login(username string, password string) (*User, error) {
database.singleThreadLock.Lock()
defer database.singleThreadLock.Unlock()
user := &User{}
// get user from database
@@ -12,6 +15,9 @@ func (database *Database) Login(username string, password string) (*User, error)
}
func (database *Database) LoginAsAnonymous() (*User, error) {
database.singleThreadLock.Lock()
defer database.singleThreadLock.Unlock()
user := &User{}
// get user from database
@@ -38,6 +44,9 @@ func (database *Database) Register(username string, password string, usertype in
active = true
}
database.singleThreadLock.Lock()
defer database.singleThreadLock.Unlock()
_, err = database.stmt.insertUser.Exec(username, password, usertype, active, 0)
if err != nil {
return err
@@ -48,6 +57,9 @@ func (database *Database) Register(username string, password string, usertype in
func (database *Database) GetUserById(id int64) (*User, error) {
user := &User{}
database.singleThreadLock.Lock()
defer database.singleThreadLock.Unlock()
// get user from database
err := database.stmt.getUserById.QueryRow(id).Scan(&user.ID, &user.Username, &user.Role, &user.Active, &user.AvatarId)
if err != nil {
@@ -58,6 +70,10 @@ func (database *Database) GetUserById(id int64) (*User, error) {
func (database *Database) CountAdmin() (int64, error) {
var count int64
database.singleThreadLock.Lock()
defer database.singleThreadLock.Unlock()
err := database.stmt.countAdmin.QueryRow().Scan(&count)
if err != nil {
return 0, err
@@ -68,6 +84,9 @@ func (database *Database) CountAdmin() (int64, error) {
func (database *Database) GetUsers() ([]*User, error) {
users := make([]*User, 0)
database.singleThreadLock.Lock()
defer database.singleThreadLock.Unlock()
rows, err := database.stmt.getUsers.Query()
if err != nil {
return nil, err
@@ -86,6 +105,9 @@ func (database *Database) GetUsers() ([]*User, error) {
}
func (database *Database) UpdateUserActive(id int64, active bool) error {
database.singleThreadLock.Lock()
defer database.singleThreadLock.Unlock()
_, err := database.stmt.updateUserActive.Exec(active, id)
if err != nil {
return err
@@ -94,6 +116,9 @@ func (database *Database) UpdateUserActive(id int64, active bool) error {
}
func (database *Database) UpdateUsername(id int64, username string) error {
database.singleThreadLock.Lock()
defer database.singleThreadLock.Unlock()
_, err := database.stmt.updateUsername.Exec(username, id)
if err != nil {
return err
@@ -102,6 +127,9 @@ func (database *Database) UpdateUsername(id int64, username string) error {
}
func (database *Database) UpdateUserPassword(id int64, password string) error {
database.singleThreadLock.Lock()
defer database.singleThreadLock.Unlock()
_, err := database.stmt.updateUserPassword.Exec(password, id)
if err != nil {
return err