U
    5øi  ã                   @   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 G d
d„ deeƒZdS )é    )Úmodels)Ú
WKTAdapter)ÚBaseSpatialOperations)ÚSpatialOperator)ÚGEOSGeometryBase)Úwkb_r)ÚDistance)ÚDatabaseOperations)Úcached_propertyc                   @   s�   e Zd ZdZdZeZedd„ ƒZedd„ ƒ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 )ÚMySQLOperationsÚmysqlZST_c                 C   s   | j jS ©N©Ú
connectionÚmysql_is_mariadb©Úself© r   úS/tmp/pip-unpacked-wheel-gcyiijx6/django/contrib/gis/db/backends/mysql/operations.pyÚmariadb   s    zMySQLOperations.mariadbc                 C   s
   | j j S r   r   r   r   r   r   r      s    zMySQLOperations.mysqlc                 C   s
   | j d S )NzAsBinary(%s)©Úgeom_func_prefixr   r   r   r   Úselect   s    zMySQLOperations.selectc                 C   s
   | j d S )NZGeomFromTextr   r   r   r   r   Ú	from_text    s    zMySQLOperations.from_textc                 C   sˆ   t dd�t dd�t dd�t dd�t dd�t dd�t dd�t dd�t d	d�t d
d�t dd�t dd�t dd�dœ}| jjr„t dd�|d< |S )NZMBRContains)ÚfuncZMBROverlapsZ	MBRWithinZST_ContainsZ
ST_CrossesZST_DisjointZ	ST_EqualsZST_IntersectsZST_OverlapsZ
ST_TouchesZ	ST_Within)Z
bbcontainsZ
bboverlapsZ	containedÚcontainsZcrossesZdisjointÚequalsÚexactZ
intersectsÚoverlapsZsame_asZtouchesZwithinZ	ST_RelateZrelate)r   r   r   )r   Ú	operatorsr   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^| d¡ | ddh¡ | j jdk rz| d¡ n| j jdk rz| 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   ÚremoveÚupdateZmysql_versionÚadd)r   Úunsupportedr   r   r   Úunsupported_functions>   s4                 ü
z%MySQLOperations.unsupported_functionsc                 C   s   |j S r   )Z	geom_type)r   Úfr   r   r   Úgeo_db_typeO   s    zMySQLOperations.geo_db_typec                 C   sJ   |d }t |tƒr@| | j¡r&tdƒ‚t|t | | 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_distanceR   s    
ÿzMySQLOperations.get_distancec                    s8   t ƒ j‰|jj‰ˆdkrd ‰|jj‰ ‡ ‡‡fdd„}|S )Néÿÿÿÿc                    s,   | d k	r(t ˆt| ƒƒˆ ƒ}ˆr$ˆ|_|S d S r   )r   Ú
memoryviewÚsrid)r0   Ú
expressionr   Zgeom©Ú
geom_classÚreadr4   r   r   Ú	converterf   s
    z9MySQLOperations.get_geometry_converter.<locals>.converter)r   r8   Zoutput_fieldr4   r7   )r   r5   r9   r   r6   r   Úget_geometry_converter_   s    z&MySQLOperations.get_geometry_converterN)Ú__name__Ú
__module__Ú__qualname__Únamer   r   ZAdapterr
   r   r   r   r   r    r   ZCollectZExtentZExtent3DZMakeLineÚUnionZdisallowed_aggregatesr*   r,   r1   r:   r   r   r   r   r      s0   




   þ
r   N)Zdjango.contrib.gis.dbr   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.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   