U
    d                     @  s  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rd
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dZG dd dZG dd dZG dd dZG dd deZG dd deZG dd deZG dd deZG d d! d!eZG d"d# d#eZG d$d% d%eZG d&d' d'eZG d(d) d)eeZ G d*d+ d+eeeZ!G d,d- d-ee eZ"G d.d/ d/eZ#G d0d1 d1eZ$G d2d3 d3eee$Z%G d4d5 d5ee$Z&G d6d7 d7eZ'G d8d9 d9e'Z(G d:d; d;ee'Z)G d<d= d=e)Z*G d>d? d?e"e Z+G d@dA dAe+e Z,G dBdC dCe+e Z-G dDdE dEe+e Z.G dFdG dGeZ/G dHdI dIeee'Z0G dJdK dKe!e0Z1G dLdM dMe1Z2G dNdO dOe2Z3G dPdQ dQeZ4G dRdS dSeZ5G dTdU dUe5e4Z6G dVdW dWe4Z7G dXdY dYeZ8G dZd[ d[eeZ9G d\d] d]e5Z:G d^d_ d_e1Z;G d`da daeZ<G dbdc dceZ=G ddde dee5Z>G dfdg dge'Z?G dhdi dieZ@G djdk dke@ZAdlS )m    )annotations)Any)Generic)Optional)TYPE_CHECKING)TypeVar   )util)Literal   )_PropagateAttrsType)Label)_SelectIterable)
FromClause)Subquery_T)boundc                   @  s   e Zd ZdZdZdZdZdS )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   r   r   8/tmp/pip-unpacked-wheel-wbr0uges/sqlalchemy/sql/roles.pyr      s   
r   c                   @  s"   e Zd ZU dZdZded< dZdS )UsesInspectionr   NzLiteral[None]_post_inspectT)r   r   r   r   r   __annotations__r   r   r   r   r   r   ,   s   
r   c                   @  s   e Zd ZdZdZdS )AllowsLambdaRoler   TN)r   r   r   r   r   r   r   r   r   r    2   s   r    c                   @  s   e Zd ZdZdZdS )HasCacheKeyRoler   zCacheable Core or ORM objectNr   r   r   r   
_role_namer   r   r   r   r!   7   s   r!   c                   @  s   e Zd ZdZdZdS )ExecutableOptionRoler   z"ExecutionOption Core or ORM objectNr"   r   r   r   r   r$   <   s   r$   c                   @  s   e Zd ZdZdZdS )LiteralValueRoler   zLiteral Python valueNr"   r   r   r   r   r%   A   s   r%   c                   @  s   e Zd ZdZdZdS )ColumnArgumentRoler   zColumn expressionNr"   r   r   r   r   r&   F   s   r&   c                   @  s   e Zd ZdZdZdS )ColumnArgumentOrKeyRoler   Column expression or string keyNr"   r   r   r   r   r'   K   s   r'   c                   @  s   e Zd ZdZdZdS )StrAsPlainColumnRoler   r(   Nr"   r   r   r   r   r)   P   s   r)   c                   @  s   e Zd ZdZdZdS )ColumnListRolezCElements suitable for forming comma separated lists of expressions.r   Nr   r   r   r   r   r   r   r   r   r*   U   s   r*   c                   @  s   e Zd ZdZdZdS )
StringRolez/mixin indicating a role that results in stringsr   Nr+   r   r   r   r   r,   [   s   r,   c                   @  s   e Zd ZdZdZdS )TruncatedLabelRoler   zString SQL identifierNr"   r   r   r   r   r-   a   s   r-   c                   @  s&   e Zd ZdZdZeddddZdS )ColumnsClauseRoler   z?Column expression, FROM clause, or other columns clause elementr   returnc                 C  s
   t  d S NNotImplementedErrorselfr   r   r   _select_iterablel   s    z"ColumnsClauseRole._select_iterableN)r   r   r   r   r#   propertyr6   r   r   r   r   r.   f   s
   r.   c                   @  s   e Zd ZdZdZdS )TypedColumnsClauseRolez'element-typed form of ColumnsClauseRoler   Nr+   r   r   r   r   r8   q   s   r8   c                   @  s   e Zd ZdZdZdS )LimitOffsetRoler   zLIMIT / OFFSET expressionNr"   r   r   r   r   r9   w   s   r9   c                   @  s   e Zd ZdZdZdS )ByOfRoler   zGROUP BY / OF / etc. expressionNr"   r   r   r   r   r:   |   s   r:   c                   @  s   e Zd ZdZdZdS )GroupByRoler   zGROUP BY expressionNr"   r   r   r   r   r;      s   r;   c                   @  s   e Zd ZdZdZdS )OrderByRoler   zORDER BY expressionNr"   r   r   r   r   r<      s   r<   c                   @  s   e Zd ZdZdS )StructuralRoler   Nr   r   r   r   r   r   r   r   r=      s   r=   c                   @  s   e Zd ZdZdZdS )StatementOptionRoler   z statement sub-expression elementNr"   r   r   r   r   r?      s   r?   c                   @  s   e Zd ZdZdZdS )OnClauseRoler   zCON clause, typically a SQL expression or ORM relationship attributeNr"   r   r   r   r   r@      s   r@   c                   @  s   e Zd ZdZdZdS )WhereHavingRoler   z$SQL expression for WHERE/HAVING roleNr"   r   r   r   r   rA      s   rA   c                   @  s$   e Zd ZdZdZdddddZdS )	ExpressionElementRoler   zSQL expression elementOptional[str]z	Label[_T])namer0   c                 C  s
   t  d S r1   r2   )r5   rD   r   r   r   label   s    zExpressionElementRole.labelN)r   r   r   r   r#   rE   r   r   r   r   rB      s   rB   c                   @  s   e Zd ZdZdZdS )ConstExprRoler   z#Constant True/False/None expressionNr"   r   r   r   r   rF      s   rF   c                   @  s   e Zd ZdZdS )LabeledColumnExprRoler   Nr>   r   r   r   r   rG      s   rG   c                   @  s   e Zd ZdZdZdS )BinaryElementRoler   z'SQL expression element or literal valueNr"   r   r   r   r   rH      s   rH   c                   @  s   e Zd ZdZdZdS )InElementRoler   z?IN expression list, SELECT construct, or bound parameter objectNr"   r   r   r   r   rI      s   rI   c                   @  s   e Zd ZdZdZdS )JoinTargetRoler   zGJoin target, typically a FROM expression, or ORM relationship attributeNr"   r   r   r   r   rJ      s   rJ   c                   @  s"   e Zd ZU dZdZdZded< dS )FromClauseRoler   z2FROM expression, such as a Table or alias() objectFboolZnamed_with_columnN)r   r   r   r   r#   Z_is_subqueryr   r   r   r   r   rK      s   
