
    [h:                   "
   d Z ddlmZ ddlZ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 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(lm0Z0 d'dlmZ1 d'd)lm2Z2 d'd*lm3Z3 d'd+lm4Z4 d'dlmZ d'dl4mZ5 d'd,l4m6Z6 d'd-l7m8Z8 d'd.l7m9Z9 d'd/l:m;Z; e
rd
d0l<m=Z= d
d1lm>Z> d'd2l?m@Z@ 	 	 	 	 	 	 ddd4ZAejB        C                    d3d35           G d6 d7e&                      ZDe3jE        ejB        C                    d8d35           G d9 d:e&                                  ZFe3jE        ejB        C                    d8;           G d< d=eF                                  ZGe3jE        ejB        C                    d8d8>          ejB        C                    d8d8d8?          ejB        C                    d8@           G dA dBe&                                                          ZH G dC dD          ZI G dE dFe&          ZJe3jE        ej>        C                    d8@           G dG dHe&                                  ZKe3jE        ej>        C                    dIJ          ej>        C                    dJ           G dK dLeJ                                              ZLe3jE        ej>        C                    d8J          ej>        C                    dMJ          ej>        C                    dNJ          ej>        C                    dOJ          ej>        C                    dPJ           G dQ dReJejM        e3jN                                                                                          ZO G dS dT          ZP G dU dVeJ          ZQej>        C                    dWJ           G dX dYeQ                      ZRe3jE        ej>        C                    dZJ           G d[ d\eQ                                  ZSe3jE        ej>        C                    d]J          ej>        C                    d3J           G d^ d_eJ                                              ZTe3jE        ej>        C                    d`J           G da dbeQejM                                          ZUdc ZVdS )ezWsqlalchemy.orm.interfaces.LoaderStrategy
   implementations, and related MapperOptions.    )annotationsN)Any)Dict)Optional)Tuple)TYPE_CHECKING)Union   )
attributes)exc)
interfaces)loading)path_registry)
properties)query)relationships)
unitofwork)util)_DEFER_FOR_STATE)_RAISE_FOR_STATE)_SET_DEFERRED_EXPIRED)ATTR_WAS_SET)LoaderCallableStatus)PASSIVE_OFF)PassiveFlag)_column_descriptions)ORMCompileState)ORMSelectCompileState)QueryContext)LoaderStrategy)StrategizedProperty)_state_session)InstanceState)Load)_none_only_set)AliasedClass   )event)inspect)log)sql)visitors)LABEL_STYLE_TABLENAME_PLUS_COL)Select)Literal)Mapper)RelationshipProperty)ColumnElementFc	                   g }
|o| j         |r!| j        r|
                    t                     | j        | j        j        v r3| j        j        | j                 \  |
                    fd           |r|
                    t          j                   |r)| j	        r | j
        r|
                    fd           |j        D ]}| |j                            | j                  u r|j                            | j                  sbt!          j        |j        | j        f| |||o| j        p| j        t(          j        u ||||| p| j         | j        d|	}|
D ]} |||            d S )Nc                6    t          j        | |j        fi S N)orm_util_validator_eventskey)descpropfnoptss     h/var/www/api.easyaligner.net/htdocs/venv_linux/lib/python3.11/site-packages/sqlalchemy/orm/strategies.py<lambda>z%_register_attribute.<locals>.<lambda>\   s*    x9dh   &*        c                0    t          j        |           S r5   )r   backref_listeners)r9   r:   backrefuselists     r=   r>   z%_register_attribute.<locals>.<lambda>j   s    :#?'7$ $ r?   )parent_tokenrC   compare_function	useobjecttrackparenttypecallable	callable_active_history
impl_classsend_modified_eventsdoc)rC   single_parentappendsingle_parent_validatorr8   parent
validatorsr   track_cascade_eventsback_populates_effective_sync_backrefself_and_descendants_propsgetclass_manager_attr_has_implr   register_attribute_implclass_	directionr   	ONETOMANYviewonlyrM   )r:   mapperrF   rE   rH   rI   proxy_propertyrJ   rK   kwlisten_hooksmr9   hookrB   r;   r<   rC   s                 @@@@r=   _register_attributerf   F   s    L(DLG 5T' 53444x4;)));)$(3D    	
 	
 	
  =J;<<<  % 	t3 	      " ( ! !18<<H
 
 
 
/00::
 5 "!1#% & >~)==)#-%)2]%G$-6GH# $ % D* % ! !T4    5! !r?   )
instrumentdeferredc                  6     e Zd ZdZdZ fdZ	 ddZd Z xZS )UninstrumentedColumnLoaderzRepresent a non-instrumented MapperProperty.

    The polymorphic_on argument of mapper() often results in this,
    if the argument is against the with_polymorphic selectable.

    columnsc                n    t                                          ||           | j        j        | _        d S r5   )super__init__parent_propertyrl   selfrQ   strategy_key	__class__s      r=   ro   z#UninstrumentedColumnLoader.__init__   s.    ...+3r?   Nc                d    | j         D ]'}|r|j         |         }|                    ||           (d S r5   )rl   _append_dedupe_col_collection)	rr   compile_statequery_entitypathloadoptadaptercolumn_collectionkwargscs	            r=   setup_queryz&UninstrumentedColumnLoader.setup_query   sQ      	N 	NA 'OA&77;LMMMM	N 	Nr?   c	                    d S r5    	rr   contextrx   ry   rz   r`   resultr{   
populatorss	            r=   create_row_processorz/UninstrumentedColumnLoader.create_row_processor   s	     	r?   r5   )	__name__
__module____qualname____doc__	__slots__ro   r   r   __classcell__rt   s   @r=   rj   rj      su          I4 4 4 4 4 N N N N      r?   rj   Tc                  <     e Zd ZdZdZ fdZ	 ddZd Zd Z xZ	S )	ColumnLoaderz8Provide loading behavior for a :class:`.ColumnProperty`.)rl   is_compositec                    t                                          ||           | j        j        | _        t	          | j        d          | _        d S )Ncomposite_class)rn   ro   rp   rl   hasattrr   rq   s      r=   ro   zColumnLoader.__init__   sF    ...+3#D$8:KLLr?   Fc	                    | j         D ]D}
|r*|r|                    |
          }
|
 d S n|j         |
         }
|                    |
|           E| j         d         }|r|j         |         }|d S ||| j        <   d S Nr   )rl   adapt_check_presentrv   rp   )rr   rw   rx   ry   rz   r{   r|   memoized_populatorscheck_for_adaptr}   r~   fetchs               r=   r   zColumnLoader.setup_query   s      		N 		NA +" +33A66Ay !  *A77;LMMMMQ 	OE*E} 49D0111r?   c                   d| _         | j        d         j        }| j        j        pA| j        d         j        p/|j        d uo&|j                            |j        d           | j        u }t          | j        |d|j
        |           d S )NTr   F)rF   rE   rJ   )is_class_levelrl   typerp   rJ   primary_keyversion_id_col_columntopropertyrX   rf   compare_values)rr   r`   coltyperJ   s       r=   init_class_attributez!ColumnLoader.init_class_attribute   s    ",q/&  / |A* %T1 (,001FMM'( 	 	 $3)	
 	
 	
 	
 	
 	
r?   c	                    | j         D ]N}	|r|j         |	         }	|                    |	d          }
|
r%|d                             | j        |
f            d S O|d                             | j        df           d S NFquickexpireT)rl   _getterrO   r8   )rr   r   rx   ry   rz   r`   r   r{   r   colgetters              r=   r   z!ColumnLoader.create_row_processor  s     < 	: 	:C +oc*^^C//F 7#**DHf+=>>> x ''4(899999r?   F)
r   r   r   r   r   ro   r   r   r   r   r   s   @r=   r   r      s         CB)IM M M M M : : : :B
 
 
,: : : : : : :r?   r   )query_expressionc                  0     e Zd Z fdZd Zd Zd Z xZS )ExpressionColumnLoaderc                    t                                          ||           t          j                                        d           t          fd| j        j        D                       | _        d S )Nc              3  D   K   | ]}|                                V  d S r5   )compare).0r~   nulls     r=   	<genexpr>z2ExpressionColumnLoader.__init__.<locals>.<genexpr>)  sA       ,
 ,
$%		$,
 ,
 ,
 ,
 ,
 ,
r?   )	rn   ro   r+   r   labelanyrp   rl   _have_default_expression)rr   rQ   rs   r   rt   s      @r=   ro   zExpressionColumnLoader.__init__"  s}    ...
 xzz%%(+ ,
 ,
 ,
 ,
)-)=)E,
 ,
 ,
 )
 )
%%%r?   c                    d }	|r|j         r|j         }	n| j        r| j        j        }	|	d S |	D ]'}
|r|j        |
         }
|                    |
|           (|	d         }|r|j        |         }|d S ||| j        <   d S r   )_extra_criteriar   rp   rl   rv   )rr   rw   rx   ry   rz   r{   r|   r   r}   rl   r~   r   s               r=   r   z"ExpressionColumnLoader.setup_query-  s      	3w. 	3-GG* 	3*2G?F 	N 	NA 'OA&77;LMMMM
 	OE*E} 49D0111r?   c	                   |r|j         r~|j         }	|	D ]N}
|r|j        |
         }
|                    |
d          }|r%|d                             | j        |f            d S O|d                             | j        df           d S d S d S r   )r   rl   r   rO   r8   )rr   r   rx   ry   rz   r`   r   r{   r   rl   r   r   s               r=   r   z+ExpressionColumnLoader.create_row_processorR  s      	>w. 	>-G > > /!/#.CU33 w'..&/ABBBEE 8$++TXt,<=====	> 	> 	> 	>r?   c                p    d| _         t          | j        |d| j        d         j        j        d           d S )NTFr   )rF   rE   accepts_scalar_loader)r   rf   rp   rl   r   r   rr   r`   s     r=   r   z+ExpressionColumnLoader.init_class_attributel  sI    " !\!_1@"'	
 	
 	
 	
 	
 	
r?   )r   r   r   ro   r   r   r   r   r   s   @r=   r   r     sf        	
 	
 	
 	
 	
#: #: #:J> > >4	
 	
 	
 	
 	
 	
 	
r?   r   )rh   rg   )rh   rg   	raiseload)
do_nothingc                  H     e Zd ZdZdZ fdZd Zd Z	 d
dZd Z	d	 Z
 xZS )DeferredColumnLoaderzAProvide loading behavior for a deferred :class:`.ColumnProperty`.)rl   groupr   c                   t                                          ||           t          | j        d          rt	          d          | j                            dd          | _        | j        j        | _        | j        j	        | _	        d S )Nr   z8Deferred loading for composite types not implemented yetr   F)
