î
ªÍ XÒ  ã               @   sJ   d  d l  m Z d  d l m Z d  d l m Z Gd d „  d e ƒ Z d S)é    )ÚGeometryField)ÚDatabaseSchemaEditor)Útruncate_namec                   sÁ   e  Z d  Z d Z d Z d Z d Z d Z ‡  f d d †  Z d d	 „  Z	 d
 ‡  f d d † Z
 ‡  f d d †  Z ‡  f d d †  Z ‡  f d d †  Z ‡  f d d †  Z d d „  Z d d „  Z ‡  S)ÚOracleGISSchemaEditora™  
        INSERT INTO USER_SDO_GEOM_METADATA
            ("TABLE_NAME", "COLUMN_NAME", "DIMINFO", "SRID")
        VALUES (
            %(table)s,
            %(column)s,
            MDSYS.SDO_DIM_ARRAY(
                MDSYS.SDO_DIM_ELEMENT('LONG', %(dim0)s, %(dim2)s, %(tolerance)s),
                MDSYS.SDO_DIM_ELEMENT('LAT', %(dim1)s, %(dim3)s, %(tolerance)s)
            ),
            %(srid)s
        )zPCREATE INDEX %(index)s ON %(table)s(%(column)s) INDEXTYPE IS MDSYS.SPATIAL_INDEXzDROP INDEX %(index)sz?DELETE FROM USER_SDO_GEOM_METADATA WHERE TABLE_NAME = %(table)sz\DELETE FROM USER_SDO_GEOM_METADATA WHERE TABLE_NAME = %(table)s AND COLUMN_NAME = %(column)sc                s&   t  t |  ƒ j | | Ž  g  |  _ d  S)N)Úsuperr   Ú__init__Úgeometry_sql)ÚselfÚargsÚkwargs)Ú	__class__© úZ/home/ubuntu/projects/ifolica/build/django/django/contrib/gis/db/backends/oracle/schema.pyr      s    zOracleGISSchemaEditor.__init__c             C   s   |  j  j j | ƒ S)N)Ú
connectionÚopsÚgeo_quote_name)r	   Únamer   r   r   r      s    z$OracleGISSchemaEditor.geo_quote_nameFc                s(  t  t |  ƒ j | | | ƒ } t | t ƒ r$| j j } |  j j |  j	 i |  j
 | ƒ d 6|  j
 | j ƒ d 6| j d d 6| j d d 6| j d d 6| j d	 d
 6| j d 6| j d 6ƒ | j r$|  j j |  j i |  j |  j | | ƒ ƒ d 6|  j | ƒ d 6|  j | j ƒ d 6ƒ q$n  | S)NÚtableÚcolumnr   Zdim0é   Zdim1é   Zdim2é   Zdim3Z	toleranceÚsridÚindex)r   r   Ú
column_sqlÚ
isinstancer   Ú_metaÚdb_tabler   ÚappendÚsql_add_geometry_metadatar   r   Z_extentZ
_tolerancer   Úspatial_indexÚsql_add_spatial_indexÚ
quote_nameÚ_create_spatial_index_name)r	   ÚmodelÚfieldÚinclude_defaultr   r   )r   r   r   r   "   s(    		
			z OracleGISSchemaEditor.column_sqlc                s$   t  t |  ƒ j | ƒ |  j ƒ  d  S)N)r   r   Úcreate_modelÚrun_geometry_sql)r	   r$   )r   r   r   r'   <   s    z"OracleGISSchemaEditor.create_modelc                sD   t  t |  ƒ j | ƒ |  j |  j i |  j | j j ƒ d 6ƒ d  S)Nr   )r   r   Údelete_modelÚexecuteÚ!sql_clear_geometry_table_metadatar   r   r   )r	   r$   )r   r   r   r)   @   s    z"OracleGISSchemaEditor.delete_modelc                s'   t  t |  ƒ j | | ƒ |  j ƒ  d  S)N)r   r   Ú	add_fieldr(   )r	   r$   r%   )r   r   r   r,   F   s    zOracleGISSchemaEditor.add_fieldc                s¨   t  | t ƒ r‹ |  j |  j i |  j | j j ƒ d 6|  j | j ƒ d 6ƒ | j r‹ |  j |  j	 i |  j
 |  j | | ƒ ƒ d 6ƒ q‹ n  t t |  ƒ j | | ƒ d  S)Nr   r   r   )r   r   r*   Ú!sql_clear_geometry_field_metadatar   r   r   r   r    Úsql_drop_spatial_indexr"   r#   r   r   Úremove_field)r	   r$   r%   )r   r   r   r/   J   s    	'z"OracleGISSchemaEditor.remove_fieldc             C   s.   x |  j  D] } |  j | ƒ q
 Wg  |  _  d  S)N)r   r*   )r	   Zsqlr   r   r   r(   V   s    z&OracleGISSchemaEditor.run_geometry_sqlc             C   s    t  d | j j | j f d ƒ S)Nz%s_%s_idé   )r   r   r   r   )r	   r$   r%   r   r   r   r#   [   s    z0OracleGISSchemaEditor._create_spatial_index_name)Ú__name__Ú
__module__Ú__qualname__r   r!   r.   r+   r-   r   r   r   r'   r)   r,   r/   r(   r#   r   r   )r   r   r      s   r   N)Z#django.contrib.gis.db.models.fieldsr   Z django.db.backends.oracle.schemar   Zdjango.db.backends.utilsr   r   r   r   r   r   Ú<module>   s   