Skip to content

Commit 3627908

Browse files
committed
Sql tests for various providers improved
working with transactions and connections and othere changes
1 parent b59c5c3 commit 3627908

19 files changed

Lines changed: 441 additions & 308 deletions

Orm/Xtensive.Orm.Tests.Sql/CompilerTest.cs

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
// Copyright (C) 2015 Xtensive LLC.
2-
// All rights reserved.
3-
// For conditions of distribution and use, see license.
1+
// Copyright (C) 2015-2025 Xtensive LLC.
2+
// This code is distributed under MIT license terms.
3+
// See the License.txt file in the project root for more information.
44
// Created by: Alexey Kulakov
55
// Created: 2015.02.06
66

@@ -31,6 +31,18 @@ protected override void TestFixtureSetUp()
3131
DropSchema(initialCatalog);
3232
Catalog = ExtractCatalog();
3333
CreateTables(Catalog);
34+
Connection.Close();
35+
Connection.Open();
36+
}
37+
38+
public override void SetUp()
39+
{
40+
Connection.BeginTransaction();
41+
}
42+
43+
public override void TearDown()
44+
{
45+
Connection.Rollback();
3446
}
3547

3648
[Test]

Orm/Xtensive.Orm.Tests.Sql/DateTimeIntervalTest.cs

Lines changed: 38 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
// Copyright (C) 2003-2010 Xtensive LLC.
2-
// All rights reserved.
3-
// For conditions of distribution and use, see license.
1+
// Copyright (C) 2009-2025 Xtensive LLC.
2+
// This code is distributed under MIT license terms.
3+
// See the License.txt file in the project root for more information.
44
// Created by: Denis Krjuchkov
55
// Created: 2009.02.27
66

@@ -13,8 +13,15 @@ namespace Xtensive.Orm.Tests.Sql
1313
{
1414
public abstract class DateTimeIntervalTest : SqlTest
1515
{
16-
protected static readonly DateTime DefaultDateTime = new DateTime(2001, 2, 3, 4, 5, 6, 334);
17-
protected static readonly DateTime SecondDateTime = new DateTime(2000, 12, 11, 10, 9, 8, 765);
16+
protected static readonly DateTime DefaultDateTime =
17+
StorageProviderInfo.Instance.CheckProviderIs(StorageProvider.Firebird)
18+
? new DateTime(2001, 2, 3, 4, 5, 6)
19+
: new DateTime(2001, 2, 3, 4, 5, 6, 334);
20+
protected static readonly DateTime SecondDateTime =
21+
StorageProviderInfo.Instance.CheckProviderIs(StorageProvider.Firebird)
22+
? new DateTime(2000, 12, 11, 10, 9, 8)
23+
: new DateTime(2000, 12, 11, 10, 9, 8, 765);
24+
1825
protected static readonly TimeSpan DefaultTimeSpan = new TimeSpan(10, 9, 8, 7, 652);
1926
protected static readonly int AddYearsConst = 5;
2027
protected static readonly int AddMonthsConst = 15;
@@ -23,24 +30,24 @@ public abstract class DateTimeIntervalTest : SqlTest
2330
public virtual void DateTimeAddIntervalTest()
2431
{
2532
CheckEquality(
26-
SqlDml.DateTimePlusInterval(DefaultDateTime, DefaultTimeSpan),
33+
SqlDml.DateTimePlusInterval(PrepareDateTimeLiteral(DefaultDateTime), DefaultTimeSpan),
2734
DefaultDateTime.Add(DefaultTimeSpan));
2835
}
2936

3037
[Test]
3138
public virtual void DateTimeAddMonthsTest()
3239
{
3340
CheckEquality(
34-
SqlDml.DateTimeAddMonths(DefaultDateTime, AddMonthsConst),
35-
DefaultDateTime.AddMonths(AddMonthsConst));
41+
SqlDml.DateTimeAddMonths(PrepareDateTimeLiteral(DefaultDateTime), AddMonthsConst),
42+
PrepareDateTimeLiteral(DefaultDateTime.AddMonths(AddMonthsConst)));
3643
}
3744

3845
[Test]
3946
public virtual void DateTimeAddYearsTest()
4047
{
4148
CheckEquality(
42-
SqlDml.DateTimeAddYears(DefaultDateTime, AddYearsConst),
43-
DefaultDateTime.AddYears(AddYearsConst));
49+
SqlDml.DateTimeAddYears(PrepareDateTimeLiteral(DefaultDateTime), AddYearsConst),
50+
PrepareDateTimeLiteral(DefaultDateTime.AddYears(AddYearsConst)));
4451
}
4552

