google-cloud-spanner 3.55.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- google/cloud/spanner.py +47 -0
- google/cloud/spanner_admin_database_v1/__init__.py +146 -0
- google/cloud/spanner_admin_database_v1/gapic_metadata.json +418 -0
- google/cloud/spanner_admin_database_v1/gapic_version.py +16 -0
- google/cloud/spanner_admin_database_v1/py.typed +2 -0
- google/cloud/spanner_admin_database_v1/services/__init__.py +15 -0
- google/cloud/spanner_admin_database_v1/services/database_admin/__init__.py +22 -0
- google/cloud/spanner_admin_database_v1/services/database_admin/async_client.py +4097 -0
- google/cloud/spanner_admin_database_v1/services/database_admin/client.py +4602 -0
- google/cloud/spanner_admin_database_v1/services/database_admin/pagers.py +989 -0
- google/cloud/spanner_admin_database_v1/services/database_admin/transports/__init__.py +38 -0
- google/cloud/spanner_admin_database_v1/services/database_admin/transports/base.py +820 -0
- google/cloud/spanner_admin_database_v1/services/database_admin/transports/grpc.py +1303 -0
- google/cloud/spanner_admin_database_v1/services/database_admin/transports/grpc_asyncio.py +1688 -0
- google/cloud/spanner_admin_database_v1/services/database_admin/transports/rest.py +6512 -0
- google/cloud/spanner_admin_database_v1/services/database_admin/transports/rest_base.py +1650 -0
- google/cloud/spanner_admin_database_v1/types/__init__.py +144 -0
- google/cloud/spanner_admin_database_v1/types/backup.py +1106 -0
- google/cloud/spanner_admin_database_v1/types/backup_schedule.py +369 -0
- google/cloud/spanner_admin_database_v1/types/common.py +180 -0
- google/cloud/spanner_admin_database_v1/types/spanner_database_admin.py +1303 -0
- google/cloud/spanner_admin_instance_v1/__init__.py +110 -0
- google/cloud/spanner_admin_instance_v1/gapic_metadata.json +343 -0
- google/cloud/spanner_admin_instance_v1/gapic_version.py +16 -0
- google/cloud/spanner_admin_instance_v1/py.typed +2 -0
- google/cloud/spanner_admin_instance_v1/services/__init__.py +15 -0
- google/cloud/spanner_admin_instance_v1/services/instance_admin/__init__.py +22 -0
- google/cloud/spanner_admin_instance_v1/services/instance_admin/async_client.py +3466 -0
- google/cloud/spanner_admin_instance_v1/services/instance_admin/client.py +3881 -0
- google/cloud/spanner_admin_instance_v1/services/instance_admin/pagers.py +856 -0
- google/cloud/spanner_admin_instance_v1/services/instance_admin/transports/__init__.py +38 -0
- google/cloud/spanner_admin_instance_v1/services/instance_admin/transports/base.py +545 -0
- google/cloud/spanner_admin_instance_v1/services/instance_admin/transports/grpc.py +1347 -0
- google/cloud/spanner_admin_instance_v1/services/instance_admin/transports/grpc_asyncio.py +1539 -0
- google/cloud/spanner_admin_instance_v1/services/instance_admin/transports/rest.py +4834 -0
- google/cloud/spanner_admin_instance_v1/services/instance_admin/transports/rest_base.py +1198 -0
- google/cloud/spanner_admin_instance_v1/types/__init__.py +104 -0
- google/cloud/spanner_admin_instance_v1/types/common.py +99 -0
- google/cloud/spanner_admin_instance_v1/types/spanner_instance_admin.py +2375 -0
- google/cloud/spanner_dbapi/__init__.py +93 -0
- google/cloud/spanner_dbapi/_helpers.py +113 -0
- google/cloud/spanner_dbapi/batch_dml_executor.py +135 -0
- google/cloud/spanner_dbapi/checksum.py +80 -0
- google/cloud/spanner_dbapi/client_side_statement_executor.py +140 -0
- google/cloud/spanner_dbapi/client_side_statement_parser.py +106 -0
- google/cloud/spanner_dbapi/connection.py +818 -0
- google/cloud/spanner_dbapi/cursor.py +609 -0
- google/cloud/spanner_dbapi/exceptions.py +172 -0
- google/cloud/spanner_dbapi/parse_utils.py +392 -0
- google/cloud/spanner_dbapi/parsed_statement.py +63 -0
- google/cloud/spanner_dbapi/parser.py +258 -0
- google/cloud/spanner_dbapi/partition_helper.py +41 -0
- google/cloud/spanner_dbapi/transaction_helper.py +294 -0
- google/cloud/spanner_dbapi/types.py +106 -0
- google/cloud/spanner_dbapi/utils.py +147 -0
- google/cloud/spanner_dbapi/version.py +20 -0
- google/cloud/spanner_v1/__init__.py +154 -0
- google/cloud/spanner_v1/_helpers.py +751 -0
- google/cloud/spanner_v1/_opentelemetry_tracing.py +165 -0
- google/cloud/spanner_v1/backup.py +397 -0
- google/cloud/spanner_v1/batch.py +433 -0
- google/cloud/spanner_v1/client.py +538 -0
- google/cloud/spanner_v1/data_types.py +350 -0
- google/cloud/spanner_v1/database.py +1968 -0
- google/cloud/spanner_v1/database_sessions_manager.py +249 -0
- google/cloud/spanner_v1/gapic_metadata.json +268 -0
- google/cloud/spanner_v1/gapic_version.py +16 -0
- google/cloud/spanner_v1/instance.py +735 -0
- google/cloud/spanner_v1/keyset.py +193 -0
- google/cloud/spanner_v1/merged_result_set.py +146 -0
- google/cloud/spanner_v1/metrics/constants.py +71 -0
- google/cloud/spanner_v1/metrics/metrics_capture.py +75 -0
- google/cloud/spanner_v1/metrics/metrics_exporter.py +384 -0
- google/cloud/spanner_v1/metrics/metrics_interceptor.py +156 -0
- google/cloud/spanner_v1/metrics/metrics_tracer.py +588 -0
- google/cloud/spanner_v1/metrics/metrics_tracer_factory.py +328 -0
- google/cloud/spanner_v1/metrics/spanner_metrics_tracer_factory.py +172 -0
- google/cloud/spanner_v1/param_types.py +110 -0
- google/cloud/spanner_v1/pool.py +813 -0
- google/cloud/spanner_v1/py.typed +2 -0
- google/cloud/spanner_v1/request_id_header.py +64 -0
- google/cloud/spanner_v1/services/__init__.py +15 -0
- google/cloud/spanner_v1/services/spanner/__init__.py +22 -0
- google/cloud/spanner_v1/services/spanner/async_client.py +2205 -0
- google/cloud/spanner_v1/services/spanner/client.py +2624 -0
- google/cloud/spanner_v1/services/spanner/pagers.py +196 -0
- google/cloud/spanner_v1/services/spanner/transports/__init__.py +38 -0
- google/cloud/spanner_v1/services/spanner/transports/base.py +520 -0
- google/cloud/spanner_v1/services/spanner/transports/grpc.py +911 -0
- google/cloud/spanner_v1/services/spanner/transports/grpc_asyncio.py +1144 -0
- google/cloud/spanner_v1/services/spanner/transports/rest.py +3468 -0
- google/cloud/spanner_v1/services/spanner/transports/rest_base.py +981 -0
- google/cloud/spanner_v1/session.py +631 -0
- google/cloud/spanner_v1/session_options.py +133 -0
- google/cloud/spanner_v1/snapshot.py +1057 -0
- google/cloud/spanner_v1/streamed.py +402 -0
- google/cloud/spanner_v1/table.py +181 -0
- google/cloud/spanner_v1/testing/__init__.py +0 -0
- google/cloud/spanner_v1/testing/database_test.py +121 -0
- google/cloud/spanner_v1/testing/interceptors.py +118 -0
- google/cloud/spanner_v1/testing/mock_database_admin.py +38 -0
- google/cloud/spanner_v1/testing/mock_spanner.py +261 -0
- google/cloud/spanner_v1/testing/spanner_database_admin_pb2_grpc.py +1267 -0
- google/cloud/spanner_v1/testing/spanner_pb2_grpc.py +882 -0
- google/cloud/spanner_v1/transaction.py +747 -0
- google/cloud/spanner_v1/types/__init__.py +118 -0
- google/cloud/spanner_v1/types/commit_response.py +94 -0
- google/cloud/spanner_v1/types/keys.py +248 -0
- google/cloud/spanner_v1/types/mutation.py +201 -0
- google/cloud/spanner_v1/types/query_plan.py +220 -0
- google/cloud/spanner_v1/types/result_set.py +379 -0
- google/cloud/spanner_v1/types/spanner.py +1815 -0
- google/cloud/spanner_v1/types/transaction.py +818 -0
- google/cloud/spanner_v1/types/type.py +288 -0
- google_cloud_spanner-3.55.0.dist-info/LICENSE +202 -0
- google_cloud_spanner-3.55.0.dist-info/METADATA +318 -0
- google_cloud_spanner-3.55.0.dist-info/RECORD +119 -0
- google_cloud_spanner-3.55.0.dist-info/WHEEL +5 -0
- google_cloud_spanner-3.55.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
# Copyright 2025 Google LLC All rights reserved.
|
|
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
|
+
import datetime
|
|
15
|
+
import threading
|
|
16
|
+
import time
|
|
17
|
+
import weakref
|
|
18
|
+
|
|
19
|
+
from google.api_core.exceptions import MethodNotImplemented
|
|
20
|
+
|
|
21
|
+
from google.cloud.spanner_v1._opentelemetry_tracing import (
|
|
22
|
+
get_current_span,
|
|
23
|
+
add_span_event,
|
|
24
|
+
)
|
|
25
|
+
from google.cloud.spanner_v1.session import Session
|
|
26
|
+
from google.cloud.spanner_v1.session_options import TransactionType
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class DatabaseSessionsManager(object):
|
|
30
|
+
"""Manages sessions for a Cloud Spanner database.
|
|
31
|
+
Sessions can be checked out from the database session manager for a specific
|
|
32
|
+
transaction type using :meth:`get_session`, and returned to the session manager
|
|
33
|
+
using :meth:`put_session`.
|
|
34
|
+
The sessions returned by the session manager depend on the client's session options (see
|
|
35
|
+
:class:`~google.cloud.spanner_v1.session_options.SessionOptions`) and the provided session
|
|
36
|
+
pool (see :class:`~google.cloud.spanner_v1.pool.AbstractSessionPool`).
|
|
37
|
+
:type database: :class:`~google.cloud.spanner_v1.database.Database`
|
|
38
|
+
:param database: The database to manage sessions for.
|
|
39
|
+
:type pool: :class:`~google.cloud.spanner_v1.pool.AbstractSessionPool`
|
|
40
|
+
:param pool: The pool to get non-multiplexed sessions from.
|
|
41
|
+
"""
|
|
42
|
+
|
|
43
|
+
# Intervals for the maintenance thread to check and refresh the multiplexed session.
|
|
44
|
+
_MAINTENANCE_THREAD_POLLING_INTERVAL = datetime.timedelta(minutes=10)
|
|
45
|
+
_MAINTENANCE_THREAD_REFRESH_INTERVAL = datetime.timedelta(days=7)
|
|
46
|
+
|
|
47
|
+
def __init__(self, database, pool):
|
|
48
|
+
self._database = database
|
|
49
|
+
self._pool = pool
|
|
50
|
+
|
|
51
|
+
# Declare multiplexed session attributes. When a multiplexed session for the
|
|
52
|
+
# database session manager is created, a maintenance thread is initialized to
|
|
53
|
+
# periodically delete and recreate the multiplexed session so that it remains
|
|
54
|
+
# valid. Because of this concurrency, we need to use a lock whenever we access
|
|
55
|
+
# the multiplexed session to avoid any race conditions. We also create an event
|
|
56
|
+
# so that the thread can terminate if the use of multiplexed session has been
|
|
57
|
+
# disabled for all transactions.
|
|
58
|
+
self._multiplexed_session = None
|
|
59
|
+
self._multiplexed_session_maintenance_thread = None
|
|
60
|
+
self._multiplexed_session_lock = threading.Lock()
|
|
61
|
+
self._is_multiplexed_sessions_disabled_event = threading.Event()
|
|
62
|
+
|
|
63
|
+
@property
|
|
64
|
+
def _logger(self):
|
|
65
|
+
"""The logger used by this database session manager.
|
|
66
|
+
|
|
67
|
+
:rtype: :class:`logging.Logger`
|
|
68
|
+
:returns: The logger.
|
|
69
|
+
"""
|
|
70
|
+
return self._database.logger
|
|
71
|
+
|
|
72
|
+
def get_session(self, transaction_type: TransactionType) -> Session:
|
|
73
|
+
"""Returns a session for the given transaction type from the database session manager.
|
|
74
|
+
:rtype: :class:`~google.cloud.spanner_v1.session.Session`
|
|
75
|
+
:returns: a session for the given transaction type.
|
|
76
|
+
"""
|
|
77
|
+
|
|
78
|
+
session_options = self._database.session_options
|
|
79
|
+
use_multiplexed = session_options.use_multiplexed(transaction_type)
|
|
80
|
+
|
|
81
|
+
if use_multiplexed and transaction_type == TransactionType.READ_WRITE:
|
|
82
|
+
raise NotImplementedError(
|
|
83
|
+
f"Multiplexed sessions are not yet supported for {transaction_type} transactions."
|
|
84
|
+
)
|
|
85
|
+
|
|
86
|
+
if use_multiplexed:
|
|
87
|
+
try:
|
|
88
|
+
session = self._get_multiplexed_session()
|
|
89
|
+
|
|
90
|
+
# If multiplexed sessions are not supported, disable
|
|
91
|
+
# them for all transactions and return a non-multiplexed session.
|
|
92
|
+
except MethodNotImplemented:
|
|
93
|
+
self._disable_multiplexed_sessions()
|
|
94
|
+
session = self._pool.get()
|
|
95
|
+
|
|
96
|
+
else:
|
|
97
|
+
session = self._pool.get()
|
|
98
|
+
|
|
99
|
+
add_span_event(
|
|
100
|
+
get_current_span(),
|
|
101
|
+
"Using session",
|
|
102
|
+
{"id": session.session_id, "multiplexed": session.is_multiplexed},
|
|
103
|
+
)
|
|
104
|
+
|
|
105
|
+
return session
|
|
106
|
+
|
|
107
|
+
def put_session(self, session: Session) -> None:
|
|
108
|
+
"""Returns the session to the database session manager.
|
|
109
|
+
:type session: :class:`~google.cloud.spanner_v1.session.Session`
|
|
110
|
+
:param session: The session to return to the database session manager.
|
|
111
|
+
"""
|
|
112
|
+
|
|
113
|
+
add_span_event(
|
|
114
|
+
get_current_span(),
|
|
115
|
+
"Returning session",
|
|
116
|
+
{"id": session.session_id, "multiplexed": session.is_multiplexed},
|
|
117
|
+
)
|
|
118
|
+
|
|
119
|
+
# No action is needed for multiplexed sessions: the session
|
|
120
|
+
# pool is only used for managing non-multiplexed sessions,
|
|
121
|
+
# since they can only process one transaction at a time.
|
|
122
|
+
if not session.is_multiplexed:
|
|
123
|
+
self._pool.put(session)
|
|
124
|
+
|
|
125
|
+
def _get_multiplexed_session(self) -> Session:
|
|
126
|
+
"""Returns a multiplexed session from the database session manager.
|
|
127
|
+
If the multiplexed session is not defined, creates a new multiplexed
|
|
128
|
+
session and starts a maintenance thread to periodically delete and
|
|
129
|
+
recreate it so that it remains valid. Otherwise, simply returns the
|
|
130
|
+
current multiplexed session.
|
|
131
|
+
:raises MethodNotImplemented:
|
|
132
|
+
if multiplexed sessions are not supported.
|
|
133
|
+
:rtype: :class:`~google.cloud.spanner_v1.session.Session`
|
|
134
|
+
:returns: a multiplexed session.
|
|
135
|
+
"""
|
|
136
|
+
|
|
137
|
+
with self._multiplexed_session_lock:
|
|
138
|
+
if self._multiplexed_session is None:
|
|
139
|
+
self._multiplexed_session = self._build_multiplexed_session()
|
|
140
|
+
|
|
141
|
+
# Build and start a thread to maintain the multiplexed session.
|
|
142
|
+
self._multiplexed_session_maintenance_thread = (
|
|
143
|
+
self._build_maintenance_thread()
|
|
144
|
+
)
|
|
145
|
+
self._multiplexed_session_maintenance_thread.start()
|
|
146
|
+
|
|
147
|
+
return self._multiplexed_session
|
|
148
|
+
|
|
149
|
+
def _build_multiplexed_session(self) -> Session:
|
|
150
|
+
"""Builds and returns a new multiplexed session for the database session manager.
|
|
151
|
+
:raises MethodNotImplemented:
|
|
152
|
+
if multiplexed sessions are not supported.
|
|
153
|
+
:rtype: :class:`~google.cloud.spanner_v1.session.Session`
|
|
154
|
+
:returns: a new multiplexed session.
|
|
155
|
+
"""
|
|
156
|
+
|
|
157
|
+
session = Session(
|
|
158
|
+
database=self._database,
|
|
159
|
+
database_role=self._database.database_role,
|
|
160
|
+
is_multiplexed=True,
|
|
161
|
+
)
|
|
162
|
+
|
|
163
|
+
session.create()
|
|
164
|
+
|
|
165
|
+
self._logger.info("Created multiplexed session.")
|
|
166
|
+
|
|
167
|
+
return session
|
|
168
|
+
|
|
169
|
+
def _disable_multiplexed_sessions(self) -> None:
|
|
170
|
+
"""Disables multiplexed sessions for all transactions."""
|
|
171
|
+
|
|
172
|
+
self._multiplexed_session = None
|
|
173
|
+
self._is_multiplexed_sessions_disabled_event.set()
|
|
174
|
+
self._database.session_options.disable_multiplexed(self._logger)
|
|
175
|
+
|
|
176
|
+
def _build_maintenance_thread(self) -> threading.Thread:
|
|
177
|
+
"""Builds and returns a multiplexed session maintenance thread for
|
|
178
|
+
the database session manager. This thread will periodically delete
|
|
179
|
+
and recreate the multiplexed session to ensure that it is always valid.
|
|
180
|
+
:rtype: :class:`threading.Thread`
|
|
181
|
+
:returns: a multiplexed session maintenance thread.
|
|
182
|
+
"""
|
|
183
|
+
|
|
184
|
+
# Use a weak reference to the database session manager to avoid
|
|
185
|
+
# creating a circular reference that would prevent the database
|
|
186
|
+
# session manager from being garbage collected.
|
|
187
|
+
session_manager_ref = weakref.ref(self)
|
|
188
|
+
|
|
189
|
+
return threading.Thread(
|
|
190
|
+
target=self._maintain_multiplexed_session,
|
|
191
|
+
name=f"maintenance-multiplexed-session-{self._multiplexed_session.name}",
|
|
192
|
+
args=[session_manager_ref],
|
|
193
|
+
daemon=True,
|
|
194
|
+
)
|
|
195
|
+
|
|
196
|
+
@staticmethod
|
|
197
|
+
def _maintain_multiplexed_session(session_manager_ref) -> None:
|
|
198
|
+
"""Maintains the multiplexed session for the database session manager.
|
|
199
|
+
This method will delete and recreate the referenced database session manager's
|
|
200
|
+
multiplexed session to ensure that it is always valid. The method will run until
|
|
201
|
+
the database session manager is deleted, the multiplexed session is deleted, or
|
|
202
|
+
building a multiplexed session fails.
|
|
203
|
+
:type session_manager_ref: :class:`_weakref.ReferenceType`
|
|
204
|
+
:param session_manager_ref: A weak reference to the database session manager.
|
|
205
|
+
"""
|
|
206
|
+
|
|
207
|
+
session_manager = session_manager_ref()
|
|
208
|
+
if session_manager is None:
|
|
209
|
+
return
|
|
210
|
+
|
|
211
|
+
polling_interval_seconds = (
|
|
212
|
+
session_manager._MAINTENANCE_THREAD_POLLING_INTERVAL.total_seconds()
|
|
213
|
+
)
|
|
214
|
+
refresh_interval_seconds = (
|
|
215
|
+
session_manager._MAINTENANCE_THREAD_REFRESH_INTERVAL.total_seconds()
|
|
216
|
+
)
|
|
217
|
+
|
|
218
|
+
session_created_time = time.time()
|
|
219
|
+
|
|
220
|
+
while True:
|
|
221
|
+
# Terminate the thread is the database session manager has been deleted.
|
|
222
|
+
session_manager = session_manager_ref()
|
|
223
|
+
if session_manager is None:
|
|
224
|
+
return
|
|
225
|
+
|
|
226
|
+
# Terminate the thread if the use of multiplexed sessions has been disabled.
|
|
227
|
+
if session_manager._is_multiplexed_sessions_disabled_event.is_set():
|
|
228
|
+
return
|
|
229
|
+
|
|
230
|
+
# Wait for until the refresh interval has elapsed.
|
|
231
|
+
if time.time() - session_created_time < refresh_interval_seconds:
|
|
232
|
+
time.sleep(polling_interval_seconds)
|
|
233
|
+
continue
|
|
234
|
+
|
|
235
|
+
with session_manager._multiplexed_session_lock:
|
|
236
|
+
session_manager._multiplexed_session.delete()
|
|
237
|
+
|
|
238
|
+
try:
|
|
239
|
+
session_manager._multiplexed_session = (
|
|
240
|
+
session_manager._build_multiplexed_session()
|
|
241
|
+
)
|
|
242
|
+
|
|
243
|
+
# Disable multiplexed sessions for all transactions and terminate
|
|
244
|
+
# the thread if building a multiplexed session fails.
|
|
245
|
+
except MethodNotImplemented:
|
|
246
|
+
session_manager._disable_multiplexed_sessions()
|
|
247
|
+
return
|
|
248
|
+
|
|
249
|
+
session_created_time = time.time()
|
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
{
|
|
2
|
+
"comment": "This file maps proto services/RPCs to the corresponding library clients/methods",
|
|
3
|
+
"language": "python",
|
|
4
|
+
"libraryPackage": "google.cloud.spanner_v1",
|
|
5
|
+
"protoPackage": "google.spanner.v1",
|
|
6
|
+
"schema": "1.0",
|
|
7
|
+
"services": {
|
|
8
|
+
"Spanner": {
|
|
9
|
+
"clients": {
|
|
10
|
+
"grpc": {
|
|
11
|
+
"libraryClient": "SpannerClient",
|
|
12
|
+
"rpcs": {
|
|
13
|
+
"BatchCreateSessions": {
|
|
14
|
+
"methods": [
|
|
15
|
+
"batch_create_sessions"
|
|
16
|
+
]
|
|
17
|
+
},
|
|
18
|
+
"BatchWrite": {
|
|
19
|
+
"methods": [
|
|
20
|
+
"batch_write"
|
|
21
|
+
]
|
|
22
|
+
},
|
|
23
|
+
"BeginTransaction": {
|
|
24
|
+
"methods": [
|
|
25
|
+
"begin_transaction"
|
|
26
|
+
]
|
|
27
|
+
},
|
|
28
|
+
"Commit": {
|
|
29
|
+
"methods": [
|
|
30
|
+
"commit"
|
|
31
|
+
]
|
|
32
|
+
},
|
|
33
|
+
"CreateSession": {
|
|
34
|
+
"methods": [
|
|
35
|
+
"create_session"
|
|
36
|
+
]
|
|
37
|
+
},
|
|
38
|
+
"DeleteSession": {
|
|
39
|
+
"methods": [
|
|
40
|
+
"delete_session"
|
|
41
|
+
]
|
|
42
|
+
},
|
|
43
|
+
"ExecuteBatchDml": {
|
|
44
|
+
"methods": [
|
|
45
|
+
"execute_batch_dml"
|
|
46
|
+
]
|
|
47
|
+
},
|
|
48
|
+
"ExecuteSql": {
|
|
49
|
+
"methods": [
|
|
50
|
+
"execute_sql"
|
|
51
|
+
]
|
|
52
|
+
},
|
|
53
|
+
"ExecuteStreamingSql": {
|
|
54
|
+
"methods": [
|
|
55
|
+
"execute_streaming_sql"
|
|
56
|
+
]
|
|
57
|
+
},
|
|
58
|
+
"GetSession": {
|
|
59
|
+
"methods": [
|
|
60
|
+
"get_session"
|
|
61
|
+
]
|
|
62
|
+
},
|
|
63
|
+
"ListSessions": {
|
|
64
|
+
"methods": [
|
|
65
|
+
"list_sessions"
|
|
66
|
+
]
|
|
67
|
+
},
|
|
68
|
+
"PartitionQuery": {
|
|
69
|
+
"methods": [
|
|
70
|
+
"partition_query"
|
|
71
|
+
]
|
|
72
|
+
},
|
|
73
|
+
"PartitionRead": {
|
|
74
|
+
"methods": [
|
|
75
|
+
"partition_read"
|
|
76
|
+
]
|
|
77
|
+
},
|
|
78
|
+
"Read": {
|
|
79
|
+
"methods": [
|
|
80
|
+
"read"
|
|
81
|
+
]
|
|
82
|
+
},
|
|
83
|
+
"Rollback": {
|
|
84
|
+
"methods": [
|
|
85
|
+
"rollback"
|
|
86
|
+
]
|
|
87
|
+
},
|
|
88
|
+
"StreamingRead": {
|
|
89
|
+
"methods": [
|
|
90
|
+
"streaming_read"
|
|
91
|
+
]
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
},
|
|
95
|
+
"grpc-async": {
|
|
96
|
+
"libraryClient": "SpannerAsyncClient",
|
|
97
|
+
"rpcs": {
|
|
98
|
+
"BatchCreateSessions": {
|
|
99
|
+
"methods": [
|
|
100
|
+
"batch_create_sessions"
|
|
101
|
+
]
|
|
102
|
+
},
|
|
103
|
+
"BatchWrite": {
|
|
104
|
+
"methods": [
|
|
105
|
+
"batch_write"
|
|
106
|
+
]
|
|
107
|
+
},
|
|
108
|
+
"BeginTransaction": {
|
|
109
|
+
"methods": [
|
|
110
|
+
"begin_transaction"
|
|
111
|
+
]
|
|
112
|
+
},
|
|
113
|
+
"Commit": {
|
|
114
|
+
"methods": [
|
|
115
|
+
"commit"
|
|
116
|
+
]
|
|
117
|
+
},
|
|
118
|
+
"CreateSession": {
|
|
119
|
+
"methods": [
|
|
120
|
+
"create_session"
|
|
121
|
+
]
|
|
122
|
+
},
|
|
123
|
+
"DeleteSession": {
|
|
124
|
+
"methods": [
|
|
125
|
+
"delete_session"
|
|
126
|
+
]
|
|
127
|
+
},
|
|
128
|
+
"ExecuteBatchDml": {
|
|
129
|
+
"methods": [
|
|
130
|
+
"execute_batch_dml"
|
|
131
|
+
]
|
|
132
|
+
},
|
|
133
|
+
"ExecuteSql": {
|
|
134
|
+
"methods": [
|
|
135
|
+
"execute_sql"
|
|
136
|
+
]
|
|
137
|
+
},
|
|
138
|
+
"ExecuteStreamingSql": {
|
|
139
|
+
"methods": [
|
|
140
|
+
"execute_streaming_sql"
|
|
141
|
+
]
|
|
142
|
+
},
|
|
143
|
+
"GetSession": {
|
|
144
|
+
"methods": [
|
|
145
|
+
"get_session"
|
|
146
|
+
]
|
|
147
|
+
},
|
|
148
|
+
"ListSessions": {
|
|
149
|
+
"methods": [
|
|
150
|
+
"list_sessions"
|
|
151
|
+
]
|
|
152
|
+
},
|
|
153
|
+
"PartitionQuery": {
|
|
154
|
+
"methods": [
|
|
155
|
+
"partition_query"
|
|
156
|
+
]
|
|
157
|
+
},
|
|
158
|
+
"PartitionRead": {
|
|
159
|
+
"methods": [
|
|
160
|
+
"partition_read"
|
|
161
|
+
]
|
|
162
|
+
},
|
|
163
|
+
"Read": {
|
|
164
|
+
"methods": [
|
|
165
|
+
"read"
|
|
166
|
+
]
|
|
167
|
+
},
|
|
168
|
+
"Rollback": {
|
|
169
|
+
"methods": [
|
|
170
|
+
"rollback"
|
|
171
|
+
]
|
|
172
|
+
},
|
|
173
|
+
"StreamingRead": {
|
|
174
|
+
"methods": [
|
|
175
|
+
"streaming_read"
|
|
176
|
+
]
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
},
|
|
180
|
+
"rest": {
|
|
181
|
+
"libraryClient": "SpannerClient",
|
|
182
|
+
"rpcs": {
|
|
183
|
+
"BatchCreateSessions": {
|
|
184
|
+
"methods": [
|
|
185
|
+
"batch_create_sessions"
|
|
186
|
+
]
|
|
187
|
+
},
|
|
188
|
+
"BatchWrite": {
|
|
189
|
+
"methods": [
|
|
190
|
+
"batch_write"
|
|
191
|
+
]
|
|
192
|
+
},
|
|
193
|
+
"BeginTransaction": {
|
|
194
|
+
"methods": [
|
|
195
|
+
"begin_transaction"
|
|
196
|
+
]
|
|
197
|
+
},
|
|
198
|
+
"Commit": {
|
|
199
|
+
"methods": [
|
|
200
|
+
"commit"
|
|
201
|
+
]
|
|
202
|
+
},
|
|
203
|
+
"CreateSession": {
|
|
204
|
+
"methods": [
|
|
205
|
+
"create_session"
|
|
206
|
+
]
|
|
207
|
+
},
|
|
208
|
+
"DeleteSession": {
|
|
209
|
+
"methods": [
|
|
210
|
+
"delete_session"
|
|
211
|
+
]
|
|
212
|
+
},
|
|
213
|
+
"ExecuteBatchDml": {
|
|
214
|
+
"methods": [
|
|
215
|
+
"execute_batch_dml"
|
|
216
|
+
]
|
|
217
|
+
},
|
|
218
|
+
"ExecuteSql": {
|
|
219
|
+
"methods": [
|
|
220
|
+
"execute_sql"
|
|
221
|
+
]
|
|
222
|
+
},
|
|
223
|
+
"ExecuteStreamingSql": {
|
|
224
|
+
"methods": [
|
|
225
|
+
"execute_streaming_sql"
|
|
226
|
+
]
|
|
227
|
+
},
|
|
228
|
+
"GetSession": {
|
|
229
|
+
"methods": [
|
|
230
|
+
"get_session"
|
|
231
|
+
]
|
|
232
|
+
},
|
|
233
|
+
"ListSessions": {
|
|
234
|
+
"methods": [
|
|
235
|
+
"list_sessions"
|
|
236
|
+
]
|
|
237
|
+
},
|
|
238
|
+
"PartitionQuery": {
|
|
239
|
+
"methods": [
|
|
240
|
+
"partition_query"
|
|
241
|
+
]
|
|
242
|
+
},
|
|
243
|
+
"PartitionRead": {
|
|
244
|
+
"methods": [
|
|
245
|
+
"partition_read"
|
|
246
|
+
]
|
|
247
|
+
},
|
|
248
|
+
"Read": {
|
|
249
|
+
"methods": [
|
|
250
|
+
"read"
|
|
251
|
+
]
|
|
252
|
+
},
|
|
253
|
+
"Rollback": {
|
|
254
|
+
"methods": [
|
|
255
|
+
"rollback"
|
|
256
|
+
]
|
|
257
|
+
},
|
|
258
|
+
"StreamingRead": {
|
|
259
|
+
"methods": [
|
|
260
|
+
"streaming_read"
|
|
261
|
+
]
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
# Copyright 2022 Google LLC
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
#
|
|
16
|
+
__version__ = "3.55.0" # {x-release-please-version}
|