U
    ÌZjâ†  ã                   @   sV  d dl Z d dl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ZdZdZdZdZdZ	dd„ Zdd„ Zdd„ Zdd„ Zdzdd„Zdd„ Z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!dej"ddfd(d)„Z#G d*d+„ d+eƒZ$G d,d-„ d-eƒZ%G d.d/„ d/eƒZ&G d0d1„ d1eƒZ'G d2d3„ d3eƒZ(G d4d5„ d5eƒZ)G d6d7„ d7e!eƒZ*G d8d9„ d9e*eƒZ+G d:d;„ d;eƒZ,G d<d=„ d=e%e!eƒZ-G d>d?„ d?e%e!eƒZ.G d@dA„ dAe%eƒZ/G dBdC„ dCe$eƒZ0G dDdE„ dEe eƒZ1G dFdG„ dGe%eƒZ2G dHdI„ dIe%e!eej3ƒZ4G dJdK„ dKe4eƒZ5G dLdM„ dMe4eƒZ6G dNdO„ dOe eƒZ7G dPdQ„ dQeƒZ8G dRdS„ dSeeƒZ9G dTdU„ dUee%eƒZ:G dVdW„ dWee eƒZ;G dXdY„ dYe;ƒZ<G dZd[„ d[eƒZ=G d\d]„ d]e*ƒZ>G d^d_„ d_e'e%eƒZ?G d`da„ daeƒZ@G dbdc„ dce%eƒZAG ddde„ dee$eƒZBG dfdg„ dge@ƒZCG dhdi„ dieƒZDG djdk„ dkeƒZEG dldm„ dme'e$eƒZFG dndo„ doeFƒZGG dpdq„ dqeGƒZHG drds„ dse'e$eƒZIG dtdu„ due$eƒZJG dvdw„ dwe$eƒZKi ZLeMeƒD ]JZNeOeeNƒZPeN Qdx¡�reN Rdxdy¡ZNeNeSƒ k�reSƒ eN ePƒZTeTeLeP< �qdS ){é    Né   )Ú	operators)Úroles)Úvisitors)ÚExecutableOption)ÚOptions)ÚHasCacheKey)Ú	Visitableé   )Úexc)Ú
inspection)Úutil)Úcollections_abcc                 C   s   t | ttjfƒ ot| dƒ S )zhReturn whether or not the element is a "literal" in the context
    of a SQL expression construct.

    Ú__clause_element__)Ú
isinstancer	   ÚschemaÚSchemaEventTargetÚhasattr)Úelement© r   ú[/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/site-packages/sqlalchemy/sql/coercions.pyÚ_is_literal    s    þ
ûr   c                 C   sr   t | tjƒr2t | tƒs2| D ]}t|ƒs dS qdS t | ttjtt	t
jjfƒ opt| dƒ opt | tƒ ppt| tƒ S )a  Return whether or not the element is a "literal" in the context
    of a SQL expression construct.

    does a deeper more esoteric check than _is_literal.   is used
    for lambda elements that have to distinguish values that would
    be bound vs. not without any context.

    FTr   )r   r   ÚSequenceÚstrÚ_deep_is_literalr	   r   r   r   r   r   ZlanghelpersZ_symbolr   ÚtypeÚ
issubclass)r   Úelemr   r   r   r   /   s,    
 ÿûþ

ö
òr   c                 C   s   t  | d||f ¡S )NzÆ.. warning:: The %s argument to %s can be passed as a Python string argument, which will be treated as **trusted SQL text** and rendered as given.  **DO NOT PASS UNTRUSTED INPUT TO THIS PARAMETER**.)r   Zadd_parameter_text)Z	paramnameZmeth_rstZ	param_rstr   r   r   Ú_document_text_coercionU   s    ùþr   c                 C   sT   |rLt |d tttfƒrLt|ƒdkrLt |d tƒrDt d| |f ¡ |d S |S d S )Nr   r   z‹The "%s" argument to %s(), when referring to a sequence of items, is now passed as a series of positional elements, rather than as a list. )r   ÚlistÚsetÚdictÚlenr   Úwarn_deprecated_20)ÚattrnameZfnnameÚargsr   r   r   Ú!_expression_collection_was_a_listc   s    $þÿr&   Fc                 K   s¾  | j r2t|ƒr2t|dƒr2tj|| tjf |Ž|d�S t|  }|}t|tj	t
jt
jfƒ�sHd }|jrp|j|f|Ž}nÖ|}d}	|jr˜t|| ƒr˜t|dƒr˜d}	n(t|dƒrÀd}	t|ddƒsÀ| ¡ }q˜qÀq˜|	�sB|j�r tj|dd�}
|
d k	�r |rð|
j z|
 ¡ }W n" tk
