Skip to content

Commit 1623b15

Browse files
author
Minh Le
committed
update baseline
1 parent 5d9e380 commit 1623b15

File tree

8 files changed

+238
-76
lines changed

8 files changed

+238
-76
lines changed

Microsoft.Azure.Cosmos/src/Query/Core/Parser/CstToAstVisitor.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -410,7 +410,7 @@ public override SqlObject VisitScore_expression_order_by_item([NotNull] sqlParse
410410
Contract.Requires(context != null);
411411

412412
SqlFunctionCallScalarExpression expression = (SqlFunctionCallScalarExpression)this.Visit(context.function_call_scalar_expression());
413-
bool isDescending = false;
413+
bool? isDescending = null;
414414
if (context.sort_order() != null)
415415
{
416416
if (context.sort_order().K_ASC() != null)

Microsoft.Azure.Cosmos/src/SqlObjects/SqlOrderbyClause.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,8 @@ private SqlOrderByClause(ImmutableArray<SqlScoreExpressionOrderByItem> scoreExpr
3939
throw new ArgumentException($"{nameof(sqlOrderbyItem)} must not have null items.");
4040
}
4141
}
42-
42+
43+
this.ScoreExpressionOrderByItems = scoreExpressionOrderByItems;
4344
this.Rank = true;
4445
}
4546

Microsoft.Azure.Cosmos/src/SqlObjects/SqlScoreExpressionOrderByItem.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,19 +17,19 @@ sealed class SqlScoreExpressionOrderByItem : SqlObject
1717
{
1818
private SqlScoreExpressionOrderByItem(
1919
SqlFunctionCallScalarExpression expression,
20-
bool isDescending)
20+
bool? isDescending)
2121
{
2222
this.Expression = expression ?? throw new ArgumentNullException(nameof(expression));
23-
this.IsDescending = isDescending;
23+
if (isDescending.HasValue) this.IsDescending = isDescending;
2424
}
2525

2626
public SqlFunctionCallScalarExpression Expression { get; }
2727

28-
public bool IsDescending { get; }
28+
public bool? IsDescending { get; }
2929

3030
public static SqlScoreExpressionOrderByItem Create(
3131
SqlFunctionCallScalarExpression expression,
32-
bool isDescending)
32+
bool? isDescending)
3333
{
3434
return new SqlScoreExpressionOrderByItem(expression, isDescending);
3535
}

Microsoft.Azure.Cosmos/src/SqlObjects/Visitors/SqlObjectHasher.cs

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -533,16 +533,14 @@ public override int Visit(SqlQuery sqlQuery)
533533
public override int Visit(SqlScoreExpressionOrderByItem sqlOrderByItem)
534534
{
535535
int hashCode = SqlScoreExpressionOrderbyItemHashCode;
536-
hashCode = CombineHashes(hashCode, sqlOrderByItem.Expression.Accept(this));
537-
if (sqlOrderByItem.IsDescending)
538-
{
539-
hashCode = CombineHashes(hashCode, SqlScoreExpressionOrderbyItemDescendingHashCode);
540-
}
541-
else
542-
{
543-
hashCode = CombineHashes(hashCode, SqlScoreExpressionOrderbyItemAscendingHashCode);
544-
}
545-
536+
hashCode = CombineHashes(hashCode, sqlOrderByItem.Expression.Accept(this));
537+
if (sqlOrderByItem.IsDescending.HasValue)
538+
{
539+
hashCode = sqlOrderByItem.IsDescending.Value
540+
? CombineHashes(hashCode, SqlScoreExpressionOrderbyItemDescendingHashCode)
541+
: CombineHashes(hashCode, SqlScoreExpressionOrderbyItemAscendingHashCode);
542+
}
543+
546544
return hashCode;
547545
}
548546

