B
    b2                 @   s   d Z ddlZi ZG dd dZG dd deZeed< G dd	 d	eZeed
< G dd deZG dd deZeed< G d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   -lib/python3.7/site-packages/BioSQL/DBUtils.py__init__   s    zGeneric_dbutils.__init__c             C   s   |dkr|S dS dS )zReturn the name of the table.ZbiosequenceZbioentryNr   )r   tabler   r   r   tname   s    zGeneric_dbutils.tnamec             C   s0   |  |}d||f }|| | }|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   | ||pd dS )zJust execute an sql command.r   N)r	   )r   r   r   argsr   r   r   r	   ,   s    zGeneric_dbutils.executec             C   s   | || 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)N)r   )
__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   | 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   |  |}|||pd dS )z_Execute SQL command.

        Replaces %s with ? for variable substitution in sqlite3.
        r   N)r   r	   )r   r   r   r   r   r   r   r	   A   s    
zSqlite_dbutils.executec             C   s   |  |}||| dS )zExecute many sql statements.N)r   r   )r   r   r   r   r   r   r   r   I   s    
zSqlite_dbutils.executemany)N)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   s<   t jdkrt| ||S y| S  tk
r6   |jS X d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,   |  |}d| }|| | }|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,   |  |}d| }|| | }|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   sB   |r"t jdkrd|_q>|d nt jdkr4d|_n
|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)T)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)T)r   r   r   r   r   r   r   r   r   r&      s   r&   Zpgdbc             C   s&   y
t |   S  tk
r    t S X dS )z:Return the correct dbutils object for the database driver.N)_dbutilsKeyErrorr   )Zmodule_namer   r   r   get_dbutils   s    
r*   )
r   r    r(   r   r   r   r#   r%   r&   r*   r   r   r   r   <module>   s   %