�r   | ||¡ Y nX |d k�rF|j|fd|i|—Ž}n|}n|}|d k	�rn|j�sn|j�rn|j|_|j|jjk�r¢|j�rž|j|f||d	œ|—Ž}|S |j||fd|i|—ŽS d S )
NÚ__code__)Úapply_propagate_attrsFr   TÚis_clause_element)ZraiseerrÚargname)r*   Úoriginal_element)Úallows_lambdaÚcallabler   ÚlambdasZLambdaElementZLambdaOptionsÚ_impl_lookupr   ÚelementsZClauseElementr   Z
SchemaItemZFetchedValueÚ_resolve_literal_onlyÚ_literal_coercionÚ$_skip_clauseelement_for_target_matchÚgetattrr   Ú_use_inspectionr   ÚinspectZ_post_inspectÚAttributeErrorÚ_raise_for_expectedZ_propagate_attrsÚ_role_classÚ	__class__Ú__mro__Ú_post_coercionÚ_implicit_coercions)Úroler   r(   r*   Zpost_inspectÚkwÚimplr+   Úresolvedr)   Zinspr   r   r   Úexpectp   s¢    	ÿúù	
ü	þÿþý



ÿÿÿÿþýÿýü ÿÿÿrB   c                 K   s   d|d< t | |f|ŽS )NTÚas_key)rB   )r>   r   r?   r   r   r   Úexpect_as_keyÙ   s    rD   c                 c   sx   |D ]n}d }d }t | |ƒ}t|tjƒr0| }}n$g }t |i d|ji¡ |rT|d }|d k	r`|n|}||||fV  qd S )NÚcolumnr   )rB   r   r   Ústring_typesr   ÚtraverseÚappend)r>   ZexpressionsÚexprZstrnamerE   rA   ÚcolsZadd_elementr   r   r   Ú expect_col_expression_collectionÞ   s    

rK   c                   @   s@   e Zd ZdZdd„ ZdZdZdZdd„ Zddd	„Z	dd
d„Z
dS )ÚRoleImpl)r9   Únamer5   c                 K   s
   t ƒ ‚d S ©N)ÚNotImplementedError©Úselfr   r?   r   r   r   r2   ò   s    zRoleImpl._literal_coercionNFc                 C   s    || _ |j| _t|tjƒ| _d S rN   )r9   Z
_role_namerM   r   r   ZUsesInspectionr5   )rQ   Z
role_classr   r   r   Ú__init__ù   s    zRoleImpl.__init__c                 K   s   |   |||¡ d S rN   ©r8   ©rQ   r   rA   r*   r?   r   r   r   r=   þ   s    zRoleImpl._implicit_coercionsc           	      C   sv   |d k	r||k	rd||f }nt |ƒ}|r<d| j||f }nd| j|f }|rZ|d| 7 }tjtj||d�|d� d S )Nz!%r object resolved from %r objectz$%s expected for argument %r; got %s.z%s expected, got %s.ú )Úcode©Zreplace_context)ÚreprrM   r   Úraise_r   ÚArgumentError)	rQ   r   r*   rA   ÚadvicerV   ÚerrÚgotÚmsgr   r   r   r8     s    	ýzRoleImpl._raise_for_expected)N)NNNNN)Ú__name__Ú
__module__Ú__qualname__Ú	__slots__r2   r<   r1   r3   rR   r=   r8   r   r   r   r   rL   ï   s   
     ùrL   c                   @   s   e Zd ZdZdd„ ZdS )Ú_Deannotater   c                 K   s   ddl m} ||ƒS )Nr   )Ú_deep_deannotate)r   rd   )rQ   rA   r?   rd   r   r   r   r<   !  s    z_Deannotate._post_coercionN©r_   r`   ra   rb   r<   r   r   r   r   rc     s   rc   c                   @   s   e Zd ZdZdZdS )Ú_StringOnlyr   TN)r_   r`   ra   rb   r1   r   r   r   r   rf   '  s   rf   c                   @   s"   e Zd ZdZddd„Zdd„ ZdS )Ú_ReturnsStringKeyr   Nc                 K   s"   t |tjƒr|S |  |||¡ d S rN   ©r   r   rF   r8   ©rQ   r+   rA   r*   r?   r   r   r   r=   0  s    z%_ReturnsStringKey._implicit_coercionsc                 K   s   |S rN   r   rP   r   r   r   r2   8  s    z#_ReturnsStringKey._literal_coercion)N©r_   r`   ra   rb   r=   r2   r   r   r   r   rg   -  s    ÿ
