diff --git a/build-common/nhibernate-properties.xml b/build-common/nhibernate-properties.xml index 4b62e992a55..d01178e24d1 100644 --- a/build-common/nhibernate-properties.xml +++ b/build-common/nhibernate-properties.xml @@ -2,6 +2,6 @@ - + diff --git a/build-common/teamcity-hibernate.cfg.xml b/build-common/teamcity-hibernate.cfg.xml index e8cb7f7e6dd..31ec67dcee9 100644 --- a/build-common/teamcity-hibernate.cfg.xml +++ b/build-common/teamcity-hibernate.cfg.xml @@ -15,7 +15,7 @@ true - NHibernate.Driver.Sql2008ClientDriver + NHibernate.Driver.SqlServer2008Driver, NHibernate.Driver.SqlServer NHibernate.Dialect.MsSql2008Dialect Server=.\SQLExpress;initial catalog=nhibernate;Integrated Security=SSPI false diff --git a/default.build b/default.build index 8201995f47a..21f4379fd95 100644 --- a/default.build +++ b/default.build @@ -223,6 +223,7 @@ + @@ -254,6 +255,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/reference/modules/configuration.xml b/doc/reference/modules/configuration.xml index 5c2e4024d74..c0e6d9a932d 100644 --- a/doc/reference/modules/configuration.xml +++ b/doc/reference/modules/configuration.xml @@ -227,6 +227,13 @@ var session = sessions.OpenSession(conn); take care of setting the IDriver using a sensible default. See the API documentation of the specific dialect for the defaults. + + Since NHibernate v5.1, drivers having a NuGet package for their data provider have a + NHibernate.Driver dedicated assembly, which have to be referenced by your project. + Those assemblies are also available as NuGet packages. + If an obsolete driver is configured, NHibernate will issue a warning log when building the session + factory. + @@ -1186,9 +1193,13 @@ in the parameter binding. Firebird NHibernate.Dialect.FirebirdDialect - Set driver_class to - NHibernate.Driver.FirebirdClientDriver - for Firebird ADO.NET provider 2.0. + Install NuGet package + NHibernate.Driver.Firebird + and set driver_class to + NHibernate.Driver.FirebirdDriver, NHibernate.Driver.Firebird + with a fallback on the built-in reflection based + NHibernate.Driver.FirebirdClientDriver. + Both use Firebird ADO.NET provider. @@ -1219,65 +1230,99 @@ in the parameter binding. Microsoft SQL Server 7 NHibernate.Dialect.MsSql7Dialect - + Use the same default driver as NHibernate.Dialect.MsSql2000Dialect. Microsoft SQL Server 2000 NHibernate.Dialect.MsSql2000Dialect - + + Install NuGet package + NHibernate.Driver.SqlServer + and set driver_class to + NHibernate.Driver.SqlServer2000Driver, NHibernate.Driver.SqlServer + with a fallback on the built-in reflection based + NHibernate.Driver.SqlClientDriver. + Both use System.Data.SqlClient. + Microsoft SQL Server 2005 NHibernate.Dialect.MsSql2005Dialect - + Use the same default driver as NHibernate.Dialect.MsSql2000Dialect. Microsoft SQL Server 2008 NHibernate.Dialect.MsSql2008Dialect - + + Install NuGet package + NHibernate.Driver.SqlServer + and set driver_class to + NHibernate.Driver.SqlServer2008Driver, NHibernate.Driver.SqlServer + with a fallback on the built-in reflection based + NHibernate.Driver.Sql2008ClientDriver. + Both use System.Data.SqlClient. + Microsoft SQL Azure Server 2008 NHibernate.Dialect.MsSqlAzure2008Dialect - + Use the same default driver as NHibernate.Dialect.MsSql2008Dialect. Microsoft SQL Server 2012 NHibernate.Dialect.MsSql2012Dialect - + Use the same default driver as NHibernate.Dialect.MsSql2008Dialect. Microsoft SQL Server Compact Edition NHibernate.Dialect.MsSqlCeDialect + + Install NuGet package + NHibernate.Driver.SqlServer.Compact + and set driver_class to + NHibernate.Driver.SqlServerCompactDriver, NHibernate.Driver.SqlServer.Compact + with a fallback on the built-in reflection based + NHibernate.Driver.SqlServerCeDriver. + Both use System.Data.SqlServerCe. + Microsoft SQL Server Compact Edition 4.0 NHibernate.Dialect.MsSqlCe40Dialect + Use the same default driver as NHibernate.Dialect.MsSqlCeDialect. - MySQL 3 or 4 + MySQL 3 or 4 NHibernate.Dialect.MySQLDialect - + + Install NuGet package + NHibernate.Driver.MySql + and set driver_class to + NHibernate.Driver.MySqlDriver, NHibernate.Driver.MySql + with a fallback on the built-in reflection based + NHibernate.Driver.MySqlDataDriver. + Both use MySql.Data. + MySQL 5 NHibernate.Dialect.MySQL5Dialect - + Use the same default driver as NHibernate.Dialect.MySQLDialect. MySQL 5 Inno DB NHibernate.Dialect.MySQL5InnoDBDialect - + Use the same default driver as NHibernate.Dialect.MySQLDialect. MySQL 5.5 NHibernate.Dialect.MySQL55Dialect - + Use the same default driver as NHibernate.Dialect.MySQLDialect. MySQL 5.5 Inno DB NHibernate.Dialect.MySQL55InnoDBDialect - + Use the same default driver as NHibernate.Dialect.MySQLDialect. Oracle @@ -1299,15 +1344,17 @@ in the parameter binding. NHibernate.Dialect.Oracle12cDialect - - PostgreSQL - NHibernate.Dialect.PostgreSQLDialect - - PostgreSQL NHibernate.Dialect.PostgreSQLDialect + Install NuGet package + NHibernate.Driver.PostgreSql + and set driver_class to + NHibernate.Driver.PostgreSqlDriver, NHibernate.Driver.PostgreSql + with a fallback on the built-in reflection based + NHibernate.Driver.NpgsqlDriver. + Both use Npgsql. @@ -1316,6 +1363,7 @@ in the parameter binding. This dialect supports FOR UPDATE NOWAIT available in PostgreSQL 8.1. + Use the same default driver as NHibernate.Dialect.PostgreSQLDialect. @@ -1325,6 +1373,7 @@ in the parameter binding. This dialect supports IF EXISTS keyword in DROP TABLE and DROP SEQUENCE available in PostgreSQL 8.2. + Use the same default driver as NHibernate.Dialect.PostgreSQLDialect. @@ -1332,15 +1381,20 @@ in the parameter binding. NHibernate.Dialect.PostgreSQL83Dialect This dialect supports XML type. + Use the same default driver as NHibernate.Dialect.PostgreSQLDialect. SQLite NHibernate.Dialect.SQLiteDialect - Set driver_class to - NHibernate.Driver.SQLite20Driver - for System.Data.SQLite provider for .NET 2.0. + Install NuGet package + NHibernate.Driver.SQLite + and set driver_class to + NHibernate.Driver.SQLiteDriver, NHibernate.Driver.SQLite + with a fallback on the built-in reflection based + NHibernate.Driver.SQLite20Driver. + Both use System.Data.SQLite. Due to the diff --git a/psake.ps1 b/psake.ps1 index e9cd52d7081..5864d9f2e4d 100644 --- a/psake.ps1 +++ b/psake.ps1 @@ -11,12 +11,12 @@ Task Set-Configuration { $allSettings = @{ 'Firebird' = @{ 'connection.connection_string' = 'DataSource=localhost;Database=nhibernate;User ID=SYSDBA;Password=masterkey;MaxPoolSize=200;'; - 'connection.driver_class' = 'NHibernate.Driver.FirebirdClientDriver'; + 'connection.driver_class' = 'NHibernate.Driver.FirebirdDriver, NHibernate.Driver.Firebird'; 'dialect' = 'NHibernate.Dialect.FirebirdDialect' }; 'MySQL' = @{ 'connection.connection_string' = 'Server=127.0.0.1;Uid=root;Pwd=Password12!;Database=nhibernate;Old Guids=True;'; - 'connection.driver_class' = 'NHibernate.Driver.MySqlDataDriver'; + 'connection.driver_class' = 'NHibernate.Driver.MySqlDriver, NHibernate.Driver.MySql'; 'dialect' = 'NHibernate.Dialect.MySQL5Dialect' }; 'Odbc' = @{ @@ -35,7 +35,7 @@ Task Set-Configuration { }; 'PostgreSQL' = @{ 'connection.connection_string' = 'Host=localhost;Port=5432;Username=postgres;Password=Password12!;Database=nhibernate;Enlist=true'; - 'connection.driver_class' = 'NHibernate.Driver.NpgsqlDriver'; + 'connection.driver_class' = 'NHibernate.Driver.PostgreSqlDriver, NHibernate.Driver.PostgreSql'; 'dialect' = 'NHibernate.Dialect.PostgreSQL83Dialect' }; 'SQLite' = @{ @@ -46,13 +46,13 @@ Task Set-Configuration { and https://github.com/nhibernate/nhibernate-core/issues/1362 #> # Please note the connection string is formated for putting the db file in $configDir. 'connection.connection_string' = "Data Source=$configDir/NHibernate.db;DateTimeFormatString=yyyy-MM-dd HH:mm:ss.FFFFFFF;"; - 'connection.driver_class' = 'NHibernate.Driver.SQLite20Driver'; + 'connection.driver_class' = 'NHibernate.Driver.SQLiteDriver, NHibernate.Driver.SQLite'; 'dialect' = 'NHibernate.Dialect.SQLiteDialect' }; 'SqlServerCe' = @{ # Please note the connection string is formated for putting the db file in $configDir. 'connection.connection_string' = "Data Source=$configDir/NHibernate.sdf;"; - 'connection.driver_class' = 'NHibernate.Driver.SqlServerCeDriver'; + 'connection.driver_class' = 'NHibernate.Driver.SqlServerCompactDriver, NHibernate.Driver.SqlServer.Compact'; 'command_timeout' = '0'; 'dialect' = 'NHibernate.Dialect.MsSqlCe40Dialect' }; @@ -102,15 +102,15 @@ Task Build { } } -Task Test -depends Build { +Task Test { @( 'NHibernate.TestDatabaseSetup', 'NHibernate.Test', 'NHibernate.Test.VisualBasic' ) | ForEach-Object { - $assembly = [IO.Path]::Combine("src", $_, "bin", "Release", "netcoreapp2.0", "$_.dll") + $project = [IO.Path]::Combine("src", $_) Exec { - dotnet $assembly --labels=before --nocolor "--result=$_-TestResult.xml" + dotnet run -f netcoreapp2.0 -c Release -p $project -- --labels=before --nocolor "--result=$_-TestResult.xml" } } } \ No newline at end of file diff --git a/src/NHibernate.Config.Templates/FireBird.cfg.xml b/src/NHibernate.Config.Templates/FireBird.cfg.xml index 9e3c8e42992..82c4f81e603 100644 --- a/src/NHibernate.Config.Templates/FireBird.cfg.xml +++ b/src/NHibernate.Config.Templates/FireBird.cfg.xml @@ -16,7 +16,7 @@ for your own use before compile tests in VisualStudio. --> - NHibernate.Driver.FirebirdClientDriver + NHibernate.Driver.FirebirdDriver, NHibernate.Driver.Firebird DataSource=localhost; Database=nhibernate; diff --git a/src/NHibernate.Config.Templates/MSSQL.cfg.xml b/src/NHibernate.Config.Templates/MSSQL.cfg.xml index 8e5706a5c56..4aea9caec11 100644 --- a/src/NHibernate.Config.Templates/MSSQL.cfg.xml +++ b/src/NHibernate.Config.Templates/MSSQL.cfg.xml @@ -7,7 +7,7 @@ for your own use before compile tests in VisualStudio. - NHibernate.Driver.Sql2008ClientDriver + NHibernate.Driver.SqlServer2008Driver, NHibernate.Driver.SqlServer Server=(local);initial catalog=nhibernate;Integrated Security=SSPI diff --git a/src/NHibernate.Config.Templates/MySql.cfg.xml b/src/NHibernate.Config.Templates/MySql.cfg.xml index be2366cd660..ef246809489 100644 --- a/src/NHibernate.Config.Templates/MySql.cfg.xml +++ b/src/NHibernate.Config.Templates/MySql.cfg.xml @@ -6,11 +6,11 @@ for your own use before compile tests in VisualStudio. --> - NHibernate.Driver.MySqlDataDriver + NHibernate.Driver.MySqlDriver, NHibernate.Driver.MySql Database=nhibernate;Data Source=localhost;User Id=nhibernate;Password=; Protocol=memory;Old Guids=True; NHibernate.Dialect.MySQL5Dialect - \ No newline at end of file + diff --git a/src/NHibernate.Config.Templates/Oracle-Managed.cfg.xml b/src/NHibernate.Config.Templates/Oracle-Managed.cfg.xml index efa6b51a596..44b2e57287b 100644 --- a/src/NHibernate.Config.Templates/Oracle-Managed.cfg.xml +++ b/src/NHibernate.Config.Templates/Oracle-Managed.cfg.xml @@ -7,7 +7,7 @@ for your own use before compile tests in VisualStudio. - NHibernate.Driver.OracleManagedDataClientDriver + NHibernate.Driver.OracleManagedDriver, NHibernate.Driver.Oracle.Managed User ID=nhibernate;Password=nhibernate;Data Source=(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = ORCL))) diff --git a/src/NHibernate.Config.Templates/PostgreSQL.cfg.xml b/src/NHibernate.Config.Templates/PostgreSQL.cfg.xml index 459543f2bbf..219fbbcc6be 100644 --- a/src/NHibernate.Config.Templates/PostgreSQL.cfg.xml +++ b/src/NHibernate.Config.Templates/PostgreSQL.cfg.xml @@ -6,7 +6,7 @@ for your own use before compile tests in VisualStudio. --> - NHibernate.Driver.NpgsqlDriver + NHibernate.Driver.PostgreSqlDriver, NHibernate.Driver.PostgreSql Server=localhost;Database=nhibernate;User ID=nhibernate;Password=nhibernate;Enlist=true; diff --git a/src/NHibernate.Config.Templates/SQLite.cfg.xml b/src/NHibernate.Config.Templates/SQLite.cfg.xml index 50890aea597..559f9312d7e 100644 --- a/src/NHibernate.Config.Templates/SQLite.cfg.xml +++ b/src/NHibernate.Config.Templates/SQLite.cfg.xml @@ -6,7 +6,7 @@ for your own use before compile tests in VisualStudio. --> - NHibernate.Driver.SQLite20Driver + NHibernate.Driver.SQLiteDriver, NHibernate.Driver.SQLite + + + false + %(RecursiveDir)%(Filename)%(Extension) + PreserveNewest + + + + + + + + + + NHibernate.license.txt + + + + diff --git a/src/NHibernate.Driver.SQLite/Properties/AssemblyInfo.cs b/src/NHibernate.Driver.SQLite/Properties/AssemblyInfo.cs new file mode 100644 index 00000000000..71b3de6ca17 --- /dev/null +++ b/src/NHibernate.Driver.SQLite/Properties/AssemblyInfo.cs @@ -0,0 +1,8 @@ +using System; +using System.Reflection; +using System.Security; + +[assembly: CLSCompliantAttribute(true)] +[assembly: AssemblyDelaySignAttribute(false)] +[assembly: AllowPartiallyTrustedCallersAttribute()] +[assembly: SecurityRulesAttribute(SecurityRuleSet.Level1)] diff --git a/src/NHibernate.Driver.SqlServer.Compact/.gitignore b/src/NHibernate.Driver.SqlServer.Compact/.gitignore new file mode 100644 index 00000000000..c3106783d7c --- /dev/null +++ b/src/NHibernate.Driver.SqlServer.Compact/.gitignore @@ -0,0 +1 @@ +!build/ \ No newline at end of file diff --git a/src/NHibernate.Driver.SqlServer.Compact/Cfg/ConnectionConfigurationExtensionSqlServerCompact.cs b/src/NHibernate.Driver.SqlServer.Compact/Cfg/ConnectionConfigurationExtensionSqlServerCompact.cs new file mode 100644 index 00000000000..cc144b3c044 --- /dev/null +++ b/src/NHibernate.Driver.SqlServer.Compact/Cfg/ConnectionConfigurationExtensionSqlServerCompact.cs @@ -0,0 +1,18 @@ +using NHibernate.Cfg.Loquacious; +using NHibernate.Driver; + +namespace NHibernate.Cfg +{ + public static class ConnectionConfigurationExtensionSqlServerCompact + { + public static IConnectionConfiguration BySqlServerCompactDriver(this IConnectionConfiguration cfg) + { + return cfg.By(); + } + + public static void SqlServerCompactDriver(this IDbIntegrationConfigurationProperties cfg) + { + cfg.Driver(); + } + } +} diff --git a/src/NHibernate.Driver.SqlServer.Compact/NHibernate.Driver.SqlServer.Compact.csproj b/src/NHibernate.Driver.SqlServer.Compact/NHibernate.Driver.SqlServer.Compact.csproj new file mode 100644 index 00000000000..52a61456f4a --- /dev/null +++ b/src/NHibernate.Driver.SqlServer.Compact/NHibernate.Driver.SqlServer.Compact.csproj @@ -0,0 +1,71 @@ + + + + + Driver for SQL Server Compact 4.0 to be used with NHibernate 5. + NHibernate; Driver; SQL; Compact; ADO.Net + + net461 + $(NoWarn);3001;3002;3003;3005;1591 + True + true + ..\NHibernate.snk + true + True + + + true + + + + NETFX;$(DefineConstants) + + + + $(DefineConstants);DRIVER_PACKAGE + NHibernate + + + + + + + + + + + + + + + + + + + + + + true + build\ + + + + + + + false + %(RecursiveDir)%(Filename)%(Extension) + PreserveNewest + + + + + + NHibernate.license.txt + + + + diff --git a/src/NHibernate.Driver.SqlServer.Compact/Properties/AssemblyInfo.cs b/src/NHibernate.Driver.SqlServer.Compact/Properties/AssemblyInfo.cs new file mode 100644 index 00000000000..71b3de6ca17 --- /dev/null +++ b/src/NHibernate.Driver.SqlServer.Compact/Properties/AssemblyInfo.cs @@ -0,0 +1,8 @@ +using System; +using System.Reflection; +using System.Security; + +[assembly: CLSCompliantAttribute(true)] +[assembly: AssemblyDelaySignAttribute(false)] +[assembly: AllowPartiallyTrustedCallersAttribute()] +[assembly: SecurityRulesAttribute(SecurityRuleSet.Level1)] diff --git a/src/NHibernate.Driver.SqlServer.Compact/build/NHibernate.Driver.SqlServer.Compact.targets b/src/NHibernate.Driver.SqlServer.Compact/build/NHibernate.Driver.SqlServer.Compact.targets new file mode 100644 index 00000000000..1bafcf18130 --- /dev/null +++ b/src/NHibernate.Driver.SqlServer.Compact/build/NHibernate.Driver.SqlServer.Compact.targets @@ -0,0 +1,22 @@ + + + + + + + + %(RecursiveDir)%(Filename)%(Extension) + PreserveNewest + false + + + + + $(ResolveAssemblyReferencesDependsOn);InjectReference_eb5aa2e4-6c92-4a75-85b8-1348b65397d1 + + \ No newline at end of file diff --git a/src/NHibernate.Driver.SqlServer/Cfg/ConnectionConfigurationExtensionSqlServer.cs b/src/NHibernate.Driver.SqlServer/Cfg/ConnectionConfigurationExtensionSqlServer.cs new file mode 100644 index 00000000000..b49c46e79a2 --- /dev/null +++ b/src/NHibernate.Driver.SqlServer/Cfg/ConnectionConfigurationExtensionSqlServer.cs @@ -0,0 +1,28 @@ +using NHibernate.Cfg.Loquacious; +using NHibernate.Driver; + +namespace NHibernate.Cfg +{ + public static class ConnectionConfigurationExtensionSqlServer + { + public static IConnectionConfiguration BySqlServer2000Driver(this IConnectionConfiguration cfg) + { + return cfg.By(); + } + + public static void SqlServer2000Driver(this IDbIntegrationConfigurationProperties cfg) + { + cfg.Driver(); + } + + public static IConnectionConfiguration BySqlServer2008Driver(this IConnectionConfiguration cfg) + { + return cfg.By(); + } + + public static void SqlServer2008Driver(this IDbIntegrationConfigurationProperties cfg) + { + cfg.Driver(); + } + } +} diff --git a/src/NHibernate.Driver.SqlServer/NHibernate.Driver.SqlServer.csproj b/src/NHibernate.Driver.SqlServer/NHibernate.Driver.SqlServer.csproj new file mode 100644 index 00000000000..11a89607b2e --- /dev/null +++ b/src/NHibernate.Driver.SqlServer/NHibernate.Driver.SqlServer.csproj @@ -0,0 +1,52 @@ + + + + + Driver for Microsoft SQL Server to be used with NHibernate 5. + NHibernate; Driver; SqlClient; SqlServer; SQL Server; ADO.Net; Core + + netstandard2.0;net461 + $(NoWarn);3001;3002;3003;3005;1591 + True + true + ..\NHibernate.snk + true + True + + + true + + + + NETFX;$(DefineConstants) + + + + $(DefineConstants);DRIVER_PACKAGE + NHibernate + + + + + + + + + + + + + + + + + + + + + + NHibernate.license.txt + + + + diff --git a/src/NHibernate.Driver.SqlServer/Properties/AssemblyInfo.cs b/src/NHibernate.Driver.SqlServer/Properties/AssemblyInfo.cs new file mode 100644 index 00000000000..71b3de6ca17 --- /dev/null +++ b/src/NHibernate.Driver.SqlServer/Properties/AssemblyInfo.cs @@ -0,0 +1,8 @@ +using System; +using System.Reflection; +using System.Security; + +[assembly: CLSCompliantAttribute(true)] +[assembly: AssemblyDelaySignAttribute(false)] +[assembly: AllowPartiallyTrustedCallersAttribute()] +[assembly: SecurityRulesAttribute(SecurityRuleSet.Level1)] diff --git a/src/NHibernate.Everything.sln b/src/NHibernate.Everything.sln index c2c257360fc..867db2fedd8 100644 --- a/src/NHibernate.Everything.sln +++ b/src/NHibernate.Everything.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 15 -VisualStudioVersion = 15.0.26730.12 +VisualStudioVersion = 15.0.27004.2010 MinimumVisualStudioVersion = 10.0.40219.1 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Support", "Support", "{9BDB5C84-14EC-4384-B423-9E319675B3CA}" ProjectSection(SolutionItems) = preProject @@ -70,6 +70,22 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NHibernate.Tool.HbmXsd", "N EndProject Project("{778DAE3C-4631-46EA-AA77-85C1314464D9}") = "NHibernate.Test.VisualBasic", "NHibernate.Test.VisualBasic\NHibernate.Test.VisualBasic.vbproj", "{7C2EF610-BCA0-4D1F-898A-DE9908E4970C}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Drivers", "Drivers", "{A47739AF-6D04-45AA-B688-4E39CDE48FFD}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NHibernate.Driver.Firebird", "NHibernate.Driver.Firebird\NHibernate.Driver.Firebird.csproj", "{DADD54C1-3679-4672-9774-9362428EB9E0}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NHibernate.Driver.MySql", "NHibernate.Driver.MySql\NHibernate.Driver.MySql.csproj", "{4F5F0C13-F302-4CEE-B60E-A55D7C30E3F8}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NHibernate.Driver.PostgreSql", "NHibernate.Driver.PostgreSql\NHibernate.Driver.PostgreSql.csproj", "{C7C835DC-0A59-4227-9C3C-0AF0633CD68C}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NHibernate.Driver.Oracle.Managed", "NHibernate.Driver.Oracle.Managed\NHibernate.Driver.Oracle.Managed.csproj", "{22409381-1808-4F0A-9C42-9FAA6B3BCFA2}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NHibernate.Driver.SQLite", "NHibernate.Driver.SQLite\NHibernate.Driver.SQLite.csproj", "{99FE5A5C-F732-40A3-BEE6-ED5ADC393862}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NHibernate.Driver.SqlServer", "NHibernate.Driver.SqlServer\NHibernate.Driver.SqlServer.csproj", "{CF9FEEC5-3403-4F3F-9E4F-F0BAFE95DE39}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NHibernate.Driver.SqlServer.Compact", "NHibernate.Driver.SqlServer.Compact\NHibernate.Driver.SqlServer.Compact.csproj", "{11B3C504-D501-4766-AC36-0CF1A813815B}" +EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NHibernate.Example.Web", "NHibernate.Example.Web\NHibernate.Example.Web.csproj", "{B291C1C1-599B-418E-8591-8A8CF1CAA188}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NHibernate.TestDatabaseSetup", "NHibernate.TestDatabaseSetup\NHibernate.TestDatabaseSetup.csproj", "{783DB85E-2EED-4377-8EF4-8D6EFE042007}" @@ -133,6 +149,90 @@ Global {7C2EF610-BCA0-4D1F-898A-DE9908E4970C}.Release|Any CPU.Build.0 = Release|Any CPU {7C2EF610-BCA0-4D1F-898A-DE9908E4970C}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {7C2EF610-BCA0-4D1F-898A-DE9908E4970C}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {DADD54C1-3679-4672-9774-9362428EB9E0}.Debug|.NET.ActiveCfg = Debug|Any CPU + {DADD54C1-3679-4672-9774-9362428EB9E0}.Debug|.NET.Build.0 = Debug|Any CPU + {DADD54C1-3679-4672-9774-9362428EB9E0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DADD54C1-3679-4672-9774-9362428EB9E0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DADD54C1-3679-4672-9774-9362428EB9E0}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {DADD54C1-3679-4672-9774-9362428EB9E0}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {DADD54C1-3679-4672-9774-9362428EB9E0}.Release|.NET.ActiveCfg = Release|Any CPU + {DADD54C1-3679-4672-9774-9362428EB9E0}.Release|.NET.Build.0 = Release|Any CPU + {DADD54C1-3679-4672-9774-9362428EB9E0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DADD54C1-3679-4672-9774-9362428EB9E0}.Release|Any CPU.Build.0 = Release|Any CPU + {DADD54C1-3679-4672-9774-9362428EB9E0}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {DADD54C1-3679-4672-9774-9362428EB9E0}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {4F5F0C13-F302-4CEE-B60E-A55D7C30E3F8}.Debug|.NET.ActiveCfg = Debug|Any CPU + {4F5F0C13-F302-4CEE-B60E-A55D7C30E3F8}.Debug|.NET.Build.0 = Debug|Any CPU + {4F5F0C13-F302-4CEE-B60E-A55D7C30E3F8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4F5F0C13-F302-4CEE-B60E-A55D7C30E3F8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4F5F0C13-F302-4CEE-B60E-A55D7C30E3F8}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {4F5F0C13-F302-4CEE-B60E-A55D7C30E3F8}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {4F5F0C13-F302-4CEE-B60E-A55D7C30E3F8}.Release|.NET.ActiveCfg = Release|Any CPU + {4F5F0C13-F302-4CEE-B60E-A55D7C30E3F8}.Release|.NET.Build.0 = Release|Any CPU + {4F5F0C13-F302-4CEE-B60E-A55D7C30E3F8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4F5F0C13-F302-4CEE-B60E-A55D7C30E3F8}.Release|Any CPU.Build.0 = Release|Any CPU + {4F5F0C13-F302-4CEE-B60E-A55D7C30E3F8}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {4F5F0C13-F302-4CEE-B60E-A55D7C30E3F8}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {C7C835DC-0A59-4227-9C3C-0AF0633CD68C}.Debug|.NET.ActiveCfg = Debug|Any CPU + {C7C835DC-0A59-4227-9C3C-0AF0633CD68C}.Debug|.NET.Build.0 = Debug|Any CPU + {C7C835DC-0A59-4227-9C3C-0AF0633CD68C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C7C835DC-0A59-4227-9C3C-0AF0633CD68C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C7C835DC-0A59-4227-9C3C-0AF0633CD68C}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {C7C835DC-0A59-4227-9C3C-0AF0633CD68C}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {C7C835DC-0A59-4227-9C3C-0AF0633CD68C}.Release|.NET.ActiveCfg = Release|Any CPU + {C7C835DC-0A59-4227-9C3C-0AF0633CD68C}.Release|.NET.Build.0 = Release|Any CPU + {C7C835DC-0A59-4227-9C3C-0AF0633CD68C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C7C835DC-0A59-4227-9C3C-0AF0633CD68C}.Release|Any CPU.Build.0 = Release|Any CPU + {C7C835DC-0A59-4227-9C3C-0AF0633CD68C}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {C7C835DC-0A59-4227-9C3C-0AF0633CD68C}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {22409381-1808-4F0A-9C42-9FAA6B3BCFA2}.Debug|.NET.ActiveCfg = Debug|Any CPU + {22409381-1808-4F0A-9C42-9FAA6B3BCFA2}.Debug|.NET.Build.0 = Debug|Any CPU + {22409381-1808-4F0A-9C42-9FAA6B3BCFA2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {22409381-1808-4F0A-9C42-9FAA6B3BCFA2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {22409381-1808-4F0A-9C42-9FAA6B3BCFA2}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {22409381-1808-4F0A-9C42-9FAA6B3BCFA2}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {22409381-1808-4F0A-9C42-9FAA6B3BCFA2}.Release|.NET.ActiveCfg = Release|Any CPU + {22409381-1808-4F0A-9C42-9FAA6B3BCFA2}.Release|.NET.Build.0 = Release|Any CPU + {22409381-1808-4F0A-9C42-9FAA6B3BCFA2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {22409381-1808-4F0A-9C42-9FAA6B3BCFA2}.Release|Any CPU.Build.0 = Release|Any CPU + {22409381-1808-4F0A-9C42-9FAA6B3BCFA2}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {22409381-1808-4F0A-9C42-9FAA6B3BCFA2}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {99FE5A5C-F732-40A3-BEE6-ED5ADC393862}.Debug|.NET.ActiveCfg = Debug|Any CPU + {99FE5A5C-F732-40A3-BEE6-ED5ADC393862}.Debug|.NET.Build.0 = Debug|Any CPU + {99FE5A5C-F732-40A3-BEE6-ED5ADC393862}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {99FE5A5C-F732-40A3-BEE6-ED5ADC393862}.Debug|Any CPU.Build.0 = Debug|Any CPU + {99FE5A5C-F732-40A3-BEE6-ED5ADC393862}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {99FE5A5C-F732-40A3-BEE6-ED5ADC393862}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {99FE5A5C-F732-40A3-BEE6-ED5ADC393862}.Release|.NET.ActiveCfg = Release|Any CPU + {99FE5A5C-F732-40A3-BEE6-ED5ADC393862}.Release|.NET.Build.0 = Release|Any CPU + {99FE5A5C-F732-40A3-BEE6-ED5ADC393862}.Release|Any CPU.ActiveCfg = Release|Any CPU + {99FE5A5C-F732-40A3-BEE6-ED5ADC393862}.Release|Any CPU.Build.0 = Release|Any CPU + {99FE5A5C-F732-40A3-BEE6-ED5ADC393862}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {99FE5A5C-F732-40A3-BEE6-ED5ADC393862}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {CF9FEEC5-3403-4F3F-9E4F-F0BAFE95DE39}.Debug|.NET.ActiveCfg = Debug|Any CPU + {CF9FEEC5-3403-4F3F-9E4F-F0BAFE95DE39}.Debug|.NET.Build.0 = Debug|Any CPU + {CF9FEEC5-3403-4F3F-9E4F-F0BAFE95DE39}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CF9FEEC5-3403-4F3F-9E4F-F0BAFE95DE39}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CF9FEEC5-3403-4F3F-9E4F-F0BAFE95DE39}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {CF9FEEC5-3403-4F3F-9E4F-F0BAFE95DE39}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {CF9FEEC5-3403-4F3F-9E4F-F0BAFE95DE39}.Release|.NET.ActiveCfg = Release|Any CPU + {CF9FEEC5-3403-4F3F-9E4F-F0BAFE95DE39}.Release|.NET.Build.0 = Release|Any CPU + {CF9FEEC5-3403-4F3F-9E4F-F0BAFE95DE39}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CF9FEEC5-3403-4F3F-9E4F-F0BAFE95DE39}.Release|Any CPU.Build.0 = Release|Any CPU + {CF9FEEC5-3403-4F3F-9E4F-F0BAFE95DE39}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {CF9FEEC5-3403-4F3F-9E4F-F0BAFE95DE39}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {11B3C504-D501-4766-AC36-0CF1A813815B}.Debug|.NET.ActiveCfg = Debug|Any CPU + {11B3C504-D501-4766-AC36-0CF1A813815B}.Debug|.NET.Build.0 = Debug|Any CPU + {11B3C504-D501-4766-AC36-0CF1A813815B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {11B3C504-D501-4766-AC36-0CF1A813815B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {11B3C504-D501-4766-AC36-0CF1A813815B}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {11B3C504-D501-4766-AC36-0CF1A813815B}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {11B3C504-D501-4766-AC36-0CF1A813815B}.Release|.NET.ActiveCfg = Release|Any CPU + {11B3C504-D501-4766-AC36-0CF1A813815B}.Release|.NET.Build.0 = Release|Any CPU + {11B3C504-D501-4766-AC36-0CF1A813815B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {11B3C504-D501-4766-AC36-0CF1A813815B}.Release|Any CPU.Build.0 = Release|Any CPU + {11B3C504-D501-4766-AC36-0CF1A813815B}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {11B3C504-D501-4766-AC36-0CF1A813815B}.Release|Mixed Platforms.Build.0 = Release|Any CPU {B291C1C1-599B-418E-8591-8A8CF1CAA188}.Debug|.NET.ActiveCfg = Debug|Any CPU {B291C1C1-599B-418E-8591-8A8CF1CAA188}.Debug|.NET.Build.0 = Debug|Any CPU {B291C1C1-599B-418E-8591-8A8CF1CAA188}.Debug|Any CPU.ActiveCfg = Debug|Any CPU @@ -172,6 +272,14 @@ Global {7AEE5B37-C552-4E59-9B6F-88755BCB5070} = {094F74CD-2DD7-496F-BC48-A6D357BF33FD} {446E148D-A9D5-4D7D-A706-BEDD45B2BC7D} = {92509065-DAEA-4457-8300-C7B64CD0E9F4} {7C2EF610-BCA0-4D1F-898A-DE9908E4970C} = {094F74CD-2DD7-496F-BC48-A6D357BF33FD} + {A47739AF-6D04-45AA-B688-4E39CDE48FFD} = {28EA2C84-8295-49ED-BC67-803B7778513E} + {DADD54C1-3679-4672-9774-9362428EB9E0} = {A47739AF-6D04-45AA-B688-4E39CDE48FFD} + {4F5F0C13-F302-4CEE-B60E-A55D7C30E3F8} = {A47739AF-6D04-45AA-B688-4E39CDE48FFD} + {C7C835DC-0A59-4227-9C3C-0AF0633CD68C} = {A47739AF-6D04-45AA-B688-4E39CDE48FFD} + {22409381-1808-4F0A-9C42-9FAA6B3BCFA2} = {A47739AF-6D04-45AA-B688-4E39CDE48FFD} + {99FE5A5C-F732-40A3-BEE6-ED5ADC393862} = {A47739AF-6D04-45AA-B688-4E39CDE48FFD} + {CF9FEEC5-3403-4F3F-9E4F-F0BAFE95DE39} = {A47739AF-6D04-45AA-B688-4E39CDE48FFD} + {11B3C504-D501-4766-AC36-0CF1A813815B} = {A47739AF-6D04-45AA-B688-4E39CDE48FFD} {783DB85E-2EED-4377-8EF4-8D6EFE042007} = {094F74CD-2DD7-496F-BC48-A6D357BF33FD} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution diff --git a/src/NHibernate.Example.Web/Infrastructure/AppSessionFactory.cs b/src/NHibernate.Example.Web/Infrastructure/AppSessionFactory.cs index 38265648eda..f783e670153 100644 --- a/src/NHibernate.Example.Web/Infrastructure/AppSessionFactory.cs +++ b/src/NHibernate.Example.Web/Infrastructure/AppSessionFactory.cs @@ -24,7 +24,7 @@ public AppSessionFactory(Microsoft.Extensions.Logging.ILoggerFactory loggerFacto { db.ConnectionString = @"Server=(local)\SQLEXPRESS;initial catalog=nhibernate;Integrated Security=true"; db.Dialect(); - db.Driver(); + db.SqlServer2008Driver(); }) .AddMapping(domainMapping); Configuration.SessionFactory().GenerateStatistics(); diff --git a/src/NHibernate.Example.Web/NHibernate.Example.Web.csproj b/src/NHibernate.Example.Web/NHibernate.Example.Web.csproj index 98f7c8bdf68..04fcbb41fd4 100644 --- a/src/NHibernate.Example.Web/NHibernate.Example.Web.csproj +++ b/src/NHibernate.Example.Web/NHibernate.Example.Web.csproj @@ -29,6 +29,7 @@ + diff --git a/src/NHibernate.Test/App.config b/src/NHibernate.Test/App.config index d3965012af5..e81be0b5a1d 100644 --- a/src/NHibernate.Test/App.config +++ b/src/NHibernate.Test/App.config @@ -30,7 +30,7 @@ NHibernate.Dialect.MsSql2008Dialect - NHibernate.Driver.Sql2008ClientDriver + NHibernate.Driver.SqlServer2008Driver, NHibernate.Driver.SqlServer Server=localhost\sqlexpress;Database=nhibernate;Integrated Security=SSPI NHibernate.Test.DebugConnectionProvider, NHibernate.Test ReadCommitted diff --git a/src/NHibernate.Test/Async/CfgTest/ConfigurationFixture.cs b/src/NHibernate.Test/Async/CfgTest/ConfigurationFixture.cs index 9855db73094..8a4e813eab4 100644 --- a/src/NHibernate.Test/Async/CfgTest/ConfigurationFixture.cs +++ b/src/NHibernate.Test/Async/CfgTest/ConfigurationFixture.cs @@ -44,7 +44,7 @@ public async Task ManualConfigurationAsync() props[Environment.ConnectionProvider] = "NHibernate.Connection.DriverConnectionProvider"; props[Environment.Dialect] = "NHibernate.Dialect.MsSql2000Dialect"; - props[Environment.ConnectionDriver] = "NHibernate.Driver.SqlClientDriver"; + props[Environment.ConnectionDriver] = "NHibernate.Driver.SqlServer2000Driver, NHibernate.Driver.SqlServer"; props[Environment.ConnectionString] = "Server=localhost;initial catalog=nhibernate;Integrated Security=SSPI"; diff --git a/src/NHibernate.Test/Async/DriverTest/FirebirdClientDriverFixture.cs b/src/NHibernate.Test/Async/DriverTest/FirebirdClientDriverFixture.cs index 734866bda0c..df95610b93b 100644 --- a/src/NHibernate.Test/Async/DriverTest/FirebirdClientDriverFixture.cs +++ b/src/NHibernate.Test/Async/DriverTest/FirebirdClientDriverFixture.cs @@ -21,6 +21,7 @@ namespace NHibernate.Test.DriverTest using System.Threading.Tasks; using System.Threading; [TestFixture] + [Obsolete("Uses old driver")] public class FirebirdClientDriverFixtureAsync { private string _connectionString; diff --git a/src/NHibernate.Test/Async/DriverTest/FirebirdDriverFixture.cs b/src/NHibernate.Test/Async/DriverTest/FirebirdDriverFixture.cs new file mode 100644 index 00000000000..cb0ab53d9cc --- /dev/null +++ b/src/NHibernate.Test/Async/DriverTest/FirebirdDriverFixture.cs @@ -0,0 +1,201 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by AsyncGenerator. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + + +using System; +using System.Data; +using System.Data.Common; +using NHibernate.Driver; +using NHibernate.SqlCommand; +using NHibernate.SqlTypes; +using NUnit.Framework; + +namespace NHibernate.Test.DriverTest +{ + using System.Threading.Tasks; + using System.Threading; + [TestFixture] + public class FirebirdDriverFixtureAsync + { + private string _connectionString; + private FirebirdDriver _driver; + + [OneTimeSetUp] + public void OneTimeSetup() + { + var cfg = TestConfigurationHelper.GetDefaultConfiguration(); + + var dlct = cfg.GetProperty("dialect"); + if (!dlct.Contains("Firebird")) + Assert.Ignore("Applies only to Firebird"); + + _driver = new FirebirdDriver(); + _driver.Configure(cfg.Properties); + _connectionString = cfg.GetProperty("connection.connection_string"); + } + + [Test] + public async Task ConnectionPooling_OpenThenCloseThenOpenAnotherOne_OnlyOneConnectionIsPooledAsync() + { + _driver.ClearPool(_connectionString); + + var allreadyEstablished = await (GetEstablishedConnectionsAsync()); + + using (var connection1 = MakeConnection()) + using (var connection2 = MakeConnection()) + { + //open first connection + await (connection1.OpenAsync()); + await (VerifyCountOfEstablishedConnectionsIsAsync(allreadyEstablished + 1, "After first open")); + + //return it to the pool + connection1.Close(); + await (VerifyCountOfEstablishedConnectionsIsAsync(allreadyEstablished + 1, "After first close")); + + //open the second connection + await (connection2.OpenAsync()); + await (VerifyCountOfEstablishedConnectionsIsAsync(allreadyEstablished + 1, "After second open")); + + //return it to the pool + connection2.Close(); + await (VerifyCountOfEstablishedConnectionsIsAsync(allreadyEstablished + 1, "After second close")); + } + } + + [Test] + public async Task ConnectionPooling_OpenThenCloseTwoAtTheSameTime_TowConnectionsArePooledAsync() + { + _driver.ClearPool(_connectionString); + + var allreadyEstablished = await (GetEstablishedConnectionsAsync()); + + using (var connection1 = MakeConnection()) + using (var connection2 = MakeConnection()) + { + //open first connection + await (connection1.OpenAsync()); + await (VerifyCountOfEstablishedConnectionsIsAsync(allreadyEstablished + 1, "After first open")); + + //open second one + await (connection2.OpenAsync()); + await (VerifyCountOfEstablishedConnectionsIsAsync(allreadyEstablished + 2, "After second open")); + + //return connection1 to the pool + connection1.Close(); + await (VerifyCountOfEstablishedConnectionsIsAsync(allreadyEstablished + 2, "After first close")); + + //return connection2 to the pool + connection2.Close(); + await (VerifyCountOfEstablishedConnectionsIsAsync(allreadyEstablished + 2, "After second close")); + } + } + + private DbConnection MakeConnection() + { + var result = _driver.CreateConnection(); + result.ConnectionString = _connectionString; + return result; + } + + private async Task VerifyCountOfEstablishedConnectionsIsAsync(int expectedCount, string step, CancellationToken cancellationToken = default(CancellationToken)) + { + var physicalConnections = await (GetEstablishedConnectionsAsync(cancellationToken)); + Assert.That(physicalConnections, Is.EqualTo(expectedCount), step); + } + + private async Task GetEstablishedConnectionsAsync(CancellationToken cancellationToken = default(CancellationToken)) + { + using (var conn = _driver.CreateConnection()) + { + conn.ConnectionString = _connectionString; + await (conn.OpenAsync(cancellationToken)); + using (var cmd = conn.CreateCommand()) + { + cmd.CommandText = "select count(*) from mon$attachments where mon$attachment_id <> current_connection"; + return Convert.ToInt32(await (cmd.ExecuteScalarAsync(cancellationToken))); + } + } + } + + private DbCommand BuildSelectCaseCommand(SqlType paramType) + { + var sqlString = new SqlStringBuilder() + .Add("select (case when col = ") + .AddParameter() + .Add(" then ") + .AddParameter() + .Add(" else ") + .AddParameter() + .Add(" end) from table") + .ToSqlString(); + + return _driver.GenerateCommand(CommandType.Text, sqlString, new[] { paramType, paramType, paramType }); + } + + private DbCommand BuildSelectConcatCommand(SqlType paramType) + { + var sqlString = new SqlStringBuilder() + .Add("select col || ") + .AddParameter() + .Add(" || ") + .Add("col ") + .Add("from table") + .ToSqlString(); + + return _driver.GenerateCommand(CommandType.Text, sqlString, new[] { paramType }); + } + + private DbCommand BuildSelectAddCommand(SqlType paramType) + { + var sqlString = new SqlStringBuilder() + .Add("select col + ") + .AddParameter() + .Add(" from table") + .ToSqlString(); + + return _driver.GenerateCommand(CommandType.Text, sqlString, new[] { paramType }); + } + + private DbCommand BuildInsertWithParamsInSelectCommand(SqlType paramType) + { + var sqlString = new SqlStringBuilder() + .Add("insert into table1 (col1, col2) ") + .Add("select col1, ") + .AddParameter() + .Add(" from table2") + .ToSqlString(); + + return _driver.GenerateCommand(CommandType.Text, sqlString, new[] { paramType }); + } + + private DbCommand BuildInsertWithParamsInSelectCommandWithSelectInColumnName(SqlType paramType) + { + var sqlString = new SqlStringBuilder() + .Add("insert into table1 (col1_select_aaa) ") + .Add("values(") + .AddParameter() + .Add(") from table2") + .ToSqlString(); + + return _driver.GenerateCommand(CommandType.Text, sqlString, new[] { paramType }); + } + + private DbCommand BuildInsertWithParamsInSelectCommandWithWhereInColumnName(SqlType paramType) + { + var sqlString = new SqlStringBuilder() + .Add("insert into table1 (col1_where_aaa) ") + .Add("values(") + .AddParameter() + .Add(") from table2") + .ToSqlString(); + + return _driver.GenerateCommand(CommandType.Text, sqlString, new[] { paramType }); + } + } +} diff --git a/src/NHibernate.Test/Async/DriverTest/ObsoleteDriverFixture.cs b/src/NHibernate.Test/Async/DriverTest/ObsoleteDriverFixture.cs new file mode 100644 index 00000000000..09fa703e1da --- /dev/null +++ b/src/NHibernate.Test/Async/DriverTest/ObsoleteDriverFixture.cs @@ -0,0 +1,101 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by AsyncGenerator. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + + +using System; +using System.Collections; +using System.Linq.Dynamic.Core; +using NHibernate.Cfg; +using NHibernate.Connection; +using NHibernate.Dialect; +using NHibernate.DomainModel; +using NHibernate.Driver; +using NHibernate.Util; +using NUnit.Framework; + +namespace NHibernate.Test.DriverTest +{ + using System.Threading.Tasks; + [TestFixture, Obsolete] + public class ObsoleteDriverFixtureAsync : TestCase + { + protected override IList Mappings => new [] {"Simple.hbm.xml"}; + + protected override bool AppliesTo(Dialect.Dialect dialect) + { + switch (dialect) + { + case FirebirdDialect _: + case MsSql2000Dialect _: + case MsSqlCeDialect _: + case MySQLDialect _: + case PostgreSQLDialect _: + case SQLiteDialect _: + System.Type driverType = ReflectHelper.ClassForName(cfg.GetProperty(Cfg.Environment.ConnectionDriver)); + return !(driverType.IsOdbcDriver() || driverType.IsOleDbDriver()); + default: + return false; + } + } + + protected override void Configure(Configuration configuration) + { + base.Configure(configuration); + + System.Type driverType = ReflectHelper.ClassForName(cfg.GetProperty(Cfg.Environment.ConnectionDriver)); + if (driverType.IsOdbcDriver() || driverType.IsOleDbDriver()) + { + // ODBC and OLE DB drivers are not obsoleted, do not switch it. + return; + } + + var dialect = NHibernate.Dialect.Dialect.GetDialect(configuration.Properties); + System.Type driver; + switch (dialect) + { + case FirebirdDialect _: + driver = typeof(FirebirdClientDriver); + break; + case MsSql2008Dialect _: + driver = typeof(Sql2008ClientDriver); + break; + case MsSql2000Dialect _: + driver = typeof(SqlClientDriver); + break; + case MsSqlCeDialect _: + driver = typeof(SqlServerCeDriver); + break; + case MySQLDialect _: + driver = typeof(MySqlDataDriver); + break; + case PostgreSQLDialect _: + driver = typeof(NpgsqlDriver); + break; + case SQLiteDialect _: + driver = typeof(SQLite20Driver); + break; + default: + return; + } + configuration.SetProperty(Cfg.Environment.ConnectionDriver, driver.FullName); + } + + [Test] + public async Task CanUseObsoleteDriverAsync() + { + using (var s = OpenSession()) + using (var t = s.BeginTransaction()) + { + var count = s.Query().Count(); + Assert.That(count, Is.Zero); + await (t.CommitAsync()); + } + } + } +} diff --git a/src/NHibernate.Test/Async/DriverTest/OdbcDriverFixture.cs b/src/NHibernate.Test/Async/DriverTest/OdbcDriverFixture.cs index a0f0f8664f9..afecb1a49f3 100644 --- a/src/NHibernate.Test/Async/DriverTest/OdbcDriverFixture.cs +++ b/src/NHibernate.Test/Async/DriverTest/OdbcDriverFixture.cs @@ -8,10 +8,8 @@ //------------------------------------------------------------------------------ -using System; using System.Collections; using NHibernate.Dialect; -using NHibernate.Driver; using NHibernate.Engine; using NUnit.Framework; @@ -32,7 +30,7 @@ protected override bool AppliesTo(Dialect.Dialect dialect) protected override bool AppliesTo(ISessionFactoryImplementor factory) { - return factory.ConnectionProvider.Driver is OdbcDriver; + return factory.ConnectionProvider.Driver.IsOdbcDriver(); } protected override void OnTearDown() diff --git a/src/NHibernate.Test/Async/DriverTest/SqlClientDriverFixture.cs b/src/NHibernate.Test/Async/DriverTest/SqlServerDriverFixture.cs similarity index 97% rename from src/NHibernate.Test/Async/DriverTest/SqlClientDriverFixture.cs rename to src/NHibernate.Test/Async/DriverTest/SqlServerDriverFixture.cs index 62fe9232900..d98674b1552 100644 --- a/src/NHibernate.Test/Async/DriverTest/SqlClientDriverFixture.cs +++ b/src/NHibernate.Test/Async/DriverTest/SqlServerDriverFixture.cs @@ -12,7 +12,6 @@ using System.Collections; using System.Data; using NHibernate.Dialect; -using NHibernate.Driver; using NHibernate.Engine; using NHibernate.SqlTypes; using NUnit.Framework; @@ -23,7 +22,7 @@ namespace NHibernate.Test.DriverTest using System.Threading.Tasks; [TestFixture] - public class SqlClientDriverFixtureAsync : TestCase + public class SqlServerDriverFixtureAsync : TestCase { protected override string MappingsAssembly => "NHibernate.Test"; @@ -36,7 +35,7 @@ protected override bool AppliesTo(Dialect.Dialect dialect) protected override bool AppliesTo(ISessionFactoryImplementor factory) { - return factory.ConnectionProvider.Driver is SqlClientDriver; + return factory.ConnectionProvider.Driver.IsSqlClientDriver(); } protected override void OnTearDown() diff --git a/src/NHibernate.Test/Async/ExceptionsTest/SQLExceptionConversionTest.cs b/src/NHibernate.Test/Async/ExceptionsTest/SQLExceptionConversionTest.cs index fd65322ce8a..13e072c37f0 100644 --- a/src/NHibernate.Test/Async/ExceptionsTest/SQLExceptionConversionTest.cs +++ b/src/NHibernate.Test/Async/ExceptionsTest/SQLExceptionConversionTest.cs @@ -13,7 +13,6 @@ using System.Data; using System.Data.Common; using NHibernate.Dialect; -using NHibernate.Driver; using NHibernate.Engine; using NHibernate.Exceptions; using NHibernate.Util; @@ -43,7 +42,7 @@ protected override bool AppliesTo(Dialect.Dialect dialect) protected override bool AppliesTo(ISessionFactoryImplementor factory) { var driver = factory.ConnectionProvider.Driver; - return !(driver is OracleDataClientDriver) && !(driver is OracleManagedDataClientDriver) && !(driver is OracleLiteDataClientDriver) && !(driver is OdbcDriver) && !(driver is OleDbDriver); + return !(driver.IsOracleDataClientDriver()) && !(driver.IsOracleManagedDataClientDriver()) && !(driver.IsOracleLiteDataClientDriver()) && !(driver.IsOdbcDriver()) && !(driver.IsOleDbDriver()); } protected override void Configure(Cfg.Configuration configuration) diff --git a/src/NHibernate.Test/Async/Futures/FallbackFixture.cs b/src/NHibernate.Test/Async/Futures/FallbackFixture.cs index 80a2d1b6156..ddfde2275c8 100644 --- a/src/NHibernate.Test/Async/Futures/FallbackFixture.cs +++ b/src/NHibernate.Test/Async/Futures/FallbackFixture.cs @@ -8,6 +8,7 @@ //------------------------------------------------------------------------------ +using System; using System.Linq; using NHibernate.Cfg; using NHibernate.Connection; @@ -24,7 +25,7 @@ namespace NHibernate.Test.Futures using System.Threading; /// - /// I'm using a Driver which derives from SqlClientDriver to + /// I'm using a Driver which derives from SqlServer2000Driver to /// return false for the SupportsMultipleQueries property. This is purely to test the way NHibernate /// will behave when the driver that's being used does not support multiple queries... so even though /// the test is using MsSql, it's only relevant for databases that don't support multiple queries @@ -46,7 +47,7 @@ protected override void Configure(Configuration configuration) base.Configure(configuration); using (var cp = ConnectionProviderFactory.NewConnectionProvider(cfg.Properties)) { - if (cp.Driver is SqlClientDriver) + if (cp.Driver.IsSqlClientDriver()) { configuration.Properties[Environment.ConnectionDriver] = typeof(TestDriverThatDoesntSupportQueryBatching).AssemblyQualifiedName; diff --git a/src/NHibernate.Test/Async/Hql/Ast/LimitClauseFixture.cs b/src/NHibernate.Test/Async/Hql/Ast/LimitClauseFixture.cs index 90d885db753..f9ceb3a0c7e 100644 --- a/src/NHibernate.Test/Async/Hql/Ast/LimitClauseFixture.cs +++ b/src/NHibernate.Test/Async/Hql/Ast/LimitClauseFixture.cs @@ -10,7 +10,6 @@ using System.Linq; using NHibernate.Cfg; -using NHibernate.Driver; using NHibernate.Hql.Ast.ANTLR; using NHibernate.Util; using NUnit.Framework; @@ -25,7 +24,7 @@ protected override bool AppliesTo(Dialect.Dialect dialect) { return dialect.SupportsVariableLimit && !(Dialect is Dialect.MsSql2000Dialect && // don't know why, but these tests don't work on SQL Server using ODBC - typeof(OdbcDriver).IsAssignableFrom(ReflectHelper.ClassForName(cfg.GetProperty(Environment.ConnectionDriver)))); + ReflectHelper.ClassForName(cfg.GetProperty(Environment.ConnectionDriver)).IsOdbcDriver()); } protected override void OnSetUp() diff --git a/src/NHibernate.Test/Async/Insertordering/InsertOrderingFixture.cs b/src/NHibernate.Test/Async/Insertordering/InsertOrderingFixture.cs index 79382c114d1..6528d71d1cc 100644 --- a/src/NHibernate.Test/Async/Insertordering/InsertOrderingFixture.cs +++ b/src/NHibernate.Test/Async/Insertordering/InsertOrderingFixture.cs @@ -18,7 +18,6 @@ using NHibernate.AdoNet; using NHibernate.Cfg; using NHibernate.Dialect; -using NHibernate.Driver; using NHibernate.Engine; using NHibernate.SqlCommand; using NHibernate.SqlTypes; @@ -52,7 +51,7 @@ protected override bool AppliesTo(Dialect.Dialect dialect) protected override bool AppliesTo(ISessionFactoryImplementor factory) { // Custom batcher does not support oledb driver. - return factory.ConnectionProvider.Driver is SqlClientDriver; + return factory.ConnectionProvider.Driver.IsSqlClientDriver(); } protected override void Configure(Configuration configuration) diff --git a/src/NHibernate.Test/Async/Linq/ByMethod/GroupByTests.cs b/src/NHibernate.Test/Async/Linq/ByMethod/GroupByTests.cs index ca1c7c8985d..ac24728d7fb 100644 --- a/src/NHibernate.Test/Async/Linq/ByMethod/GroupByTests.cs +++ b/src/NHibernate.Test/Async/Linq/ByMethod/GroupByTests.cs @@ -15,7 +15,6 @@ using System.Text.RegularExpressions; using NHibernate.Dialect; using NHibernate.DomainModel.Northwind.Entities; -using NHibernate.Driver; using NHibernate.Linq; using NUnit.Framework; @@ -562,7 +561,7 @@ public async Task GroupByComputedValueAsync() { if (!TestDialect.SupportsComplexExpressionInGroupBy) Assert.Ignore(Dialect.GetType().Name + " does not support complex group by expressions"); - if (Sfi.ConnectionProvider.Driver is OdbcDriver) + if (Sfi.ConnectionProvider.Driver.IsOdbcDriver()) Assert.Ignore("SQL Server seems unable to match complex group by and select list arguments when running over ODBC."); var orderGroups = await (db.Orders.GroupBy(o => o.Customer.CustomerId == null ? 0 : 1).Select(g => new { Key = g.Key, Count = g.Count() }).ToListAsync()); @@ -574,7 +573,7 @@ public async Task GroupByComputedValueInAnonymousTypeAsync() { if (!TestDialect.SupportsComplexExpressionInGroupBy) Assert.Ignore(Dialect.GetType().Name + " does not support complex group by expressions"); - if (Sfi.ConnectionProvider.Driver is OdbcDriver) + if (Sfi.ConnectionProvider.Driver.IsOdbcDriver()) Assert.Ignore("SQL Server seems unable to match complex group by and select list arguments when running over ODBC."); var orderGroups = await (db.Orders.GroupBy(o => new { Key = o.Customer.CustomerId == null ? 0 : 1 }).Select(g => new { Key = g.Key, Count = g.Count() }).ToListAsync()); @@ -586,7 +585,7 @@ public async Task GroupByComputedValueInObjectArrayAsync() { if (!TestDialect.SupportsComplexExpressionInGroupBy) Assert.Ignore(Dialect.GetType().Name + " does not support complex group by expressions"); - if (Sfi.ConnectionProvider.Driver is OdbcDriver) + if (Sfi.ConnectionProvider.Driver.IsOdbcDriver()) Assert.Ignore("SQL Server seems unable to match complex group by and select list arguments when running over ODBC."); var orderGroups = await (db.Orders.GroupBy(o => new[] { o.Customer.CustomerId == null ? 0 : 1, }).Select(g => new { Key = g.Key, Count = g.Count() }).ToListAsync()); @@ -715,7 +714,7 @@ public async Task GroupByComputedValueWithJoinOnObjectAsync() { if (!TestDialect.SupportsComplexExpressionInGroupBy) Assert.Ignore(Dialect.GetType().Name + " does not support complex group by expressions"); - if (Sfi.ConnectionProvider.Driver is OdbcDriver) + if (Sfi.ConnectionProvider.Driver.IsOdbcDriver()) Assert.Ignore("SQL Server seems unable to match complex group by and select list arguments when running over ODBC."); var orderGroups = await (db.OrderLines.GroupBy(o => o.Order.Customer == null ? 0 : 1).Select(g => new { Key = g.Key, Count = g.Count() }).ToListAsync()); @@ -727,7 +726,7 @@ public async Task GroupByComputedValueWithJoinOnIdAsync() { if (!TestDialect.SupportsComplexExpressionInGroupBy) Assert.Ignore(Dialect.GetType().Name + " does not support complex group by expressions"); - if (Sfi.ConnectionProvider.Driver is OdbcDriver) + if (Sfi.ConnectionProvider.Driver.IsOdbcDriver()) Assert.Ignore("SQL Server seems unable to match complex group by and select list arguments when running over ODBC."); var orderGroups = await (db.OrderLines.GroupBy(o => o.Order.Customer.CustomerId == null ? 0 : 1).Select(g => new { Key = g.Key, Count = g.Count() }).ToListAsync()); @@ -739,7 +738,7 @@ public async Task GroupByComputedValueInAnonymousTypeWithJoinOnObjectAsync() { if (!TestDialect.SupportsComplexExpressionInGroupBy) Assert.Ignore(Dialect.GetType().Name + " does not support complex group by expressions"); - if (Sfi.ConnectionProvider.Driver is OdbcDriver) + if (Sfi.ConnectionProvider.Driver.IsOdbcDriver()) Assert.Ignore("SQL Server seems unable to match complex group by and select list arguments when running over ODBC."); var orderGroups = await (db.OrderLines.GroupBy(o => new { Key = o.Order.Customer == null ? 0 : 1 }).Select(g => new { Key = g.Key, Count = g.Count() }).ToListAsync()); @@ -751,7 +750,7 @@ public async Task GroupByComputedValueInAnonymousTypeWithJoinOnIdAsync() { if (!TestDialect.SupportsComplexExpressionInGroupBy) Assert.Ignore(Dialect.GetType().Name + " does not support complex group by expressions"); - if (Sfi.ConnectionProvider.Driver is OdbcDriver) + if (Sfi.ConnectionProvider.Driver.IsOdbcDriver()) Assert.Ignore("SQL Server seems unable to match complex group by and select list arguments when running over ODBC."); var orderGroups = await (db.OrderLines.GroupBy(o => new { Key = o.Order.Customer.CustomerId == null ? 0 : 1 }).Select(g => new { Key = g.Key, Count = g.Count() }).ToListAsync()); @@ -763,7 +762,7 @@ public async Task GroupByComputedValueInObjectArrayWithJoinOnObjectAsync() { if (!TestDialect.SupportsComplexExpressionInGroupBy) Assert.Ignore(Dialect.GetType().Name + " does not support complex group by expressions"); - if (Sfi.ConnectionProvider.Driver is OdbcDriver) + if (Sfi.ConnectionProvider.Driver.IsOdbcDriver()) Assert.Ignore("SQL Server seems unable to match complex group by and select list arguments when running over ODBC."); var orderGroups = await (db.OrderLines.GroupBy(o => new[] { o.Order.Customer == null ? 0 : 1 }).Select(g => new { Key = g.Key, Count = g.Count() }).ToListAsync()); @@ -775,7 +774,7 @@ public async Task GroupByComputedValueInObjectArrayWithJoinOnIdAsync() { if (!TestDialect.SupportsComplexExpressionInGroupBy) Assert.Ignore(Dialect.GetType().Name + " does not support complex group by expressions"); - if (Sfi.ConnectionProvider.Driver is OdbcDriver) + if (Sfi.ConnectionProvider.Driver.IsOdbcDriver()) Assert.Ignore("SQL Server seems unable to match complex group by and select list arguments when running over ODBC."); var orderGroups = await (db.OrderLines.GroupBy(o => new[] { o.Order.Customer.CustomerId == null ? 0 : 1 }).Select(g => new { Key = g.Key, Count = g.Count() }).ToListAsync()); @@ -787,7 +786,7 @@ public async Task GroupByComputedValueInObjectArrayWithJoinInRightSideOfCaseAsyn { if (!TestDialect.SupportsComplexExpressionInGroupBy) Assert.Ignore(Dialect.GetType().Name + " does not support complex group by expressions"); - if (Sfi.ConnectionProvider.Driver is OdbcDriver) + if (Sfi.ConnectionProvider.Driver.IsOdbcDriver()) Assert.Ignore("SQL Server seems unable to match complex group by and select list arguments when running over ODBC."); var orderGroups = await (db.OrderLines.GroupBy(o => new[] { o.Order.Customer.CustomerId == null ? "unknown" : o.Order.Customer.CompanyName }).Select(g => new { Key = g.Key, Count = g.Count() }).ToListAsync()); @@ -799,7 +798,7 @@ public async Task GroupByComputedValueFromNestedArraySelectAsync() { if (!TestDialect.SupportsComplexExpressionInGroupBy) Assert.Ignore(Dialect.GetType().Name + " does not support complex group by expressions"); - if (Sfi.ConnectionProvider.Driver is OdbcDriver) + if (Sfi.ConnectionProvider.Driver.IsOdbcDriver()) Assert.Ignore("SQL Server seems unable to match complex group by and select list arguments when running over ODBC."); var orderGroups = await (db.OrderLines.Select(o => new object[] { o }).GroupBy(x => new object[] { ((OrderLine)x[0]).Order.Customer == null ? 0 : 1 }).Select(g => new { Key = g.Key, Count = g.Count() }).ToListAsync()); @@ -811,7 +810,7 @@ public async Task GroupByComputedValueFromNestedObjectSelectAsync() { if (!TestDialect.SupportsComplexExpressionInGroupBy) Assert.Ignore(Dialect.GetType().Name + " does not support complex group by expressions"); - if (Sfi.ConnectionProvider.Driver is OdbcDriver) + if (Sfi.ConnectionProvider.Driver.IsOdbcDriver()) Assert.Ignore("SQL Server seems unable to match complex group by and select list arguments when running over ODBC."); var orderGroups = await (db.OrderLines.Select(o => new { OrderLine = (object)o }).GroupBy(x => new object[] { ((OrderLine)x.OrderLine).Order.Customer == null ? 0 : 1 }).Select(g => new { Key = g.Key, Count = g.Count() }).ToListAsync()); diff --git a/src/NHibernate.Test/Async/NHSpecificTest/Dates/DateTimeOffsetFixture.cs b/src/NHibernate.Test/Async/NHSpecificTest/Dates/DateTimeOffsetFixture.cs index 587100668c1..d0508910baa 100644 --- a/src/NHibernate.Test/Async/NHSpecificTest/Dates/DateTimeOffsetFixture.cs +++ b/src/NHibernate.Test/Async/NHSpecificTest/Dates/DateTimeOffsetFixture.cs @@ -14,7 +14,6 @@ using System.IO; using System.Runtime.Serialization.Formatters.Binary; using System.Xml.Serialization; -using NHibernate.Driver; using NHibernate.Type; using NUnit.Framework; @@ -33,7 +32,7 @@ protected override IList Mappings protected override bool AppliesTo(Engine.ISessionFactoryImplementor factory) { // Cannot handle DbType.DateTimeOffset via ODBC. - if (factory.ConnectionProvider.Driver is OdbcDriver) + if (factory.ConnectionProvider.Driver.IsOdbcDriver()) return false; return base.AppliesTo(factory); diff --git a/src/NHibernate.Test/Async/NHSpecificTest/Dates/DateTimeOffsetQueryFixture.cs b/src/NHibernate.Test/Async/NHSpecificTest/Dates/DateTimeOffsetQueryFixture.cs index 3af6e8995e8..f2ec239effe 100644 --- a/src/NHibernate.Test/Async/NHSpecificTest/Dates/DateTimeOffsetQueryFixture.cs +++ b/src/NHibernate.Test/Async/NHSpecificTest/Dates/DateTimeOffsetQueryFixture.cs @@ -12,7 +12,6 @@ using System.Collections; using System.Data; using System.Linq; -using NHibernate.Driver; using NHibernate.Type; using NUnit.Framework; using Environment = NHibernate.Cfg.Environment; @@ -32,7 +31,7 @@ protected override IList Mappings protected override bool AppliesTo(Engine.ISessionFactoryImplementor factory) { // Cannot handle DbType.DateTimeOffset via ODBC. - if (factory.ConnectionProvider.Driver is OdbcDriver) + if (factory.ConnectionProvider.Driver.IsOdbcDriver()) return false; return base.AppliesTo(factory); diff --git a/src/NHibernate.Test/Async/NHSpecificTest/NH1144/Fixture.cs b/src/NHibernate.Test/Async/NHSpecificTest/NH1144/Fixture.cs index 1e8dc255183..74ab0f13fc1 100644 --- a/src/NHibernate.Test/Async/NHSpecificTest/NH1144/Fixture.cs +++ b/src/NHibernate.Test/Async/NHSpecificTest/NH1144/Fixture.cs @@ -11,7 +11,6 @@ using log4net.Core; using NHibernate.AdoNet; using NHibernate.Cfg; -using NHibernate.Driver; using NHibernate.Util; using NUnit.Framework; @@ -37,7 +36,7 @@ protected override void Configure(Configuration configuration) [Test] public async Task CanSaveInSingleBatchAsync() { - if (!typeof(OracleDataClientDriver).IsAssignableFrom(ReflectHelper.ClassForName(cfg.GetProperty(Environment.ConnectionDriver)))) + if (!ReflectHelper.ClassForName(cfg.GetProperty(Environment.ConnectionDriver)).IsOracleDataClientDriver()) { Assert.Ignore("Only applicable for Oracle Data Client driver"); } diff --git a/src/NHibernate.Test/Async/NHSpecificTest/NH1507/Fixture.cs b/src/NHibernate.Test/Async/NHSpecificTest/NH1507/Fixture.cs index 48a864ef62c..196797ea10d 100644 --- a/src/NHibernate.Test/Async/NHSpecificTest/NH1507/Fixture.cs +++ b/src/NHibernate.Test/Async/NHSpecificTest/NH1507/Fixture.cs @@ -10,7 +10,6 @@ using System; using System.Collections; -using NHibernate.Driver; using NUnit.Framework; namespace NHibernate.Test.NHSpecificTest.NH1507 @@ -21,7 +20,7 @@ public class FixtureAsync : BugTestCase { protected override bool AppliesTo(Engine.ISessionFactoryImplementor factory) { - return !(factory.ConnectionProvider.Driver is OracleManagedDataClientDriver); + return !(factory.ConnectionProvider.Driver.IsOracleManagedDataClientDriver()); } protected override void OnSetUp() @@ -128,4 +127,4 @@ public async Task ImplicitJoinFailingTestAsync() } } } -} \ No newline at end of file +} diff --git a/src/NHibernate.Test/Async/NHSpecificTest/NH1553/MsSQL/SnapshotIsolationUpdateConflictTest.cs b/src/NHibernate.Test/Async/NHSpecificTest/NH1553/MsSQL/SnapshotIsolationUpdateConflictTest.cs index 2ce5e39ce00..b1f701416de 100644 --- a/src/NHibernate.Test/Async/NHSpecificTest/NH1553/MsSQL/SnapshotIsolationUpdateConflictTest.cs +++ b/src/NHibernate.Test/Async/NHSpecificTest/NH1553/MsSQL/SnapshotIsolationUpdateConflictTest.cs @@ -12,7 +12,6 @@ using System.Data; using NHibernate.Cfg; using NHibernate.Dialect; -using NHibernate.Driver; using NHibernate.Engine; using NUnit.Framework; using NUnit.Framework.Constraints; @@ -152,7 +151,7 @@ protected override bool AppliesTo(ISessionFactoryImplementor factory) { // SQLUpdateConflictToStaleStateExceptionConverter is specific to Sql client driver, and does not work // with Odbc (and likeley Oledb). - return factory.ConnectionProvider.Driver is SqlClientDriver; + return factory.ConnectionProvider.Driver.IsSqlClientDriver(); } private bool _isSnapshotIsolationAlreadyAllowed; diff --git a/src/NHibernate.Test/Async/NHSpecificTest/NH1756/Fixture.cs b/src/NHibernate.Test/Async/NHSpecificTest/NH1756/Fixture.cs index ae654b85b77..933c703d5a0 100644 --- a/src/NHibernate.Test/Async/NHSpecificTest/NH1756/Fixture.cs +++ b/src/NHibernate.Test/Async/NHSpecificTest/NH1756/Fixture.cs @@ -10,7 +10,6 @@ using System.Collections.Generic; using NHibernate.Dialect; -using NHibernate.Driver; using NHibernate.Engine; using NUnit.Framework; @@ -41,7 +40,7 @@ protected override bool AppliesTo(ISessionFactoryImplementor factory) // N'@P1 nvarchar(18),@P2 int,@P3 datetime2',N'modified test book',1,'2017-08-02 16:37:16.0630000' // Setting the scale to 2 still causes failure for two thirds of tries, due to 3ms/7ms being truncated in such case // with ODBC and SQL Server 2008+ Client, which is rejected by ODBC. - return !(factory.ConnectionProvider.Driver is OdbcDriver); + return !(factory.ConnectionProvider.Driver.IsOdbcDriver()); } [Test] diff --git a/src/NHibernate.Test/Async/NHSpecificTest/NH2020/Fixture.cs b/src/NHibernate.Test/Async/NHSpecificTest/NH2020/Fixture.cs index f3376f32a6d..378cc5fba14 100644 --- a/src/NHibernate.Test/Async/NHSpecificTest/NH2020/Fixture.cs +++ b/src/NHibernate.Test/Async/NHSpecificTest/NH2020/Fixture.cs @@ -10,7 +10,6 @@ using NUnit.Framework; using NHibernate.Dialect; -using NHibernate.Driver; using NHibernate.Exceptions; using NHibernate.Test.ExceptionsTest; using NHibernate.Engine; @@ -37,7 +36,7 @@ protected override bool AppliesTo(NHibernate.Dialect.Dialect dialect) protected override bool AppliesTo(ISessionFactoryImplementor factory) { // Use a SQL Server Client exception converter, cannot work for ODBC or OleDb - return factory.ConnectionProvider.Driver is SqlClientDriver; + return factory.ConnectionProvider.Driver.IsSqlClientDriver(); } protected override void OnTearDown() diff --git a/src/NHibernate.Test/Async/NHSpecificTest/NH2207/SampleTest.cs b/src/NHibernate.Test/Async/NHSpecificTest/NH2207/SampleTest.cs index dd26d362887..a27f4fc039f 100644 --- a/src/NHibernate.Test/Async/NHSpecificTest/NH2207/SampleTest.cs +++ b/src/NHibernate.Test/Async/NHSpecificTest/NH2207/SampleTest.cs @@ -11,7 +11,6 @@ using System; using System.Data; using NHibernate.Dialect; -using NHibernate.Driver; using NHibernate.Engine; using NUnit.Framework; @@ -29,7 +28,7 @@ protected override bool AppliesTo(Dialect.Dialect dialect) protected override bool AppliesTo(ISessionFactoryImplementor factory) { - return factory.ConnectionProvider.Driver is Sql2008ClientDriver; + return factory.ConnectionProvider.Driver.IsSql2008ClientDriver(); } [Test] diff --git a/src/NHibernate.Test/Async/NHSpecificTest/NH2296/Fixture.cs b/src/NHibernate.Test/Async/NHSpecificTest/NH2296/Fixture.cs index 28a2d60d9c5..8ee9d680433 100644 --- a/src/NHibernate.Test/Async/NHSpecificTest/NH2296/Fixture.cs +++ b/src/NHibernate.Test/Async/NHSpecificTest/NH2296/Fixture.cs @@ -9,7 +9,6 @@ using System.Linq; -using NHibernate.Driver; using NUnit.Framework; namespace NHibernate.Test.NHSpecificTest.NH2296 @@ -20,7 +19,7 @@ public class FixtureAsync : BugTestCase { protected override bool AppliesTo(Engine.ISessionFactoryImplementor factory) { - return !(factory.ConnectionProvider.Driver is OracleManagedDataClientDriver); + return !(factory.ConnectionProvider.Driver.IsOracleManagedDataClientDriver()); } protected override void OnSetUp() @@ -84,4 +83,4 @@ public async Task TestAsync() } } } -} \ No newline at end of file +} diff --git a/src/NHibernate.Test/Async/NHSpecificTest/NH2302/Fixture.cs b/src/NHibernate.Test/Async/NHSpecificTest/NH2302/Fixture.cs index df16c52023c..2ca311d4ae5 100644 --- a/src/NHibernate.Test/Async/NHSpecificTest/NH2302/Fixture.cs +++ b/src/NHibernate.Test/Async/NHSpecificTest/NH2302/Fixture.cs @@ -10,7 +10,6 @@ using System.Data; using NHibernate.Dialect; -using NHibernate.Driver; using NHibernate.Mapping; using NUnit.Framework; @@ -49,7 +48,7 @@ protected override void OnTearDown() [Test] public async Task StringHugeLengthAsync() { - if (Sfi.ConnectionProvider.Driver is OdbcDriver || Dialect is MsSqlCeDialect) + if (Sfi.ConnectionProvider.Driver.IsOdbcDriver() || Dialect is MsSqlCeDialect) Assert.Ignore("NH-4065, not fixed for Odbc and MsSqlCe"); int id; diff --git a/src/NHibernate.Test/Async/NHSpecificTest/NH2420/Fixture.cs b/src/NHibernate.Test/Async/NHSpecificTest/NH2420/Fixture.cs index 0f71ee82087..132a84ec8cf 100644 --- a/src/NHibernate.Test/Async/NHSpecificTest/NH2420/Fixture.cs +++ b/src/NHibernate.Test/Async/NHSpecificTest/NH2420/Fixture.cs @@ -14,7 +14,6 @@ using System.Configuration; using System.Transactions; using NHibernate.Dialect; -using NHibernate.Driver; using NHibernate.Engine; using NUnit.Framework; @@ -73,7 +72,7 @@ public async Task ShouldBeAbleToReleaseSuppliedConnectionAfterDistributedTransac new DummyEnlistment(), EnlistmentOptions.None); - if (Sfi.ConnectionProvider.Driver.GetType() == typeof(OdbcDriver)) + if (Sfi.ConnectionProvider.Driver.GetType().IsOdbcDriver()) connection = new OdbcConnection(connectionString); else connection = new SqlConnection(connectionString); diff --git a/src/NHibernate.Test/Async/NHSpecificTest/NH2660And2661/Test.cs b/src/NHibernate.Test/Async/NHSpecificTest/NH2660And2661/Test.cs index d13589002f3..8cc9f87f061 100644 --- a/src/NHibernate.Test/Async/NHSpecificTest/NH2660And2661/Test.cs +++ b/src/NHibernate.Test/Async/NHSpecificTest/NH2660And2661/Test.cs @@ -50,7 +50,7 @@ protected override void Configure(Configuration configuration) { // to be sure we are using the new drive base.Configure(configuration); - configuration.DataBaseIntegration(x=> x.Driver()); + configuration.DataBaseIntegration(x=> x.Driver()); } [Test] diff --git a/src/NHibernate.Test/Async/NHSpecificTest/NH2846/Fixture.cs b/src/NHibernate.Test/Async/NHSpecificTest/NH2846/Fixture.cs index 71a6dd7fb6d..f09fd96c407 100644 --- a/src/NHibernate.Test/Async/NHSpecificTest/NH2846/Fixture.cs +++ b/src/NHibernate.Test/Async/NHSpecificTest/NH2846/Fixture.cs @@ -9,7 +9,6 @@ using System.Linq; -using NHibernate.Driver; using NHibernate.Linq; using NUnit.Framework; @@ -21,7 +20,7 @@ public class FixtureAsync : BugTestCase { protected override bool AppliesTo(Engine.ISessionFactoryImplementor factory) { - return !(factory.ConnectionProvider.Driver is OracleManagedDataClientDriver); + return !(factory.ConnectionProvider.Driver.IsOracleManagedDataClientDriver()); } protected override void OnSetUp() diff --git a/src/NHibernate.Test/Async/NHSpecificTest/NH2852/Fixture.cs b/src/NHibernate.Test/Async/NHSpecificTest/NH2852/Fixture.cs index 4bd4d82cabe..4b92853bb40 100644 --- a/src/NHibernate.Test/Async/NHSpecificTest/NH2852/Fixture.cs +++ b/src/NHibernate.Test/Async/NHSpecificTest/NH2852/Fixture.cs @@ -9,7 +9,6 @@ using System.Linq; -using NHibernate.Driver; using NHibernate.Linq; using NUnit.Framework; @@ -21,7 +20,7 @@ public class FixtureAsync : BugTestCase { protected override bool AppliesTo(Engine.ISessionFactoryImplementor factory) { - return !(factory.ConnectionProvider.Driver is OracleManagedDataClientDriver); + return !(factory.ConnectionProvider.Driver.IsOracleManagedDataClientDriver()); } protected override void OnSetUp() @@ -92,4 +91,4 @@ public async Task AlsoFailsAsync() } } } -} \ No newline at end of file +} diff --git a/src/NHibernate.Test/Async/NHSpecificTest/NH3023/DeadlockConnectionPoolIssueTest.cs b/src/NHibernate.Test/Async/NHSpecificTest/NH3023/DeadlockConnectionPoolIssueTest.cs index 052557dc4c0..f569b887c95 100644 --- a/src/NHibernate.Test/Async/NHSpecificTest/NH3023/DeadlockConnectionPoolIssueTest.cs +++ b/src/NHibernate.Test/Async/NHSpecificTest/NH3023/DeadlockConnectionPoolIssueTest.cs @@ -20,7 +20,6 @@ using log4net.Repository.Hierarchy; using NHibernate.Cfg; using NHibernate.Dialect; -using NHibernate.Driver; using NHibernate.Engine; using NUnit.Framework; @@ -43,7 +42,7 @@ protected override void Configure(Configuration configuration) // Uses directly SqlConnection. protected override bool AppliesTo(ISessionFactoryImplementor factory) => - factory.ConnectionProvider.Driver is SqlClientDriver && + factory.ConnectionProvider.Driver.IsSqlClientDriver() && factory.ConnectionProvider.Driver.SupportsSystemTransactions; protected override bool AppliesTo(Dialect.Dialect dialect) => diff --git a/src/NHibernate.Test/Async/NHSpecificTest/NH3121/Fixture.cs b/src/NHibernate.Test/Async/NHSpecificTest/NH3121/Fixture.cs index 525c4b3d6c2..d6d708231e5 100644 --- a/src/NHibernate.Test/Async/NHSpecificTest/NH3121/Fixture.cs +++ b/src/NHibernate.Test/Async/NHSpecificTest/NH3121/Fixture.cs @@ -13,7 +13,6 @@ using System.Linq; using System.Reflection; using NHibernate.Dialect; -using NHibernate.Driver; using NUnit.Framework; namespace NHibernate.Test.NHSpecificTest.NH3121 @@ -36,10 +35,10 @@ protected override bool AppliesTo(Dialect.Dialect dialect) [Test] public void ShouldThrowWhenByteArrayTooLongAsync() { - // For SQL Server only the SqlClientDriver sets parameter lengths + // For SQL Server only the SqlServer2000Driver sets parameter lengths // even when there is no length specified in the mapping. The ODBC // driver won't cause the truncation issue and hence not the exception. - if (!(Sfi.ConnectionProvider.Driver is SqlClientDriver)) + if (!(Sfi.ConnectionProvider.Driver.IsSqlClientDriver())) Assert.Ignore("Test limited to drivers that sets parameter length even with no length specified in the mapping."); const int reportSize = 17158; diff --git a/src/NHibernate.Test/Async/NHSpecificTest/NH3142/ChildrenTest.cs b/src/NHibernate.Test/Async/NHSpecificTest/NH3142/ChildrenTest.cs index c5f420db6de..52f9f3fd726 100644 --- a/src/NHibernate.Test/Async/NHSpecificTest/NH3142/ChildrenTest.cs +++ b/src/NHibernate.Test/Async/NHSpecificTest/NH3142/ChildrenTest.cs @@ -11,7 +11,6 @@ using System; using System.Collections; using System.Collections.Generic; -using NHibernate.Driver; using NUnit.Framework; namespace NHibernate.Test.NHSpecificTest.NH3142 @@ -22,7 +21,7 @@ public class ChildrenTestAsync : BugTestCase { protected override bool AppliesTo(Engine.ISessionFactoryImplementor factory) { - return !(factory.ConnectionProvider.Driver is OracleManagedDataClientDriver); + return !(factory.ConnectionProvider.Driver.IsOracleManagedDataClientDriver()); } protected override void OnSetUp() diff --git a/src/NHibernate.Test/Async/NHSpecificTest/NH3202/Fixture.cs b/src/NHibernate.Test/Async/NHSpecificTest/NH3202/Fixture.cs index 61a8bf45526..8793de14f64 100644 --- a/src/NHibernate.Test/Async/NHSpecificTest/NH3202/Fixture.cs +++ b/src/NHibernate.Test/Async/NHSpecificTest/NH3202/Fixture.cs @@ -27,7 +27,7 @@ protected override void Configure(Configuration configuration) if (!(Dialect is MsSql2008Dialect)) Assert.Ignore("Test is for MS SQL Server dialect only (custom dialect)."); - if (!typeof(SqlClientDriver).IsAssignableFrom(ReflectHelper.ClassForName(cfg.GetProperty(Environment.ConnectionDriver)))) + if (!ReflectHelper.ClassForName(cfg.GetProperty(Environment.ConnectionDriver)).IsSqlClientDriver()) Assert.Ignore("Test is for MS SQL Server driver only (custom driver is used)."); cfg.SetProperty(Environment.Dialect, typeof(OffsetStartsAtOneTestDialect).AssemblyQualifiedName); diff --git a/src/NHibernate.Test/Async/NHSpecificTest/NH3202/FixtureObsolete.cs b/src/NHibernate.Test/Async/NHSpecificTest/NH3202/FixtureObsolete.cs new file mode 100644 index 00000000000..26ae06fe297 --- /dev/null +++ b/src/NHibernate.Test/Async/NHSpecificTest/NH3202/FixtureObsolete.cs @@ -0,0 +1,114 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by AsyncGenerator. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + + +using System; +using System.Data.Common; +using System.Text.RegularExpressions; +using NHibernate.Cfg; +using NHibernate.Dialect; +using NHibernate.Driver; +using NHibernate.Util; +using NUnit.Framework; +using Environment = NHibernate.Cfg.Environment; + +namespace NHibernate.Test.NHSpecificTest.NH3202 +{ + using System.Threading.Tasks; + [TestFixture] + [Obsolete("Uses old driver")] + public class FixtureObsoleteAsync : BugTestCase + { + protected override void Configure(Configuration configuration) + { + if (!(Dialect is MsSql2008Dialect)) + Assert.Ignore("Test is for MS SQL Server dialect only (custom dialect)."); + + if (!ReflectHelper.ClassForName(cfg.GetProperty(Environment.ConnectionDriver)).IsSqlClientDriver()) + Assert.Ignore("Test is for MS SQL Server driver only (custom driver is used)."); + + cfg.SetProperty(Environment.Dialect, typeof(OffsetStartsAtOneTestDialect).AssemblyQualifiedName); + cfg.SetProperty(Environment.ConnectionDriver, typeof(OffsetTestObsoleteDriver).AssemblyQualifiedName); + } + + private OffsetStartsAtOneTestDialect OffsetStartsAtOneTestDialect + { + get { return (OffsetStartsAtOneTestDialect)Sfi.Dialect; } + } + + private OffsetTestObsoleteDriver CustomDriver + { + get { return (OffsetTestObsoleteDriver)Sfi.ConnectionProvider.Driver; } + } + + protected override void OnSetUp() + { + CustomDriver.OffsetStartsAtOneTestDialect = OffsetStartsAtOneTestDialect; + + base.OnSetUp(); + + using (var session = OpenSession()) + using (var transaction = session.BeginTransaction()) + { + session.Save(new SequencedItem(1)); + session.Save(new SequencedItem(2)); + session.Save(new SequencedItem(3)); + + session.Flush(); + transaction.Commit(); + } + } + + protected override void OnTearDown() + { + using (ISession s = OpenSession()) + using (ITransaction t = s.BeginTransaction()) + { + s.Delete("from SequencedItem"); + t.Commit(); + } + base.OnTearDown(); + } + + + [Test] + public async Task OffsetNotStartingAtOneSetsParameterToSkipValueAsync() + { + OffsetStartsAtOneTestDialect.ForceOffsetStartsAtOne = false; + + using (var session = OpenSession()) + { + var item2 = + await (session.QueryOver() + .OrderBy(i => i.I).Asc + .Take(1).Skip(2) + .SingleOrDefaultAsync()); + + Assert.That(CustomDriver.OffsetParameterValueFromCommand, Is.EqualTo(2)); + } + } + + [Test] + public async Task OffsetStartingAtOneSetsParameterToSkipValuePlusOneAsync() + { + OffsetStartsAtOneTestDialect.ForceOffsetStartsAtOne = true; + + using (var session = OpenSession()) + { + var item2 = + await (session.QueryOver() + .OrderBy(i => i.I).Asc + .Take(1).Skip(2) + .SingleOrDefaultAsync()); + + Assert.That(CustomDriver.OffsetParameterValueFromCommand, Is.EqualTo(3)); + } + } + } +} diff --git a/src/NHibernate.Test/Async/NHSpecificTest/NH3252/Fixture.cs b/src/NHibernate.Test/Async/NHSpecificTest/NH3252/Fixture.cs index 3f2dd8084a8..c3c0021e44c 100644 --- a/src/NHibernate.Test/Async/NHSpecificTest/NH3252/Fixture.cs +++ b/src/NHibernate.Test/Async/NHSpecificTest/NH3252/Fixture.cs @@ -10,7 +10,6 @@ using System; using System.Linq; -using NHibernate.Driver; using NHibernate.Engine; using NHibernate.Linq; using NUnit.Framework; @@ -23,7 +22,7 @@ public class FixtureAsync : BugTestCase { protected override bool AppliesTo(ISessionFactoryImplementor factory) { - return factory.ConnectionProvider.Driver is SqlClientDriver; + return factory.ConnectionProvider.Driver.IsSqlClientDriver(); } [Test] diff --git a/src/NHibernate.Test/Async/NHSpecificTest/NH3518/XmlColumnTest.cs b/src/NHibernate.Test/Async/NHSpecificTest/NH3518/XmlColumnTest.cs index 31b08659374..52b1ff0bff1 100644 --- a/src/NHibernate.Test/Async/NHSpecificTest/NH3518/XmlColumnTest.cs +++ b/src/NHibernate.Test/Async/NHSpecificTest/NH3518/XmlColumnTest.cs @@ -11,7 +11,6 @@ using System.Xml; using NHibernate.Cfg; using NHibernate.Dialect; -using NHibernate.Driver; using NHibernate.Engine; using NUnit.Framework; @@ -38,7 +37,7 @@ protected override bool AppliesTo(Dialect.Dialect dialect) protected override bool AppliesTo(ISessionFactoryImplementor factory) { - return factory.ConnectionProvider.Driver is SqlClientDriver; + return factory.ConnectionProvider.Driver.IsSqlClientDriver(); } protected override void Configure(Configuration configuration) diff --git a/src/NHibernate.Test/Async/NHSpecificTest/NH3620/Fixture.cs b/src/NHibernate.Test/Async/NHSpecificTest/NH3620/Fixture.cs index 076371afdfa..572b9668a45 100644 --- a/src/NHibernate.Test/Async/NHSpecificTest/NH3620/Fixture.cs +++ b/src/NHibernate.Test/Async/NHSpecificTest/NH3620/Fixture.cs @@ -9,7 +9,6 @@ using System; -using NHibernate.Driver; using NUnit.Framework; namespace NHibernate.Test.NHSpecificTest.NH3620 { @@ -17,7 +16,7 @@ namespace NHibernate.Test.NHSpecificTest.NH3620 { [TestFixture] public class FixtureAsync : BugTestCase { protected override bool AppliesTo(Engine.ISessionFactoryImplementor factory) { - return (factory.ConnectionProvider.Driver is OracleManagedDataClientDriver); + return (factory.ConnectionProvider.Driver.IsOracleManagedDataClientDriver()); } protected override void OnTearDown() { @@ -52,4 +51,4 @@ private void CleanupData() { } } } -} \ No newline at end of file +} diff --git a/src/NHibernate.Test/Async/NHSpecificTest/NH3844/Fixture.cs b/src/NHibernate.Test/Async/NHSpecificTest/NH3844/Fixture.cs index 006536ab127..461c718c0d0 100644 --- a/src/NHibernate.Test/Async/NHSpecificTest/NH3844/Fixture.cs +++ b/src/NHibernate.Test/Async/NHSpecificTest/NH3844/Fixture.cs @@ -9,7 +9,6 @@ using System.Linq; -using NHibernate.Driver; using NHibernate.Engine; using NHibernate.Linq; using NUnit.Framework; @@ -28,7 +27,7 @@ protected override bool AppliesTo(Dialect.Dialect dialect) protected override bool AppliesTo(ISessionFactoryImplementor factory) { // SQL Server seems unable to match complex group by and select list arguments when running over ODBC."; - return !(factory.ConnectionProvider.Driver is OdbcDriver); + return !(factory.ConnectionProvider.Driver.IsOdbcDriver()); } protected override void OnSetUp() diff --git a/src/NHibernate.Test/Async/NHSpecificTest/NH3850/Fixture.cs b/src/NHibernate.Test/Async/NHSpecificTest/NH3850/Fixture.cs index c0ee2b089dd..e95b1dd4740 100644 --- a/src/NHibernate.Test/Async/NHSpecificTest/NH3850/Fixture.cs +++ b/src/NHibernate.Test/Async/NHSpecificTest/NH3850/Fixture.cs @@ -15,7 +15,6 @@ using System.Linq; using System.Reflection; using System.Text; -using NHibernate.Driver; using NHibernate.Linq; using NHibernate.SqlTypes; using NHibernate.Util; @@ -42,7 +41,7 @@ protected override bool AppliesTo(Dialect.Dialect dialect) protected override bool AppliesTo(Engine.ISessionFactoryImplementor factory) { // Cannot handle DbType.DateTimeOffset via ODBC. - return !(factory.ConnectionProvider.Driver is OdbcDriver); + return !(factory.ConnectionProvider.Driver.IsOdbcDriver()); } protected override void OnSetUp() diff --git a/src/NHibernate.Test/Async/NHSpecificTest/NH3912/ReusableBatcherFixture.cs b/src/NHibernate.Test/Async/NHSpecificTest/NH3912/ReusableBatcherFixture.cs index d5bbb05a2be..11323f53134 100644 --- a/src/NHibernate.Test/Async/NHSpecificTest/NH3912/ReusableBatcherFixture.cs +++ b/src/NHibernate.Test/Async/NHSpecificTest/NH3912/ReusableBatcherFixture.cs @@ -13,7 +13,6 @@ using NHibernate.AdoNet; using NHibernate.Cfg; using NHibernate.Cfg.MappingSchema; -using NHibernate.Driver; using NHibernate.Engine; using NHibernate.Linq; using NHibernate.Mapping.ByCode; @@ -28,9 +27,9 @@ public class ReusableBatcherFixtureAsync : TestCaseMappingByCode protected override bool AppliesTo(ISessionFactoryImplementor factory) { var driver = factory.ConnectionProvider.Driver; - return driver is OracleDataClientDriver || - driver is OracleLiteDataClientDriver || - driver is OracleManagedDataClientDriver; + return driver.IsOracleDataClientDriver() || + driver.IsOracleLiteDataClientDriver() || + driver.IsOracleManagedDataClientDriver(); } protected override HbmMapping GetMappings() diff --git a/src/NHibernate.Test/Async/NHSpecificTest/SqlConverterAndMultiQuery/Fixture.cs b/src/NHibernate.Test/Async/NHSpecificTest/SqlConverterAndMultiQuery/Fixture.cs index fc8c339848e..86c87c2eb22 100644 --- a/src/NHibernate.Test/Async/NHSpecificTest/SqlConverterAndMultiQuery/Fixture.cs +++ b/src/NHibernate.Test/Async/NHSpecificTest/SqlConverterAndMultiQuery/Fixture.cs @@ -9,7 +9,6 @@ using NHibernate.Cfg; -using NHibernate.Driver; using NHibernate.Engine; using NUnit.Framework; @@ -32,7 +31,7 @@ protected override bool AppliesTo(ISessionFactoryImplementor factory) // tend to (validly) send InvalidOperationException during prepare phase due to the closed // connection, which get not converted. For testing other case, maybe a failure caused by a // schema mismatch (like done in transaction tests) would be better. - return factory.ConnectionProvider.Driver is SqlClientDriver; + return factory.ConnectionProvider.Driver.IsSqlClientDriver(); } [Test] diff --git a/src/NHibernate.Test/Async/Pagination/CustomDialectFixture.cs b/src/NHibernate.Test/Async/Pagination/CustomDialectFixture.cs index 49bd4e48bfb..c47813308f6 100644 --- a/src/NHibernate.Test/Async/Pagination/CustomDialectFixture.cs +++ b/src/NHibernate.Test/Async/Pagination/CustomDialectFixture.cs @@ -13,7 +13,6 @@ using NHibernate.Cfg; using NHibernate.Criterion; using NHibernate.Dialect; -using NHibernate.Driver; using NHibernate.Util; using NUnit.Framework; using Environment = NHibernate.Cfg.Environment; @@ -40,7 +39,7 @@ protected override void Configure(Configuration configuration) if (!(Dialect is MsSql2005Dialect)) Assert.Ignore("Test is for SQL dialect only"); var driverClass = ReflectHelper.ClassForName(cfg.GetProperty(Environment.ConnectionDriver)); - if (!typeof(SqlClientDriver).IsAssignableFrom(driverClass)) + if (!driverClass.IsSqlClientDriver()) Assert.Ignore("Test is compatible only with Sql Server Client driver connection strings"); cfg.SetProperty(Environment.Dialect, typeof(CustomMsSqlDialect).AssemblyQualifiedName); @@ -134,4 +133,4 @@ public async Task LimitFirstMultiCriteriaAsync() } } } -} \ No newline at end of file +} diff --git a/src/NHibernate.Test/Async/SqlTest/Custom/Oracle/OracleCustomSQLFixture.cs b/src/NHibernate.Test/Async/SqlTest/Custom/Oracle/OracleCustomSQLFixture.cs index c8c2ec8e31b..759606691fa 100644 --- a/src/NHibernate.Test/Async/SqlTest/Custom/Oracle/OracleCustomSQLFixture.cs +++ b/src/NHibernate.Test/Async/SqlTest/Custom/Oracle/OracleCustomSQLFixture.cs @@ -25,7 +25,7 @@ protected override IList Mappings protected override bool AppliesTo(NHibernate.Engine.ISessionFactoryImplementor factory) { - return factory.ConnectionProvider.Driver is Driver.OracleDataClientDriver; + return factory.ConnectionProvider.Driver.IsOracleDataClientDriver(); } protected override bool AppliesTo(Dialect.Dialect dialect) @@ -68,4 +68,4 @@ public async Task RefCursorOutStoredProcedureAsync() } } -} \ No newline at end of file +} diff --git a/src/NHibernate.Test/Async/SqlTest/Identity/MsSQL/MSSQLIdentityInsertWithStoredProcsTest.cs b/src/NHibernate.Test/Async/SqlTest/Identity/MsSQL/MSSQLIdentityInsertWithStoredProcsTest.cs index 82c57049d41..609f4d42242 100644 --- a/src/NHibernate.Test/Async/SqlTest/Identity/MsSQL/MSSQLIdentityInsertWithStoredProcsTest.cs +++ b/src/NHibernate.Test/Async/SqlTest/Identity/MsSQL/MSSQLIdentityInsertWithStoredProcsTest.cs @@ -10,7 +10,6 @@ using System.Collections; using NHibernate.Dialect; -using NHibernate.Driver; using NHibernate.Engine; using NUnit.Framework; @@ -28,7 +27,7 @@ protected override bool AppliesTo(Dialect.Dialect dialect) protected override bool AppliesTo(ISessionFactoryImplementor factory) { // Tested resulting SQL depends on driver. - return factory.ConnectionProvider.Driver is SqlClientDriver; + return factory.ConnectionProvider.Driver.IsSqlClientDriver(); } protected override string GetExpectedInsertOrgLogStatement(string orgName) diff --git a/src/NHibernate.Test/Async/SystemTransactions/SystemTransactionFixture.cs b/src/NHibernate.Test/Async/SystemTransactions/SystemTransactionFixture.cs index c9dc337df13..cf17f86b268 100644 --- a/src/NHibernate.Test/Async/SystemTransactions/SystemTransactionFixture.cs +++ b/src/NHibernate.Test/Async/SystemTransactions/SystemTransactionFixture.cs @@ -14,11 +14,10 @@ using System.Threading; using System.Transactions; using NHibernate.Cfg; -using NHibernate.Driver; using NHibernate.Engine; -using NHibernate.Linq; using NHibernate.Test.TransactionTest; using NUnit.Framework; +using NHibernate.Linq; namespace NHibernate.Test.SystemTransactions { @@ -190,7 +189,7 @@ public async Task CanUseSessionWithManyScopesAsync(bool explicitFlush) // ODBC with SQL-Server always causes scopes to go distributed, which causes their transaction completion to run // asynchronously. But ODBC enlistment also check the previous transaction in a way that do not guard against it // being concurrently disposed of. See https://github.com/nhibernate/nhibernate-core/pull/1505 for more details. - Assume.That(!(Sfi.ConnectionProvider.Driver is OdbcDriver), + Assume.That(!(Sfi.ConnectionProvider.Driver.IsOdbcDriver()), "ODBC sometimes fails on second scope by checking the previous transaction status, which may yield an object disposed exception"); using (var s = WithOptions().ConnectionReleaseMode(ConnectionReleaseMode.OnClose).OpenSession()) diff --git a/src/NHibernate.Test/Async/Tools/hbm2ddl/SchemaMetadataUpdaterTest/SchemaMetadataUpdaterFixture.cs b/src/NHibernate.Test/Async/Tools/hbm2ddl/SchemaMetadataUpdaterTest/SchemaMetadataUpdaterFixture.cs index 9e8f4dcf332..d9b9c86f62b 100644 --- a/src/NHibernate.Test/Async/Tools/hbm2ddl/SchemaMetadataUpdaterTest/SchemaMetadataUpdaterFixture.cs +++ b/src/NHibernate.Test/Async/Tools/hbm2ddl/SchemaMetadataUpdaterTest/SchemaMetadataUpdaterFixture.cs @@ -12,7 +12,6 @@ using System.Collections.Generic; using System.Linq; using NHibernate.Dialect; -using NHibernate.Driver; using NHibernate.Engine; using NHibernate.Mapping; using NHibernate.Tool.hbm2ddl; @@ -116,7 +115,7 @@ public async Task EnsureReservedWordsHardCodedInDialectAsync() } } - if (sf.ConnectionProvider.Driver is OdbcDriver) + if (sf.ConnectionProvider.Driver.IsOdbcDriver()) { Assert.Inconclusive("ODBC has excess keywords reserved"); } @@ -252,7 +251,7 @@ public async Task WhenConfiguredOnlyExplicitAutoQuoteAsync() var configuration = TestConfigurationHelper.GetDefaultConfiguration(); var driverClass = ReflectHelper.ClassForName(configuration.GetProperty(Environment.ConnectionDriver)); // Test uses the default dialect driver, which will not accept Odbc or OleDb connection strings. - if (typeof(OdbcDriver).IsAssignableFrom(driverClass) || typeof(OleDbDriver).IsAssignableFrom(driverClass)) + if (driverClass.IsOdbcDriver() || driverClass.IsOleDbDriver()) Assert.Ignore("Test is not compatible with OleDb or ODBC driver connection strings"); var configuredDialect = Dialect.Dialect.GetDialect(); if(!configuredDialect.DefaultProperties.ContainsKey(Environment.ConnectionDriver)) diff --git a/src/NHibernate.Test/Async/Tools/hbm2ddl/SchemaUpdate/MigrationFixture.cs b/src/NHibernate.Test/Async/Tools/hbm2ddl/SchemaUpdate/MigrationFixture.cs index 6dee59c9771..9b5f2960157 100644 --- a/src/NHibernate.Test/Async/Tools/hbm2ddl/SchemaUpdate/MigrationFixture.cs +++ b/src/NHibernate.Test/Async/Tools/hbm2ddl/SchemaUpdate/MigrationFixture.cs @@ -12,7 +12,6 @@ using System.IO; using System.Reflection; using NHibernate.Cfg; -using NHibernate.Driver; using NHibernate.Tool.hbm2ddl; using NHibernate.Util; using NUnit.Framework; @@ -31,7 +30,7 @@ public class MigrationFixtureAsync var driverClass = ReflectHelper.ClassForName(v1cfg.GetProperty(Environment.ConnectionDriver)); // Odbc is not supported by schema update: System.Data.Odbc.OdbcConnection.GetSchema("ForeignKeys") fails with an ArgumentException: ForeignKeys is undefined. // It seems it would require its own DataBaseSchema, but this is bound to the dialect, not the driver. - if (typeof(OdbcDriver).IsAssignableFrom(driverClass)) + if (driverClass.IsOdbcDriver()) Assert.Ignore("Test is not compatible with ODBC"); using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resource1)) @@ -91,4 +90,4 @@ public Task SimpleColumnReplaceAsync() } } } -} \ No newline at end of file +} diff --git a/src/NHibernate.Test/Async/TypesTest/DateTime2TypeFixture.cs b/src/NHibernate.Test/Async/TypesTest/DateTime2TypeFixture.cs index e30eaa872aa..6751cca00c4 100644 --- a/src/NHibernate.Test/Async/TypesTest/DateTime2TypeFixture.cs +++ b/src/NHibernate.Test/Async/TypesTest/DateTime2TypeFixture.cs @@ -9,7 +9,6 @@ using System; -using NHibernate.Driver; using NHibernate.SqlTypes; using NHibernate.Type; using NUnit.Framework; @@ -29,7 +28,7 @@ protected override bool AppliesTo(Dialect.Dialect dialect) => protected override bool AppliesTo(Engine.ISessionFactoryImplementor factory) => // Cannot handle DbType.DateTime2 via .Net ODBC. - !(factory.ConnectionProvider.Driver is OdbcDriver); + !(factory.ConnectionProvider.Driver.IsOdbcDriver()); protected override string TypeName => "DateTime2"; protected override AbstractDateTimeType Type => NHibernateUtil.DateTime2; @@ -44,7 +43,7 @@ protected override bool AppliesTo(Dialect.Dialect dialect) => protected override bool AppliesTo(Engine.ISessionFactoryImplementor factory) => // Cannot handle DbType.DateTime2 via .Net ODBC. - !(factory.ConnectionProvider.Driver is OdbcDriver); + !(factory.ConnectionProvider.Driver.IsOdbcDriver()); protected override string TypeName => "DateTime2WithScale"; protected override AbstractDateTimeType Type => (AbstractDateTimeType)TypeFactory.GetDateTime2Type(3); diff --git a/src/NHibernate.Test/Async/TypesTest/DateTimeOffsetTypeFixture.cs b/src/NHibernate.Test/Async/TypesTest/DateTimeOffsetTypeFixture.cs index a6ef854fad2..bab0c914f73 100644 --- a/src/NHibernate.Test/Async/TypesTest/DateTimeOffsetTypeFixture.cs +++ b/src/NHibernate.Test/Async/TypesTest/DateTimeOffsetTypeFixture.cs @@ -12,7 +12,6 @@ using System.Data; using System.Linq; using NHibernate.Cfg; -using NHibernate.Driver; using NHibernate.SqlTypes; using NHibernate.Tool.hbm2ddl; using NHibernate.Type; @@ -38,7 +37,7 @@ protected override bool AppliesTo(Dialect.Dialect dialect) => protected override bool AppliesTo(Engine.ISessionFactoryImplementor factory) => // Cannot handle DbType.DateTimeOffset via .Net ODBC. - !(factory.ConnectionProvider.Driver is OdbcDriver); + !(factory.ConnectionProvider.Driver.IsOdbcDriver()); protected override void Configure(Configuration configuration) { diff --git a/src/NHibernate.Test/Async/TypesTest/StringTypeWithLengthFixture.cs b/src/NHibernate.Test/Async/TypesTest/StringTypeWithLengthFixture.cs index be75a5c5805..d75cb3b086c 100644 --- a/src/NHibernate.Test/Async/TypesTest/StringTypeWithLengthFixture.cs +++ b/src/NHibernate.Test/Async/TypesTest/StringTypeWithLengthFixture.cs @@ -13,7 +13,6 @@ using NHibernate.Cfg.MappingSchema; using NHibernate.Criterion; using NHibernate.Dialect; -using NHibernate.Driver; using NHibernate.Exceptions; using NHibernate.Mapping.ByCode; using NUnit.Framework; @@ -81,7 +80,7 @@ public Task ShouldPreventInsertionOfVeryLongStringThatWouldBeTruncatedAsync() try { // This test case is for when the current driver will use a parameter size - // that is significantly larger than the mapped column size (e.g. SqlClientDriver currently). + // that is significantly larger than the mapped column size (e.g. SqlServer2000Driver currently). // Note: This test could possible be written as // "database must raise an error OR it must store and return the full value" @@ -139,7 +138,7 @@ public async Task CanCompareLongValueWithLongStringAsync() { var maxStringLength = GetLongStringMappedLength(); - if (Sfi.ConnectionProvider.Driver is OdbcDriver && maxStringLength >= 2000) + if (Sfi.ConnectionProvider.Driver.IsOdbcDriver() && maxStringLength >= 2000) Assert.Ignore("Odbc wrecks nvarchar parameter types when they are longer than 2000, it switch them to ntext"); var longString = new string('x', maxStringLength); diff --git a/src/NHibernate.Test/Async/TypesTest/XDocTypeFixture.cs b/src/NHibernate.Test/Async/TypesTest/XDocTypeFixture.cs index b7fae9dc5c2..d2d0fb8afaf 100644 --- a/src/NHibernate.Test/Async/TypesTest/XDocTypeFixture.cs +++ b/src/NHibernate.Test/Async/TypesTest/XDocTypeFixture.cs @@ -10,7 +10,6 @@ using System.Data; using System.Xml.Linq; -using NHibernate.Driver; using NHibernate.Engine; using NHibernate.SqlTypes; using NHibernate.Type; @@ -35,7 +34,7 @@ protected override bool AppliesTo(Dialect.Dialect dialect) protected override bool AppliesTo(ISessionFactoryImplementor factory) { // No Xml support with Odbc (and likely OleDb too). - return factory.ConnectionProvider.Driver is SqlClientDriver; + return factory.ConnectionProvider.Driver.IsSqlClientDriver(); } [Test] diff --git a/src/NHibernate.Test/Async/TypesTest/XmlDocTypeFixture.cs b/src/NHibernate.Test/Async/TypesTest/XmlDocTypeFixture.cs index bc975d62590..83db7e7df9e 100644 --- a/src/NHibernate.Test/Async/TypesTest/XmlDocTypeFixture.cs +++ b/src/NHibernate.Test/Async/TypesTest/XmlDocTypeFixture.cs @@ -10,7 +10,6 @@ using System.Data; using System.Xml; -using NHibernate.Driver; using NHibernate.Engine; using NHibernate.SqlTypes; using NHibernate.Type; @@ -35,7 +34,7 @@ protected override bool AppliesTo(Dialect.Dialect dialect) protected override bool AppliesTo(ISessionFactoryImplementor factory) { // No Xml support with Odbc (and likely OleDb too). - return factory.ConnectionProvider.Driver is SqlClientDriver; + return factory.ConnectionProvider.Driver.IsSqlClientDriver(); } [Test] diff --git a/src/NHibernate.Test/CfgTest/ConfigurationFixture.cs b/src/NHibernate.Test/CfgTest/ConfigurationFixture.cs index 73a2b9671f4..3abf3b05cdb 100644 --- a/src/NHibernate.Test/CfgTest/ConfigurationFixture.cs +++ b/src/NHibernate.Test/CfgTest/ConfigurationFixture.cs @@ -52,7 +52,7 @@ public void ManualConfiguration() props[Environment.ConnectionProvider] = "NHibernate.Connection.DriverConnectionProvider"; props[Environment.Dialect] = "NHibernate.Dialect.MsSql2000Dialect"; - props[Environment.ConnectionDriver] = "NHibernate.Driver.SqlClientDriver"; + props[Environment.ConnectionDriver] = "NHibernate.Driver.SqlServer2000Driver, NHibernate.Driver.SqlServer"; props[Environment.ConnectionString] = "Server=localhost;initial catalog=nhibernate;Integrated Security=SSPI"; diff --git a/src/NHibernate.Test/CfgTest/Loquacious/ConfigurationFixture.cs b/src/NHibernate.Test/CfgTest/Loquacious/ConfigurationFixture.cs index d9b94d355de..1ae077347c5 100644 --- a/src/NHibernate.Test/CfgTest/Loquacious/ConfigurationFixture.cs +++ b/src/NHibernate.Test/CfgTest/Loquacious/ConfigurationFixture.cs @@ -53,7 +53,7 @@ public void CompleteConfiguration() #endif .Connected .Through() - .By() + .By() .Releasing(ConnectionReleaseMode.AfterTransaction) .With(IsolationLevel.ReadCommitted) .Using(connectionString) @@ -87,7 +87,7 @@ public void CompleteConfiguration() Assert.That(cfg.Properties[Environment.BatchSize], Is.EqualTo("15")); #endif Assert.That(cfg.Properties[Environment.ConnectionProvider], Is.EqualTo(typeof(DebugConnectionProvider).AssemblyQualifiedName)); - Assert.That(cfg.Properties[Environment.ConnectionDriver], Is.EqualTo(typeof(SqlClientDriver).AssemblyQualifiedName)); + Assert.That(cfg.Properties[Environment.ConnectionDriver], Is.EqualTo(typeof(SqlServer2000Driver).AssemblyQualifiedName)); Assert.That(cfg.Properties[Environment.ReleaseConnections], Is.EqualTo(ConnectionReleaseModeParser.ToString(ConnectionReleaseMode.AfterTransaction))); Assert.That(cfg.Properties[Environment.Isolation], Is.EqualTo("ReadCommitted")); Assert.That(cfg.Properties[Environment.ConnectionString], Is.EqualTo(connectionString)); diff --git a/src/NHibernate.Test/CfgTest/Loquacious/LambdaConfigurationFixture.cs b/src/NHibernate.Test/CfgTest/Loquacious/LambdaConfigurationFixture.cs index f422035fd85..62e857d73bf 100644 --- a/src/NHibernate.Test/CfgTest/Loquacious/LambdaConfigurationFixture.cs +++ b/src/NHibernate.Test/CfgTest/Loquacious/LambdaConfigurationFixture.cs @@ -51,7 +51,7 @@ public void FullConfiguration() #endif db.BatchSize = 15; db.ConnectionProvider(); - db.Driver(); + db.Driver(); db.ConnectionReleaseMode = ConnectionReleaseMode.AfterTransaction; db.IsolationLevel = IsolationLevel.ReadCommitted; db.ConnectionString = "The connection string"; @@ -92,7 +92,7 @@ public void FullConfiguration() Assert.That(configure.Properties[Environment.ConnectionProvider], Is.EqualTo(typeof(DebugConnectionProvider).AssemblyQualifiedName)); Assert.That(configure.Properties[Environment.ConnectionDriver], - Is.EqualTo(typeof(SqlClientDriver).AssemblyQualifiedName)); + Is.EqualTo(typeof(SqlServer2000Driver).AssemblyQualifiedName)); Assert.That(configure.Properties[Environment.ReleaseConnections], Is.EqualTo(ConnectionReleaseModeParser.ToString(ConnectionReleaseMode.AfterTransaction))); Assert.That(configure.Properties[Environment.Isolation], Is.EqualTo("ReadCommitted")); diff --git a/src/NHibernate.Test/DriverTest/FirebirdClientDriverFixture.cs b/src/NHibernate.Test/DriverTest/FirebirdClientDriverFixture.cs index 2bd4177e8db..51c3df69242 100644 --- a/src/NHibernate.Test/DriverTest/FirebirdClientDriverFixture.cs +++ b/src/NHibernate.Test/DriverTest/FirebirdClientDriverFixture.cs @@ -9,6 +9,7 @@ namespace NHibernate.Test.DriverTest { [TestFixture] + [Obsolete("Uses old driver")] public class FirebirdClientDriverFixture { private string _connectionString; diff --git a/src/NHibernate.Test/DriverTest/FirebirdDriverFixture.cs b/src/NHibernate.Test/DriverTest/FirebirdDriverFixture.cs new file mode 100644 index 00000000000..c7a51668cb2 --- /dev/null +++ b/src/NHibernate.Test/DriverTest/FirebirdDriverFixture.cs @@ -0,0 +1,275 @@ +using System; +using System.Data; +using System.Data.Common; +using NHibernate.Driver; +using NHibernate.SqlCommand; +using NHibernate.SqlTypes; +using NUnit.Framework; + +namespace NHibernate.Test.DriverTest +{ + [TestFixture] + public class FirebirdDriverFixture + { + private string _connectionString; + private FirebirdDriver _driver; + + [OneTimeSetUp] + public void OneTimeSetup() + { + var cfg = TestConfigurationHelper.GetDefaultConfiguration(); + + var dlct = cfg.GetProperty("dialect"); + if (!dlct.Contains("Firebird")) + Assert.Ignore("Applies only to Firebird"); + + _driver = new FirebirdDriver(); + _driver.Configure(cfg.Properties); + _connectionString = cfg.GetProperty("connection.connection_string"); + } + + [Test] + public void ConnectionPooling_OpenThenCloseThenOpenAnotherOne_OnlyOneConnectionIsPooled() + { + _driver.ClearPool(_connectionString); + + var allreadyEstablished = GetEstablishedConnections(); + + using (var connection1 = MakeConnection()) + using (var connection2 = MakeConnection()) + { + //open first connection + connection1.Open(); + VerifyCountOfEstablishedConnectionsIs(allreadyEstablished + 1, "After first open"); + + //return it to the pool + connection1.Close(); + VerifyCountOfEstablishedConnectionsIs(allreadyEstablished + 1, "After first close"); + + //open the second connection + connection2.Open(); + VerifyCountOfEstablishedConnectionsIs(allreadyEstablished + 1, "After second open"); + + //return it to the pool + connection2.Close(); + VerifyCountOfEstablishedConnectionsIs(allreadyEstablished + 1, "After second close"); + } + } + + [Test] + public void ConnectionPooling_OpenThenCloseTwoAtTheSameTime_TowConnectionsArePooled() + { + _driver.ClearPool(_connectionString); + + var allreadyEstablished = GetEstablishedConnections(); + + using (var connection1 = MakeConnection()) + using (var connection2 = MakeConnection()) + { + //open first connection + connection1.Open(); + VerifyCountOfEstablishedConnectionsIs(allreadyEstablished + 1, "After first open"); + + //open second one + connection2.Open(); + VerifyCountOfEstablishedConnectionsIs(allreadyEstablished + 2, "After second open"); + + //return connection1 to the pool + connection1.Close(); + VerifyCountOfEstablishedConnectionsIs(allreadyEstablished + 2, "After first close"); + + //return connection2 to the pool + connection2.Close(); + VerifyCountOfEstablishedConnectionsIs(allreadyEstablished + 2, "After second close"); + } + } + + [Test] + public void AdjustCommand_StringParametersWithinConditionalSelect_ThenParameterIsWrappedByAVarcharCastStatement() + { + using (var cmd = BuildSelectCaseCommand(SqlTypeFactory.GetString(255))) + { + _driver.AdjustCommand(cmd); + + var expectedCommandTxt = + "select (case when col = @p0 then cast(@p1 as VARCHAR(4000)) else cast(@p2 as VARCHAR(4000)) end) from table"; + Assert.That(cmd.CommandText, Is.EqualTo(expectedCommandTxt)); + } + } + + [Test] + public void AdjustCommand_IntParametersWithinConditionalSelect_ThenParameterIsWrappedByAnIntCastStatement() + { + using (var cmd = BuildSelectCaseCommand(SqlTypeFactory.Int32)) + { + _driver.AdjustCommand(cmd); + + var expectedCommandTxt = + "select (case when col = @p0 then cast(@p1 as INTEGER) else cast(@p2 as INTEGER) end) from table"; + Assert.That(cmd.CommandText, Is.EqualTo(expectedCommandTxt)); + } + } + + [Test] + public void AdjustCommand_ParameterWithinSelectConcat_ParameterIsCasted() + { + using (var cmd = BuildSelectConcatCommand(SqlTypeFactory.GetString(255))) + { + _driver.AdjustCommand(cmd); + + var expected = "select col || cast(@p0 as VARCHAR(4000)) || col from table"; + Assert.That(cmd.CommandText, Is.EqualTo(expected)); + } + } + + [Test] + public void AdjustCommand_ParameterWithinSelectAddFunction_ParameterIsCasted() + { + using (var cmd = BuildSelectAddCommand(SqlTypeFactory.GetString(255))) + { + _driver.AdjustCommand(cmd); + + var expected = "select col + cast(@p0 as VARCHAR(4000)) from table"; + Assert.That(cmd.CommandText, Is.EqualTo(expected)); + } + } + + [Test] + public void AdjustCommand_InsertWithParamsInSelect_ParameterIsCasted() + { + using (var cmd = BuildInsertWithParamsInSelectCommand(SqlTypeFactory.Int32)) + { + _driver.AdjustCommand(cmd); + + var expected = "insert into table1 (col1, col2) select col1, cast(@p0 as INTEGER) from table2"; + Assert.That(cmd.CommandText, Is.EqualTo(expected)); + } + } + + [Test] + public void AdjustCommand_InsertWithParamsInSelect_ParameterIsNotCasted_WhenColumnNameContainsSelect() + { + using (var cmd = BuildInsertWithParamsInSelectCommandWithSelectInColumnName(SqlTypeFactory.Int32)) + { + _driver.AdjustCommand(cmd); + + var expected = "insert into table1 (col1_select_aaa) values(@p0) from table2"; + Assert.That(cmd.CommandText, Is.EqualTo(expected)); + } + } + + [Test] + public void AdjustCommand_InsertWithParamsInSelect_ParameterIsNotCasted_WhenColumnNameContainsWhere() + { + using (var cmd = BuildInsertWithParamsInSelectCommandWithWhereInColumnName(SqlTypeFactory.Int32)) + { + _driver.AdjustCommand(cmd); + + var expected = "insert into table1 (col1_where_aaa) values(@p0) from table2"; + Assert.That(cmd.CommandText, Is.EqualTo(expected)); + } + } + + private DbConnection MakeConnection() + { + var result = _driver.CreateConnection(); + result.ConnectionString = _connectionString; + return result; + } + + private void VerifyCountOfEstablishedConnectionsIs(int expectedCount, string step) + { + var physicalConnections = GetEstablishedConnections(); + Assert.That(physicalConnections, Is.EqualTo(expectedCount), step); + } + + private int GetEstablishedConnections() + { + using (var conn = _driver.CreateConnection()) + { + conn.ConnectionString = _connectionString; + conn.Open(); + using (var cmd = conn.CreateCommand()) + { + cmd.CommandText = "select count(*) from mon$attachments where mon$attachment_id <> current_connection"; + return Convert.ToInt32(cmd.ExecuteScalar()); + } + } + } + + private DbCommand BuildSelectCaseCommand(SqlType paramType) + { + var sqlString = new SqlStringBuilder() + .Add("select (case when col = ") + .AddParameter() + .Add(" then ") + .AddParameter() + .Add(" else ") + .AddParameter() + .Add(" end) from table") + .ToSqlString(); + + return _driver.GenerateCommand(CommandType.Text, sqlString, new[] { paramType, paramType, paramType }); + } + + private DbCommand BuildSelectConcatCommand(SqlType paramType) + { + var sqlString = new SqlStringBuilder() + .Add("select col || ") + .AddParameter() + .Add(" || ") + .Add("col ") + .Add("from table") + .ToSqlString(); + + return _driver.GenerateCommand(CommandType.Text, sqlString, new[] { paramType }); + } + + private DbCommand BuildSelectAddCommand(SqlType paramType) + { + var sqlString = new SqlStringBuilder() + .Add("select col + ") + .AddParameter() + .Add(" from table") + .ToSqlString(); + + return _driver.GenerateCommand(CommandType.Text, sqlString, new[] { paramType }); + } + + private DbCommand BuildInsertWithParamsInSelectCommand(SqlType paramType) + { + var sqlString = new SqlStringBuilder() + .Add("insert into table1 (col1, col2) ") + .Add("select col1, ") + .AddParameter() + .Add(" from table2") + .ToSqlString(); + + return _driver.GenerateCommand(CommandType.Text, sqlString, new[] { paramType }); + } + + private DbCommand BuildInsertWithParamsInSelectCommandWithSelectInColumnName(SqlType paramType) + { + var sqlString = new SqlStringBuilder() + .Add("insert into table1 (col1_select_aaa) ") + .Add("values(") + .AddParameter() + .Add(") from table2") + .ToSqlString(); + + return _driver.GenerateCommand(CommandType.Text, sqlString, new[] { paramType }); + } + + private DbCommand BuildInsertWithParamsInSelectCommandWithWhereInColumnName(SqlType paramType) + { + var sqlString = new SqlStringBuilder() + .Add("insert into table1 (col1_where_aaa) ") + .Add("values(") + .AddParameter() + .Add(") from table2") + .ToSqlString(); + + return _driver.GenerateCommand(CommandType.Text, sqlString, new[] { paramType }); + } + } +} diff --git a/src/NHibernate.Test/DriverTest/ObsoleteDriverFixture.cs b/src/NHibernate.Test/DriverTest/ObsoleteDriverFixture.cs new file mode 100644 index 00000000000..5ef6726ac64 --- /dev/null +++ b/src/NHibernate.Test/DriverTest/ObsoleteDriverFixture.cs @@ -0,0 +1,102 @@ +using System; +using System.Collections; +using System.Linq.Dynamic.Core; +using NHibernate.Cfg; +using NHibernate.Connection; +using NHibernate.Dialect; +using NHibernate.DomainModel; +using NHibernate.Driver; +using NHibernate.Util; +using NUnit.Framework; + +namespace NHibernate.Test.DriverTest +{ + [TestFixture, Obsolete] + public class ObsoleteDriverFixture : TestCase + { + protected override IList Mappings => new [] {"Simple.hbm.xml"}; + + protected override bool AppliesTo(Dialect.Dialect dialect) + { + switch (dialect) + { + case FirebirdDialect _: + case MsSql2000Dialect _: + case MsSqlCeDialect _: + case MySQLDialect _: + case PostgreSQLDialect _: + case SQLiteDialect _: + System.Type driverType = ReflectHelper.ClassForName(cfg.GetProperty(Cfg.Environment.ConnectionDriver)); + return !(driverType.IsOdbcDriver() || driverType.IsOleDbDriver()); + default: + return false; + } + } + + protected override void Configure(Configuration configuration) + { + base.Configure(configuration); + + System.Type driverType = ReflectHelper.ClassForName(cfg.GetProperty(Cfg.Environment.ConnectionDriver)); + if (driverType.IsOdbcDriver() || driverType.IsOleDbDriver()) + { + // ODBC and OLE DB drivers are not obsoleted, do not switch it. + return; + } + + var dialect = NHibernate.Dialect.Dialect.GetDialect(configuration.Properties); + System.Type driver; + switch (dialect) + { + case FirebirdDialect _: + driver = typeof(FirebirdClientDriver); + break; + case MsSql2008Dialect _: + driver = typeof(Sql2008ClientDriver); + break; + case MsSql2000Dialect _: + driver = typeof(SqlClientDriver); + break; + case MsSqlCeDialect _: + driver = typeof(SqlServerCeDriver); + break; + case MySQLDialect _: + driver = typeof(MySqlDataDriver); + break; + case PostgreSQLDialect _: + driver = typeof(NpgsqlDriver); + break; + case SQLiteDialect _: + driver = typeof(SQLite20Driver); + break; + default: + return; + } + configuration.SetProperty(Cfg.Environment.ConnectionDriver, driver.FullName); + } + + [Test] + public void GenerateObsoleteWarning() + { + using (var spy = new LogSpy(typeof(ConnectionProvider))) + { + using (BuildSessionFactory()) + { + Assert.That(spy.GetWholeLog(), Does.Contain("Install the NHibernate.Driver.")); + } + } + } + + [Test] + public void CanUseObsoleteDriver() + { + using (var s = OpenSession()) + using (var t = s.BeginTransaction()) + { + var count = s.Query().Count(); + Assert.That(count, Is.Zero); + t.Commit(); + } + } + } +} diff --git a/src/NHibernate.Test/DriverTest/OdbcDriverFixture.cs b/src/NHibernate.Test/DriverTest/OdbcDriverFixture.cs index 086df5ca30b..859b1554435 100644 --- a/src/NHibernate.Test/DriverTest/OdbcDriverFixture.cs +++ b/src/NHibernate.Test/DriverTest/OdbcDriverFixture.cs @@ -1,7 +1,5 @@ -using System; using System.Collections; using NHibernate.Dialect; -using NHibernate.Driver; using NHibernate.Engine; using NUnit.Framework; @@ -21,7 +19,7 @@ protected override bool AppliesTo(Dialect.Dialect dialect) protected override bool AppliesTo(ISessionFactoryImplementor factory) { - return factory.ConnectionProvider.Driver is OdbcDriver; + return factory.ConnectionProvider.Driver.IsOdbcDriver(); } protected override void OnTearDown() diff --git a/src/NHibernate.Test/DriverTest/OracleDataClientDriverFixture.cs b/src/NHibernate.Test/DriverTest/OracleDataClientDriverFixture.cs index 808a1b68dea..868b5d59b93 100644 --- a/src/NHibernate.Test/DriverTest/OracleDataClientDriverFixture.cs +++ b/src/NHibernate.Test/DriverTest/OracleDataClientDriverFixture.cs @@ -117,7 +117,12 @@ private static OracleDataClientDriverBase GetDriver(bool managed, IDictionary "NHibernate.Test"; @@ -40,7 +39,7 @@ protected override bool AppliesTo(Dialect.Dialect dialect) protected override bool AppliesTo(ISessionFactoryImplementor factory) { - return factory.ConnectionProvider.Driver is SqlClientDriver; + return factory.ConnectionProvider.Driver.IsSqlClientDriver(); } protected override void OnTearDown() diff --git a/src/NHibernate.Test/ExceptionsTest/SQLExceptionConversionTest.cs b/src/NHibernate.Test/ExceptionsTest/SQLExceptionConversionTest.cs index 179a50a862d..5d7932a93d5 100644 --- a/src/NHibernate.Test/ExceptionsTest/SQLExceptionConversionTest.cs +++ b/src/NHibernate.Test/ExceptionsTest/SQLExceptionConversionTest.cs @@ -3,7 +3,6 @@ using System.Data; using System.Data.Common; using NHibernate.Dialect; -using NHibernate.Driver; using NHibernate.Engine; using NHibernate.Exceptions; using NHibernate.Util; @@ -32,7 +31,7 @@ protected override bool AppliesTo(Dialect.Dialect dialect) protected override bool AppliesTo(ISessionFactoryImplementor factory) { var driver = factory.ConnectionProvider.Driver; - return !(driver is OracleDataClientDriver) && !(driver is OracleManagedDataClientDriver) && !(driver is OracleLiteDataClientDriver) && !(driver is OdbcDriver) && !(driver is OleDbDriver); + return !(driver.IsOracleDataClientDriver()) && !(driver.IsOracleManagedDataClientDriver()) && !(driver.IsOracleLiteDataClientDriver()) && !(driver.IsOdbcDriver()) && !(driver.IsOleDbDriver()); } protected override void Configure(Cfg.Configuration configuration) diff --git a/src/NHibernate.Test/Futures/FallbackFixture.cs b/src/NHibernate.Test/Futures/FallbackFixture.cs index 57992b53798..f1255b31005 100644 --- a/src/NHibernate.Test/Futures/FallbackFixture.cs +++ b/src/NHibernate.Test/Futures/FallbackFixture.cs @@ -1,3 +1,4 @@ +using System; using System.Linq; using NHibernate.Cfg; using NHibernate.Connection; @@ -10,13 +11,13 @@ namespace NHibernate.Test.Futures { - public class TestDriverThatDoesntSupportQueryBatching : SqlClientDriver + public class TestDriverThatDoesntSupportQueryBatching : SqlServer2000Driver { public override bool SupportsMultipleQueries => false; } /// - /// I'm using a Driver which derives from SqlClientDriver to + /// I'm using a Driver which derives from SqlServer2000Driver to /// return false for the SupportsMultipleQueries property. This is purely to test the way NHibernate /// will behave when the driver that's being used does not support multiple queries... so even though /// the test is using MsSql, it's only relevant for databases that don't support multiple queries @@ -38,7 +39,7 @@ protected override void Configure(Configuration configuration) base.Configure(configuration); using (var cp = ConnectionProviderFactory.NewConnectionProvider(cfg.Properties)) { - if (cp.Driver is SqlClientDriver) + if (cp.Driver.IsSqlClientDriver()) { configuration.Properties[Environment.ConnectionDriver] = typeof(TestDriverThatDoesntSupportQueryBatching).AssemblyQualifiedName; diff --git a/src/NHibernate.Test/Hql/Ast/LimitClauseFixture.cs b/src/NHibernate.Test/Hql/Ast/LimitClauseFixture.cs index 75e6a3f8d81..7f1c9eb1a34 100644 --- a/src/NHibernate.Test/Hql/Ast/LimitClauseFixture.cs +++ b/src/NHibernate.Test/Hql/Ast/LimitClauseFixture.cs @@ -1,6 +1,5 @@ using System.Linq; using NHibernate.Cfg; -using NHibernate.Driver; using NHibernate.Hql.Ast.ANTLR; using NHibernate.Util; using NUnit.Framework; @@ -14,7 +13,7 @@ protected override bool AppliesTo(Dialect.Dialect dialect) { return dialect.SupportsVariableLimit && !(Dialect is Dialect.MsSql2000Dialect && // don't know why, but these tests don't work on SQL Server using ODBC - typeof(OdbcDriver).IsAssignableFrom(ReflectHelper.ClassForName(cfg.GetProperty(Environment.ConnectionDriver)))); + ReflectHelper.ClassForName(cfg.GetProperty(Environment.ConnectionDriver)).IsOdbcDriver()); } protected override void OnSetUp() diff --git a/src/NHibernate.Test/Insertordering/InsertOrderingFixture.cs b/src/NHibernate.Test/Insertordering/InsertOrderingFixture.cs index 0fa36657138..c9647148b74 100644 --- a/src/NHibernate.Test/Insertordering/InsertOrderingFixture.cs +++ b/src/NHibernate.Test/Insertordering/InsertOrderingFixture.cs @@ -8,7 +8,6 @@ using NHibernate.AdoNet; using NHibernate.Cfg; using NHibernate.Dialect; -using NHibernate.Driver; using NHibernate.Engine; using NHibernate.SqlCommand; using NHibernate.SqlTypes; @@ -42,7 +41,7 @@ protected override bool AppliesTo(Dialect.Dialect dialect) protected override bool AppliesTo(ISessionFactoryImplementor factory) { // Custom batcher does not support oledb driver. - return factory.ConnectionProvider.Driver is SqlClientDriver; + return factory.ConnectionProvider.Driver.IsSqlClientDriver(); } protected override void Configure(Configuration configuration) diff --git a/src/NHibernate.Test/Linq/ByMethod/GroupByTests.cs b/src/NHibernate.Test/Linq/ByMethod/GroupByTests.cs index 4601013f556..7c82722826a 100644 --- a/src/NHibernate.Test/Linq/ByMethod/GroupByTests.cs +++ b/src/NHibernate.Test/Linq/ByMethod/GroupByTests.cs @@ -5,7 +5,6 @@ using System.Text.RegularExpressions; using NHibernate.Dialect; using NHibernate.DomainModel.Northwind.Entities; -using NHibernate.Driver; using NHibernate.Linq; using NUnit.Framework; @@ -551,7 +550,7 @@ public void GroupByComputedValue() { if (!TestDialect.SupportsComplexExpressionInGroupBy) Assert.Ignore(Dialect.GetType().Name + " does not support complex group by expressions"); - if (Sfi.ConnectionProvider.Driver is OdbcDriver) + if (Sfi.ConnectionProvider.Driver.IsOdbcDriver()) Assert.Ignore("SQL Server seems unable to match complex group by and select list arguments when running over ODBC."); var orderGroups = db.Orders.GroupBy(o => o.Customer.CustomerId == null ? 0 : 1).Select(g => new { Key = g.Key, Count = g.Count() }).ToList(); @@ -563,7 +562,7 @@ public void GroupByComputedValueInAnonymousType() { if (!TestDialect.SupportsComplexExpressionInGroupBy) Assert.Ignore(Dialect.GetType().Name + " does not support complex group by expressions"); - if (Sfi.ConnectionProvider.Driver is OdbcDriver) + if (Sfi.ConnectionProvider.Driver.IsOdbcDriver()) Assert.Ignore("SQL Server seems unable to match complex group by and select list arguments when running over ODBC."); var orderGroups = db.Orders.GroupBy(o => new { Key = o.Customer.CustomerId == null ? 0 : 1 }).Select(g => new { Key = g.Key, Count = g.Count() }).ToList(); @@ -575,7 +574,7 @@ public void GroupByComputedValueInObjectArray() { if (!TestDialect.SupportsComplexExpressionInGroupBy) Assert.Ignore(Dialect.GetType().Name + " does not support complex group by expressions"); - if (Sfi.ConnectionProvider.Driver is OdbcDriver) + if (Sfi.ConnectionProvider.Driver.IsOdbcDriver()) Assert.Ignore("SQL Server seems unable to match complex group by and select list arguments when running over ODBC."); var orderGroups = db.Orders.GroupBy(o => new[] { o.Customer.CustomerId == null ? 0 : 1, }).Select(g => new { Key = g.Key, Count = g.Count() }).ToList(); @@ -704,7 +703,7 @@ public void GroupByComputedValueWithJoinOnObject() { if (!TestDialect.SupportsComplexExpressionInGroupBy) Assert.Ignore(Dialect.GetType().Name + " does not support complex group by expressions"); - if (Sfi.ConnectionProvider.Driver is OdbcDriver) + if (Sfi.ConnectionProvider.Driver.IsOdbcDriver()) Assert.Ignore("SQL Server seems unable to match complex group by and select list arguments when running over ODBC."); var orderGroups = db.OrderLines.GroupBy(o => o.Order.Customer == null ? 0 : 1).Select(g => new { Key = g.Key, Count = g.Count() }).ToList(); @@ -716,7 +715,7 @@ public void GroupByComputedValueWithJoinOnId() { if (!TestDialect.SupportsComplexExpressionInGroupBy) Assert.Ignore(Dialect.GetType().Name + " does not support complex group by expressions"); - if (Sfi.ConnectionProvider.Driver is OdbcDriver) + if (Sfi.ConnectionProvider.Driver.IsOdbcDriver()) Assert.Ignore("SQL Server seems unable to match complex group by and select list arguments when running over ODBC."); var orderGroups = db.OrderLines.GroupBy(o => o.Order.Customer.CustomerId == null ? 0 : 1).Select(g => new { Key = g.Key, Count = g.Count() }).ToList(); @@ -728,7 +727,7 @@ public void GroupByComputedValueInAnonymousTypeWithJoinOnObject() { if (!TestDialect.SupportsComplexExpressionInGroupBy) Assert.Ignore(Dialect.GetType().Name + " does not support complex group by expressions"); - if (Sfi.ConnectionProvider.Driver is OdbcDriver) + if (Sfi.ConnectionProvider.Driver.IsOdbcDriver()) Assert.Ignore("SQL Server seems unable to match complex group by and select list arguments when running over ODBC."); var orderGroups = db.OrderLines.GroupBy(o => new { Key = o.Order.Customer == null ? 0 : 1 }).Select(g => new { Key = g.Key, Count = g.Count() }).ToList(); @@ -740,7 +739,7 @@ public void GroupByComputedValueInAnonymousTypeWithJoinOnId() { if (!TestDialect.SupportsComplexExpressionInGroupBy) Assert.Ignore(Dialect.GetType().Name + " does not support complex group by expressions"); - if (Sfi.ConnectionProvider.Driver is OdbcDriver) + if (Sfi.ConnectionProvider.Driver.IsOdbcDriver()) Assert.Ignore("SQL Server seems unable to match complex group by and select list arguments when running over ODBC."); var orderGroups = db.OrderLines.GroupBy(o => new { Key = o.Order.Customer.CustomerId == null ? 0 : 1 }).Select(g => new { Key = g.Key, Count = g.Count() }).ToList(); @@ -752,7 +751,7 @@ public void GroupByComputedValueInObjectArrayWithJoinOnObject() { if (!TestDialect.SupportsComplexExpressionInGroupBy) Assert.Ignore(Dialect.GetType().Name + " does not support complex group by expressions"); - if (Sfi.ConnectionProvider.Driver is OdbcDriver) + if (Sfi.ConnectionProvider.Driver.IsOdbcDriver()) Assert.Ignore("SQL Server seems unable to match complex group by and select list arguments when running over ODBC."); var orderGroups = db.OrderLines.GroupBy(o => new[] { o.Order.Customer == null ? 0 : 1 }).Select(g => new { Key = g.Key, Count = g.Count() }).ToList(); @@ -764,7 +763,7 @@ public void GroupByComputedValueInObjectArrayWithJoinOnId() { if (!TestDialect.SupportsComplexExpressionInGroupBy) Assert.Ignore(Dialect.GetType().Name + " does not support complex group by expressions"); - if (Sfi.ConnectionProvider.Driver is OdbcDriver) + if (Sfi.ConnectionProvider.Driver.IsOdbcDriver()) Assert.Ignore("SQL Server seems unable to match complex group by and select list arguments when running over ODBC."); var orderGroups = db.OrderLines.GroupBy(o => new[] { o.Order.Customer.CustomerId == null ? 0 : 1 }).Select(g => new { Key = g.Key, Count = g.Count() }).ToList(); @@ -776,7 +775,7 @@ public void GroupByComputedValueInObjectArrayWithJoinInRightSideOfCase() { if (!TestDialect.SupportsComplexExpressionInGroupBy) Assert.Ignore(Dialect.GetType().Name + " does not support complex group by expressions"); - if (Sfi.ConnectionProvider.Driver is OdbcDriver) + if (Sfi.ConnectionProvider.Driver.IsOdbcDriver()) Assert.Ignore("SQL Server seems unable to match complex group by and select list arguments when running over ODBC."); var orderGroups = db.OrderLines.GroupBy(o => new[] { o.Order.Customer.CustomerId == null ? "unknown" : o.Order.Customer.CompanyName }).Select(g => new { Key = g.Key, Count = g.Count() }).ToList(); @@ -788,7 +787,7 @@ public void GroupByComputedValueFromNestedArraySelect() { if (!TestDialect.SupportsComplexExpressionInGroupBy) Assert.Ignore(Dialect.GetType().Name + " does not support complex group by expressions"); - if (Sfi.ConnectionProvider.Driver is OdbcDriver) + if (Sfi.ConnectionProvider.Driver.IsOdbcDriver()) Assert.Ignore("SQL Server seems unable to match complex group by and select list arguments when running over ODBC."); var orderGroups = db.OrderLines.Select(o => new object[] { o }).GroupBy(x => new object[] { ((OrderLine)x[0]).Order.Customer == null ? 0 : 1 }).Select(g => new { Key = g.Key, Count = g.Count() }).ToList(); @@ -800,7 +799,7 @@ public void GroupByComputedValueFromNestedObjectSelect() { if (!TestDialect.SupportsComplexExpressionInGroupBy) Assert.Ignore(Dialect.GetType().Name + " does not support complex group by expressions"); - if (Sfi.ConnectionProvider.Driver is OdbcDriver) + if (Sfi.ConnectionProvider.Driver.IsOdbcDriver()) Assert.Ignore("SQL Server seems unable to match complex group by and select list arguments when running over ODBC."); var orderGroups = db.OrderLines.Select(o => new { OrderLine = (object)o }).GroupBy(x => new object[] { ((OrderLine)x.OrderLine).Order.Customer == null ? 0 : 1 }).Select(g => new { Key = g.Key, Count = g.Count() }).ToList(); diff --git a/src/NHibernate.Test/NHSpecificTest/Dates/DateTimeOffsetFixture.cs b/src/NHibernate.Test/NHSpecificTest/Dates/DateTimeOffsetFixture.cs index b4b80b3a979..1abf13fa653 100644 --- a/src/NHibernate.Test/NHSpecificTest/Dates/DateTimeOffsetFixture.cs +++ b/src/NHibernate.Test/NHSpecificTest/Dates/DateTimeOffsetFixture.cs @@ -4,7 +4,6 @@ using System.IO; using System.Runtime.Serialization.Formatters.Binary; using System.Xml.Serialization; -using NHibernate.Driver; using NHibernate.Type; using NUnit.Framework; @@ -21,7 +20,7 @@ protected override IList Mappings protected override bool AppliesTo(Engine.ISessionFactoryImplementor factory) { // Cannot handle DbType.DateTimeOffset via ODBC. - if (factory.ConnectionProvider.Driver is OdbcDriver) + if (factory.ConnectionProvider.Driver.IsOdbcDriver()) return false; return base.AppliesTo(factory); diff --git a/src/NHibernate.Test/NHSpecificTest/Dates/DateTimeOffsetQueryFixture.cs b/src/NHibernate.Test/NHSpecificTest/Dates/DateTimeOffsetQueryFixture.cs index 5fb7bca6261..18611b1bd21 100644 --- a/src/NHibernate.Test/NHSpecificTest/Dates/DateTimeOffsetQueryFixture.cs +++ b/src/NHibernate.Test/NHSpecificTest/Dates/DateTimeOffsetQueryFixture.cs @@ -2,7 +2,6 @@ using System.Collections; using System.Data; using System.Linq; -using NHibernate.Driver; using NHibernate.Type; using NUnit.Framework; using Environment = NHibernate.Cfg.Environment; @@ -21,7 +20,7 @@ protected override IList Mappings protected override bool AppliesTo(Engine.ISessionFactoryImplementor factory) { // Cannot handle DbType.DateTimeOffset via ODBC. - if (factory.ConnectionProvider.Driver is OdbcDriver) + if (factory.ConnectionProvider.Driver.IsOdbcDriver()) return false; return base.AppliesTo(factory); diff --git a/src/NHibernate.Test/NHSpecificTest/GH1547/Fixture.cs b/src/NHibernate.Test/NHSpecificTest/GH1547/Fixture.cs index 5dc6705647b..63b4809752d 100644 --- a/src/NHibernate.Test/NHSpecificTest/GH1547/Fixture.cs +++ b/src/NHibernate.Test/NHSpecificTest/GH1547/Fixture.cs @@ -153,16 +153,13 @@ public IDisposable SubstituteCommand() public void CleanUp() { - if (_driverImplementation is FirebirdClientDriver fbDriver) - { - // Firebird will pool each connection created during the test and will marked as used any table - // referenced by queries. It will at best delays those tables drop until connections are actually - // closed, or immediately fail dropping them. - // This results in other tests failing when they try to create tables with same name. - // By clearing the connection pool the tables will get dropped. This is done by the following code. - // Moved from NH1908 test case, contributed by Amro El-Fakharany. - fbDriver.ClearPool(null); - } + // Firebird will pool each connection created during the test and will marked as used any table + // referenced by queries. It will at best delays those tables drop until connections are actually + // closed, or immediately fail dropping them. + // This results in other tests failing when they try to create tables with same name. + // By clearing the connection pool the tables will get dropped. This is done by the following code. + // Moved from NH1908 test case, contributed by Amro El-Fakharany. + _driverImplementation.ClearPoolForFirebirdClientDriver(); } #endregion diff --git a/src/NHibernate.Test/NHSpecificTest/NH1144/Fixture.cs b/src/NHibernate.Test/NHSpecificTest/NH1144/Fixture.cs index be3b8d7a7b0..221afacfb3c 100644 --- a/src/NHibernate.Test/NHSpecificTest/NH1144/Fixture.cs +++ b/src/NHibernate.Test/NHSpecificTest/NH1144/Fixture.cs @@ -1,7 +1,6 @@ using log4net.Core; using NHibernate.AdoNet; using NHibernate.Cfg; -using NHibernate.Driver; using NHibernate.Util; using NUnit.Framework; @@ -26,7 +25,7 @@ protected override void Configure(Configuration configuration) [Test] public void CanSaveInSingleBatch() { - if (!typeof(OracleDataClientDriver).IsAssignableFrom(ReflectHelper.ClassForName(cfg.GetProperty(Environment.ConnectionDriver)))) + if (!ReflectHelper.ClassForName(cfg.GetProperty(Environment.ConnectionDriver)).IsOracleDataClientDriver()) { Assert.Ignore("Only applicable for Oracle Data Client driver"); } diff --git a/src/NHibernate.Test/NHSpecificTest/NH1507/Fixture.cs b/src/NHibernate.Test/NHSpecificTest/NH1507/Fixture.cs index 2c072d90c87..b54bdf9dcac 100644 --- a/src/NHibernate.Test/NHSpecificTest/NH1507/Fixture.cs +++ b/src/NHibernate.Test/NHSpecificTest/NH1507/Fixture.cs @@ -1,6 +1,5 @@ using System; using System.Collections; -using NHibernate.Driver; using NUnit.Framework; namespace NHibernate.Test.NHSpecificTest.NH1507 @@ -10,7 +9,7 @@ public class Fixture : BugTestCase { protected override bool AppliesTo(Engine.ISessionFactoryImplementor factory) { - return !(factory.ConnectionProvider.Driver is OracleManagedDataClientDriver); + return !(factory.ConnectionProvider.Driver.IsOracleManagedDataClientDriver()); } protected override void OnSetUp() @@ -117,4 +116,4 @@ public void ImplicitJoinFailingTest() } } } -} \ No newline at end of file +} diff --git a/src/NHibernate.Test/NHSpecificTest/NH1553/MsSQL/SnapshotIsolationUpdateConflictTest.cs b/src/NHibernate.Test/NHSpecificTest/NH1553/MsSQL/SnapshotIsolationUpdateConflictTest.cs index d485cae2227..c119adeff97 100644 --- a/src/NHibernate.Test/NHSpecificTest/NH1553/MsSQL/SnapshotIsolationUpdateConflictTest.cs +++ b/src/NHibernate.Test/NHSpecificTest/NH1553/MsSQL/SnapshotIsolationUpdateConflictTest.cs @@ -2,7 +2,6 @@ using System.Data; using NHibernate.Cfg; using NHibernate.Dialect; -using NHibernate.Driver; using NHibernate.Engine; using NUnit.Framework; using NUnit.Framework.Constraints; @@ -129,7 +128,7 @@ protected override bool AppliesTo(ISessionFactoryImplementor factory) { // SQLUpdateConflictToStaleStateExceptionConverter is specific to Sql client driver, and does not work // with Odbc (and likeley Oledb). - return factory.ConnectionProvider.Driver is SqlClientDriver; + return factory.ConnectionProvider.Driver.IsSqlClientDriver(); } private bool _isSnapshotIsolationAlreadyAllowed; diff --git a/src/NHibernate.Test/NHSpecificTest/NH1756/Fixture.cs b/src/NHibernate.Test/NHSpecificTest/NH1756/Fixture.cs index 8098a37ca7a..57fcda1d470 100644 --- a/src/NHibernate.Test/NHSpecificTest/NH1756/Fixture.cs +++ b/src/NHibernate.Test/NHSpecificTest/NH1756/Fixture.cs @@ -1,6 +1,5 @@ using System.Collections.Generic; using NHibernate.Dialect; -using NHibernate.Driver; using NHibernate.Engine; using NUnit.Framework; @@ -30,7 +29,7 @@ protected override bool AppliesTo(ISessionFactoryImplementor factory) // N'@P1 nvarchar(18),@P2 int,@P3 datetime2',N'modified test book',1,'2017-08-02 16:37:16.0630000' // Setting the scale to 2 still causes failure for two thirds of tries, due to 3ms/7ms being truncated in such case // with ODBC and SQL Server 2008+ Client, which is rejected by ODBC. - return !(factory.ConnectionProvider.Driver is OdbcDriver); + return !(factory.ConnectionProvider.Driver.IsOdbcDriver()); } [Test] diff --git a/src/NHibernate.Test/NHSpecificTest/NH2020/Fixture.cs b/src/NHibernate.Test/NHSpecificTest/NH2020/Fixture.cs index c1f79a62f32..ab96c5ab2bd 100644 --- a/src/NHibernate.Test/NHSpecificTest/NH2020/Fixture.cs +++ b/src/NHibernate.Test/NHSpecificTest/NH2020/Fixture.cs @@ -1,6 +1,5 @@ using NUnit.Framework; using NHibernate.Dialect; -using NHibernate.Driver; using NHibernate.Exceptions; using NHibernate.Test.ExceptionsTest; using NHibernate.Engine; @@ -26,7 +25,7 @@ protected override bool AppliesTo(NHibernate.Dialect.Dialect dialect) protected override bool AppliesTo(ISessionFactoryImplementor factory) { // Use a SQL Server Client exception converter, cannot work for ODBC or OleDb - return factory.ConnectionProvider.Driver is SqlClientDriver; + return factory.ConnectionProvider.Driver.IsSqlClientDriver(); } protected override void OnTearDown() diff --git a/src/NHibernate.Test/NHSpecificTest/NH2207/SampleTest.cs b/src/NHibernate.Test/NHSpecificTest/NH2207/SampleTest.cs index c84162a1e75..40d332899c7 100644 --- a/src/NHibernate.Test/NHSpecificTest/NH2207/SampleTest.cs +++ b/src/NHibernate.Test/NHSpecificTest/NH2207/SampleTest.cs @@ -1,7 +1,6 @@ using System; using System.Data; using NHibernate.Dialect; -using NHibernate.Driver; using NHibernate.Engine; using NUnit.Framework; @@ -17,7 +16,7 @@ protected override bool AppliesTo(Dialect.Dialect dialect) protected override bool AppliesTo(ISessionFactoryImplementor factory) { - return factory.ConnectionProvider.Driver is Sql2008ClientDriver; + return factory.ConnectionProvider.Driver.IsSql2008ClientDriver(); } [Test] diff --git a/src/NHibernate.Test/NHSpecificTest/NH2296/Fixture.cs b/src/NHibernate.Test/NHSpecificTest/NH2296/Fixture.cs index 04ccee45786..c56a9ad5ef4 100644 --- a/src/NHibernate.Test/NHSpecificTest/NH2296/Fixture.cs +++ b/src/NHibernate.Test/NHSpecificTest/NH2296/Fixture.cs @@ -1,5 +1,4 @@ using System.Linq; -using NHibernate.Driver; using NUnit.Framework; namespace NHibernate.Test.NHSpecificTest.NH2296 @@ -9,7 +8,7 @@ public class Fixture : BugTestCase { protected override bool AppliesTo(Engine.ISessionFactoryImplementor factory) { - return !(factory.ConnectionProvider.Driver is OracleManagedDataClientDriver); + return !(factory.ConnectionProvider.Driver.IsOracleManagedDataClientDriver()); } protected override void OnSetUp() @@ -73,4 +72,4 @@ public void Test() } } } -} \ No newline at end of file +} diff --git a/src/NHibernate.Test/NHSpecificTest/NH2302/Fixture.cs b/src/NHibernate.Test/NHSpecificTest/NH2302/Fixture.cs index fb0b651da7b..9ea7437bb9d 100644 --- a/src/NHibernate.Test/NHSpecificTest/NH2302/Fixture.cs +++ b/src/NHibernate.Test/NHSpecificTest/NH2302/Fixture.cs @@ -1,6 +1,5 @@ using System.Data; using NHibernate.Dialect; -using NHibernate.Driver; using NHibernate.Mapping; using NUnit.Framework; @@ -38,7 +37,7 @@ protected override void OnTearDown() [Test] public void StringHugeLength() { - if (Sfi.ConnectionProvider.Driver is OdbcDriver || Dialect is MsSqlCeDialect) + if (Sfi.ConnectionProvider.Driver.IsOdbcDriver() || Dialect is MsSqlCeDialect) Assert.Ignore("NH-4065, not fixed for Odbc and MsSqlCe"); int id; diff --git a/src/NHibernate.Test/NHSpecificTest/NH2420/Fixture.cs b/src/NHibernate.Test/NHSpecificTest/NH2420/Fixture.cs index 1c80edf6de7..38195842ac7 100644 --- a/src/NHibernate.Test/NHSpecificTest/NH2420/Fixture.cs +++ b/src/NHibernate.Test/NHSpecificTest/NH2420/Fixture.cs @@ -4,7 +4,6 @@ using System.Configuration; using System.Transactions; using NHibernate.Dialect; -using NHibernate.Driver; using NHibernate.Engine; using NUnit.Framework; @@ -62,7 +61,7 @@ public void ShouldBeAbleToReleaseSuppliedConnectionAfterDistributedTransaction() new DummyEnlistment(), EnlistmentOptions.None); - if (Sfi.ConnectionProvider.Driver.GetType() == typeof(OdbcDriver)) + if (Sfi.ConnectionProvider.Driver.GetType().IsOdbcDriver()) connection = new OdbcConnection(connectionString); else connection = new SqlConnection(connectionString); diff --git a/src/NHibernate.Test/NHSpecificTest/NH2660And2661/Test.cs b/src/NHibernate.Test/NHSpecificTest/NH2660And2661/Test.cs index 19e7ae2a6d1..82cb3f662b2 100644 --- a/src/NHibernate.Test/NHSpecificTest/NH2660And2661/Test.cs +++ b/src/NHibernate.Test/NHSpecificTest/NH2660And2661/Test.cs @@ -39,7 +39,7 @@ protected override void Configure(Configuration configuration) { // to be sure we are using the new drive base.Configure(configuration); - configuration.DataBaseIntegration(x=> x.Driver()); + configuration.DataBaseIntegration(x=> x.Driver()); } [Test] diff --git a/src/NHibernate.Test/NHSpecificTest/NH2846/Fixture.cs b/src/NHibernate.Test/NHSpecificTest/NH2846/Fixture.cs index f20da6a7aa3..370e06fce5b 100644 --- a/src/NHibernate.Test/NHSpecificTest/NH2846/Fixture.cs +++ b/src/NHibernate.Test/NHSpecificTest/NH2846/Fixture.cs @@ -1,5 +1,4 @@ using System.Linq; -using NHibernate.Driver; using NHibernate.Linq; using NUnit.Framework; @@ -10,7 +9,7 @@ public class Fixture : BugTestCase { protected override bool AppliesTo(Engine.ISessionFactoryImplementor factory) { - return !(factory.ConnectionProvider.Driver is OracleManagedDataClientDriver); + return !(factory.ConnectionProvider.Driver.IsOracleManagedDataClientDriver()); } protected override void OnSetUp() diff --git a/src/NHibernate.Test/NHSpecificTest/NH2852/Fixture.cs b/src/NHibernate.Test/NHSpecificTest/NH2852/Fixture.cs index 9ab184192f2..0646e67d5e9 100644 --- a/src/NHibernate.Test/NHSpecificTest/NH2852/Fixture.cs +++ b/src/NHibernate.Test/NHSpecificTest/NH2852/Fixture.cs @@ -1,5 +1,4 @@ using System.Linq; -using NHibernate.Driver; using NHibernate.Linq; using NUnit.Framework; @@ -10,7 +9,7 @@ public class Fixture : BugTestCase { protected override bool AppliesTo(Engine.ISessionFactoryImplementor factory) { - return !(factory.ConnectionProvider.Driver is OracleManagedDataClientDriver); + return !(factory.ConnectionProvider.Driver.IsOracleManagedDataClientDriver()); } protected override void OnSetUp() @@ -81,4 +80,4 @@ public void AlsoFails() } } } -} \ No newline at end of file +} diff --git a/src/NHibernate.Test/NHSpecificTest/NH3004/Fixture.cs b/src/NHibernate.Test/NHSpecificTest/NH3004/Fixture.cs index 706eb379177..8ea465009c0 100644 --- a/src/NHibernate.Test/NHSpecificTest/NH3004/Fixture.cs +++ b/src/NHibernate.Test/NHSpecificTest/NH3004/Fixture.cs @@ -13,7 +13,7 @@ public void RemoveUnusedCommandParametersBug_1() /* UseNamedPrefixInSql is true * UseNamedPrefixInParameter is false * */ - var driver = new TestSqlClientDriver(true, false); + var driver = new TestSqlServerDriver(true, false); RunTest(driver); } @@ -24,12 +24,12 @@ public void RemoveUnusedCommandParametersBug_2() /* UseNamedPrefixInSql is true * UseNamedPrefixInParameter is true * */ - var driver = new TestSqlClientDriver(true, true); + var driver = new TestSqlServerDriver(true, true); RunTest(driver); } - private static void RunTest(TestSqlClientDriver driver) + private static void RunTest(TestSqlServerDriver driver) { var command = driver.CreateCommand(); diff --git a/src/NHibernate.Test/NHSpecificTest/NH3004/FixtureObsolete.cs b/src/NHibernate.Test/NHSpecificTest/NH3004/FixtureObsolete.cs new file mode 100644 index 00000000000..cb357f3d473 --- /dev/null +++ b/src/NHibernate.Test/NHSpecificTest/NH3004/FixtureObsolete.cs @@ -0,0 +1,59 @@ +using System; +using System.Collections; +using NHibernate.SqlCommand; +using NUnit.Framework; + +namespace NHibernate.Test.NHSpecificTest.NH3004 +{ + [TestFixture] + [Obsolete("Uses old driver")] + public class FixtureObsolete + { + [Test] + public void RemoveUnusedCommandParametersBug_1() + { + /* UseNamedPrefixInSql is true + * UseNamedPrefixInParameter is false + * */ + var driver = new TestSqlClientDriver(true, false); + + RunTest(driver); + } + + [Test] + public void RemoveUnusedCommandParametersBug_2() + { + /* UseNamedPrefixInSql is true + * UseNamedPrefixInParameter is true + * */ + var driver = new TestSqlClientDriver(true, true); + + RunTest(driver); + } + + private static void RunTest(TestSqlClientDriver driver) + { + var command = driver.CreateCommand(); + + var usedParam = command.CreateParameter(); + usedParam.ParameterName = driver.FormatNameForParameter("p0"); + command.Parameters.Add(usedParam); + + var unusedParam = command.CreateParameter(); + unusedParam.ParameterName = driver.FormatNameForParameter("unused"); + command.Parameters.Add(unusedParam); + + Assert.AreEqual(command.Parameters.Count, 2); + + SqlString sqlString = new SqlStringBuilder() + .AddParameter() + .ToSqlString(); + + driver.RemoveUnusedCommandParameters(command, sqlString); + + Assert.AreEqual(command.Parameters.Count, 1); + + Assert.AreEqual(command.Parameters[0], usedParam); + } + } +} diff --git a/src/NHibernate.Test/NHSpecificTest/NH3004/TestSqlClientDriver.cs b/src/NHibernate.Test/NHSpecificTest/NH3004/TestSqlClientDriver.cs index 24297856ff0..52a8b962569 100644 --- a/src/NHibernate.Test/NHSpecificTest/NH3004/TestSqlClientDriver.cs +++ b/src/NHibernate.Test/NHSpecificTest/NH3004/TestSqlClientDriver.cs @@ -1,3 +1,4 @@ +using System; using System.Data.SqlClient; using NHibernate.AdoNet; using NHibernate.Dialect; @@ -11,6 +12,7 @@ namespace NHibernate.Test.NHSpecificTest.NH3004 /// /// A NHibernate Driver for using the SqlClient DataProvider /// + [Obsolete("Uses old driver")] public class TestSqlClientDriver : SqlClientDriver { bool _UseNamedPrefixInSql = true; @@ -38,4 +40,4 @@ public override bool UseNamedPrefixInParameter get { return _UseNamedPrefixInParameter; } } } -} \ No newline at end of file +} diff --git a/src/NHibernate.Test/NHSpecificTest/NH3004/TestSqlServerDriver.cs b/src/NHibernate.Test/NHSpecificTest/NH3004/TestSqlServerDriver.cs new file mode 100644 index 00000000000..961e1a30a79 --- /dev/null +++ b/src/NHibernate.Test/NHSpecificTest/NH3004/TestSqlServerDriver.cs @@ -0,0 +1,35 @@ +using NHibernate.Driver; + +namespace NHibernate.Test.NHSpecificTest.NH3004 +{ + /// + /// A NHibernate Driver for using the SqlClient DataProvider + /// + public class TestSqlServerDriver : SqlServer2000Driver + { + bool _UseNamedPrefixInSql = true; + bool _UseNamedPrefixInParameter = false; + + public TestSqlServerDriver() + { + + } + + public TestSqlServerDriver(bool UseNamedPrefixInSql, bool UseNamedPrefixInParameter) + { + _UseNamedPrefixInSql = UseNamedPrefixInSql; + _UseNamedPrefixInParameter = UseNamedPrefixInParameter; + } + + public override bool UseNamedPrefixInSql + { + get { return _UseNamedPrefixInSql; } + + } + + public override bool UseNamedPrefixInParameter + { + get { return _UseNamedPrefixInParameter; } + } + } +} diff --git a/src/NHibernate.Test/NHSpecificTest/NH3023/DeadlockConnectionPoolIssueTest.cs b/src/NHibernate.Test/NHSpecificTest/NH3023/DeadlockConnectionPoolIssueTest.cs index f460546d6ad..e2fa79bec3a 100644 --- a/src/NHibernate.Test/NHSpecificTest/NH3023/DeadlockConnectionPoolIssueTest.cs +++ b/src/NHibernate.Test/NHSpecificTest/NH3023/DeadlockConnectionPoolIssueTest.cs @@ -10,7 +10,6 @@ using log4net.Repository.Hierarchy; using NHibernate.Cfg; using NHibernate.Dialect; -using NHibernate.Driver; using NHibernate.Engine; using NUnit.Framework; @@ -32,7 +31,7 @@ protected override void Configure(Configuration configuration) // Uses directly SqlConnection. protected override bool AppliesTo(ISessionFactoryImplementor factory) => - factory.ConnectionProvider.Driver is SqlClientDriver && + factory.ConnectionProvider.Driver.IsSqlClientDriver() && factory.ConnectionProvider.Driver.SupportsSystemTransactions; protected override bool AppliesTo(Dialect.Dialect dialect) => diff --git a/src/NHibernate.Test/NHSpecificTest/NH3121/Fixture.cs b/src/NHibernate.Test/NHSpecificTest/NH3121/Fixture.cs index 353d93e06fb..ccf19f218e0 100644 --- a/src/NHibernate.Test/NHSpecificTest/NH3121/Fixture.cs +++ b/src/NHibernate.Test/NHSpecificTest/NH3121/Fixture.cs @@ -3,7 +3,6 @@ using System.Linq; using System.Reflection; using NHibernate.Dialect; -using NHibernate.Driver; using NUnit.Framework; namespace NHibernate.Test.NHSpecificTest.NH3121 @@ -24,10 +23,10 @@ protected override bool AppliesTo(Dialect.Dialect dialect) [Test] public void ShouldThrowWhenByteArrayTooLong() { - // For SQL Server only the SqlClientDriver sets parameter lengths + // For SQL Server only the SqlServer2000Driver sets parameter lengths // even when there is no length specified in the mapping. The ODBC // driver won't cause the truncation issue and hence not the exception. - if (!(Sfi.ConnectionProvider.Driver is SqlClientDriver)) + if (!(Sfi.ConnectionProvider.Driver.IsSqlClientDriver())) Assert.Ignore("Test limited to drivers that sets parameter length even with no length specified in the mapping."); const int reportSize = 17158; diff --git a/src/NHibernate.Test/NHSpecificTest/NH3142/ChildrenTest.cs b/src/NHibernate.Test/NHSpecificTest/NH3142/ChildrenTest.cs index cc1b1d1d6d7..b3ed2a39e57 100644 --- a/src/NHibernate.Test/NHSpecificTest/NH3142/ChildrenTest.cs +++ b/src/NHibernate.Test/NHSpecificTest/NH3142/ChildrenTest.cs @@ -1,7 +1,6 @@ using System; using System.Collections; using System.Collections.Generic; -using NHibernate.Driver; using NUnit.Framework; namespace NHibernate.Test.NHSpecificTest.NH3142 @@ -11,7 +10,7 @@ public class ChildrenTest : BugTestCase { protected override bool AppliesTo(Engine.ISessionFactoryImplementor factory) { - return !(factory.ConnectionProvider.Driver is OracleManagedDataClientDriver); + return !(factory.ConnectionProvider.Driver.IsOracleManagedDataClientDriver()); } protected override void OnSetUp() diff --git a/src/NHibernate.Test/NHSpecificTest/NH3202/Fixture.cs b/src/NHibernate.Test/NHSpecificTest/NH3202/Fixture.cs index 8734c483c18..45b3ddd62ff 100644 --- a/src/NHibernate.Test/NHSpecificTest/NH3202/Fixture.cs +++ b/src/NHibernate.Test/NHSpecificTest/NH3202/Fixture.cs @@ -16,7 +16,7 @@ protected override void Configure(Configuration configuration) if (!(Dialect is MsSql2008Dialect)) Assert.Ignore("Test is for MS SQL Server dialect only (custom dialect)."); - if (!typeof(SqlClientDriver).IsAssignableFrom(ReflectHelper.ClassForName(cfg.GetProperty(Environment.ConnectionDriver)))) + if (!ReflectHelper.ClassForName(cfg.GetProperty(Environment.ConnectionDriver)).IsSqlClientDriver()) Assert.Ignore("Test is for MS SQL Server driver only (custom driver is used)."); cfg.SetProperty(Environment.Dialect, typeof(OffsetStartsAtOneTestDialect).AssemblyQualifiedName); @@ -98,14 +98,8 @@ public void OffsetStartingAtOneSetsParameterToSkipValuePlusOne() } } - public class OffsetStartsAtOneTestDialect : MsSql2008Dialect - { - public bool ForceOffsetStartsAtOne { get; set; } - public override bool OffsetStartsAtOne { get { return ForceOffsetStartsAtOne; } } - } - - public class OffsetTestDriver : SqlClientDriver + public class OffsetTestDriver : SqlServer2000Driver { public OffsetStartsAtOneTestDialect OffsetStartsAtOneTestDialect; private int _offsetParameterIndex = 1; diff --git a/src/NHibernate.Test/NHSpecificTest/NH3202/FixtureObsolete.cs b/src/NHibernate.Test/NHSpecificTest/NH3202/FixtureObsolete.cs new file mode 100644 index 00000000000..0a5cefbe271 --- /dev/null +++ b/src/NHibernate.Test/NHSpecificTest/NH3202/FixtureObsolete.cs @@ -0,0 +1,125 @@ +using System; +using System.Data.Common; +using System.Text.RegularExpressions; +using NHibernate.Cfg; +using NHibernate.Dialect; +using NHibernate.Driver; +using NHibernate.Util; +using NUnit.Framework; +using Environment = NHibernate.Cfg.Environment; + +namespace NHibernate.Test.NHSpecificTest.NH3202 +{ + [TestFixture] + [Obsolete("Uses old driver")] + public class FixtureObsolete : BugTestCase + { + protected override void Configure(Configuration configuration) + { + if (!(Dialect is MsSql2008Dialect)) + Assert.Ignore("Test is for MS SQL Server dialect only (custom dialect)."); + + if (!ReflectHelper.ClassForName(cfg.GetProperty(Environment.ConnectionDriver)).IsSqlClientDriver()) + Assert.Ignore("Test is for MS SQL Server driver only (custom driver is used)."); + + cfg.SetProperty(Environment.Dialect, typeof(OffsetStartsAtOneTestDialect).AssemblyQualifiedName); + cfg.SetProperty(Environment.ConnectionDriver, typeof(OffsetTestObsoleteDriver).AssemblyQualifiedName); + } + + private OffsetStartsAtOneTestDialect OffsetStartsAtOneTestDialect + { + get { return (OffsetStartsAtOneTestDialect)Sfi.Dialect; } + } + + private OffsetTestObsoleteDriver CustomDriver + { + get { return (OffsetTestObsoleteDriver)Sfi.ConnectionProvider.Driver; } + } + + protected override void OnSetUp() + { + CustomDriver.OffsetStartsAtOneTestDialect = OffsetStartsAtOneTestDialect; + + base.OnSetUp(); + + using (var session = OpenSession()) + using (var transaction = session.BeginTransaction()) + { + session.Save(new SequencedItem(1)); + session.Save(new SequencedItem(2)); + session.Save(new SequencedItem(3)); + + session.Flush(); + transaction.Commit(); + } + } + + protected override void OnTearDown() + { + using (ISession s = OpenSession()) + using (ITransaction t = s.BeginTransaction()) + { + s.Delete("from SequencedItem"); + t.Commit(); + } + base.OnTearDown(); + } + + + [Test] + public void OffsetNotStartingAtOneSetsParameterToSkipValue() + { + OffsetStartsAtOneTestDialect.ForceOffsetStartsAtOne = false; + + using (var session = OpenSession()) + { + var item2 = + session.QueryOver() + .OrderBy(i => i.I).Asc + .Take(1).Skip(2) + .SingleOrDefault(); + + Assert.That(CustomDriver.OffsetParameterValueFromCommand, Is.EqualTo(2)); + } + } + + [Test] + public void OffsetStartingAtOneSetsParameterToSkipValuePlusOne() + { + OffsetStartsAtOneTestDialect.ForceOffsetStartsAtOne = true; + + using (var session = OpenSession()) + { + var item2 = + session.QueryOver() + .OrderBy(i => i.I).Asc + .Take(1).Skip(2) + .SingleOrDefault(); + + Assert.That(CustomDriver.OffsetParameterValueFromCommand, Is.EqualTo(3)); + } + } + } + + + [Obsolete("Uses old driver")] + public class OffsetTestObsoleteDriver : SqlClientDriver + { + public OffsetStartsAtOneTestDialect OffsetStartsAtOneTestDialect; + private int _offsetParameterIndex = 1; + + public int? OffsetParameterValueFromCommand { get; private set; } + + protected override void OnBeforePrepare(DbCommand command) + { + base.OnBeforePrepare(command); + OffsetParameterValueFromCommand = null; + + bool hasLimit = new Regex(@"select\s+top").IsMatch(command.CommandText.ToLower()); + if (!hasLimit) + return; + + OffsetParameterValueFromCommand = (int)command.Parameters[_offsetParameterIndex].Value; + } + } +} diff --git a/src/NHibernate.Test/NHSpecificTest/NH3202/OffsetStartsAtOneTestDialect.cs b/src/NHibernate.Test/NHSpecificTest/NH3202/OffsetStartsAtOneTestDialect.cs new file mode 100644 index 00000000000..adc4a57a6a0 --- /dev/null +++ b/src/NHibernate.Test/NHSpecificTest/NH3202/OffsetStartsAtOneTestDialect.cs @@ -0,0 +1,10 @@ +using NHibernate.Dialect; + +namespace NHibernate.Test.NHSpecificTest.NH3202 +{ + public class OffsetStartsAtOneTestDialect : MsSql2008Dialect + { + public bool ForceOffsetStartsAtOne { get; set; } + public override bool OffsetStartsAtOne { get { return ForceOffsetStartsAtOne; } } + } +} \ No newline at end of file diff --git a/src/NHibernate.Test/NHSpecificTest/NH3252/Fixture.cs b/src/NHibernate.Test/NHSpecificTest/NH3252/Fixture.cs index 2638158af72..1483a4db734 100644 --- a/src/NHibernate.Test/NHSpecificTest/NH3252/Fixture.cs +++ b/src/NHibernate.Test/NHSpecificTest/NH3252/Fixture.cs @@ -1,6 +1,5 @@ using System; using System.Linq; -using NHibernate.Driver; using NHibernate.Engine; using NHibernate.Linq; using NUnit.Framework; @@ -12,7 +11,7 @@ public class Fixture : BugTestCase { protected override bool AppliesTo(ISessionFactoryImplementor factory) { - return factory.ConnectionProvider.Driver is SqlClientDriver; + return factory.ConnectionProvider.Driver.IsSqlClientDriver(); } [Test] diff --git a/src/NHibernate.Test/NHSpecificTest/NH3405/Fixture.cs b/src/NHibernate.Test/NHSpecificTest/NH3405/Fixture.cs index d687fc1dcb5..9ae781a5fc0 100644 --- a/src/NHibernate.Test/NHSpecificTest/NH3405/Fixture.cs +++ b/src/NHibernate.Test/NHSpecificTest/NH3405/Fixture.cs @@ -4,7 +4,6 @@ using NHibernate.Cfg; using NHibernate.Cfg.MappingSchema; using NHibernate.Dialect; -using NHibernate.Driver; using NHibernate.Engine; using NHibernate.Linq; using NHibernate.Mapping.ByCode; @@ -34,7 +33,7 @@ protected override bool AppliesTo(Dialect.Dialect dialect) protected override bool AppliesTo(ISessionFactoryImplementor factory) { // No Xml support with Odbc (and likely OleDb too). - return factory.ConnectionProvider.Driver is SqlClientDriver; + return factory.ConnectionProvider.Driver.IsSqlClientDriver(); } protected override HbmMapping GetMappings() diff --git a/src/NHibernate.Test/NHSpecificTest/NH3518/XmlColumnTest.cs b/src/NHibernate.Test/NHSpecificTest/NH3518/XmlColumnTest.cs index 832f8f30cb4..114bc3debee 100644 --- a/src/NHibernate.Test/NHSpecificTest/NH3518/XmlColumnTest.cs +++ b/src/NHibernate.Test/NHSpecificTest/NH3518/XmlColumnTest.cs @@ -1,7 +1,6 @@ using System.Xml; using NHibernate.Cfg; using NHibernate.Dialect; -using NHibernate.Driver; using NHibernate.Engine; using NUnit.Framework; @@ -27,7 +26,7 @@ protected override bool AppliesTo(Dialect.Dialect dialect) protected override bool AppliesTo(ISessionFactoryImplementor factory) { - return factory.ConnectionProvider.Driver is SqlClientDriver; + return factory.ConnectionProvider.Driver.IsSqlClientDriver(); } protected override void Configure(Configuration configuration) diff --git a/src/NHibernate.Test/NHSpecificTest/NH3620/Fixture.cs b/src/NHibernate.Test/NHSpecificTest/NH3620/Fixture.cs index 232c5016cc9..f9b53041236 100644 --- a/src/NHibernate.Test/NHSpecificTest/NH3620/Fixture.cs +++ b/src/NHibernate.Test/NHSpecificTest/NH3620/Fixture.cs @@ -1,12 +1,11 @@ using System; -using NHibernate.Driver; using NUnit.Framework; namespace NHibernate.Test.NHSpecificTest.NH3620 { [TestFixture] public class Fixture : BugTestCase { protected override bool AppliesTo(Engine.ISessionFactoryImplementor factory) { - return (factory.ConnectionProvider.Driver is OracleManagedDataClientDriver); + return (factory.ConnectionProvider.Driver.IsOracleManagedDataClientDriver()); } protected override void OnTearDown() { @@ -40,4 +39,4 @@ private void CleanupData() { } } } -} \ No newline at end of file +} diff --git a/src/NHibernate.Test/NHSpecificTest/NH3844/Fixture.cs b/src/NHibernate.Test/NHSpecificTest/NH3844/Fixture.cs index d8cca9fe754..e4a64852bd9 100644 --- a/src/NHibernate.Test/NHSpecificTest/NH3844/Fixture.cs +++ b/src/NHibernate.Test/NHSpecificTest/NH3844/Fixture.cs @@ -1,5 +1,4 @@ using System.Linq; -using NHibernate.Driver; using NHibernate.Engine; using NHibernate.Linq; using NUnit.Framework; @@ -17,7 +16,7 @@ protected override bool AppliesTo(Dialect.Dialect dialect) protected override bool AppliesTo(ISessionFactoryImplementor factory) { // SQL Server seems unable to match complex group by and select list arguments when running over ODBC."; - return !(factory.ConnectionProvider.Driver is OdbcDriver); + return !(factory.ConnectionProvider.Driver.IsOdbcDriver()); } protected override void OnSetUp() diff --git a/src/NHibernate.Test/NHSpecificTest/NH3850/Fixture.cs b/src/NHibernate.Test/NHSpecificTest/NH3850/Fixture.cs index cb3f7d48245..5bae8e45eba 100644 --- a/src/NHibernate.Test/NHSpecificTest/NH3850/Fixture.cs +++ b/src/NHibernate.Test/NHSpecificTest/NH3850/Fixture.cs @@ -5,7 +5,6 @@ using System.Linq; using System.Reflection; using System.Text; -using NHibernate.Driver; using NHibernate.Linq; using NHibernate.SqlTypes; using NHibernate.Util; @@ -30,7 +29,7 @@ protected override bool AppliesTo(Dialect.Dialect dialect) protected override bool AppliesTo(Engine.ISessionFactoryImplementor factory) { // Cannot handle DbType.DateTimeOffset via ODBC. - return !(factory.ConnectionProvider.Driver is OdbcDriver); + return !(factory.ConnectionProvider.Driver.IsOdbcDriver()); } protected override void OnSetUp() diff --git a/src/NHibernate.Test/NHSpecificTest/NH3912/ReusableBatcherFixture.cs b/src/NHibernate.Test/NHSpecificTest/NH3912/ReusableBatcherFixture.cs index 396fd38a48a..d803ea9de98 100644 --- a/src/NHibernate.Test/NHSpecificTest/NH3912/ReusableBatcherFixture.cs +++ b/src/NHibernate.Test/NHSpecificTest/NH3912/ReusableBatcherFixture.cs @@ -3,7 +3,6 @@ using NHibernate.AdoNet; using NHibernate.Cfg; using NHibernate.Cfg.MappingSchema; -using NHibernate.Driver; using NHibernate.Engine; using NHibernate.Linq; using NHibernate.Mapping.ByCode; @@ -17,9 +16,9 @@ public class ReusableBatcherFixture : TestCaseMappingByCode protected override bool AppliesTo(ISessionFactoryImplementor factory) { var driver = factory.ConnectionProvider.Driver; - return driver is OracleDataClientDriver || - driver is OracleLiteDataClientDriver || - driver is OracleManagedDataClientDriver; + return driver.IsOracleDataClientDriver() || + driver.IsOracleLiteDataClientDriver() || + driver.IsOracleManagedDataClientDriver(); } protected override HbmMapping GetMappings() diff --git a/src/NHibernate.Test/NHSpecificTest/SqlConverterAndMultiQuery/Fixture.cs b/src/NHibernate.Test/NHSpecificTest/SqlConverterAndMultiQuery/Fixture.cs index 5d822391ca9..312495477ff 100644 --- a/src/NHibernate.Test/NHSpecificTest/SqlConverterAndMultiQuery/Fixture.cs +++ b/src/NHibernate.Test/NHSpecificTest/SqlConverterAndMultiQuery/Fixture.cs @@ -1,5 +1,4 @@ using NHibernate.Cfg; -using NHibernate.Driver; using NHibernate.Engine; using NUnit.Framework; @@ -21,7 +20,7 @@ protected override bool AppliesTo(ISessionFactoryImplementor factory) // tend to (validly) send InvalidOperationException during prepare phase due to the closed // connection, which get not converted. For testing other case, maybe a failure caused by a // schema mismatch (like done in transaction tests) would be better. - return factory.ConnectionProvider.Driver is SqlClientDriver; + return factory.ConnectionProvider.Driver.IsSqlClientDriver(); } [Test] diff --git a/src/NHibernate.Test/NHibernate.Test.csproj b/src/NHibernate.Test/NHibernate.Test.csproj index f6b65d9db1d..5d2c79cfd8e 100644 --- a/src/NHibernate.Test/NHibernate.Test.csproj +++ b/src/NHibernate.Test/NHibernate.Test.csproj @@ -53,8 +53,6 @@ - - @@ -62,37 +60,26 @@ - - - - - - - - - - - %(RecursiveDir)%(Filename)%(Extension) - PreserveNewest - - - - - - %(RecursiveDir)%(Filename)%(Extension) - PreserveNewest - + + + + + + + + + diff --git a/src/NHibernate.Test/Pagination/CustomDialectFixture.cs b/src/NHibernate.Test/Pagination/CustomDialectFixture.cs index 3ff7517e819..05cc45e0bdc 100644 --- a/src/NHibernate.Test/Pagination/CustomDialectFixture.cs +++ b/src/NHibernate.Test/Pagination/CustomDialectFixture.cs @@ -3,7 +3,6 @@ using NHibernate.Cfg; using NHibernate.Criterion; using NHibernate.Dialect; -using NHibernate.Driver; using NHibernate.Util; using NUnit.Framework; using Environment = NHibernate.Cfg.Environment; @@ -29,7 +28,7 @@ protected override void Configure(Configuration configuration) if (!(Dialect is MsSql2005Dialect)) Assert.Ignore("Test is for SQL dialect only"); var driverClass = ReflectHelper.ClassForName(cfg.GetProperty(Environment.ConnectionDriver)); - if (!typeof(SqlClientDriver).IsAssignableFrom(driverClass)) + if (!driverClass.IsSqlClientDriver()) Assert.Ignore("Test is compatible only with Sql Server Client driver connection strings"); cfg.SetProperty(Environment.Dialect, typeof(CustomMsSqlDialect).AssemblyQualifiedName); @@ -123,4 +122,4 @@ public void LimitFirstMultiCriteria() } } } -} \ No newline at end of file +} diff --git a/src/NHibernate.Test/Pagination/CustomMsSqlDriver.cs b/src/NHibernate.Test/Pagination/CustomMsSqlDriver.cs index 3ba118a3d7f..5c1319be06f 100644 --- a/src/NHibernate.Test/Pagination/CustomMsSqlDriver.cs +++ b/src/NHibernate.Test/Pagination/CustomMsSqlDriver.cs @@ -1,7 +1,5 @@ using System.Data.Common; -using System.Text.RegularExpressions; using NHibernate.Driver; -using NUnit.Framework; namespace NHibernate.Test.Pagination { @@ -9,7 +7,7 @@ namespace NHibernate.Test.Pagination /// Class to work with CustomMsSqlDialect to allow /// verification of simulated limit parameters /// - public class CustomMsSqlDriver : SqlClientDriver + public class CustomMsSqlDriver : SqlServer2000Driver { public CustomMsSqlDialect CustomMsSqlDialect; @@ -33,4 +31,4 @@ protected override void OnBeforePrepare(DbCommand command) base.OnBeforePrepare(command); } } -} \ No newline at end of file +} diff --git a/src/NHibernate.Test/SqlTest/Custom/Oracle/OracleCustomSQLFixture.cs b/src/NHibernate.Test/SqlTest/Custom/Oracle/OracleCustomSQLFixture.cs index d30f493cfe8..1db753cc697 100644 --- a/src/NHibernate.Test/SqlTest/Custom/Oracle/OracleCustomSQLFixture.cs +++ b/src/NHibernate.Test/SqlTest/Custom/Oracle/OracleCustomSQLFixture.cs @@ -14,7 +14,7 @@ protected override IList Mappings protected override bool AppliesTo(NHibernate.Engine.ISessionFactoryImplementor factory) { - return factory.ConnectionProvider.Driver is Driver.OracleDataClientDriver; + return factory.ConnectionProvider.Driver.IsOracleDataClientDriver(); } protected override bool AppliesTo(Dialect.Dialect dialect) @@ -57,4 +57,4 @@ public void RefCursorOutStoredProcedure() } } -} \ No newline at end of file +} diff --git a/src/NHibernate.Test/SqlTest/Identity/MsSQL/MSSQLIdentityInsertWithStoredProcsTest.cs b/src/NHibernate.Test/SqlTest/Identity/MsSQL/MSSQLIdentityInsertWithStoredProcsTest.cs index ab0abc53a0c..031f69dd0f2 100644 --- a/src/NHibernate.Test/SqlTest/Identity/MsSQL/MSSQLIdentityInsertWithStoredProcsTest.cs +++ b/src/NHibernate.Test/SqlTest/Identity/MsSQL/MSSQLIdentityInsertWithStoredProcsTest.cs @@ -1,6 +1,5 @@ using System.Collections; using NHibernate.Dialect; -using NHibernate.Driver; using NHibernate.Engine; using NUnit.Framework; @@ -17,7 +16,7 @@ protected override bool AppliesTo(Dialect.Dialect dialect) protected override bool AppliesTo(ISessionFactoryImplementor factory) { // Tested resulting SQL depends on driver. - return factory.ConnectionProvider.Driver is SqlClientDriver; + return factory.ConnectionProvider.Driver.IsSqlClientDriver(); } protected override string GetExpectedInsertOrgLogStatement(string orgName) diff --git a/src/NHibernate.Test/SystemTransactions/SystemTransactionFixture.cs b/src/NHibernate.Test/SystemTransactions/SystemTransactionFixture.cs index 12c4cc12d1d..95a30c0a6cf 100644 --- a/src/NHibernate.Test/SystemTransactions/SystemTransactionFixture.cs +++ b/src/NHibernate.Test/SystemTransactions/SystemTransactionFixture.cs @@ -4,9 +4,7 @@ using System.Threading; using System.Transactions; using NHibernate.Cfg; -using NHibernate.Driver; using NHibernate.Engine; -using NHibernate.Linq; using NHibernate.Test.TransactionTest; using NUnit.Framework; @@ -179,7 +177,7 @@ public void CanUseSessionWithManyScopes(bool explicitFlush) // ODBC with SQL-Server always causes scopes to go distributed, which causes their transaction completion to run // asynchronously. But ODBC enlistment also check the previous transaction in a way that do not guard against it // being concurrently disposed of. See https://github.com/nhibernate/nhibernate-core/pull/1505 for more details. - Assume.That(!(Sfi.ConnectionProvider.Driver is OdbcDriver), + Assume.That(!(Sfi.ConnectionProvider.Driver.IsOdbcDriver()), "ODBC sometimes fails on second scope by checking the previous transaction status, which may yield an object disposed exception"); using (var s = WithOptions().ConnectionReleaseMode(ConnectionReleaseMode.OnClose).OpenSession()) diff --git a/src/NHibernate.Test/SystemTransactions/SystemTransactionFixtureBase.cs b/src/NHibernate.Test/SystemTransactions/SystemTransactionFixtureBase.cs index 6a13a609c2a..eb31c95f8c3 100644 --- a/src/NHibernate.Test/SystemTransactions/SystemTransactionFixtureBase.cs +++ b/src/NHibernate.Test/SystemTransactions/SystemTransactionFixtureBase.cs @@ -1,7 +1,6 @@ using System; using System.Text.RegularExpressions; using NHibernate.Cfg; -using NHibernate.Driver; using NHibernate.Engine; using NHibernate.Test.TransactionTest; using NHibernate.Util; @@ -32,7 +31,7 @@ protected void DisableConnectionAutoEnlist(Configuration configuration) var autoEnlistmentKeyword = "Enlist"; var autoEnlistmentKeywordPattern = autoEnlistmentKeyword; if (configuration.GetDerivedProperties().TryGetValue(Cfg.Environment.ConnectionDriver, out var driver) && - typeof(MySqlDataDriver).IsAssignableFrom(ReflectHelper.ClassForName(driver))) + ReflectHelper.ClassForName(driver).IsMySqlDataDriver()) { autoEnlistmentKeyword = "AutoEnlist"; autoEnlistmentKeywordPattern = "Auto ?Enlist"; @@ -143,4 +142,4 @@ public override void AfterTransactionCompletion(ITransaction tx) } } } -} \ No newline at end of file +} diff --git a/src/NHibernate.Test/TestCase.cs b/src/NHibernate.Test/TestCase.cs index 13f82daf61e..6cdc58ae4f4 100644 --- a/src/NHibernate.Test/TestCase.cs +++ b/src/NHibernate.Test/TestCase.cs @@ -15,7 +15,6 @@ using NUnit.Framework.Interfaces; using System.Text; using NHibernate.Dialect; -using NHibernate.Driver; namespace NHibernate.Test { @@ -296,16 +295,13 @@ protected virtual void DropSchema() public static void DropSchema(bool useStdOut, SchemaExport export, ISessionFactoryImplementor sfi) { - if (sfi?.ConnectionProvider.Driver is FirebirdClientDriver fbDriver) - { - // Firebird will pool each connection created during the test and will marked as used any table - // referenced by queries. It will at best delays those tables drop until connections are actually - // closed, or immediately fail dropping them. - // This results in other tests failing when they try to create tables with same name. - // By clearing the connection pool the tables will get dropped. This is done by the following code. - // Moved from NH1908 test case, contributed by Amro El-Fakharany. - fbDriver.ClearPool(null); - } + // Firebird will pool each connection created during the test and will marked as used any table + // referenced by queries. It will at best delays those tables drop until connections are actually + // closed, or immediately fail dropping them. + // This results in other tests failing when they try to create tables with same name. + // By clearing the connection pool the tables will get dropped. This is done by the following code. + // Moved from NH1908 test case, contributed by Amro El-Fakharany. + sfi?.ConnectionProvider.Driver.ClearPoolForFirebirdClientDriver(); export.Drop(useStdOut, true); } diff --git a/src/NHibernate.Test/TestEmbeddedConfig.cfg.xml b/src/NHibernate.Test/TestEmbeddedConfig.cfg.xml index 25058dae03a..6ba543f0cb3 100644 --- a/src/NHibernate.Test/TestEmbeddedConfig.cfg.xml +++ b/src/NHibernate.Test/TestEmbeddedConfig.cfg.xml @@ -3,10 +3,10 @@ NHibernate.Test.DebugConnectionProvider, NHibernate.Test NHibernate.Cache.HashtableCacheProvider, NHibernate - NHibernate.Driver.SqlClientDriver + NHibernate.Driver.SqlServer2000Driver, NHibernate.Driver.SqlServer Server=localhost;initial catalog=nhibernate;User Id=;Password= true 1, false 0, yes 1, no 0 NHibernate.Dialect.MsSql2000Dialect NHibernate.Test.CfgTest.ConfigurationFixture+SampleQueryProvider, NHibernate.Test - \ No newline at end of file + diff --git a/src/NHibernate.Test/TestingExtensions.cs b/src/NHibernate.Test/TestingExtensions.cs new file mode 100644 index 00000000000..ed93240560b --- /dev/null +++ b/src/NHibernate.Test/TestingExtensions.cs @@ -0,0 +1,136 @@ +using NHibernate.Driver; + +namespace NHibernate.Test +{ + public static class TestingExtensions + { + public static bool IsOdbcDriver(this IDriver driver) + { + if (driver is OdbcDriver) return true; + return false; + } + + public static bool IsOdbcDriver(this System.Type driverClass) + { + if (typeof(OdbcDriver).IsAssignableFrom(driverClass)) return true; + return false; + } + + public static bool IsOleDbDriver(this IDriver driver) + { + if (driver is OleDbDriver) return true; + return false; + } + + public static bool IsOleDbDriver(this System.Type driverClass) + { + if (typeof(OleDbDriver).IsAssignableFrom(driverClass)) return true; + return false; + } + + /// + /// Matches both SQL Server 2000 and 2008 drivers + /// + public static bool IsSqlClientDriver(this IDriver driver) + { +#pragma warning disable 618 + if (driver is SqlClientDriver) return true; +#pragma warning restore 618 + if (driver is SqlServer2000Driver) return true; + return false; + } + + /// + /// Matches both SQL Server 2000 and 2008 drivers + /// + public static bool IsSqlClientDriver(this System.Type driverClass) + { +#pragma warning disable 618 + if (typeof(SqlClientDriver).IsAssignableFrom(driverClass)) return true; +#pragma warning restore 618 + if (typeof(SqlServer2000Driver).IsAssignableFrom(driverClass)) return true; + return false; + } + + public static bool IsSql2008ClientDriver(this IDriver driver) + { +#pragma warning disable 618 + if (driver is Sql2008ClientDriver) return true; +#pragma warning restore 618 + if (driver is SqlServer2008Driver) return true; + return false; + } + + public static bool IsMySqlDataDriver(this System.Type driverClass) + { +#pragma warning disable 618 + if (typeof(MySqlDataDriver).IsAssignableFrom(driverClass)) return true; +#pragma warning restore 618 + if (typeof(MySqlDriver).IsAssignableFrom(driverClass)) return true; + return false; + } + + + public static bool IsFirebirdClientDriver(this IDriver driver) + { +#pragma warning disable 618 + if (driver is FirebirdClientDriver) return true; +#pragma warning restore 618 + if (driver is FirebirdDriver) return true; + return false; + } + + /// + /// If driver is Firebird, clear the pool. + /// Firebird will pool each connection created during the test and will marked as used any table + /// referenced by queries. It will at best delays those tables drop until connections are actually + /// closed, or immediately fail dropping them. + /// This results in other tests failing when they try to create tables with same name. + /// By clearing the connection pool the tables will get dropped. This is done by the following code. + /// Moved from NH1908 test case, contributed by Amro El-Fakharany. + /// + public static void ClearPoolForFirebirdClientDriver(this IDriver driver) + { + switch (driver) + { +#pragma warning disable 618 + case FirebirdClientDriver fbDriver: + fbDriver.ClearPool(null); + break; +#pragma warning restore 618 + case FirebirdDriver fbDriver2: + fbDriver2.ClearPool(null); + break; + } + } + + public static bool IsOracleDataClientDriver(this IDriver driver) + { + if (driver is OracleDataClientDriver) return true; + return false; + } + + public static bool IsOracleDataClientDriver(this System.Type driverClass) + { + if (typeof(OracleDataClientDriver).IsAssignableFrom(driverClass)) return true; + return false; + } + + public static bool IsOracleLiteDataClientDriver(this IDriver driver) + { + if (driver is OracleLiteDataClientDriver) return true; + return false; + } + + public static bool IsOracleManagedDataClientDriver(this IDriver driver) + { +#pragma warning disable 618 + if (driver is OracleManagedDataClientDriver) return true; +#pragma warning restore 618 +#if NETFX + if (driver is OracleManagedDriver) return true; +#endif + return false; + } + } +} diff --git a/src/NHibernate.Test/Tools/hbm2ddl/SchemaMetadataUpdaterTest/SchemaMetadataUpdaterFixture.cs b/src/NHibernate.Test/Tools/hbm2ddl/SchemaMetadataUpdaterTest/SchemaMetadataUpdaterFixture.cs index 62141b92a21..34884cc9762 100644 --- a/src/NHibernate.Test/Tools/hbm2ddl/SchemaMetadataUpdaterTest/SchemaMetadataUpdaterFixture.cs +++ b/src/NHibernate.Test/Tools/hbm2ddl/SchemaMetadataUpdaterTest/SchemaMetadataUpdaterFixture.cs @@ -2,7 +2,6 @@ using System.Collections.Generic; using System.Linq; using NHibernate.Dialect; -using NHibernate.Driver; using NHibernate.Engine; using NHibernate.Mapping; using NHibernate.Tool.hbm2ddl; @@ -104,7 +103,7 @@ public void EnsureReservedWordsHardCodedInDialect() } } - if (sf.ConnectionProvider.Driver is OdbcDriver) + if (sf.ConnectionProvider.Driver.IsOdbcDriver()) { Assert.Inconclusive("ODBC has excess keywords reserved"); } @@ -257,7 +256,7 @@ public void WhenConfiguredOnlyExplicitAutoQuote() var configuration = TestConfigurationHelper.GetDefaultConfiguration(); var driverClass = ReflectHelper.ClassForName(configuration.GetProperty(Environment.ConnectionDriver)); // Test uses the default dialect driver, which will not accept Odbc or OleDb connection strings. - if (typeof(OdbcDriver).IsAssignableFrom(driverClass) || typeof(OleDbDriver).IsAssignableFrom(driverClass)) + if (driverClass.IsOdbcDriver() || driverClass.IsOleDbDriver()) Assert.Ignore("Test is not compatible with OleDb or ODBC driver connection strings"); var configuredDialect = Dialect.Dialect.GetDialect(); if(!configuredDialect.DefaultProperties.ContainsKey(Environment.ConnectionDriver)) diff --git a/src/NHibernate.Test/Tools/hbm2ddl/SchemaUpdate/MigrationFixture.cs b/src/NHibernate.Test/Tools/hbm2ddl/SchemaUpdate/MigrationFixture.cs index 7ccd282a9cb..9e20b80389b 100644 --- a/src/NHibernate.Test/Tools/hbm2ddl/SchemaUpdate/MigrationFixture.cs +++ b/src/NHibernate.Test/Tools/hbm2ddl/SchemaUpdate/MigrationFixture.cs @@ -2,7 +2,6 @@ using System.IO; using System.Reflection; using NHibernate.Cfg; -using NHibernate.Driver; using NHibernate.Tool.hbm2ddl; using NHibernate.Util; using NUnit.Framework; @@ -19,7 +18,7 @@ private void MigrateSchema(string resource1, string resource2) var driverClass = ReflectHelper.ClassForName(v1cfg.GetProperty(Environment.ConnectionDriver)); // Odbc is not supported by schema update: System.Data.Odbc.OdbcConnection.GetSchema("ForeignKeys") fails with an ArgumentException: ForeignKeys is undefined. // It seems it would require its own DataBaseSchema, but this is bound to the dialect, not the driver. - if (typeof(OdbcDriver).IsAssignableFrom(driverClass)) + if (driverClass.IsOdbcDriver()) Assert.Ignore("Test is not compatible with ODBC"); using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resource1)) @@ -65,4 +64,4 @@ public void SimpleColumnReplace() MigrateSchema(resource1, resource2); } } -} \ No newline at end of file +} diff --git a/src/NHibernate.Test/TypesTest/AbstractDateTimeTypeFixture.cs b/src/NHibernate.Test/TypesTest/AbstractDateTimeTypeFixture.cs index ff54e4fab02..9c82e76f58e 100644 --- a/src/NHibernate.Test/TypesTest/AbstractDateTimeTypeFixture.cs +++ b/src/NHibernate.Test/TypesTest/AbstractDateTimeTypeFixture.cs @@ -584,16 +584,13 @@ DbParameter IDriver.GenerateParameter(DbCommand command, string name, SqlType sq public void CleanUp() { - if (_driverImplementation is FirebirdClientDriver fbDriver) - { - // Firebird will pool each connection created during the test and will marked as used any table - // referenced by queries. It will at best delays those tables drop until connections are actually - // closed, or immediately fail dropping them. - // This results in other tests failing when they try to create tables with same name. - // By clearing the connection pool the tables will get dropped. This is done by the following code. - // Moved from NH1908 test case, contributed by Amro El-Fakharany. - fbDriver.ClearPool(null); - } + // Firebird will pool each connection created during the test and will marked as used any table + // referenced by queries. It will at best delays those tables drop until connections are actually + // closed, or immediately fail dropping them. + // This results in other tests failing when they try to create tables with same name. + // By clearing the connection pool the tables will get dropped. This is done by the following code. + // Moved from NH1908 test case, contributed by Amro El-Fakharany. + _driverImplementation.ClearPoolForFirebirdClientDriver(); } #endregion diff --git a/src/NHibernate.Test/TypesTest/DateTime2TypeFixture.cs b/src/NHibernate.Test/TypesTest/DateTime2TypeFixture.cs index 5eec555af67..dd703c724a4 100644 --- a/src/NHibernate.Test/TypesTest/DateTime2TypeFixture.cs +++ b/src/NHibernate.Test/TypesTest/DateTime2TypeFixture.cs @@ -1,5 +1,4 @@ using System; -using NHibernate.Driver; using NHibernate.SqlTypes; using NHibernate.Type; using NUnit.Framework; @@ -18,7 +17,7 @@ protected override bool AppliesTo(Dialect.Dialect dialect) => protected override bool AppliesTo(Engine.ISessionFactoryImplementor factory) => // Cannot handle DbType.DateTime2 via .Net ODBC. - !(factory.ConnectionProvider.Driver is OdbcDriver); + !(factory.ConnectionProvider.Driver.IsOdbcDriver()); protected override string TypeName => "DateTime2"; protected override AbstractDateTimeType Type => NHibernateUtil.DateTime2; @@ -45,7 +44,7 @@ protected override bool AppliesTo(Dialect.Dialect dialect) => protected override bool AppliesTo(Engine.ISessionFactoryImplementor factory) => // Cannot handle DbType.DateTime2 via .Net ODBC. - !(factory.ConnectionProvider.Driver is OdbcDriver); + !(factory.ConnectionProvider.Driver.IsOdbcDriver()); protected override string TypeName => "DateTime2WithScale"; protected override AbstractDateTimeType Type => (AbstractDateTimeType)TypeFactory.GetDateTime2Type(3); diff --git a/src/NHibernate.Test/TypesTest/DateTimeOffsetTypeFixture.cs b/src/NHibernate.Test/TypesTest/DateTimeOffsetTypeFixture.cs index 0881a08e878..664e1635da4 100644 --- a/src/NHibernate.Test/TypesTest/DateTimeOffsetTypeFixture.cs +++ b/src/NHibernate.Test/TypesTest/DateTimeOffsetTypeFixture.cs @@ -2,7 +2,6 @@ using System.Data; using System.Linq; using NHibernate.Cfg; -using NHibernate.Driver; using NHibernate.SqlTypes; using NHibernate.Tool.hbm2ddl; using NHibernate.Type; @@ -26,7 +25,7 @@ protected override bool AppliesTo(Dialect.Dialect dialect) => protected override bool AppliesTo(Engine.ISessionFactoryImplementor factory) => // Cannot handle DbType.DateTimeOffset via .Net ODBC. - !(factory.ConnectionProvider.Driver is OdbcDriver); + !(factory.ConnectionProvider.Driver.IsOdbcDriver()); protected override void Configure(Configuration configuration) { diff --git a/src/NHibernate.Test/TypesTest/StringTypeWithLengthFixture.cs b/src/NHibernate.Test/TypesTest/StringTypeWithLengthFixture.cs index e3e2367f0ea..688cfcc0a73 100644 --- a/src/NHibernate.Test/TypesTest/StringTypeWithLengthFixture.cs +++ b/src/NHibernate.Test/TypesTest/StringTypeWithLengthFixture.cs @@ -3,7 +3,6 @@ using NHibernate.Cfg.MappingSchema; using NHibernate.Criterion; using NHibernate.Dialect; -using NHibernate.Driver; using NHibernate.Exceptions; using NHibernate.Mapping.ByCode; using NUnit.Framework; @@ -66,7 +65,7 @@ protected override void OnTearDown() public void ShouldPreventInsertionOfVeryLongStringThatWouldBeTruncated() { // This test case is for when the current driver will use a parameter size - // that is significantly larger than the mapped column size (e.g. SqlClientDriver currently). + // that is significantly larger than the mapped column size (e.g. SqlServer2000Driver currently). // Note: This test could possible be written as // "database must raise an error OR it must store and return the full value" @@ -119,7 +118,7 @@ public void CanCompareLongValueWithLongString() { var maxStringLength = GetLongStringMappedLength(); - if (Sfi.ConnectionProvider.Driver is OdbcDriver && maxStringLength >= 2000) + if (Sfi.ConnectionProvider.Driver.IsOdbcDriver() && maxStringLength >= 2000) Assert.Ignore("Odbc wrecks nvarchar parameter types when they are longer than 2000, it switch them to ntext"); var longString = new string('x', maxStringLength); diff --git a/src/NHibernate.Test/TypesTest/XDocTypeFixture.cs b/src/NHibernate.Test/TypesTest/XDocTypeFixture.cs index 6d256dc556c..1391c472adc 100644 --- a/src/NHibernate.Test/TypesTest/XDocTypeFixture.cs +++ b/src/NHibernate.Test/TypesTest/XDocTypeFixture.cs @@ -1,6 +1,5 @@ using System.Data; using System.Xml.Linq; -using NHibernate.Driver; using NHibernate.Engine; using NHibernate.SqlTypes; using NHibernate.Type; @@ -24,7 +23,7 @@ protected override bool AppliesTo(Dialect.Dialect dialect) protected override bool AppliesTo(ISessionFactoryImplementor factory) { // No Xml support with Odbc (and likely OleDb too). - return factory.ConnectionProvider.Driver is SqlClientDriver; + return factory.ConnectionProvider.Driver.IsSqlClientDriver(); } [Test] diff --git a/src/NHibernate.Test/TypesTest/XmlDocTypeFixture.cs b/src/NHibernate.Test/TypesTest/XmlDocTypeFixture.cs index 128e83f63be..ee821c56144 100644 --- a/src/NHibernate.Test/TypesTest/XmlDocTypeFixture.cs +++ b/src/NHibernate.Test/TypesTest/XmlDocTypeFixture.cs @@ -1,6 +1,5 @@ using System.Data; using System.Xml; -using NHibernate.Driver; using NHibernate.Engine; using NHibernate.SqlTypes; using NHibernate.Type; @@ -24,7 +23,7 @@ protected override bool AppliesTo(Dialect.Dialect dialect) protected override bool AppliesTo(ISessionFactoryImplementor factory) { // No Xml support with Odbc (and likely OleDb too). - return factory.ConnectionProvider.Driver is SqlClientDriver; + return factory.ConnectionProvider.Driver.IsSqlClientDriver(); } [Test] diff --git a/src/NHibernate.TestDatabaseSetup/App.config b/src/NHibernate.TestDatabaseSetup/App.config index 1fa471187b0..4ae2d69e5c4 100644 --- a/src/NHibernate.TestDatabaseSetup/App.config +++ b/src/NHibernate.TestDatabaseSetup/App.config @@ -1,4 +1,4 @@ - +
- NHibernate.Driver.Sql2008ClientDriver + NHibernate.Driver.SqlServer2008Driver, NHibernate.Driver.SqlServer Server=.\SQLExpress;initial catalog=master;Integrated Security=SSPI diff --git a/src/NHibernate.TestDatabaseSetup/TestDatabaseSetup.cs b/src/NHibernate.TestDatabaseSetup/TestDatabaseSetup.cs index 46944c3abf3..2b5eea03013 100644 --- a/src/NHibernate.TestDatabaseSetup/TestDatabaseSetup.cs +++ b/src/NHibernate.TestDatabaseSetup/TestDatabaseSetup.cs @@ -20,17 +20,25 @@ public class DatabaseSetup private static readonly IDictionary> SetupMethods = new Dictionary> { {"NHibernate.Driver.SqlClientDriver", SetupSqlServer}, + {"NHibernate.Driver.SqlServer2000Driver, NHibernate.Driver.SqlServer", SetupSqlServer}, {"NHibernate.Driver.Sql2008ClientDriver", SetupSqlServer}, + {"NHibernate.Driver.SqlServer2008Driver, NHibernate.Driver.SqlServer", SetupSqlServer}, {"NHibernate.Driver.FirebirdClientDriver", SetupFirebird}, + {"NHibernate.Driver.FirebirdDriver, NHibernate.Driver.Firebird", SetupFirebird}, {"NHibernate.Driver.NpgsqlDriver", SetupNpgsql}, + {"NHibernate.Driver.PostgreSqlDriver, NHibernate.Driver.PostgreSql", SetupNpgsql}, {"NHibernate.Driver.OracleDataClientDriver", SetupOracle}, {"NHibernate.Driver.MySqlDataDriver", SetupMySql}, + {"NHibernate.Driver.MySqlDriver, NHibernate.Driver.MySql", SetupMySql}, {"NHibernate.Driver.OracleClientDriver", SetupOracle}, {"NHibernate.Driver.OracleManagedDataClientDriver", SetupOracle}, + {"NHibernate.Driver.OracleManagedDriver, NHibernate.Driver.Oracle.Managed", SetupOracle}, {"NHibernate.Driver.OdbcDriver", SetupSqlServerOdbc}, #if NETFX {"NHibernate.Driver.SQLite20Driver", SetupSQLite}, - {"NHibernate.Driver.SqlServerCeDriver", SetupSqlServerCe} + {"NHibernate.Driver.SQLiteDriver, NHibernate.Driver.SQLite", SetupSQLite}, + {"NHibernate.Driver.SqlServerCeDriver", SetupSqlServerCe}, + {"NHibernate.Driver.SqlServerCompactDriver, NHibernate.Driver.SqlServer.Compact", SetupSqlServerCe}, #endif }; diff --git a/src/NHibernate.sln b/src/NHibernate.sln index 67d957ed5d6..d425d64e8e3 100644 --- a/src/NHibernate.sln +++ b/src/NHibernate.sln @@ -1,6 +1,6 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 15 -VisualStudioVersion = 15.0.26730.12 +VisualStudioVersion = 15.0.27004.2010 MinimumVisualStudioVersion = 10.0.40219.1 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{593DCEA7-C933-46F3-939F-D8172399AB05}" ProjectSection(SolutionItems) = preProject @@ -24,6 +24,22 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NHibernate.TestDatabaseSetu EndProject Project("{778DAE3C-4631-46EA-AA77-85C1314464D9}") = "NHibernate.Test.VisualBasic", "NHibernate.Test.VisualBasic\NHibernate.Test.VisualBasic.vbproj", "{7C2EF610-BCA0-4D1F-898A-DE9908E4970C}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Drivers", "Drivers", "{2A64334E-8456-4426-B50A-6172C6C3FDD5}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NHibernate.Driver.SqlServer", "NHibernate.Driver.SqlServer\NHibernate.Driver.SqlServer.csproj", "{CF9FEEC5-3403-4F3F-9E4F-F0BAFE95DE39}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NHibernate.Driver.SQLite", "NHibernate.Driver.SQLite\NHibernate.Driver.SQLite.csproj", "{99FE5A5C-F732-40A3-BEE6-ED5ADC393862}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NHibernate.Driver.PostgreSql", "NHibernate.Driver.PostgreSql\NHibernate.Driver.PostgreSql.csproj", "{C7C835DC-0A59-4227-9C3C-0AF0633CD68C}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NHibernate.Driver.Oracle.Managed", "NHibernate.Driver.Oracle.Managed\NHibernate.Driver.Oracle.Managed.csproj", "{22409381-1808-4F0A-9C42-9FAA6B3BCFA2}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NHibernate.Driver.Firebird", "NHibernate.Driver.Firebird\NHibernate.Driver.Firebird.csproj", "{DADD54C1-3679-4672-9774-9362428EB9E0}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NHibernate.Driver.SqlServer.Compact", "NHibernate.Driver.SqlServer.Compact\NHibernate.Driver.SqlServer.Compact.csproj", "{11B3C504-D501-4766-AC36-0CF1A813815B}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NHibernate.Driver.MySql", "NHibernate.Driver.MySql\NHibernate.Driver.MySql.csproj", "{4F5F0C13-F302-4CEE-B60E-A55D7C30E3F8}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -50,10 +66,47 @@ Global {7C2EF610-BCA0-4D1F-898A-DE9908E4970C}.Debug|Any CPU.Build.0 = Debug|Any CPU {7C2EF610-BCA0-4D1F-898A-DE9908E4970C}.Release|Any CPU.ActiveCfg = Release|Any CPU {7C2EF610-BCA0-4D1F-898A-DE9908E4970C}.Release|Any CPU.Build.0 = Release|Any CPU + {CF9FEEC5-3403-4F3F-9E4F-F0BAFE95DE39}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CF9FEEC5-3403-4F3F-9E4F-F0BAFE95DE39}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CF9FEEC5-3403-4F3F-9E4F-F0BAFE95DE39}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CF9FEEC5-3403-4F3F-9E4F-F0BAFE95DE39}.Release|Any CPU.Build.0 = Release|Any CPU + {99FE5A5C-F732-40A3-BEE6-ED5ADC393862}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {99FE5A5C-F732-40A3-BEE6-ED5ADC393862}.Debug|Any CPU.Build.0 = Debug|Any CPU + {99FE5A5C-F732-40A3-BEE6-ED5ADC393862}.Release|Any CPU.ActiveCfg = Release|Any CPU + {99FE5A5C-F732-40A3-BEE6-ED5ADC393862}.Release|Any CPU.Build.0 = Release|Any CPU + {C7C835DC-0A59-4227-9C3C-0AF0633CD68C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C7C835DC-0A59-4227-9C3C-0AF0633CD68C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C7C835DC-0A59-4227-9C3C-0AF0633CD68C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C7C835DC-0A59-4227-9C3C-0AF0633CD68C}.Release|Any CPU.Build.0 = Release|Any CPU + {22409381-1808-4F0A-9C42-9FAA6B3BCFA2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {22409381-1808-4F0A-9C42-9FAA6B3BCFA2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {22409381-1808-4F0A-9C42-9FAA6B3BCFA2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {22409381-1808-4F0A-9C42-9FAA6B3BCFA2}.Release|Any CPU.Build.0 = Release|Any CPU + {DADD54C1-3679-4672-9774-9362428EB9E0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DADD54C1-3679-4672-9774-9362428EB9E0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DADD54C1-3679-4672-9774-9362428EB9E0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DADD54C1-3679-4672-9774-9362428EB9E0}.Release|Any CPU.Build.0 = Release|Any CPU + {11B3C504-D501-4766-AC36-0CF1A813815B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {11B3C504-D501-4766-AC36-0CF1A813815B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {11B3C504-D501-4766-AC36-0CF1A813815B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {11B3C504-D501-4766-AC36-0CF1A813815B}.Release|Any CPU.Build.0 = Release|Any CPU + {4F5F0C13-F302-4CEE-B60E-A55D7C30E3F8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4F5F0C13-F302-4CEE-B60E-A55D7C30E3F8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4F5F0C13-F302-4CEE-B60E-A55D7C30E3F8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4F5F0C13-F302-4CEE-B60E-A55D7C30E3F8}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {CF9FEEC5-3403-4F3F-9E4F-F0BAFE95DE39} = {2A64334E-8456-4426-B50A-6172C6C3FDD5} + {99FE5A5C-F732-40A3-BEE6-ED5ADC393862} = {2A64334E-8456-4426-B50A-6172C6C3FDD5} + {C7C835DC-0A59-4227-9C3C-0AF0633CD68C} = {2A64334E-8456-4426-B50A-6172C6C3FDD5} + {22409381-1808-4F0A-9C42-9FAA6B3BCFA2} = {2A64334E-8456-4426-B50A-6172C6C3FDD5} + {DADD54C1-3679-4672-9774-9362428EB9E0} = {2A64334E-8456-4426-B50A-6172C6C3FDD5} + {11B3C504-D501-4766-AC36-0CF1A813815B} = {2A64334E-8456-4426-B50A-6172C6C3FDD5} + {4F5F0C13-F302-4CEE-B60E-A55D7C30E3F8} = {2A64334E-8456-4426-B50A-6172C6C3FDD5} + EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {E2025263-49BD-45D7-B628-8BDD471B546C} EndGlobalSection diff --git a/src/NHibernate/Async/Dialect/Dialect.cs b/src/NHibernate/Async/Dialect/Dialect.cs index fd92f72de29..659b23ec832 100644 --- a/src/NHibernate/Async/Dialect/Dialect.cs +++ b/src/NHibernate/Async/Dialect/Dialect.cs @@ -10,6 +10,7 @@ using System; using System.Collections; +using System.Collections.Concurrent; using System.Collections.Generic; using System.Data; using System.Data.Common; @@ -18,6 +19,7 @@ using NHibernate.Dialect.Function; using NHibernate.Dialect.Lock; using NHibernate.Dialect.Schema; +using NHibernate.Driver; using NHibernate.Exceptions; using NHibernate.Id; using NHibernate.Mapping; diff --git a/src/NHibernate/Connection/ConnectionProvider.cs b/src/NHibernate/Connection/ConnectionProvider.cs index 6a1882515b6..5be968a63bf 100644 --- a/src/NHibernate/Connection/ConnectionProvider.cs +++ b/src/NHibernate/Connection/ConnectionProvider.cs @@ -112,9 +112,49 @@ protected virtual void ConfigureDriver(IDictionary settings) { throw new HibernateException("Could not create the driver from " + driverClass + ".", e); } + +#pragma warning disable 618 + switch (driver) + { + case NpgsqlDriver _: + LogObsoleteDriver(nameof(NpgsqlDriver), "PostgreSql", "PostgreSqlDriver"); + break; + case MySqlDataDriver _: + LogObsoleteDriver(nameof(MySqlDataDriver), "MySql", "MySqlDriver"); + break; + case FirebirdClientDriver _: + LogObsoleteDriver(nameof(FirebirdClientDriver), "Firebird", "FirebirdDriver"); + break; + case OracleManagedDataClientDriver _: + LogObsoleteDriver(nameof(OracleManagedDataClientDriver), "Oracle.Managed", "OracleManagedDriver"); + break; + case SQLite20Driver _: + LogObsoleteDriver(nameof(SQLite20Driver), "SQLite", "SQLiteDriver"); + break; + case Sql2008ClientDriver _: + LogObsoleteDriver(nameof(Sql2008ClientDriver), "SqlServer", "SqlServer2008Driver"); + break; + case SqlClientDriver _: + LogObsoleteDriver(nameof(SqlClientDriver), "SqlServer", "SqlServer2000Driver"); + break; + case SqlServerCeDriver _: + LogObsoleteDriver(nameof(SqlServerCeDriver), "SqlServer.Compact", "SqlServerCompactDriver"); + break; + } +#pragma warning restore 618 } } + private static void LogObsoleteDriver(string obsoleteDriverName, string nugetName, string newDriverName) + { + log.Warn( + "Using \"{0}\" from main NHibernate package is obsolete." + + " Install the NHibernate.Driver.{1} NuGet package and change " + Environment.ConnectionDriver + " setting to \"NHibernate.Driver.{2}, NHibernate.Driver.{1}\".", + obsoleteDriverName, + nugetName, + newDriverName); + } + /// /// Gets the for the /// to connect to the database. diff --git a/src/NHibernate/Dialect/DB2400Dialect.cs b/src/NHibernate/Dialect/DB2400Dialect.cs index aa306a0d05a..775864621b1 100644 --- a/src/NHibernate/Dialect/DB2400Dialect.cs +++ b/src/NHibernate/Dialect/DB2400Dialect.cs @@ -15,7 +15,7 @@ namespace NHibernate.Dialect /// /// /// connection.driver_class - /// + /// NHibernate.Driver.DB2400Driver /// /// /// @@ -61,4 +61,4 @@ public override bool SupportsVariableLimit get { return false; } } } -} \ No newline at end of file +} diff --git a/src/NHibernate/Dialect/DB2Dialect.cs b/src/NHibernate/Dialect/DB2Dialect.cs index 6186ef6d81c..cc26e73099c 100644 --- a/src/NHibernate/Dialect/DB2Dialect.cs +++ b/src/NHibernate/Dialect/DB2Dialect.cs @@ -18,7 +18,7 @@ namespace NHibernate.Dialect /// /// /// connection.driver_class - /// + /// NHibernate.Driver.DB2Driver /// /// /// diff --git a/src/NHibernate/Dialect/Dialect.cs b/src/NHibernate/Dialect/Dialect.cs index 7cf2a77d7e2..9a2cfa2bd9d 100644 --- a/src/NHibernate/Dialect/Dialect.cs +++ b/src/NHibernate/Dialect/Dialect.cs @@ -1,5 +1,6 @@ using System; using System.Collections; +using System.Collections.Concurrent; using System.Collections.Generic; using System.Data; using System.Data.Common; @@ -8,6 +9,7 @@ using NHibernate.Dialect.Function; using NHibernate.Dialect.Lock; using NHibernate.Dialect.Schema; +using NHibernate.Driver; using NHibernate.Exceptions; using NHibernate.Id; using NHibernate.Mapping; @@ -47,6 +49,7 @@ public abstract partial class Dialect private readonly IDictionary _sqlFunctions; private static readonly IDictionary StandardAggregateFunctions = CollectionHelper.CreateCaseInsensitiveHashtable(); + private static readonly ConcurrentDictionary ExternalDriverExistsCache = new ConcurrentDictionary(); private static readonly IViolatedConstraintNameExtracter Extracter; @@ -2576,5 +2579,12 @@ public virtual ISQLExceptionConverter BuildSQLExceptionConverter() // may override to return whatever is most appropriate for that vendor. return new SQLStateConverter(ViolatedConstraintNameExtracter); } + + internal static string GetDriverName(string preferredName) where TFallback : IDriver + { + return ExternalDriverExistsCache.GetOrAdd(preferredName, s => ReflectHelper.ClassForFullNameOrNull(s) == null) + ? typeof(TFallback).FullName + : preferredName; + } } } diff --git a/src/NHibernate/Dialect/FirebirdDialect.cs b/src/NHibernate/Dialect/FirebirdDialect.cs index 5883dfe2344..50e0cc3829a 100644 --- a/src/NHibernate/Dialect/FirebirdDialect.cs +++ b/src/NHibernate/Dialect/FirebirdDialect.cs @@ -4,9 +4,11 @@ using System.Data.Common; using NHibernate.Dialect.Function; using NHibernate.Dialect.Schema; +using NHibernate.Driver; using NHibernate.Engine; using NHibernate.SqlCommand; using NHibernate.Type; +using NHibernate.Util; using Environment = NHibernate.Cfg.Environment; namespace NHibernate.Dialect @@ -23,7 +25,7 @@ namespace NHibernate.Dialect /// /// /// connection.driver_class - /// + /// NHibernate.Driver.FirebirdDriver, NHibernate.Driver.Firebird /// /// /// @@ -34,7 +36,10 @@ public FirebirdDialect() RegisterKeywords(); RegisterColumnTypes(); RegisterFunctions(); - DefaultProperties[Environment.ConnectionDriver] = "NHibernate.Driver.FirebirdClientDriver"; + DefaultProperties[Environment.ConnectionDriver] = +#pragma warning disable 618 + GetDriverName("NHibernate.Driver.FirebirdDriver, NHibernate.Driver.Firebird"); +#pragma warning restore 618 } public override string AddColumnString diff --git a/src/NHibernate/Dialect/InformixDialect.cs b/src/NHibernate/Dialect/InformixDialect.cs index 2fdef648f86..463dd9b8ed6 100644 --- a/src/NHibernate/Dialect/InformixDialect.cs +++ b/src/NHibernate/Dialect/InformixDialect.cs @@ -28,7 +28,7 @@ namespace NHibernate.Dialect /// /// /// connection.driver_class - /// + /// NHibernate.Driver.OdbcDriver /// /// /// diff --git a/src/NHibernate/Dialect/InformixDialect0940.cs b/src/NHibernate/Dialect/InformixDialect0940.cs index 59ef5b7a6e6..7c22a4ac9b5 100644 --- a/src/NHibernate/Dialect/InformixDialect0940.cs +++ b/src/NHibernate/Dialect/InformixDialect0940.cs @@ -26,7 +26,7 @@ namespace NHibernate.Dialect /// /// /// connection.driver_class - /// + /// NHibernate.Driver.OdbcDriver /// /// /// diff --git a/src/NHibernate/Dialect/InformixDialect1000.cs b/src/NHibernate/Dialect/InformixDialect1000.cs index db4c9781591..1b7d7cf503e 100644 --- a/src/NHibernate/Dialect/InformixDialect1000.cs +++ b/src/NHibernate/Dialect/InformixDialect1000.cs @@ -25,7 +25,7 @@ namespace NHibernate.Dialect /// /// /// connection.driver_class - /// + /// NHibernate.Driver.OdbcDriver /// /// /// diff --git a/src/NHibernate/Dialect/IngresDialect.cs b/src/NHibernate/Dialect/IngresDialect.cs index f6197f328ae..9d029e92861 100644 --- a/src/NHibernate/Dialect/IngresDialect.cs +++ b/src/NHibernate/Dialect/IngresDialect.cs @@ -15,7 +15,7 @@ namespace NHibernate.Dialect /// /// /// connection.driver_class - /// + /// NHibernate.Driver.IngresDriver /// /// /// diff --git a/src/NHibernate/Dialect/MsSql2000Dialect.cs b/src/NHibernate/Dialect/MsSql2000Dialect.cs index 929fc15ac74..a6004299be0 100644 --- a/src/NHibernate/Dialect/MsSql2000Dialect.cs +++ b/src/NHibernate/Dialect/MsSql2000Dialect.cs @@ -5,6 +5,7 @@ using System.Text.RegularExpressions; using NHibernate.Dialect.Function; using NHibernate.Dialect.Schema; +using NHibernate.Driver; using NHibernate.Engine; using NHibernate.Mapping; using NHibernate.SqlCommand; @@ -27,7 +28,7 @@ namespace NHibernate.Dialect /// /// /// connection.driver_class - /// + /// NHibernate.Driver.SqlServer2000Driver, NHibernate.Driver.SqlServer /// /// /// adonet.batch_size @@ -68,7 +69,10 @@ public MsSql2000Dialect() protected virtual void RegisterDefaultProperties() { - DefaultProperties[Environment.ConnectionDriver] = "NHibernate.Driver.SqlClientDriver"; + DefaultProperties[Environment.ConnectionDriver] = +#pragma warning disable 618 + GetDriverName("NHibernate.Driver.SqlServer2000Driver, NHibernate.Driver.SqlServer"); +#pragma warning restore 618 DefaultProperties[Environment.BatchSize] = "20"; DefaultProperties[Environment.QuerySubstitutions] = "true 1, false 0, yes 'Y', no 'N'"; } diff --git a/src/NHibernate/Dialect/MsSql2008Dialect.cs b/src/NHibernate/Dialect/MsSql2008Dialect.cs index d19bfc7b19c..9b0f338bf56 100644 --- a/src/NHibernate/Dialect/MsSql2008Dialect.cs +++ b/src/NHibernate/Dialect/MsSql2008Dialect.cs @@ -69,7 +69,10 @@ protected override void RegisterKeywords() protected override void RegisterDefaultProperties() { base.RegisterDefaultProperties(); - DefaultProperties[Environment.ConnectionDriver] = typeof(Sql2008ClientDriver).AssemblyQualifiedName; + DefaultProperties[Environment.ConnectionDriver] = +#pragma warning disable 618 + GetDriverName("NHibernate.Driver.SqlServer2008Driver, NHibernate.Driver.SqlServer"); +#pragma warning restore 618 } public override string CurrentTimestampSQLFunctionName => diff --git a/src/NHibernate/Dialect/MsSqlCeDialect.cs b/src/NHibernate/Dialect/MsSqlCeDialect.cs index 88c1fa21be1..d4b7c4c97d9 100644 --- a/src/NHibernate/Dialect/MsSqlCeDialect.cs +++ b/src/NHibernate/Dialect/MsSqlCeDialect.cs @@ -4,6 +4,7 @@ using System.Text; using NHibernate.Dialect.Function; using NHibernate.Dialect.Schema; +using NHibernate.Driver; using NHibernate.Id; using NHibernate.SqlCommand; using NHibernate.Util; @@ -203,7 +204,10 @@ protected virtual void RegisterFunctions() protected virtual void RegisterDefaultProperties() { - DefaultProperties[Environment.ConnectionDriver] = "NHibernate.Driver.SqlServerCeDriver"; + DefaultProperties[Environment.ConnectionDriver] = +#pragma warning disable 618 + GetDriverName("NHibernate.Driver.SqlServerCompactDriver, NHibernate.Driver.SqlServer.Compact"); +#pragma warning restore 618 DefaultProperties[Environment.PrepareSql] = "false"; } diff --git a/src/NHibernate/Dialect/MySQLDialect.cs b/src/NHibernate/Dialect/MySQLDialect.cs index 59539395226..e44dc09750c 100644 --- a/src/NHibernate/Dialect/MySQLDialect.cs +++ b/src/NHibernate/Dialect/MySQLDialect.cs @@ -4,6 +4,7 @@ using System.Text; using NHibernate.Dialect.Function; using NHibernate.Dialect.Schema; +using NHibernate.Driver; using NHibernate.SqlCommand; using NHibernate.SqlTypes; using NHibernate.Util; @@ -23,7 +24,7 @@ namespace NHibernate.Dialect /// /// /// connection.driver_class - /// + /// NHibernate.Driver.MySqlDriver, NHibernate.Driver.MySql /// /// /// @@ -114,7 +115,10 @@ public MySQLDialect() //functions: RegisterFunctions(); - DefaultProperties[Environment.ConnectionDriver] = "NHibernate.Driver.MySqlDataDriver"; + DefaultProperties[Environment.ConnectionDriver] = +#pragma warning disable 618 + GetDriverName("NHibernate.Driver.MySqlDriver, NHibernate.Driver.MySql"); +#pragma warning restore 618 } #region private static readonly string[] DialectKeywords = { ... } diff --git a/src/NHibernate/Dialect/OracleLiteDialect.cs b/src/NHibernate/Dialect/OracleLiteDialect.cs index cf5e33914a5..90a78438690 100644 --- a/src/NHibernate/Dialect/OracleLiteDialect.cs +++ b/src/NHibernate/Dialect/OracleLiteDialect.cs @@ -17,7 +17,7 @@ namespace NHibernate.Dialect /// /// /// connection.driver_class - /// + /// NHibernate.Driver.OracleLiteDataClientDriver /// /// /// diff --git a/src/NHibernate/Dialect/PostgreSQLDialect.cs b/src/NHibernate/Dialect/PostgreSQLDialect.cs index c1653a36a6f..bddaff50002 100644 --- a/src/NHibernate/Dialect/PostgreSQLDialect.cs +++ b/src/NHibernate/Dialect/PostgreSQLDialect.cs @@ -4,6 +4,7 @@ using System.Data.Common; using NHibernate.Dialect.Function; using NHibernate.Dialect.Schema; +using NHibernate.Driver; using NHibernate.Engine; using NHibernate.SqlCommand; using NHibernate.SqlTypes; @@ -24,7 +25,7 @@ namespace NHibernate.Dialect /// /// /// connection.driver_class - /// + /// NHibernate.Driver.PostgreSqlDriver, NHibernate.Driver.PostgreSql /// /// /// @@ -32,7 +33,10 @@ public class PostgreSQLDialect : Dialect { public PostgreSQLDialect() { - DefaultProperties[Environment.ConnectionDriver] = "NHibernate.Driver.NpgsqlDriver"; + DefaultProperties[Environment.ConnectionDriver] = +#pragma warning disable 618 + GetDriverName("NHibernate.Driver.PostgreSqlDriver, NHibernate.Driver.PostgreSql"); +#pragma warning restore 618 RegisterDateTimeTypeMappings(); RegisterColumnType(DbType.AnsiStringFixedLength, "char(255)"); diff --git a/src/NHibernate/Dialect/SQLiteDialect.cs b/src/NHibernate/Dialect/SQLiteDialect.cs index 4a0bb5390ff..dabd41b4a1a 100644 --- a/src/NHibernate/Dialect/SQLiteDialect.cs +++ b/src/NHibernate/Dialect/SQLiteDialect.cs @@ -3,6 +3,7 @@ using System.Data.Common; using System.Text; using NHibernate.Dialect.Function; +using NHibernate.Driver; using NHibernate.SqlCommand; using NHibernate.Util; @@ -180,7 +181,10 @@ protected virtual void RegisterKeywords() protected virtual void RegisterDefaultProperties() { - DefaultProperties[Cfg.Environment.ConnectionDriver] = "NHibernate.Driver.SQLite20Driver"; + DefaultProperties[Cfg.Environment.ConnectionDriver] = +#pragma warning disable 618 + GetDriverName("NHibernate.Driver.SQLiteDriver, NHibernate.Driver.SQLite"); +#pragma warning restore 618 DefaultProperties[Cfg.Environment.QuerySubstitutions] = "true 1, false 0, yes 'Y', no 'N'"; } diff --git a/src/NHibernate/Dialect/SybaseASA9Dialect.cs b/src/NHibernate/Dialect/SybaseASA9Dialect.cs index 12ad1e3c088..81ec5fa8f00 100644 --- a/src/NHibernate/Dialect/SybaseASA9Dialect.cs +++ b/src/NHibernate/Dialect/SybaseASA9Dialect.cs @@ -24,7 +24,7 @@ namespace NHibernate.Dialect /// /// /// connection.driver_class - /// + /// NHibernate.Driver.SybaseAsaClientDriver /// /// /// prepare_sql diff --git a/src/NHibernate/Dialect/SybaseASE15Dialect.cs b/src/NHibernate/Dialect/SybaseASE15Dialect.cs index 5ccceff3176..757469fe40c 100644 --- a/src/NHibernate/Dialect/SybaseASE15Dialect.cs +++ b/src/NHibernate/Dialect/SybaseASE15Dialect.cs @@ -21,7 +21,7 @@ namespace NHibernate.Dialect /// /// /// connection.driver_class - /// + /// NHibernate.Driver.SybaseAseClientDriver /// /// /// diff --git a/src/NHibernate/Dialect/SybaseSQLAnywhere10Dialect.cs b/src/NHibernate/Dialect/SybaseSQLAnywhere10Dialect.cs index bd07ff22c2e..519efcc3c5e 100644 --- a/src/NHibernate/Dialect/SybaseSQLAnywhere10Dialect.cs +++ b/src/NHibernate/Dialect/SybaseSQLAnywhere10Dialect.cs @@ -38,7 +38,7 @@ namespace NHibernate.Dialect /// /// /// connection.driver_class - /// + /// NHibernate.Driver.SybaseSQLAnywhereDriver /// /// /// prepare_sql diff --git a/src/NHibernate/Dialect/SybaseSQLAnywhere11Dialect.cs b/src/NHibernate/Dialect/SybaseSQLAnywhere11Dialect.cs index d28f67cdffe..b05d89a29b2 100644 --- a/src/NHibernate/Dialect/SybaseSQLAnywhere11Dialect.cs +++ b/src/NHibernate/Dialect/SybaseSQLAnywhere11Dialect.cs @@ -32,7 +32,7 @@ namespace NHibernate.Dialect /// /// /// connection.driver_class - /// + /// NHibernate.Driver.SybaseSQLAnywhereDriver /// /// /// prepare_sql diff --git a/src/NHibernate/Dialect/SybaseSQLAnywhere12Dialect.cs b/src/NHibernate/Dialect/SybaseSQLAnywhere12Dialect.cs index e99a40a3b26..adf55c5c395 100644 --- a/src/NHibernate/Dialect/SybaseSQLAnywhere12Dialect.cs +++ b/src/NHibernate/Dialect/SybaseSQLAnywhere12Dialect.cs @@ -43,7 +43,7 @@ namespace NHibernate.Dialect /// /// /// connection.driver_class - /// + /// NHibernate.Driver.SybaseSQLAnywhereDotNet4Driver /// /// /// prepare_sql @@ -127,4 +127,4 @@ public override IDataBaseSchema GetDataBaseSchema(DbConnection connection) return new SybaseAnywhereDataBaseMetaData(connection); } } -} \ No newline at end of file +} diff --git a/src/NHibernate/Driver/FirebirdClientDriver.cs b/src/NHibernate/Driver/FirebirdClientDriver.cs index 065e8b6c2d9..c604796ac22 100644 --- a/src/NHibernate/Driver/FirebirdClientDriver.cs +++ b/src/NHibernate/Driver/FirebirdClientDriver.cs @@ -10,13 +10,23 @@ using NHibernate.SqlTypes; using NHibernate.Util; +#if DRIVER_PACKAGE +using FirebirdSql.Data.FirebirdClient; +#endif + namespace NHibernate.Driver { /// /// A NHibernate Driver for using the Firebird data provider located in /// FirebirdSql.Data.FirebirdClient assembly. /// +#if DRIVER_PACKAGE + public class FirebirdDriver : DriverBase +#else + [Obsolete("Use NHibernate.Driver.Firebird NuGet package and FirebirdDriver." + + " There are also Loquacious configuration points: .Connection.ByFirebirdDriver() and .DataBaseIntegration(x => x.FirebirdDriver()).")] public class FirebirdClientDriver : ReflectionBasedDriver +#endif { private const string SELECT_CLAUSE_EXP = @"(?<=\bselect|\bwhere).*"; private const string CAST_PARAMS_EXP = @"(?]\s?|first\s?|skip\s?|between\s|between\s@\bp\w+\b\sand\s)@\bp\w+\b(?!\s?[=<>])"; @@ -24,6 +34,7 @@ public class FirebirdClientDriver : ReflectionBasedDriver private static readonly Regex _castCandidateRegEx = new Regex(CAST_PARAMS_EXP, RegexOptions.IgnoreCase); private readonly FirebirdDialect _fbDialect = new FirebirdDialect(); +#if !DRIVER_PACKAGE /// /// Initializes a new instance of the class. /// @@ -38,6 +49,19 @@ public FirebirdClientDriver() "FirebirdSql.Data.FirebirdClient.FbCommand") { } +#endif + +#if DRIVER_PACKAGE + public override DbConnection CreateConnection() + { + return new FbConnection(); + } + + public override DbCommand CreateCommand() + { + return new FbCommand(); + } +#endif public override void Configure(IDictionary settings) { @@ -118,8 +142,10 @@ private string GetFbTypeForParam(SqlType sqlType) return _fbDialect.GetCastTypeName(sqlType); } +#if !DRIVER_PACKAGE private static volatile MethodInfo _clearPool; private static volatile MethodInfo _clearAllPools; +#endif /// /// Clears the connection pool. @@ -128,6 +154,19 @@ private string GetFbTypeForParam(SqlType sqlType) /// null for clearing them all. public void ClearPool(string connectionString) { +#if DRIVER_PACKAGE + if (connectionString != null) + { + using (var clearConnection = CreateConnection()) + { + clearConnection.ConnectionString = connectionString; + FbConnection.ClearPool((FbConnection)clearConnection); + } + return; + } + + FbConnection.ClearAllPools(); +#else // In case of concurrent threads, may initialize many times. We do not care. // Members are volatile for avoiding it gets used while its constructor is not yet ended. if (_clearPool == null || _clearAllPools == null) @@ -151,10 +190,11 @@ public void ClearPool(string connectionString) } _clearAllPools.Invoke(null, Array.Empty()); +#endif } /// - /// This driver support of is not compliant and too heavily + /// This driver support of System.Transactions.Transaction is not compliant and too heavily /// restricts what can be done for NHibernate tests. See DNET-764, DNET-766 (and bonus, DNET-765). /// /// @@ -174,7 +214,7 @@ public void ClearPool(string connectionString) /// /// DNET-766 /// When auto-enlistment is disabled (Enlist=false in connection string), the driver ignores - /// calls to . They silently do + /// calls to DbConnection.EnlistTransaction(System.Transactions.Transaction). They silently do /// nothing, the Firebird connection does not get enlisted. http://tracker.firebirdsql.org/browse/DNET-766 /// /// diff --git a/src/NHibernate/Driver/MySqlDataDriver.cs b/src/NHibernate/Driver/MySqlDataDriver.cs index efbe9675f9a..e3ddb2e8d46 100644 --- a/src/NHibernate/Driver/MySqlDataDriver.cs +++ b/src/NHibernate/Driver/MySqlDataDriver.cs @@ -1,4 +1,5 @@ using System; +using System.Data.Common; using NHibernate.AdoNet; namespace NHibernate.Driver @@ -17,8 +18,15 @@ namespace NHibernate.Driver /// for any updates and/or documentation regarding MySQL. /// /// +#if DRIVER_PACKAGE + public class MySqlDriver : DriverBase, IEmbeddedBatcherFactoryProvider +#else + [Obsolete("Use NHibernate.Driver.MySql NuGet package and MySqlDriver." + + " There are also Loquacious configuration points: .Connection.ByMySqlDriver() and .DataBaseIntegration(x => x.MySqlDriver()).")] public class MySqlDataDriver : ReflectionBasedDriver, IEmbeddedBatcherFactoryProvider +#endif { +#if !DRIVER_PACKAGE /// /// Initializes a new instance of the class. /// @@ -32,6 +40,19 @@ public MySqlDataDriver() : base( "MySql.Data.MySqlClient.MySqlCommand") { } +#endif + +#if DRIVER_PACKAGE + public override DbConnection CreateConnection() + { + return new MySql.Data.MySqlClient.MySqlConnection(); + } + + public override DbCommand CreateCommand() + { + return new MySql.Data.MySqlClient.MySqlCommand(); + } +#endif /// /// MySql.Data uses named parameters in the sql. diff --git a/src/NHibernate/Driver/NpgsqlDriver.cs b/src/NHibernate/Driver/NpgsqlDriver.cs index ccfd2dc1be2..d9507f26886 100644 --- a/src/NHibernate/Driver/NpgsqlDriver.cs +++ b/src/NHibernate/Driver/NpgsqlDriver.cs @@ -1,3 +1,4 @@ +using System; using System.Data; using System.Data.Common; using NHibernate.AdoNet; @@ -25,8 +26,23 @@ namespace NHibernate.Driver /// http://pgfoundry.org/projects/npgsql. ///

/// +#if DRIVER_PACKAGE + public class PostgreSqlDriver : DriverBase, IEmbeddedBatcherFactoryProvider +#else + [Obsolete("Use NHibernate.Driver.PostgreSql NuGet package and PostgreSqlDriver." + + " There are also Loquacious configuration points: .Connection.ByPostgreSqlDriver() and .DataBaseIntegration(x => x.PostgreSqlDriver()).")] public class NpgsqlDriver : ReflectionBasedDriver, IEmbeddedBatcherFactoryProvider +#endif { +#if DRIVER_PACKAGE + /// + /// Initializes a new instance of the class. + /// + public PostgreSqlDriver() + { + DriverVersion = typeof(Npgsql.NpgsqlCommand).Assembly.GetName().Version; + } +#else /// /// Initializes a new instance of the class. /// @@ -40,6 +56,24 @@ public NpgsqlDriver() : base( "Npgsql.NpgsqlCommand") { } +#endif + +#if DRIVER_PACKAGE + /// + /// The driver assembly version. + /// + protected Version DriverVersion { get; } + + public override DbConnection CreateConnection() + { + return new Npgsql.NpgsqlConnection(); + } + + public override DbCommand CreateCommand() + { + return new Npgsql.NpgsqlCommand(); + } +#endif public override bool UseNamedPrefixInSql => true; diff --git a/src/NHibernate/Driver/OracleManagedDataClientDriver.cs b/src/NHibernate/Driver/OracleManagedDataClientDriver.cs index 247a84dfaff..de606ef29a4 100644 --- a/src/NHibernate/Driver/OracleManagedDataClientDriver.cs +++ b/src/NHibernate/Driver/OracleManagedDataClientDriver.cs @@ -1,8 +1,12 @@ +using System; + namespace NHibernate.Driver { /// /// A NHibernate Driver for using the Oracle.ManagedDataAccess DataProvider /// + [Obsolete("Use NHibernate.Driver.Oracle.Managed NuGet package and OracleManagedDriver." + + " There are also Loquacious configuration points: .Connection.ByOracleManagedDriver() and .DataBaseIntegration(x => x.OracleManagedDriver()).")] public class OracleManagedDataClientDriver : OracleDataClientDriverBase { /// diff --git a/src/NHibernate/Driver/SQLite20Driver.cs b/src/NHibernate/Driver/SQLite20Driver.cs index 8f84a216869..a472d98b0d0 100644 --- a/src/NHibernate/Driver/SQLite20Driver.cs +++ b/src/NHibernate/Driver/SQLite20Driver.cs @@ -1,3 +1,4 @@ +using System; using System.Data; using System.Data.Common; @@ -19,28 +20,54 @@ namespace NHibernate.Driver /// Please check https://www.sqlite.org/ for more information regarding SQLite. /// /// +#if DRIVER_PACKAGE + public class SQLiteDriver : DriverBase +#else + [Obsolete("Use NHibernate.Driver.SQlLite NuGet package and SQLiteDriver." + + " There are also Loquacious configuration points: .Connection.BySQLiteDriver() and .DataBaseIntegration(x => x.SQLiteDriver()).")] public class SQLite20Driver : ReflectionBasedDriver +#endif { +#if DRIVER_PACKAGE + public SQLiteDriver() + {} +#else /// /// Initializes a new instance of . /// /// /// Thrown when the SQLite.NET assembly can not be loaded. /// - public SQLite20Driver() : base( - "System.Data.SQLite", - "System.Data.SQLite", - "System.Data.SQLite.SQLiteConnection", - "System.Data.SQLite.SQLiteCommand") + public SQLite20Driver() + : base( + "System.Data.SQLite", + "System.Data.SQLite", + "System.Data.SQLite.SQLiteConnection", + "System.Data.SQLite.SQLiteCommand") { } +#endif +#if DRIVER_PACKAGE + public override DbConnection CreateConnection() + { + var connection = new System.Data.SQLite.SQLiteConnection(); + connection.StateChange += Connection_StateChange; + return connection; + } + + public override DbCommand CreateCommand() + { + return new System.Data.SQLite.SQLiteCommand(); + } +#else public override DbConnection CreateConnection() { var connection = base.CreateConnection(); connection.StateChange += Connection_StateChange; return connection; } +#endif private static void Connection_StateChange(object sender, StateChangeEventArgs e) { diff --git a/src/NHibernate/Driver/Sql2008ClientDriver.cs b/src/NHibernate/Driver/Sql2008ClientDriver.cs index 0068832139f..a43a8fb9b1b 100644 --- a/src/NHibernate/Driver/Sql2008ClientDriver.cs +++ b/src/NHibernate/Driver/Sql2008ClientDriver.cs @@ -5,11 +5,17 @@ namespace NHibernate.Driver { +#if DRIVER_PACKAGE + public class SqlServer2008Driver : SqlServer2000Driver +#else + [Obsolete("Use NHibernate.Driver.SqlServer NuGet package and SqlServer2008Driver." + + " There are also Loquacious configuration points: .Connection.BySqlServer2008Driver() and .DataBaseIntegration(x => x.SqlServer2008Driver()).")] public class Sql2008ClientDriver : SqlClientDriver +#endif { const byte MaxTime = 5; - #if NETFX + #if NETFX || DRIVER_PACKAGE private static readonly Action SetSqlDbType = (p, t) => ((System.Data.SqlClient.SqlParameter) p).SqlDbType = t; #else private static readonly Action SetSqlDbType = DelegateHelper.BuildPropertySetter(System.Type.GetType("System.Data.SqlClient.SqlParameter, System.Data.SqlClient", true), "SqlDbType"); diff --git a/src/NHibernate/Driver/SqlClientDriver.cs b/src/NHibernate/Driver/SqlClientDriver.cs index 679fe397bc4..4f53d4caf23 100644 --- a/src/NHibernate/Driver/SqlClientDriver.cs +++ b/src/NHibernate/Driver/SqlClientDriver.cs @@ -2,7 +2,7 @@ using System.Collections.Generic; using System.Data; using System.Data.Common; -#if NETFX +#if NETFX || DRIVER_PACKAGE using System.Data.SqlClient; #endif using NHibernate.AdoNet; @@ -15,11 +15,22 @@ namespace NHibernate.Driver /// /// A NHibernate Driver for using the SqlClient DataProvider /// +#if DRIVER_PACKAGE + public class SqlServer2000Driver +#if NETFX + : DriverBase, IEmbeddedBatcherFactoryProvider +#else + : DriverBase +#endif +#else + [Obsolete("Use NHibernate.Driver.SqlServer NuGet package and SqlServer2000Driver." + + " There are also Loquacious configuration points: .Connection.BySqlServer2000Driver() and .DataBaseIntegration(x => x.SqlServer2000Driver()).")] public class SqlClientDriver #if NETFX : DriverBase, IEmbeddedBatcherFactoryProvider #else : ReflectionBasedDriver, IEmbeddedBatcherFactoryProvider +#endif #endif { // Since v5.1 @@ -68,7 +79,7 @@ public override void Configure(IDictionary settings) _dialect = Dialect.Dialect.GetDialect(settings); } -#if !NETFX +#if !NETFX && !DRIVER_PACKAGE public SqlClientDriver() : base("System.Data.SqlClient", "System.Data.SqlClient.SqlConnection", "System.Data.SqlClient.SqlCommand") { @@ -78,7 +89,7 @@ public SqlClientDriver() #else /// /// Creates an uninitialized object for - /// the SqlClientDriver. + /// the SQL-Server driver. /// /// An unitialized object. public override DbConnection CreateConnection() @@ -88,7 +99,7 @@ public override DbConnection CreateConnection() /// /// Creates an uninitialized object for - /// the SqlClientDriver. + /// the SQL-Server driver. /// /// An unitialized object. public override DbCommand CreateCommand() @@ -96,11 +107,13 @@ public override DbCommand CreateCommand() return new System.Data.SqlClient.SqlCommand(); } +#if NETFX System.Type IEmbeddedBatcherFactoryProvider.BatcherFactoryClass { get { return typeof(SqlClientBatchingBatcherFactory); } } #endif +#endif /// diff --git a/src/NHibernate/Driver/SqlServerCeDriver.cs b/src/NHibernate/Driver/SqlServerCeDriver.cs index 300e15c06cc..f8ecb610d26 100644 --- a/src/NHibernate/Driver/SqlServerCeDriver.cs +++ b/src/NHibernate/Driver/SqlServerCeDriver.cs @@ -10,8 +10,15 @@ namespace NHibernate.Driver /// /// A NHibernate driver for Microsoft SQL Server CE data provider /// +#if DRIVER_PACKAGE + public class SqlServerCompactDriver : DriverBase +#else + [Obsolete("Use NHibernate.Driver.SqlServer.Compact NuGet package and SqlServerCompactDriver." + + " There are also Loquacious configuration points: .Connection.BySqlServerCompactDriver() and .DataBaseIntegration(x => x.SqlServerCompactDriver()).")] public class SqlServerCeDriver : ReflectionBasedDriver +#endif { +#if !DRIVER_PACKAGE /// /// Initializes a new instance of the class. /// @@ -22,7 +29,19 @@ public SqlServerCeDriver() "System.Data.SqlServerCe.SqlCeCommand") { } +#endif +#if DRIVER_PACKAGE + public override DbConnection CreateConnection() + { + return new System.Data.SqlServerCe.SqlCeConnection(); + } + + public override DbCommand CreateCommand() + { + return new System.Data.SqlServerCe.SqlCeCommand(); + } +#else private PropertyInfo dbParamSqlDbTypeProperty; public override void Configure(IDictionary settings) @@ -35,6 +54,7 @@ public override void Configure(IDictionary settings) dbParamSqlDbTypeProperty = dbParam.GetType().GetProperty("SqlDbType"); } } +#endif /// /// MsSql requires the use of a Named Prefix in the SQL statement. @@ -107,6 +127,17 @@ private static SqlType AdjustSqlType(SqlType sqlType) private void AdjustDbParamTypeForLargeObjects(DbParameter dbParam, SqlType sqlType) { +#if DRIVER_PACKAGE + var sqlCeParam = (System.Data.SqlServerCe.SqlCeParameter) dbParam; + if (sqlType is BinaryBlobSqlType) + { + sqlCeParam.SqlDbType = SqlDbType.Image; + } + else if (sqlType is StringClobSqlType) + { + sqlCeParam.SqlDbType = SqlDbType.NText; + } +#else if (sqlType is BinaryBlobSqlType) { dbParamSqlDbTypeProperty.SetValue(dbParam, SqlDbType.Image, null); @@ -115,13 +146,14 @@ private void AdjustDbParamTypeForLargeObjects(DbParameter dbParam, SqlType sqlTy { dbParamSqlDbTypeProperty.SetValue(dbParam, SqlDbType.NText, null); } +#endif } public override bool SupportsNullEnlistment => false; /// /// . Enlistment is completely disabled when auto-enlistment is disabled. - /// does nothing in + /// DbConnection.EnlistTransaction(System.Transactions.Transaction) does nothing in /// this case. /// public override bool SupportsEnlistmentWhenAutoEnlistmentIsDisabled => false; diff --git a/src/NHibernate/SqlCommand/Parser/MsSqlSelectParser.cs b/src/NHibernate/SqlCommand/Parser/MsSqlSelectParser.cs index 1321b7faa68..0c86169ca29 100644 --- a/src/NHibernate/SqlCommand/Parser/MsSqlSelectParser.cs +++ b/src/NHibernate/SqlCommand/Parser/MsSqlSelectParser.cs @@ -1,10 +1,9 @@ using System; using System.Collections.Generic; +using System.Linq; namespace NHibernate.SqlCommand.Parser { - using System.Linq; - /// /// Represents SQL Server SELECT query parser, primarily intended to support generation of /// limit queries by SQL Server dialects. diff --git a/teamcity.build b/teamcity.build index 790ab2988ac..5483fff507a 100644 --- a/teamcity.build +++ b/teamcity.build @@ -52,7 +52,7 @@ - + @@ -60,7 +60,7 @@ - + @@ -68,27 +68,27 @@ - + - + - + - + @@ -172,7 +172,7 @@ - + @@ -183,7 +183,7 @@ - +