î
Ý^Q\  ã               @   s6   d  d l  Z  d  d l m Z Gd d „  d e ƒ Z d S)é    N)ÚBaseDatabaseSchemaEditorc                   s‘   e  Z d  Z d Z d Z d Z d Z d Z d Z d Z	 d Z
 d	 d
 „  Z ‡  f d d †  Z d d „  Z ‡  f d d †  Z d ‡  f d d † Z ‡  S)ÚDatabaseSchemaEditorz@ALTER COLUMN %(column)s TYPE %(type)s USING %(column)s::%(type)szCREATE SEQUENCE %(sequence)sz,DROP SEQUENCE IF EXISTS %(sequence)s CASCADEz=SELECT setval('%(sequence)s', MAX(%(column)s)) FROM %(table)szBCREATE INDEX %(name)s ON %(table)s%(using)s (%(columns)s)%(extra)szMCREATE INDEX %(name)s ON %(table)s (%(columns)s varchar_pattern_ops)%(extra)szJCREATE INDEX %(name)s ON %(table)s (%(columns)s text_pattern_ops)%(extra)szRSET CONSTRAINTS %(name)s IMMEDIATE; ALTER TABLE %(table)s DROP CONSTRAINT %(name)sc             C   s   t  j j | ƒ S)N)Úpsycopg2Ú
extensionsZadapt)ÚselfÚvalue© r   úJ/var/www/dbchiro/venv/build/Django/django/db/backends/postgresql/schema.pyÚquote_value   s    z DatabaseSchemaEditor.quote_valuec                sM   t  t |  ƒ j | | ƒ } |  j | | ƒ } | d  k	 rI | j | ƒ n  | S)N)Úsuperr   Ú_field_indexes_sqlÚ_create_like_index_sqlÚappend)r   ÚmodelÚfieldÚoutputÚlike_index_statement)Ú	__class__r   r	   r      s
    z'DatabaseSchemaEditor._field_indexes_sqlc             C   s¬   | j  d |  j ƒ } | d k	 r¨ | j s3 | j r¨ d | k rC d S| j d ƒ rt |  j | | g d d d |  j ƒS| j d ƒ r¨ |  j | | g d d d |  j ƒSn  d S)	z£
        Return the statement to create an index with varchar operator pattern
        when the column type is 'varchar' or 'text', otherwise return None.
        Ú
connectionNú[ZvarcharÚsuffixÚ_likeZsqlÚtext)Údb_typer   Údb_indexÚuniqueÚ
startswithZ_create_index_sqlÚsql_create_varchar_indexÚsql_create_text_index)r   r   r   r   r   r   r	   r       s    "%z+DatabaseSchemaEditor._create_like_index_sqlc          
      sl  | j  ƒ  d k rI| j } d | | f } | j  ƒ  d k rC d n d } |  j i |  j | ƒ d 6| d 6g  f |  j i |  j | ƒ d 6g  f |  j i |  j | ƒ d 6g  f |  j i |  j | ƒ d	 6|  j i |  j | ƒ d 6d
 |  j | ƒ d 6d 6g  f |  j i |  j | ƒ d	 6|  j | ƒ d 6|  j | ƒ d 6g  f g f St	 t
 |  ƒ j | | | | ƒ Sd S)z:
        Makes ALTER TYPE with SERIAL make sense.
        ÚserialÚ	bigserialz	%s_%s_seqÚintegerZbigintÚcolumnÚtypeÚsequenceÚtableznextval('%s')ÚdefaultZchangesN)zserialr    )Úlowerr"   Úsql_alter_column_typeZ
quote_nameÚsql_delete_sequenceÚsql_create_sequenceZsql_alter_columnZsql_alter_column_defaultÚsql_set_sequence_maxr   r   Ú_alter_column_type_sql)r   r%   Ú	old_fieldÚ	new_fieldÚnew_typer"   Zsequence_nameZcol_type)r   r   r	   r,   6   s6    							z+DatabaseSchemaEditor._alter_column_type_sqlFc	          	      s)  t  t |  ƒ j | | | | | | | | ƒ | j p: | j rG | j sZ | j r‹ | j r‹ |  j | | ƒ }	 |	 d  k	 r‹ |  j |	 ƒ q‹ n  | j r%| j p£ | j r%|  j | | j g d d ƒ}
 |  j	 | | j g d d ƒ} x? | D]4 } | |
 k rê |  j |  j
 |  j | | ƒ ƒ qê qê Wn  d  S)Nr   r   ÚindexT)r   r   Ú_alter_fieldr   r   r   ÚexecuteZ_create_index_namer"   Z_constraint_namesZ_delete_constraint_sqlZsql_delete_index)r   r   r-   r.   Zold_typer/   Zold_db_paramsZnew_db_paramsÚstrictr   Zindex_to_removeZindex_namesZ
index_name)r   r   r	   r1   l   s    
z!DatabaseSchemaEditor._alter_field)Ú__name__Ú
__module__Ú__qualname__r(   r*   r)   r+   Zsql_create_indexr   r   Zsql_delete_fkr
   r   r   r,   r1   r   r   )r   r	   r      s   7r   )r   Zdjango.db.backends.base.schemar   r   r   r   r   r	   Ú<module>   s   