Ë
    r™ãj“L  ã                  óÄ  — 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
r0d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d"e¬#«      Z, G d$„ d%ejJ                  e,   «      Z- G d&„ d'e«      Z.d(„ Z/ G d)„ d*ej`                  e,   «      Z1 G d+„ d,e1«      Z2 G d-„ d.e1«      Z3 G d/„ d0e1«      Z4 G d1„ d2e1«      Z5 G d3„ d4e1«      Z6 G d5„ d6e1«      Z7d;d8„Z8 G d9„ d7eejH                  «      Z9y:)<é    )Úannotations)ÚAny)ÚIterable)ÚList)ÚOptional)Úoverload)ÚSequence)ÚTuple)ÚTYPE_CHECKING)ÚTypeVaré   )Útypes)ÚARRAYé   )Úexc)Ú	coercions)Úelements)Ú
expression)Ú	functions)Úroles)Úschema)ÚSyntaxExtension)ÚColumnCollectionConstraint)ÚTEXT)ÚInternalTraversal)Ú_ColumnExpressionArgument)Ú_DDLColumnArgument)ÚClauseElement)ÚColumnElement)ÚOperatorType)Ú
FromClause)Ú_CloneCallableType)Ú_TraverseInternalsTypeÚ_T)Úboundc                  ó  — e Zd ZU dZd ZdZdej                  fdej                  fdej                  fgZ	de
d<   e	 	 	 	 dd„«       Ze	 	 	 	 dd	„«       Z	 	 	 	 dd
„Z	 d	 	 	 dd„Zdd„Zej                   f	 	 	 	 	 dd„Zedd„«       Zy)Úaggregate_order_byaá  Represent a PostgreSQL aggregate order by expression.

    E.g.::

        from sqlalchemy.dialects.postgresql import aggregate_order_by

        expr = func.array_agg(aggregate_order_by(table.c.a, table.c.b.desc()))
        stmt = select(expr)

    would represent the expression:

    .. sourcecode:: sql

        SELECT array_agg(a ORDER BY b DESC) FROM table;

    .. legacy:: An improved dialect-agnostic form of this function is now
       available in Core by calling the
       :meth:`_functions.Function.aggregate_order_by` method on any function
       defined by the backend as an aggregate function.

    .. seealso::

        :func:`_sql.aggregate_order_by` - Core level function

        :class:`_functions.array_agg`

    Ú
postgresqlÚtargetÚtypeÚorder_byr#   Ú_traverse_internalsc                 ó   — y ©N© ©Úselfr)   r+   s      úm/var/www/html/python-recuperauto-other/env/lib/python3.12/site-packages/sqlalchemy/dialects/postgresql/ext.pyÚ__init__zaggregate_order_by.__init__U   ó   € ð
 ó    c                 ó   — y r.   r/   r0   s      r2   r3   zaggregate_order_by.__init__\   r4   r5   c                óz  — t        j                  t        j                  |«      | _        | j                  j
                  | _        t        |«      }|  |dk(  rt        d«      ‚|dk(  r-t        j                  t        j                  |d   «      | _        y t        j                  |dt        j                  iŽ| _        y )Nr   z)at least one ORDER BY element is requiredr   Ú_literal_as_text_role)r   Úexpectr   ÚExpressionElementRoler)   r*   ÚlenÚ	TypeErrorr+   r   Ú
ClauseList)r1   r)   r+   Ú_lobs       r2   r3   zaggregate_order_by.__init__c   s    € ô
 &/×%5Ñ%5Ü×'Ñ'¨ó&
