
    +h                         d Z ddlmZmZ  G d de          Z G d d          Z G d d          Z G d	 d
          ZdS )z]
Useful auxiliary data structures for query construction. Not useful outside
the SQL domain.
    )INNERLOUTERc                       e Zd ZdZd ZdS )	MultiJoinz
    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                 "    || _         || _        d S N)levelnames_with_path)self	names_pospath_with_namess      g/var/www/html/e360mart/e360mart_env/lib/python3.11/site-packages/django/db/models/sql/datastructures.py__init__zMultiJoin.__init__   s    
.    N)__name__
__module____qualname____doc__r    r   r   r   r      s-         
/ / / / /r   r   c                       e Zd ZdS )EmptyN)r   r   r   r   r   r   r   r      s        Dr   r   c                   \    e Zd ZdZ	 ddZd Zd Zed             Zd Z	d Z
d	 Zd
 Zd ZdS )Joina  
    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                     || _         || _        || _        || _        |                                | _        || _        || _        || _        d S r   )	
table_nameparent_aliastable_alias	join_typeget_joining_columns	join_cols
join_fieldnullablefiltered_relation)r   r   r   r   r   r!   r"   r#   s           r   r   zJoin.__init__)   sS     %(&" $7799$ !2r   c                 v   g }g }|j         }|j        j        }| j        D ]S\  }}|                     || j                  d ||          d || j                  d ||                     T| j                            | j        | j                  }	|	rE|	                    |	          \  }
}|                    d|
z             |
                    |           | j        rL|	                    | j                  \  }
}|
r-|                    d|
z             |
                    |           |s2t          | j        d| j                  }t          d|j        z            d                    |          }| j        | j        k    rdn	d| j        z  }| j        d	 || j                  |d
|d}||fS )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_aliasops
quote_namer    appendr   r   r!   get_extra_restrictioncompileextendr#   getattr
ValueError	__class__joinr   r   )r   compiler
connectionjoin_conditionsparamsqnqn2lhs_colrhs_col
extra_cond	extra_sqlextra_paramsdeclared_fieldon_clause_sql	alias_strsqls                   r   as_sqlzJoin.as_sql;   s    -n' !% 	 	GW""4$%%%%G4#$$$$G	$     _::4;KTM^__
 	(&.&6&6z&B&B#I|""6I#5666MM,'''! 	,&.&6&6t7M&N&N#I| ,&&v	'9:::l+++ 	$T_gtOON9;I;ST    _55*do==BBEDL\D\	#'>>>22do3F3F3F			S`S`S`aF{r   c           	      d                        | j        | j                  }                     | j        | j                  }| j        7| j                                        }fd| j        j        D             |_        nd }|                     | j        ||| j        | j	        | j
        |          S )Nc                 <    g | ]}                     ||          S r   )get).0p
change_maps     r   
<listcomp>z(Join.relabeled_clone.<locals>.<listcomp>l   s'    %`%`%`qjnnQ&:&:%`%`%`r   )r#   )rH   r   r   r#   clonepathr4   r   r   r!   r"   )r   rK   new_parent_aliasnew_table_aliasr#   s    `   r   relabeled_clonezJoin.relabeled_cloneg   s    %>>$*;T=NOO$..)94;KLL!- $ 6 < < > >%`%`%`%`DDZD_%`%`%`"" $~~O-OT]>O  
 
 	
r   c                 B    | j         | j        | j        | j        | j        fS r   )r4   r   r   r!   r#   r   s    r   identityzJoin.identityt   s)     NOO"
 	
r   c                 Z    t          |t                    st          S | j        |j        k    S r   )
isinstancer   NotImplementedrT   r   others     r   __eq__zJoin.__eq__~   s)    %&& 	"!!}..r   c                 *    t          | j                  S r   hashrT   rS   s    r   __hash__zJoin.__hash__       DM"""r   c                 B    | j         d d         |j         d d         k    S )NrT   rX   s     r   equalszJoin.equals   s#    }SbS!U^CRC%888r   c                 H    |                      i           }t          |_        |S r   )rQ   r   r   r   news     r   demotezJoin.demote   s!    ""2&&
r   c                 H    |                      i           }t          |_        |S r   )rQ   r   r   re   s     r   promotezJoin.promote   s!    ""2&&
r   r   )r   r   r   r   r   rE   rQ   propertyrT   rZ   r^   rc   rg   ri   r   r   r   r   r      s         " :>3 3 3 3$* * *X
 
 
 
 
 X
/ / /
# # #9 9 9  
    r   r   c                   X    e Zd ZdZdZdZdZd Zd Zd Z	e
d             Zd Zd Zd	 ZdS )
	BaseTablez
    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                 "    || _         || _        d S r   )r   r   )r   r   aliass      r   r   zBaseTable.__init__   s    $ r   c                 |    | j         | j        k    rdn	d| j         z  }|                    | j                  }||z   g fS )Nr'   r(   )r   r   r+   )r   r6   r7   rC   base_sqls        r   rE   zBaseTable.as_sql   sG    *do==BBEDL\D\	33DODD)#R''r   c                 t    |                      | j        |                    | j        | j                            S r   )r4   r   rH   r   )r   rK   s     r   rQ   zBaseTable.relabeled_clone   s-    ~~doz~~d>NPTP`/a/abbbr   c                 *    | j         | j        | j        fS r   )r4   r   r   rS   s    r   rT   zBaseTable.identity   s    ~t0@@@r   c                 Z    t          |t                    st          S | j        |j        k    S r   )rV   rl   rW   rT   rX   s     r   rZ   zBaseTable.__eq__   s)    %++ 	"!!}..r   c                 *    t          | j                  S r   r\   rS   s    r   r^   zBaseTable.__hash__   r_   r   c                 "    | j         |j         k    S r   rb   rX   s     r   rc   zBaseTable.equals   s    }..r   )r   r   r   r   r   r   r#   r   rE   rQ   rj   rT   rZ   r^   rc   r   r   r   rl   rl      s          IL! ! !( ( (
c c c A A XA/ / /
# # #/ / / / /r   rl   N)	r   django.db.models.sql.constantsr   r   	Exceptionr   r   r   rl   r   r   r   <module>rx      s     9 8 8 8 8 8 8 8	/ 	/ 	/ 	/ 	/	 	/ 	/ 	/	 	 	 	 	 	 	 	z z z z z z z zz$/ $/ $/ $/ $/ $/ $/ $/ $/ $/r   