ó
H`¾Tc           @   sŅ   d  Z  d d l m Z m Z d d l m Z m Z d d l m	 Z	 d d l
 Z
 d e f d	     YZ d
 e e j f d     YZ d e e j f d     YZ d e f d     YZ d e f d     YZ e Z d S(   sK  
.. dialect:: firebird+kinterbasdb
    :name: kinterbasdb
    :dbapi: kinterbasdb
    :connectstring: firebird+kinterbasdb://user:password@host:port/path/to/db[?key=value&key=value...]
    :url: http://firebirdsql.org/index.php?op=devel&sub=python

Arguments
----------

The Kinterbasdb backend accepts the ``enable_rowcount`` and ``retaining``
arguments accepted by the :mod:`sqlalchemy.dialects.firebird.fdb` dialect.
In addition, it also accepts the following:

* ``type_conv`` - select the kind of mapping done on the types: by default
  SQLAlchemy uses 200 with Unicode, datetime and decimal support.  See
  the linked documents below for further information.

* ``concurrency_level`` - set the backend policy with regards to threading
  issues: by default SQLAlchemy uses policy 1.  See the linked documents
  below for further information.

.. seealso::

    http://sourceforge.net/projects/kinterbasdb

    http://kinterbasdb.sourceforge.net/dist_docs/usage.html#adv_param_conv_dynamic_type_translation

    http://kinterbasdb.sourceforge.net/dist_docs/usage.html#special_issue_concurrency

i   (   t	   FBDialectt   FBExecutionContexti   (   t   utilt   typesi’’’’(   t   matchNt   _kinterbasdb_numericc           B   s   e  Z d    Z RS(   c         C   s   d   } | S(   Nc         S   s$   t  |  t j  r t |   S|  Sd  S(   N(   t
   isinstancet   decimalt   Decimalt   str(   t   value(    (    sn   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/dialects/firebird/kinterbasdb.pyt   process1   s    
(    (   t   selft   dialectR   (    (    sn   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/dialects/firebird/kinterbasdb.pyt   bind_processor0   s    	(   t   __name__t
   __module__R   (    (    (    sn   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/dialects/firebird/kinterbasdb.pyR   /   s   t   _FBNumeric_kinterbasdbc           B   s   e  Z RS(    (   R   R   (    (    (    sn   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/dialects/firebird/kinterbasdb.pyR   9   s   t   _FBFloat_kinterbasdbc           B   s   e  Z RS(    (   R   R   (    (    (    sn   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/dialects/firebird/kinterbasdb.pyR   =   s   t   FBExecutionContext_kinterbasdbc           B   s   e  Z e d     Z RS(   c         C   s-   |  j  j d |  j j  r% |  j j Sd Sd  S(   Nt   enable_rowcounti’’’’(   t   execution_optionst   getR   R   t   cursort   rowcount(   R   (    (    sn   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/dialects/firebird/kinterbasdb.pyR   B   s    
(   R   R   t   propertyR   (    (    (    sn   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/dialects/firebird/kinterbasdb.pyR   A   s   t   FBDialect_kinterbasdbc           B   sµ   e  Z d  Z e Z e Z e Z e Z	 e
 j e j i e e j 6e e j 6 Z d d e e d  Z e d    Z d d  Z d   Z d   Z d   Z d	   Z d
   Z d   Z RS(   t   kinterbasdbiČ   i   c         K   sP   t  t |   j |   | |  _ | |  _ | |  _ | |  _ | rL t |  _ n  d  S(   N(	   t   superR   t   __init__R   t	   type_convt   concurrency_levelt	   retainingt   Truet   supports_sane_rowcount(   R   R   R   R   R    t   kwargs(    (    sn   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/dialects/firebird/kinterbasdb.pyR   \   s    				c         C   s
   t  d  S(   NR   (   t
   __import__(   t   cls(    (    sn   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/dialects/firebird/kinterbasdb.pyt   dbapig   s    c         C   s   | j  | | p g   d  S(   N(   t   execute(   R   R   t	   statementt
   parameterst   context(    (    sn   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/dialects/firebird/kinterbasdb.pyt
   do_executek   s    c         C   s   | j  |  j  d  S(   N(   t   rollbackR    (   R   t   dbapi_connection(    (    sn   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/dialects/firebird/kinterbasdb.pyt   do_rollbackp   s    c         C   s   | j  |  j  d  S(   N(   t   commitR    (   R   R-   (    (    sn   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/dialects/firebird/kinterbasdb.pyt	   do_commits   s    c         C   s  | j  d d  } | j d  rG d | d | d f | d <| d =n  | j | j  t j | d t  | j d |  j  } | j d |  j	  } |  j
 d  k	 rt |  j
 d d   } | d  k rÜ t |  j
 d	 t  } n  | s|  j
 j d | d |  qn  g  | f S(
   Nt   usernamet   usert   ports   %s/%st   hostR   R   t   initializedt   _initialized(   t   translate_connect_argsR   t   updatet   queryR   t   coerce_kw_typet   intt   popR   R   R&   t   Nonet   getattrt   Falset   init(   R   t   urlt   optsR   R   R5   (    (    sn   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/dialects/firebird/kinterbasdb.pyt   create_connect_argsv   s"    
	c         C   s   | j  } | j } |  j |  S(   sĘ   Get the version of the Firebird server used by a connection.

        Returns a tuple of (`major`, `minor`, `build`), three integers
        representing the version of the attached server.
        (   t
   connectiont   server_versiont   _parse_version_info(   R   RD   t   fbconnt   version(    (    sn   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/dialects/firebird/kinterbasdb.pyt   _get_server_version_info   s    		c         C   s³   t  d |  } | s( t d |   n  | j d  d  k rv t g  | j d d d  D] } t |  ^ qV d g  St g  | j d d	 d
  D] } t |  ^ q d g  Sd  S(   Ns3   \w+-V(\d+)\.(\d+)\.(\d+)\.(\d+)( \w+ (\d+)\.(\d+))?s,   Could not determine version from string '%s'i   i   i   i   t   firebirdi   i   i   t	   interbase(   R   t   AssertionErrort   groupR=   t   tupleR;   (   R   RH   t   mt   x(    (    sn   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/dialects/firebird/kinterbasdb.pyRF   ”   s    9c         C   sc   t  | |  j j |  j j f  r[ t |  } d | k pZ d | k pZ d | k pZ d | k St Sd  S(   Ns*   Unable to complete network request to hosts   Invalid connection states   Invalid cursor states   connection shutdown(   R   R&   t   OperationalErrort   ProgrammingErrorR	   R?   (   R   t   eRD   R   t   msg(    (    sn   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/dialects/firebird/kinterbasdb.pyt   is_disconnect­   s    
N(   R   R   t   driverR?   R"   t   supports_sane_multi_rowcountR   t   execution_ctx_clsR!   t   supports_native_decimalR   t   update_copyR    t   colspecsR   t   sqltypest   NumericR   t   FloatR   t   classmethodR&   R=   R+   R.   R0   RC   RI   RF   RU   (    (    (    sn   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/dialects/firebird/kinterbasdb.pyR   K   s*   
						(   t   __doc__t   baseR    R   t    R   R   R\   t   reR   R   t   objectR   R]   R   R^   R   R   R   R   (    (    (    sn   /var/www/send.findwatt.com/datamanager/lib/python2.7/site-packages/sqlalchemy/dialects/firebird/kinterbasdb.pyt   <module>'   s   

m