î
ªÍ Xæ  ã               @   se   d  d l  Z  d  d l m Z d  d l m Z d  d l m Z e  j d ƒ Z Gd d „  d e ƒ Z	 d S)é    N)ÚGeometryField)ÚDatabaseSchemaEditor)ÚOperationalErrorzdjango.contrib.gisc                   s£   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 ‡  S)ÚMySQLGISSchemaEditorz7CREATE SPATIAL INDEX %(index)s ON %(table)s(%(column)s)z!DROP INDEX %(index)s ON %(table)sc                s&   t  t |  ƒ j | | Ž  g  |  _ d  S)N)Úsuperr   Ú__init__Úgeometry_sql)ÚselfÚargsÚkwargs)Ú	__class__© úY/home/ubuntu/projects/ifolica/build/django/django/contrib/gis/db/backends/mysql/schema.pyr      s    zMySQLGISSchemaEditor.__init__c                s%   t  t |  ƒ j | ƒ p$ t | t ƒ S)N)r   r   Úskip_defaultÚ
isinstancer   )r	   Úfield)r   r   r   r      s    z!MySQLGISSchemaEditor.skip_defaultFc                s¯   t  t |  ƒ j | | | ƒ } t | t ƒ r« | j r« | j r« |  j j j	 } | j
 j } |  j j |  j i | |  j | | ƒ ƒ d 6| | ƒ d 6| | j ƒ d 6ƒ n  | S)NÚindexÚtableÚcolumn)r   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  t |  ƒ j | ƒ |  j ƒ  d  S)N)r   r   Úcreate_modelÚcreate_spatial_indexes)r	   r    )r   r   r   r#   (   s    z!MySQLGISSchemaEditor.create_modelc                s'   t  t |  ƒ j | | ƒ |  j ƒ  d  S)N)r   r   Ú	add_fieldr$   )r	   r    r   )r   r   r   r%   ,   s    zMySQLGISSchemaEditor.add_fieldc                s¶   t  | t ƒ r™ | j r™ |  j j j } |  j i | |  j | | ƒ ƒ d 6| | j j	 ƒ d 6} y |  j
 | ƒ Wq™ t k
 r• t j d | ƒ Yq™ Xn  t t |  ƒ j | | ƒ d  S)Nr   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   r   Ú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   sW   xG |  j  D]< } y |  j | ƒ Wq
 t k
 rE t j d | ƒ Yq
 Xq
 Wg  |  _  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)Ú__name__Ú
__module__Ú__qualname__r   r&   r   r   r   r#   r%   r*   r   r$   r   r   )r   r   r   
   s   r   )
ÚloggingZ#django.contrib.gis.db.models.fieldsr   Zdjango.db.backends.mysql.schemar   Zdjango.db.utilsr   Ú	getLoggerr(   r   r   r   r   r   Ú<module>   s
   