1
- using RepoDb . Extensions ;
2
- using System ;
1
+ using System ;
3
2
using System . Collections . Generic ;
4
3
using System . Data ;
5
4
using System . Data . Common ;
6
5
using System . Linq ;
7
6
using System . Threading ;
8
7
using System . Threading . Tasks ;
9
8
using Microsoft . Data . SqlClient ;
9
+ using RepoDb . Extensions ;
10
10
using RepoDb . Interfaces ;
11
11
12
12
namespace RepoDb
@@ -30,18 +30,20 @@ public static partial class SqlConnectionExtension
30
30
/// <param name="isReturnIdentity"></param>
31
31
/// <param name="usePhysicalPseudoTempTable"></param>
32
32
/// <param name="transaction"></param>
33
+ /// <param name="trace"></param>
33
34
/// <returns></returns>
34
35
private static int BulkInsertInternalBase < TEntity > ( SqlConnection connection ,
35
36
string tableName ,
36
37
IEnumerable < TEntity > entities ,
37
- IEnumerable < BulkInsertMapItem > mappings = null ,
38
+ IEnumerable < BulkInsertMapItem > ? mappings = null ,
38
39
SqlBulkCopyOptions options = default ,
39
- string hints = null ,
40
+ string ? hints = null ,
40
41
int ? bulkCopyTimeout = null ,
41
42
int ? batchSize = null ,
42
- bool ? isReturnIdentity = null ,
43
- bool ? usePhysicalPseudoTempTable = null ,
44
- SqlTransaction transaction = null )
43
+ bool isReturnIdentity = false ,
44
+ bool usePhysicalPseudoTempTable = false ,
45
+ SqlTransaction ? transaction = null ,
46
+ ITrace ? trace = null )
45
47
where TEntity : class
46
48
{
47
49
// Validate
@@ -140,7 +142,7 @@ private static int BulkInsertInternalBase<TEntity>(SqlConnection connection,
140
142
141
143
// Drop the table after used
142
144
sql = GetDropTemporaryTableSqlText ( tempTableName , dbSetting ) ;
143
- connection . ExecuteNonQuery ( sql , transaction : transaction ) ;
145
+ connection . ExecuteNonQuery ( sql , transaction : transaction , trace : trace ) ;
144
146
}
145
147
146
148
CommitTransaction ( transaction , hasTransaction ) ;
@@ -154,7 +156,7 @@ private static int BulkInsertInternalBase<TEntity>(SqlConnection connection,
154
156
{
155
157
DisposeTransaction ( transaction , hasTransaction ) ;
156
158
}
157
-
159
+
158
160
// Return the result
159
161
return result ;
160
162
}
@@ -174,11 +176,11 @@ private static int BulkInsertInternalBase<TEntity>(SqlConnection connection,
174
176
internal static int BulkInsertInternalBase ( SqlConnection connection ,
175
177
string tableName ,
176
178
DbDataReader reader ,
177
- IEnumerable < BulkInsertMapItem > mappings = null ,
179
+ IEnumerable < BulkInsertMapItem > ? mappings = null ,
178
180
SqlBulkCopyOptions options = default ,
179
181
int ? bulkCopyTimeout = null ,
180
182
int ? batchSize = null ,
181
- SqlTransaction transaction = null )
183
+ SqlTransaction ? transaction = null )
182
184
{
183
185
// Validate
184
186
if ( ! reader . HasRows )
@@ -253,7 +255,7 @@ internal static int BulkInsertInternalBase(SqlConnection connection,
253
255
{
254
256
DisposeTransaction ( transaction , hasTransaction ) ;
255
257
}
256
-
258
+
257
259
// Return the result
258
260
return result ;
259
261
}
@@ -273,19 +275,21 @@ internal static int BulkInsertInternalBase(SqlConnection connection,
273
275
/// <param name="isReturnIdentity"></param>
274
276
/// <param name="usePhysicalPseudoTempTable"></param>
275
277
/// <param name="transaction"></param>
278
+ /// <param name="trace"></param>
276
279
/// <returns></returns>
277
280
internal static int BulkInsertInternalBase ( SqlConnection connection ,
278
281
string tableName ,
279
282
DataTable dataTable ,
280
283
DataRowState ? rowState = null ,
281
- IEnumerable < BulkInsertMapItem > mappings = null ,
284
+ IEnumerable < BulkInsertMapItem > ? mappings = null ,
282
285
SqlBulkCopyOptions options = default ,
283
- string hints = null ,
286
+ string ? hints = null ,
284
287
int ? bulkCopyTimeout = null ,
285
288
int ? batchSize = null ,
286
- bool ? isReturnIdentity = null ,
287
- bool ? usePhysicalPseudoTempTable = null ,
288
- SqlTransaction transaction = null )
289
+ bool isReturnIdentity = false ,
290
+ bool usePhysicalPseudoTempTable = false ,
291
+ SqlTransaction ? transaction = null ,
292
+ ITrace ? trace = null )
289
293
{
290
294
// Validate
291
295
if ( dataTable ? . Rows . Count <= 0 )
@@ -391,7 +395,7 @@ internal static int BulkInsertInternalBase(SqlConnection connection,
391
395
392
396
// Drop the table after used
393
397
sql = GetDropTemporaryTableSqlText ( tempTableName , dbSetting ) ;
394
- connection . ExecuteNonQuery ( sql , transaction : transaction ) ;
398
+ connection . ExecuteNonQuery ( sql , transaction : transaction , trace : trace ) ;
395
399
}
396
400
}
397
401
@@ -406,7 +410,7 @@ internal static int BulkInsertInternalBase(SqlConnection connection,
406
410
{
407
411
DisposeTransaction ( transaction , hasTransaction ) ;
408
412
}
409
-
413
+
410
414
// Return the result
411
415
return result ;
412
416
}
@@ -430,19 +434,21 @@ internal static int BulkInsertInternalBase(SqlConnection connection,
430
434
/// <param name="isReturnIdentity"></param>
431
435
/// <param name="usePhysicalPseudoTempTable"></param>
432
436
/// <param name="transaction"></param>
437
+ /// <param name="trace"></param>
433
438
/// <param name="cancellationToken"></param>
434
439
/// <returns></returns>
435
440
private static async Task < int > BulkInsertAsyncInternalBase < TEntity > ( SqlConnection connection ,
436
441
string tableName ,
437
442
IEnumerable < TEntity > entities ,
438
- IEnumerable < BulkInsertMapItem > mappings = null ,
443
+ IEnumerable < BulkInsertMapItem > ? mappings = null ,
439
444
SqlBulkCopyOptions options = default ,
440
- string hints = null ,
445
+ string ? hints = null ,
441
446
int ? bulkCopyTimeout = null ,
442
447
int ? batchSize = null ,
443
- bool ? isReturnIdentity = null ,
444
- bool ? usePhysicalPseudoTempTable = null ,
445
- SqlTransaction transaction = null ,
448
+ bool isReturnIdentity = false ,
449
+ bool usePhysicalPseudoTempTable = false ,
450
+ SqlTransaction ? transaction = null ,
451
+ ITrace ? trace = null ,
446
452
CancellationToken cancellationToken = default )
447
453
where TEntity : class
448
454
{
@@ -545,7 +551,7 @@ private static async Task<int> BulkInsertAsyncInternalBase<TEntity>(SqlConnectio
545
551
546
552
// Drop the table after used
547
553
sql = GetDropTemporaryTableSqlText ( tempTableName , dbSetting ) ;
548
- await connection . ExecuteNonQueryAsync ( sql , transaction : transaction , cancellationToken : cancellationToken ) ;
554
+ await connection . ExecuteNonQueryAsync ( sql , transaction : transaction , trace : trace , cancellationToken : cancellationToken ) ;
549
555
}
550
556
551
557
CommitTransaction ( transaction , hasTransaction ) ;
@@ -559,11 +565,11 @@ private static async Task<int> BulkInsertAsyncInternalBase<TEntity>(SqlConnectio
559
565
{
560
566
DisposeTransaction ( transaction , hasTransaction ) ;
561
567
}
562
-
568
+
563
569
// Return the result
564
570
return result ;
565
571
}
566
-
572
+
567
573
/// <summary>
568
574
///
569
575
/// </summary>
@@ -580,11 +586,11 @@ private static async Task<int> BulkInsertAsyncInternalBase<TEntity>(SqlConnectio
580
586
internal static async Task < int > BulkInsertAsyncInternalBase ( SqlConnection connection ,
581
587
string tableName ,
582
588
DbDataReader reader ,
583
- IEnumerable < BulkInsertMapItem > mappings = null ,
589
+ IEnumerable < BulkInsertMapItem > ? mappings = null ,
584
590
SqlBulkCopyOptions options = default ,
585
591
int ? bulkCopyTimeout = null ,
586
592
int ? batchSize = null ,
587
- SqlTransaction transaction = null ,
593
+ SqlTransaction ? transaction = null ,
588
594
CancellationToken cancellationToken = default )
589
595
{
590
596
// Validate
@@ -661,7 +667,7 @@ internal static async Task<int> BulkInsertAsyncInternalBase(SqlConnection connec
661
667
{
662
668
DisposeTransaction ( transaction , hasTransaction ) ;
663
669
}
664
-
670
+
665
671
// Return the result
666
672
return result ;
667
673
}
@@ -681,20 +687,22 @@ internal static async Task<int> BulkInsertAsyncInternalBase(SqlConnection connec
681
687
/// <param name="isReturnIdentity"></param>
682
688
/// <param name="usePhysicalPseudoTempTable"></param>
683
689
/// <param name="transaction"></param>
690
+ /// <param name="trace"></param>
684
691
/// <param name="cancellationToken"></param>
685
692
/// <returns></returns>
686
693
internal static async Task < int > BulkInsertAsyncInternalBase ( SqlConnection connection ,
687
694
string tableName ,
688
695
DataTable dataTable ,
689
696
DataRowState ? rowState = null ,
690
- IEnumerable < BulkInsertMapItem > mappings = null ,
697
+ IEnumerable < BulkInsertMapItem > ? mappings = null ,
691
698
SqlBulkCopyOptions options = default ,
692
- string hints = null ,
699
+ string ? hints = null ,
693
700
int ? bulkCopyTimeout = null ,
694
701
int ? batchSize = null ,
695
- bool ? isReturnIdentity = null ,
696
- bool ? usePhysicalPseudoTempTable = null ,
697
- SqlTransaction transaction = null ,
702
+ bool isReturnIdentity = false ,
703
+ bool usePhysicalPseudoTempTable = false ,
704
+ SqlTransaction ? transaction = null ,
705
+ ITrace ? trace = null ,
698
706
CancellationToken cancellationToken = default )
699
707
{
700
708
// Validate
@@ -752,7 +760,7 @@ internal static async Task<int> BulkInsertAsyncInternalBase(SqlConnection connec
752
760
753
761
// Pseudo temp table
754
762
var withPseudoExecution = isReturnIdentity == true && identityDbField != null ;
755
- var tempTableName = await CreateBulkInsertTempTableIfNecessaryAsync ( connection ,
763
+ var tempTableName = await CreateBulkInsertTempTableIfNecessaryAsync ( connection ,
756
764
tableName ,
757
765
usePhysicalPseudoTempTable ,
758
766
transaction ,
@@ -803,7 +811,7 @@ internal static async Task<int> BulkInsertAsyncInternalBase(SqlConnection connec
803
811
804
812
// Drop the table after used
805
813
sql = GetDropTemporaryTableSqlText ( tempTableName , dbSetting ) ;
806
- await connection . ExecuteNonQueryAsync ( sql , transaction : transaction , cancellationToken : cancellationToken ) ;
814
+ await connection . ExecuteNonQueryAsync ( sql , transaction : transaction , trace : trace , cancellationToken : cancellationToken ) ;
807
815
}
808
816
}
809
817
@@ -818,30 +826,31 @@ internal static async Task<int> BulkInsertAsyncInternalBase(SqlConnection connec
818
826
{
819
827
DisposeTransaction ( transaction , hasTransaction ) ;
820
828
}
821
-
829
+
822
830
// Return the result
823
831
return result ;
824
832
}
825
833
826
834
#endregion
827
-
835
+
828
836
private static string CreateBulkInsertTempTableIfNecessary < TSqlTransaction > (
829
837
IDbConnection connection ,
830
838
string tableName ,
831
839
bool ? usePhysicalPseudoTempTable ,
832
840
TSqlTransaction transaction ,
833
841
bool withPseudoExecution ,
834
842
IDbSetting dbSetting ,
835
- IEnumerable < Field > fields )
843
+ IEnumerable < Field > fields ,
844
+ ITrace ? trace = null )
836
845
where TSqlTransaction : DbTransaction
837
846
{
838
- if ( withPseudoExecution == false )
847
+ if ( withPseudoExecution == false )
839
848
return null ;
840
849
841
850
var tempTableName = CreateBulkInsertTempTableName ( tableName , usePhysicalPseudoTempTable , dbSetting ) ;
842
851
var sql = GetCreateTemporaryTableSqlText ( tableName , tempTableName , fields , dbSetting , true ) ;
843
852
844
- connection . ExecuteNonQuery ( sql , transaction : transaction ) ;
853
+ connection . ExecuteNonQuery ( sql , transaction : transaction , trace : trace ) ;
845
854
846
855
return tempTableName ;
847
856
}
@@ -852,17 +861,18 @@ private static async Task<string> CreateBulkInsertTempTableIfNecessaryAsync<TSql
852
861
TSqlTransaction transaction ,
853
862
bool withPseudoExecution ,
854
863
IDbSetting dbSetting ,
855
- IEnumerable < Field > fields ,
856
- CancellationToken cancellationToken )
864
+ IEnumerable < Field > fields ,
865
+ CancellationToken cancellationToken ,
866
+ ITrace ? trace = null )
857
867
where TSqlTransaction : DbTransaction
858
868
{
859
- if ( withPseudoExecution == false )
869
+ if ( withPseudoExecution == false )
860
870
return null ;
861
871
862
872
var tempTableName = CreateBulkInsertTempTableName ( tableName , usePhysicalPseudoTempTable , dbSetting ) ;
863
873
var sql = GetCreateTemporaryTableSqlText ( tableName , tempTableName , fields , dbSetting , true ) ;
864
874
865
- await connection . ExecuteNonQueryAsync ( sql , transaction : transaction , cancellationToken : cancellationToken ) ;
875
+ await connection . ExecuteNonQueryAsync ( sql , transaction : transaction , trace : trace , cancellationToken : cancellationToken ) ;
866
876
867
877
return tempTableName ;
868
878
}
0 commit comments