
:>"^:  ใ               @   sิ   d  Z  d d l Z i  Z Gd d   d e  Z Gd d   d e  Z e e d <Gd d	   d	 e  Z e e d
 <Gd d   d e  Z Gd d   d e  Z e e d <Gd d   d e  Z	 e	 e d <d d   Z
 d S)z;Helper code for Biopython's BioSQL code (for internal use).้    Nc               @   sd   e  Z d  Z d Z d d   Z d d   Z d d   Z d d	 d
  Z d d   Z d d d  Z	 d S)ฺGeneric_dbutilszDefault database utilities.c             C   s   d S)z Create a Generic_dbutils object.Nฉ )ฺselfr   r   ๚3/tmp/pip-build-ww9dw3qa/biopython/BioSQL/DBUtils.pyฺ__init__   s    zGeneric_dbutils.__init__c             C   s   | d k r | Sd Sd S)zReturn the name of the table.ZbiosequenceZbioentryNr   )r   ฺtabler   r   r   ฺtname   s    zGeneric_dbutils.tnamec             C   s@   |  j  |  } d | | f } | j |  | j   } | d S)z$Return the last used id for a table.zselect max(%s_id) from %sr   )r   ฺexecuteฺfetchone)r   ฺcursorr   ฺsqlฺrvr   r   r   ฺlast_id#   s
    zGeneric_dbutils.last_idNc             C   s   | j  | | p f   d S)zJust execute an sql command.N)r	   )r   r   r   ฺargsr   r   r   r	   ,   s    zGeneric_dbutils.executec             C   s   | j  | |  d S)zExecute many sql commands.N)ฺexecutemany)r   r   r   ฺseqr   r   r   r   0   s    zGeneric_dbutils.executemany้   c             C   s   d S)z*Set autocommit on the database connection.Nr   )r   ฺconnฺyr   r   r   ฺ
autocommit4   s    zGeneric_dbutils.autocommit)
ฺ__name__ฺ
__module__ฺ__qualname__ฺ__doc__r   r   r   r	   r   r   r   r   r   r   r      s   	r   c               @   s=   e  Z d  Z d Z d d   Z d d d  Z d d   Z d S)	ฺSqlite_dbutilsz%Custom database utilities for SQLite.c             C   s   | j  d d  S)z6Format the argument placeholders for sqlite (PRIVATE).z%s๚?)ฺreplace)r   r   r   r   r   ฺ_sub_placeholder=   s    zSqlite_dbutils._sub_placeholderNc             C   s)   |  j  |  } | j | | p! f   d S)z_Execute SQL command.

        Replaces %s with ? for variable substitution in sqlite3.
        N)r   r	   )r   r   r   r   r   r   r   r	   A   s    zSqlite_dbutils.executec             C   s#   |  j  |  } | j | |  d S)zExecute many sql statements.N)r   r   )r   r   r   r   r   r   r   r   I   s    zSqlite_dbutils.executemany)r   r   r   r   r   r	   r   r   r   r   r   r   :   s   r   Zsqlite3c               @   s"   e  Z d  Z d Z d d   Z d S)ฺMysql_dbutilsz$Custom database utilities for MySQL.c             C   sP   t  j d k r" t j |  | |  Sy | j   SWn t k
 rK | j SYn Xd S)z$Return the last used id for a table.ฺjavaN)ฺosฺnamer   r   Z	insert_idฺAttributeErrorZ	lastrowid)r   r   r   r   r   r   r   U   s    zMysql_dbutils.last_idN)r   r   r   r   r   r   r   r   r   r   R   s   r   ZMySQLdbc               @   s.   e  Z d  Z d Z d d   Z d d   Z d S)ฺ_PostgreSQL_dbutilsz&Base class for any PostgreSQL adaptor.c             C   s:   |  j  |  } d | } | j |  | j   } | d S)NzSELECT nextval('%s_pk_seq')r   )r   r	   r
   )r   r   r   r   r   r   r   r   ฺnext_idi   s
    
z_PostgreSQL_dbutils.next_idc             C   s:   |  j  |  } d | } | j |  | j   } | d S)NzSELECT currval('%s_pk_seq')r   )r   r	   r
   )r   r   r   r   r   r   r   r   r   p   s
    
z_PostgreSQL_dbutils.last_idN)r   r   r   r   r$   r   r   r   r   r   r#   f   s   r#   c               @   s%   e  Z d  Z d Z d d d  Z d S)ฺPsycopg2_dbutilsz4Custom database utilities for Psycopg2 (PostgreSQL).Tc             C   s]   | r1 t  j d k r! d | _ qY | j d  n( t  j d k rL d | _ n | j d  d S)z*Set autocommit on the database connection.r   r   r   N)r    r!   r   Zset_isolation_level)r   r   r   r   r   r   r   {   s    zPsycopg2_dbutils.autocommitN)r   r   r   r   r   r   r   r   r   r%   x   s   r%   Zpsycopg2c               @   s%   e  Z d  Z d Z d d d  Z d S)ฺPgdb_dbutilszBCustom database utilities for Pgdb (aka PyGreSQL, for PostgreSQL).Tc             C   s   t  d   d S)zESet autocommit on the database connection. Currently not implemented.zpgdb does not support this!N)ฺNotImplementedError)r   r   r   r   r   r   r      s    zPgdb_dbutils.autocommitN)r   r   r   r   r   r   r   r   r   r&      s   r&   Zpgdbc             C   s/   y t  |    SWn t k
 r* t   SYn Xd S)z:Return the correct dbutils object for the database driver.N)ฺ_dbutilsฺKeyErrorr   )ฺmodule_namer   r   r   ฺget_dbutils   s    r+   )r   r    r(   ฺobjectr   r   r   r#   r%   r&   r+   r   r   r   r   ฺ<module>   s   %