rg   c                   @   s"   e Zd ZdZdd„ Zddd„ZdS )Ú_ColumnCoercionsr   c                 C   s   t  d¡ d S )Nz|implicitly coercing SELECT object to scalar subquery; please use the .scalar_subquery() method to produce a scalar subquery.)r   Úwarn)rQ   r   r   r   Ú"_warn_for_scalar_subquery_coercion?  s    ÿz3_ColumnCoercions._warn_for_scalar_subquery_coercionNc                 K   sz   t |ddƒs|  |||¡ nZ|jr2|  ¡  | ¡ S |jrVt|tjƒrV|  ¡  |j	 ¡ S | j
jrh|jrh|S |  |||¡ d S )Nr)   F)r4   r8   Ú_is_select_statementrm   Úscalar_subqueryÚ_is_from_clauser   Ú
selectableZSubqueryr   r9   r,   Ú_is_lambda_elementri   r   r   r   r=   F  s     ÿ
z$_ColumnCoercions._implicit_coercions)N)r_   r`   ra   rb   rm   r=   r   r   r   r   rk   <  s    ÿrk   c                 C   sB   t j|dt  | ¡|rd|f nd|r,d| nddœ ƒ|d� d S )Nzc%(extra)sTextual SQL expression %(expr)r %(argname)sshould be explicitly declared as text(%(expr)r)úfor argument %sÚ z%s )rI   r*   ÚextrarW   )r   rY   Úellipses_string)r   r*   Zexc_clsru   r\   r   r   r   Ú_no_text_coercionY  s    ýþÿ	örw   c                   @   s   e Zd ZdZddd„ZdS )Ú_NoTextCoercionr   Nc                 K   s6   t |tjƒr&ttj| jƒr&t||ƒ n|  ||¡ d S rN   )	r   r   rF   r   r0   Ú
TextClauser9   rw   r8   ©rQ   r   r*   r?   r   r   r   r2   m  s     ÿz!_NoTextCoercion._literal_coercion)N©r_   r`   ra   rb   r2   r   r   r   r   rx   j  s   rx   c                   @   s0   e Zd ZdZdZdZdZddd„Zd	dd„ZdS )
Ú_CoerceLiteralsr   FNc                 C   s
   t ||ƒS rN   ©rw   ©rQ   r   r*   r   r   r   Ú_text_coercion|  s    z_CoerceLiterals._text_coercionc                 K   s¢   t |tjƒr8| jr(|dkr(tjddd�S | j||f|ŽS | jrn|d krNt ¡ S |dkr^t 	¡ S |dkrnt 
¡ S | jr’t |tjƒr’tjt|ƒdd�S |  ||¡ d S )NÚ*T)Z
is_literalF)r   r   rF   Ú_coerce_starr0   ÚColumnClauser   Ú_coerce_constsÚNullÚFalse_ÚTrue_Ú_coerce_numericsÚnumbersÚNumberr   r8   rz   r   r   r   r2     s    z!_CoerceLiterals._literal_coercion)N)N)	r_   r`   ra   rb   rƒ   r�   r‡   r   r2   r   r   r   r   r|   v  s   
r|   c                   @   s$   e Zd ZdZddd„Zddd„ZdS )	ÚLiteralValueImplTNc                 K   s2   t |ƒs | j|f||dœ|—Ž tjd ||dd�S )N)rA   r*   T©Útype_Úunique)r   r8   r0   ÚBindParameter)rQ   r   rA   r*   rŒ   r?   r   r   r   r=   —  s    ÿ ÿÿz$LiteralValueImpl._implicit_coercionsc                 K   s   |S rN   r   )rQ   r   r*   rŒ   r?   r   r   r   r2   ¡  s    z"LiteralValueImpl._literal_coercion)N)NN)r_   r`   ra   r1   r=   r2   r   r   r   r   rŠ   ”  s    ÿ

