U
    mÇf¦  ã                   @   sJ   d dl Z d dlmZ d dlmZ d dlmZ e  d¡ZG dd„ deƒZ	dS )é    N)ÚGeometryField)ÚOperationalError)ÚDatabaseSchemaEditorzdjango.contrib.gisc                       s~   e Zd ZdZdZ‡ fdd„Z‡ fdd„Z‡ fdd„Zd‡ fd
d„	Z‡ fdd„Z	‡ fdd„Z
‡ fdd„Zdd„ Zdd„ Z‡  ZS )ÚMySQLGISSchemaEditorz7CREATE SPATIAL INDEX %(index)s ON %(table)s(%(column)s)z!DROP INDEX %(index)s ON %(table)sc                    s   t ƒ j||Ž g | _d S ©N)ÚsuperÚ__init__Úgeometry_sql)ÚselfÚargsÚkwargs©Ú	__class__© úO/tmp/pip-unpacked-wheel-siwebuq3/django/contrib/gis/db/backends/mysql/schema.pyr      s    zMySQLGISSchemaEditor.__init__c                    s    t |tƒr| jsdS tƒ  |¡S )NT)Ú
isinstancer   Z$_supports_limited_data_type_defaultsr   Úskip_default)r
   Úfieldr   r   r   r      s    ÿþz!MySQLGISSchemaEditor.skip_defaultc                    s,   t || jjjƒr tƒ  t|ƒ¡S tƒ  |¡S r   )r   Ú
connectionÚopsZAdapterr   Úquote_valueÚstr)r
   Úvaluer   r   r   r      s    z MySQLGISSchemaEditor.quote_valueFc                    sl   t ƒ  |||¡}t|tƒrh|jrh|jsh| jjj}|j	j
}| j | j||  ||¡ƒ||ƒ||jƒdœ ¡ |S )N)ÚindexÚtableÚcolumn)r   Ú
column_sqlr   r   Úspatial_indexÚnullr   r   Ú
quote_nameÚ_metaÚdb_tabler	   ÚappendÚsql_add_spatial_indexÚ_create_spatial_index_namer   )r
   Úmodelr   Úinclude_defaultr   Úqnr!   r   r   r   r   !   s    
ýÿÿzMySQLGISSchemaEditor.column_sqlc                    s   t ƒ  |¡ |  ¡  d S r   )r   Úcreate_modelÚcreate_spatial_indexes)r
   r%   r   r   r   r(   1   s    z!MySQLGISSchemaEditor.create_modelc                    s   t ƒ  ||¡ |  ¡  d S r   )r   Ú	add_fieldr)   ©r
   r%   r   r   r   r   r*   5   s    zMySQLGISSchemaEditor.add_fieldc                    s€   t |tƒrn|jrn| jjj}| j||  ||¡ƒ||jj	ƒdœ }z|  
|¡ W n  tk
rl   t d|¡ Y nX tƒ  ||¡ d S )N)r   r   z`Couldn't remove spatial index: %s (may be expected if your storage engine doesn't support them).)r   r   r   r   r   r   Úsql_drop_spatial_indexr$   r    r!   Úexecuter   ÚloggerÚerrorr   Úremove_field)r
   r%   r   r'   Úsqlr   r   r   r0   9   s    

þý
z!MySQLGISSchemaEditor.remove_fieldc                 C   s   d|j j|jf S )Nz%s_%s_id)r    r!   r   r+   r   r   r   r$   K   s    z/MySQLGISSchemaEditor._create_spatial_index_namec              	   C   sF   | j D ]4}z|  |¡ W q tk
r8   t d|¡ Y qX qg | _ d S )NzXCannot create SPATIAL INDEX %s. Only MyISAM and (as of MySQL 5.7.5) InnoDB support them.)r	   r-   r   r.   r/   )r
   r1   r   r   r   r)   N   s    
ýz+MySQLGISSchemaEditor.create_spatial_indexes)F)Ú__name__Ú
__module__Ú__qualname__r#   r,   r   r   r   r   r(   r*   r0   r$   r)   Ú__classcell__r   r   r   r   r   
   s   
r   )
ÚloggingZdjango.contrib.gis.db.modelsr   Z	django.dbr   Zdjango.db.backends.mysql.schemar   Ú	getLoggerr.   r   r   r   r   r   Ú<module>   s
   
