
    ؄_/                     X   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 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 ddlmZ ddlmZ dd ej         e!fdfd!Z"dSd"Z#dSd#Z$d$ Z%d% Z&d& Z'd' Z(d( Z)d) Z*d* Z+d+ Z,d, Z-d- Z.d. Z/i d/e%fd0e%fd1e*fd2e$fd3e$fd4e$fd5e$fd6e$fd7e$fd8e#fd9e$fd:e$fd;e$fd<e&ej0        fd=e&ej1        fd>e"ej2        fd?e"ej3        fi d@e"ej4        fdAe"ej5        fdBe"ej6        fdCe"ej7        fdDe"ej8        fdEe"ej9        fdFe"ej:        fdGe"ej;        fdHe"ej<        fdIe"ej=        fdJe"ej>        fdKe"ej?        fdLe"ej@        fdMe&ejA        fdNe&ejB        fdOe&ejC        fdPe&ejD        fe'ejE        fe'ejF        fe"ejG        fe"ejH        fe/fe,fe,fe-fe.fe.fe+fe(fe)fe)fe)fdQZIdTdRZJdS )Uz5Default implementation of SQL comparison operations.
   )	operators)type_api)_clause_element_as_expr)_const_expr)_is_literal)_literal_as_text)and_)BinaryExpression)BindParameter)ClauseElement)
ClauseListcollate)CollectionAggregate)ColumnElement)False_)Null)or_)
TextClause)True_)Tuple)UnaryExpression)	Visitable)Alias)ScalarSelect)
Selectable)
SelectBase   )exc)utilNFc                 |   |t           j        }t          ||t          t          t
          fz             rL|t          j        t          j        fv rDt          |t          t          t
          f          r"t          | t          |          ||||          S |t          j        t          j        fv r"t          | t          |          ||||          S |t          j        t          j        fv r5t          | t          |          t          j        t          j        |          S |t          j        t          j        fv r5t          | t          |          t          j        t          j        |          S t#          j        d          t'          | ||          }|rt          || ||||          S t          | |||||          S )N)type_negate	modifiers)r#   r"   z|Only '=', '!=', 'is_()', 'isnot()', 'is_distinct_from()', 'isnot_distinct_from()' operators can be used with None/True/False)r   BOOLEANTYPE
isinstancer   r   r   r   eqneboolr
   r   is_distinct_fromisnot_distinct_fromis_r   isnotr   ArgumentError_check_literal)expropobjr#   reverse_python_is_typesresult_typekwargss           f/var/www/book.euthymeo.com/html/venv/lib/python3.11/site-packages/sqlalchemy/sql/default_comparator.py_boolean_comparer8   )   s    *#'4*??@@ 2,
 ),	---*$v&3
 3
- $ %%!     I.	0MNNN# %%!     ilIM222'$$M$?%    	io666'$$O$=%    'A   T2s++ 
rVv
 
 
 	
  #rVv
 
 
 	
    c                 n    |"|j         r|j         }n|j        rt          j        }t	          | ||f||d|S )N)r3   r5   )return_typeis_comparisonr   r%   _binary_operate)r0   r1   r2   r3   r5   kws         r7   _custom_op_operater?   u   s^    > 	/.KK 	/".Kb#&K CE  r9   c                     t          | ||          }|r|| }}n| |}}|#|j                            ||j                  \  }}t          |||||          S )N)r"   r$   )r/   
comparator_adapt_expressionr
   )r0   r1   r2   r3   r5   r>   leftrights           r7   r=   r=      ss    
r3
'
'C  4eCe/;; 
 
K D%;"MMMMr9   c                     |t           j        u rt          | |          S |t           j        u rt          | |          S t                      N)r   r	   r   NotImplementedErrorr0   r1   otherr>   s       r7   _conjunction_operaterJ      sH    	Y^D%   	y}		4!###r9   c                      ||           S rF    )r0   r1   fnr>   s       r7   _scalarrN      s    2d88Or9   c                    t          |          }t          |t                    rt          | |||          S t          |t                    r#t          | ||                                fd|i|S t          |t          t          f          rt          | ||fd|i|S t          |t                    rzt          |t                    rN|j
        rGt          | t                    r|                    d | D                       }t          | |||          S t          j        d|z            g }|D ]}t          |          s2t          |t           j                  st          j        d|z            n'|t%                      }n|                     ||          }|                    |           t+          |          dk    rA|t           j        u rt           j        t           j        fnt           j        t           j        f\  }}t          | |t3          |dt          | t                    i                    |          |          S )N)r#   r#   c                     g | ]	}|j         
S rL   )type).0elems     r7   
<listcomp>z_in_impl.<locals>.<listcomp>   s    0004TY000r9   z_in_() accepts either a list of expressions, a selectable, or an "expanding" bound parameter: %r    _tuple_values)against)r   r&   r   r8   r   	as_scalarr   r   r   r   	expandingr   _with_expanding_in_typesr   InvalidRequestErrorr   r   ColumnOperatorsr   _bind_paramappendlenin_opempty_in_opempty_notin_opr   
self_group)r0   r1   seq_or_selectable	negate_opr>   argsos          r7   _in_implrh      s   /0ABB#\22 $b*;INNNN	%z	2	2 "  "'1133
 
