B
    ¥0H[¶  ã               @   s,   d dl mZ d dlmZ G dd„ deƒZdS )é    )ÚDatabaseSchemaEditor)ÚDatabaseErrorc                   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__© útC:\Users\HIRONO~1\AppData\Local\Temp\pip-install-6bm3nxem\django\django\contrib\gis\db\backends\spatialite\schema.pyr      s    zSpatialiteSchemaEditor.__init__c             C   s   | j j |¡S )N)Ú
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.models.fieldsr   Ú
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 )N)r   r   )ÚexecuteÚsql_remove_geometry_metadatar#   r   r   r   Úsql_drop_spatial_index)r   r$   r%   r   r   r   Úremove_geometry_metadata?   s    z/SpatialiteSchemaEditor.remove_geometry_metadatac                s0   t ƒ  |¡ x| jD ]}|  |¡ qW g | _d S )N)r   Úcreate_modelr   r'   )r   r$   Úsql)r   r   r   r+   M   s    z#SpatialiteSchemaEditor.create_modelc          	      s’   ddl m} x&|jjD ]}t||ƒr|  ||¡ qW xH| jD ]>}y$|  | j||  	|jj
¡dœ ¡ W q< tk
rx   Y q<X q<W tƒ 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%   r-   )r   r   r   r1   T   s    

z#SpatialiteSchemaEditor.delete_modelc                sV   ddl m} t||ƒrD|  ||¡ x| jD ]}|  |¡ q*W g | _ntƒ  ||¡ d S )Nr   )r   )r   r   r   r   r   r'   r   Ú	add_field)r   r$   r%   r   r,   )r   r   r   r2   g   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   r3   r   s    
z#SpatialiteSchemaEditor.remove_fieldTc          
      sD  ddl m} x>|jjD ]2}t||ƒr|  | j|  |¡|  |j¡dœ ¡ qW t	ƒ  
||||¡ xL| jD ]B}y(|  | j||  |¡|  |¡dœ ¡ W qf tk
r¦   Y qfX qfW x’|jjD ]†}t||ƒrú|  | j|  |¡|  |j¡|j|  |j¡|jdœ ¡ t|ddƒr¶|  | j|  d||jf ¡|  d||jf ¡d	œ ¡ q¶W d S )
Nr   )r   )r   r   )r-   Ú	old_tableÚ	new_table)r   r   r   r   r   r!   Fz	idx_%s_%s)r4   r5   )r   r   r   r.   r   r'   r(   r#   r   r   Úalter_db_tabler/   Ú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%   r-   )r   r   r   r6   ~   s:    




z%SpatialiteSchemaEditor.alter_db_table)F)T)Ú__name__Ú
__module__Ú__qualname__r   r"   r)   r8   r(   r0   r7   r/   r   r   r   r*   r+   r1   r2   r3   r6   Ú__classcell__r   r   )r   r   r      s(   r   N)Z!django.db.backends.sqlite3.schemar   Zdjango.db.utilsr   r   r   r   r   r   Ú<module>   s   