Skip to content

Commit e8d1545

Browse files
committed
Minor improvemts to bulk copy.
1 parent 6d5eacc commit e8d1545

File tree

3 files changed

+19
-11
lines changed

3 files changed

+19
-11
lines changed

Source/ISeriesProvider/DB2iSeriesBulkCopy.AccessClient.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ private BulkCopyRowsCopied ProviderSpecificCopyImpl_AccessClient<T>(
2828
var columns = descriptor.Columns.Where(c => !c.SkipOnInsert || options.KeepIdentity == true && c.IsIdentity).ToList();
2929
var rd = new BulkCopyReader<T>(dataConnection, columns, source);
3030
var rc = new BulkCopyRowsCopied();
31-
var sqlBuilder = dataConnection.DataProvider.CreateSqlBuilder(dataConnection.MappingSchema, dataOptions);
31+
var sqlBuilder = dataConnection.DataProvider.CreateSqlBuilder(table.DataContext.MappingSchema, dataOptions);
3232
var tableName = GetTableName(sqlBuilder, options, table);
3333

3434
var columnNames = columns.Select(x => x.ColumnName);

Source/ISeriesProvider/DB2iSeriesBulkCopy.DB2Connect.cs

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
using System;
22
using System.Collections.Generic;
3-
using System.Threading;
4-
using System.Threading.Tasks;
53
using System.Data;
64
using System.Linq;
75
using System.Data.Common;
@@ -18,19 +16,18 @@ partial class DB2iSeriesBulkCopy : BasicBulkCopy
1816
//Copied from DB2BulkCopy
1917
private static BulkCopyRowsCopied ProviderSpecificCopyImpl_DB2<T>(
2018
ITable<T> table,
21-
DataOptions dataOptions,
19+
BulkCopyOptions options,
2220
IEnumerable<T> source,
2321
DataConnection dataConnection,
2422
DbConnection connection,
2523
DB2.DB2ProviderAdapter.BulkCopyAdapter bulkCopy,
2624
Action<DataConnection, Func<string>, Func<int>> traceAction)
2725
{
28-
var options = dataOptions.BulkCopyOptions;
29-
var descriptor = dataConnection.MappingSchema.GetEntityDescriptor(typeof(T));
26+
var descriptor = table.DataContext.MappingSchema.GetEntityDescriptor(typeof(T), dataConnection.Options.ConnectionOptions.OnEntityDescriptorCreated);
3027
var columns = descriptor.Columns.Where(c => !c.SkipOnInsert || options.KeepIdentity == true && c.IsIdentity).ToList();
3128
var rd = new BulkCopyReader<T>(dataConnection, columns, source);
3229
var rc = new BulkCopyRowsCopied();
33-
var sqlBuilder = dataConnection.DataProvider.CreateSqlBuilder(dataConnection.MappingSchema, dataOptions);
30+
var sqlBuilder = dataConnection.DataProvider.CreateSqlBuilder(table.DataContext.MappingSchema, dataConnection.Options);
3431
var tableName = GetTableName(sqlBuilder, options, table);
3532

3633
var bcOptions = DB2BulkCopyOptions.Default;
@@ -47,7 +44,7 @@ private static BulkCopyRowsCopied ProviderSpecificCopyImpl_DB2<T>(
4744
{
4845
bc.NotifyAfter = notifyAfter;
4946

50-
bc.DB2RowsCopied += (sender, args) =>
47+
bc.DB2RowsCopied += (_, args) =>
5148
{
5249
rc.RowsCopied = args.RowsCopied;
5350
options.RowsCopiedCallback(rc);

Source/ISeriesProvider/DB2iSeriesBulkCopy.cs

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,17 @@ partial class DB2iSeriesBulkCopy : BasicBulkCopy
1111
{
1212
const int MAX_ALLOWABLE_MULTIPLE_ROWS_BATCH_SIZE = 100;
1313

14+
/// <remarks>
15+
/// Settings based on https://www.ibm.com/docs/en/i/7.3?topic=reference-sql-limits
16+
/// We subtract 1 here to be safe since some ADO providers use parameter for command itself.
17+
/// </remarks>
18+
protected override int MaxParameters => 1999;
19+
/// <remarks>
20+
/// Setting based on https://www.ibm.com/docs/en/i/7.3?topic=reference-sql-limits
21+
/// Max is actually 2MIB, but we keep a lower number here to avoid the cost of huge statements.
22+
/// </remarks>
23+
protected override int MaxSqlLength => 327670;
24+
1425
private readonly DB2iSeriesDataProvider dataProvider;
1526
private readonly DB2iSeriesSqlProviderFlags dB2ISeriesSqlProviderFlags;
1627

@@ -33,7 +44,7 @@ protected override BulkCopyRowsCopied ProviderSpecificCopy<T>(
3344
if (dataProvider.TryGetProviderConnection(dataConnection, out var connection))
3445
return ProviderSpecificCopyImpl_DB2(
3546
table,
36-
options,
47+
options.BulkCopyOptions,
3748
source,
3849
dataConnection,
3950
connection,
@@ -71,7 +82,7 @@ protected override Task<BulkCopyRowsCopied> ProviderSpecificCopyAsync<T>(ITable<
7182
// call the synchronous provider-specific implementation as provider doesn't support async
7283
return Task.FromResult(ProviderSpecificCopyImpl_DB2(
7384
table,
74-
options,
85+
options.BulkCopyOptions,
7586
source,
7687
dataConnection,
7788
connection,
@@ -115,7 +126,7 @@ protected override async Task<BulkCopyRowsCopied> ProviderSpecificCopyAsync<T>(I
115126
// call the synchronous provider-specific implementation as provider doesn't support async
116127
return ProviderSpecificCopyImpl_DB2(
117128
table,
118-
options,
129+
options.BulkCopyOptions,
119130
AsyncToSyncEnumerable(enumerator),
120131
dataConnection,
121132
connection,

0 commit comments

Comments
 (0)