U
    x^                     @   sx   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 G dd	 d	eZ	G d
d deZ
G dd deZeZdS )a  

.. dialect:: mysql+oursql
    :name: OurSQL
    :dbapi: oursql
    :connectstring: mysql+oursql://<user>:<password>@<host>[:<port>]/<dbname>
    :url: http://packages.python.org/oursql/

.. note::

    The OurSQL MySQL dialect is legacy and is no longer supported upstream,
    and is **not tested as part of SQLAlchemy's continuous integration**.
    The recommended MySQL dialects are mysqlclient and PyMySQL.

Unicode
-------

Please see :ref:`mysql_unicode` for current recommendations on unicode
handling.


   )BIT)MySQLDialect)MySQLExecutionContext   )types)utilc                   @   s   e Zd Zdd ZdS )
_oursqlBITc                 C   s   dS )z'oursql already converts mysql bits, so.N )selfdialectZcoltyper	   r	   H/tmp/pip-install-dq5v43_d/SQLAlchemy/sqlalchemy/dialects/mysql/oursql.pyresult_processor(   s    z_oursqlBIT.result_processorN)__name__
__module____qualname__r   r	   r	   r	   r   r   '   s   r   c                   @   s   e Zd Zedd ZdS )MySQLExecutionContext_oursqlc                 C   s   | j ddS )N_oursql_plain_queryF)execution_optionsget)r
   r	   r	   r   plain_query/   s    z(MySQLExecutionContext_oursql.plain_queryN)r   r   r   propertyr   r	   r	   r	   r   r   .   s   r   c                   @   s  e Zd ZdZejrdZdZdZdZ	dZ
eZeejejejeeiZedd Zd3ddZdd	 Zd
d Zdd Zdd Zd4ddZd5ddZd6ddZd7ddZd8ddZd9ddZ d:ddZ!dd  Z"d!d" Z#d;d#d$Z$d%d& Z%d'd( Z&d)d* Z'd+d, Z(d<d-d.Z)d=d/d0Z*d>d1d2Z+dS )?MySQLDialect_oursqloursqlTc                 C   s   t dS )Nr   )
__import__)clsr	   r	   r   dbapiE   s    zMySQLDialect_oursql.dbapiNc                 C   s*   |r|j r|j|dd n||| dS )zMProvide an implementation of
        *cursor.execute(statement, parameters)*.Tr   N)r   execute)r
   cursorZ	statement
parameterscontextr	   r	   r   
do_executeI   s    
zMySQLDialect_oursql.do_executec                 C   s   |  jddd d S )NZBEGINTr   )r   r   r
   
connectionr	   r	   r   do_beginR   s    zMySQLDialect_oursql.do_beginc                 C   sT   t jr|j|}n| j}|j|||}d| }|jdd||  d S )Nz'%s'Tr   )	r   py2kr#   _escape_stringZ_connection_charsetencodedecoder   r   )r
   r#   queryxidargcharsetr	   r	   r   	_xa_queryU   s    zMySQLDialect_oursql._xa_queryc                 C   s   |  |d| d S )NzXA BEGIN %sr.   r
   r#   r+   r	   r	   r   do_begin_twophaseg   s    z%MySQLDialect_oursql.do_begin_twophasec                 C   s    |  |d| |  |d| d S )N	XA END %szXA PREPARE %sr/   r0   r	   r	   r   do_prepare_twophasej   s    z'MySQLDialect_oursql.do_prepare_twophaseFc                 C   s$   |s|  |d| |  |d| d S )Nr2   zXA ROLLBACK %sr/   r
   r#   r+   Zis_preparedZrecoverr	   r	   r   do_rollback_twophasen   s    z(MySQLDialect_oursql.do_rollback_twophasec                 C   s"   |s|  || | |d| d S )NzXA COMMIT %s)r3   r.   r4   r	   r	   r   do_commit_twophaseu   s    z&MySQLDialect_oursql.do_commit_twophasec                 C   s   t | | jdd||S NTr%   )r   	has_tableconnectr   )r
   r#   