ˆŒð —K‘K×$Ñ$ˆŒ	ä�8‹}ˆÙØ�1Š9ÜÐGÓHÐHØ�QŠYÜ%×,Ñ,Ü×+Ñ+¨X°a©[óˆD�Mô %×/Ñ/ØðÜ16×1LÑ1LñˆD�Mr5   Nc                ó   — | S r.   r/   )r1   Úagainsts     r2   Ú
self_groupzaggregate_order_by.self_groupz   s	   € ð ˆr5   c                ó2   — | j                   | j                  fS r.   ©r)   r+   )r1   Úkwargss     r2   Úget_childrenzaggregate_order_by.get_children   s   € Ø�{‰{˜DŸM™MÐ)Ð)r5   c                ód   —  || j                   fi |¤Ž| _          || j                  fi |¤Ž| _        y r.   rC   )r1   ÚcloneÚkws      r2   Ú_copy_internalsz"aggregate_order_by._copy_internals‚   s.   € ñ ˜DŸK™KÑ.¨2Ñ.ˆŒÙ˜dŸm™mÑ2¨rÑ2ˆ�r5   c                ó\   — | j                   j                  | j                  j                  z   S r.   )r)   Ú_from_objectsr+   )r1   s    r2   rK   z aggregate_order_by._from_objectsˆ   s!   € à�{‰{×(Ñ(¨4¯=©=×+FÑ+FÑFÐFr5   )r)   zColumnElement[_T]r+   ú_ColumnExpressionArgument[Any])r)   z_ColumnExpressionArgument[_T]r+   rL   r.   )r@   zOptional[OperatorType]Úreturnr   )rD   r   rM   zIterable[ClauseElement])rG   r"   rH   r   rM   ÚNone)rM   zList[FromClause])Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__visit_name__Ústringify_dialectr   Údp_clauseelementÚdp_typer,   Ú__annotations__r   r3   rA   rE   r   Ú_clonerI   ÚpropertyrK   r/   r5   r2   r'   r'   /   s  … ñð8 *€Nà$Ðà	Ð$×5Ñ5Ð6Ø	Ð"×*Ñ*Ð+Ø	Ð&×7Ñ7Ð8ð3ÐÐ/ó ð ðà!ðð 2òó ðð ðà-ðð 2òó ððà-ðð 2óð0 15ðØ-ðà	óó
*ð +3¯/©/ð3Ø'ð3ØADð3à	ó3ð òGó ñGr5   r'   c                  ó|   ‡ — e Zd ZdZdZdZdZdZ ej                  ddd«      	 	 	 	 	 	 dd	„«       Z
ˆ fd
„Zdd„Zˆ xZS )ÚExcludeConstraintzäA table-level EXCLUDE constraint.

    Defines an EXCLUDE constraint as described in the `PostgreSQL
    documentation`__.

    __ https://www.postgresql.org/docs/current/static/sql-createtable.html#SQL-CREATETABLE-EXCLUDE

    Úexclude_constraintNFr(   Úwherez:class:`.ExcludeConstraint`z$:paramref:`.ExcludeConstraint.where`c           	     óÈ  — g }g }i | _         t        |Ž \  }}t        t        j                  t        j
                  |«      |«      D ]R  \  \  }}}	}
}|
�|j                  |
«       |�|j                  n|	}|�|| j                   |<   |j                  |||f«       ŒT || _        t        j                  | g|¢­|j                  d«      |j                  d«      |j                  d«      |j                  d«      dœŽ |j                  dd«      | _        |j                  d	«      }|�)t        j                  t        j                  |«      | _        |j                  d
i «      | _        y)ap  
        Create an :class:`.ExcludeConstraint` object.

        E.g.::

            const = ExcludeConstraint(
                (Column("period"), "&&"),
                (Column("group"), "="),
                where=(Column("group") != "some group"),
                ops={"group": "my_operator_class"},
            )

        The constraint is normally embedded into the :class:`_schema.Table`
        construct
        directly, or added later using :meth:`.append_constraint`::

            some_table = Table(
                "some_table",
                metadata,
                Column("id", Integer, primary_key=True),
                Column("period", TSRANGE()),
                Column("group", String),
            )

            some_table.append_constraint(
                ExcludeConstraint(
                    (some_table.c.period, "&&"),
                    (some_table.c.group, "="),
                    where=some_table.c.group != "some group",
                    name="some_table_excl_const",
                    ops={"group": "my_operator_class"},
                )
            )

        The exclude constraint defined in this example requires the
        ``btree_gist`` extension, that can be created using the
        command ``CREATE EXTENSION btree_gist;``.

        :param \*elements:

          A sequence of two tuples of the form ``(column, operator)`` where
          "column" is either a :class:`_schema.Column` object, or a SQL
          expression element (e.g. ``func.int8range(table.from, table.to)``)
          or the name of a column as string, and "operator" is a string
          containing the operator to use (e.g. `"&&"` or `"="`).

          In order to specify a column name when a :class:`_schema.Column`
          object is not available, while ensuring
          that any necessary quoting rules take effect, an ad-hoc
          :class:`_schema.Column` or :func:`_expression.column`
          object should be used.
          The ``column`` may also be a string SQL expression when
          passed as :func:`_expression.literal_column` or
          :func:`_expression.text`

        :param name:
          Optional, the in-database name of this constraint.

        :param deferrable:
          Optional bool.  If set, emit DEFERRABLE or NOT DEFERRABLE when
          issuing DDL for this constraint.

        :param initially:
          Optional string.  If set, emit INITIALLY <value> when issuing DDL
          for this constraint.

        :param info: Optional data dictionary which will be populated into the
            :attr:`.SchemaItem.info` attribute of this object.

            .. versionadded:: 2.0.50

        :param using:
          Optional string.  If set, emit USING <index_method> when issuing DDL
          for this constraint. Defaults to 'gist'.

        :param where:
          Optional SQL expression construct or literal SQL string.
          If set, emit WHERE <predicate> when issuing DDL
          for this constraint.

        :param ops:
          Optional dictionary.  Used to define operator classes for the
          elements; works the same way as that of the
          :ref:`postgresql_ops <postgresql_operator_classes>`
          parameter specified to the :class:`_schema.Index` construct.

          .. seealso::

            :ref:`postgresql_operator_classes` - general description of how
            PostgreSQL operator classes are specified.

        NÚnameÚ
