Skip to content

Commit 6108884

Browse files
authored
Merge pull request linq2db#2344 from linq2db/master
Release 3.0.1
2 parents 5d4815d + 48bf0d5 commit 6108884

5 files changed

Lines changed: 71 additions & 5 deletions

File tree

Build/Azure/pipelines/default.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
variables:
22
solution: 'linq2db.sln'
33
build_configuration: 'Azure'
4-
assemblyVersion: 3.0.0
5-
nugetVersion: 3.0.0
6-
nugetDevVersion: 3.0.0
4+
assemblyVersion: 3.0.1
5+
nugetVersion: 3.0.1
6+
nugetDevVersion: 3.0.1
77
artifact_nugets: 'nugets'
88
artifact_linq2db_binaries: 'linq2db_binaries'
99
artifact_linq2db_tools_binaries: 'linq2db_tools_binaries'

Source/LinqToDB/Data/RetryPolicy/RetryingDbCommand.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
using System;
2-
using System.Data;
1+
using System.Data;
32
using System.Data.Common;
43
using System.Threading;
54
using System.Threading.Tasks;

Source/LinqToDB/DataProvider/DynamicDataProviderBase.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ namespace LinqToDB.DataProvider
99
{
1010
using Expressions;
1111
using Extensions;
12+
using LinqToDB.Data.RetryPolicy;
1213
using Mapping;
1314

1415
public abstract class DynamicDataProviderBase<TProviderMappings> : DataProviderBase
@@ -168,11 +169,19 @@ protected bool SetProviderField(Type toType, Type fieldType, string methodName,
168169

169170
public virtual IDbCommand? TryGetProviderCommand(IDbCommand command, MappingSchema ms)
170171
{
172+
// remove retry policy wrapper
173+
if (command is RetryingDbCommand rcmd)
174+
command = rcmd.UnderlyingObject;
175+
171176
return TryConvertProviderType(_commandConverters, Adapter.CommandType, command, ms);
172177
}
173178

174179
public virtual IDbConnection? TryGetProviderConnection(IDbConnection connection, MappingSchema ms)
175180
{
181+
// remove retry policy wrapper
182+
if (connection is RetryingDbConnection rcn)
183+
connection = rcn.UnderlyingObject;
184+
176185
return TryConvertProviderType(_connectionConverters, Adapter.ConnectionType, connection, ms);
177186
}
178187

Tests/Linq/Data/MiniProfilerTests.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
using LinqToDB.DataProvider.Informix;
3838
using LinqToDB.DataProvider.Oracle;
3939
using LinqToDB.DataProvider.PostgreSQL;
40+
using LinqToDB.Common;
4041
#if NET46
4142
using IBM.Data.Informix;
4243
#endif
@@ -525,6 +526,20 @@ public void TestDB2([IncludeDataSources(ProviderName.DB2)] string context, [Valu
525526
}
526527
}
527528

529+
[Test]
530+
public void TestRetryPolicy([IncludeDataSources(TestProvName.AllSqlServer)] string context, [Values] ConnectionType type)
531+
{
532+
Configuration.RetryPolicy.Factory = connection => new SqlServerRetryPolicy();
533+
try
534+
{
535+
TestSqlServer(context, type);
536+
}
537+
finally
538+
{
539+
Configuration.RetryPolicy.Factory = null;
540+
}
541+
}
542+
528543
[Test]
529544
public void TestSqlServer([IncludeDataSources(TestProvName.AllSqlServer)] string context, [Values] ConnectionType type)
530545
{

Tests/Linq/DataProvider/OracleTests.cs

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@
2525
namespace Tests.DataProvider
2626
{
2727
using System.Diagnostics.CodeAnalysis;
28+
using System.Threading;
29+
using System.Threading.Tasks;
30+
using LinqToDB.Data.RetryPolicy;
2831
using LinqToDB.Linq;
2932
using LinqToDB.SchemaProvider;
3033
using Model;
@@ -2873,5 +2876,45 @@ void AssertColumn(string name, string dbType, int? length)
28732876
}
28742877
}
28752878
}
2879+
2880+
#region Issue 2342
2881+
[Test]
2882+
public void Issue2342Test([IncludeDataSources(false, TestProvName.AllOracle)] string context)
2883+
{
2884+
var oldMode = OracleTools.UseAlternativeBulkCopy;
2885+
try
2886+
{
2887+
OracleTools.UseAlternativeBulkCopy = AlternativeBulkCopy.InsertInto;
2888+
Configuration.RetryPolicy.Factory = connection => new DummyRetryPolicy();
2889+
2890+
using (var db = new TestDataConnection(context))
2891+
using (var table = db.CreateTempTable<Issue2342Entity>())
2892+
using (db.BeginTransaction())
2893+
{
2894+
table.BulkCopy(Enumerable.Range(1, 10).Select(id => new Issue2342Entity { Id = id, Name = $"Name_{id}" }));
2895+
}
2896+
}
2897+
finally
2898+
{
2899+
OracleTools.UseAlternativeBulkCopy = oldMode;
2900+
Configuration.RetryPolicy.Factory = null;
2901+
}
2902+
}
2903+
2904+
sealed class DummyRetryPolicy : IRetryPolicy
2905+
{
2906+
public TResult Execute<TResult>(Func<TResult> operation) => operation();
2907+
public void Execute(Action operation) => operation();
2908+
public Task<TResult> ExecuteAsync<TResult>(Func<CancellationToken, Task<TResult>> operation, CancellationToken cancellationToken = new CancellationToken()) => operation(cancellationToken);
2909+
public Task ExecuteAsync(Func<CancellationToken, Task> operation, CancellationToken cancellationToken = new CancellationToken()) => operation(cancellationToken);
2910+
}
2911+
2912+
[Table]
2913+
sealed class Issue2342Entity
2914+
{
2915+
[Column] public long Id { get; set; }
2916+
[NotNull, Column(Length = 256)] public string Name { get; set; } = null!;
2917+
}
2918+
#endregion
28762919
}
28772920
}

0 commit comments

Comments
 (0)