forked from nhibernate/nhibernate-core
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathLockHintAppenderFixture.cs
146 lines (119 loc) · 5.85 KB
/
LockHintAppenderFixture.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
using System.Collections.Generic;
using NHibernate.Dialect;
using NHibernate.SqlCommand;
using NUnit.Framework;
namespace NHibernate.Test.DialectTest
{
[TestFixture]
public class LockHintAppenderFixture
{
private const string MsSql2000LockHint = " with (updlock, rowlock)";
private MsSql2000Dialect.LockHintAppender _appender;
[SetUp]
public void SetUp()
{
_appender = new MsSql2000Dialect.LockHintAppender(new MsSql2000Dialect(), new Dictionary<string, LockMode> { {"person", LockMode.Upgrade} });
}
[Test]
public void AppendHintToSingleTableAlias()
{
const string expectedQuery1 = "select * from Person person with (updlock, rowlock)";
const string expectedQuery2 = "select * from Person as person with (updlock, rowlock)";
var result1 = _appender.AppendLockHint(new SqlString(expectedQuery1.Replace(MsSql2000LockHint, string.Empty)));
Assert.That(result1.ToString(), Is.EqualTo(expectedQuery1));
var result2 = _appender.AppendLockHint(new SqlString(expectedQuery2.Replace(MsSql2000LockHint, string.Empty)));
Assert.That(result2.ToString(), Is.EqualTo(expectedQuery2));
}
[Test]
public void AppendHintToJoinedTableAlias()
{
const string expectedQuery =
"select * from Person person with (updlock, rowlock) inner join Country country on person.Id = country.Id";
var result = _appender.AppendLockHint(new SqlString(expectedQuery.Replace(MsSql2000LockHint, string.Empty)));
Assert.That(result.ToString(), Is.EqualTo(expectedQuery));
}
[Test]
public void AppendHintToUnionTableAlias()
{
const string expectedQuery =
"select Id, Name from (select Id, CONCAT(FirstName, LastName) from Employee with (updlock, rowlock) union all select Id, CONCAT(FirstName, LastName) from Manager with (updlock, rowlock)) as person";
var result = _appender.AppendLockHint(new SqlString(expectedQuery.Replace(MsSql2000LockHint, string.Empty)));
Assert.That(result.ToString(), Is.EqualTo(expectedQuery));
}
[Test]
public void ShouldIgnoreCasing()
{
const string expectedQuery =
"select Id, Name FROM (select Id, Name FROM Employee with (updlock, rowlock) union all select Id, Name from Manager with (updlock, rowlock)) as person";
var result = _appender.AppendLockHint(new SqlString(expectedQuery.Replace(MsSql2000LockHint, string.Empty)));
Assert.That(result.ToString(), Is.EqualTo(expectedQuery));
}
[Test]
public void ShouldHandleExplicitSchemas()
{
const string expectedQuery =
"select Id, Name from (select Id, Name FROM dbo.Employee with (updlock, rowlock) union all select Id, Name from Manager with (updlock, rowlock)) as person";
var result = _appender.AppendLockHint(new SqlString(expectedQuery.Replace(MsSql2000LockHint, string.Empty)));
Assert.That(result.ToString(), Is.EqualTo(expectedQuery));
}
[Test]
public void ShouldHandleExplicitSchemasAndDbNames()
{
const string expectedQuery =
"select Id, Name from (select Id, Name FROM nhibernate.dbo.Employee with (updlock, rowlock) union all select Id, Name from Manager with (updlock, rowlock)) as person";
var result = _appender.AppendLockHint(new SqlString(expectedQuery.Replace(MsSql2000LockHint, string.Empty)));
Assert.That(result.ToString(), Is.EqualTo(expectedQuery));
}
[Test]
public void ShouldHandleExplicitDbNameWithoutSchemaName()
{
const string expectedQuery =
"select Id, Name from (select Id, Name FROM nhibernate..Employee with (updlock, rowlock) union all select Id, Name from Manager with (updlock, rowlock)) as person";
var result = _appender.AppendLockHint(new SqlString(expectedQuery.Replace(MsSql2000LockHint, string.Empty)));
Assert.That(result.ToString(), Is.EqualTo(expectedQuery));
}
[Test]
public void ShouldHandleExplicitSchemasAndDbNamesWithSpacesBetweenNameParts()
{
const string expectedQuery =
"select Id, Name from (select Id, Name FROM nhibernate .dbo. Employee with (updlock, rowlock) union all select Id, Name from Manager with (updlock, rowlock)) as person";
var result = _appender.AppendLockHint(new SqlString(expectedQuery.Replace(MsSql2000LockHint, string.Empty)));
Assert.That(result.ToString(), Is.EqualTo(expectedQuery));
}
[Test]
public void ShouldHandleEscapingInSubselect()
{
const string expectedQuery =
"select Id, Name from (select Id, Name from [Employee] with (updlock, rowlock) union all select Id, Name from [Manager] with (updlock, rowlock)) as person";
var result = _appender.AppendLockHint(new SqlString(expectedQuery.Replace(MsSql2000LockHint, string.Empty)));
Assert.That(result.ToString(), Is.EqualTo(expectedQuery));
}
[Test]
public void ShouldHandleEscapingWithWhitespacesInSubselect()
{
const string expectedQuery =
"select Id, Name from (select Id, Name from [Empl oyee] with (updlock, rowlock) union all select Id, Name from [Man ager] with (updlock, rowlock)) as person";
var result = _appender.AppendLockHint(new SqlString(expectedQuery.Replace(MsSql2000LockHint, string.Empty)));
Assert.That(result.ToString(), Is.EqualTo(expectedQuery));
}
[Test]
public void ShouldHandleEscapingWithSquareBracketsInSubselect()
{
const string expectedQuery =
"select Id, Name from (select Id, Name from [Empl ]]oyee] with (updlock, rowlock) union all select Id, Name from [Manager] with (updlock, rowlock)) as person";
var result = _appender.AppendLockHint(new SqlString(expectedQuery.Replace(MsSql2000LockHint, string.Empty)));
Assert.That(result.ToString(), Is.EqualTo(expectedQuery));
}
[Test]
public void ShouldHandleMultilineQuery()
{
const string expectedQuery = @"
select Id, Name from
(select Id, Name from Employee with (updlock, rowlock) union all
select Id, Name from Manager with (updlock, rowlock))
as person";
var result = _appender.AppendLockHint(new SqlString(expectedQuery.Replace(MsSql2000LockHint, string.Empty)));
Assert.That(result.ToString(), Is.EqualTo(expectedQuery));
}
}
}