From 84a5707d6d2ea14cf93c43e50b741a76600704ba Mon Sep 17 00:00:00 2001 From: Jonathan Waltz Date: Tue, 13 Jun 2023 11:07:58 -1000 Subject: [PATCH] refactor: convert insert loop to 1 insert stmt (#19) * fix: convert insert loop to 1 insert stmt * chore: lint --- server/models/vectors.js | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/server/models/vectors.js b/server/models/vectors.js index aad671f5..776179d0 100644 --- a/server/models/vectors.js +++ b/server/models/vectors.js @@ -31,17 +31,26 @@ const DocumentVectors = { }, bulkInsert: async function (vectorRecords = []) { if (vectorRecords.length === 0) return; - const db = await this.db(); - const stmt = await db.prepare( - `INSERT INTO ${this.tablename} (docId, vectorId) VALUES (?, ?)` - ); - for (const record of vectorRecords) { - const { docId, vectorId } = record; - stmt.run([docId, vectorId]); - } + const db = await this.db(); + + // Build a single query string with multiple placeholders for the INSERT operation + const placeholders = vectorRecords.map(() => "(?, ?)").join(", "); + + const stmt = await db.prepare( + `INSERT INTO ${this.tablename} (docId, vectorId) VALUES ${placeholders}` + ); + + // Flatten the vectorRecords array to match the order of placeholders + const values = vectorRecords.reduce( + (arr, record) => arr.concat([record.docId, record.vectorId]), + [] + ); + + stmt.run(values); stmt.finalize(); db.close(); + return { documentsInserted: vectorRecords.length }; }, deleteForWorkspace: async function (workspaceId) {