@@ -460,4 +460,52 @@ PRIMARY KEY (Id)
460460 await dropCmd . ExecuteNonQueryAsync ( ) ;
461461 }
462462 }
463+
464+ [ Fact ]
465+ public async Task BulkUpsert_Throws_WhenTransactionIsOpen ( )
466+ {
467+ var tableName = $ "BulkTest_{ Guid . NewGuid ( ) : N} ";
468+ var database = new YdbConnectionStringBuilder ( _connectionStringTls ) . Database . TrimEnd ( '/' ) ;
469+ var absTablePath = string . IsNullOrEmpty ( database ) ? tableName : $ "{ database } /{ tableName } ";
470+
471+ await using var conn = new YdbConnection ( _connectionStringTls ) ;
472+ await conn . OpenAsync ( ) ;
473+
474+ await using ( var createCmd = conn . CreateCommand ( ) )
475+ {
476+ createCmd . CommandText = $@ "
477+ CREATE TABLE { tableName } (
478+ Id Int32,
479+ Name Utf8,
480+ PRIMARY KEY (Id)
481+ )" ;
482+ await createCmd . ExecuteNonQueryAsync ( ) ;
483+ }
484+
485+ await Task . Delay ( 500 ) ;
486+
487+ var columns = new [ ] { "Id" , "Name" } ;
488+ var rows = new List < IReadOnlyList < object ? > >
489+ {
490+ new object ? [ ] { 1 , "Alice" } ,
491+ new object ? [ ] { 2 , "Bob" }
492+ } ;
493+
494+ await conn . BeginTransactionAsync ( ) ;
495+
496+ var ex = await Assert . ThrowsAsync < InvalidOperationException > ( async ( ) =>
497+ {
498+ await conn . BulkUpsertAsync ( absTablePath , columns , rows ) ;
499+ } ) ;
500+
501+ Assert . Contains ( "BulkUpsert cannot be used inside an active transaction" , ex . Message ) ;
502+
503+ await conn . CurrentTransaction . RollbackAsync ( ) ;
504+
505+ await using ( var dropCmd = conn . CreateCommand ( ) )
506+ {
507+ dropCmd . CommandText = $ "DROP TABLE { tableName } ";
508+ await dropCmd . ExecuteNonQueryAsync ( ) ;
509+ }
510+ }
463511}
0 commit comments