"""DELETE statement builder.
Provides a fluent interface for building SQL DELETE queries with
parameter binding and validation.
"""
from typing import TYPE_CHECKING, Any
from sqlglot import exp
if TYPE_CHECKING:
from sqlglot.dialects.dialect import DialectType
from sqlspec.builder._base import BuiltQuery, QueryBuilder
from sqlspec.builder._dml import DeleteFromClauseMixin
from sqlspec.builder._explain import ExplainMixin
from sqlspec.builder._select import ReturningClauseMixin, WhereClauseMixin
from sqlspec.core import SQLResult
from sqlspec.exceptions import SQLBuilderError
__all__ = ("Delete",)
class Delete(QueryBuilder, WhereClauseMixin, ReturningClauseMixin, DeleteFromClauseMixin, ExplainMixin):
"""Builder for DELETE statements.
Constructs SQL DELETE statements with parameter binding and validation.
Does not support JOIN operations to maintain cross-dialect compatibility.
"""
__slots__ = ()
_expression: exp.Expr | None
def __init__(self, table: str | None = None, **kwargs: Any) -> None:
"""Initialize DELETE with optional table.
Args:
table: Target table name
**kwargs: Additional QueryBuilder arguments
"""
(dialect, schema, enable_optimization, optimize_joins, optimize_predicates, simplify_expressions) = (
self._parse_query_builder_kwargs(kwargs)
)
super().__init__(
dialect=dialect,
schema=schema,
enable_optimization=enable_optimization,
optimize_joins=optimize_joins,
optimize_predicates=optimize_predicates,
simplify_expressions=simplify_expressions,
)
self._initialize_expression()
if table:
self.from_(table)