Skip to content

Commit

Permalink
Revert previous changes to Core components.
Browse files Browse the repository at this point in the history
Fix "duplicate key" bug. Column name may differ (case only) from provided primaryKeyName.
Avoid statement caching when using Oracle provider.
Escape Oracle stored procedure parameter names.
Cleanup ParametersHelper gutter, no logic changes.
  • Loading branch information
Curlack committed Oct 31, 2023
1 parent 82f67b8 commit bbcfcb0
Show file tree
Hide file tree
Showing 26 changed files with 754 additions and 184 deletions.
Original file line number Diff line number Diff line change
@@ -1,14 +1,46 @@
using PetaPoco.Tests.Integration.Providers;
using System.Reflection;
using PetaPoco.Tests.Integration.Providers;
using Xunit;

namespace PetaPoco.Tests.Integration.Databases.Oracle
{
[Collection("Oracle")]
public class OracleDatabaseTests : DatabaseTests
public abstract partial class OracleDatabaseTests : DatabaseTests
{
public OracleDatabaseTests()
: base(new OracleTestProvider())
protected OracleDatabaseTests(TestProvider provider)
: base(provider)
{
}

[Collection("Oracle.Delimited")]
public class Delimited : OracleDatabaseTests
{
public Delimited()
: base(new OracleDelimitedTestProvider())
{
}
}

[Collection("Oracle.Ordinary")]
public class Ordinary : OracleDatabaseTests
{
public Ordinary()
: base(new OracleOrdinaryTestProvider())
{
}

/// <remarks>
/// We need to retain the custom provider and default mapper specified in the test provider
/// to ensure correct logic is applied.
/// </remarks>
protected override void AfterDbCreate(Database db)
{
base.AfterDbCreate(db);

// ReSharper disable once PossibleNullReferenceException
db.GetType().GetField("_provider", BindingFlags.NonPublic | BindingFlags.Instance).SetValue(db, DB.Provider);
// ReSharper disable once PossibleNullReferenceException
db.GetType().GetField("_defaultMapper", BindingFlags.NonPublic | BindingFlags.Instance).SetValue(db, DB.DefaultMapper);
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,29 @@

namespace PetaPoco.Tests.Integration.Databases.Oracle
{
[Collection("Oracle")]
public class OracleDeleteTests : DeleteTests
public abstract partial class OracleDeleteTests : DeleteTests
{
public OracleDeleteTests()
: base(new OracleTestProvider())
protected OracleDeleteTests(TestProvider provider)
: base(provider)
{
}

[Collection("Oracle.Delimited")]
public class Delimited : OracleDeleteTests
{
public Delimited()
: base(new OracleDelimitedTestProvider())
{
}
}

[Collection("Oracle.Ordinary")]
public class Ordinary : OracleDeleteTests
{
public Ordinary()
: base(new OracleOrdinaryTestProvider())
{
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,29 @@

namespace PetaPoco.Tests.Integration.Databases.Oracle
{
[Collection("Oracle")]
public class OracleExecuteTests : ExecuteTests
public abstract partial class OracleExecuteTests : ExecuteTests
{
public OracleExecuteTests()
: base(new OracleTestProvider())
protected OracleExecuteTests(TestProvider provider)
: base(provider)
{
}

[Collection("Oracle.Delimited")]
public class Delimited : OracleExecuteTests
{
public Delimited()
: base(new OracleDelimitedTestProvider())
{
}
}

[Collection("Oracle.Ordinary")]
public class Ordinary : OracleExecuteTests
{
public Ordinary()
: base(new OracleOrdinaryTestProvider())
{
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,29 @@

namespace PetaPoco.Tests.Integration.Databases.Oracle
{
[Collection("Oracle")]
public class OracleInsertTests : InsertTests
public abstract partial class OracleInsertTests : InsertTests
{
public OracleInsertTests()
: base(new OracleTestProvider())
protected OracleInsertTests(TestProvider provider)
: base(provider)
{
}

[Collection("Oracle.Delimited")]
public class Delimited : OracleInsertTests
{
public Delimited()
: base(new OracleDelimitedTestProvider())
{
}
}

[Collection("Oracle.Ordinary")]
public class Ordinary : OracleInsertTests
{
public Ordinary()
: base(new OracleOrdinaryTestProvider())
{
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,29 @@

namespace PetaPoco.Tests.Integration.Databases.Oracle
{
[Collection("Oracle")]
public class OracleMiscellaneousTests : MiscellaneousTests
public abstract partial class OracleMiscellaneousTests : MiscellaneousTests
{
public OracleMiscellaneousTests()
: base(new OracleTestProvider())
protected OracleMiscellaneousTests(TestProvider provider)
: base(provider)
{
}

[Collection("Oracle.Delimited")]
public class Delimited : OracleMiscellaneousTests
{
public Delimited()
: base(new OracleDelimitedTestProvider())
{
}
}

[Collection("Oracle.Ordinary")]
public class Ordinary : OracleMiscellaneousTests
{
public Ordinary()
: base(new OracleOrdinaryTestProvider())
{
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,36 +6,79 @@

namespace PetaPoco.Tests.Integration.Databases.Oracle
{
[Collection("Oracle")]
public class OraclePreExecuteTests : PreExecuteTests
public abstract partial class OraclePreExecuteTests : PreExecuteTests
{
protected override IPreExecuteDatabaseProvider Provider => DB.Provider as PreExecuteDatabaseProvider;

public OraclePreExecuteTests()
: base(new PreExecuteTestProvider())
protected OraclePreExecuteTests(TestProvider provider)
: base(provider)
{
Provider.ThrowExceptions = true;
}

protected class PreExecuteTestProvider : OracleTestProvider
[Collection("Oracle.Delimited")]
public class Delimited : OraclePreExecuteTests
{
protected override IDatabase LoadFromConnectionName(string name)
=> BuildFromConnectionName(name).UsingProvider<PreExecuteDatabaseProvider>().Create();
protected override IPreExecuteDatabaseProvider Provider => DB.Provider as PreExecuteDatabaseProvider;

public Delimited()
: base(new PreExecuteTestProvider())
{
Provider.ThrowExceptions = true;
}

protected class PreExecuteTestProvider : OracleDelimitedTestProvider
{
protected override IDatabase LoadFromConnectionName(string name)
=> BuildFromConnectionName(name).UsingProvider<PreExecuteDatabaseProvider>().Create();
}

protected class PreExecuteDatabaseProvider : PetaPoco.Providers.OracleDatabaseProvider, IPreExecuteDatabaseProvider
{
public bool ThrowExceptions { get; set; }
public List<IDataParameter> Parameters { get; set; } = new List<IDataParameter>();

public override void PreExecute(IDbCommand cmd)
{
Parameters.Clear();

if (ThrowExceptions)
{
Parameters = cmd.Parameters.Cast<IDataParameter>().ToList();
throw new PreExecuteException();
}
}
}
}

protected class PreExecuteDatabaseProvider : PetaPoco.Providers.OracleDatabaseProvider, IPreExecuteDatabaseProvider
[Collection("Oracle.Ordinary")]
public class Ordinary : OraclePreExecuteTests
{
public bool ThrowExceptions { get; set; }
public List<IDataParameter> Parameters { get; set; } = new List<IDataParameter>();
protected override IPreExecuteDatabaseProvider Provider => DB.Provider as PreExecuteDatabaseProvider;

public Ordinary()
: base(new PreExecuteTestProvider())
{
Provider.ThrowExceptions = true;
}

public override void PreExecute(IDbCommand cmd)
protected class PreExecuteTestProvider : OracleOrdinaryTestProvider
{
Parameters.Clear();
protected override IDatabase LoadFromConnectionName(string name)
=> BuildFromConnectionName(name).UsingProvider<PreExecuteDatabaseProvider>().Create();
}

if (ThrowExceptions)
protected class PreExecuteDatabaseProvider : PetaPoco.Providers.OracleDatabaseProvider, IPreExecuteDatabaseProvider
{
public bool ThrowExceptions { get; set; }
public List<IDataParameter> Parameters { get; set; } = new List<IDataParameter>();

public override void PreExecute(IDbCommand cmd)
{
Parameters = cmd.Parameters.Cast<IDataParameter>().ToList();
throw new PreExecuteException();
Parameters.Clear();

if (ThrowExceptions)
{
Parameters = cmd.Parameters.Cast<IDataParameter>().ToList();
throw new PreExecuteException();
}
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,29 @@

namespace PetaPoco.Tests.Integration.Databases.Oracle
{
[Collection("Oracle")]
public class OracleQueryLinqTests : QueryLinqTests
public abstract partial class OracleQueryLinqTests : QueryLinqTests
{
public OracleQueryLinqTests()
: base(new OracleTestProvider())
protected OracleQueryLinqTests(TestProvider provider)
: base(provider)
{
}

[Collection("Oracle.Delimited")]
public class Delimited : OracleQueryLinqTests
{
public Delimited()
: base(new OracleDelimitedTestProvider())
{
}
}

[Collection("Oracle.Ordinary")]
public class Ordinary : OracleQueryLinqTests
{
public Ordinary()
: base(new OracleOrdinaryTestProvider())
{
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,31 @@

namespace PetaPoco.Tests.Integration.Databases.Oracle
{
[Collection("Oracle")]
public class OracleQueryTests : QueryTests
public abstract partial class OracleQueryTests : QueryTests
{
public OracleQueryTests()
: base(new OracleTestProvider())
protected OracleQueryTests(TestProvider provider)
: base(provider)
{
}

[Collection("Oracle.Delimited")]
public class Delimited : OracleQueryTests
{
public Delimited()
: base(new OracleDelimitedTestProvider())
{
}
}

[Collection("Oracle.Ordinary")]
public class Ordinary : OracleQueryTests
{
public Ordinary()
: base(new OracleOrdinaryTestProvider())
{
}
}

[Fact]
public override async Task FetchAsyncWithPaging_ForDynamicTypeGivenSql_ShouldReturnValidDynamicTypeCollection()
{
Expand Down

0 comments on commit bbcfcb0

Please sign in to comment.