
    
 @g.                    V   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  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)Integer)Numeric)warn_deprecatedc                      e Zd ZdS )UnevaluatableErrorN)__name__
__module____qualname__     L/var/www/piapp/venv/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.operate1       r   c                    | S r   r   r   s      r   r#   z_ExpiredObject.reverse_operate4   r)   r   Nr$   r   r   r   r'   r'   0   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.process@   sz     	,&+7+++Ft=f&;==tDD 	$:4<<#8::   tF||r   c                6    |                      |j                  S r   )r9   elementr   r6   s     r   visit_groupingz!_EvaluatorCompiler.visit_groupingK   s    ||FN+++r   c                    d S )Nc                    d S r   r   objs    r   <lambda>z/_EvaluatorCompiler.visit_null.<locals>.<lambda>O       4 r   r   r<   s     r   
visit_nullz_EvaluatorCompiler.visit_nullN       r   c                    d S )Nc                    dS )NFr   r@   s    r   rB   z0_EvaluatorCompiler.visit_false.<locals>.<lambda>R   s    5 r   r   r<   s     r   visit_falsez_EvaluatorCompiler.visit_falseQ   s       r   c                    d S )Nc                    dS )NTr   r@   s    r   rB   z/_EvaluatorCompiler.visit_true.<locals>.<lambda>U   rC   r   r   r<   s     r   
visit_truez_EvaluatorCompiler.visit_trueT   rE   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)rA   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_managerrY   )r   r6   rM   kera   errrZ   rY   s          @r   visit_columnz_EvaluatorCompiler.visit_columnW   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   ri   r<   s     r   visit_expression_clauselistz._EvaluatorCompiler.visit_expression_clauselist   rl   r   c                      fd|j         D             }d|j        j                            d           d}t	           |d           }|r ||j        ||          S t          d|j                   )Nc                :    g | ]}                     |          S r   )r9   ).0r6   r   s     r   
<listcomp>z7_EvaluatorCompiler.visit_clauselist.<locals>.<listcomp>   s%    HHHvdll6**HHHr   r1   __clauselist_opz)Cannot evaluate clauselist with operator )r7   operatorr   rstripr3   r   )r   r6   
evaluatorsdispatchr8   s   `    r   rj   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                   )Nr1   rs   
_binary_opr2    with operator )	r9   leftrightru   r   rv   r3   r   r5   )r   r6   	eval_left
eval_rightrx   r8   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rU   )rA   has_nullsub_evaluaterX   rw   s       r   evaluatez;_EvaluatorCompiler.visit_or_clauselist_op.<locals>.evaluate   sn    H * 5 5$S))O++****  44#4u} t5r   r   r   ru   rw   r6   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   )rU   rP   )rA   r   rX   rw   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   )rU   rP   appendtuple)rA   valuesr   rX   rw   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   ru   r~   r   r6   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   rA   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   ru   r~   r   r6   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   )rA   r   r   r~   r   ru   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 "z" for datatypes z, )	r|   r5   _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   rP   abs     r   rB   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   rB   z>_EvaluatorCompiler.visit_not_in_op_binary_op.<locals>.<lambda>1  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                4    |                      d |||          S )Nc                    | |z   S r   r   r   s     r   rB   z>_EvaluatorCompiler.visit_concat_op_binary_op.<locals>.<lambda>;  s
    Q r   r   r   s        r   visit_concat_op_binary_opz,_EvaluatorCompiler.visit_concat_op_binary_op7  s(     &&	:v
 
 	
r   c                4    |                      d |||          S )Nc                ,    |                      |          S r   )
startswithr   s     r   rB   zB_EvaluatorCompiler.visit_startswith_op_binary_op.<locals>.<lambda>B  s    a r   r   r   s        r   visit_startswith_op_binary_opz0_EvaluatorCompiler.visit_startswith_op_binary_op>  s(     &&(()Z
 
 	
r   c                4    |                      d |||          S )Nc                ,    |                      |          S r   )endswithr   s     r   rB   z@_EvaluatorCompiler.visit_endswith_op_binary_op.<locals>.<lambda>I  s    A r   r   r   s        r   visit_endswith_op_binary_opz._EvaluatorCompiler.visit_endswith_op_binary_opE  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   )rA   rX   
eval_inners     r   r   z0_EvaluatorCompiler.visit_unary.<locals>.evaluateP  s3    "
3O++**]4 y r   r2   r{   )r9   r;   ru   r   invr   r5   r   )r   r6   r   r   s      @r   visit_unaryz_EvaluatorCompiler.visit_unaryL  s    \\&.11
?im++! ! ! ! ! O /tF||4 / /#_/ /
 
 	
r   c                T    |j         r|                                 n|j        fdS )Nc                    S r   r   )rA   vals    r   rB   z4_EvaluatorCompiler.visit_bindparam.<locals>.<lambda>c  s    3 r   )callablerX   )r   r6   r   s     @r   visit_bindparamz"_EvaluatorCompiler.visit_bindparam^  s1    ? 	//##CC,Cr   r   )(r   r   r   r/   r9   r=   rD   rH   rK   rg   rk   rn   rj   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   f  sQ    """< 		
 	
 	
 "!MxMMTMMNNNr   N)r   r   r   r   )__doc__
__future__r   typingr    r   rb   baser   r   r
   sqlr   r   sql.sqltypesr   r   utilr   InvalidRequestErrorr   ColumnOperatorsr   r'   rP   rU   r,   r   r   r   r   <module>r      s    # " " " " "             & & & & & &                               " " " " " " " " " " " " " " " " " "	 	 	 	 	0 	 	 	    	)       Y.    Y[[
 .""g g g g g g g gT	
O 
O 
O 
O 
O 
Or   