
    af                        d Z ddlmZ  G d d          Z G d de          Z G d de          Z G d	 d
e          Z G d de          Z G d de          Z G d de          Z	 G d de          Z
 G d de          ZdS )z~
Helpers to manipulate deferred DDL statements that might need to be adjusted or
discarded within when executing a migration.
    )deepcopyc                   6    e Zd ZdZd Zd Zd Zd Zd Zd Z	dS )		Referencez0Base class that defines the reference interface.c                     dS )zU
        Return whether or not this instance references the specified table.
        F selftables     S/var/www/html/env/lib/python3.11/site-packages/django/db/backends/ddl_references.pyreferences_tablezReference.references_table   	     u    c                     dS )zV
        Return whether or not this instance references the specified column.
        Fr   r	   r
   columns      r   references_columnzReference.references_column   r   r   c                     dS )zI
        Rename all references to the old_name to the new_table.
        Nr   r	   	old_table	new_tables      r   rename_table_referencesz!Reference.rename_table_references   	     	r   c                     dS )zL
        Rename all references to the old_column to the new_column.
        Nr   )r	   r
   
old_column
new_columns       r   rename_column_referencesz"Reference.rename_column_references   r   r   c                 B    d| j         j        dt          |           dS )N< >)	__class____name__strr	   s    r   __repr__zReference.__repr__#   s$      N333SYYYY??r   c                      t          d          )Nz>Subclasses must define how they should be converted to string.)NotImplementedErrorr$   s    r   __str__zReference.__str__&   s    !L
 
 	
r   N)
r"   
__module____qualname____doc__r   r   r   r   r%   r(   r   r   r   r   r      sw        ::        @ @ @
 
 
 
 
r   r   c                   *    e Zd ZdZd Zd Zd Zd ZdS )TablezHold a reference to a table.c                 "    || _         || _        d S N)r
   
quote_name)r	   r
   r0   s      r   __init__zTable.__init__/   s    
$r   c                     | j         |k    S r/   r
   r   s     r   r   zTable.references_table3   s    zU""r   c                 .    | j         |k    r	|| _         d S d S r/   r3   r   s      r   r   zTable.rename_table_references6   s"    :"""DJJJ #"r   c                 6    |                      | j                  S r/   )r0   r
   r$   s    r   r(   zTable.__str__:   s    tz***r   N)r"   r)   r*   r+   r1   r   r   r(   r   r   r   r-   r-   ,   sV        &&% % %# # ## # #+ + + + +r   r-   c                   $    e Zd ZdZd Zd Zd ZdS )TableColumnsz9Base class for references to multiple columns of a table.c                 "    || _         || _        d S r/   r
   columns)r	   r
   r:   s      r   r1   zTableColumns.__init__A   s    
r   c                 *    | j         |k    o|| j        v S r/   r9   r   s      r   r   zTableColumns.references_columnE   s    zU"=v'==r   c                 t    | j         |k    r*t          | j                  D ]\  }}||k    r
|| j        |<   d S d S r/   )r
   	enumerater:   )r	   r
   r   r   indexr   s         r   r   z%TableColumns.rename_column_referencesH   sV    :!*4<!8!8 5 5vZ''*4DL' 5 5r   N)r"   r)   r*   r+   r1   r   r   r   r   r   r7   r7   >   sG        CC  > > >5 5 5 5 5r   r7   c                   *     e Zd ZdZd fd	Zd Z xZS )Columnsz(Hold a reference to one or many columns.r   c                 h    || _         || _        t                                          ||           d S r/   )r0   col_suffixessuperr1   )r	   r
   r:   r0   rB   r!   s        r   r1   zColumns.__init__R   s2    $((((((r   c                 v      fdd                     fdt           j                  D                       S )Nc                                          |           }	 j        |         }|rd                    ||          }n# t          $ r Y nw xY w|S Nz{} {})r0   rB   format
IndexErrorr   idxcolsuffixr	   s       r   col_strz Columns.__str__.<locals>.col_strX   sg    //&))C*3/ 6!..f55C   Js   %> 
A
A, c              3   6   K   | ]\  }} ||          V  d S r/   r   .0rJ   r   rM   s      r   	<genexpr>z"Columns.__str__.<locals>.<genexpr>b   D       
 
%0S&GGFC  
 
 
 
 
 
