
    g                       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r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ded      Z G d d      Z G d d      Z G d d      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 G d' d(e      Z G d) d*e      Z  G d+ d,e e      Z! G d- d.eee      Z" G d/ d0ee   e      Z# G d1 d2e      Z$ G d3 d4e      Z% G d5 d6eee%      Z& G d7 d8ee%      Z' G d9 d:e      Z( G d; d<e(      Z) G d= d>ee(      Z* G d? d@e*      Z+ G dA dBe#e         Z, G dC dDe,e         Z- G dE dFe,e         Z. G dG dHe,e         Z/ G dI dJe      Z0 G dK dLeee(      Z1 G dM dNe"e1      Z2 G dO dPe2      Z3 G dQ dRe3      Z4 G dS dTe      Z5 G dU dVe      Z6 G dW dXe6e5      Z7 G dY dZe5      Z8 G d[ d\e      Z9 G d] d^ee      Z: G d_ d`e6      Z; G da dbe2      Z< G dc dde      Z= G de dfe      Z> G dg dhe6      Z? G di dje(      Z@ G dk dle      ZA G dm dneA      ZByo)p    )annotations)Any)Generic)Optional)TYPE_CHECKING)TypeVar   )util)Literal   )_PropagateAttrsType)Label)_SelectIterable)
FromClause)Subquery_T)bound_T_coT)r   	covariantc                      e Zd ZdZdZdZdZy)SQLRolezDefine a "role" within a SQL statement structure.

    Classes within SQL Core participate within SQLRole hierarchies in order
    to more accurately indicate where they may be used within SQL statements
    of all types.

    .. versionadded:: 1.4

     FN)__name__
__module____qualname____doc__	__slots__allows_lambdauses_inspectionr       S/var/www/html/AdoubleTech/venv/lib/python3.12/site-packages/sqlalchemy/sql/roles.pyr   r      s     IMOr    r   c                  $    e Zd ZU dZdZded<   dZy)UsesInspectionr   NzLiteral[None]_post_inspectT)r   r   r   r   r$   __annotations__r   r   r    r!   r#   r#   -   s    I#'M='Or    r#   c                      e Zd ZdZdZy)AllowsLambdaRoler   TN)r   r   r   r   r   r   r    r!   r'   r'   3   s    IMr    r'   c                      e Zd ZdZdZy)HasCacheKeyRoler   zCacheable Core or ORM objectNr   r   r   r   
_role_namer   r    r!   r)   r)   8   s    I/Jr    r)   c                      e Zd ZdZdZy)ExecutableOptionRoler   z"ExecutionOption Core or ORM objectNr*   r   r    r!   r-   r-   =   s    I5Jr    r-   c                      e Zd ZdZdZy)LiteralValueRoler   zLiteral Python valueNr*   r   r    r!   r/   r/   B   s    I'Jr    r/   c                      e Zd ZdZdZy)ColumnArgumentRoler   zColumn expressionNr*   r   r    r!   r1   r1   G   s    I$Jr    r1   c                      e Zd ZdZdZy)ColumnArgumentOrKeyRoler   Column expression or string keyNr*   r   r    r!   r3   r3   L       I2Jr    r3   c                      e Zd ZdZdZy)StrAsPlainColumnRoler   r4   Nr*   r   r    r!   r7   r7   Q   r5   r    r7   c                      e Zd ZdZdZy)ColumnListRolezCElements suitable for forming comma separated lists of expressions.r   Nr   r   r   r   r   r   r    r!   r9   r9   V   s
    MIr    r9   c                      e Zd ZdZdZy)
