diff options
Diffstat (limited to 'src/discord/store.cpp')
-rw-r--r-- | src/discord/store.cpp | 30 |
1 files changed, 27 insertions, 3 deletions
diff --git a/src/discord/store.cpp b/src/discord/store.cpp index 63fb5f7..1cb7231 100644 --- a/src/discord/store.cpp +++ b/src/discord/store.cpp @@ -765,6 +765,16 @@ std::optional<GuildData> Store::GetGuild(Snowflake id) const { s->Reset(); } + { + auto &s = m_stmt_get_guild_roles; + s->Bind(1, id); + r.Roles.emplace(); + while (s->FetchOne()) { + r.Roles->push_back(GetRoleBound(s)); + } + s->Reset(); + } + return r; } @@ -961,9 +971,17 @@ std::optional<RoleData> Store::GetRole(Snowflake id) const { return {}; } + auto role = GetRoleBound(s); + + s->Reset(); + + return role; +} + +RoleData Store::GetRoleBound(std::unique_ptr<Statement> &s) const { RoleData r; - r.ID = id; + s->Get(0, r.ID); //s->Get(1, guild id); s->Get(2, r.Name); s->Get(3, r.Color); @@ -973,8 +991,6 @@ std::optional<RoleData> Store::GetRole(Snowflake id) const { s->Get(7, r.IsManaged); s->Get(8, r.IsMentionable); - s->Reset(); - return r; } @@ -1726,6 +1742,14 @@ bool Store::CreateStatements() { return false; } + m_stmt_get_guild_roles = std::make_unique<Statement>(m_db, R"( + SELECT * FROM roles WHERE guild = ? + )"); + if (!m_stmt_get_guild_roles->OK()) { + fprintf(stderr, "failed to prepare get guild roles statement: %s\n", m_db.ErrStr()); + return false; + } + m_stmt_set_emoji = std::make_unique<Statement>(m_db, R"( REPLACE INTO emojis VALUES ( ?, ?, ?, ?, ?, ?, ? |