30 lines
1.2 KiB
Go
30 lines
1.2 KiB
Go
|
|
package store
|
||
|
|
|
||
|
|
import "fmt"
|
||
|
|
|
||
|
|
// SQL-шаблоны, которые собираются из заранее известных фрагментов
|
||
|
|
// (имена колонок заданы в коде, значения всегда идут параметрами).
|
||
|
|
// Конкатенация через fmt.Sprintf здесь безопасна и проверяется тестами.
|
||
|
|
|
||
|
|
const updateGuildTemplate = `UPDATE guilds SET %s WHERE id = ?`
|
||
|
|
|
||
|
|
const selectGuildsForUserTemplate = `SELECT %s
|
||
|
|
FROM guilds g JOIN guild_members m ON m.guild_id = g.id
|
||
|
|
WHERE m.user_id = ? ORDER BY g.id`
|
||
|
|
|
||
|
|
const updateChannelTemplate = `UPDATE channels SET %s WHERE id = ?`
|
||
|
|
|
||
|
|
const updateGuildMemberTemplate = `UPDATE guild_members SET %s WHERE guild_id = ? AND user_id = ?`
|
||
|
|
|
||
|
|
const selectMemberRolesTemplate = `SELECT %s
|
||
|
|
FROM member_roles mr JOIN roles r ON r.id = mr.role_id
|
||
|
|
WHERE mr.guild_id = ? AND mr.user_id = ?
|
||
|
|
ORDER BY r.position DESC, r.id`
|
||
|
|
|
||
|
|
// buildQuery подставляет фрагмент SQL в шаблон.
|
||
|
|
func buildQuery(template string, fragment string) string {
|
||
|
|
return fmt.Sprintf(template, fragment)
|
||
|
|
}
|
||
|
|
|
||
|
|
const updateRoleTemplate = `UPDATE roles SET %s WHERE id = ?`
|