Source code for sqlspec.adapters.spanner.data_dictionary

"""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__()
def get_version(self, driver: "SpannerSyncDriver") -> "VersionInfo | None": """Get Spanner version information. Args: driver: Spanner driver instance. Returns: None since Spanner does not expose version information. """ _ = driver return None