o
    Rŀg1                     @   s   U d Z ddl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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      dS )z Create a Generic_dbutils object.N )selfr   r   B/var/www/html/myenv/lib/python3.10/site-packages/BioSQL/DBUtils.py__init__       zGeneric_dbutils.__init__c                 C   s   |dkr|S dS )zReturn the name of the table.biosequencebioentryr   )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   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   .   s   zGeneric_dbutils.executemany   c                 C   r   )*Set autocommit on the database connection.Nr   r   connyr   r   r   
autocommit2   r	   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   F   s   
zSqlite_dbutils.executemanyr"   )r#   r$   r%   r&   r*   r   r   r   r   r   r   r'   7   s
    
r'   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 z| W S  ty   |j Y S w )r   java)osnamer   r   	insert_idAttributeError	lastrowid)r   r   r   r   r   r   r   R   s   


zMysql_dbutils.last_idN)r#   r$   r%   r&   r   r   r   r   r   r,   O   s    r,   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   0   |  |}d| d}|| | }|d S )NzSELECT nextval('	_pk_seq')r   r   r   r   r   r   next_idf   
   

z_PostgreSQL_dbutils.next_idc                 C   r5   )NzSELECT currval('r6   r   r   r   r   r   r   r   m   r8   z_PostgreSQL_dbutils.last_idN)r#   r$   r%   r&   r7   r   r   r   r   r   r4   c   s    r4   c                   @      e Zd ZdZdddZdS )Psycopg2_dbutilsz4Custom database utilities for Psycopg2 (PostgreSQL).Tc                 C   sH   |rt jdkrd|_dS |d dS t jdkrd|_dS |d dS )r   r-   r   r   N)r.   r/   r!   set_isolation_levelr   r   r   r   r!   x   s   



zPsycopg2_dbutils.autocommitNTr#   r$   r%   r&   r!   r   r   r   r   r:   u       r:   psycopg2c                   @   r9   )Pgdb_dbutilszBCustom database utilities for Pgdb (aka PyGreSQL, for PostgreSQL).Tc                 C   s   t d)zESet autocommit on the database connection. Currently not implemented.zpgdb does not support this!)NotImplementedErrorr   r   r   r   r!      s   zPgdb_dbutils.autocommitNr<   r=   r   r   r   r   r@      r>   r@   pgdbc                 C   s&   zt |   W S  ty   t  Y S w )z:Return the correct dbutils object for the database driver.)r   KeyErrorr   )module_namer   r   r   get_dbutils   s
   
rE   )r&   r.   r   dictstrtype__annotations__r   r'   r,   r4   r:   r@   rE   r   r   r   r   <module>   s   #