
    Evg!                        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                   <    e Zd 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     ^/var/www/pixelcanvas.ch/venv/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 )zU
        Return whether or not this instance references the specified index.
        Fr   r	   r
   indexs      r   references_indexzReference.references_index   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   r   	   s        ::          @ @ @
 
 
 
 
r   r   c                   0    e Zd 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
   r4   s      r   __init__zTable.__init__6   s    
$r   c                     | j         |k    S r3   r
   r   s     r   r   zTable.references_table:   s    zU""r   c                 R    |                      |          ot          |           |k    S r3   )r   r'   r   s      r   r   zTable.references_index=   s&    $$U++BD		U0BBr   c                 .    | j         |k    r	|| _         d S d S r3   r7   r   s      r   r   zTable.rename_table_references@   s"    :"""DJJJ #"r   c                 6    |                      | j                  S r3   )r4   r
   r(   s    r   r,   zTable.__str__D   s    tz***r   N)	r&   r-   r.   r/   r5   r   r   r   r,   r   r   r   r1   r1   3   sh        &&% % %# # #C C C# # #+ + + + +r   r1   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 r3   r
   columns)r	   r
   r?   s      r   r5   zTableColumns.__init__K   s    
r   c                 *    | j         |k    o|| j        v S r3   r>   r   s      r   r   zTableColumns.references_columnO   s    zU"=v'==r   c                 t    | j         |k    r*t          | j                  D ]\  }}||k    r
|| j        |<   d S d S r3   )r
   	enumerater?   )r	   r
   r   r   r   r   s         r   r    z%TableColumns.rename_column_referencesR   sV    :!*4<!8!8 5 5vZ''*4DL' 5 5r   N)r&   r-   r.   r/   r5   r   r    r   r   r   r<   r<   H   sG        CC  > > >5 5 5 5 5r   r<   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 r3   )r4   col_suffixessuperr5   )r	   r
   r?   r4   rF   r%   s        r   r5   zColumns.__init__\   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{} {})r4   rF   format
IndexErrorr   idxcolsuffixr	   s       r   col_strz Columns.__str__.<locals>.col_strb   sg    //&))C*3/ 6!..f55C   Js   %> 
A
A, c              3   6   K   | ]\  }} ||          V  d S r3   r   .0rN   r   rQ   s      r   	<genexpr>z"Columns.__str__.<locals>.<genexpr>l   D       
 
%0S&GGFC  
 
 
 
 
 
r   joinrB   r?   r	   rQ   s   `@r   r,   zColumns.__str__a   se    	 	 	 	 	 yy 
 
 
 
4=dl4K4K
 
 
 
 
 	
r   )r   r&   r-   r.   r/   r5   r,   __classcell__r%   s   @r   rD   rD   Y   sR        22) ) ) ) ) )

 
 
 
 
 
 
r   rD   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 r3   )rP   create_index_namerG   r5   )r	   r
   r?   rP   ra   r%   s        r   r5   zIndexName.__init__t   s2    !2(((((r   c                 N    |                      | j        | j        | j                  S r3   )ra   r
   r?   rP   r(   s    r   r,   zIndexName.__str__y   s     %%dj$,LLLr   r[   r]   s   @r   r_   r_   q   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 r3   )	opclassesrG   r5   )r	   r
   r?   r4   rF   rf   r%   s         r   r5   zIndexColumns.__init__~   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 rJ   )rK   r4   rf   rF   rL   rM   s       r   rQ   z%IndexColumns.__str__.<locals>.col_str   s~     ..!8!8$.:MNNC*3/ 6!..f55C   Js   %A 
A*)A*rR   c              3   6   K   | ]\  }} ||          V  d S r3   r   rT   s      r   rV   z'IndexColumns.__str__.<locals>.<genexpr>   rW   r   rX   rZ   s   `@r   r,   zIndexColumns.__str__   se    
	 
	 
	 
	 
	 yy 
 
 
 