rn   ro   r   rp   NotImplementedErrorstrategy_optsrX   r   rl   r   rq   s      r=   ro   zDeferredColumnLoader.__init__  s    ...4'):;; 	%J   +//UCC+3)/


r?   c	           
        |j         r_|j        j        j        rN| j        |j        j        j        v r6| j                            d                              ||||||||           d S | j        sD| j	        r| j        j
        }	n| j        j        }	|d                             | j        |	f           d S |d                             | j        df           d S )N)rh   Frg   Tnewr   F)refresh_stater   _compile_options_only_load_propsr8   rp   _get_strategyr   r   r   _raise_column_loader_deferred_column_loaderrO   )
rr   r   rx   ry   rz   r`   r   r{   r   set_deferred_for_local_states
             r=   r   z)DeferredColumnLoader.create_row_processor  s   * !	;.?	; GM:KKK ..; ""	 	 	 	 	 $ 	;~ (= -,
 (@ - u$$dh0L%MNNNNNx ''5(9:::::r?   c                |    d| _         t          | j        |d| j        d         j        j        | j        d           d S )NTFr   )rF   rE   rI   load_on_unexpire)r   rf   rp   rl   r   r   _load_for_stater   s     r=   r   z)DeferredColumnLoader.init_class_attribute  sO    " !\!_1@*"	
 	
 	
 	
 	
 	
r?   Nc	           	        |j         j        r| j        j        sj|r1t	          | j                                      | j        j                  s7|r*| j	        r#|j
                            d| j	        z  d          s|r7| j        |v r. | j                            d          j        |||||||fi |	 d S | j        rt           || j        <   d S | j        st$          || j        <   d S t&          || j        <   d S )Nzundefer_group_%sFr   )compile_options_render_for_subqueryrp   _renders_in_subqueriessetrl   intersectionrQ   _should_undefer_in_wildcardr   
local_optsrX   r8   r   r   r   r   r   r   r   )
rr   rw   rx   ry   rz   r{   r|   r   only_load_propsrb   s
             r=   r   z DeferredColumnLoader.setup_query  sj    -B%	I (?%	I %	I %%22K; %	I %	I J%	I &**&3U %	I$  %%	I$ %)H$?$?D ..; !#         	I8M 4555 	I8H 45558H 4555r?   c                    j         st          j        S |t          j        z  st          j        S j        j        } j        r fd|j	        D             }n j         g}fd|D             }t                    }|2t          j        dt          j                  d j         d           j        r                     |d           t#          j        j        t'          |          t(                     t          j        S )Nc                    g | ]H}t          |t                    r1t          |j        t                    r|j        j        k    A|j        IS r   )
isinstancer!   strategyr   r   r8   )r   prr   s     r=   
<listcomp>z8DeferredColumnLoader._load_for_state.<locals>.<listcomp>	  sb       a!455 qz+?@@	
 Gtz))	  *))r?   c                &    g | ]}|j         v |S r   )
unmodified)r   kstates     r=   r   z8DeferredColumnLoader._load_for_state.<locals>.<listcomp>  s&    <<<qa5+;&;&;&;&;&;r?   Parent instance zB is not bound to a Session; deferred load operation of attribute '' cannot proceedraise)r8   r   
ATTR_EMPTYr   SQL_OKPASSIVE_NO_RESULTmanagerr`   r   iterate_propertiesr"   orm_excDetachedInstanceErrorr6   	state_strr   _invoke_raise_loadr   load_scalar_attributesr   r   r   )rr   r   passivelocalparenttoloadr   sessions   ``     r=   r   z$DeferredColumnLoader._load_for_state  s9   y 	3'22++ 	:'99m*: 		    $7  FF hZF =<<<F<<< ''?// %e,,,,dhhh8   > 	=##E7G<<<&L%U[	
 	
 	
 $00r?   c                2    t          j        d| d          )N'z(' is not available due to raiseload=Truesa_excInvalidRequestErrorrr   r   r   lazys       r=   r   z'DeferredColumnLoader._invoke_raise_load'  s$    ((=ATTC
 
 	
r?   r5   )r   r   r   r   r   ro   r   r   r   r   r   r   r   s   @r=   r   r   x  s         LK/I0 0 0 0 01; 1; 1;f

 

 

* 1I 1I 1I 1If&1 &1 &1P
 
 
 
 
 
 
r?   r   c                  0    e Zd ZdZd
ddZej        fdZd	S )LoadDeferredColumnsz7serializable loader object used by DeferredColumnLoaderFr8   strr   boolc                "    || _         || _        d S r5   )r8   r   )rr   r8   r   s      r=   ro   zLoadDeferredColumns.__init__0  s    "r?   c                    | j         }|j        j        }|j        |         }| j        rd}nd}|                    |          }|                    ||          S )N)rh   Tr   )r   T)r  r   )r8   r   r`   rW   r   r   r   )rr   r   r   r8   r   r:   rs   r   s           r=   __call__zLoadDeferredColumns.__call__4  se    hm*!#&> 	FLL FL%%l33''w777r?   Nr   )r8   r   r   r  )r   r   r   r   ro   r   r   r  r   r?   r=   r   r   -  sO        AA# # # # # '1&< 8 8 8 8 8 8r?   r   c                  ,     e Zd ZdZdZ fdZd Z xZS )AbstractRelationshipLoaderz0LoaderStratgies which deal with related objects.)r`   targetrC   entityc                    t                                          ||           | j        j        | _        | j        j        | _        | j        j        | _        | j        j        | _        d S r5   )rn   ro   rp   r`   r	  r  rC   rq   s      r=   ro   z#AbstractRelationshipLoader.__init__J  sU    ...*1*1*1+3r?   c	           
     j    | j                             d                              ||||||||          S )N))r   	immediate)rp   r   r   r   s	            r=   #_immediateload_create_row_processorz>AbstractRelationshipLoader._immediateload_create_row_processorQ  sJ     #11$
 


	
 	
	
r?   )r   r   r   r   r   ro   r  r   r   s   @r=   r  r  E  sR        ::7I4 4 4 4 4
 
 
 
 
 
 
r?   r  c                      e Zd ZdZdS )DoNothingLoaderzRelationship loader that makes no change to the object's state.

    Compared to NoLoader, this loader does not initialize the
    collection/attribute to empty/none; the usual default LazyLoader will
    take effect.

    N)r   r   r   r   r   r?   r=   r  r  j  s           r?   r  noload)r   c                  "    e Zd ZdZdZd Zd ZdS )NoLoaderzQProvide loading behavior for a :class:`.Relationship`
    with "lazy=None".

    r   c                X    d| _         t          | j        |d| j        j                   d S )NT)rF   rH   )r   rf   rp   collection_classr   s     r=   r   zNoLoader.init_class_attribute  s@    " ->		
 	
 	
 	
 	
 	
r?   c	                V      fd}	|d                               j        |	f           d S )Nc                d    j         rt          j        | |j                   d S d |j        <   d S r5   )rC   r   init_state_collectionr8   )r   dict_rowrr   s      r=   invoke_no_loadz5NoLoader.create_row_processor.<locals>.invoke_no_load  s9    | '0txHHHHH"&dhr?   r   )rO   r8   )
rr   r   rx   ry   rz   r`   r   r{   r   r  s
   `         r=   r   zNoLoader.create_row_processor  sD    	' 	' 	' 	' 	' 	5  $(N!;<<<<<r?   N)r   r   r   r   r   r   r   r   r?   r=   r  r  v  sC         
 I
 
 
= = = = =r?   r  selectr   raise_on_sqlbaked_selectc                       e Zd ZU dZdZded<   ded<   ded<   ded<   d	ed
<   d fdZd Zd Zd Z	d Z
ddddej        fdZd Z ej        d          d             Zd Z xZS )
LazyLoaderztProvide loading behavior for a :class:`.Relationship`
    with "lazy=True", that is loads when first accessed.

    )
_lazywhere_rev_lazywhere_lazyload_reverse_option	_order_byuse_getis_aliased_class_bind_to_col_equated_columns_rev_bind_to_col_rev_equated_columns_simple_lazy_clause_raise_always_raise_on_sqlzColumnElement[bool]r   zDict[str, ColumnElement[Any]]r&  r!  r(  RelationshipProperty[Any]rp   rQ   rs   Tuple[Any, ...]c                   t                                          ||           | j        d         dk    | _        | j        d         dk    | _        t          | j                  j        | _        | j        j	        }|
                                \  | _        | _        | _        |
                    d          \  | _        | _        | _        | j        j        r.d t%          j        | j        j                  D             | _        nd | _        | j                            d| | j                   | j         o?| j         o7| j        j        d                             | j        dd	| j        j        
          | _        | j        rlt;          | j                  D ]:}|| j        j        v r*| j        j        |         D ]}| j        |         | j        |<   ;| j                            d|            d S d S )Nr   r   r  T)reverse_directionc                <    g | ]}t          j        |d di          S )
_orm_adaptT)sql_util_deep_annotate)r   elems     r=   r   z'LazyLoader.__init__.<locals>.<listcomp>  s:        '|T.BCC  r?   z%s lazy loading clause %sr   Fuse_proxiescompare_keysequivalentsz4%s will use Session.get() to optimize instance loads)rn   ro   r   r+  r,  r)   r	  r%  rp   _join_conditioncreate_lazy_clauser   r&  r'  r!  r(  r)  order_byr   to_listr#  loggerinforC   _get_clauser   r`   _equivalent_columnsr$  list)rr   rQ   rs   join_conditionr   r~   rt   s         r=   ro   zLazyLoader.__init__  s    	...!/77B!/7>I ' 4 4 E-=
 --//		
