ó
    øÞ jW  ã                  ón  • S SK Jr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJ	r	  S	S
K
Jr  S	SK
Jr  S	SKJr  S	SKJr  S	SKJr  S	SKJr  S	SKJr  S	SKJr  S	SKJr  S	SKJr  S	SKJr  S	SKJr  S	SKJr  Sr SS jr! " S S\5      r " S S\5      r"\	\\\4   \\\#\4      \\\4   4   r$g)é    )Úannotations)ÚAny)ÚDict)ÚList)ÚMapping)ÚOptional)ÚTuple)ÚUnioné   )Úexc)Úutil)Ú_DMLTableArgument)Ú_exclusive_against)Ú_generative)ÚColumnCollection)ÚReadOnlyColumnCollection©ÚInsert)ÚClauseElement)ÚKeyedColumnElement)Úalias)ÚNamedFromClause)ÚSelf)r   Úinsertr   c                ó   • [        U 5      $ )a   Construct a MySQL/MariaDB-specific variant :class:`_mysql.Insert`
construct.

.. container:: inherited_member

    The :func:`sqlalchemy.dialects.mysql.insert` function creates
    a :class:`sqlalchemy.dialects.mysql.Insert`.  This class is based
    on the dialect-agnostic :class:`_sql.Insert` construct which may
    be constructed using the :func:`_sql.insert` function in
    SQLAlchemy Core.

The :class:`_mysql.Insert` construct includes additional methods
:meth:`_mysql.Insert.on_duplicate_key_update`.

r   )Útables    ÚW/var/www/html/gaurav/venv/lib/python3.13/site-packages/sqlalchemy/dialects/mysql/dml.pyr   r   "   s   € ô  �%‹=Ðó    c                  óŒ   • \ rS rSrSrSrSr\  SS j5       r\	R                  SS j5       r\\" SSS0S	9SS
 j5       5       rSrg)r   é5   zøMySQL-specific implementation of INSERT.

Adds methods for MySQL-specific syntaxes such as ON DUPLICATE KEY UPDATE.

The :class:`~.mysql.Insert` object is created using the
:func:`sqlalchemy.dialects.mysql.insert` function.

.. versionadded:: 1.2

ÚmysqlFc                ó.   • U R                   R                  $ )aï  Provide the "inserted" namespace for an ON DUPLICATE KEY UPDATE
statement

MySQL's ON DUPLICATE KEY UPDATE clause allows reference to the row
that would be inserted, via a special function called ``VALUES()``.
This attribute provides all columns in this row to be referenceable
such that they will render within a ``VALUES()`` function inside the
ON DUPLICATE KEY UPDATE clause.    The attribute is named ``.inserted``
so as not to conflict with the existing
:meth:`_expression.Insert.values` method.

.. tip::  The :attr:`_mysql.Insert.inserted` attribute is an instance
    of :class:`_expression.ColumnCollection`, which provides an
    interface the same as that of the :attr:`_schema.Table.c`
    collection described at :ref:`metadata_tables_and_columns`.
    With this collection, ordinary names are accessible like attributes
    (e.g. ``stmt.inserted.some_column``), but special names and
    dictionary method names should be accessed using indexed access,
    such as ``stmt.inserted["column name"]`` or
    ``stmt.inserted["values"]``.  See the docstring for
    :class:`_expression.ColumnCollection` for further examples.

.. seealso::

    :ref:`mysql_insert_on_duplicate_key_update` - example of how
    to use :attr:`_expression.Insert.inserted`

)Úinserted_aliasÚcolumns©Úselfs    r   ÚinsertedÚInsert.insertedD   s   € ð@ ×"Ñ"×*Ñ*Ð*r   c                ó*   • [        U R                  SS9$ )Nr'   )Úname)r   r   r%   s    r   r#   ÚInsert.inserted_aliasf   s   € ä�T—Z‘Z jÑ1Ð1r   Ú_post_values_clausezDThis Insert construct already has an ON DUPLICATE KEY clause present)Úmsgsc                óì   • U(       a  U(       a  [         R                  " S5      eU(       a+  [        U5      S:”  a  [         R                  " S5      eUS   nOUn[        U R                  U5      U l        U $ )a�  
Specifies the ON DUPLICATE KEY UPDATE clause.

:param \**kw:  Column keys linked to UPDATE values.  The
 values may be any SQL expression or supported literal Python
 values.

.. warning:: This dictionary does **not** take into account
   Python-specified default UPDATE values or generation functions,
   e.g. those specified using :paramref:`_schema.Column.onupdate`.
   These values will not be exercised for an ON DUPLICATE KEY UPDATE
   style of UPDATE, unless values are manually specified here.

