From 0b487294b05a1054d50af7c745c5fab2a4b19bf3 Mon Sep 17 00:00:00 2001 From: Dan Stillman Date: Thu, 27 Mar 2008 18:49:30 +0000 Subject: [PATCH] Workaround for SQL bound parameter limit when indexing PDFs (limit existed only in Firefox 3, I think) --- chrome/content/zotero/xpcom/fulltext.js | 41 ++++++++++++++++--------- 1 file changed, 26 insertions(+), 15 deletions(-) diff --git a/chrome/content/zotero/xpcom/fulltext.js b/chrome/content/zotero/xpcom/fulltext.js index 889f23fe5..7cd47528f 100644 --- a/chrome/content/zotero/xpcom/fulltext.js +++ b/chrome/content/zotero/xpcom/fulltext.js @@ -194,25 +194,36 @@ Zotero.Fulltext = new function(){ return false; } - var sqlQues = []; - var sqlParams = []; - - for each(var word in words){ - sqlQues.push('?'); - sqlParams.push({string:word}); - } + var existing = []; + var done = 0; + var maxWords = 500; + var numWords = words.length; Zotero.DB.beginTransaction(); - var sql = "SELECT word, wordID from fulltextWords WHERE word IN (" - sql += sqlQues.join() + ")"; - var wordIDs = Zotero.DB.query(sql, sqlParams); - - var existing = []; - for (var i in wordIDs){ - // Underscore avoids problems with JS reserved words - existing['_' + wordIDs[i]['word']] = wordIDs[i]['wordID']; + do { + var chunk = words.splice(0, maxWords); + + var sqlQues = []; + var sqlParams = []; + + for each(var word in chunk) { + sqlQues.push('?'); + sqlParams.push( { string: word } ); + } + + var sql = "SELECT word, wordID from fulltextWords WHERE word IN (" + sql += sqlQues.join() + ")"; + var wordIDs = Zotero.DB.query(sql, sqlParams); + + for (var i in wordIDs) { + // Underscore avoids problems with JS reserved words + existing['_' + wordIDs[i].word] = wordIDs[i].wordID; + } + + done += chunk.length; } + while (done < numWords); Zotero.DB.query("REPLACE INTO fulltextItems (itemID, version) VALUES (?,?)", [itemID, FULLTEXT_VERSION]);