r   joinr=   r:   r	   rM   s   `@r   r(   zColumns.__str__W   se    	 	 	 	 	 yy 
 
 
 
4=dl4K4K
 
 
 
 
 	
r   )r   r"   r)   r*   r+   r1   r(   __classcell__r!   s   @r   r@   r@   O   sR        22) ) ) ) ) )

 
 
 
 
 
 
r   r@   c                   (     e Zd ZdZ fdZd Z xZS )	IndexNamez"Hold a reference to an index name.c                 h    || _         || _        t                                          ||           d S r/   )rL   create_index_namerC   r1   )r	   r
   r:   rL   r]   r!   s        r   r1   zIndexName.__init__j   s2    !2(((((r   c                 N    |                      | j        | j        | j                  S r/   )r]   r
   r:   rL   r$   s    r   r(   zIndexName.__str__o   s     %%dj$,LLLr   rW   rY   s   @r   r[   r[   g   sT        ,,) ) ) ) )
M M M M M M Mr   r[   c                   &     e Zd Zd fd	Zd Z xZS )IndexColumnsr   c                 ^    || _         t                                          ||||           d S r/   )	opclassesrC   r1   )r	   r
   r:   r0   rB   rb   r!   s         r   r1   zIndexColumns.__init__t   s.    "\BBBBBr   c                 v      fdd                     fdt           j                  D                       S )Nc                     d                                         |           j        |                   }	 j        |         }|rd                     ||          }n# t          $ r Y nw xY w|S rF   )rG   r0   rb   rB   rH   rI   s       r   rM   z%IndexColumns.__str__.<locals>.col_stry   s~     ..!8!8$.:MNNC*3/ 6!..f55C   Js   %A 
A*)A*rN   c              3   6   K   | ]\  }} ||          V  d S r/   r   rP   s      r   rR   z'IndexColumns.__str__.<locals>.<genexpr>   rS   r   rT   rV   s   `@r   r(   zIndexColumns.__str__x   se    
	 
	 
	 
	 
	 yy 
 
 
 
4=dl4K4K
 
 
 
 
 	
r   )r   r   )r"   r)   r*   r1   r(   rX   rY   s   @r   r`   r`   s   sR        C C C C C C
 
 
 
 
 
 
r   r`   c                   P     e Zd ZdZ fdZ fdZ fdZ fdZ fdZd Z	 xZ
S )ForeignKeyNamez'Hold a reference to a foreign key name.c                     t          ||          | _        || _        || _        t	                                          ||           d S r/   )r7   to_referencesuffix_templatecreate_fk_namerC   r1   )r	   
from_tablefrom_columnsto_table
to_columnsrj   rk   r!   s          r   r1   zForeignKeyName.__init__   sS     ):>>.,	
 	
 	
 	
 	
r   c                 z    t                                          |          p| j                            |          S r/   )rC   r   ri   )r	   r
   r!   s     r   r   zForeignKeyName.references_table   s:    ww''.. 
$2C2T2T3
 3
 	
r   c                 ~    t                                          ||          p| j                            ||          S r/   )rC   r   ri   )r	   r
   r   r!   s      r   r   z ForeignKeyName.references_column   sA    ww((6
 
 @00??	@r   c                     t                                          ||           | j                            ||           d S r/   )rC   r   ri   r	   r   r   r!   s      r   r   z&ForeignKeyName.rename_table_references   s<    ''	9===11)YGGGGGr   c                     t                                          |||           | j                            |||           d S r/   )rC   r   ri   )r	   r
   r   r   r!   s       r   r   z'ForeignKeyName.rename_column_references   s@    ((
JGGG225*jQQQQQr   c                     | j         | j        j        | j        j        d         dz  }|                     | j        | j        |          S )Nr   )rn   	to_column)rj   ri   r
   r:   rk   )r	   rL   s     r   r(   zForeignKeyName.__str__   sN    %)/*215)
 )
 
 ""4:t|VDDDr   )r"   r)   r*   r+   r1   r   r   r   r   r(   rX   rY   s   @r   rg   rg      s        11
 
 
 
 
"
 
 
 
 

@ @ @ @ @
H H H H HR R R R RE E E E E E Er   rg   c                   6    e Zd ZdZd Zd Zd Zd Zd Zd Z	dS )		Statementz
    Statement template and formatting parameters container.

    Allows keeping a reference to a statement without interpolating identifiers
    that might have to be adjusted if they're referencing a table or column
    that is removed
    c                 "    || _         || _        d S r/   templateparts)r	   r{   r|   s      r   r1   zStatement.__init__   s     


r   c                 h    t          fd| j                                        D                       S )Nc              3   b   K   | ])}t          |d           o|                              V  *dS )r   N)hasattrr   )rQ   partr
   s     r   rR   z-Statement.references_table.<locals>.<genexpr>   sU       
 
 D,--N$2G2G2N2N
 
 
 
 
 
r   anyr|   valuesr   s    `r   r   zStatement.references_table   sI     
 
 
 

))++
 
 
 
 
 	