rŠ   c                       s"   e Zd ZdZd‡ fdd„	Z‡  ZS )Ú_SelectIsNotFromr   Nc                    s`   t |tjƒst |tjƒr6d|d k	r(|jn|f }d}nd  }}tt| ƒj|f||||dœ|—ŽS )NzETo create a FROM clause from a %s object, use the .subquery() method.Z89ve)r*   rA   r[   rV   )r   r   ZSelectStatementRoler:   Úsuperr�   r8   )rQ   r   r*   rA   r?   r[   rV   ©r:   r   r   r8   ¨  s(     ÿþÿ
ÿûúz$_SelectIsNotFrom._raise_for_expected)NN©r_   r`   ra   rb   r8   Ú__classcell__r   r   r‘   r   r�   ¥  s   r�   c                   @   s"   e Zd ZdZddd„Zdd„ ZdS )ÚHasCacheKeyImplr   Nc                 K   s"   t |tjƒr|S |  |||¡ d S rN   )r   Ú
traversalsr   r8   ri   r   r   r   r=   Â  s    z#HasCacheKeyImpl._implicit_coercionsc                 K   s   |S rN   r   rP   r   r   r   r2   Ê  s    z!HasCacheKeyImpl._literal_coercion)Nrj   r   r   r   r   r”   ¿  s    ÿ
r”   c                   @   s"   e Zd ZdZddd„Zdd„ ZdS )ÚExecutableOptionImplr   Nc                 K   s    t |tƒr|S |  |||¡ d S rN   )r   r   r8   ri   r   r   r   r=   Ñ  s    
z(ExecutableOptionImpl._implicit_coercionsc                 K   s   |S rN   r   rP   r   r   r   r2   Ù  s    z&ExecutableOptionImpl._literal_coercion)Nrj   r   r   r   r   r–   Î  s    ÿ
r–   c                       s,   e Zd ZdZddd„Zd	‡ fdd„	Z‡  ZS )
ÚExpressionElementImplr   NFc              
   K   sp   |d kr"|s"|d ks|j s"t ¡ S ztj|||d|d�W S  tjk
rj } z| j||d� W 5 d }~X Y nX d S )NT)r�   Z_is_crud©r\   )Zshould_evaluate_noner0   r„   rŽ   r   rZ   r8   )rQ   r   rM   rŒ   r*   Zis_crudr?   r\   r   r   r   r2   à  s&    ÿþýý    ÿz'ExpressionElementImpl._literal_coercionc                    s6   t |tjƒrd}nd }tt| ƒj|f|||dœ|—ŽS )Nz`To create a column expression from a FROM clause row as a whole, use the .table_valued() method.©r*   rA   r[   )r   r   ZAnonymizedFromClauseRoler�   r—   r8   ©rQ   r   r*   rA   r?   r[   r‘   r   r   r8   ô  s    ÿ
ÿ  ÿÿz)ExpressionElementImpl._raise_for_expected)NNNF)NN)r_   r`   ra   rb   r2   r8   r“   r   r   r‘   r   r—   Ý  s          ÿ
r—   c                   @   s$   e Zd ZdZddd„Zddd„ZdS )	ÚBinaryElementImplr   Nc              
   K   sJ   z|j |||d�W S  tjk
rD } z| j||d� W 5 d }~X Y nX d S )N)rŒ   r˜   )Ú_bind_paramr   rZ   r8   )rQ   r   rI   ÚoperatorÚbindparam_typer*   r?   r\   r   r   r   r2     s    z#BinaryElementImpl._literal_coercionc                 K   s,   |j jr(|j js(| |d k	r |n|j ¡}|S rN   )r   Z_isnullZ_with_binary_element_type)rQ   rA   rI   rž   r?   r   r   r   r<     s
    ÿz BinaryElementImpl._post_coercion)NN)N)r_   r`   ra   rb   r2   r<   r   r   r   r   r›     s
      ÿ
r›   c                   @   s2   e Zd ZdZddd„Zdd„ Zdd„ Zd	d
„ ZdS )ÚInElementImplr   Nc                 K   sd   |j rRt|tjƒr4|jjr4|  |¡ | j|jf|ŽS |  |¡ | j| ¡ f|ŽS n|  	|||¡ d S rN   )
rp   r   rq   ÚAliasr   rn   Ú_warn_for_implicit_coercionr<   Úselectr8   ri   r   r   r   r=     s    
ÿþ

