Skip to content

Commit a96a654

Browse files
committed
🐞fix: Guid formatting in where clauses
Fixed Guid formatting in where clauses when using list queries (IN & NOT IN).
1 parent d37e310 commit a96a654

File tree

6 files changed

+87
-3
lines changed

6 files changed

+87
-3
lines changed

src/Simpleverse.Repository.Db.Test/Model.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,7 @@ public class Model
1313
public string String { get; set; }
1414
public bool Bool { get; set; }
1515
public bool? BoolNullable { get; set; }
16+
public Guid Guid { get; set; }
17+
public Guid? GuidNullable { get; set; }
1618
}
1719
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using Xunit;
4+
5+
namespace Simpleverse.Repository.Db.Test.QueryBuilder
6+
{
7+
public class GuidTest : QueryBuilderTestFixture
8+
{
9+
public Guid Value { get; } = Guid.NewGuid();
10+
11+
[Fact]
12+
public void TestGuid_Equals()
13+
=> Test<Model>(
14+
queryBuilder => queryBuilder.Where(x => x.Guid, Value),
15+
$"WHERE [Guid] = @Guid",
16+
new[] { "Guid" }
17+
);
18+
19+
[Fact]
20+
public void TestGuid_In()
21+
=> Test<Model>(
22+
queryBuilder => queryBuilder.Where(x => x.Guid, new List<Guid>() { Value, Value }),
23+
$"WHERE [Guid] IN ('{Value}','{Value}')",
24+
Array.Empty<string>()
25+
);
26+
27+
[Fact]
28+
public void TestGuid_NotIn()
29+
=> Test<Model>(
30+
queryBuilder => queryBuilder.WhereNot(x => x.Guid, new List<Guid>() { Value, Value }),
31+
$"WHERE [Guid] NOT IN ('{Value}','{Value}')",
32+
Array.Empty<string>()
33+
);
34+
}
35+
}

src/Simpleverse.Repository.Db/Extensions/Dapper/WhereExtensions.cs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,30 @@ public static SqlBuilder WhereNot<T, TTable>(this SqlBuilder sqlBuilder, Table<T
186186

187187
#endregion
188188

189+
#region Guid
190+
191+
public static SqlBuilder Where(this SqlBuilder sqlBuilder, string name, IEnumerable<Guid> values, string alias, bool not = false)
192+
=> sqlBuilder.Where(new Selector(name, alias), values, not: not);
193+
194+
public static SqlBuilder Where<TTable>(this SqlBuilder sqlBuilder, Table<TTable> table, Expression<Func<TTable, Guid>> column, IEnumerable<Guid> values, bool not = false)
195+
=> sqlBuilder.Where(table.Column(column), values, not: not);
196+
197+
public static SqlBuilder Where(this SqlBuilder sqlBuilder, Selector column, IEnumerable<Guid> values, bool not = false)
198+
{
199+
if (values == null || !values.Any())
200+
return sqlBuilder;
201+
202+
return sqlBuilder.Where(column.In(values, not).ToString());
203+
}
204+
205+
public static void WhereNot(this SqlBuilder sqlBuilder, string name, IEnumerable<Guid> values, string alias)
206+
=> sqlBuilder.Where(name, values, alias, not: true);
207+
208+
public static SqlBuilder WhereNot<TTable>(this SqlBuilder sqlBuilder, Table<TTable> table, Expression<Func<TTable, Guid>> column, IEnumerable<Guid> values)
209+
=> sqlBuilder.Where(table.Column(column), values, not: true);
210+
211+
#endregion
212+
189213
#region DateTime
190214

191215
public static SqlBuilder Where(this SqlBuilder sqlBuilder, string name, IEnumerable<DateTime> values, string alias, bool not = false)

src/Simpleverse.Repository.Db/QueryBuilder.cs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using Simpleverse.Repository.Db.Extensions.Dapper;
33
using System;
44
using System.Collections.Generic;
5+
using System.Linq;
56
using System.Linq.Expressions;
67

78
namespace Simpleverse.Repository.Db
@@ -338,6 +339,25 @@ public QueryBuilder<TTable> WhereNot<T>(Expression<Func<TTable, T>> column, IEnu
338339

339340
#endregion
340341

342+
#region Guid
343+
344+
public QueryBuilder<TTable> Where(Expression<Func<TTable, Guid>> column, Guid value, string condition = "=")
345+
{
346+
this.Where(Table.Column(column), value, condition: condition);
347+
return this;
348+
}
349+
350+
public QueryBuilder<TTable> Where(Expression<Func<TTable, Guid>> column, IEnumerable<Guid> values, bool not = false)
351+
{
352+
this.Where(Table.Column(column), values, not: not);
353+
return this;
354+
}
355+
356+
public QueryBuilder<TTable> WhereNot(Expression<Func<TTable, Guid>> column, IEnumerable<Guid> values)
357+
=> Where(column, values, not: true);
358+
359+
#endregion
360+
341361
#region DateTime
342362

343363
public QueryBuilder<TTable> Where(Expression<Func<TTable, DateTime>> column, IEnumerable<DateTime> values, bool not = false)

src/Simpleverse.Repository.Db/Selector.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,9 @@ public Selector In<T>(IEnumerable<T> values, bool not = false)
113113
return In(valuesJoined, not);
114114
}
115115

116+
public Selector In(IEnumerable<Guid> values, bool not = false)
117+
=> In(values.Select(x => x.ToString()), not);
118+
116119
public Selector In(IEnumerable<DateTime> values, bool not = false)
117120
{
118121
if (values == null || !values.Any())

src/Simpleverse.Repository.Db/Simpleverse.Repository.Db.csproj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@
1313
<PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance>
1414
<PackageTags>Dapper, Bulk, Merge, Upsert, Delete, Insert, Update, Repository</PackageTags>
1515
<PackageLicenseFile>LICENSE</PackageLicenseFile>
16-
<Version>2.1.24</Version>
16+
<Version>2.1.25</Version>
1717
<Description>High performance operation for MS SQL Server built for Dapper ORM. Including bulk operations Insert, Update, Delete, Get as well as Upsert both single and bulk.</Description>
18-
<AssemblyVersion>2.1.24.0</AssemblyVersion>
19-
<FileVersion>2.1.24.0</FileVersion>
18+
<AssemblyVersion>2.1.25.0</AssemblyVersion>
19+
<FileVersion>2.1.25.0</FileVersion>
2020
<RepositoryUrl>https://github.com/lukaferlez/Simpleverse.Repository</RepositoryUrl>
2121
<PackageReadmeFile>README.md</PackageReadmeFile>
2222
<EmbedAllSources>true</EmbedAllSources>

0 commit comments

Comments
 (0)