U
    5øi  ã                   @   s0   d dl mZ d dlmZmZ G dd„ deƒZdS )é    )ÚDatabaseSchemaEditor)ÚColÚFuncc                       sV   e Zd ZdZdZdZdZdZdd„ Z‡ fdd	„Z	d
dœ‡ fdd„
Z
‡ fdd„Z‡  ZS )ÚPostGISSchemaEditorZGISTZGIST_GEOMETRY_OPS_NDzST_ConvexHull(%(expressions)s)zLALTER COLUMN %(column)s TYPE %(type)s USING ST_Force3D(%(column)s)::%(type)szLALTER COLUMN %(column)s TYPE %(type)s USING ST_Force2D(%(column)s)::%(type)sc                 C   s   | j j |¡S )N)Ú
connectionÚopsÚgeo_quote_name)ÚselfÚname© r   úQ/tmp/pip-unpacked-wheel-gcyiijx6/django/contrib/gis/db/backends/postgis/schema.pyr      s    z"PostGISSchemaEditor.geo_quote_namec                    s   t |ddƒrdS tƒ  ||¡S )NZspatial_indexFT)ÚgetattrÚsuperÚ_field_should_be_indexed)r	   ÚmodelÚfield©Ú	__class__r   r   r      s    z,PostGISSchemaEditor._field_should_be_indexedN)Úfieldsc                   sÈ   |d ks"t |ƒdks"t|d dƒs:tƒ j|fd|i|—ŽS |d }d }d }|jdkrnttd |ƒ| jd�}d }n|jdkr†|j	s†| j
g}| d¡}|sª|  |jj|jgd	¡}tƒ j|||d
| j ||d�S )Né   r   Zgeodeticr   ZRASTER)Útemplateé   r
   Z_idz	 USING %s)r   r
   ZusingÚ	opclassesÚexpressions)ÚlenÚhasattrr   Ú_create_index_sqlZ	geom_typer   r   Úrast_index_templateÚdimZ	geographyÚgeom_index_ops_ndÚgetZ_create_index_nameZ_metaZdb_tableÚcolumnÚgeom_index_type)r	   r   r   Úkwargsr   r   r   r
   r   r   r   r      s*    "

úz%PostGISSchemaEditor._create_index_sqlc                    s‚   t |dƒrt |dƒs&tƒ  ||||¡S |jdkrB|jdkrB| j}n"|jdkr^|jdkr^| j}n| j}||  |j¡|dœ g fg fS )z6
        Special case when dimension changed.
        r   r   é   )r!   Útype)	r   r   Ú_alter_column_type_sqlr   Úsql_alter_column_to_3dÚsql_alter_column_to_2dZsql_alter_column_typeZ
quote_namer!   )r	   ÚtableZ	old_fieldZ	new_fieldÚnew_typeZ	sql_alterr   r   r   r&   1   s    
þûøz*PostGISSchemaEditor._alter_column_type_sql)Ú__name__Ú
__module__Ú__qualname__r"   r   r   r'   r(   r   r   r   r&   Ú__classcell__r   r   r   r   r      s   r   N)Z$django.db.backends.postgresql.schemar   Zdjango.db.models.expressionsr   r   r   r   r   r   r   Ú<module>   s   