google-cloud-spanner 2.21.0 → 2.23.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +23 -0
- data/lib/google/cloud/spanner/admin/database.rb +9 -11
- data/lib/google/cloud/spanner/admin/instance.rb +9 -11
- data/lib/google/cloud/spanner/backup/job/list.rb +1 -2
- data/lib/google/cloud/spanner/backup/job.rb +1 -2
- data/lib/google/cloud/spanner/backup/list.rb +1 -3
- data/lib/google/cloud/spanner/backup/restore/job.rb +1 -2
- data/lib/google/cloud/spanner/batch_client.rb +3 -2
- data/lib/google/cloud/spanner/batch_snapshot.rb +14 -9
- data/lib/google/cloud/spanner/batch_update.rb +3 -2
- data/lib/google/cloud/spanner/batch_write.rb +72 -0
- data/lib/google/cloud/spanner/batch_write_results.rb +142 -0
- data/lib/google/cloud/spanner/client.rb +245 -28
- data/lib/google/cloud/spanner/commit.rb +4 -0
- data/lib/google/cloud/spanner/convert.rb +2 -2
- data/lib/google/cloud/spanner/database/job/list.rb +1 -2
- data/lib/google/cloud/spanner/database/job.rb +2 -4
- data/lib/google/cloud/spanner/database/list.rb +2 -3
- data/lib/google/cloud/spanner/fields.rb +2 -1
- data/lib/google/cloud/spanner/instance/config/list.rb +2 -3
- data/lib/google/cloud/spanner/instance/job.rb +2 -3
- data/lib/google/cloud/spanner/instance/list.rb +2 -3
- data/lib/google/cloud/spanner/lar_headers.rb +4 -0
- data/lib/google/cloud/spanner/mutation_group.rb +288 -0
- data/lib/google/cloud/spanner/project.rb +9 -27
- data/lib/google/cloud/spanner/results.rb +2 -2
- data/lib/google/cloud/spanner/service.rb +32 -6
- data/lib/google/cloud/spanner/session.rb +167 -17
- data/lib/google/cloud/spanner/snapshot.rb +5 -2
- data/lib/google/cloud/spanner/transaction.rb +18 -3
- data/lib/google/cloud/spanner/version.rb +1 -1
- data/lib/google-cloud-spanner.rb +6 -3
- metadata +26 -191
@@ -25,6 +25,7 @@ require "google/cloud/spanner/column_value"
|
|
25
25
|
require "google/cloud/spanner/convert"
|
26
26
|
require "google/cloud/spanner/commit_response"
|
27
27
|
require "google/cloud/spanner/lar_headers"
|
28
|
+
require "google/cloud/spanner/batch_write_results"
|
28
29
|
|
29
30
|
module Google
|
30
31
|
module Cloud
|
@@ -148,6 +149,7 @@ module Google
|
|
148
149
|
# | `BOOL` | `true`/`false` | |
|
149
150
|
# | `INT64` | `Integer` | |
|
150
151
|
# | `FLOAT64` | `Float` | |
|
152
|
+
# | `FLOAT32` | `Float` | |
|
151
153
|
# | `NUMERIC` | `BigDecimal` | |
|
152
154
|
# | `STRING` | `String` | |
|
153
155
|
# | `DATE` | `Date` | |
|
@@ -174,6 +176,7 @@ module Google
|
|
174
176
|
# * `:BYTES`
|
175
177
|
# * `:DATE`
|
176
178
|
# * `:FLOAT64`
|
179
|
+
# * `:FLOAT32`
|
177
180
|
# * `:NUMERIC`
|
178
181
|
# * `:INT64`
|
179
182
|
# * `:STRING`
|
@@ -473,7 +476,7 @@ module Google
|
|
473
476
|
results = session.execute_query \
|
474
477
|
sql, params: params, types: types, transaction: single_use_tx,
|
475
478
|
query_options: query_options, request_options: request_options,
|
476
|
-
call_options: call_options, directed_read_options:
|
479
|
+
call_options: call_options, directed_read_options: directed_read_options || @directed_read_options,
|
477
480
|
route_to_leader: route_to_leader
|
478
481
|
end
|
479
482
|
results
|
@@ -584,6 +587,7 @@ module Google
|
|
584
587
|
# | `BOOL` | `true`/`false` | |
|
585
588
|
# | `INT64` | `Integer` | |
|
586
589
|
# | `FLOAT64` | `Float` | |
|
590
|
+
# | `FLOAT32` | `Float` | |
|
587
591
|
# | `NUMERIC` | `BigDecimal` | |
|
588
592
|
# | `STRING` | `String` | |
|
589
593
|
# | `DATE` | `Date` | |
|
@@ -611,6 +615,7 @@ module Google
|
|
611
615
|
# * `:BYTES`
|
612
616
|
# * `:DATE`
|
613
617
|
# * `:FLOAT64`
|
618
|
+
# * `:FLOAT32`
|
614
619
|
# * `:NUMERIC`
|
615
620
|
# * `:INT64`
|
616
621
|
# * `:STRING`
|
@@ -620,6 +625,9 @@ module Google
|
|
620
625
|
# `[:INT64]`.
|
621
626
|
# * {Fields} - Nested Structs are specified by providing a Fields
|
622
627
|
# object.
|
628
|
+
# @param [Boolean] exclude_txn_from_change_streams If set to true,
|
629
|
+
# mutations will not be recorded in change streams with DDL option
|
630
|
+
# `allow_txn_exclusion=true`.
|
623
631
|
# @param [Hash] query_options A hash of values to specify the custom
|
624
632
|
# query options for executing SQL query. Query options are optional.
|
625
633
|
# The following settings can be provided:
|
@@ -731,6 +739,7 @@ module Google
|
|
731
739
|
# request_options: request_options
|
732
740
|
#
|
733
741
|
def execute_partition_update sql, params: nil, types: nil,
|
742
|
+
exclude_txn_from_change_streams: false,
|
734
743
|
query_options: nil, request_options: nil,
|
735
744
|
call_options: nil
|
736
745
|
ensure_service!
|
@@ -741,9 +750,10 @@ module Google
|
|
741
750
|
route_to_leader = LARHeaders.partition_query
|
742
751
|
results = nil
|
743
752
|
@pool.with_session do |session|
|
753
|
+
transaction = pdml_transaction session, exclude_txn_from_change_streams: exclude_txn_from_change_streams
|
744
754
|
results = session.execute_query \
|
745
755
|
sql, params: params, types: types,
|
746
|
-
transaction:
|
756
|
+
transaction: transaction,
|
747
757
|
query_options: query_options, request_options: request_options,
|
748
758
|
call_options: call_options, route_to_leader: route_to_leader
|
749
759
|
end
|
@@ -970,7 +980,7 @@ module Google
|
|
970
980
|
transaction: single_use_tx,
|
971
981
|
request_options: request_options,
|
972
982
|
call_options: call_options,
|
973
|
-
directed_read_options:
|
983
|
+
directed_read_options: directed_read_options || @directed_read_options,
|
974
984
|
route_to_leader: route_to_leader
|
975
985
|
end
|
976
986
|
results
|
@@ -1005,6 +1015,7 @@ module Google
|
|
1005
1015
|
# | `BOOL` | `true`/`false` | |
|
1006
1016
|
# | `INT64` | `Integer` | |
|
1007
1017
|
# | `FLOAT64` | `Float` | |
|
1018
|
+
# | `FLOAT32` | `Float` | |
|
1008
1019
|
# | `NUMERIC` | `BigDecimal` | |
|
1009
1020
|
# | `STRING` | `String` | |
|
1010
1021
|
# | `DATE` | `Date` | |
|
@@ -1015,6 +1026,9 @@ module Google
|
|
1015
1026
|
# See [Data
|
1016
1027
|
# types](https://cloud.google.com/spanner/docs/data-definition-language#data_types).
|
1017
1028
|
#
|
1029
|
+
# @param [Boolean] exclude_txn_from_change_streams If set to true,
|
1030
|
+
# mutations will not be recorded in change streams with DDL option
|
1031
|
+
# `allow_txn_exclusion=true`.
|
1018
1032
|
# @param [Hash] commit_options A hash of commit options.
|
1019
1033
|
# e.g., return_commit_stats. Commit options are optional.
|
1020
1034
|
# The following options can be provided:
|
@@ -1037,6 +1051,20 @@ module Google
|
|
1037
1051
|
# * `:tag` (String) A tag used for statistics collection
|
1038
1052
|
# about transaction. A tag must be a valid identifier of the format:
|
1039
1053
|
# `[a-zA-Z][a-zA-Z0-9_\-]{0,49}`.
|
1054
|
+
# @param [Hash] call_options A hash of values to specify the custom
|
1055
|
+
# call options, e.g., timeout, retries, etc. Call options are
|
1056
|
+
# optional. The following settings can be provided:
|
1057
|
+
#
|
1058
|
+
# * `:timeout` (Numeric) A numeric value of custom timeout in seconds
|
1059
|
+
# that overrides the default setting.
|
1060
|
+
# * `:retry_policy` (Hash) A hash of values that overrides the default
|
1061
|
+
# setting of retry policy with the following keys:
|
1062
|
+
# * `:initial_delay` (`Numeric`) - The initial delay in seconds.
|
1063
|
+
# * `:max_delay` (`Numeric`) - The max delay in seconds.
|
1064
|
+
# * `:multiplier` (`Numeric`) - The incremental backoff multiplier.
|
1065
|
+
# * `:retry_codes` (`Array<String>`) - The error codes that should
|
1066
|
+
# trigger a retry.
|
1067
|
+
#
|
1040
1068
|
#
|
1041
1069
|
# @return [Time, CommitResponse] The timestamp at which the operation
|
1042
1070
|
# committed. If commit options are set it returns {CommitResponse}.
|
@@ -1090,13 +1118,18 @@ module Google
|
|
1090
1118
|
# { id: 2, name: "Harvey", active: true }],
|
1091
1119
|
# request_options: request_options
|
1092
1120
|
#
|
1093
|
-
def upsert table, rows,
|
1121
|
+
def upsert table, rows,
|
1122
|
+
exclude_txn_from_change_streams: false,
|
1123
|
+
commit_options: nil, request_options: nil, call_options: nil
|
1094
1124
|
request_options = Convert.to_request_options \
|
1095
1125
|
request_options, tag_type: :transaction_tag
|
1096
1126
|
|
1097
1127
|
@pool.with_session do |session|
|
1098
|
-
session.upsert table, rows,
|
1099
|
-
|
1128
|
+
session.upsert table, rows,
|
1129
|
+
exclude_txn_from_change_streams: exclude_txn_from_change_streams,
|
1130
|
+
commit_options: commit_options,
|
1131
|
+
request_options: request_options,
|
1132
|
+
call_options: call_options
|
1100
1133
|
end
|
1101
1134
|
end
|
1102
1135
|
alias save upsert
|
@@ -1129,6 +1162,7 @@ module Google
|
|
1129
1162
|
# | `BOOL` | `true`/`false` | |
|
1130
1163
|
# | `INT64` | `Integer` | |
|
1131
1164
|
# | `FLOAT64` | `Float` | |
|
1165
|
+
# | `FLOAT32` | `Float` | |
|
1132
1166
|
# | `NUMERIC` | `BigDecimal` | |
|
1133
1167
|
# | `STRING` | `String` | |
|
1134
1168
|
# | `DATE` | `Date` | |
|
@@ -1138,6 +1172,9 @@ module Google
|
|
1138
1172
|
#
|
1139
1173
|
# See [Data
|
1140
1174
|
# types](https://cloud.google.com/spanner/docs/data-definition-language#data_types).
|
1175
|
+
# @param [Boolean] exclude_txn_from_change_streams If set to true,
|
1176
|
+
# mutations will not be recorded in change streams with DDL option
|
1177
|
+
# `allow_txn_exclusion=true`.
|
1141
1178
|
# @param [Hash] commit_options A hash of commit options.
|
1142
1179
|
# e.g., return_commit_stats. Commit options are optional.
|
1143
1180
|
# The following options can be provided:
|
@@ -1160,6 +1197,20 @@ module Google
|
|
1160
1197
|
# * `:tag` (String) A tag used for statistics collection
|
1161
1198
|
# about transaction. A tag must be a valid identifier of the
|
1162
1199
|
# format: `[a-zA-Z][a-zA-Z0-9_\-]{0,49}`.
|
1200
|
+
# @param [Hash] call_options A hash of values to specify the custom
|
1201
|
+
# call options, e.g., timeout, retries, etc. Call options are
|
1202
|
+
# optional. The following settings can be provided:
|
1203
|
+
#
|
1204
|
+
# * `:timeout` (Numeric) A numeric value of custom timeout in seconds
|
1205
|
+
# that overrides the default setting.
|
1206
|
+
# * `:retry_policy` (Hash) A hash of values that overrides the default
|
1207
|
+
# setting of retry policy with the following keys:
|
1208
|
+
# * `:initial_delay` (`Numeric`) - The initial delay in seconds.
|
1209
|
+
# * `:max_delay` (`Numeric`) - The max delay in seconds.
|
1210
|
+
# * `:multiplier` (`Numeric`) - The incremental backoff multiplier.
|
1211
|
+
# * `:retry_codes` (`Array<String>`) - The error codes that should
|
1212
|
+
# trigger a retry.
|
1213
|
+
#
|
1163
1214
|
#
|
1164
1215
|
# @return [Time, CommitResponse] The timestamp at which the operation
|
1165
1216
|
# committed. If commit options are set it returns {CommitResponse}.
|
@@ -1213,13 +1264,18 @@ module Google
|
|
1213
1264
|
# { id: 2, name: "Harvey", active: true }],
|
1214
1265
|
# request_options: request_options
|
1215
1266
|
#
|
1216
|
-
def insert table, rows,
|
1267
|
+
def insert table, rows,
|
1268
|
+
exclude_txn_from_change_streams: false,
|
1269
|
+
commit_options: nil, request_options: nil, call_options: nil
|
1217
1270
|
request_options = Convert.to_request_options \
|
1218
1271
|
request_options, tag_type: :transaction_tag
|
1219
1272
|
|
1220
1273
|
@pool.with_session do |session|
|
1221
|
-
session.insert table, rows,
|
1222
|
-
|
1274
|
+
session.insert table, rows,
|
1275
|
+
exclude_txn_from_change_streams: exclude_txn_from_change_streams,
|
1276
|
+
commit_options: commit_options,
|
1277
|
+
request_options: request_options,
|
1278
|
+
call_options: call_options
|
1223
1279
|
end
|
1224
1280
|
end
|
1225
1281
|
|
@@ -1251,6 +1307,7 @@ module Google
|
|
1251
1307
|
# | `BOOL` | `true`/`false` | |
|
1252
1308
|
# | `INT64` | `Integer` | |
|
1253
1309
|
# | `FLOAT64` | `Float` | |
|
1310
|
+
# | `FLOAT32` | `Float` | |
|
1254
1311
|
# | `NUMERIC` | `BigDecimal` | |
|
1255
1312
|
# | `STRING` | `String` | |
|
1256
1313
|
# | `DATE` | `Date` | |
|
@@ -1260,6 +1317,9 @@ module Google
|
|
1260
1317
|
#
|
1261
1318
|
# See [Data
|
1262
1319
|
# types](https://cloud.google.com/spanner/docs/data-definition-language#data_types).
|
1320
|
+
# @param [Boolean] exclude_txn_from_change_streams If set to true,
|
1321
|
+
# mutations will not be recorded in change streams with DDL option
|
1322
|
+
# `allow_txn_exclusion=true`.
|
1263
1323
|
# @param [Hash] commit_options A hash of commit options.
|
1264
1324
|
# e.g., return_commit_stats. Commit options are optional.
|
1265
1325
|
# The following options can be provided:
|
@@ -1282,6 +1342,20 @@ module Google
|
|
1282
1342
|
# * `:tag` (String) A tag used for statistics collection
|
1283
1343
|
# about transaction. A tag must be a valid identifier of the
|
1284
1344
|
# format: `[a-zA-Z][a-zA-Z0-9_\-]{0,49}`.
|
1345
|
+
# @param [Hash] call_options A hash of values to specify the custom
|
1346
|
+
# call options, e.g., timeout, retries, etc. Call options are
|
1347
|
+
# optional. The following settings can be provided:
|
1348
|
+
#
|
1349
|
+
# * `:timeout` (Numeric) A numeric value of custom timeout in seconds
|
1350
|
+
# that overrides the default setting.
|
1351
|
+
# * `:retry_policy` (Hash) A hash of values that overrides the default
|
1352
|
+
# setting of retry policy with the following keys:
|
1353
|
+
# * `:initial_delay` (`Numeric`) - The initial delay in seconds.
|
1354
|
+
# * `:max_delay` (`Numeric`) - The max delay in seconds.
|
1355
|
+
# * `:multiplier` (`Numeric`) - The incremental backoff multiplier.
|
1356
|
+
# * `:retry_codes` (`Array<String>`) - The error codes that should
|
1357
|
+
# trigger a retry.
|
1358
|
+
#
|
1285
1359
|
#
|
1286
1360
|
# @return [Time, CommitResponse] The timestamp at which the operation
|
1287
1361
|
# committed. If commit options are set it returns {CommitResponse}.
|
@@ -1334,13 +1408,18 @@ module Google
|
|
1334
1408
|
# { id: 2, name: "Harvey", active: true }],
|
1335
1409
|
# request_options: request_options
|
1336
1410
|
#
|
1337
|
-
def update table, rows,
|
1411
|
+
def update table, rows,
|
1412
|
+
exclude_txn_from_change_streams: false,
|
1413
|
+
commit_options: nil, request_options: nil, call_options: nil
|
1338
1414
|
request_options = Convert.to_request_options \
|
1339
1415
|
request_options, tag_type: :transaction_tag
|
1340
1416
|
|
1341
1417
|
@pool.with_session do |session|
|
1342
|
-
session.update table, rows,
|
1343
|
-
|
1418
|
+
session.update table, rows,
|
1419
|
+
exclude_txn_from_change_streams: exclude_txn_from_change_streams,
|
1420
|
+
commit_options: commit_options,
|
1421
|
+
request_options: request_options,
|
1422
|
+
call_options: call_options
|
1344
1423
|
end
|
1345
1424
|
end
|
1346
1425
|
|
@@ -1374,6 +1453,7 @@ module Google
|
|
1374
1453
|
# | `BOOL` | `true`/`false` | |
|
1375
1454
|
# | `INT64` | `Integer` | |
|
1376
1455
|
# | `FLOAT64` | `Float` | |
|
1456
|
+
# | `FLOAT32` | `Float` | |
|
1377
1457
|
# | `NUMERIC` | `BigDecimal` | |
|
1378
1458
|
# | `STRING` | `String` | |
|
1379
1459
|
# | `DATE` | `Date` | |
|
@@ -1383,6 +1463,9 @@ module Google
|
|
1383
1463
|
#
|
1384
1464
|
# See [Data
|
1385
1465
|
# types](https://cloud.google.com/spanner/docs/data-definition-language#data_types).
|
1466
|
+
# @param [Boolean] exclude_txn_from_change_streams If set to true,
|
1467
|
+
# mutations will not be recorded in change streams with DDL option
|
1468
|
+
# `allow_txn_exclusion=true`.
|
1386
1469
|
# @param [Hash] commit_options A hash of commit options.
|
1387
1470
|
# e.g., return_commit_stats. Commit options are optional.
|
1388
1471
|
# The following options can be provided:
|
@@ -1405,6 +1488,20 @@ module Google
|
|
1405
1488
|
# * `:tag` (String) A tag used for statistics collection
|
1406
1489
|
# about transaction. A tag must be a valid identifier of the
|
1407
1490
|
# format: `[a-zA-Z][a-zA-Z0-9_\-]{0,49}`.
|
1491
|
+
# @param [Hash] call_options A hash of values to specify the custom
|
1492
|
+
# call options, e.g., timeout, retries, etc. Call options are
|
1493
|
+
# optional. The following settings can be provided:
|
1494
|
+
#
|
1495
|
+
# * `:timeout` (Numeric) A numeric value of custom timeout in seconds
|
1496
|
+
# that overrides the default setting.
|
1497
|
+
# * `:retry_policy` (Hash) A hash of values that overrides the default
|
1498
|
+
# setting of retry policy with the following keys:
|
1499
|
+
# * `:initial_delay` (`Numeric`) - The initial delay in seconds.
|
1500
|
+
# * `:max_delay` (`Numeric`) - The max delay in seconds.
|
1501
|
+
# * `:multiplier` (`Numeric`) - The incremental backoff multiplier.
|
1502
|
+
# * `:retry_codes` (`Array<String>`) - The error codes that should
|
1503
|
+
# trigger a retry.
|
1504
|
+
#
|
1408
1505
|
#
|
1409
1506
|
# @return [Time, CommitResponse] The timestamp at which the operation
|
1410
1507
|
# committed. If commit options are set it returns {CommitResponse}.
|
@@ -1457,10 +1554,15 @@ module Google
|
|
1457
1554
|
# { id: 2, name: "Harvey", active: true }],
|
1458
1555
|
# request_options: request_options
|
1459
1556
|
#
|
1460
|
-
def replace table, rows,
|
1557
|
+
def replace table, rows,
|
1558
|
+
exclude_txn_from_change_streams: false,
|
1559
|
+
commit_options: nil, request_options: nil, call_options: nil
|
1461
1560
|
@pool.with_session do |session|
|
1462
|
-
session.replace table, rows,
|
1463
|
-
|
1561
|
+
session.replace table, rows,
|
1562
|
+
exclude_txn_from_change_streams: exclude_txn_from_change_streams,
|
1563
|
+
commit_options: commit_options,
|
1564
|
+
request_options: request_options,
|
1565
|
+
call_options: call_options
|
1464
1566
|
end
|
1465
1567
|
end
|
1466
1568
|
|
@@ -1484,6 +1586,9 @@ module Google
|
|
1484
1586
|
# @param [Object, Array<Object>] keys A single, or list of keys or key
|
1485
1587
|
# ranges to match returned data to. Values should have exactly as many
|
1486
1588
|
# elements as there are columns in the primary key.
|
1589
|
+
# @param [Boolean] exclude_txn_from_change_streams If set to true,
|
1590
|
+
# mutations will not be recorded in change streams with DDL option
|
1591
|
+
# `allow_txn_exclusion=true`.
|
1487
1592
|
# @param [Hash] commit_options A hash of commit options.
|
1488
1593
|
# e.g., return_commit_stats. Commit options are optional.
|
1489
1594
|
# The following options can be provided:
|
@@ -1565,13 +1670,16 @@ module Google
|
|
1565
1670
|
# request_options = { tag: "BulkDelete-Users" }
|
1566
1671
|
# db.delete "users", [1, 2, 3], request_options: request_options
|
1567
1672
|
#
|
1568
|
-
def delete table, keys = [],
|
1569
|
-
|
1673
|
+
def delete table, keys = [],
|
1674
|
+
exclude_txn_from_change_streams: false,
|
1675
|
+
commit_options: nil, request_options: nil, call_options: nil
|
1570
1676
|
request_options = Convert.to_request_options \
|
1571
1677
|
request_options, tag_type: :transaction_tag
|
1572
1678
|
|
1573
1679
|
@pool.with_session do |session|
|
1574
|
-
session.delete table, keys,
|
1680
|
+
session.delete table, keys,
|
1681
|
+
exclude_txn_from_change_streams: exclude_txn_from_change_streams,
|
1682
|
+
commit_options: commit_options,
|
1575
1683
|
request_options: request_options,
|
1576
1684
|
call_options: call_options
|
1577
1685
|
end
|
@@ -1592,6 +1700,9 @@ module Google
|
|
1592
1700
|
# this method may be appropriate for latency sensitive and/or high
|
1593
1701
|
# throughput blind changes.
|
1594
1702
|
#
|
1703
|
+
# @param [Boolean] exclude_txn_from_change_streams If set to true,
|
1704
|
+
# mutations will not be recorded in change streams with DDL option
|
1705
|
+
# `allow_txn_exclusion=true`.
|
1595
1706
|
# @param [Hash] commit_options A hash of commit options.
|
1596
1707
|
# e.g., return_commit_stats. Commit options are optional.
|
1597
1708
|
# The following options can be provided:
|
@@ -1687,8 +1798,9 @@ module Google
|
|
1687
1798
|
# c.insert "users", [{ id: 2, name: "Harvey", active: true }]
|
1688
1799
|
# end
|
1689
1800
|
#
|
1690
|
-
def commit
|
1691
|
-
call_options: nil,
|
1801
|
+
def commit exclude_txn_from_change_streams: false,
|
1802
|
+
commit_options: nil, request_options: nil, call_options: nil,
|
1803
|
+
&block
|
1692
1804
|
raise ArgumentError, "Must provide a block" unless block_given?
|
1693
1805
|
|
1694
1806
|
request_options = Convert.to_request_options \
|
@@ -1696,12 +1808,111 @@ module Google
|
|
1696
1808
|
|
1697
1809
|
@pool.with_session do |session|
|
1698
1810
|
session.commit(
|
1811
|
+
exclude_txn_from_change_streams: exclude_txn_from_change_streams,
|
1699
1812
|
commit_options: commit_options, request_options: request_options,
|
1700
1813
|
call_options: call_options, &block
|
1701
1814
|
)
|
1702
1815
|
end
|
1703
1816
|
end
|
1704
1817
|
|
1818
|
+
##
|
1819
|
+
# Batches the supplied mutation groups in a collection of efficient
|
1820
|
+
# transactions.
|
1821
|
+
#
|
1822
|
+
# All mutations in a group are committed atomically. However, mutations
|
1823
|
+
# across groups can be committed non-atomically in an unspecified order
|
1824
|
+
# and thus they must be independent of each other. Partial failure is
|
1825
|
+
# possible, i.e., some groups may have been committed successfully,
|
1826
|
+
# while others may have failed. The results of individual batches are
|
1827
|
+
# streamed into the response as the batches are applied.
|
1828
|
+
#
|
1829
|
+
# BatchWrite requests are not replay protected, meaning that each mutation
|
1830
|
+
# group may be applied more than once. Replays of non-idempotent mutations
|
1831
|
+
# may have undesirable effects. For example, replays of an insert mutation
|
1832
|
+
# may produce an already exists error or if you use generated or commit
|
1833
|
+
# timestamp-based keys, it may result in additional rows being added to the
|
1834
|
+
# mutation's table. We recommend structuring your mutation groups to be
|
1835
|
+
# idempotent to avoid this issue.
|
1836
|
+
#
|
1837
|
+
# @param [Boolean] exclude_txn_from_change_streams If set to true,
|
1838
|
+
# mutations will not be recorded in change streams with DDL option
|
1839
|
+
# `allow_txn_exclusion=true`.
|
1840
|
+
# @param [Hash] request_options Common request options.
|
1841
|
+
#
|
1842
|
+
# * `:priority` (String) The relative priority for requests.
|
1843
|
+
# The priority acts as a hint to the Cloud Spanner scheduler
|
1844
|
+
# and does not guarantee priority or order of execution.
|
1845
|
+
# Valid values are `:PRIORITY_LOW`, `:PRIORITY_MEDIUM`,
|
1846
|
+
# `:PRIORITY_HIGH`. If priority not set then default is
|
1847
|
+
# `PRIORITY_UNSPECIFIED` is equivalent to `:PRIORITY_HIGH`.
|
1848
|
+
# * `:tag` (String) A per-request tag which can be applied to
|
1849
|
+
# queries or reads, used for statistics collection. Tag must be a
|
1850
|
+
# valid identifier of the form: `[a-zA-Z][a-zA-Z0-9_\-]` between 2
|
1851
|
+
# and 64 characters in length.
|
1852
|
+
#
|
1853
|
+
# @param [Hash] call_options A hash of values to specify the custom
|
1854
|
+
# call options, e.g., timeout, retries, etc. Call options are
|
1855
|
+
# optional. The following settings can be provided:
|
1856
|
+
#
|
1857
|
+
# * `:timeout` (Numeric) A numeric value of custom timeout in seconds
|
1858
|
+
# that overrides the default setting.
|
1859
|
+
# * `:retry_policy` (Hash) A hash of values that overrides the default
|
1860
|
+
# setting of retry policy with the following keys:
|
1861
|
+
# * `:initial_delay` (`Numeric`) - The initial delay in seconds.
|
1862
|
+
# * `:max_delay` (`Numeric`) - The max delay in seconds.
|
1863
|
+
# * `:multiplier` (`Numeric`) - The incremental backoff multiplier.
|
1864
|
+
# * `:retry_codes` (`Array<String>`) - The error codes that should
|
1865
|
+
# trigger a retry.
|
1866
|
+
#
|
1867
|
+
# @yield [batch_write] a batch write object
|
1868
|
+
# @yieldparam [Google::Cloud::Spanner::BatchWrite] batch_write a batch
|
1869
|
+
# write object used to add mutaion groups through {MutationGroup}.
|
1870
|
+
#
|
1871
|
+
# @return [Google::Cloud::Spanner::BatchWriteResults] The results of
|
1872
|
+
# the batch write operation. This is a stream of responses, each
|
1873
|
+
# covering a set of the mutation groups that were either applied or
|
1874
|
+
# failed together.
|
1875
|
+
#
|
1876
|
+
# @example
|
1877
|
+
# require "google/cloud/spanner"
|
1878
|
+
#
|
1879
|
+
# spanner = Google::Cloud::Spanner.new
|
1880
|
+
#
|
1881
|
+
# db = spanner.client "my-instance", "my-database"
|
1882
|
+
#
|
1883
|
+
# results = db.batch_write do |b|
|
1884
|
+
# # First mutation group
|
1885
|
+
# b.mutation_group do |mg|
|
1886
|
+
# mg.upsert "Singers", [{ SingerId: 16, FirstName: "Charlie", LastName: "Terry" }]
|
1887
|
+
# end
|
1888
|
+
#
|
1889
|
+
# # Second mutation group
|
1890
|
+
# b.mutation_group do |mg|
|
1891
|
+
# mg.upsert "Singers", [{ SingerId: 17, FirstName: "Catalina", LastName: "Smith" }]
|
1892
|
+
# mg.update "Albums", [{ SingerId: 17, AlbumId: 1, AlbumTitle: "Go Go Go" }]
|
1893
|
+
# end
|
1894
|
+
# end
|
1895
|
+
#
|
1896
|
+
# results.each do |response|
|
1897
|
+
# puts "groups applied: #{response.indexes}" if response.ok?
|
1898
|
+
# end
|
1899
|
+
#
|
1900
|
+
def batch_write exclude_txn_from_change_streams: false,
|
1901
|
+
request_options: nil,
|
1902
|
+
call_options: nil,
|
1903
|
+
&block
|
1904
|
+
raise ArgumentError, "Must provide a block" unless block_given?
|
1905
|
+
|
1906
|
+
@pool.with_session do |session|
|
1907
|
+
session.batch_write(
|
1908
|
+
exclude_txn_from_change_streams: exclude_txn_from_change_streams,
|
1909
|
+
request_options: request_options,
|
1910
|
+
call_options: call_options,
|
1911
|
+
&block
|
1912
|
+
)
|
1913
|
+
end
|
1914
|
+
end
|
1915
|
+
|
1705
1916
|
# rubocop:disable Metrics/AbcSize
|
1706
1917
|
# rubocop:disable Metrics/MethodLength
|
1707
1918
|
# rubocop:disable Metrics/BlockLength
|
@@ -1723,6 +1934,9 @@ module Google
|
|
1723
1934
|
#
|
1724
1935
|
# @param [Numeric] deadline The total amount of time in seconds the
|
1725
1936
|
# transaction has to succeed. The default is `120`.
|
1937
|
+
# @param [Boolean] exclude_txn_from_change_streams If set to true,
|
1938
|
+
# mutations will not be recorded in change streams with DDL option
|
1939
|
+
# `allow_txn_exclusion=true`.
|
1726
1940
|
# @param [Hash] commit_options A hash of commit options.
|
1727
1941
|
# e.g., return_commit_stats. Commit options are optional.
|
1728
1942
|
# The following options can be provided:
|
@@ -1862,8 +2076,8 @@ module Google
|
|
1862
2076
|
# tx.insert "users", [{ id: 2, name: "Harvey", active: true }]
|
1863
2077
|
# end
|
1864
2078
|
#
|
1865
|
-
def transaction deadline: 120,
|
1866
|
-
request_options: nil, call_options: nil
|
2079
|
+
def transaction deadline: 120, exclude_txn_from_change_streams: false,
|
2080
|
+
commit_options: nil, request_options: nil, call_options: nil
|
1867
2081
|
ensure_service!
|
1868
2082
|
unless Thread.current[IS_TRANSACTION_RUNNING_KEY].nil?
|
1869
2083
|
raise "Nested transactions are not allowed"
|
@@ -1877,7 +2091,7 @@ module Google
|
|
1877
2091
|
request_options, tag_type: :transaction_tag
|
1878
2092
|
|
1879
2093
|
@pool.with_session do |session|
|
1880
|
-
tx = session.create_empty_transaction
|
2094
|
+
tx = session.create_empty_transaction exclude_txn_from_change_streams: exclude_txn_from_change_streams
|
1881
2095
|
if request_options
|
1882
2096
|
tx.transaction_tag = request_options[:transaction_tag]
|
1883
2097
|
end
|
@@ -1890,6 +2104,7 @@ module Google
|
|
1890
2104
|
commit_resp = @project.service.commit \
|
1891
2105
|
tx.session.path, tx.mutations,
|
1892
2106
|
transaction_id: transaction_id,
|
2107
|
+
exclude_txn_from_change_streams: exclude_txn_from_change_streams,
|
1893
2108
|
commit_options: commit_options,
|
1894
2109
|
request_options: request_options,
|
1895
2110
|
call_options: call_options
|
@@ -1903,7 +2118,7 @@ module Google
|
|
1903
2118
|
# Sleep the amount from RetryDelay, or incremental backoff
|
1904
2119
|
sleep(delay_from_aborted(e) || backoff *= 1.3)
|
1905
2120
|
# Create new transaction on the session and retry the block
|
1906
|
-
tx = session.create_transaction
|
2121
|
+
tx = session.create_transaction exclude_txn_from_change_streams: exclude_txn_from_change_streams
|
1907
2122
|
retry
|
1908
2123
|
rescue StandardError => e
|
1909
2124
|
# Rollback transaction when handling unexpected error
|
@@ -2003,8 +2218,8 @@ module Google
|
|
2003
2218
|
@pool.with_session do |session|
|
2004
2219
|
snp_grpc = @project.service.create_snapshot \
|
2005
2220
|
session.path, strong: strong,
|
2006
|
-
timestamp:
|
2007
|
-
staleness:
|
2221
|
+
timestamp: timestamp || read_timestamp,
|
2222
|
+
staleness: staleness || exact_staleness,
|
2008
2223
|
call_options: call_options
|
2009
2224
|
Thread.current[IS_TRANSACTION_RUNNING_KEY] = true
|
2010
2225
|
snp = Snapshot.from_grpc snp_grpc, session, @directed_read_options
|
@@ -2038,6 +2253,7 @@ module Google
|
|
2038
2253
|
# * `:BYTES`
|
2039
2254
|
# * `:DATE`
|
2040
2255
|
# * `:FLOAT64`
|
2256
|
+
# * `:FLOAT32`
|
2041
2257
|
# * `:NUMERIC`
|
2042
2258
|
# * `:INT64`
|
2043
2259
|
# * `:STRING`
|
@@ -2297,8 +2513,9 @@ module Google
|
|
2297
2513
|
}.compact)))
|
2298
2514
|
end
|
2299
2515
|
|
2300
|
-
def pdml_transaction session
|
2301
|
-
pdml_tx_grpc = @project.service.create_pdml session.path
|
2516
|
+
def pdml_transaction session, exclude_txn_from_change_streams: false
|
2517
|
+
pdml_tx_grpc = @project.service.create_pdml session.path,
|
2518
|
+
exclude_txn_from_change_streams: exclude_txn_from_change_streams
|
2302
2519
|
V1::TransactionSelector.new id: pdml_tx_grpc.id
|
2303
2520
|
end
|
2304
2521
|
|
@@ -69,6 +69,7 @@ module Google
|
|
69
69
|
# | `BOOL` | `true`/`false` | |
|
70
70
|
# | `INT64` | `Integer` | |
|
71
71
|
# | `FLOAT64` | `Float` | |
|
72
|
+
# | `FLOAT32` | `Float` | |
|
72
73
|
# | `NUMERIC` | `BigDecimal` | |
|
73
74
|
# | `STRING` | `String` | |
|
74
75
|
# | `DATE` | `Date` | |
|
@@ -128,6 +129,7 @@ module Google
|
|
128
129
|
# | `BOOL` | `true`/`false` | |
|
129
130
|
# | `INT64` | `Integer` | |
|
130
131
|
# | `FLOAT64` | `Float` | |
|
132
|
+
# | `FLOAT32` | `Float` | |
|
131
133
|
# | `NUMERIC` | `BigDecimal` | |
|
132
134
|
# | `STRING` | `String` | |
|
133
135
|
# | `DATE` | `Date` | |
|
@@ -186,6 +188,7 @@ module Google
|
|
186
188
|
# | `BOOL` | `true`/`false` | |
|
187
189
|
# | `INT64` | `Integer` | |
|
188
190
|
# | `FLOAT64` | `Float` | |
|
191
|
+
# | `FLOAT32` | `Float` | |
|
189
192
|
# | `NUMERIC` | `BigDecimal` | |
|
190
193
|
# | `STRING` | `String` | |
|
191
194
|
# | `DATE` | `Date` | |
|
@@ -246,6 +249,7 @@ module Google
|
|
246
249
|
# | `BOOL` | `true`/`false` | |
|
247
250
|
# | `INT64` | `Integer` | |
|
248
251
|
# | `FLOAT64` | `Float` | |
|
252
|
+
# | `FLOAT32` | `Float` | |
|
249
253
|
# | `NUMERIC` | `BigDecimal` | |
|
250
254
|
# | `STRING` | `String` | |
|
251
255
|
# | `DATE` | `Date` | |
|
@@ -183,7 +183,7 @@ module Google
|
|
183
183
|
when :PG_NUMERIC
|
184
184
|
V1::Type.new(code: :NUMERIC, type_annotation: :PG_NUMERIC)
|
185
185
|
when :PG_JSONB
|
186
|
-
V1::Type.new(code: :JSON, type_annotation: :PG_JSONB)
|
186
|
+
V1::Type.new(code: :JSON, type_annotation: :PG_JSONB)
|
187
187
|
else
|
188
188
|
V1::Type.new(code: field)
|
189
189
|
end
|
@@ -197,7 +197,7 @@ module Google
|
|
197
197
|
value.bool_value
|
198
198
|
when :INT64
|
199
199
|
Integer value.string_value
|
200
|
-
when :FLOAT64
|
200
|
+
when :FLOAT32, :FLOAT64
|
201
201
|
if value.kind == :string_value
|
202
202
|
if value.string_value == "Infinity"
|
203
203
|
Float::INFINITY
|
@@ -30,8 +30,7 @@ module Google
|
|
30
30
|
# operations.
|
31
31
|
#
|
32
32
|
# @deprecated Use the result of
|
33
|
-
#
|
34
|
-
# instead.
|
33
|
+
# {Google::Cloud::Spanner::Admin::Database.database_admin}.list_database_operations instead.
|
35
34
|
#
|
36
35
|
class List < DelegateClass(::Array)
|
37
36
|
# @private
|
@@ -36,8 +36,7 @@ module Google
|
|
36
36
|
# Long-running Operation
|
37
37
|
#
|
38
38
|
# @deprecated Use the long-running operation returned by
|
39
|
-
#
|
40
|
-
# instead.
|
39
|
+
# {Google::Cloud::Spanner::Admin::Database.database_admin}.create_database instead.
|
41
40
|
#
|
42
41
|
# @example
|
43
42
|
# require "google/cloud/spanner"
|
@@ -95,8 +94,7 @@ module Google
|
|
95
94
|
def database
|
96
95
|
return nil unless done?
|
97
96
|
return nil unless @grpc.grpc_op.result == :response
|
98
|
-
return nil unless @grpc.results.instance_of?
|
99
|
-
Admin::Database::V1::Database
|
97
|
+
return nil unless @grpc.results.instance_of? Admin::Database::V1::Database
|
100
98
|
Database.from_grpc @grpc.results, service
|
101
99
|
end
|
102
100
|
|
@@ -26,9 +26,8 @@ module Google
|
|
26
26
|
# Database::List is a special case Array with additional
|
27
27
|
# values.
|
28
28
|
#
|
29
|
-
# @deprecated Use the result of
|
30
|
-
#
|
31
|
-
# instead.
|
29
|
+
# @deprecated Use the result of {Google::Cloud::Spanner::Admin::Database.database_admin}.list_databases
|
30
|
+
# instead.
|
32
31
|
class List < DelegateClass(::Array)
|
33
32
|
##
|
34
33
|
# If not empty, indicates that there are more records that match
|
@@ -63,6 +63,7 @@ module Google
|
|
63
63
|
# * `:BYTES`
|
64
64
|
# * `:DATE`
|
65
65
|
# * `:FLOAT64`
|
66
|
+
# * `:FLOAT32`
|
66
67
|
# * `:NUMERIC`
|
67
68
|
# * `:INT64`
|
68
69
|
# * `:STRING`
|
@@ -173,7 +174,7 @@ module Google
|
|
173
174
|
# @return [Boolean] Returns `true` if there are duplicate names.
|
174
175
|
#
|
175
176
|
def duplicate_names?
|
176
|
-
keys.group_by { |e| e }.
|
177
|
+
keys.group_by { |e| e }.any? { |_k, v| v.size > 1 }
|
177
178
|
end
|
178
179
|
|
179
180
|
##
|