U
    m·…eP  ã                   @   sÀ   U d Z ddlZddlmZmZ i Zeeed f ed< 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).é    N)ÚDictÚTypeÚGeneric_dbutilsÚ_dbutilsc                   @   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 )r   zDefault database utilities.c                 C   s   dS )z Create a Generic_dbutils object.N© )Úselfr   r   ú-lib/python3.8/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   s4   |   |¡}d|› d|› }| |¡ | ¡ }|d S )ú$Return the last used id for a table.zselect max(z
_id) from r   ©r   ÚexecuteZ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 )ú*Set autocommit on the database connection.Nr   ©r   Z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   	
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   @   s    
zSqlite_dbutils.executec                 C   s   |   |¡}| ||¡ dS )zExecute many sql statements.N)r%   r   r   r   r   r   r   H   s    
zSqlite_dbutils.executemany)N)r   r   r    r!   r%   r   r   r   r   r   r   r"   9   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   sB   t jdkrt | ||¡S z
| ¡ W S  tk
r<   |j Y S X dS )r   ÚjavaN)ÚosÚnamer   r   Z	insert_idÚAttributeErrorZ	lastrowid)r   r   r
   r   r   r   r   T   s    

zMysql_dbutils.last_idN)r   r   r    r!   r   r   r   r   r   r&   Q   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   s0   |   |¡}d|› d}| |¡ | ¡ }|d S )NzSELECT nextval('ú	_pk_seq')r   r   r   r   r   r   Únext_idh   s
    

z_PostgreSQL_dbutils.next_idc                 C   s0   |   |¡}d|› d}| |¡ | ¡ }|d S )NzSELECT currval('r,   r   r   r   r   r   r   r   o   s
    

z_PostgreSQL_dbutils.last_idN)r   r   r    r!   r-   r   r   r   r   r   r+   e   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 )r   r'   r   r   N)r(   r)   r   Zset_isolation_levelr   r   r   r   r   z   s    

zPsycopg2_dbutils.autocommitN)T©r   r   r    r!   r   r   r   r   r   r.   w   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)ÚNotImplementedErrorr   r   r   r   r   Ž   s    zPgdb_dbutils.autocommitN)Tr/   r   r   r   r   r0   ‹   s   r0   Zpgdbc                 C   s,   zt |  ƒ W S  tk
r&   tƒ  Y S X dS )z:Return the correct dbutils object for the database driver.N)r   ÚKeyErrorr   )Zmodule_namer   r   r   Úget_dbutils–   s    r3   )r!   r(   Útypingr   r   r   ÚstrÚ__annotations__r   r"   r&   r+   r.   r0   r3   r   r   r   r   Ú<module>   s   #