
    +'&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 g dZd Z	 ddZd Zd Zd Z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 ) z9This module defines specific functions for MySQL dialect.    )text)compiles)NullType)	functions)_check_spatial_type)_spatial_idx_name)setup_create_drop)	Geography)Geometry)geometrypoint
linestringpolygon
multipointmultilinestringmultipolygongeometrycollectionc                    t          |                    d          t          t          f          sdS |                    d          }|j        p| j        }| j        j        dk    rd}nd}d                    ||j        |          }||d                    |          z  }| j	        
                    t          |                                                    \  }}}	t          |	                                          d	k    }
|t          vrdS d
                    |j        |          }||d                    |          z  }| j	        
                    t          |                                                    }t          |                                          dk    }t          |                                |||
d          |d<   dS )z:Reflect a column of type Geometry with Postgresql dialect.typeNnamemariadbz-1, zSRS_ID, z~SELECT DATA_TYPE, {}IS_NULLABLE
        FROM INFORMATION_SCHEMA.COLUMNS
        WHERE TABLE_NAME = '{}' and COLUMN_NAME = '{}'z and table_schema = '{}'yeszSELECT DISTINCT
            INDEX_TYPE
        FROM INFORMATION_SCHEMA.STATISTICS
        WHERE TABLE_NAME = '{}' and COLUMN_NAME = '{}'z and TABLE_SCHEMA = '{}'spatialT)geometry_typesridspatial_indexnullable_spatial_index_reflected)
isinstancegetr   r   schemadefault_schema_namedialectr   formatbindexecuter   onestrlower_POSSIBLE_TYPESscalarupper)	inspectortablecolumn_infocolumn_namer!   select_sridgeometry_type_queryr   r   nullable_stris_nullablehas_index_queryspatial_index_resr   s                 [/var/www/html/reinick/venv/lib/python3.11/site-packages/geoalchemy2/admin/dialects/mysql.pyreflect_geometry_columnr8      s   koof--(/CDD //&))K\:Y:F** ::@&UZ; ; 
 =DDVLLL(1(>(>tDW?X?X(Y(Y(](](_(_%M4l##))++u4KO++: ;A&
K; ;  9@@HHH!..tO/D/DEELLNN)**0022i?M ##))++#!%  K    Tc                    |rt          |t          t          f          rt          d |D                       }nRt          |t                    r=|D ]:}t          ||         t                    r||                                         ||<   ;||fS )znEvent handler to cast the parameters properly.

    Args:
        convert (bool): Trigger the conversion.
    c              3   l   K   | ]/}t          |t                    r|                                n|V  0d S N)r   
memoryviewtobytes).0xs     r7   	<genexpr>z(before_cursor_execute.<locals>.<genexpr>U   s>      ccSTjJ.G.GNqyy{{{Qccccccr9   )r   tuplelistdictr=   r>   )conncursor	statement
parameterscontextexecutemanyconvertks           r7   before_cursor_executerM   K   s      <j5$-00 	<ccXbcccccJJ
D)) 	< < <jmZ88 <$.qM$9$9$;$;JqMj  r9   c                 $   t          | |          \  }}}g | j        d<   t          | j                  }|D ]}| j        d         D ]}t	          |j        t          |          r||j                                        v rs| j        	                    |           |j
        t          | j
        |j
                  k    st          |j        dd          s | j        d                             |           | j                            d          | _        dS )z6Handle spatial indexes during the before_create event._after_create_indexes_saved_columnsr   FN)r	   infosetindexesr   r   r   columnsvaluesremover   r   getattrappendpop)	r.   r%   kwr#   gis_colsregular_colscurrent_indexesidxcols	            r7   before_creater`   ^   s   &7t&D&D#GX|
 +-EJ&'%-((O D D:./ 	D 	DC#CHh@@ DcS[M_M_MaMaFaFa$$S)))80SXFFFFgHouO OF J67>>sCCC	D JNN#344EMMMr9   c                    |j         }| j        D ]t          j        t          t
          f|          rej        j        du rWfd| j        D             sDd                    | j	        j	                  }t          |          }|                    |           | j                            d          D ]}| j                            |           dS )z5Handle spatial indexes during the after_create event.Tc                 J    g | ]}|j                                         v | S  )rT   rU   )r?   ir_   s     r7   
