Skip to content

Commit 9ac52a2

Browse files
merge
2 parents bd50953 + 33f64df commit 9ac52a2

37 files changed

Lines changed: 1200 additions & 1142 deletions
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
using SqlKata.Compilers;
2+
using SqlKata.Tests.Infrastructure;
3+
using Xunit;
4+
5+
namespace SqlKata.Tests
6+
{
7+
public class AggregateTests : TestSupport
8+
{
9+
[Fact]
10+
public void Count()
11+
{
12+
var query = new Query("A").AsCount();
13+
14+
var c = Compile(query);
15+
16+
Assert.Equal("SELECT COUNT(*) AS [count] FROM [A]", c[EngineCodes.SqlServer]);
17+
Assert.Equal("SELECT COUNT(*) AS `count` FROM `A`", c[EngineCodes.MySql]);
18+
Assert.Equal("SELECT COUNT(*) AS \"count\" FROM \"A\"", c[EngineCodes.PostgreSql]);
19+
Assert.Equal("SELECT COUNT(*) AS \"COUNT\" FROM \"A\"", c[EngineCodes.Firebird]);
20+
}
21+
22+
[Fact]
23+
public void CountMultipleColumns()
24+
{
25+
var query = new Query("A").AsCount("ColumnA", "ColumnB");
26+
27+
var c = Compile(query);
28+
29+
Assert.Equal("SELECT COUNT(*) AS [count] FROM (SELECT 1 FROM [A] WHERE [ColumnA] IS NOT NULL AND [ColumnB] IS NOT NULL) AS [countQuery]", c[EngineCodes.SqlServer]);
30+
}
31+
32+
[Fact]
33+
public void DistinctCount()
34+
{
35+
var query = new Query("A").Distinct().AsCount();
36+
37+
var c = Compile(query);
38+
39+
Assert.Equal("SELECT COUNT(*) AS [count] FROM (SELECT DISTINCT * FROM [A]) AS [countQuery]", c[EngineCodes.SqlServer]);
40+
}
41+
42+
[Fact]
43+
public void DistinctCountMultipleColumns()
44+
{
45+
var query = new Query("A").Distinct().AsCount("ColumnA", "ColumnB");
46+
47+
var c = Compile(query);
48+
49+
Assert.Equal("SELECT COUNT(*) AS [count] FROM (SELECT DISTINCT [ColumnA], [ColumnB] FROM [A]) AS [countQuery]", c[EngineCodes.SqlServer]);
50+
}
51+
52+
[Fact]
53+
public void Average()
54+
{
55+
var query = new Query("A").AsAverage("TTL");
56+
57+
var c = Compile(query);
58+
59+
Assert.Equal("SELECT AVG([TTL]) AS [avg] FROM [A]", c[EngineCodes.SqlServer]);
60+
}
61+
62+
[Fact]
63+
public void Sum()
64+
{
65+
var query = new Query("A").AsSum("PacketsDropped");
66+
67+
var c = Compile(query);
68+
69+
Assert.Equal("SELECT SUM([PacketsDropped]) AS [sum] FROM [A]", c[EngineCodes.SqlServer]);
70+
}
71+
72+
[Fact]
73+
public void Max()
74+
{
75+
var query = new Query("A").AsMax("LatencyMs");
76+
77+
var c = Compile(query);
78+
79+
Assert.Equal("SELECT MAX([LatencyMs]) AS [max] FROM [A]", c[EngineCodes.SqlServer]);
80+
}
81+
82+
[Fact]
83+
public void Min()
84+
{
85+
var query = new Query("A").AsMin("LatencyMs");
86+
87+
var c = Compile(query);
88+
89+
Assert.Equal("SELECT MIN([LatencyMs]) AS [min] FROM [A]", c[EngineCodes.SqlServer]);
90+
}
91+
}
92+
}

QueryBuilder.Tests/CompilerTest.cs

Lines changed: 0 additions & 33 deletions
This file was deleted.
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
using System;
2+
using SqlKata.Execution;
3+
using Xunit;
4+
5+
namespace SqlKata.Tests
6+
{
7+
public class ExecutionTests
8+
{
9+
[Fact]
10+
public void ShouldThrowException()
11+
{
12+
Assert.Throws<InvalidOperationException>(() => { new Query("Books").Get(); });
13+
}
14+
}
15+
}

