diff --git a/.github/workflows/NetCoreTests.yml b/.github/workflows/NetCoreTests.yml index a0bf0f39801..583a53b891e 100644 --- a/.github/workflows/NetCoreTests.yml +++ b/.github/workflows/NetCoreTests.yml @@ -16,6 +16,8 @@ jobs: CONNECTION_STRING: "DataSource=localhost;Database=nhibernate;User=SYSDBA;Password=nhibernate;charset=utf8;" - DB: MySQL CONNECTION_STRING: "Server=localhost;Uid=root;Password=nhibernate;Database=nhibernate;Old Guids=True;" + - DB: Oracle + CONNECTION_STRING: "User ID=nhibernate;Password=nhibernate;Metadata Pooling=false;Self Tuning=false;Data Source=(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = XEPDB1)))" - DB: SQLite runs-on: ubuntu-latest continue-on-error: ${{matrix.ALLOW_FAILURE == true}} @@ -45,6 +47,11 @@ jobs: run: | docker run --name firebird -e EnableWireCrypt=true -e FIREBIRD_USER=nhibernate -e FIREBIRD_PASSWORD=nhibernate -e ISC_PASSWORD=nhibernate -e FIREBIRD_DATABASE=nhibernate -p 3050:3050 -d jacobalberty/firebird:v3.0 + - name: Set up Oracle + if: matrix.DB == 'Oracle' + run: | + docker run -d -p 1521:1521 -e APP_USER=nhibernate -e APP_USER_PASSWORD=nhibernate -e ORACLE_PASSWORD=nhibernate gvenzl/oracle-xe:18-slim + - uses: actions/checkout@v2 - name: Setup .NET uses: actions/setup-dotnet@v1.8.0 diff --git a/psake.ps1 b/psake.ps1 index e9cd52d7081..bdf0a2a5519 100644 --- a/psake.ps1 +++ b/psake.ps1 @@ -62,6 +62,11 @@ Task Set-Configuration { 'SqlServer2012' = @{ 'connection.connection_string' = 'Server=(local)\SQL2017;User ID=sa;Password=Password12!;initial catalog=nhibernate;'; 'dialect' = 'NHibernate.Dialect.MsSql2012Dialect' + }; + 'Oracle' = @{ + 'connection.connection_string' = 'User ID=nhibernate;Password=nhibernate;Metadata Pooling=false;Self Tuning=false;Data Source=(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = XEPDB1)))'; + 'connection.driver_class' = 'NHibernate.Driver.OracleManagedDataClientDriver'; + 'dialect' = 'NHibernate.Dialect.Oracle10gDialect' } } #Settings for current build diff --git a/src/NHibernate.Test/Async/NHSpecificTest/NH1171/Fixture.cs b/src/NHibernate.Test/Async/NHSpecificTest/NH1171/Fixture.cs index 115c94e1a9a..4dbd1150e53 100644 --- a/src/NHibernate.Test/Async/NHSpecificTest/NH1171/Fixture.cs +++ b/src/NHibernate.Test/Async/NHSpecificTest/NH1171/Fixture.cs @@ -20,8 +20,11 @@ public class FixtureAsync : BugTestCase { protected override bool AppliesTo(Dialect.Dialect dialect) { - // Firebird has issues with comments containing apostrophes - return !(dialect is FirebirdDialect); + return + // Firebird has issues with comments containing apostrophes + !(dialect is FirebirdDialect) + // GH-2853: Oracle client bug: throws Oracle.ManagedDataAccess.Client.OracleException : ORA-01008: not all variables bound + && !(dialect is Oracle8iDialect); } protected override void Configure(NHibernate.Cfg.Configuration configuration) diff --git a/src/NHibernate.Test/Async/NHSpecificTest/NH1693/Fixture.cs b/src/NHibernate.Test/Async/NHSpecificTest/NH1693/Fixture.cs index 5c73e3d25d4..33387963580 100644 --- a/src/NHibernate.Test/Async/NHSpecificTest/NH1693/Fixture.cs +++ b/src/NHibernate.Test/Async/NHSpecificTest/NH1693/Fixture.cs @@ -49,7 +49,7 @@ public async Task without_filterAsync() using (var tx = session.BeginTransaction()) { var q1 = - "from Invoice i where i.Mode='a' and i.Category=:cat and not exists (from Invoice i2 where i2.Mode='a' and i2.Category=:cat and i2.Num=i.Num+1)"; + "from Invoice i where i.Mode='a' and i.Category=:cat and not exists (from Invoice i2 where i2.Mode='a' and i2.Category=:cat and i2.Num=i.Num+1) order by i.Num"; var list = await (session.CreateQuery(q1) .SetParameter("cat", 10) .ListAsync()); @@ -70,7 +70,7 @@ public async Task with_filterAsync() session.EnableFilter("modeFilter").SetParameter("currentMode", "a"); var q1 = - "from Invoice i where i.Category=:cat and not exists (from Invoice i2 where i2.Category=:cat and i2.Num=i.Num+1)"; + "from Invoice i where i.Category=:cat and not exists (from Invoice i2 where i2.Category=:cat and i2.Num=i.Num+1) order by i.Num"; var list = await (session.CreateQuery(q1) .SetParameter("cat", 10) .ListAsync()); diff --git a/src/NHibernate.Test/Async/Tools/hbm2ddl/SchemaMetadataUpdaterTest/SchemaMetadataUpdaterFixture.cs b/src/NHibernate.Test/Async/Tools/hbm2ddl/SchemaMetadataUpdaterTest/SchemaMetadataUpdaterFixture.cs index 9e8f4dcf332..3ffd4a82e98 100644 --- a/src/NHibernate.Test/Async/Tools/hbm2ddl/SchemaMetadataUpdaterTest/SchemaMetadataUpdaterFixture.cs +++ b/src/NHibernate.Test/Async/Tools/hbm2ddl/SchemaMetadataUpdaterTest/SchemaMetadataUpdaterFixture.cs @@ -254,7 +254,7 @@ public async Task WhenConfiguredOnlyExplicitAutoQuoteAsync() // Test uses the default dialect driver, which will not accept Odbc or OleDb connection strings. if (typeof(OdbcDriver).IsAssignableFrom(driverClass) || typeof(OleDbDriver).IsAssignableFrom(driverClass)) Assert.Ignore("Test is not compatible with OleDb or ODBC driver connection strings"); - var configuredDialect = Dialect.Dialect.GetDialect(); + var configuredDialect = Dialect.Dialect.GetDialect(configuration.Properties); if(!configuredDialect.DefaultProperties.ContainsKey(Environment.ConnectionDriver)) { Assert.Ignore(GetType() + " does not apply to " + configuredDialect); diff --git a/src/NHibernate.Test/NHSpecificTest/NH1171/Fixture.cs b/src/NHibernate.Test/NHSpecificTest/NH1171/Fixture.cs index b164b2967eb..9de8122f5c8 100644 --- a/src/NHibernate.Test/NHSpecificTest/NH1171/Fixture.cs +++ b/src/NHibernate.Test/NHSpecificTest/NH1171/Fixture.cs @@ -9,8 +9,11 @@ public class Fixture : BugTestCase { protected override bool AppliesTo(Dialect.Dialect dialect) { - // Firebird has issues with comments containing apostrophes - return !(dialect is FirebirdDialect); + return + // Firebird has issues with comments containing apostrophes + !(dialect is FirebirdDialect) + // GH-2853: Oracle client bug: throws Oracle.ManagedDataAccess.Client.OracleException : ORA-01008: not all variables bound + && !(dialect is Oracle8iDialect); } protected override void Configure(NHibernate.Cfg.Configuration configuration) diff --git a/src/NHibernate.Test/NHSpecificTest/NH1693/Fixture.cs b/src/NHibernate.Test/NHSpecificTest/NH1693/Fixture.cs index aec13abcc00..b706e9ee232 100644 --- a/src/NHibernate.Test/NHSpecificTest/NH1693/Fixture.cs +++ b/src/NHibernate.Test/NHSpecificTest/NH1693/Fixture.cs @@ -38,7 +38,7 @@ public void without_filter() using (var tx = session.BeginTransaction()) { var q1 = - "from Invoice i where i.Mode='a' and i.Category=:cat and not exists (from Invoice i2 where i2.Mode='a' and i2.Category=:cat and i2.Num=i.Num+1)"; + "from Invoice i where i.Mode='a' and i.Category=:cat and not exists (from Invoice i2 where i2.Mode='a' and i2.Category=:cat and i2.Num=i.Num+1) order by i.Num"; var list = session.CreateQuery(q1) .SetParameter("cat", 10) .List(); @@ -59,7 +59,7 @@ public void with_filter() session.EnableFilter("modeFilter").SetParameter("currentMode", "a"); var q1 = - "from Invoice i where i.Category=:cat and not exists (from Invoice i2 where i2.Category=:cat and i2.Num=i.Num+1)"; + "from Invoice i where i.Category=:cat and not exists (from Invoice i2 where i2.Category=:cat and i2.Num=i.Num+1) order by i.Num"; var list = session.CreateQuery(q1) .SetParameter("cat", 10) .List(); diff --git a/src/NHibernate.Test/NHibernate.Test.csproj b/src/NHibernate.Test/NHibernate.Test.csproj index 27b8bf16823..dfc46ebef18 100644 --- a/src/NHibernate.Test/NHibernate.Test.csproj +++ b/src/NHibernate.Test/NHibernate.Test.csproj @@ -74,12 +74,13 @@ - + + diff --git a/src/NHibernate.Test/Tools/hbm2ddl/SchemaMetadataUpdaterTest/SchemaMetadataUpdaterFixture.cs b/src/NHibernate.Test/Tools/hbm2ddl/SchemaMetadataUpdaterTest/SchemaMetadataUpdaterFixture.cs index 62141b92a21..519650e5ba5 100644 --- a/src/NHibernate.Test/Tools/hbm2ddl/SchemaMetadataUpdaterTest/SchemaMetadataUpdaterFixture.cs +++ b/src/NHibernate.Test/Tools/hbm2ddl/SchemaMetadataUpdaterTest/SchemaMetadataUpdaterFixture.cs @@ -259,7 +259,7 @@ public void WhenConfiguredOnlyExplicitAutoQuote() // Test uses the default dialect driver, which will not accept Odbc or OleDb connection strings. if (typeof(OdbcDriver).IsAssignableFrom(driverClass) || typeof(OleDbDriver).IsAssignableFrom(driverClass)) Assert.Ignore("Test is not compatible with OleDb or ODBC driver connection strings"); - var configuredDialect = Dialect.Dialect.GetDialect(); + var configuredDialect = Dialect.Dialect.GetDialect(configuration.Properties); if(!configuredDialect.DefaultProperties.ContainsKey(Environment.ConnectionDriver)) { Assert.Ignore(GetType() + " does not apply to " + configuredDialect);