o
    þÞh«!  ã                   @   s¢   d Z ddlmZ G dd„ dƒZG dd„ deƒZG dd„ deƒZG d	d
„ d
eƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZ	G dd„ deƒZ
G d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                   @   óH   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dS )Ú	Referencez0Base class that defines the reference interface.c                 C   ó   dS )zU
        Return whether or not this instance references the specified table.
        F© ©ÚselfÚtabler   r   úa/var/www/html/premium_crap/venv/lib/python3.10/site-packages/django/db/backends/ddl_references.pyÚreferences_table   ó   zReference.references_tablec                 C   r   )zV
        Return whether or not this instance references the specified column.
        Fr   ©r   r	   Úcolumnr   r   r
   Úreferences_column   r   zReference.references_columnc                 C   r   )zU
        Return whether or not this instance references the specified index.
        Fr   ©r   r	   Úindexr   r   r
   Úreferences_index   r   zReference.references_indexc                 C   r   )zI
        Rename all references to the old_name to the new_table.
        Nr   ©r   Ú	old_tableÚ	new_tabler   r   r
   Úrename_table_references   r   z!Reference.rename_table_referencesc                 C   r   )zL
        Rename all references to the old_column to the new_column.
        Nr   ©r   r	   Ú
old_columnÚ
new_columnr   r   r
   Úrename_column_references$   r   z"Reference.rename_column_referencesc                 C   s   d| j jt| ƒf S )Nz<%s %r>)Ú	__class__Ú__name__Ústr©r   r   r   r
   Ú__repr__*   ó   zReference.__repr__c                 C   s   t dƒ‚)Nz>Subclasses must define how they should be converted to string.)ÚNotImplementedErrorr   r   r   r
   Ú__str__-   s   ÿzReference.__str__N)r   Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r   r"   r   r   r   r
   r   	   s    r   c                   @   s8   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )ÚTablezHold a reference to a table.c                 C   ó   || _ || _d S ©N)r	   Ú
quote_name)r   r	   r)   r   r   r
   Ú__init__6   ó   
zTable.__init__c                 C   s
   | j |kS r(   ©r	   r   r   r   r
   r   :   s   
zTable.references_tablec                 C   s   |   |¡o
t| ƒ|kS r(   )r   r   r   r   r   r
   r   =   s   zTable.references_indexc                 C   s   | j |kr
|| _ d S d S r(   r,   r   r   r   r
   r   @   s   

ÿzTable.rename_table_referencesc                 C   s   |   | j¡S r(   )r)   r	   r   r   r   r
   r"   D   ó   zTable.__str__N)	r   r#   r$   r%   r*   r   r   r   r"   r   r   r   r
   r&   3   s    r&   c                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	ÚTableColumnsz9Base class for references to multiple columns of a table.c                 C   r'   r(   ©r	   Úcolumns)r   r	   r0   r   r   r
   r*   K   r+   zTableColumns.__init__c                 C   s   | j |ko	|| jv S r(   r/   r   r   r   r
   r   O   r    zTableColumns.references_columnc                 C   s8   | j |krt| jƒD ]\}}||kr|| j|< q
d S d S r(   )r	   Ú	enumerater0   )r   r	   r   r   r   r   r   r   r
   r   R   s   

€ýz%TableColumns.rename_column_referencesN)r   r#   r$   r%   r*   r   r   r   r   r   r
   r.   H   s
    r.   c                       s*   e Zd ZdZd‡ fdd„	Zdd„ Z‡  ZS )ÚColumnsz(Hold a reference to one or many columns.r   c                    ó   || _ || _tƒ  ||¡ d S r(   )r)   Úcol_suffixesÚsuperr*   )r   r	   r0   r)   r4   ©r   r   r
   r*   \   ó   zColumns.__init__c                    ó*   ‡fdd„‰ d  ‡ fdd„tˆjƒD ƒ¡S )Nc                    sF   ˆ   | ¡}zˆ j| }|rd ||¡}W |S W |S  ty"   Y |S w ©Nz{} {})r)   r4   ÚformatÚ