O! ---EE		
!% ( 	"  L)=)FGG  DNN
 "DN4dDOLLL %% L '*22 " K;	 3   	 < 	D122 N N$+999![<SA N N373H3M-a00KF    	 	r?   c           	         d| _         | j        j        }| j        j        rd}d}n/| j        j        t
          j        us| j        s|rd}d}n	d}d}ndx}}t          | j        |d| j	        | j        j
        ||           d S )NTF)rF   rI   rH   rJ   _deferred_history)r   rp   _legacy_inactive_history_stylerJ   r]   r   	MANYTOONEr$  rf   r   r  )rr   r`   rF  rJ   rE  s        r=   r   zLazyLoader.init_class_attribute   s    "  ? 	' . 	7!N %  **2FFF< G . )!%$)!!!&$(!!166N. *->)/	
 	
 	
 	
 	
 	
r?   c                    t          j        | j        ddi          }|| j        c}g d }t	          j        |i d|i           fd}t	          j        |i d|i          }|fS )Nr2  Tc                    d| _         d S )NF)unique)	bindparams    r=   visit_bindparamzFLazyLoader._memoized_attr__simple_lazy_clause.<locals>.visit_bindparam+  s    $Ir?   rK  c                    | j         v r*                    | j        | j                  d f           d S | j        $                    | j        d | j        f           d S d S r5   )_identifying_keyrO   r8   callablevalue)rK  bind_to_colparamss    r=   rL  zFLazyLoader._memoized_attr__simple_lazy_clause.<locals>.visit_bindparam0  s    )[88!#I$>?     #+y}dIODEEEEE ,+r?   )r3  r4  r   r&  r,   traversecloned_traverse)rr   	lazywhere	criterionrL  rQ  rR  s       @@r=   "_memoized_attr__simple_lazy_clausez-LazyLoader._memoized_attr__simple_lazy_clause"  s    +OlD1
 
	 #,T->	;	% 	% 	% 	)R+)GHHH
	F 
	F 
	F 
	F 
	F 
	F ,rK9
 
	 &  r?   c                   | j         \  }}|t          j        |d |D                       S | j        j        }|                                }t          j        |          }|t          j	        z  r|t          j	        z  }i }|D ]O\  }	}
}|
B|r(|t          j
        z  r|                    |||
|          }n|                    |||
|          }|||	<   P||fS )Nc                    g | ]\  }}}|	S r   r   )r   r8   identrP  s       r=   r   z4LazyLoader._generate_lazy_clause.<locals>.<listcomp>G  s    DDD$5CCDDDr?   )r*  r3  adapt_criterion_to_nullrp   rQ   objr   instance_dictr   INIT_OKLOAD_AGAINST_COMMITTED#_get_committed_state_attr_by_column_get_state_attr_by_column)rr   r   r   rV  
param_keysr`   or  rR  r8   rZ  rP  s               r=   _generate_lazy_clausez LazyLoader._generate_lazy_clauseB  s    $ 8	:=3DDDDD   %,IIKK(++[(( 	+{**G!+ 	  	 C  w)KK "FFueW EE #<<ueW E  F3KK&  r?   c                8    t          j        d| d|d          )Nr   z ' is not available due to lazy='r   r   s       r=   r   zLazyLoader._invoke_raise_loadb  s*    ((8<dddC
 
 	
r?   Nr   c                z   |j         s&| j        j        s|j        r|j        st
          j        S |j          }d }	| j        o
| p|j         }
|t          j
        z  s|
r|t          j        z  s|rt
          j        S | j        r7|t          j        z  s(|
r|t          j        z  r|                     ||d           t%          |          }|sM|t          j        z  rt
          j        S t'          j        dt+          j        |          d| j         d          |
r	|                     |||          }	t
          j        |	v rt
          j        S t
          j        |	v rt
          j        S | j        j        st7          j        |	          rd S nt7          j        |	          rd S | j         |j        v r|t          j        z  st
          j         S |!                    | j"        |	||          }||t
          j#        u rd S |S |t          j
        z  r|t          j        z  st
          j        S | $                    |||	||||||	  	        S )Nr   r   z> is not bound to a Session; lazy load operation of attribute 'r   )r   lazy_loaded_from)%r8   rp   load_on_pending_load_pending
session_idr   r   r$  r   r   r   r   NON_PERSISTENT_OKr   r+  NO_RAISERELATED_OBJECT_OKr   r"   r   r   r6   r   _get_ident_for_use_get	NEVER_SETr`   allow_partial_pksr%   r   
issupersetdictDEFERRED_HISTORY_LOADr   _identity_lookupr	  PASSIVE_CLASS_MISMATCH_emit_lazyload)rr   r   r   rz   extra_criteriaextra_optionsalternate_effective_pathexecution_optionspendingprimary_key_identityr$  r   instances                r=   r   zLazyLoader._load_for_stateg  s    y 	3(8	3 +	3
 #	3 (22i-#,OK$Nw7N3N+,, 	:W 	:*66	:;B	: (99 	= k22		= 	= [::	= ##E7G<<< '' 	-- >+==// %e,,,,dhhh8    .	>#'#>#>$ $  $59MMM+==%/3GGG+55
 ;0  !./CDD  4  ",-ABB  4 EJ&&+"CC ' ,88 //$!&	 0  H #3JJJ4#Ok00>!>>> ,=="" $

 

 
	
r?   c                     j         j        }t          j        z  r|j        n|j        j         fd j        j        D             S )Nc                D    g | ]} j         |                    S )r   r'  )r   pkr  get_attrr   rr   r   s     r=   r   z5LazyLoader._get_ident_for_use_get.<locals>.<listcomp>  sD     
 
 
 HUE4#8#<gNNN
 
 
r?   )r   r`   r   r_  r`  ra  rr  r   )rr   r   r   r   instance_mapperr  r  s   ` `` @@r=   rn  z!LazyLoader._get_ident_for_use_get  s    -.[77 	A&JHH&@H

 
 
 
 
 
 
 
k-
 
 
 	
r?   zsqlalchemy.orm.strategy_optionsc
                N    t           j        j         j                                        }
t          j        |
g|
j        t          t          j
                  }t          j        }|d|dz  } j        j        %|                     j         j        j                  }|j         }|s|t$          j        z  rt          j        ddi          |_         j        }|j        s	|ra|j        rZ||j         j                 }n| j                 }|j        }|r'|j        r d}|t5          j         j        |          fz  }||_        n'||j        j         j                 }n| j                 }|r|xj        |z  c_        |xj        d|iz  c_        |rF j        r&|t@          j!        z  s "                    ||d           tG          j$        |||||	          S  j%        r j%        |_&         fd}|xj'        | j        ffz  c_'         (                    ||          \  }}|	r#t           j)        *                    |	d	|i          }	nd	|i}	 j        |j+        v r|t@          j,        z  stZ          j.        S |r4t          j/        t4          j0        |1                                          rd S n3t          j/        t4          j2        |1                                          rd S  j        r&|t@          j!        z  s "                    ||d           |f|_3        |4                    |||	
          }|5                                6                                7                                } j8        r|S ts          |          }|r*|dk    rt          j:        d j        z             |d         S d S )N)_raw_columns_propagate_attrs_label_styler   F)_invoke_all_eagers_lazy_loaded_from	autoflush_current_pathr  )load_optionsrz  c                8   j         j        D ]}|j        t          j        u rv|j        rot          |j        t                    sUj	        
                    | j        j        |j                                               |                              |            d S r5   )rp   _reverse_propertyr]   r   rG  _use_getr   r   r  r$   _construct_for_existing_pathr   r  rQ   lazyloadprocess_compile_state)compile_contextrevrr   strategy_optionss     r=   _lazyload_reversez4LazyLoader._emit_lazyload.<locals>._lazyload_reverseB  s    += K K MZ%999 :&s|Z@@ : %)FF'7EJ  hsmm$9$9/$J$J$JK Kr?   _sa_orm_load_options)rz  r
   zKMultiple rows returned with uselist=False for lazily-loaded attribute '%s' r   );r   	preloadedorm_strategy_optionsr	  __clause_element__r.   _create_raw_selectr  r-   r   default_compile_optionsr   default_load_optionsrp   	secondaryselect_fromr`   r8   r   NO_AUTOFLUSHimmutabledict_execution_optionsr$  r  r   	load_pathr6   LoaderCriteriaOption_with_options_path_registryr   r,  r   rl  r   r   load_on_pk_identityr#  _order_by_clauses_with_context_optionsrd  
EMPTY_DICT
merge_withrr  rs  r   r   has_intersection	_none_setvalues
_never_set_where_criteriaexecuterJ  scalarsallrC   lenwarn)rr   r   r   r|  r   rz   rw  rx  ry  rz  clauseelementstmtr  r{  r$  effective_pathr<   r  lazy_clauserR  r   lr  s   `                     @r=   rv  zLazyLoader._emit_lazyload  sc     >>6688('*;7,D	
 
 
 $8"'!&
 
 	

 )5##T1; D i-  	Og
 77 	O&*&8+u9M&N&ND#, 	L' 	Lg.E 	L'/!&1E!F!9$:N!O%D 72 1$+~NN  "&D%- #\89MNNN 6d6JKN 	0-//>!BB 
	! H'K4H*H H''wGGG.$)"3    > 	4%)^D"	K 	K 	K 	K 	K 	K 	"" 45'
 	
"" #88HHV 
	 $ : :!*L! ! '!
 H
""k?? # (44 	$X%7II t "8#6HH 	4 	Dg0D&D 	D##E7NCCC +~&,= ! 
 
 ((**..00< 	MFA 
q55IJ./   ay tr?   c	                   | j         |j        j        rE|j        j        j        r4| j         |j        j        j        v r|                     ||||||||          S | j        r	|rr|j        rkt          j
        |j        t          | ||j        r|                    |          nd                     }	|d                             | j         |	f           d S |j        s|j        r)fd}
|d                             | j         |
f           d S d S )Nr   c                4    |                      |           d S r5   )_reset)r   r  r  r8   s      r=   reset_for_lazy_callablez@LazyLoader.create_row_processor.<locals>.reset_for_lazy_callable  s     UC(((((r?   )r8   r  _is_user_refreshr   r   r   r  r   r   r#   "_instance_level_callable_processorrY   LoadLazyAttribute_generate_extra_criteriarO   populate_existingalways_refresh)rr   r   rx   ry   rz   r`   r   r{   r   set_lazy_callabler  r8   s              @r=   r   zLazyLoader.create_row_processor  s{    h  1	.?	 GM:KKK;;	 	 	 " (	Jw (	J73J (	J @$! #2"88AAA!	 	 ! !" u$$dh0A%BCCCCC& 	J&*? 	J	) 	) 	) 	) 	) u$$dh0G%HIIIII	J 	Jr?   )rQ   r-  rs   r.  )r   r   r   r   r   __annotations__ro   r   rW  rd  r   r   r  r   rn  preload_modulerv  r   r   r   s   @r=   r  r    sT         
I  $###////''''3333....: : : : : :x 
  
  
D! ! !@! ! !@
 
 
 !%/u
 u
 u
 u
n
 
 
 T:;;[ [ <;[zEJ EJ EJ EJ EJ EJ EJr?   r  c                  2    e Zd ZdZd Zd Zej        fdZdS )r  a  semi-serializable loader object used by LazyLoader

    Historically, this object would be carried along with instances that
    needed to run lazyloaders, so it had to be serializable to support
    cached instances.

    this is no longer a general requirement, and the case where this object
    is used is exactly the case where we can't really serialize easily,
    which is when extra criteria in the loader option is present.

    We can't reliably serialize that as it refers to mapped entities and
    AliasedClass objects that are local to the current process, which would
    need to be matched up on deserialize e.g. the sqlalchemy.ext.serializer
    approach.

    c                H    || _         |j        | _        || _        || _        d S r5   r8   rs   rz   rw  )rr   r8   initiating_strategyrz   rw  s        r=   ro   zLoadLazyAttribute.__init__  s)    /<,r?   c                d    | j         t          j        d           | j        | j        | j        ddS )NzvCan't reliably serialize a lazyload() option that contains additional criteria; please use eager loading for this caser   r  )rw  r   r  r8   rs   rz   )rr   s    r=   __getstate__zLoadLazyAttribute.__getstate__  sH    *I    8 -| 	
 
 	
r?   c                    | j         }|j        j        }|j        |         }|j        | j                 }|                    ||| j        | j                  S )N)rz   rw  )	r8   r   r`   rW   _strategiesrs   r   rz   rw  )rr   r   r   r8   r  r:   r   s          r=   r  zLoadLazyAttribute.__call__  s^    h-.%c*#D$56''L.	 ( 
 
 	
r?   N)	r   r   r   r   ro   r  r   r   r  r   r?   r=   r  r    sX         "- - -
 
 
 '1&< 
 
 
 
 
 
r?   r  c                      e Zd ZdZdZddZdS )
PostLoaderz;A relationship loader that emits a second SELECT statement.r   Nc                B   |j         j        pt          j        j        |z   }|                                }t          j        d|i          }|r"|j        	                    dd           }|dk    }	nd }d}	|| j
        j        st          j        d| j
         d          |j        	                    dt          |            |          }|	s|dk     r|d||fS |	s*|                    dt          |            |d	z
  i          }t"          j                            ||| j
                  r|d||fS || j
                 }
|| j
                 }|
                    |j        d
          s7|r|j        dz  |k    r|d||fS n |                    | j                  r|d||fS |d||fS )Nsa_top_level_orm_contextrecursion_depthFz'recursion_depth option on relationship z0 not valid for non-self-referential relationship_recursion_depth_r   r
   loaderr'   T)rw   current_pathr6   PathRegistryroot_get_top_level_contextr   r  r   rX   rp   _is_self_referentialr   r   rz  idunionr   PostLoadpath_existscontainsr   lengthcontains_mapperr`   )rr   r   ry   rz   
