
    ,h                   2   S SK Jr  S SKrS SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJ	r	  S S	KJ
r
  S S
KJr  S SKJr  S SKJr  S SKJr  S SKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJ r   SSKJ!r!  SSKJ"r#  SS KJ$r$  SS!KJ%r%  SS"KJ&r&  SS#KJr  SS$K&J'r'  SS%K&J(r(  SS&K&J)r)  SS#K&Jr*  SS'K&J+r+  SS(K,J-r-  SS)K,J.r.  SS*K,J/r/  SS+K,J0r0  SS,K1J2r2  SS-K1J3r3  SS.K1J4r4  SS/K1J5r5  SS0K1J6r6  SS1K1J7r7  SS2K8J9r9  SS3K:J;r;  SS4K:J<r<  SS5K=J>r>  SS6K=J?r?  SS7K=J@r@  SS8K=JArA  SS9K=JBrB  SS:K=JCrC  SS;K=JDrD  SS<K=JErE  SS=KFJGrG  \(       ar  SS>KHJIrI  SS?KHJJrJ  SS@KJKrK  SSAKLJMrM  SSBKNJOrO  SSCKPJQrQ  SSDKPJRrR  SSEKSJTrT  SSFKUJVrV  SSGK,JWrW  SSHKXJYrY  SSIK8JZrZ  SSJK:J[r[  SSKK=J\r\  SSLK=J]r]  SSMK=J^r^  SSNK=J_r_  SSOK=J`r`  SSPKaJbrb  \" SQ\SR9rc\R                  re\R                  " 5       rg\CR                  rh " SS ST5      ri\R                  " SUSV05      rj " SW SX\45      rk " SY SZ\k5      rl " S[ S\\k5      rm " S] S^5      rn " S_ S`\n5      ro " Sa Sb\n5      rp\&R(                  Rh                  R                  ScSd5       " Se Sf\m5      5       rr " Sg Sh\;\6\E\-   5      rs\&R(                  Rh                  R                  ScSi5       " Sj Sk\l\>5      5       rt\&R(                  Rh                  R                  ScSl5       " Sm Sn\m\D5      5       ru  S       SSo jjrv    SSp jrw    SSq jrx S     SSr jjry " Ss St5      rz " Su Sv\z5      r{ " Sw Sx\z5      r| " Sy Sz\z5      r} " S{ S|\}5      r~ " S} S~\}5      r " S S\5      rg)    )annotationsN)Any)cast)Dict)Iterable)List)Optional)Set)Tuple)Type)TYPE_CHECKING)TypeVar)Union   )
attributes)
interfaces)loading)_is_aliased_class)ORMColumnDescription)ORMColumnsClauseRole)PathRegistry)_entity_corresponds_to)_ORMJoin)_TraceAdaptRole)AliasedClass)Bundle)
ORMAdapter)ORMStatementAdapter   )exc)future)inspect)sql)util)	coercions)
expression)roles)visitors)_TP)is_dml)is_insert_update)is_select_base)_select_iterables)CacheableOptions)CompileState)
Executable)
Generative)Options)
UpdateBase)GroupedElement)
TextClause)CompoundSelectState)LABEL_STYLE_DISAMBIGUATE_ONLY)LABEL_STYLE_NONE)LABEL_STYLE_TABLENAME_PLUS_COL)Select)SelectLabelStyle)SelectState)TypedReturnsRows)InternalTraversal)_InternalEntityType)OrmExecuteOptionsParameter)PostLoad)Mapper)Query)_BindArguments)Session)Result)_CoreSingleExecuteParams)_ColumnsClauseArgument)SQLCompiler)_DMLTableElement)ColumnElement)_JoinTargetElement)_LabelConventionCallable)_SetupJoinsElement)ExecutableReturnsRows)
SelectBase)
TypeEngine_T)boundc                      \ rS rSr% SrS\S'   S\S'   S\S'    " S	 S
\5      r  S               SS jjrSS jr	Sr
g)QueryContextf   )top_level_contextcompile_statequeryuser_passed_queryparamsload_optionsbind_argumentsexecution_optionssession	autoflushpopulate_existinginvoke_all_eagersversion_checkrefresh_statecreate_eager_joinspropagated_loader_optionsr   runidpartialspost_load_pathsidentity_token	yield_perloaders_require_bufferingloaders_require_uniquingintrg   zDict[PathRegistry, PostLoad]ri   ORMCompileStaterX   c                  D    \ rS rSrSrSrSrSrSrSr	Sr
SrSrSrSrSrSrg)!QueryContext.default_load_options   FTN )__name__
__module____qualname____firstlineno___only_return_tuples_populate_existing_version_check_invoke_all_eagers
_autoflush_identity_token
_yield_per_refresh_state_lazy_loaded_from_legacy_uniquing_sa_top_level_orm_context_is_user_refresh__static_attributes__rs       N/var/www/auris/envauris/lib/python3.13/site-packages/sqlalchemy/orm/context.pydefault_load_optionsrq      sE    #"!

  $(! r   r   Nc	                  ^  UT l         U=(       d    [        T l        U=(       d    [        T l        UT l        UT l        UT l        UT l        ST l        ST l	        UT l
        UR                  T l        UR                  R                  n	UR                  n
[        U 4S j[!        X5       5       5      T l        [%        UR&                  5      T l        UR(                  T l        UR,                  T l        UR0                  T l        UR4                  T l        UR8                  T l        UR<                  T l        UR@                  T l!        g )NFc              3  r   >#    U  H,  u  pUR                   (       d  M  UR                  TU5      v   M.     g 7fN)propagate_to_loaders'_adapt_cached_option_to_uncached_option).0optuncached_optselfs      r   	<genexpr>(QueryContext.__init__.<locals>.<genexpr>   s7      /
%J!'' LC77lKK%Js   77)"r\   _EMPTY_DICTr^   r]   rX   rY   rZ   r_   rl   rm   r[   r   rW   select_statement_with_optionstupleziprf   dictr   r|   r`   ry   ra   r{   rb   rz   rc   r   rd   r~   rk   r}   rj   )r   rX   	statementrZ   r[   r_   r\   r^   r]   cached_optionsuncached_optionss   `          r   __init__QueryContext.__init__   s   $ )!2!Ak,;*
 "3).&(-%!-!G!G&77EE,:: */ /
%(%J/
 *
& }778%00!-!@!@!-!@!@)88)88%00*::r   c                ,    U R                   =(       d    U $ r   )rW   r   s    r   _get_top_level_context#QueryContext._get_top_level_context   s    %%--r   )r   r`   r]   rX   r^   rj   rb   r\   rl   rm   r[   ra   rf   rY   rd   r_   rW   rZ   rc   rk   )NN)rX   r/   r   2Union[Select[Any], FromStatement[Any], UpdateBase]rZ   r   r[   rG   r_   rE   r\   zQUnion[Type[QueryContext.default_load_options], QueryContext.default_load_options]r^   z$Optional[OrmExecuteOptionsParameter]r]   zOptional[_BindArguments])returnrU   )rt   ru   rv   rw   	__slots____annotations__r2   r   r   r   r   rs   r   r   rU   rU   f   s    I6 J11""!w !: CG37!@;#@; F@;
	@; )@; @;
@; @@;  1!@;D.r   rU    _result_disable_adapt_to_contextTc                     ^  \ rS rSrSrS r\        S	U 4S jj5       r\S 5       r\  S
S j5       r	\S 5       r
SrU =r$ )AbstractORMCompileState   Fc                  0 U l         Uc  0 U l        U(       d   eg UR                  =U l        nU(       aD  SUS'   U(       a7  UR                   H'  nUR                  (       d  M  UR                  U 5        M)     g UR                  SS5      (       a  g UR                  S   n US   nUR                   H:  nUR                  (       d  M  UR                  (       d  M)  UR                  U 5        M<     SUS'   g ! [         a     Nf = f)NTtoplevel_ormFr   
selectable)
r   global_attributes_global_attributesr   _is_criteria_optionprocess_compile_stategetstack_is_compile_stateKeyError)	r   r   compilertoplevelprocess_criteria_for_toplevelgar   stack_0toplevel_stmts	            r   _init_global_attributes/AbstractORMCompileState._init_global_attributes   s      &(D"O8*2*E*EED"R!%B~,$22C...11$7 3 VVNE**..#	4#L1M %22(((S-D-D-D--d3 3 ">  		s   "C7 7
DDc                &   > [         TU ]  " X40 UD6$ )a  Create a context for a statement given a :class:`.Compiler`.

This method is always invoked in the context of SQLCompiler.process().

For a Select object, this would be invoked from
SQLCompiler.visit_select(). For the special FromStatement object used
by Query to indicate "Query.from_statement()", this is called by
FromStatement._compiler_dispatch() that would be called by
SQLCompiler.process().
)supercreate_for_statement)clsr   r   kw	__class__s       r   r   ,AbstractORMCompileState.create_for_statement	  s    " w+IF2FFr   c                    [        5       er   NotImplementedError)r   r_   r   r[   r^   r]   is_pre_events          r   orm_pre_session_exec,AbstractORMCompileState.orm_pre_session_exec       "##r   c                `    UR                  X#=(       d    0 US9nU R                  UUUUUU5      $ )N)r^   )executeorm_setup_cursor_result)r   r_   r   r[   r^   r]   connresults           r   orm_execute_statement-AbstractORMCompileState.orm_execute_statement(  sH     |7H  
 **
 	
r   c                    [        5       er   r   r   r_   r   r[   r^   r]   r   s          r   r   /AbstractORMCompileState.orm_setup_cursor_result>  r   r   )r   r   )r   r0   r   rI   r   r   r   r/   )r   rF   )rt   ru   rv   rw   is_dml_returningr   classmethodr   r   r   r   r   __classcell__r   s   @r   r   r      s    %"N GG G 	G
 
G G$ 	$ 	$ 
 

 
* 	$ 	$r   r   c                  8    \ rS rSrSr\S 5       r\S 5       rSrg)AutoflushOnlyORMCompileStateiK  z>ORM compile state that is a passthrough, except for autoflush.c                    [         R                  R                  SS1UUR                  5      u  nnU(       d!  UR                  (       a  UR	                  5         X$4$ )N_sa_orm_load_optionsr`   )rU   r   from_execution_options_execution_optionsr|   )r   r_   r   r[   r^   r]   r   r\   s           r   r   1AutoflushOnlyORMCompileState.orm_pre_session_execN  s^     --DD" ((
	
  7 7 ++r   c                    U$ r   rs   r   s          r   r   4AutoflushOnlyORMCompileState.orm_setup_cursor_resultk  s	     r   rs   N)	rt   ru   rv   rw   __doc__r   r   r   r   rs   r   r   r   r   K  s+    H, ,8 	 	r   r   c                     \ rS rSr%  " S S\5      rS\S'   S\S'   S\S'   S\S	'   S
\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   \rS\S'   Sr	S  r
\        S.S! j5       r\          S/S" j5       rS# r\      S0S$ j5       r\S% 5       r\S& 5       r\S' 5       r\S( 5       rS) rS* r\S+ 5       rS,rg-)1ro   ix  c                  b   \ rS rSrS\R
                  4S\R
                  4S\R
                  4S\R                  4S\R
                  4S\R
                  4S\R                  4S	\R
                  4S
\R
                  4S\R
                  4S\R
                  4/rSr	Sr
Sr\rSrSrSrSrSrSrSrSrg)'ORMCompileState.default_compile_optionsiy  _use_legacy_query_style_for_statement_bake_ok_current_path_enable_single_crit_enable_eagerloads_only_load_props_set_base_alias_for_refresh_state_render_for_subquery_is_starFTNrs   )rt   ru   rv   rw   r>   
dp_booleandp_has_cache_keydp_plain_obj_cache_key_traversalr   r   r   _path_registryr   r   r   r   r   r   r   r   r   rs   r   r   default_compile_optionsr   y  s    &(9(D(DE0;;<*556/@@A"$5$@$@A!#4#?#?@!2!?!?@ 1 < <=!#4#?#?@#%6%A%AB*556 
& #(
 &"!"$r   r   zDict[Any, Any]r   r   r   r   r   List[_QueryEntity]	_entitiesz%Dict[_InternalEntityType, ORMAdapter]_polymorphic_adaptersz=Union[Type[default_compile_options], default_compile_options]compile_optionszOptional[_QueryEntity]_primary_entitybooluse_legacy_query_stylerM   _label_conventionzList[ColumnElement[Any]]primary_columnssecondary_columnszSet[ColumnElement[Any]]dedupe_columnszList[Tuple[Any, ...]]re   r   current_pathFc                    [        5       er   r   )r   argr   s      r   r   ORMCompileState.__init__      !##r   c                `    U R                   " [        SU5      4UR                  (       + US.UD6$ )NUnion[Select, FromStatement])r   r   )_create_orm_contextr   r   )r   r   r   r   s       r   r   $ORMCompileState.create_for_statement  s>     &&/;
!'
 	
 	
r   c                   [        5       er   r   )r   r   r   r   r   s        r   r	  #ORMCompileState._create_orm_context  s     "##r   c                l    U R                   nX;  a#  UR                  U5        UR                  U5        g g r   )r  addappend)r   objcol_collectiondedupes       r   _append_dedupe_col_collection-ORMCompileState._append_dedupe_col_collection  s1    $$JJsO!!#& r   c                J    U(       a  SS jnU$ [         R                  " U5      $ )Nc                ,    U(       a  U$ [        U S5      $ )Nkey)getattr)colcol_names     r   name7ORMCompileState._column_naming_convention.<locals>.name  s    #O"3..r   r   )r<   _column_naming_convention)r   label_stylelegacyr  s       r   r  )ORMCompileState._column_naming_convention  s$     / K88EEr   c                    [        U5      $ r   )_column_descriptionsr   r   s     r   get_column_descriptions'ORMCompileState.get_column_descriptions  s    #I..r   c                   [         R                  R                  S1 SkUUR                  5      u  nnSU;   a5  US   nUR                  R                  R                  UR                  U5      nU(       d  [        nOUR                  [        5      nUR                  (       a  UR                  SUR                  05      n[        UR                  SS 5      (       aJ  [        UR                  R                  5      S:  a'  UR                  SS5      b  UR                  S S	S
.5      nX%S'    UR                  S   n	U	(       a  U	R                   US'   U(       d!  UR$                  (       a  UR%                  5         X$4$ ! ["         a     S5       ef = f)Nr   >   r`   rk   rj   ra   sa_top_level_orm_contextr'  rk   r   
   compiled_cacheTz#excess depth for ORM loader options)r)  _cache_disable_reasonclauseplugin_subjectmapperz0statement had 'orm' plugin but no plugin_subject)rU   r   r   r   rY   
merge_withr^   _orm_load_exec_optionsunionr~   r  _compile_optionslenr   r   _propagate_attrsr-  r   r|   )
r   r_   r   r[   r^   r]   r   r\   ctxr,  s
             r   r   $ORMCompileState.orm_pre_session_exec  s    --DD" ((
	
( &)::#$>?C #		 < < G G%%'8! ! 6 1 7 78N O "" 1 7 7l556!
 I..FFI..<<=B!%%&6=I "''*.2-  $-x 	A&778HIN +9+@+@x( 7 7 ++  	MLLL5	Ms   )E9 9Fc           
        UR                   nUR                  R                  nUR                  S[        R
                  5      n	UR                  R                  (       a  U$ [	        UUUUUU	UU5      n
[        R                  " Xj5      $ )Nr   )
contextcompiledrX   r   rU   r   r   r   r   	instances)r   r_   r   r[   r^   r]   r   execution_contextrX   r\   querycontexts              r   r   'ORMCompileState.orm_setup_cursor_resultE  s     #NN)22@@ ),,"L$E$E
 ((11M#	
   66r   c                t    U R                    Vs/ s H  n[        U[        5      (       d  M  UPM     sn$ s  snf )zreturn all _MapperEntity objects in the lead entities collection.

Does **not** include entities that have been replaced by
with_entities(), with_only_columns()

)r   
isinstance_MapperEntity)r   ents     r   _lead_mapper_entities%ORMCompileState._lead_mapper_entitiesj  s2      >>
)CZ]-KC>
 	
 
s   55c                   UR                   (       d{  UR                  R                  U R                  ;  aV  UR                  R	                  5        H7  nU R                  U[        [        R                  UUR                  US95        M9     ggg)a  given MapperEntity or ORMColumnEntity, setup polymorphic loading
if called for by the Mapper.

As of #8168 in 2.0.0rc1, polymorphic adapters, which greatly increase
the complexity of the query creation process, are not used at all
except in the quasi-legacy cases of with_polymorphic referring to an
alias and/or subquery. This would apply to concrete polymorphic
loading, and joined inheritance where a subquery is
passed to with_polymorphic (which is completely unnecessary in modern
use).

)equivalentsr   N)
is_aliased_classr-  persist_selectabler   iterate_to_root"_mapper_loads_polymorphically_withr   r   WITH_POLYMORPHIC_ADAPTER_equivalent_columns)r   ext_infor   mps       r    _create_with_polymorphic_adapter0ORMCompileState._create_with_polymorphic_adapterv  s|     ))22--. oo55777'@@$&$:$:#-	 8. *r   c                    UR                   =(       d    U/ H@  nX R                  U'   UR                  5        H  nX R                  UR                  '   M     MB     g r   )_with_polymorphic_mappersr   rG  local_table)r   r-  adapterm2ms        r   rH  2ORMCompileState._mapper_loads_polymorphically_with  sO    22>vh>B-4&&r*'')<C**1==9 * ?r   c                    [        S5      e)Nz0this method only works for ORMSelectCompileStater   )r   rY   r  s      r   _create_entities_collection+ORMCompileState._create_entities_collection  s    !>
 	
r   rs   N)r   r0   r   rI   r   r   r   ro   )
r   r  r   r   r   Optional[SQLCompiler]r   r   r   ro   )r  r;   r  r   r   rM   )rt   ru   rv   rw   r.   r   r   r   r  _has_mapper_entitiesr   r   r   r	  r  r  r$  r   r   propertyrA  rM  rH  rW  r   rs   r   r   ro   ro   x  s   #"2 #J %%AAHH!!@@  ,+  //--//++  "0L,/ $ 

 
 	

 

 
 $/$ 	$
 ($ $ 
$ $' F*F48F	!F F / / W, W,r "7 "7H 	
 	
:D 
 
r   ro   c                  .    \ rS rSrSrSrS rS rS rSr	g)	_DMLReturningColFilteri  za base for an adapter used for the DML RETURNING cases

Has a subset of the interface used by
:class:`.ORMAdapter` and is used for :class:`._QueryEntity`
instances to set up their columns as used in RETURNING for a
DML statement.

)r-  columns__weakref__c                    Ub   UR                   UR                   La  X l        OXl        [        R                  " U R                  5      =U l        U l        g r   )rQ  r-  r$   WeakPopulateDictadapt_check_presentr^  )r   target_mapperimmediate_dml_mappers      r   r   _DMLReturningColFilter.__init__  sQ     ,))'334 /K (K&*&;&;$$'
 	
t|r   c                n    [         R                  " U5       H  nU R                  U5      nUc  M  Us  $    g r   )sql_util_find_columnsrb  )r   r  	as_filterccc2s        r   __call___DMLReturningColFilter.__call__  s6    ((-B))"-B~
 .
 r   c                    [        5       er   r   )r   r  s     r   rb  *_DMLReturningColFilter.adapt_check_present  r  r   )r^  r-  N)
rt   ru   rv   rw   r   r   r   rl  rb  r   rs   r   r   r]  r]    s     5I
$r   r]  c                      \ rS rSrSrS rSrg) _DMLBulkInsertReturningColFilteri  aC  an adapter used for the DML RETURNING case specifically
for ORM bulk insert (or any hypothetical DML that is splitting out a class
hierarchy among multiple DML statements....ORM bulk insert is the only
example right now)

