a
    [gA0                     @  s  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 dejZG dd dejZG dd dejZe Ze ZG dd dZddd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                   @  s   e Zd ZdS )UnevaluatableErrorN)__name__
__module____qualname__ r   r   f/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/sqlalchemy/orm/evaluator.pyr   %   s   r   c                   @  s   e Zd Zdd Zdd ZdS )	_NoObjectc                 O  s   d S Nr   selfargkwr   r   r   operate*   s    z_NoObject.operatec                 O  s   d S r   r   r   r   r   r   reverse_operate-   s    z_NoObject.reverse_operateNr   r   r   r   r   r   r   r   r   r   )   s   r   c                   @  s   e Zd Zdd Zdd ZdS )_ExpiredObjectc                 O  s   | S r   r   r   r   r   r   r   2   s    z_ExpiredObject.operatec                 O  s   | S r   r   r   r   r   r   r   5   s    z_ExpiredObject.reverse_operateNr   r   r   r   r   r   1   s   r   c                   @  s
  e Zd Zd6ddZdd Zdd Zdd	 Zd
d Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&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(d) Z!d*d+ Z"d,d- Z#d.d/ Z$d0d1 Z%d2d3 Z&d4d5 Z'dS )7_EvaluatorCompilerNc                 C  s
   || _ d S r   )
target_cls)r   r!   r   r   r   __init__>   s    z_EvaluatorCompiler.__init__c                 G  sH   |rt |g|R  }t| d|j d }|s@tdt|j ||S )Nvisit_Cannot evaluate )r
   getattrZ__visit_name__r   typer   )r   clauseclausesmethr   r   r   processA   s    z_EvaluatorCompiler.processc                 C  s   |  |jS r   )r*   elementr   r'   r   r   r   visit_groupingL   s    z!_EvaluatorCompiler.visit_groupingc                 C  s   dd S )Nc                 S  s   d S r   r   objr   r   r   <lambda>P       z/_EvaluatorCompiler.visit_null.<locals>.<lambda>r   r,   r   r   r   
visit_nullO   s    z_EvaluatorCompiler.visit_nullc                 C  s   dd S )Nc                 S  s   dS )NFr   r.   r   r   r   r0   S   r1   z0_EvaluatorCompiler.visit_false.<locals>.<lambda>r   r,   r   r   r   visit_falseR   s    z_EvaluatorCompiler.visit_falsec                 C  s   dd S )Nc                 S  s   dS )NTr   r.   r   r   r   r0   V   r1   z/_EvaluatorCompiler.visit_true.<locals>.<lambda>r   r,   r   r   r   
visit_trueU   s    z_EvaluatorCompiler.visit_truec              
     s   z|j d }W n4 tyB } ztd| |W Y d }~n
d }~0 0 | jrht| j|jshtd|j |  z|j| j}W n6 t	j
y } ztd| |W Y d }~n
d }~0 0 |j| j  fdd}|S )NparentmapperzCannot evaluate column: z0Can't evaluate criteria against alternate class zCannot evaluate expression: c                   s>   | d u rt S t| }|j} j||tjd}|tju r:tS |S )N)Zpassive)	
_NO_OBJECTr	   dictgetr   ZPASSIVE_NO_FETCHr   ZPASSIVE_NO_RESULT_EXPIRED_OBJECT)r/   stateZdict_valueimplr   r   get_corresponding_attr   s    
z?_EvaluatorCompiler.visit_column.<locals>.get_corresponding_attr)Z_annotationsKeyErrorr   r!   
issubclassclass_Z_check_configureZ_columntopropertykeyorm_excZUnmappedColumnErrorZclass_managerr=   )r   r'   r5   ZkerB   errr>   r   r<   r   visit_columnX   s8    z_EvaluatorCompiler.visit_columnc                 C  s
   |  |S r   visit_clauselistr,   r   r   r   visit_tuple   s    z_EvaluatorCompiler.visit_tuplec                 C  s
   |  |S r   rF   r,   r   r   r   visit_expression_clauselist   s    z._EvaluatorCompiler.visit_expression_clauselistc                   s\    fdd|j D }d|jjd d}t |d }|rH||j||S td|j d S )Nc                   s   g | ]}  |qS r   )r*   ).0r'   r   r   r   
