
    MȂiB                     v    S r SSKJr  SSKJrJr   " S S\5      r " S S5      r " S S	5      r	 " S
 S5      r
g)z]
Useful auxiliary data structures for query construction. Not useful outside
the SQL domain.
    )FullResultSet)INNERLOUTERc                       \ rS rSrSrS rSrg)	MultiJoin
   z
Used by join construction code to indicate the point at which a
multi-valued join was attempted (if the caller wants to treat that
exceptionally).
c                     Xl         X l        g Nlevelnames_with_path)self	names_pospath_with_namess      TD:\sksbv-state-backend\venv\Lib\site-packages\django/db/models/sql/datastructures.py__init__MultiJoin.__init__   s    
.    r   N)__name__
__module____qualname____firstlineno____doc__r   __static_attributes__ r   r   r   r   
   s    /r   r   c                       \ rS rSrSrg)Empty   r   N)r   r   r   r   r   r   r   r   r   r      s    r   r   c                   X    \ rS rSrSr SS jrS rS r\S 5       r	S r
S	 rS
 rS rSrg)Join   a  
Used by sql.Query and sql.SQLCompiler to generate JOIN clauses into the
FROM entry. For example, the SQL generated could be
    LEFT OUTER JOIN "sometable" T1
    ON ("othertable"."sometable_id" = "sometable"."id")

This class is primarily used in Query.alias_map. All entries in alias_map
must be Join compatible by providing the following attributes and methods:
    - table_name (string)
    - table_alias (possible alias for the table, can be None)
    - join_type (can be None for those entries that aren't joined from
      anything)
    - parent_alias (which table is this join's parent, can be None
      similarly to join_type)
    - as_sql()
    - relabeled_clone()
