Ë
    V.jvA  ã                  óÖ  — 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de¬«      ZerddlmZ  G d„ dej2                  «      Z G d„ de«      Zd„ Z G d„ dej:                  e   «      Z G d„ de«      Z G d„ de«      Z  G d „ d!e«      Z! G d"„ d#e«      Z" G d$„ d%e«      Z# G d&„ d'e«      Z$y())é    )Úannotations)ÚAny)ÚTYPE_CHECKING)ÚTypeVaré   )Útypes)ÚARRAYé   )Ú	coercions)Úelements)Ú
expression)Ú	functions)Úroles)Úschema)ÚColumnCollectionConstraint)ÚTEXT)ÚInternalTraversalÚ_T)Úbound)Ú_TraverseInternalsTypec                  ó¸   — 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<   d„ Zdd
„Zd„ Zej                  fd„Ze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::

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

    Similarly::

        expr = func.string_agg(
            table.c.a,
            aggregate_order_by(literal_column("','"), table.c.a)
        )
        stmt = select(expr)

    Would represent::

        SELECT string_agg(a, ',' ORDER BY a) FROM table;

    .. versionchanged:: 1.2.13 - the ORDER BY argument may be multiple terms

    .. seealso::

        :class:`_functions.array_agg`

    Ú
postgresqlÚtargetÚtypeÚorder_byr   Ú_traverse_internalsc                óv  — 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)Úselfr   r   Ú_lobs       údC:\xampp\htdocs\tradingbinance\backend\.venv\Lib\site-packages\sqlalchemy/dialects/postgresql/ext.pyÚ__init__zaggregate_order_by.__init__J   s–   € Ü×&Ñ&¤u×'BÑ'BÀFÓKˆŒØ—K‘K×$Ñ$ˆŒ	ä�8‹}ˆØ�1Š9ÜÐGÓHÐHØ�QŠYÜ%×,Ñ,Ü×+Ñ+¨X°a©[óˆD�Mô %×/Ñ/ØðÜ16×1LÑ1LñˆD�Mó    Nc                ó   — | S ©N© )r%   Úagainsts     r'   Ú
self_groupzaggregate_order_by.self_groupZ   s   € Øˆr)   c                ó2   — | j                   | j                  fS r+   ©r   r   )r%   Úkwargss     r'   Úget_childrenzaggregate_order_by.get_children]   s   € Ø�{‰{˜DŸM™MÐ)Ð)r)   c                ód   —  || j                   fi |¤Ž| _          || j                  fi |¤Ž| _        y r+   r0   )r%   ÚcloneÚkws      r'   Ú_copy_internalsz"aggregate_order_by._copy_internals`   s,   € Ù˜DŸK™KÑ.¨2Ñ.ˆŒÙ˜dŸm™mÑ2¨rÑ2ˆ�r)   c                ó\   — | j                   j                  | j                  j                  z   S r+   )r   Ú_from_objectsr   )r%   s    r'   r8   z aggregate_order_by._from_objectsd   s!   € à�{‰{×(Ñ(¨4¯=©=×+FÑ+FÑFÐFr)   r+   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__visit_name__Ústringify_dialectr   Údp_clauseelementÚdp_typer   Ú__annotations__r(   r.   r2   r   Ú_cloner6   Úpropertyr8   r,   r)   r'   r   r       s…   … ñð@ *€Nà$Ðà	Ð$×5Ñ5Ð6Ø	Ð"×*Ñ*Ð+Ø	Ð&×7Ñ7Ð8ð3ÐÐ/ó òó ò*ð %-§O¡Oó 3ð ñGó ñGr)   r   c                  ón   ‡ — e Zd ZdZdZdZdZdZ ej                  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«      dœŽ |j                  dd«      | _        |j                  d«      }|�)t        j                  t        j                  |«      | _        |j                  d	i «      | _        y)
aÌ  
        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 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.

          .. versionadded:: 1.3.21

          .. seealso::

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

        NÚnameÚ
deferrableÚ	initially)rI   rJ   rK   ÚusingÚgistrG   Úops)Ú	operatorsÚzipr   Ú expect_col_expression_collectionr   ÚDDLConstraintColumnRoleÚappendrI   Ú_render_exprsr   r(   ÚgetrL   r    ÚStatementOptionRolerG   rN   )r%   r   r5   ÚcolumnsÚrender_exprsÚexpressionsrO   ÚexprÚcolumnÚstrnameÚadd_elementÚoperatorrI   rG   s                 r'   r(   zExcludeConstraint.__init__z   sL  € ð| ˆØˆØˆŒä!$ h Ñˆ�Yä>AÜ×6Ñ6Ü×-Ñ-¨{óð ö	?
Ñ:Ñ0ˆT�6˜7 K°(ð Ð&Ø—‘˜{Ô+à"(Ð"4�6—;’;¸'ˆDàÐà'/�—‘˜tÑ$à×Ñ  t¨XÐ 6Õ7ð?
ð" *ˆÔä"×+Ñ+Øð	
àñ	
ð —‘˜“Ø—v‘v˜lÓ+Ø—f‘f˜[Ó)ó	
ð —V‘V˜G VÓ,ˆŒ
Ø—‘�w“ˆØÐÜ"×)Ñ)¬%×*CÑ*CÀUÓKˆDŒJà—6‘6˜% Ó$ˆ�r)   c           	     óÄ   •— t         ‰| �  |«       | j                  D ���cg c]*  \  }}}t        |t        «      s|n|j
                  |   ||f‘Œ, c}}}| _        y c c}}}w r+   )ÚsuperÚ_set_parentrT   Ú
