Skip to content
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 31 additions & 0 deletions src/migrations/env.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,37 @@
from src.models import Base


# --- START sqlalchemy-spanner workarounds ---
from google.cloud.sqlalchemy_spanner.sqlalchemy_spanner import SpannerDialect


original_get_multi_pk = SpannerDialect.get_multi_pk_constraint
original__get_table_filter_query = SpannerDialect._get_table_filter_query


def patched_get_multi_pk_constraint(self, connection, **kw):
"""Intercepts the PK constraint dictionary to inject the missing 'name' key."""
result = original_get_multi_pk(self, connection, **kw)
for pk_dict in result.values():
if "name" not in pk_dict:
pk_dict["name"] = None
return result


def patched__get_table_filter_query(
self, filter_names, *args, **kwargs
):
"""Pass None for filter names instead of empty list to avoid invalid SQL generation"""
if len(filter_names) == 0:
filter_names = None

return original__get_table_filter_query(self, filter_names, *args, **kwargs)


SpannerDialect._get_table_filter_query = patched__get_table_filter_query
SpannerDialect.get_multi_pk_constraint = patched_get_multi_pk_constraint
# --- END of workarounds ---

# this is the Alembic Config object, which provides
# access to the values within the .ini file in use.
config = context.config
Expand Down