"""UPDATE statement builder.
Provides a fluent interface for building SQL UPDATE queries with
parameter binding and validation.
"""
from typing import TYPE_CHECKING, Any, cast
from sqlglot import exp
from typing_extensions import Self
from sqlspec.builder._base import BuiltQuery, QueryBuilder
from sqlspec.builder._dml import UpdateFromClauseMixin, UpdateSetClauseMixin, UpdateTableClauseMixin
from sqlspec.builder._explain import ExplainMixin
from sqlspec.builder._join import build_join_clause
from sqlspec.builder._select import ReturningClauseMixin, WhereClauseMixin
from sqlspec.core import SQLResult
from sqlspec.exceptions import SQLBuilderError
if TYPE_CHECKING:
from sqlglot.dialects.dialect import DialectType
from sqlspec.builder._select import Select
from sqlspec.protocols import SQLBuilderProtocol
__all__ = ("Update",)
class Update(
QueryBuilder,
WhereClauseMixin,
ReturningClauseMixin,
UpdateSetClauseMixin,
UpdateFromClauseMixin,
UpdateTableClauseMixin,
ExplainMixin,
):
"""Builder for UPDATE statements.
Constructs SQL UPDATE statements with parameter binding and validation.
"""
__slots__ = ()
_expression: exp.Expr | None
def __init__(self, table: str | None = None, **kwargs: Any) -> None:
"""Initialize UPDATE with optional table.
Args:
table: Target table name
**kwargs: Additional QueryBuilder arguments
"""
self._init_query_builder(kwargs)
self._initialize_expression()
if table:
self.table(table)