<E
IK
 
 	
 
%
J'?	@	@ "'
 
09
=?
 
 	
 
%}	5	5 (-88	!+	
 $&& $5$N$N004000% %! $b+I    )F $$   D  1~~ 
	(a!:;; -JLMN   YAA  Q''AA
4yyA~~ Y_$$ "I$<==*I,AB 	I 
4@D%!8!8@@KK 	L 	
 	
    r9   c                     t          | j        t          j                  r t	          | ||          }t          | ||fi |S t          | ||fi | d S rF   )r&   rQ   r   	INDEXABLEr/   r=   _unsupported_implrH   s       r7   _getitem_implrl      sd    $)X/00 1tR//tR55"555$E00R00000r9   c                 0    t          d|j        z            )Nz1Operator '%s' is not supported on this expression)rG   __name__)r0   r1   argr>   s       r7   rk   rk      s    
>L  r9   c                 X    t          | d          r| j        S |                                 S )z%See :meth:`.ColumnOperators.__inv__`.negation_clause)hasattrrq   _negater0   r1   r>   s      r7   	_inv_implru      s,    t&'' ##||~~r9   c                 D    t          | t          j        | j                  S )z%See :meth:`.ColumnOperators.__neg__`.operatorr"   )r   r   negrQ   rt   s      r7   	_neg_implrz      s    4)-tyIIIIr9   c           	          t          | t          j        t          | t          j        |          ft          j        |t          j        u rt          j        nt          j        d|S )z#See :meth:`.ColumnOperators.match`.)r5   r#   )r8   r   match_opr/   r   	MATCHTYPEnotmatch_oprH   s       r7   _match_implr     sl     tY/77	 &### $$	 	 	 	 	r9   c                 D    t          | t          j        | j                  S )z&See :meth:`.ColumnOperators.distinct`.rw   )r   r   distinct_oprQ   rt   s      r7   _distinct_implr     s%    y,DI   r9   c                    t          | t          t          | t          j        |          t          | t          j        |          t          j        dd          ||t          j        u rt          j        nt          j        |          S )z%See :meth:`.ColumnOperators.between`.F)rx   groupgroup_contents)r#   r$   )r
   r   r/   r   r	   
between_opnotbetween_op)r0   r1   cleftcrightr>   s        r7   _between_implr     s    477488^ 	
 	
 	
 	%%% &&!   r9   c                 "    t          | |          S rF   r   rH   s       r7   _collate_implr   ,  s    4r9   r	   r   invaddmulsubdivmodtruediv	custom_opjson_path_getitem_opjson_getitem_op	concat_opany_opall_opltler(   gtger'   r*   r+   like_opilike_op
notlike_opnotilike_opcontains_opstartswith_opendswith_opdesc_opasc_opnullsfirst_opnullslast_op)r`   notin_opr,   r-   r   r|   r~   r   r   r   ry   getitemlshiftrshiftcontainsc                    t          |t          t          f          rCt          |t                    r,|j        j        r |                                }| j        |_        |S t          |d          r|                                }n&t          |t          j
        j                  r|j        }t          |t          t          f          r|                                S t          |t                     s|                     |||          S |S )N__clause_element__)r"   )r&   r   r   r   rQ   _isnull_clonerr   r   r   
TypeEngine
Comparatorr0   r   r   rX   r   r]   )r0   rx   rI   bindparam_types       r7   r/   r/   g  s    %-455 e]++ 	#
0B 	#LLNNEEJ	,	-	- ((**	E8.9	:	: 
%*e,--    y)) %~FFFr9   )FNrF   )K__doc__ r   r   elementsr   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   
selectabler   r   r   r   r   r    NoneTyper)   r8   r?   r=   rJ   rN   rh   rl   rk   ru   rz   r   r   r   r   _create_any_create_allr   r   r'   r   r   r(   r+   r*   r   r   r   r   notcontains_opnotstartswith_opnotendswith_op_create_desc_create_asc_create_nullsfirst_create_nullslastr   r`   r,   r-   operator_lookupr/   rL   r9   r7   <module>r      s0                - - - - - - ! ! ! ! ! ! ! ! ! ! ! ! & & & & & &       & & & & & & # # # # # # # # # # # #                   ) ) ) ) ) ) # # # # # #                                           % % % % % %             $ $ $ $ $ $ " " " " " " " " " " " "             mT*I
 I
 I
 I
X	 	 	 	N N N N $ $ $  G G GT1 1 1    J J J
      &     2
!#2	 "2 
I<2 
O	2
 
O2 
O2 
O2 
O2 !2 $&2 _.2 )2 /#2 w+782 w+782  	Y\
*!2" 	Y\
*#2 2$ 	Y\
*%2& 	Y\
*'2( 	Y\
*)2* 	Y\
*+2, )9+HI-2. ,i.HI/20  )"67122 !9#89324 #Y%67526 $i&89728 $i&>?92: &	(BC;2< $i&>?=2> 56?2@ w34A2B gABC2D Wo?@E2 2F 	*+9?+im,	0>"$ "#%< " ""$c2 2 2j     r9   