o
    ˜¨Êh‚  ã                   @   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ÚmysqlÚST_c                 C   s   | j jS ©N©Ú
connectionÚmysql_is_mariadb©Úself© r   úa/var/www/html/env/lib/python3.10/site-packages/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      ó   
zMySQLOperations.mysqlc                 C   ó
   | j d S )NzAsBinary(%s)©Úgeom_func_prefixr   r   r   r   Úselect   r   zMySQLOperations.selectc                 C   r   )NÚGeomFromTextr   r   r   r   r   Ú	from_text   r   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rBt dd�|d< |S )NÚMBRContains)ÚfuncÚMBROverlapsÚ	MBRWithinÚST_ContainsÚ
ST_CrossesÚST_DisjointÚ	ST_EqualsÚST_IntersectsÚST_OverlapsÚ
ST_TouchesÚ	ST_Within)Ú
bbcontainsÚ
bboverlapsÚ	containedÚcontainsÚcrossesÚdisjointÚequalsÚexactÚ
intersectsÚoverlapsÚsame_asÚtouchesÚwithinÚ	ST_RelateÚrelate)r   r   r   )r   Ú	operatorsr   r   r   Úgis_operators"   s&   ÿñzMySQLOperations.gis_operatorsc                 C   sJ   h d£}| j jr| d¡ | ddh¡ |S | j jdk r#| h d£¡ |S )N>   ÚAsGMLÚAsKMLÚAsSVGÚScaleÚAzimuthÚMemSizeÚReverseÚ	MakeValidÚ	PerimeterÚ	TransformÚ	TranslateÚ
SnapToGridÚBoundingCircleÚForcePolygonCWÚPointOnSurfaceÚLineLocatePointÚGeometryDistancerI   ÚGeoHashÚIsValid)é   é   rN   >   rL   rM   Ú	AsGeoJSON)r   r   ÚremoveÚupdateÚmysql_version)r   Úunsupportedr   r   r   Úunsupported_functionsA   s   
þz%MySQLOperations.unsupported_functionsc                 C   s   |j S r   )Ú	geom_type)r   Úfr   r   r   Úgeo_db_type]   s   zMySQLOperations.geo_db_typec                 C   sN   |d }t |tƒr"| | j¡rtdƒ‚t|t | | j¡¡ƒ}|gS |}|gS )Nr   zMOnly numeric values of degree units are allowed on geodetic distance queries.)Ú
isinstancer   Úgeodeticr   Ú
ValueErrorÚgetattrÚunit_attnameÚ
units_name)r   rW   ÚvalueÚlookup_typeÚ
dist_paramr   r   r   Úget_distance`   s   
ÿÿÿzMySQLOperations.get_distancec                    s8   t ƒ j‰|jj‰ˆdkrd ‰|jj‰ ‡ ‡‡fdd„}|S )Néÿÿÿÿc                    s,   | d urt ˆt| ƒƒˆ ƒ}ˆrˆ|_|S d S r   )r   Ú
memoryviewÚsrid)r_   Ú
expressionr   Úgeom©Ú
geom_classÚreadre   r   r   Ú	converterv   s   üz9MySQLOperations.get_geometry_converter.<locals>.converter)r   rj   Úoutput_fieldre   ri   )r   rf   rk   r   rh   r   Úget_geometry_convertero   s   z&MySQLOperations.get_geometry_converterN)Ú__name__Ú
__module__Ú__qualname__Únamer   r   ÚAdapterr
   r   r   r   r   r:   r   ÚCollectÚExtentÚExtent3DÚMakeLineÚUnionÚdisallowed_aggregatesrU   rX   rb   rm   r   r   r   r   r      s2    




û
r   N)Údjango.contrib.gis.dbr   Ú+django.contrib.gis.db.backends.base.adapterr   Ú.django.contrib.gis.db.backends.base.operationsr   Ú$django.contrib.gis.db.backends.utilsr   Ú django.contrib.gis.geos.geometryr   Ú%django.contrib.gis.geos.prototypes.ior   Údjango.contrib.gis.measurer   Ú#django.db.backends.mysql.operationsr	   Údjango.utils.functionalr
   r   r   r   r   r   Ú<module>   s    