
    [hA0                    b   d 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  G d dej                  Z G d dej                  Z G d dej                  Z e            Z e            Z G d d          ZddZdS )zEvaluation functions used **INTERNALLY** by ORM DML use cases.


This module is **private, for internal use by SQLAlchemy**.

.. versionchanged:: 2.0.4 renamed ``EvaluatorCompiler`` to
   ``_EvaluatorCompiler``.

    )annotations)Type   )exc)LoaderCallableStatus)PassiveFlag   )inspect)and_)	operators)Concatenable)Integer)Numeric)warn_deprecatedc                      e Zd ZdS )UnevaluatableErrorN)__name__
__module____qualname__     g/var/www/api.easyaligner.net/htdocs/venv_linux/lib/python3.11/site-packages/sqlalchemy/orm/evaluator.pyr   r   %   s        Dr   r   c                      e Zd Zd Zd ZdS )	_NoObjectc                    d S Nr   selfargkws      r   operatez_NoObject.operate*       tr   c                    d S r   r   r   s      r   reverse_operatez_NoObject.reverse_operate-   r"   r   Nr   r   r   r!   r$   r   r   r   r   r   )   2              r   r   c                      e Zd Zd Zd ZdS )_ExpiredObjectc                    | S r   r   r   s      r   r!   z_ExpiredObject.operate2       r   c                    | S r   r   r   s      r   r$   z_ExpiredObject.reverse_operate5   r*   r   Nr%   r   r   r   r(   r(   1   r&   r   r(   c                      e Zd ZddZd Zd Zd Zd Zd Zd Z	d	 Z
d
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZeZeZeZeZeZeZeZeZeZeZeZ d Z!d Z"d Z#d Z$d Z%d Z&d Z'dS )_EvaluatorCompilerNc                    || _         d S r   )
target_cls)r   r/   s     r   __init__z_EvaluatorCompiler.__init__>   s    $r   c                    |rt          |g|R  }t          | d|j         d           }|s$t          dt	          |          j                    ||          S )Nvisit_Cannot evaluate )r   getattr__visit_name__r   typer   )r   clauseclausesmeths       r   processz_EvaluatorCompiler.processA   sz     	,&+7+++Ft=f&;==tDD 	$:4<<#8::   tF||r   c                6    |                      |j                  S r   )r:   elementr   r7   s     r   visit_groupingz!_EvaluatorCompiler.visit_groupingL   s    ||FN+++r   c                    d S )Nc                    d S r   r   objs    r   <lambda>z/_EvaluatorCompiler.visit_null.<locals>.<lambda>P       4 r   r   r=   s     r   
visit_nullz_EvaluatorCompiler.visit_nullO       r   c                    d S )Nc                    dS )NFr   rA   s    r   rC   z0_EvaluatorCompiler.visit_false.<locals>.<lambda>S   s    5 r   r   r=   s     r   visit_falsez_EvaluatorCompiler.visit_falseR   s       r   c                    d S )Nc                    dS )NTr   rA   s    r   rC   z/_EvaluatorCompiler.visit_true.<locals>.<lambda>V   rD   r   r   r=   s     r   
visit_truez_EvaluatorCompiler.visit_trueU   rF   r   c                   	 |j         d         }n%# t          $ r}t          d|           |d }~ww xY w| j        r1t	          | j        |j                  st          d|j                   |                                 	 |j        |         j        }n*# t          j
        $ r}t          d|           |d }~ww xY w|j        |         j        fd}|S )NparentmapperzCannot evaluate column: z0Can't evaluate criteria against alternate class zCannot evaluate expression: c                    | t           S t          |           }|j        }                    ||t          j                  }|t          j        u rt          S |S )N)passive)	
_NO_OBJECTr
   dictgetr   PASSIVE_NO_FETCHr   PASSIVE_NO_RESULT_EXPIRED_OBJECT)rB   statedict_valueimpls       r   get_corresponding_attrz?_EvaluatorCompiler.visit_column.<locals>.get_corresponding_attr   s^    {!!CLLEJEHHuk&B   E ,>>>&&Lr   )_annotationsKeyErrorr   r/   
