
    Vh$                         d dl mZmZmZ d dlmZ eZd dlZd dl	m
Z
 d dlmZ 	 d dlZdZdZd d	lmZ d
 Zd Zd Z	 	 	 ddZd Zd Zd Zd Zy# e$ r 	 d dlZd dlZdZn# e$ r dZY nw xY wY Ew xY w)    )absolute_importdivisionprint_function)reduceN)configparser)	to_nativecursorcursorclasszA MySQL module is required: for Python 2.7 either PyMySQL, or MySQL-python, or for Python 3.X mysqlclient or PyMySQL. Consider setting ansible_python_interpreter to use the intended Python version.)mysql_quote_identifierc                 8    | t        | d      sy| j                  S )z (class) -> str
    Return the name of the connector (pymysql or mysqlclient (MySQLdb))
    or 'Unknown' if not pymysql or MySQLdb. When adding a
    connector here, also modify get_connector_version.
    __name__Unknown)hasattrr   )	connectors    n/home/dcms/DCMS/lib/python3.12/site-packages/ansible_collections/community/mysql/plugins/module_utils/mysql.pyget_connector_namer   )   s"     	: >    c                     | yt        |       }|dk(  r.| j                  dd }dj                  t        t        |            S |dk(  r.| j
                  dd }dj                  t        t        |            S y)z (class) -> str
    Return the version of pymysql or mysqlclient (MySQLdb).
    Return 'Unknown' if the connector name is unknown.
    Nr   pymysql   .MySQLdb)r   VERSIONjoinmapstrversion_info)r   connector_namevs      r   get_connector_versionr    5   sz     '	2N" bq!xxC$$	9	$""2A&xxC$$r   c                 T    t        j                  d      }|j                  |        |S )N)#;!)comment_prefixes)r   ConfigParserread)cnfcps     r   parse_from_mysql_config_filer*   N   s$     
	"	"O	DBGGCLIr   c           	         i }|rt         j                  j                  |      r||d<   |r|	 t        |      }rn|j                  d      r]	 |j                  dd| j                  d         | j                  d<   |j                  dd	| j                  d
         | j                  d
<   ||||i |d<   | j                  d   r| j                  d   |d<   n$| j                  d   |d<   | j                  d
   |d	<   |||d<   |||d<   |||d   d<   |||d   d<   |||d   d<   |||d<   |	|	|d<   |ct        t              dk(  rQd t        j                  j                  d      D        }t!        d |      dk\  r	||d   d<   n| j                  d       t        t              dk(  rLt        j"                  d   dk  rd|v r|d   |d <   |d= d|v r|d   |d!<   |d= t        j$                  d(d"|
i|}n| j'                  d#       t        j"                  d   d$k  s,t        j"                  d   d$k(  r4t        j"                  d   dk  rd|v r|d   |d <   |d= d|v r|d   |d!<   |d= t        j$                  d(i |}|
r|j)                  d%       d& }||j*                  _        |d'k(  r2 |j.                  d(i t0        t        j2                  j4                  i|fS |j/                         |fS # t        $ r,}| j                  d|dt        |             Y d }~d }~ww xY w# t        $ r+}d|j                  v r| j                  d       Y d }~d }~ww xY w))Nread_default_filezFailed to parse : msgclienthost
login_host)fallbackport
login_portz-got an unexpected keyword argument 'fallback'zbTo use config_overrides_defaults, it needs Python 3.5+ as the default interpreter on a target hostssllogin_unix_socketunix_socketuserpasswordcertkeycadatabaseconnect_timeoutr   c              3   ,   K   | ]  }|d k7  s	|  yw)NoneN ).0ns     r   	<genexpr>z mysql_connect.<locals>.<genexpr>   s     [1qTZ{Q[s   
r   c                 6    t        |       dz  t        |      z   S )Nd   )int)xys     r   <lambda>zmysql_connect.<locals>.<lambda>   s    3q6C<#a&#8 r   i  check_hostnamezGTo use check_hostname, pymysql >= 0.7.11 is required on the target hostr      dbpasswd
autocommitzSupport of mysqlcline/MySQLdb connector is deprecated. We'll stop testing against it in collection version 4.0.0 and remove the related code in 5.0.0. Use PyMySQL connector instead.   Tc                 $    | j                          y )N)close)	conn_selfs    r   _conn_patchz"mysql_connect.<locals>._conn_patch   s    r   
DictCursorrB   )ospathexistsr*   	Exception	fail_jsonr   has_sectiongetparamsgetintmessager   mysql_driver__version__splitr   r   connectwarnrP   	__class____del__r	   _mysql_cursor_paramcursorsrV   )module
login_userlogin_passwordconfig_filessl_certssl_keyssl_carN   cursor_classr?   rP   config_overrides_defaultsrL   configr)   eversion_tupledb_connectionrU   s                      r   mysql_connectrw   W   s    Frww~~k2&1"#$]1+>
 bnnX.q24&&6TZTaTabnTo&2pFMM,/24))HfW]WdWdeqWr)2sFMM,/ W0H4HNLfu}}() &.A B}|4v|4v #v!+z (uf&ue$ud	~z"$3 !!l+y8[(@(@(F(Fs(K[M8-HCO2@u./  %n o,'94$$Q'!+V#%j1t:&V##)*#5x :&$,,M