join_depthr  top_level_contextrz  r  unlimited_recursionpath_w_propeffective_path_w_props               r=   _setup_for_recursionzPostLoader._setup_for_recursion  sL   !.L(2G2L $::<< .'):;
 
  	(%0445FMMO"1R"7"O"'&'< 08+8 8 8  
 &7;;.BtHH.. O ' ?Q+>+>"%#	  ' $5$;$;6BtHH66!8K% %! ''^T%9
 
 	M "5*;_LL4/0 .t/C D##G$6AA 	 (/!3j@@&)'	  A '66t{CC "%#	  t%6GGr?   r5   )r   r   r   r   r   r  r   r?   r=   r  r    s?        EEIDH DH DH DH DH DHr?   r  r  c                  4     e Zd ZdZ fdZd Zd Zd Z xZS )ImmediateLoaderr  c                n    t                                          ||           | j        j        | _        d S r5   rn   ro   rp   r  rq   s      r=   ro   zImmediateLoader.__init__W  .    ....9r?   c                `    | j                             d                              |           d S N)r   r  rp   r   r   r   s     r=   r   z$ImmediateLoader.init_class_attribute[  2    **!	
 	


v
&
&
&
&
&r?   c	                F   |j         j        j        sd S |                     |||| j                  \  }	}
}}|
st
          j        t          j        z  }nt
          j	        t          j        z  }t          j                            ||	| j        | j        | j        ||||	  	         d S r5   )rw   r   _enable_eagerloadsr  r  r   PASSIVE_NO_FETCH_RELATEDr   rl  r   r   r  callable_for_pathrQ   rp   _load_for_path)rr   r   rx   ry   rz   r`   r   r{   r   r  
run_loaderrz  r  flagss                 r=   r   z$ImmediateLoader.create_row_processor`  s     $4G 	F %%gtWdoNN	
  	B
 7+:NNEE*[-AAE**K 
	
 
	
 
	
 
	
 
	
r?   c	                   |rLt          |j        j                  }	||                                f|	_        |                                }
|	f}nd }	|}
d}| j        }| j                            d          }|D ]k\  }}|j	        }|s||vrY|
                    ||||
|          }|t          t          j        fvr*|                    |                              |||           ld S )Nr   r  )rx  ry  rz  )r$   ry   r	  _recurser   _truncate_recursiver8   rp   r   rr  r   r   r   r   get_implset_committed_value)rr   r   ry   states	load_onlyrz   r  r  rz  new_optry  rx  r8   
lazyloaderr   	overwriter  rP  s                     r=   r  zImmediateLoader._load_for_path  s/     	7<.//G  ""GO (,'?'?'A'A$$JMMG'+$Mh)778MNN
 & 	 	E9JE Cu,,"22"/-E&7 3    (:!   NN3'';;ue  	 	r?   )	r   r   r   r   ro   r   r   r  r   r   s   @r=   r  r  S  sk        I: : : : :' ' '
(
 (
 (
T+ + + + + + +r?   r  subqueryc                  ~     e Zd ZdZ fdZd Zd Zd Zd Zd Z	d Z
d	 Z G d
 d          Zd Zd Zd Zd Z xZS )SubqueryLoaderr  c                n    t                                          ||           | j        j        | _        d S r5   r  rq   s      r=   ro   zSubqueryLoader.__init__  r  r?   c                `    | j                             d                              |           d S r  r  r   s     r=   r   z#SubqueryLoader.init_class_attribute  r  r?   c                   |}|j         }t          j        |d                   }| j                            |          r| j        |d         u r| j        | j        c}n||d         c}|rj|j        |         j        j        |         t          |          t                    z
  }|r+t          j                            || d                    z  n||j        }	fd|	D             }
|
|fS )Nr   r
   c                p    g | ]2}t          j        d          j        j        |         j                  3S r   )getattrry   r	  r   r8   )r   r~   leftmost_mappernew_subq_paths     r=   r   z0SubqueryLoader._get_leftmost.<locals>.<listcomp>  sQ     
 
 

 	 "1%,1!48 
 
 
r?   )ry   r6   _class_to_mapperrQ   isarp   	_entitiesentity_zeror  r  r   r  coercelocal_columns)rr   orig_query_entity_index	subq_pathcurrent_compile_stateis_rootgiven_subq_pathsubq_mapperleftmost_prop
additionalleftmost_colsleftmost_attrr  r  s              @@r=   _get_leftmostzSubqueryLoader._get_leftmost  s9    $N	/	!== KOOK((	G$	!44-1[$:N*O]]-8)A,*O] 	, 2;'.8M Y#m*<*<<J !;!B!Bzkll+" "  ,M%3
 
 
 
 

 #
 
 
 }mKKr?   c                   |                                                     d           }t          j                            t          j                  }|j                            |j                   |}|j        s3d|_         |j	        j
        |gd t          ||          D             R   |                    d |D             |                                          }	|	|_        |j        }
|
du rd|_        nA|
?d |	D             D ]2}t#          |	                              |j                  s	d|_         n3|j        sd|_        |j        du r;|j        r4t-          j        |	|j                  }|r|                    |	|z              |                    t4                                                    }t9          j        ||d          }|S )	NFc                .    h | ]}|d          
|d          S )r	  r   )r   ents     r=   	<setcomp>z?SubqueryLoader._generate_from_original_query.<locals>.<setcomp>  s4        8}0	 M 100r?   )rw   c                l    g | ]1}t           j                            t           j        j        |          2S r   )r+   	coercionsexpectrolesColumnsClauseRole)r   rc  s     r=   r   z@SubqueryLoader._generate_from_original_query.<locals>.<listcomp>0  s?        $$SY%@!DD  r?   Tc                    h | ]	}|j         
S r   )tabler   r~   s     r=   r&  z?SubqueryLoader._generate_from_original_query.<locals>.<setcomp>?  s    333!ag333r?   r   use_mapper_path)_clone	correlater   Query__new____dict__update	_from_obj_enable_assertionsr  non_generativer   _adapt_col_list_get_current_adapterr  distinct_target_key	_distinctr   rq  r   _has_row_limiting_clauser  r3   expand_column_list_from_order_by_set_entitiesset_label_styler-   r  r6   r&   )rr   orig_compile_state
orig_queryr  r!  leftmost_relationshiporig_entityqq2target_colsr<  tto_addembed_q
left_aliass                  r=   _generate_from_original_queryz,SubqueryLoader._generate_from_original_query  s3    ))$// [  --
1:&&& { 	#(A (AM(	 3"2D       	 	 	 	0 )88 &   3355
 
 %3G$&&AKK ( 43{333  ;''221=AA "&AKE
 ) 	%"$A;$1#6 >Q0 F  6f 4555 ##$BCCLLNN*Wd
 
 

 r?   c                    g }t          |                                          }t          |          D ]\\  }\  }}|dk    r0||dz
           d         j        }|                    |          r|n|}	n|}	|                    |	|j        f           ]t          |          dk     r|nEt          |d         d                   }
|
j	        r|
j
        nt          j        |
j
        d           j        j        } fd|D             }||fS )Nr   r
   r'   r  Tr/  c                Z    g | ]'}t          j        j        |         j                  (S r   )r  rQ   r   r8   )r   r~   parent_aliasrr   s     r=   r   z2SubqueryLoader._prep_for_joins.<locals>.<listcomp>  s@     
 
 
 L$+"?"B"FGG
 
 
r?   )rB  pairs	enumerater`   r  rO   r8   r  r)   r%  r	  r6   r&   rp   r  )rr   rL  r  to_joinrQ  ir`   r:   prev_mapper	to_appendr?  
local_cols
local_attrrP  s   `            @r=   _prep_for_joinszSubqueryLoader._prep_for_joins[  sJ   Y__&&''!*5!1!1 	2 	2A~1uu $AEl1o4+6??6+B+BNKK		"	NNItx01111
 w<<! &LL72;q>**D$ #{  (4K      )7

 
 
 
 

 
 

 
L00r?   c                   t          |          }|dk    r2t          ||d         d                                       |          g}nu|dk    r`t          ||d         d                                       |          t          ||d         d                                       |          g}n|dk    rd |dd         D             }g }|r|                    d          }	t          |	d         |	d                   }
|r"|
                    |d         d                   }
n|
                    |          }
|                    |
           |t          ||d         d                                       |d         j                  g|z   t          ||d         d                                       |          gz   }|D ]}
|                    |
          }|S )Nr
   r   r'   r  c                    g | ]K}t          |d                    j        st          j        |d                    n|d          j        |d         fLS )r   r
   )r)   r%  r6   r&   r	  )r   items     r=   r   z/SubqueryLoader._apply_joins.<locals>.<listcomp>  sg     
 
 
   'tAw//@,-d1g666!!W^G
 
 
r?   )r  r  of_typepoprO   rQ   join)rr   rF  rS  rL  rP  effective_entityltjmiddleinnerr\  attrs              r=   _apply_joinszSubqueryLoader._apply_joins  s    'll!88
GAJqM22::;KLLGG AXX
GAJqM22::<HHgbk!n55==$ GG 1WW
 
 $AbDM
 
 
F E #zz!}}tAwQ00 6<<q	!55DD<<55DT"""  # WQZ]33;;E!HOLLM L'"+a.99AA(    	 	DtAAr?   c                    |j         }|r8|j        r1|t          j        | j        |                    |                    fz  }|                    |          } |j        | }|S r5   )r  r   r6   r  r	  r  _with_current_pathoptions)	rr   r   rF  r  rewritten_pathrC  r`  rz   new_optionss	            r=   _setup_optionszSubqueryLoader._setup_options  s{    " !. 	w. 	-K44W==  K   00AI{#r?   c                `      j         j        r  fd}|                    | j                   }|S )Nc                z    | xj         t          t          j        j        j                            z  c_         d S r5   eager_order_bytupler   r=  rp   r<  r  rr   s    r=   _setup_outermost_orderbyzISubqueryLoader._setup_outermost_orderby.<locals>._setup_outermost_orderby  s<    ..%L!5!>??3 3 ....r?   )rp   r<  _add_context_option)rr   rF  rr  s   `  r=   rr  z'SubqueryLoader._setup_outermost_orderby  sP    ( 		    
 %%($*> A r?   c                  .    e Zd ZdZdZd Zd Zd Zd ZdS )SubqueryLoader._SubqCollectionszGiven a :class:`_query.Query` used to emit the "subquery load",
        provide a load interface that executes the query at the
        first moment a value is needed.

        r   rz  r  rR  subq_datac                    |j         | _         |j        | _        |j        | _        |j        pi | _        || _        d | _        d S r5   rv  )rr   r   rw  s      r=   ro   z(SubqueryLoader._SubqCollections.__init__   sC     #?DL%,%>D" ' 4D!..BDKDIDJJJr?   c                n    | j         |                                  | j                             ||          S r5   )rx  _loadrX   )rr   r8   defaults      r=   rX   z#SubqueryLoader._SubqCollections.get
  s-    z!

:>>#w///r?   c                   t          j        t                    | _        | j        }|j        J |                    | j                  }| j        j        r|	                                }t          |
                    | j
                            }t          j        |d           D ]/\  }}| j        |                             d |D                        0d S )Nc                    | dd          S )Nr
   r   xs    r=   r>   z7SubqueryLoader._SubqCollections._load.<locals>.<lambda>  s    !ABB% r?   c              3  &   K   | ]}|d          V  dS )r   Nr   r   vvs     r=   r   z8SubqueryLoader._SubqCollections._load.<locals>.<genexpr>  s&      $7$7rRU$7$7$7$7$7$7r?   )collectionsdefaultdictrB  rx  rw  r   with_sessionr  _populate_existingr  rR  	itertoolsgroupbyextend)rr   rF  rowsr   vs        r=   r{  z%SubqueryLoader._SubqCollections._load  s    $066DJ	A9$$$t|,,A 3 *'')) --..D!)$@@ 8 81
