| 
									
										
										
										
											2023-03-15 22:44:08 +01:00
										 |  |  | module.exports = () => { | 
					
						
							| 
									
										
										
										
											2025-01-09 18:07:02 +02:00
										 |  |  |     const sql = require("../../src/services/sql"); | 
					
						
							|  |  |  |     const utils = require("../../src/services/utils"); | 
					
						
							| 
									
										
										
										
											2023-03-15 22:44:08 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     const existingBlobIds = new Set(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     for (const noteId of sql.getColumn(`SELECT noteId FROM note_contents`)) { | 
					
						
							|  |  |  |         const row = sql.getRow(`SELECT noteId, content, dateModified, utcDateModified FROM note_contents WHERE noteId = ?`, [noteId]); | 
					
						
							|  |  |  |         const blobId = utils.hashedBlobId(row.content); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if (!existingBlobIds.has(blobId)) { | 
					
						
							|  |  |  |             existingBlobIds.add(blobId); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-01-09 18:07:02 +02:00
										 |  |  |             sql.insert("blobs", { | 
					
						
							| 
									
										
										
										
											2023-03-15 22:44:08 +01:00
										 |  |  |                 blobId, | 
					
						
							|  |  |  |                 content: row.content, | 
					
						
							|  |  |  |                 dateModified: row.dateModified, | 
					
						
							|  |  |  |                 utcDateModified: row.utcDateModified | 
					
						
							|  |  |  |             }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             sql.execute("UPDATE entity_changes SET entityName = 'blobs', entityId = ? WHERE entityName = 'note_contents' AND entityId = ?", [blobId, row.noteId]); | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             // duplicates
 | 
					
						
							|  |  |  |             sql.execute("DELETE FROM entity_changes WHERE entityName = 'note_contents' AND entityId = ?", [row.noteId]); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-01-09 18:07:02 +02:00
										 |  |  |         sql.execute("UPDATE notes SET blobId = ? WHERE noteId = ?", [blobId, row.noteId]); | 
					
						
							| 
									
										
										
										
											2023-03-15 22:44:08 +01:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     for (const noteRevisionId of sql.getColumn(`SELECT noteRevisionId FROM note_revision_contents`)) { | 
					
						
							|  |  |  |         const row = sql.getRow(`SELECT noteRevisionId, content, utcDateModified FROM note_revision_contents WHERE noteRevisionId = ?`, [noteRevisionId]); | 
					
						
							|  |  |  |         const blobId = utils.hashedBlobId(row.content); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if (!existingBlobIds.has(blobId)) { | 
					
						
							|  |  |  |             existingBlobIds.add(blobId); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-01-09 18:07:02 +02:00
										 |  |  |             sql.insert("blobs", { | 
					
						
							| 
									
										
										
										
											2023-03-15 22:44:08 +01:00
										 |  |  |                 blobId, | 
					
						
							|  |  |  |                 content: row.content, | 
					
						
							|  |  |  |                 dateModified: row.utcDateModified, | 
					
						
							|  |  |  |                 utcDateModified: row.utcDateModified | 
					
						
							|  |  |  |             }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             sql.execute("UPDATE entity_changes SET entityName = 'blobs', entityId = ? WHERE entityName = 'note_revision_contents' AND entityId = ?", [blobId, row.noteRevisionId]); | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             // duplicates
 | 
					
						
							|  |  |  |             sql.execute("DELETE FROM entity_changes WHERE entityName = 'note_revision_contents' AND entityId = ?", [row.noteId]); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-01-09 18:07:02 +02:00
										 |  |  |         sql.execute("UPDATE note_revisions SET blobId = ? WHERE noteRevisionId = ?", [blobId, row.noteRevisionId]); | 
					
						
							| 
									
										
										
										
											2023-03-15 22:44:08 +01:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     const notesWithoutBlobIds = sql.getColumn("SELECT noteId FROM notes WHERE blobId IS NULL"); | 
					
						
							|  |  |  |     if (notesWithoutBlobIds.length > 0) { | 
					
						
							|  |  |  |         throw new Error("BlobIds were not filled correctly in notes: " + JSON.stringify(notesWithoutBlobIds)); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     const noteRevisionsWithoutBlobIds = sql.getColumn("SELECT noteRevisionId FROM note_revisions WHERE blobId IS NULL"); | 
					
						
							|  |  |  |     if (noteRevisionsWithoutBlobIds.length > 0) { | 
					
						
							|  |  |  |         throw new Error("BlobIds were not filled correctly in note revisions: " + JSON.stringify(noteRevisionsWithoutBlobIds)); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | }; |