@@ -316,6 +316,10 @@ export interface RestoreOptions {
316
316
gaxOptions ?: CallOptions ;
317
317
}
318
318
319
+ export interface WriteAtLeastOnceOptions extends CallOptions {
320
+ isolationLevel ?: spannerClient . spanner . v1 . TransactionOptions . IsolationLevel ;
321
+ }
322
+
319
323
/**
320
324
* Create a Database object to interact with a Cloud Spanner database.
321
325
*
@@ -3252,6 +3256,8 @@ class Database extends common.GrpcServiceObject {
3252
3256
? ( optionsOrRunFn as RunTransactionOptions )
3253
3257
: { } ;
3254
3258
3259
+ const defaultTransactionOptions = this . _getSpanner ( ) . defaultTransactionOptions ;
3260
+
3255
3261
startTrace ( 'Database.runTransaction' , this . _traceConfig , span => {
3256
3262
this . pool_ . getSession ( ( err , session ?, transaction ?) => {
3257
3263
if ( err ) {
@@ -3280,6 +3286,11 @@ class Database extends common.GrpcServiceObject {
3280
3286
if ( options . excludeTxnFromChangeStreams ) {
3281
3287
transaction ! . excludeTxnFromChangeStreams ( ) ;
3282
3288
}
3289
+ if ( options . isolationLevel ) {
3290
+ transaction ! . setIsolationLevel ( options . isolationLevel ) ;
3291
+ } else if ( defaultTransactionOptions ) {
3292
+ transaction ! . setIsolationLevel ( defaultTransactionOptions . isolationLevel ) ;
3293
+ }
3283
3294
3284
3295
const release = ( ) => {
3285
3296
this . pool_ . release ( session ! ) ;
@@ -3390,6 +3401,8 @@ class Database extends common.GrpcServiceObject {
3390
3401
? ( optionsOrRunFn as RunTransactionOptions )
3391
3402
: { } ;
3392
3403
3404
+ const defaultTransactionOptions = this . _getSpanner ( ) . defaultTransactionOptions ;
3405
+
3393
3406
let sessionId = '' ;
3394
3407
const getSession = this . pool_ . getSession . bind ( this . pool_ ) ;
3395
3408
return startTrace (
@@ -3412,6 +3425,11 @@ class Database extends common.GrpcServiceObject {
3412
3425
if ( options . excludeTxnFromChangeStreams ) {
3413
3426
transaction . excludeTxnFromChangeStreams ( ) ;
3414
3427
}
3428
+ if ( options . isolationLevel ) {
3429
+ transaction ! . setIsolationLevel ( options . isolationLevel ) ;
3430
+ } else if ( defaultTransactionOptions ) {
3431
+ transaction ! . setIsolationLevel ( defaultTransactionOptions . isolationLevel ) ;
3432
+ }
3415
3433
sessionId = session ?. id ;
3416
3434
span . addEvent ( 'Using Session' , { 'session.id' : sessionId } ) ;
3417
3435
const runner = new AsyncTransactionRunner < T > (
@@ -3638,17 +3656,17 @@ class Database extends common.GrpcServiceObject {
3638
3656
writeAtLeastOnce ( mutations : MutationSet ) : Promise < CommitResponse > ;
3639
3657
writeAtLeastOnce (
3640
3658
mutations : MutationSet ,
3641
- options : CallOptions
3659
+ options : WriteAtLeastOnceOptions
3642
3660
) : Promise < CommitResponse > ;
3643
3661
writeAtLeastOnce ( mutations : MutationSet , callback : CommitCallback ) : void ;
3644
3662
writeAtLeastOnce (
3645
3663
mutations : MutationSet ,
3646
- options : CallOptions ,
3664
+ options : WriteAtLeastOnceOptions ,
3647
3665
callback : CommitCallback
3648
3666
) : void ;
3649
3667
writeAtLeastOnce (
3650
3668
mutations : MutationSet ,
3651
- optionsOrCallback ?: CallOptions | CommitCallback ,
3669
+ optionsOrCallback ?: WriteAtLeastOnceOptions | CommitCallback ,
3652
3670
callback ?: CommitCallback
3653
3671
) : void | Promise < CommitResponse > {
3654
3672
const cb =
@@ -3657,9 +3675,11 @@ class Database extends common.GrpcServiceObject {
3657
3675
: callback ;
3658
3676
const options =
3659
3677
typeof optionsOrCallback === 'object' && optionsOrCallback
3660
- ? ( optionsOrCallback as CallOptions )
3678
+ ? ( optionsOrCallback as WriteAtLeastOnceOptions )
3661
3679
: { } ;
3662
3680
3681
+ const defaultTransactionOptions = this . _getSpanner ( ) . defaultTransactionOptions ;
3682
+
3663
3683
return startTrace ( 'Database.writeAtLeastOnce' , this . _traceConfig , span => {
3664
3684
this . sessionFactory_ . getSession ( ( err , session ?, transaction ?) => {
3665
3685
if (
@@ -3683,6 +3703,11 @@ class Database extends common.GrpcServiceObject {
3683
3703
span . addEvent ( 'Using Session' , { 'session.id' : session ?. id } ) ;
3684
3704
this . _releaseOnEnd ( session ! , transaction ! , span ) ;
3685
3705
try {
3706
+ if ( options . isolationLevel ) {
3707
+ transaction ! . setIsolationLevel ( options . isolationLevel ) ;
3708
+ } else if ( defaultTransactionOptions ) {
3709
+ transaction ! . setIsolationLevel ( defaultTransactionOptions . isolationLevel ) ;
3710
+ }
3686
3711
transaction ?. setQueuedMutations ( mutations . proto ( ) ) ;
3687
3712
return transaction ?. commit ( options , ( err , resp ) => {
3688
3713
if ( err ) {
0 commit comments