StringRolez/mixin indicating a role that results in stringsr   Nr:   r   r    r!   r<   r<   \   s
    9Ir    r<   c                      e Zd ZdZdZy)TruncatedLabelRoler   zString SQL identifierNr*   r   r    r!   r>   r>   b   s    I(Jr    r>   c                  &    e Zd ZdZdZedd       Zy)ColumnsClauseRoler   z?Column expression, FROM clause, or other columns clause elementc                    t               NNotImplementedErrorselfs    r!   _select_iterablez"ColumnsClauseRole._select_iterablem   s    !##r    N)returnr   )r   r   r   r   r+   propertyrG   r   r    r!   r@   r@   g   s#    II  $ $r    r@   c                      e Zd ZdZdZy)TypedColumnsClauseRolez'element-typed form of ColumnsClauseRoler   Nr:   r   r    r!   rK   rK   r   s
    1Ir    rK   c                      e Zd ZdZdZy)LimitOffsetRoler   zLIMIT / OFFSET expressionNr*   r   r    r!   rM   rM   x   s    I,Jr    rM   c                      e Zd ZdZdZy)ByOfRoler   zGROUP BY / OF / etc. expressionNr*   r   r    r!   rO   rO   }   r5   r    rO   c                      e Zd ZdZdZy)GroupByRoler   zGROUP BY expressionNr*   r   r    r!   rQ   rQ      s    I
 'Jr    rQ   c                      e Zd ZdZdZy)OrderByRoler   zORDER BY expressionNr*   r   r    r!   rS   rS      s    I&Jr    rS   c                      e Zd ZdZy)StructuralRoler   Nr   r   r   r   r   r    r!   rU   rU          Ir    rU   c                      e Zd ZdZdZy)StatementOptionRoler   z statement sub-expression elementNr*   r   r    r!   rY   rY      s    I3Jr    rY   c                      e Zd ZdZdZy)OnClauseRoler   zCON clause, typically a SQL expression or ORM relationship attributeNr*   r   r    r!   r[   r[      s    I	% r    r[   c                      e Zd ZdZdZy)WhereHavingRoler   z$SQL expression for WHERE/HAVING roleNr*   r   r    r!   r]   r]      s    I7Jr    r]   c                      e Zd ZdZdZddZy)ExpressionElementRoler   zSQL expression elementc                    t               rB   rC   )rF   names     r!   labelzExpressionElementRole.label   s    !##r    N)ra   Optional[str]rH   z	Label[_T])r   r   r   r   r+   rb   r   r    r!   r_   r_      s     I)J$r    r_   c                      e Zd ZdZdZy)ConstExprRoler   z#Constant True/False/None expressionNr*   r   r    r!   re   re      s    I6Jr    re   c                      e Zd ZdZy)LabeledColumnExprRoler   NrV   r   r    r!   rg   rg      rW   r    rg   c                      e Zd ZdZdZy)BinaryElementRoler   z'SQL expression element or literal valueNr*   r   r    r!   ri   ri      s    I:Jr    ri   c                      e Zd ZdZdZy)InElementRoler   z?IN expression list, SELECT construct, or bound parameter objectNr*   r   r    r!   rk   rk      s    II r    rk   c                      e Zd ZdZdZy)JoinTargetRoler   zGJoin target, typically a FROM expression, or ORM relationship attributeNr*   r   r    r!   rm   rm      s    I	! r    rm   c                  $    e Zd ZU dZdZdZded<   y)FromClauseRoler   z2FROM expression, such as a Table or alias() objectFboolnamed_with_columnN)r   r   r   r   r+   _is_subqueryr%   r   r    r!   ro   ro      s    IEJLr    ro   c                      e Zd ZdZy)StrictFromClauseRoler   NrV   r   r    r!   rt   rt      rW   r    rt   c                  0    e Zd ZdZerddd	 	 	 	 	 ddZyy)AnonymizedFromClauseRoler   NF)ra   flatc                    y rB   r   )rF   ra   rw   s      r!   _anonymous_fromclausez.AnonymizedFromClauseRole._anonymous_fromclause   s    r    )ra   rc   rw   rp   rH   r   )r   r   r   r   r   ry   r   r    r!   rv   rv      s3    I ,0e	(	7;		 r    rv   c                      e Zd ZdZdZy)ReturnsRowsRoler   zcRow returning expression such as a SELECT, a FROM clause, or an INSERT/UPDATE/DELETE with RETURNINGNr*   r   r    r!   r{   r{      s    I	. r    r{   c                  X    e Zd ZdZdZerej                  dd       Zyej                  Zy)StatementRoler   z"Executable SQL or text() constructc                     y rB   r   rE   s    r!   _propagate_attrszStatementRole._propagate_attrs   s    ;>r    N)rH   r   )
r   r   r   r   r+   r   r
   memoized_propertyr   
EMPTY_DICTr   r    r!   r}   r}      s/    I5J			> 
 >  ??r    r}   c                      e Zd ZdZdZddZy)SelectStatementRoler   z/SELECT construct or equivalent text() constructc                    t        d      )NzFAll SelectStatementRole objects should implement a .subquery() method.rC   rE   s    r!   subqueryzSelectStatementRole.subquery  s    !"
 	
