google-api-client 0.10.2 → 0.10.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (248) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +25 -0
  3. data/MIGRATING.md +22 -7
  4. data/README.md +4 -8
  5. data/api_names.yaml +1210 -37815
  6. data/generated/google/apis/acceleratedmobilepageurl_v1.rb +32 -0
  7. data/generated/google/apis/acceleratedmobilepageurl_v1/classes.rb +144 -0
  8. data/generated/google/apis/acceleratedmobilepageurl_v1/representations.rb +86 -0
  9. data/generated/google/apis/acceleratedmobilepageurl_v1/service.rb +90 -0
  10. data/generated/google/apis/adexchangebuyer2_v2beta1.rb +1 -1
  11. data/generated/google/apis/adexchangebuyer2_v2beta1/classes.rb +764 -764
  12. data/generated/google/apis/adexchangebuyer2_v2beta1/representations.rb +180 -180
  13. data/generated/google/apis/adexchangebuyer2_v2beta1/service.rb +421 -421
  14. data/generated/google/apis/adexchangebuyer_v1_4/classes.rb +1 -0
  15. data/generated/google/apis/admin_directory_v1/classes.rb +1 -0
  16. data/generated/google/apis/admin_reports_v1.rb +1 -1
  17. data/generated/google/apis/adsense_v1_4.rb +1 -1
  18. data/generated/google/apis/adsensehost_v4_1.rb +1 -1
  19. data/generated/google/apis/analyticsreporting_v4/classes.rb +187 -187
  20. data/generated/google/apis/analyticsreporting_v4/representations.rb +42 -42
  21. data/generated/google/apis/appengine_v1.rb +40 -0
  22. data/generated/google/apis/appengine_v1/classes.rb +2251 -0
  23. data/generated/google/apis/appengine_v1/representations.rb +858 -0
  24. data/generated/google/apis/appengine_v1/service.rb +894 -0
  25. data/generated/google/apis/bigquery_v2.rb +1 -1
  26. data/generated/google/apis/bigquery_v2/classes.rb +11 -6
  27. data/generated/google/apis/books_v1.rb +1 -1
  28. data/generated/google/apis/books_v1/classes.rb +26 -0
  29. data/generated/google/apis/books_v1/representations.rb +15 -0
  30. data/generated/google/apis/books_v1/service.rb +4 -1
  31. data/generated/google/apis/calendar_v3.rb +1 -1
  32. data/generated/google/apis/classroom_v1.rb +1 -1
  33. data/generated/google/apis/cloudbuild_v1.rb +1 -1
  34. data/generated/google/apis/cloudbuild_v1/classes.rb +638 -637
  35. data/generated/google/apis/cloudbuild_v1/representations.rb +110 -110
  36. data/generated/google/apis/cloudbuild_v1/service.rb +139 -139
  37. data/generated/google/apis/clouddebugger_v2.rb +3 -3
  38. data/generated/google/apis/clouddebugger_v2/classes.rb +131 -131
  39. data/generated/google/apis/clouddebugger_v2/representations.rb +25 -25
  40. data/generated/google/apis/clouderrorreporting_v1beta1.rb +36 -0
  41. data/generated/google/apis/clouderrorreporting_v1beta1/classes.rb +590 -0
  42. data/generated/google/apis/clouderrorreporting_v1beta1/representations.rb +252 -0
  43. data/generated/google/apis/clouderrorreporting_v1beta1/service.rb +350 -0
  44. data/generated/google/apis/cloudfunctions_v1.rb +35 -0
  45. data/generated/google/apis/cloudfunctions_v1/classes.rb +98 -0
  46. data/generated/google/apis/cloudfunctions_v1/representations.rb +57 -0
  47. data/generated/google/apis/cloudfunctions_v1/service.rb +89 -0
  48. data/generated/google/apis/cloudkms_v1/classes.rb +277 -270
  49. data/generated/google/apis/cloudkms_v1/representations.rb +73 -73
  50. data/generated/google/apis/cloudkms_v1/service.rb +194 -194
  51. data/generated/google/apis/cloudresourcemanager_v1.rb +1 -1
  52. data/generated/google/apis/cloudresourcemanager_v1/classes.rb +1147 -1144
  53. data/generated/google/apis/cloudresourcemanager_v1/representations.rb +188 -188
  54. data/generated/google/apis/cloudresourcemanager_v1/service.rb +513 -936
  55. data/generated/google/apis/cloudresourcemanager_v1beta1.rb +1 -1
  56. data/generated/google/apis/cloudresourcemanager_v1beta1/classes.rb +307 -916
  57. data/generated/google/apis/cloudresourcemanager_v1beta1/representations.rb +63 -285
  58. data/generated/google/apis/cloudresourcemanager_v1beta1/service.rb +333 -681
  59. data/generated/google/apis/cloudtrace_v1/classes.rb +38 -38
  60. data/generated/google/apis/cloudtrace_v1/representations.rb +13 -13
  61. data/generated/google/apis/cloudtrace_v1/service.rb +16 -16
  62. data/generated/google/apis/compute_beta.rb +1 -1
  63. data/generated/google/apis/compute_beta/classes.rb +32 -7
  64. data/generated/google/apis/compute_beta/representations.rb +2 -0
  65. data/generated/google/apis/compute_beta/service.rb +11 -11
  66. data/generated/google/apis/compute_v1.rb +1 -1
  67. data/generated/google/apis/compute_v1/classes.rb +95 -2
  68. data/generated/google/apis/compute_v1/representations.rb +33 -0
  69. data/generated/google/apis/dataflow_v1b3/classes.rb +3333 -3333
  70. data/generated/google/apis/dataflow_v1b3/representations.rb +759 -759
  71. data/generated/google/apis/dataflow_v1b3/service.rb +154 -154
  72. data/generated/google/apis/dataproc_v1.rb +1 -1
  73. data/generated/google/apis/dataproc_v1/classes.rb +1097 -1097
  74. data/generated/google/apis/dataproc_v1/representations.rb +200 -200
  75. data/generated/google/apis/dataproc_v1/service.rb +356 -356
  76. data/generated/google/apis/datastore_v1.rb +4 -4
  77. data/generated/google/apis/datastore_v1/classes.rb +701 -690
  78. data/generated/google/apis/datastore_v1/representations.rb +160 -160
  79. data/generated/google/apis/datastore_v1/service.rb +52 -52
  80. data/generated/google/apis/deploymentmanager_v2/classes.rb +4 -0
  81. data/generated/google/apis/doubleclicksearch_v2.rb +1 -1
  82. data/generated/google/apis/drive_v2.rb +1 -1
  83. data/generated/google/apis/drive_v2/classes.rb +158 -35
  84. data/generated/google/apis/drive_v2/representations.rb +39 -0
  85. data/generated/google/apis/drive_v2/service.rb +4 -4
  86. data/generated/google/apis/drive_v3.rb +1 -1
  87. data/generated/google/apis/drive_v3/classes.rb +162 -33
  88. data/generated/google/apis/drive_v3/representations.rb +39 -0
  89. data/generated/google/apis/drive_v3/service.rb +4 -4
  90. data/generated/google/apis/firebasedynamiclinks_v1.rb +35 -0
  91. data/generated/google/apis/firebasedynamiclinks_v1/classes.rb +466 -0
  92. data/generated/google/apis/firebasedynamiclinks_v1/representations.rb +222 -0
  93. data/generated/google/apis/firebasedynamiclinks_v1/service.rb +95 -0
  94. data/generated/google/apis/firebaserules_v1.rb +41 -0
  95. data/generated/google/apis/firebaserules_v1/classes.rb +425 -0
  96. data/generated/google/apis/firebaserules_v1/representations.rb +222 -0
  97. data/generated/google/apis/firebaserules_v1/service.rb +495 -0
  98. data/generated/google/apis/games_v1/classes.rb +4 -0
  99. data/generated/google/apis/genomics_v1.rb +7 -7
  100. data/generated/google/apis/genomics_v1/classes.rb +2336 -2335
  101. data/generated/google/apis/genomics_v1/representations.rb +387 -387
  102. data/generated/google/apis/genomics_v1/service.rb +1187 -1187
  103. data/generated/google/apis/gmail_v1/classes.rb +3 -0
  104. data/generated/google/apis/iam_v1.rb +1 -1
  105. data/generated/google/apis/iam_v1/classes.rb +123 -117
  106. data/generated/google/apis/iam_v1/representations.rb +33 -33
  107. data/generated/google/apis/iam_v1/service.rb +109 -109
  108. data/generated/google/apis/identitytoolkit_v3/classes.rb +5 -0
  109. data/generated/google/apis/kgsearch_v1/classes.rb +6 -6
  110. data/generated/google/apis/kgsearch_v1/representations.rb +1 -1
  111. data/generated/google/apis/kgsearch_v1/service.rb +4 -4
  112. data/generated/google/apis/language_v1.rb +36 -0
  113. data/generated/google/apis/language_v1/classes.rb +757 -0
  114. data/generated/google/apis/language_v1/representations.rb +338 -0
  115. data/generated/google/apis/language_v1/service.rb +185 -0
  116. data/generated/google/apis/language_v1beta1/classes.rb +407 -407
  117. data/generated/google/apis/language_v1beta1/representations.rb +103 -103
  118. data/generated/google/apis/language_v1beta1/service.rb +45 -45
  119. data/generated/google/apis/logging_v2.rb +46 -0
  120. data/generated/google/apis/logging_v2/classes.rb +1271 -0
  121. data/generated/google/apis/logging_v2/representations.rb +421 -0
  122. data/generated/google/apis/logging_v2/service.rb +1569 -0
  123. data/generated/google/apis/logging_v2beta1.rb +1 -1
  124. data/generated/google/apis/logging_v2beta1/classes.rb +886 -886
  125. data/generated/google/apis/logging_v2beta1/representations.rb +132 -132
  126. data/generated/google/apis/logging_v2beta1/service.rb +235 -235
  127. data/generated/google/apis/manufacturers_v1/classes.rb +147 -147
  128. data/generated/google/apis/manufacturers_v1/representations.rb +29 -29
  129. data/generated/google/apis/ml_v1.rb +34 -0
  130. data/generated/google/apis/ml_v1/classes.rb +1617 -0
  131. data/generated/google/apis/ml_v1/representations.rb +498 -0
  132. data/generated/google/apis/ml_v1/service.rb +769 -0
  133. data/generated/google/apis/monitoring_v3.rb +4 -4
  134. data/generated/google/apis/monitoring_v3/classes.rb +630 -630
  135. data/generated/google/apis/monitoring_v3/representations.rb +134 -134
  136. data/generated/google/apis/monitoring_v3/service.rb +240 -240
  137. data/generated/google/apis/pagespeedonline_v2/classes.rb +1 -0
  138. data/generated/google/apis/partners_v2.rb +1 -1
  139. data/generated/google/apis/partners_v2/classes.rb +639 -639
  140. data/generated/google/apis/partners_v2/representations.rb +168 -168
  141. data/generated/google/apis/partners_v2/service.rb +381 -381
  142. data/generated/google/apis/people_v1.rb +10 -10
  143. data/generated/google/apis/people_v1/classes.rb +524 -524
  144. data/generated/google/apis/people_v1/representations.rb +143 -143
  145. data/generated/google/apis/people_v1/service.rb +30 -30
  146. data/generated/google/apis/plus_domains_v1.rb +1 -1
  147. data/generated/google/apis/plus_v1.rb +1 -1
  148. data/generated/google/apis/proximitybeacon_v1beta1/classes.rb +454 -444
  149. data/generated/google/apis/proximitybeacon_v1beta1/representations.rb +90 -90
  150. data/generated/google/apis/proximitybeacon_v1beta1/service.rb +110 -110
  151. data/generated/google/apis/pubsub_v1/classes.rb +175 -173
  152. data/generated/google/apis/pubsub_v1/representations.rb +53 -53
  153. data/generated/google/apis/pubsub_v1/service.rb +210 -210
  154. data/generated/google/apis/replicapool_v1beta2/classes.rb +2 -0
  155. data/generated/google/apis/runtimeconfig_v1.rb +38 -0
  156. data/generated/google/apis/runtimeconfig_v1/classes.rb +252 -0
  157. data/generated/google/apis/runtimeconfig_v1/representations.rb +98 -0
  158. data/generated/google/apis/runtimeconfig_v1/service.rb +176 -0
  159. data/generated/google/apis/script_v1.rb +1 -1
  160. data/generated/google/apis/script_v1/classes.rb +6 -6
  161. data/generated/google/apis/script_v1/representations.rb +1 -1
  162. data/generated/google/apis/searchconsole_v1.rb +31 -0
  163. data/generated/google/apis/searchconsole_v1/classes.rb +205 -0
  164. data/generated/google/apis/searchconsole_v1/representations.rb +129 -0
  165. data/generated/google/apis/searchconsole_v1/service.rb +88 -0
  166. data/generated/google/apis/servicecontrol_v1.rb +38 -0
  167. data/generated/google/apis/servicecontrol_v1/classes.rb +1675 -0
  168. data/generated/google/apis/servicecontrol_v1/representations.rb +601 -0
  169. data/generated/google/apis/servicecontrol_v1/service.rb +337 -0
  170. data/generated/google/apis/servicemanagement_v1.rb +45 -0
  171. data/generated/google/apis/servicemanagement_v1/classes.rb +4934 -0
  172. data/generated/google/apis/servicemanagement_v1/representations.rb +1526 -0
  173. data/generated/google/apis/servicemanagement_v1/service.rb +860 -0
  174. data/generated/google/apis/serviceuser_v1.rb +42 -0
  175. data/generated/google/apis/serviceuser_v1/classes.rb +3746 -0
  176. data/generated/google/apis/serviceuser_v1/representations.rb +1041 -0
  177. data/generated/google/apis/serviceuser_v1/service.rb +214 -0
  178. data/generated/google/apis/sheets_v4.rb +3 -3
  179. data/generated/google/apis/sheets_v4/classes.rb +4390 -4390
  180. data/generated/google/apis/sheets_v4/representations.rb +381 -381
  181. data/generated/google/apis/sheets_v4/service.rb +48 -48
  182. data/generated/google/apis/slides_v1.rb +3 -3
  183. data/generated/google/apis/slides_v1/classes.rb +2860 -2860
  184. data/generated/google/apis/slides_v1/representations.rb +693 -693
  185. data/generated/google/apis/slides_v1/service.rb +30 -30
  186. data/generated/google/apis/sourcerepo_v1.rb +34 -0
  187. data/generated/google/apis/sourcerepo_v1/classes.rb +687 -0
  188. data/generated/google/apis/sourcerepo_v1/representations.rb +285 -0
  189. data/generated/google/apis/sourcerepo_v1/service.rb +291 -0
  190. data/generated/google/apis/spanner_v1.rb +35 -0
  191. data/generated/google/apis/spanner_v1/classes.rb +3294 -0
  192. data/generated/google/apis/spanner_v1/representations.rb +984 -0
  193. data/generated/google/apis/spanner_v1/service.rb +1504 -0
  194. data/generated/google/apis/speech_v1beta1.rb +1 -1
  195. data/generated/google/apis/speech_v1beta1/classes.rb +197 -196
  196. data/generated/google/apis/speech_v1beta1/representations.rb +53 -53
  197. data/generated/google/apis/speech_v1beta1/service.rb +27 -27
  198. data/generated/google/apis/storage_v1.rb +1 -1
  199. data/generated/google/apis/storage_v1/classes.rb +131 -0
  200. data/generated/google/apis/storage_v1/representations.rb +51 -0
  201. data/generated/google/apis/storage_v1/service.rb +182 -0
  202. data/generated/google/apis/storagetransfer_v1.rb +1 -1
  203. data/generated/google/apis/storagetransfer_v1/classes.rb +732 -661
  204. data/generated/google/apis/storagetransfer_v1/representations.rb +132 -132
  205. data/generated/google/apis/storagetransfer_v1/service.rb +174 -197
  206. data/generated/google/apis/surveys_v2.rb +40 -0
  207. data/generated/google/apis/surveys_v2/classes.rb +806 -0
  208. data/generated/google/apis/surveys_v2/representations.rb +347 -0
  209. data/generated/google/apis/surveys_v2/service.rb +477 -0
  210. data/generated/google/apis/tagmanager_v2.rb +52 -0
  211. data/generated/google/apis/tagmanager_v2/classes.rb +2435 -0
  212. data/generated/google/apis/tagmanager_v2/representations.rb +993 -0
  213. data/generated/google/apis/tagmanager_v2/service.rb +2865 -0
  214. data/generated/google/apis/toolresults_v1beta3.rb +34 -0
  215. data/generated/google/apis/toolresults_v1beta3/classes.rb +2160 -0
  216. data/generated/google/apis/toolresults_v1beta3/representations.rb +729 -0
  217. data/generated/google/apis/toolresults_v1beta3/service.rb +1236 -0
  218. data/generated/google/apis/tracing_v1.rb +40 -0
  219. data/generated/google/apis/tracing_v1/classes.rb +664 -0
  220. data/generated/google/apis/tracing_v1/representations.rb +279 -0
  221. data/generated/google/apis/tracing_v1/service.rb +225 -0
  222. data/generated/google/apis/vision_v1.rb +1 -1
  223. data/generated/google/apis/vision_v1/classes.rb +1223 -1222
  224. data/generated/google/apis/vision_v1/representations.rb +234 -234
  225. data/generated/google/apis/vision_v1/service.rb +10 -10
  226. data/generated/google/apis/webfonts_v1.rb +33 -0
  227. data/generated/google/apis/webfonts_v1/classes.rb +113 -0
  228. data/generated/google/apis/webfonts_v1/representations.rb +62 -0
  229. data/generated/google/apis/webfonts_v1/service.rb +102 -0
  230. data/generated/google/apis/youtube_analytics_v1.rb +1 -1
  231. data/generated/google/apis/youtube_partner_v1.rb +1 -1
  232. data/generated/google/apis/youtube_partner_v1/classes.rb +31 -0
  233. data/generated/google/apis/youtube_partner_v1/representations.rb +6 -0
  234. data/generated/google/apis/youtube_partner_v1/service.rb +41 -0
  235. data/generated/google/apis/youtube_v3/classes.rb +1 -0
  236. data/generated/google/apis/youtubereporting_v1.rb +4 -4
  237. data/generated/google/apis/youtubereporting_v1/classes.rb +76 -76
  238. data/generated/google/apis/youtubereporting_v1/representations.rb +25 -25
  239. data/generated/google/apis/youtubereporting_v1/service.rb +95 -95
  240. data/lib/google/apis/generator/annotator.rb +5 -4
  241. data/lib/google/apis/generator/templates/_class.tmpl +3 -0
  242. data/lib/google/apis/version.rb +1 -1
  243. data/samples/cli/lib/samples/adsense.rb +99 -0
  244. data/samples/cli/lib/samples/analytics.rb +18 -0
  245. data/samples/cli/lib/samples/gmail.rb +33 -0
  246. data/samples/cli/lib/samples/vision.rb +69 -0
  247. metadata +89 -4
  248. data/sync.rb +0 -71
