o
    1Xxi                      @   s(  d dl mZmZmZmZ d dlmZmZ d dlm	Z	m
Z
 d dlm  mZ d dlmZ d dlmZ d dlmZmZmZ d dlZd dlmZ d dlZd d	lmZmZmZmZmZ d d
l m!Z! d dl"m#Z# d dl$Z$d dl%m&Z& d dl'm(Z( d dl)m*Z* d dl+m,Z, G dd dej-Z-G dd deeeZ.dS )    )
ConnectionLockPoolPerThreadPoolPool)MigratableDB	Migration)SystemSettingsN)SqlEmbeddingsQueue)SqlSysDB)OpenTelemetryClientOpenTelemetryGranularitytrace_method)override)SequencecastOptionalTypeAny)Literal)TracebackTypeUUID)local)files)Traversablec                
   @   sv   e Zd ZU eed< eed< dedefddZede	j
fdd	Zed
eee  dee dee ded fddZdS )	TxWrapper_conn_pool	conn_poolstackc                 C   s   || _ | | _|| _d S N)	_tx_stackconnectr   r   )selfr   r     r%   V/home/air/biblejyuku/back/venv/lib/python3.10/site-packages/chromadb/db/impl/sqlite.py__init__   s   

zTxWrapper.__init__returnc                 C   s@   t | jjdkr| jd | jd | jj|  | j S )Nr   PRAGMA case_sensitive_like = ONzBEGIN;)lenr"   r    r   executeappendcursorr$   r%   r%   r&   	__enter__"   s
   
zTxWrapper.__enter__exc_type	exc_value	tracebackFc                 C   sZ   | j j  t| j jdkr|d u r| j  n| j  | j   | j	
| j dS )Nr   F)r"   r    popr*   r   commitrollbackr-   closer   return_to_pool)r$   r0   r1   r2   r%   r%   r&   __exit__*   s   
zTxWrapper.__exit__N)__name__
__module____qualname__r   __annotations__r   r   r'   r   baseCursorr/   r   r   BaseExceptionr   r   r8   r%   r%   r%   r&   r      s    
 
r   c                       s  e Zd ZU eed< eed< ee ed< eed< e	ed< e
ed< def fdd	Zed
ejed/ fdd
Zedejed/ fddZeedeej fddZeedefddZeedefddZedee fddZedefddZedejed/ fddZedejed/ddZedejede
fddZed ejed!edee  fd"d Z!ed#e"j#d$e ddfd%d&Z$eed'e%e& de%e' fd(d)Z(eed*e%e' de%e& fd+d,Z)eedee* fd-d.Z+  Z,S )0SqliteDB
_conn_pool	_settings_migration_imports_db_filer"   _is_persistentsystemc                    s   |j | _tdtdtdg| _| jd| _|t| _| js,d| _t	| jdd| _
n"| jdd	 | _tj| jsHtjtj| jdd
 t| j| _
t | _t | d S )Nz$chromadb.migrations.embeddings_queuezchromadb.migrations.sysdbzchromadb.migrations.metadbis_persistentzfile::memory:?cache=sharedT)is_uripersist_directoryz/chroma.sqlite3)exist_ok)settingsrB   r   rC   requirerE   r   _opentelemetry_clientrD   r   rA   ospathexistsmakedirsdirnamer   r   r"   superr'   )r$   rF   	__class__r%   r&   r'   D   s"   zSqliteDB.__init__zSqliteDB.startr(   Nc                    sR   t    |  }|d |d W d    n1 sw   Y  |   d S )NzPRAGMA foreign_keys = ONr)   )rS   starttxr+   initialize_migrationsr$   currT   r%   r&   rV   ^   s   