1$$$7$7Q$7$7$777778 8r?   c                @    | j         |                                  d S d S r5   )rx  r{  )rr   r   r  r  s       r=   r  z&SubqueryLoader._SubqCollections.loader   s#    z!

 "!r?   N)	r   r   r   r   r   ro   rX   r{  r  r   r?   r=   _SubqCollectionsru    sa        	 	
		 	 		0 	0 	0
	8 	8 	8"	 	 	 	 	r?   r  c           	        |j         }|j        j        r|j        j        rd S |j                            |          }d|_        || j                 }|                    |j	        dd           }	|	|	}
n| j
        }
|j        j                            dt          j        j        t          j        j        f          \  }}|t          j        j        u }||z   }||z   }|j        j                            dt           f|j                  }t#          j        |d          }|j        r.|j        j        t-          j        d| d|d           |j        }|                    |d	
          }|                     ||||          \  }}}}|                     ||||||          }t          j        |
          }|j        j                            |j        dt           f|d||fi          |_        |                    d	          }|                      ||          \  }}} |j!        | }| "                    |||||
          }| #                    ||||||
|          }| $                    |          }|S )NTpath_with_polymorphic)subquery_pathsNrC  ormzsubqueryloader for "z!" must invoke lambda callable at z in order to produce a new query, decreasing the efficiency of caching for this statement.  Consider using selectinload() for more effective full-lambda cachingF)legacy)%rw   r   r  _for_refresh_stater  indexloaders_require_bufferingrp   rX   r   r	  r   r  r6   r  r  r	  r   _get_plugin_class_for_plugin_is_lambda_elementr  r  r   r  	_resolved_create_entities_collectionr"  rM  r3  r  rz  _set_enable_single_critrY  add_columnsre  rk  rr  )rr   r   rx   ry   r	  rz   r{   rw   r  with_poly_entityr`  r  ri  r  rC  compile_state_clsrB  r  r!  rD  rL  rF  rS  rX  rP  s                            r=   _setup_query_from_rowprocz(SubqueryLoader._setup_query_from_rowproc$  s     --@	,?	 F"/"9"?"?"M"M,0)D()  88$&=t
 
 '/#{$+M$D$H$H$"')>)CD%
 %
!	> x499$	'$. ]599>*GM
 

 ,H
 
 ( 
	.#5=		 ttZZZ)   $-J
 /JJu K 
 
 #	
 
	
! 77!
 

 K())&}?JJ%~.
(9n*E 
  
 %%e,,,0,@,@	-
 -
)\ AM:&w
L2B
 
 
 
 ))!,,r?   c	           
        |r2|j         j        &|j         j        j        rt          j        dd           |j        r|                     |||||||          S |                     |||| j                  \  }	}
}	}	|
sd S t          |j         t                    sd S | j        j        | j                 j        j        st!          j        d| z            t%          |          dk    r"t'          j        |j        | j                  sd S n"t'          j        |d         | j                  sd S |                     ||||d         |          }|d S |j        J || j                 }| j        j        }|                    |j        d          }|2|                     ||          }|                    |j        d|           rfd|D             }| j        r|                     |||||           d S |                      |||||           d S )NzThe subqueryload loader option is not compatible with DML statements such as INSERT, UPDATE.  Only SELECT may be used.This warning will become an exception in a future release.2.0J'%s' does not support object population - eager loading cannot be applied.r
   r  r  c                *    g | ]}j         |         S r   rk   )r   r~   r{   s     r=   r   z7SubqueryLoader.create_row_processor.<locals>.<listcomp>  s     AAA'/!,AAAr?   )!rw   	statementis_dmlr   warn_deprecatedr   r  r  r  r   r   rQ   rY   r8   implsupports_populationr   r   r  r6   _entity_isar  r  r   rp   r  rX   r   r  r   rC   _create_collection_loader_create_scalar_loader)rr   r   rx   ry   rz   r`   r   r{   r   _r  rw  rW  r  s          `      r=   r   z#SubqueryLoader.create_row_processor  s    
	%/;%/6 <  M 	     
	;;	 	 	 #77T7DO
 
:q!  	F'/1FGG 	 F{(27K 	,@BFG   t99>>'(@$+NN %d2h<< 	F--H
 
 <F|###D())7

 hhw1=AA//>>KHHW'DDD 	BAAAAjAAAJ< 	**j*     &&j*    r?   c                :    |                     |           fd fd}|d                              j        f           |d                              j        |f           |j        r)|d                              j        j        f           d S d S )Nc                     j          |          d          }|                     j                                      | ||           d S )Nr   )rX   r   r8   r  )r   r  r  
collectionr  rr   tuple_getters       r=   load_collection_from_subqzKSubqueryLoader._create_collection_loader.<locals>.load_collection_from_subq  sW    (c):):B??JNN48$$88uj    r?   c                8    j         |vr | ||           d S d S r5   r8   )r   r  r  r  rr   s      r=   &load_collection_from_subq_existing_rowzXSubqueryLoader._create_collection_loader.<locals>.load_collection_from_subq_existing_row  s3    xu$$))%<<<<< %$r?   r   existingeager_tuple_getterrO   r8   invoke_all_eagersr  )	rr   r   r   r  rW  r   r  r  r  s	   `  `   @@r=   r  z(SubqueryLoader._create_collection_loader  s     ++J77	 	 	 	 	 	 		= 	= 	= 	= 	= 	= 	5  $(,E!FGGG:%%X=>	
 	
 	
 $ 	Gw&&+2D'EFFFFF	G 	Gr?   c                :    |                     |           fd fd}|d                              j        f           |d                              j        |f           |j        r)|d                              j        j        f           d S d S )Nc                     j          |          d          }t          |          dk    rt          j        dz             |d         }|                     j                                      | ||           d S )Nr5   r
   LMultiple rows returned with uselist=False for eagerly-loaded attribute '%s' r   )rX   r  r   r  r   r8   r  )r   r  r  r  scalarr  rr   r  s        r=   load_scalar_from_subqzCSubqueryLoader._create_scalar_loader.<locals>.load_scalar_from_subq-  s    (c):):GDDJ:""	GIMN  
  ]FNN48$$88vNNNNNr?   c                8    j         |vr | ||           d S d S r5   r  )r   r  r  r  rr   s      r=   "load_scalar_from_subq_existing_rowzPSubqueryLoader._create_scalar_loader.<locals>.load_scalar_from_subq_existing_row8  s3    xu$$%%eUC88888 %$r?   r   r  r  r  )	rr   r   r   r  rW  r   r  r  r  s	   `  `   @@r=   r  z$SubqueryLoader._create_scalar_loader(  s     ++J77		O 		O 		O 		O 		O 		O 		O	9 	9 	9 	9 	9 	9 	5  $(,A!BCCC:%%X9:	
 	
 	
 $ 	Gw&&+2D'EFFFFF	G 	Gr?   )r   r   r   r   ro   r   r"  rM  rY  re  rk  rr  r  r  r   r  r  r   r   s   @r=   r	  r	    s*         I: : : : :' ' '
