3
aK!                 @   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: https://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.

.. deprecated:: 1.4 The OurSQL DBAPI is deprecated and will be removed
   in a future version. Please use one of the supported DBAPIs to
   connect to mysql.

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	   F/tmp/pip-build-6_cqtusv/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 jddS )N_oursql_plain_queryF)execution_optionsget)r
   r	   r	   r   plain_query3   s    z(MySQLExecutionContext_oursql.plain_queryN)r   r   r   propertyr   r	   r	   r	   r   r   2   s   r   c               @   s   e Zd ZdZdZejrdZdZdZ	dZ
dZeZej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 jddd tdS )NzThe OurSQL DBAPI is deprecated and will be removed in a future version. Please use one of the supported DBAPIs to connect to mysql.z1.4)versionr   )r   Zwarn_deprecated
__import__)clsr	   r	   r   dbapiJ   s    zMySQLDialect_oursql.dbapiNc             C   s*   |r|j r|j|dd n|j|| dS )zMProvide an implementation of
        *cursor.execute(statement, parameters)*.T)r   N)r   execute)r
   cursorZ	statement
parameterscontextr	   r	   r   
do_executeT   s    
zMySQLDialect_oursql.do_executec             C   s   |j  jddd d S )NZBEGINT)r   )r   r   )r
   
connectionr	   r	   r   do_begin]   s    zMySQLDialect_oursql.do_beginc             C   sT   t jr|jj|}n| j}|jj|j|j|}d| }|jddj||  d S )Nz'%s'T)r   )	r   py2kr"   Z_escape_stringZ_connection_charsetencodedecoder   Zexec_driver_sql)r
   r"   queryxidargcharsetr	   r	   r   	_xa_query`   s    zMySQLDialect_oursql._xa_queryc             C   s   | j |d| d S )NzXA BEGIN %s)r+   )r
   r"   r(   r	   r	   r   do_begin_twophaser   s    z%MySQLDialect_oursql.do_begin_twophasec             C   s    | j |d| | j |d| d S )Nz	XA END %szXA PREPARE %s)r+   )r
   r"   r(   r	   r	   r   do_prepare_twophaseu   s    z'MySQLDialect_oursql.do_prepare_twophaseFc             C   s$   |s| j |d| | j |d| d S )Nz	XA END %szXA ROLLBACK %s)r+   )r
   r"   r(   is_preparedrecoverr	   r	   r   do_rollback_twophasey   s    z(MySQLDialect_oursql.do_rollback_twophasec             C   s"   |s| j || | j|d| d S )NzXA COMMIT %s)r-   r+   )r
   r"   r(   r.   r/   r	   r	   r   do_commit_twophase   s    z&MySQLDialect_oursql.do_commit_twophasec             C   s   t j| |j jdd||S )NT)r   )r   	has_tableconnectr   )r
   r"   
table_nameschemar	   r	   r   r2      s
    zMySQLDialect_oursql.has_tablec             K   s&   t j| |j jdd|fd|i|S )NT)r   r5   )r   get_table_optionsr3   r   )r
   r"   r4   r5   kwr	   r	   r   r6      s    z%MySQLDialect_oursql.get_table_optionsc             K   s&   t j| |j jdd|fd|i|S )NT)r   r5   )r   get_columnsr3   r   )r
   r"   r4   r5   r7   r	   r	   r   r8      s    zMySQLDialect_oursql.get_columnsc             K   s$   t j| |j jddfd|i|S )NT)r   r5   )r   get_view_namesr3   r   )r
   r"   r5   r7   r	   r	   r   r9      s
    z"MySQLDialect_oursql.get_view_namesc             K   s   t j| |j jdd|S )NT)r   )r   get_table_namesr3   r   )r
   r"   r5   r7   r	   r	   r   r:      s    z#MySQLDialect_oursql.get_table_namesc             K   s   t j| |j jddf|S )NT)r   )r   get_schema_namesr3   r   )r
   r"   r7   r	   r	   r   r;      s    z$MySQLDialect_oursql.get_schema_namesc             C   s   t j| |jddS )NT)r   )r   
initializer   )r
   r"   r	   r	   r   r<      s    zMySQLDialect_oursql.initializec             C   s"   t j| |jddjdd|||S )NT)Zclose_with_result)r   )r   _show_create_tabler3   r   )r
   r"   tabler*   Z	full_namer	   r	   r   r=      s    z&MySQLDialect_oursql._show_create_tablec             C   sD   t || jjr6|jd ko4d|jd ko4|jd jdS |jd	kS d S )
Nr   r   closed          )r@   rA   rB   rC   rD   )
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|j tj|dt tj|dt tj|dt tj|dt tj|d	t |jd	d
rxd |d< ntj|dt |j	dd|d< tj|dt |j
dd i }xDdD ]<}||kr|| ||dd  < tj||dd  t ||= qW |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ssl_cassl_keyssl_cert
ssl_capath
ssl_cipher   ssl)rR   rS   rT   rU   rV   )Ztranslate_connect_argsupdater'   r   Zcoerce_kw_typeintboolpopstrr   
setdefault)r
   urloptsrX   keyr	   r	   r   create_connect_args   s8    
    
z'MySQLDialect_oursql.create_connect_argsc             C   s   |j S )N)rF   )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	   r   _detect_charset   s    z#MySQLDialect_oursql._detect_charsetc             C   s   |j  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   |j  S )z.oursql isn't super-broken like MySQLdb, yaaay.)Zfetchone)r
   rf   r*   r	   r	   r   _compat_fetchone	  s    z$MySQLDialect_oursql._compat_fetchonec             C   s   |j  S )N)first)r
   rf   r*   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driverZsupports_statement_cacher   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+   r,   r-   r0   r1   r2   r6   r8   r9   r:   r;   r<   r=   rJ   rb   rd   re   rg   rh   rj   r	   r	   r	   r   r   8   sD   

	



	
	



(

r   N)__doc__baser   r   r    r   rk   r   r   r   r   r   r	   r	   r	   r   <module>!   s    Z