Source code for sqlrules.markers
"""Dialect-oriented constraint markers for Annotated metadata.
Markers are extracted into IR as ``Constraint(field, marker.operator, marker.value)``.
Core does not translate these operators; dialect plugins register translators.
"""
from __future__ import annotations
from dataclasses import dataclass, field
from typing import Any, Protocol, runtime_checkable
[docs]
@runtime_checkable
class ConstraintMarker(Protocol):
"""Protocol for Annotated metadata that becomes a SQLRules IR constraint."""
operator: str
value: Any
[docs]
@dataclass(frozen=True, slots=True)
class JsonContains:
"""Require JSON/JSONB containment (``json_contains``)."""
value: Any
operator: str = field(default="json_contains", init=False, repr=False)
[docs]
@dataclass(frozen=True, slots=True)
class JsonHasKey:
"""Require a JSON object key (``json_has_key``)."""
value: Any
operator: str = field(default="json_has_key", init=False, repr=False)
[docs]
@dataclass(frozen=True, slots=True)
class ArrayContains:
"""Require array containment (``array_contains``)."""
value: Any
operator: str = field(default="array_contains", init=False, repr=False)
[docs]
@dataclass(frozen=True, slots=True)
class ArrayOverlap:
"""Require array overlap (``array_overlap``)."""
value: Any
operator: str = field(default="array_overlap", init=False, repr=False)
[docs]
@dataclass(frozen=True, slots=True)
class RangeContains:
"""Require range containment (``range_contains``)."""
value: Any
operator: str = field(default="range_contains", init=False, repr=False)
[docs]
@dataclass(frozen=True, slots=True)
class RangeOverlap:
"""Require range overlap (``range_overlap``)."""
value: Any
operator: str = field(default="range_overlap", init=False, repr=False)
[docs]
@dataclass(frozen=True, slots=True)
class FullTextMatch:
"""Require a full-text match (``fulltext_match``)."""
value: Any
operator: str = field(default="fulltext_match", init=False, repr=False)
__all__ = [
"ArrayContains",
"ArrayOverlap",
"ConstraintMarker",
"FullTextMatch",
"JsonContains",
"JsonHasKey",
"RangeContains",
"RangeOverlap",
]