HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
File: //usr/local/lib/python3.10/dist-packages/sqlalchemy/dialects/sqlite/__pycache__/dml.cpython-310.pyc
o

���g�#�@s�ddlmZddlmZddlmZddlmZddlmZddlmZddlm	Z	dd	lm
Z
dd
lmZddlmZdd
l
mZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlm Z ddlm!Z!ddl"m#Z#ddl$m%Z%dZ&d,d"d#�Z'Gd$d!�d!e�ZGd%d&�d&e�Z(Gd'd(�d(e(�Z)Gd)d*�d*e(�Z*d+S)-�)�annotations)�Any)�List)�Optional)�Tuple)�Union�)�_OnConflictIndexElementsT)�_OnConflictIndexWhereT)�_OnConflictSetT)�_OnConflictWhereT�)�util)�	coercions)�roles)�schema)�_DMLTableArgument)�_exclusive_against)�_generative)�ColumnCollection)�ReadOnlyColumnCollection��Insert)�
ClauseElement)�
ColumnElement)�KeyedColumnElement)�
TextClause)�alias)�Self)r�insert�tabler�returnrcCst|�S)aWConstruct a sqlite-specific variant :class:`_sqlite.Insert`
    construct.

    .. container:: inherited_member

        The :func:`sqlalchemy.dialects.sqlite.insert` function creates
        a :class:`sqlalchemy.dialects.sqlite.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:`_sqlite.Insert` construct includes additional methods
    :meth:`_sqlite.Insert.on_conflict_do_update`,
    :meth:`_sqlite.Insert.on_conflict_do_nothing`.

    r)r �r"�I/usr/local/lib/python3.10/dist-packages/sqlalchemy/dialects/sqlite/dml.pyr'src@sleZdZdZdZdZejddd��Ze	ddd	id
�Z
ee
				dddd���Zee
		dddd���Z
dS)ra?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`

    �sqliteFr!�6ReadOnlyColumnCollection[str, KeyedColumnElement[Any]]cCst|jdd�jS)a�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)rr �columns)�selfr"r"r#r&NszInsert.excluded�_post_values_clausezCThis Insert construct already has an ON CONFLICT clause established)�msgsN�index_elementsr	�index_wherer
�set_r�whererrcCst||||�|_|S)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. An expression object representing 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).

        )�OnConflictDoUpdater*�r)r,r-r.r/r"r"r#�on_conflict_do_updatens0�zInsert.on_conflict_do_updatecCst||�|_|S)a�
        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.

        )�OnConflictDoNothingr*�r)r,r-r"r"r#�on_conflict_do_nothing�s�zInsert.on_conflict_do_nothing)r!r%�NNNN)
r,r	r-r
r.rr/rr!r�NN)r,r	r-r
r!r)�__name__�
__module__�__qualname__�__doc__�stringify_dialect�
inherit_cacher�memoized_propertyr&r�_on_conflict_exclusiverr2r5r"r"r"r#r;s.���3�c@s2eZdZUdZded<ded<		d
ddd�ZdS)�OnConflictClauser$z.Optional[List[Union[str, schema.Column[Any]]]]�inferred_target_elementsz/Optional[Union[ColumnElement[Any], TextClause]]�inferred_target_whereclauseNr,r	r-r
cCsN|durdd�|D�|_|durt�tj|�|_dSd|_dSd|_|_dS)NcSsg|]	}t�tj|��qSr")r�expectr�DDLConstraintColumnRole)�.0�columnr"r"r#�
<listcomp>�s��z-OnConflictClause.__init__.<locals>.<listcomp>)rArrCr�WhereHavingRolerBr4r"r"r#�__init__�s�	�����zOnConflictClause.__init__r7)r,r	r-r
)r8r9r:r<�__annotations__rIr"r"r"r#r@�s
�r@c@seZdZdZdS)r3r5N)r8r9r:�__visit_name__r"r"r"r#r3�sr3cs>eZdZUdZded<ded<				dd�fdd�
Z�ZS)r0r2z0List[Tuple[Union[schema.Column[Any], str], Any]]�update_values_to_setzOptional[ColumnElement[Any]]�update_whereclauseNr,r	r-r
r.rr/rcs~t�j||d�t|t�r|std��nt|t�rt|�}ntd��dd�|��D�|_|dur:t�	t
j|�|_dSd|_dS)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 objectcSs"g|]
\}}t�tj|�|f�qSr")rrCr�
DMLColumnRole)rE�key�valuer"r"r#rG�s��z/OnConflictDoUpdate.__init__.<locals>.<listcomp>)
�superrI�
isinstance�dict�
ValueErrorr�itemsrLrrCrrHrMr1��	__class__r"r#rI�s*�
�

�����zOnConflictDoUpdate.__init__r6)r,r	r-r
r.rr/r)r8r9r:rKrJrI�
__classcell__r"r"rVr#r0�s
�r0N)r rr!r)+�
__future__r�typingrrrrr�_typingr	r
rr�r�sqlrrr�sql._typingr�sql.baserrrr�sql.dmlr�StandardInsert�sql.elementsrrrr�sql.expressionr�util.typingr�__all__rr@r3r0r"r"r"r#�<module>sB