"""代码符号定义模型。""" from __future__ import annotations from typing import Any, Optional from sqlalchemy import Integer, TIMESTAMP, VARCHAR, UniqueConstraint, func from sqlalchemy.orm import Mapped, mapped_column from .base import Base from .types import JSONB class SymbolDefinition(Base): __tablename__ = "symbol_definitions" __table_args__ = ( UniqueConstraint( "tenant_id", "file_path", "symbol_type", "symbol_name", "start_line", name="uq_symbol_definitions_tenant_file_type_name_line", ), ) id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True) file_path: Mapped[str] = mapped_column(VARCHAR(600), nullable=False, index=True) language: Mapped[str] = mapped_column(VARCHAR(20), nullable=False, index=True) symbol_type: Mapped[str] = mapped_column(VARCHAR(32), nullable=False, index=True) symbol_name: Mapped[str] = mapped_column(VARCHAR(255), nullable=False, index=True) qualified_name: Mapped[Optional[str]] = mapped_column(VARCHAR(700), nullable=True, index=True) start_line: Mapped[Optional[int]] = mapped_column(Integer, nullable=True, index=True) end_line: Mapped[Optional[int]] = mapped_column(Integer, nullable=True) signature: Mapped[Optional[str]] = mapped_column(VARCHAR(1000), nullable=True) docstring: Mapped[Optional[str]] = mapped_column(VARCHAR(2000), nullable=True) file_hash: Mapped[Optional[str]] = mapped_column(VARCHAR(64), nullable=True, index=True) source_mtime: Mapped[Optional[TIMESTAMP]] = mapped_column(TIMESTAMP, nullable=True) status: Mapped[str] = mapped_column(VARCHAR(20), nullable=False, default="active", index=True) payload: Mapped[Optional[Any]] = mapped_column(JSONB, nullable=True) last_indexed_at: Mapped[Optional[TIMESTAMP]] = mapped_column( TIMESTAMP, nullable=False, server_default=func.now(), index=True, )