4653
[Test]
@@ -55,77 +62,78 @@ public virtual void DateTimeConstructTest()
5562
public virtual void DateTimeSubtractDateTimeTest()
5663
{
5764
CheckEquality(
58-
SqlDml.DateTimeMinusDateTime(DefaultDateTime, SecondDateTime),
65+
SqlDml.DateTimeMinusDateTime(PrepareDateTimeLiteral(DefaultDateTime), PrepareDateTimeLiteral(SecondDateTime)),
5966
DefaultDateTime.Subtract(SecondDateTime));
6067
}
6168

6269
[Test]
6370
public virtual void DateTimeSubtractIntervalTest()
6471
{
6572
CheckEquality(
66-
SqlDml.DateTimeMinusInterval(DefaultDateTime, DefaultTimeSpan),
73+
SqlDml.DateTimeMinusInterval(PrepareDateTimeLiteral(DefaultDateTime), DefaultTimeSpan),
6774
DefaultDateTime.Subtract(DefaultTimeSpan));
6875
}
6976

7077
[Test]
7178
public virtual void DateTimeTruncateTest()
7279
{
7380
CheckEquality(
74-
SqlDml.DateTimeTruncate(DefaultDateTime),
75-
DefaultDateTime.Date);
81+
SqlDml.DateTimeTruncate(PrepareDateTimeLiteral(DefaultDateTime)),
82+
PrepareDateTimeLiteral(DefaultDateTime.Date));
7683
}
7784

7885
[Test]
7986
public virtual void DateTimeExtractYearTest()
8087
{
8188
CheckEquality(
82-
SqlDml.Extract(SqlDateTimePart.Year, DefaultDateTime),
89+
SqlDml.Extract(SqlDateTimePart.Year, PrepareDateTimeLiteral(DefaultDateTime)),
8390
DefaultDateTime.Year);
8491
}
8592

8693
[Test]
8794
public virtual void DateTimeExtractMonthTest()
8895
{
8996
CheckEquality(
90-
SqlDml.Extract(SqlDateTimePart.Month, DefaultDateTime),
97+
SqlDml.Extract(SqlDateTimePart.Month, PrepareDateTimeLiteral(DefaultDateTime)),
9198
DefaultDateTime.Month);
9299
}
93100

94101
[Test]
95102
public virtual void DateTimeExtractDayTest()
96103
{
97104
CheckEquality(
98-
SqlDml.Extract(SqlDateTimePart.Day, DefaultDateTime),
105+
SqlDml.Extract(SqlDateTimePart.Day, PrepareDateTimeLiteral(DefaultDateTime)),
99106
DefaultDateTime.Day);
100107
}
101108

102109
[Test]
103110
public virtual void DateTimeExtractHourTest()
104111
{
105112
CheckEquality(
106-
SqlDml.Extract(SqlDateTimePart.Hour, DefaultDateTime),
113+
SqlDml.Extract(SqlDateTimePart.Hour, PrepareDateTimeLiteral(DefaultDateTime)),
107114
DefaultDateTime.Hour);
108115
}
109116

