
vลฯ^j  ใ               @   sท   d  Z  Gd d   d  Z Gd d   d e  Z Gd d   d e  Z Gd d   d e  Z Gd	 d
   d
 e  Z Gd d   d e  Z Gd d   d e  Z Gd 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   ๚C/tmp/pip-build-8lau8j11/django/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.)ฺNotImplementedError)r   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               @   sF   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)N)r   )r   r   r   r   r   r   0   s    zTable.references_tablec             C   s   |  j  | k r | |  _  d  S)N)r   )r   r	   r
   r   r   r   r   3   s    zTable.rename_table_referencesc             C   s   |  j  |  j  S)N)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)N)r   ฺcolumns)r   r   r   r   r   r   r   >   s    	zTableColumns.__init__c             C   s   |  j  | k o | |  j k S)N)r   r   )r   r   r   r   r   r   r   B   s    zTableColumns.references_columnc             C   sL   |  j  | k rH x6 t |  j  D]% \ } } | | k r | |  j | <q Wd  S)N)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                   s7   e  Z d  Z d Z f    f d d  Z d d   Z   S)ฺColumnsz(Hold a reference to one or many columns.c                s)   | |  _  | |  _ t   j | |  d  S)N)r   ฺcol_suffixesฺsuperr   )r   r   r   r   r    )r   r   r   r   O   s    		zColumns.__init__c                s;    f d d     d j    f d d   t  j  D  S)Nc                sB   y   j  |     j | SWn t k
 r=   j  |   SYn Xd  S)N)r   r    ฺ
IndexError)r   ฺidx)r   r   r   ฺcol_strU   s    z Columns.__str__.<locals>.col_strz, c             3   s$   |  ] \ } }   | |  Vq d  S)Nr   )ฺ.0r#   r   )r$   r   r   ๚	<genexpr>[   s    z"Columns.__str__.<locals>.<genexpr>)ฺjoinr   r   )r   r   )r$   r   r   r   T   s    zColumns.__str__)r   r   r   r   r   r   r   r   )r   r   r   L   s   r   c                   s4   e  Z d  Z d Z   f d d   Z d d   Z   S)ฺ	IndexNamez"Hold a reference to an index name.c                s)   | |  _  | |  _ t   j | |  d  S)N)ฺsuffixฺcreate_index_namer!   r   )r   r   r   r)   r*   )r   r   r   r   a   s    		zIndexName.__init__c             C   s   |  j  |  j |  j |  j  S)N)r*   r   r   r)   )r   r   r   r   r   f   s    zIndexName.__str__)r   r   r   r   r   r   r   r   )r   r   r(   ^   s   r(   c                   s4   e  Z d  Z f  f    f d d  Z d d   Z   S)ฺIndexColumnsc                s&   | |  _  t   j | | | |  d  S)N)ฺ	opclassesr!   r   )r   r   r   r   r    r,   )r   r   r   r   k   s    	zIndexColumns.__init__c                s;    f d d     d j    f d d   t  j  D  S)Nc                sX   d j    j |     j |  } y d j  |   j |  } Wn t k
 rS Yn X| S)Nz{} {})ฺformatr   r,   r    r"   )r   r#   ฺcol)r   r   r   r$   p   s    "z%IndexColumns.__str__.<locals>.col_strz, c             3   s$   |  ] \ } }   | |  Vq d  S)Nr   )r%   r#   r   )r$   r   r   r&   z   s    z'IndexColumns.__str__.<locals>.<genexpr>)r'   r   r   )r   r   )r$   r   r   r   o   s    
zIndexColumns.__str__)r   r   r   r   r   r   r   )r   r   r+   j   s   r+   c                   s|   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	   S)ฺForeignKeyNamez'Hold a reference to a foreign key name.c                s;   t  | |  |  _ | |  _ | |  _ t   j | |  d  S)N)r   ฺto_referenceฺsuffix_templateฺcreate_fk_namer!   r   )r   Z
from_tableZfrom_columnsฺto_tableZ
to_columnsr1   r2   )r   r   r   r      s    		zForeignKeyName.__init__c                s"   t    j |  p! |  j j |  S)N)r!   r   r0   )r   r   )r   r   r   r      s    zForeignKeyName.references_tablec                s(   t    j | |  p' |  j j | |  S)N)r!   r   r0   )r   r   r   )r   r   r   r      s    z ForeignKeyName.references_columnc                s*   t    j | |  |  j j | |  d  S)N)r!   r   r0   )r   r	   r
   )r   r   r   r      s    z&ForeignKeyName.rename_table_referencesc                s0   t    j | | |  |  j j | | |  d  S)N)r!   r   r0   )r   r   r   r   )r   r   r   r      s    z'ForeignKeyName.rename_column_referencesc             C   sB   |  j  d |  j j d |  j j d i } |  j |  j |  j |  S)Nr3   Z	to_column้    )r1   r0   r   r   r2   )r   r)   r   r   r   r      s    zForeignKeyName.__str__)
r   r   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 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)N)ฺtemplateฺparts)r   r6   r7   r   r   r   r   ง   s    	zStatement.__init__c                s&   t    f d d   |  j j   D  S)Nc             3   s-   |  ]# } t  | d   o$ | j    Vq d S)r   N)ฺhasattrr   )r%   ฺpart)r   r   r   r&   ญ   s   z-Statement.references_table.<locals>.<genexpr>)ฺanyr7   ฺvalues)r   r   r   )r   r   r   ซ   s    zStatement.references_tablec                s)   t     f d d   |  j j   D  S)Nc             3   s0   |  ]& } t  | d   o' | j     Vq d S)r   N)r8   r   )r%   r9   )r   r   r   r   r&   ณ   s   z.Statement.references_column.<locals>.<genexpr>)r:   r7   r;   )r   r   r   r   )r   r   r   r   ฑ   s    zStatement.references_columnc             C   s=   x6 |  j  j   D]% } t | d  r | j | |  q Wd  S)Nr   )r7   r;   r8   r   )r   r	   r
   r9   r   r   r   r   ท   s    z!Statement.rename_table_referencesc             C   s@   x9 |  j  j   D]( } t | d  r | j | | |  q Wd  S)Nr   )r7   r;   r8   r   )r   r   r   r   r9   r   r   r   r   ผ   s    z"Statement.rename_column_referencesc             C   s   |  j  |  j S)N)r6   r7   )r   r   r   r   r   ม   s    zStatement.__str__N)
r   r   r   r   r   r   r   r   r   r   r   r   r   r   r5      s   r5   N)	r   r   r   r   r   r(   r+   r/   r5   r   r   r   r   ฺ<module>   s   ""