
    )f.                    N   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y)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y)UnevaluatableErrorN)__name__
__module____qualname__     U/var/www/html/flask-app/venv/lib/python3.12/site-packages/sqlalchemy/orm/evaluator.pyr   r   $   s    r   r   c                      e Zd Zd Zd Zy)	_NoObjectc                     y Nr   selfargkws      r   operatez_NoObject.operate)       r   c                     y r   r   r   s      r   reverse_operatez_NoObject.reverse_operate,   r!   r   Nr   r   r   r    r#   r   r   r   r   r   (       r   r   c                      e Zd Zd Zd Zy)_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'y)_EvaluatorCompilerNc                    || _         y r   )
target_cls)r   r.   s     r   __init__z_EvaluatorCompiler.__init__=   s	    $r   c                    |rt        |g| }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@   sa    &+7+Ftvf&;&;%<=tD$"4<#8#8"9:  F|r   c                8    | j                  |j                        S r   )r9   elementr   r6   s     r   visit_groupingz!_EvaluatorCompiler.visit_groupingK   s    ||FNN++r   c                    d S )Nc                     y r   r   objs    r   <lambda>z/_EvaluatorCompiler.visit_null.<locals>.<lambda>O       r   r   r<   s     r   
visit_nullz_EvaluatorCompiler.visit_nullN       r   c                    d S )Nc                     y)NFr   r@   s    r   rB   z0_EvaluatorCompiler.visit_false.<locals>.<lambda>R   rC   r   r   r<   s     r   visit_falsez_EvaluatorCompiler.visit_falseQ   s      r   c                    d S )Nc                     y)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   }| j                  r8t	        | j                  |j
                        st        d|j
                         |j                          	 |j                  |   j                  }|j                  |   j                  fd}|S # t        $ r}t        d|       |d }~ww xY w# t        j                  $ r}t        d|       |d }~ww xY w)NparentmapperzCannot evaluate column: z0Can't evaluate criteria against alternate class zCannot evaluate expression: c                    | t         S t        |       }|j                  }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\    {!!CLEJJEHHuk&B&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   s   	!..~>L ??:OO\00$
 %##/#6#6"79 
 	%%'	008<<C ))#.33	 &%c  	$*6(3	4 ** 	$.se4	s/   B  'C   	B=)B88B= C'C""C'c                $    | j                  |      S r   visit_clauselistr<   s     r   visit_tuplez_EvaluatorCompiler.visit_tuple       $$V,,r   c                $    | j                  |      S r   ri   r<   s     r   visit_expression_clauselistz._EvaluatorCompiler.visit_expression_clauselist   rl   r   c                $   |j                   D cg c]  }| j                  |       }}dj                  j                  j	                  d       d}t        | |d       }|r ||j                  ||      S t        d|j                         c c}w )Nr1   __clauselist_opz)Cannot evaluate clauselist with operator )r7   r9   operatorr   rstripr3   r   )r   r6   