QueryBuilder.Tests/FirebirdLimitTest.cs renamed to QueryBuilder.Tests/Firebird/FirebirdLimitTests.cs

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
1-
using SqlKata;
21
using SqlKata.Compilers;
2+
using SqlKata.Tests.Infrastructure;
33
using Xunit;
44

5-
namespace SqlKata.Tests
5+
namespace SqlKata.Tests.Firebird
66
{
7-
public class FirebirdLimitTest
7+
public class FirebirdLimitTests : TestSupport
88
{
9-
private FirebirdCompiler compiler = new FirebirdCompiler();
9+
private readonly FirebirdCompiler compiler;
10+
11+
public FirebirdLimitTests()
12+
{
13+
compiler = Compilers.Get<FirebirdCompiler>(EngineCodes.Firebird);
14+
}
1015

1116
[Fact]
1217
public void NoLimitNorOffset()

QueryBuilder.Tests/GeneralTests.cs

Lines changed: 154 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,154 @@
1+
using SqlKata.Compilers;
2+
using SqlKata.Extensions;
3+
using SqlKata.Tests.Infrastructure;
4+
using Xunit;
5+
6+
namespace SqlKata.Tests
7+
{
8+
public class GeneralTests : TestSupport
9+
{
10+
[Fact]
11+
public void ColumnsEscaping()
12+
{
13+
var q = new Query().From("users").Select("mycol[isthis]");
14+
var c = Compile(q);
15+
16+
Assert.Equal("SELECT [mycol[isthis]]] FROM [users]", c[EngineCodes.SqlServer]);
17+
}
18+
19+
20+
[Fact]
21+
public void InnerScopeEngineWithinCTE()
22+
{
23+
var series = new Query("table")
24+
.ForPostgreSql(q => q.WhereRaw("postgres = true"))
25+
.ForSqlServer(q => q.WhereRaw("sqlsrv = 1"))
26+
.ForFirebird(q => q.WhereRaw("firebird = 1"));
27+
var query = new Query("series").With("series", series);
28+
29+
var c = Compile(query);
30+
31+
Assert.Equal("WITH [series] AS (SELECT * FROM [table] WHERE sqlsrv = 1)\nSELECT * FROM [series]", c[EngineCodes.SqlServer]);
32+
33+
Assert.Equal("WITH \"series\" AS (SELECT * FROM \"table\" WHERE postgres = true)\nSELECT * FROM \"series\"",
34+
c[EngineCodes.PostgreSql]);
35+
Assert.Equal("WITH \"SERIES\" AS (SELECT * FROM \"TABLE\" WHERE firebird = 1)\nSELECT * FROM \"SERIES\"",
36+
c[EngineCodes.Firebird]);
37+
}
38+
39+
[Fact]
40+
public void InnerScopeEngineWithinSubQuery()
41+
{
42+
var series = new Query("table")
43+
.ForPostgreSql(q => q.WhereRaw("postgres = true"))
44+
.ForSqlServer(q => q.WhereRaw("sqlsrv = 1"))
45+
.ForFirebird(q => q.WhereRaw("firebird = 1"));
46+
var query = new Query("series").From(series.As("series"));
47+
48+
var c = Compile(query);
49+
50+
Assert.Equal("SELECT * FROM (SELECT * FROM [table] WHERE sqlsrv = 1) AS [series]", c[EngineCodes.SqlServer]);
51+
52+
Assert.Equal("SELECT * FROM (SELECT * FROM \"table\" WHERE postgres = true) AS \"series\"", c[EngineCodes.PostgreSql]);
53+
Assert.Equal("SELECT * FROM (SELECT * FROM \"TABLE\" WHERE firebird = 1) AS \"SERIES\"", c[EngineCodes.Firebird]);
54+
}
55+
56+
[Fact]
57+
public void ItShouldCacheMethodInfoByType()
58+
{
59+
var compiler = new TestSqlServerCompiler();
60+
61+
var call1 = compiler.Call_FindCompilerMethodInfo(
62+
typeof(BasicCondition), "CompileBasicCondition"
63+
);
64+
65+
var call2 = compiler.Call_FindCompilerMethodInfo(
66+
typeof(BasicCondition), "CompileBasicCondition"
67+
);
68+
69+
Assert.Same(call1, call2);
70+
}
71+
72+
[Fact]
73+
public void Return_Different_MethodInfo_WhenSame_Method_With_Different_GenericTypes()
74+
{
75+
var compiler = new TestSqlServerCompiler();
76+
77+
var call1 = compiler.Call_FindCompilerMethodInfo(
78+
typeof(NestedCondition<Query>), "CompileNestedCondition"
79+
);
80+
81+
var call2 = compiler.Call_FindCompilerMethodInfo(
82+
typeof(NestedCondition<Join>), "CompileNestedCondition"
83+
);
84+
85+
Assert.NotSame(call1, call2);
86+
}
87+
88+
[Fact]
89+
public void Should_Equal_AfterMultipleCompile()
90+
{
91+
var query = new Query()
92+
.Select("Id", "Name")
93+
.From("Table")
94+
.OrderBy("Name")
95+
.Limit(20)
96+
.Offset(1);
97+
98+
var first = Compile(query);
99+
Assert.Equal(
100+
"SELECT * FROM (SELECT [Id], [Name], ROW_NUMBER() OVER (ORDER BY [Name]) AS [row_num] FROM [Table]) AS [results_wrapper] WHERE [row_num] BETWEEN 2 AND 21",
101+
first[EngineCodes.SqlServer]);
102+
Assert.Equal("SELECT `Id`, `Name` FROM `Table` ORDER BY `Name` LIMIT 20 OFFSET 1", first[EngineCodes.MySql]);
103+
Assert.Equal("SELECT \"Id\", \"Name\" FROM \"Table\" ORDER BY \"Name\" LIMIT 20 OFFSET 1", first[EngineCodes.PostgreSql]);
104+
Assert.Equal("SELECT \"ID\", \"NAME\" FROM \"TABLE\" ORDER BY \"NAME\" ROWS 2 TO 21", first[EngineCodes.Firebird]);
105+
106+
var second = Compile(query);
107+
108+
Assert.Equal(first[EngineCodes.SqlServer], second[EngineCodes.SqlServer]);
109+
Assert.Equal(first[EngineCodes.MySql], second[EngineCodes.MySql]);
110+
Assert.Equal(first[EngineCodes.PostgreSql], second[EngineCodes.PostgreSql]);
111+
Assert.Equal(first[EngineCodes.Firebird], second[EngineCodes.Firebird]);
112+
}
113+
114+
[Fact]
115+
public void Raw_WrapIdentifiers()
116+
{
117+
var query = new Query("Users").SelectRaw("[Id], [Name], {Age}");
118+
119+
var c = Compile(query);
120+
121+
Assert.Equal("SELECT [Id], [Name], [Age] FROM [Users]", c[EngineCodes.SqlServer]);
122+
Assert.Equal("SELECT `Id`, `Name`, `Age` FROM `Users`", c[EngineCodes.MySql]);
123+
Assert.Equal("SELECT \"Id\", \"Name\", \"Age\" FROM \"Users\"", c[EngineCodes.PostgreSql]);
124+
Assert.Equal("SELECT \"Id\", \"Name\", \"Age\" FROM \"USERS\"", c[EngineCodes.Firebird]);
125+
}
126+
127+
[Fact]
128+
public void WrapWithSpace()
129+
{
130+
var compiler = new SqlServerCompiler();
131+
132+
133+
Assert.Equal("[My Table] AS [Table]", compiler.Wrap("My Table as Table"));
134+
}
135+
136+
[Fact]
137+
public void WrapWithDotes()
138+
{
139+
var compiler = new SqlServerCompiler();
140+
141+
142+
Assert.Equal("[My Schema].[My Table] AS [Table]", compiler.Wrap("My Schema.My Table as Table"));
143+
}
144+
145+
[Fact]
146+
public void WrapWithMultipleSpaces()
147+
{
148+
var compiler = new SqlServerCompiler();
149+
150+
151+
Assert.Equal("[My Table One] AS [Table One]", compiler.Wrap("My Table One as Table One"));
152+
}
153+
}
154+
}
Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
using System.Collections;
22
using System.Linq;
3-
using SqlKata;
43
using Xunit;
54

65
namespace SqlKata.Tests
76
{
8-
public class HelperTest
7+
public class HelperTests
98
{
109
[Theory]
1110
[InlineData("")]

QueryBuilder.Tests/TestCompiler.cs renamed to QueryBuilder.Tests/Infrastructure/TestCompiler.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
using System.Reflection;
33
using SqlKata.Compilers;
44

5-
namespace SqlKata.Tests
5+
namespace SqlKata.Tests.Infrastructure
66
{
77
/// <summary>
88
/// A test class to expose private methods

0 commit comments

Comments
 (0)