isinstanceÚstrÚc)r%   Útabler5   rZ   rI   r^   Ú	__class__s         €r'   ra   zExcludeConstraint._set_parentÿ   sf   ø€ Ü‰Ñ˜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)rI   rJ   rK   rG   rL   )rT   r   Ú_copy_expressionÚparentrf   rI   rJ   rK   rG   rL   ÚdispatchÚ_update)r%   Útarget_tabler5   rZ   Ú_r^   r   rd   s           r'   Ú_copyzExcludeConstraint._copy  sª   € ð &*×%7Ò%7õ
ñ
 &8Ñ!��a˜ô ×'Ñ'¨¨d¯k©k¸<ÓHØòð &8ð 	ò 
ð ˆD�N‰NØØ—‘Ø—‘Ø—n‘nØ—*‘*Ø—*‘*ò
ˆð 	
�
‰
×Ñ˜4Ÿ=™=Ô)Øˆùô!
s   ‘.B2r+   )r9   r:   r;   r<   r=   rG   Úinherit_cacheÚcreate_drop_stringify_dialectr   Ú_document_text_coercionr(   ra   rn   Ú__classcell__©rf   s   @r'   rE   rE   i   sT   ø„ ñð *€Nà€EØ€Mà$0Ð!à%€X×%Ñ%ØØ%Ø.óñ
~%óð
~%ô@

÷r)   rE   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)Úargr5   s     r'   rw   rw     s)   € ô !&€BÐÑÜ�>‰>×#Ñ# SÐ/¨BÑ/Ð/r)   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   rI   )rI   Úapply_propagate_attrsÚtype_©rI   r|   )Úlistr"   r   r    r   r!   ÚpopÚgetattrr   Ú	REGCONFIGr`   r(   )r%   Úargsr1   Úinitial_argrd   Ú
addtl_argsrf   s         €r'   r(   z_regconfig_fn.__init__-  sÉ   ø€ Ü�D‹zˆÜˆt‹9�qŠ=Ü#×*Ñ*Ü×+Ñ+Ø—‘˜“Ü˜T 6¨4Ó0Ø&*Ü—o‘oôˆKð '˜-‰KàˆKñ ó
ñ �ô ×ÑÜ×+Ñ+ØÜ˜T 6¨4Ó0Ø&*ö	ð ð 	ð 
ô 	‰Ñ˜;¨Ñ3Ð?¸Ó?ùò
s   Á59C)r9   r:   r;   ro   r(   rr   rs   s   @r'   rz   rz   *  s   ø„ Ø€M÷@ð @r)   rz   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)r9   r:   r;   r<   ro   r   ÚTSVECTORr   r,   r)   r'   r‡   r‡   G  s   „ ñð" €MØ�>‰>�Dr)   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©r9   r:   r;   r<   ro   r   ÚTSQUERYr   r,   r)   r'   rŠ   rŠ   ]  ó   „ ñð" €MØ�=‰=�Dr)   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,   r)   r'   r�   r�   s  r�   r)   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,   r)   r'   r‘   r‘   ‰  r�   r)   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,   r)   r'   r“   r“   Ÿ  r�   r)   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   rI   )r|   rI   r}   r~   )r   r"   rb   r   ÚColumnElementr   Ú_type_affinityr   rŒ   r   r    r   r!   r€   r�   r‚   r`   r(   )r%   rƒ   r1   Úhas_regconfigr„   rd   r…   rf   s          €r'   r(   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)	r9   r:   r;   r<   ro   r   r   r(   rr   rs   s   @r'   r•   r•   µ  s    ø„ ñð" €MØ€D÷&@ð &@r)   r•   N)%Ú
__future__r   Útypingr   r   r   Ú r   Úarrayr	   Úsqlr   r   r   r   r   r   Ú
sql.schemar   Úsql.sqltypesr   Úsql.visitorsr   r   r   r˜   r   rE   rw   ÚGenericFunctionrz   r‡   rŠ   r�   r‘   r“   r•   r,   r)   r'   Ú<module>r¤      sÕ   ðõ #å Ý  Ý å Ý Ý Ý Ý Ý Ý Ý Ý 4Ý  Ý -áˆT˜Ô€áÝ6ôFG˜×1Ñ1ô FGôRsÐ2ô sòl0ô@�I×-Ñ-¨bÑ1ô @ô:�-ô ô,�ô ô,�mô ô,�}ô ô,˜=ô ô,;@�-õ ;@r)   