forked from cadence/out-of-your-element
		
	Add scripts for database migration
This commit is contained in:
		
							parent
							
								
									ae3a86bff2
								
							
						
					
					
						commit
						c9bc6ac629
					
				
					 4 changed files with 40 additions and 2 deletions
				
			
		| 
						 | 
				
			
			@ -1,4 +1,3 @@
 | 
			
		|||
BEGIN TRANSACTION;
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "sim" (
 | 
			
		||||
	"discord_id"	TEXT NOT NULL,
 | 
			
		||||
	"sim_name"	TEXT NOT NULL UNIQUE,
 | 
			
		||||
| 
						 | 
				
			
			@ -6,18 +5,21 @@ CREATE TABLE IF NOT EXISTS "sim" (
 | 
			
		|||
	"mxid"	TEXT NOT NULL,
 | 
			
		||||
	PRIMARY KEY("discord_id")
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "webhook" (
 | 
			
		||||
	"channel_id"	TEXT NOT NULL,
 | 
			
		||||
	"webhook_id"	TEXT NOT NULL,
 | 
			
		||||
	"webhook_token"	TEXT NOT NULL,
 | 
			
		||||
	PRIMARY KEY("channel_id")
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "sim_member" (
 | 
			
		||||
	"mxid"	TEXT NOT NULL,
 | 
			
		||||
	"room_id"	TEXT NOT NULL,
 | 
			
		||||
	"profile_event_content_hash"	BLOB,
 | 
			
		||||
	PRIMARY KEY("room_id","mxid")
 | 
			
		||||
) WITHOUT ROWID;
 | 
			
		||||
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "member_cache" (
 | 
			
		||||
	"room_id"	TEXT NOT NULL,
 | 
			
		||||
	"mxid"	TEXT NOT NULL,
 | 
			
		||||
| 
						 | 
				
			
			@ -25,16 +27,19 @@ CREATE TABLE IF NOT EXISTS "member_cache" (
 | 
			
		|||
	"avatar_url"	TEXT,
 | 
			
		||||
	PRIMARY KEY("room_id","mxid")
 | 
			
		||||
) WITHOUT ROWID;
 | 
			
		||||
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "file" (
 | 
			
		||||
	"discord_url"	TEXT NOT NULL,
 | 
			
		||||
	"mxc_url"	TEXT NOT NULL,
 | 
			
		||||
	PRIMARY KEY("discord_url")
 | 
			
		||||
) WITHOUT ROWID;
 | 
			
		||||
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "guild_space" (
 | 
			
		||||
	"guild_id"	TEXT NOT NULL,
 | 
			
		||||
	"space_id"	TEXT NOT NULL,
 | 
			
		||||
	PRIMARY KEY("guild_id")
 | 
			
		||||
) WITHOUT ROWID;
 | 
			
		||||
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "channel_room" (
 | 
			
		||||
	"channel_id"	TEXT NOT NULL,
 | 
			
		||||
	"room_id"	TEXT NOT NULL,
 | 
			
		||||
| 
						 | 
				
			
			@ -44,11 +49,13 @@ CREATE TABLE IF NOT EXISTS "channel_room" (
 | 
			
		|||
	"custom_avatar"	TEXT,
 | 
			
		||||
	PRIMARY KEY("channel_id","room_id")
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "message_channel" (
 | 
			
		||||
	"message_id"	TEXT NOT NULL,
 | 
			
		||||
	"channel_id"	TEXT NOT NULL,
 | 
			
		||||
	PRIMARY KEY("message_id")
 | 
			
		||||
) WITHOUT ROWID;
 | 
			
		||||
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "event_message" (
 | 
			
		||||
	"event_id"	TEXT NOT NULL,
 | 
			
		||||
	"message_id"	TEXT NOT NULL,
 | 
			
		||||
| 
						 | 
				
			
			@ -58,11 +65,13 @@ CREATE TABLE IF NOT EXISTS "event_message" (
 | 
			
		|||
	"source"	INTEGER NOT NULL,
 | 
			
		||||
	PRIMARY KEY("message_id","event_id")
 | 
			
		||||
) WITHOUT ROWID;
 | 
			
		||||
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "lottie" (
 | 
			
		||||
	"id"	TEXT NOT NULL,
 | 
			
		||||
	"mxc"	TEXT NOT NULL,
 | 
			
		||||
	PRIMARY KEY("id")
 | 
			
		||||
) WITHOUT ROWID;
 | 
			
		||||
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "emoji" (
 | 
			
		||||
	"id"	TEXT NOT NULL,
 | 
			
		||||
	"name"	TEXT NOT NULL,
 | 
			
		||||
| 
						 | 
				
			
			@ -70,10 +79,10 @@ CREATE TABLE IF NOT EXISTS "emoji" (
 | 
			
		|||
	"mxc_url"	TEXT NOT NULL,
 | 
			
		||||
	PRIMARY KEY("id")
 | 
			
		||||
) WITHOUT ROWID;
 | 
			
		||||
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "reaction" (
 | 
			
		||||
	"hashed_event_id"	INTEGER NOT NULL,
 | 
			
		||||
	"message_id"	TEXT NOT NULL,
 | 
			
		||||
	"encoded_emoji"	TEXT NOT NULL,
 | 
			
		||||
	PRIMARY KEY ("hashed_event_id")
 | 
			
		||||
) WITHOUT ROWID;
 | 
			
		||||
COMMIT;
 | 
			
		||||
							
								
								
									
										13
									
								
								db/migrations/0002-optimise-profile-content.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								db/migrations/0002-optimise-profile-content.js
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,13 @@
 | 
			
		|||
module.exports = async function(db) {
 | 
			
		||||
	const hasher = await require("xxhash-wasm")()
 | 
			
		||||
	const contents = db.prepare("SELECT distinct hashed_profile_content FROM sim_member").pluck().all()
 | 
			
		||||
	const stmt = db.prepare("UPDATE sim_member SET hashed_profile_content = ? WHERE hashed_profile_content = ?")
 | 
			
		||||
	db.transaction(() => {
 | 
			
		||||
		for (const s of contents) {
 | 
			
		||||
			if (!Buffer.isBuffer(s)) s = Buffer.from(s)
 | 
			
		||||
			const unsignedHash = hasher.h64(eventID)
 | 
			
		||||
			const signedHash = unsignedHash - 0x8000000000000000n // shifting down to signed 64-bit range
 | 
			
		||||
			stmt.run(s, signedHash)
 | 
			
		||||
		}
 | 
			
		||||
	})()
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										16
									
								
								db/migrations/0002-optimise-profile-content.sql
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								db/migrations/0002-optimise-profile-content.sql
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,16 @@
 | 
			
		|||
-- Change hashed_profile_content column affinity to INTEGER
 | 
			
		||||
 | 
			
		||||
CREATE TABLE "new_sim_member" (
 | 
			
		||||
	"mxid"	TEXT NOT NULL,
 | 
			
		||||
	"room_id"	TEXT NOT NULL,
 | 
			
		||||
	"hashed_profile_content"	INTEGER,
 | 
			
		||||
	PRIMARY KEY("room_id","mxid")
 | 
			
		||||
) WITHOUT ROWID;
 | 
			
		||||
 | 
			
		||||
INSERT INTO new_sim_member SELECT * FROM sim_member;
 | 
			
		||||
 | 
			
		||||
DROP TABLE sim_member;
 | 
			
		||||
 | 
			
		||||
ALTER TABLE new_sim_member RENAME TO sim_member;
 | 
			
		||||
 | 
			
		||||
VACUUM;
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue