
    Dvg                         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ee          ZdS )    )models)
WKTAdapter)BaseSpatialOperations)SpatialOperator)GEOSGeometryBase)wkb_r)Distance)DatabaseOperations)cached_propertyc                       e Zd ZdZdZeZed             Zed             Z	ed             Z
ed             Zed             Zed             Zed	             Zd
ddZed             Zd Zd Zd Zd ZdS )MySQLOperationsmysqlST_c                     | j         j        S N
connectionmysql_is_mariadbselfs    l/var/www/pixelcanvas.ch/venv/lib/python3.11/site-packages/django/contrib/gis/db/backends/mysql/operations.pymariadbzMySQLOperations.mariadb   s    //    c                     | j         j         S r   r   r   s    r   r   zMySQLOperations.mysql   s    ?333r   c                     | j         dz   S )NzAsBinary(%s)geom_func_prefixr   s    r   selectzMySQLOperations.select       $~55r   c                     | j         dz   S )NGeomFromTextr   r   s    r   	from_textzMySQLOperations.from_text   r   r   c                 <    | j         j        j        r
| j        dz   S d S )NCollect)r   featuressupports_collect_aggrr   r   s    r   collectzMySQLOperations.collect"   s*    ?#9 	5(944	5 	5r   c                    t          d          t          d          t          d          t          d          t          d          t          d          t          d          t          d          t          d	          t          d
          t          d          t          d          t          d          d}| j        j        rt          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   	operatorss     r   gis_operatorszMySQLOperations.gis_operators'   s     *"   *}===(k:::'];;;&L999'];;;%;777$+666)???'];;;&K888&L999%;777
 
	" ?+ 	D"1{"C"C"CIhr   c                     t           j        t           j        t           j        t           j        g}| j        j        }|s| j        j        dk     r |                    dt           j	                   t          |          S )N)   r      r   )r   ExtentExtent3DMakeLineUnionr   r   mysql_versioninsertr$   tuple)r   disallowed_aggregates
is_mariadbs      r   rP   z%MySQLOperations.disallowed_aggregates>   sj     MOOL	!
 _5
 	<6CC!((FN;;;*+++r   ST_GeomFromWKBST_GeomFromText)FromWKBFromWKTc                 ~    h d}| j         j        r,|                    d           |                    ddh           |S )N>   AsGMLAsKMLAsSVGScaleAzimuthIsEmptyMemSizeReverse	MakeValid	Perimeter	Transform	Translate
SnapToGridClosestPointBoundingCircleForcePolygonCWPointOnSurfaceLineLocatePointGeometryDistancerg   GeoHashIsValid)r   r   removeupdate)r   unsupporteds     r   unsupported_functionsz%MySQLOperations.unsupported_functionsP   sV    
 
 
* ?+ 	7/000	95666r   c                     |j         S r   )	geom_type)r   fs     r   geo_db_typezMySQLOperations.geo_db_typel   s
    {r   c                    |d         }t          |t                    rd|                    | j                  rt	          d          t          |t          j        |                    | j                                      }n|}|gS )Nr   zMOnly numeric values of degree units are allowed on geodetic distance queries.)
isinstancer	   geodeticr   
ValueErrorgetattrunit_attname
units_name)r   rr   valuelookup_type
dist_params        r   get_distancezMySQLOperations.get_distanceo   s    aeX&& 
	zz$/**  1   !x,Q\\$/-J-JKK JJ J|r   c                     t                      j        |j        j        dk    rd |j        j        fd}|S )Nc                 n    | 1t           t          |                               }r|_        |S d S r   )r   
memoryviewsrid)r{   
expressionr   geom
geom_classreadr   s       r   	converterz9MySQLOperations.get_geometry_converter.<locals>.converter   sF     'Z->->(?(?LL % $DI	 ! r   )r   r   output_fieldr   r   )r   r   r   r   r   r   s      @@@r   get_geometry_converterz&MySQLOperations.get_geometry_converter~   s_    ww|&+2::D,7
	 	 	 	 	 	 	 r   c                 F    t          | |                                          S r   )rx   lower)r   agg_names     r   spatial_aggregate_namez&MySQLOperations.spatial_aggregate_name   s    tX^^--...r   N)__name__
__module____qualname__namer   r   Adapterr   r   r   r   r"   r'   rE   rP   function_namesro   rs   r~   r   r    r   r   r   r      sJ       DG0 0 _0 4 4 _4 6 6 _6 6 6 _6 5 5 _5   _, 
, 
, _
, $$ N
   _6       / / / / /r   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   <module>r      s    ( ( ( ( ( ( B B B B B B P P P P P P @ @ @ @ @ @ = = = = = = 7 7 7 7 7 7 / / / / / / B B B B B B 3 3 3 3 3 3C/ C/ C/ C/ C/+-? C/ C/ C/ C/ C/r   