
    -ha%                        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\5      r\" \SS5      r " S S\5      r " S S\5      r " S S\5      rg)   )ext   )util)	coercions)roles)schema)_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      zPostgreSQL-specific implementation of INSERT.

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

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

.. versionadded:: 1.1


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

PG'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:`_postgresql.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.

.. seealso::

    :ref:`postgresql_insert_on_conflict` - example of how
    to use :attr:`_expression.Insert.excluded`

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

Either the ``constraint`` or ``index_elements`` argument is
required, but only one of these can be specified.

:param constraint:
 The name of a unique or exclusion constraint on the table,
 or the constraint object itself if it has a .name attribute.

: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.

: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:`_postgresql.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).

 .. versionadded:: 1.1


.. seealso::

    :ref:`postgresql_insert_on_conflict`

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

The ``constraint`` and ``index_elements`` arguments
are optional, but only one of these can be specified.

:param constraint:
 The name of a unique or exclusion constraint on the table,
 or the constraint object itself if it has a .name attribute.

: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.

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

 .. versionadded:: 1.1

.. seealso::

    :ref:`postgresql_insert_on_conflict`

N)OnConflictDoNothingr   r   r!   r"   r#   s       r   on_conflict_do_nothingInsert.on_conflict_do_nothing   s    > $7$
 r   )r   NNNNNNNN)__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	: :4 0! $0
  ?
  ?
B @D
  
r   r   z.dialects.postgresql.insertz.dialects.postgresql.Insertc                   "    \ rS rSrSrSS jrSrg)OnConflictClause   r   Nc                    Ubc  [        U[        R                  5      (       dD  [        U[        R                  [
        R                  45      (       a  [        US5      =(       d    UnUb  Ub  [        S5      e[        U[        R                  5      (       a  Xl	        S U l
        S U l        O[        U[        R                  5      (       a+  UR                  nUR                  S   R                  S5      nOb[        U[
        R                  5      (       a  UR                   nUR"                  nO*UR                   nUR                  S   R                  S5      nUb  S U l	        X l
        X0l        g Uc  S =U l	        =U l
        U l        g g )Nr   z8'constraint' and 'index_elements' are mutually exclusiver   r%   )
isinstancer   string_typesr   
Constraintr   ExcludeConstraintgetattr
ValueErrorconstraint_targetinferred_target_elementsinferred_target_whereclauseIndexexpressionsdialect_optionsgetr   r%   r*   s       r   __init__OnConflictClause.__init__   so   !j$*;*;<<""C$9$9:B B %Z8FJ
!) N  *d&7&788)3&04-370J55!+!7!7(88FJJ J(=(=>>!+!3!3(..!+!3!3(88FJJ %%)D",:)/:, 488D" 8-0  r   )rD   rE   rF   r.   )r/   r0   r1   r2   r4   rK   r8   r9   r   r   r;   r;      s    $(8r   r;   c                       \ rS rSrSrSrg)r)      r+   r9   N)r/   r0   r1   r2   __visit_name__r8   r9   r   r   r)   r)      s    -Nr   r)   c                   :   ^  \ rS rSrSr     SU 4S jjrSrU =r$ )r       r&   c                   > [         [        U ]  UUUS9  U R                  c  U R                  c  [        S5      e[        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  pg[        R                  " [        R                  U5      U4PM.     snnU l        XPl        g s  snnf )N)r!   r"   r#   zVEither constraint or index_elements, but not both, must be specified unless DO NOTHINGz*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    rK   rE   rD   rC   r>   dictr   itemsr   expectr   DMLColumnRoleupdate_values_to_setupdate_whereclause)	r   r!   r"   r#   r$   r%   keyvalue	__class__s	           r   rK   OnConflictDoUpdate.__init__   s     	 $0!)# 	1 	
 ))1&&.D 
 dD!! !MNN .//:D$  #jjl%
*
 e1137?*%
! #(	%
s   !3C$)rX   rY   r-   )r/   r0   r1   r2   rO   rK   r8   __classcell__)r\   s   @r   r    r       s#    ,N &( &(r   r    N) r   r   sqlr   r   r   sql.baser	   r
   r   sql.dmlr   StandardInsertsql.elementsr   sql.expressionr   util.langhelpersr   __all__r   r;   r)   r    r9   r   r   <module>rh      s}         * # ( / ) # . V
^ V
r 

)+H

+8} +8\.* .)() )(r   