Skip to content

Commit 3df3d55

Browse files
#76 Fixed default operator not being applied to right hand side of group node in GenerateQueryVisitor (#77)
Co-authored-by: Richard Cockerill <[email protected]>
1 parent 56e348b commit 3df3d55

File tree

2 files changed

+51
-2
lines changed

2 files changed

+51
-2
lines changed

src/Foundatio.Parsers.LuceneQueries/Nodes/GroupNode.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ public string ToString(GroupOperator defaultOperator) {
9191
builder.Append("(");
9292

9393
if (Left != null)
94-
builder.Append(Left);
94+
builder.Append(Left is GroupNode ? ((GroupNode) Left).ToString(defaultOperator) : Left.ToString());
9595

9696
if (Left != null && Right != null) {
9797
if (op == GroupOperator.And)
@@ -103,7 +103,7 @@ public string ToString(GroupOperator defaultOperator) {
103103
}
104104

105105
if (Right != null)
106-
builder.Append(Right);
106+
builder.Append(Right is GroupNode ? ((GroupNode)Right).ToString(defaultOperator) : Right.ToString());
107107

108108
if (HasParens)
109109
builder.Append(")");
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
using System;
2+
using Foundatio.Parsers.LuceneQueries.Visitors;
3+
using Xunit;
4+
using Xunit.Abstractions;
5+
using System.Threading.Tasks;
6+
using Foundatio.Parsers.LuceneQueries.Nodes;
7+
using Foundatio.Xunit;
8+
using Pegasus.Common.Tracing;
9+
using Microsoft.Extensions.Logging;
10+
11+
namespace Foundatio.Parsers.LuceneQueries.Tests;
12+
13+
public class GenerateQueryVisitorTests : TestWithLoggingBase {
14+
public GenerateQueryVisitorTests(ITestOutputHelper output) : base(output) {
15+
Log.MinimumLevel = LogLevel.Trace;
16+
}
17+
18+
[Theory]
19+
[InlineData("value1 value2", GroupOperator.Default, "value1 value2")]
20+
[InlineData("value1 value2", GroupOperator.And, "value1 AND value2")]
21+
[InlineData("value1 value2", GroupOperator.Or, "value1 OR value2")]
22+
[InlineData("value1 value2 value3", GroupOperator.Default, "value1 value2 value3")]
23+
[InlineData("value1 value2 value3", GroupOperator.And, "value1 AND value2 AND value3")]
24+
[InlineData("value1 value2 value3", GroupOperator.Or, "value1 OR value2 OR value3")]
25+
[InlineData("value1 value2 value3 value4", GroupOperator.And, "value1 AND value2 AND value3 AND value4")]
26+
[InlineData("(value1 value2) OR (value3 value4)", GroupOperator.And, "(value1 AND value2) OR (value3 AND value4)")]
27+
public Task DefaultOperatorApplied(string query, GroupOperator groupOperator, string expected) {
28+
return GenerateQuery(query, groupOperator, expected);
29+
}
30+
31+
private async Task GenerateQuery(string query, GroupOperator defaultOperator, string expected) {
32+
#if ENABLE_TRACING
33+
var tracer = new LoggingTracer(_logger, reportPerformance: true);
34+
#else
35+
var tracer = NullTracer.Instance;
36+
#endif
37+
var parser = new LuceneQueryParser {
38+
Tracer = tracer
39+
};
40+
41+
IQueryNode parsedQuery = await parser.ParseAsync(query);
42+
43+
var context = new QueryVisitorContext { DefaultOperator = defaultOperator };
44+
string result = GenerateQueryVisitor.Run(parsedQuery, context);
45+
string nodes = await DebugQueryVisitor.RunAsync(parsedQuery);
46+
_logger.LogInformation(nodes);
47+
Assert.Equal(expected, result);
48+
}
49+
}

0 commit comments

Comments
 (0)