Skip to content

Commit 8c84e63

Browse files
authored
Merge pull request #310 from taooceros/OrderByOpt
Use Window Search Orderby
2 parents a3a0623 + cf60ce2 commit 8c84e63

File tree

4 files changed

+28
-30
lines changed

4 files changed

+28
-30
lines changed

Flow.Launcher.Test/Plugins/ExplorerTest.cs

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,8 @@ public void GivenWindowsIndexSearch_WhenProvidedFolderPath_ThenQueryWhereRestric
6060
$"Actual: {result}{Environment.NewLine}");
6161
}
6262

63-
[TestCase("C:\\", "SELECT TOP 100 System.FileName, System.ItemUrl, System.ItemType FROM SystemIndex WHERE directory='file:C:\\'")]
64-
[TestCase("C:\\SomeFolder\\", "SELECT TOP 100 System.FileName, System.ItemUrl, System.ItemType FROM SystemIndex WHERE directory='file:C:\\SomeFolder\\'")]
63+
[TestCase("C:\\", "SELECT TOP 100 System.FileName, System.ItemUrl, System.ItemType FROM SystemIndex WHERE directory='file:C:\\' ORDER BY System.FileName")]
64+
[TestCase("C:\\SomeFolder\\", "SELECT TOP 100 System.FileName, System.ItemUrl, System.ItemType FROM SystemIndex WHERE directory='file:C:\\SomeFolder\\' ORDER BY System.FileName")]
6565
public void GivenWindowsIndexSearch_WhenSearchTypeIsTopLevelDirectorySearch_ThenQueryShouldUseExpectedString(string folderPath, string expectedString)
6666
{
6767
// Given
@@ -79,7 +79,7 @@ public void GivenWindowsIndexSearch_WhenSearchTypeIsTopLevelDirectorySearch_Then
7979
[TestCase("C:\\SomeFolder\\flow.launcher.sln", "SELECT TOP 100 System.FileName, System.ItemUrl, System.ItemType " +
8080
"FROM SystemIndex WHERE (System.FileName LIKE 'flow.launcher.sln%' " +
8181
"OR CONTAINS(System.FileName,'\"flow.launcher.sln*\"',1033))" +
82-
" AND directory='file:C:\\SomeFolder'")]
82+
" AND directory='file:C:\\SomeFolder' ORDER BY System.FileName")]
8383
public void GivenWindowsIndexSearchTopLevelDirectory_WhenSearchingForSpecificItem_ThenQueryShouldUseExpectedString(
8484
string userSearchString, string expectedString)
8585
{
@@ -116,11 +116,8 @@ public void GivenWindowsIndexSearchTopLevelDirectory_WhenSearchingForSpecificIte
116116
[TestCase("scope='file:'")]
117117
public void GivenWindowsIndexSearch_WhenSearchAllFoldersAndFiles_ThenQueryWhereRestrictionsShouldUseScopeString(string expectedString)
118118
{
119-
// Given
120-
var queryConstructor = new QueryConstructor(new Settings());
121-
122119
//When
123-
var resultString = queryConstructor.QueryWhereRestrictionsForAllFilesAndFoldersSearch();
120+
var resultString = QueryConstructor.QueryWhereRestrictionsForAllFilesAndFoldersSearch;
124121

125122
// Then
126123
Assert.IsTrue(resultString == expectedString,
@@ -130,7 +127,7 @@ public void GivenWindowsIndexSearch_WhenSearchAllFoldersAndFiles_ThenQueryWhereR
130127

131128
[TestCase("flow.launcher.sln", "SELECT TOP 100 \"System.FileName\", \"System.ItemUrl\", \"System.ItemType\" " +
132129
"FROM \"SystemIndex\" WHERE (System.FileName LIKE 'flow.launcher.sln%' " +
133-
"OR CONTAINS(System.FileName,'\"flow.launcher.sln*\"',1033)) AND scope='file:'")]
130+
"OR CONTAINS(System.FileName,'\"flow.launcher.sln*\"',1033)) AND scope='file:' ORDER BY System.FileName")]
134131
public void GivenWindowsIndexSearch_WhenSearchAllFoldersAndFiles_ThenQueryShouldUseExpectedString(
135132
string userSearchString, string expectedString)
136133
{
@@ -205,7 +202,7 @@ public void GivenWindowsIndexSearch_WhenQueryWhereRestrictionsIsForFileContentSe
205202
}
206203

207204
[TestCase("some words", "SELECT TOP 100 System.FileName, System.ItemUrl, System.ItemType " +
208-
"FROM SystemIndex WHERE FREETEXT('some words') AND scope='file:'")]
205+
"FROM SystemIndex WHERE FREETEXT('some words') AND scope='file:' ORDER BY System.FileName")]
209206
public void GivenWindowsIndexSearch_WhenSearchForFileContent_ThenQueryShouldUseExpectedString(
210207
string userSearchString, string expectedString)
211208
{
@@ -295,9 +292,9 @@ public void WhenGivenAPath_ThenShouldReturnThePreviousDirectoryPathIfIncompleteO
295292
}
296293

