Compare commits
2 Commits
current
...
jude/restr
Author | SHA1 | Date | |
---|---|---|---|
02c5b05500 | |||
19cfacffe5 |
12676
gb-ipv4.csv
12676
gb-ipv4.csv
File diff suppressed because it is too large
Load Diff
79
migrations/20250506184716_remove_unused_columns.sql
Normal file
79
migrations/20250506184716_remove_unused_columns.sql
Normal file
@ -0,0 +1,79 @@
|
||||
-- Drop all old tables
|
||||
DROP TABLE IF EXISTS users_old;
|
||||
DROP TABLE IF EXISTS messages;
|
||||
DROP TABLE IF EXISTS embeds;
|
||||
DROP TABLE IF EXISTS embed_fields;
|
||||
DROP TABLE IF EXISTS command_aliases;
|
||||
DROP TABLE IF EXISTS macro;
|
||||
DROP TABLE IF EXISTS roles;
|
||||
|
||||
-- Drop columns from channels that are no longer used
|
||||
ALTER TABLE channels DROP COLUMN `name`;
|
||||
ALTER TABLE channels DROP COLUMN `blacklisted`;
|
||||
|
||||
-- Drop columns from guilds table that are no longer used and rebuild table
|
||||
CREATE TABLE guilds_new (
|
||||
id BIGINT UNSIGNED NOT NULL PRIMARY KEY,
|
||||
ephemeral_confirmations BOOLEAN NOT NULL DEFAULT 0
|
||||
);
|
||||
INSERT INTO guilds_new (id, ephemeral_confirmations) SELECT guild, ephemeral_confirmations FROM guilds;
|
||||
RENAME TABLE guilds TO guilds_old;
|
||||
RENAME TABLE guilds_new TO guilds;
|
||||
|
||||
-- Update fk on channels to point at new guild table
|
||||
ALTER TABLE channels
|
||||
DROP FOREIGN KEY `channels_ibfk_1`,
|
||||
MODIFY COLUMN guild_id BIGINT UNSIGNED,
|
||||
ADD FOREIGN KEY `fk_guild_id` (`guild_id`)
|
||||
REFERENCES `guilds` (`id`)
|
||||
ON DELETE CASCADE
|
||||
ON UPDATE CASCADE;
|
||||
UPDATE channels SET guild_id = (SELECT guild FROM guilds_old WHERE id = guild_id);
|
||||
|
||||
-- Rebuild todos table
|
||||
CREATE TABLE `todos_new` (
|
||||
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`guild_id` BIGINT UNSIGNED DEFAULT NULL,
|
||||
`channel_id` INT UNSIGNED DEFAULT NULL,
|
||||
`user_id` BIGINT UNSIGNED DEFAULT NULL,
|
||||
`value` VARCHAR(2000) NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
FOREIGN KEY `fk_channel_id` (`channel_id`)
|
||||
REFERENCES `channels` (`id`)
|
||||
ON DELETE SET NULL
|
||||
ON UPDATE CASCADE,
|
||||
FOREIGN KEY `fk_guild_id` (`guild_id`)
|
||||
REFERENCES `guilds` (`id`)
|
||||
ON DELETE CASCADE
|
||||
ON UPDATE CASCADE,
|
||||
FOREIGN KEY `fk_user_id` (`user_id`)
|
||||
REFERENCES `users` (`id`)
|
||||
ON DELETE SET NULL
|
||||
ON UPDATE CASCADE
|
||||
);
|
||||
INSERT INTO todos_new (id, guild_id, channel_id, user_id, value) SELECT id, (SELECT guild FROM guilds_old WHERE id = guild_id), channel_id, user_id, value FROM todos;
|
||||
RENAME TABLE todos TO todos_old;
|
||||
RENAME TABLE todos_new TO todos;
|
||||
DROP TABLE todos_old;
|
||||
|
||||
-- Update fk on reminder_template to point at new guild table
|
||||
ALTER TABLE reminder_template
|
||||
DROP FOREIGN KEY `reminder_template_ibfk_1`,
|
||||
MODIFY COLUMN guild_id BIGINT UNSIGNED NOT NULL,
|
||||
ADD FOREIGN KEY `fk_guild_id` (`guild_id`)
|
||||
REFERENCES `guilds` (`id`)
|
||||
ON DELETE CASCADE
|
||||
ON UPDATE CASCADE;
|
||||
UPDATE reminder_template SET guild_id = (SELECT guild FROM guilds_old WHERE id = guild_id);
|
||||
|
||||
-- Update fk on command_macro to point at new guild table
|
||||
ALTER TABLE command_macro
|
||||
DROP FOREIGN KEY `command_macro_ibfk_1`,
|
||||
MODIFY COLUMN guild_id BIGINT UNSIGNED NOT NULL,
|
||||
ADD FOREIGN KEY `fk_guild_id` (`guild_id`)
|
||||
REFERENCES `guilds` (`id`)
|
||||
ON DELETE CASCADE
|
||||
ON UPDATE CASCADE;
|
||||
UPDATE command_macro SET guild_id = (SELECT guild FROM guilds_old WHERE id = guild_id);
|
||||
|
||||
DROP TABLE guilds_old;
|
@ -21,7 +21,7 @@ impl Recordable for Options {
|
||||
"
|
||||
INSERT INTO todos (guild_id, channel_id, value)
|
||||
VALUES (
|
||||
(SELECT id FROM guilds WHERE guild = ?),
|
||||
?,
|
||||
(SELECT id FROM channels WHERE channel = ?),
|
||||
?
|
||||
)
|
||||
|
@ -23,7 +23,7 @@ pub async fn listener(
|
||||
if is_new.unwrap_or(false) {
|
||||
let guild_id = guild.id.get().to_owned();
|
||||
|
||||
sqlx::query!("INSERT IGNORE INTO guilds (guild) VALUES (?)", guild_id)
|
||||
sqlx::query!("INSERT IGNORE INTO guilds (id) VALUES (?)", guild_id)
|
||||
.execute(&data.database)
|
||||
.await?;
|
||||
|
||||
@ -56,7 +56,7 @@ To stay up to date on the latest features and fixes, join our [Discord](https://
|
||||
}
|
||||
FullEvent::GuildDelete { incomplete, .. } => {
|
||||
if !incomplete.unavailable {
|
||||
let _ = sqlx::query!("DELETE FROM guilds WHERE guild = ?", incomplete.id.get())
|
||||
let _ = sqlx::query!("DELETE FROM guilds WHERE id = ?", incomplete.id.get())
|
||||
.execute(&data.database)
|
||||
.await;
|
||||
}
|
||||
|
@ -8,9 +8,7 @@ use crate::{consts::DEFAULT_AVATAR, Error};
|
||||
pub struct ChannelData {
|
||||
pub id: u32,
|
||||
pub channel: u64,
|
||||
pub name: Option<String>,
|
||||
pub nudge: i16,
|
||||
pub blacklisted: bool,
|
||||
pub webhook_id: Option<u64>,
|
||||
pub webhook_token: Option<String>,
|
||||
pub paused: bool,
|
||||
@ -27,7 +25,7 @@ impl ChannelData {
|
||||
if let Ok(c) = sqlx::query_as_unchecked!(
|
||||
Self,
|
||||
"
|
||||
SELECT id, channel, name, nudge, blacklisted, webhook_id, webhook_token, paused,
|
||||
SELECT id, channel, nudge, webhook_id, webhook_token, paused,
|
||||
paused_until
|
||||
FROM channels
|
||||
WHERE channel = ?
|
||||
@ -39,15 +37,11 @@ impl ChannelData {
|
||||
{
|
||||
Ok(c)
|
||||
} else {
|
||||
let props = channel.to_owned().guild().map(|g| (g.guild_id.get().to_owned(), g.name));
|
||||
|
||||
let (guild_id, channel_name) =
|
||||
if let Some((a, b)) = props { (Some(a), Some(b)) } else { (None, None) };
|
||||
let guild_id = channel.to_owned().guild().map(|g| g.guild_id.get().to_owned());
|
||||
|
||||
sqlx::query!(
|
||||
"INSERT IGNORE INTO channels (channel, name, guild_id) VALUES (?, ?, (SELECT id FROM guilds WHERE guild = ?))",
|
||||
"INSERT IGNORE INTO channels (channel, guild_id) VALUES (?, ?)",
|
||||
channel_id,
|
||||
channel_name,
|
||||
guild_id
|
||||
)
|
||||
.execute(&pool.clone())
|
||||
@ -56,7 +50,7 @@ impl ChannelData {
|
||||
Ok(sqlx::query_as_unchecked!(
|
||||
Self,
|
||||
"
|
||||
SELECT id, channel, name, nudge, blacklisted, webhook_id, webhook_token, paused, paused_until
|
||||
SELECT id, channel, nudge, webhook_id, webhook_token, paused, paused_until
|
||||
FROM channels
|
||||
WHERE channel = ?
|
||||
",
|
||||
@ -72,18 +66,14 @@ impl ChannelData {
|
||||
"
|
||||
UPDATE channels
|
||||
SET
|
||||
name = ?,
|
||||
nudge = ?,
|
||||
blacklisted = ?,
|
||||
webhook_id = ?,
|
||||
webhook_token = ?,
|
||||
paused = ?,
|
||||
paused_until = ?
|
||||
WHERE id = ?
|
||||
",
|
||||
self.name,
|
||||
self.nudge,
|
||||
self.blacklisted,
|
||||
self.webhook_id,
|
||||
self.webhook_token,
|
||||
self.paused,
|
||||
|
@ -3,7 +3,7 @@ use sqlx::MySqlPool;
|
||||
|
||||
pub struct GuildData {
|
||||
pub ephemeral_confirmations: bool,
|
||||
pub id: u32,
|
||||
pub guild_id: u64,
|
||||
}
|
||||
|
||||
impl GuildData {
|
||||
@ -13,7 +13,7 @@ impl GuildData {
|
||||
) -> Result<Self, Box<dyn std::error::Error + Sync + Send>> {
|
||||
if let Ok(c) = sqlx::query_as_unchecked!(
|
||||
Self,
|
||||
"SELECT id, ephemeral_confirmations FROM guilds WHERE guild = ?",
|
||||
"SELECT ephemeral_confirmations, id as guild_id FROM guilds WHERE id = ?",
|
||||
guild_id.get()
|
||||
)
|
||||
.fetch_one(pool)
|
||||
@ -21,13 +21,13 @@ impl GuildData {
|
||||
{
|
||||
Ok(c)
|
||||
} else {
|
||||
sqlx::query!("INSERT IGNORE INTO guilds (guild) VALUES (?)", guild_id.get())
|
||||
sqlx::query!("INSERT IGNORE INTO guilds (id) VALUES (?)", guild_id.get())
|
||||
.execute(&pool.clone())
|
||||
.await?;
|
||||
|
||||
Ok(sqlx::query_as_unchecked!(
|
||||
Self,
|
||||
"SELECT id, ephemeral_confirmations FROM guilds WHERE guild = ?",
|
||||
"SELECT ephemeral_confirmations, id as guild_id FROM guilds WHERE id = ?",
|
||||
guild_id.get()
|
||||
)
|
||||
.fetch_one(pool)
|
||||
@ -39,7 +39,7 @@ impl GuildData {
|
||||
sqlx::query!(
|
||||
"UPDATE guilds SET ephemeral_confirmations = ? WHERE id = ?",
|
||||
self.ephemeral_confirmations,
|
||||
self.id
|
||||
self.guild_id
|
||||
)
|
||||
.execute(pool)
|
||||
.await
|
||||
|
@ -68,16 +68,19 @@ impl Data {
|
||||
guild_id: GuildId,
|
||||
) -> Result<Vec<CommandMacro>, Error> {
|
||||
let rows = sqlx::query!(
|
||||
"SELECT name, description, commands FROM command_macro WHERE guild_id = (SELECT id FROM guilds WHERE guild = ?)",
|
||||
"SELECT name, description, commands FROM command_macro WHERE guild_id = ?",
|
||||
guild_id.get()
|
||||
)
|
||||
.fetch_all(&self.database)
|
||||
.await?.iter().map(|row| CommandMacro {
|
||||
.await?
|
||||
.iter()
|
||||
.map(|row| CommandMacro {
|
||||
guild_id,
|
||||
name: row.name.clone(),
|
||||
description: row.description.clone(),
|
||||
commands: serde_json::from_str(&row.commands.to_string()).unwrap(),
|
||||
}).collect();
|
||||
})
|
||||
.collect();
|
||||
|
||||
Ok(rows)
|
||||
}
|
||||
|
@ -262,7 +262,7 @@ impl Reminder {
|
||||
channels.id = reminders.channel_id
|
||||
WHERE
|
||||
`status` = 'pending' AND
|
||||
channels.guild_id = (SELECT id FROM guilds WHERE guild = ?)
|
||||
channels.guild_id = ?
|
||||
",
|
||||
guild_id.get()
|
||||
)
|
||||
|
@ -31,7 +31,7 @@ pub async fn get_reminder_templates(
|
||||
|
||||
match sqlx::query_as_unchecked!(
|
||||
ReminderTemplate,
|
||||
"SELECT * FROM reminder_template WHERE guild_id = (SELECT id FROM guilds WHERE guild = ?)",
|
||||
"SELECT * FROM reminder_template WHERE guild_id = ?",
|
||||
id
|
||||
)
|
||||
.fetch_all(pool.inner())
|
||||
@ -87,7 +87,7 @@ pub async fn delete_reminder_template(
|
||||
check_authorization(cookies, ctx.inner(), id).await?;
|
||||
|
||||
match sqlx::query!(
|
||||
"DELETE FROM reminder_template WHERE guild_id = (SELECT id FROM guilds WHERE guild = ?) AND id = ?",
|
||||
"DELETE FROM reminder_template WHERE guild_id = ? AND id = ?",
|
||||
id, delete_reminder_template.id
|
||||
)
|
||||
.fetch_all(pool.inner())
|
||||
|
@ -66,7 +66,7 @@ pub async fn create_todo(
|
||||
"
|
||||
INSERT INTO todos (guild_id, channel_id, value)
|
||||
VALUES (
|
||||
(SELECT id FROM guilds WHERE guild = ?),
|
||||
?,
|
||||
(SELECT id FROM channels WHERE channel = ?),
|
||||
?
|
||||
)
|
||||
@ -88,7 +88,7 @@ pub async fn create_todo(
|
||||
"
|
||||
INSERT INTO todos (guild_id, channel_id, value)
|
||||
VALUES (
|
||||
(SELECT id FROM guilds WHERE guild = ?),
|
||||
?,
|
||||
NULL,
|
||||
?
|
||||
)
|
||||
@ -130,11 +130,9 @@ pub async fn get_todo(
|
||||
channels.channel AS channel_id,
|
||||
value
|
||||
FROM todos
|
||||
INNER JOIN guilds
|
||||
ON guilds.id = todos.guild_id
|
||||
LEFT JOIN channels
|
||||
ON channels.id = todos.channel_id
|
||||
WHERE guilds.guild = ?
|
||||
WHERE todos.guild_id = ?
|
||||
",
|
||||
id
|
||||
)
|
||||
@ -167,7 +165,7 @@ pub async fn update_todo(
|
||||
"
|
||||
UPDATE todos
|
||||
SET value = ?
|
||||
WHERE guild_id = (SELECT id FROM guilds WHERE guild = ?)
|
||||
WHERE guild_id = ?
|
||||
AND id = ?
|
||||
",
|
||||
todo.value,
|
||||
@ -202,7 +200,7 @@ pub async fn delete_todo(
|
||||
sqlx::query!(
|
||||
"
|
||||
DELETE FROM todos
|
||||
WHERE guild_id = (SELECT id FROM guilds WHERE guild = ?)
|
||||
WHERE guild_id = ?
|
||||
AND id = ?
|
||||
",
|
||||
guild_id,
|
||||
|
@ -39,28 +39,31 @@ pub async fn export(
|
||||
|
||||
match sqlx::query_as_unchecked!(
|
||||
ReminderTemplateCsv,
|
||||
"SELECT
|
||||
name,
|
||||
attachment,
|
||||
attachment_name,
|
||||
avatar,
|
||||
content,
|
||||
embed_author,
|
||||
embed_author_url,
|
||||
embed_color,
|
||||
embed_description,
|
||||
embed_footer,
|
||||
embed_footer_url,
|
||||
embed_image_url,
|
||||
embed_thumbnail_url,
|
||||
embed_title,
|
||||
embed_fields,
|
||||
interval_seconds,
|
||||
interval_days,
|
||||
interval_months,
|
||||
tts,
|
||||
username
|
||||
FROM reminder_template WHERE guild_id = (SELECT id FROM guilds WHERE guild = ?)",
|
||||
"
|
||||
SELECT
|
||||
name,
|
||||
attachment,
|
||||
attachment_name,
|
||||
avatar,
|
||||
content,
|
||||
embed_author,
|
||||
embed_author_url,
|
||||
embed_color,
|
||||
embed_description,
|
||||
embed_footer,
|
||||
embed_footer_url,
|
||||
embed_image_url,
|
||||
embed_thumbnail_url,
|
||||
embed_title,
|
||||
embed_fields,
|
||||
interval_seconds,
|
||||
interval_days,
|
||||
interval_months,
|
||||
tts,
|
||||
username
|
||||
FROM reminder_template
|
||||
WHERE guild_id = ?
|
||||
",
|
||||
id
|
||||
)
|
||||
.fetch_all(pool.inner())
|
||||
|
@ -38,10 +38,11 @@ pub async fn export(
|
||||
|
||||
match sqlx::query_as_unchecked!(
|
||||
TodoCsv,
|
||||
"SELECT value, CONCAT('#', channels.channel) AS channel_id FROM todos
|
||||
"
|
||||
SELECT value, CONCAT('#', channels.channel) AS channel_id FROM todos
|
||||
LEFT JOIN channels ON todos.channel_id = channels.id
|
||||
INNER JOIN guilds ON todos.guild_id = guilds.id
|
||||
WHERE guilds.guild = ?",
|
||||
INNER JOIN guilds ON todos.guild_id = ?
|
||||
",
|
||||
id
|
||||
)
|
||||
.fetch_all(pool.inner())
|
||||
@ -96,7 +97,7 @@ pub async fn import(
|
||||
Ok(body) => {
|
||||
let mut reader = csv::Reader::from_reader(body.as_slice());
|
||||
|
||||
let query_placeholder = "(?, (SELECT id FROM channels WHERE channel = ?), (SELECT id FROM guilds WHERE guild = ?))";
|
||||
let query_placeholder = "(?, (SELECT id FROM channels WHERE channel = ?), ?)";
|
||||
let mut query_params = vec![];
|
||||
|
||||
for result in reader.deserialize::<TodoCsv>() {
|
||||
|
@ -373,12 +373,12 @@ pub(crate) async fn create_reminder(
|
||||
reminder: CreateReminder,
|
||||
) -> JsonResult {
|
||||
// check guild in db
|
||||
match sqlx::query!("SELECT 1 as A FROM guilds WHERE guild = ?", guild_id.get())
|
||||
match sqlx::query!("SELECT 1 as A FROM guilds WHERE id = ?", guild_id.get())
|
||||
.fetch_one(transaction.executor())
|
||||
.await
|
||||
{
|
||||
Err(sqlx::Error::RowNotFound) => {
|
||||
if sqlx::query!("INSERT INTO guilds (guild) VALUES (?)", guild_id.get())
|
||||
if sqlx::query!("INSERT INTO guilds (id) VALUES (?)", guild_id.get())
|
||||
.execute(transaction.executor())
|
||||
.await
|
||||
.is_err()
|
||||
@ -659,7 +659,7 @@ pub(crate) async fn create_reminder_template(
|
||||
interval_months,
|
||||
tts,
|
||||
username
|
||||
) VALUES ((SELECT id FROM guilds WHERE guild = ?), ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,
|
||||
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,
|
||||
?, ?, ?, ?, ?, ?, ?)",
|
||||
guild_id.get(),
|
||||
name,
|
||||
|
Reference in New Issue
Block a user