evaluatorsdispatchr8   s        r   rj   z#_EvaluatorCompiler.visit_clauselist   s    9?Hvdll6*H
H V__--44S9:.I 	 tXt,V<<$;FOO;LM  Is   Bc                d   | j                  |j                        }| j                  |j                        }d|j                  j                  j                  d       d}t        | |d       }|r ||j                  |||      S t        dt        |      j                   d|j                         )Nr1   rp   
_binary_opr2    with operator )	r9   leftrightrr   r   rs   r3   r   r5   )r   r6   	eval_left
eval_rightru   r8   s         r   visit_binaryz_EvaluatorCompiler.visit_binary   s    LL-	\\&,,/
FOO44;;C@ALtXt,JGG$"4<#8#8"9 :"OO,. r   c                    fd}|S )Nc                f    d}D ]&  } ||       }|t         u rt         c S |r y|xs |d u }( |ry yNFTrU   )rA   has_nullsub_evaluaterX   rt   s       r   evaluatez;_EvaluatorCompiler.visit_or_clauselist_op.<locals>.evaluate   sN    H * 5$S)O+**#4u}5 r   r   r   rr   rt   r6   r   s     `  r   visit_or_clauselist_opz)_EvaluatorCompiler.visit_or_clauselist_op   s    	 r   c                    fd}|S )Nc                d    D ]*  } ||       }|t         u rt         c S |r||t        u r y  y yr   )rU   rP   )rA   r   rX   rt   s      r   r   z<_EvaluatorCompiler.visit_and_clauselist_op.<locals>.evaluate   sD     * !$S)O+**}(;# ! r   r   r   s     `  r   visit_and_clauselist_opz*_EvaluatorCompiler.visit_and_clauselist_op   s    
	 r   c                    fd}|S )Nc                    g }D ]7  } ||       }|t         u rt         c S ||t        u r y |j                  |       9 t        |      S r   )rU   rP   appendtuple)rA   valuesr   rX   rt   s       r   r   zA_EvaluatorCompiler.visit_comma_op_clauselist_op.<locals>.evaluate   sV    F * %$S)O+**]ez&9e$% = r   r   r   s     `  r   visit_comma_op_clauselist_opz/_EvaluatorCompiler.visit_comma_op_clauselist_op   s    		! r   c                t    |j                   r| j                  ||||      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   rr   r{   r|   r6   s        r   visit_custom_op_binary_opz,_EvaluatorCompiler.visit_custom_op_binary_op   sP     **)Z  %"8#4#4"7 8" " r   c                    fd}|S )Nc                Z     |       } |       }|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   5     ~H"3I?*i?.J&&y((r   r   r   rr   r{   r|   r6   r   s     ``  r   visit_is_binary_opz%_EvaluatorCompiler.visit_is_binary_op       	) r   c                    fd}|S )Nc                Z     |       } |       }|t         u s|t         u rt         S ||k7  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 ||y   |        |             S r   r   )rA   r   r   r{   r|   rr   s      r   r   z7_EvaluatorCompiler._straight_evaluate.<locals>.evaluate   sM     ~H"3I?*i?.J&&!Y%6IcNJsO<<r   r   r   s    ```  r   r   z%_EvaluatorCompiler._straight_evaluate   s    	= r   c                f   |j                   j                  j                  t        t        fvs,|j
                  j                  j                  t        t        fvrFt        d|j                   d|j                   j                   d|j
                  j                         | j                  ||||      S )NzCannot evaluate math operator "z" for datatypes z, )	ry   r5   _type_affinityr   r   rz   r   r   r   r   s        r   _straight_evaluate_numeric_onlyz2_EvaluatorCompiler._straight_evaluate_numeric_only  s     ;;**3
 
 \\--gw5GG$1(2C2C1D E#[[--.b1B1B0CE 
 &&xJOOr   c                ,    | j                  d |||      S )Nc                    | t         ur| |v S d S r   rP   abs     r   rB   z:_EvaluatorCompiler.visit_in_op_binary_op.<locals>.<lambda>'  s    1J#6a D r   r   r   s        r   visit_in_op_binary_opz(_EvaluatorCompiler.visit_in_op_binary_op%  s!    &&@	
 	
r   c                ,    | j                  d |||      S )Nc                    | t         ur| |vS 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	
 	
r   c                ,    | j                  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                ,    | j                  d |||      S )Nc                $    | j                  |      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                ,    | j                  d |||      S )Nc                $    | j                  |      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                        |j                  t        j                  u rfd}|S t        dt        |      j                   d|j                         )Nc                <     |       }|t         u rt         S |y | S r   r   )rA   rX   
eval_inners     r   r   z0_EvaluatorCompiler.visit_unary.<locals>.evaluateP  s*    "3O+**] y r   r2   rx   )r9   r;   rr   r   invr   r5   r   )r   r6   r   r   s      @r   visit_unaryz_EvaluatorCompiler.visit_unaryL  sd    \\&..1
??imm+! O tF|445 6#__-/
 	
r   c                `    |j                   r|j                         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^  s%    ??//#C,,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&l-- P :999=++++++





$r   r,   c                Z    | 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   )names    r   __getattr__r   f  s>    ""< 		
 "!wxl2DTHMNNr   N)r   strreturnzType[_EvaluatorCompiler])__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0 		)) Y..  [
 "g gT	
Or   