
    Zi$                     r   d dl Z 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c 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-  e j.        e/          Z0 G d dej1                  Z1 G d deee          Z2dS )    N)
ConnectionLockPoolPerThreadPoolPool)MigratableDB	Migration)SystemSettings)SqlEmbeddingsQueue)SqlSysDB)OpenTelemetryClientOpenTelemetryGranularitytrace_method)override)SequencecastOptionalTypeAny)Literal)TracebackTypeUUID)local)files)Traversablec            
           e Zd ZU eed<   eed<   dedefdZede	j
        fd            Zedeee                  d	ee         d
ee         ded         fd            ZdS )	TxWrapper_conn_pool	conn_poolstackc                 T    || _         |                                | _        || _        d S N)	_tx_stackconnectr   r    )selfr!   r"   s      T/root/projects/butler/venv/lib64/python3.11/site-packages/chromadb/db/impl/sqlite.py__init__zTxWrapper.__init__    s'    &&((



    returnc                    t          | j        j                  dk    r4| j                            d           | j                            d           | j        j                            |            | j                                        S )Nr   PRAGMA case_sensitive_like = ONzBEGIN;)lenr%   r"   r   executeappendcursorr'   s    r(   	__enter__zTxWrapper.__enter__%   st    t~#$$))J@AAAJx(((##D)))z  """r*   exc_type	exc_value	tracebackFc                 z   | j         j                                         t          | j         j                  dk    r5|| j                                         n| j                                         | j                                                                         | j	        
                    | j                   dS )Nr   F)r%   r"   popr.   r   commitrollbackr1   closer    return_to_pool)r'   r4   r5   r6   s       r(   __exit__zTxWrapper.__exit__-   s     	  """t~#$$))
!!####
##%%%
!!###
!!$*---ur*   N)__name__
__module____qualname__r   __annotations__r   r   r)   r   baseCursorr3   r   r   BaseExceptionr   r   r=    r*   r(   r   r      s         KKK$ u    
 #4; # # # X# 4./ M* M*	
 
   X  r*   r   c                       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Z ed	ej                  ed( fd                        Z edej                  ed( fd                        Zeed
eej                 fd                        Zeed
efd                        Zeed
efd                        Zed
ee         fd            Zed
efd            Z edej                  ed( fd                        Z edej                  ed(d                        Z edej                  ed
e
fd                        Z edej                  eded
ee          fd                        Z!ede"j#        de d
dfd            Z$eed e%e&         d
e%e'         fd!                        Z(eed"e%e'         d
e%e&         fd#                        Z)eed
ee*         fd$                        Z+d)d&e,d
dfd'Z- xZ.S )*SqliteDB
_conn_pool	_settings_migration_imports_db_filer%   _is_persistentsystemc                    |j         | _        t          d          t          d          t          d          g| _        | j                            d          | _        |                    t                    | _        | j        s#d| _        t          | j        d          | _
        n| j                            d          d	z   | _        t          j                            | j                  s8t          j        t          j                            | j                  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)settingsrI   r   rJ   requirerL   r   _opentelemetry_clientrK   r   rH   ospathexistsmakedirsdirnamer   r   r%   superr)   )r'   rM   	__class__s     r(   r)   zSqliteDB.__init__G   s2   899-...//#

 #n44_EE%+^^4G%H%H"" 	;
 9DM&t}TBBBDOO &&':;;>OO M 7>>$-00 KBGOODM::TJJJJ+DM::DO     r*   zSqliteDB.startr+   Nc                    t                                                       |                                 5 }|                    d           |                    d           d d d            n# 1 swxY w Y   |                                  | j                            d          dk    r=| j                            d          j	        du rt                              d           d S d S d S )NzPRAGMA foreign_keys = ONr-   
migrationsapplyautomatically_purgeFu   ⚠️ It looks like you upgraded from a version below 0.5.6 and could benefit from vacuuming your database. Run chromadb utils vacuum --help for more information.)r[   starttxr/   initialize_migrationsrI   rT   configget_parametervalueloggerwarning)r'   curr\   s     r(   ra   zSqliteDB.starta   s     	WWYY 	;#KK2333KK9:::	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	""$$$ N""<00G;;))*?@@F%OONN v     <;OOs   +A--A14A1zSqliteDB.stopc                 z    t                                                       | j                                         d S r$   )r[   stoprH   r;   )r'   r\   s    r(   rk   zSqliteDB.stops   s0     	r*   c                      t           j        S r$   )pypikaQueryrE   r*   r(   querybuilderzSqliteDB.querybuildery   s     |r*   c                      dS )N?rE   rE   r*   r(   parameter_formatzSqliteDB.parameter_format~   s	     sr*   c                      dS )NsqliterE   rE   r*   r(   migration_scopezSqliteDB.migration_scope   s	     xr*   c                     | j         S r$   )rJ   r2   s    r(   migration_dirszSqliteDB.migration_dirs   s    &&r*   c                 z    t          | j        d          sg | j        _        t          | j        | j                  S )Nr"   )r"   )hasattrr%   r"   r   rH   r2   s    r(   rb   zSqliteDB.tx   s7    t~w// 	&#%DN ????r*   zSqliteDB.reset_statec                    | j                             d          st          d          |                                 5 }|                    d           |                                D ] }|                    d|d                     !	 d d d            n# 1 swxY 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   )rI   rT   
ValueErrorrb   r/   fetchallrH   r;   ra   r[   reset_state)r'   ri   rowr\   s      r(   r~   zSqliteDB.reset_state   s1    ~%%m44 	 p   WWYY 		>#KK   ||~~ > ><CF<<====>		> 		> 		> 		> 		> 		> 		> 		> 		> 		> 		> 		> 		> 		> 		> 	

