U
    mf?                     @   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-siwebuq3/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&   5   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   