a
    xd	                     @   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                   @   s@   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   s   dS )zU
        Return whether or not this instance references the specified table.
        F selftabler   r   Y/var/www/html/Ranjet/env/lib/python3.9/site-packages/django/db/backends/ddl_references.pyreferences_table
   s    zReference.references_tablec                 C   s   dS )zV
        Return whether or not this instance references the specified column.
        Fr   r   r   columnr   r   r   references_column   s    zReference.references_columnc                 C   s   dS )zI
        Rename all references to the old_name to the new_table.
        Nr   r   	old_table	new_tabler   r   r   rename_table_references   s    z!Reference.rename_table_referencesc                 C   s   dS )zL
        Rename all references to the old_column to the new_column.
        Nr   r   r   
old_column
new_columnr   r   r   rename_column_references   s    z"Reference.rename_column_referencesc                 C   s   d| j jt| f S )Nz<%s %r>)	__class____name__strr   r   r   r   __repr__"   s    zReference.__repr__c                 C   s   t dd S )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   s   || _ || _d S N)r   
quote_name)r   r   r   r   r   r   __init__,   s    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 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   s    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   s   || _ || _d S r   r   columns)r   r   r$   r   r   r   r    >   s    zTableColumns.__init__c                 C   s   | j |ko|| jv S r   r#   r   r   r   r   r
   B   s    zTableColumns.references_columnc                 C   s4   | j |kr0t| jD ]\}}||kr|| j|< q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                    s   || _ || _t || d S r   )r   col_suffixessuperr    )r   r   r$   r   r(   r   r   r   r    O   s    zColumns.__init__c                    s*   fdd d  fddtjD S )Nc                    s@     | }z j| }|r&d||}W n ty:   Y n0 |S Nz{} {})r   r(   format
IndexErrorr	   idxcolsuffixr   r   r   col_strU   s    

z Columns.__str__.<locals>.col_str, c                 3   s   | ]\}} ||V  qd S r   r   .0r/   r	   r2   r   r   	<genexpr>_       z"Columns.__str__.<locals>.<genexpr>joinr%   r$   r   r   r2   r   r   r   T   s    
zColumns.__str__)r   r   r   r   r   r    r   __classcell__r   r   r*   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                    s   || _ || _t || d S r   )r1   create_index_namer)   r    )r   r   r$   r1   r?   r*   r   r   r    e   s    zIndexName.__init__c                 C   s   |  | j| j| jS r   )r?   r   r$   r1   r   r   r   r   r   j   s    zIndexName.__str__r<   r   r   r*   r   r>   b   s   r>   c                       s&   e Zd Zd fdd	Zdd Z  ZS )IndexColumnsr   c                    s   || _ t |||| d S r   )	opclassesr)   r    )r   r   r$   r   r(   rA   r*   r   r   r    o   s    zIndexColumns.__init__c                    s*   fdd d  fddtjD S )Nc                    sN   d  |  j| }z j| }|r4d ||}W n tyH   Y n0 |S r+   )r,   r   rA   r(   r-   r.   r   r   r   r2   t   s    
z%IndexColumns.__str__.<locals>.col_strr3   c                 3   s   | ]\}} ||V  qd S r   r   r4   r6   r   r   r7      r8   z'IndexColumns.__str__.<locals>.<genexpr>r9   r   r   r;   r   r   s   s    zIndexColumns.__str__)r   r   )r   r   r   r    r   r=   r   r   r*   r   r@   n   s   r@   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_namer)   r    )r   Z
from_tableZfrom_columnsto_tableZ
to_columnsrD   rE   r*   r   r   r       s    zForeignKeyName.__init__c                    s   t  |p| j|S r   )r)   r   rC   r   r*   r   r   r      s    zForeignKeyName.references_tablec                    s   t  ||p| j||S r   )r)   r
   rC   r   r*   r   r   r
      s    z ForeignKeyName.references_columnc                    s    t  || | j|| d S r   )r)   r   rC   r   r*   r   r   r      s    z&ForeignKeyName.rename_table_referencesc                    s$   t  ||| | j||| d S r   )r)   r   rC   r   r*   r   r   r      s    z'ForeignKeyName.rename_column_referencesc                 C   s.   | j | jj| jjd d }| | j| j|S )N    )rF   Z	to_column)rD   rC   r   r$   rE   )r   r1   r   r   r   r      s
    
zForeignKeyName.__str__)r   r   r   r   r    r   r
   r   r   r   r=   r   r   r*   r   rB      s   rB   c                   @   s@   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 )	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   s   || _ || _d S r   templateparts)r   rJ   rK   r   r   r   r       s    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   r5   partr!   r   r   r7      s   z-Statement.references_table.<locals>.<genexpr>anyrK   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)rL   r
   rM   r	   r   r   r   r7      s   z.Statement.references_column.<locals>.<genexpr>rO   r   r   rR   r   r
      s    zStatement.references_columnc                 C   s*   | j  D ]}t|dr
||| q
d S )Nr   )rK   rQ   rL   r   )r   r   r   rN   r   r   r   r      s    
z!Statement.rename_table_referencesc                 C   s,   | j  D ]}t|dr
|||| q
d S )Nr   )rK   rQ   rL   r   )r   r   r   r   rN   r   r   r   r      s    
z"Statement.rename_column_referencesc                 C   s   | j | j S r   rI   r   r   r   r   r      s    zStatement.__str__N)
r   r   r   r   r    r   r
   r   r   r   r   r   r   r   rH      s   rH   N)	r   r   r   r"   r'   r>   r@   rB   rH   r   r   r   r   <module>   s   ""