2022-08-30 15:00:58 +00:00
|
|
|
|
using MySqlConnector;
|
|
|
|
|
using System;
|
|
|
|
|
|
2023-02-10 06:07:59 +00:00
|
|
|
|
namespace SharpChat.EventStorage {
|
|
|
|
|
public partial class MariaDBEventStorage {
|
|
|
|
|
private void DoMigration(string name, Action action) {
|
2022-08-30 15:00:58 +00:00
|
|
|
|
bool done = (long)RunQueryValue(
|
2023-02-08 03:17:07 +00:00
|
|
|
|
"SELECT COUNT(*) FROM `sqc_migrations` WHERE `migration_name` = @name",
|
|
|
|
|
new MySqlParameter("name", name)
|
2022-08-30 15:00:58 +00:00
|
|
|
|
) > 0;
|
2023-02-07 15:01:56 +00:00
|
|
|
|
if(!done) {
|
2023-02-08 03:17:07 +00:00
|
|
|
|
Logger.Write($"Running migration '{name}'...");
|
2022-08-30 15:00:58 +00:00
|
|
|
|
action();
|
|
|
|
|
RunCommand(
|
2023-02-08 03:17:07 +00:00
|
|
|
|
"INSERT INTO `sqc_migrations` (`migration_name`) VALUES (@name)",
|
|
|
|
|
new MySqlParameter("name", name)
|
2022-08-30 15:00:58 +00:00
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2023-02-10 06:07:59 +00:00
|
|
|
|
public void RunMigrations() {
|
2022-08-30 15:00:58 +00:00
|
|
|
|
RunCommand(
|
2023-02-08 03:17:07 +00:00
|
|
|
|
"CREATE TABLE IF NOT EXISTS `sqc_migrations` ("
|
|
|
|
|
+ "`migration_name` VARCHAR(255) NOT NULL,"
|
|
|
|
|
+ "`migration_completed` TIMESTAMP NOT NULL DEFAULT current_timestamp(),"
|
|
|
|
|
+ "UNIQUE INDEX `migration_name` (`migration_name`),"
|
|
|
|
|
+ "INDEX `migration_completed` (`migration_completed`)"
|
|
|
|
|
+ ") COLLATE='utf8mb4_unicode_ci' ENGINE=InnoDB;"
|
2022-08-30 15:00:58 +00:00
|
|
|
|
);
|
|
|
|
|
|
2023-02-08 03:17:07 +00:00
|
|
|
|
DoMigration("create_events_table", CreateEventsTable);
|
2022-08-30 15:00:58 +00:00
|
|
|
|
}
|
|
|
|
|
|
2023-02-10 06:07:59 +00:00
|
|
|
|
private void CreateEventsTable() {
|
2022-08-30 15:00:58 +00:00
|
|
|
|
RunCommand(
|
2023-02-08 03:17:07 +00:00
|
|
|
|
"CREATE TABLE `sqc_events` ("
|
|
|
|
|
+ "`event_id` BIGINT(20) NOT NULL,"
|
|
|
|
|
+ "`event_sender` BIGINT(20) UNSIGNED NULL DEFAULT NULL,"
|
|
|
|
|
+ "`event_sender_name` VARCHAR(255) NULL DEFAULT NULL,"
|
|
|
|
|
+ "`event_sender_colour` INT(11) NULL DEFAULT NULL,"
|
|
|
|
|
+ "`event_sender_rank` INT(11) NULL DEFAULT NULL,"
|
|
|
|
|
+ "`event_sender_nick` VARCHAR(255) NULL DEFAULT NULL,"
|
|
|
|
|
+ "`event_sender_perms` INT(11) NULL DEFAULT NULL,"
|
|
|
|
|
+ "`event_created` TIMESTAMP NOT NULL DEFAULT current_timestamp(),"
|
|
|
|
|
+ "`event_deleted` TIMESTAMP NULL DEFAULT NULL,"
|
|
|
|
|
+ "`event_type` VARBINARY(255) NOT NULL,"
|
|
|
|
|
+ "`event_target` VARBINARY(255) NOT NULL,"
|
|
|
|
|
+ "`event_flags` TINYINT(3) UNSIGNED NOT NULL,"
|
|
|
|
|
+ "`event_data` BLOB NULL DEFAULT NULL,"
|
|
|
|
|
+ "PRIMARY KEY (`event_id`),"
|
|
|
|
|
+ "INDEX `event_target` (`event_target`),"
|
|
|
|
|
+ "INDEX `event_type` (`event_type`),"
|
|
|
|
|
+ "INDEX `event_sender` (`event_sender`),"
|
|
|
|
|
+ "INDEX `event_datetime` (`event_created`),"
|
|
|
|
|
+ "INDEX `event_deleted` (`event_deleted`)"
|
|
|
|
|
+ ") COLLATE='utf8mb4_unicode_ci' ENGINE=InnoDB;"
|
2022-08-30 15:00:58 +00:00
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|