mirror of
https://github.com/chylex/Discord-History-Tracker.git
synced 2025-09-17 16:24:47 +02:00
Compare commits
1 Commits
v45.0
...
ae64747ce4
Author | SHA1 | Date | |
---|---|---|---|
ae64747ce4
|
67
app/Server/Database/Sqlite/Schema/SqliteSchemaUpgradeTo10.cs
Normal file
67
app/Server/Database/Sqlite/Schema/SqliteSchemaUpgradeTo10.cs
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
using System.Threading.Tasks;
|
||||||
|
using DHT.Server.Database.Sqlite.Utils;
|
||||||
|
|
||||||
|
namespace DHT.Server.Database.Sqlite.Schema;
|
||||||
|
|
||||||
|
sealed class SqliteSchemaUpgradeTo10 : ISchemaUpgrade {
|
||||||
|
async Task ISchemaUpgrade.Run(ISqliteConnection conn, ISchemaUpgradeCallbacks.IProgressReporter reporter) {
|
||||||
|
await reporter.MainWork("Migrating message embeds...", 0, 5);
|
||||||
|
await conn.ExecuteAsync("""
|
||||||
|
CREATE TABLE message_embeds_new (
|
||||||
|
message_id INTEGER NOT NULL,
|
||||||
|
json TEXT NOT NULL,
|
||||||
|
FOREIGN KEY (message_id) REFERENCES messages (message_id) ON UPDATE CASCADE ON DELETE CASCADE
|
||||||
|
)
|
||||||
|
""");
|
||||||
|
await conn.ExecuteAsync("INSERT INTO message_embeds_new (message_id, json) SELECT message_id, json FROM message_embeds WHERE message_id IN (SELECT DISTINCT message_id FROM messages)");
|
||||||
|
|
||||||
|
await reporter.MainWork("Migrating message reactions...", 1, 5);
|
||||||
|
await conn.ExecuteAsync("""
|
||||||
|
CREATE TABLE message_reactions_new (
|
||||||
|
message_id INTEGER NOT NULL,
|
||||||
|
emoji_id INTEGER,
|
||||||
|
emoji_name TEXT,
|
||||||
|
emoji_flags INTEGER NOT NULL,
|
||||||
|
count INTEGER NOT NULL,
|
||||||
|
FOREIGN KEY (message_id) REFERENCES messages (message_id) ON UPDATE CASCADE ON DELETE CASCADE
|
||||||
|
)
|
||||||
|
""");
|
||||||
|
await conn.ExecuteAsync("INSERT INTO message_reactions_new (message_id, emoji_id, emoji_name, emoji_flags, count) SELECT message_id, emoji_id, emoji_name, emoji_flags, count FROM message_reactions WHERE message_id IN (SELECT DISTINCT message_id FROM messages)");
|
||||||
|
|
||||||
|
await reporter.MainWork("Migrating message edit timestamps...", 2, 5);
|
||||||
|
await conn.ExecuteAsync("""
|
||||||
|
CREATE TABLE message_edit_timestamps_new (
|
||||||
|
message_id INTEGER PRIMARY KEY NOT NULL,
|
||||||
|
edit_timestamp INTEGER NOT NULL,
|
||||||
|
FOREIGN KEY (message_id) REFERENCES messages (message_id) ON UPDATE CASCADE ON DELETE CASCADE
|
||||||
|
)
|
||||||
|
""");
|
||||||
|
await conn.ExecuteAsync("INSERT INTO message_edit_timestamps_new (message_id, edit_timestamp) SELECT message_id, edit_timestamp FROM message_edit_timestamps WHERE message_id IN (SELECT DISTINCT message_id FROM messages)");
|
||||||
|
|
||||||
|
await reporter.MainWork("Migrating message replies...", 3, 5);
|
||||||
|
await conn.ExecuteAsync("""
|
||||||
|
CREATE TABLE message_replied_to_new (
|
||||||
|
message_id INTEGER PRIMARY KEY NOT NULL,
|
||||||
|
replied_to_id INTEGER NOT NULL,
|
||||||
|
FOREIGN KEY (message_id) REFERENCES messages (message_id) ON UPDATE CASCADE ON DELETE CASCADE
|
||||||
|
)
|
||||||
|
""");
|
||||||
|
await conn.ExecuteAsync("INSERT INTO message_replied_to_new (message_id, replied_to_id) SELECT message_id, replied_to_id FROM message_replied_to WHERE message_id IN (SELECT DISTINCT message_id FROM messages)");
|
||||||
|
|
||||||
|
await reporter.MainWork("Applying schema changes...", 4, 5);
|
||||||
|
|
||||||
|
await conn.ExecuteAsync("DROP TABLE message_embeds");
|
||||||
|
await conn.ExecuteAsync("ALTER TABLE message_embeds_new RENAME TO message_embeds");
|
||||||
|
await conn.ExecuteAsync("CREATE INDEX embeds_message_ix ON message_embeds(message_id)");
|
||||||
|
|
||||||
|
await conn.ExecuteAsync("DROP TABLE message_reactions");
|
||||||
|
await conn.ExecuteAsync("ALTER TABLE message_reactions_new RENAME TO message_reactions");
|
||||||
|
await conn.ExecuteAsync("CREATE INDEX reactions_message_ix ON message_reactions(message_id)");
|
||||||
|
|
||||||
|
await conn.ExecuteAsync("DROP TABLE message_edit_timestamps");
|
||||||
|
await conn.ExecuteAsync("ALTER TABLE message_edit_timestamps_new RENAME TO message_edit_timestamps");
|
||||||
|
|
||||||
|
await conn.ExecuteAsync("DROP TABLE message_replied_to");
|
||||||
|
await conn.ExecuteAsync("ALTER TABLE message_replied_to_new RENAME TO message_replied_to");
|
||||||
|
}
|
||||||
|
}
|
@@ -7,11 +7,19 @@ sealed class SqliteSchemaUpgradeTo3 : ISchemaUpgrade {
|
|||||||
async Task ISchemaUpgrade.Run(ISqliteConnection conn, ISchemaUpgradeCallbacks.IProgressReporter reporter) {
|
async Task ISchemaUpgrade.Run(ISqliteConnection conn, ISchemaUpgradeCallbacks.IProgressReporter reporter) {
|
||||||
await reporter.MainWork("Applying schema changes...", 0, 1);
|
await reporter.MainWork("Applying schema changes...", 0, 1);
|
||||||
|
|
||||||
await SqliteSchema.CreateMessageEditTimestampTable(conn);
|
await conn.ExecuteAsync("""
|
||||||
await conn.ExecuteAsync("ALTER TABLE message_edit_timestamps RENAME TO edit_timestamps");
|
CREATE TABLE edit_timestamps (
|
||||||
|
message_id INTEGER PRIMARY KEY NOT NULL,
|
||||||
|
edit_timestamp INTEGER NOT NULL
|
||||||
|
)
|
||||||
|
""");
|
||||||
|
|
||||||
await SqliteSchema.CreateMessageRepliedToTable(conn);
|
await conn.ExecuteAsync("""
|
||||||
await conn.ExecuteAsync("ALTER TABLE message_replied_to RENAME TO replied_to");
|
CREATE TABLE replied_to (
|
||||||
|
message_id INTEGER PRIMARY KEY NOT NULL,
|
||||||
|
replied_to_id INTEGER NOT NULL
|
||||||
|
)
|
||||||
|
""");
|
||||||
|
|
||||||
await conn.ExecuteAsync("""
|
await conn.ExecuteAsync("""
|
||||||
INSERT INTO edit_timestamps (message_id, edit_timestamp)
|
INSERT INTO edit_timestamps (message_id, edit_timestamp)
|
||||||
|
@@ -8,7 +8,7 @@ using DHT.Utils.Logging;
|
|||||||
namespace DHT.Server.Database.Sqlite;
|
namespace DHT.Server.Database.Sqlite;
|
||||||
|
|
||||||
sealed class SqliteSchema {
|
sealed class SqliteSchema {
|
||||||
internal const int Version = 9;
|
internal const int Version = 10;
|
||||||
|
|
||||||
private static readonly Log Log = Log.ForType<SqliteSchema>();
|
private static readonly Log Log = Log.ForType<SqliteSchema>();
|
||||||
|
|
||||||
@@ -100,7 +100,8 @@ sealed class SqliteSchema {
|
|||||||
await conn.ExecuteAsync("""
|
await conn.ExecuteAsync("""
|
||||||
CREATE TABLE message_embeds (
|
CREATE TABLE message_embeds (
|
||||||
message_id INTEGER NOT NULL,
|
message_id INTEGER NOT NULL,
|
||||||
json TEXT NOT NULL
|
json TEXT NOT NULL,
|
||||||
|
FOREIGN KEY (message_id) REFERENCES messages (message_id) ON UPDATE CASCADE ON DELETE CASCADE
|
||||||
)
|
)
|
||||||
""");
|
""");
|
||||||
|
|
||||||
@@ -110,12 +111,27 @@ sealed class SqliteSchema {
|
|||||||
emoji_id INTEGER,
|
emoji_id INTEGER,
|
||||||
emoji_name TEXT,
|
emoji_name TEXT,
|
||||||
emoji_flags INTEGER NOT NULL,
|
emoji_flags INTEGER NOT NULL,
|
||||||
count INTEGER NOT NULL
|
count INTEGER NOT NULL,
|
||||||
|
FOREIGN KEY (message_id) REFERENCES messages (message_id) ON UPDATE CASCADE ON DELETE CASCADE
|
||||||
|
)
|
||||||
|
""");
|
||||||
|
|
||||||
|
await conn.ExecuteAsync("""
|
||||||
|
CREATE TABLE message_edit_timestamps (
|
||||||
|
message_id INTEGER PRIMARY KEY NOT NULL,
|
||||||
|
edit_timestamp INTEGER NOT NULL,
|
||||||
|
FOREIGN KEY (message_id) REFERENCES messages (message_id) ON UPDATE CASCADE ON DELETE CASCADE
|
||||||
|
)
|
||||||
|
""");
|
||||||
|
|
||||||
|
await conn.ExecuteAsync("""
|
||||||
|
CREATE TABLE message_replied_to (
|
||||||
|
message_id INTEGER PRIMARY KEY NOT NULL,
|
||||||
|
replied_to_id INTEGER NOT NULL,
|
||||||
|
FOREIGN KEY (message_id) REFERENCES messages (message_id) ON UPDATE CASCADE ON DELETE CASCADE
|
||||||
)
|
)
|
||||||
""");
|
""");
|
||||||
|
|
||||||
await CreateMessageEditTimestampTable(conn);
|
|
||||||
await CreateMessageRepliedToTable(conn);
|
|
||||||
await CreateDownloadTables(conn);
|
await CreateDownloadTables(conn);
|
||||||
await CreateMessageAttachmentsTable(conn);
|
await CreateMessageAttachmentsTable(conn);
|
||||||
|
|
||||||
@@ -125,24 +141,6 @@ sealed class SqliteSchema {
|
|||||||
await conn.ExecuteAsync("INSERT INTO metadata (key, value) VALUES ('version', " + Version + ")");
|
await conn.ExecuteAsync("INSERT INTO metadata (key, value) VALUES ('version', " + Version + ")");
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static async Task CreateMessageEditTimestampTable(ISqliteConnection conn) {
|
|
||||||
await conn.ExecuteAsync("""
|
|
||||||
CREATE TABLE message_edit_timestamps (
|
|
||||||
message_id INTEGER PRIMARY KEY NOT NULL,
|
|
||||||
edit_timestamp INTEGER NOT NULL
|
|
||||||
)
|
|
||||||
""");
|
|
||||||
}
|
|
||||||
|
|
||||||
internal static async Task CreateMessageRepliedToTable(ISqliteConnection conn) {
|
|
||||||
await conn.ExecuteAsync("""
|
|
||||||
CREATE TABLE message_replied_to (
|
|
||||||
message_id INTEGER PRIMARY KEY NOT NULL,
|
|
||||||
replied_to_id INTEGER NOT NULL
|
|
||||||
)
|
|
||||||
""");
|
|
||||||
}
|
|
||||||
|
|
||||||
internal static async Task CreateDownloadTables(ISqliteConnection conn) {
|
internal static async Task CreateDownloadTables(ISqliteConnection conn) {
|
||||||
await conn.ExecuteAsync("""
|
await conn.ExecuteAsync("""
|
||||||
CREATE TABLE download_metadata (
|
CREATE TABLE download_metadata (
|
||||||
@@ -185,6 +183,7 @@ sealed class SqliteSchema {
|
|||||||
{ 6, new SqliteSchemaUpgradeTo7() },
|
{ 6, new SqliteSchemaUpgradeTo7() },
|
||||||
{ 7, new SqliteSchemaUpgradeTo8() },
|
{ 7, new SqliteSchemaUpgradeTo8() },
|
||||||
{ 8, new SqliteSchemaUpgradeTo9() },
|
{ 8, new SqliteSchemaUpgradeTo9() },
|
||||||
|
{ 9, new SqliteSchemaUpgradeTo10() },
|
||||||
};
|
};
|
||||||
|
|
||||||
var perf = Log.Start("from version " + dbVersion);
|
var perf = Log.Start("from version " + dbVersion);
|
||||||
|
Reference in New Issue
Block a user