o
    uvXj^  ã                   @   s†   d 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dS )z~
Helpers to manipulate deferred DDL statements that might need to be adjusted or
discarded within when executing a migration.
c                   @   ó@   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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   ú^/var/www/html/myproject/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   )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      s    r   c                   @   s0   e Zd Z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__,   ó   
zTable.__init__c                 C   s
   | j |kS r#   ©r   r   r   r   r   r	   0   s   
zTable.references_tablec                 C   s   | j |kr
|| _ d S d S r#   r'   r   r   r   r   r   3   s   

ÿzTable.rename_table_referencesc                 C   s   |   | j¡S r#   )r$   r   r   r   r   r   r   7   ó   zTable.__str__N)r   r   r   r    r%   r	   r   r   r   r   r   r   r!   )   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   r+   r   r   r   r%   >   r&   zTableColumns.__init__c                 C   s   | j |ko	|| jv S r#   r*   r   r   r   r   r   B   r   zTableColumns.references_columnc                 C   s8   | j |krt| jƒD ]\}}||kr|| j|< q
d S d S r#   )r   Ú	enumerater+   )r   r   r   r   Úindexr   r   r   r   r   E   s   

€ýz%TableColumns.rename_column_referencesN)r   r   r   r    r%   r   r   r   r   r   r   r)   ;   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   r+   r$   r0   ©r   r   r   r%   O   ó   zColumns.__init__c                    ó*   ‡fdd„‰ d  ‡ fdd„tˆjƒD ƒ¡S )Nc                    s4   zˆ   | ¡ˆ j|  W S  ty   ˆ   | ¡ Y S w r#   )r$   r0   Ú
IndexError)r   Úidxr   r   r   Úcol_strU   s
   ÿz Columns.__str__.<locals>.col_strú, c                 3   ó   � | ]
\}}ˆ ||ƒV  qd S r#   r   ©Ú.0r6   r   ©r7   r   r   Ú	<genexpr>[   ó   € z"Columns.__str__.<locals>.<genexpr>©Újoinr,   r+   r   r   ©r7   r   r   r   T   s   zColumns.__str__)r   ©r   r   r   r    r%   r   Ú__classcell__r   r   r2   r   r.   L   s    r.   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                    r/   r#   )ÚsuffixÚcreate_index_namer1   r%   )r   r   r+   rE   rF   r2   r   r   r%   a   r3   zIndexName.__init__c                 C   s   |   | j| j| j¡S r#   )rF   r   r+   rE   r   r   r   r   r   f   r   zIndexName.__str__rB   r   r   r2   r   rD   ^   s    rD   c                       s&   e Zd Zd‡ fdd„	Zdd„ Z‡  ZS )ÚIndexColumnsr   c                    s   || _ tƒ  ||||¡ d S r#   )Ú	opclassesr1   r%   )r   r   r+   r$   r0   rH   r2   r   r   r%   k   s   zIndexColumns.__init__c                    r4   )Nc                    sH   zˆ   | ¡ˆ j|  }W n ty   ˆ   | ¡}Y nw d |ˆ j| ¡S )Nz{} {})r$   r0   r5   ÚformatrH   )r   r6   Úcolr   r   r   r7   p   s   ÿz%IndexColumns.__str__.<locals>.col_strr8   c                 3   r9   r#   r   r:   r<   r   r   r=   y   r>   z'IndexColumns.__str__.<locals>.<genexpr>r?   r   r   rA   r   r   o   s   	zIndexColumns.__str__)r   r   )r   r   r   r%   r   rC   r   r   r2   r   rG   j   s    rG   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_namer1   r%   )r   Ú
from_tableÚfrom_columnsÚto_tableÚ
to_columnsrM   rN   r2   r   r   r%      s   zForeignKeyName.__init__c                    s   t ƒ  |¡p| j |¡S r#   )r1   r	   rL   r   r2   r   r   r	   …   s   zForeignKeyName.references_tablec                    s   t ƒ  ||¡p| j ||¡S r#   )r1   r   rL   r   r2   r   r   r   ˆ   s   þz ForeignKeyName.references_columnc                    s    t ƒ  ||¡ | j ||¡ d S r#   )r1   r   rL   r   r2   r   r   r   Ž   s   z&ForeignKeyName.rename_table_referencesc                    s$   t ƒ  |||¡ | j |||¡ d S r#   )r1   r   rL   r   r2   r   r   r   ’   s   z'ForeignKeyName.rename_column_referencesc                 C   s.   | j | jj| jjd dœ }|  | j| j|¡S )Né    )rQ   Ú	to_column)rM   rL   r   r+   rN   )r   rE   r   r   r   r   –   s
   
þzForeignKeyName.__str__)r   r   r   r    r%   r	   r   r   r   r   rC   r   r   r2   r   rK   |   s    rK   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   rW   rX   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	   ©r;   Úpartr'   r   r   r=   «   s
   € ÿ
ÿz-Statement.references_table.<locals>.<genexpr>©ÚanyrX   Úvaluesr   r   r'   r   r	   ª   s   þzStatement.references_tablec                    s   t ‡ ‡fdd„| j ¡ D ƒƒS )Nc                 3   s&   � | ]}t |d ƒo| ˆˆ ¡V  qdS )r   N)rY   r   rZ   ©r   r   r   r   r=   ±   s
   € ÿ
ÿz.Statement.references_column.<locals>.<genexpr>r\   r   r   r_   r   r   °   s   þzStatement.references_columnc                 C   s*   | j  ¡ D ]}t|dƒr| ||¡ qd S )Nr   )rX   r^   rY   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   )rX   r^   rY   r   )r   r   r   r   r[   r   r   r   r   »   s
   
€þz"Statement.rename_column_referencesc                 C   s   | j | j S r#   rV   r   r   r   r   r   À   r(   zStatement.__str__N)
r   r   r   r    r%   r	   r   r   r   r   r   r   r   r   rU   ž   s    rU   N)	r    r   r!   r)   r.   rD   rG   rK   rU   r   r   r   r   Ú<module>   s    ""