110117
[Test]
111118
public virtual void DateTimeExtractMinuteTest()
112119
{
113120
CheckEquality(
114-
SqlDml.Extract(SqlDateTimePart.Minute, DefaultDateTime),
121+
SqlDml.Extract(SqlDateTimePart.Minute, PrepareDateTimeLiteral(DefaultDateTime)),
115122
DefaultDateTime.Minute);
116123
}
117124

118125
[Test]
119126
public virtual void DateTimeExtractSecondTest()
120127
{
121128
CheckEquality(
122-
SqlDml.Extract(SqlDateTimePart.Second, DefaultDateTime),
129+
SqlDml.Extract(SqlDateTimePart.Second, PrepareDateTimeLiteral(DefaultDateTime)),
123130
DefaultDateTime.Second);
124131
}
125132

126133
[Test]
127134
public virtual void DateTimeExtractMillisecondTest()
128135
{
136+
Require.ProviderIsNot(StorageProvider.Firebird);
129137
CheckEquality(
130138
SqlDml.Extract(SqlDateTimePart.Millisecond, DefaultDateTime),
131139
DefaultDateTime.Millisecond);
@@ -135,15 +143,15 @@ public virtual void DateTimeExtractMillisecondTest()
135143
public virtual void DateTimeExtractDayOfWeekTest()
136144
{
137145
CheckEquality(
138-
SqlDml.Extract(SqlDateTimePart.DayOfWeek, DefaultDateTime),
146+
SqlDml.Extract(SqlDateTimePart.DayOfWeek, PrepareDateTimeLiteral(DefaultDateTime)),
139147
(int) DefaultDateTime.DayOfWeek);
140148
}
141149

142150
[Test]
143151
public virtual void DateTimeExtractDayOfYearTest()
144152
{
145153
CheckEquality(
146-
SqlDml.Extract(SqlDateTimePart.DayOfYear, DefaultDateTime),
154+
SqlDml.Extract(SqlDateTimePart.DayOfYear, PrepareDateTimeLiteral(DefaultDateTime)),
147155
DefaultDateTime.DayOfYear);
148156
}
149157

@@ -222,5 +230,13 @@ protected void CheckEquality(SqlExpression left, SqlExpression right)
222230
}
223231
}
224232
}
233+
234+
private SqlExpression PrepareDateTimeLiteral(DateTime value)
235+
{
236+
if (StorageProviderInfo.Instance.CheckProviderIs(StorageProvider.Firebird)) {
237+
return SqlDml.Cast(SqlDml.Literal(value), SqlType.DateTime);
238+
}
239+
return SqlDml.Literal(value);
240+
}
225241
}
226242
}

Orm/Xtensive.Orm.Tests.Sql/DriverFactoryTest.cs

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
1-
// Copyright (C) 2009-2021 Xtensive LLC.
1+
// Copyright (C) 2009-2025 Xtensive LLC.
22
// This code is distributed under MIT license terms.
33
// See the License.txt file in the project root for more information.
44