/L /L /Lbb b bH-1 -1 -1^4 4 4l     D  2 2 2 2 2 2 2 2hF F FPc c cJG G G.G G G G G G Gr?   r	  joinedc                  x     e Zd ZdZdZ fdZd Z	 	 	 ddZd Zd	 Z	d
 Z
d Z	 	 dddZd Zd Zd Zd Z xZS )JoinedLoaderz[Provide loading behavior for a :class:`.Relationship`
    using joined eager loading.

    r  c                n    t                                          ||           | j        j        | _        d S r5   r  rq   s      r=   ro   zJoinedLoader.__init__O  r  r?   c                `    | j                             d                              |           d S r  r  r   s     r=   r   z!JoinedLoader.init_class_attributeS  r  r?   NFc	                   |j         j        sdS |r)|j        "|j        j        rt	          j        dd           n| j        rd|_        || j                 }d}
|r| 	                    |||j
                  nd}|dur|                     |||||          \  }}}n||                    |j
        d          s9| j        r|j        dz  | j        k    rdS n|                    | j                  rdS |                     ||||||||          \  }}}}d|_        |                    |j
        dd          }|t)          |          j        }
nd}
|| j                 }t/          j        || j        |||||
| j        |		  	         t          j                            |j                  }|r.|t9          j        d
          d |j        D             |_        dS dS )z@Add a left outer join to the statement that's being constructed.NzThe joinedload loader option is not compatible with DML statements such as INSERT, UPDATE.  Only SELECT may be used.This warning will become an exception in a future release.r  TFr  r'   r  )with_polymorphicparentmapperchained_from_outerjoinzDetected unaliased columns when generating joined load.  Make sure to use aliased=True or flat=True when using joined loading with with_polymorphic().c                    g | ]}||S r5   r   r.  s     r=   r   z,JoinedLoader.setup_query.<locals>.<listcomp>  s      3 3 3!-A---r?   )r   r  r  r  r   r  rC   multi_row_eager_loadersrp   _init_user_defined_eager_procr   $_setup_query_on_user_defined_adapterr  r  r  r  r`   _generate_row_adaptereager_adding_joinsrX   r)   with_polymorphic_mappersr	  r   _setup_entity_queryNONE_SETr   secondary_columnsr   r   )rr   rw   rx   ry   rz   r{   r|   r  r  r}   r  user_defined_adapterclausesadd_to_collectionr  	has_noness                   r=   r   zJoinedLoader.setup_queryX  s    ,? 	9F	9'3'. 4  M 	    \ 	948M1D() D..(@    	  u,, 99$ 	!!  ==!98DD ? {Q88 9))$+66 F **!&	 	!& 04M,88$&=t
 
 '&    &   $DK #K-#9
	
 
	
 
	
 
	
 M..}/NOO	 
	+0I  3 3,>3 3 3///
	 
	r?   c                   d|j         vrdS |j        j        }|                    |j        dd          }|dur|S |j         d         }|dd          \  }}|gt          |t                    r|j                            |          }t          j
        t          j        j        |j        ||j        j        d          }n|                    |j        d          rL|                    |j        d          }	t          j
        t          j        j        |	|j        j                  }n |j                            |j        d           }|                    |d|           |S )Neager_from_aliasF user_defined_eager_row_processor)
selectabler9  limit_on_entityr  )r9  )r   ry   rQ   rX   r   r   r   r  aliasr6   
ORMAdapter_TraceAdaptRoleJOINEDLOAD_USER_DEFINED_ALIASr`   rA  r   JOINEDLOAD_PATH_WITH_POLYMORPHIC_polymorphic_adaptersr   )
rr   rz   rw   target_attributesry   r{   r  root_mapperr:   r  s
             r=   r  z*JoinedLoader._init_user_defined_eager_proc  s    W%7775|" (($&H%
 
 %N "#56 IT%%% 1))%00)(F  K; %  GG }}(*A   $(88!,.E$ $  #-,M$ $ ?   (=AAK  	.	
 	
 	
 r?   c                    |                     |          }|r4|r2|                    |          }|                    |j        d|           n |r|}|                    |j        d|           |j        }|||fS )Nr  )_get_entity_clauseswrapr   r   primary_columns)rr   r   r	  ry   r{   r  r  s          r=   r  z1JoinedLoader._setup_query_on_user_defined_adapter	  s    
 ,,W55 	+ 	#7#<#<W#E#E HH"2$   
  	#* HH"2$   $3#W.???r?   c	                   |                     |j        dd           }	|	r|	}
nZt          | j                  }|j        r|j        }nd }t          j        | j        ||	                    d          nd dd          }
t          |
          }|
                    d| ft          j        t          j        j        || j        j        ddd          }|j        sJ |%|j                             d| j        j                  n| j        j        }|sd}|j                            | j        ||||||||r|j        nd	f	           |j        }|                    |j        d
|           ||||fS )Nr  T)flat)r  r  r0  joinedloader_ormadapterF)r9  adapt_requiredallow_label_resolveanonymize_labels	innerjoinr   eager_row_processor)rX   r   r)   r	  r%  r  r6   r&   r`   _anonymous_fromclause_memor  r  JOINEDLOAD_MEMOIZED_ADAPTERrA  r   rp   r  create_eager_joinsrO   _create_eager_joinr   r  r   )rr   rw   r	  ry   rz   r{   r|   r  r  r  to_adaptinspalt_selectableto_adapt_inspr  r  r  s                    r=   r  z"JoinedLoader._generate_row_adapter,	  s     88$&=t
 
  	'HH4;''D$ &!%!%, &1 #88d8CCC $	 	 	H  ))%%&-$@7 %! & 	
 	
 '''' " "";0D0NOOO%/ 	  	* &*"(//'&+2:''
	
 	
 	
 *;)+@'JJJ!24JJJr?   c
           	     `    ||j         }
n|}
|j        o|j        }d }||j        vrn|sl|j        ret          j        |j        |j                  }t          |          dk    rt          j
        d          |r|j        |d                  }|d         |}}|	||j        }}|j                            ||          }|rt          |dd          r\|j                            |
                     j                  r|
n j                  }t          |j         j         j                  }nBt          t)          j         j        |j        d           j         j                  }n j        }|j        sJ | p| p|dk    p|j        j        }|	}|j                            d	 j         fd
          }|r|t7           fd|D                       z  }|rZt)          j        ||j        || p'|j        j        p|ot;          |t<          j                   j        | j                  |          }n                       ||d         ||||          }||j        |<   |j        |_!        |sjt          j"         j        j#                  D ]K}|
j$        j%        &                    |          r*|r|j'        |         }|(                    ||j)                   L j        j*        rS|xj+        t7          |j,        -                    t]          j/         j        j*                                      z  c_+        d S d S )Nr
   zCan't identify which query entity in which to joined eager load from.   Please use an exact match when specifying the join path.r   r%  FTr/  unnestedadditional_entity_criteriar   c              3  Z   K   | ]%}|j         	|                    j                  V  &d S r5   )propagate_to_loaders_resolve_where_criteriar`   )r   aerr   s     r=   r   z2JoinedLoader._create_eager_join.<locals>.<genexpr>	  sP       ) )*)**4;77) ) ) ) ) )r?   isouter
_left_memo_right_memor   r  )0r`   r  _should_nest_selectableeager_joinsfrom_clausesr3  #find_left_clause_that_matches_givenr  r  r   r   
setdefaultr  aliased_insp_entity_for_mapperr  rQ   r	  r8   rp   r6   r&   r%  r  represents_outer_joinglobal_attributesrX   rp  _ORMJoinr   r+   Join_splice_nested_inner_joinstop_on_find_columnsprimaryjoinpersist_selectabler~   contains_columnrl   rv   r  r<  ro  _target_adaptercopy_and_processr   r=  )rr   rw   rx   ry   r{   r  r  r  r  rw  r   should_nest_selectablequery_entity_keyindexesclausedefault_towraptowrapefmonclauseattach_on_outsideextra_join_criteriar  	eagerjoinr   s   `                       r=   r  zJoinedLoader._create_eager_join{	  s"    &-KK&K 1 65 	
    999* :* : B*L,C G 7||a 00    F&3GAJ?
 4;1:v. #' -
 *55n
 
  	,w 2E:: 
 *=="t{33%KK  #3:tx9MNN")W%7   H(  +H'''' '& >}>J&> '=	 	 -%2%D%H%H)4;7&
 &
" & 	5 ) ) ) )4) ) ) $ $   	 )$% M+AM*Kz&#(/K/K; - 3
 
 
II 66d2h;N I 7@!"23 )3	 	  -$0    13CCCHH  3%oc2!??]:   ( 	((E*;;L!5!>?? - - ((((	 	r?   entity_inside_join_structure#Union[Mapper, None, Literal[False]]detected_existing_path$Optional[path_registry.PathRegistry]c	           
     4   ||d         u sJ |du rt          |t          j                  sJ t          |t          j        j                  r |                     |||j        ||||          S t          |t          j                  r|j        }	|                     |||j	        ||||	|	d         j
        nd           }
|
_|j        s|
j        s|                    |
          }n-t          j        |j        |
|j        |j        |j                  }|
j        |_        |S |                     |||j        ||||j        |	          }
|
;t          j        |
|j	        |j        |j        |j                  }|
j        |_        |S |du r	 J d            d S |                    |          sd S |r<t%          |          d	k    r)|d
         |u sJ |dd         |j        dd         k    rd S t          j        ||j        |d|||d         j
                 |          S )Nr  Fr  )r$  )r  r  )r$  r&  )r  r  z9assertion failed attempting to produce joined eager loadsr'   r   r  )r   r6   r  r+   r  FromGroupingr  elementr  rightr`   r  _splice_into_centerleftr   r  r  r  r  ry   r  )rr   ry   entity_we_want_to_splice_ontojoin_objr  r   rw  r$  r&  join_right_pathtarget_joinr#  s               r=   r  z&JoinedLoader._splice_nested_inner_join
  s   * -R8888'500h(9:::::h ;<< O	11- ,   ("344 D	 '2O 88- '2 $B'.. 9  K &  ' 	0C 	 ( < <[ I III ( 1 # ) ( 0#+#6! ! !I -8,G	)   #<<1M"191D+: = 	 	 * ( 1#  ) ( 0$,$8! ! !I 1<0KI-$$ ,u44ONO O O 4 -001MNN 	4 " *	c*@&A&AA&E&E
 *"-1MMMMMH &ad+ty2>>t  3T"X_-*
 
 
 	
