a
    5¤Xh$  ã                   @   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	g d¢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)s)Zgeometry_columnsZgeometry_columns_authZgeometry_columns_timeZgeometry_columns_statisticsc                    s   t ƒ j|i |¤Ž g | _d S ©N)ÚsuperÚ__init__Úgeometry_sql)ÚselfÚargsÚkwargs©Ú	__class__© úu/var/www/viveiro_mudafortebrasil/venv/lib/python3.9/site-packages/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yp   Y q60 q6tƒ j|fi |¤Ž 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              
      s6  ddl m} |jjD ]2}t||ƒr|  | j|  |¡|  |j¡dœ ¡ qt	ƒ  
||||¡ | jD ]@}z(|  | j||  |¡|  |¡dœ ¡ W q` tyž   Y q`0 q`|jjD ]†}t||ƒrî|  | j|  |¡|  |j¡|j|  |j¡|jdœ ¡ t|ddƒrª|  | j|  d||jf ¡|  d||jf ¡d	œ ¡ qªd 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      s,   ÿÿÿÿ ÿr   N)Z	django.dbr   Z!django.db.backends.sqlite3.schemar   r   r   r   r   r   Ú<module>   s   