55
using System;
66
using NUnit.Framework;
7-
using Xtensive.Core;
8-
using Xtensive.Orm;
97
using Xtensive.Orm.Building.Builders;
108
using Xtensive.Sql;
119
using Xtensive.Orm.Tests.Sql.DriverFactoryTestTypes;
@@ -53,8 +51,8 @@ namespace Xtensive.Orm.Tests.Sql
5351
public class DriverFactoryTest
5452
{
5553
private string provider = TestConnectionInfoProvider.GetProvider();
56-
protected string Url = TestConnectionInfoProvider.GetConnectionUrl();
57-
protected string ConnectionString = TestConnectionInfoProvider.GetConnectionString();
54+
private string url = TestConnectionInfoProvider.GetConnectionUrl();
55+
private string connectionString = TestConnectionInfoProvider.GetConnectionString();
5856

5957
[Test]
6058
public void ConnectionUrlTest()
@@ -86,14 +84,14 @@ public void ServerInfoTest()
8684
{
8785
Require.ProviderIs(StorageProvider.SqlServer);
8886
Require.ProviderVersionAtLeast(StorageProviderVersion.SqlServer2005);
89-
var driver = TestSqlDriver.Create(Url);
87+
var driver = TestSqlDriver.Create(url);
9088
Assert.Greater(driver.CoreServerInfo.ServerVersion.Major, 8);
9189
}
9290

9391
[Test]
9492
public void ProviderTest()
9593
{
96-
TestProvider(provider, ConnectionString, Url);
94+
TestProvider(provider, connectionString, url);
9795
}
9896

9997
[Test]
@@ -104,32 +102,32 @@ public void SqlServerConnectionCheckTest()
104102
var factory = (SqlDriverFactory) Activator.CreateInstance(descriptor.DriverFactory);
105103

106104
var configuration = new SqlDriverConfiguration() { EnsureConnectionIsAlive = false };
107-
var driver = factory.GetDriver(new ConnectionInfo(Url), configuration);
105+
var driver = factory.GetDriver(new ConnectionInfo(url), configuration);
108106
Assert.That(GetCheckConnectionIsAliveFlag(driver), Is.False);
109107

110108
configuration = configuration.Clone();
111109
configuration.EnsureConnectionIsAlive = true;
112-
driver = factory.GetDriver(new ConnectionInfo(Url), configuration);
110+
driver = factory.GetDriver(new ConnectionInfo(url), configuration);
113111
Assert.That(GetCheckConnectionIsAliveFlag(driver), Is.True);
114112

115113
configuration = configuration.Clone();
116114
configuration.EnsureConnectionIsAlive = true;
117-
driver = factory.GetDriver(new ConnectionInfo(provider, ConnectionString + ";pooling=false"), configuration);
115+
driver = factory.GetDriver(new ConnectionInfo(provider, connectionString + ";pooling=false"), configuration);
118116
Assert.That(GetCheckConnectionIsAliveFlag(driver), Is.False);
119117

120118
configuration = configuration.Clone();
121119
configuration.EnsureConnectionIsAlive = true;
122-
driver = factory.GetDriver(new ConnectionInfo(provider, ConnectionString + ";Pooling=False"), configuration);
120+
driver = factory.GetDriver(new ConnectionInfo(provider, connectionString + ";Pooling=False"), configuration);
123121
Assert.That(GetCheckConnectionIsAliveFlag(driver), Is.False);
124122

125123
configuration = configuration.Clone();
126124
configuration.EnsureConnectionIsAlive = true;
127-
driver = factory.GetDriver(new ConnectionInfo(provider, ConnectionString + ";pooling = false"), configuration);
125+
driver = factory.GetDriver(new ConnectionInfo(provider, connectionString + ";pooling = false"), configuration);
128126
Assert.That(GetCheckConnectionIsAliveFlag(driver), Is.False);
129127

130128
configuration = configuration.Clone();
131129
configuration.EnsureConnectionIsAlive = true;
132-
driver = factory.GetDriver(new ConnectionInfo(provider, ConnectionString + ";Pooling = False"), configuration);
130+
driver = factory.GetDriver(new ConnectionInfo(provider, connectionString + ";Pooling = False"), configuration);
133131
Assert.That(GetCheckConnectionIsAliveFlag(driver), Is.False);
134132
}
135133

@@ -147,14 +145,14 @@ public void ConnectionAccessorTest()
147145
Assert.That(accessorInstance.OpeningFailedCounter, Is.EqualTo(0));
148146

149147
var configuration = new SqlDriverConfiguration(accessorsArray);
150-
_ = factory.GetDriver(new ConnectionInfo(Url), configuration);
148+
_ = factory.GetDriver(new ConnectionInfo(url), configuration);
151149
Assert.That(accessorInstance.OpeningCounter, Is.EqualTo(1));
152150
Assert.That(accessorInstance.OpeningInitCounter, Is.EqualTo(0));
153151
Assert.That(accessorInstance.OpenedCounter, Is.EqualTo(1));
154152
Assert.That(accessorInstance.OpeningFailedCounter, Is.EqualTo(0));
155153