<listcomp>   r1   z7_EvaluatorCompiler.visit_clauselist.<locals>.<listcomp>r#   _Z_clauselist_opz)Cannot evaluate clauselist with operator )r(   operatorr   rstripr%   r   )r   r'   
evaluatorsdispatchr)   r   rK   r   rG      s    
z#_EvaluatorCompiler.visit_clauselistc                 C  sn   |  |j}|  |j}d|jjd d}t| |d }|rN||j|||S tdt|j d|j d S )Nr#   rM   Z
_binary_opr$    with operator )	r*   leftrightrN   r   rO   r%   r   r&   )r   r'   	eval_left
eval_rightrQ   r)   r   r   r   visit_binary   s    z_EvaluatorCompiler.visit_binaryc                   s    fdd}|S )Nc                   sH   d} D ]2}|| }|t u r$t   S |r. dS |p8|d u }q|rDd S dS NFTr9   )r/   Zhas_nullsub_evaluater;   rP   r   r   evaluate   s    z;_EvaluatorCompiler.visit_or_clauselist_op.<locals>.evaluater   r   rN   rP   r'   r\   r   r[   r   visit_or_clauselist_op   s    z)_EvaluatorCompiler.visit_or_clauselist_opc                   s    fdd}|S )Nc                   sF    D ]<}|| }|t u r t   S |s|d u s4|tu r: d S  dS qdS rX   )r9   r6   )r/   rZ   r;   r[   r   r   r\      s    z<_EvaluatorCompiler.visit_and_clauselist_op.<locals>.evaluater   r]   r   r[   r   visit_and_clauselist_op   s    z*_EvaluatorCompiler.visit_and_clauselist_opc                   s    fdd}|S )Nc                   sN   g } D ]<}|| }|t u r$t   S |d u s4|tu r: d S || qt|S r   )r9   r6   appendtuple)r/   valuesrZ   r;   r[   r   r   r\      s    zA_EvaluatorCompiler.visit_comma_op_clauselist_op.<locals>.evaluater   r]   r   r[   r   visit_comma_op_clauselist_op   s    z/_EvaluatorCompiler.visit_comma_op_clauselist_opc                 C  s,   |j r| ||||S td|jdd S )NzCustom operator zR can't be evaluated in Python unless it specifies a callable using `.python_impl`.)Zpython_impl_straight_evaluater   Zopstringr   rN   rU   rV   r'   r   r   r   visit_custom_op_binary_op   s    z,_EvaluatorCompiler.visit_custom_op_binary_opc                   s    fdd}|S )Nc                   s,    | }| }|t u s |t u r$t S ||kS r   rY   r/   Zleft_valZ	right_valrU   rV   r   r   r\      s
    z7_EvaluatorCompiler.visit_is_binary_op.<locals>.evaluater   r   rN   rU   rV   r'   r\   r   rh   r   visit_is_binary_op   s    z%_EvaluatorCompiler.visit_is_binary_opc                   s    fdd}|S )Nc                   s,    | }| }|t u s |t u r$t S ||kS r   rY   rg   rh   r   r   r\      s
    z;_EvaluatorCompiler.visit_is_not_binary_op.<locals>.evaluater   ri   r   rh   r   visit_is_not_binary_op   s    z)_EvaluatorCompiler.visit_is_not_binary_opc                   s    fdd}|S )Nc                   sJ    | }| }|t u s |t u r$t S |d u s4|d u r8d S  | | S r   rY   rg   rU   rV   rN   r   r   r\      s    z7_EvaluatorCompiler._straight_evaluate.<locals>.evaluater   ri   r   rl   r   rd      s    
