diff --git a/google/cloud/sqlalchemy_spanner/sqlalchemy_spanner.py b/google/cloud/sqlalchemy_spanner/sqlalchemy_spanner.py index 6754931a..c5aa9b87 100644 --- a/google/cloud/sqlalchemy_spanner/sqlalchemy_spanner.py +++ b/google/cloud/sqlalchemy_spanner/sqlalchemy_spanner.py @@ -703,6 +703,10 @@ def create_connect_args(self, url): or `spanner:///projects/{project-id}/instances/{instance-id}`. For the latter, database operations will be not be possible and if required a new engine with database-id set will need to be created. + If you want to disble route to leader, pass options as following: + engine = create_engine( + "spanner+spanner:///projects/project-id/instances/instance-id/databases/database-id", + connect_args={'route_to_leader_enabled': False}) """ match = re.match( ( diff --git a/test/test_suite_13.py b/test/test_suite_13.py index b0cddf59..c1c28390 100644 --- a/test/test_suite_13.py +++ b/test/test_suite_13.py @@ -1654,6 +1654,24 @@ def test_user_agent(self): ) +class RouteToLeaderEnabledTest(SpannerSpecificTestBase): + """ + Check that SQLAlchemy dialect passes correct + route_to_leader_enabled to Client. + """ + + def test_route_to_leader(self): + engine = create_engine( + "spanner:///projects/project-id/instances/instance-id/" + + "databases/database-id", + connect_args={"route_to_leader_enabled": False}, + ) + with engine.connect() as connection: + assert ( + connection.connection.instance._client.route_to_leader_enabled is False + ) + + class ExecutionOptionsReadOnlyTest(fixtures.TestBase): """ Check that `execution_options()` method correctly diff --git a/test/test_suite_14.py b/test/test_suite_14.py index e4183821..54e373c5 100644 --- a/test/test_suite_14.py +++ b/test/test_suite_14.py @@ -1922,6 +1922,26 @@ def test_user_agent(self): ) +class RouteToLeaderEnabledTest(fixtures.TestBase): + """ + SPANNER TEST: + + Check that SQLAlchemy dialect passes correct + route_to_leader_enabled to Client. + """ + + def test_route_to_leader(self): + engine = create_engine( + "spanner:///projects/project-id/instances/instance-id/" + + "databases/database-id", + connect_args={"route_to_leader_enabled": False}, + ) + with engine.connect() as connection: + assert ( + connection.connection.instance._client.route_to_leader_enabled is False + ) + + class SimpleUpdateDeleteTest(_SimpleUpdateDeleteTest): """ SPANNER OVERRIDE: diff --git a/test/test_suite_20.py b/test/test_suite_20.py index 4902b3ab..bcf81c09 100644 --- a/test/test_suite_20.py +++ b/test/test_suite_20.py @@ -3113,6 +3113,47 @@ def test_create_engine_wo_database(self): assert connection.connection.database is None +class RouteToLeaderEnabledTest(fixtures.TestBase): + """ + SPANNER TEST: + + Check that SQLAlchemy dialect passes correct + route_to_leader_enabled to Client. + """ + + def test_route_to_leader_disabled(self): + engine = create_engine( + "spanner:///projects/project-id/instances/instance-id/" + + "databases/database-id", + connect_args={"route_to_leader_enabled": False}, + ) + with engine.connect() as connection: + assert ( + connection.connection.instance._client.route_to_leader_enabled is False + ) + + def test_route_to_leader_enabled(self): + engine = create_engine( + "spanner:///projects/project-id/instances/instance-id/" + + "databases/database-id", + connect_args={"route_to_leader_enabled": True}, + ) + with engine.connect() as connection: + assert ( + connection.connection.instance._client.route_to_leader_enabled is True + ) + + def test_route_to_leader_default(self): + engine = create_engine( + "spanner:///projects/project-id/instances/instance-id/" + + "databases/database-id" + ) + with engine.connect() as connection: + assert ( + connection.connection.instance._client.route_to_leader_enabled is True + ) + + class ReturningTest(fixtures.TestBase): def setUp(self): self._engine = create_engine(get_db_url())
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies: