Skip to content

Commit f693cc8

Browse files
Merge pull request #1610 from ngbrown/move-msqsl-constants
Move MsSql constants from driver to dialect.
2 parents d354e9e + 0d18cd7 commit f693cc8

File tree

11 files changed

+120
-160
lines changed

11 files changed

+120
-160
lines changed

src/NHibernate.Test/DialectTest/MsSql2005DialectFixture.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -100,13 +100,13 @@ public void NH2809()
100100
var t = d.GetTypeName(new BinarySqlType());
101101
Assert.That(t, Is.EqualTo("VARBINARY(MAX)"));
102102

103-
t = d.GetTypeName(new BinarySqlType(), SqlClientDriver.MaxSizeForLengthLimitedBinary - 1, 0, 0);
104-
Assert.That(t, Is.EqualTo(String.Format("VARBINARY({0})", SqlClientDriver.MaxSizeForLengthLimitedBinary - 1)));
103+
t = d.GetTypeName(new BinarySqlType(), MsSql2000Dialect.MaxSizeForLengthLimitedBinary - 1, 0, 0);
104+
Assert.That(t, Is.EqualTo(String.Format("VARBINARY({0})", MsSql2000Dialect.MaxSizeForLengthLimitedBinary - 1)));
105105

106-
t = d.GetTypeName(new BinarySqlType(), SqlClientDriver.MaxSizeForLengthLimitedBinary, 0, 0);
107-
Assert.That(t, Is.EqualTo(String.Format("VARBINARY({0})", SqlClientDriver.MaxSizeForLengthLimitedBinary)));
106+
t = d.GetTypeName(new BinarySqlType(), MsSql2000Dialect.MaxSizeForLengthLimitedBinary, 0, 0);
107+
Assert.That(t, Is.EqualTo(String.Format("VARBINARY({0})", MsSql2000Dialect.MaxSizeForLengthLimitedBinary)));
108108

109-
t = d.GetTypeName(new BinarySqlType(), SqlClientDriver.MaxSizeForLengthLimitedBinary + 1, 0, 0);
109+
t = d.GetTypeName(new BinarySqlType(), MsSql2000Dialect.MaxSizeForLengthLimitedBinary + 1, 0, 0);
110110
Assert.That(t, Is.EqualTo("VARBINARY(MAX)"));
111111
}
112112

