-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Introduced inline parameters for raw queries to provide more flexibil…
…ity around query generation
- Loading branch information
Showing
11 changed files
with
255 additions
and
41 deletions.
There are no files selected for viewing
20 changes: 20 additions & 0 deletions
20
src/DatabaseBenchmark/Databases/Common/InlineParameterFormatter.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
using DatabaseBenchmark.Common; | ||
|
||
namespace DatabaseBenchmark.Databases.Common | ||
{ | ||
public static class InlineParameterFormatter | ||
{ | ||
public static string Format(string format, object value) => | ||
value switch | ||
{ | ||
null => null, | ||
bool b => b.ToString().ToLower(), | ||
int n => n.ToString(format), | ||
long n => n.ToString(format), | ||
double n => n.ToString(format), | ||
DateTime dt => dt.ToString(format ?? "s"), | ||
Guid g => g.ToString(format), | ||
_ => value.ToString() | ||
}; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
45 changes: 45 additions & 0 deletions
45
tests/DatabaseBenchmark.Tests/Databases/ElasticsearchRawQueryBuilderTests.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
using DatabaseBenchmark.Databases.Elasticsearch; | ||
using DatabaseBenchmark.Tests.Utils; | ||
using Nest; | ||
using System.IO; | ||
using Xunit; | ||
|
||
namespace DatabaseBenchmark.Tests.Databases | ||
{ | ||
public class ElasticsearchRawQueryBuilderTests | ||
{ | ||
[Fact] | ||
public void BuildParameterizedQuery() | ||
{ | ||
var query = SampleInputs.RawElasticsearchQuery; | ||
//TODO: Find a better way to instantiate the default serializer | ||
var serializer = new ElasticClient().RequestResponseSerializer; | ||
var builder = new ElasticsearchRawQueryBuilder(query, serializer, null); | ||
|
||
var searchRequest = builder.Build(); | ||
|
||
using var stream = new MemoryStream(); | ||
serializer.Serialize(searchRequest, stream); | ||
var queryText = stream.ReadAsString(); | ||
|
||
Assert.Equal(@"{""query"":{""bool"":{""must"":[{""term"":{""category"":{""value"":""ABC""}}},{""range"":{""createdDate"":{""gte"":""2020-01-02T03:04:05""}}},{""range"":{""price"":{""lte"":25.5}}},{""term"":{""available"":{""value"":true}}}]}}}", queryText); | ||
} | ||
|
||
[Fact] | ||
public void BuildInlineParameterizedQuery() | ||
{ | ||
var query = SampleInputs.RawElasticsearchInlineQuery; | ||
//TODO: Find a better way to instantiate the default serializer | ||
var serializer = new ElasticClient().RequestResponseSerializer; | ||
var builder = new ElasticsearchRawQueryBuilder(query, serializer, null); | ||
|
||
var searchRequest = builder.Build(); | ||
|
||
using var stream = new MemoryStream(); | ||
serializer.Serialize(searchRequest, stream); | ||
var queryText = stream.ReadAsString(); | ||
|
||
Assert.Equal(@"{""query"":{""bool"":{""must"":[{""term"":{""category"":{""value"":""ABC""}}},{""range"":{""createdDate"":{""gte"":""2020-01-02T03:04:05""}}},{""range"":{""price"":{""lte"":25.5}}},{""term"":{""available"":{""value"":true}}}]}}}", queryText); | ||
} | ||
} | ||
} |
35 changes: 35 additions & 0 deletions
35
tests/DatabaseBenchmark.Tests/Databases/MongoDbRawQueryBuilderTests.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
using DatabaseBenchmark.Databases.MongoDb; | ||
using DatabaseBenchmark.Tests.Utils; | ||
using Microsoft.IdentityModel.Tokens; | ||
using MongoDB.Bson; | ||
using Xunit; | ||
|
||
namespace DatabaseBenchmark.Tests.Databases | ||
{ | ||
public class MongoDbRawQueryBuilderTests | ||
{ | ||
[Fact] | ||
public void BuildParameterizedQuery() | ||
{ | ||
var query = SampleInputs.RawMongoDbQuery; | ||
var builder = new MongoDbRawQueryBuilder(query, null); | ||
|
||
var queryParts = builder.Build(); | ||
|
||
var queryText = new BsonArray(queryParts).ToString(); | ||
Assert.Equal(@"[{ ""$match"" : { ""$and"" : [{ ""category"" : ""ABC"" }, { ""createdDate"" : { ""$gte"" : ""2020-01-02T03:04:05"" } }, { ""price"" : { ""$lte"" : 25.5 } }, { ""available"" : true }] } }]", queryText); | ||
} | ||
|
||
[Fact] | ||
public void BuildInlineParameterizedQuery() | ||
{ | ||
var query = SampleInputs.RawMongoDbInlineQuery; | ||
var builder = new MongoDbRawQueryBuilder(query, null); | ||
|
||
var queryParts = builder.Build(); | ||
|
||
var queryText = new BsonArray(queryParts).ToString(); | ||
Assert.Equal(@"[{ ""$match"" : { ""$and"" : [{ ""category"" : ""ABC"" }, { ""createdDate"" : { ""$gte"" : ""2020-01-02T03:04:05"" } }, { ""price"" : { ""$lte"" : 25.5 } }, { ""available"" : true }] } }]", queryText); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.