U
    f$                     @   s,   d dl mZ d dlmZ G dd deZdS )    )DatabaseError)DatabaseSchemaEditorc                       s   e Zd ZdZdZdZdZdZdZdZ	dd	d
dgZ
 fddZdd Zd  fdd	Zdd Z fddZ fddZ fddZ fddZd! fdd	Z  ZS )"SpatialiteSchemaEditorz[SELECT AddGeometryColumn(%(table)s, %(column)s, %(srid)s, %(geom_type)s, %(dim)s, %(null)s)z0SELECT CreateSpatialIndex(%(table)s, %(column)s)z#DROP TABLE idx_%(table)s_%(column)szUSELECT RecoverGeometryColumn(%(table)s, %(column)s, %(srid)s, %(geom_type)s, %(dim)s)z3SELECT DiscardGeometryColumn(%(table)s, %(column)s)z9DELETE FROM %(geom_table)s WHERE f_table_name = %(table)szYUPDATE %(geom_table)s SET f_table_name = %(new_table)s WHERE f_table_name = %(old_table)sZgeometry_columnsZgeometry_columns_authZgeometry_columns_timeZgeometry_columns_statisticsc                    s   t  j|| g | _d S N)super__init__geometry_sql)selfargskwargs	__class__ T/tmp/pip-unpacked-wheel-_jot26k8/django/contrib/gis/db/backends/spatialite/schema.pyr       s    zSpatialiteSchemaEditor.__init__c                 C   s   | j j|S r   )
connectionopsgeo_quote_name)r	   namer   r   r   r   $   s    z%SpatialiteSchemaEditor.geo_quote_nameFc              
      s   ddl m} t||s&t |||S | j| j| |j	j
| |j|j| |j|jt|j d  |jr| j| j| |j	j
| |jd  dS )Nr   GeometryField)tablecolumnsrid	geom_typedimnullr   r   )NN)django.contrib.gis.db.modelsr   
isinstancer   
column_sqlr   appendsql_add_geometry_columnr   _metadb_tabler   r   r   r   intr   spatial_indexsql_add_spatial_index
quote_name)r	   modelfieldinclude_defaultr   r   r   r   r   '   s.    




z!SpatialiteSchemaEditor.column_sqlc                 C   sH   |  | j| |jj| |jd  |  | j|jj|jd  d S )Nr   )executesql_remove_geometry_metadatar'   r"   r#   r   sql_drop_spatial_index)r	   r(   r)   r   r   r   remove_geometry_metadataD   s    
z/SpatialiteSchemaEditor.remove_geometry_metadatac                    s,   t  | | jD ]}| | qg | _d S r   )r   create_modelr   r+   )r	   r(   sqlr   r   r   r/   T   s    
z#SpatialiteSchemaEditor.create_modelc              	      s   ddl m} |jjD ]}t||r| || q| jD ]>}z$| | j|| 	|jj
d  W q6 tk
rr   Y q6X q6t j|f| d S )Nr   r   )
geom_tabler   )r   r   r"   local_fieldsr   r.   geometry_tablesr+   sql_discard_geometry_columnsr'   r#   r   r   delete_model)r	   r(   r   r   r)   r1   r   r   r   r5   [   s     

z#SpatialiteSchemaEditor.delete_modelc                    sR   ddl m} t||r@| || | jD ]}| | q(g | _nt || d S )Nr   r   )r   r   r   r   r   r+   r   	add_field)r	   r(   r)   r   r0   r   r   r   r6   p   s    

z SpatialiteSchemaEditor.add_fieldc                    s8   ddl m} t||r&| j||d nt || d S )Nr   r   )Zdelete_field)r   r   r   Z_remake_tabler   remove_field)r	   r(   r)   r   r   r   r   r7   |   s    
z#SpatialiteSchemaEditor.remove_fieldTc              
      s8  ddl m} |jjD ]2}t||r| | j| || |jd  qt	 
|||| | jD ]B}z(| | j|| || |d  W q` tk
r   Y q`X q`|jjD ]}t||r| | j| || |j|j| |j|jd  t|ddr| | j| d||jf | d||jf d	  qd S )
Nr   r   r   )r1   	old_table	new_table)r   r   r   r   r   r%   Fz	idx_%s_%s)r8   r9   )r   r   r"   r2   r   r+   r,   r'   r   r   alter_db_tabler3   sql_update_geometry_columnsr   sql_recover_geometry_metadatar   r   r   r   getattrZsql_rename_table)r	   r(   Zold_db_tableZnew_db_tableZdisable_constraintsr   r)   r1   r   r   r   r:      s^    






z%SpatialiteSchemaEditor.alter_db_table)F)T)__name__
__module____qualname__r!   r&   r-   r<   r,   r4   r;   r3   r   r   r   r.   r/   r5   r6   r7   r:   __classcell__r   r   r   r   r      s4    r   N)Z	django.dbr   Z!django.db.backends.sqlite3.schemar   r   r   r   r   r   <module>   s   