its main job is to limit the columns in a RETURNING to only a specific
mapped table in a hierarchy.

c                    U R                   nUR                  R                  US 5      nUc  g UR                  R                  R                  U5      $ r   )r-  _columntopropertyr   rQ  ccorresponding_columnr   r  r-  props       r   rb  4_DMLBulkInsertReturningColFilter.adapt_check_present  sH    ''++C6<!!##88==r   rs   Nrt   ru   rv   rw   r   rb  r   rs   r   r   rq  rq    s    >r   rq  c                      \ rS rSrSrS rSrg)"_DMLUpdateDeleteReturningColFilteri  aG  an adapter used for the DML RETURNING case specifically
for ORM enabled UPDATE/DELETE

its main job is to limit the columns in a RETURNING to include
only direct persisted columns from the immediate selectable, not
expressions like column_property(), or to also allow columns from other
mappers for the UPDATE..FROM use case.

c                    U R                   nUR                  R                  US 5      nUb%  UR                  R                  R                  U5      $ U$ r   )r-  rs  r   rF  rt  ru  rv  s       r   rb  6_DMLUpdateDeleteReturningColFilter.adapt_check_present  sO    ''++C6 ,,..CCCHH 
r   rs   Nry  rs   r   r   r{  r{    s    
r   r{  ormorm_from_statementc                      \ rS rSr% SrSrS\S'   S\S'   SrS\S	'   SrSr	Sr
Sr\r\r\          SS
 j5       rS rS rS rSrg)ORMFromStatementCompileStatei  NFFromStatementstatement_containerz)Union[SelectBase, TextClause, UpdateBase]requested_statementzOptional[_DMLTableElement]	dml_tablec               
   Un[        U[        5      (       d   eUb'  UR                  (       a  [        R                  " S5      eU R                  U 5      nS Ul        UR                  R                  Ul	        U=Ul
        Ul        UR                  =Ul        nUR                  (       a  UR                  Ul        SUl        / Ul        0 Ul        UR                  Ul        UR                  (       ao  [        U[*        R,                  5      (       aP  UR.                  (       d?  UR                  (       d.  UR0                  [2        L a  UR5                  [6        5      Ul        OXl        UR;                  UR.                  (       d  UR                  (       d  UR0                  O[2        UR                  5      Ul        [>        RA                  UURB                  UR$                  SS9  UR                  RD                  Ul#        URI                  UUSSS9  URJ                  (       a7  URJ                   H'  nURL                  (       d  M  URO                  U5        M)     URP                  (       a  URP                   H  u  pU" U5        M     / Ul)        / Ul*        [W        5       Ul,        / Ul-        / Ul.        S Ul/        [        UR8                  [*        R`                  5      (       ap  0 Ul1        UR$                   H  n
U
Re                  U5        M     S=Ul3        Ul4        SUl5        URR                   H  nURm                  USURn                  S9  M      U$ [q        [r        Rt                  UR8                  URv                  S9Ul<        U$ )NzThe ORM FromStatement construct only supports being invoked as the topmost statement, as it is only intended to define how result rows should be returned.Tis_current_entitiesF)r   r   )within_columns_clauseadd_to_result_map)adapt_on_names)=r>  r  r   sa_excCompileError__new__r   r1  r   r   r  r   elementr  r*   tabler  r   r   r   r   r&   rP   _is_textual_label_styler8   set_label_styler9   r   r  r   _QueryEntityto_compile_state_raw_columnsr   r  r   r   r   r   _with_context_optionsr   r   setr  re   _fallback_from_clausesorder_byr5   extra_criteria_entitiessetup_compile_state_ordered_columns_textual_ordered_columns_loose_column_name_matchingprocess_add_to_result_mapr   r   ADAPT_FROM_STATEMENT_adapt_on_names_from_obj_alias)r   r   r   r   r   r  r   r   fnr  entityrt  s               r   r	  0ORMFromStatementCompileState._create_orm_context  s    (-}====HNN%%=  {{3#  00HH 	# <ON 4#8/B/J/JJ 9&__DN$(D!%'"2CC ''9j&;&;<<))$$&&*::&66.DN 'N!%!?!? !,,Y5E5E &&%''"
 	%%,,NN $	 	& 	
 0@@NN$$*/	 	% 	
 ,,*88(((--d3 9 44.DD4 E  "!#!e"$&(#dnnj&;&;<< ,.D(..**40 ) H%(I 48H0))  *.&.&A&A !  *,  $7442BB$D  r   c                    U$ r   rs   )r   colscurrent_adapters      r   _adapt_col_list,ORMFromStatementCompileState._adapt_col_list      r   c                    g r   rs   r   s    r   _get_current_adapter1ORMFromStatementCompileState._get_current_adapter  s    r   c                   U R                   R                  R                  SS5      nU R                   R                  (       a  [	        X!5      nODU R                   R
                  (       d  U R                   R                  (       a  [        X!5      nOSnU R                  R                  (       a/  [        U R                  5      S:w  a  [        R                  " S5      eU R                   H  nUR                  X5        M     g)zoused by BulkORMInsert, Update, Delete to set up a handler
for RETURNING to return ORM objects and expressions

r,  Nr   sCan't generate ORM query that includes multiple expressions at the same time as '*'; query for '*' alone if present)r   r3  r   	is_insertrq  	is_update	is_deleter{  r   r   r2  r   r  r  !setup_dml_returning_compile_state)r   
dml_mapperrc  rR  r  s        r   r  >ORMFromStatementCompileState.setup_dml_returning_compile_state  s    
 77;;d
 >>##6G ^^%%)A)A8G G((c$...AQ.F%%J 
 nnF44TC %r   )r   r  r  r   r   r   r   re   r  r  r  r  r   r  r   r  r   r   r   r  r   )
r   r  r   r   r   rY  r   r   r   r  )rt   ru   rv   rw   r  rZ  r   r  _has_orm_entitiesmulti_row_eager_loaderseager_adding_joinscompound_eager_adapterr   r  eager_joinsr   r	  r  r  r  r   rs   r   r   r  r    s    O &&BB,0I)0#!)KC/C 	C
 (C C 
&C CJDr   r  c                  j  ^  \ rS rSr% SrSr\R                  r\R                  r
SrS\S'   S\S'   S	\R                  4S\R                  4/\R"                  -   r\S
\R&                  4/-   rSr S     SS jjrS r\S 5       rS rU 4S jr\S 5       r\S 5       r\S 5       r\S 5       rSr U =r!$ )r  i  a  Core construct that represents a load of ORM objects from various
:class:`.ReturnsRows` and other classes including:

:class:`.Select`, :class:`.TextClause`, :class:`.TextualSelect`,
:class:`.CompoundSelect`, :class`.Insert`, :class:`.Update`,
and in theory, :class:`.Delete`.

r  N(Union[ExecutableReturnsRows, TextClause]r  r   r  r  r1  Tc           
        [         R                  " U5       Vs/ s H(  n[        R                  " [        R
                  UU SS9PM*     snU l        X l        UR                  U l        UR                  U l	        UR                  U l
        UR                  U l        UR                  U l        [        U5      (       a  UR                  OS U l        X0l        g s  snf )NT)apply_propagate_attrspost_inspect)r$   to_listr%   expectr'   ColumnsClauseRoler  r  r*   	is_selectr  r  r  r,   r  r  )r   entitiesr  r  r@  s        r   r   FromStatement.__init__  s     ||H-
 . ''&*!	 .
 nn ** ** ** **$27$;$;G   	  /%
s   /Cc                    U R                   " X40 UD6nUR                  (       + nU(       a  X1l        UR                  " UR                  40 UD6$ )zprovide a fixed _compiler_dispatch method.

This is roughly similar to using the sqlalchemy.ext.compiler
``@compiles`` extension.

)_compile_state_factoryr   rX   r  r   )r   r   r   rX   r   s        r   _compiler_dispatch FromStatement._compiler_dispatch  sJ     33DIbI~~%%2" 7 7>2>>r   c                n    [        [        [        R                  " U 5      5      R                  nU" U 5      $ )a  Return a :term:`plugin-enabled` 'column descriptions' structure
referring to the columns which are SELECTed by this statement.

See the section :ref:`queryguide_inspection` for an overview
of this feature.

.. seealso::

    :ref:`queryguide_inspection` - ORM background

)r   ORMSelectCompileStater<   get_plugin_classr$  )r   meths     r   column_descriptions!FromStatement.column_descriptions  s3     !;#?#?#E

!
! 	 Dzr   c                    U $ r   rs   r   s    r   _ensure_disambiguated_names)FromStatement._ensure_disambiguated_names  r  r   c              +     >#    [         R                  R                  S U R                   5       5       S h  vN   [        TU ]  " S0 UD6 S h  vN   g  N N7f)Nc              3  8   #    U  H  oR                   v   M     g 7fr   )_from_objectsr   r  s     r   r   -FromStatement.get_children.<locals>.<genexpr>  s      1
1Bg!!1B   rs   )	itertoolschainfrom_iterabler  r   get_children)r   r   r   s     r   r  FromStatement.get_children  sW     ??00 1
151B1B1
 
 	
 	
 7'-"---	
 	.s!   4AAAAAAc                .    U R                   R                  $ r   )r  _all_selected_columnsr   s    r   r  #FromStatement._all_selected_columns  s    ||111r   c                f    [        U R                  5      (       a  U R                  R                  $ S $ r   )r*   r  _return_defaultsr   s    r   r  FromStatement._return_defaults  s%    06t||0D0Dt||,,N$Nr   c                f    [        U R                  5      (       a  U R                  R                  $ S $ r   )r*   r  
_returningr   s    r   r  FromStatement._returning  s%    *0*>*>t||&&HDHr   c                f    [        U R                  5      (       a  U R                  R                  $ S $ r   )r+   r  _inliner   s    r   r  FromStatement._inline!  s%    '7'E'Et||##O4Or   )	r  r  r  r  r  r*   r  r  r  )T)r  z%Iterable[_ColumnsClauseArgument[Any]]r  r  r  r   )"rt   ru   rv   rw   r   __visit_name__r  r   r1  r   r  _for_update_argr   r>   dp_clauseelement_listdp_clauseelementr0   _executable_traverse_internals_traverse_internalsr   r   is_from_statementr   r  r[  r  r  r  r  r  r  r  r   r   r   s   @r   r  r    s8    *N3KK9NNO55 
*@@A	%667 	112
 /	.??@2   !%	/7/ :/ 	/4?"  ". 2 2 O O I I P Pr   r  compound_selectc                      \ rS rSrSrg)CompoundSelectCompileStatei&  rs   N)rt   ru   rv   rw   r   rs   r   r   r  r  &  s     	r   r  selectc                  d   \ rS rSrSr\rSrSrSr	Sr
SrSrSrSrSrSr\          S$S j5       rS rS r\S 5       r\S	 5       r\S
 5       r\S 5       r\S 5       rS rS rS rS rS rS%S jrS r S r!S r"S r#S r$S r%S r&S r'S r(S r)S r*S r+\,S 5       r-\,S  5       r.S! r/S" r0S#r1g)&r  i-  rs   NFc                  U R                  U 5      nUnU R                  R                  UR                  5      Ul        UR                  (       a:  UR                  5       Ul        [        R                  " 5       UR                  l        OXel        UR                  R                  Ul
        UR                  R                  Ul        / Ul        S Ul        0 Ul        UR                  Ul        U(       d  U=R                   SSS.-  sl        UR                  (       aF  UR                  R"                  [$        L a)  UR                  (       d  [&        Ul        O'[*        Ul        OUR                  R"                  Ul        UR,                  (       aA  UR,                   Vs0 s H$  nU[.        R1                  UUR2                  / SS9_M&     snUl        UR7                  UR"                  UR                  5      Ul        [.        R1                  UUR2                  UR                  SS9  UR                  R:                  Ul        SUl        URA                  UUUSS9  U(       a  URB                  (       d  UR,                  (       a  UR,                   Hp  nURB                   H]  nURD                  (       d  M  URG                  UUR4                  U    V	s/ s H  n	[I        U	[J        5      (       d  M  U	PM     sn	5        M_     Mr     UR                  RB                   H'  nURD                  (       d  M  URM                  U5        M)     URN                  (       a  URN                   H  u  pU
" U5        M     / Ul(        / Ul)        [U        5       Ul+        0 Ul,        0 Ul-        / Ul.        / Ul/        URa                  S URb                   5       5      Ul2        URg                  5         [h        Rj                  " XURl                  U40 UD6  U$ s  snf s  sn	f )NFT)r   r   r  rs   )r   r   c              3  8   #    U  H  oR                   v   M     g 7fr   )r   )r   infos     r   r   <ORMSelectCompileState._create_orm_context.<locals>.<genexpr>  s      2
(BOO(Br  )7r  r   
safe_merger1  r   _cloner   r$   immutabledictr   for_statementr   r   r   r   r   r   r  LABEL_STYLE_LEGACY_ORMr9   r  r7   _memoized_select_entitiesr  r  r  _memoized_entitiesr  r   r   r  eager_order_byr   r   r   'process_compile_state_replaced_entitiesr>  r?  r   r  r   r   r  r  r  r  re   r  _normalize_froms	_from_objfrom_clauses_setup_for_generater<   r   r   )r   r   r   r   r   r   r   memoized_entitiesr   r@  r  r  s               r   r	  )ORMSelectCompileState._create_orm_context@  s    {{3$ &)%@%@%K%K&&&
	" .. %5$;$;$=D!7;7I7I7KD!!4$4! .>>MM --EE 	# #%'"/@@   &+(,%   ''%%226LL%%#A #@ #44AAD55 %>>
' ? & "<#@#@%22(-	 $A $  ?
'D#  "&!?!?""D$?$?"
 	%%))NN $	 	& 	
 -==KK $$*/	 	% 	
 **99 ";; ",::C,,,CC  ,0+B+B$5,","C $.c=#A	 !$,"	 ; < ,,::(((--d3 ; 11+AA4 B  "!#!e')$"$&(# !11 2
(8(B(B2
 
 	  "T>>8BrB}
'bs   +PP+Pc                >   [        S5        [        SU R                   35        U R                   H  n[        U[        5      (       ap  US   S:X  ag  [        S[
        R                  " US   5       35        [        SU R                  U    35        [        SU R                  U   R                   35        M  [        U[        5      (       d  M  US   S:X  d  M  [        S	[
        R                  " US   5       35        [        SU R                  U    35        M     g )
Nz5
---------------------------------------------------
zcurrent path: r   loaderz
Loader:           r   z    path_with_polymorphicz
With Polymorphic: )printr  r   r>  r   r   coerce__dict__)r   r  s     r   _dump_option_struct)ORMSelectCompileState._dump_option_struct  s    GHt00123??C#u%%#a&H*<,\-@-@Q-H,IJKT__S1234T__S1::;<=C''CF6M,M,\-@-@Q-H,IJKT__S1234 #r   c                t
  ^ U R                   nS U l        SU l        U R                  R                  (       a  U R                  5         UR                   H?  nUR                  (       d  M  U R                  UR                  U R                  U   5        MA     UR                  (       a&  U R                  UR                  U R                  5        U R                  5       mUR                  (       a<  UR                  U l        T(       a$  [        U4S jU R                   5       5      U l        T(       a,  UR                  S;  a  U R                  UR                  T5      OUR                  U l        UR"                  (       a$  [        U4S jUR"                   5       5      U l        T(       a@  UR$                  S;  a0  U R                  [&        R(                  " UR$                  5      T5      OUR$                  =(       d    S U l        U R,                  (       a9  U R.                  S   R0                  nUR3                  U R,                  5      U l        UR4                  (       a"  U R                  UR4                  T5      U l        OSU l        UR8                  U l        UR<                  (       a6  [        [&        R(                  " S UR<                   5       5      5      U l        O[UR@                  b6  [        [&        R(                  " S UR@                   5       5      5      U l!        OURD                  (       d  SU l        URF                  U l#        U R                  RH                  (       a/  [K        U R                  5      S	:w  a  [L        RN                  " S
5      eU R                   H  nURQ                  U 5        M     U RR                   H  nUS   nU" U /US	S  Q76   M     U R                  RT                  (       a  U RW                  5         U RX                  (       d8  U R                  RZ                  (       a   S5       e[L        R\                  " S5      eU R.                  (       d  [_        U R`                  5      U l        U R                   SL a  S U l        U Rb                  (       a8  U Rd                  (       a'  U Rf                  (       a  U Ri                  5       U l        OU Rk                  5       U l        U Rl                  (       a7  U Ro                  5       nUb#  U R                  Rq                  SU05      U l        g g g )Nrs   c              3  6   >#    U  H  nT" US 5      v   M     g7fTNrs   r   critr  s     r   r   <ORMSelectCompileState._setup_for_generate.<locals>.<genexpr>	  s"      - 4 $D$// 4s   NFc              3  H   >#    U  H  nT(       a	  T" US 5      OUv   M     g7fr  rs   r  s     r   r   r    s&      *2D 0?d+DH2s   "r   c              3  X   #    U  H   nUb  [         R                  " U5      OS v   M"     g 7fr   rg  surface_selectablesr   ss     r   r   r  7  s+      &- 89}H003$N-   (*c              3  X   #    U  H   nUb  [         R                  " U5      OS v   M"     g 7fr   r  r  s     r   r   r  >  s+      &4 89}H003$N4r!  r   r   r  Fz,no columns were included in _only_load_propsz4Query contains no columns with which to SELECT from.
deepentity)9r   r   _join_entitiesr   r   _set_select_from_aliasr  _setup_joins_joinr  r   r  _where_criteriar   _order_by_clausesr  r  _having_criteria_group_by_clausesr$   flatten_iteratorgroup_byr  r  _target_adaptercopy_and_process_distinct_ondistinct_on	_distinctdistinct
_correlate	correlate_correlate_exceptcorrelate_except_auto_correlater  r   r2  r  r  r  re   r   _adjust_for_extra_criteriar   r   InvalidRequestErrorlistr  r  r  _should_nest_selectable_compound_eager_statement_simple_statementr   _mapper_zero	_annotate)	r   rY   r
  rR  r  recstrategyezeror  s	           @r   r	  )ORMSelectCompileState._setup_for_generate  s4   %% //'')!&!@!@ ---

%22++,=> "A JJu))4>>:335  #(#8#8D ', - $ 4 4- ($ 5#:#:-#O   !8!8/J(( 	 !!$) *!22* %D! 5#:#:-#O   %%e&=&=> ((0D 	 ''*::G")":":4;N;N"OD#33""O D  "D #%% &"--& DN $$0$)%% &"44& %D! &&$DN  %44((c$...AQ.F%%J  nnF&&t, % **C1vHT$CG$ + 33++-####44LLLu,,F     $T%@%@ AD==E! DM (('',,!;;=DN!335DN%%'E  "&!9!9!5)" ! r   c                    U R                  U 5      n/ Ul        SUl        0 Ul        UR	                  UR
                  U5      Ul        [        R                  X1R                  UR                  SS9  U$ )zCreates a partial ORMSelectCompileState that includes
the full collection of _MapperEntity and other _QueryEntity objects.

Supports a few remaining use cases that are pre-compilation
but still need to gather some of the column  / adaption information.

NTr  )
r  r   r   r   r  r  r   r  r  r  )r   rY   r  r   s       r   rW  1ORMSelectCompileState._create_entities_collection|  st     {{3#%'"!%!?!?"
 	%%$$dnn$ 	& 	
 r   c                2    UR                   n[        US 5      $ r   )r&  _determine_last_joined_entity)r   r   setup_joinss      r   determine_last_joined_entity2ORMSelectCompileState.determine_last_joined_entity  s    ,,,[$??r   c              #  t  #    UR                    H  nUR                  (       av  SUR                  ;   af  UR                  S   nUR                  (       d'  UR                  (       d  [        U/5       S h  vN   Mk  [        UR                  5       S h  vN   M  [        U/5       S h  vN   M     g  N> N! N7f)Nentity_namespace)r  is_selectable_annotations	is_mapperrE  r-   _all_column_expressions)r   r   r  enss       r   all_selected_columns*ORMSelectCompileState.all_selected_columns  s      --G%%&'*>*>>**+=>}}S-A-A0';;;01L1LMMM,gY777 . <M7s6   A1B83B24B8B4B8(B6)
B84B86B8c                    U R                  [        R                  R                  S UR                   5       5      5      $ )Nc              3     #    U  H?  nS UR                   ;  a  UR                  OUR                   S    R                  5       /v   MA     g7f)parententityN)rO  r  __clause_element__r  s     r   r   AORMSelectCompileState.get_columns_clause_froms.<locals>.<genexpr>  sW      *  6G &W-A-AA ))  ,,*,,.  6s   AA	)r  r  r  r  r  r#  s     r   get_columns_clause_froms.ORMSelectCompileState.get_columns_clause_froms  s<    ##OO)) *  )55* 
 	
r   c                   [         R                  " [        R                  UUS9n[	        UR
                  U5      nUR                  R                  UR                  UR                  UR                  UR                  S9  U$ )N)r  )r   r  r   r3  )r%   r  r'   ReturnsRowsRoler  r  r  updater   r  r   r3  )r   r   from_statementstmts       r   r_  $ORMSelectCompileState.from_statement  sw    "))!!"+
 Y33^D#11"+"A"A(;;&77	 	 	
 r   c                   U R                   nU R                  R                  (       d   e[        UR                  5      S:X  d   eU R                  UR                  S   5      nU(       a  U =R                  SS0-  sl        X l        gg) used only for legacy Query casesr   r   r   FN)r   r   r   r2  r  _get_select_from_alias_from_objr  )r   rY   rR  s      r   r%  ,ORMSelectCompileState._set_select_from_alias  sy     %%##33335??#q(((66uq7IJ  %:E$BB #*  r   c                   UnSUR                   ;   a  UR                   S   n[        US5      (       a3  UR                  (       d  [        R                  " S5      eUR
                  $ [        UR                  [        R                  R                  5      (       aC  U R                  5       nX"R                  L d   e[        [        R                  UR                  US9$ g)rc  rW  r-  zPA selectable (FromClause) instance is expected when the base alias is being set.rD  N)rO  hasattrrE  r  ArgumentError_adapterr>  r   r#   AliasedReturnsRows_all_equivsr   r   LEGACY_SELECT_FROM_ALIAS)r   from_objr  equivss       r   rd  5ORMSelectCompileState._get_select_from_alias_from_obj  s     T...$$^4D4""((**A 
 }}$)J)JKK%%'F??***&88"  r   c                4    U R                   S   R                  $ )z8return the Mapper associated with the first QueryEntity.r   )r   r-  r   s    r   r?  "ORMSelectCompileState._mapper_zero  s    ~~a '''r   c                    U R                    H$  nSUR                  ;   d  M  UR                  S   s  $    U R                   H"  nUR                  (       d  M  UR                  s  $    g)zReturn the 'entity' (mapper or AliasedClass) associated
with the first QueryEntity, or alternatively the 'select from'
entity if specified.rW  N)r  rO  r   entity_zero)r   r@  qents      r   _entity_zero"ORMSelectCompileState._entity_zero  s`    
 $$C!1!11''77 % NND''' # r   c                    U R                   U R                  /:w  a  [        R                  " SU-  5      eU R                  R                  $ )Nz4%s() can only be used against a single mapped class.)r   r   r  r:  rt  )r   methnames     r   _only_full_mapper_zero,ORMSelectCompileState._only_full_mapper_zero	  sK    >>d2233,,)+34  ##///r   c                    [        U R                  5      S:  a  [        R                  " U=(       d    S5      eU R	                  5       $ )Nr   z8This operation requires a Query against a single mapper.)r2  r   r  r:  rv  )r   	rationales     r   _only_entity_zero'ORMSelectCompileState._only_entity_zero  sD    t~~",, ++ 
   ""r   c                   0 nU R                   R                  5        HY  nU Vs/ s H  n[        U[        5      (       d  M  UPM     sn H(  nUR	                  UR
                  R                  5        M*     M[     U R                   Vs/ s H  n[        U[        5      (       d  M  UPM     sn H(  nUR	                  UR
                  R                  5        M*     U$ s  snf s  snf r   )r  valuesr>  r?  r^  r-  rJ  r   )r   ro  r
  r@  s       r   rl  !ORMSelectCompileState._all_equivs  s    !%!8!8!?!?!A -,Cc=1 ,
 cjj<<= "B  >>
)CZ]-KC>
C MM#**889
 
s   CCC!%C!c           	        U R                   (       as  U R                    Vs/ s H:  n[        U[        R                  R                  5      (       a  UR
                  OUPM<     nn[        R                  " U R                  U5      nO/ nS nU R                  " U R                  U Vs/ s H  oDU R                  ;  d  M  UPM     sn-   U R                  U R                  U R                  U R                  U R                   4U R                  U R                   R"                  U R                   R$                  U R&                  U R(                  S.U R*                  D6nUR-                  5       nU R/                  5       n[1        [2        R4                  XVS9U l        [8        R:                  " U/U R<                  -   6 nU R                  Ul        U R                  b(  U R                  R@                  c  U R                  Ul        UnU RB                  RE                  5        H$  n	[        RF                  " XU	RH                  5      nM&     URJ                  RM                  Xx5        U(       a6  UR                   RL                  " U/U R6                  RO                  U5      Q76   UR                   RL                  " U/U RP                  Q76   U$ s  snf s  snf )N
for_updatehintsstatement_hintsr5  r7  rg  ))r  r>  r#   elements_label_referencer  rg   expand_column_list_from_order_byr   _select_statementr  r  r(  r*  r  r  r   _hints_statement_hintsr5  r7  _select_argsaliasrl  r   r   COMPOUND_EAGER_STATEMENTr  r!   r  r   r  ofr  r  splice_joinsstop_onselect_fromnon_generativer/  r  )
r   elemunwrapped_order_byorder_by_col_exprrt  innerro  r   from_clause
eager_joins
             r   r=  /ORMSelectCompileState._compound_eager_statement+  s   
 == !MM" *D "$(E(EFF LL *  " !) I I$$&8! !#!% &&  +L+Q8K8K/Kq+LM  !!MM
 ++''.. 11BBnn!22
 
  !!#&944e'
# MMg...
	 "&!1!1	   ,$$''/(,(<(<I%**113J #//););K	 4 	,,YD--,,==& 	)))Jd6I6IJ["( Ms   AK$K
;K
c           	     >   U R                   " U R                  U R                  -   [        U R                  5      [        U R
                  R                  5       5      -   U R                  U R                  U R                  U R                  4U R                  U R                  R                  U R                  R                  U R                  U R                   S.U R"                  D6nU R$                  (       a'  UR                  R&                  " U/U R$                  Q76   U$ )Nr  )r  r   r   r   r  r  r  r(  r*  r  r  r  r   r  r  r5  r7  r  r  r  )r   r   s     r   r>  'ORMSelectCompileState._simple_statement  s    **  4#9#99$##$uT-=-=-D-D-F'GG  !!MM
 ++''.. 11BBnn!22
 
	 --iN$:M:MNr   c                   [         R                  " UUUS9nU(       a  UUl        U(       a  UUl        U(       a  U=R                  [        U5      -  sl        U(       a  UR                  R                  " U/UQ76   O"U(       a  UR                  R                  U5        U(       a  U=R                  [        U5      -  sl        UUl	        UUl
        UUl        UUl        UUl        UUl        U(       a  UUl        U(       a  UUl        UUl        U(       a  UUl        U	(       a  U	Ul        U
(       a  UR(                  R                  " U/U
Q76   Ub  UR*                  R                  " U/UQ76   U$ )N)r  r  r  )r:   _create_raw_selectr(  r*  r)  r   r3  r  r+  _limit_clause_offset_clause_fetch_clause_fetch_clause_options_independent_ctes_independent_ctes_opts	_prefixes	_suffixesr  r  r  r5  r7  )r   raw_columnsrn  where_criteriahaving_criteriar  r  r  r  r  r5  r7  limit_clauseoffset_clausefetch_clausefetch_clause_optionsr3  r1  prefixessuffixesr-  independent_ctesindependent_ctes_optsr   s                           r   r  'ORMSelectCompileState._select_statement  sE   2 --$$
	 (6I%)8I&''5?:'--iF+F--i8''5?:'".	#0	 ".	*>	'&6	#+@	("*I"*I$.	!$I)8I&..yE9E'&&55, r   c                   SUR                   ;   aC  UR                   S   nU R                  R                  US 5      nU(       a  UR                  U5      $ [	        U[
        R                  5      (       a  UnO[        US5      (       a  UR                  nOg U R                  R                  US 5      nU(       a  UR                  U5      $ g )NrW  r  )	rO  r   r   adapt_clauser>  r&   
FromClauserh  r  )r   r  searchr  s       r   _adapt_polymorphic_element0ORMSelectCompileState._adapt_polymorphic_element  s    W111)).9F..2264@E))'22gz4455FWg&&]]F**..vt<%%g.. r   c                P    U(       a  U Vs/ s H  o2" US5      PM     sn$ U$ s  snf )NTrs   )r   r  r  os       r   r  %ORMSelectCompileState._adapt_col_list  s+    6:;dOAt,d;;K <s   #c                   ^ / mU R                   (       a'  TR                  SU R                   R                  45        U R                  (       a  TR                  SU R                  45        T(       d  g U4S jnU$ )NTFc                @   > U4S jn[         R                  " U 0 U5      $ )Nc                   > SU R                   ;   =(       d    SU R                   ;   nT H$  u  p#U(       d	  U(       d  M  U" U 5      nUc  M"  Us  $    g )N
_orm_adaptrW  )rO  )r  is_orm_adaptalways_adaptrR  eadapterss        r   replaceRORMSelectCompileState._get_current_adapter.<locals>._adapt_clause.<locals>.replace   sR     D$5$55 ;%):)::  .6)L#||#DM=#$H	 .6r   )r(   replacement_traverse)r+  ri  r  r  s      r   _adapt_clauseAORMSelectCompileState._get_current_adapter.<locals>._adapt_clause  s    	% 00WEEr   )r  r  r  r   r  )r   r  r  s     @r   r  *ORMSelectCompileState._get_current_adapter  sl     OO((00 %%OOUD$C$CDE	F" r   c           
     B   U GH  u  p4pVUS   nUS   n[        U5      nUb  [        U5      n[        U[        R                  5      (       a  Ub  [        R
                  " S5      eUnS nOSUR                  ;   a  UR                  S   nUc8  UR                  (       d'  [        US5      (       d  [        R                  " S5      e[        U[        R                  5      (       a  [        USS 5      n	Uc#  U	(       a  U	nOUR                  n UR                  nUR                  nUR                  n[        U[        R                   5      (       d  UnXUR"                  4U R$                  ;   a  GMk  Ub[  X[LaW  UR                  R'                  SS 5      ULa8  [        R
                  " S	UR                  R'                  SU5      < S
U< 35      eOUb  S nUnOS =pU R)                  UUUUUUU5        GM     g ! [         a  n
[        R                  " SU-  5      U
eS n
A
ff = f)NisouterfullzUNo 'on clause' argument may be passed when joining to a relationship path as a targetrW  r-  z9Expected mapped entity or selectable/table as join target_of_typez0Join target %s does not refer to a mapped entityzexplicit from clause z4 does not match left side of relationship attribute )r"   r>  r   PropComparatorr  r:  rO  rN  rh  ri  r  r[  r  AttributeError_parententityr   QueryableAttributer  _already_joined_edgesr   _join_left_to_right)r   argsentities_collectionrightonclausefrom_flagsr  r  of_typeerrleftrw  s                r   r'  ORMSelectCompileState._join/  s<   -1)EUI&G=DENE#"8,%!:!:;;' 44= 
 !5#5#55**>:**75(3K3K ..: 
 (J$=$=>> "(J== ' ( 1 1'$)LLE  --((!(J,I,IJJ#H *d.H.HH$)!..22>4H#$ %88 !& 2 2 6 6~u M (	  " #" $$#e .2R  . '"("6"6!027!8# $'''s   
G55
H?HHc           
     T   Uc  Ub   eU R                  XX45      u  nnn	OU R                  X5      u  nn	X#L a  [        R                  " SU< SU< S35      eU R	                  X#XE5      u  pnU
R
                  (       d  U R                  U
5      nOSnUbG  U R                  U   nU R                  SU [        UUUUUUS9/-   U R                  US-   S -   U l        gU	b(  [        X   [        5      (       d   eX   R                  nOUnU R                  [        UU
UUUUS9/-   U l        g)zgiven raw "left", "right", "onclause" parameters consumed from
a particular key within _join(), add a real ORMJoin object to
our _from_obj list (or augment an existing one)

NzCan't construct a join from z to z, they are the same entityrs   )r  r  _extra_criteriar   )"_join_determine_implicit_left_side_join_place_explicit_left_sider  r:   _join_check_and_adapt_right_siderN  _get_extra_criteriar  r   r>  r?  r   )r   r  r  r  r  rw  	outerjoinr  replace_from_obj_indexuse_entity_indexr_infoextra_criterialeft_clauses                r   r  )ORMSelectCompileState._join_left_to_right  s     < <<
 77#5	&  334GN&  =,,)-u6  #'"G"G#
x ##!55f=NN!- ++,BCK !!"9#9:#  )!(6	
 ##$:Q$>$@AB    + "'9=    2CNN" $ 1 1%$2	5 	!Dr   c                   [        U5      nS=pgU R                  (       a  [        R                  " U R                  UR                  U5      n[        U5      S:X  a  US   nU R                  U   nGOb[        U5      S:  a  [        R                  " S5      e[        R                  " SU< S35      eU(       Ga  0 n	[        U5       H]  u  pUR                  nUc  M  [        U5      nXL a  M'  [        U[        5      (       a  X4XR                  '   MM  SU4XR                  '   M_     [        U	R                  5       5      n[        R                  " XR                  U5      n[        U5      S:X  a  XUS         u  prOV[        U5      S:  a  [        R                  " S5      e[        R                  " SU< S35      e[        R                  " S5      eX&U4$ )zWhen join conditions don't express the left side explicitly,
determine if an existing FROM or entity in this query
can serve as the left hand side.

Nr   r   a  Can't determine which FROM clause to join from, there are multiple FROMS which can join to this entity. Please use the .select_from() method to establish an explicit left side, as well as providing an explicit ON clause if not present already to help resolve the ambiguity.zDon't know how to join to z. Please use the .select_from() method to establish an explicit left side, as well as providing an explicit ON clause if not present already to help resolve the ambiguity.zgNo entities to join from; please use select_from() to establish the left entity/selectable of this join)r"   r  rg  find_left_clause_to_join_fromr   r2  r  r:  	enumerateentity_zero_or_selectabler>  r?  r;  keys)r   r  r  r  r  r  r  r  indexes	potentialentity_indexr@  r  ent_infoall_clausess                  r   r  8ORMSelectCompileState._join_determine_implicit_left_side  s   & 488 <<!!6#4#4hG 7|q )0&(()?@W!005  00
 9>	@  ! I%./B%C!66>"6?%
 c=111=0FInn-6:F^I112 &D  y~~/0K<<..G 7|q )2wqz3J)K& $W!005  00
 9>	@  ,,1  -===r   c                   S=p4[        U5      nU R                  (       a\  [        R                  " U R                  UR                  5      n[        U5      S:  a  [        R                  " S5      eU(       a  US   nUc_  U(       aX  [        US5      (       aG  [        U5       H8  u  px[        U[        5      (       d  M  UR                  U5      (       d  M4  Un  X44$    X44$ )zWhen join conditions express a left side explicitly, determine
where in our existing list of FROM clauses we should join towards,
or if we need to make a new join, and if so is it from one of our
existing entities.

Nr   zrCan't identify which entity in which to assign the left side of this join.   Please use a more specific ON clause.r   r-  )r"   r  rg  #find_left_clause_that_matches_givenr   r2  r  r:  rh  r  r>  r?  corresponds_to)	r   r  r  r  r  l_infor  idxr@  s	            r   r  4ORMSelectCompileState._join_place_explicit_left_sideY  s    2 598BB!!6#4#4G 7|a00!  )0& #*#))%&9: c=11c6H6H6N6N'*$%77 ; &77r   c           
        [        U5      n[        U5      nSn[        USS5      nU(       a  UR                  (       d)  [        UR                  [
        R                  5      (       ax  U R                  =(       d    UR                  / HT  n	[        R                  " UR                  U	5      (       d  M+  [        R                  " XR                  5      (       d  MR  Sn  O   U(       a<  UR                  UR                  L a#  [        R                  " SUR                  -  5      e[        USS5      UR                  [        USS5      pnU(       aE  U(       a>  UR                  UR                  5      (       d  [        R                  " SU< SU< 35      e[        US5      (       a  U =R                   U4-  sl        SnUR"                  (       Ga  U(       a  UR                  nU
R$                  (       a  U R'                  5       nUb	  U" US5      nOU(       a  U
R)                  UR                  5      (       d=  [        R                  " S	U
R*                  < S
UR                  R*                  < S35      e[        U
[
        R,                  5      (       a'  [.        R0                  " [2        R4                  U
5      n
Sn[7        X5      n[8        R:                  " SU-  SSS9  U=(       a    U(       + =(       a    UnU(       d+  U(       a$  [7        USS9nSn[8        R<                  " SU-  SS9  U(       aG  U(       d   e[?        [@        RB                  [        U5      URD                  S9nU RG                  X5        OgUR"                  (       dV  U(       dO  URH                  (       a>  U RG                  U[?        [@        RJ                  UUR                  URD                  S95        [        U[
        RL                  5      (       a   U R'                  5       nU(       a	  U" US5      nU(       a"  U =RN                  XURP                  44-  sl'        [        U5      X#4$ )ztransform the "right" side of the join as well as the onclause
according to polymorphic mapping translations, aliasing on the query
or on the join, special cases where the right and left side have
overlapping tables.

Fr-  NTz*Can't join table/selectable '%s' to itselfrE  zJoin target z9 does not correspond to the right side of join condition zSelectable 'z' is not derived from ''zAn alias is being generated automatically against joined entity %s for raw clauseelement, which is deprecated and will be removed in a later release. Use the aliased() construct explicitly, see the linked example.z1.4xaj1)code)flatzAn alias is being generated automatically against joined entity %s due to overlapping tables.  This is a legacy pattern which may be deprecated in a later release.  Use the aliased(<entity>, flat=True) construct explicitly, see the linked example.xaj2rg  )r   rD  ))r"   r  with_polymorphicr>  rF  r&   Joinr  r   rg  selectables_overlapr  r:  common_parentr-  rh  r$  is_clause_element_is_lateralr  is_derived_fromdescriptionrP   r%   r  r'   FromClauseRoler   r$   warn_deprecatedwarnr   r    DEPRECATED_JOIN_ADAPT_RIGHT_SIDErJ  rH  #_has_aliased_polymorphic_fromclause#WITH_POLYMORPHIC_ADAPTER_RIGHT_JOINClauseElementr  r  )r   r  r  r  rw  r  r  overlapright_mapperrn  right_selectableright_is_aliasedneed_adapterr  aliased_entityrR  s                   r   r  6ORMSelectCompileState._join_check_and_adapt_right_side  s    vx6 )),99:??KK --D&2C2C1DD//%%x 22//  #G E v((F,=,==,,<##$  FHd+F.6 )9  ..t{{;;,,9>J  68$$F9, ####{{++ #'";";"=". ,E48E (77 33  !44 -88(;;GG  .
0E0EFF'0'7'7,,.>($ $(L %\D$$D
 ## 	 &J.>*>J7 !T2ELII@
 COO    < @@(<<G 33LJ(($@@ 33#GG +66 , @ @	 h
 8 899"779O*8T: &&D+B*DD&u~u..r   c                   U R                   R                  U R                   R                  U R                  U R                  U R                   R
                  U R                   R                  U R                  =(       d    S U R                   R                  U R                   R                  U R                   R                  U R                   R                  S.$ )N)r  r  r3  r1  r  r  r-  r  r  r  r  )r   r  r  r3  r1  r  r  r-  r  r  r  r  r   s    r   r  "ORMSelectCompileState._select_argsX	  s     !11??!22AA++--77--77- 11??%%;; $ 5 5 G G%%<<
 	
r   c                
   U R                   nUR                  S5      S L=(       d^    UR                  S5      S L=(       dD    UR                  SS5      =(       d+    UR                  SS5      =(       d    UR                  SS5      $ )Nr  r  r3  Fr1  rs   r-  )r  r   )r   kwargss     r   r<  -ORMSelectCompileState._should_nest_selectablel	  sv    ""JJ~&d2 -zz/*$6-zz*e,- zz-,- zz*e,	
r   c                   ^ ^ STR                   4T R                  ;   a/  [        UU 4S jT R                  STR                   4    5       5      $ g)Nadditional_entity_criteriac              3     >#    U  HP  nUR                   (       d  UR                  TL d  M%  UR                  T5      (       d  M=  UR                  T5      v   MR     g 7fr   )include_aliasesr  _should_include_resolve_where_criteria)r   aerK  r   s     r   r   <ORMSelectCompileState._get_extra_criteria.<locals>.<genexpr>|	  sW      B &&"))x*?	 5
 &&t, 5**844s   $AAArs   )r-  r   r   )r   rK  s   ``r   r  )ORMSelectCompileState._get_extra_criteriaw	  sZ    (OO
 ##$  0018??C   r   c                T   U R                    H  nUR                  R                  SS5      nU(       d  M(  UR                  R                  c  SUR                  4U R
                  ;   d  M]  X R                  ;  d  Mn  UUR                  (       a  UR                  OS4U R                  U'   M     [        U R                  R                  5       5      nU H  u  p$X R                  ;   a  M  UR                  R                  nU R                  R                  (       a  / nOU R                  U5      nUb  Xe4-  nU R                  5       nU HZ  nU(       a  UR!                  U5      nU(       a"  ["        R$                  " USS05      nU" US5      nU =R&                  U4-  sl        M\     M     g)a  Apply extra criteria filtering.

For all distinct single-table-inheritance mappers represented in
the columns clause of this query, as well as the "select from entity",
add criterion to the WHERE
clause of the given QueryContext such that only the appropriate
subtypes are selected from the total results.

Additionally, add WHERE criteria originating from LoaderCriteriaOptions
associated with the global context.

rW  Nr   r  TF)r  rO  r   r-  _single_table_criterionr   r  rE  rj  r  r  r$  r   r   r  r  traverserg  _deep_annotater(  )	r   
fromclauserK  r  rR  single_critr   r  r  s	            r   r9  0ORMSelectCompileState._adjust_for_extra_criteria	  sv    ++J!..22>4HH OO;;G4hooF--. $@$@@ )1)B)BH%%:,,X6 ," T1188:;!'H..."//AAK##66-/*-1-E-Eh-O*&*n<*"779O2"++D1D"#224,9MND*47D$$/$ 3 "(r   )!r   r  r  r  r*  r$  r   r  r   r   r(  r   r  r5  r7  re   r  r  r3  r1  r  r  r  r   r  r-  r  r  r   r   r   r   r   )
r   r  r   r   r   rY  r   r   r   r  r   )2rt   ru   rv   rw   r  r   r  r  rZ  r  r  r  r  r5  r7  r(  r*  r   r	  r  r	  rW  rJ  rS  rZ  r_  r%  rd  r?  rv  rz  r~  rl  r=  r>  r  r  r  r  r'  r  r  r  r  r[  r  r<  r  r9  r   rs   r   r   r  r  -  s   $O #!IO`/` 	`
 (` ` 
` `D
5KZ  2 @ @
 8 8 
 
   "+8(0#"Yv(KZ/$.`[zaFh>T@8D{/z 
 
& 
 
 70r   r  c                x   Uc  [         R                  XS9nUnUR                   Vs/ s H  oDUR                  4PM     sn VVs/ s Ha  u  pVUR                  UR
                  [        USS5      UR                  UR                  b  UR                  (       d  [        USS 5      OS S.PMc     nnnU$ s  snf s  snnf )N)r  rE  Fr  )r  typealiasedexprr  )	r  rW  r   rt  _label_namer0  r  r2  r  )query_or_select_stmtrX   r  r4  _entr@  insp_entds           r   r"  r"  	  s    
 -II  J 
 C 25
1>4##$
	
MC OOHHx);UCHH ??. 22 (D1 	

  	" H	
	s   B1A(B6c                    U nUR                   (       a  UR                  nUb  U$ UR                  (       a9  SUR                  S   R                  ;   a  UR                  S   R                  S   $ [	        U5      $ )NrW  r   )r&  _last_joined_entityr  rO  _entity_from_pre_ent_zero)query_or_augmented_selectr   r9  s      r   _legacy_filter_by_entity_zeror<  	  sl     %D"66*&&~~.DNN1,=,J,JJ~~a --n==$T**r   c                
   U nUR                   (       d  g UR                   S   nSUR                  ;   a  UR                  S   $ [        U[        5      (       a  UR                  $ SUR                  ;   a  UR                  S   $ U$ )Nr   rW  bundle)r  rO  r>  r   r  )r;  r   r@  s      r   r:  r:  	  s     %D


A
C)))//	C-	.	.zz	S%%	%))
r   c                |    U (       d  g U S   u  p#pE[        U[        R                  5      (       a  UR                  $ U$ )N)r>  r   r  r  )rI  rt  targetr  r  r  s         r   rH  rH  
  sB     '22$Vu%%  }}r   c                      \ rS rSr% SrSrS\S'   SrSrSr	S\S'   S	\S
'   S\S'   S\S'   SS jr
      SS jrS r\S 5       rSrg)r  i
  z:represent an entity column returned within a Query result.rs   r   supports_single_entityFzOptional[str]r3  z!Union[Type[Any], TypeEngine[Any]]r0  z.Union[_InternalEntityType, ColumnElement[Any]]r2  zOptional[_InternalEntityType]rt  c                    [        5       er   r   r   rX   s     r   r   _QueryEntity.setup_compile_state#
  r  r   c                    [        5       er   r   r   rX   rR  s      r   r  ._QueryEntity.setup_dml_returning_compile_state&
  s    
 "##r   c                    [        5       er   r   )r   r7  r   s      r   row_processor_QueryEntity.row_processor-
  r  r   c                   [        U5       GH`  u  pVUR                  (       a=  UR                  (       a   U R                  UUR                  UU5        MH  UR                  nUR
                  (       a  UR                  (       aE  SUR                  ;   a  [        UUUU5        M  [        R                  UUR                  UUU5        M  UR                  R                  SS5      (       a  [        UUUU5        M  UR                  (       a&  [        R                  UUR                  UUU5        GM#  [        R                  UU/UUU5        GM@  UR                  (       d  GMT  [        XU5        GMc     U$ )NrW  r>  F)r  _is_lambda_element_is_sequencer  	_resolvedr  rN  rO  r?  _ColumnEntity_for_columns_select_iterabler   _BundleEntity_is_clause_list	is_bundle)r   rX   r  r  r  r  r  s          r   r  _QueryEntity.to_compile_state0
  sS    %X.KC((&&((%((++	 #--F''''%)<)<<%)"//	 &22)"33// **..x??%)"//	  // &22)"33// &22)#H// !!!m5HIs /v #"r   N)rX   ro   r   NonerX   ro   rR  z Optional[_DMLReturningColFilter]r   rX  )rt   ru   rv   rw   r   r   r   _non_hashable_value_null_column_typeuse_id_for_hashr  r  rK  r   r  r   rs   r   r   r  r  
  sx    DI  O
++
88..$$&$ 2$ 
	$$ ># >#r   r  c                      \ rS rSr% SrSrS\S'   S\S'   S\S'   S	\S
'   S\S'   S\S'   S rSrSr	Sr
\S 5       r\S 5       rS rS rS r      SS jrS rSrg)r?  ir
  z mapper/class/AliasedClass entity)
r2  r-  rt  rE  path_extra_entitiesr3  rP  r   _polymorphic_discriminatorr?   r2  zMapper[Any]r-  rt  r   rE  r   r^  strr3  c                   UR                  U 5        U(       a!  UR                  c  Xl        SUl        SUl        UR                  S   nUR
                    U=oPl        UR                  nX l        UR                  =U l	        nU R                  4U l
        UR                  (       a  UR                  U l        OUR                  R                  U l        UR                  U l        UR                   U l        UR$                  U l        UR&                  U l        UR*                  U l        UR.                  (       a  UR1                  XPR$                  5        g g )NTrW  )r  r   rZ  r  rO  _post_inspectrt  r  r2  r-  r_  rE  r  r3  class_rt   r   r^  r   with_polymorphic_mappersrP  polymorphic_onr`   _should_select_with_poly_adapterrM  )r   rX   r  r  r  rK  r-  s          r   r   _MapperEntity.__init__
  s    	""4(,,404-15M..2M+$$^4&,,#	'.f $		|$$'}}D%}}55D ( 9 9++	"--)1)J)J&*2*A*A'22::// 3r   Tc                .    U R                   R                  $ r   )r-  rd  r   s    r   r0  _MapperEntity.type
  s    {{!!!r   c                    U R                   $ r   )rt  r   s    r   r  '_MapperEntity.entity_zero_or_selectable
  s    r   c                .    [        U R                  U5      $ r   )r   rt  r   r  s     r   r  _MapperEntity.corresponds_to
  s    %d&6&6??r   c                T   S nU R                   (       d8  UR                  (       a&  UR                  R                  U R                  S 5      nOU R                  R
                  nU(       a3  UR                  (       a  UR                  UR                  5      nU$ Un U$ UR                  nU$ r   )rE  r   r   r-  rt  rj  r  wrap)r   rX   rR  rets       r   _get_entity_clauses!_MapperEntity._get_entity_clauses
  s    $$22'==AAKK &&//G,,ll=#@#@A 
	  
  //C
r   c                   UR                   nU R                  U5      nUR                  (       a#  U(       a  UR                  UR                  5      nOU(       d  UR                  nUR                  U L a#  UR
                  R                  nUR                  nOS =pV[        R                  " U U R                  UUU R                  UUUU R                  S9	nXpR                  U R                  4$ )N)only_load_propsrd   polymorphic_discriminator)rX   rs  r  rq  r   r   r   rd   r   _instance_processorr-  r^  r`  r3  r_  )r   r7  r   rX   rR  rv  rd   	_instances           r   rK  _MapperEntity.row_processor
  s    --**=9//Gll=#G#GHG#::G((D0+;;LLO#11M.22O//KKII+'&*&E&E

	 **D,@,@@@r   c                    [         R                  " UU R                  U U R                  UUR                  U R
                  UR                  R                  U R                  S9	  g )Nr  rv  rw  )	r   _setup_entity_queryr-  r^  r   rP  r   r   r`  rH  s      r   r  /_MapperEntity.setup_dml_returning_compile_state
  sS    
 	##KKII))!;;)99JJ&*&E&E
	
r   c                   U R                  U5      nU R                  R                  nUc  SU R                  4UR                  ;   a:  U R                  nUUR
                  (       a  UR                  OS 4UR                  U'   [        R                  " UU R                  U U R                  UUR                  U R                  UR                  R                  U R                  S9	  UR                   R#                  U R$                  5        g )Nr   r|  )rs  r-  r)  r   rt  rE  rj  r  r   r}  r^  r   rP  r   r   r`  r  r  r   )r   rX   rR  single_table_critrK  s        r   r  !_MapperEntity.setup_compile_state  s    **=9 KK??),dkk:../ ''H%-%>%>!!D?M11(;
 	##KKII))!;;)99JJ&*&E&E
	
 	,,33DOODr   )
r_  r3  r`  rP  rt  r2  rE  r-  r^  r   NrY  )rt   ru   rv   rw   r   r   r   r   rC  rZ  r\  r[  r0  r  r  rs  rK  r  r  r   rs   r   r   r?  r?  r
  s    *I $$
#J "O" "    @*A:
&
 2
 
	
"Er   r?  c                      \ rS rSr% SrSrS\S'   S\S'   S\S	'   S
\S'   S\S'   S\S'     SS jr\S 5       r	\S 5       r
S r\S 5       rS r      SS jrS rSrg)rT  i  rs   )r>  r2  r0  r3  r   rC  r   r   r   r>  z	Type[Any]r0  ra  r3  r   rC  r2  Nc           
        SUl         UR                  S   nU(       a  UR                  R                  U 5        OUR                  U 5        [	        U[
        R                  [        R                  45      (       a  UR                  5       nOUnU=U l
        U l        [        U5      U l        UR                  U l        / U l        U(       ao  UR                   H_  nSUR                  ;   a  [!        UUUUU S9  M"  [	        U["        5      (       a  [!        UUUUU S9  MF  [$        R'                  UU/US UU S9  Ma     U R                  R(                  U l        g )NTr>  parent_bundle)r  rO  r   r  r>  r   r  r   r  rX  r>  r2  r0  r  r3  exprsrT  r   _ORMColumnEntityrR  single_entityrC  )r   rX   r2  r  r  setup_entitiesr  r>  s           r   r   _BundleEntity.__init__1  s>    +/'  *##**40&&t,:00*2K2KL
 
 ,,.FF"((diL	!;;t000!%++&*  f--!%++&* %11%++&* 2 % %6 '+kk&?&?#r   c                :    U R                   nUb  UR                  $ g r   )rt  r-  )r   rC  s     r   r-  _BundleEntity.mapperl  s       <<r   c                P    U R                    H  nUR                  nUc  M  Us  $    g r   )r   rt  r   r@  rC  s      r   rt  _BundleEntity.entity_zerot  s)    >>COOE  "
 r   c                    gr  rs   rn  s     r   r  _BundleEntity.corresponds_to}  s     r   c                P    U R                    H  nUR                  nUc  M  Us  $    g r   )r   r  r  s      r   r  '_BundleEntity.entity_zero_or_selectable  s+    >>C11E  "
 r   c                L    U R                    H  nUR                  U5        M     g r   )r   r  )r   rX   r@  s      r   r  !_BundleEntity.setup_compile_state  s    >>C##M2 "r   c                $    U R                  U5      $ r   r  rH  s      r   r  /_BundleEntity.setup_dml_returning_compile_state      
 ''66r   c           	         [        U R                   Vs/ s H  o3R                  X5      PM     sn6 u  pEnU R                  R	                  UR
                  XE5      nXpR                  U R                  4$ s  snf r   )r   r   rK  r>  create_row_processorrY   r3  r_  )r   r7  r   r@  procslabelsextraprocs           r   rK  _BundleEntity.row_processor  si    "<@NNKNS0NK 
u {{//uM%%t';';;; Ls   A3)r   r3  r>  r2  rC  r0  r  rY  )rt   ru   rv   rw   r_  r   r   r   r[  r-  rt  r  r  r  r  rK  r   rs   r   r   rT  rT    s    OI "!N
O  
L 9@v    
  37&7 27 
	7<r   rT  c                  d    \ rS rSrSr\ S
S j5       r\S 5       r\S 5       r	\S 5       r
S rS	rg)rQ  i  )_fetch_column_row_processorraw_column_indextranslate_raw_columnNc                   U Hy  nUR                   nSU;   a  US   n	O[        R                  " US5      n	U	(       a2  SUR                   ;   a  [        UUUU	UUUS9  MZ  [	        UUUU	UUUS9  Mk  [        UUUUUUS9  M{     g )NrW  rj   r  )rO  rg  extract_first_column_annotation_IdentityTokenEntityr  _RawColumnEntity)
r   rX   r^  r  r  r  r  columnr   _entitys
             r   rR  _ColumnEntity._for_columns  s     F --K,%n5"BBN #v':'::(%+(+&3 %%+(+&3 !!'$'"/? r   c                .    U R                   R                  $ r   )r  r0  r   s    r   r0  _ColumnEntity.type  s    {{r   c                L    U R                   R                  R                  (       + $ r   )r  r0  hashabler   s    r   rZ  !_ColumnEntity._non_hashable_value  s    ;;##,,,,r   c                B    U R                   R                  R                  $ r   )r  r0  _isnullr   s    r   r[  _ColumnEntity._null_column_type  s    {{'''r   c                   UR                   nU R                  bK  U R                  u  pEnU R                  (       a'  UUR                  R                  U R
                     4-  nXEU4$ U R                  b  U R                  nOWU R                  nUR                  (       a  UR                  R                  U   nUR                  (       a  UR                  5       nUR                  (       a  UR                  R                  U   nUR                  U5      nX@R                  U R                  4nXl        U R                  (       a?  U R                  UR                  R                  U R
                     4-   nX@R                  U4$ U$ r   )rX   r  r  rY   r  r  r  r  r  r^  rO  _deannotater  _getterr3  r_  )	r   r7  r   rX   getter
label_nameextra_entitiesr  rr  s	            r   rK  _ColumnEntity.row_processor  s]   -- *151D1D.F((MM..t/D/DE#  ~55 )''F [[F ,,&66>>vF""  ++-//"99AA&IF'&&(<(<<!$$!11**4+@+@A5 N ++^;;Jr   )r  r   )rt   ru   rv   rw   r   r   rR  r[  r0  rZ  r[  rK  r   rs   r   r   rQ  rQ    sd    I  / /b     - - ( (0r   rQ  c                  R    \ rS rSrSrSrSrSr S
S jrS r	      SS jr
S rS	rg)r  i  NF)r2  r  r3  r  r_  c                \   X l         X@l        US LU l        UR                  (       a  U=R                  SS0-  sl        U(       a  UR
                  (       a  S U l        O/U(       a  UR                  U l        OUR                  U5      U l        U(       a  UR                  R                  U 5        OUR                  U 5        X l        U R                  R                  (       a  U R                  R                  S   OS U l        U R                   U R                  4U l        S =U l        U l        g )Nr   Tr   )r2  r  r  r   r   _is_text_clauser3  
_proxy_keyr   r   r  r  r  r  r_  r  r  )r   rX   r  r  r  r  r  s          r   r   _RawColumnEntity.__init__&  s     	 0$4D$@!??))j$-??)"f&<&<#D#)#4#4 #0#B#B6#J ##**40&&t,,0KK,E,EDKK%%a(4 	& !%		4;;7377T0r   c                    gr  rs   rn  s     r   r  _RawColumnEntity.corresponds_toJ  s    r   c                $    U R                  U5      $ r   r  rH  s      r   r  2_RawColumnEntity.setup_dml_returning_compile_stateM  r  r   c                4   UR                  5       nU(       a  U" U R                  S5      nUc  g OU R                  nUR                  (       a  UR                  5       nUR                  R                  U5        UR                  R                  U5        X0l        g r  )	r  r  rO  r  r  r  r   r  r  )r   rX   r  r  s       r   r  $_RawColumnEntity.setup_compile_stateT  s    '<<>$T[[%8F~  [[F '')F$$((0%%,,V4#r   )	r_  r  r3  r  r  r  r2  r  r  r   rY  )rt   ru   rv   rw   rt  r-  rC  r   r   r  r  r  r   rs   r   r   r  r    sO    KF"I "8H7&7 27 
	7$r   r  c                  N    \ rS rSrSrSrSr SS jrS r      SS jr	S	 r
S
rg)r  ig  zColumn/expression based entity.F)r2  r-  r  r3  r  rt  r_  Nc                   UR                   nUn	UR                  " SS 5      n
UR                  " SU	5      nU
(       a#  [        UR                  U
5      U l        SU l        OX l        US LU l        XPl        U(       a7  U(       a  U
(       a  U
OUR                  U l        OUR                  X*S9U l        OS U l        U	R                    U	=U l        =U l        nU	R                  =U l        nU(       a  UR                  R                  U 5        OUR                  U 5        SUl        X l        S =U l        U l        U R                  U R"                  4U l        UR*                  (       a  UR-                  XR.                  5        g g )N	proxy_keyproxy_ownerF)r  T)rO  r   r  r  r2  r  r  r  r3  r   rc  rt  r  r-  r   r  r  r  r  r  r_  rg  rM  r   )r   rX   r  r  rW  r  r  r  r   r  orm_keyr  rC  r-  s                 r   r   _ORMColumnEntity.__init__v  sW    )) //+t4!oomW= 2 2G<DI(-D% I(8(DD% 0.576;L;L #0#B#B $C $   $DDKKK49E&~~-f##**40&&t,*.'377T0 $		4;;722::'' 3r   c                    [        U5      (       a  XR                  L $ [        U R                  5      (       + =(       a    UR                  U R                  5      $ r   )r   rt  r  rn  s     r   r  _ORMColumnEntity.corresponds_to  sP    V$$----(    9&&t'7'789r   c                    U R                   =U l        nU(       a	  U" US5      nUb7  UR                  R                  U5        UR                  R                  U5        g g r  )r  r  r  r  r   r  )r   rX   rR  r  s       r   r  2_ORMColumnEntity.setup_dml_returning_compile_state  sW     '+kk1VVU+F((,,V4))008 r   c                T   UR                  5       nU(       a<  U" U R                  S5      nUc%  UR                  (       d   eU R                  U l        g OU R                  nU R                  nU R
                  R                  nUc  SU R
                  4UR                  ;   a.  UUR                  (       a  UR                  OS 4UR                  U'   UR                  (       a!  UR                  (       d  UR                  5       n[        U R                  R                  5      R!                  UR"                  R                  5      (       a%  UR$                  R'                  UR"                  5        UR(                  R+                  U5        UR,                  R'                  U5        X0l        g )NFr   )r  r  r   r  rt  r-  r)  r   rE  rj  r  rO  _expression_labelr  r  r  intersectionr   r  r  r  r  r   )r   rX   r  r  rC  r  s         r   r  $_ORMColumnEntity.setup_compile_state  sY   '<<>$T[[%8F~$5555%)[[" 
 [[F   KK??),dkk:../ "'"8"8d<M11%8
 v'?'? '')F t{{(()66**
 
 00778H8HI$$((0%%,,V4#r   )r_  r  r3  r  r  rt  r  r2  r-  r  r  r   rY  )rt   ru   rv   rw   r   rC  r   r   r  r  r  r   rs   r   r   r  r  g  sI    )"I$ AF99&9 29 
	9)$r   r  c                  $    \ rS rSrSrS rS rSrg)r  i  Fc                    g r   rs   rE  s     r   r  (_IdentityTokenEntity.setup_compile_state  s    r   c                @   ^ U4S jnX0R                   U R                  4$ )Nc                0   > TR                   R                  $ r   )r\   r}   )rowr7  s    r   r  2_IdentityTokenEntity.row_processor.<locals>.getter  s    ''777r   )r3  r_  )r   r7  r   r  s    `  r   rK  "_IdentityTokenEntity.row_processor  s!    	8 '')=)===r   rs   N)rt   ru   rv   rw   r  r  rK  r   rs   r   r   r  r    s     >r   r  r  )r4  z#Union[Query, Select, FromStatement]rX   zOptional[ORMSelectCompileState]r  r   r   zList[ORMColumnDescription])r;  zUnion[Query[Any], Select[Any]]r   "Optional[_InternalEntityType[Any]]r   )rI  zTuple[_SetupJoinsElement, ...]rt  r  r   z=Optional[Union[_InternalEntityType[Any], _JoinTargetElement]])
__future__r   r  typingr   r   r   r   r   r	   r
   r   r   r   r   r    r   r   r   baser   r   r   path_registryr   r$   r   r   r   r   r   r   r   r    r  r!   r"   r#   r%   r&   r'   rg  r(   sql._typingr)   r*   r+   r,   sql.baser-   r.   r/   r0   r1   r2   sql.dmlr3   sql.elementsr4   r5   sql.selectabler6   r7   r8   r9   r:   r;   r<   r=   sql.visitorsr>   _typingr?   r@   rA   r-  rB   rY   rC   r_   rD   rE   enginerF   engine.interfacesrG   rH   sql.compilerrI   rJ   rK   rL   rM   rN   rO   rP   sql.type_apirQ   rR   rootr   r  r   r  rU   r/  r   r   ro   r]  rq  r{  
plugin_forr  r  r  r  r"  r<  r:  rH  r  r?  rT  rQ  r  r  r  rs   r   r   <module>r     sO   #                  # , , ' (  !    %         "     * ( ( ' # ! !    ) % 0 : - ; # - ( - ,,3!' <4**,3936+)T""  " *@@ q. q.h ++'. 
i$l i$X*#: *Zf
- f
R	$$ $$N>'= >&)? 0 !!%)=>wD? wD ?wDtuPNJ0@0E uPp !!%):;	 "5	 <	 !!%2P0O[ P0 3P0j, 6:=2   	<+=+'+='* 7;/3 C$\# \#~iEL iEX<L <DvL vrK$} K$\R$} R$j
>+ 
>r   