3
©ôÁg   ã               @   sJ   d dl Z d dlmZ d dlmZ d dlmZ e jdƒZG dd„ deƒZ	dS )é    N)ÚGeometryField)ÚOperationalError)ÚDatabaseSchemaEditorzdjango.contrib.gisc                   sr   e Zd ZdZ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__© úi/var/www/tester-filtro-web/env/lib/python3.6/site-packages/django/contrib/gis/db/backends/mysql/schema.pyr      s    zMySQLGISSchemaEditor.__init__c                s"   t |tƒr| j rdS tƒ j|ƒS )NT)Ú
isinstancer   Z$_supports_limited_data_type_defaultsr   Úskip_default)r	   Úfield)r   r   r   r      s    z!MySQLGISSchemaEditor.skip_defaultFc                sn   t ƒ j|||ƒ}t|tƒrj|jrj|j rj| jjj}|j	j
}| jj| j|| j||ƒƒ||ƒ||jƒdœ ƒ |S )N)ÚindexÚtableÚcolumn)r   Ú
column_sqlr   r   Úspatial_indexÚnullÚ
connectionÚopsÚ
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 ƒ j|ƒ | jƒ  d S )N)r   Úcreate_modelÚcreate_spatial_indexes)r	   r    )r   r   r   r#   (   s    z!MySQLGISSchemaEditor.create_modelc                s   t ƒ j||ƒ | jƒ  d S )N)r   Ú	add_fieldr$   )r	   r    r   )r   r   r   r%   ,   s    zMySQLGISSchemaEditor.add_fieldc                s€   t |tƒrn|jrn| jjj}| j|| j||ƒƒ||jj	ƒdœ }y| j
|ƒ W n  tk
rl   tjd|ƒ Y nX tƒ j||ƒ 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"   Úsql)r   r   r   r*   0   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   r   r   A   s    z/MySQLGISSchemaEditor._create_spatial_index_namec             C   sJ   x>| j D ]4}y| j|ƒ W q tk
r:   tjd|ƒ Y qX qW 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	   r+   r   r   r   r$   D   s    z+MySQLGISSchemaEditor.create_spatial_indexes)F)Ú__name__Ú
__module__Ú__qualname__r   r&   r   r   r   r#   r%   r*   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
   