z!InElementImpl._implicit_coercionsc                 C   s   t  d|jj ¡ d S )Nz_Coercing %s object into a select() for use in IN(); please pass a select() construct explicitly)r   rl   r:   r_   )rQ   r   r   r   r   r¡   *  s
    þÿz)InElementImpl._warn_for_implicit_coercionc                    s´   t |tjƒr¢t |tjƒs¢i ‰t|ƒ}|D ]F}t|ƒsZt |tjƒsP| j	|f|Ž qn|ˆ|< q(|d kr(t
 ¡ ˆ|< q(ˆr�t
j‡ ‡‡fdd„|D ƒŽ S ˆ jˆ|dd�S n| j	|f|Ž d S )Nc                    s(   g | ] }|ˆkrˆ| n
ˆ   ˆ|¡‘qS r   )rœ   )Ú.0Úo©rI   Znon_literal_expressionsr�   r   r   Ú
<listcomp>B  s   þÿ
z3InElementImpl._literal_coercion.<locals>.<listcomp>T)Ú	expanding)r   r   ÚIterabler   rF   r   r   r   ZColumnOperatorsr8   r0   r„   Ú
ClauseListrœ   )rQ   r   rI   r�   r?   r¤   r   r¥   r   r2   1  s*     ÿ
üÿ	zInElementImpl._literal_coercionc                 K   sh   |j r| ¡ S t|tjƒr8t|jƒdkr,t‚|j|d�S t|tj	ƒr`|j
dd�}d|_||_|S |S d S )Nr   )ZagainstT)Zmaintain_key)rn   ro   r   r0   r©   r"   ZclausesÚAssertionErrorZ
self_grouprŽ   Z_cloner§   Z	expand_op)rQ   r   rI   r�   r?   r   r   r   r<   O  s    zInElementImpl._post_coercion)N)r_   r`   ra   rb   r=   r¡   r2   r<   r   r   r   r   rŸ     s    ÿ
rŸ   c                       s>   e Zd ZdZdZd‡ fdd„	Zd‡ fdd„	Zdd	d
„Z‡  ZS )ÚOnClauseImplr   TNFc                    s6   |rt |tƒr|S tt| ƒj||f||dœ|—ŽS d S )N)r*   Úlegacy)r   r   r�   r«   r=   ©rQ   r+   rA   r*   r¬   r?   r‘   r   r   r=   g  s    
þüûz OnClauseImpl._implicit_coercionsc                    s.   |rt |tƒrt d¡ |S tt| ƒ ||¡S )Nú¡Using strings to indicate relationship names in Query.join() is deprecated and will be removed in SQLAlchemy 2.0.  Please use the class-bound attribute directly.)r   r   r   r#   r�   r«   r   )rQ   r   r*   r¬   r‘   r   r   r   u  s    ÿzOnClauseImpl._text_coercionc                 K   s   t |tjƒr|S |S rN   )r   r   ÚJoinTargetRole)rQ   rA   r+   r?   r   r   r   r<   �  s    zOnClauseImpl._post_coercion)NF)NF)N)	r_   r`   ra   rb   rƒ   r=   r   r<   r“   r   r   r‘   r   r«   b  s      ÿr«   c                   @   s   e Zd ZdZdZddd„ZdS )ÚWhereHavingImplr   TNc                 C   s
   t ||ƒS rN   r}   r~   r   r   r   r   ‘  s    zWhereHavingImpl._text_coercion)N©r_   r`   ra   rb   rƒ   r   r   r   r   r   r°   Œ  s   r°   c                   @   s   e Zd ZdZdZddd„ZdS )ÚStatementOptionImplr   TNc                 C   s
   t  |¡S rN   ©r0   ry   r~   r   r   r   r   š  s    z"StatementOptionImpl._text_coercion)Nr±   r   r   r   r   r²   •  s   r²   c                   @   s   e Zd ZdZdS )ÚColumnArgumentImplr   N©r_   r`   ra   rb   r   r   r   r   r´   ž  s   r´   c                   @   s   e Zd ZdZdS )ÚColumnArgumentOrKeyImplr   Nrµ   r   r   r   r   r¶   ¢  s   r¶   c                   @   s   e Zd ZdZddd„ZdS )ÚStrAsPlainColumnImplr   Nc                 C   s
   t  |¡S rN   )r0   r‚   r~   r   r   r   r   ©  s    z#StrAsPlainColumnImpl._text_coercion)N)r_   r`   ra   rb   r   r   r   r   r   r·   ¦  s   r·   c                   @   s   e Zd ZdZdZddd„ZdS )ÚByOfImplr   TNc                 C   s
   t  |¡S rN   )r0   Z_textual_label_referencer~   r   r   r   r   ³  s    zByOfImpl._text_coercion)Nr±   r   r   r   r   r¸   ­  s   r¸   c                   @   s   e Zd ZdZdd„ ZdS )ÚOrderByImplr   c                 K   s(   t || jƒr |jd k	r t |¡S |S d S rN   )r   r9   Z_order_by_label_elementr0   Z_label_reference)rQ   rA   r?   r   r   r   r<   º  s    
