
    mg?                       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SKJr  SSKJr  SSKJr  \" S\S9r\(       a  SSKJr   " S S\R2                  5      r " S S\5      rS r " S S\R:                  \   5      r " S S\5      r " S S\5      r  " S  S!\5      r! " S" S#\5      r" " S$ S%\5      r# " S& S'\5      r$g())    )annotations)Any)TYPE_CHECKING)TypeVar   )types)ARRAY   )	coercions)elements)
expression)	functions)roles)schema)ColumnCollectionConstraint)TEXT)InternalTraversal_T)bound)_TraverseInternalsTypec                      \ rS rSr% SrS rSrS\R                  4S\R                  4S\R                  4/r
S\S'   S	 rSS jrS r\R                   4S jr\S 5       rSrg
)aggregate_order_by    a  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;

Similarly::

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

Would represent:

.. sourcecode:: sql

    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                   [         R                  " [        R                  U5      U l        U R                  R
                  U l        [        U5      nUS:X  a  [        S5      eUS:X  a.  [         R                  " [        R                  US   5      U l        g [        R                  " US[        R                  06U l        g )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       j/Users/Alptekin/Desktop/izin_takip/venv/lib/python3.13/site-packages/sqlalchemy/dialects/postgresql/ext.py__init__aggregate_order_by.__init__N   s    &&u'B'BFKKK$$	8}19GHHQY%,,++Xa[DM %//161L1LDM    Nc                    U $ N )r&   againsts     r(   
self_groupaggregate_order_by.self_group^   s    r+   c                2    U R                   U R                  4$ r-   r   r   )r&   kwargss     r(   get_childrenaggregate_order_by.get_childrena   s    {{DMM))r+   c                d    U" U R                   40 UD6U l         U" U R                  40 UD6U l        g r-   r3   )r&   clonekws      r(   _copy_internals"aggregate_order_by._copy_internalsd   s,    DKK.2.dmm2r2r+   c                \    U R                   R                  U R                  R                  -   $ r-   )r   _from_objectsr   )r&   s    r(   r=    aggregate_order_by._from_objectsh   s!    {{((4==+F+FFFr+   )r   r   r   r-   )__name__
__module____qualname____firstlineno____doc____visit_name__stringify_dialectr   dp_clauseelementdp_typer   __annotations__r)   r0   r5   r   _cloner:   propertyr=   __static_attributes__r.   r+   r(   r   r       s    "H *N$	$556	"**+	&7783/  * %-OO 3 G Gr+   r   c                  z   ^  \ rS rSrSrSrSrSrSr\	R                  " SSS	5      S
 5       rU 4S jrSS jrSrU =r$ )ExcludeConstraintm   zA 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                   / n/ n0 U l         [        U6 u  pV[        [        R                  " [        R
                  U5      U5       HR  u  u  pxpnU
b  UR                  U
5        Ub  UR                  OU	nUb  XR                   U'   UR                  X|U45        MT     X@l        [        R                  " U /UQ7UR                  S5      UR                  S5      UR                  S5      S.6  UR                  SS5      U l        UR                  S5      nUb*  [        R                  " [        R                  U5      U l        UR                  S	0 5      U l        g)
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)rR   rS   rT   usinggistrP   ops)	operatorszipr    expect_col_expression_collectionr   DDLConstraintColumnRoleappendrR   _render_exprsr   r)   getrU   r!   StatementOptionRolerP   rW   )r&   r   r9   columnsrender_exprsexpressionsrX   exprcolumnstrnameadd_elementoperatorrR   rP   s                 r(   r)   ExcludeConstraint.__init__~   s@   ~ !$h>A66--{ 	?
:0T7( &{+"("46;;'D'/t$X 67?
" *"++	
	
 vvl+ff[)	
 VVGV,
w"))%*C*CUKDJ66%$r+   c           	        > [         TU ]  U5        U R                   VVVs/ s H/  u  p4n[        U[        5      (       d  UOUR
                  U   UU4PM1     snnnU l        g s  snnnf r-   )super_set_parentr]   
isinstancestrc)r&   tabler9   rc   rR   rg   	__class__s         r(   rk   ExcludeConstraint._set_parent  sg    E" *.););
 *<$H	 'tS11uwwt}
 *<
 
s   6A"c           
     v   U R                    VVVs/ s H)  u  p4n[        R                  " X0R                  U5      U4PM+     nnnnU R                  " UU R
                  U R                  U R                  U R                  U R                  S.6nUR                  R                  U R                  5        U$ s  snnnf )N)rR   rS   rT   rP   rU   )r]   r   _copy_expressionparentrp   rR   rS   rT   rP   rU   dispatch_update)r&   target_tabler9   rc   _rg   r   rn   s           r(   _copyExcludeConstraint._copy  s     &*%7%7

 &8! ''kk<H &8 	 
 NNnn****
 	


4==)!
s   0B4)r]   rX   rW   rU   rP   r-   )r?   r@   rA   rB   rC   rD   rP   inherit_cachecreate_drop_stringify_dialectr   _document_text_coercionr)   rk   ry   rK   __classcell__rp   s   @r(   rM   rM   m   sW     *NEM$0!%%%.
%
%B

 r+   rM   c                 T    [         US'   [        R                  R                  " U 0 UD6$ )zPostgreSQL-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)argr9   s     r(   r   r   $  s)     !&B>>##S/B//r+   c                  ,   ^  \ rS rSrSrU 4S jrSrU =r$ )_regconfig_fni/  Tc                  > [        U5      n[        U5      S:  aR  [        R                  " [        R
                  UR                  S5      [        U SS 5      U [        R                  S9nU/nO/ nU Vs/ s H3  n[        R                  " [        R
                  U[        U SS 5      U S9PM5     nn[        TU ],  " X5-   0 UD6  g s  snf )Nr   r   rR   )rR   apply_propagate_attrstype_rR   r   )listr#   r   r!   r   r"   popgetattrr   	REGCONFIGrj   r)   )r&   argsr4   initial_argrn   
addtl_argsrp   s         r(   r)   _regconfig_fn.__init__2  s    Dzt9q=#**++T640&*ooK '-KK 
  ++T640&*	  	 
 	;3??
s   4:Cr.   )r?   r@   rA   rB   r{   r)   rK   r~   r   s   @r(   r   r   /  s    M@ @r+   r   c                  4    \ rS rSrSrSr\R                  rSr	g)to_tsvectoriL  a  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

Tr.   N)
r?   r@   rA   rB   rC   r{   r   TSVECTORr   rK   r.   r+   r(   r   r   L  s    " M>>Dr+   r   c                  4    \ rS rSrSrSr\R                  rSr	g)
to_tsqueryib  a  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

Tr.   N
r?   r@   rA   rB   rC   r{   r   TSQUERYr   rK   r.   r+   r(   r   r   b      " M==Dr+   r   c                  4    \ rS rSrSrSr\R                  rSr	g)plainto_tsqueryix  a  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

Tr.   Nr   r.   r+   r(   r   r   x  r   r+   r   c                  4    \ rS rSrSrSr\R                  rSr	g)phraseto_tsqueryi  a  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

Tr.   Nr   r.   r+   r(   r   r     r   r+   r   c                  4    \ rS rSrSrSr\R                  rSr	g)websearch_to_tsqueryi  a  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

Tr.   Nr   r.   r+   r(   r   r     r   r+   r   c                  4   ^  \ rS rSrSrSr\rU 4S jrSr	U =r
$ )ts_headlinei  a  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                F  > [        U5      n[        U5      S:  a  SnOQ[        US   [        R                  5      (       a-  US   R
                  R                  [        R                  L a  SnOSnU(       aR  [        R                  " [        R                  UR                  S5      U [        U SS 5      [        R                  S9nU/nO/ nU Vs/ s H3  n[        R                  " [        R                  U[        U SS 5      U S9PM5     nn[         TU ]D  " XF-   0 UD6  g s  snf )	N   Fr   Tr   rR   )r   rR   r   r   )r   r#   rl   r   ColumnElementr   _type_affinityr   r   r   r!   r   r"   r   r   r   rj   r)   )r&   r   r4   has_regconfigr   rn   r   rp   s          r(   r)   ts_headline.__init__  s   Dz t9q=!MtAw 6 677Q++u}}< "M M#**++&*T640ooK '-KK 
  ++T640&*	  	 
 	;3??
s   :Dr.   )r?   r@   rA   rB   rC   r{   r   r   r)   rK   r~   r   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   rM   r   GenericFunctionr   r   r   r   r   r   r   r.   r+   r(   <module>r      s    #             4   -T6JG11 JGZt2 tn0@I--b1 @:- , ,m ,} ,= ,;@- ;@r+   