- Pre-built prepared query statements
- Remove DB mutex as it is not needed.
- Add mutex around chat client send chan.
- Replace maps in chat with sync.Maps and remove locks around them.
varquery="SELECT messages.id, user_id, body, eventType, hidden_at, timestamp, display_name, display_color, created_at, disabled_at, previous_names, namechanged_at FROM messages INNER JOIN users ON messages.user_id = users.id ORDER BY timestamp DESC"
result:=getChat(query)
if_chatModerationHistoryQuery==nil{
varquery="SELECT messages.id, user_id, body, eventType, hidden_at, timestamp, display_name, display_color, created_at, disabled_at, previous_names, namechanged_at FROM messages INNER JOIN users ON messages.user_id = users.id ORDER BY timestamp DESC"
q,err:=_datastore.DB.Prepare(query)
iferr!=nil{
log.Errorln(err)
return[]events.UserMessageEvent{}
}
_chatModerationHistoryQuery=q
}
result:=getChat(_chatModerationHistoryQuery)
_historyCache=&result
returnresult
}
var_getChatHistoryQuery*sql.Stmt
// GetChatHistory will return all the chat messages suitable for returning as user-facing chat history.
funcGetChatHistory()[]events.UserMessageEvent{
if_getChatHistoryQuery==nil{
varquery=fmt.Sprintf("SELECT messages.id, user_id, body, eventType, hidden_at, timestamp, display_name, display_color, created_at, disabled_at, previous_names, namechanged_at FROM messages, users WHERE messages.user_id = users.id AND hidden_at IS NULL AND disabled_at IS NULL ORDER BY timestamp DESC LIMIT %d",maxBacklogNumber)
q,err:=_datastore.DB.Prepare(query)
iferr!=nil{
log.Errorln(err)
return[]events.UserMessageEvent{}
}
_getChatHistoryQuery=q
}
// Get all visible messages
varquery=fmt.Sprintf("SELECT messages.id, user_id, body, eventType, hidden_at, timestamp, display_name, display_color, created_at, disabled_at, previous_names, namechanged_at FROM messages, users WHERE messages.user_id = users.id AND hidden_at IS NULL AND disabled_at IS NULL ORDER BY timestamp DESC LIMIT %d",maxBacklogNumber)