ÿþ
zOrderByImpl._post_coercionNre   r   r   r   r   r¹   ·  s   r¹   c                   @   s   e Zd ZdZddd„ZdS )ÚGroupByImplr   Nc                 K   s    t |tjƒrtj|jŽ S |S d S rN   )r   r   ZStrictFromClauseRoler0   r©   Úcri   r   r   r   r=   Ç  s    zGroupByImpl._implicit_coercions)N©r_   r`   ra   rb   r=   r   r   r   r   rº   Ä  s    ÿrº   c                   @   s   e Zd ZdZddd„ZdS )ÚDMLColumnImplr   Fc                 K   s   |r
|j S |S d S rN   )Úkey)rQ   r   rC   r?   r   r   r   r<   Ó  s    zDMLColumnImpl._post_coercionN)Fre   r   r   r   r   r½   Ð  s   r½   c                   @   s   e Zd ZdZddd„ZdS )ÚConstExprImplr   Nc                 K   s@   |d krt  ¡ S |dkr t  ¡ S |dkr0t  ¡ S |  ||¡ d S )NFT)r0   r„   r…   r†   r8   rz   r   r   r   r2   Ý  s    zConstExprImpl._literal_coercion)Nr{   r   r   r   r   r¿   Ú  s   r¿   c                   @   s$   e Zd ZdZddd„Zddd„ZdS )	ÚTruncatedLabelImplr   Nc                 K   s"   t |tjƒr|S |  |||¡ d S rN   rh   ri   r   r   r   r=   ë  s    z&TruncatedLabelImpl._implicit_coercionsc                 K   s   t |tjƒr|S t |¡S dS )z¸coerce the given value to :class:`._truncated_label`.

        Existing :class:`._truncated_label` and
        :class:`._anonymous_label` objects are passed
        unchanged.
        N)r   r0   Z_truncated_labelrz   r   r   r   r2   ó  s    z$TruncatedLabelImpl._literal_coercion)N)Nrj   r   r   r   r   rÀ   è  s    ÿ
rÀ   c                   @   s   e Zd ZdZdZddd„ZdS )ÚDDLExpressionImplr   TNc                 C   s
   t  |¡S rN   r³   r~   r   r   r   r     s    z DDLExpressionImpl._text_coercion)Nr±   r   r   r   r   rÁ     s   rÁ   c                   @   s   e Zd ZdZdS )ÚDDLConstraintColumnImplr   Nrµ   r   r   r   r   rÂ     s   rÂ   c                   @   s   e Zd ZdZdS )ÚDDLReferredColumnImplr   Nrµ   r   r   r   r   rÃ     s   rÃ   c                   @   s"   e Zd ZdZddd„Zdd„ ZdS )ÚLimitOffsetImplr   Nc                 K   s   |d krd S |   |||¡ d S rN   rS   rT   r   r   r   r=     s    z#LimitOffsetImpl._implicit_coercionsc                 K   s,   |d krd S t  |¡}tj|||dd�S d S )NTr‹   )r   Zasintrq   Z_OffsetLimitParam)rQ   r   rM   rŒ   r?   Úvaluer   r   r   r2      s    
   ÿz!LimitOffsetImpl._literal_coercion)Nrj   r   r   r   r   rÄ     s   
rÄ   c                       s"   e Zd ZdZd‡ fdd„	Z‡  ZS )ÚLabeledColumnExprImplr   Nc                    s\   t |tjƒr| d ¡S tt| ƒj||fd|i|—Ž}t |tjƒrJ| d ¡S |  |||¡ d S ©Nr*   )r   r   ZExpressionElementRoleÚlabelr�   rÆ   r=   r8   )rQ   r+   rA   r*   r?   Únewr‘   r   r   r=   -  s    

 ÿÿÿ
z)LabeledColumnExprImpl._implicit_coercions)N)r_   r`   ra   rb   r=   r“   r   r   r‘   r   rÆ   *  s    ÿrÆ   c                   @   s4   e Zd ZdZdZdZdZe dej	¡Z
ddd„ZdS )ÚColumnsClauseImplr   Tz^\w\S*$Nc                 C   sL   t |ƒ}| j |¡ }t dt |¡|r2d|f nd|r<dnddœ ¡‚d S )NzŸTextual column expression %(column)r %(argname)sshould be explicitly declared with text(%(column)r), or use %(literal_column)s(%(column)r) for more specificityrs   rt   Úliteral_columnrE   )rE   r*   rË   )r   Ú_guess_straight_columnÚmatchr   rZ   r   rv   )rQ   r   r*   Zguess_is_literalr   r   r   r   E  s    ÿûüÿz ColumnsClauseImpl._text_coercion)N)r_   r`   ra   rb   rƒ   r‡   r�   ÚreÚcompileÚIrÌ   r   r   r   r   r   rÊ   <  s   rÊ   c                   @   s   e Zd ZdZdS )ÚReturnsRowsImplr   Nrµ   r   r   r   r   rÑ   X  s   rÑ   c                       s6   e Zd ZdZd	dd„Zd
‡ fdd„	Zddd„Z‡  ZS )ÚStatementImplr   Nc                 K   sH   ||k	rDt |tjƒsDz
|j W n$ tk
rB   t d| d¡ Y nX |S )Na  Object %r should not be used directly in a SQL statement context, such as passing to methods such as session.execute().  This usage will be disallowed in a future release.  Please use Core select() / update() / delete() etc. with Session.execute() and other statement execution methods.ú1.4)r   r   rF   Z_execute_on_connectionr7   Úwarn_deprecated)rQ   rA   r+   r*   r?   r   r   r   r<   _  s    
 ÿ
úø
zStatementImpl._post_coercionc                    s,   |j r
|S tt| ƒj||fd|i|—ŽS d S rÇ   )rr   r�   rÒ   r=   ri   r‘   r   r   r=   u  s    
 ÿÿÿz!StatementImpl._implicit_coercionsc                 C   s   t  d¡ t |¡S )NzÈUsing plain strings to indicate SQL statements without using the text() construct is  deprecated and will be removed in version 2.0.  Ensure plain SQL statements are passed using the text() construct.)r   r#   r0   ry   r~   r   r   r   r     s    ÿzStatementImpl._text_coercion)N)N)N)r_   r`   ra   rb   r<   r=   r   r“   r   r   r‘   r   rÒ   \  s
   
 ÿ