deferrableÚ	initiallyÚinfo)r_   r`   ra   rb   ÚusingÚgistr]   Úops)Ú	operatorsÚzipr   Ú expect_col_expression_collectionr   ÚDDLConstraintColumnRoleÚappendr_   Ú_render_exprsr   r3   Úgetrc   r9   ÚStatementOptionRoler]   re   )r1   r   rH   ÚcolumnsÚrender_exprsÚexpressionsrf   ÚexprÚcolumnÚstrnameÚadd_elementÚoperatorr_   r]   s                 r2   r3   zExcludeConstraint.__init__ž   s\  € ðH ˆØˆØˆŒä!$ h Ñˆ�Yä>AÜ×6Ñ6Ü×-Ñ-¨{óð ó	?
ò 	8Ñ:Ñ0ˆT�6˜7 K°(ð Ð&Ø—‘˜{Ô+à"(Ð"4�6—;’;¸'ˆDàÐà'/�—‘˜tÑ$à×Ñ  t¨XÐ 6Õ7ð	8ð" *ˆÔä"×+Ñ+Øð	
àñ	
ð —‘˜“Ø—v‘v˜lÓ+Ø—f‘f˜[Ó)Ø—‘˜“ó	
ð —V‘V˜G VÓ,ˆŒ
Ø—‘�w“ˆØÐÜ"×)Ñ)¬%×*CÑ*CÀUÓKˆDŒJà—6‘6˜% Ó$ˆ�r5   c           	     óÄ   •— t         ‰| �  |«       | j                  D ���cg c]*  \  }}}t        |t        «      s|n|j
                  |   ||f‘Œ, c}}}| _        y c c}}}w r.   )ÚsuperÚ_set_parentrk   Ú
isinstanceÚstrÚc)r1   ÚtablerH   rq   r_   ru   Ú	__class__s         €r2   rx   zExcludeConstraint._set_parent*  sc   ø€ Ü‰Ñ˜EÔ"ð *.×);Ñ);÷
ð 
ñ %��d˜Hô	 ' t¬SÔ1‘°u·w±w¸t±}ØØòô
ˆÕùô 
s   ¡/Ac           
     ór  — | j                   D ���cg c])  \  }}}t        j                  || j                  |«      |f‘Œ+ }}}} | j                  || j
                  | j                  | j                  | j                  | j                  dœŽ}|j                  j                  | j                  «       |S c c}}}w )N)r_   r`   ra   r]   rc   )rk   r   Ú_copy_expressionÚparentr}   r_   r`   ra   r]   rc   ÚdispatchÚ_update)r1   Útarget_tablerH   rq   Ú_ru   r   r{   s           r2   Ú_copyzExcludeConstraint._copy6  s©   € ð &*×%7Ñ%7÷
ð 
ñ
 "��a˜ô ×'Ñ'¨¨d¯k©k¸<ÓHØòð
ˆò 
ð ˆD�N‰NØØ—‘Ø—‘Ø—n‘nØ—*‘*Ø—*‘*ò
ˆð 	
�
‰
×Ñ˜4Ÿ=™=Ô)Øˆùô!
s   ‘.B2)r   zTuple[_DDLColumnArgument, str]rH   r   rM   rN   r.   )rO   rP   rQ   rR   rS   r]   Úinherit_cacheÚcreate_drop_stringify_dialectr   Ú_document_text_coercionr3   rx   r…   Ú__classcell__©r}   s   @r2   r[   r[   �   so   ø„ ñð *€Nà€EØ€Mà$0Ð!à%€X×%Ñ%ØØ%Ø.óð
E%Ø7ðE%Ø?BðE%à	òE%óð
E%ôN

÷r5   r[   c                 óR   — t         |d<   t        j                  j                  | i |¤ŽS )zÏPostgreSQL-specific form of :class:`_functions.array_agg`, ensures
    return type is :class:`_postgresql.ARRAY` and not
    the plain :class:`_types.ARRAY`, unless an explicit ``type_``
    is passed.

    Ú_default_array_type)r   r   ÚfuncÚ	array_agg)ÚargrH   s     r2   rŽ   rŽ   J  s)   € ô !&€BÐÑÜ�>‰>×#Ñ# SÐ/¨BÑ/Ð/r5   c                  ó"   ‡ — e Zd ZdZˆ fd„Zˆ xZS )Ú_regconfig_fnTc                ó�  •— t        |«      }t        |«      dkD  rTt        j                  t        j
                  |j                  d«      t        | dd «      | t        j                  ¬«      }|g}ng }|D �cg c]4  }t        j                  t        j
                  |t        | dd «      | ¬«      ‘Œ6 }}t        ‰| �,  ||z   i |¤Ž y c c}w )Nr   r   r_   )r_   Úapply_propagate_attrsÚtype_©r_   r“   )Úlistr;   r   r9   r   r:   ÚpopÚgetattrr   Ú	REGCONFIGrw   r3   )r1   ÚargsrD   Úinitial_argr{   Ú
addtl_argsr}   s         €r2   r3   z_regconfig_fn.__init__X  sÄ   ø€ Ü�D‹zˆÜˆt‹9�qŠ=Ü#×*Ñ*Ü×+Ñ+Ø—‘˜“Ü˜T 6¨4Ó0Ø&*Ü—o‘oôˆKð '˜-‰KàˆKð ö
ð ô ×ÑÜ×+Ñ+ØÜ˜T 6¨4Ó0Ø&*ö	ð
ˆ
ð 
ô 	‰Ñ˜;¨Ñ3Ð?¸Ó?ùò
s   Á59C)rO   rP   rQ   r†   r3   r‰   rŠ   s   @r2   r‘   r‘   U  s   ø„ Ø€M÷@ð @r5   r‘   c                  ó,   — e Zd ZdZdZej                  Zy)Úto_tsvectoraÇ  The PostgreSQL ``to_tsvector`` SQL function.

    This function applies automatic casting of the REGCONFIG argument
    to use the :class:`_postgresql.REGCONFIG` datatype automatically,
    and applies a return type of :class:`_postgresql.TSVECTOR`.

    Assuming the PostgreSQL dialect has been imported, either by invoking
    ``from sqlalchemy.dialects import postgresql``, or by creating a PostgreSQL
    engine using ``create_engine("postgresql...")``,
    :class:`_postgresql.to_tsvector` will be used automatically when invoking
    ``sqlalchemy.func.to_tsvector()``, ensuring the correct argument and return
    type handlers are used at compile and execution time.

    .. versionadded:: 2.0.0rc1

    TN)rO   rP   rQ   rR   r†   r   ÚTSVECTORr*   r/   r5   r2   rž   rž   r  s   „ ñð" €MØ�>‰>�Dr5   rž   c                  ó,   — e Zd ZdZdZej                  Zy)Ú
to_tsqueryaÃ  The PostgreSQL ``to_tsquery`` SQL function.

    This function applies automatic casting of the REGCONFIG argument
    to use the :class:`_postgresql.REGCONFIG` datatype automatically,
    and applies a return type of :class:`_postgresql.TSQUERY`.

    Assuming the PostgreSQL dialect has been imported, either by invoking
    ``from sqlalchemy.dialects import postgresql``, or by creating a PostgreSQL
    engine using ``create_engine("postgresql...")``,
    :class:`_postgresql.to_tsquery` will be used automatically when invoking
    ``sqlalchemy.func.to_tsquery()``, ensuring the correct argument and return
    type handlers are used at compile and execution time.

    .. versionadded:: 2.0.0rc1

    TN©rO   rP   rQ   rR   r†   r   ÚTSQUERYr*   r/   r5   r2   r¡   r¡   ˆ  ó   „ ñð" €MØ�=‰=�Dr5   r¡   c                  ó,   — e Zd ZdZdZej                  Zy)Úplainto_tsqueryaÒ  The PostgreSQL ``plainto_tsquery`` SQL function.

    This function applies automatic casting of the REGCONFIG argument
    to use the :class:`_postgresql.REGCONFIG` datatype automatically,
    and applies a return type of :class:`_postgresql.TSQUERY`.

    Assuming the PostgreSQL dialect has been imported, either by invoking
    ``from sqlalchemy.dialects import postgresql``, or by creating a PostgreSQL
    engine using ``create_engine("postgresql...")``,
    :class:`_postgresql.plainto_tsquery` will be used automatically when
    invoking ``sqlalchemy.func.plainto_tsquery()``, ensuring the correct
    argument and return type handlers are used at compile and execution time.

    .. versionadded:: 2.0.0rc1

    TNr¢   r/   r5   r2   r¦   r¦   ž  r¤   r5   r¦   c                  ó,   — e Zd ZdZdZej                  Zy)Úphraseto_tsqueryaÕ  The PostgreSQL ``phraseto_tsquery`` SQL function.

    This function applies automatic casting of the REGCONFIG argument
    to use the :class:`_postgresql.REGCONFIG` datatype automatically,
    and applies a return type of :class:`_postgresql.TSQUERY`.

    Assuming the PostgreSQL dialect has been imported, either by invoking
    ``from sqlalchemy.dialects import postgresql``, or by creating a PostgreSQL
    engine using ``create_engine("postgresql...")``,
    :class:`_postgresql.phraseto_tsquery` will be used automatically when
    invoking ``sqlalchemy.func.phraseto_tsquery()``, ensuring the correct
    argument and return type handlers are used at compile and execution time.

    .. versionadded:: 2.0.0rc1

    TNr¢   r/   r5   r2   r¨   r¨   ´  r¤   r5   r¨   c                  ó,   — e Zd ZdZdZej                  Zy)Úwebsearch_to_tsqueryaá  The PostgreSQL ``websearch_to_tsquery`` SQL function.

    This function applies automatic casting of the REGCONFIG argument
    to use the :class:`_postgresql.REGCONFIG` datatype automatically,
    and applies a return type of :class:`_postgresql.TSQUERY`.

    Assuming the PostgreSQL dialect has been imported, either by invoking
    ``from sqlalchemy.dialects import postgresql``, or by creating a PostgreSQL
    engine using ``create_engine("postgresql...")``,
    :class:`_postgresql.websearch_to_tsquery` will be used automatically when
    invoking ``sqlalchemy.func.websearch_to_tsquery()``, ensuring the correct
    argument and return type handlers are used at compile and execution time.

    .. versionadded:: 2.0.0rc1

    TNr¢   r/   r5   r2   rª   rª   Ê  r¤   r5   rª   c                  ó*   ‡ — e Zd ZdZdZeZˆ fd„Zˆ xZS )Úts_headlinea¾  The PostgreSQL ``ts_headline`` SQL function.

    This function applies automatic casting of the REGCONFIG argument
    to use the :class:`_postgresql.REGCONFIG` datatype automatically,
    and applies a return type of :class:`_types.TEXT`.

    Assuming the PostgreSQL dialect has been imported, either by invoking
    ``from sqlalchemy.dialects import postgresql``, or by creating a PostgreSQL
    engine using ``create_engine("postgresql...")``,
    :class:`_postgresql.ts_headline` will be used automatically when invoking
    ``sqlalchemy.func.ts_headline()``, ensuring the correct argument and return
    type handlers are used at compile and execution time.

    .. versionadded:: 2.0.0rc1

    Tc                ó0  •— t        |«      }t        |«      dk  rd}nKt        |d   t        j                  «      r,|d   j
                  j                  t        j                  u rd}nd}|rTt        j                  t        j                  |j                  d«      | t        | dd «      t        j                  ¬«      }|g}ng }|D �cg c]4  }t        j                  t        j                  |t        | dd «      | ¬«      ‘Œ6 }}t!        ‰| �D  ||z   i |¤Ž y c c}w )	Né   Fr   Tr   r_   )r“   r_   r”   r•   )r–   r;   ry   r   r   r*   Ú_type_affinityr   r£   r   r9   r   r:   r—   r˜   r™   rw   r3   )r1   rš   rD   Úhas_regconfigr›   r{   rœ   r}   s          €r2   r3   zts_headline.__init__õ  s  ø€ Ü�D‹zˆô ˆt‹9�qŠ=à!‰Mä�t˜A‘w¤× 6Ñ 6Ô7Ø�Q‘—‘×+Ñ+¬u¯}©}Ñ<ð "‰Mà ˆMáÜ#×*Ñ*Ü×+Ñ+Ø—‘˜“Ø&*Ü˜T 6¨4Ó0Ü—o‘oôˆKð '˜-‰KàˆKð ö
ð ô ×ÑÜ×+Ñ+ØÜ˜T 6¨4Ó0Ø&*ö	ð
ˆ
ð 
ô 	‰Ñ˜;¨Ñ3Ð?¸Ó?ùò
s   Ã9D)	rO   rP   rQ   rR   r†   r   r*   r3   r‰   rŠ   s   @r2   r¬   r¬   à  s    ø„ ñð" €MØ€D÷&@ð &@r5   r¬   ÚDistinctOnClausec                 ó   — t        | «      S )a  apply a DISTINCT_ON to a SELECT statement

    e.g.::

        stmt = select(tbl).ext(distinct_on(t.c.some_col))

    this supersedes the previous approach of using
    ``select(tbl).distinct(t.c.some_col))`` to apply a similar construct.

    .. versionadded:: 2.1

    )r±   )rq   s    r2   Údistinct_onr³     s   € ô ˜DÓ!Ð!r5   c                  ó^   — 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±   r(   Úpostgresql_distinct_onÚ_distinct_onr#   r,   c                ó8   ‡ — t        ˆ fd„|D «       «      ‰ _        y )Nc              3  ój   •K  — | ]*  }t        j                  t        j                  |‰¬ «      –— Œ, y­w))r“   N)r   r9   r   ÚByOfRole)Ú.0Úer1   s     €r2   ú	<genexpr>z,DistinctOnClause.__init__.<locals>.<genexpr>7  s/   øè ø€ ò "
àô ×ÑœUŸ^™^¨QÀd×KÐKñ"
ùs   ƒ03)Útupler¶   )r1   r³   s   ` r2   r3   zDistinctOnClause.__init__6  s   ø€ Ü!ó "
à ô"
ó 
ˆÕr5   c                ó´   — |j                   rt        j                  d«      ‚|j                  j	                  |«       |j                  | j                  d«       y )NzHCannot mix ``select.ext(distinct_on(...))`` and ``select.distinct(...)``Úpre_columns)r¶   r   ÚInvalidRequestErrorÚdistinctÚnon_generativeÚapply_syntax_extension_pointÚ_merge_other_distinct)r1   Úselect_stmts     r2   Úapply_to_selectz DistinctOnClause.apply_to_select<  sR   € Ø×#Ò#Ü×)Ñ)ð+óð ð
 	×Ñ×+Ñ+¨KÔ8à×0Ñ0Ø×&Ñ&¨õ	
