@@ -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,9 @@ class Database extends common.GrpcServiceObject {
3252
3256
? ( optionsOrRunFn as RunTransactionOptions )
3253
3257
: { } ;
3254
3258
3259
+ const defaultTransactionOptions =
3260
+ this . _getSpanner ( ) . defaultTransactionOptions ;
3261
+
3255
3262
startTrace ( 'Database.runTransaction' , this . _traceConfig , span => {
3256
3263
this . pool_ . getSession ( ( err , session ?, transaction ?) => {
3257
3264
if ( err ) {
@@ -3280,6 +3287,13 @@ class Database extends common.GrpcServiceObject {
3280
3287
if ( options . excludeTxnFromChangeStreams ) {
3281
3288
transaction ! . excludeTxnFromChangeStreams ( ) ;
3282
3289
}
3290
+ if ( options . isolationLevel ) {
3291
+ transaction ! . setIsolationLevel ( options . isolationLevel ) ;
3292
+ } else if ( defaultTransactionOptions ) {
3293
+ transaction ! . setIsolationLevel (
3294
+ defaultTransactionOptions . isolationLevel
3295
+ ) ;
3296
+ }
3283
3297
3284
3298
const release = ( ) => {
3285
3299
this . pool_ . release ( session ! ) ;
@@ -3390,6 +3404,9 @@ class Database extends common.GrpcServiceObject {
3390
3404
? ( optionsOrRunFn as RunTransactionOptions )
3391
3405
: { } ;
3392
3406
3407
+ const defaultTransactionOptions =
3408
+ this . _getSpanner ( ) . defaultTransactionOptions ;
3409
+
3393
3410
let sessionId = '' ;
3394
3411
const getSession = this . pool_ . getSession . bind ( this . pool_ ) ;
3395
3412
return startTrace (
@@ -3412,6 +3429,13 @@ class Database extends common.GrpcServiceObject {
3412
3429
if ( options . excludeTxnFromChangeStreams ) {
3413
3430
transaction . excludeTxnFromChangeStreams ( ) ;
3414
3431
}
3432
+ if ( options . isolationLevel ) {
3433
+ transaction ! . setIsolationLevel ( options . isolationLevel ) ;
3434
+ } else if ( defaultTransactionOptions ) {
3435
+ transaction ! . setIsolationLevel (
3436
+ defaultTransactionOptions . isolationLevel
3437
+ ) ;
3438
+ }
3415
3439
sessionId = session ?. id ;
3416
3440
span . addEvent ( 'Using Session' , { 'session.id' : sessionId } ) ;
3417
3441
const runner = new AsyncTransactionRunner < T > (
@@ -3638,17 +3662,17 @@ class Database extends common.GrpcServiceObject {
3638
3662
writeAtLeastOnce ( mutations : MutationSet ) : Promise < CommitResponse > ;
3639
3663
writeAtLeastOnce (
3640
3664
mutations : MutationSet ,
3641
- options : CallOptions
3665
+ options : WriteAtLeastOnceOptions
3642
3666
) : Promise < CommitResponse > ;
3643
3667
writeAtLeastOnce ( mutations : MutationSet , callback : CommitCallback ) : void ;
3644
3668
writeAtLeastOnce (
3645
3669
mutations : MutationSet ,
3646
- options : CallOptions ,
3670
+ options : WriteAtLeastOnceOptions ,
3647
3671
callback : CommitCallback
3648
3672
) : void ;
3649
3673
writeAtLeastOnce (
3650
3674
mutations : MutationSet ,
3651
- optionsOrCallback ?: CallOptions | CommitCallback ,
3675
+ optionsOrCallback ?: WriteAtLeastOnceOptions | CommitCallback ,
3652
3676
callback ?: CommitCallback
3653
3677
) : void | Promise < CommitResponse > {
3654
3678
const cb =
@@ -3657,9 +3681,12 @@ class Database extends common.GrpcServiceObject {
3657
3681
: callback ;
3658
3682
const options =
3659
3683
typeof optionsOrCallback === 'object' && optionsOrCallback
3660
- ? ( optionsOrCallback as CallOptions )
3684
+ ? ( optionsOrCallback as WriteAtLeastOnceOptions )
3661
3685
: { } ;
3662
3686
3687
+ const defaultTransactionOptions =
3688
+ this . _getSpanner ( ) . defaultTransactionOptions ;
3689
+
3663
3690
return startTrace ( 'Database.writeAtLeastOnce' , this . _traceConfig , span => {
3664
3691
this . sessionFactory_ . getSession ( ( err , session ?, transaction ?) => {
3665
3692
if (
@@ -3683,6 +3710,13 @@ class Database extends common.GrpcServiceObject {
3683
3710
span . addEvent ( 'Using Session' , { 'session.id' : session ?. id } ) ;
3684
3711
this . _releaseOnEnd ( session ! , transaction ! , span ) ;
3685
3712
try {
3713
+ if ( options . isolationLevel ) {
3714
+ transaction ! . setIsolationLevel ( options . isolationLevel ) ;
3715
+ } else if ( defaultTransactionOptions ) {
3716
+ transaction ! . setIsolationLevel (
3717
+ defaultTransactionOptions . isolationLevel
3718
+ ) ;
3719
+ }
3686
3720
transaction ?. setQueuedMutations ( mutations . proto ( ) ) ;
3687
3721
return transaction ?. commit ( options , ( err , resp ) => {
3688
3722
if ( err ) {
0 commit comments