Skip to content

Commit fd241e6

Browse files
committed
feat: general improvements and minor bugs
1 parent fdb03ff commit fd241e6

2 files changed

Lines changed: 20 additions & 10 deletions

File tree

src/WebExpress.WebIndex.Test/WQL/UnitTestWqlWordSearchA.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -221,8 +221,9 @@ public void AbstracrSyntaxTree()
221221
/// Performs the incremental lookahead analysis.
222222
/// </summary>
223223
[Theory]
224-
[InlineData("", true, 0, WqlExpressionType.None, WqlExpressionType.Attribute, WqlExpressionType.OpenParenthesis)]
224+
[InlineData("", true, 1, WqlExpressionType.None, WqlExpressionType.Attribute, WqlExpressionType.OpenParenthesis, WqlExpressionType.Order, WqlExpressionType.PartitioningOperator)]
225225
[InlineData("(", false, 1, WqlExpressionType.OpenParenthesis, WqlExpressionType.Attribute, WqlExpressionType.OpenParenthesis)]
226+
[InlineData("t", false, 1, WqlExpressionType.Attribute, WqlExpressionType.Operator)]
226227
[InlineData("text", false, 1, WqlExpressionType.Attribute, WqlExpressionType.Operator)]
227228
[InlineData("text ", false, 1, WqlExpressionType.Attribute, WqlExpressionType.Operator)]
228229
[InlineData("text #", false, 2, WqlExpressionType.Operator, WqlExpressionType.Operator)]

src/WebExpress.WebIndex/Wql/WqlParser.cs

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,11 @@ private IWqlStatement<TIndexItem> Parse(string input, Queue<WqlToken> tokenQueue
191191

192192
if (string.IsNullOrWhiteSpace(input))
193193
{
194+
ilaQueue.Enqueue(new WqlLookaheadToken(new WqlToken() { Value = "" }, WqlExpressionType.None)
195+
{
196+
ExpectedNextTokens = [WqlExpressionType.Attribute, WqlExpressionType.OpenParenthesis, WqlExpressionType.Order, WqlExpressionType.PartitioningOperator]
197+
});
198+
194199
return wql;
195200
}
196201

@@ -494,10 +499,10 @@ private static WqlExpressionLogicalOperator ParseLogicalOperator(Queue<WqlToken>
494499
/// <returns>The attribute node.</returns>
495500
private WqlExpressionNodeAttribute<TIndexItem> ParseAttribute(Queue<WqlToken> tokenQueue, Queue<WqlLookaheadToken> ilaQueue)
496501
{
502+
var attributeToken = PeekToken(tokenQueue);
503+
497504
try
498505
{
499-
var attributeToken = PeekToken(tokenQueue);
500-
501506
if (attributeToken is null)
502507
{
503508
throw new WqlParseException
@@ -507,11 +512,11 @@ private WqlExpressionNodeAttribute<TIndexItem> ParseAttribute(Queue<WqlToken> to
507512
);
508513
}
509514

515+
ReadToken(tokenQueue);
516+
510517
var path = WqlPropertyPath<TIndexItem>.Parse(attributeToken.Value);
511518
var property = path.Resolve(typeof(TIndexItem));
512519

513-
ReadToken(tokenQueue);
514-
515520
if (property is not null)
516521
{
517522
ilaQueue.Enqueue(new WqlLookaheadToken(attributeToken, WqlExpressionType.Attribute)
@@ -537,11 +542,15 @@ private WqlExpressionNodeAttribute<TIndexItem> ParseAttribute(Queue<WqlToken> to
537542
}
538543
catch (Exception)
539544
{
540-
throw new WqlParseException
541-
(
542-
"webexpress.webindex:wql.attribute_unknown",
543-
[]
544-
);
545+
ilaQueue.Enqueue(new WqlLookaheadToken(attributeToken, WqlExpressionType.Attribute)
546+
{
547+
ExpectedNextTokens = [WqlExpressionType.Operator],
548+
});
549+
550+
return new WqlExpressionNodeAttribute<TIndexItem>
551+
{
552+
Name = attributeToken.Value
553+
};
545554
}
546555
}
547556

0 commit comments

Comments
 (0)