IndexError©r   ÚidxÚcolÚsuffixr   r   r
   Úcol_strb   s   

üþþz Columns.__str__.<locals>.col_strú, c                 3   ó   � | ]
\}}ˆ ||ƒV  qd S r(   r   ©Ú.0r=   r   ©r@   r   r
   Ú	<genexpr>l   ó   € 
ÿz"Columns.__str__.<locals>.<genexpr>©Újoinr1   r0   r   r   ©r@   r   r
   r"   a   s   
ÿzColumns.__str__)r   ©r   r#   r$   r%   r*   r"   Ú__classcell__r   r   r6   r
   r2   Y   s    r2   c                       s(   e Zd ZdZ‡ fdd„Zdd„ Z‡  ZS )Ú	IndexNamez"Hold a reference to an index name.c                    r3   r(   )r?   Úcreate_index_namer5   r*   )r   r	   r0   r?   rN   r6   r   r
   r*   t   r7   zIndexName.__init__c                 C   s   |   | j| j| j¡S r(   )rN   r	   r0   r?   r   r   r   r
   r"   y   r    zIndexName.__str__rK   r   r   r6   r
   rM   q   s    rM   c                       s&   e Zd Zd‡ fdd„	Zdd„ Z‡  ZS )ÚIndexColumnsr   c                    s   || _ tƒ  ||||¡ d S r(   )Ú	opclassesr5   r*   )r   r	   r0   r)   r4   rP   r6   r   r
   r*   ~   s   zIndexColumns.__init__c                    r8   )Nc                    sT   d  ˆ  | ¡ˆ j| ¡}zˆ j| }|rd  ||¡}W |S W |S  ty)   Y |S w r9   )r:   r)   rP   r4   r;   r<   r   r   r
   r@   ƒ   s   
üþþz%IndexColumns.__str__.<locals>.col_strrA   c                 3   rB   r(   r   rC   rE   r   r
   rF   �   rG   z'IndexColumns.__str__.<locals>.<genexpr>rH   r   r   rJ   r
   r"   ‚   s   ÿzIndexColumns.__str__)r   r   )r   r#   r$   r*   r"   rL   r   r   r6   r
   rO   }   s    rO   c                       sX   e Zd ZdZ‡ fdd„Z‡ fdd„Z‡ fdd„Z‡ fdd	„Z‡ fd
d„Zdd„ Z	‡  Z
S )ÚForeignKeyNamez'Hold a reference to a foreign key name.c                    s*   t ||ƒ| _|| _|| _tƒ  ||¡ d S r(   )r.   Úto_referenceÚsuffix_templateÚcreate_fk_namer5   r*   )r   Ú
from_tableÚfrom_columnsÚto_tableÚ
to_columnsrS   rT   r6   r   r
   r*   —   s   	þzForeignKeyName.__init__c                    s   t ƒ  |¡p| j |¡S r(   )r5   r   rR   r   r6   r   r
   r   ¨   s   ÿzForeignKeyName.references_tablec                    s   t ƒ  ||¡p| j ||¡S r(   )r5   r   rR   r   r6   r   r
   r   ­   s
   ÿþz ForeignKeyName.references_columnc                    s    t ƒ  ||¡ | j ||¡ d S r(   )r5   r   rR   r   r6   r   r
   r   ²   s   z&ForeignKeyName.rename_table_referencesc                    s$   t ƒ  |||¡ | j |||¡ d S r(   )r5   r   rR   r   r6   r   r
   r   ¶   s   z'ForeignKeyName.rename_column_referencesc                 C   s.   | j | jj| jjd dœ }|  | j| j|¡S )Nr   )rW   Ú	to_column)rS   rR   r	   r0   rT   )r   r?   r   r   r
   r"   º   s
   