r5   c                óö   — g }d}|D ]3  }t        |t        «      r||j                  z  }Œ#|j                  |«       Œ5 |r)|j                  t        || j                  z   «      «       |S |j                  | «       |S )Nr/   )ry   r±   r¶   rj   )r1   ÚexistingÚresÚto_merger»   s        r2   rÄ   z&DistinctOnClause._merge_other_distinctI  s}   € ð ˆØˆØò 	ˆAÜ˜!Ô-Ô.Ø˜AŸN™NÑ*‘à—
‘
˜1•ð		ñ
 Ø�J‰JÔ'¨°4×3DÑ3DÑ(DÓEÔFð ˆ
ð �J‰J�tÔØˆ
r5   N)r³   z(Sequence[_ColumnExpressionArgument[Any]])rÅ   zexpression.Select[Any]rM   rN   )rÈ   ú Sequence[elements.ClauseElement]rM   rË   )rO   rP   rQ   rT   rS   r   Údp_clauseelement_tupler,   rW   r3   rÆ   rÄ   r/   r5   r2   r±   r±   .  sM   … Ø$ÐØ-€Nð 
Ð*×AÑAÐBð3ÐÐ/ó ó
ó
ðØ8ðà	)ôr5   N)rq   rL   rM   r±   ):Ú
__future__r   Útypingr   r   r   r   r   r	   r
   r   r   Ú r   Úarrayr   r   Úsqlr   r   r   r   r   r   Úsql.baser   Ú
sql.schemar   Úsql.sqltypesr   Úsql.visitorsr   Úsql._typingr   r   Úsql.elementsr   r   Úsql.operatorsr    Úsql.selectabler!   r"   r#   r$   r'   r[   rŽ   ÚGenericFunctionr‘   rž   r¡   r¦   r¨   rª   r¬   r³   r±   r/   r5   r2   ú<module>rÛ      s!  ðõ #å Ý Ý Ý Ý Ý Ý Ý  Ý å Ý Ý Ý Ý Ý Ý Ý Ý Ý 'Ý 4Ý  Ý -áÝ8Ý1Ý-Ý-Ý-Ý,Ý2Ý6áˆT˜Ô€ô[G˜×1Ñ1°"Ñ5ô [Gô|zÐ2ô zòz0ô@�I×-Ñ-¨bÑ1ô @ô:�-ô ô,�ô ô,�mô ô,�}ô ô,˜=ô ô,;@�-ô ;@ó|"ô )�¨
×(@Ñ(@õ )r5   