
vÅÏ^è  ã               @   s­   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 Gd
 d „  d e e ƒ Z d S)é    )Ú
WKTAdapter)ÚBaseSpatialOperations)ÚSpatialOperator)Ú
aggregates)ÚGEOSGeometryBase)Úwkb_r)ÚDistance)ÚDatabaseOperations)Úcached_propertyc               @   s¸   e  Z d  Z d Z d Z d Z e Z e d d „  ƒ Z	 e d d „  ƒ Z
 e d d	 „  ƒ Z e j e j e j e j e j f Z e d
 d „  ƒ Z d d „  Z d d „  Z d d „  Z d S)ÚMySQLOperationsTÚmysqlZST_c             C   s   |  j  d S)NzAsBinary(%s))Úgeom_func_prefix)Úself© r   úQ/tmp/pip-build-8lau8j11/django/django/contrib/gis/db/backends/mysql/operations.pyÚselect   s    zMySQLOperations.selectc             C   s   |  j  d S)NZGeomFromText)r   )r   r   r   r   Ú	from_text   s    zMySQLOperations.from_textc             C   sÇ   d t  d d ƒ d t  d d ƒ d t  d d ƒ d t  d d	 ƒ d
 t  d d ƒ d t  d d ƒ d t  d d ƒ d t  d d ƒ d t  d d ƒ d t  d d ƒ d t  d d ƒ d t  d d ƒ d t  d d ƒ i S)NZ
bbcontainsÚfuncZMBRContainsZ
bboverlapsZMBROverlapsZ	containedZ	MBRWithinÚcontainsZST_ContainsZcrossesZ
ST_CrossesZdisjointZST_DisjointÚequalsZ	ST_EqualsÚexactZ
intersectsZST_IntersectsÚoverlapsZST_OverlapsZsame_asZtouchesZ
ST_TouchesZwithinZ	ST_Within)r   )r   r   r   r   Úgis_operators   s    zMySQLOperations.gis_operatorsc             C   s³   d d d d d d d d d	 d
 d d d d d d d h } |  j  j r‡ | j d ƒ | j d d h ƒ |  j  j d k  r¯ | j d ƒ n( |  j  j d k  r¯ | j d d d h ƒ | S)NZAsGMLZAsKMLZAsSVGZAzimuthZBoundingCircleZForcePolygonCWZGeometryDistanceZLineLocatePointZ	MakeValidZMemSizeZ	PerimeterZPointOnSurfaceZReverseZScaleZ
SnapToGridZ	TransformZ	TranslateZGeoHashZIsValidé
   é   é   Z	AsGeoJSONé   é   )r   r   r   )r   r   r   )Ú
connectionZmysql_is_mariadbÚremoveÚupdateZmysql_versionÚadd)r   Zunsupportedr   r   r   Úunsupported_functions5   s    	z%MySQLOperations.unsupported_functionsc             C   s   | j  S)N)Z	geom_type)r   Úfr   r   r   Úgeo_db_typeF   s    zMySQLOperations.geo_db_typec             C   sk   | d } t  | t ƒ r^ | j |  j ƒ r7 t d ƒ ‚ t | t j | j |  j ƒ ƒ ƒ } n | } | g S)Nr   zMOnly numeric values of degree units are allowed on geodetic distance queries.)Ú
isinstancer   Zgeodeticr   Ú
ValueErrorÚgetattrZunit_attnameZ
units_name)r   r#   ÚvalueZlookup_typeZ
dist_paramr   r   r   Úget_distanceI   s    
	'zMySQLOperations.get_distancec                sR   t  ƒ  j ‰ | j j ‰ ˆ d k r* d  ‰ | j j ‰  ‡  ‡ ‡ f d d †  } | S)Né   c                s>   |  d  k	 r: t  ˆ t |  ƒ ƒ ˆ  ƒ } ˆ r6 ˆ | _ | Sd  S)N)r   Ú
memoryviewÚsrid)r(   Ú
expressionr   Zgeom)Ú
geom_classÚreadr,   r   r   Ú	converter]   s
    	z9MySQLOperations.get_geometry_converter.<locals>.converteréÿÿÿÿ)r   r/   Zoutput_fieldr,   r.   )r   r-   r0   r   )r.   r/   r,   r   Úget_geometry_converterV   s    z&MySQLOperations.get_geometry_converterN)Ú__name__Ú
__module__Ú__qualname__r   Únamer   r   ZAdapterr
   r   r   r   r   ZCollectZExtentZExtent3DZMakeLineÚUnionZdisallowed_aggregatesr"   r$   r)   r2   r   r   r   r   r      s   r   N)Z+django.contrib.gis.db.backends.base.adapterr   Z.django.contrib.gis.db.backends.base.operationsr   Z$django.contrib.gis.db.backends.utilsr   Zdjango.contrib.gis.db.modelsr   Z django.contrib.gis.geos.geometryr   Z%django.contrib.gis.geos.prototypes.ior   Zdjango.contrib.gis.measurer   Z#django.db.backends.mysql.operationsr	   Zdjango.utils.functionalr
   r   r   r   r   r   Ú<module>   s   