Nc                     Xl         X l        X0l        X@l        UR	                  5       U l        [        S U R
                   5       5      U l        XPl        X`l	        Xpl
        g )Nc              3   T   #    U H  u  pUR                   UR                   4v   M!     g 7fr
   )column).0	lhs_field	rhs_fields      r   	<genexpr> Join.__init__.<locals>.<genexpr>B   s+      
(8$	 y//0(8s   &()
table_nameparent_aliastable_alias	join_typeget_joining_fieldsjoin_fieldstuple	join_cols
join_fieldnullablefiltered_relation)r   r*   r+   r,   r-   r2   r3   r4   s           r   r   Join.__init__.   s^     %(&" &88: 
(,(8(8
 

 % !2r   c                 :   / n/ nUR                   nU R                   H|  u  pgUR                  R                  U R                  X`R
                  U5      u  pgUR                  U5      u  pX-  n
UR                  U5      u  pX-  nUR                  U
 SU 35        M~     U R                  R                  U R
                  U R                  5      nU(       a9  UR                  U5      u  nnUR                  SU-  5        UR                  U5        U R                  (       aD   UR                  U R                  5      u  nnUR                  SU-  5        UR                  U5        U(       d9  [        U R                  SU R                  5      n[        SUR                  -  5      eSR!                  U5      nU R
                  U R"                  :X  a  SOSU R
                  -  nU R$                  < SU" U R"                  5      < U< S	U< S
3nUU4$ ! [         a     Nf = f)z|
Generate the full
   LEFT OUTER JOIN sometable
   ON sometable.somecol = othertable.othercol, params
clause for this join.
z = z(%s)fieldzaJoin generated an empty ON clause. %s did not yield either joining columns or extra restrictions.z AND   %s z ON ())quote_name_unless_aliasr/   opsprepare_join_on_clauser+   r,   compileappendr2   get_extra_restrictionextendr4   r   getattr
ValueError	__class__joinr*   r-   )r   compiler
connectionjoin_conditionsparamsqnlhsrhslhs_sql
lhs_paramslhs_full_namerhs_sql
rhs_paramsrhs_full_name
extra_cond	extra_sqlextra_paramsdeclared_fieldon_clause_sql	alias_strsqls                        r   as_sqlJoin.as_sqlL   s    --((HC!~~<<!!3(8(8#HC #+"2"23"7G#0M"*"2"23"7G#0M""m_C#GH ) __::d//

 &.&6&6z&B#I|""6I#56MM,'!!,*2*:*:4;Q;Q*R'	<  &&v	'9:l+$T__gtON9;I;S;ST   _5""doo5BEDDTDT<T 	 NNt	
 F{- ! s   H 
HHc           
      j   UR                  U R                  U R                  5      nUR                  U R                  U R                  5      nU R                  b  U R                  R	                  U5      nOS nU R                  U R                  UUU R                  U R                  U R                  US9$ )N)r4   )
getr+   r,   r4   relabeled_clonerE   r*   r-   r2   r3   )r   
change_mapnew_parent_aliasnew_table_aliasr4   s        r   r_   Join.relabeled_clone   s    %>>$*;*;T=N=NO$..)9)94;K;KL!!- $ 6 6 F Fz R $~~OONNOOMM/  
 	
r   c                 t    U R                   U R                  U R                  U R                  U R                  4$ r
   )rE   r*   r+   r2   r4   r   s    r   identityJoin.identity   s5     NNOOOO""
 	
r   c                 j    [        U[        5      (       d  [        $ U R                  UR                  :H  $ r
   )
isinstancer    NotImplementedrf   r   others     r   __eq__Join.__eq__   s(    %&&!!}}..r   c                 ,    [        U R                  5      $ r
   hashrf   re   s    r   __hash__Join.__hash__       DMM""r   c                 >    U R                  0 5      n[        Ul        U$ r
   )r_   r   r-   r   news     r   demoteJoin.demote   s    ""2&
r   c                 >    U R                  0 5      n[        Ul        U$ r
   )r_   r   r-   rv   s     r   promoteJoin.promote   s    ""2&
r   )	r4   r1   r2   r/   r-   r3   r+   r,   r*   r
   )r   r   r   r   r   r   r[   r_   propertyrf   rm   rr   rx   r{   r   r   r   r   r    r       sD    4 3<7r
" 
 
/
#
r   r    c                   R    \ rS rSrSrSrSrSrS rS r	S r
\S 5       rS rS	 rS
rg)	BaseTable   z
The BaseTable class is used for base table references in FROM clause. For
example, the SQL "foo" in
    SELECT * FROM "foo" WHERE somecond
could be generated by this class.
Nc                     Xl         X l        g r
   )r*   r,   )r   r*   aliass      r   r   BaseTable.__init__   s    $ r   c                     U R                   U R                  :X  a  SOSU R                   -  nUR                  U R                  5      nXC-   / 4$ )Nr8   r9   )r,   r*   r<   )r   rG   rH   rY   base_sqls        r   r[   BaseTable.as_sql   sL    ""doo5BEDDTDT<T 	 33DOOD#R''r   c                     U R                  U R                  UR                  U R                  U R                  5      5      $ r
   )rE   r*   r^   r,   )r   r`   s     r   r_   BaseTable.relabeled_clone   s3    ~~OOZ^^D,<,<d>N>NO
 	
r   c                 H    U R                   U R                  U R                  4$ r
   )rE   r*   r,   re   s    r   rf   BaseTable.identity   s    ~~t0@0@@@r   c                 j    [        U[        5      (       d  [        $ U R                  UR                  :H  $ r
   )ri   r   rj   rf   rk   s     r   rm   BaseTable.__eq__   s(    %++!!}}..r   c                 ,    [        U R                  5      $ r
   rp   re   s    r   rr   BaseTable.__hash__   rt   r   )r,   r*   )r   r   r   r   r   r-   r+   r4   r   r[   r_   r}   rf   rm   rr   r   r   r   r   r   r      sH     IL!(

 A A/
#r   r   N)r   django.core.exceptionsr   django.db.models.sql.constantsr   r   	Exceptionr   r   r    r   r   r   r   <module>r      s?   
 1 8
/	 
/	 	U Up&# &#r   