
    +h                     J   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	  G d	 d
e
      Z G d dej                        Z e       Z ed dD              Z ed dD              Zej$                  d ej&                  d iZ ed dD              Z G d de      Zy)    N   )inspect)util)and_)	operators)Integer)Numericc                       e Zd Zy)UnevaluatableErrorN)__name__
__module____qualname__     K/var/www/html/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      s    r   r   c              #   <   K   | ]  }t        t        |        y wr   getattrr   .0ops     r   	<genexpr>r$       s      

 Ir
   )ltlenegtgeeqc              #   <   K   | ]  }t        t        |        y wr   r   r!   s     r   r$   r$   ,   s      

 Ir
r%   )addmulsubdivmodtruedivc                     | t         ur| |v S d S r   
_NO_OBJECTabs     r   <lambda>r9   9   s    Qj-@16 d r   c                     | t         ur| |vS d S r   r4   r6   s     r   r9   r9   ;   s    1J#6QaZ D r   c              #   <   K   | ]  }t        t        |        y wr   r   r!   s     r   r$   r$   ?   s      
 Irr%   )like_opnot_like_opilike_opnot_ilike_opstartswith_op
between_opendswith_opc                   V    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y)EvaluatorCompilerNc                     || _         y r   )
target_cls)r   rF   s     r   __init__zEvaluatorCompiler.__init__N   s	    $r   c                     t        |      dkD  r	t        | }n|r|d   }t        | dj                  z  d       }|s!t	        dt        |      j                  z         ||      S )N   r   zvisit_%szCannot evaluate %s)lenr   r    __visit_name__r   typer   )r   clausesclausemeths       r   processzEvaluatorCompiler.processQ   sj    w<!7^FQZFtZ&*?*??F$$tF|'<'<<  F|r   c                 8    | j                  |j                        S r   )rP   elementr   rN   s     r   visit_groupingz EvaluatorCompiler.visit_grouping^   s    ||FNN++r   c                     d S )Nc                      y r   r   objs    r   r9   z.EvaluatorCompiler.visit_null.<locals>.<lambda>b       r   r   rS   s     r   
visit_nullzEvaluatorCompiler.visit_nulla       r   c                     d S )Nc                      y)NFr   rW   s    r   r9   z/EvaluatorCompiler.visit_false.<locals>.<lambda>e   rY   r   r   rS   s     r   visit_falsezEvaluatorCompiler.visit_falsed   s      r   c                     d S )Nc                      y)NTr   rW   s    r   r9   z.EvaluatorCompiler.visit_true.<locals>.<lambda>h   rY   r   r   rS   s     r   
visit_truezEvaluatorCompiler.visit_trueg   r[   r   c                    d|j                   v rm|j                   d   }| j                  r8t        | j                  |j                        st	        d|j                  z        |j
                  |   j                  }n`|j                  }| j                  r:|t        | j                        j                  v rt        j                  d|z         nt	        d|z        t        j                  |      fdS )Nparentmapperz2Can't evaluate criteria against alternate class %szEvaluating non-mapped column expression '%s' onto ORM instances; this is a deprecated use case.  Please make use of the actual mapped columns in ORM-evaluated UPDATE / DELETE expressions.zCannot evaluate column: %sc                 $    |  |       S t         S r   r4   )rX   get_corresponding_attrs    r   r9   z0EvaluatorCompiler.visit_column.<locals>.<lambda>   s     /s3  r   )_annotationsrF   
issubclassclass_r   _columntopropertykeyr   column_attrsr   warnoperator
attrgetter)r   rN   rc   rj   re   s       @r   visit_columnzEvaluatorCompiler.visit_columnj   s    V000!..~>Lz!4!4( )H"))*  008<<C**C74??3@@@		3 6<< ))E)NOO!)!4!4S!9	
r   c                 $    | j                  |      S r   )visit_clauselistrS   s     r   visit_tuplezEvaluatorCompiler.visit_tuple   s    $$V,,r   c                 X   t        t        | j                  |j                              |j                  t
        j                  u rfd}|S |j                  t
        j                  u rfd}|S |j                  t
        j                  u rfd}|S t        d|j                  z        )Nc                 F    d}D ]  } ||       }|r y|xs |d u } |ry yNFTr   )rX   has_nullsub_evaluatevalue
evaluatorss       r   evaluatez4EvaluatorCompiler.visit_clauselist.<locals>.evaluate   s@     $. 9L(-E#'85D=H	9
 r   c                 D    D ]  } ||       }|r||t         u r y  y yru   r4   )rX   rw   rx   ry   s      r   rz   z4EvaluatorCompiler.visit_clauselist.<locals>.evaluate   s6    $. %L(-E  =EZ,?#'$% r   c                 v    g }D ]'  } ||       }||t         u r y |j                  |       ) t        |      S r   )r5   appendtuple)rX   valuesrw   rx   ry   s       r   rz   z4EvaluatorCompiler.visit_clauselist.<locals>.evaluate   sH    $. )L(-E}(;#MM%(	)
 V}$r   z+Cannot evaluate clauselist with operator %s)
listmaprP   rM   rm   r   or_r   comma_opr   )r   rN   rz   ry   s      @r   rq   z"EvaluatorCompiler.visit_clauselist   s    #dllFNN;<
??imm+	L 7 __	.2 ! __	 2 22% 	 %=O r   c                 *   t        t        | j                  |j                  |j                  g            \  |j
                  t        j                  u rfd}|S t        j                  u rfd}|S t        j                  u rfd}|S t        v r	fd}|S t        v r|j                  j                  j                  t        t        fvs,|j                  j                  j                  t        t        fvrFt!        dj"                  d|j                  j                  d|j                  j                        fd}|S t$        v r	fd	}|S t!        d
t        |      j"                  d|j
                        )Nc                 &     |        |       k(  S r   r   rX   	eval_left
eval_rights    r   rz   z0EvaluatorCompiler.visit_binary.<locals>.evaluate        ~C88r   c                 &     |        |       k7  S r   r   r   s    r   rz   z0EvaluatorCompiler.visit_binary.<locals>.evaluate   r   r   c                 &     |        |       z   S r   r   r   s    r   rz   z0EvaluatorCompiler.visit_binary.<locals>.evaluate   s     ~
377r   c                 L     |       } |       }||y t           ||      S r   )_extended_opsrX   left_val	right_valr   r   rm   s      r   rz   z0EvaluatorCompiler.visit_binary.<locals>.evaluate   s5    $S>&sO	#y'8$X.xCCr   zCannot evaluate math operator "z" for datatypes z, c                 X     |       } |       }||y   |        |             S r   r   r   s      r   rz   z0EvaluatorCompiler.visit_binary.<locals>.evaluate   8    $S>&sO	#y'8	#
3@@r   c                 X     |       } |       }||y   |        |             S r   r   r   s      r   rz   z0EvaluatorCompiler.visit_binary.<locals>.evaluate   r   r   Cannot evaluate  with operator )r   r   rP   leftrightrm   r   is_is_not	concat_opr   _math_only_straight_opsrL   _type_affinityr	   r   r   r   _straight_ops)r   rN   rz   r   r   rm   s      @@@r   visit_binaryzEvaluatorCompiler.visit_binary   su    $v{{FLL9:!
	: ??y}}$9v q )))9l g ,,,8b ] &DX I 00  //
 <<$$33GW;MM(  ((&++*:*:FLL<M<MO A*  &A 	 %<((&//; r   c                     | j                  |j                        |j                  t        j                  u rfd}|S t        dt        |      j                  d|j                        )Nc                       |       }|y | S r   r   )rX   rx   
eval_inners     r   rz   z/EvaluatorCompiler.visit_unary.<locals>.evaluate  s    "3= y r   r   r   )rP   rR   rm   r   invr   rL   r   )r   rN   rz   r   s      @r   visit_unaryzEvaluatorCompiler.visit_unary   sV    \\&..1
??imm+! O F|$$foo7
 	
r   c                 `    |j                   r|j                         n|j                  fdS )Nc                     S r   r   )rX   vals    r   r9   z3EvaluatorCompiler.visit_bindparam.<locals>.<lambda>  s    3 r   )callablerx   )r   rN   r   s     @r   visit_bindparamz!EvaluatorCompiler.visit_bindparam  s%    ??//#C,,Cr   r   )r   r   r   rG   rP   rT   rZ   r^   ra   ro   rr   rq   r   r   r   r   r   r   rD   rD   M   sB    %, ! 
B-*XBH
 r   rD   )rm    r   r   sqlr   r   sql.sqltypesr   r	   	Exceptionr   ColumnOperatorsr   r5   setr   r   in_op	not_in_opr   _notimplemented_opsobjectrD   r   r   r   <module>r      s         " "	 		))  [
 

 
  

 
  OOJ@    F Fr   