single thread execution of the indexer plugin and InvalidOperationException due to connection being closed on ExecuteReader, handled separately

This commit is contained in:
Alekhya Reddy
2020-04-07 17:52:03 -07:00
parent 00940d66b1
commit 3885cbd045
2 changed files with 18 additions and 7 deletions

View File

@@ -87,11 +87,15 @@ namespace Wox.Plugin.Indexer
results.Add(r); results.Add(r);
} }
} }
catch(InvalidOperationException)
{
//The connection has closed, internal error of ExecuteReader()
//Not showing this exception to the users
}
catch (Exception ex) catch (Exception ex)
{ {
results.Add(new Result results.Add(new Result
{ {
// TODO: Localize the string
Title = ex.ToString(), Title = ex.ToString(),
IcoPath = "Images\\WindowsIndexerImg.bmp" IcoPath = "Images\\WindowsIndexerImg.bmp"
}); });

View File

@@ -10,9 +10,12 @@ namespace Wox.Plugin.Indexer.SearchHelper
public OleDbConnection conn; public OleDbConnection conn;
public OleDbCommand command; public OleDbCommand command;
public OleDbDataReader WDSResults; public OleDbDataReader WDSResults;
private readonly object _lock = new object();
public IEnumerable<SearchResult> ExecuteQuery(ISearchQueryHelper queryHelper, string keyword)
public List<SearchResult> ExecuteQuery(ISearchQueryHelper queryHelper, string keyword)
{ {
List<SearchResult> _Result = new List<SearchResult>();
// Generate SQL from our parameters, converting the userQuery from AQS->WHERE clause // Generate SQL from our parameters, converting the userQuery from AQS->WHERE clause
string sqlQuery = queryHelper.GenerateSQLFromUserQuery(keyword); string sqlQuery = queryHelper.GenerateSQLFromUserQuery(keyword);
@@ -34,12 +37,14 @@ namespace Wox.Plugin.Indexer.SearchHelper
while (WDSResults.Read() && WDSResults.GetValue(0) != DBNull.Value) while (WDSResults.Read() && WDSResults.GetValue(0) != DBNull.Value)
{ {
var result = new SearchResult { Path = WDSResults.GetString(0) }; var result = new SearchResult { Path = WDSResults.GetString(0) };
yield return result; _Result.Add(result);
} }
} }
} }
} }
} }
return _Result;
} }
@@ -90,10 +95,12 @@ namespace Wox.Plugin.Indexer.SearchHelper
[STAThread] [STAThread]
public IEnumerable<SearchResult> Search(string keyword, string pattern = "*", int maxCount = 100) public IEnumerable<SearchResult> Search(string keyword, string pattern = "*", int maxCount = 100)
{ {
ISearchQueryHelper queryHelper; lock(_lock){
InitQueryHelper(out queryHelper, maxCount); ISearchQueryHelper queryHelper;
ModifyQueryHelper(ref queryHelper, pattern); InitQueryHelper(out queryHelper, maxCount);
return ExecuteQuery(queryHelper, keyword); ModifyQueryHelper(ref queryHelper, pattern);
return ExecuteQuery(queryHelper, keyword);
}
} }
} }
} }