zSqliteDB.stopc                    s   t    | j  d S r!   )rS   stoprA   r6   r.   rT   r%   r&   r[   g   s   
c                   C      t jS r!   )pypikaQueryr%   r%   r%   r&   querybuilderm      zSqliteDB.querybuilderc                   C      dS )N?r%   r%   r%   r%   r&   parameter_formatr      zSqliteDB.parameter_formatc                   C   ra   )Nsqliter%   r%   r%   r%   r&   migration_scopew   rd   zSqliteDB.migration_scopec                 C   s   | j S r!   )rC   r.   r%   r%   r&   migration_dirs|   s   zSqliteDB.migration_dirsc                 C   s$   t | jds
g | j_t| j| jdS )Nr    )r    )hasattrr"   r    r   rA   r.   r%   r%   r&   rW      s   zSqliteDB.txzSqliteDB.reset_statec                    s   | j ds
td|  }|d | D ]}|d|d   qW d    n1 s/w   Y  | j  |   t	 
  d S )Nallow_resetzResetting the database is not allowed. Set `allow_reset` to true in the config in tests or other non-production environments where reset should be permitted.zo
                    SELECT name FROM sqlite_master
                    WHERE type='table'
                    zDROP TABLE IF EXISTS r   )rB   rL   
ValueErrorrW   r+   fetchallrA   r6   rV   rS   reset_state)r$   rZ   rowrT   r%   r&   rl      s   


zSqliteDB.setup_migrationsc                 C   s8   |   }|d W d    d S 1 sw   Y  d S )Na~  
                    CREATE TABLE IF NOT EXISTS migrations (
                        dir TEXT NOT NULL,
                        version INTEGER NOT NULL,
                        filename TEXT NOT NULL,
                        sql TEXT NOT NULL,
                        hash TEXT NOT NULL,
                        PRIMARY KEY (dir, version)
                    )
                    )rW   r+   rY   r%   r%   r&   setup_migrations   s
   
"zSqliteDB.migrations_initializedc                 C   s\   |    }|d | d dkr	 W d    dS 	 W d    dS 1 s'w   Y  d S )Nz[SELECT count(*) FROM sqlite_master
                WHERE type='table' AND name='migrations'r   FT)rW   r+   fetchonerY   r%   r%   r&   migrations_initialized   s   
	$zSqliteDB.db_migrationsdirc           
      C   s   |   M}|d|jf g }| D ]4}tt|d }tt|d }tt|d }tt|d }tt|d }	|t|||||	| 	 d q|W  d    S 1 sTw   Y  d S )Nz
                SELECT dir, version, filename, sql, hash
                FROM migrations
                WHERE dir = ?
                ORDER BY version ASC
                r               )rq   versionfilenamesqlhashscope)
rW   r+   namerk   r   strintr,   r   rf   )
r$   rq   rZ   
migrationsrm   	found_dirfound_versionfound_filename	found_sql
found_hashr%   r%   r&   db_migrations   s0   


$rZ   	migrationc              	   C   s<   | |d  |d|d |d |d |d |d f d S )Nrx   zw
            INSERT INTO migrations (dir, version, filename, sql, hash)
            VALUES (?, ?, ?, ?, ?)
            rq   rv   rw   ry   )executescriptr+   )r$   rZ   r   r%   r%   r&   apply_migration   s   zSqliteDB.apply_migrationvaluec                 C      | d urt | S d S r!   r   )r   r%   r%   r&   uuid_from_db      zSqliteDB.uuid_from_dbuuidc                 C   r   r!   )r|   )r   r%   r%   r&   
uuid_to_db   r   zSqliteDB.uuid_to_dbc                   C   r\   r!   )sqlite3IntegrityErrorr%   r%   r%   r&   unique_constraint_error   r`   z SqliteDB.unique_constraint_error)r(   N)-r9   r:   r;   r   r<   r	   r   r   r|   r   boolr   r'   r   r   ALLr   rV   r[   staticmethodr   r]   r^   r_   rc   rf   rg   r   rW   rl   rn   rp   r   r   r=   r>   r   r   r   r   r   r   r?   r   __classcell__r%   r%   rT   r&   r@   <   sd   
 





r@   )/chromadb.db.impl.sqlite_poolr   r   r   r   chromadb.db.migrationsr   r   chromadb.configr   r	   chromadb.db.basedbr=   #chromadb.db.mixins.embeddings_queuer
   chromadb.db.mixins.sysdbr    chromadb.telemetry.opentelemetryr   r   r   r   	overridesr   r]   typingr   r   r   r   r   typing_extensionsr   typesr   rN   r   r   	threadingr   importlib_resourcesr   importlib_resources.abcr   r   r@   r%   r%   r%   r&   <module>   s(    #