@@ -0,0 +1,35 @@
1
+ # Copyright 2015 Google Inc.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ require 'google/apis/spanner_v1/service.rb'
16
+ require 'google/apis/spanner_v1/classes.rb'
17
+ require 'google/apis/spanner_v1/representations.rb'
18
+
19
+ module Google
20
+ module Apis
21
+ # Cloud Spanner API
22
+ #
23
+ # Cloud Spanner is a managed, mission-critical, globally consistent and scalable
24
+ # relational database service.
25
+ #
26
+ # @see https://cloud.google.com/spanner/
27
+ module SpannerV1
28
+ VERSION = 'V1'
29
+ REVISION = '20170317'
30
+
31
+ # View and manage your data across Google Cloud Platform services
32
+ AUTH_CLOUD_PLATFORM = 'https://www.googleapis.com/auth/cloud-platform'
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,3294 @@
1
+ # Copyright 2015 Google Inc.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ require 'date'
16
+ require 'google/apis/core/base_service'
17
+ require 'google/apis/core/json_representation'
18
+ require 'google/apis/core/hashable'
19
+ require 'google/apis/errors'
20
+
21
+ module Google
22
+ module Apis
23
+ module SpannerV1
24
+
25
+ # The response for ListInstanceConfigs.
26
+ class ListInstanceConfigsResponse
27
+ include Google::Apis::Core::Hashable
28
+
29
+ # `next_page_token` can be sent in a subsequent
30
+ # ListInstanceConfigs call to
31
+ # fetch more of the matching instance configurations.
32
+ # Corresponds to the JSON property `nextPageToken`
33
+ # @return [String]
34
+ attr_accessor :next_page_token
35
+
36
+ # The list of requested instance configurations.
37
+ # Corresponds to the JSON property `instanceConfigs`
38
+ # @return [Array<Google::Apis::SpannerV1::InstanceConfig>]
39
+ attr_accessor :instance_configs
40
+
41
+ def initialize(**args)
42
+ update!(**args)
43
+ end
44
+
45
+ # Update properties of this object
46
+ def update!(**args)
47
+ @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
48
+ @instance_configs = args[:instance_configs] if args.key?(:instance_configs)
49
+ end
50
+ end
51
+
52
+ # The request for BeginTransaction.
53
+ class BeginTransactionRequest
54
+ include Google::Apis::Core::Hashable
55
+
56
+ # # Transactions
57
+ # Each session can have at most one active transaction at a time. After the
58
+ # active transaction is completed, the session can immediately be
59
+ # re-used for the next transaction. It is not necessary to create a
60
+ # new session for each transaction.
61
+ # # Transaction Modes
62
+ # Cloud Spanner supports two transaction modes:
63
+ # 1. Locking read-write. This type of transaction is the only way
64
+ # to write data into Cloud Spanner. These transactions rely on
65
+ # pessimistic locking and, if necessary, two-phase commit.
66
+ # Locking read-write transactions may abort, requiring the
67
+ # application to retry.
68
+ # 2. Snapshot read-only. This transaction type provides guaranteed
69
+ # consistency across several reads, but does not allow
70
+ # writes. Snapshot read-only transactions can be configured to
71
+ # read at timestamps in the past. Snapshot read-only
72
+ # transactions do not need to be committed.
73
+ # For transactions that only read, snapshot read-only transactions
74
+ # provide simpler semantics and are almost always faster. In
75
+ # particular, read-only transactions do not take locks, so they do
76
+ # not conflict with read-write transactions. As a consequence of not
77
+ # taking locks, they also do not abort, so retry loops are not needed.
78
+ # Transactions may only read/write data in a single database. They
79
+ # may, however, read/write data in different tables within that
80
+ # database.
81
+ # ## Locking Read-Write Transactions
82
+ # Locking transactions may be used to atomically read-modify-write
83
+ # data anywhere in a database. This type of transaction is externally
84
+ # consistent.
85
+ # Clients should attempt to minimize the amount of time a transaction
86
+ # is active. Faster transactions commit with higher probability
87
+ # and cause less contention. Cloud Spanner attempts to keep read locks
88
+ # active as long as the transaction continues to do reads, and the
89
+ # transaction has not been terminated by
90
+ # Commit or
91
+ # Rollback. Long periods of
92
+ # inactivity at the client may cause Cloud Spanner to release a
93
+ # transaction's locks and abort it.
94
+ # Reads performed within a transaction acquire locks on the data
95
+ # being read. Writes can only be done at commit time, after all reads
96
+ # have been completed.
97
+ # Conceptually, a read-write transaction consists of zero or more
98
+ # reads or SQL queries followed by
99
+ # Commit. At any time before
100
+ # Commit, the client can send a
101
+ # Rollback request to abort the
102
+ # transaction.
103
+ # ### Semantics
104
+ # Cloud Spanner can commit the transaction if all read locks it acquired
105
+ # are still valid at commit time, and it is able to acquire write
106
+ # locks for all writes. Cloud Spanner can abort the transaction for any
107
+ # reason. If a commit attempt returns `ABORTED`, Cloud Spanner guarantees
108
+ # that the transaction has not modified any user data in Cloud Spanner.
109
+ # Unless the transaction commits, Cloud Spanner makes no guarantees about
110
+ # how long the transaction's locks were held for. It is an error to
111
+ # use Cloud Spanner locks for any sort of mutual exclusion other than
112
+ # between Cloud Spanner transactions themselves.
113
+ # ### Retrying Aborted Transactions
114
+ # When a transaction aborts, the application can choose to retry the
115
+ # whole transaction again. To maximize the chances of successfully
116
+ # committing the retry, the client should execute the retry in the
117
+ # same session as the original attempt. The original session's lock
118
+ # priority increases with each consecutive abort, meaning that each
119
+ # attempt has a slightly better chance of success than the previous.
120
+ # Under some circumstances (e.g., many transactions attempting to
121
+ # modify the same row(s)), a transaction can abort many times in a
122
+ # short period before successfully committing. Thus, it is not a good
123
+ # idea to cap the number of retries a transaction can attempt;
124
+ # instead, it is better to limit the total amount of wall time spent
125
+ # retrying.
126
+ # ### Idle Transactions
127
+ # A transaction is considered idle if it has no outstanding reads or
128
+ # SQL queries and has not started a read or SQL query within the last 10
129
+ # seconds. Idle transactions can be aborted by Cloud Spanner so that they
130
+ # don't hold on to locks indefinitely. In that case, the commit will
131
+ # fail with error `ABORTED`.
132
+ # If this behavior is undesirable, periodically executing a simple
133
+ # SQL query in the transaction (e.g., `SELECT 1`) prevents the
134
+ # transaction from becoming idle.
135
+ # ## Snapshot Read-Only Transactions
136
+ # Snapshot read-only transactions provides a simpler method than
137
+ # locking read-write transactions for doing several consistent
138
+ # reads. However, this type of transaction does not support writes.
139
+ # Snapshot transactions do not take locks. Instead, they work by
140
+ # choosing a Cloud Spanner timestamp, then executing all reads at that
141
+ # timestamp. Since they do not acquire locks, they do not block
142
+ # concurrent read-write transactions.
143
+ # Unlike locking read-write transactions, snapshot read-only
144
+ # transactions never abort. They can fail if the chosen read
145
+ # timestamp is garbage collected; however, the default garbage
146
+ # collection policy is generous enough that most applications do not
147
+ # need to worry about this in practice.
148
+ # Snapshot read-only transactions do not need to call
149
+ # Commit or
150
+ # Rollback (and in fact are not
151
+ # permitted to do so).
152
+ # To execute a snapshot transaction, the client specifies a timestamp
153
+ # bound, which tells Cloud Spanner how to choose a read timestamp.
154
+ # The types of timestamp bound are:
155
+ # - Strong (the default).
156
+ # - Bounded staleness.
157
+ # - Exact staleness.
158
+ # If the Cloud Spanner database to be read is geographically distributed,
159
+ # stale read-only transactions can execute more quickly than strong
160
+ # or read-write transaction, because they are able to execute far
161
+ # from the leader replica.
162
+ # Each type of timestamp bound is discussed in detail below.
163
+ # ### Strong
164
+ # Strong reads are guaranteed to see the effects of all transactions
165
+ # that have committed before the start of the read. Furthermore, all
166
+ # rows yielded by a single read are consistent with each other -- if
167
+ # any part of the read observes a transaction, all parts of the read
168
+ # see the transaction.
169
+ # Strong reads are not repeatable: two consecutive strong read-only
170
+ # transactions might return inconsistent results if there are
171
+ # concurrent writes. If consistency across reads is required, the
172
+ # reads should be executed within a transaction or at an exact read
173
+ # timestamp.
174
+ # See TransactionOptions.ReadOnly.strong.
175
+ # ### Exact Staleness
176
+ # These timestamp bounds execute reads at a user-specified
177
+ # timestamp. Reads at a timestamp are guaranteed to see a consistent
178
+ # prefix of the global transaction history: they observe
179
+ # modifications done by all transactions with a commit timestamp <=
180
+ # the read timestamp, and observe none of the modifications done by
181
+ # transactions with a larger commit timestamp. They will block until
182
+ # all conflicting transactions that may be assigned commit timestamps
183
+ # <= the read timestamp have finished.
184
+ # The timestamp can either be expressed as an absolute Cloud Spanner commit
185
+ # timestamp or a staleness relative to the current time.
186
+ # These modes do not require a "negotiation phase" to pick a
187
+ # timestamp. As a result, they execute slightly faster than the
188
+ # equivalent boundedly stale concurrency modes. On the other hand,
189
+ # boundedly stale reads usually return fresher results.
190
+ # See TransactionOptions.ReadOnly.read_timestamp and
191
+ # TransactionOptions.ReadOnly.exact_staleness.
192
+ # ### Bounded Staleness
193
+ # Bounded staleness modes allow Cloud Spanner to pick the read timestamp,
194
+ # subject to a user-provided staleness bound. Cloud Spanner chooses the
195
+ # newest timestamp within the staleness bound that allows execution
196
+ # of the reads at the closest available replica without blocking.
197
+ # All rows yielded are consistent with each other -- if any part of
198
+ # the read observes a transaction, all parts of the read see the
199
+ # transaction. Boundedly stale reads are not repeatable: two stale
200
+ # reads, even if they use the same staleness bound, can execute at
201
+ # different timestamps and thus return inconsistent results.
202
+ # Boundedly stale reads execute in two phases: the first phase
203
+ # negotiates a timestamp among all replicas needed to serve the
204
+ # read. In the second phase, reads are executed at the negotiated
205
+ # timestamp.
206
+ # As a result of the two phase execution, bounded staleness reads are
207
+ # usually a little slower than comparable exact staleness
208
+ # reads. However, they are typically able to return fresher
209
+ # results, and are more likely to execute at the closest replica.
210
+ # Because the timestamp negotiation requires up-front knowledge of
211
+ # which rows will be read, it can only be used with single-use
212
+ # read-only transactions.
213
+ # See TransactionOptions.ReadOnly.max_staleness and
214
+ # TransactionOptions.ReadOnly.min_read_timestamp.
215
+ # ### Old Read Timestamps and Garbage Collection
216
+ # Cloud Spanner continuously garbage collects deleted and overwritten data
217
+ # in the background to reclaim storage space. This process is known
218
+ # as "version GC". By default, version GC reclaims versions after they
219
+ # are one hour old. Because of this, Cloud Spanner cannot perform reads
220
+ # at read timestamps more than one hour in the past. This
221
+ # restriction also applies to in-progress reads and/or SQL queries whose
222
+ # timestamp become too old while executing. Reads and SQL queries with
223
+ # too-old read timestamps fail with the error `FAILED_PRECONDITION`.
224
+ # Corresponds to the JSON property `options`
225
+ # @return [Google::Apis::SpannerV1::TransactionOptions]
226
+ attr_accessor :options
227
+
228
+ def initialize(**args)
229
+ update!(**args)
230
+ end
231
+
232
+ # Update properties of this object
233
+ def update!(**args)
234
+ @options = args[:options] if args.key?(:options)
235
+ end
236
+ end
237
+
238
+ # The request for Commit.
239
+ class CommitRequest
240
+ include Google::Apis::Core::Hashable
241
+
242
+ # # Transactions
243
+ # Each session can have at most one active transaction at a time. After the
244
+ # active transaction is completed, the session can immediately be
245
+ # re-used for the next transaction. It is not necessary to create a
246
+ # new session for each transaction.
247
+ # # Transaction Modes
248
+ # Cloud Spanner supports two transaction modes:
249
+ # 1. Locking read-write. This type of transaction is the only way
250
+ # to write data into Cloud Spanner. These transactions rely on
251
+ # pessimistic locking and, if necessary, two-phase commit.
252
+ # Locking read-write transactions may abort, requiring the
253
+ # application to retry.
254
+ # 2. Snapshot read-only. This transaction type provides guaranteed
255
+ # consistency across several reads, but does not allow
256
+ # writes. Snapshot read-only transactions can be configured to
257
+ # read at timestamps in the past. Snapshot read-only
258
+ # transactions do not need to be committed.
259
+ # For transactions that only read, snapshot read-only transactions
260
+ # provide simpler semantics and are almost always faster. In
261
+ # particular, read-only transactions do not take locks, so they do
262
+ # not conflict with read-write transactions. As a consequence of not
263
+ # taking locks, they also do not abort, so retry loops are not needed.
264
+ # Transactions may only read/write data in a single database. They
265
+ # may, however, read/write data in different tables within that
266
+ # database.
267
+ # ## Locking Read-Write Transactions
268
+ # Locking transactions may be used to atomically read-modify-write
269
+ # data anywhere in a database. This type of transaction is externally
270
+ # consistent.
271
+ # Clients should attempt to minimize the amount of time a transaction
272
+ # is active. Faster transactions commit with higher probability
273
+ # and cause less contention. Cloud Spanner attempts to keep read locks
274
+ # active as long as the transaction continues to do reads, and the
275
+ # transaction has not been terminated by
276
+ # Commit or
277
+ # Rollback. Long periods of
278
+ # inactivity at the client may cause Cloud Spanner to release a
279
+ # transaction's locks and abort it.
280
+ # Reads performed within a transaction acquire locks on the data
281
+ # being read. Writes can only be done at commit time, after all reads
282
+ # have been completed.
283
+ # Conceptually, a read-write transaction consists of zero or more
284
+ # reads or SQL queries followed by
285
+ # Commit. At any time before
286
+ # Commit, the client can send a
287
+ # Rollback request to abort the
288
+ # transaction.
289
+ # ### Semantics
290
+ # Cloud Spanner can commit the transaction if all read locks it acquired
291
+ # are still valid at commit time, and it is able to acquire write
292
+ # locks for all writes. Cloud Spanner can abort the transaction for any
293
+ # reason. If a commit attempt returns `ABORTED`, Cloud Spanner guarantees
294
+ # that the transaction has not modified any user data in Cloud Spanner.
295
+ # Unless the transaction commits, Cloud Spanner makes no guarantees about
296
+ # how long the transaction's locks were held for. It is an error to
297
+ # use Cloud Spanner locks for any sort of mutual exclusion other than
298
+ # between Cloud Spanner transactions themselves.
299
+ # ### Retrying Aborted Transactions
300
+ # When a transaction aborts, the application can choose to retry the
301
+ # whole transaction again. To maximize the chances of successfully
302
+ # committing the retry, the client should execute the retry in the
303
+ # same session as the original attempt. The original session's lock
304
+ # priority increases with each consecutive abort, meaning that each
305
+ # attempt has a slightly better chance of success than the previous.
306
+ # Under some circumstances (e.g., many transactions attempting to
307
+ # modify the same row(s)), a transaction can abort many times in a
308
+ # short period before successfully committing. Thus, it is not a good
309
+ # idea to cap the number of retries a transaction can attempt;
310
+ # instead, it is better to limit the total amount of wall time spent
311
+ # retrying.
312
+ # ### Idle Transactions
313
+ # A transaction is considered idle if it has no outstanding reads or
314
+ # SQL queries and has not started a read or SQL query within the last 10
315
+ # seconds. Idle transactions can be aborted by Cloud Spanner so that they
316
+ # don't hold on to locks indefinitely. In that case, the commit will
317
+ # fail with error `ABORTED`.
318
+ # If this behavior is undesirable, periodically executing a simple
319
+ # SQL query in the transaction (e.g., `SELECT 1`) prevents the
320
+ # transaction from becoming idle.
321
+ # ## Snapshot Read-Only Transactions
322
+ # Snapshot read-only transactions provides a simpler method than
323
+ # locking read-write transactions for doing several consistent
324
+ # reads. However, this type of transaction does not support writes.
325
+ # Snapshot transactions do not take locks. Instead, they work by
326
+ # choosing a Cloud Spanner timestamp, then executing all reads at that
327
+ # timestamp. Since they do not acquire locks, they do not block
328
+ # concurrent read-write transactions.
329
+ # Unlike locking read-write transactions, snapshot read-only
330
+ # transactions never abort. They can fail if the chosen read
331
+ # timestamp is garbage collected; however, the default garbage
332
+ # collection policy is generous enough that most applications do not
333
+ # need to worry about this in practice.
334
+ # Snapshot read-only transactions do not need to call
335
+ # Commit or
336
+ # Rollback (and in fact are not
337
+ # permitted to do so).
338
+ # To execute a snapshot transaction, the client specifies a timestamp
339
+ # bound, which tells Cloud Spanner how to choose a read timestamp.
340
+ # The types of timestamp bound are:
341
+ # - Strong (the default).
342
+ # - Bounded staleness.
343
+ # - Exact staleness.
344
+ # If the Cloud Spanner database to be read is geographically distributed,
345
+ # stale read-only transactions can execute more quickly than strong
346
+ # or read-write transaction, because they are able to execute far
347
+ # from the leader replica.
348
+ # Each type of timestamp bound is discussed in detail below.
349
+ # ### Strong
350
+ # Strong reads are guaranteed to see the effects of all transactions
351
+ # that have committed before the start of the read. Furthermore, all
352
+ # rows yielded by a single read are consistent with each other -- if
353
+ # any part of the read observes a transaction, all parts of the read
354
+ # see the transaction.
355
+ # Strong reads are not repeatable: two consecutive strong read-only
356
+ # transactions might return inconsistent results if there are
357
+ # concurrent writes. If consistency across reads is required, the
358
+ # reads should be executed within a transaction or at an exact read
359
+ # timestamp.
360
+ # See TransactionOptions.ReadOnly.strong.
361
+ # ### Exact Staleness
362
+ # These timestamp bounds execute reads at a user-specified
363
+ # timestamp. Reads at a timestamp are guaranteed to see a consistent
364
+ # prefix of the global transaction history: they observe
365
+ # modifications done by all transactions with a commit timestamp <=
366
+ # the read timestamp, and observe none of the modifications done by
367
+ # transactions with a larger commit timestamp. They will block until
368
+ # all conflicting transactions that may be assigned commit timestamps
369
+ # <= the read timestamp have finished.
370
+ # The timestamp can either be expressed as an absolute Cloud Spanner commit
371
+ # timestamp or a staleness relative to the current time.
372
+ # These modes do not require a "negotiation phase" to pick a
373
+ # timestamp. As a result, they execute slightly faster than the
374
+ # equivalent boundedly stale concurrency modes. On the other hand,
375
+ # boundedly stale reads usually return fresher results.
376
+ # See TransactionOptions.ReadOnly.read_timestamp and
377
+ # TransactionOptions.ReadOnly.exact_staleness.
378
+ # ### Bounded Staleness
379
+ # Bounded staleness modes allow Cloud Spanner to pick the read timestamp,
380
+ # subject to a user-provided staleness bound. Cloud Spanner chooses the
381
+ # newest timestamp within the staleness bound that allows execution
382
+ # of the reads at the closest available replica without blocking.
383
+ # All rows yielded are consistent with each other -- if any part of
384
+ # the read observes a transaction, all parts of the read see the
385
+ # transaction. Boundedly stale reads are not repeatable: two stale
386
+ # reads, even if they use the same staleness bound, can execute at
387
+ # different timestamps and thus return inconsistent results.
388
+ # Boundedly stale reads execute in two phases: the first phase
389
+ # negotiates a timestamp among all replicas needed to serve the
390
+ # read. In the second phase, reads are executed at the negotiated
391
+ # timestamp.
392
+ # As a result of the two phase execution, bounded staleness reads are
393
+ # usually a little slower than comparable exact staleness
394
+ # reads. However, they are typically able to return fresher
395
+ # results, and are more likely to execute at the closest replica.
396
+ # Because the timestamp negotiation requires up-front knowledge of
397
+ # which rows will be read, it can only be used with single-use
398
+ # read-only transactions.
399
+ # See TransactionOptions.ReadOnly.max_staleness and
400
+ # TransactionOptions.ReadOnly.min_read_timestamp.
401
+ # ### Old Read Timestamps and Garbage Collection
402
+ # Cloud Spanner continuously garbage collects deleted and overwritten data
403
+ # in the background to reclaim storage space. This process is known
404
+ # as "version GC". By default, version GC reclaims versions after they
405
+ # are one hour old. Because of this, Cloud Spanner cannot perform reads
406
+ # at read timestamps more than one hour in the past. This
407
+ # restriction also applies to in-progress reads and/or SQL queries whose
408
+ # timestamp become too old while executing. Reads and SQL queries with
409
+ # too-old read timestamps fail with the error `FAILED_PRECONDITION`.
410
+ # Corresponds to the JSON property `singleUseTransaction`
411
+ # @return [Google::Apis::SpannerV1::TransactionOptions]
412
+ attr_accessor :single_use_transaction
413
+
414
+ # The mutations to be executed when this transaction commits. All
415
+ # mutations are applied atomically, in the order they appear in
416
+ # this list.
417
+ # Corresponds to the JSON property `mutations`
418
+ # @return [Array<Google::Apis::SpannerV1::Mutation>]
419
+ attr_accessor :mutations
420
+
421
+ # Commit a previously-started transaction.
422
+ # Corresponds to the JSON property `transactionId`
423
+ # NOTE: Values are automatically base64 encoded/decoded in the client library.
424
+ # @return [String]
425
+ attr_accessor :transaction_id
426
+
427
+ def initialize(**args)
428
+ update!(**args)
429
+ end
430
+
431
+ # Update properties of this object
432
+ def update!(**args)
433
+ @single_use_transaction = args[:single_use_transaction] if args.key?(:single_use_transaction)
434
+ @mutations = args[:mutations] if args.key?(:mutations)
435
+ @transaction_id = args[:transaction_id] if args.key?(:transaction_id)
436
+ end
437
+ end
438
+
439
+ # Request message for `GetIamPolicy` method.
440
+ class GetIamPolicyRequest
441
+ include Google::Apis::Core::Hashable
442
+
443
+ def initialize(**args)
444
+ update!(**args)
445
+ end
446
+
447
+ # Update properties of this object
448
+ def update!(**args)
449
+ end
450
+ end
451
+
452
+ # Response message for `TestIamPermissions` method.
453
+ class TestIamPermissionsResponse
454
+ include Google::Apis::Core::Hashable
455
+
456
+ # A subset of `TestPermissionsRequest.permissions` that the caller is
457
+ # allowed.
458
+ # Corresponds to the JSON property `permissions`
459
+ # @return [Array<String>]
460
+ attr_accessor :permissions
461
+
462
+ def initialize(**args)
463
+ update!(**args)
464
+ end
465
+
466
+ # Update properties of this object
467
+ def update!(**args)
468
+ @permissions = args[:permissions] if args.key?(:permissions)
469
+ end
470
+ end
471
+
472
+ # Metadata type for the operation returned by
473
+ # CreateDatabase.
474
+ class CreateDatabaseMetadata
475
+ include Google::Apis::Core::Hashable
476
+
477
+ # The database being created.
478
+ # Corresponds to the JSON property `database`
479
+ # @return [String]
480
+ attr_accessor :database
481
+
482
+ def initialize(**args)
483
+ update!(**args)
484
+ end
485
+
486
+ # Update properties of this object
487
+ def update!(**args)
488
+ @database = args[:database] if args.key?(:database)
489
+ end
490
+ end
491
+
492
+ # A rule to be applied in a Policy.
493
+ class Rule
494
+ include Google::Apis::Core::Hashable
495
+
496
+ # Human-readable description of the rule.
497
+ # Corresponds to the JSON property `description`
498
+ # @return [String]
499
+ attr_accessor :description
500
+
501
+ # Additional restrictions that must be met
502
+ # Corresponds to the JSON property `conditions`
503
+ # @return [Array<Google::Apis::SpannerV1::Condition>]
504
+ attr_accessor :conditions
505
+
506
+ # The config returned to callers of tech.iam.IAM.CheckPolicy for any entries
507
+ # that match the LOG action.
508
+ # Corresponds to the JSON property `logConfig`
509
+ # @return [Array<Google::Apis::SpannerV1::LogConfig>]
510
+ attr_accessor :log_config
511
+
512
+ # If one or more 'in' clauses are specified, the rule matches if
513
+ # the PRINCIPAL/AUTHORITY_SELECTOR is in at least one of these entries.
514
+ # Corresponds to the JSON property `in`
515
+ # @return [Array<String>]
516
+ attr_accessor :in
517
+
518
+ # A permission is a string of form '<service>.<resource type>.<verb>'
519
+ # (e.g., 'storage.buckets.list'). A value of '*' matches all permissions,
520
+ # and a verb part of '*' (e.g., 'storage.buckets.*') matches all verbs.
521
+ # Corresponds to the JSON property `permissions`
522
+ # @return [Array<String>]
523
+ attr_accessor :permissions
524
+
525
+ # Required
526
+ # Corresponds to the JSON property `action`
527
+ # @return [String]
528
+ attr_accessor :action
529
+
530
+ # If one or more 'not_in' clauses are specified, the rule matches
531
+ # if the PRINCIPAL/AUTHORITY_SELECTOR is in none of the entries.
532
+ # The format for in and not_in entries is the same as for members in a
533
+ # Binding (see google/iam/v1/policy.proto).
534
+ # Corresponds to the JSON property `notIn`
535
+ # @return [Array<String>]
536
+ attr_accessor :not_in
537
+
538
+ def initialize(**args)
539
+ update!(**args)
540
+ end
541
+
542
+ # Update properties of this object
543
+ def update!(**args)
544
+ @description = args[:description] if args.key?(:description)
545
+ @conditions = args[:conditions] if args.key?(:conditions)
546
+ @log_config = args[:log_config] if args.key?(:log_config)
547
+ @in = args[:in] if args.key?(:in)
548
+ @permissions = args[:permissions] if args.key?(:permissions)
549
+ @action = args[:action] if args.key?(:action)
550
+ @not_in = args[:not_in] if args.key?(:not_in)
551
+ end
552
+ end
553
+
554
+ # Specifies what kind of log the caller must write
555
+ # Increment a streamz counter with the specified metric and field names.
556
+ # Metric names should start with a '/', generally be lowercase-only,
557
+ # and end in "_count". Field names should not contain an initial slash.
558
+ # The actual exported metric names will have "/iam/policy" prepended.
559
+ # Field names correspond to IAM request parameters and field values are
560
+ # their respective values.
561
+ # At present the only supported field names are
562
+ # - "iam_principal", corresponding to IAMContext.principal;
563
+ # - "" (empty string), resulting in one aggretated counter with no field.
564
+ # Examples:
565
+ # counter ` metric: "/debug_access_count" field: "iam_principal" `
566
+ # ==> increment counter /iam/policy/backend_debug_access_count
567
+ # `iam_principal=[value of IAMContext.principal]`
568
+ # At this time we do not support:
569
+ # * multiple field names (though this may be supported in the future)
570
+ # * decrementing the counter
571
+ # * incrementing it by anything other than 1
572
+ class LogConfig
573
+ include Google::Apis::Core::Hashable
574
+
575
+ # Options for counters
576
+ # Corresponds to the JSON property `counter`
577
+ # @return [Google::Apis::SpannerV1::CounterOptions]
578
+ attr_accessor :counter
579
+
580
+ # Write a Data Access (Gin) log
581
+ # Corresponds to the JSON property `dataAccess`
582
+ # @return [Google::Apis::SpannerV1::DataAccessOptions]
583
+ attr_accessor :data_access
584
+
585
+ # Write a Cloud Audit log
586
+ # Corresponds to the JSON property `cloudAudit`
587
+ # @return [Google::Apis::SpannerV1::CloudAuditOptions]
588
+ attr_accessor :cloud_audit
589
+
590
+ def initialize(**args)
591
+ update!(**args)
592
+ end
593
+
594
+ # Update properties of this object
595
+ def update!(**args)
596
+ @counter = args[:counter] if args.key?(:counter)
597
+ @data_access = args[:data_access] if args.key?(:data_access)
598
+ @cloud_audit = args[:cloud_audit] if args.key?(:cloud_audit)
599
+ end
600
+ end
601
+
602
+ # A session in the Cloud Spanner API.
603
+ class Session
604
+ include Google::Apis::Core::Hashable
605
+
606
+ # Required. The name of the session.
607
+ # Corresponds to the JSON property `name`
608
+ # @return [String]
609
+ attr_accessor :name
610
+
611
+ def initialize(**args)
612
+ update!(**args)
613
+ end
614
+
615
+ # Update properties of this object
616
+ def update!(**args)
617
+ @name = args[:name] if args.key?(:name)
618
+ end
619
+ end
620
+
621
+ # The response for ListInstances.
622
+ class ListInstancesResponse
623
+ include Google::Apis::Core::Hashable
624
+
625
+ # `next_page_token` can be sent in a subsequent
626
+ # ListInstances call to fetch more
627
+ # of the matching instances.
628
+ # Corresponds to the JSON property `nextPageToken`
629
+ # @return [String]
630
+ attr_accessor :next_page_token
631
+
632
+ # The list of requested instances.
633
+ # Corresponds to the JSON property `instances`
634
+ # @return [Array<Google::Apis::SpannerV1::Instance>]
635
+ attr_accessor :instances
636
+
637
+ def initialize(**args)
638
+ update!(**args)
639
+ end
640
+
641
+ # Update properties of this object
642
+ def update!(**args)
643
+ @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
644
+ @instances = args[:instances] if args.key?(:instances)
645
+ end
646
+ end
647
+
648
+ # KeyRange represents a range of rows in a table or index.
649
+ # A range has a start key and an end key. These keys can be open or
650
+ # closed, indicating if the range includes rows with that key.
651
+ # Keys are represented by lists, where the ith value in the list
652
+ # corresponds to the ith component of the table or index primary key.
653
+ # Individual values are encoded as described here.
654
+ # For example, consider the following table definition:
655
+ # CREATE TABLE UserEvents (
656
+ # UserName STRING(MAX),
657
+ # EventDate STRING(10)
658
+ # ) PRIMARY KEY(UserName, EventDate);
659
+ # The following keys name rows in this table:
660
+ # "Bob", "2014-09-23"
661
+ # Since the `UserEvents` table's `PRIMARY KEY` clause names two
662
+ # columns, each `UserEvents` key has two elements; the first is the
663
+ # `UserName`, and the second is the `EventDate`.
664
+ # Key ranges with multiple components are interpreted
665
+ # lexicographically by component using the table or index key's declared
666
+ # sort order. For example, the following range returns all events for
667
+ # user `"Bob"` that occurred in the year 2015:
668
+ # "start_closed": ["Bob", "2015-01-01"]
669
+ # "end_closed": ["Bob", "2015-12-31"]
670
+ # Start and end keys can omit trailing key components. This affects the
671
+ # inclusion and exclusion of rows that exactly match the provided key
672
+ # components: if the key is closed, then rows that exactly match the
673
+ # provided components are included; if the key is open, then rows
674
+ # that exactly match are not included.
675
+ # For example, the following range includes all events for `"Bob"` that
676
+ # occurred during and after the year 2000:
677
+ # "start_closed": ["Bob", "2000-01-01"]
678
+ # "end_closed": ["Bob"]
679
+ # The next example retrieves all events for `"Bob"`:
680
+ # "start_closed": ["Bob"]
681
+ # "end_closed": ["Bob"]
682
+ # To retrieve events before the year 2000:
683
+ # "start_closed": ["Bob"]
684
+ # "end_open": ["Bob", "2000-01-01"]
685
+ # The following range includes all rows in the table:
686
+ # "start_closed": []
687
+ # "end_closed": []
688
+ # This range returns all users whose `UserName` begins with any
689
+ # character from A to C:
690
+ # "start_closed": ["A"]
691
+ # "end_open": ["D"]
692
+ # This range returns all users whose `UserName` begins with B:
693
+ # "start_closed": ["B"]
694
+ # "end_open": ["C"]
695
+ # Key ranges honor column sort order. For example, suppose a table is
696
+ # defined as follows:
697
+ # CREATE TABLE DescendingSortedTable `
698
+ # Key INT64,
699
+ # ...
700
+ # ) PRIMARY KEY(Key DESC);
701
+ # The following range retrieves all rows with key values between 1
702
+ # and 100 inclusive:
703
+ # "start_closed": ["100"]
704
+ # "end_closed": ["1"]
705
+ # Note that 100 is passed as the start, and 1 is passed as the end,
706
+ # because `Key` is a descending column in the schema.
707
+ class KeyRange
708
+ include Google::Apis::Core::Hashable
709
+
710
+ # If the end is closed, then the range includes all rows whose
711
+ # first `len(end_closed)` key columns exactly match `end_closed`.
712
+ # Corresponds to the JSON property `endClosed`
713
+ # @return [Array<Object>]
714
+ attr_accessor :end_closed
715
+
716
+ # If the start is closed, then the range includes all rows whose
717
+ # first `len(start_closed)` key columns exactly match `start_closed`.
718
+ # Corresponds to the JSON property `startClosed`
719
+ # @return [Array<Object>]
720
+ attr_accessor :start_closed
721
+
722
+ # If the start is open, then the range excludes rows whose first
723
+ # `len(start_open)` key columns exactly match `start_open`.
724
+ # Corresponds to the JSON property `startOpen`
725
+ # @return [Array<Object>]
726
+ attr_accessor :start_open
727
+
728
+ # If the end is open, then the range excludes rows whose first
729
+ # `len(end_open)` key columns exactly match `end_open`.
730
+ # Corresponds to the JSON property `endOpen`
731
+ # @return [Array<Object>]
732
+ attr_accessor :end_open
733
+
734
+ def initialize(**args)
735
+ update!(**args)
736
+ end
737
+
738
+ # Update properties of this object
739
+ def update!(**args)
740
+ @end_closed = args[:end_closed] if args.key?(:end_closed)
741
+ @start_closed = args[:start_closed] if args.key?(:start_closed)
742
+ @start_open = args[:start_open] if args.key?(:start_open)
743
+ @end_open = args[:end_open] if args.key?(:end_open)
744
+ end
745
+ end
746
+
747
+ # Condensed representation of a node and its subtree. Only present for
748
+ # `SCALAR` PlanNode(s).
749
+ class ShortRepresentation
750
+ include Google::Apis::Core::Hashable
751
+
752
+ # A string representation of the expression subtree rooted at this node.
753
+ # Corresponds to the JSON property `description`
754
+ # @return [String]
755
+ attr_accessor :description
756
+
757
+ # A mapping of (subquery variable name) -> (subquery node id) for cases
758
+ # where the `description` string of this node references a `SCALAR`
759
+ # subquery contained in the expression subtree rooted at this node. The
760
+ # referenced `SCALAR` subquery may not necessarily be a direct child of
761
+ # this node.
762
+ # Corresponds to the JSON property `subqueries`
763
+ # @return [Hash<String,Fixnum>]
764
+ attr_accessor :subqueries
765
+
766
+ def initialize(**args)
767
+ update!(**args)
768
+ end
769
+
770
+ # Update properties of this object
771
+ def update!(**args)
772
+ @description = args[:description] if args.key?(:description)
773
+ @subqueries = args[:subqueries] if args.key?(:subqueries)
774
+ end
775
+ end
776
+
777
+ # A possible configuration for a Cloud Spanner instance. Configurations
778
+ # define the geographic placement of nodes and their replication.
779
+ class InstanceConfig
780
+ include Google::Apis::Core::Hashable
781
+
782
+ # A unique identifier for the instance configuration. Values
783
+ # are of the form
784
+ # `projects/<project>/instanceConfigs/a-z*`
785
+ # Corresponds to the JSON property `name`
786
+ # @return [String]
787
+ attr_accessor :name
788
+
789
+ # The name of this instance configuration as it appears in UIs.
790
+ # Corresponds to the JSON property `displayName`
791
+ # @return [String]
792
+ attr_accessor :display_name
793
+
794
+ def initialize(**args)
795
+ update!(**args)
796
+ end
797
+
798
+ # Update properties of this object
799
+ def update!(**args)
800
+ @name = args[:name] if args.key?(:name)
801
+ @display_name = args[:display_name] if args.key?(:display_name)
802
+ end
803
+ end
804
+
805
+ # The request for UpdateInstance.
806
+ class UpdateInstanceRequest
807
+ include Google::Apis::Core::Hashable
808
+
809
+ # An isolated set of Cloud Spanner resources on which databases can be hosted.
810
+ # Corresponds to the JSON property `instance`
811
+ # @return [Google::Apis::SpannerV1::Instance]
812
+ attr_accessor :instance
813
+
814
+ # Required. A mask specifying which fields in [][google.spanner.admin.instance.
815
+ # v1.UpdateInstanceRequest.instance] should be updated.
816
+ # The field mask must always be specified; this prevents any future fields in
817
+ # [][google.spanner.admin.instance.v1.Instance] from being erased accidentally
818
+ # by clients that do not know
819
+ # about them.
820
+ # Corresponds to the JSON property `fieldMask`
821
+ # @return [String]
822
+ attr_accessor :field_mask
823
+
824
+ def initialize(**args)
825
+ update!(**args)
826
+ end
827
+
828
+ # Update properties of this object
829
+ def update!(**args)
830
+ @instance = args[:instance] if args.key?(:instance)
831
+ @field_mask = args[:field_mask] if args.key?(:field_mask)
832
+ end
833
+ end
834
+
835
+ # A generic empty message that you can re-use to avoid defining duplicated
836
+ # empty messages in your APIs. A typical example is to use it as the request
837
+ # or the response type of an API method. For instance:
838
+ # service Foo `
839
+ # rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);
840
+ # `
841
+ # The JSON representation for `Empty` is empty JSON object ````.
842
+ class Empty
843
+ include Google::Apis::Core::Hashable
844
+
845
+ def initialize(**args)
846
+ update!(**args)
847
+ end
848
+
849
+ # Update properties of this object
850
+ def update!(**args)
851
+ end
852
+ end
853
+
854
+ # # Transactions
855
+ # Each session can have at most one active transaction at a time. After the
856
+ # active transaction is completed, the session can immediately be
857
+ # re-used for the next transaction. It is not necessary to create a
858
+ # new session for each transaction.
859
+ # # Transaction Modes
860
+ # Cloud Spanner supports two transaction modes:
861
+ # 1. Locking read-write. This type of transaction is the only way
862
+ # to write data into Cloud Spanner. These transactions rely on
863
+ # pessimistic locking and, if necessary, two-phase commit.
864
+ # Locking read-write transactions may abort, requiring the
865
+ # application to retry.
866
+ # 2. Snapshot read-only. This transaction type provides guaranteed
867
+ # consistency across several reads, but does not allow
868
+ # writes. Snapshot read-only transactions can be configured to
869
+ # read at timestamps in the past. Snapshot read-only
870
+ # transactions do not need to be committed.
871
+ # For transactions that only read, snapshot read-only transactions
872
+ # provide simpler semantics and are almost always faster. In
873
+ # particular, read-only transactions do not take locks, so they do
874
+ # not conflict with read-write transactions. As a consequence of not
875
+ # taking locks, they also do not abort, so retry loops are not needed.
876
+ # Transactions may only read/write data in a single database. They
877
+ # may, however, read/write data in different tables within that
878
+ # database.
879
+ # ## Locking Read-Write Transactions
880
+ # Locking transactions may be used to atomically read-modify-write
881
+ # data anywhere in a database. This type of transaction is externally
882
+ # consistent.
883
+ # Clients should attempt to minimize the amount of time a transaction
884
+ # is active. Faster transactions commit with higher probability
885
+ # and cause less contention. Cloud Spanner attempts to keep read locks
886
+ # active as long as the transaction continues to do reads, and the
887
+ # transaction has not been terminated by
888
+ # Commit or
889
+ # Rollback. Long periods of
890
+ # inactivity at the client may cause Cloud Spanner to release a
891
+ # transaction's locks and abort it.
892
+ # Reads performed within a transaction acquire locks on the data
893
+ # being read. Writes can only be done at commit time, after all reads
894
+ # have been completed.
895
+ # Conceptually, a read-write transaction consists of zero or more
896
+ # reads or SQL queries followed by
897
+ # Commit. At any time before
898
+ # Commit, the client can send a
899
+ # Rollback request to abort the
900
+ # transaction.
901
+ # ### Semantics
902
+ # Cloud Spanner can commit the transaction if all read locks it acquired
903
+ # are still valid at commit time, and it is able to acquire write
904
+ # locks for all writes. Cloud Spanner can abort the transaction for any
905
+ # reason. If a commit attempt returns `ABORTED`, Cloud Spanner guarantees
906
+ # that the transaction has not modified any user data in Cloud Spanner.
907
+ # Unless the transaction commits, Cloud Spanner makes no guarantees about
908
+ # how long the transaction's locks were held for. It is an error to
909
+ # use Cloud Spanner locks for any sort of mutual exclusion other than
910
+ # between Cloud Spanner transactions themselves.
911
+ # ### Retrying Aborted Transactions
912
+ # When a transaction aborts, the application can choose to retry the
913
+ # whole transaction again. To maximize the chances of successfully
914
+ # committing the retry, the client should execute the retry in the
915
+ # same session as the original attempt. The original session's lock
916
+ # priority increases with each consecutive abort, meaning that each
917
+ # attempt has a slightly better chance of success than the previous.
918
+ # Under some circumstances (e.g., many transactions attempting to
919
+ # modify the same row(s)), a transaction can abort many times in a
920
+ # short period before successfully committing. Thus, it is not a good
921
+ # idea to cap the number of retries a transaction can attempt;
922
+ # instead, it is better to limit the total amount of wall time spent
923
+ # retrying.
924
+ # ### Idle Transactions
925
+ # A transaction is considered idle if it has no outstanding reads or
926
+ # SQL queries and has not started a read or SQL query within the last 10
927
+ # seconds. Idle transactions can be aborted by Cloud Spanner so that they
928
+ # don't hold on to locks indefinitely. In that case, the commit will
929
+ # fail with error `ABORTED`.
930
+ # If this behavior is undesirable, periodically executing a simple
931
+ # SQL query in the transaction (e.g., `SELECT 1`) prevents the
932
+ # transaction from becoming idle.
933
+ # ## Snapshot Read-Only Transactions
934
+ # Snapshot read-only transactions provides a simpler method than
935
+ # locking read-write transactions for doing several consistent
936
+ # reads. However, this type of transaction does not support writes.
937
+ # Snapshot transactions do not take locks. Instead, they work by
938
+ # choosing a Cloud Spanner timestamp, then executing all reads at that
939
+ # timestamp. Since they do not acquire locks, they do not block
940
+ # concurrent read-write transactions.
941
+ # Unlike locking read-write transactions, snapshot read-only
942
+ # transactions never abort. They can fail if the chosen read
943
+ # timestamp is garbage collected; however, the default garbage
944
+ # collection policy is generous enough that most applications do not
945
+ # need to worry about this in practice.
946
+ # Snapshot read-only transactions do not need to call
947
+ # Commit or
948
+ # Rollback (and in fact are not
949
+ # permitted to do so).
950
+ # To execute a snapshot transaction, the client specifies a timestamp
951
+ # bound, which tells Cloud Spanner how to choose a read timestamp.
952
+ # The types of timestamp bound are:
953
+ # - Strong (the default).
954
+ # - Bounded staleness.
955
+ # - Exact staleness.
956
+ # If the Cloud Spanner database to be read is geographically distributed,
957
+ # stale read-only transactions can execute more quickly than strong
958
+ # or read-write transaction, because they are able to execute far
959
+ # from the leader replica.
960
+ # Each type of timestamp bound is discussed in detail below.
961
+ # ### Strong
962
+ # Strong reads are guaranteed to see the effects of all transactions
963
+ # that have committed before the start of the read. Furthermore, all
964
+ # rows yielded by a single read are consistent with each other -- if
965
+ # any part of the read observes a transaction, all parts of the read
966
+ # see the transaction.
967
+ # Strong reads are not repeatable: two consecutive strong read-only
968
+ # transactions might return inconsistent results if there are
969
+ # concurrent writes. If consistency across reads is required, the
970
+ # reads should be executed within a transaction or at an exact read
971
+ # timestamp.
972
+ # See TransactionOptions.ReadOnly.strong.
973
+ # ### Exact Staleness
974
+ # These timestamp bounds execute reads at a user-specified
975
+ # timestamp. Reads at a timestamp are guaranteed to see a consistent
976
+ # prefix of the global transaction history: they observe
977
+ # modifications done by all transactions with a commit timestamp <=
978
+ # the read timestamp, and observe none of the modifications done by
979
+ # transactions with a larger commit timestamp. They will block until
980
+ # all conflicting transactions that may be assigned commit timestamps
981
+ # <= the read timestamp have finished.
982
+ # The timestamp can either be expressed as an absolute Cloud Spanner commit
983
+ # timestamp or a staleness relative to the current time.
984
+ # These modes do not require a "negotiation phase" to pick a
985
+ # timestamp. As a result, they execute slightly faster than the
986
+ # equivalent boundedly stale concurrency modes. On the other hand,
987
+ # boundedly stale reads usually return fresher results.
988
+ # See TransactionOptions.ReadOnly.read_timestamp and
989
+ # TransactionOptions.ReadOnly.exact_staleness.
990
+ # ### Bounded Staleness
991
+ # Bounded staleness modes allow Cloud Spanner to pick the read timestamp,
992
+ # subject to a user-provided staleness bound. Cloud Spanner chooses the
993
+ # newest timestamp within the staleness bound that allows execution
994
+ # of the reads at the closest available replica without blocking.
995
+ # All rows yielded are consistent with each other -- if any part of
996
+ # the read observes a transaction, all parts of the read see the
997
+ # transaction. Boundedly stale reads are not repeatable: two stale
998
+ # reads, even if they use the same staleness bound, can execute at
999
+ # different timestamps and thus return inconsistent results.
1000
+ # Boundedly stale reads execute in two phases: the first phase
1001
+ # negotiates a timestamp among all replicas needed to serve the
1002
+ # read. In the second phase, reads are executed at the negotiated
1003
+ # timestamp.
1004
+ # As a result of the two phase execution, bounded staleness reads are
1005
+ # usually a little slower than comparable exact staleness
1006
+ # reads. However, they are typically able to return fresher
1007
+ # results, and are more likely to execute at the closest replica.
1008
+ # Because the timestamp negotiation requires up-front knowledge of
1009
+ # which rows will be read, it can only be used with single-use
1010
+ # read-only transactions.
1011
+ # See TransactionOptions.ReadOnly.max_staleness and
1012
+ # TransactionOptions.ReadOnly.min_read_timestamp.
1013
+ # ### Old Read Timestamps and Garbage Collection
1014
+ # Cloud Spanner continuously garbage collects deleted and overwritten data
1015
+ # in the background to reclaim storage space. This process is known
1016
+ # as "version GC". By default, version GC reclaims versions after they
1017
+ # are one hour old. Because of this, Cloud Spanner cannot perform reads
1018
+ # at read timestamps more than one hour in the past. This
1019
+ # restriction also applies to in-progress reads and/or SQL queries whose
1020
+ # timestamp become too old while executing. Reads and SQL queries with
1021
+ # too-old read timestamps fail with the error `FAILED_PRECONDITION`.
1022
+ class TransactionOptions
1023
+ include Google::Apis::Core::Hashable
1024
+
1025
+ # Options for read-write transactions.
1026
+ # Corresponds to the JSON property `readWrite`
1027
+ # @return [Google::Apis::SpannerV1::ReadWrite]
1028
+ attr_accessor :read_write
1029
+
1030
+ # Options for read-only transactions.
1031
+ # Corresponds to the JSON property `readOnly`
1032
+ # @return [Google::Apis::SpannerV1::ReadOnly]
1033
+ attr_accessor :read_only
1034
+
1035
+ def initialize(**args)
1036
+ update!(**args)
1037
+ end
1038
+
1039
+ # Update properties of this object
1040
+ def update!(**args)
1041
+ @read_write = args[:read_write] if args.key?(:read_write)
1042
+ @read_only = args[:read_only] if args.key?(:read_only)
1043
+ end
1044
+ end
1045
+
1046
+ # The request for CreateDatabase.
1047
+ class CreateDatabaseRequest
1048
+ include Google::Apis::Core::Hashable
1049
+
1050
+ # An optional list of DDL statements to run inside the newly created
1051
+ # database. Statements can create tables, indexes, etc. These
1052
+ # statements execute atomically with the creation of the database:
1053
+ # if there is an error in any statement, the database is not created.
1054
+ # Corresponds to the JSON property `extraStatements`
1055
+ # @return [Array<String>]
1056
+ attr_accessor :extra_statements
1057
+
1058
+ # Required. A `CREATE DATABASE` statement, which specifies the ID of the
1059
+ # new database. The database ID must conform to the regular expression
1060
+ # `a-z*[a-z0-9]` and be between 2 and 30 characters in length.
1061
+ # Corresponds to the JSON property `createStatement`
1062
+ # @return [String]
1063
+ attr_accessor :create_statement
1064
+
1065
+ def initialize(**args)
1066
+ update!(**args)
1067
+ end
1068
+
1069
+ # Update properties of this object
1070
+ def update!(**args)
1071
+ @extra_statements = args[:extra_statements] if args.key?(:extra_statements)
1072
+ @create_statement = args[:create_statement] if args.key?(:create_statement)
1073
+ end
1074
+ end
1075
+
1076
+ # The request for CreateInstance.
1077
+ class CreateInstanceRequest
1078
+ include Google::Apis::Core::Hashable
1079
+
1080
+ # An isolated set of Cloud Spanner resources on which databases can be hosted.
1081
+ # Corresponds to the JSON property `instance`
1082
+ # @return [Google::Apis::SpannerV1::Instance]
1083
+ attr_accessor :instance
1084
+
1085
+ # Required. The ID of the instance to create. Valid identifiers are of the
1086
+ # form `a-z*[a-z0-9]` and must be between 6 and 30 characters in
1087
+ # length.
1088
+ # Corresponds to the JSON property `instanceId`
1089
+ # @return [String]
1090
+ attr_accessor :instance_id
1091
+
1092
+ def initialize(**args)
1093
+ update!(**args)
1094
+ end
1095
+
1096
+ # Update properties of this object
1097
+ def update!(**args)
1098
+ @instance = args[:instance] if args.key?(:instance)
1099
+ @instance_id = args[:instance_id] if args.key?(:instance_id)
1100
+ end
1101
+ end
1102
+
1103
+ # A condition to be met.
1104
+ class Condition
1105
+ include Google::Apis::Core::Hashable
1106
+
1107
+ # Trusted attributes discharged by the service.
1108
+ # Corresponds to the JSON property `svc`
1109
+ # @return [String]
1110
+ attr_accessor :svc
1111
+
1112
+ # DEPRECATED. Use 'values' instead.
1113
+ # Corresponds to the JSON property `value`
1114
+ # @return [String]
1115
+ attr_accessor :value
1116
+
1117
+ # Trusted attributes supplied by any service that owns resources and uses
1118
+ # the IAM system for access control.
1119
+ # Corresponds to the JSON property `sys`
1120
+ # @return [String]
1121
+ attr_accessor :sys
1122
+
1123
+ # The objects of the condition. This is mutually exclusive with 'value'.
1124
+ # Corresponds to the JSON property `values`
1125
+ # @return [Array<String>]
1126
+ attr_accessor :values
1127
+
1128
+ # Trusted attributes supplied by the IAM system.
1129
+ # Corresponds to the JSON property `iam`
1130
+ # @return [String]
1131
+ attr_accessor :iam
1132
+
1133
+ # An operator to apply the subject with.
1134
+ # Corresponds to the JSON property `op`
1135
+ # @return [String]
1136
+ attr_accessor :op
1137
+
1138
+ def initialize(**args)
1139
+ update!(**args)
1140
+ end
1141
+
1142
+ # Update properties of this object
1143
+ def update!(**args)
1144
+ @svc = args[:svc] if args.key?(:svc)
1145
+ @value = args[:value] if args.key?(:value)
1146
+ @sys = args[:sys] if args.key?(:sys)
1147
+ @values = args[:values] if args.key?(:values)
1148
+ @iam = args[:iam] if args.key?(:iam)
1149
+ @op = args[:op] if args.key?(:op)
1150
+ end
1151
+ end
1152
+
1153
+ # Provides the configuration for logging a type of permissions.
1154
+ # Example:
1155
+ # `
1156
+ # "audit_log_configs": [
1157
+ # `
1158
+ # "log_type": "DATA_READ",
1159
+ # "exempted_members": [
1160
+ # "user:foo@gmail.com"
1161
+ # ]
1162
+ # `,
1163
+ # `
1164
+ # "log_type": "DATA_WRITE",
1165
+ # `
1166
+ # ]
1167
+ # `
1168
+ # This enables 'DATA_READ' and 'DATA_WRITE' logging, while exempting
1169
+ # foo@gmail.com from DATA_READ logging.
1170
+ class AuditLogConfig
1171
+ include Google::Apis::Core::Hashable
1172
+
1173
+ # Specifies the identities that do not cause logging for this type of
1174
+ # permission.
1175
+ # Follows the same format of Binding.members.
1176
+ # Corresponds to the JSON property `exemptedMembers`
1177
+ # @return [Array<String>]
1178
+ attr_accessor :exempted_members
1179
+
1180
+ # The log type that this config enables.
1181
+ # Corresponds to the JSON property `logType`
1182
+ # @return [String]
1183
+ attr_accessor :log_type
1184
+
1185
+ def initialize(**args)
1186
+ update!(**args)
1187
+ end
1188
+
1189
+ # Update properties of this object
1190
+ def update!(**args)
1191
+ @exempted_members = args[:exempted_members] if args.key?(:exempted_members)
1192
+ @log_type = args[:log_type] if args.key?(:log_type)
1193
+ end
1194
+ end
1195
+
1196
+ # Options for read-only transactions.
1197
+ class ReadOnly
1198
+ include Google::Apis::Core::Hashable
1199
+
1200
+ # Executes all reads at a timestamp >= `min_read_timestamp`.
1201
+ # This is useful for requesting fresher data than some previous
1202
+ # read, or data that is fresh enough to observe the effects of some
1203
+ # previously committed transaction whose timestamp is known.
1204
+ # Note that this option can only be used in single-use transactions.
1205
+ # Corresponds to the JSON property `minReadTimestamp`
1206
+ # @return [String]
1207
+ attr_accessor :min_read_timestamp
1208
+
1209
+ # Read data at a timestamp >= `NOW - max_staleness`
1210
+ # seconds. Guarantees that all writes that have committed more
1211
+ # than the specified number of seconds ago are visible. Because
1212
+ # Cloud Spanner chooses the exact timestamp, this mode works even if
1213
+ # the client's local clock is substantially skewed from Cloud Spanner
1214
+ # commit timestamps.
1215
+ # Useful for reading the freshest data available at a nearby
1216
+ # replica, while bounding the possible staleness if the local
1217
+ # replica has fallen behind.
1218
+ # Note that this option can only be used in single-use
1219
+ # transactions.
1220
+ # Corresponds to the JSON property `maxStaleness`
1221
+ # @return [String]
1222
+ attr_accessor :max_staleness
1223
+
1224
+ # Executes all reads at the given timestamp. Unlike other modes,
1225
+ # reads at a specific timestamp are repeatable; the same read at
1226
+ # the same timestamp always returns the same data. If the
1227
+ # timestamp is in the future, the read will block until the
1228
+ # specified timestamp, modulo the read's deadline.
1229
+ # Useful for large scale consistent reads such as mapreduces, or
1230
+ # for coordinating many reads against a consistent snapshot of the
1231
+ # data.
1232
+ # Corresponds to the JSON property `readTimestamp`
1233
+ # @return [String]
1234
+ attr_accessor :read_timestamp
1235
+
1236
+ # If true, the Cloud Spanner-selected read timestamp is included in
1237
+ # the Transaction message that describes the transaction.
1238
+ # Corresponds to the JSON property `returnReadTimestamp`
1239
+ # @return [Boolean]
1240
+ attr_accessor :return_read_timestamp
1241
+ alias_method :return_read_timestamp?, :return_read_timestamp
1242
+
1243
+ # Executes all reads at a timestamp that is `exact_staleness`
1244
+ # old. The timestamp is chosen soon after the read is started.
1245
+ # Guarantees that all writes that have committed more than the
1246
+ # specified number of seconds ago are visible. Because Cloud Spanner
1247
+ # chooses the exact timestamp, this mode works even if the client's
1248
+ # local clock is substantially skewed from Cloud Spanner commit
1249
+ # timestamps.
1250
+ # Useful for reading at nearby replicas without the distributed
1251
+ # timestamp negotiation overhead of `max_staleness`.
1252
+ # Corresponds to the JSON property `exactStaleness`
1253
+ # @return [String]
1254
+ attr_accessor :exact_staleness
1255
+
1256
+ # Read at a timestamp where all previously committed transactions
1257
+ # are visible.
1258
+ # Corresponds to the JSON property `strong`
1259
+ # @return [Boolean]
1260
+ attr_accessor :strong
1261
+ alias_method :strong?, :strong
1262
+
1263
+ def initialize(**args)
1264
+ update!(**args)
1265
+ end
1266
+
1267
+ # Update properties of this object
1268
+ def update!(**args)
1269
+ @min_read_timestamp = args[:min_read_timestamp] if args.key?(:min_read_timestamp)
1270
+ @max_staleness = args[:max_staleness] if args.key?(:max_staleness)
1271
+ @read_timestamp = args[:read_timestamp] if args.key?(:read_timestamp)
1272
+ @return_read_timestamp = args[:return_read_timestamp] if args.key?(:return_read_timestamp)
1273
+ @exact_staleness = args[:exact_staleness] if args.key?(:exact_staleness)
1274
+ @strong = args[:strong] if args.key?(:strong)
1275
+ end
1276
+ end
1277
+
1278
+ # The request for ExecuteSql and
1279
+ # ExecuteStreamingSql.
1280
+ class ExecuteSqlRequest
1281
+ include Google::Apis::Core::Hashable
1282
+
1283
+ # Used to control the amount of debugging information returned in
1284
+ # ResultSetStats.
1285
+ # Corresponds to the JSON property `queryMode`
1286
+ # @return [String]
1287
+ attr_accessor :query_mode
1288
+
1289
+ # This message is used to select the transaction in which a
1290
+ # Read or
1291
+ # ExecuteSql call runs.
1292
+ # See TransactionOptions for more information about transactions.
1293
+ # Corresponds to the JSON property `transaction`
1294
+ # @return [Google::Apis::SpannerV1::TransactionSelector]
1295
+ attr_accessor :transaction
1296
+
1297
+ # If this request is resuming a previously interrupted SQL query
1298
+ # execution, `resume_token` should be copied from the last
1299
+ # PartialResultSet yielded before the interruption. Doing this
1300
+ # enables the new SQL query execution to resume where the last one left
1301
+ # off. The rest of the request parameters must exactly match the
1302
+ # request that yielded this token.
1303
+ # Corresponds to the JSON property `resumeToken`
1304
+ # NOTE: Values are automatically base64 encoded/decoded in the client library.
1305
+ # @return [String]
1306
+ attr_accessor :resume_token
1307
+
1308
+ # It is not always possible for Cloud Spanner to infer the right SQL type
1309
+ # from a JSON value. For example, values of type `BYTES` and values
1310
+ # of type `STRING` both appear in params as JSON strings.
1311
+ # In these cases, `param_types` can be used to specify the exact
1312
+ # SQL type for some or all of the SQL query parameters. See the
1313
+ # definition of Type for more information
1314
+ # about SQL types.
1315
+ # Corresponds to the JSON property `paramTypes`
1316
+ # @return [Hash<String,Google::Apis::SpannerV1::Type>]
1317
+ attr_accessor :param_types
1318
+
1319
+ # Required. The SQL query string.
1320
+ # Corresponds to the JSON property `sql`
1321
+ # @return [String]
1322
+ attr_accessor :sql
1323
+
1324
+ # The SQL query string can contain parameter placeholders. A parameter
1325
+ # placeholder consists of `'@'` followed by the parameter
1326
+ # name. Parameter names consist of any combination of letters,
1327
+ # numbers, and underscores.
1328
+ # Parameters can appear anywhere that a literal value is expected. The same
1329
+ # parameter name can be used more than once, for example:
1330
+ # `"WHERE id > @msg_id AND id < @msg_id + 100"`
1331
+ # It is an error to execute an SQL query with unbound parameters.
1332
+ # Parameter values are specified using `params`, which is a JSON
1333
+ # object whose keys are parameter names, and whose values are the
1334
+ # corresponding parameter values.
1335
+ # Corresponds to the JSON property `params`
1336
+ # @return [Hash<String,Object>]
1337
+ attr_accessor :params
1338
+
1339
+ def initialize(**args)
1340
+ update!(**args)
1341
+ end
1342
+
1343
+ # Update properties of this object
1344
+ def update!(**args)
1345
+ @query_mode = args[:query_mode] if args.key?(:query_mode)
1346
+ @transaction = args[:transaction] if args.key?(:transaction)
1347
+ @resume_token = args[:resume_token] if args.key?(:resume_token)
1348
+ @param_types = args[:param_types] if args.key?(:param_types)
1349
+ @sql = args[:sql] if args.key?(:sql)
1350
+ @params = args[:params] if args.key?(:params)
1351
+ end
1352
+ end
1353
+
1354
+ # Defines an Identity and Access Management (IAM) policy. It is used to
1355
+ # specify access control policies for Cloud Platform resources.
1356
+ # A `Policy` consists of a list of `bindings`. A `Binding` binds a list of
1357
+ # `members` to a `role`, where the members can be user accounts, Google groups,
1358
+ # Google domains, and service accounts. A `role` is a named list of permissions
1359
+ # defined by IAM.
1360
+ # **Example**
1361
+ # `
1362
+ # "bindings": [
1363
+ # `
1364
+ # "role": "roles/owner",
1365
+ # "members": [
1366
+ # "user:mike@example.com",
1367
+ # "group:admins@example.com",
1368
+ # "domain:google.com",
1369
+ # "serviceAccount:my-other-app@appspot.gserviceaccount.com",
1370
+ # ]
1371
+ # `,
1372
+ # `
1373
+ # "role": "roles/viewer",
1374
+ # "members": ["user:sean@example.com"]
1375
+ # `
1376
+ # ]
1377
+ # `
1378
+ # For a description of IAM and its features, see the
1379
+ # [IAM developer's guide](https://cloud.google.com/iam).
1380
+ class Policy
1381
+ include Google::Apis::Core::Hashable
1382
+
1383
+ # Version of the `Policy`. The default version is 0.
1384
+ # Corresponds to the JSON property `version`
1385
+ # @return [Fixnum]
1386
+ attr_accessor :version
1387
+
1388
+ # Specifies cloud audit logging configuration for this policy.
1389
+ # Corresponds to the JSON property `auditConfigs`
1390
+ # @return [Array<Google::Apis::SpannerV1::AuditConfig>]
1391
+ attr_accessor :audit_configs
1392
+
1393
+ # Associates a list of `members` to a `role`.
1394
+ # Multiple `bindings` must not be specified for the same `role`.
1395
+ # `bindings` with no members will result in an error.
1396
+ # Corresponds to the JSON property `bindings`
1397
+ # @return [Array<Google::Apis::SpannerV1::Binding>]
1398
+ attr_accessor :bindings
1399
+
1400
+ # `etag` is used for optimistic concurrency control as a way to help
1401
+ # prevent simultaneous updates of a policy from overwriting each other.
1402
+ # It is strongly suggested that systems make use of the `etag` in the
1403
+ # read-modify-write cycle to perform policy updates in order to avoid race
1404
+ # conditions: An `etag` is returned in the response to `getIamPolicy`, and
1405
+ # systems are expected to put that etag in the request to `setIamPolicy` to
1406
+ # ensure that their change will be applied to the same version of the policy.
1407
+ # If no `etag` is provided in the call to `setIamPolicy`, then the existing
1408
+ # policy is overwritten blindly.
1409
+ # Corresponds to the JSON property `etag`
1410
+ # NOTE: Values are automatically base64 encoded/decoded in the client library.
1411
+ # @return [String]
1412
+ attr_accessor :etag
1413
+
1414
+ #
1415
+ # Corresponds to the JSON property `iamOwned`
1416
+ # @return [Boolean]
1417
+ attr_accessor :iam_owned
1418
+ alias_method :iam_owned?, :iam_owned
1419
+
1420
+ # If more than one rule is specified, the rules are applied in the following
1421
+ # manner:
1422
+ # - All matching LOG rules are always applied.
1423
+ # - If any DENY/DENY_WITH_LOG rule matches, permission is denied.
1424
+ # Logging will be applied if one or more matching rule requires logging.
1425
+ # - Otherwise, if any ALLOW/ALLOW_WITH_LOG rule matches, permission is
1426
+ # granted.
1427
+ # Logging will be applied if one or more matching rule requires logging.
1428
+ # - Otherwise, if no rule applies, permission is denied.
1429
+ # Corresponds to the JSON property `rules`
1430
+ # @return [Array<Google::Apis::SpannerV1::Rule>]
1431
+ attr_accessor :rules
1432
+
1433
+ def initialize(**args)
1434
+ update!(**args)
1435
+ end
1436
+
1437
+ # Update properties of this object
1438
+ def update!(**args)
1439
+ @version = args[:version] if args.key?(:version)
1440
+ @audit_configs = args[:audit_configs] if args.key?(:audit_configs)
1441
+ @bindings = args[:bindings] if args.key?(:bindings)
1442
+ @etag = args[:etag] if args.key?(:etag)
1443
+ @iam_owned = args[:iam_owned] if args.key?(:iam_owned)
1444
+ @rules = args[:rules] if args.key?(:rules)
1445
+ end
1446
+ end
1447
+
1448
+ # The request for Read and
1449
+ # StreamingRead.
1450
+ class ReadRequest
1451
+ include Google::Apis::Core::Hashable
1452
+
1453
+ # This message is used to select the transaction in which a
1454
+ # Read or
1455
+ # ExecuteSql call runs.
1456
+ # See TransactionOptions for more information about transactions.
1457
+ # Corresponds to the JSON property `transaction`
1458
+ # @return [Google::Apis::SpannerV1::TransactionSelector]
1459
+ attr_accessor :transaction
1460
+
1461
+ # If this request is resuming a previously interrupted read,
1462
+ # `resume_token` should be copied from the last
1463
+ # PartialResultSet yielded before the interruption. Doing this
1464
+ # enables the new read to resume where the last read left off. The
1465
+ # rest of the request parameters must exactly match the request
1466
+ # that yielded this token.
1467
+ # Corresponds to the JSON property `resumeToken`
1468
+ # NOTE: Values are automatically base64 encoded/decoded in the client library.
1469
+ # @return [String]
1470
+ attr_accessor :resume_token
1471
+
1472
+ # Required. The name of the table in the database to be read.
1473
+ # Corresponds to the JSON property `table`
1474
+ # @return [String]
1475
+ attr_accessor :table
1476
+
1477
+ # If greater than zero, only the first `limit` rows are yielded. If `limit`
1478
+ # is zero, the default is no limit.
1479
+ # Corresponds to the JSON property `limit`
1480
+ # @return [String]
1481
+ attr_accessor :limit
1482
+
1483
+ # If non-empty, the name of an index on table. This index is
1484
+ # used instead of the table primary key when interpreting key_set
1485
+ # and sorting result rows. See key_set for further information.
1486
+ # Corresponds to the JSON property `index`
1487
+ # @return [String]
1488
+ attr_accessor :index
1489
+
1490
+ # `KeySet` defines a collection of Cloud Spanner keys and/or key ranges. All
1491
+ # the keys are expected to be in the same table or index. The keys need
1492
+ # not be sorted in any particular way.
1493
+ # If the same key is specified multiple times in the set (for example
1494
+ # if two ranges, two keys, or a key and a range overlap), Cloud Spanner
1495
+ # behaves as if the key were only specified once.
1496
+ # Corresponds to the JSON property `keySet`
1497
+ # @return [Google::Apis::SpannerV1::KeySet]
1498
+ attr_accessor :key_set
1499
+
1500
+ # The columns of table to be returned for each row matching
1501
+ # this request.
1502
+ # Corresponds to the JSON property `columns`
1503
+ # @return [Array<String>]
1504
+ attr_accessor :columns
1505
+
1506
+ def initialize(**args)
1507
+ update!(**args)
1508
+ end
1509
+
1510
+ # Update properties of this object
1511
+ def update!(**args)
1512
+ @transaction = args[:transaction] if args.key?(:transaction)
1513
+ @resume_token = args[:resume_token] if args.key?(:resume_token)
1514
+ @table = args[:table] if args.key?(:table)
1515
+ @limit = args[:limit] if args.key?(:limit)
1516
+ @index = args[:index] if args.key?(:index)
1517
+ @key_set = args[:key_set] if args.key?(:key_set)
1518
+ @columns = args[:columns] if args.key?(:columns)
1519
+ end
1520
+ end
1521
+
1522
+ # Arguments to insert, update, insert_or_update, and
1523
+ # replace operations.
1524
+ class Write
1525
+ include Google::Apis::Core::Hashable
1526
+
1527
+ # Required. The table whose rows will be written.
1528
+ # Corresponds to the JSON property `table`
1529
+ # @return [String]
1530
+ attr_accessor :table
1531
+
1532
+ # The names of the columns in table to be written.
1533
+ # The list of columns must contain enough columns to allow
1534
+ # Cloud Spanner to derive values for all primary key columns in the
1535
+ # row(s) to be modified.
1536
+ # Corresponds to the JSON property `columns`
1537
+ # @return [Array<String>]
1538
+ attr_accessor :columns
1539
+
1540
+ # The values to be written. `values` can contain more than one
1541
+ # list of values. If it does, then multiple rows are written, one
1542
+ # for each entry in `values`. Each list in `values` must have
1543
+ # exactly as many entries as there are entries in columns
1544
+ # above. Sending multiple lists is equivalent to sending multiple
1545
+ # `Mutation`s, each containing one `values` entry and repeating
1546
+ # table and columns. Individual values in each list are
1547
+ # encoded as described here.
1548
+ # Corresponds to the JSON property `values`
1549
+ # @return [Array<Array<Object>>]
1550
+ attr_accessor :values
1551
+
1552
+ def initialize(**args)
1553
+ update!(**args)
1554
+ end
1555
+
1556
+ # Update properties of this object
1557
+ def update!(**args)
1558
+ @table = args[:table] if args.key?(:table)
1559
+ @columns = args[:columns] if args.key?(:columns)
1560
+ @values = args[:values] if args.key?(:values)
1561
+ end
1562
+ end
1563
+
1564
+ # Options for read-write transactions.
1565
+ class ReadWrite
1566
+ include Google::Apis::Core::Hashable
1567
+
1568
+ def initialize(**args)
1569
+ update!(**args)
1570
+ end
1571
+
1572
+ # Update properties of this object
1573
+ def update!(**args)
1574
+ end
1575
+ end
1576
+
1577
+ # Write a Data Access (Gin) log
1578
+ class DataAccessOptions
1579
+ include Google::Apis::Core::Hashable
1580
+
1581
+ def initialize(**args)
1582
+ update!(**args)
1583
+ end
1584
+
1585
+ # Update properties of this object
1586
+ def update!(**args)
1587
+ end
1588
+ end
1589
+
1590
+ # This resource represents a long-running operation that is the result of a
1591
+ # network API call.
1592
+ class Operation
1593
+ include Google::Apis::Core::Hashable
1594
+
1595
+ # The normal response of the operation in case of success. If the original
1596
+ # method returns no data on success, such as `Delete`, the response is
1597
+ # `google.protobuf.Empty`. If the original method is standard
1598
+ # `Get`/`Create`/`Update`, the response should be the resource. For other
1599
+ # methods, the response should have the type `XxxResponse`, where `Xxx`
1600
+ # is the original method name. For example, if the original method name
1601
+ # is `TakeSnapshot()`, the inferred response type is
1602
+ # `TakeSnapshotResponse`.
1603
+ # Corresponds to the JSON property `response`
1604
+ # @return [Hash<String,Object>]
1605
+ attr_accessor :response
1606
+
1607
+ # The server-assigned name, which is only unique within the same service that
1608
+ # originally returns it. If you use the default HTTP mapping, the
1609
+ # `name` should have the format of `operations/some/unique/name`.
1610
+ # Corresponds to the JSON property `name`
1611
+ # @return [String]
1612
+ attr_accessor :name
1613
+
1614
+ # The `Status` type defines a logical error model that is suitable for different
1615
+ # programming environments, including REST APIs and RPC APIs. It is used by
1616
+ # [gRPC](https://github.com/grpc). The error model is designed to be:
1617
+ # - Simple to use and understand for most users
1618
+ # - Flexible enough to meet unexpected needs
1619
+ # # Overview
1620
+ # The `Status` message contains three pieces of data: error code, error message,
1621
+ # and error details. The error code should be an enum value of
1622
+ # google.rpc.Code, but it may accept additional error codes if needed. The
1623
+ # error message should be a developer-facing English message that helps
1624
+ # developers *understand* and *resolve* the error. If a localized user-facing
1625
+ # error message is needed, put the localized message in the error details or
1626
+ # localize it in the client. The optional error details may contain arbitrary
1627
+ # information about the error. There is a predefined set of error detail types
1628
+ # in the package `google.rpc` which can be used for common error conditions.
1629
+ # # Language mapping
1630
+ # The `Status` message is the logical representation of the error model, but it
1631
+ # is not necessarily the actual wire format. When the `Status` message is
1632
+ # exposed in different client libraries and different wire protocols, it can be
1633
+ # mapped differently. For example, it will likely be mapped to some exceptions
1634
+ # in Java, but more likely mapped to some error codes in C.
1635
+ # # Other uses
1636
+ # The error model and the `Status` message can be used in a variety of
1637
+ # environments, either with or without APIs, to provide a
1638
+ # consistent developer experience across different environments.
1639
+ # Example uses of this error model include:
1640
+ # - Partial errors. If a service needs to return partial errors to the client,
1641
+ # it may embed the `Status` in the normal response to indicate the partial
1642
+ # errors.
1643
+ # - Workflow errors. A typical workflow has multiple steps. Each step may
1644
+ # have a `Status` message for error reporting purpose.
1645
+ # - Batch operations. If a client uses batch request and batch response, the
1646
+ # `Status` message should be used directly inside batch response, one for
1647
+ # each error sub-response.
1648
+ # - Asynchronous operations. If an API call embeds asynchronous operation
1649
+ # results in its response, the status of those operations should be
1650
+ # represented directly using the `Status` message.
1651
+ # - Logging. If some API errors are stored in logs, the message `Status` could
1652
+ # be used directly after any stripping needed for security/privacy reasons.
1653
+ # Corresponds to the JSON property `error`
1654
+ # @return [Google::Apis::SpannerV1::Status]
1655
+ attr_accessor :error
1656
+
1657
+ # Service-specific metadata associated with the operation. It typically
1658
+ # contains progress information and common metadata such as create time.
1659
+ # Some services might not provide such metadata. Any method that returns a
1660
+ # long-running operation should document the metadata type, if any.
1661
+ # Corresponds to the JSON property `metadata`
1662
+ # @return [Hash<String,Object>]
1663
+ attr_accessor :metadata
1664
+
1665
+ # If the value is `false`, it means the operation is still in progress.
1666
+ # If true, the operation is completed, and either `error` or `response` is
1667
+ # available.
1668
+ # Corresponds to the JSON property `done`
1669
+ # @return [Boolean]
1670
+ attr_accessor :done
1671
+ alias_method :done?, :done
1672
+
1673
+ def initialize(**args)
1674
+ update!(**args)
1675
+ end
1676
+
1677
+ # Update properties of this object
1678
+ def update!(**args)
1679
+ @response = args[:response] if args.key?(:response)
1680
+ @name = args[:name] if args.key?(:name)
1681
+ @error = args[:error] if args.key?(:error)
1682
+ @metadata = args[:metadata] if args.key?(:metadata)
1683
+ @done = args[:done] if args.key?(:done)
1684
+ end
1685
+ end
1686
+
1687
+ # Results from Read or
1688
+ # ExecuteSql.
1689
+ class ResultSet
1690
+ include Google::Apis::Core::Hashable
1691
+
1692
+ # Each element in `rows` is a row whose format is defined by
1693
+ # metadata.row_type. The ith element
1694
+ # in each row matches the ith field in
1695
+ # metadata.row_type. Elements are
1696
+ # encoded based on type as described
1697
+ # here.
1698
+ # Corresponds to the JSON property `rows`
1699
+ # @return [Array<Array<Object>>]
1700
+ attr_accessor :rows
1701
+
1702
+ # Metadata about a ResultSet or PartialResultSet.
1703
+ # Corresponds to the JSON property `metadata`
1704
+ # @return [Google::Apis::SpannerV1::ResultSetMetadata]
1705
+ attr_accessor :metadata
1706
+
1707
+ # Additional statistics about a ResultSet or PartialResultSet.
1708
+ # Corresponds to the JSON property `stats`
1709
+ # @return [Google::Apis::SpannerV1::ResultSetStats]
1710
+ attr_accessor :stats
1711
+
1712
+ def initialize(**args)
1713
+ update!(**args)
1714
+ end
1715
+
1716
+ # Update properties of this object
1717
+ def update!(**args)
1718
+ @rows = args[:rows] if args.key?(:rows)
1719
+ @metadata = args[:metadata] if args.key?(:metadata)
1720
+ @stats = args[:stats] if args.key?(:stats)
1721
+ end
1722
+ end
1723
+
1724
+ # The `Status` type defines a logical error model that is suitable for different
1725
+ # programming environments, including REST APIs and RPC APIs. It is used by
1726
+ # [gRPC](https://github.com/grpc). The error model is designed to be:
1727
+ # - Simple to use and understand for most users
1728
+ # - Flexible enough to meet unexpected needs
1729
+ # # Overview
1730
+ # The `Status` message contains three pieces of data: error code, error message,
1731
+ # and error details. The error code should be an enum value of
1732
+ # google.rpc.Code, but it may accept additional error codes if needed. The
1733
+ # error message should be a developer-facing English message that helps
1734
+ # developers *understand* and *resolve* the error. If a localized user-facing
1735
+ # error message is needed, put the localized message in the error details or
1736
+ # localize it in the client. The optional error details may contain arbitrary
1737
+ # information about the error. There is a predefined set of error detail types
1738
+ # in the package `google.rpc` which can be used for common error conditions.
1739
+ # # Language mapping
1740
+ # The `Status` message is the logical representation of the error model, but it
1741
+ # is not necessarily the actual wire format. When the `Status` message is
1742
+ # exposed in different client libraries and different wire protocols, it can be
1743
+ # mapped differently. For example, it will likely be mapped to some exceptions
1744
+ # in Java, but more likely mapped to some error codes in C.
1745
+ # # Other uses
1746
+ # The error model and the `Status` message can be used in a variety of
1747
+ # environments, either with or without APIs, to provide a
1748
+ # consistent developer experience across different environments.
1749
+ # Example uses of this error model include:
1750
+ # - Partial errors. If a service needs to return partial errors to the client,
1751
+ # it may embed the `Status` in the normal response to indicate the partial
1752
+ # errors.
1753
+ # - Workflow errors. A typical workflow has multiple steps. Each step may
1754
+ # have a `Status` message for error reporting purpose.
1755
+ # - Batch operations. If a client uses batch request and batch response, the
1756
+ # `Status` message should be used directly inside batch response, one for
1757
+ # each error sub-response.
1758
+ # - Asynchronous operations. If an API call embeds asynchronous operation
1759
+ # results in its response, the status of those operations should be
1760
+ # represented directly using the `Status` message.
1761
+ # - Logging. If some API errors are stored in logs, the message `Status` could
1762
+ # be used directly after any stripping needed for security/privacy reasons.
1763
+ class Status
1764
+ include Google::Apis::Core::Hashable
1765
+
1766
+ # A list of messages that carry the error details. There will be a
1767
+ # common set of message types for APIs to use.
1768
+ # Corresponds to the JSON property `details`
1769
+ # @return [Array<Hash<String,Object>>]
1770
+ attr_accessor :details
1771
+
1772
+ # The status code, which should be an enum value of google.rpc.Code.
1773
+ # Corresponds to the JSON property `code`
1774
+ # @return [Fixnum]
1775
+ attr_accessor :code
1776
+
1777
+ # A developer-facing error message, which should be in English. Any
1778
+ # user-facing error message should be localized and sent in the
1779
+ # google.rpc.Status.details field, or localized by the client.
1780
+ # Corresponds to the JSON property `message`
1781
+ # @return [String]
1782
+ attr_accessor :message
1783
+
1784
+ def initialize(**args)
1785
+ update!(**args)
1786
+ end
1787
+
1788
+ # Update properties of this object
1789
+ def update!(**args)
1790
+ @details = args[:details] if args.key?(:details)
1791
+ @code = args[:code] if args.key?(:code)
1792
+ @message = args[:message] if args.key?(:message)
1793
+ end
1794
+ end
1795
+
1796
+ # Associates `members` with a `role`.
1797
+ class Binding
1798
+ include Google::Apis::Core::Hashable
1799
+
1800
+ # Specifies the identities requesting access for a Cloud Platform resource.
1801
+ # `members` can have the following values:
1802
+ # * `allUsers`: A special identifier that represents anyone who is
1803
+ # on the internet; with or without a Google account.
1804
+ # * `allAuthenticatedUsers`: A special identifier that represents anyone
1805
+ # who is authenticated with a Google account or a service account.
1806
+ # * `user:`emailid``: An email address that represents a specific Google
1807
+ # account. For example, `alice@gmail.com` or `joe@example.com`.
1808
+ # * `serviceAccount:`emailid``: An email address that represents a service
1809
+ # account. For example, `my-other-app@appspot.gserviceaccount.com`.
1810
+ # * `group:`emailid``: An email address that represents a Google group.
1811
+ # For example, `admins@example.com`.
1812
+ # * `domain:`domain``: A Google Apps domain name that represents all the
1813
+ # users of that domain. For example, `google.com` or `example.com`.
1814
+ # Corresponds to the JSON property `members`
1815
+ # @return [Array<String>]
1816
+ attr_accessor :members
1817
+
1818
+ # Role that is assigned to `members`.
1819
+ # For example, `roles/viewer`, `roles/editor`, or `roles/owner`.
1820
+ # Required
1821
+ # Corresponds to the JSON property `role`
1822
+ # @return [String]
1823
+ attr_accessor :role
1824
+
1825
+ def initialize(**args)
1826
+ update!(**args)
1827
+ end
1828
+
1829
+ # Update properties of this object
1830
+ def update!(**args)
1831
+ @members = args[:members] if args.key?(:members)
1832
+ @role = args[:role] if args.key?(:role)
1833
+ end
1834
+ end
1835
+
1836
+ # Enqueues the given DDL statements to be applied, in order but not
1837
+ # necessarily all at once, to the database schema at some point (or
1838
+ # points) in the future. The server checks that the statements
1839
+ # are executable (syntactically valid, name tables that exist, etc.)
1840
+ # before enqueueing them, but they may still fail upon
1841
+ # later execution (e.g., if a statement from another batch of
1842
+ # statements is applied first and it conflicts in some way, or if
1843
+ # there is some data-related problem like a `NULL` value in a column to
1844
+ # which `NOT NULL` would be added). If a statement fails, all
1845
+ # subsequent statements in the batch are automatically cancelled.
1846
+ # Each batch of statements is assigned a name which can be used with
1847
+ # the Operations API to monitor
1848
+ # progress. See the
1849
+ # operation_id field for more
1850
+ # details.
1851
+ class UpdateDatabaseDdlRequest
1852
+ include Google::Apis::Core::Hashable
1853
+
1854
+ # DDL statements to be applied to the database.
1855
+ # Corresponds to the JSON property `statements`
1856
+ # @return [Array<String>]
1857
+ attr_accessor :statements
1858
+
1859
+ # If empty, the new update request is assigned an
1860
+ # automatically-generated operation ID. Otherwise, `operation_id`
1861
+ # is used to construct the name of the resulting
1862
+ # Operation.
1863
+ # Specifying an explicit operation ID simplifies determining
1864
+ # whether the statements were executed in the event that the
1865
+ # UpdateDatabaseDdl call is replayed,
1866
+ # or the return value is otherwise lost: the database and
1867
+ # `operation_id` fields can be combined to form the
1868
+ # name of the resulting
1869
+ # longrunning.Operation: `<database>/operations/<operation_id>`.
1870
+ # `operation_id` should be unique within the database, and must be
1871
+ # a valid identifier: `a-z*`. Note that
1872
+ # automatically-generated operation IDs always begin with an
1873
+ # underscore. If the named operation already exists,
1874
+ # UpdateDatabaseDdl returns
1875
+ # `ALREADY_EXISTS`.
1876
+ # Corresponds to the JSON property `operationId`
1877
+ # @return [String]
1878
+ attr_accessor :operation_id
1879
+
1880
+ def initialize(**args)
1881
+ update!(**args)
1882
+ end
1883
+
1884
+ # Update properties of this object
1885
+ def update!(**args)
1886
+ @statements = args[:statements] if args.key?(:statements)
1887
+ @operation_id = args[:operation_id] if args.key?(:operation_id)
1888
+ end
1889
+ end
1890
+
1891
+ # Partial results from a streaming read or SQL query. Streaming reads and
1892
+ # SQL queries better tolerate large result sets, large rows, and large
1893
+ # values, but are a little trickier to consume.
1894
+ class PartialResultSet
1895
+ include Google::Apis::Core::Hashable
1896
+
1897
+ # Streaming calls might be interrupted for a variety of reasons, such
1898
+ # as TCP connection loss. If this occurs, the stream of results can
1899
+ # be resumed by re-sending the original request and including
1900
+ # `resume_token`. Note that executing any other transaction in the
1901
+ # same session invalidates the token.
1902
+ # Corresponds to the JSON property `resumeToken`
1903
+ # NOTE: Values are automatically base64 encoded/decoded in the client library.
1904
+ # @return [String]
1905
+ attr_accessor :resume_token
1906
+
1907
+ # Additional statistics about a ResultSet or PartialResultSet.
1908
+ # Corresponds to the JSON property `stats`
1909
+ # @return [Google::Apis::SpannerV1::ResultSetStats]
1910
+ attr_accessor :stats
1911
+
1912
+ # If true, then the final value in values is chunked, and must
1913
+ # be combined with more values from subsequent `PartialResultSet`s
1914
+ # to obtain a complete field value.
1915
+ # Corresponds to the JSON property `chunkedValue`
1916
+ # @return [Boolean]
1917
+ attr_accessor :chunked_value
1918
+ alias_method :chunked_value?, :chunked_value
1919
+
1920
+ # Metadata about a ResultSet or PartialResultSet.
1921
+ # Corresponds to the JSON property `metadata`
1922
+ # @return [Google::Apis::SpannerV1::ResultSetMetadata]
1923
+ attr_accessor :metadata
1924
+
1925
+ # A streamed result set consists of a stream of values, which might
1926
+ # be split into many `PartialResultSet` messages to accommodate
1927
+ # large rows and/or large values. Every N complete values defines a
1928
+ # row, where N is equal to the number of entries in
1929
+ # metadata.row_type.fields.
1930
+ # Most values are encoded based on type as described
1931
+ # here.
1932
+ # It is possible that the last value in values is "chunked",
1933
+ # meaning that the rest of the value is sent in subsequent
1934
+ # `PartialResultSet`(s). This is denoted by the chunked_value
1935
+ # field. Two or more chunked values can be merged to form a
1936
+ # complete value as follows:
1937
+ # * `bool/number/null`: cannot be chunked
1938
+ # * `string`: concatenate the strings
1939
+ # * `list`: concatenate the lists. If the last element in a list is a
1940
+ # `string`, `list`, or `object`, merge it with the first element in
1941
+ # the next list by applying these rules recursively.
1942
+ # * `object`: concatenate the (field name, field value) pairs. If a
1943
+ # field name is duplicated, then apply these rules recursively
1944
+ # to merge the field values.
1945
+ # Some examples of merging:
1946
+ # # Strings are concatenated.
1947
+ # "foo", "bar" => "foobar"
1948
+ # # Lists of non-strings are concatenated.
1949
+ # [2, 3], [4] => [2, 3, 4]
1950
+ # # Lists are concatenated, but the last and first elements are merged
1951
+ # # because they are strings.
1952
+ # ["a", "b"], ["c", "d"] => ["a", "bc", "d"]
1953
+ # # Lists are concatenated, but the last and first elements are merged
1954
+ # # because they are lists. Recursively, the last and first elements
1955
+ # # of the inner lists are merged because they are strings.
1956
+ # ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"]
1957
+ # # Non-overlapping object fields are combined.
1958
+ # `"a": "1"`, `"b": "2"` => `"a": "1", "b": 2"`
1959
+ # # Overlapping object fields are merged.
1960
+ # `"a": "1"`, `"a": "2"` => `"a": "12"`
1961
+ # # Examples of merging objects containing lists of strings.
1962
+ # `"a": ["1"]`, `"a": ["2"]` => `"a": ["12"]`
1963
+ # For a more complete example, suppose a streaming SQL query is
1964
+ # yielding a result set whose rows contain a single string
1965
+ # field. The following `PartialResultSet`s might be yielded:
1966
+ # `
1967
+ # "metadata": ` ... `
1968
+ # "values": ["Hello", "W"]
1969
+ # "chunked_value": true
1970
+ # "resume_token": "Af65..."
1971
+ # `
1972
+ # `
1973
+ # "values": ["orl"]
1974
+ # "chunked_value": true
1975
+ # "resume_token": "Bqp2..."
1976
+ # `
1977
+ # `
1978
+ # "values": ["d"]
1979
+ # "resume_token": "Zx1B..."
1980
+ # `
1981
+ # This sequence of `PartialResultSet`s encodes two rows, one
1982
+ # containing the field value `"Hello"`, and a second containing the
1983
+ # field value `"World" = "W" + "orl" + "d"`.
1984
+ # Corresponds to the JSON property `values`
1985
+ # @return [Array<Object>]
1986
+ attr_accessor :values
1987
+
1988
+ def initialize(**args)
1989
+ update!(**args)
1990
+ end
1991
+
1992
+ # Update properties of this object
1993
+ def update!(**args)
1994
+ @resume_token = args[:resume_token] if args.key?(:resume_token)
1995
+ @stats = args[:stats] if args.key?(:stats)
1996
+ @chunked_value = args[:chunked_value] if args.key?(:chunked_value)
1997
+ @metadata = args[:metadata] if args.key?(:metadata)
1998
+ @values = args[:values] if args.key?(:values)
1999
+ end
2000
+ end
2001
+
2002
+ # Metadata type for the operation returned by
2003
+ # UpdateInstance.
2004
+ class UpdateInstanceMetadata
2005
+ include Google::Apis::Core::Hashable
2006
+
2007
+ # An isolated set of Cloud Spanner resources on which databases can be hosted.
2008
+ # Corresponds to the JSON property `instance`
2009
+ # @return [Google::Apis::SpannerV1::Instance]
2010
+ attr_accessor :instance
2011
+
2012
+ # The time at which UpdateInstance
2013
+ # request was received.
2014
+ # Corresponds to the JSON property `startTime`
2015
+ # @return [String]
2016
+ attr_accessor :start_time
2017
+
2018
+ # The time at which this operation was cancelled. If set, this operation is
2019
+ # in the process of undoing itself (which is guaranteed to succeed) and
2020
+ # cannot be cancelled again.
2021
+ # Corresponds to the JSON property `cancelTime`
2022
+ # @return [String]
2023
+ attr_accessor :cancel_time
2024
+
2025
+ # The time at which this operation failed or was completed successfully.
2026
+ # Corresponds to the JSON property `endTime`
2027
+ # @return [String]
2028
+ attr_accessor :end_time
2029
+
2030
+ def initialize(**args)
2031
+ update!(**args)
2032
+ end
2033
+
2034
+ # Update properties of this object
2035
+ def update!(**args)
2036
+ @instance = args[:instance] if args.key?(:instance)
2037
+ @start_time = args[:start_time] if args.key?(:start_time)
2038
+ @cancel_time = args[:cancel_time] if args.key?(:cancel_time)
2039
+ @end_time = args[:end_time] if args.key?(:end_time)
2040
+ end
2041
+ end
2042
+
2043
+ # The response message for Operations.ListOperations.
2044
+ class ListOperationsResponse
2045
+ include Google::Apis::Core::Hashable
2046
+
2047
+ # The standard List next-page token.
2048
+ # Corresponds to the JSON property `nextPageToken`
2049
+ # @return [String]
2050
+ attr_accessor :next_page_token
2051
+
2052
+ # A list of operations that matches the specified filter in the request.
2053
+ # Corresponds to the JSON property `operations`
2054
+ # @return [Array<Google::Apis::SpannerV1::Operation>]
2055
+ attr_accessor :operations
2056
+
2057
+ def initialize(**args)
2058
+ update!(**args)
2059
+ end
2060
+
2061
+ # Update properties of this object
2062
+ def update!(**args)
2063
+ @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
2064
+ @operations = args[:operations] if args.key?(:operations)
2065
+ end
2066
+ end
2067
+
2068
+ # Metadata about a ResultSet or PartialResultSet.
2069
+ class ResultSetMetadata
2070
+ include Google::Apis::Core::Hashable
2071
+
2072
+ # A transaction.
2073
+ # Corresponds to the JSON property `transaction`
2074
+ # @return [Google::Apis::SpannerV1::Transaction]
2075
+ attr_accessor :transaction
2076
+
2077
+ # `StructType` defines the fields of a STRUCT type.
2078
+ # Corresponds to the JSON property `rowType`
2079
+ # @return [Google::Apis::SpannerV1::StructType]
2080
+ attr_accessor :row_type
2081
+
2082
+ def initialize(**args)
2083
+ update!(**args)
2084
+ end
2085
+
2086
+ # Update properties of this object
2087
+ def update!(**args)
2088
+ @transaction = args[:transaction] if args.key?(:transaction)
2089
+ @row_type = args[:row_type] if args.key?(:row_type)
2090
+ end
2091
+ end
2092
+
2093
+ # This message is used to select the transaction in which a
2094
+ # Read or
2095
+ # ExecuteSql call runs.
2096
+ # See TransactionOptions for more information about transactions.
2097
+ class TransactionSelector
2098
+ include Google::Apis::Core::Hashable
2099
+
2100
+ # Execute the read or SQL query in a previously-started transaction.
2101
+ # Corresponds to the JSON property `id`
2102
+ # NOTE: Values are automatically base64 encoded/decoded in the client library.
2103
+ # @return [String]
2104
+ attr_accessor :id
2105
+
2106
+ # # Transactions
2107
+ # Each session can have at most one active transaction at a time. After the
2108
+ # active transaction is completed, the session can immediately be
2109
+ # re-used for the next transaction. It is not necessary to create a
2110
+ # new session for each transaction.
2111
+ # # Transaction Modes
2112
+ # Cloud Spanner supports two transaction modes:
2113
+ # 1. Locking read-write. This type of transaction is the only way
2114
+ # to write data into Cloud Spanner. These transactions rely on
2115
+ # pessimistic locking and, if necessary, two-phase commit.
2116
+ # Locking read-write transactions may abort, requiring the
2117
+ # application to retry.
2118
+ # 2. Snapshot read-only. This transaction type provides guaranteed
2119
+ # consistency across several reads, but does not allow
2120
+ # writes. Snapshot read-only transactions can be configured to
2121
+ # read at timestamps in the past. Snapshot read-only
2122
+ # transactions do not need to be committed.
2123
+ # For transactions that only read, snapshot read-only transactions
2124
+ # provide simpler semantics and are almost always faster. In
2125
+ # particular, read-only transactions do not take locks, so they do
2126
+ # not conflict with read-write transactions. As a consequence of not
2127
+ # taking locks, they also do not abort, so retry loops are not needed.
2128
+ # Transactions may only read/write data in a single database. They
2129
+ # may, however, read/write data in different tables within that
2130
+ # database.
2131
+ # ## Locking Read-Write Transactions
2132
+ # Locking transactions may be used to atomically read-modify-write
2133
+ # data anywhere in a database. This type of transaction is externally
2134
+ # consistent.
2135
+ # Clients should attempt to minimize the amount of time a transaction
2136
+ # is active. Faster transactions commit with higher probability
2137
+ # and cause less contention. Cloud Spanner attempts to keep read locks
2138
+ # active as long as the transaction continues to do reads, and the
2139
+ # transaction has not been terminated by
2140
+ # Commit or
2141
+ # Rollback. Long periods of
2142
+ # inactivity at the client may cause Cloud Spanner to release a
2143
+ # transaction's locks and abort it.
2144
+ # Reads performed within a transaction acquire locks on the data
2145
+ # being read. Writes can only be done at commit time, after all reads
2146
+ # have been completed.
2147
+ # Conceptually, a read-write transaction consists of zero or more
2148
+ # reads or SQL queries followed by
2149
+ # Commit. At any time before
2150
+ # Commit, the client can send a
2151
+ # Rollback request to abort the
2152
+ # transaction.
2153
+ # ### Semantics
2154
+ # Cloud Spanner can commit the transaction if all read locks it acquired
2155
+ # are still valid at commit time, and it is able to acquire write
2156
+ # locks for all writes. Cloud Spanner can abort the transaction for any
2157
+ # reason. If a commit attempt returns `ABORTED`, Cloud Spanner guarantees
2158
+ # that the transaction has not modified any user data in Cloud Spanner.
2159
+ # Unless the transaction commits, Cloud Spanner makes no guarantees about
2160
+ # how long the transaction's locks were held for. It is an error to
2161
+ # use Cloud Spanner locks for any sort of mutual exclusion other than
2162
+ # between Cloud Spanner transactions themselves.
2163
+ # ### Retrying Aborted Transactions
2164
+ # When a transaction aborts, the application can choose to retry the
2165
+ # whole transaction again. To maximize the chances of successfully
2166
+ # committing the retry, the client should execute the retry in the
2167
+ # same session as the original attempt. The original session's lock
2168
+ # priority increases with each consecutive abort, meaning that each
2169
+ # attempt has a slightly better chance of success than the previous.
2170
+ # Under some circumstances (e.g., many transactions attempting to
2171
+ # modify the same row(s)), a transaction can abort many times in a
2172
+ # short period before successfully committing. Thus, it is not a good
2173
+ # idea to cap the number of retries a transaction can attempt;
2174
+ # instead, it is better to limit the total amount of wall time spent
2175
+ # retrying.
2176
+ # ### Idle Transactions
2177
+ # A transaction is considered idle if it has no outstanding reads or
2178
+ # SQL queries and has not started a read or SQL query within the last 10
2179
+ # seconds. Idle transactions can be aborted by Cloud Spanner so that they
2180
+ # don't hold on to locks indefinitely. In that case, the commit will
2181
+ # fail with error `ABORTED`.
2182
+ # If this behavior is undesirable, periodically executing a simple
2183
+ # SQL query in the transaction (e.g., `SELECT 1`) prevents the
2184
+ # transaction from becoming idle.
2185
+ # ## Snapshot Read-Only Transactions
2186
+ # Snapshot read-only transactions provides a simpler method than
2187
+ # locking read-write transactions for doing several consistent
2188
+ # reads. However, this type of transaction does not support writes.
2189
+ # Snapshot transactions do not take locks. Instead, they work by
2190
+ # choosing a Cloud Spanner timestamp, then executing all reads at that
2191
+ # timestamp. Since they do not acquire locks, they do not block
2192
+ # concurrent read-write transactions.
2193
+ # Unlike locking read-write transactions, snapshot read-only
2194
+ # transactions never abort. They can fail if the chosen read
2195
+ # timestamp is garbage collected; however, the default garbage
2196
+ # collection policy is generous enough that most applications do not
2197
+ # need to worry about this in practice.
2198
+ # Snapshot read-only transactions do not need to call
2199
+ # Commit or
2200
+ # Rollback (and in fact are not
2201
+ # permitted to do so).
2202
+ # To execute a snapshot transaction, the client specifies a timestamp
2203
+ # bound, which tells Cloud Spanner how to choose a read timestamp.
2204
+ # The types of timestamp bound are:
2205
+ # - Strong (the default).
2206
+ # - Bounded staleness.
2207
+ # - Exact staleness.
2208
+ # If the Cloud Spanner database to be read is geographically distributed,
2209
+ # stale read-only transactions can execute more quickly than strong
2210
+ # or read-write transaction, because they are able to execute far
2211
+ # from the leader replica.
2212
+ # Each type of timestamp bound is discussed in detail below.
2213
+ # ### Strong
2214
+ # Strong reads are guaranteed to see the effects of all transactions
2215
+ # that have committed before the start of the read. Furthermore, all
2216
+ # rows yielded by a single read are consistent with each other -- if
2217
+ # any part of the read observes a transaction, all parts of the read
2218
+ # see the transaction.
2219
+ # Strong reads are not repeatable: two consecutive strong read-only
2220
+ # transactions might return inconsistent results if there are
2221
+ # concurrent writes. If consistency across reads is required, the
2222
+ # reads should be executed within a transaction or at an exact read
2223
+ # timestamp.
2224
+ # See TransactionOptions.ReadOnly.strong.
2225
+ # ### Exact Staleness
2226
+ # These timestamp bounds execute reads at a user-specified
2227
+ # timestamp. Reads at a timestamp are guaranteed to see a consistent
2228
+ # prefix of the global transaction history: they observe
2229
+ # modifications done by all transactions with a commit timestamp <=
2230
+ # the read timestamp, and observe none of the modifications done by
2231
+ # transactions with a larger commit timestamp. They will block until
2232
+ # all conflicting transactions that may be assigned commit timestamps
2233
+ # <= the read timestamp have finished.
2234
+ # The timestamp can either be expressed as an absolute Cloud Spanner commit
2235
+ # timestamp or a staleness relative to the current time.
2236
+ # These modes do not require a "negotiation phase" to pick a
2237
+ # timestamp. As a result, they execute slightly faster than the
2238
+ # equivalent boundedly stale concurrency modes. On the other hand,
2239
+ # boundedly stale reads usually return fresher results.
2240
+ # See TransactionOptions.ReadOnly.read_timestamp and
2241
+ # TransactionOptions.ReadOnly.exact_staleness.
2242
+ # ### Bounded Staleness
2243
+ # Bounded staleness modes allow Cloud Spanner to pick the read timestamp,
2244
+ # subject to a user-provided staleness bound. Cloud Spanner chooses the
2245
+ # newest timestamp within the staleness bound that allows execution
2246
+ # of the reads at the closest available replica without blocking.
2247
+ # All rows yielded are consistent with each other -- if any part of
2248
+ # the read observes a transaction, all parts of the read see the
2249
+ # transaction. Boundedly stale reads are not repeatable: two stale
2250
+ # reads, even if they use the same staleness bound, can execute at
2251
+ # different timestamps and thus return inconsistent results.
2252
+ # Boundedly stale reads execute in two phases: the first phase
2253
+ # negotiates a timestamp among all replicas needed to serve the
2254
+ # read. In the second phase, reads are executed at the negotiated
2255
+ # timestamp.
2256
+ # As a result of the two phase execution, bounded staleness reads are
2257
+ # usually a little slower than comparable exact staleness
2258
+ # reads. However, they are typically able to return fresher
2259
+ # results, and are more likely to execute at the closest replica.
2260
+ # Because the timestamp negotiation requires up-front knowledge of
2261
+ # which rows will be read, it can only be used with single-use
2262
+ # read-only transactions.
2263
+ # See TransactionOptions.ReadOnly.max_staleness and
2264
+ # TransactionOptions.ReadOnly.min_read_timestamp.
2265
+ # ### Old Read Timestamps and Garbage Collection
2266
+ # Cloud Spanner continuously garbage collects deleted and overwritten data
2267
+ # in the background to reclaim storage space. This process is known
2268
+ # as "version GC". By default, version GC reclaims versions after they
2269
+ # are one hour old. Because of this, Cloud Spanner cannot perform reads
2270
+ # at read timestamps more than one hour in the past. This
2271
+ # restriction also applies to in-progress reads and/or SQL queries whose
2272
+ # timestamp become too old while executing. Reads and SQL queries with
2273
+ # too-old read timestamps fail with the error `FAILED_PRECONDITION`.
2274
+ # Corresponds to the JSON property `singleUse`
2275
+ # @return [Google::Apis::SpannerV1::TransactionOptions]
2276
+ attr_accessor :single_use
2277
+
2278
+ # # Transactions
2279
+ # Each session can have at most one active transaction at a time. After the
2280
+ # active transaction is completed, the session can immediately be
2281
+ # re-used for the next transaction. It is not necessary to create a
2282
+ # new session for each transaction.
2283
+ # # Transaction Modes
2284
+ # Cloud Spanner supports two transaction modes:
2285
+ # 1. Locking read-write. This type of transaction is the only way
2286
+ # to write data into Cloud Spanner. These transactions rely on
2287
+ # pessimistic locking and, if necessary, two-phase commit.
2288
+ # Locking read-write transactions may abort, requiring the
2289
+ # application to retry.
2290
+ # 2. Snapshot read-only. This transaction type provides guaranteed
2291
+ # consistency across several reads, but does not allow
2292
+ # writes. Snapshot read-only transactions can be configured to
2293
+ # read at timestamps in the past. Snapshot read-only
2294
+ # transactions do not need to be committed.
2295
+ # For transactions that only read, snapshot read-only transactions
2296
+ # provide simpler semantics and are almost always faster. In
2297
+ # particular, read-only transactions do not take locks, so they do
2298
+ # not conflict with read-write transactions. As a consequence of not
2299
+ # taking locks, they also do not abort, so retry loops are not needed.
2300
+ # Transactions may only read/write data in a single database. They
2301
+ # may, however, read/write data in different tables within that
2302
+ # database.
2303
+ # ## Locking Read-Write Transactions
2304
+ # Locking transactions may be used to atomically read-modify-write
2305
+ # data anywhere in a database. This type of transaction is externally
2306
+ # consistent.
2307
+ # Clients should attempt to minimize the amount of time a transaction
2308
+ # is active. Faster transactions commit with higher probability
2309
+ # and cause less contention. Cloud Spanner attempts to keep read locks
2310
+ # active as long as the transaction continues to do reads, and the
2311
+ # transaction has not been terminated by
2312
+ # Commit or
2313
+ # Rollback. Long periods of
2314
+ # inactivity at the client may cause Cloud Spanner to release a
2315
+ # transaction's locks and abort it.
2316
+ # Reads performed within a transaction acquire locks on the data
2317
+ # being read. Writes can only be done at commit time, after all reads
2318
+ # have been completed.
2319
+ # Conceptually, a read-write transaction consists of zero or more
2320
+ # reads or SQL queries followed by
2321
+ # Commit. At any time before
2322
+ # Commit, the client can send a
2323
+ # Rollback request to abort the
2324
+ # transaction.
2325
+ # ### Semantics
2326
+ # Cloud Spanner can commit the transaction if all read locks it acquired
2327
+ # are still valid at commit time, and it is able to acquire write
2328
+ # locks for all writes. Cloud Spanner can abort the transaction for any
2329
+ # reason. If a commit attempt returns `ABORTED`, Cloud Spanner guarantees
2330
+ # that the transaction has not modified any user data in Cloud Spanner.
2331
+ # Unless the transaction commits, Cloud Spanner makes no guarantees about
2332
+ # how long the transaction's locks were held for. It is an error to
2333
+ # use Cloud Spanner locks for any sort of mutual exclusion other than
2334
+ # between Cloud Spanner transactions themselves.
2335
+ # ### Retrying Aborted Transactions
2336
+ # When a transaction aborts, the application can choose to retry the
2337
+ # whole transaction again. To maximize the chances of successfully
2338
+ # committing the retry, the client should execute the retry in the
2339
+ # same session as the original attempt. The original session's lock
2340
+ # priority increases with each consecutive abort, meaning that each
2341
+ # attempt has a slightly better chance of success than the previous.
2342
+ # Under some circumstances (e.g., many transactions attempting to
2343
+ # modify the same row(s)), a transaction can abort many times in a
2344
+ # short period before successfully committing. Thus, it is not a good
2345
+ # idea to cap the number of retries a transaction can attempt;
2346
+ # instead, it is better to limit the total amount of wall time spent
2347
+ # retrying.
2348
+ # ### Idle Transactions
2349
+ # A transaction is considered idle if it has no outstanding reads or
2350
+ # SQL queries and has not started a read or SQL query within the last 10
2351
+ # seconds. Idle transactions can be aborted by Cloud Spanner so that they
2352
+ # don't hold on to locks indefinitely. In that case, the commit will
2353
+ # fail with error `ABORTED`.
2354
+ # If this behavior is undesirable, periodically executing a simple
2355
+ # SQL query in the transaction (e.g., `SELECT 1`) prevents the
2356
+ # transaction from becoming idle.
2357
+ # ## Snapshot Read-Only Transactions
2358
+ # Snapshot read-only transactions provides a simpler method than
2359
+ # locking read-write transactions for doing several consistent
2360
+ # reads. However, this type of transaction does not support writes.
2361
+ # Snapshot transactions do not take locks. Instead, they work by
2362
+ # choosing a Cloud Spanner timestamp, then executing all reads at that
2363
+ # timestamp. Since they do not acquire locks, they do not block
2364
+ # concurrent read-write transactions.
2365
+ # Unlike locking read-write transactions, snapshot read-only
2366
+ # transactions never abort. They can fail if the chosen read
2367
+ # timestamp is garbage collected; however, the default garbage
2368
+ # collection policy is generous enough that most applications do not
2369
+ # need to worry about this in practice.
2370
+ # Snapshot read-only transactions do not need to call
2371
+ # Commit or
2372
+ # Rollback (and in fact are not
2373
+ # permitted to do so).
2374
+ # To execute a snapshot transaction, the client specifies a timestamp
2375
+ # bound, which tells Cloud Spanner how to choose a read timestamp.
2376
+ # The types of timestamp bound are:
2377
+ # - Strong (the default).
2378
+ # - Bounded staleness.
2379
+ # - Exact staleness.
2380
+ # If the Cloud Spanner database to be read is geographically distributed,
2381
+ # stale read-only transactions can execute more quickly than strong
2382
+ # or read-write transaction, because they are able to execute far
2383
+ # from the leader replica.
2384
+ # Each type of timestamp bound is discussed in detail below.
2385
+ # ### Strong
2386
+ # Strong reads are guaranteed to see the effects of all transactions
2387
+ # that have committed before the start of the read. Furthermore, all
2388
+ # rows yielded by a single read are consistent with each other -- if
2389
+ # any part of the read observes a transaction, all parts of the read
2390
+ # see the transaction.
2391
+ # Strong reads are not repeatable: two consecutive strong read-only
2392
+ # transactions might return inconsistent results if there are
2393
+ # concurrent writes. If consistency across reads is required, the
2394
+ # reads should be executed within a transaction or at an exact read
2395
+ # timestamp.
2396
+ # See TransactionOptions.ReadOnly.strong.
2397
+ # ### Exact Staleness
2398
+ # These timestamp bounds execute reads at a user-specified
2399
+ # timestamp. Reads at a timestamp are guaranteed to see a consistent
2400
+ # prefix of the global transaction history: they observe
2401
+ # modifications done by all transactions with a commit timestamp <=
2402
+ # the read timestamp, and observe none of the modifications done by
2403
+ # transactions with a larger commit timestamp. They will block until
2404
+ # all conflicting transactions that may be assigned commit timestamps
2405
+ # <= the read timestamp have finished.
2406
+ # The timestamp can either be expressed as an absolute Cloud Spanner commit
2407
+ # timestamp or a staleness relative to the current time.
2408
+ # These modes do not require a "negotiation phase" to pick a
2409
+ # timestamp. As a result, they execute slightly faster than the
2410
+ # equivalent boundedly stale concurrency modes. On the other hand,
2411
+ # boundedly stale reads usually return fresher results.
2412
+ # See TransactionOptions.ReadOnly.read_timestamp and
2413
+ # TransactionOptions.ReadOnly.exact_staleness.
2414
+ # ### Bounded Staleness
2415
+ # Bounded staleness modes allow Cloud Spanner to pick the read timestamp,
2416
+ # subject to a user-provided staleness bound. Cloud Spanner chooses the
2417
+ # newest timestamp within the staleness bound that allows execution
2418
+ # of the reads at the closest available replica without blocking.
2419
+ # All rows yielded are consistent with each other -- if any part of
2420
+ # the read observes a transaction, all parts of the read see the
2421
+ # transaction. Boundedly stale reads are not repeatable: two stale
2422
+ # reads, even if they use the same staleness bound, can execute at
2423
+ # different timestamps and thus return inconsistent results.
2424
+ # Boundedly stale reads execute in two phases: the first phase
2425
+ # negotiates a timestamp among all replicas needed to serve the
2426
+ # read. In the second phase, reads are executed at the negotiated
2427
+ # timestamp.
2428
+ # As a result of the two phase execution, bounded staleness reads are
2429
+ # usually a little slower than comparable exact staleness
2430
+ # reads. However, they are typically able to return fresher
2431
+ # results, and are more likely to execute at the closest replica.
2432
+ # Because the timestamp negotiation requires up-front knowledge of
2433
+ # which rows will be read, it can only be used with single-use
2434
+ # read-only transactions.
2435
+ # See TransactionOptions.ReadOnly.max_staleness and
2436
+ # TransactionOptions.ReadOnly.min_read_timestamp.
2437
+ # ### Old Read Timestamps and Garbage Collection
2438
+ # Cloud Spanner continuously garbage collects deleted and overwritten data
2439
+ # in the background to reclaim storage space. This process is known
2440
+ # as "version GC". By default, version GC reclaims versions after they
2441
+ # are one hour old. Because of this, Cloud Spanner cannot perform reads
2442
+ # at read timestamps more than one hour in the past. This
2443
+ # restriction also applies to in-progress reads and/or SQL queries whose
2444
+ # timestamp become too old while executing. Reads and SQL queries with
2445
+ # too-old read timestamps fail with the error `FAILED_PRECONDITION`.
2446
+ # Corresponds to the JSON property `begin`
2447
+ # @return [Google::Apis::SpannerV1::TransactionOptions]
2448
+ attr_accessor :begin
2449
+
2450
+ def initialize(**args)
2451
+ update!(**args)
2452
+ end
2453
+
2454
+ # Update properties of this object
2455
+ def update!(**args)
2456
+ @id = args[:id] if args.key?(:id)
2457
+ @single_use = args[:single_use] if args.key?(:single_use)
2458
+ @begin = args[:begin] if args.key?(:begin)
2459
+ end
2460
+ end
2461
+
2462
+ # A modification to one or more Cloud Spanner rows. Mutations can be
2463
+ # applied to a Cloud Spanner database by sending them in a
2464
+ # Commit call.
2465
+ class Mutation
2466
+ include Google::Apis::Core::Hashable
2467
+
2468
+ # Arguments to delete operations.
2469
+ # Corresponds to the JSON property `delete`
2470
+ # @return [Google::Apis::SpannerV1::Delete]
2471
+ attr_accessor :delete
2472
+
2473
+ # Arguments to insert, update, insert_or_update, and
2474
+ # replace operations.
2475
+ # Corresponds to the JSON property `insert`
2476
+ # @return [Google::Apis::SpannerV1::Write]
2477
+ attr_accessor :insert
2478
+
2479
+ # Arguments to insert, update, insert_or_update, and
2480
+ # replace operations.
2481
+ # Corresponds to the JSON property `insertOrUpdate`
2482
+ # @return [Google::Apis::SpannerV1::Write]
2483
+ attr_accessor :insert_or_update
2484
+
2485
+ # Arguments to insert, update, insert_or_update, and
2486
+ # replace operations.
2487
+ # Corresponds to the JSON property `update`
2488
+ # @return [Google::Apis::SpannerV1::Write]
2489
+ attr_accessor :update
2490
+
2491
+ # Arguments to insert, update, insert_or_update, and
2492
+ # replace operations.
2493
+ # Corresponds to the JSON property `replace`
2494
+ # @return [Google::Apis::SpannerV1::Write]
2495
+ attr_accessor :replace
2496
+
2497
+ def initialize(**args)
2498
+ update!(**args)
2499
+ end
2500
+
2501
+ # Update properties of this object
2502
+ def update!(**args)
2503
+ @delete = args[:delete] if args.key?(:delete)
2504
+ @insert = args[:insert] if args.key?(:insert)
2505
+ @insert_or_update = args[:insert_or_update] if args.key?(:insert_or_update)
2506
+ @update = args[:update] if args.key?(:update)
2507
+ @replace = args[:replace] if args.key?(:replace)
2508
+ end
2509
+ end
2510
+
2511
+ # `KeySet` defines a collection of Cloud Spanner keys and/or key ranges. All
2512
+ # the keys are expected to be in the same table or index. The keys need
2513
+ # not be sorted in any particular way.
2514
+ # If the same key is specified multiple times in the set (for example
2515
+ # if two ranges, two keys, or a key and a range overlap), Cloud Spanner
2516
+ # behaves as if the key were only specified once.
2517
+ class KeySet
2518
+ include Google::Apis::Core::Hashable
2519
+
2520
+ # A list of key ranges. See KeyRange for more information about
2521
+ # key range specifications.
2522
+ # Corresponds to the JSON property `ranges`
2523
+ # @return [Array<Google::Apis::SpannerV1::KeyRange>]
2524
+ attr_accessor :ranges
2525
+
2526
+ # A list of specific keys. Entries in `keys` should have exactly as
2527
+ # many elements as there are columns in the primary or index key
2528
+ # with which this `KeySet` is used. Individual key values are
2529
+ # encoded as described here.
2530
+ # Corresponds to the JSON property `keys`
2531
+ # @return [Array<Array<Object>>]
2532
+ attr_accessor :keys
2533
+
2534
+ # For convenience `all` can be set to `true` to indicate that this
2535
+ # `KeySet` matches all keys in the table or index. Note that any keys
2536
+ # specified in `keys` or `ranges` are only yielded once.
2537
+ # Corresponds to the JSON property `all`
2538
+ # @return [Boolean]
2539
+ attr_accessor :all
2540
+ alias_method :all?, :all
2541
+
2542
+ def initialize(**args)
2543
+ update!(**args)
2544
+ end
2545
+
2546
+ # Update properties of this object
2547
+ def update!(**args)
2548
+ @ranges = args[:ranges] if args.key?(:ranges)
2549
+ @keys = args[:keys] if args.key?(:keys)
2550
+ @all = args[:all] if args.key?(:all)
2551
+ end
2552
+ end
2553
+
2554
+ # The response for GetDatabaseDdl.
2555
+ class GetDatabaseDdlResponse
2556
+ include Google::Apis::Core::Hashable
2557
+
2558
+ # A list of formatted DDL statements defining the schema of the database
2559
+ # specified in the request.
2560
+ # Corresponds to the JSON property `statements`
2561
+ # @return [Array<String>]
2562
+ attr_accessor :statements
2563
+
2564
+ def initialize(**args)
2565
+ update!(**args)
2566
+ end
2567
+
2568
+ # Update properties of this object
2569
+ def update!(**args)
2570
+ @statements = args[:statements] if args.key?(:statements)
2571
+ end
2572
+ end
2573
+
2574
+ # A Cloud Spanner database.
2575
+ class Database
2576
+ include Google::Apis::Core::Hashable
2577
+
2578
+ # Output only. The current database state.
2579
+ # Corresponds to the JSON property `state`
2580
+ # @return [String]
2581
+ attr_accessor :state
2582
+
2583
+ # Required. The name of the database. Values are of the form
2584
+ # `projects/<project>/instances/<instance>/databases/<database>`,
2585
+ # where `<database>` is as specified in the `CREATE DATABASE`
2586
+ # statement. This name can be passed to other API methods to
2587
+ # identify the database.
2588
+ # Corresponds to the JSON property `name`
2589
+ # @return [String]
2590
+ attr_accessor :name
2591
+
2592
+ def initialize(**args)
2593
+ update!(**args)
2594
+ end
2595
+
2596
+ # Update properties of this object
2597
+ def update!(**args)
2598
+ @state = args[:state] if args.key?(:state)
2599
+ @name = args[:name] if args.key?(:name)
2600
+ end
2601
+ end
2602
+
2603
+ # The response for ListDatabases.
2604
+ class ListDatabasesResponse
2605
+ include Google::Apis::Core::Hashable
2606
+
2607
+ # `next_page_token` can be sent in a subsequent
2608
+ # ListDatabases call to fetch more
2609
+ # of the matching databases.
2610
+ # Corresponds to the JSON property `nextPageToken`
2611
+ # @return [String]
2612
+ attr_accessor :next_page_token
2613
+
2614
+ # Databases that matched the request.
2615
+ # Corresponds to the JSON property `databases`
2616
+ # @return [Array<Google::Apis::SpannerV1::Database>]
2617
+ attr_accessor :databases
2618
+
2619
+ def initialize(**args)
2620
+ update!(**args)
2621
+ end
2622
+
2623
+ # Update properties of this object
2624
+ def update!(**args)
2625
+ @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
2626
+ @databases = args[:databases] if args.key?(:databases)
2627
+ end
2628
+ end
2629
+
2630
+ # Request message for `SetIamPolicy` method.
2631
+ class SetIamPolicyRequest
2632
+ include Google::Apis::Core::Hashable
2633
+
2634
+ # Defines an Identity and Access Management (IAM) policy. It is used to
2635
+ # specify access control policies for Cloud Platform resources.
2636
+ # A `Policy` consists of a list of `bindings`. A `Binding` binds a list of
2637
+ # `members` to a `role`, where the members can be user accounts, Google groups,
2638
+ # Google domains, and service accounts. A `role` is a named list of permissions
2639
+ # defined by IAM.
2640
+ # **Example**
2641
+ # `
2642
+ # "bindings": [
2643
+ # `
2644
+ # "role": "roles/owner",
2645
+ # "members": [
2646
+ # "user:mike@example.com",
2647
+ # "group:admins@example.com",
2648
+ # "domain:google.com",
2649
+ # "serviceAccount:my-other-app@appspot.gserviceaccount.com",
2650
+ # ]
2651
+ # `,
2652
+ # `
2653
+ # "role": "roles/viewer",
2654
+ # "members": ["user:sean@example.com"]
2655
+ # `
2656
+ # ]
2657
+ # `
2658
+ # For a description of IAM and its features, see the
2659
+ # [IAM developer's guide](https://cloud.google.com/iam).
2660
+ # Corresponds to the JSON property `policy`
2661
+ # @return [Google::Apis::SpannerV1::Policy]
2662
+ attr_accessor :policy
2663
+
2664
+ # OPTIONAL: A FieldMask specifying which fields of the policy to modify. Only
2665
+ # the fields in the mask will be modified. If no mask is provided, a default
2666
+ # mask is used:
2667
+ # paths: "bindings, etag"
2668
+ # This field is only used by Cloud IAM.
2669
+ # Corresponds to the JSON property `updateMask`
2670
+ # @return [String]
2671
+ attr_accessor :update_mask
2672
+
2673
+ def initialize(**args)
2674
+ update!(**args)
2675
+ end
2676
+
2677
+ # Update properties of this object
2678
+ def update!(**args)
2679
+ @policy = args[:policy] if args.key?(:policy)
2680
+ @update_mask = args[:update_mask] if args.key?(:update_mask)
2681
+ end
2682
+ end
2683
+
2684
+ # An isolated set of Cloud Spanner resources on which databases can be hosted.
2685
+ class Instance
2686
+ include Google::Apis::Core::Hashable
2687
+
2688
+ # Required. The number of nodes allocated to this instance.
2689
+ # Corresponds to the JSON property `nodeCount`
2690
+ # @return [Fixnum]
2691
+ attr_accessor :node_count
2692
+
2693
+ # Cloud Labels are a flexible and lightweight mechanism for organizing cloud
2694
+ # resources into groups that reflect a customer's organizational needs and
2695
+ # deployment strategies. Cloud Labels can be used to filter collections of
2696
+ # resources. They can be used to control how resource metrics are aggregated.
2697
+ # And they can be used as arguments to policy management rules (e.g. route,
2698
+ # firewall, load balancing, etc.).
2699
+ # * Label keys must be between 1 and 63 characters long and must conform to
2700
+ # the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`.
2701
+ # * Label values must be between 0 and 63 characters long and must conform
2702
+ # to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`.
2703
+ # * No more than 64 labels can be associated with a given resource.
2704
+ # See https://goo.gl/xmQnxf for more information on and examples of labels.
2705
+ # If you plan to use labels in your own code, please note that additional
2706
+ # characters may be allowed in the future. And so you are advised to use an
2707
+ # internal label representation, such as JSON, which doesn't rely upon
2708
+ # specific characters being disallowed. For example, representing labels
2709
+ # as the string: name + "_" + value would prove problematic if we were to
2710
+ # allow "_" in a future release.
2711
+ # Corresponds to the JSON property `labels`
2712
+ # @return [Hash<String,String>]
2713
+ attr_accessor :labels
2714
+
2715
+ # Required. The name of the instance's configuration. Values are of the form
2716
+ # `projects/<project>/instanceConfigs/<configuration>`. See
2717
+ # also InstanceConfig and
2718
+ # ListInstanceConfigs.
2719
+ # Corresponds to the JSON property `config`
2720
+ # @return [String]
2721
+ attr_accessor :config
2722
+
2723
+ # Output only. The current instance state. For
2724
+ # CreateInstance, the state must be
2725
+ # either omitted or set to `CREATING`. For
2726
+ # UpdateInstance, the state must be
2727
+ # either omitted or set to `READY`.
2728
+ # Corresponds to the JSON property `state`
2729
+ # @return [String]
2730
+ attr_accessor :state
2731
+
2732
+ # Required. A unique identifier for the instance, which cannot be changed
2733
+ # after the instance is created. Values are of the form
2734
+ # `projects/<project>/instances/a-z*[a-z0-9]`. The final
2735
+ # segment of the name must be between 6 and 30 characters in length.
2736
+ # Corresponds to the JSON property `name`
2737
+ # @return [String]
2738
+ attr_accessor :name
2739
+
2740
+ # Required. The descriptive name for this instance as it appears in UIs.
2741
+ # Must be unique per project and between 4 and 30 characters in length.
2742
+ # Corresponds to the JSON property `displayName`
2743
+ # @return [String]
2744
+ attr_accessor :display_name
2745
+
2746
+ def initialize(**args)
2747
+ update!(**args)
2748
+ end
2749
+
2750
+ # Update properties of this object
2751
+ def update!(**args)
2752
+ @node_count = args[:node_count] if args.key?(:node_count)
2753
+ @labels = args[:labels] if args.key?(:labels)
2754
+ @config = args[:config] if args.key?(:config)
2755
+ @state = args[:state] if args.key?(:state)
2756
+ @name = args[:name] if args.key?(:name)
2757
+ @display_name = args[:display_name] if args.key?(:display_name)
2758
+ end
2759
+ end
2760
+
2761
+ # The request for Rollback.
2762
+ class RollbackRequest
2763
+ include Google::Apis::Core::Hashable
2764
+
2765
+ # Required. The transaction to roll back.
2766
+ # Corresponds to the JSON property `transactionId`
2767
+ # NOTE: Values are automatically base64 encoded/decoded in the client library.
2768
+ # @return [String]
2769
+ attr_accessor :transaction_id
2770
+
2771
+ def initialize(**args)
2772
+ update!(**args)
2773
+ end
2774
+
2775
+ # Update properties of this object
2776
+ def update!(**args)
2777
+ @transaction_id = args[:transaction_id] if args.key?(:transaction_id)
2778
+ end
2779
+ end
2780
+
2781
+ # A transaction.
2782
+ class Transaction
2783
+ include Google::Apis::Core::Hashable
2784
+
2785
+ # For snapshot read-only transactions, the read timestamp chosen
2786
+ # for the transaction. Not returned by default: see
2787
+ # TransactionOptions.ReadOnly.return_read_timestamp.
2788
+ # Corresponds to the JSON property `readTimestamp`
2789
+ # @return [String]
2790
+ attr_accessor :read_timestamp
2791
+
2792
+ # `id` may be used to identify the transaction in subsequent
2793
+ # Read,
2794
+ # ExecuteSql,
2795
+ # Commit, or
2796
+ # Rollback calls.
2797
+ # Single-use read-only transactions do not have IDs, because
2798
+ # single-use transactions do not support multiple requests.
2799
+ # Corresponds to the JSON property `id`
2800
+ # NOTE: Values are automatically base64 encoded/decoded in the client library.
2801
+ # @return [String]
2802
+ attr_accessor :id
2803
+
2804
+ def initialize(**args)
2805
+ update!(**args)
2806
+ end
2807
+
2808
+ # Update properties of this object
2809
+ def update!(**args)
2810
+ @read_timestamp = args[:read_timestamp] if args.key?(:read_timestamp)
2811
+ @id = args[:id] if args.key?(:id)
2812
+ end
2813
+ end
2814
+
2815
+ # Metadata type for the operation returned by
2816
+ # UpdateDatabaseDdl.
2817
+ class UpdateDatabaseDdlMetadata
2818
+ include Google::Apis::Core::Hashable
2819
+
2820
+ # The database being modified.
2821
+ # Corresponds to the JSON property `database`
2822
+ # @return [String]
2823
+ attr_accessor :database
2824
+
2825
+ # For an update this list contains all the statements. For an
2826
+ # individual statement, this list contains only that statement.
2827
+ # Corresponds to the JSON property `statements`
2828
+ # @return [Array<String>]
2829
+ attr_accessor :statements
2830
+
2831
+ # Reports the commit timestamps of all statements that have
2832
+ # succeeded so far, where `commit_timestamps[i]` is the commit
2833
+ # timestamp for the statement `statements[i]`.
2834
+ # Corresponds to the JSON property `commitTimestamps`
2835
+ # @return [Array<String>]
2836
+ attr_accessor :commit_timestamps
2837
+
2838
+ def initialize(**args)
2839
+ update!(**args)
2840
+ end
2841
+
2842
+ # Update properties of this object
2843
+ def update!(**args)
2844
+ @database = args[:database] if args.key?(:database)
2845
+ @statements = args[:statements] if args.key?(:statements)
2846
+ @commit_timestamps = args[:commit_timestamps] if args.key?(:commit_timestamps)
2847
+ end
2848
+ end
2849
+
2850
+ # Options for counters
2851
+ class CounterOptions
2852
+ include Google::Apis::Core::Hashable
2853
+
2854
+ # The metric to update.
2855
+ # Corresponds to the JSON property `metric`
2856
+ # @return [String]
2857
+ attr_accessor :metric
2858
+
2859
+ # The field value to attribute.
2860
+ # Corresponds to the JSON property `field`
2861
+ # @return [String]
2862
+ attr_accessor :field
2863
+
2864
+ def initialize(**args)
2865
+ update!(**args)
2866
+ end
2867
+
2868
+ # Update properties of this object
2869
+ def update!(**args)
2870
+ @metric = args[:metric] if args.key?(:metric)
2871
+ @field = args[:field] if args.key?(:field)
2872
+ end
2873
+ end
2874
+
2875
+ # Contains an ordered list of nodes appearing in the query plan.
2876
+ class QueryPlan
2877
+ include Google::Apis::Core::Hashable
2878
+
2879
+ # The nodes in the query plan. Plan nodes are returned in pre-order starting
2880
+ # with the plan root. Each PlanNode's `id` corresponds to its index in
2881
+ # `plan_nodes`.
2882
+ # Corresponds to the JSON property `planNodes`
2883
+ # @return [Array<Google::Apis::SpannerV1::PlanNode>]
2884
+ attr_accessor :plan_nodes
2885
+
2886
+ def initialize(**args)
2887
+ update!(**args)
2888
+ end
2889
+
2890
+ # Update properties of this object
2891
+ def update!(**args)
2892
+ @plan_nodes = args[:plan_nodes] if args.key?(:plan_nodes)
2893
+ end
2894
+ end
2895
+
2896
+ # `StructType` defines the fields of a STRUCT type.
2897
+ class StructType
2898
+ include Google::Apis::Core::Hashable
2899
+
2900
+ # The list of fields that make up this struct. Order is
2901
+ # significant, because values of this struct type are represented as
2902
+ # lists, where the order of field values matches the order of
2903
+ # fields in the StructType. In turn, the order of fields
2904
+ # matches the order of columns in a read request, or the order of
2905
+ # fields in the `SELECT` clause of a query.
2906
+ # Corresponds to the JSON property `fields`
2907
+ # @return [Array<Google::Apis::SpannerV1::Field>]
2908
+ attr_accessor :fields
2909
+
2910
+ def initialize(**args)
2911
+ update!(**args)
2912
+ end
2913
+
2914
+ # Update properties of this object
2915
+ def update!(**args)
2916
+ @fields = args[:fields] if args.key?(:fields)
2917
+ end
2918
+ end
2919
+
2920
+ # Message representing a single field of a struct.
2921
+ class Field
2922
+ include Google::Apis::Core::Hashable
2923
+
2924
+ # The name of the field. For reads, this is the column name. For
2925
+ # SQL queries, it is the column alias (e.g., `"Word"` in the
2926
+ # query `"SELECT 'hello' AS Word"`), or the column name (e.g.,
2927
+ # `"ColName"` in the query `"SELECT ColName FROM Table"`). Some
2928
+ # columns might have an empty name (e.g., !"SELECT
2929
+ # UPPER(ColName)"`). Note that a query result can contain
2930
+ # multiple fields with the same name.
2931
+ # Corresponds to the JSON property `name`
2932
+ # @return [String]
2933
+ attr_accessor :name
2934
+
2935
+ # `Type` indicates the type of a Cloud Spanner value, as might be stored in a
2936
+ # table cell or returned from an SQL query.
2937
+ # Corresponds to the JSON property `type`
2938
+ # @return [Google::Apis::SpannerV1::Type]
2939
+ attr_accessor :type
2940
+
2941
+ def initialize(**args)
2942
+ update!(**args)
2943
+ end
2944
+
2945
+ # Update properties of this object
2946
+ def update!(**args)
2947
+ @name = args[:name] if args.key?(:name)
2948
+ @type = args[:type] if args.key?(:type)
2949
+ end
2950
+ end
2951
+
2952
+ # Request message for `TestIamPermissions` method.
2953
+ class TestIamPermissionsRequest
2954
+ include Google::Apis::Core::Hashable
2955
+
2956
+ # REQUIRED: The set of permissions to check for 'resource'.
2957
+ # Permissions with wildcards (such as '*', 'spanner.*', 'spanner.instances.*')
2958
+ # are not allowed.
2959
+ # Corresponds to the JSON property `permissions`
2960
+ # @return [Array<String>]
2961
+ attr_accessor :permissions
2962
+
2963
+ def initialize(**args)
2964
+ update!(**args)
2965
+ end
2966
+
2967
+ # Update properties of this object
2968
+ def update!(**args)
2969
+ @permissions = args[:permissions] if args.key?(:permissions)
2970
+ end
2971
+ end
2972
+
2973
+ # Additional statistics about a ResultSet or PartialResultSet.
2974
+ class ResultSetStats
2975
+ include Google::Apis::Core::Hashable
2976
+
2977
+ # Contains an ordered list of nodes appearing in the query plan.
2978
+ # Corresponds to the JSON property `queryPlan`
2979
+ # @return [Google::Apis::SpannerV1::QueryPlan]
2980
+ attr_accessor :query_plan
2981
+
2982
+ # Aggregated statistics from the execution of the query. Only present when
2983
+ # the query is profiled. For example, a query could return the statistics as
2984
+ # follows:
2985
+ # `
2986
+ # "rows_returned": "3",
2987
+ # "elapsed_time": "1.22 secs",
2988
+ # "cpu_time": "1.19 secs"
2989
+ # `
2990
+ # Corresponds to the JSON property `queryStats`
2991
+ # @return [Hash<String,Object>]
2992
+ attr_accessor :query_stats
2993
+
2994
+ def initialize(**args)
2995
+ update!(**args)
2996
+ end
2997
+
2998
+ # Update properties of this object
2999
+ def update!(**args)
3000
+ @query_plan = args[:query_plan] if args.key?(:query_plan)
3001
+ @query_stats = args[:query_stats] if args.key?(:query_stats)
3002
+ end
3003
+ end
3004
+
3005
+ # The response for Commit.
3006
+ class CommitResponse
3007
+ include Google::Apis::Core::Hashable
3008
+
3009
+ # The Cloud Spanner timestamp at which the transaction committed.
3010
+ # Corresponds to the JSON property `commitTimestamp`
3011
+ # @return [String]
3012
+ attr_accessor :commit_timestamp
3013
+
3014
+ def initialize(**args)
3015
+ update!(**args)
3016
+ end
3017
+
3018
+ # Update properties of this object
3019
+ def update!(**args)
3020
+ @commit_timestamp = args[:commit_timestamp] if args.key?(:commit_timestamp)
3021
+ end
3022
+ end
3023
+
3024
+ # `Type` indicates the type of a Cloud Spanner value, as might be stored in a
3025
+ # table cell or returned from an SQL query.
3026
+ class Type
3027
+ include Google::Apis::Core::Hashable
3028
+
3029
+ # `StructType` defines the fields of a STRUCT type.
3030
+ # Corresponds to the JSON property `structType`
3031
+ # @return [Google::Apis::SpannerV1::StructType]
3032
+ attr_accessor :struct_type
3033
+
3034
+ # `Type` indicates the type of a Cloud Spanner value, as might be stored in a
3035
+ # table cell or returned from an SQL query.
3036
+ # Corresponds to the JSON property `arrayElementType`
3037
+ # @return [Google::Apis::SpannerV1::Type]
3038
+ attr_accessor :array_element_type
3039
+
3040
+ # Required. The TypeCode for this type.
3041
+ # Corresponds to the JSON property `code`
3042
+ # @return [String]
3043
+ attr_accessor :code
3044
+
3045
+ def initialize(**args)
3046
+ update!(**args)
3047
+ end
3048
+
3049
+ # Update properties of this object
3050
+ def update!(**args)
3051
+ @struct_type = args[:struct_type] if args.key?(:struct_type)
3052
+ @array_element_type = args[:array_element_type] if args.key?(:array_element_type)
3053
+ @code = args[:code] if args.key?(:code)
3054
+ end
3055
+ end
3056
+
3057
+ # Node information for nodes appearing in a QueryPlan.plan_nodes.
3058
+ class PlanNode
3059
+ include Google::Apis::Core::Hashable
3060
+
3061
+ # Attributes relevant to the node contained in a group of key-value pairs.
3062
+ # For example, a Parameter Reference node could have the following
3063
+ # information in its metadata:
3064
+ # `
3065
+ # "parameter_reference": "param1",
3066
+ # "parameter_type": "array"
3067
+ # `
3068
+ # Corresponds to the JSON property `metadata`
3069
+ # @return [Hash<String,Object>]
3070
+ attr_accessor :metadata
3071
+
3072
+ # The execution statistics associated with the node, contained in a group of
3073
+ # key-value pairs. Only present if the plan was returned as a result of a
3074
+ # profile query. For example, number of executions, number of rows/time per
3075
+ # execution etc.
3076
+ # Corresponds to the JSON property `executionStats`
3077
+ # @return [Hash<String,Object>]
3078
+ attr_accessor :execution_stats
3079
+
3080
+ # Condensed representation of a node and its subtree. Only present for
3081
+ # `SCALAR` PlanNode(s).
3082
+ # Corresponds to the JSON property `shortRepresentation`
3083
+ # @return [Google::Apis::SpannerV1::ShortRepresentation]
3084
+ attr_accessor :short_representation
3085
+
3086
+ # The `PlanNode`'s index in node list.
3087
+ # Corresponds to the JSON property `index`
3088
+ # @return [Fixnum]
3089
+ attr_accessor :index
3090
+
3091
+ # The display name for the node.
3092
+ # Corresponds to the JSON property `displayName`
3093
+ # @return [String]
3094
+ attr_accessor :display_name
3095
+
3096
+ # Used to determine the type of node. May be needed for visualizing
3097
+ # different kinds of nodes differently. For example, If the node is a
3098
+ # SCALAR node, it will have a condensed representation
3099
+ # which can be used to directly embed a description of the node in its
3100
+ # parent.
3101
+ # Corresponds to the JSON property `kind`
3102
+ # @return [String]
3103
+ attr_accessor :kind
3104
+
3105
+ # List of child node `index`es and their relationship to this parent.
3106
+ # Corresponds to the JSON property `childLinks`
3107
+ # @return [Array<Google::Apis::SpannerV1::ChildLink>]
3108
+ attr_accessor :child_links
3109
+
3110
+ def initialize(**args)
3111
+ update!(**args)
3112
+ end
3113
+
3114
+ # Update properties of this object
3115
+ def update!(**args)
3116
+ @metadata = args[:metadata] if args.key?(:metadata)
3117
+ @execution_stats = args[:execution_stats] if args.key?(:execution_stats)
3118
+ @short_representation = args[:short_representation] if args.key?(:short_representation)
3119
+ @index = args[:index] if args.key?(:index)
3120
+ @display_name = args[:display_name] if args.key?(:display_name)
3121
+ @kind = args[:kind] if args.key?(:kind)
3122
+ @child_links = args[:child_links] if args.key?(:child_links)
3123
+ end
3124
+ end
3125
+
3126
+ # Specifies the audit configuration for a service.
3127
+ # It consists of which permission types are logged, and what identities, if
3128
+ # any, are exempted from logging.
3129
+ # An AuditConifg must have one or more AuditLogConfigs.
3130
+ class AuditConfig
3131
+ include Google::Apis::Core::Hashable
3132
+
3133
+ # Specifies the identities that are exempted from "data access" audit
3134
+ # logging for the `service` specified above.
3135
+ # Follows the same format of Binding.members.
3136
+ # This field is deprecated in favor of per-permission-type exemptions.
3137
+ # Corresponds to the JSON property `exemptedMembers`
3138
+ # @return [Array<String>]
3139
+ attr_accessor :exempted_members
3140
+
3141
+ # Specifies a service that will be enabled for audit logging.
3142
+ # For example, `resourcemanager`, `storage`, `compute`.
3143
+ # `allServices` is a special value that covers all services.
3144
+ # Corresponds to the JSON property `service`
3145
+ # @return [String]
3146
+ attr_accessor :service
3147
+
3148
+ # The configuration for logging of each type of permission.
3149
+ # Next ID: 4
3150
+ # Corresponds to the JSON property `auditLogConfigs`
3151
+ # @return [Array<Google::Apis::SpannerV1::AuditLogConfig>]
3152
+ attr_accessor :audit_log_configs
3153
+
3154
+ def initialize(**args)
3155
+ update!(**args)
3156
+ end
3157
+
3158
+ # Update properties of this object
3159
+ def update!(**args)
3160
+ @exempted_members = args[:exempted_members] if args.key?(:exempted_members)
3161
+ @service = args[:service] if args.key?(:service)
3162
+ @audit_log_configs = args[:audit_log_configs] if args.key?(:audit_log_configs)
3163
+ end
3164
+ end
3165
+
3166
+ # Metadata type for the operation returned by
3167
+ # CreateInstance.
3168
+ class CreateInstanceMetadata
3169
+ include Google::Apis::Core::Hashable
3170
+
3171
+ # The time at which this operation was cancelled. If set, this operation is
3172
+ # in the process of undoing itself (which is guaranteed to succeed) and
3173
+ # cannot be cancelled again.
3174
+ # Corresponds to the JSON property `cancelTime`
3175
+ # @return [String]
3176
+ attr_accessor :cancel_time
3177
+
3178
+ # The time at which this operation failed or was completed successfully.
3179
+ # Corresponds to the JSON property `endTime`
3180
+ # @return [String]
3181
+ attr_accessor :end_time
3182
+
3183
+ # An isolated set of Cloud Spanner resources on which databases can be hosted.
3184
+ # Corresponds to the JSON property `instance`
3185
+ # @return [Google::Apis::SpannerV1::Instance]
3186
+ attr_accessor :instance
3187
+
3188
+ # The time at which the
3189
+ # CreateInstance request was
3190
+ # received.
3191
+ # Corresponds to the JSON property `startTime`
3192
+ # @return [String]
3193
+ attr_accessor :start_time
3194
+
3195
+ def initialize(**args)
3196
+ update!(**args)
3197
+ end
3198
+
3199
+ # Update properties of this object
3200
+ def update!(**args)
3201
+ @cancel_time = args[:cancel_time] if args.key?(:cancel_time)
3202
+ @end_time = args[:end_time] if args.key?(:end_time)
3203
+ @instance = args[:instance] if args.key?(:instance)
3204
+ @start_time = args[:start_time] if args.key?(:start_time)
3205
+ end
3206
+ end
3207
+
3208
+ # Metadata associated with a parent-child relationship appearing in a
3209
+ # PlanNode.
3210
+ class ChildLink
3211
+ include Google::Apis::Core::Hashable
3212
+
3213
+ # The node to which the link points.
3214
+ # Corresponds to the JSON property `childIndex`
3215
+ # @return [Fixnum]
3216
+ attr_accessor :child_index
3217
+
3218
+ # Only present if the child node is SCALAR and corresponds
3219
+ # to an output variable of the parent node. The field carries the name of
3220
+ # the output variable.
3221
+ # For example, a `TableScan` operator that reads rows from a table will
3222
+ # have child links to the `SCALAR` nodes representing the output variables
3223
+ # created for each column that is read by the operator. The corresponding
3224
+ # `variable` fields will be set to the variable names assigned to the
3225
+ # columns.
3226
+ # Corresponds to the JSON property `variable`
3227
+ # @return [String]
3228
+ attr_accessor :variable
3229
+
3230
+ # The type of the link. For example, in Hash Joins this could be used to
3231
+ # distinguish between the build child and the probe child, or in the case
3232
+ # of the child being an output variable, to represent the tag associated
3233
+ # with the output variable.
3234
+ # Corresponds to the JSON property `type`
3235
+ # @return [String]
3236
+ attr_accessor :type
3237
+
3238
+ def initialize(**args)
3239
+ update!(**args)
3240
+ end
3241
+
3242
+ # Update properties of this object
3243
+ def update!(**args)
3244
+ @child_index = args[:child_index] if args.key?(:child_index)
3245
+ @variable = args[:variable] if args.key?(:variable)
3246
+ @type = args[:type] if args.key?(:type)
3247
+ end
3248
+ end
3249
+
3250
+ # Write a Cloud Audit log
3251
+ class CloudAuditOptions
3252
+ include Google::Apis::Core::Hashable
3253
+
3254
+ def initialize(**args)
3255
+ update!(**args)
3256
+ end
3257
+
3258
+ # Update properties of this object
3259
+ def update!(**args)
3260
+ end
3261
+ end
3262
+
3263
+ # Arguments to delete operations.
3264
+ class Delete
3265
+ include Google::Apis::Core::Hashable
3266
+
3267
+ # Required. The table whose rows will be deleted.
3268
+ # Corresponds to the JSON property `table`
3269
+ # @return [String]
3270
+ attr_accessor :table
3271
+
3272
+ # `KeySet` defines a collection of Cloud Spanner keys and/or key ranges. All
3273
+ # the keys are expected to be in the same table or index. The keys need
3274
+ # not be sorted in any particular way.
3275
+ # If the same key is specified multiple times in the set (for example
3276
+ # if two ranges, two keys, or a key and a range overlap), Cloud Spanner
3277
+ # behaves as if the key were only specified once.
3278
+ # Corresponds to the JSON property `keySet`
3279
+ # @return [Google::Apis::SpannerV1::KeySet]
3280
+ attr_accessor :key_set
3281
+
3282
+ def initialize(**args)
3283
+ update!(**args)
3284
+ end
3285
+
3286
+ # Update properties of this object
3287
+ def update!(**args)
3288
+ @table = args[:table] if args.key?(:table)
3289
+ @key_set = args[:key_set] if args.key?(:key_set)
3290
+ end
3291
+ end
3292
+ end
3293
+ end
3294
+ end