156154
configuration = new SqlDriverConfiguration(accessorsArray) { EnsureConnectionIsAlive = true };
157-
_ = factory.GetDriver(new ConnectionInfo(Url), configuration);
155+
_ = factory.GetDriver(new ConnectionInfo(url), configuration);
158156
Assert.That(accessorInstance.OpeningCounter, Is.EqualTo(2));
159157
if (provider == WellKnown.Provider.SqlServer)
160158
Assert.That(accessorInstance.OpeningInitCounter, Is.EqualTo(1));
@@ -164,7 +162,7 @@ public void ConnectionAccessorTest()
164162
Assert.That(accessorInstance.OpeningFailedCounter, Is.EqualTo(0));
165163

166164
configuration = new SqlDriverConfiguration(accessorsArray) { ConnectionInitializationSql = InitQueryPerProvider(provider) };
167-
_ = factory.GetDriver(new ConnectionInfo(Url), configuration);
165+
_ = factory.GetDriver(new ConnectionInfo(url), configuration);
168166
Assert.That(accessorInstance.OpeningCounter, Is.EqualTo(3));
169167
if (provider == WellKnown.Provider.SqlServer)
170168
Assert.That(accessorInstance.OpeningInitCounter, Is.EqualTo(2));
@@ -175,7 +173,7 @@ public void ConnectionAccessorTest()
175173

176174
configuration = new SqlDriverConfiguration(accessorsArray) { ConnectionInitializationSql = "dummy string to trigger error" };
177175
try {
178-
_ = factory.GetDriver(new ConnectionInfo(Url), configuration);
176+
_ = factory.GetDriver(new ConnectionInfo(url), configuration);
179177
}
180178
catch {
181179
//skip it

Orm/Xtensive.Orm.Tests.Sql/ExceptionTypesTest.cs

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
// Copyright (C) 2010 Xtensive LLC.
2-
// All rights reserved.
3-
// For conditions of distribution and use, see license.
1+
// Copyright (C) 2010-2025 Xtensive LLC.
2+
// This code is distributed under MIT license terms.
3+
// See the License.txt file in the project root for more information.
44
// Created by: Denis Krjuchkov
55
// Created: 2010.02.08
66

@@ -37,12 +37,14 @@ protected override void TestFixtureSetUp()
3737
{
3838
base.TestFixtureSetUp();
3939
schema = ExtractDefaultSchema();
40+
Connection.BeginTransaction();
4041
EnsureTableNotExists(schema, TimeoutTableName);
4142
EnsureTableNotExists(schema, DeadlockTableName);
4243
EnsureTableNotExists(schema, SlaveTableName);
4344
EnsureTableNotExists(schema, MasterTableName);
4445
EnsureTableNotExists(schema, UniqueTableName);
4546
EnsureTableNotExists(schema, CheckedTableName);
47+
Connection.Commit();
4648
}
4749

4850
public override void TearDown()
@@ -222,9 +224,13 @@ public virtual void DeadlockTest()
222224
[Test]
223225
public virtual void TimeoutTest()
224226
{
227+
Require.ProviderIsNot(StorageProvider.Firebird, "For Some reason one of transactions \"sees\" uncommited insert and no timeout happens");
228+
229+
Connection.BeginTransaction();
225230
var table = schema.CreateTable(TimeoutTableName);
226231
CreatePrimaryKey(table);
227232
ExecuteNonQuery(SqlDdl.Create(table));
233+
Connection.Commit();
228234

229235
var tableRef = SqlDml.TableRef(table);
230236
var insert = SqlDml.Insert(tableRef);

0 commit comments

Comments
 (0)