src/NHibernate/Dialect/MsSql2000Dialect.cs

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
using System.Text.RegularExpressions;
66
using NHibernate.Dialect.Function;
77
using NHibernate.Dialect.Schema;
8-
using NHibernate.Driver;
98
using NHibernate.Engine;
109
using NHibernate.Mapping;
1110
using NHibernate.SqlCommand;
@@ -42,6 +41,16 @@ namespace NHibernate.Dialect
4241
/// </remarks>
4342
public class MsSql2000Dialect : Dialect
4443
{
44+
public const int MaxSizeForAnsiClob = 2147483647; // int.MaxValue
45+
public const int MaxSizeForClob = 1073741823; // int.MaxValue / 2
46+
public const int MaxSizeForBlob = 2147483647; // int.MaxValue
47+
48+
public const int MaxSizeForLengthLimitedAnsiString = 8000;
49+
public const int MaxSizeForLengthLimitedString = 4000;
50+
public const int MaxSizeForLengthLimitedBinary = 8000;
51+
public const byte MaxDateTime2 = 8;
52+
public const byte MaxDateTimeOffset = 10;
53+
4554
public MsSql2000Dialect()
4655
{
4756
RegisterCharacterTypeMappings();
@@ -358,8 +367,8 @@ protected virtual void RegisterGuidTypeMapping()
358367
protected virtual void RegisterLargeObjectTypeMappings()
359368
{
360369
RegisterColumnType(DbType.Binary, "VARBINARY(8000)");
361-
RegisterColumnType(DbType.Binary, SqlClientDriver.MaxSizeForLengthLimitedBinary, "VARBINARY($l)");
362-
RegisterColumnType(DbType.Binary, SqlClientDriver.MaxSizeForBlob, "IMAGE");
370+
RegisterColumnType(DbType.Binary, MaxSizeForLengthLimitedBinary, "VARBINARY($l)");
371+
RegisterColumnType(DbType.Binary, MaxSizeForBlob, "IMAGE");
363372
}
364373

365374
protected virtual void RegisterDateTimeTypeMappings()
@@ -389,13 +398,13 @@ protected virtual void RegisterCharacterTypeMappings()
389398
RegisterColumnType(DbType.AnsiStringFixedLength, "CHAR(255)");
390399
RegisterColumnType(DbType.AnsiStringFixedLength, 8000, "CHAR($l)");
391400
RegisterColumnType(DbType.AnsiString, "VARCHAR(255)");
392-
RegisterColumnType(DbType.AnsiString, SqlClientDriver.MaxSizeForLengthLimitedAnsiString, "VARCHAR($l)");
393-
RegisterColumnType(DbType.AnsiString, SqlClientDriver.MaxSizeForAnsiClob, "TEXT");
401+
RegisterColumnType(DbType.AnsiString, MaxSizeForLengthLimitedAnsiString, "VARCHAR($l)");
402+
RegisterColumnType(DbType.AnsiString, MaxSizeForAnsiClob, "TEXT");
394403
RegisterColumnType(DbType.StringFixedLength, "NCHAR(255)");
395-
RegisterColumnType(DbType.StringFixedLength, SqlClientDriver.MaxSizeForLengthLimitedString, "NCHAR($l)");
404+
RegisterColumnType(DbType.StringFixedLength, MaxSizeForLengthLimitedString, "NCHAR($l)");
396405
RegisterColumnType(DbType.String, "NVARCHAR(255)");
397-
RegisterColumnType(DbType.String, SqlClientDriver.MaxSizeForLengthLimitedString, "NVARCHAR($l)");
398-
RegisterColumnType(DbType.String, SqlClientDriver.MaxSizeForClob, "NTEXT");
406+
RegisterColumnType(DbType.String, MaxSizeForLengthLimitedString, "NVARCHAR($l)");
407+
RegisterColumnType(DbType.String, MaxSizeForClob, "NTEXT");
399408
}
400409

401410
public override string AddColumnString
@@ -447,7 +456,7 @@ public override string GetDropTableString(string tableName)
447456
"if exists (select * from dbo.sysobjects where id = object_id(N'{0}') and OBJECTPROPERTY(id, N'IsUserTable') = 1)" +
448457
" drop table {0}";
449458

450-
return String.Format(dropTable, tableName);
459+
return string.Format(dropTable, tableName);
451460
}
452461

453462
public override string ForUpdateString