r   c                 l    t          fd| j                                        D                       S )Nc              3   d   K   | ]*}t          |d           o|                              V  +dS )r   N)r   r   )rQ   r   r   r
   s     r   rR   z.Statement.references_column.<locals>.<genexpr>   sX       
 
 D-..X43I3I%QW3X3X
 
 
 
 
 
r   r   r   s    ``r   r   zStatement.references_column   sO     
 
 
 
 

))++
 
 
 
 
 	
r   c                     | j                                         D ](}t          |d          r|                    ||           )d S )Nr   )r|   r   r   r   )r	   r   r   r   s       r   r   z!Statement.rename_table_references   sX    J%%'' 	C 	CDt677 C,,Y	BBB	C 	Cr   c                     | j                                         D ])}t          |d          r|                    |||           *d S )Nr   )r|   r   r   r   )r	   r
   r   r   r   s        r   r   z"Statement.rename_column_references   sZ    J%%'' 	M 	MDt788 M--eZLLL	M 	Mr   c                      | j         | j        z  S r/   rz   r$   s    r   r(   zStatement.__str__   s    }tz))r   N)
r"   r)   r*   r+   r1   r   r   r   r   r(   r   r   r   rx   rx      s~           
 
 

 
 
C C C
M M M
* * * * *r   rx   c                   4     e Zd Z fdZ fdZd Zd Z xZS )Expressionsc                     || _         || _        || _        d | j         j                            | j        g          D             }t                                          ||           d S )Nc                 &    g | ]}|j         j        S r   )targetr   )rQ   rK   s     r   
<listcomp>z(Expressions.__init__.<locals>.<listcomp>   s-     
 
 
 J
 
 
r   )compilerexpressionsquote_valuequery	_gen_colsrC   r1   )r	   r
   r   r   r   r:   r!   s         r   r1   zExpressions.__init__   ss     &&
 
}*44d6F5GHH
 
 
 	(((((r   c                     | j         |k    rd S | j                            ||i          | _        t                                          ||           d S r/   )r
   r   relabeled_clonerC   r   rs   s      r   r   z#Expressions.rename_table_references   sS    :""F+;;Y	<RSS''	9=====r   c                 *   | j         |k    rd S t          | j                  }g | _        | j        j                            |g          D ]B}|j        j        |k    r||j        _        | j        	                    |j        j                   C|| _        d S r/   )
r
   r   r   r:   r   r   r   r   r   append)r	   r
   r   r   r   rK   s         r   r   z$Expressions.rename_column_references   s    :Ft/00=&00+?? 	3 	3Cz J..$.
!L
 12222&r   c                     | j                             | j                  \  }}t          | j        |          }|t          |          z  S r/   )r   compiler   mapr   tuple)r	   sqlparamss      r   r(   zExpressions.__str__   sA    m++D,<==VT%v..U6]]""r   )r"   r)   r*   r1   r   r   r(   rX   rY   s   @r   r   r      so        ) ) ) ) )> > > > >	' 	' 	'# # # # # # #r   r   N)r+   copyr   r   r-   r7   r@   r[   r`   rg   rx   r   r   r   r   <module>r      s         !
 !
 !
 !
 !
 !
 !
 !
H+ + + + +I + + +$5 5 5 5 55 5 5 5"
 
 
 
 
l 
 
 
0	M 	M 	M 	M 	M 	M 	M 	M
 
 
 
 
7 
 
 
.+E +E +E +E +E\ +E +E +E\$* $* $* $* $*	 $* $* $*N# # # # #, # # # # #r   