r?   c                >   |j         }|r|                     |||j                  nd}|dur5|}|j        r|r|                    |j                  }n.|j        r|j        }n|                    |j        d          }|dS | j                            ||          r|S dS )NFr  )rw   r  r   compound_eager_adapterr  rX   r`   _result_has_identity_key)	rr   r   r   r{   ry   rz   rw   r  	decorators	            r=   _create_eager_adapterz"JoinedLoader._create_eager_adapter
  s    - D..(:    	  u,,,I 3 A	 A%NN!8 		 5 A)@	(*? I  u;//	BB 	 5r?   c	           
     J   |j         j        j        sd S | j        j        | j                 j        j        st          j	        d| z            | j
        rd|_        || j                 }	|                     ||||	|          }
|
durk| j        }t          j        || j        |||	| j                 |
          }| j
        s|                     ||||           d S |                     ||||           d S | j                            d                              ||||||||           d S )Nr  TFr  )rw   r   r  rQ   rY   r8   r  r  r   r   rC   loaders_require_uniquingrp   r7  r   _instance_processorr`   r	  r  r  r   r   )rr   r   rx   ry   rz   r`   r   r{   r   our_patheager_adapterr8   	_instances                r=   r   z!JoinedLoader.create_row_processor
  s    $4G 	F{(27K 	,@BFG  
 < 	4/3G,,-22VWh
 
 %%(C3% I < **7CJOOOOO..S)Z      ..% ""	 	 	 	 	r?   c                   fd}fd}fd}|d                              | j        |f           |d                              | j        |f           j        r$|d                              | j        |f           d S d S )Nc                    t          j        | |          }t          j        |d          }|j         | f<    |          }||                    |           d S d S Nappend_without_eventr   r  r   UniqueAppenderrO   )	r   r  r  r  result_listinstr=  r   r8   s	         r=   #load_collection_from_joined_new_rowzSJoinedLoader._create_collection_loader.<locals>.load_collection_from_joined_new_row*  sy     $9%LLJ-2 K 0;Gs|,9S>>D""4(((((  r?   c                    | fj         v rj         | f         }n7t          j        | |          }t          j        |d          }|j         | f<    |          }||                    |           d S d S r@  rB  )	r   r  r  rD  r  rE  r=  r   r8   s	         r=   (load_collection_from_joined_existing_rowzXJoinedLoader._create_collection_loader.<locals>.load_collection_from_joined_existing_row7  s    s|w111%0%> (=5# 
 #1 6  4?"E3<09S>>D""4(((((  r?   c                     |           d S r5   r   r   r  r  r=  s      r=    load_collection_from_joined_execzPJoinedLoader._create_collection_loader.<locals>.load_collection_from_joined_execJ      IcNNNNNr?   r   r  r  rO   r8   r  )rr   r   r8   r=  r   rF  rH  rK  s    ```    r=   r  z&JoinedLoader._create_collection_loader)  s   	) 	) 	) 	) 	) 	) 	)	) 	) 	) 	) 	) 	) 	)&	 	 	 	 	 	5  X:;	
 	
 	
 	:%%X?@	
 	
 	
 $ 	w&&;<    	 	r?   c                    fd} fd}fd}|d                               j        |f           |d                               j        |f           |j        r$|d                               j        |f           d S d S )Nc                $     |          |<   d S r5   r   )r   r  r  r=  r8   s      r=   load_scalar_from_joined_new_rowzKJoinedLoader._create_scalar_loader.<locals>.load_scalar_from_joined_new_rowY  s     #3E#JJJr?   c                z     |          }|v r%||         urt          j        dz             d S d S ||<   d S )Nr  )r   r  )r   r  r  r  r=  r8   rr   s       r=   $load_scalar_from_joined_existing_rowzPJoinedLoader._create_scalar_loader.<locals>.load_scalar_from_joined_existing_row^  so     !y~~H e||5:--IK     .- &c


r?   c                     |           d S r5   r   rJ  s      r=   load_scalar_from_joined_execzHJoinedLoader._create_scalar_loader.<locals>.load_scalar_from_joined_execq  rL  r?   r   r  r  rM  )rr   r   r8   r=  r   rP  rR  rT  s   ` ``    r=   r  z"JoinedLoader._create_scalar_loaderX  s    	( 	( 	( 	( 	( 	(
	& 	& 	& 	& 	& 	& 	&&	 	 	 	 	 	5  $(,K!LMMM:%%X;<	
 	
 	
 $ 	w&&78    	 	r?   )NNF)FN)r$  r%  r&  r'  )r   r   r   r   r   ro   r   r   r  r  r  r  r  r7  r   r  r  r   r   s   @r=   r  r  D  s-        
 I: : : : :' ' ' $@ @ @ @D7 7 7r@ @ @2MK MK MK^] ] ]R GKk
 k
 k
 k
 k
Z" " "H< < <|- - -^# # # # # # #r?   r  selectinc                  |     e Zd ZdZ ej        dg d          ZdZ fdZd Z	d Z
d Zd	 Zd
 Zd Zd Zd Z xZS )SelectInLoader)r  	omit_join_parent_alias_query_info_fallback_query_info	queryinfo)load_only_childload_with_joinin_exprpk_colszero_idxchild_lookup_colsi  c                   t                                          ||           | j        j        | _        | j        j        t
          j        u }| j        j        | j        j        | _        nf| j                            d          }|r|j	        | _        n=| j
        j        d                             |j        dd| j
        j                  | _        | j        rQ|r4|                                 | _        |                                 | _        d S |                                 | _        d S |                                 | _        d S )Nr  r   TFr6  )rn   ro   rp   r  r]   r   rG  rX  r   r$  rQ   r@  r   r!  rA  _init_for_omit_join_m2orZ  _init_for_joinr[  _init_for_omit_join)rr   rQ   rs   is_m2or  rt   s        r=   ro   zSelectInLoader.__init__  s:   ....9%/:3GG)5!1;DNN-;;% J  !+!3!%!8!;!C!C- $!& $ ?	 "D " " > 	5 >#'#?#?#A#A ,0,?,?,A,A)))#'#;#;#=#=   #2244Dr?   c                d    t           j        j        j                                       fdt                    D                        fd j        j        D             x}}t          |          dk    rt          j
        | }d}n
|d         }d}                     dd|||d           S )Nc              3  r   K   | ]1}j         j                            |d           D ]}||         fV  2dS )r   N)rQ   rA  rX   )r   r   equivpk_to_fkrr   s      r=   r   z5SelectInLoader._init_for_omit_join.<locals>.<genexpr>  sl       
 
8<<QCC
 
  HQK 
 
 
 
 
 
 
r?   c                (    g | ]}|v |         S r   r   )r   r   rk  s     r=   r   z6SelectInLoader._init_for_omit_join.<locals>.<listcomp>  s)     
 
 
!xHSMr?   r
   Fr   T)rr  rp   r:  local_remote_pairsr6  rB  rQ   r   r  r+   tuple_
query_info)rr   r`  fk_colsr_  ra  rk  s   `    @r=   rf  z"SelectInLoader._init_for_omit_join  s     0C
 
 	 
 
 
 
 
(^^
 
 
 	
 	
 	

 
 
 
%)[%<
 
 
 	
' w<<!j'*GHHajGHueWgxNNNr?   c                    | j         j        }t          |          dk    rt          j        | }d}n
|d         }d}| j                            d          fd|D             }|                     dd||||          S )Nr
   Fr   Tr  c                *    g | ]}j         |         S r   r  )r   r  r  s     r=   r   z:SelectInLoader._init_for_omit_join_m2o.<locals>.<listcomp>  s!    III2z226IIIr?   )r`   r   r  r+   rn  rp   r   ro  )rr   r`  r_  ra  lookup_colsr  s        @r=   rd  z&SelectInLoader._init_for_omit_join_m2o  s    +)w<<!j'*GHHajGH)778MNN
IIIIIII%'8[
 
 	
r?   c                (   t          | j        j                  | _        t	          | j                  fd| j        j        D             }t          |          dk    rt          j        | }d}n
|d         }d}| 	                    dd|||d           S )Nc                :    g | ]}                     |          S r   _adapt_element)r   r   pa_insps     r=   r   z1SelectInLoader._init_for_join.<locals>.<listcomp>  s4     
 
 
,/G""3''
 
 
r?   r
   Fr   T)
r&   rQ   r\   rY  r)   r   r  r+   rn  ro  )rr   r`  r_  ra  rx  s       @r=   re  zSelectInLoader._init_for_join  s    )$+*<==$,--
 
 
 
37;3J
 
 
 w<<!j'*GHHajGHudGWhMMMr?   c                `    | j                             d                              |           d S r  r  r   s     r=   r   z#SelectInLoader.init_class_attribute  r  r?   c	                   |j         r|                     ||||||||          S |                     |||| j                  \  }	}
}}|
sd S |j        j        j        sd S | j        j        | j	                 j
        j        st          j        d| z            t          |          dk    r"t          j        |j        | j                  sd S n"t          j        |d         | j                  sd S |	}|| j                 }|                    |j        dd           }|t+          |          }n| j        }t.          j                            ||| j        | j        | j        ||||	  	         d S )Nr  r  r
   r  r  )r   r  r  r  rw   r   r  rQ   rY   r8   r  r  r   r   r  r6   r  r  rp   rX   r   r)   r	  r   r  r  r  )rr   r   rx   ry   rz   r`   r   r{   r   r  r  rz  r  selectin_pathr  r  r`  s                    r=   r   z#SelectInLoader.create_row_processor  s      
	;;	 	 	  %%T7t & 
 
	

  	F$4G 	F{(27K 	,@BFG   t99>>'(@$+NN %d2h<< 	F&4/0 '?? 7
 
 '&'788#{**K 
	
 
	
 
	
 
	
 
	
r?   c	                d    |r j         |vrd S  j        }	|	j        rt          j        t
                    }
