Ë
    r™ãjX%  ã                  ó
  — d dl mZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d d	lm
Z
 d
dlmZ d
dlmZ d
dlmZ d
dlmZ d
dlmZ d
dlmZ d
dlmZ d
dlmZ d
dlmZ d
dlmZ d
dlmZ d
dlmZ d
dlmZ d
dl m!Z! d
dl"m#Z# d
dl$m%Z% d
dl&m'Z' e	rd
dlm(Z( d
dlm)Z) d
dlm*Z* d
dlm+Z+ d
d l$m,Z, d!Z-d+d#„Z. G d$„ d"ee«      Z/d,d&„Z0 G d'„ d%e«      Z G d(„ d)ee«      Z1e
eeef   eee2ef      eeef   f   Z3y*)-é    )Úannotations)ÚAny)ÚDict)ÚList)ÚMapping)ÚOptional)ÚTuple)ÚTYPE_CHECKING)ÚUnioné   )Úexc)Úutil)Ú	coercions)Úroles)Ú_DMLTableArgument)Ú_exclusive_against)ÚColumnCollection)ÚReadOnlyColumnCollection)ÚSyntaxExtension©ÚInsert)ÚClauseElement)ÚKeyedColumnElement)Úalias)ÚNamedFromClause)ÚNULLTYPE)ÚInternalTraversal)ÚSelf)Ú_LimitOffsetType)ÚDelete)ÚUpdate)ÚColumnElement)Ú_TraverseInternalsType)r   ÚinsertÚDMLLimitClausec                ó   — t        | «      S )zùapply a LIMIT to an UPDATE or DELETE statement

    e.g.::

        stmt = t.update().values(q="hi").ext(limit(5))

    this supersedes the previous approach of using ``mysql_limit`` for
    update/delete statements.

    .. versionadded:: 2.1

    )r%   )Úlimits    úh/var/www/html/python-recuperauto-other/env/lib/python3.12/site-packages/sqlalchemy/dialects/mysql/dml.pyr'   r'   .   s   € ô ˜%Ó Ð ó    c                  óV   — e Zd ZU dZdZdej                  fgZded<   d
d„Z	dd„Z
dd„Zy	)r%   ÚmysqlÚmysql_dml_limit_clauseÚ_limit_clauser#   Ú_traverse_internalsc                ó\   — t        j                  t        j                  |d d ¬«      | _        y )N)ÚnameÚtype_)r   Úexpectr   ÚLimitOffsetRoler-   )Úselfr'   s     r(   Ú__init__zDMLLimitClause.__init__F   s$   € Ü&×-Ñ-Ü×!Ñ! 5¨t¸4ô
ˆÕr)   c                ó<   — |j                  | j                  d«       y ©NÚpost_criteria©Úapply_syntax_extension_pointÚappend_replacing_same_type)r4   Úupdate_stmts     r(   Úapply_to_updatezDMLLimitClause.apply_to_updateK   ó   € Ø×0Ñ0Ø×+Ñ+¨_õ	
r)   c                ó<   — |j                  | j                  d«       y r7   r9   )r4   Údelete_stmts     r(   Úapply_to_deletezDMLLimitClause.apply_to_deleteP   r>   r)   N)r'   r   )r<   r!   ÚreturnÚNone)r@   r    rB   rC   )Ú__name__Ú
__module__Ú__qualname__Ústringify_dialectÚ__visit_name__r   Údp_clauseelementr.   Ú__annotations__r5   r=   rA   © r)   r(   r%   r%   >   s=   … ØÐØ-€Nð 
Ð+×<Ñ<Ð=ð3ÐÐ/ó ó
ó

ô

r)   r   c                ó   — t        | «      S )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    r(   r$   r$   V   s   € ô  �%‹=Ðr)   c                  óz   — e Zd ZdZdZdZe	 	 dd„«       Zej                  dd„«       Z
 edddi¬«      dd	„«       Zy
)r   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.

    r+   Tc                ó.   — | j                   j                  S )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©r4   s    r(   ÚinsertedzInsert.insertedv   s   € ð@ ×"Ñ"×*Ñ*Ð*r)   c                ó0   — t        | j                  d¬«      S )NrS   )r0   )r   rM   rR   s    r(   rP   zInsert.inserted_alias˜   s   € ä�T—Z‘Z jÔ1Ð1r)   Ú_post_values_clausezDThis Insert construct already has an ON DUPLICATE KEY clause present)Úmsgsc                óØ   — |r|rt        j                  d«      ‚|r)t        |«      dkD  rt        j                  d«      ‚|d   }n|}| j                  t	        | j
                  |«      «      S )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"),
                ]
            )

        .. 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ÚextÚOnDuplicateClauserP   )r4   ÚargsÚkwÚvaluess       r(   Úon_duplicate_key_updatezInsert.on_duplicate_key_updateœ   su   € ñ` ‘BÜ×#Ñ#ØKóð ñ Ü�4‹y˜1Š}Ü×'Ñ'ð0óð ð ˜!‘W‰FàˆFà�x‰xÔ)¨$×*=Ñ*=¸vÓFÓGÐGr)   N)rB   z6ReadOnlyColumnCollection[str, KeyedColumnElement[Any]])rB   r   )r]   Ú
_UpdateArgr^   r   rB   r   )rD   rE   rF   Ú__doc__rG   Úinherit_cacheÚpropertyrS   r   Úmemoized_propertyrP   r   r`   rK   r)   r(   r   r   i   st   „ ñð  ÐØ€Màð+à	?ò+ó ð+ðB 
×Ñò2ó ð2ñ Øà!ð $5ð
ôò8Hóñ8Hr)   c                  ó‚   — e Zd ZU dZdZded<   ded<   dZdej                  fdej                  fgZ
	 	 	 	 	 	 d
