
    +'&h                        d 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dlmZ d Z	 ddZddiZd Zd Z ee           d Zd Z eej        d          d             Z eej        d          d             Z eej        d          d             Z eej        d          d             ZdS )z;This module defines specific functions for MariaDB dialect.    )compiles)	functions)after_create)
after_drop)before_create)before_drop)reflect_geometry_column)
WKBElement)
WKTElement)to_shapec                     t          | t                    r|                                 } t          | t                    r6t	          |           }t          |          j                            d          } | S )Nzutf-8)
isinstance
memoryviewtobytesbytesr
   r   wktencode)paramdata_elements     ]/var/www/html/reinick/venv/lib/python3.11/site-packages/geoalchemy2/admin/dialects/mariadb.py_castr      sc    %$$  % ;!%((&&*11'::L    Tc                     |rht          |t          t          f          rt          d |D                       }n2t          |t                    r|D ]}t	          ||                   ||<   ||fS )znEvent handler to cast the parameters properly.

    Args:
        convert (bool): Trigger the conversion.
    c              3   4   K   | ]}t          |          V  d S N)r   ).0xs     r   	<genexpr>z(before_cursor_execute.<locals>.<genexpr>#   s(      <<AuQxx<<<<<<r   )r   tuplelistdictr   )conncursor	statement
parameterscontextexecutemanyconvertks           r   before_cursor_executer*      s      5j5$-00 	5<<<<<<<JJ
D)) 	5 5 5 %jm 4 4
1j  r   	ST_AsEWKBST_AsBinaryc                 j    fd} t          t          t          |           d          |           d S )Nc                 R    d                      |j        | j        fi |          S )N{}({}))formatprocessclauses)elementcompilerkwfns      r   _compile_mariadbz+_compiles_mariadb.<locals>._compile_mariadb1   s/    r#38#3GO#J#Jr#J#JKKKr   mariadb)r   getattrr   )clsr6   r7   s    ` r   _compiles_mariadbr;   0   sN    L L L L L 1HWY$$i001ABBBBBr   c                 Z    |                                  D ]\  }}t          ||           dS )a9  Register compilation mappings for the given functions.

    Args:
        mapping: Should have the following form::

                {
                    "function_name_1": "mariadb_function_name_1",
                    "function_name_2": "mariadb_function_name_2",
                    ...
                }
    N)itemsr;   )mappingr:   r6   s      r   register_mariadb_mappingr?   7   s<     ==?? # #R#r""""# #r   c                     d| _          |j        | j        fi |}	 t          | j                  }t	          |d         j                  }t          d|j                  }|dk    rt          d| j        j                  }t          |          dk    r|dk    r||d         _        n*# t          $ r t          d| j        j                  }Y nw xY w|dk    rd                    | j         ||          }nd                    | j         |          }|S NST_GeomFromTextr      z
{}({}, {})r/   )
identifierr1   r2   r    r   valuemaxsridtypelen	Exceptionr0   )r3   r4   r5   compiledr2   r   rG   ress           r   _compile_GeomFromText_MariaDBrM   J   s   *Gx66266H	)w''!'!*"2331l'((199q',+,,Dw<<!q#GAJ ) ) )1gl'(() axx!!'"4hEEoog0(;;Js   B	B& &$CCc                     d| _         	 t          | j                  }t          |d         j                  }t          d|j                  }|dk    rt          d| j        j                  }t          |          dk    r|dk    r||d         _        n*# t          $ r t          d| j        j                  }Y nw xY w |j
        | j        fi |}|dk    rd                    | j         ||          }nd                    | j         |          }|S rA   )rD   r    r2   r
   rE   rF   rG   rH   rI   rJ   r1   r0   )r3   r4   r5   r2   r   rG   rK   rL   s           r   _compile_GeomFromWKB_MariaDBrO   _   s   *G	)w''!'!*"2331l'((199q',+,,Dw<<!q#GAJ ) ) )1gl'(()x66266Haxx!!'"4hEEoog0(;;Js   B	B $B:9B:r8   c                     t          | |fi |S r   rM   r3   r4   r5   s      r   _MariaDB_ST_GeomFromTextrS   u       ((AAbAAAr   c                     t          | |fi |S r   rQ   rR   s      r   _MariaDB_ST_GeomFromEWKTrV   z   rT   r   c                     t          | |fi |S r   rO   rR   s      r   _MariaDB_ST_GeomFromWKBrY          '@@R@@@r   c                     t          | |fi |S r   rX   rR   s      r   _MariaDB_ST_GeomFromEWKBr\      rZ   r   N)T)__doc__sqlalchemy.ext.compilerr   geoalchemy2r    geoalchemy2.admin.dialects.mysqlr   r   r   r   r	   geoalchemy2.elementsr
   r   geoalchemy2.shaper   r   r*   _MARIADB_FUNCTIONSr;   r?   rM   rO   rB   rS   ST_GeomFromEWKTrV   ST_GeomFromWKBrY   ST_GeomFromEWKBr\    r   r   <module>rh      s   A A , , , , , , ! ! ! ! ! ! 9 9 9 9 9 9 7 7 7 7 7 7 : : : : : : 8 8 8 8 8 8 D D D D D D + + + + + + + + + + + + & & & & & &   HL! ! ! !&  
C C C# # #   + , , ,  *  , 
)
#Y//B B 0/B 
)
#Y//B B 0/B 
)
"I..A A /.A 
)
#Y//A A 0/A A Ar   