ó
H`¾Tc           @   s   d  Z  d d l Z d d l m Z m Z m Z d d l m Z m	 Z	 d e f d „  ƒ  YZ
 d	 e f d
 „  ƒ  YZ d e f d „  ƒ  YZ e Z d S(   s™  

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

Unicode
-------

oursql defaults to using ``utf8`` as the connection charset, but other
encodings may be used instead. Like the MySQL-Python driver, unicode support
can be completely disabled::

  # oursql sets the connection charset to utf8 automatically; all strings come
  # back as utf8 str
  create_engine('mysql+oursql:///mydb?use_unicode=0')

To not automatically use ``utf8`` and instead use whatever the connection
defaults to, there is a separate parameter::

  # use the default connection charset; all strings come back as unicode
  create_engine('mysql+oursql:///mydb?default_charset=1')

  # use latin1 as the connection charset; all strings come back as unicode
  create_engine('mysql+oursql:///mydb?charset=latin1')
iÿÿÿÿNi   (   t   BITt   MySQLDialectt   MySQLExecutionContexti   (   t   typest   utilt
   _oursqlBITc           B   s   e  Z d  „  Z RS(   c         C   s   d S(   s'   oursql already converts mysql bits, so.N(   t   None(   t   selft   dialectt   coltype(    (    sf   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/dialects/mysql/oursql.pyt   result_processor,   s    (   t   __name__t
   __module__R
   (    (    (    sf   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/dialects/mysql/oursql.pyR   +   s   t   MySQLExecutionContext_oursqlc           B   s   e  Z e d  „  ƒ Z RS(   c         C   s   |  j  j d t ƒ S(   Nt   _oursql_plain_query(   t   execution_optionst   gett   False(   R   (    (    sf   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/dialects/mysql/oursql.pyt   plain_query4   s    (   R   R   t   propertyR   (    (    (    sf   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/dialects/mysql/oursql.pyR   2   s   t   MySQLDialect_oursqlc           B   sr  e  Z d  Z e j r$ e Z e Z n  e Z e Z	 e Z
 e Z e j e j i e j e j 6e e 6ƒ Z e d „  ƒ Z d d „ Z d „  Z d „  Z d „  Z d „  Z e e d „ Z e e d „ Z d d	 „ Z d d
 „ Z  d d „ Z! d d „ Z" d d „ Z# d „  Z$ d „  Z% d d d „ Z& d „  Z' d „  Z( d „  Z) d „  Z* d „  Z+ d d „ Z, d d „ Z- d d „ Z. RS(   t   oursqlc         C   s
   t  d ƒ S(   NR   (   t
   __import__(   t   cls(    (    sf   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/dialects/mysql/oursql.pyt   dbapiN   s    c         C   s9   | r% | j  r% | j | d t ƒn | j | | ƒ d S(   sM   Provide an implementation of
        *cursor.execute(statement, parameters)*.R   N(   R   t   executet   True(   R   t   cursort	   statementt
   parameterst   context(    (    sf   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/dialects/mysql/oursql.pyt
   do_executeR   s    c         C   s   | j  ƒ  j d d t ƒd  S(   Nt   BEGINR   (   R   R   R   (   R   t
   connection(    (    sf   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/dialects/mysql/oursql.pyt   do_begin[   s    c         C   sv   t  j r | j j | ƒ } n- |  j } | j j | j | ƒ ƒ j | ƒ } d | } | j d t ƒ j	 | | ƒ d  S(   Ns   '%s'R   (
   R   t   py2kR!   t   _escape_stringt   _connection_charsett   encodet   decodeR   R   R   (   R   R!   t   queryt   xidt   argt   charset(    (    sf   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/dialects/mysql/oursql.pyt	   _xa_query^   s    			
	c         C   s   |  j  | d | ƒ d  S(   Ns   XA BEGIN %s(   R,   (   R   R!   R)   (    (    sf   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/dialects/mysql/oursql.pyt   do_begin_twophasen   s    c         C   s*   |  j  | d | ƒ |  j  | d | ƒ d  S(   Ns	   XA END %ss   XA PREPARE %s(   R,   (   R   R!   R)   (    (    sf   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/dialects/mysql/oursql.pyt   do_prepare_twophaseq   s    c         C   s3   | s |  j  | d | ƒ n  |  j  | d | ƒ d  S(   Ns	   XA END %ss   XA ROLLBACK %s(   R,   (   R   R!   R)   t   is_preparedt   recover(    (    sf   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/dialects/mysql/oursql.pyt   do_rollback_twophaseu   s    c         C   s0   | s |  j  | | ƒ n  |  j | d | ƒ d  S(   Ns   XA COMMIT %s(   R.   R,   (   R   R!   R)   R/   R0   (    (    sf   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/dialects/mysql/oursql.pyt   do_commit_twophase{   s    c         C   s(   t  j |  | j ƒ  j d t ƒ | | ƒ S(   NR   (   R   t	   has_tablet   connectR   R   (   R   R!   t
   table_namet   schema(    (    sf   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/dialects/mysql/oursql.pyR3   ƒ   s
    c         K   s.   t  j |  | j ƒ  j d t ƒ | d | | S(   NR   R6   (   R   t   get_table_optionsR4   R   R   (   R   R!   R5   R6   t   kw(    (    sf   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/dialects/mysql/oursql.pyR7   ‹   s    c         K   s.   t  j |  | j ƒ  j d t ƒ | d | | S(   NR   R6   (   R   t   get_columnsR4   R   R   (   R   R!   R5   R6   R8   (    (    sf   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/dialects/mysql/oursql.pyR9   ”   s    c         K   s+   t  j |  | j ƒ  j d t ƒ d | | S(   NR   R6   (   R   t   get_view_namesR4   R   R   (   R   R!   R6   R8   (    (    sf   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/dialects/mysql/oursql.pyR:      s
    c         K   s%   t  j |  | j ƒ  j d t ƒ | ƒ S(   NR   (   R   t   get_table_namesR4   R   R   (   R   R!   R6   R8   (    (    sf   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/dialects/mysql/oursql.pyR;   ¥   s    c         K   s%   t  j |  | j ƒ  j d t ƒ |  S(   NR   (   R   t   get_schema_namesR4   R   R   (   R   R!   R8   (    (    sf   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/dialects/mysql/oursql.pyR<   ¬   s    c         C   s   t  j |  | j d t ƒ ƒ S(   NR   (   R   t
   initializeR   R   (   R   R!   (    (    sf   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/dialects/mysql/oursql.pyR=   ³   s    c         C   s1   t  j |  | j d t ƒ j d t ƒ | | | ƒ S(   Nt   close_with_resultR   (   R   t   _show_create_tablet   contextual_connectR   R   (   R   R!   t   tableR+   t	   full_name(    (    sf   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/dialects/mysql/oursql.pyR?   ¹   s
    c         C   s\   t  | |  j j ƒ rK | j d  k oJ d | j d k oJ | j d j d ƒ S| j d	 k Sd  S(
   NR   i   t   closediÖ  iÝ  iÞ  iý  i  (   iÖ  iÝ  iÞ  iý  i  (   t
   isinstanceR   t   ProgrammingErrort   errnoR   t   argst   endswith(   R   t   eR!   R   (    (    sf   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/dialects/mysql/oursql.pyt   is_disconnectÂ   s    "c         C   sz  | j  d d 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 t ƒ r¬ d  | d <n t j | d t
 ƒ | j d t ƒ | d <t j | d t ƒ | j d t ƒ i  } x\ d d d d d g D]E } | | k r| | | | d <t j | | d t
 ƒ | | =qqW| rp| | d <n  g  | g S(   Nt   databaset   dbt   usernamet   usert   passwordt   passwdt   portt   compresst   autopingt   raise_on_warningst   default_charsetR+   t   use_unicodet
   found_rowst   ssl_cat   ssl_keyt   ssl_certt
   ssl_capatht
   ssl_cipheri   t   ssl(   t   translate_connect_argst   updateR(   R   t   coerce_kw_typet   intt   boolt   popR   R   t   strR   R   t
   setdefault(   R   t   urlt   optsR]   t   key(    (    sf   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/dialects/mysql/oursql.pyt   create_connect_argsÉ   s0    	c         C   s}   | j  } g  } t j d ƒ } xR | j | j ƒ D]> } y | j t | ƒ ƒ Wq1 t k
 rn | j | ƒ q1 Xq1 Wt | ƒ S(   Ns   [.\-](	   R!   t   ret   compilet   splitt   server_infot   appendRa   t
   ValueErrort   tuple(   R   R!   t	   dbapi_cont   versiont   rt   n(    (    sf   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/dialects/mysql/oursql.pyt   _get_server_version_infoë   s    	c         C   s   | j  S(   N(   RF   (   R   t	   exception(    (    sf   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/dialects/mysql/oursql.pyt   _extract_error_codeö   s    c         C   s
   | j  j S(   s:   Sniff out the character set in use for connection results.(   R!   R+   (   R   R!   (    (    sf   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/dialects/mysql/oursql.pyt   _detect_charsetù   s    c         C   s
   | j  ƒ  S(   s.   oursql isn't super-broken like MySQLdb, yaaay.(   t   fetchall(   R   t   rpR+   (    (    sf   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/dialects/mysql/oursql.pyt   _compat_fetchallþ   s    c         C   s
   | j  ƒ  S(   s.   oursql isn't super-broken like MySQLdb, yaaay.(   t   fetchone(   R   Rz   R+   (    (    sf   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/dialects/mysql/oursql.pyt   _compat_fetchone  s    c         C   s
   | j  ƒ  S(   N(   t   first(   R   Rz   R+   (    (    sf   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/dialects/mysql/oursql.pyt   _compat_first  s    N(/   R   R   t   driverR   R#   R   t   supports_unicode_bindst   supports_unicode_statementst   supports_native_decimalt   supports_sane_rowcountt   supports_sane_multi_rowcountR   t   execution_ctx_clst   update_copyR   t   colspecst   sqltypest   TimeR   R    t   classmethodR   R   R   R"   R,   R-   R.   R   R1   R2   R3   R7   R9   R:   R;   R<   R=   R?   RJ   Ri   Ru   Rw   Rx   R{   R}   R   (    (    (    sf   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/dialects/mysql/oursql.pyR   9   sP   													"			(   t   __doc__Rj   t   baseR    R   R   t    R   R‰   R   R   R   R   R   (    (    (    sf   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/dialects/mysql/oursql.pyt   <module>#   s   Ñ