Microsoft.Azure.Cosmos/src/SqlObjects/Visitors/SqlObjectTextSerializer.cs

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -522,13 +522,16 @@ public override void Visit(SqlQuery sqlQuery)
522522
public override void Visit(SqlScoreExpressionOrderByItem sqlScoreExpressionOrderByItem)
523523
{
524524
sqlScoreExpressionOrderByItem.Expression.Accept(this);
525-
if (sqlScoreExpressionOrderByItem.IsDescending)
526-
{
527-
this.writer.Write(" DESC");
528-
}
529-
else
530-
{
531-
this.writer.Write(" ASC");
525+
if (sqlScoreExpressionOrderByItem.IsDescending.HasValue)
526+
{
527+
if (sqlScoreExpressionOrderByItem.IsDescending.Value)
528+
{
529+
this.writer.Write(" DESC");
530+
}
531+
else
532+
{
533+
this.writer.Write(" ASC");
534+
}
532535
}
533536
}
534537

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
<Results>
2+
<Result>
3+
<Input>
4+
<Description><![CDATA[Basic]]></Description>
5+
<Query><![CDATA[SELECT * ORDER BY RANK FullTextScore(c.text, ["keyword"]), FullTextScore(c.text2, ["keyword"]), FullTextScore(c.text3, ["keyword"])]]></Query>
6+
</Input>
7+
<Output>
8+
<ParsedQuery><![CDATA[SELECT * ORDER BY RANK FullTextScore(c.text, ["keyword"]), FullTextScore(c.text2, ["keyword"]), FullTextScore(c.text3, ["keyword"])]]></ParsedQuery>
9+
</Output>
10+
</Result>
11+
<Result>
12+
<Input>
13+
<Description><![CDATA[Only one sort order]]></Description>
14+
<Query><![CDATA[SELECT * ORDER BY RANK FullTextScore(c.text, ["keyword"]) ASC, FullTextScore(c.text2, ["keyword"]) ASC, FullTextScore(c.text3, ["keyword"]) ASC]]></Query>
15+
</Input>
16+
<Output>
17+
<ParsedQuery><![CDATA[SELECT * ORDER BY RANK FullTextScore(c.text, ["keyword"]) ASC, FullTextScore(c.text2, ["keyword"]) ASC, FullTextScore(c.text3, ["keyword"]) ASC]]></ParsedQuery>
18+
</Output>
19+
</Result>
20+
<Result>
21+
<Input>
22+
<Description><![CDATA[All sort order]]></Description>
23+
<Query><![CDATA[SELECT * ORDER BY RANK FullTextScore(c.text, ["keyword"]) ASC, FullTextScore(c.text2, ["keyword"]) DESC, FullTextScore(c.text3, ["keyword"]) ASC]]></Query>
24+
</Input>
25+
<Output>
26+
<ParsedQuery><![CDATA[SELECT * ORDER BY RANK FullTextScore(c.text, ["keyword"]) ASC, FullTextScore(c.text2, ["keyword"]) DESC, FullTextScore(c.text3, ["keyword"]) ASC]]></ParsedQuery>
27+
</Output>
28+
</Result>
29+
<Result>
30+
<Input>
31+
<Description><![CDATA[Trailing comma]]></Description>
32+
<Query><![CDATA[SELECT * ORDER BY RANK FullTextScore(c.text, ["keyword"]) ASC,]]></Query>
33+
</Input>
34+
<Output>
35+
<Exception><![CDATA[Exception of type 'Antlr4.Runtime.NoViableAltException' was thrown.]]></Exception>
36+
</Output>
37+
</Result>
38+
<Result>
39+
<Input>
40+
<Description><![CDATA[All fields not function call]]></Description>
41+
<Query><![CDATA[SELECT * ORDER BY RANK 1, 2, 3]]></Query>
42+
</Input>
43+
<Output>
44+
<Exception><![CDATA[Exception of type 'Antlr4.Runtime.NoViableAltException' was thrown.]]></Exception>
45+
</Output>
46+
</Result>
47+
<Result>
48+
<Input>
49+
<Description><![CDATA[Some fields not function call]]></Description>
50+
<Query><![CDATA[SELECT * ORDER BY RANK RANK FullTextScore(c.text, ["keyword"]) ASC, 2, 3 ASC]]></Query>
51+
</Input>
52+
<Output>
53+
<Exception><![CDATA[Exception of type 'Antlr4.Runtime.NoViableAltException' was thrown.]]></Exception>
54+
</Output>
55+
</Result>
56+
</Results>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
<Results>
2+
<Result>
3+
<Input>
4+
<Description><![CDATA[Basic]]></Description>
5+
<Query><![CDATA[SELECT * ORDER BY RANK FullTextScore(c.text, ["keyword"])]]></Query>
6+
</Input>
7+
<Output>
8+
<ParsedQuery><![CDATA[SELECT * ORDER BY RANK FullTextScore(c.text, ["keyword"])]]></ParsedQuery>
9+
</Output>
10+
</Result>
11+
<Result>
12+
<Input>
13+
<Description><![CDATA[Ascending]]></Description>
14+
<Query><![CDATA[SELECT * ORDER BY RANK FullTextScore(c.text, ["keyword"]) ASC]]></Query>
15+
</Input>
16+
<Output>
17+
<ParsedQuery><![CDATA[SELECT * ORDER BY RANK FullTextScore(c.text, ["keyword"]) ASC]]></ParsedQuery>
18+
</Output>
19+
</Result>
20+
<Result>
21+
<Input>
22+
<Description><![CDATA[Descending]]></Description>
23+
<Query><![CDATA[SELECT * ORDER BY RANK FullTextScore(c.text, ["keyword"]) DESC]]></Query>
24+
</Input>
25+
<Output>
26+
<ParsedQuery><![CDATA[SELECT * ORDER BY RANK FullTextScore(c.text, ["keyword"]) DESC]]></ParsedQuery>
27+
</Output>
28+
</Result>
29+
<Result>
30+
<Input>
31+
<Description><![CDATA[Case Insensitive]]></Description>
32+
<Query><![CDATA[SELECT * OrDeR By rANk FullTextScore(c.text, ["keyword"]) DeSc]]></Query>
33+
</Input>
34+
<Output>
35+
<ParsedQuery><![CDATA[SELECT * ORDER BY RANK FullTextScore(c.text, ["keyword"]) DESC]]></ParsedQuery>
36+
</Output>
37+
</Result>
38+
<Result>
39+
<Input>
40+
<Description><![CDATA[No spaces]]></Description>
41+
<Query><![CDATA[SELECT * ORDERBYRANK FullTextScore(c.text, ["keyword"])]]></Query>
42+
</Input>
43+
<Output>
44+
<Exception><![CDATA[can not recover.]]></Exception>
45+
</Output>
46+
</Result>
47+
<Result>
48+
<Input>
49+
<Description><![CDATA[Wrong Keyword]]></Description>
50+
<Query><![CDATA[SELECT * ORDER BY RANKS FullTextScore(c.text, ["keyword"])]]></Query>
51+
</Input>
52+
<Output>
53+
<Exception><![CDATA[can not recover.]]></Exception>
54+
</Output>
55+
</Result>
56+
<Result>
57+
<Input>
58+
<Description><![CDATA[Not a function call]]></Description>
59+
<Query><![CDATA[SELECT * ORDER BY RANK 1]]></Query>
60+
</Input>
61+
<Output>
62+
<Exception><![CDATA[Exception of type 'Antlr4.Runtime.NoViableAltException' was thrown.]]></Exception>
63+
</Output>
64+
</Result>
65+
</Results>
Lines changed: 92 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -1,54 +1,93 @@
1-
//------------------------------------------------------------
2-
// Copyright (c) Microsoft Corporation. All rights reserved.
3-
//------------------------------------------------------------
4-
5-
namespace Microsoft.Azure.Cosmos.Tests.Query.Parser
6-
{
7-
using System.Collections.Generic;
8-
using Microsoft.VisualStudio.TestTools.UnitTesting;
9-
10-
[TestClass]
11-
public sealed class OrderByClauseSqlParserBaselineTests : SqlParserBaselineTests
12-
{
13-
[TestMethod]
14-
public void SingleOrderBy()
15-
{
16-
List<SqlParserBaselineTestInput> inputs = new List<SqlParserBaselineTestInput>()
17-
{
18-
// Positive
19-
CreateInput(description: "Basic", orderByClause: "ORDER BY 1"),
20-
CreateInput(description: "Ascending", orderByClause: "ORDER BY 1 asc"),
21-
CreateInput(description: "Multi Item Array", orderByClause: "ORDER BY 1 DESC"),
22-
CreateInput(description: "Case Insensitive", orderByClause: "OrDeR By 1 DeSc"),
23-
24-
// Negative
25-
CreateInput(description: "No spaces", orderByClause: "ORDERBY 1"),
26-
CreateInput(description: "Wrong Keyword", orderByClause: "ORER BY 1"),
27-
};
28-
29-
this.ExecuteTestSuite(inputs);
30-
}
31-
32-
[TestMethod]
33-
public void MultiOrderBy()
34-
{
35-
List<SqlParserBaselineTestInput> inputs = new List<SqlParserBaselineTestInput>()
36-
{
37-
// Positive
38-
CreateInput(description: "Basic", orderByClause: "ORDER BY 1, 2, 3"),
39-
CreateInput(description: "Only one sort order", orderByClause: "ORDER BY 1, 2 DESC, 3"),
40-
CreateInput(description: "All sort order", orderByClause: "ORDER BY 1 ASC, 2 DESC, 3 ASC"),
41-
42-
// Negative
43-
CreateInput(description: "Trailing comma", orderByClause: "ORDER BY 1 ASC,"),
44-
};
45-
46-
this.ExecuteTestSuite(inputs);
47-
}
48-
49-
public static SqlParserBaselineTestInput CreateInput(string description, string orderByClause)
50-
{
51-
return new SqlParserBaselineTestInput(description, $"SELECT * {orderByClause}");
52-
}
53-
}
1+
//------------------------------------------------------------
2+
// Copyright (c) Microsoft Corporation. All rights reserved.
3+
//------------------------------------------------------------
4+
5+
namespace Microsoft.Azure.Cosmos.Tests.Query.Parser
6+
{
7+
using System.Collections.Generic;
8+
using Microsoft.VisualStudio.TestTools.UnitTesting;
9+
10+
[TestClass]
11+
public sealed class OrderByClauseSqlParserBaselineTests : SqlParserBaselineTests
12+
{
13+
[TestMethod]
14+
public void SingleOrderBy()
15+
{
16+
List<SqlParserBaselineTestInput> inputs = new List<SqlParserBaselineTestInput>()
17+
{
18+
// Positive
19+
CreateInput(description: "Basic", orderByClause: "ORDER BY 1"),
20+
CreateInput(description: "Ascending", orderByClause: "ORDER BY 1 asc"),
21+
CreateInput(description: "Multi Item Array", orderByClause: "ORDER BY 1 DESC"),
22+
CreateInput(description: "Case Insensitive", orderByClause: "OrDeR By 1 DeSc"),
23+
24+
// Negative
25+
CreateInput(description: "No spaces", orderByClause: "ORDERBY 1"),
26+
CreateInput(description: "Wrong Keyword", orderByClause: "ORER BY 1"),
27+
};
28+
29+
this.ExecuteTestSuite(inputs);
30+
}
31+
32+
[TestMethod]
33+
public void MultiOrderBy()
34+
{
35+
List<SqlParserBaselineTestInput> inputs = new List<SqlParserBaselineTestInput>()
36+
{
37+
// Positive
38+
CreateInput(description: "Basic", orderByClause: "ORDER BY 1, 2, 3"),
39+
CreateInput(description: "Only one sort order", orderByClause: "ORDER BY 1, 2 DESC, 3"),
40+
CreateInput(description: "All sort order", orderByClause: "ORDER BY 1 ASC, 2 DESC, 3 ASC"),
41+
42+
// Negative
43+
CreateInput(description: "Trailing comma", orderByClause: "ORDER BY 1 ASC,"),
44+
};
45+
46+
this.ExecuteTestSuite(inputs);
47+
}
48+
49+
[TestMethod]
50+
public void SingleOrderByRank()
51+
{
52+
List<SqlParserBaselineTestInput> inputs = new List<SqlParserBaselineTestInput>()
53+
{
54+
// Positive
55+
CreateInput(description: "Basic", orderByClause: "ORDER BY RANK FullTextScore(c.text, [\"keyword\"])"),
56+
CreateInput(description: "Ascending", orderByClause: "ORDER BY RANK FullTextScore(c.text, [\"keyword\"]) ASC"),
57+
CreateInput(description: "Descending", orderByClause: "ORDER BY RANK FullTextScore(c.text, [\"keyword\"]) DESC"),
58+
CreateInput(description: "Case Insensitive", orderByClause: "OrDeR By rANk FullTextScore(c.text, [\"keyword\"]) DeSc"),
59+
60+
// Negative
61+
CreateInput(description: "No spaces", orderByClause: "ORDERBYRANK FullTextScore(c.text, [\"keyword\"])"),
62+
CreateInput(description: "Wrong Keyword", orderByClause: "ORDER BY RANKS FullTextScore(c.text, [\"keyword\"])"),
63+
CreateInput(description: "Not a function call", orderByClause: "ORDER BY RANK 1")
64+
};
65+
66+
this.ExecuteTestSuite(inputs);
67+
}
68+
69+
[TestMethod]
70+
public void MultiOrderByRank()
71+
{
72+
List<SqlParserBaselineTestInput> inputs = new List<SqlParserBaselineTestInput>()
73+
{
74+
// Positive
75+
CreateInput(description: "Basic", orderByClause: "ORDER BY RANK FullTextScore(c.text, [\"keyword\"]), FullTextScore(c.text2, [\"keyword\"]), FullTextScore(c.text3, [\"keyword\"])"),
76+
CreateInput(description: "Only one sort order", orderByClause: "ORDER BY RANK FullTextScore(c.text, [\"keyword\"]) ASC, FullTextScore(c.text2, [\"keyword\"]) ASC, FullTextScore(c.text3, [\"keyword\"]) ASC"),
77+
CreateInput(description: "All sort order", orderByClause: "ORDER BY RANK FullTextScore(c.text, [\"keyword\"]) ASC, FullTextScore(c.text2, [\"keyword\"]) DESC, FullTextScore(c.text3, [\"keyword\"]) ASC"),
78+
79+
// Negative
80+
CreateInput(description: "Trailing comma", orderByClause: "ORDER BY RANK FullTextScore(c.text, [\"keyword\"]) ASC,"),
81+
CreateInput(description: "All fields not function call", orderByClause: "ORDER BY RANK 1, 2, 3"),
82+
CreateInput(description: "Some fields not function call", orderByClause: "ORDER BY RANK RANK FullTextScore(c.text, [\"keyword\"]) ASC, 2, 3 ASC")
83+
};
84+
85+
this.ExecuteTestSuite(inputs);
86+
}
87+
88+
public static SqlParserBaselineTestInput CreateInput(string description, string orderByClause)
89+
{
90+
return new SqlParserBaselineTestInput(description, $"SELECT * {orderByClause}");
91+
}
92+
}
5493
}

0 commit comments

Comments
 (0)