From 4b08c0b56b4a9bea25aac704b48f18037b7cff26 Mon Sep 17 00:00:00 2001 From: Alekhya Reddy Date: Mon, 6 Apr 2020 15:52:19 -0700 Subject: [PATCH 1/6] To avoid DBNull to String typecast exception --- .../Wox.Plugin.Indexer/SearchHelper/WindowsSearchAPI.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/modules/launcher/Plugins/Wox.Plugin.Indexer/SearchHelper/WindowsSearchAPI.cs b/src/modules/launcher/Plugins/Wox.Plugin.Indexer/SearchHelper/WindowsSearchAPI.cs index fb7b6ffcd1..8731155a45 100644 --- a/src/modules/launcher/Plugins/Wox.Plugin.Indexer/SearchHelper/WindowsSearchAPI.cs +++ b/src/modules/launcher/Plugins/Wox.Plugin.Indexer/SearchHelper/WindowsSearchAPI.cs @@ -31,8 +31,7 @@ namespace Wox.Plugin.Indexer.SearchHelper { while (WDSResults.Read()) { - // col 0 is our path in display format - if (WDSResults.GetString(0) != null) + if (!Convert.IsDBNull(WDSResults[0])) { var result = new SearchResult { Path = WDSResults.GetString(0) }; yield return result; From c1b3686190a7af42525846cf713c51350f322a8a Mon Sep 17 00:00:00 2001 From: Alekhya Reddy Date: Tue, 7 Apr 2020 11:29:46 -0700 Subject: [PATCH 2/6] adding checks --- .../Wox.Plugin.Indexer/SearchHelper/WindowsSearchAPI.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/modules/launcher/Plugins/Wox.Plugin.Indexer/SearchHelper/WindowsSearchAPI.cs b/src/modules/launcher/Plugins/Wox.Plugin.Indexer/SearchHelper/WindowsSearchAPI.cs index 8731155a45..84f81b1a95 100644 --- a/src/modules/launcher/Plugins/Wox.Plugin.Indexer/SearchHelper/WindowsSearchAPI.cs +++ b/src/modules/launcher/Plugins/Wox.Plugin.Indexer/SearchHelper/WindowsSearchAPI.cs @@ -29,16 +29,15 @@ namespace Wox.Plugin.Indexer.SearchHelper // execute the command, which returns the results as an OleDbDataReader. using (WDSResults = command.ExecuteReader()) { - while (WDSResults.Read()) + if(WDSResults.HasRows) { - if (!Convert.IsDBNull(WDSResults[0])) + while (WDSResults.Read() && WDSResults.GetValue(0) != DBNull.Value) { var result = new SearchResult { Path = WDSResults.GetString(0) }; yield return result; } } } - } } } @@ -88,6 +87,7 @@ namespace Wox.Plugin.Indexer.SearchHelper queryHelper.QuerySorting = "System.DateModified DESC"; } + [STAThread] public IEnumerable Search(string keyword, string pattern = "*", int maxCount = 100) { ISearchQueryHelper queryHelper; From 00940d66b1c4756e888403c05e18fa80e6f5e1c4 Mon Sep 17 00:00:00 2001 From: Alekhya Reddy Date: Tue, 7 Apr 2020 17:48:38 -0700 Subject: [PATCH 3/6] Downgraded the library to the latest stable version --- src/modules/launcher/Wox/Wox.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/launcher/Wox/Wox.csproj b/src/modules/launcher/Wox/Wox.csproj index fc0cd94bd9..e7dd511944 100644 --- a/src/modules/launcher/Wox/Wox.csproj +++ b/src/modules/launcher/Wox/Wox.csproj @@ -68,7 +68,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive - + From 3885cbd04509b14222f89b5130dd3a2d16f4ec90 Mon Sep 17 00:00:00 2001 From: Alekhya Reddy Date: Tue, 7 Apr 2020 17:52:03 -0700 Subject: [PATCH 4/6] single thread execution of the indexer plugin and InvalidOperationException due to connection being closed on ExecuteReader, handled separately --- .../Plugins/Wox.Plugin.Indexer/Main.cs | 6 +++++- .../SearchHelper/WindowsSearchAPI.cs | 19 +++++++++++++------ 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/src/modules/launcher/Plugins/Wox.Plugin.Indexer/Main.cs b/src/modules/launcher/Plugins/Wox.Plugin.Indexer/Main.cs index 8d6af797e9..b547815e76 100644 --- a/src/modules/launcher/Plugins/Wox.Plugin.Indexer/Main.cs +++ b/src/modules/launcher/Plugins/Wox.Plugin.Indexer/Main.cs @@ -87,11 +87,15 @@ namespace Wox.Plugin.Indexer results.Add(r); } } + catch(InvalidOperationException) + { + //The connection has closed, internal error of ExecuteReader() + //Not showing this exception to the users + } catch (Exception ex) { results.Add(new Result { - // TODO: Localize the string Title = ex.ToString(), IcoPath = "Images\\WindowsIndexerImg.bmp" }); diff --git a/src/modules/launcher/Plugins/Wox.Plugin.Indexer/SearchHelper/WindowsSearchAPI.cs b/src/modules/launcher/Plugins/Wox.Plugin.Indexer/SearchHelper/WindowsSearchAPI.cs index 84f81b1a95..863a717925 100644 --- a/src/modules/launcher/Plugins/Wox.Plugin.Indexer/SearchHelper/WindowsSearchAPI.cs +++ b/src/modules/launcher/Plugins/Wox.Plugin.Indexer/SearchHelper/WindowsSearchAPI.cs @@ -10,9 +10,12 @@ namespace Wox.Plugin.Indexer.SearchHelper public OleDbConnection conn; public OleDbCommand command; public OleDbDataReader WDSResults; + private readonly object _lock = new object(); + - public IEnumerable ExecuteQuery(ISearchQueryHelper queryHelper, string keyword) + public List ExecuteQuery(ISearchQueryHelper queryHelper, string keyword) { + List _Result = new List(); // Generate SQL from our parameters, converting the userQuery from AQS->WHERE clause string sqlQuery = queryHelper.GenerateSQLFromUserQuery(keyword); @@ -34,12 +37,14 @@ namespace Wox.Plugin.Indexer.SearchHelper while (WDSResults.Read() && WDSResults.GetValue(0) != DBNull.Value) { 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] public IEnumerable Search(string keyword, string pattern = "*", int maxCount = 100) { - ISearchQueryHelper queryHelper; - InitQueryHelper(out queryHelper, maxCount); - ModifyQueryHelper(ref queryHelper, pattern); - return ExecuteQuery(queryHelper, keyword); + lock(_lock){ + ISearchQueryHelper queryHelper; + InitQueryHelper(out queryHelper, maxCount); + ModifyQueryHelper(ref queryHelper, pattern); + return ExecuteQuery(queryHelper, keyword); + } } } } From bb1631302419431b974e7dcb14e8fe29c10c1efc Mon Sep 17 00:00:00 2001 From: Alekhya Reddy Date: Tue, 7 Apr 2020 18:40:13 -0700 Subject: [PATCH 5/6] Modified the test, the connection need not be null after being disposed. There is no direct way of checking if an object has been disposed other than to throw the InvalidOperationException --- .../Wox.Test/Plugins/WindowsIndexerTest.cs | 25 ++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/src/modules/launcher/Wox.Test/Plugins/WindowsIndexerTest.cs b/src/modules/launcher/Wox.Test/Plugins/WindowsIndexerTest.cs index 9df2aa5892..fae98e9ab8 100644 --- a/src/modules/launcher/Wox.Test/Plugins/WindowsIndexerTest.cs +++ b/src/modules/launcher/Wox.Test/Plugins/WindowsIndexerTest.cs @@ -132,14 +132,33 @@ namespace Wox.Test.Plugins _api.InitQueryHelper(out queryHelper, 10); _api.ModifyQueryHelper(ref queryHelper, "*"); string keyword = "test"; + bool commandDisposed = false; + bool resultDisposed = false; // Act _api.ExecuteQuery(queryHelper, keyword); + try + { + _api.command.ExecuteReader(); + } + catch(InvalidOperationException) + { + commandDisposed = true; + } + + try + { + _api.WDSResults.Read(); + } + catch(InvalidOperationException) + { + resultDisposed = true; + } // Assert - Assert.IsNull(_api.conn); - Assert.IsNull(_api.command); - Assert.IsNull(_api.WDSResults); + Assert.IsTrue(_api.conn.State == System.Data.ConnectionState.Closed); + Assert.IsTrue(commandDisposed); + Assert.IsTrue(resultDisposed); } } } From c4573e46a9c99551a463a434b8040f0e690f4287 Mon Sep 17 00:00:00 2001 From: Alekhya Reddy Date: Wed, 8 Apr 2020 09:19:49 -0700 Subject: [PATCH 6/6] Removed STAThread --- .../Plugins/Wox.Plugin.Indexer/SearchHelper/WindowsSearchAPI.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/modules/launcher/Plugins/Wox.Plugin.Indexer/SearchHelper/WindowsSearchAPI.cs b/src/modules/launcher/Plugins/Wox.Plugin.Indexer/SearchHelper/WindowsSearchAPI.cs index 863a717925..857baea11b 100644 --- a/src/modules/launcher/Plugins/Wox.Plugin.Indexer/SearchHelper/WindowsSearchAPI.cs +++ b/src/modules/launcher/Plugins/Wox.Plugin.Indexer/SearchHelper/WindowsSearchAPI.cs @@ -92,7 +92,6 @@ namespace Wox.Plugin.Indexer.SearchHelper queryHelper.QuerySorting = "System.DateModified DESC"; } - [STAThread] public IEnumerable Search(string keyword, string pattern = "*", int maxCount = 100) { lock(_lock){