issubclassclass__check_configure_columntopropertykeyorm_excUnmappedColumnErrorclass_managerrZ   )r   r7   rN   kerb   errr[   rZ   s          @r   visit_columnz_EvaluatorCompiler.visit_columnX   sF   	!.~>LL 	 	 	$3633 	
 ? 	:O\0$
 $
 	 %9#/#69 9  
 	%%'''	08<CC* 	 	 	$4s44 	 )#.3	 	 	 	 	 &%s(    
3.3B B=%B88B=c                ,    |                      |          S r   visit_clauselistr=   s     r   visit_tuplez_EvaluatorCompiler.visit_tuple       $$V,,,r   c                ,    |                      |          S r   rj   r=   s     r   visit_expression_clauselistz._EvaluatorCompiler.visit_expression_clauselist   rm   r   c                      fd|j         D             }d|j        j                            d           d}t	           |d           }|r ||j        ||          S t          d|j                   )Nc                :    g | ]}                     |          S r   )r:   ).0r7   r   s     r   
<listcomp>z7_EvaluatorCompiler.visit_clauselist.<locals>.<listcomp>   s%    HHHvdll6**HHHr   r2   __clauselist_opz)Cannot evaluate clauselist with operator )r8   operatorr   rstripr4   r   )r   r7   
evaluatorsdispatchr9   s   `    r   rk   z#_EvaluatorCompiler.visit_clauselist   s    HHHHHHH
 JV_-44S99III 	 tXt,, 	4V<<<$MFOMM  r   c                T   |                      |j                  }|                      |j                  }d|j        j                            d           d}t          | |d           }|r ||j        |||          S t          dt          |          j         d|j                   )Nr2   rt   
_binary_opr3    with operator )	r:   leftrightrv   r   rw   r4   r   r6   )r   r7   	eval_left
eval_rightry   r9   s         r   visit_binaryz_EvaluatorCompiler.visit_binary   s    LL--	\\&,//
LFO4;;C@@LLLtXt,, 	4JGGG$.4<<#8 . ."O. .  r   c                    fd}|S )Nc                n    d}D ]*} ||           }|t           u r	t           c S |r dS |p|d u }+|rd S dS NFTrV   )rB   has_nullsub_evaluaterY   rx   s       r   evaluatez;_EvaluatorCompiler.visit_or_clauselist_op.<locals>.evaluate   sn    H * 5 5$S))O++****  44#4u} t5r   r   r   rv   rx   r7   r   s     `  r   visit_or_clauselist_opz)_EvaluatorCompiler.visit_or_clauselist_op   s#    	 	 	 	 	 r   c                    fd}|S )Nc                r    D ]2} ||           }|t           u r	t           c S |s|	|t          u r d S  dS 3dS r   )rV   rQ   )rB   r   rY   rx   s      r   r   z<_EvaluatorCompiler.visit_and_clauselist_op.<locals>.evaluate   si     * ! !$S))O++**** !}(;(;#tt 55! 4r   r   r   s     `  r   visit_and_clauselist_opz*_EvaluatorCompiler.visit_and_clauselist_op   s#    
	 
	 
	 
	 
	 r   c                    fd}|S )Nc                    g }D ]B} ||           }|t           u r	t           c S |	|t          u r d S |                    |           Ct          |          S r   )rV   rQ   appendtuple)rB   valuesr   rY   rx   s       r   r   zA_EvaluatorCompiler.visit_comma_op_clauselist_op.<locals>.evaluate   st    F * % %$S))O++****]ez&9&944e$$$$== r   r   r   s     `  r   visit_comma_op_clauselist_opz/_EvaluatorCompiler.visit_comma_op_clauselist_op   s#    		! 		! 		! 		! 		! r   c                p    |j         r|                     ||||          S t          d|j        d          )NzCustom operator zR can't be evaluated in Python unless it specifies a callable using `.python_impl`.)python_impl_straight_evaluater   opstringr   rv   r   r   r7   s        r   visit_custom_op_binary_opz,_EvaluatorCompiler.visit_custom_op_binary_op   s]      		**)Z   %"8#4 " " "  r   c                    fd}|S )Nc                n     |           } |           }|t           u s	|t           u rt           S ||k    S r   r   rB   left_val	right_valr   r   s      r   r   z7_EvaluatorCompiler.visit_is_binary_op.<locals>.evaluate   C     y~~H"
3I?**i?.J.J&&y((r   r   r   rv   r   r   r7   r   s     ``  r   visit_is_binary_opz%_EvaluatorCompiler.visit_is_binary_op   )    	) 	) 	) 	) 	) 	) r   c                    fd}|S )Nc                n     |           } |           }|t           u s	|t           u rt           S ||k    S r   r   r   s      r   r   z;_EvaluatorCompiler.visit_is_not_binary_op.<locals>.evaluate   r   r   r   r   s     ``  r   visit_is_not_binary_opz)_EvaluatorCompiler.visit_is_not_binary_op   r   r   c                    fd}|S )Nc                     |           } |           }|t           u s	|t           u rt           S ||d S   |            |                     S r   r   )rB   r   r   r   r   rv   s      r   r   z7_EvaluatorCompiler._straight_evaluate.<locals>.evaluate   sj     y~~H"
3I?**i?.J.J&&!Y%6t8IIcNNJJsOO<<<r   r   r   s    ```  r   r   z%_EvaluatorCompiler._straight_evaluate   s/    	= 	= 	= 	= 	= 	= 	= r   c                   |j         j        j        t          t          fvs|j        j        j        t          t          fvr1t          d|j         d|j         j         d|j        j                   |                     ||||          S )NzCannot evaluate math operator "" for datatypes , )	r}   r6   _type_affinityr   r   r~   r   r   r   r   s        r   _straight_evaluate_numeric_onlyz2_EvaluatorCompiler._straight_evaluate_numeric_only  s     ;*3
 
 
 \-gw5GGG$E(2C E E#[-E E171BE E  
 &&xJOOOr   c                4    |                      d |||          S )Nc                     | t           ur| |v nd S r   rQ   abs     r   rC   z:_EvaluatorCompiler.visit_in_op_binary_op.<locals>.<lambda>(  s    1J#6#6aD r   r   r   s        r   visit_in_op_binary_opz(_EvaluatorCompiler.visit_in_op_binary_op&  s)    &&@@	
 
 	
r   c                4    |                      d |||          S )Nc                     | t           ur| |vnd S r   r   r   s     r   rC   z>_EvaluatorCompiler.visit_not_in_op_binary_op.<locals>.<lambda>2  s    q
':':! r   r   r   s        r   visit_not_in_op_binary_opz,_EvaluatorCompiler.visit_not_in_op_binary_op.  s+     &&DD	
 
 	
r   c                &   t          |j        j        j        t                    r$t          |j        j        j        t                    s1t          d|j         d|j        j         d|j        j                   |                     d |||          S )Nz&Cannot evaluate concatenate operator "r   r   c                    | |z   S r   r   r   s     r   rC   z>_EvaluatorCompiler.visit_concat_op_binary_op.<locals>.<lambda>F  s
    Q r   )	r^   r}   r6   r   r   r~   r   r   r   r   s        r   visit_concat_op_binary_opz,_EvaluatorCompiler.visit_concat_op_binary_op8  s     K+\
 
 	FL-<lKK	 %E%E E#[-E E171BE E   &&	:v
 
 	
r   c                4    |                      d |||          S )Nc                ,    |                      |          S r   )
startswithr   s     r   rC   zB_EvaluatorCompiler.visit_startswith_op_binary_op.<locals>.<lambda>M  s    a r   r   r   s        r   visit_startswith_op_binary_opz0_EvaluatorCompiler.visit_startswith_op_binary_opI  s(     &&(()Z
 
 	
r   c                4    |                      d |||          S )Nc                ,    |                      |          S r   )endswithr   s     r   rC   z@_EvaluatorCompiler.visit_endswith_op_binary_op.<locals>.<lambda>T  s    A r   r   r   s        r   visit_endswith_op_binary_opz._EvaluatorCompiler.visit_endswith_op_binary_opP  s(     &&&&	:v
 
 	
r   c                    |                      |j                  |j        t          j        u rfd}|S t          dt          |          j         d|j                   )Nc                H     |           }|t           u rt           S |d S | S r   r   )rB   rY   
eval_inners     r   r   z0_EvaluatorCompiler.visit_unary.<locals>.evaluate[  s3    "
3O++**]4 y r   r3   r|   )r:   r<   rv   r   invr   r6   r   )r   r7   r   r   s      @r   visit_unaryz_EvaluatorCompiler.visit_unaryW  s    \\&.11
?im++! ! ! ! ! O /tF||4 / /#_/ /
 
 	
r   c                T    |j         r|                                 n|j        fdS )Nc                    S r   r   )rB   vals    r   rC   z4_EvaluatorCompiler.visit_bindparam.<locals>.<lambda>n  s    3 r   )callablerY   )r   r7   r   s     @r   visit_bindparamz"_EvaluatorCompiler.visit_bindparami  s1    ? 	//##CC,Cr   r   )(r   r   r   r0   r:   r>   rE   rI   rL   rh   rl   ro   rk   r   r   r   r   r   r   r   r   r   visit_add_binary_opvisit_mul_binary_opvisit_sub_binary_opvisit_mod_binary_opvisit_truediv_binary_opvisit_lt_binary_opvisit_le_binary_opvisit_ne_binary_opvisit_gt_binary_opvisit_ge_binary_opvisit_eq_binary_opr   r   r   r   r   r   r   r   r   r   r-   r-   =   s       % % % %	 	 	, , ,     ! ! !     4& 4& 4&l- - -- - -                   P P P :999=++++++
 
 

 
 

 
 
"
 
 

 
 

 
 
$    r   r-   namestrreturnType[_EvaluatorCompiler]c                p    | dk    rt          dd           t          S t          dt          d|           )NEvaluatorCompilerzDirect use of 'EvaluatorCompiler' is not supported, and this name will be removed in a future release.  '_EvaluatorCompiler' is for internal use onlyz2.0zmodule z has no attribute )r   r-   AttributeErrorr   )r   s    r   __getattr__r   q  sQ    """< 		
 	
 	
 "!MxMMTMMNNNr   N)r   r   r   r   )__doc__
__future__r   typingr    r   rc   baser   r   r
   sqlr   r   sql.sqltypesr   r   r   utilr   InvalidRequestErrorr   ColumnOperatorsr   r(   rQ   rV   r-   r   r   r   r   <module>r      s    # " " " " "             & & & & & &                               ' ' ' ' ' ' " " " " " " " " " " " " " " " " " "	 	 	 	 	0 	 	 	    	)       Y.    Y[[
 .""q q q q q q q qh	
O 
O 
O 
O 
O 
Or   