
    VhQ"                         d Z ddlZddlmZ ddlmZ ddlmZ ddlm	Z	 ddl
mZmZ ddlmZ dd	lmZ dd
lmZ dZ G d de	      Z G d de	      Z G d de	      Z G d de	      Z G d dee      Zy)aO  
This module contains the spatial lookup types, and the `get_geo_where_clause`
routine for Oracle Spatial.

Please note that WKT support is broken on the XE version, and thus
this backend will not work on such platforms.  Specifically, XE lacks
support for an internal JVM, and Java libraries are required to use
the WKT constructors.
    N)models)BaseSpatialOperations)OracleSpatialAdapter)SpatialOperator)GEOSGeometryGEOSGeometryBase)wkb_r)Distance)DatabaseOperationsz0.05c                       e Zd ZdZy)SDOOperatorz#%(func)s(%(lhs)s, %(rhs)s) = 'TRUE'N__name__
__module____qualname__sql_template     `/home/dcms/DCMS/lib/python3.12/site-packages/django/contrib/gis/db/backends/oracle/operations.pyr   r      s    8Lr   r   c                       e Zd ZdZy)
SDODWithinz3SDO_WITHIN_DISTANCE(%(lhs)s, %(rhs)s, %%s) = 'TRUE'Nr   r   r   r   r   r      s    HLr   r   c                       e Zd Zdez  Zy)SDODisjointz@SDO_GEOM.RELATE(%%(lhs)s, 'DISJOINT', %%(rhs)s, %s) = 'DISJOINT'N)r   r   r   DEFAULT_TOLERANCEr   r   r   r   r   r   !   s    J
	 r   r   c                   (     e Zd ZdZd Z fdZ xZS )	SDORelatez6SDO_RELATE(%(lhs)s, %(rhs)s, 'mask=%(mask)s') = 'TRUE'c                     d}t        j                  d|d|dt         j                        }t        |t              r|j                  |      st        d|z        y )NzbTOUCH|OVERLAPBDYDISJOINT|OVERLAPBDYINTERSECT|EQUAL|INSIDE|COVEREDBY|CONTAINS|COVERS|ANYINTERACT|ONz^(z)(\+(z))*$zInvalid SDO_RELATE mask: "%s")recompileI
isinstancestrmatch
ValueError)selfargmasks
mask_regexs       r   check_relate_argumentzSDORelate.check_relate_argument+   sU    - 	 ZZeU CRTTJ
#s#:+;+;C+@<sBCC ,Ar   c                 >    |d   |d<   t         |   ||||d d       S )Nmask)superas_sql)r%   
connectionlookuptemplate_params
sql_params	__class__s        r   r.   zSDORelate.as_sql4   s,    ",R.w~j&/:cr?SSr   )r   r   r   r   r)   r.   __classcell__r3   s   @r   r   r   (   s    KLDT Tr   r   c                       e Zd ZdZdZej                  ej                  ej                  fZ	e
ZdZdZdZi dddd	d
dddddddddddddddddddddd d!d"d#d$d%d&d!d'd(d)d*d+d,Zd-Z ed./       ed0/       ed1/       e        ed2/       ed3/       ed3/       ed4/       ed3/       e        ed5/       ed6/       e       d7Zh d8Z fd9Zd: Zd; Zd< Z fd=Zd> Zd? Zd@ Z fdAZdB Z dC Z! xZ"S )DOracleOperationsoracleTSDO_AGGR_MBRSDO_AGGR_UNIONSDO_GEOMETRYAreazSDO_GEOM.SDO_AREA	AsGeoJSONzSDO_UTIL.TO_GEOJSONAsWKBzSDO_UTIL.TO_WKBGEOMETRYAsWKTzSDO_UTIL.TO_WKTGEOMETRYBoundingCirclezSDO_GEOM.SDO_MBCCentroidzSDO_GEOM.SDO_CENTROID
DifferencezSDO_GEOM.SDO_DIFFERENCEr
   zSDO_GEOM.SDO_DISTANCEEnvelopeSDO_GEOM_MBRFromWKBzSDO_UTIL.FROM_WKBGEOMETRYFromWKTzSDO_UTIL.FROM_WKTGEOMETRYIntersectionzSDO_GEOM.SDO_INTERSECTIONIsValidz'SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXTLengthzSDO_GEOM.SDO_LENGTHNumGeometrieszSDO_UTIL.GETNUMELEM	NumPointszSDO_UTIL.GETNUMVERTICES	PerimeterzSDO_GEOM.SDO_POINTONSURFACEzSDO_UTIL.REVERSE_LINESTRINGzSDO_GEOM.SDO_XORzSDO_CS.TRANSFORMzSDO_GEOM.SDO_UNION)PointOnSurfaceReverseSymDifference	TransformUnionzSDO_UTIL.TO_WKBGEOMETRY(%s)SDO_CONTAINS)funcSDO_COVEREDBY
SDO_COVERSSDO_OVERLAPBDYINTERSECT	SDO_EQUALSDO_OVERLAPS	SDO_TOUCH
SDO_INSIDE)contains	coveredbycoversdisjoint
intersectsequalsexactoverlapssame_asrelatetoucheswithindwithin>   AsKMLAsSVGScaleAzimuthGeoHashIsEmptyMemSize	MakeValid	Translate
SnapToGridClosestPointForcePolygonCWLineLocatePointGeometryDistancec                 >    t         |   |      j                         S N)r-   geo_quote_nameupper)r%   namer3   s     r   rx   zOracleOperations.geo_quote_name   s    w%d+1133r   c                 $   |rt        t        |j                                     }t        |j                        }|dk(  r|j
                  }|d   d d |d   d d }}n%|dk(  r|j                  d d }|}nt        d|z        |\  }}|\  }	}
|||	|
fS y )NPolygonr      Pointz0Unexpected geometry type returned for extent: %s)r   
memoryviewreadr"   	geom_typeshellcoords	Exception)r%   clobext_geomgtyper   llurxminyminxmaxymaxs              r   convert_extentzOracleOperations.convert_extent   s     $Jtyy{$;<H**+E	! q"1uQx|B'!__Ra(FN  JD$JD$$d++r   c                      y)z
        Return the geometry database type for Oracle. Unlike other spatial
        backends, no stored procedure is necessary and it's the same for all
        geometry types.
        zMDSYS.SDO_GEOMETRYr   )r%   fs     r   geo_db_typezOracleOperations.geo_db_type   s     $r   c                    |sg S |d   }t        |t              ra|j                  | j                        r|j                  }n;t        |t        j                  |j                  | j                                    }n|}|dk(  rd|z  }|gS )a  
        Return the distance parameters given the value and the lookup type.
        On Oracle, geometry columns with a geodetic coordinate system behave
        implicitly like a geography column, and thus meters will be used as
        the distance parameter on them.
        r   rg   zdistance=%s)r!   r
   geodeticr/   mgetattrunit_attname
units_name)r%   r   valuelookup_type
dist_params        r   get_distancezOracleOperations.get_distance   s     IaeX&zz$//*"WW
$800doo1NO
 J )#&3J|r   c                 ,    |yt         |   |||      S )NNULL)r-   get_geom_placeholder)r%   r   r   compilerr3   s       r   r   z%OracleOperations.get_geom_placeholder   s    =w+Auh??r   c                 d    |j                         dk(  rdn|j                         }t        | |      S )z8
        Return the spatial aggregate SQL name.
        unionunionagg)lowerr   )r%   agg_names     r   spatial_aggregate_namez'OracleOperations.spatial_aggregate_name   s-     "*!1W!<:(..BRtX&&r   c                     ddl m} |S )Nr   )OracleGeometryColumns),django.contrib.gis.db.backends.oracle.modelsr   )r%   r   s     r   geometry_columnsz!OracleOperations.geometry_columns   s    V$$r   c                     ddl m} |S )Nr   )OracleSpatialRefSys)r   r   )r%   r   s     r   spatial_ref_sysz OracleOperations.spatial_ref_sys   s    T""r   c                 2    |dk(  rg S t         |   ||      S )zrDrop out insert parameters for NULL placeholder. Needed for Oracle Spatial
        backend due to #10888.
        r   )r-   modify_insert_params)r%   placeholderparamsr3   s      r   r   z%OracleOperations.modify_insert_params   s$     & Iw+K@@r   c                     t               j                  |j                  j                  dk(  rd |j                  j                  fd}|S )Nr+   c                 r    | 4t         t        | j                                           }r|_        |S y rw   )r   r   r   srid)r   
expressionr/   geom
geom_classr   r   s       r   	converterz:OracleOperations.get_geometry_converter.<locals>.converter   s9     'Z

-E(F
S $DI	 !r   )r	   r   output_fieldr   r   )r%   r   r   r   r   r   s      @@@r   get_geometry_converterz'OracleOperations.get_geometry_converter   sI    w||&&++2:D,,77
	 r   c                      y)Nsq_mr   )r%   fields     r   get_area_att_for_fieldz'OracleOperations.get_area_att_for_field   s    r   )#r   r   r   rz   r8   r   CollectExtent3DMakeLinedisallowed_aggregatesr   Adapterextentr   	from_textfunction_namesselectr   r   r   r   gis_operatorsunsupported_functionsrx   r   r   r   r   r   r   r   r   r   r   r4   r5   s   @r   r7   r7   9   s   DF#^^V__fooN"GFHI#* 	* 	*	
 	, 	+ 	/ 	+ 	N 	. 	. 	3 	< 	' 	.  	.!" 	*#$ 80+'%-N< +F  ^4 o6<0M!*
 ;/+.^4K0+K0<0<!M&"40$6@
'%
#
A r   r7   )__doc__r   django.contrib.gis.dbr   .django.contrib.gis.db.backends.base.operationsr   -django.contrib.gis.db.backends.oracle.adapterr   $django.contrib.gis.db.backends.utilsr    django.contrib.gis.geos.geometryr   r   %django.contrib.gis.geos.prototypes.ior	   django.contrib.gis.measurer
   $django.db.backends.oracle.operationsr   r   r   r   r   r   r7   r   r   r   <module>r      ss    
 ( P N @ K 7 / C 9/ 9I I/ T T"~,.@ ~r   