Improved database schema
- Some queries are faster due to better index ordering - Database is smaller thanks to splitting message_channel table and adding WITHOUT ROWID where helpful
This commit is contained in:
		
							parent
							
								
									21156446ee
								
							
						
					
					
						commit
						fcbb045cbb
					
				
					 11 changed files with 114 additions and 93 deletions
				
			
		| 
						 | 
				
			
			@ -19,7 +19,7 @@ async function deleteMessage(data) {
 | 
			
		|||
	for (const eventID of eventsToRedact) {
 | 
			
		||||
		// Unfortuately, we can't specify a sender to do the redaction as, unless we find out that info via the audit logs
 | 
			
		||||
		await api.redactEvent(roomID, eventID)
 | 
			
		||||
		db.prepare("DELETE from event_message WHERE event_id = ?").run(eventID)
 | 
			
		||||
		db.prepare("DELETE FROM event_message WHERE event_id = ?").run(eventID)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -32,7 +32,7 @@ async function editMessage(message, guild) {
 | 
			
		|||
	// Not redacting as the last action because the last action is likely to be shown in the room preview in clients, and we don't want it to look like somebody actually deleted a message.
 | 
			
		||||
	for (const eventID of eventsToRedact) {
 | 
			
		||||
		await api.redactEvent(roomID, eventID, senderMxid)
 | 
			
		||||
		db.prepare("DELETE from event_message WHERE event_id = ?").run(eventID)
 | 
			
		||||
		db.prepare("DELETE FROM event_message WHERE event_id = ?").run(eventID)
 | 
			
		||||
		// TODO: If I just redacted part = 0, I should update one of the other events to make it the new part = 0, right?
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -44,7 +44,7 @@ async function editMessage(message, guild) {
 | 
			
		|||
		delete contentWithoutType.$type
 | 
			
		||||
 | 
			
		||||
		const eventID = await api.sendEvent(roomID, eventType, contentWithoutType, senderMxid)
 | 
			
		||||
		db.prepare("INSERT INTO event_message (event_id, event_type, event_subtype, message_id, channel_id, part, source) VALUES (?, ?, ?, ?, ?, 1, 1)").run(eventID, eventType, content.msgtype || null, message.id, message.channel_id) // part 1 = supporting; source 1 = discord
 | 
			
		||||
		db.prepare("INSERT INTO event_message (event_id, event_type, event_subtype, message_id, part, source) VALUES (?, ?, ?, ?, ?, 1, 1)").run(eventID, eventType, content.msgtype || null, message.id) // part 1 = supporting; source 1 = discord
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -32,6 +32,9 @@ async function sendMessage(message, guild) {
 | 
			
		|||
	const events = await messageToEvent.messageToEvent(message, guild, {}, {api})
 | 
			
		||||
	const eventIDs = []
 | 
			
		||||
	let eventPart = 0 // 0 is primary, 1 is supporting
 | 
			
		||||
	if (events.length) {
 | 
			
		||||
		db.prepare("REPLACE INTO message_channel (message_id, channel_id) VALUES (?, ?)").run(message.id, message.channel_id)
 | 
			
		||||
	}
 | 
			
		||||
	for (const event of events) {
 | 
			
		||||
		const eventType = event.$type
 | 
			
		||||
		/** @type {Pick<typeof event, Exclude<keyof event, "$type">> & { $type?: string }} */
 | 
			
		||||
| 
						 | 
				
			
			@ -40,7 +43,7 @@ async function sendMessage(message, guild) {
 | 
			
		|||
 | 
			
		||||
		const useTimestamp = message["backfill"] ? new Date(message.timestamp).getTime() : undefined
 | 
			
		||||
		const eventID = await api.sendEvent(roomID, eventType, eventWithoutType, senderMxid, useTimestamp)
 | 
			
		||||
		db.prepare("INSERT INTO event_message (event_id, event_type, event_subtype, message_id, channel_id, part, source) VALUES (?, ?, ?, ?, ?, ?, 1)").run(eventID, eventType, event.msgtype || null, message.id, message.channel_id, eventPart) // source 1 = discord
 | 
			
		||||
		db.prepare("INSERT INTO event_message (event_id, event_type, event_subtype, message_id, part, source) VALUES (?, ?, ?, ?, ?, ?, 1)").run(eventID, eventType, event.msgtype || null, message.id, eventPart) // source 1 = discord
 | 
			
		||||
 | 
			
		||||
		eventPart = 1 // TODO: use more intelligent algorithm to determine whether primary or supporting
 | 
			
		||||
		eventIDs.push(eventID)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue