U
    Hai                     @   s,   d dl mZ d dlmZ G dd deZdS )    )	Statement)DatabaseSchemaEditorc                       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(%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-3jxiddxt/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 }| |j}|jdkrd| j| }n|jdkr|j	sd|| j
f }|dd krd	|jj|jf }n|d }t| j| || |jjd
| j |ddddS )N   r   Zgeodeticr   ZRASTER   z%s %sr	   z%s_%s_idz	 USING %s )r	   tableZusingcolumnsextra	conditioninclude)lenhasattrr   _create_index_sql
quote_namecolumnZ	geom_typerast_index_wrapperdimZ	geographygeom_index_ops_ndgetZ_metaZdb_tabler   Zsql_create_indexgeom_index_type)r   r   r   kwargsr   Zfield_columnZ
index_namer   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_typer   r    )r   r   Z	old_fieldZ	new_fieldnew_typeZ	sql_alterr   r
   r   r)   3   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.ddl_referencesr   Z$django.db.backends.postgresql.schemar   r   r
   r
   r
   r   <module>   s   