297294
[TestCase("c:\\SomeFolder\\>", "scope='file:c:\\SomeFolder'")]
298-
[TestCase("c:\\SomeFolder\\>SomeName", "(System.FileName LIKE 'SomeName%' " +
299-
"OR CONTAINS(System.FileName,'\"SomeName*\"',1033)) AND " +
300-
"scope='file:c:\\SomeFolder'")]
295+
[TestCase("c:\\SomeFolder\\>SomeName", "(System.FileName LIKE 'SomeName%' "
296+
+ "OR CONTAINS(System.FileName,'\"SomeName*\"',1033)) AND "
297+
+ "scope='file:c:\\SomeFolder'")]
301298
public void GivenWindowsIndexSearch_WhenSearchPatternHotKeyIsSearchAll_ThenQueryWhereRestrictionsShouldUseScopeString(string path, string expectedString)
302299
{
303300
// Given

Plugins/Flow.Launcher.Plugin.Explorer/Search/WindowsIndex/IndexSearch.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,8 @@ internal IndexSearch(PluginInitContext context)
2424

2525
internal async Task<List<Result>> ExecuteWindowsIndexSearchAsync(string indexQueryString, string connectionString, Query query, CancellationToken token)
2626
{
27-
var folderResults = new List<Result>();
28-
var fileResults = new List<Result>();
2927
var results = new List<Result>();
28+
var fileResults = new List<Result>();
3029

3130
try
3231
{
@@ -55,7 +54,7 @@ internal async Task<List<Result>> ExecuteWindowsIndexSearchAsync(string indexQue
5554

5655
if (dataReaderResults.GetString(2) == "Directory")
5756
{
58-
folderResults.Add(resultManager.CreateFolderResult(
57+
results.Add(resultManager.CreateFolderResult(
5958
dataReaderResults.GetString(0),
6059
path,
6160
path,
@@ -83,8 +82,10 @@ internal async Task<List<Result>> ExecuteWindowsIndexSearchAsync(string indexQue
8382
LogException("General error from performing index search", e);
8483
}
8584

85+
results.AddRange(fileResults);
86+
8687
// Intial ordering, this order can be updated later by UpdateResultView.MainViewModel based on history of user selection.
87-
return results.Concat(folderResults.OrderBy(x => x.Title)).Concat(fileResults.OrderBy(x => x.Title)).ToList(); ;
88+
return results;
8889
}
8990

9091
internal async Task<List<Result>> WindowsIndexSearchAsync(string searchString, string connectionString,

Plugins/Flow.Launcher.Plugin.Explorer/Search/WindowsIndex/QueryConstructor.cs

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ internal CSearchQueryHelper CreateQueryHelper()
4242

4343
// Get the ISearchQueryHelper which will help us to translate AQS --> SQL necessary to query the indexer
4444
var queryHelper = catalogManager.GetQueryHelper();
45-
45+
4646
return queryHelper;
4747
}
4848

@@ -81,11 +81,9 @@ private string QueryWhereRestrictionsFromLocationPath(string path, string search
8181
var previousLevelDirectory = path.Substring(0, indexOfSeparator);
8282

8383
if (string.IsNullOrEmpty(itemName))
84-
return searchDepth + $"{previousLevelDirectory}'";
84+
return $"{searchDepth}{previousLevelDirectory}'";
8585

86-
return $"(System.FileName LIKE '{itemName}%' " +
87-
$"OR CONTAINS(System.FileName,'\"{itemName}*\"',1033)) AND " +
88-
searchDepth + $"{previousLevelDirectory}'";
86+
return $"(System.FileName LIKE '{itemName}%' OR CONTAINS(System.FileName,'\"{itemName}*\"',1033)) AND {searchDepth}{previousLevelDirectory}'";
8987
}
9088

9189
///<summary>
@@ -96,9 +94,9 @@ public string QueryForTopLevelDirectorySearch(string path)
9694
string query = "SELECT TOP " + settings.MaxResult + $" {CreateBaseQuery().QuerySelectColumns} FROM {SystemIndex} WHERE ";
9795

9896
if (path.LastIndexOf(Constants.AllFilesFolderSearchWildcard) > path.LastIndexOf(Constants.DirectorySeperator))
99-
return query + QueryWhereRestrictionsForTopLevelDirectoryAllFilesAndFoldersSearch(path);
97+
return query + QueryWhereRestrictionsForTopLevelDirectoryAllFilesAndFoldersSearch(path) + QueryOrderByFileNameRestriction;
10098

101-
return query + QueryWhereRestrictionsForTopLevelDirectorySearch(path);
99+
return query + QueryWhereRestrictionsForTopLevelDirectorySearch(path) + QueryOrderByFileNameRestriction;
102100
}
103101

104102
///<summary>
@@ -107,16 +105,17 @@ public string QueryForTopLevelDirectorySearch(string path)
107105
public string QueryForAllFilesAndFolders(string userSearchString)
108106
{
109107
// Generate SQL from constructed parameters, converting the userSearchString from AQS->WHERE clause
110-
return CreateBaseQuery().GenerateSQLFromUserQuery(userSearchString) + " AND " + QueryWhereRestrictionsForAllFilesAndFoldersSearch();
108+
return CreateBaseQuery().GenerateSQLFromUserQuery(userSearchString) + " AND " + QueryWhereRestrictionsForAllFilesAndFoldersSearch
109+
+ QueryOrderByFileNameRestriction;
111110
}
112111

113112
///<summary>
114113
/// Set the required WHERE clause restriction to search for all files and folders.
115114
///</summary>
116-
public string QueryWhereRestrictionsForAllFilesAndFoldersSearch()
117-
{
118-
return $"scope='file:'";
119-
}
115+
public const string QueryWhereRestrictionsForAllFilesAndFoldersSearch = "scope='file:'";
116+
117+
public const string QueryOrderByFileNameRestriction = " ORDER BY System.FileName";
118+
120119

121120
///<summary>
122121
/// Search will be performed on all indexed file contents for the specified search keywords.
@@ -125,7 +124,8 @@ public string QueryForFileContentSearch(string userSearchString)
125124
{
126125
string query = "SELECT TOP " + settings.MaxResult + $" {CreateBaseQuery().QuerySelectColumns} FROM {SystemIndex} WHERE ";
127126

128-
return query + QueryWhereRestrictionsForFileContentSearch(userSearchString) + " AND " + QueryWhereRestrictionsForAllFilesAndFoldersSearch();
127+
return query + QueryWhereRestrictionsForFileContentSearch(userSearchString) + " AND " + QueryWhereRestrictionsForAllFilesAndFoldersSearch
128+
+ QueryOrderByFileNameRestriction;
129129
}
130130

131131
///<summary>

Plugins/Flow.Launcher.Plugin.Explorer/plugin.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
"Name": "Explorer",
88
"Description": "Search and manage files and folders. Explorer utilises Windows Index Search",
99
"Author": "Jeremy Wu",
10-
"Version": "1.3.1",
10+
"Version": "1.4.0",
1111
"Language": "csharp",
1212
"Website": "https://github.com/Flow-Launcher/Flow.Launcher",
1313
"ExecuteFileName": "Flow.Launcher.Plugin.Explorer.dll",

0 commit comments

Comments
 (0)