þzForeignKeyName.__str__)r   r#   r$   r%   r*   r   r   r   r   r"   rL   r   r   r6   r
   rQ   ”   s    rQ   c                   @   r   )Ú	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                 K   r'   r(   ©ÚtemplateÚparts)r   r\   r]   r   r   r
   r*   Ë   r+   zStatement.__init__c                    s   t ‡ fdd„| j ¡ D ƒƒS )Nc                 3   s$   � | ]}t |d ƒo| ˆ ¡V  qdS )r   N)Úhasattrr   ©rD   Úpartr,   r   r
   rF   Ð   s
   € ÿ
ÿz-Statement.references_table.<locals>.<genexpr>©Úanyr]   Úvaluesr   r   r,   r
   r   Ï   s   þzStatement.references_tablec                    ó   t ‡ ‡fdd„| j ¡ D ƒƒS )Nc                 3   ó&   � | ]}t |d ƒo| ˆˆ ¡V  qdS )r   N)r^   r   r_   ©r   r	   r   r
   rF   Ö   ó
   € ÿ
ÿz.Statement.references_column.<locals>.<genexpr>ra   r   r   rf   r
   r   Õ   ó   þzStatement.references_columnc                    rd   )Nc                 3   re   )r   N)r^   r   r_   ©r   r	   r   r
   rF   Ü   rg   z-Statement.references_index.<locals>.<genexpr>ra   r   r   ri   r
   r   Û   rh   zStatement.references_indexc                 C   s*   | j  ¡ D ]}t|dƒr| ||¡ qd S )Nr   )r]   rc   r^   r   )r   r   r   r`   r   r   r
   r   á   s
   
€þz!Statement.rename_table_referencesc                 C   s,   | j  ¡ D ]}t|dƒr| |||¡ qd S )Nr   )r]   rc   r^   r   )r   r	   r   r   r`   r   r   r
   r   æ   s
   
€þz"Statement.rename_column_referencesc                 C   s   | j | j S r(   r[   r   r   r   r
   r"   ë   r-   zStatement.__str__N)r   r#   r$   r%   r*   r   r   r   r   r   r"   r   r   r   r
   rZ   Â   s    rZ   c                       s8   e Zd Z‡ fdd„Z‡ fdd„Zdd„ Zdd„ Z‡  ZS )	ÚExpressionsc                    s@   || _ || _|| _dd„ | j j | jg¡D ƒ}tƒ  ||¡ d S )Nc                 S   s   g | ]}|j j‘qS r   )Útargetr   )rD   r>   r   r   r
   Ú
<listcomp>ô   s    ÿÿz(Expressions.__init__.<locals>.<listcomp>)ÚcompilerÚexpressionsÚquote_valueÚqueryÚ	_gen_colsr5   r*   )r   r	   rn   rm   ro   r0   r6   r   r
   r*   ð   s   þzExpressions.__init__c                    s2   | j |krd S | j ||i¡| _tƒ  ||¡ d S r(   )r	   rn   Úrelabeled_cloner5   r   r   r6   r   r
   r   ú   s   
z#Expressions.rename_table_referencesc                 C   sb   | j |krd S t| jƒ}g | _| jj |g¡D ]}|jj|kr#||j_| j 	|jj¡ q|| _d S r(   )
r	   r   rn   r0   rm   rp   rq   rk   r   Úappend)r   r	   r   r   rn   r>   r   r   r
   r      s   


z$Expressions.rename_column_referencesc                 C   s*   | j  | j¡\}}t| j|ƒ}|t|ƒ S r(   )rm   Úcompilern   Úmapro   Útuple)r   ÚsqlÚparamsr   r   r
   r"     s   zExpressions.__str__)r   r#   r$   r*   r   r   r"   rL   r   r   r6   r
   rj   ï   s
    
rj   N)r%   Úcopyr   r   r&   r.   r2   rM   rO   rQ   rZ   rj   r   r   r   r
   Ú<module>   s    *.-