z%_EvaluatorCompiler._straight_evaluatec                 C  sX   |j jjttfvs$|jjjttfvrHtd|j d|j j d|jj | ||||S )NzCannot evaluate math operator "" for datatypes , )	rS   r&   _type_affinityr   r   rT   r   r   rd   re   r   r   r   _straight_evaluate_numeric_only  s    
z2_EvaluatorCompiler._straight_evaluate_numeric_onlyc                 C  s   |  dd |||S )Nc                 S  s   | t ur| |v S d S r   r6   abr   r   r   r0   (  r1   z:_EvaluatorCompiler.visit_in_op_binary_op.<locals>.<lambda>rd   re   r   r   r   visit_in_op_binary_op&  s    z(_EvaluatorCompiler.visit_in_op_binary_opc                 C  s   |  dd |||S )Nc                 S  s   | t ur| |vS d S r   rq   rr   r   r   r   r0   2  r1   z>_EvaluatorCompiler.visit_not_in_op_binary_op.<locals>.<lambda>ru   re   r   r   r   visit_not_in_op_binary_op.  s    z,_EvaluatorCompiler.visit_not_in_op_binary_opc                 C  sX   t |jjjtr t |jjjtsDtd|j d|jj d|jj | dd |||S )Nz&Cannot evaluate concatenate operator "rm   rn   c                 S  s   | | S r   r   rr   r   r   r   r0   F  r1   z>_EvaluatorCompiler.visit_concat_op_binary_op.<locals>.<lambda>)	r@   rS   r&   ro   r   rT   r   r   rd   re   r   r   r   visit_concat_op_binary_op8  s"    
z,_EvaluatorCompiler.visit_concat_op_binary_opc                 C  s   |  dd |||S )Nc                 S  s
   |  |S r   )
startswithrr   r   r   r   r0   M  r1   zB_EvaluatorCompiler.visit_startswith_op_binary_op.<locals>.<lambda>ru   re   r   r   r   visit_startswith_op_binary_opI  s    z0_EvaluatorCompiler.visit_startswith_op_binary_opc                 C  s   |  dd |||S )Nc                 S  s
   |  |S r   )endswithrr   r   r   r   r0   T  r1   z@_EvaluatorCompiler.visit_endswith_op_binary_op.<locals>.<lambda>ru   re   r   r   r   visit_endswith_op_binary_opP  s    z._EvaluatorCompiler.visit_endswith_op_binary_opc                   sH   |  |j |jtju r( fdd}|S tdt|j d|j d S )Nc                   s&    | }|t u rt S |d u r d S | S r   rY   )r/   r;   Z
eval_innerr   r   r\   [  s    z0_EvaluatorCompiler.visit_unary.<locals>.evaluater$   rR   )r*   r+   rN   r   invr   r&   r   )r   r'   r\   r   r}   r   visit_unaryW  s    z_EvaluatorCompiler.visit_unaryc                   s"   |j r|   n|j  fddS )Nc                   s    S r   r   r.   valr   r   r0   n  r1   z4_EvaluatorCompiler.visit_bindparam.<locals>.<lambda>)callabler;   r,   r   r   r   visit_bindparami  s    
z"_EvaluatorCompiler.visit_bindparam)N)(r   r   r   r"   r*   r-   r2   r3   r4   rE   rH   rI   rG   rW   r^   r_   rc   rf   rj   rk   rd   rp   Zvisit_add_binary_opZvisit_mul_binary_opZvisit_sub_binary_opZvisit_mod_binary_opZvisit_truediv_binary_opZvisit_lt_binary_opZvisit_le_binary_opZvisit_ne_binary_opZvisit_gt_binary_opZvisit_ge_binary_opZvisit_eq_binary_oprv   rw   rx   rz   r|   r   r   r   r   r   r   r    =   sJ   
6


r    strzType[_EvaluatorCompiler])namereturnc                 C  s.   | dkrt dd tS tdtd| d S )NZ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   r   r   r   __getattr__q  s    r   N)__doc__
__future__r   typingr    r   rC   baser   r   r	   sqlr
   r   Zsql.sqltypesr   r   r   utilr   ZInvalidRequestErrorr   ZColumnOperatorsr   r   r6   r9   r    r   r   r   r   r   <module>	   s,     6