8000 feat: support transactions · googleapis/python-spanner-django@67b2bbc · GitHub
[go: up one dir, main page]

Skip t 10000 o content

Commit 67b2bbc

Browse files
committed
feat: support transactions
1 parent 9f19b38 commit 67b2bbc

File tree

1 file changed

+25
-29
lines changed

1 file changed

+25
-29
lines changed

django_spanner/features.py

Lines changed: 25 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ class DatabaseFeatures(BaseDatabaseFeatures):
3434
supports_select_for_update_with_limit = False
3535
supports_sequence_reset = False
3636
supports_timezones = False
37-
supports_transactions = False
37+
supports_transactions = True
3838
if USE_EMULATOR:
3939
# Emulator does not support json.
4040
supports_json_field = False
@@ -70,8 +70,7 @@ class DatabaseFeatures(BaseDatabaseFeatures):
7070
"fixtures_regress.tests.TestFixtures.test_loaddata_raises_error_when_fixture_has_invalid_foreign_key",
7171
# Spanner does not support empty list of DML statement.
7272
"backends.tests.BackendTestCase.test_cursor_executemany_with_empty_params_list",
73-
# No Django transaction management in Spanner.
74-
"basic.tests.SelectOnSaveTests.test_select_on_save_lying_update",
73+
# "basic.tests.SelectOnSaveTests.test_select_on_save_lying_update",
7574
# django_spanner monkey patches AutoField to have a default value.
7675
"basic.tests.ModelTest.test_hash",
7776
"custom_managers.tests.CustomManagerTests.test_slow_removal_through_specified_fk_related_manager",
@@ -259,10 +258,8 @@ class DatabaseFeatures(BaseDatabaseFeatures):
259258
"ordering.tests.OrderingTests.test_random_ordering",
260259
# casting DateField to DateTimeField adds an unexpected hour:
261260
# https://github.com/googleapis/python-spanner-django/issues/260
262-
"db_functions.comparison.test_cast.CastTests.test_cast_from_db_date_to_datetime",
263-
# Tests that fail during tear down on databases that don't support
264-
# transactions: https://github.com/googleapis/python-spanner-django/issues/271
265-
"contenttypes_tests.test_models.ContentTypesMultidbTests.test_multidb",
261+
"db_functions.comparison.test_cast.CastTests.test_cast_from_db_date_to_datetime",``
262+
# "contenttypes_tests.test_models.ContentTypesMultidbTests.test_multidb",
266263
# Tests that by-pass using django_spanner and generate
267264
# invalid DDL: https://github.com/googleapis/python-spanner-django/issues/298
268265
"cache.tests.CreateCacheTableForDBCacheTests",
@@ -272,20 +269,19 @@ class DatabaseFeatures(BaseDatabaseFeatures):
272269
"delete.tests.DeletionTests.test_model_delete_returns_num_rows",
273270
"delete.tests.DeletionTests.test_deletion_order",
274271
"delete.tests.FastDeleteTests.test_fast_delete_empty_no_update_can_self_select",
275-
# Tests that require transactions.
276-
"transaction_hooks.tests.TestConnectionOnCommit.test_does_not_execute_if_transaction_rolled_back",
277-
"transaction_hooks.tests.TestConnectionOnCommit.test_hooks_cleared_after_rollback",
278-
"transaction_hooks.tests.TestConnectionOnCommit.test_hooks_cleared_on_reconnect",
279-
"transaction_hooks.tests.TestConnectionOnCommit.test_no_hooks_run_from_failed_transaction",
280-
"transaction_hooks.tests.TestConnectionOnCommit.test_no_savepoints_atomic_merged_with_outer",
272+
# "transaction_hooks.tests.TestConnectionOnCommit.test_does_not_execute_if_transaction_rolled_back",
273+
# "transaction_hooks.tests.TestConnectionOnCommit.test_hooks_cleared_after_rollback",
274+
# "transaction_hooks.tests.TestConnectionOnCommit.test_hooks_cleared_on_reconnect",
275+
# "transaction_hooks.tests.TestConnectionOnCommit.test_no_hooks_run_from_failed_transaction",
276+
# "transaction_hooks.tests.TestConnectionOnCommit.test_no_savepoints_atomic_merged_with_outer",
281277
# Tests that require savepoints.
282278
"get_or_create.tests.UpdateOrCreateTests.test_integrity",
283279
"get_or_create.tests.UpdateOrCreateTests.test_manual_primary_key_test",
284280
"get_or_create.tests.UpdateOrCreateTestsWithManualPKs.test_create_with_duplicate_primary_key",
285-
"test_utils.tests.TestBadSetUpTestData.test_failure_in_setUpTestData_should_rollback_transaction",
286-
"transaction_hooks.tests.TestConnectionOnCommit.test_discards_hooks_from_rolled_back_savepoint",
287-
"transaction_hooks.tests.TestConnectionOnCommit.test_inner_savepoint_rolled_back_with_outer",
288-
"transaction_hooks.tests.TestConnectionOnCommit.test_inner_savepoint_does_not_affect_outer",
281+
# "test_utils.tests.TestBadSetUpTestData.test_failure_in_setUpTestData_should_rollback_transaction",
282+
# "transaction_hooks.tests.TestConnectionOnCommit.test_discards_hooks_from_rolled_back_savepoint",
283+
# "transaction_hooks.tests.TestConnectionOnCommit.test_inner_savepoint_rolled_back_with_outer",
284+
# "transaction_hooks.tests.TestConnectionOnCommit.test_inner_savepoint_does_not_affect_outer",
289285
# No sequence for AutoField in Spanner.
290286
"introspection.tests.IntrospectionTests.test_sequence_list",
291287
# pyformat parameters not supported on INSERT:
@@ -341,7 +337,7 @@ class DatabaseFeatures(BaseDatabaseFeatures):
341337
"schema.tests.SchemaTests.test_alter_int_pk_to_int_unique",
342338
# Spanner limitation: migrations aren't atomic since Spanner doesn't
343339
# support transactions.
344-
"migrations.test_executor.ExecutorTests.test_atomic_operation_in_non_atomic_migration",
340+
# "migrations.test_executor.ExecutorTests.test_atomic_operation_in_non_atomic_migration",
345341
# changing a not null constraint isn't allowed if it affects an index:
346342
# https://github.com/googleapis/python-spanner-django/issues/378
347343
"migrations.test_operations.OperationTests.test_alter_field_with_index",
@@ -353,7 +349,7 @@ class DatabaseFeatures(BaseDatabaseFeatures):
353349
"multiple_database.tests.AuthTestCase",
354350
# This test isn't isolated on databases like Spanner that don't
355351
# support transactions: https://code.djangoproject.com/ticket/31413
356-
"migrations.test_loader.LoaderTests.test_loading_squashed",
352+
# "migrations.test_loader.LoaderTests.test_loading_squashed",
357353
# Probably due to django-spanner setting a default on AutoField:
358354
# https://github.com/googleapis/python-spanner-django/issues/422
359355
"model_inheritance_regress.tests.ModelInheritanceTest.test_issue_6755",
@@ -448,8 +444,8 @@ class DatabaseFeatures(BaseDatabaseFeatures):
448444
# appears in the GROUP BY clause.
449445
"annotations.tests.NonAggregateAnnotationTestCase.test_grouping_by_q_expression_annotation",
450446
# No Django transaction management in Spanner.
451-
"transactions.tests.DisableDurabiltityCheckTests.test_nested_both_durable",
452-
"transactions.tests.DisableDurabiltityCheckTests.test_nested_inner_durable",
447+
# "transactions.tests.DisableDurabiltityCheckTests.test_nested_both_durable",
448+
# "transactions.tests.DisableDurabiltityCheckTests.test_nested_inner_durable",
453449
# Tests that expect it to be empty untill saved in db.
454450
"test_utils.test_testcase.TestDataTests.test_class_attribute_identity",
455451
"model_fields.test_jsonfield.TestSerialization.test_dumping",
@@ -469,10 +465,10 @@ class DatabaseFeatures(BaseDatabaseFeatures):
469465
# Spanner doesn't support random ordering.
470466
"aggregation.tests.AggregateTestCase.test_aggregation_random_ordering",
471467
# Tests that require transactions.
472-
"test_utils.tests.CaptureOnCommitCallbacksTests.test_execute",
473-
"test_utils.tests.CaptureOnCommitCallbacksTests.test_no_arguments",
474-
"test_utils.tests.CaptureOnCommitCallbacksTests.test_pre_callback",
475-
"test_utils.tests.CaptureOnCommitCallbacksTests.test_using",
468+
# "test_utils.tests.CaptureOnCommitCallbacksTests.test_execute",
469+
# "test_utils.tests.CaptureOnCommitCallbacksTests.test_no_arguments",
470+
# "test_utils.tests.CaptureOnCommitCallbacksTests.test_pre_callback",
471+
# "test_utils.tests.CaptureOnCommitCallbacksTests.test_using",
476472
# Field: GenericIPAddressField is mapped to String in Spanner
477473
"inspectdb.tests.InspectDBTestCase.test_field_types",
478474
# BigIntegerField is mapped to IntegerField in Spanner
@@ -497,7 +493,7 @@ class DatabaseFeatures(BaseDatabaseFeatures):
497493
# Some code isn't yet supported by the Spanner emulator.
498494
skip_tests += (
499495
# Emulator doesn't support views.
500-
"inspectdb.tests.InspectDBTransactionalTests.test_include_views",
496+
# "inspectdb.tests.InspectDBTransactionalTests.test_include_views",
501497
"introspection.tests.IntrospectionTests.test_table_names_with_views",
502498
# Check constraints are not supported by Spanner emulator.
503499
"constraints.tests.CheckConstraintTests.test_database_constraint", # noqa
@@ -1203,7 +1199,7 @@ class DatabaseFeatures(BaseDatabaseFeatures):
12031199
"db_functions.text.test_upper.UpperTests.test_basic", # noqa
12041200
"db_functions.text.test_upper.UpperTests.test_transform", # noqa
12051201
"defer_regress.tests.DeferAnnotateSelectRelatedTest.test_defer_annotate_select_related", # noqa
1206-
"delete_regress.tests.DeleteCascadeTransactionTests.test_inheritance", # noqa
1202+
# "delete_regress.tests.DeleteCascadeTransactionTests.test_inheritance", # noqa
12071203
"delete_regress.tests.DeleteLockingTest.test_concurrent_delete", # noqa
12081204
"expressions.test_queryset_values.ValuesExpressionsTests.test_chained_values_with_expression", # noqa
12091205
"expressions.test_queryset_values.ValuesExpressionsTests.test_values_expression", # noqa
@@ -1262,7 +1258,7 @@ class DatabaseFeatures(BaseDatabaseFeatures):
12621258
"expressions.tests.ValueTests.test_update_UUIDField_using_Value", # noqa
12631259
"fixtures.tests.FixtureLoadingTests.test_loaddata_error_message", # noqa
12641260
"fixtures.tests.FixtureLoadingTests.test_ambiguous_compressed_fixture", # noqa
1265-
"fixtures.tests.FixtureTransactionTests.test_format_discovery", # noqa
1261+
# "fixtures.tests.FixtureTransactionTests.test_format_discovery", # noqa
12661262
"fixtures.tests.ForwardReferenceTests.test_forward_reference_fk", # noqa
12671263
"fixtures.tests.ForwardReferenceTests.test_forward_reference_m2m", # noqa
12681264
"flatpages_tests.test_csrf.FlatpageCSRFTests.test_view_authenticated_flatpage", # noqa
@@ -1952,7 +1948,7 @@ class DatabaseFeatures(BaseDatabaseFeatures):
19521948
"test_client_regress.tests.SessionTests.test_session", # noqa
19531949
"test_client_regress.tests.SessionTests.test_session_initiated", # noqa
19541950
"timezones.tests.NewDatabaseTests.test_null_datetime",
1955-
"transactions.tests.NonAutocommitTests.test_orm_query_after_error_and_rollback", # noqa
1951+
# "transactions.tests.NonAutocommitTests.test_orm_query_after_error_and_rollback", # noqa
19561952
"update_only_fields.tests.UpdateOnlyFieldsTests.test_empty_update_fields", # noqa
19571953
"update_only_fields.tests.UpdateOnlyFieldsTests.test_num_queries_inheritance", # noqa
19581954
"update_only_fields.tests.UpdateOnlyFieldsTests.test_select_related_only_interaction", # noqa

0 commit comments

Comments
 (0)
0