Source code for mcp_ohmy_sql.db.relational.schema_1_model

# -*- coding: utf-8 -*-

import typing as T

from pydantic import Field
from ...lazy_import import sa

from ...constants import LLMTypeEnum

from ..metadata import (
    ObjectTypeEnum,
    BaseInfo,
    BaseColumnInfo,
    BaseTableInfo,
    BaseSchemaInfo,
    BaseDatabaseInfo,
)

_ = sa.ForeignKey


[docs] class ForeignKeyInfo(BaseInfo): """ Ref: https://docs.sqlalchemy.org/en/20/core/constraints.html#sqlalchemy.schema.ForeignKey """ object_type: ObjectTypeEnum = Field(default=ObjectTypeEnum.FOREIGN_KEY) onupdate: T.Optional[str] = Field(default=None) ondelete: T.Optional[str] = Field(default=None) deferrable: T.Optional[bool] = Field(default=None) initially: T.Optional[str] = Field(default=None)
_ = sa.Column
[docs] class ColumnInfo(BaseColumnInfo): """ Ref: https://docs.sqlalchemy.org/en/20/core/metadata.html#sqlalchemy.schema.Column """ fullname: str = Field() type: str = Field() llm_type: T.Optional[LLMTypeEnum] = Field(default=None) primary_key: bool = Field(default=False) nullable: bool = Field(default=False) index: T.Optional[bool] = Field(default=None) unique: T.Optional[bool] = Field(default=None) system: bool = Field(default=False) doc: T.Optional[str] = Field(default=None) autoincrement: str = Field(default="") constraints: list[str] = Field(default_factory=list) foreign_keys: list[ForeignKeyInfo] = Field(default_factory=list) computed: bool = Field(default=False) identity: bool = Field(default=False)
_ = sa.Table
[docs] class TableInfo(BaseTableInfo): """ Ref: https://docs.sqlalchemy.org/en/20/core/metadata.html#sqlalchemy.schema.Table """ fullname: str = Field() primary_key: list[str] = Field(default_factory=list) foreign_keys: list[ForeignKeyInfo] = Field(default_factory=list) columns: list[ColumnInfo] = Field(default_factory=list)
[docs] class SchemaInfo(BaseSchemaInfo): tables: list[TableInfo] = Field(default_factory=list)
[docs] class DatabaseInfo(BaseDatabaseInfo): schemas: list[SchemaInfo] = Field(default_factory=list)