ó
i4Vdc           @   s3  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 d d l m Z d d	 l m Z d d
 l m Z d d l m Z d Z d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e e f d „  ƒ  YZ d S(   sU  
 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.
iÿÿÿÿN(   t   BaseSpatialOperations(   t   OracleSpatialAdapter(   t   SpatialOperator(   t
   aggregates(   t   Geometry(   t   Distance(   t   Database(   t   DatabaseOperations(   t   sixs   0.05t   SDOOperatorc           B   s   e  Z d  Z RS(   s#   %(func)s(%(lhs)s, %(rhs)s) = 'TRUE'(   t   __name__t
   __module__t   sql_template(    (    (    s~   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/django/contrib/gis/db/backends/oracle/operations.pyR	      s   t   SDODistancec           B   s   e  Z d  e Z RS(   s;   SDO_GEOM.SDO_DISTANCE(%%(lhs)s, %%(rhs)s, %s) %%(op)s %%%%s(   R
   R   t   DEFAULT_TOLERANCER   (    (    (    s~   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/django/contrib/gis/db/backends/oracle/operations.pyR      s   t
   SDODWithinc           B   s   e  Z d  Z RS(   s3   SDO_WITHIN_DISTANCE(%(lhs)s, %(rhs)s, %%s) = 'TRUE'(   R
   R   R   (    (    (    s~   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/django/contrib/gis/db/backends/oracle/operations.pyR   "   s   t   SDODisjointc           B   s   e  Z d  e Z RS(   s@   SDO_GEOM.RELATE(%%(lhs)s, 'DISJOINT', %%(rhs)s, %s) = 'DISJOINT'(   R
   R   R   R   (    (    (    s~   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/django/contrib/gis/db/backends/oracle/operations.pyR   &   s   t	   SDORelatec           B   s    e  Z d  Z d „  Z d „  Z RS(   s6   SDO_RELATE(%(lhs)s, %(rhs)s, 'mask=%(mask)s') = 'TRUE'c         C   s_   d } t  j d | | f t  j ƒ } t | t j ƒ sH | j | ƒ r[ t d | ƒ ‚ n  d  S(   Nsb   TOUCH|OVERLAPBDYDISJOINT|OVERLAPBDYINTERSECT|EQUAL|INSIDE|COVEREDBY|CONTAINS|COVERS|ANYINTERACT|ONs   ^(%s)(\+(%s))*$s   Invalid SDO_RELATE mask: "%s"(   t   ret   compilet   It
   isinstanceR   t   string_typest   matcht
   ValueError(   t   selft   argt   maskst
   mask_regex(    (    s~   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/django/contrib/gis/db/backends/oracle/operations.pyt   check_relate_argument-   s    #c         C   s/   | j  ƒ  | d <t t |  ƒ j | | | | ƒ S(   Nt   mask(   t   popt   superR   t   as_sql(   R   t
   connectiont   lookupt   template_paramst
   sql_params(    (    s~   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/django/contrib/gis/db/backends/oracle/operations.pyR!   3   s    (   R
   R   R   R   R!   (    (    (    s~   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/django/contrib/gis/db/backends/oracle/operations.pyR   *   s   	t   OracleOperationsc           B   s­  e  Z d  Z e Z e j e j e j f Z	 e
 Z e Z d Z d Z d Z d Z d Z d Z d Z d Z d	 Z e Z d
 Z d Z d Z d Z d Z d Z i d d 6d d 6d d 6d d 6d d 6d d 6d d 6d	 d 6d d 6d
 d 6d d 6d d 6d d 6d d 6Z d Z i e d  d! ƒ d" 6e d  d# ƒ d$ 6e d  d% ƒ d& 6e  ƒ  d' 6e d  d( ƒ d) 6e d  d* ƒ d+ 6e d  d* ƒ d, 6e d  d- ƒ d. 6e d  d* ƒ d/ 6e! ƒ  d0 6e d  d1 ƒ d2 6e d  d3 ƒ d4 6e" d5 d6 ƒ d7 6e" d5 d8 ƒ d9 6e" d5 d: ƒ d; 6e" d5 d< ƒ d= 6e# ƒ  d> 6Z$ i dW d0 6Z& d? d@ dA dB dC dD dE dF dG dH dI dJ h Z' dK „  Z( dL „  Z) dM „  Z* dN „  Z+ dO „  Z, dP „  Z- dQ „  Z. dR „  Z/ dS „  Z0 dT „  Z1 dU „  Z2 dV „  Z3 RS(X   t   oracles   SDO_GEOM.SDO_AREAs   SDO_UTIL.TO_GMLGEOMETRYs   SDO_GEOM.SDO_CENTROIDs   SDO_GEOM.SDO_DIFFERENCEs   SDO_GEOM.SDO_DISTANCEt   SDO_AGGR_MBRs   SDO_GEOM.SDO_INTERSECTIONs   SDO_GEOM.SDO_LENGTHs   SDO_UTIL.GETNUMVERTICESs   SDO_GEOM.SDO_POINTONSURFACEs   SDO_UTIL.REVERSE_LINESTRINGs   SDO_GEOM.SDO_XORs   SDO_CS.TRANSFORMs   SDO_GEOM.SDO_UNIONt   SDO_AGGR_UNIONt   Areat   Centroidt
   DifferenceR   t   Intersectiont   Lengths   SDO_UTIL.GETNUMELEMt   NumGeometriest	   NumPointst	   Perimetert   PointOnSurfacet   Reverset   SymDifferencet	   Transformt   Unions   SDO_UTIL.TO_WKTGEOMETRY(%s)t   funct   SDO_CONTAINSt   containst   SDO_COVEREDBYt	   coveredbyt
   SDO_COVERSt   coverst   disjointt   SDO_OVERLAPBDYINTERSECTt
   intersectst	   SDO_EQUALt   equalst   exactt   SDO_OVERLAPSt   overlapst   same_ast   relatet	   SDO_TOUCHt   touchest
   SDO_INSIDEt   withint   opt   >t   distance_gts   >=t   distance_gtet   <t   distance_lts   <=t   distance_ltet   dwithint	   AsGeoJSONt   AsGMLt   AsKMLt   AsSVGt   BoundingCirclet   Envelopet   ForceRHRt   GeoHasht   MemSizet   Scalet
   SnapToGridt	   Translatec         C   s   t  t |  ƒ j | ƒ j ƒ  S(   N(   R    R&   t   geo_quote_namet   upper(   R   t   name(    (    s~   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/django/contrib/gis/db/backends/oracle/operations.pyR`   ‡   s    c      
   C   su   t  t |  ƒ j | ƒ } | j j ƒ  } d } | | k rL | j |  j ƒ n  t | j d ƒ rq | j |  j ƒ n  | S(   Nt
   PointFieldt   GeometryFieldt   LineStringFieldt   PolygonFieldt   MultiPointFieldt   MultiLineStringFieldt   MultiPolygonFieldt   GeometryCollectionFieldt	   GeomFieldt   GMLFieldt	   geom_type(
   Rc   Rd   Re   Rf   Rg   Rh   Ri   Rj   Rk   Rl   (	   R    R&   t   get_db_converterst   output_fieldt   get_internal_typet   appendt   convert_textfield_valuet   hasattrt   convert_geometry(   R   t
   expressiont
   converterst   internal_typet   geometry_fields(    (    s~   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/django/contrib/gis/db/backends/oracle/operations.pyRn   Š   s       c         C   s5   | r1 t  | ƒ } d | k r1 | d | _ q1 n  | S(   Nt   transformed_srid(   R   t   srid(   R   t   valueRu   R"   t   context(    (    s~   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/django/contrib/gis/db/backends/oracle/operations.pyRt   ™   s
    c         C   sÁ   | r¹ t  | j ƒ  | ƒ } t | j ƒ } | d k r_ | j } | d d  | d d  } } n2 | d k r | j d  } | } n t d | ƒ ‚ | \ } }	 | \ }
 } | |	 |
 | f Sd  Sd  S(   Nt   Polygoni    i   t   Points0   Unexpected geometry type returned for extent: %s(   R   t   readt   strRm   t   shellt   coordst	   Exceptiont   None(   R   t   clobRz   t   ext_geomt   gtypeR   t   llt   urt   xmint   ymint   xmaxt   ymax(    (    s~   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/django/contrib/gis/db/backends/oracle/operations.pyt   convert_extent    s    	 	c         C   s?   | r7 t  | t j ƒ r' | j ƒ  } n  t | | j ƒ Sd  Sd  S(   N(   R   R   t   LOBR   R   Rz   R„   (   R   R{   t	   geo_field(    (    s~   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/django/contrib/gis/db/backends/oracle/operations.pyt   convert_geom¶   s
    c         C   s   d S(   s»   
        Returns the geometry database type for Oracle.  Unlike other spatial
        backends, no stored procedure is necessary and it's the same for all
        geometry types.
        s   MDSYS.SDO_GEOMETRY(    (   R   t   f(    (    s~   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/django/contrib/gis/db/backends/oracle/operations.pyt   geo_db_type¾   s    c         C   sŽ   | s
 g  S| d } t  | t ƒ rh | j |  j ƒ rA | j } qn t | t j | j |  j ƒ ƒ ƒ } n | } | d k r‡ d | } n  | g S(   s  
        Returns 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.
        i    RS   s   distance=%s(   R   R   t   geodeticR"   t   mt   getattrt   unit_attnamet
   units_name(   R   R’   R{   t   lookup_typet
   dist_param(    (    s~   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/django/contrib/gis/db/backends/oracle/operations.pyt   get_distanceÆ   s    
'c         C   s±   | d k r d Sd „  } t | d ƒ rv | | | j ƒ rS d |  j | j f } n d } | j | ƒ \ } } | | S| | | j ƒ r¢ d |  j | j | j f Sd | j Sd S(	   sÑ   
        Provides a proper substitution value for Geometries that are not in the
        SRID of the field.  Specifically, this routine will substitute in the
        SDO_CS.TRANSFORM() function call.
        t   NULLc         S   s   |  j  | k S(   N(   Rz   (   t   valRz   (    (    s~   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/django/contrib/gis/db/backends/oracle/operations.pyt   transform_valueè   s    R!   s   %s(%%s, %s)s   %ss   %s(SDO_GEOMETRY(%%s, %s), %s)s   SDO_GEOMETRY(%%s, %s)N(   R„   Rs   Rz   t	   transformR   (   R   R’   R{   t   compilerRž   t   placeholdert   sqlt   _(    (    s~   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/django/contrib/gis/db/backends/oracle/operations.pyt   get_geom_placeholderß   s    	c         C   s1   | j  ƒ  d k r d n	 | j  ƒ  } t |  | ƒ S(   s9   
        Returns the spatial aggregate SQL name.
        t   uniont   unionagg(   t   lowerR–   (   R   t   agg_name(    (    s~   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/django/contrib/gis/db/backends/oracle/operations.pyt   spatial_aggregate_nameú   s    $c         C   s   d d l  m } | S(   Niÿÿÿÿ(   t   OracleGeometryColumns(   t,   django.contrib.gis.db.backends.oracle.modelsRª   (   R   Rª   (    (    s~   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/django/contrib/gis/db/backends/oracle/operations.pyt   geometry_columns  s    c         C   s   d d l  m } | S(   Niÿÿÿÿ(   t   OracleSpatialRefSys(   R«   R­   (   R   R­   (    (    s~   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/django/contrib/gis/db/backends/oracle/operations.pyt   spatial_ref_sys  s    c         C   s)   | d k r g  St  t |  ƒ j | | ƒ S(   sr   Drop out insert parameters for NULL placeholder. Needed for Oracle Spatial
        backend due to #10888.
        Rœ   (   R    R&   t   modify_insert_params(   R   R¡   t   params(    (    s~   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/django/contrib/gis/db/backends/oracle/operations.pyR¯   
  s    N(4   R
   R   Rb   t   TrueR'   R   t   Collectt   Extent3Dt   MakeLinet   disallowed_aggregatesR   t   Adaptert   Adaptort   areat   gmlt   centroidt
   differencet   distancet   extentt   intersectiont   lengtht
   num_pointst	   perimetert   point_on_surfacet   reverset   sym_differenceRŸ   R¥   R¦   t   function_namest   selectR	   R   R   R   R   t   gis_operatorsR„   t   truncate_paramst   unsupported_functionsR`   Rn   Rt   RŽ   R‘   R“   R›   R¤   R©   R¬   R®   R¯   (    (    (    s~   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/django/contrib/gis/db/backends/oracle/operations.pyR&   8   s   


											(   t   __doc__R   t.   django.contrib.gis.db.backends.base.operationsR    t-   django.contrib.gis.db.backends.oracle.adapterR   t$   django.contrib.gis.db.backends.utilsR   t   django.contrib.gis.db.modelsR   t#   django.contrib.gis.geometry.backendR   t   django.contrib.gis.measureR   t   django.db.backends.oracle.baseR   t$   django.db.backends.oracle.operationsR   t   django.utilsR   R   R	   R   R   R   R   R&   (    (    (    s~   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/django/contrib/gis/db/backends/oracle/operations.pyt   <module>	   s"   