rK   c                   @  s   e Zd ZdZdS )StrictFromClauseRoler   Nr>   r   r   r   r   rM      s   rM   c                   @  s.   e Zd ZdZer*dddddddd	d
ZdS )AnonymizedFromClauseRoler   NF)rD   flatrC   rL   r   )rD   rO   r0   c                C  s   d S r1   r   )r5   rD   rO   r   r   r   _anonymous_fromclause   s    z.AnonymizedFromClauseRole._anonymous_fromclause)r   r   r   r   r   rP   r   r   r   r   rN      s
    rN   c                   @  s   e Zd ZdZdZdS )ReturnsRowsRoler   zcRow returning expression such as a SELECT, a FROM clause, or an INSERT/UPDATE/DELETE with RETURNINGNr"   r   r   r   r   rQ      s   rQ   c                   @  s4   e Zd ZdZdZer*ejddddZnej	ZdS )StatementRoler   z"Executable SQL or text() constructr   r/   c                 C  s   d S r1   r   r4   r   r   r   _propagate_attrs   s    zStatementRole._propagate_attrsN)
r   r   r   r   r#   r   r	   Zmemoized_propertyrS   
EMPTY_DICTr   r   r   r   rR      s   rR   c                   @  s"   e Zd ZdZdZddddZdS )SelectStatementRoler   z/SELECT construct or equivalent text() constructr   r/   c                 C  s   t dd S )NzFAll SelectStatementRole objects should implement a .subquery() method.r2   r4   r   r   r   subquery  s    zSelectStatementRole.subqueryN)r   r   r   r   r#   rV   r   r   r   r   rU      s   rU   c                   @  s   e Zd ZdZdS )
HasCTERoler   Nr>   r   r   r   r   rW   
  s   rW   c                   @  s   e Zd ZdZdZdS )	IsCTERoler   z
CTE objectNr"   r   r   r   r   rX     s   rX   c                   @  s   e Zd ZdZdZdZdS )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   rY     s   rY   c                   @  s   e Zd ZdZdS )DMLRoler   Nr>   r   r   r   r   r[     s   r[   c                   @  s   e Zd ZdZdZdS )DMLTableRoler   z-subject table for an INSERT, UPDATE or DELETENr"   r   r   r   r   r\   !  s   r\   c                   @  s   e Zd ZdZdZdS )DMLColumnRoler   z*SET/VALUES column expression or string keyNr"   r   r   r   r   r]   &  s   r]   c                   @  s   e Zd ZdZdZdZdS )DMLSelectRolez@A SELECT statement embedded in DML, typically INSERT from SELECTr   z-SELECT statement or equivalent textual objectNrZ   r   r   r   r   r^   +  s   r^   c                   @  s   e Zd ZdZdS )DDLRoler   Nr>   r   r   r   r   r_   2  s   r_   c                   @  s   e Zd ZdZdZdS )DDLExpressionRoler   z)SQL expression element for DDL constraintNr"   r   r   r   r   r`   6  s   r`   c                   @  s   e Zd ZdZdZdS )DDLConstraintColumnRoler   z:String column name or column expression for DDL constraintNr"   r   r   r   r   ra   ;  s   ra   c                   @  s   e Zd ZdZdZdS )DDLReferredColumnRoler   zBString column name or Column object for DDL foreign key constraintNr"   r   r   r   r   rb   @  s   rb   N)B
__future__r   typingr   r   r   r   r    r	   Zutil.typingr
   _typingr   elementsr   Z
selectabler   r   r   r   r   r   r    r!   r$   r%   r&   r'   r)   r*   r,   r-   r.   r8   r9   r:   r;   r<   r=   r?   r@   rA   rB   rF   rG   rH   rI   rJ   rK   rM   rN   rQ   rR   rU   rW   rX   rY   r[   r\   r]   r^   r_   r`   ra   rb   r   r   r   r   <module>   sv   		