MfM 	 [ 	\ $$Q'!+0I0I!0LPQ0QVbVoVopqVruvVvV#%j1t:&V##)*#5x :&$,,6v6$$T*&1M# |##}##]':L<P<P<[<[&\]_lll##%}44o  ]  iXYl%[ \\] ! qF!))S(( .p( qqs0   K- AL% -	L"6!LL"%	M. MMc                  $   t        t        dd       t        dd      t        dd      t        dd      t        d      t        d	d
      t        dd      t        d	dg      t        d	dg      t        d	dg      t        dd             S )Nr   )typedefaultT)ry   no_log	localhostrH   i  )ry   rX   z	~/.my.cnf   rn   )ry   aliasesro   rp   bool)rk   rl   r2   r5   r7   rm   r?   client_cert
client_keyca_certrL   )dictrB   r   r   mysql_common_argument_specr      s    UD1t4UK8UD1E*fk:%4fzl;Vi[9&8*56 r   c                     | j                  d       | j                         }t        |t              r|d   }|S |d   }|S )z6Returns a string representation of the server version.zSELECT VERSION() AS versionversionr   )executefetchone
isinstancer   )r	   resultversion_strs      r   get_server_versionr      sH    
NN01__F&$Y'  Qir   c                 <    dt        |       j                         v ryy)Nmariadbmysql)r   lower)r	   s    r   get_server_implementationr      s    &v.4466r   c           	          |j                         D ]+  \  }}dt        |d      z  }	 |j                  |dz   |f       - y# t        $ r$}| j	                  d||d|       Y d}~Wd}~ww xY w)zSet session vars.zSET SESSION %s = varsz%szFailed to execute r-   r.   N)itemsr   r   rZ   r[   )rj   r	   session_varsvarvaluequeryrt   s          r   set_session_varsr      s{    "((* S
U#&<S&&II	SNN54<%2S  	Sq!QRR	Ss   A  	A-	A((A-)NN NNNNNr}   FFN)
__future__r   r   r   	functoolsr   ry   __metaclass__rW   ansible.module_utils.six.movesr   ansible.module_utils._textr   r   ra   rh   ImportErrorr   MySQLdb.cursorsmysql_driver_fail_msgAansible_collections.community.mysql.plugins.module_utils.databaser   r   r    r*   rw   r   r   r   r   rB   r   r   <module>r      s    C B  	 7 0
""8 
 e	2 Z^Y[TXb5J 
SQ  &+ s5   A A0
A A0 A*'A0)A**A0/A0