o znhA@stddlZddlmZddlmZddlmZGdddeZedd d DZ ed d d DZ Gd dde Z dS)N)inspect)util) operatorsc@s eZdZdS)UnevaluatableErrorN)__name__ __module__ __qualname__r r C/usr/local/lib/python3.10/dist-packages/sqlalchemy/orm/evaluator.pyrsrcc|]}tt|VqdSNgetattrr.0opr r r   r) addmulsubdivmodtruedivltlenegtgeeqccr r rrr r r r&r) like_op notlike_opilike_op notilike_op between_opin_opnotin_op endswith_op concat_opc@sfeZdZdddZddZddZdd Zd d Zd d ZddZ ddZ ddZ ddZ ddZ dS)EvaluatorCompilerNcCs ||_dSr ) target_cls)selfr+r r r __init__7s zEvaluatorCompiler.__init__cCs0t|d|jd}|stdt|j||S)Nzvisit_%szCannot evaluate %s)r__visit_name__rtyper)r,clausemethr r r process:s  zEvaluatorCompiler.processcCs ||jSr )r2elementr,r0r r r visit_groupingBs z EvaluatorCompiler.visit_groupingcCddS)NcSsdSr r objr r r Fz.EvaluatorCompiler.visit_null..r r4r r r visit_nullEzEvaluatorCompiler.visit_nullcCr6)NcSdS)NFr r7r r r r9Ir:z/EvaluatorCompiler.visit_false..r r4r r r visit_falseHr<zEvaluatorCompiler.visit_falsecCr6)NcSr=)NTr r7r r r r9Lr:z.EvaluatorCompiler.visit_true..r r4r r r visit_trueKr<zEvaluatorCompiler.visit_truecsd|jvr"|jd}|jrt|j|jstd|j|j|j}n|j}|jr8|t|jjvr8t d|ntd|t |fddS)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.zCannot evaluate column: %scs|Sr r r7get_corresponding_attrr r r9isz0EvaluatorCompiler.visit_column..) _annotationsr+ issubclassclass_r_columntopropertykeyr column_attrsrwarnoperator attrgetter)r,r0r@rGr rAr visit_columnNs.     zEvaluatorCompiler.visit_columncsXtt|j|j|jtjurfdd}|S|jtjur%fdd}|Std|j)Ncs8d}D]}||}|rdS|p|du}q|rdSdSNFTr )r8has_null sub_evaluatevalue evaluatorsr r evaluateosz4EvaluatorCompiler.visit_clauselist..evaluatecs.D]}||}|s|durdSdSqdSrMr )r8rOrPrQr r rS|sz+Cannot evaluate clauselist with operator %s) listmapr2clausesrJror_and_rr,r0rSr rQr visit_clauselistks   z"EvaluatorCompiler.visit_clauselistcstt|j|j|jg\|jtjurfdd}|Stjur-fdd}|St vr;fdd}|St dt |j |jf)Ncs||kSr r r7 eval_left eval_rightr r rSz0EvaluatorCompiler.visit_binary..evaluatecs||kSr r r7r[r r rSr^cs6|}|}|dus|durdS||Sr r )r8left_val right_valr\r]rJr r rSs #Cannot evaluate %s with operator %s) rTrUr2leftrightrJris_isnot _straight_opsrr/rrYr rar visit_binarys$   zEvaluatorCompiler.visit_binarycs@||j|jtjurfdd}|Stdt|j|jf)Ncs|}|dur dS| Sr r )r8rP eval_innerr r rSsz/EvaluatorCompiler.visit_unary..evaluaterb)r2r3rJrinvrr/rrYr rir visit_unarys   zEvaluatorCompiler.visit_unarycs"|jr|n|jfddS)NcsSr r r7valr r r9r:z3EvaluatorCompiler.visit_bindparam..)callablerPr4r rmr visit_bindparams  z!EvaluatorCompiler.visit_bindparamr )rrr r-r2r5r;r>r?rLrZrhrlrpr r r r r*6s ! r*) rJrrsqlr Exceptionrsetrg_notimplemented_opsobjectr*r r r r s