r    N)rH   r   )r   r   r   r   r+   r   r   r    r!   r   r      s    IBJ
r    r   c                      e Zd ZdZy)
HasCTERoler   NrV   r   r    r!   r   r   	  rW   r    r   c                      e Zd ZdZdZy)	IsCTERoler   z
CTE objectNr*   r   r    r!   r   r     s    IJr    r   c                      e Zd ZdZdZdZy)CompoundElementRolezDSELECT statements inside a CompoundSelect, e.g. UNION, EXTRACT, etc.r   z@SELECT construct for inclusion in a UNION or other set constructNr   r   r   r   r   r+   r   r    r!   r   r     s    NIJ r    r   c                      e Zd ZdZy)DMLRoler   NrV   r   r    r!   r   r     rW   r    r   c                      e Zd ZdZdZy)DMLTableRoler   z-subject table for an INSERT, UPDATE or DELETENr*   r   r    r!   r   r      s    I@Jr    r   c                      e Zd ZdZdZy)DMLColumnRoler   z*SET/VALUES column expression or string keyNr*   r   r    r!   r   r   %  s    I=Jr    r   c                      e Zd ZdZdZdZy)DMLSelectRolez@A SELECT statement embedded in DML, typically INSERT from SELECTr   z-SELECT statement or equivalent textual objectNr   r   r    r!   r   r   *  s    JI@Jr    r   c                      e Zd ZdZy)DDLRoler   NrV   r   r    r!   r   r   1  rW   r    r   c                      e Zd ZdZdZy)DDLExpressionRoler   z)SQL expression element for DDL constraintNr*   r   r    r!   r   r   5  s    I<Jr    r   c                      e Zd ZdZdZy)DDLConstraintColumnRoler   z:String column name or column expression for DDL constraintNr*   r   r    r!   r   r   :  s    IMJr    r   c                      e Zd ZdZdZy)DDLReferredColumnRoler   zBString column name or Column object for DDL foreign key constraintNr*   r   r    r!   r   r   ?  s    IL r    r   N)C
__future__r   typingr   r   r   r   r    r
   util.typingr   _typingr   elementsr   
selectabler   r   r   r   r   r   r#   r'   r)   r-   r/   r1   r3   r7   r9   r<   r>   r@   rK   rM   rO   rQ   rS   rU   rY   r[   r]   r_   re   rg   ri   rk   rm   ro   rt   rv   r{   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   <module>r      s   #        !,+&$Tsd3    
0g 0
67 6
(w (
% %
30 3
3- 3
W  )W )
$(.. $WU^W -g -
3~ 3
'"NH ''"H '
W 4. 4
#^ 8l 8
$259 $7)"- 7
1"5 ;-b1 ;
G %~~ & > 
3 g 
+G 
+
- 
  
*G m A> A
>G >
AG Am = =
Ng N
3 r    