
    -h                         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\5      r
\" \
SS5      r " S S\5      r " S S\5      r " S S\5      rg)   )util)	coercions)roles)_exclusive_against)_generative)ColumnCollection)Insert)ClauseElement)alias)public_factory)r	   insertc                       \ rS rSrSrSrSr\R                  S 5       r	\
" SSS0S9r\\    SS
 j5       5       r\\SS j5       5       rSrg	)r	      a#  SQLite-specific implementation of INSERT.

Adds methods for SQLite-specific syntaxes such as ON CONFLICT.

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

.. versionadded:: 1.4

.. seealso::

    :ref:`sqlite_on_conflict_insert`

sqliteFc                 >    [        U R                  SS9R                  $ )aj  Provide the ``excluded`` namespace for an ON CONFLICT statement

SQLite's ON CONFLICT clause allows reference to the row that would
be inserted, known as ``excluded``.  This attribute provides
all columns in this row to be referenceable.

.. tip::  The :attr:`_sqlite.Insert.excluded` 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.excluded.some_column``), but special names and
    dictionary method names should be accessed using indexed access,
    such as ``stmt.excluded["column name"]`` or
    ``stmt.excluded["values"]``.  See the docstring for
    :class:`_expression.ColumnCollection` for further examples.

excluded)name)r   tablecolumns)selfs    sC:\Users\ROHAN GUPTA\OneDrive\Desktop\mathbuddy-assessment\venv\Lib\site-packages\sqlalchemy/dialects/sqlite/dml.pyr   Insert.excluded*   s    ( TZZj1999    _post_values_clausezCThis Insert construct already has an ON CONFLICT clause established)msgsNc                 &    [        XX45      U l        g)a  
Specifies a DO UPDATE SET action for ON CONFLICT clause.

:param index_elements:
 A sequence consisting of string column names, :class:`_schema.Column`
 objects, or other column expression objects that will be used
 to infer a target index or unique constraint.

:param index_where:
 Additional WHERE criterion that can be used to infer a
 conditional target index.

:param set\_:
 A dictionary or other mapping object
 where the keys are either names of columns in the target table,
 or :class:`_schema.Column` objects or other ORM-mapped columns
 matching that of the target table, and expressions or literals
 as values, specifying the ``SET`` actions to take.

 .. versionadded:: 1.4 The
    :paramref:`_sqlite.Insert.on_conflict_do_update.set_`
    parameter supports :class:`_schema.Column` objects from the target
    :class:`_schema.Table` as keys.

 .. 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 CONFLICT style of
    UPDATE, unless they are manually specified in the
    :paramref:`.Insert.on_conflict_do_update.set_` dictionary.

:param where:
 Optional argument. If present, can be a literal SQL
 string or an acceptable expression for a ``WHERE`` clause
 that restricts the rows affected by ``DO UPDATE SET``. Rows
 not meeting the ``WHERE`` condition will not be updated
 (effectively a ``DO NOTHING`` for those rows).

N)OnConflictDoUpdater   )r   index_elementsindex_whereset_wheres        r   on_conflict_do_updateInsert.on_conflict_do_updateH   s    b $6$
 r   c                 $    [        X5      U l        g)am  
Specifies a DO NOTHING action for ON CONFLICT clause.

:param index_elements:
 A sequence consisting of string column names, :class:`_schema.Column`
 objects, or other column expression objects that will be used
 to infer a target index or unique constraint.

:param index_where:
 Additional WHERE criterion that can be used to infer a
 conditional target index.

N)OnConflictDoNothingr   r   r   r   s      r   on_conflict_do_nothingInsert.on_conflict_do_nothing}   s    " $7$
 r   )r   NNNNNN)__name__
__module____qualname____firstlineno____doc__stringify_dialectinherit_cacher   memoized_propertyr   r   _on_conflict_exclusiver   r"   r'   __static_attributes__ r   r   r	   r	      s     !M	: :* 0! $0
  1
  1
f 
  
r   r	   z.dialects.sqlite.insertz.dialects.sqlite.Insertc                   "    \ rS rSrSrSS jrSrg)OnConflictClause   r   Nc                 \    Ub  S U l         Xl        X l        g S =U l         =U l        U l        g )Nconstraint_targetinferred_target_elementsinferred_target_whereclauser&   s      r   __init__OnConflictClause.__init__   s<    %%)D",:)/:, 488D" 8-0r   r:   r*   )r+   r,   r-   r.   r0   r>   r4   r5   r   r   r7   r7      s     	8r   r7   c                       \ rS rSrSrSrg)r%      r'   r5   N)r+   r,   r-   r.   __visit_name__r4   r5   r   r   r%   r%      s    -Nr   r%   c                   8   ^  \ rS rSrSr    SU 4S jjrSrU =r$ )r      r"   c                   > [         [        U ]  UUS9  [        U[        5      (       a  U(       d  [        S5      eO,[        U[        5      (       a  [	        U5      nO[        S5      eUR                  5        VVs/ s H,  u  pV[        R                  " [        R                  U5      U4PM.     snnU l        X@l        g s  snnf )N)r   r   z*set parameter dictionary must not be emptyzqset parameter must be a non-empty dictionary or a ColumnCollection such as the `.c.` collection of a Table object)superr   r>   
isinstancedict
ValueErrorr   itemsr   expectr   DMLColumnRoleupdate_values_to_setupdate_whereclause)r   r   r   r    r!   keyvalue	__class__s          r   r>   OnConflictDoUpdate.__init__   s     	 $0)# 	1 	

 dD!! !MNN .//:D$  #jjl%
*
 e1137?*%
! #(	%
s   ;3B>)rM   rN   r)   )r+   r,   r-   r.   rB   r>   r4   __classcell__)rQ   s   @r   r   r      s     ,N ( (r   r   N) r   sqlr   r   sql.baser   r   r   sql.dmlr	   StandardInsertsql.elementsr
   sql.expressionr   util.langhelpersr   __all__r   r7   r%   r   r5   r   r   <module>r]      sv       * # ( / ) # . y
^ y
x 

%'@

8} 8.* .() (r   