rÒ   c                   @   s   e Zd ZdZddd„ZdS )ÚSelectStatementImplr   Nc                 K   s    |j r| ¡ S |  |||¡ d S rN   )Ú_is_text_clauseÚcolumnsr8   ri   r   r   r   r=   Œ  s    z'SelectStatementImpl._implicit_coercions)Nr¼   r   r   r   r   rÕ   ‰  s    ÿrÕ   c                   @   s   e Zd ZdZdS )Ú
HasCTEImplr   Nrµ   r   r   r   r   rØ   •  s   rØ   c                   @   s   e Zd ZdZdS )Ú	IsCTEImplr   Nrµ   r   r   r   r   rÙ   ™  s   rÙ   c                   @   s(   e Zd ZdZdZd	dd„Zd
dd„ZdS )ÚJoinTargetImplr   TFc                 K   s   t |tƒr|S d S rN   )r   r   )rQ   r   r¬   r?   r   r   r   r2   ¢  s    
z JoinTargetImpl._literal_coercionNc                 K   sn   t |tjƒr|S |r,t |tƒr,t d¡ |S |r@t |tjƒr@|S |r\|jr\tjddd� |S |  	|||¡ d S )Nr®   úÀImplicit coercion of SELECT and textual SELECT constructs into FROM clauses is deprecated; please call .subquery() on any Core select or ORM Query object in order to produce a subquery object.rÓ   ©Úversion)
r   r   r¯   r   r   r#   ZWhereHavingRolern   rÔ   r8   r­   r   r   r   r=   ¦  s     ÿ
ûz"JoinTargetImpl._implicit_coercions)F)NF)r_   r`   ra   rb   r3   r2   r=   r   r   r   r   rÚ   �  s   
   ÿrÚ   c                   @   s$   e Zd ZdZd	dd„Zd
