From ab122ea352c7ae3beb74b9fc4aa8c4c4a286cbbb Mon Sep 17 00:00:00 2001 From: mohamed yahia Date: Mon, 18 Dec 2023 17:32:52 +0200 Subject: [PATCH] [ #22, MarkdownDB fails with more than 500 files in a top directory ] (#95) --- src/lib/schema.ts | 45 +++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 41 insertions(+), 4 deletions(-) diff --git a/src/lib/schema.ts b/src/lib/schema.ts index b41f090..a0267a3 100644 --- a/src/lib/schema.ts +++ b/src/lib/schema.ts @@ -123,7 +123,17 @@ class MddbFile { return serializedFile; }); - return db.batchInsert(Table.Files, serializedFiles); + if (serializedFiles.length >= 500) { + const promises = []; + for (let i = 0; i < serializedFiles.length; i += 500) { + promises.push( + db.batchInsert(Table.Files, serializedFiles.slice(i, i + 500)) + ); + } + return Promise.all(promises); + } else { + return db.batchInsert(Table.Files, serializedFiles); + } } } @@ -178,7 +188,15 @@ class MddbLink { } static batchInsert(db: Knex, links: Link[]) { - return db.batchInsert(Table.Links, links); + if (links.length >= 500) { + const promises = []; + for (let i = 0; i < links.length; i += 500) { + promises.push(db.batchInsert(Table.Links, links.slice(i, i + 500))); + } + return Promise.all(promises); + } else { + return db.batchInsert(Table.Links, links); + } } } @@ -225,7 +243,16 @@ class MddbTag { if (!areUniqueObjectsByKey(tags, "name")) { throw new Error("Tags must have unique name"); } - return db.batchInsert(Table.Tags, tags); + + if (tags.length >= 500) { + const promises = []; + for (let i = 0; i < tags.length; i += 500) { + promises.push(db.batchInsert(Table.Tags, tags.slice(i, i + 500))); + } + return Promise.all(promises); + } else { + return db.batchInsert(Table.Tags, tags); + } } } @@ -266,7 +293,17 @@ class MddbFileTag { } static batchInsert(db: Knex, fileTags: FileTag[]) { - return db.batchInsert(Table.FileTags, fileTags); + if (fileTags.length >= 500) { + const promises = []; + for (let i = 0; i < fileTags.length; i += 500) { + promises.push( + db.batchInsert(Table.FileTags, fileTags.slice(i, i + 500)) + ); + } + return Promise.all(promises); + } else { + return db.batchInsert(Table.FileTags, fileTags); + } } }