
    ui                      J   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,  G d dej-                  Z- G 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            
           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      J/var/www/icac/venv/lib/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+ 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__D   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   |                                  d S )NzPRAGMA foreign_keys = ONr-   )r[   starttxr/   initialize_migrations)r'   curr\   s     r(   r^   zSqliteDB.start^   s     	WWYY 	;#KK2333KK9:::	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	""$$$$$s   +A--A14A1zSqliteDB.stopc                 z    t                                                       | j                                         d S r$   )r[   stoprH   r;   )r'   r\   s    r(   rc   zSqliteDB.stopg   s0     	r*   c                      t           j        S r$   )pypikaQueryrE   r*   r(   querybuilderzSqliteDB.querybuilderm   s     |r*   c                      dS )N?rE   rE   r*   r(   parameter_formatzSqliteDB.parameter_formatr   s	     sr*   c                      dS )NsqliterE   rE   r*   r(   migration_scopezSqliteDB.migration_scopew   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(   r_   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   
ValueErrorr_   r/   fetchallrH   r;   r^   r[   reset_state)r'   ra   rowr\   s      r(   rv   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)
                    )
                    )r_   r/   r'   ra   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)r_   r/   fetchonery   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)
r_   r/   nameru   r   strintr0   r   rm   )
r'   r~   ra   
migrationsrw   	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ra   	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'   ra   r   s      r(   apply_migrationzSqliteDB.apply_migration   so    )E*+++
 % )$*%% &!	
 	
 	
 	
 	
r*   valuec                 (    | t          |           nd S r$   r   )r   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*   )r+   N)-r>   r?   r@   r   rA   r
   r   r   r   r   boolr	   r)   r   r   ALLr   r^   rc   staticmethodr   re   rf   rg   rj   rm   ro   r   r_   rv   rz   r}   r   r   rB   rC   r   r   r   r   r   r   rD   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 \& & & & &r*   rG   )/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   re   typingr   r   r   r   r   typing_extensionsr   typesr   rV   r   r   	threadingr   importlib_resourcesr   importlib_resources.abcr   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 % % % % % %       				             % % % % % % / / / / / /               F}& }& }& }& }&|/ }& }& }& }& }&r*   