src/NHibernate/Dialect/MsSql2005Dialect.cs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
using System.Data;
2-
using NHibernate.Driver;
32
using NHibernate.Mapping;
43
using NHibernate.SqlCommand;
54
using NHibernate.Util;
@@ -8,6 +7,9 @@ namespace NHibernate.Dialect
87
{
98
public class MsSql2005Dialect : MsSql2000Dialect
109
{
10+
///<remarks>http://stackoverflow.com/a/7264795/259946</remarks>
11+
public const int MaxSizeForXml = 2147483647; // int.MaxValue
12+
1113
public MsSql2005Dialect()
1214
{
1315
RegisterColumnType(DbType.Xml, "XML");
@@ -16,16 +18,16 @@ public MsSql2005Dialect()
1618
protected override void RegisterCharacterTypeMappings()
1719
{
1820
base.RegisterCharacterTypeMappings();
19-
RegisterColumnType(DbType.String, SqlClientDriver.MaxSizeForClob, "NVARCHAR(MAX)");
20-
RegisterColumnType(DbType.AnsiString, SqlClientDriver.MaxSizeForAnsiClob, "VARCHAR(MAX)");
21+
RegisterColumnType(DbType.String, MaxSizeForClob, "NVARCHAR(MAX)");
22+
RegisterColumnType(DbType.AnsiString, MaxSizeForAnsiClob, "VARCHAR(MAX)");
2123
}
2224

2325
protected override void RegisterLargeObjectTypeMappings()
2426
{
2527
base.RegisterLargeObjectTypeMappings();
2628
RegisterColumnType(DbType.Binary, "VARBINARY(MAX)");
27-
RegisterColumnType(DbType.Binary, SqlClientDriver.MaxSizeForLengthLimitedBinary, "VARBINARY($l)");
28-
RegisterColumnType(DbType.Binary, SqlClientDriver.MaxSizeForBlob, "VARBINARY(MAX)");
29+
RegisterColumnType(DbType.Binary, MaxSizeForLengthLimitedBinary, "VARBINARY($l)");
30+
RegisterColumnType(DbType.Binary, MaxSizeForBlob, "VARBINARY(MAX)");
2931
}
3032

3133
protected override void RegisterKeywords()

src/NHibernate/Driver/DB2400Driver.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ namespace NHibernate.Driver
88
public class DB2400Driver : ReflectionBasedDriver
99
{
1010
/// <summary>
11-
/// Initializes a new instance of the <see cref="DB2Driver"/> class.
11+
/// Initializes a new instance of the <see cref="DB2400Driver"/> class.
1212
/// </summary>
1313
/// <exception cref="HibernateException">
1414
/// Thrown when the <c>IBM.Data.DB2.iSeries</c> assembly can not be loaded.
@@ -40,4 +40,4 @@ public override bool SupportsMultipleOpenReaders
4040
get { return false; }
4141
}
4242
}
43-
}
43+
}

src/NHibernate/Driver/FirebirdClientDriver.cs

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ public class FirebirdClientDriver : ReflectionBasedDriver
2020
{
2121
private const string SELECT_CLAUSE_EXP = @"(?<=\bselect|\bwhere).*";
2222
private const string CAST_PARAMS_EXP = @"(?<![=<>]\s?|first\s?|skip\s?|between\s|between\s@\bp\w+\b\sand\s)@\bp\w+\b(?!\s?[=<>])";
23-
private readonly Regex _statementRegEx = new Regex(SELECT_CLAUSE_EXP, RegexOptions.IgnoreCase);
24-
private readonly Regex _castCandidateRegEx = new Regex(CAST_PARAMS_EXP, RegexOptions.IgnoreCase);
23+
private static readonly Regex _statementRegEx = new Regex(SELECT_CLAUSE_EXP, RegexOptions.IgnoreCase);
24+
private static readonly Regex _castCandidateRegEx = new Regex(CAST_PARAMS_EXP, RegexOptions.IgnoreCase);
2525
private readonly FirebirdDialect _fbDialect = new FirebirdDialect();
2626

2727
/// <summary>
@@ -37,7 +37,6 @@ public FirebirdClientDriver()
3737
"FirebirdSql.Data.FirebirdClient.FbConnection",
3838
"FirebirdSql.Data.FirebirdClient.FbCommand")
3939
{
40-
4140
}
4241

4342
public override void Configure(IDictionary<string, string> settings)
@@ -46,20 +45,11 @@ public override void Configure(IDictionary<string, string> settings)
4645
_fbDialect.Configure(settings);
4746
}
4847

49-
public override bool UseNamedPrefixInSql
50-
{
51-
get { return true; }
52-
}
48+
public override bool UseNamedPrefixInSql => true;
5349

54-
public override bool UseNamedPrefixInParameter
55-
{
56-
get { return true; }
57-
}
50+
public override bool UseNamedPrefixInParameter => true;
5851

59-
public override string NamedPrefix
60-
{
61-
get { return "@"; }
62-
}
52+
public override string NamedPrefix => "@";
6353