4=dl4K4K
 
 
 
 
 	
r   )r   r   )r&   r-   r.   r5   r,   r\   r]   s   @r   rd   rd   }   sR        C C C C C C
 
 
 
 
 
 
r   rd   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 r3   )r<   to_referencesuffix_templatecreate_fk_namerG   r5   )r	   
from_tablefrom_columnsto_table
to_columnsrn   ro   r%   s          r   r5   zForeignKeyName.__init__   sS     ):>>.,	
 	
 	
 	
 	
r   c                 z    t                                          |          p| j                            |          S r3   )rG   r   rm   )r	   r
   r%   s     r   r   zForeignKeyName.references_table   s:    ww''.. 
$2C2T2T3
 3
 	
r   c                 ~    t                                          ||          p| j                            ||          S r3   )rG   r   rm   )r	   r
   r   r%   s      r   r   z ForeignKeyName.references_column   sA    ww((6
 
 @00??	@r   c                     t                                          ||           | j                            ||           d S r3   )rG   r   rm   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 r3   )rG   r    rm   )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   )rr   	to_column)rn   rm   r
   r?   ro   )r	   rP   s     r   r,   zForeignKeyName.__str__   sN    %)/*215)
 )
 
 ""4:t|VDDDr   )r&   r-   r.   r/   r5   r   r   r   r    r,   r\   r]   s   @r   rk   rk      s        11
 
 
 
 
"
 
 
 
 

@ @ @ @ @
H H H H HR R R R RE E E E E E Er   rk   c                   <    e Zd 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 r3   templateparts)r	   r   r   s      r   r5   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   )rU   partr
   s     r   rV   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   )rU   r   r   r
   s     r   rV   z.Statement.references_column.<locals>.<genexpr>   sX       
 
 D-..X43I3I%QW3X3X
 
 
 
 
 
r   r   r   s    ``r   r   zStatement.references_column   O     
 
 
 
 

))++
 
 
 
 
 	
r   c                 l    t          fd| j                                        D                       S )Nc              3   d   K   | ]*}t          |d           o|                              V  +dS )r   N)r   r   )rU   r   r   r
   s     r   rV   z-Statement.references_index.<locals>.<genexpr>   sW       
 
 D,--U$2G2Gu2U2U
 
 
 
 
 
r   r   r   s    ``r   r   zStatement.references_index   r   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 r3   r~   r(   s    r   r,   zStatement.__str__   s    }tz))r   N)r&   r-   r.   r/   r5   r   r   r   r   r    r,   r   r   r   r|   r|      s           
 
 

 
 

 
 
C C C
M M M
* * * * *r   r|   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   )rU   rO   s     r   
<listcomp>z(Expressions.__init__.<locals>.<listcomp>   s-     
 
 
 J
 
 
r   )compilerexpressionsquote_valuequery	_gen_colsrG   r5   )r	   r
   r   r   r   r?   r%   s         r   r5   zExpressions.__init__   ss     &&
 
}*44d6F5GHH
 
 
 	(((((r   c                     | j         |k    rd S | j                            ||i          | _        t                                          ||           d S r3   )r
   r   relabeled_clonerG   r   rw   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 r3   )
r
   r   r   r?   r   r   r   r   r   append)r	   r
   r   r   r   rO   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 r3   )r   compiler   mapr   tuple)r	   sqlparamss      r   r,   zExpressions.__str__  sA    m++D,<==VT%v..U6]]""r   )r&   r-   r.   r5   r   r    r,   r\   r]   s   @r   r   r      so        ) ) ) ) )> > > > >	' 	' 	'# # # # # # #r   r   N)r/   copyr   r   r1   r<   rD   r_   rd   rk   r|   r   r   r   r   <module>r      s   
      '
 '
 '
 '
 '
 '
 '
 '
T+ + + + +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\** ** ** ** **	 ** ** **Z# # # # #, # # # # #r   