:param \*args: As an alternative to passing key/value parameters,
 a dictionary or list of 2-tuples can be passed as a single positional
 argument.

 Passing a single dictionary is equivalent to the keyword argument
 form::

    insert().on_duplicate_key_update({"name": "some name"})

 Passing a list of 2-tuples indicates that the parameter assignments
 in the UPDATE clause should be ordered as sent, in a manner similar
 to that described for the :class:`_expression.Update`
 construct overall
 in :ref:`tutorial_parameter_ordered_updates`::

    insert().on_duplicate_key_update(
        [
            ("name", "some name"),
            ("value", "some value"),
        ]
    )

 .. versionchanged:: 1.3 parameters can be specified as a dictionary
    or list of 2-tuples; the latter form provides for parameter
    ordering.


.. versionadded:: 1.2

.. seealso::

    :ref:`mysql_insert_on_duplicate_key_update`

z9Can't pass kwargs and positional arguments simultaneouslyé   zDOnly a single dictionary or list of tuples is accepted positionally.r   )r   ÚArgumentErrorÚlenÚOnDuplicateClauser#   r,   )r&   ÚargsÚkwÚvaluess       r   Úon_duplicate_key_updateÚInsert.on_duplicate_key_updatej   sw   € öp –BÜ×#Ò#ØKóð ö Ü�4‹y˜1‹}Ü×'Ò'ð0óð ð ˜!‘W‰FàˆFä#4Ø×Ñ ó$
ˆÔ ð ˆr   )r,   N)Úreturnz6ReadOnlyColumnCollection[str, KeyedColumnElement[Any]])r8   r   )r3   Ú
_UpdateArgr4   r   r8   r   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ústringify_dialectÚinherit_cacheÚpropertyr'   r   Úmemoized_propertyr#   r   r   r6   Ú__static_attributes__© r   r   r   r   5   s|   † ñ	ð  ÐØ€Màð+à	?ó+ó ð+ðB 
×Ñó2ó ð2ð ÙØà!ð $5ð
ñóBóó óBr   c                  óL   • \ rS rSr% SrSrS\S'   S\S'   Sr      SS	 jrS
r	g)r2   é·   r6   NzOptional[List[str]]Ú_parameter_orderingzDict[str, Any]Úupdater!   c                ó„  • Xl         [        U[        5      (       aE  U(       a>  [        US   [        5      (       a&  U VVs/ sH  u  p4UPM	     snnU l        [        U5      n[        U[
        5      (       a  U(       d  [        S5      eO,[        U[        5      (       a  [        U5      nO[        S5      eX l        g s  snnf )Nr   z-update parameter dictionary must not be emptyztupdate parameter must be a non-empty dictionary or a ColumnCollection such as the `.c.` collection of a Table object)	r#   Ú
isinstanceÚlistÚtuplerG   ÚdictÚ
ValueErrorr   rH   )r&   r#   rH   ÚkeyÚvalues        r   Ú__init__ÚOnDuplicateClause.__init__¿   s«   € ð -Ôô �fœd×#Ñ#Þ”z &¨¡)¬U×3Ñ3á>DÔ'E¹f±
°«¹fÒ'EˆDÔ$Ü˜&“\ˆFä�fœd×#Ñ#ÞÜ ØCóð ð ô ˜Ô 0×1Ñ1Ü˜&“\‰Fäð$óð ð
 �ùó! (Fs   Á B<)rG   r#   rH   )r#   r   rH   r9   r8   ÚNone)
r:   r;   r<   r=   Ú__visit_name__rG   Ú__annotations__r?   rQ   rC   rD   r   r   r2   r2   ·   s<   ‡ Ø.€Nà/3ÐÐ,Ó3àÓØÐðØ-ðØ7Aðà	÷r   r2   N)r   r   r8   r   )%Ú
__future__r   Útypingr   r   r   r   r   r	   r
   Ú r   r   Úsql._typingr   Úsql.baser   r   r   r   Úsql.dmlr   ÚStandardInsertÚsql.elementsr   r   Úsql.expressionr   Úsql.selectabler   Úutil.typingr   Ú__all__r   r2   Ústrr9   rD   r   r   Ú<module>rc      s¢   ðõ #å Ý Ý Ý Ý Ý Ý å Ý Ý ,Ý *Ý #Ý (Ý 0Ý /Ý )Ý .Ý #Ý -Ý à
€ôô&ˆ^ô ôD$˜ô $ðN ØˆC�ˆHÑ�t˜E # s (™OÑ,Ð.>¸sÀC¸xÑ.HÐHñ�
r   