You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
[sqlalchemy-spanner]: _designate_type() raises KeyError on unrecognized Spanner column types instead of falling back to NullType #18839
I determined this is the correct repository in which to report this bug.
Summary of the issue
SpannerDialect._designate_type() performs an unguarded _type_map[str_repr] lookup and raises KeyError whenever a reflected table (or any table in the same schema during get_multi_columns()) contains a Spanner column type not in _type_map (such as INTERVAL, PROTO<...>, ENUM<...>, or STRUCT<...>, as well as UUID and TOKENLIST prior to 1.20.0).
Environment details
OS: Linux
Python version: 3.13
sqlalchemy-spanner version: 1.17.2 and main / 1.20.1 (eb8a76628adf10093959600071a18f50285c2ecf)
While UUID (#17913) and TOKENLIST (#17911) were added to _type_map in 1.20.0, _designate_type() still raises an unhandled KeyError for any other valid Spanner column type not in _type_map (e.g. INTERVAL, PROTO<...>, ENUM<...>, STRUCT<...>). Because get_multi_columns() reflects all tables in a schema when filter_names=None (or when MetaData.reflect() reflects a schema), a single table with an unrecognized column type crashes reflection for the entire schema.
In SQLAlchemy's built-in dialects (e.g., PostgreSQL, MySQL, SQLite, Oracle), unrecognized column types during reflection emit sa.util.warn(f"Did not recognize type '{str_repr}' ...") and return sa.types.NullType(). (See also #16622.)
_designate_type() maps supported Spanner types and falls back to sa.types.NullType() with sa.util.warn(...) for unrecognized column types instead of raising KeyError.
Activity
fix(sqlalchemy-spanner): reflect vector columns and unrecognized colu…