g } j        |D ]\  }j        t          fd|	j	        D                       }t          j        |v r	 j        }	 n<d |vr|
|                             |f           h|                    |f           |	j        sd |D             }
|	j        }|	j        }|	j        s*j        r#fd|D             }                    |          }t'          j        dg|R  }|                                }                                }t-          j        ||gt0          t2          j        dd          }|	j        s|                              }n]|                     j                                      t=           j         j        j                                                            }|!                    |"                    tG          j$        d                              }j%        j&        }| j                 }|j'        u r|j(        }n/|j(        }j'        j(        }fd	tS          ||          D             }|r3|j*        r,|t'          j+        |,                                        fz  }||-                                } |j.        | }|/                    d
|i          }j0        r|1                    d          } j        j2        rS|	j        s, j        j2        }j        rfd|D             } |j2        | }n  fd}|3                    | j                  }|	j        r 4                    |
||	||           d S  5                    |
|	||           d S )Nc              3  ^   K   | ]'}                     |t          j                   V  (dS )r  N)ra  r   PASSIVE_NO_FETCH)r   lkr`   r   
state_dicts     r=   r   z0SelectInLoader._load_for_path.<locals>.<genexpr>V  s]       & &  44" * ;	 5  & & & & & &r?   c                @    g | ]\  }}|j         d          ||j        |fS )r
   )r8   rr  )r   r   r  s      r=   r   z1SelectInLoader._load_for_path.<locals>.<listcomp>s  s=       $E9 1uej)<  r?   c                :    g | ]}                     |          S r   rv  )r   r   r`  s     r=   r   z1SelectInLoader._load_for_path.<locals>.<listcomp>  s5       =@$33C88  r?   r  r  )compile_state_pluginplugin_subject)r  r  r   r  primary_keysc                B    g | ]\  }}|                     |          S r   )'_adapt_cached_option_to_uncached_option)r   orig_optuncached_optr   s      r=   r   z1SelectInLoader._load_for_path.<locals>.<listcomp>  sD        +Hl @@\   r?   r  T)r  c                :    g | ]}                     |          S r   rv  )r   r5  r`  s     r=   r   z1SelectInLoader._load_for_path.<locals>.<listcomp>  s7     & & &  )77==& & &r?   c                z    | xj         t          t          j        j        j                            z  c_         d S r5   rn  rq  s    r=   rr  z?SelectInLoader._load_for_path.<locals>._setup_outermost_orderby  s<    #22eT%9%BCC7 7 2222r?   )6r8   rZ  r]  r  r  rB  rQ   rr  rp  rb  r   r   r[  rO   r`  r_  r^  r%  rw  r6   Bundler  r.   r  r-   r   r  r  rY  r_  r  rp   r]  filterin_r+   rK  rw   select_statementuser_passed_queryr  zipr   r  r  r  rh  _update_compile_optionsr  rz  r<  rs  _load_via_child_load_via_parent)rr   r   ry   r  r  r`  rz   r  rz  ro  
our_statesnone_statesr  related_identr`  r_  
bundle_ent
bundle_sql
entity_sqlrF  rC  r  rj  cached_optionsuncached_optionsro  rr  r`   r   r  s   ``   `                     @@@r=   r  zSelectInLoader._load_for_path>  s     	22F%
% !	G$066JK[F$* G G y"Z
 % & & & & & & ):& & & ! ! (9]JJ!%!:JE },,}-44
I6     &&z9'EFFFF ) 	 (.  J
 $$( 	C  0 C   DK   +99'BB_T4G444
2244
%88::
%$j17,D(-"2 	
 
 
 ( 	 .//AA
 d01166*D,@,DEEMM$  A HHW[[~!>!>??@@ *;
2 d23222$2KK'5N&8F    /2"$4/ /	  K  	w. 	-$44W==  K &+??AANAI{#%%&GHH$ 	<##d#;;A( 	, !%!5!>#4 & & & &$2& & &N AJ/    
 )),d.B  % 	  !     !!J74E    r?   c                b   | j         }t          |          }|r|d| j                 }	|| j        d          }d |j                            |dfd|	D             i|                                          D             }
|	D ]g}|
                    |d           }||         D ]F\  }}}|s
| j        |v r|                    | j                  	                    |||s|n|g           Gh||D ]A\  }}}|s
| j        |v r|                    | j                  	                    ||d            Bd S )Nr   c                    i | ]\  }}||	S r   r   )r   r   r  s      r=   
<dictcomp>z2SelectInLoader._load_via_child.<locals>.<dictcomp>!  s.       Aq 1  r?   r  c                2    g | ]}j         r|d          n|S r  ra  )r   r8   ro  s     r=   r   z2SelectInLoader._load_via_child.<locals>.<listcomp>&  s9     ) ) ) # '1&9BCFFs) ) )r?   rR  rz  )
rC   sorted
_chunksizer   r  rJ  rX   r8   r   r  )rr   r  r  ro  rF  r   rz  rC   our_keyschunkdatar8   related_objr   r  r  s      `            r=   r  zSelectInLoader._load_via_child  s    , *%%  	Q01E 1 12H #O33& ) ) ) )',) ) ) '8 4 	 	 &((  D    #hhsD11/9#  +E5)$ !U):): NN48,,@@+2E   	1   	D (3 	M 	M#E5) U!2!2 NN48$$88tLLLL	M 	Mr?   c                   | j         }|rdnd }|ry|d| j                 }|| j        d          }fd|D             }	t          j        t                    }
t          j        |j                            |d|	i|          	                                d           D ]*\  }}|
|         
                    d |D                        +|D ]\  }}}}|s
| j        |v r|
                    ||          }|sb|r`t          |          dk    rt          j        d	| z             |                    | j                                      |||d                    |                    | j                                      |||           |wd S d S )
Nr   r   c                <    g | ]\  }}}}j         r|d          n|S r  r  )r   r8   r   r  r  ro  s        r=   r   z3SelectInLoader._load_via_parent.<locals>.<listcomp>R  sA       5C
I %-6A3  r?   r  r  c                    | d         S r   r   r  s    r=   r>   z1SelectInLoader._load_via_parent.<locals>.<lambda>^  s
    !A$ r?   c              3  &   K   | ]}|d          V  dS )r
   Nr   r  s     r=   r   z2SelectInLoader._load_via_parent.<locals>.<genexpr>`  s&      11r!u111111r?   r
   r  )rC   r  r  r  rB  r  r  r   r  rJ  r  r8   rX   r  r   r  r   r  )rr   r  ro  rF  r   rz  rC   _empty_resultr  r  r  r   r  r8   r   r  r  r  s     `               r=   r  zSelectInLoader._load_via_parentH  s    ,%/4 )	q4?23E#DO$5$56J   9>  L
 *400D!)''*L9&7 (   &((  2 21 Q11q11111115:  1UJ	  TX%;%;!XXc=99
 : :**	.045  
 NN48,,@@z:a=    NN48,,@@z:   O  )	 )	 )	 )	 )	r?   )r   r   r   r   r  
namedtuplero  r  ro   rf  rd  re  r   r   r  r  r  r   r   s   @r=   rW  rW  ~  s        I ('	
 	
 	

 
J J5 5 5 5 5<O O O,
 
 
 N N N' ' '
N
 N
 N
`Q Q Qf5M 5M 5Mn/ / / / / / /r?   rW  c                    fdfd}fd}t          j        | d|ddd           t          j        | d|ddd           d S )Nc           	         |t|j         j         k    rd|                    t          j        |                    }|r;||ur7t	          j        dt          j        |          d| j        ddd          |S )Nz	Instance z+ is already associated with an instance of z	 via its z0 attribute, and is only allowed a single parent.bbf1)code)	r8   	hasparentr   instance_stater   r   r6   instance_strr\   )r   rP  oldvalue	initiatorr  r:   s        r=   	_do_checkz*single_parent_validator.<locals>._do_check{  s    $(!:!:!++J,Ee,L,LMMI XU2200  ,U3333U\\\444I      r?   c                      | |d |          S r5   r   )r   rP  r  r  s      r=   rO   z'single_parent_validator.<locals>.append  s    ytY777r?   c                      | |||          S r5   r   )r   rP  r  r  r  s       r=   set_z%single_parent_validator.<locals>.set_  s    yx;;;r?   rO   T)rawretvalrJ   r   )r(   listen)r9   r:   rO   r  r  s    `  @r=   rP   rP   z  s        8 8 8 8 8< < < < < 
LhDd    
LudT$OOOOOOr?   )NNNNFN)Wr   
__future__r   r  r  typingr   r   r   r   r   r	    r   r   r   r   r   r   r   r   r   r   r   r6   baser   r   r   r   r   r   r   r   r   r   r   r   r    r!   r   r"   r   r#   r  r$   r%   r&   r(   r   r)   r*   r+   r3  r,   sql.selectabler-   r.   util.typingr/   r`   r0   r1   sql.elementsr2   rf   ColumnPropertystrategy_forrj   class_loggerr   r   r   r   r  r  r  MemoizedSlots
Identifiedr  r  r  r  r	  r  rW  rP   r   r?   r=   <module>r     s	  2 2 # " " " " "                                                                                                               " " " " " " " " " " " " ' ' ' ' ' '       & & & & & &             ) ) ) ) ) ) $ $ $ $ $ $ * * * * * * ! ! ! ! ! ! & & & & & & + + + + + + # # # # # #             " " " " " "                                                       " " " " " "       ; ; ; ; ; ; # # # # # # ! ! ! ! ! ! -333333,,,,,, N! N! N! N!b ''55'II( ( ( ( ( ( ( JI(V ''4%'HHW: W: W: W: W:> W: W: IH W:t '''>>T
 T
 T
 T
 T
\ T
 T
 ?> T
n ''$'GG''dd (   ''4'88l
 l
 l
 l
 l
> l
 l
 98  HG l
^8 8 8 8 8 8 8 80"
 "
 "
 "
 "
 "
 "
 "
J #00D0AA    n   BA  #00h0??#00d0;;#= #= #= #= #=) #= #= <; @? #=L #00d0;;#00h0??#00g0>>#00n0EE#00n0EEkJ kJ kJ kJ kJ 2CNkJ kJ FE FE ?> @? <; kJ\1
 1
 1
 1
 1
 1
 1
 1
hIH IH IH IH IH+ IH IH IHX #00k0BBa a a a aj a a CBaH #00j0AAG
G G
G G
G G
G G
GZ G
G G
G BA G
GT #00h0??#00e0<<t t t t t- t t =< @? tn #00j0AAw w w w wZ!3 w w BA wtP P P P Pr?   