table_nameschemar	   r	   r   r8   ~   s    zMySQLDialect_oursql.has_tablec                 K   s&   t j| | jdd|fd|i|S NTr%   r;   )r   get_table_optionsr9   r   r
   r#   r:   r;   kwr	   r	   r   r=      s    z%MySQLDialect_oursql.get_table_optionsc                 K   s&   t j| | jdd|fd|i|S r<   )r   get_columnsr9   r   r>   r	   r	   r   r@      s    zMySQLDialect_oursql.get_columnsc                 K   s$   t j| | jddfd|i|S r<   )r   get_view_namesr9   r   r
   r#   r;   r?   r	   r	   r   rA      s    z"MySQLDialect_oursql.get_view_namesc                 K   s   t | | jdd|S r7   )r   get_table_namesr9   r   rB   r	   r	   r   rC      s
    z#MySQLDialect_oursql.get_table_namesc                 K   s   t j| | jddf|S r7   )r   get_schema_namesr9   r   )r
   r#   r?   r	   r	   r   rD      s    z$MySQLDialect_oursql.get_schema_namesc                 C   s   t | |jddS r7   )r   
initializer   r"   r	   r	   r   rE      s     
zMySQLDialect_oursql.initializec                 C   s"   t | |jddjdd|||S )NT)Zclose_with_resultr%   )r   _show_create_tableZ_contextual_connectr   )r
   r#   tabler-   Z	full_namer	   r	   r   rF      s    z&MySQLDialect_oursql._show_create_tablec                 C   sD   t || jjr6|jd ko4d|jd ko4|jd dS |jdkS d S )Nr   r   closed)i  i  i  i  i  )
isinstancer   ZProgrammingErrorerrnoargsendswith)r
   er#   r   r	   r	   r   is_disconnect   s    
z!MySQLDialect_oursql.is_disconnectc                 C   s  |j dddd}||j t|dt t|dt t|dt t|dt t|d	t |d	d
rxd |d< nt|dt |	dd|d< t|dt |
dd i }dD ]<}||kr|| ||dd  < t||dd  t ||= q|r||d< g |gS )Ndbuserpasswd)ZdatabaseusernamepasswordportcompressZautopingZraise_on_warningsZdefault_charsetFr-   Zuse_unicodeTZ
found_rows)Zssl_caZssl_keyZssl_certZ
ssl_capathZ
ssl_cipher   ssl)Ztranslate_connect_argsupdater*   r   Zcoerce_kw_typeintboolpopstrr   
setdefault)r
   urloptsrW   keyr	   r	   r   create_connect_args   s4      
z'MySQLDialect_oursql.create_connect_argsc                 C   s   |j S N)rJ   )r
   	exceptionr	   r	   r   _extract_error_code   s    z'MySQLDialect_oursql._extract_error_codec                 C   s   |j jS )z:Sniff out the character set in use for connection results.)r#   r-   r"   r	   r	   r   _detect_charset   s    z#MySQLDialect_oursql._detect_charsetc                 C   s   |  S z.oursql isn't super-broken like MySQLdb, yaaay.)Zfetchallr
   rpr-   r	   r	   r   _compat_fetchall   s    z$MySQLDialect_oursql._compat_fetchallc                 C   s   |  S rf   )Zfetchonerg   r	   r	   r   _compat_fetchone   s    z$MySQLDialect_oursql._compat_fetchonec                 C   s   |  S rb   )firstrg   r	   r	   r   _compat_first  s    z!MySQLDialect_oursql._compat_first)N)TF)TF)N)N)N)N)N)NN)N)N)N),r   r   r   Zdriverr   r&   Zsupports_unicode_bindsZsupports_unicode_statementsZsupports_native_decimalZsupports_sane_rowcountZsupports_sane_multi_rowcountr   Zexecution_ctx_clsZupdate_copyr   ZcolspecssqltypesZTimer   r   classmethodr   r!   r$   r.   r1   r3   r5   r6   r8   r=   r@   rA   rC   rD   rE   rF   rN   ra   rd   re   ri   rj   rl   r	   r	   r	   r   r   4   sT    

	   
   
	

	
	

   

(

r   N)__doc__baser   r   r    r   rm   r   r   r   r   r   r	   r	   r	   r   <module>   s    S