6454
protected override void InitializeParameter(DbParameter dbParam, string name, SqlType sqlType)
6555
{
@@ -96,7 +86,7 @@ private string GetStatementsWithCastCandidates(string commandText)
9686
return _statementRegEx.Match(commandText).Value;
9787
}
9888

99-
private HashSet<string> GetCastCandidates(string statement)
89+
private static HashSet<string> GetCastCandidates(string statement)
10090
{
10191
var candidates =
10292
_castCandidateRegEx

src/NHibernate/Driver/MySqlDataDriver.cs

Lines changed: 6 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -37,35 +37,23 @@ public MySqlDataDriver() : base(
3737
/// MySql.Data uses named parameters in the sql.
3838
/// </summary>
3939
/// <value><see langword="true" /> - MySql uses <c>?</c> in the sql.</value>
40-
public override bool UseNamedPrefixInSql
41-
{
42-
get { return true; }
43-
}
40+
public override bool UseNamedPrefixInSql => true;
4441

4542
/// <summary></summary>
46-
public override bool UseNamedPrefixInParameter
47-
{
48-
get { return true; }
49-
}
43+
public override bool UseNamedPrefixInParameter => true;
5044

5145
/// <summary>
5246
/// MySql.Data use the <c>?</c> to locate parameters in sql.
5347
/// </summary>
5448
/// <value><c>?</c> is used to locate parameters in sql.</value>
55-
public override string NamedPrefix
56-
{
57-
get { return "?"; }
58-
}
49+
public override string NamedPrefix => "?";
5950

6051
/// <summary>
6152
/// The MySql.Data driver does NOT support more than 1 open DbDataReader
6253
/// with only 1 DbConnection.
6354
/// </summary>
6455
/// <value><see langword="false" /> - it is not supported.</value>
65-
public override bool SupportsMultipleOpenReaders
66-
{
67-
get { return false; }
68-
}
56+
public override bool SupportsMultipleOpenReaders => false;
6957

7058
/// <summary>
7159
/// MySql.Data does not support preparing of commands.
@@ -75,20 +63,14 @@ public override bool SupportsMultipleOpenReaders
7563
/// With the Gamma MySql.Data provider it is throwing an exception with the
7664
/// message "Expected End of data packet" when a select command is prepared.
7765
/// </remarks>
78-
protected override bool SupportsPreparingCommands
79-
{
80-
get { return false; }
81-
}
66+
protected override bool SupportsPreparingCommands => false;
8267

8368
public override IResultSetsCommand GetResultSetsCommand(Engine.ISessionImplementor session)
8469
{
8570
return new BasicResultSetsCommand(session);
8671
}
8772

88-
public override bool SupportsMultipleQueries
89-
{
90-
get { return true; }
91-
}
73+
public override bool SupportsMultipleQueries => true;
9274

9375
public override bool RequiresTimeSpanForTime => true;
9476

src/NHibernate/Driver/NpgsqlDriver.cs

Lines changed: 9 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -41,31 +41,18 @@ public NpgsqlDriver() : base(
4141
{
4242
}
4343

44-
public override bool UseNamedPrefixInSql
45-
{
46-
get { return true; }
47-
}
44+
public override bool UseNamedPrefixInSql => true;
4845

49-
public override bool UseNamedPrefixInParameter
50-
{
51-
get { return true; }
52-
}
46+
public override bool UseNamedPrefixInParameter => true;
5347

54-
public override string NamedPrefix
55-
{
56-
get { return ":"; }
57-
}
48+
public override string NamedPrefix => ":";
5849

59-
public override bool SupportsMultipleOpenReaders
60-
{
61-
get { return false; }
62-
}
50+
public override bool SupportsMultipleOpenReaders => false;
6351

64-
protected override bool SupportsPreparingCommands
65-
{
66-
// NH-2267 Patrick Earl
67-
get { return true; }
68-
}
52+
/// <remarks>
53+
/// NH-2267 Patrick Earl
54+
/// </remarks>
55+
protected override bool SupportsPreparingCommands => true;
6956

7057
public override bool SupportsNullEnlistment => false;
7158

@@ -74,10 +61,7 @@ public override IResultSetsCommand GetResultSetsCommand(Engine.ISessionImplement
7461
return new BasicResultSetsCommand(session);
7562
}
7663

77-
public override bool SupportsMultipleQueries
78-
{
79-
get { return true; }
80-
}
64+
public override bool SupportsMultipleQueries => true;
8165

8266
protected override void InitializeParameter(DbParameter dbParam, string name, SqlTypes.SqlType sqlType)
8367
{

src/NHibernate/Driver/OracleDataClientDriverBase.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
using System.Collections.Generic;
33
using System.Data;
44
using System.Data.Common;
5-
using System.Reflection;
65
using NHibernate.AdoNet;
76
using NHibernate.Engine.Query;
87
using NHibernate.SqlTypes;

src/NHibernate/Driver/SQLite20Driver.cs

Lines changed: 26 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -35,58 +35,43 @@ public SQLite20Driver() : base(
3535
{
3636
}
3737

38-
public override DbConnection CreateConnection()
39-
{
40-
var connection = base.CreateConnection();
41-
connection.StateChange += Connection_StateChange;
42-
return connection;
43-
}
44-
45-
private static void Connection_StateChange(object sender, StateChangeEventArgs e)
46-
{
47-
if ((e.OriginalState == ConnectionState.Broken || e.OriginalState == ConnectionState.Closed || e.OriginalState == ConnectionState.Connecting) &&
48-
e.CurrentState == ConnectionState.Open)
49-
{
50-
var connection = (DbConnection)sender;
51-
using (var command = connection.CreateCommand())
52-
{
53-
// Activated foreign keys if supported by SQLite. Unknown pragmas are ignored.
54-
command.CommandText = "PRAGMA foreign_keys = ON";
55-
command.ExecuteNonQuery();
56-
}
57-
}
58-
}
59-
60-
public override bool UseNamedPrefixInSql
61-
{
62-
get { return true; }
63-
}
64-
65-
public override bool UseNamedPrefixInParameter
66-
{
67-
get { return true; }
68-
}
69-
70-
public override string NamedPrefix
38+
public override DbConnection CreateConnection()
7139
{
72-
get { return "@"; }
40+
var connection = base.CreateConnection();
41+
connection.StateChange += Connection_StateChange;
42+
return connection;
7343
}
7444

75-
public override bool SupportsMultipleOpenReaders
45+
private static void Connection_StateChange(object sender, StateChangeEventArgs e)
7646
{
77-
get { return false; }
47+
if ((e.OriginalState == ConnectionState.Broken || e.OriginalState == ConnectionState.Closed || e.OriginalState == ConnectionState.Connecting) &&
48+
e.CurrentState == ConnectionState.Open)
49+
{
50+
var connection = (DbConnection)sender;
51+
using (var command = connection.CreateCommand())
52+
{
53+
// Activated foreign keys if supported by SQLite. Unknown pragmas are ignored.
54+
command.CommandText = "PRAGMA foreign_keys = ON";
55+
command.ExecuteNonQuery();
56+
}
57+
}
7858
}
7959

8060
public override IResultSetsCommand GetResultSetsCommand(Engine.ISessionImplementor session)
8161
{
8262
return new BasicResultSetsCommand(session);
8363
}
8464

85-
public override bool SupportsMultipleQueries
86-
{
87-
get { return true; }
88-
}
89-
65+
public override bool UseNamedPrefixInSql => true;
66+
67+
public override bool UseNamedPrefixInParameter => true;
68+
69+
public override string NamedPrefix => "@";
70+
71+
public override bool SupportsMultipleOpenReaders => false;
72+
73+
public override bool SupportsMultipleQueries => true;
74+
9075
public override bool SupportsNullEnlistment => false;
9176

9277
public override bool HasDelayedDistributedTransactionCompletion => true;

0 commit comments

Comments
 (0)