
 X                 @   s:   d  d l  m Z d  d l m Z Gd d   d e  Z d S)    )BaseDatabaseSchemaEditor)NOT_PROVIDEDc                   s   e  Z d  Z d Z d Z d Z d Z d Z d Z d Z	 d Z
 d	 Z d
 Z d d   Z d d   Z   f d d   Z   f d d   Z   f d d   Z d d   Z   f d d   Z   f d d   Z   S)DatabaseSchemaEditorz+RENAME TABLE %(old_table)s TO %(new_table)szMODIFY %(column)s %(type)s NULLz#MODIFY %(column)s %(type)s NOT NULLzMODIFY %(column)s %(type)szCALTER TABLE %(table)s CHANGE %(old_column)s %(new_column)s %(type)sz)ALTER TABLE %(table)s DROP INDEX %(name)sz/ALTER TABLE %(table)s DROP FOREIGN KEY %(name)sz DROP INDEX %(name)s ON %(table)szGALTER TABLE %(table)s ADD CONSTRAINT %(name)s PRIMARY KEY (%(columns)s)z&ALTER TABLE %(table)s DROP PRIMARY KEYc             C   s"   d d  l  } | j | | j j  S)Nr   )ZMySQLdb.convertersescapeZ
convertersZconversions)selfvalueZMySQLdb r   M/home/ubuntu/projects/ifolica/build/django/django/db/backends/mysql/schema.pyquote_value   s    z DatabaseSchemaEditor.quote_valuec          	   C   s.   | j  |  j  } | d k	 o- | j   d
 k S)z
        MySQL doesn't accept default values for TEXT and BLOB types, and
        implicitly treats these columns as nullable.
        Ntinyblobblob
mediumbloblongblobtinytexttext
mediumtextlongtext>   textr   r   r   r   r   r   r   )db_type
connectionlower)r   fieldr   r   r   r	   skip_default   s
    	 z!DatabaseSchemaEditor.skip_defaultc                s   t  t |   j | |  |  j |  r | j d  t f k r |  j |  } |  j d i |  j | j	 j
  d 6|  j | j  d 6| g  n  d  S)Nz%UPDATE %(table)s SET %(column)s = %%stablecolumn)superr   	add_fieldr   defaultr   effective_defaultexecuteZ
quote_name_metadb_tabler   )r   modelr   r   )	__class__r   r	   r   *   s    $zDatabaseSchemaEditor.add_fieldc                sw   t  t |   j | |  } |  j j j |  j j   | j j  } | d k rs | rs | j	   d k rs | j
 rs d S| S)NZInnoDB
ForeignKeyF)r   r   _field_should_be_indexedr   ZintrospectionZget_storage_enginecursorr    r!   get_internal_typeZdb_constraint)r   r"   r   Zcreate_indexZstorage)r#   r   r	   r%   6   s    	z-DatabaseSchemaEditor._field_should_be_indexedc                s   | j  j | d  } | j   d k rt |  j | | j g d d } | st |  j |  j | | g d d  qt n  t t |   j	 | | |  S)a  
        MySQL can remove an implicit FK index on a field when that field is
        covered by another index like a unique_together. "covered" here means
        that the more complex index starts like the simpler one.
        http://bugs.mysql.com/bug.php?id=37910 / Django ticket #24757
        We check here before removing the [unique|index]_together if we have to
        recreate a FK index.
        r   r$   indexTsuffix )
r    	get_fieldr'   Z_constraint_namesr   r   Z_create_index_sqlr   r   _delete_composed_index)r   r"   fieldsargsZfirst_fieldZconstraint_names)r#   r   r	   r,   E   s    	(z+DatabaseSchemaEditor._delete_composed_indexc             C   s$   | j  r | d 7} n
 | d 7} | S)zt
        Keep the null property of the old field. If it has changed, it will be
        handled separately.
        z NULLz	 NOT NULL)null)r   r   new_typer   r   r	   _set_field_new_type_null_statusU   s    	
z4DatabaseSchemaEditor._set_field_new_type_null_statusc                s1   |  j  | |  } t t |   j | | | |  S)N)r1   r   r   _alter_column_type_sql)r   r   	old_field	new_fieldr0   )r#   r   r	   r2   `   s    z+DatabaseSchemaEditor._alter_column_type_sqlc                s1   |  j  | |  } t t |   j | | | |  S)N)r1   r   r   _rename_field_sql)r   r   r3   r4   r0   )r#   r   r	   r5   d   s    z&DatabaseSchemaEditor._rename_field_sql)__name__
__module____qualname__Zsql_rename_tableZsql_alter_column_nullZsql_alter_column_not_nullZsql_alter_column_typeZsql_rename_columnZsql_delete_uniqueZsql_delete_fkZsql_delete_indexZsql_create_pkZsql_delete_pkr
   r   r   r%   r,   r1   r2   r5   r   r   )r#   r	   r      s$   r   N)Zdjango.db.backends.base.schemar   Zdjango.db.modelsr   r   r   r   r   r	   <module>   s   