"""Spanner metadata queries using INFORMATION_SCHEMA."""
from typing import TYPE_CHECKING, Any, ClassVar, cast
from mypy_extensions import mypyc_attr
from sqlspec.data_dictionary import (
ColumnMetadata,
DDLResult,
ForeignKeyMetadata,
IndexMetadata,
MetadataCapability,
MetadataCapabilityProfile,
MetadataFidelity,
MetadataRisk,
MetadataSource,
MetadataSupport,
ObjectIdentity,
TableMetadata,
VersionInfo,
)
from sqlspec.driver import SyncDataDictionaryBase
if TYPE_CHECKING:
from collections.abc import Sequence
from sqlspec.adapters.spanner.driver import SpannerSyncDriver
__all__ = ("SpannerDataDictionary",)
_DEFAULT_METADATA_DOMAINS = (
"schemas",
"objects",
"tables",
"columns",
"constraints",
"indexes",
"views",
"routines",
"privileges",
"dependencies",
"ddl",
"system",
)
_SPANNER_INFORMATION_SCHEMA_WARNINGS = (
"Spanner information schema rows are filtered by IAM and database role privileges.",
)
_SPANNER_POSTGRESQL_WARNING = "PostgreSQL-dialect Spanner metadata requires live runtime coverage before enablement."
_SPANNER_DDL_WARNINGS = (
"Spanner DDL metadata uses the Database Admin API and requires database DDL permissions.",
"Pending schema updates might not be reflected in the returned DDL.",
)
_SPANNER_SYSTEM_WARNINGS = (
"Spanner SPANNER_SYS metadata is opt-in, permission-aware, and intended for operational diagnostics.",
)
@mypyc_attr(allow_interpreted_subclasses=True, native_class=False)
class SpannerDataDictionary(SyncDataDictionaryBase):
"""Fetch table, column, and index metadata from Spanner."""
dialect: ClassVar[str] = "spanner"
def __init__(self) -> None:
super().__init__()