dd„ZdS )ÚFromClauseImplr   NFTc                 K   sH   |j r,|r| ¡ S |rDtjddd� |jS n|jr6|S |  |||¡ d S ©NrÛ   rÓ   rÜ   )rn   Zsubqueryr   rÔ   Ú_implicit_subqueryrÖ   r8   )rQ   r+   rA   r*   Zexplicit_subqueryÚallow_selectr?   r   r   r   r=   Ì  s    	ûz"FromClauseImpl._implicit_coercionsc                 K   s   |r|  ¡ S |S d S rN   )Z_deannotate)rQ   r   Z
deannotater?   r   r   r   r<   æ  s    zFromClauseImpl._post_coercion)NFT)F)r_   r`   ra   rb   r=   r<   r   r   r   r   rÞ   É  s      ú
rÞ   c                   @   s   e Zd ZdZddd„ZdS )ÚStrictFromClauseImplr   NFc                 K   s0   |j r|rtjddd� |jS |  |||¡ d S rß   )rn   r   rÔ   rà   r8   )rQ   r+   rA   r*   rá   r?   r   r   r   r=   ð  s    
ûz(StrictFromClauseImpl._implicit_coercions)NFr¼   r   r   r   r   râ   í  s     ûrâ   c                   @   s   e Zd ZdZddd„ZdS )ÚAnonymizedFromClauseImplr   FNc                 K   s   |d kst ‚|j|d�S )N)Úflat)rª   Z_anonymous_fromclause)rQ   r   rä   rM   r?   r   r   r   r<     s    z'AnonymizedFromClauseImpl._post_coercion)FNre   r   r   r   r   rã     s   rã   c                   @   s   e Zd ZdZdd„ ZdS )ÚDMLTableImplr   c                 K   s   d|j kr|j d S |S d S )NZ	dml_table)Z_annotationsrP   r   r   r   r<     s    

zDMLTableImpl._post_coercionNre   r   r   r   r   rå     s   rå   c                   @   s   e Zd ZdZddd„ZdS )ÚDMLSelectImplr   Nc                 K   s<   |j r*t|tjƒr |jjr |jS | ¡ S n|  |||¡ d S rN   )rp   r   rq   r    r   rn   r¢   r8   ri   r   r   r   r=     s    
ÿþ
z!DMLSelectImpl._implicit_coercions)Nr¼   r   r   r   r   ræ     s    ÿræ   c                       s"   e Zd ZdZd‡ fdd„	Z‡  ZS )ÚCompoundElementImplr   Nc                    sB   t |tjƒr|jrd}q"d}nd }tt| ƒj|f|||dœ|—ŽS )NzFUse the plain select() object without calling .subquery() or .alias().z9To SELECT from any FROM clause, use the .select() method.r™   )r   r   ZFromClauseRoleZ_is_subqueryr�   rç   r8   rš   r‘   r   r   r8   -  s     ÿÿ
ÿ  ÿÿz'CompoundElementImpl._raise_for_expected)NNr’   r   r   r‘   r   rç   *  s   rç   ZRoleZImpl)NNF)Urˆ   rÎ   rt   r   r   r   Úbaser   r   r•   r   r	   r   r   r   r   r0   r.   r   rq   Zsqltypesr   r   r   r&   rB   rD   rK   ÚobjectrL   rc   rf   rg   rk   rZ   rw   rx   r|   rŠ   r�   r”   r–   r—   r›   rŸ   r«   r°   r²   r´   r¶   r·   ZByOfRoler¸   r¹   rº   r½   r¿   rÀ   rÁ   rÂ   rÃ   rÄ   rÆ   rÊ   rÑ   rÒ   rÕ   rØ   rÙ   rÚ   rÞ   râ   rã   rå   ræ   rç   r/   ÚdirrM   r4   ÚclsÚendswithÚreplaceÚglobalsr@   r   r   r   r   Ú<module>   sª   &   û
i/	   ÿ
&K*		

-,$	