s   ABBBzSqliteDB.setup_migrationsc                     |                                  5 }|                    d           d d d            d S # 1 swxY 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)
                    )
                    )rb   r/   r'   ri   s     r(   setup_migrationszSqliteDB.setup_migrations   s     WWYY 	#KK	  	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   8<<zSqliteDB.migrations_initializedc                     |                                  5 }|                    d           |                                d         dk    r	 d d d            dS 	 d d d            dS # 1 swxY w Y   d S )Nz[SELECT count(*) FROM sqlite_master
                WHERE type='table' AND name='migrations'r   FT)rb   r/   fetchoner   s     r(   migrations_initializedzSqliteDB.migrations_initialized   s     WWYY 		#KK<  
 ||~~a A%%		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		s   5A%A%%A),A)zSqliteDB.db_migrationsdirc                 N   |                                  5 }|                    d|j        f           g }|                                D ]}t	          t
          |d                   }t	          t          |d                   }t	          t
          |d                   }t	          t
          |d                   }t	          t
          |d                   }	|                    t          |||||	| 	                                                     |cd d d            S # 1 swxY w Y   d S )Nz
                SELECT dir, version, filename, sql, hash
                FROM migrations
                WHERE dir = ?
                ORDER BY version ASC
                r               )r   versionfilenamesqlhashscope)
rb   r/   namer}   r   strintr0   r   ru   )
r'   r   ri   r^   r   	found_dirfound_versionfound_filename	found_sql
found_hashs
             r(   db_migrationszSqliteDB.db_migrations   sf    WWYY 	#KK    J||~~   c!f--	 $S#a& 1 1!%c3q6!2!2 c!f--	!#s1v..
!!% -!/%'"2244  	 	 	 	 9	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   C8DD!Dri   	migrationc           	          |                     |d                    |                    d|d         |d         |d         |d         |d         f           d S )Nr   zw
            INSERT INTO migrations (dir, version, filename, sql, hash)
            VALUES (?, ?, ?, ?, ?)
            r   r   r   r   )executescriptr/   )r'   ri   r   s      r(   apply_migrationzSqliteDB.apply_migration   so    )E*+++
 % )$*%% &!	
 	
 	
 	
 	
r*   rf   c                 (    | t          |           nd S r$   r   )rf   s    r(   uuid_from_dbzSqliteDB.uuid_from_db   s     $/tE{{{T9r*   uuidc                 (    | t          |           nd S r$   )r   )r   s    r(   
uuid_to_dbzSqliteDB.uuid_to_db   s     !,s4yyy$6r*   c                      t           j        S r$   )sqlite3IntegrityErrorrE   r*   r(   unique_constraint_errorz SqliteDB.unique_constraint_error  s     %%r*      timeoutc                     | j                                         }|                    dt          |          dz              |                    d           |                    d           dS )zdRuns VACUUM on the database. `timeout` is the maximum time to wait for an exclusive lock in seconds.zPRAGMA busy_timeout = i  VACUUMz}
            INSERT INTO maintenance_log (operation, timestamp)
            VALUES ('vacuum', CURRENT_TIMESTAMP)
            N)rH   r&   r/   r   )r'   r   conns      r(   vacuumzSqliteDB.vacuum  sr    &&((Cc'llT.ACCDDDX	
 	
 	
 	
 	
r*   )r+   N)r   )/r>   r?   r@   r   rA   r
   r   r   r   r   boolr	   r)   r   r   ALLr   ra   rk   staticmethodr   rm   rn   ro   rr   ru   rw   r   rb   r~   r   r   r   r   rB   rC   r   r   r   r   r   r   rD   r   r   r   __classcell__)r\   s   @r(   rG   rG   ?   s;         ----MMM!v ! ! ! ! ! !4 \"$<$@AA     X BA  \/#;#?@@          X A@  $v|,    X \ c    X \ S    X \ ' 5 ' ' ' X' @I @ @ @ X@
 \(*B*FGG     X HG& \-/G/KLL   X ML \35M5QRR
 
 
 
 X SR
 \*,D,HII )1D    X JI> 
4; 
9 
 
 
 
 X
  :HSM :htn : : : X \: 7$ 7HSM 7 7 7 X \7 &T-%8 & & & X \&

 

c 

$ 

 

 

 

 

 

 

 

r*   rG   )3loggingchromadb.db.impl.sqlite_poolr   r   r   r   chromadb.db.migrationsr   r   chromadb.configr	   r
   chromadb.db.basedbrB   #chromadb.db.mixins.embeddings_queuer   chromadb.db.mixins.sysdbr    chromadb.telemetry.opentelemetryr   r   r   r   	overridesr   rm   typingr   r   r   r   r   typing_extensionsr   typesr   rV   r   r   	threadingr   importlib_resourcesr   importlib_resources.abcr   	getLoggerr>   rg   r   rG   rE   r*   r(   <module>r      s    R R R R R R R R R R R R : : : : : : : : , , , , , , , ,          B B B B B B - - - - - -         
         6 6 6 6 6 6 6 6 6 6 6 6 6 6 % % % % % %       				             % % % % % % / / / / / /		8	$	$               FR
 R
 R
 R
 R
|/ R
 R
 R
 R
 R
r*   