<listcomp>z after_create.<locals>.<listcomp>   s1    JJJ!qy7G7G7I7I0I0IA0I0I0Ir9   z%ALTER TABLE {} ADD SPATIAL INDEX({});rO   N)r#   rT   r   r   r   r
   r   rS   r$   r   r   r&   rQ   rY   add)r.   r%   rZ   r#   sqlqr^   r_   s          @r7   after_createri   s   s     lG } 
  
   8Y*?II	 &$.. KJJJu}JJJ  =DDUZQTQYZZIIQz~~566  # r9   c                     d S r<   rc   r.   r%   rZ   s      r7   before_droprl          
Fr9   c                     d S r<   rc   rk   s      r7   
after_dropro      rm   r9   	ST_AsEWKBST_AsBinaryc                 j    fd} t          t          t          |           d          |           d S )Nc                 R    d                      |j        | j        fi |          S )N{}({}))r$   processclauses)elementcompilerrZ   fns      r7   _compile_mysqlz'_compiles_mysql.<locals>._compile_mysql   s/    r#38#3GO#J#Jr#J#JKKKr9   mysql)r   rW   r   )clsry   rz   s    ` r7   _compiles_mysqlr}      sM    L L L L L /HWY$$g..~>>>>>r9   c                 Z    |                                  D ]\  }}t          ||           dS )a5  Register compilation mappings for the given functions.

    Args:
        mapping: Should have the following form::

                {
                    "function_name_1": "mysql_function_name_1",
                    "function_name_2": "mysql_function_name_2",
                    ...
                }
    N)itemsr}   )mappingr|   ry   s      r7   register_mysql_mappingr      s<     ==?? ! !RR    ! !r9   c                     d| _          |j        | j        fi |}| j        j        }|dk    rd                    | j         ||          S d                    | j         |          S )NST_GeomFromTextr   
{}({}, {})rt   
identifierru   rv   r   r   r$   rw   rx   rZ   compiledr   s        r7   _compile_GeomFromText_MySqlr      sk    *Gx66266H<Daxx""7#5xFFFw18<<<r9   c                     d| _          |j        | j        fi |}| j        j        }|dk    rd                    | j         ||          S d                    | j         |          S )NST_GeomFromWKBr   r   rt   r   r   s        r7   _compile_GeomFromWKB_MySqlr      sk    )Gx66266H<Daxx""7#5xFFFw18<<<r9   r{   c                     t          | |fi |S r<   r   rw   rx   rZ   s      r7   _MySQL_ST_GeomFromTextr          &w??B???r9   c                     t          | |fi |S r<   r   r   s      r7   _MySQL_ST_GeomFromEWKTr      r   r9   c                     t          | |fi |S r<   r   r   s      r7   _MySQL_ST_GeomFromWKBr          %gx>>2>>>r9   c                     t          | |fi |S r<   r   r   s      r7   _MySQL_ST_GeomFromEWKBr      r   r9   N)T)$__doc__
sqlalchemyr   sqlalchemy.ext.compilerr   sqlalchemy.sql.sqltypesr   geoalchemy2r   !geoalchemy2.admin.dialects.commonr   r   r	   geoalchemy2.typesr
   r   r*   r8   rM   r`   ri   rl   ro   _MYSQL_FUNCTIONSr}   r   r   r   r   r   ST_GeomFromEWKTr   r   r   ST_GeomFromEWKBr   rc   r9   r7   <module>r      s@   ? ?       , , , , , , , , , , , , ! ! ! ! ! ! A A A A A A ? ? ? ? ? ? ? ? ? ? ? ? ' ' ' ' ' ' & & & & & &	 	 	. . .d HL! ! ! !&5 5 5*  .    
  
? ? ?! ! !   ' ( ( (= = == = = 
)
#W--@ @ .-@ 
)
#W--@ @ .-@ 
)
"G,,? ? -,? 
)
#W--? ? .-? ? ?r9   