Skip to content

Commit 31981fd

Browse files
authored
Add Documentation for Dapper.SqlBuilder (Issue #688, #480) (#1679)
Add Documentation for Dapper.SqlBuilder (Issue #688, #480)
1 parent 29f3bef commit 31981fd

File tree

1 file changed

+107
-0
lines changed

1 file changed

+107
-0
lines changed

Dapper.SqlBuilder/Readme.md

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
Dapper.SqlBuilder - a simple sql formatter for .Net
2+
========================================
3+
[![Build status](https://ci.appveyor.com/api/projects/status/1w448i6nfxd14w75?svg=true)](https://ci.appveyor.com/project/StackExchange/dapper-SqlBuilder)
4+
5+
Packages
6+
--------
7+
8+
MyGet Pre-release feed: https://www.myget.org/gallery/dapper
9+
10+
| Package | NuGet Stable | NuGet Pre-release | Downloads | MyGet |
11+
| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ |
12+
| [Dapper.SqlBuilder](https://www.nuget.org/packages/Dapper.SqlBuilder/) | [![Dapper.SqlBuilder](https://img.shields.io/nuget/v/Dapper.SqlBuilder.svg)](https://www.nuget.org/packages/Dapper.SqlBuilder/) | [![Dapper.SqlBuilder](https://img.shields.io/nuget/vpre/Dapper.SqlBuilder.svg)](https://www.nuget.org/packages/Dapper.SqlBuilder/) | [![Dapper.SqlBuilder](https://img.shields.io/nuget/dt/Dapper.SqlBuilder.svg)](https://www.nuget.org/packages/Dapper.SqlBuilder/) | [![Dapper.SqlBuilder MyGet](https://img.shields.io/myget/dapper/vpre/Dapper.SqlBuilder.svg)](https://www.myget.org/feed/dapper/package/nuget/Dapper.SqlBuilder) |
13+
14+
Features
15+
--------
16+
17+
Dapper.SqlBuilder contains a number of helper methods for generating sql.
18+
19+
The list of extension methods in Dapper.SqlBuilder right now are:
20+
21+
```csharp
22+
SqlBuilder AddParameters(dynamic parameters);
23+
SqlBuilder Select(string sql, dynamic parameters = null);
24+
SqlBuilder Where(string sql, dynamic parameters = null);
25+
SqlBuilder OrWhere(string sql, dynamic parameters = null);
26+
SqlBuilder OrderBy(string sql, dynamic parameters = null);
27+
SqlBuilder GroupBy(string sql, dynamic parameters = null);
28+
SqlBuilder Having(string sql, dynamic parameters = null);
29+
SqlBuilder Set(string sql, dynamic parameters = null);
30+
SqlBuilder Join(string sql, dynamic parameters = null);
31+
SqlBuilder InnerJoin(string sql, dynamic parameters = null);
32+
SqlBuilder LeftJoin(string sql, dynamic parameters = null);
33+
SqlBuilder RightJoin(string sql, dynamic parameters = null);
34+
SqlBuilder Intersect(string sql, dynamic parameters = null);
35+
```
36+
37+
38+
Template
39+
--------
40+
41+
SqlBuilder allows you to generate N SQL templates from a composed query, it can easily format sql when you are attaching parameters and how, e.g:
42+
```csharp
43+
var builder = new SqlBuilder()
44+
.Where("a = @a", new { a = 1 })
45+
.Where("b = @b", new { b = 2 })
46+
.OrderBy("a")
47+
.OrderBy("b");
48+
var counter = builder.AddTemplate("select count(*) from table /**where**/");
49+
var selector = builder.AddTemplate("select * from table /**where**/ /**orderby**/");
50+
var count = cnn.Query(counter.RawSql, counter.Parameters).Single();
51+
var rows = cnn.Query(selector.RawSql, selector.Parameters);
52+
```
53+
54+
it's same as
55+
```csharp
56+
var count = cnn.Query("select count(*) from table where a = @a and b = @b", new { a = 1, b = 1 });
57+
var rows = cnn.Query("select * from table where a = @a and b = @b order by a, b", new { a = 1, b = 1 });
58+
```
59+
60+
Dynamic Filter Paging Example
61+
----------
62+
63+
```csharp
64+
var builder = new SqlBuilder();
65+
var selectTemplate = builder.AddTemplate(@"select X.* from (
66+
select us.*, ROW_NUMBER() OVER (/**orderby**/) AS RowNumber
67+
from Users us
68+
/**where**/
69+
) as X
70+
where RowNumber between @start and @finish", new { start, finish });
71+
var countTemplate = builder.AddTemplate(@"select count(*) from Users /**where**/");
72+
73+
if (userId.HasValue())
74+
builder.Where($"t.userId = @{nameof(userId)}", new { userId });
75+
if (isCancel)
76+
builder.Where($"t.isCancel = @{nameof(isCancel)}", new { isCancel });
77+
78+
builder.OrderBy(string.Format("t.id {0}", orderDesc ? "desc" : "asc"));
79+
80+
var users = conn.Query<User>(selectTemplate.RawSql, selectTemplate.Parameters);
81+
var count = conn.ExecuteScalar<int>(countTemplate.RawSql, countTemplate.Parameters);
82+
//..etc..
83+
```
84+
85+
Limitations and caveats
86+
--------
87+
88+
OrWhere use `and` not `or` to concat sql problem
89+
90+
[Issue 647](https://github.com/DapperLib/Dapper/issues/647)
91+
92+
```csharp
93+
sql.Where("a = @a1");
94+
sql.OrWhere("b = @b1");
95+
sql.Where("a = @a2");
96+
sql.OrWhere("b = @b2");
97+
```
98+
99+
SqlBuilder will generate sql
100+
```sql=
101+
a = @a1 AND b = @b1 AND a = @a2 AND b = @b2
102+
```
103+
104+
not
105+
```sql
106+
a = @a1 OR b = @b1 AND a = @a2 OR b = @b2
107+
```

0 commit comments

Comments
 (0)