d„Zdd	„Zy)r\   r`   NzOptional[List[str]]Ú_parameter_orderingzDict[str, ColumnElement[Any]]Úupdater+   c                óê  — || _         t        |t        «      r:|r8t        |d   t        «      r%|D ��cg c]  \  }}|‘Œ	 c}}| _        t        |«      }t        |t
        «      r|s2t        d«      ‚t        |t        «      rt        |«      }nt        d«      ‚|j                  «       D ��ci c]1  \  }}|t        j                  t        j                  |t        d¬«      “Œ3 c}}| _        y c c}}w c c}}w )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 objectT)r1   Úis_crud)rP   Ú
isinstanceÚlistÚtuplerg   ÚdictÚ
ValueErrorr   Úitemsr   r2   r   ÚExpressionElementRoler   rh   )r4   rP   rh   ÚkeyÚvalueÚkÚvs          r(   r5   zOnDuplicateClause.__init__ë   sá   € ð -ˆÔô �fœdÔ#Ù”z &¨¡)¬UÔ3à>D×'E±
°°UªÓ'EˆDÔ$Ü˜&“\ˆFä�fœdÔ#ÙÜ ØCóð ô ˜Ô 0Ô1Ü˜&“\‰Fäð$óð ð Ÿ™›÷	
ñ ��1ð Œy×ÑÜ×+Ñ+¨Q´hÈôñ ó
ˆ�ùó# (Fùó"
s   ²C)Â)6C/c                ó<   — |j                  | j                  d«       y )NÚpost_valuesr9   )r4   Úinsert_stmts     r(   Úapply_to_insertz!OnDuplicateClause.apply_to_insert  s   € Ø×0Ñ0Ø×+Ñ+¨]õ	
r)   )rP   r   rh   ra   rB   rC   )rx   ÚStandardInsertrB   rC   )rD   rE   rF   rH   rg   rJ   rG   r   Údp_string_listÚdp_dml_valuesr.   r5   ry   rK   r)   r(   r\   r\   Þ   sj   … Ø.€Nà/3ÐÐ,Ó3à)Ó)ØÐð 
Ð 1× @Ñ @ÐAØ	Ð$×2Ñ2Ð3ðÐð
"
Ø-ð"
Ø7Að"
à	ó"
ôH
r)   r\   N)r'   r   rB   r%   )rM   r   rB   r   )4Ú
__future__r   Útypingr   r   r   r   r   r	   r
   r   Ú r   r   Úsqlr   r   Úsql._typingr   Úsql.baser   r   r   r   Úsql.dmlr   rz   Úsql.elementsr   r   Úsql.expressionr   Úsql.selectabler   Úsql.sqltypesr   Úsql.visitorsr   Úutil.typingr   r   r    r!   r"   r#   Ú__all__r'   r%   r$   r\   Ústrra   rK   r)   r(   ú<module>rŒ      sÚ   ðõ #å Ý Ý Ý Ý Ý Ý  Ý å Ý Ý Ý Ý ,Ý *Ý (Ý 0Ý 'Ý /Ý )Ý .Ý #Ý -Ý $Ý -Ý áÝ/Ý!Ý!Ý-Ý6à
€ó!ô 
�_ mô 
ó0ô&rHˆ^ô rHôj4
˜¨ô 4
ðn ØˆC�ˆHÑ�t˜E # s (™OÑ,Ð.>¸sÀC¸xÑ.HÐHñ�
r)   