
    ug$                     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jb                        Z1 G d deee      Z2y)    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y)	TxWrapper_conn_pool	conn_poolstackc                 J    || _         |j                         | _        || _        y N)	_tx_stackconnectr   r    )selfr!   r"   s      L/var/www/openai/venv/lib/python3.12/site-packages/chromadb/db/impl/sqlite.py__init__zTxWrapper.__init__    s     &&(

    returnc                 0   t        | j                  j                        dk(  r6| j                  j	                  d       | j                  j	                  d       | j                  j                  j                  |        | j                  j                         S )Nr   PRAGMA case_sensitive_like = ONzBEGIN;)lenr%   r"   r   executeappendcursorr'   s    r(   	__enter__zTxWrapper.__enter__%   si    t~~##$)JJ@AJJx(##D)zz  ""r*   exc_type	exc_value	tracebackFc                    | j                   j                  j                          t        | j                   j                        dk(  r7|| j                  j                          n| j                  j                          | j                  j                         j                          | j                  j                  | j                         y)Nr   F)r%   r"   popr.   r   commitrollbackr1   closer    return_to_pool)r'   r4   r5   r6   s       r(   __exit__zTxWrapper.__exit__-   s     	  "t~~##$)

!!#

##%

!!#

!!$**-r*   N)__name__
__module____qualname__r   __annotations__r   r   r)   r   baseCursorr3   r   r   BaseExceptionr   r   r=    r*   r(   r   r      s    K$ u 
 #4;; # # 4./ M* M*	
 
 r*   r   c                   p    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"jF                  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                  j	                  d      | _        |j	                  t              | _        | j
                  s$d| _        t        | j                  d      | _
        n| j                  j	                  d      d	z   | _        t        j                  j                  | j                        s>t        j                  t        j                  j                  | j                        d
       t!        | j                        | _
        t#               | _        t&        | Q  |       y )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   s    89-../#

 #nn44_E%+^^4G%H"""
 9DM&t}}TBDO &&':;>OO M 77>>$--0BGGOODMM:TJ+DMM:DO r*   zSqliteDB.startr+   Nc                    t         |           | j                         5 }|j                  d       |j                  d       d d d        | j	                          | j
                  j                  d      dk(  r>| j                  j                  d      j                  du rt        j                  d       y y y # 1 sw Y   vxY w)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warn)r'   curr\   s     r(   ra   zSqliteDB.starta   s     	WWY#KK23KK9:  	""$ NN""<0G;))*?@FF%OKK v P < Ys   #B88CzSqliteDB.stopc                 V    t         |           | j                  j                          y r$   )r[   stoprH   r;   )r'   r\   s    r(   rk   zSqliteDB.stops   s     	r*   c                  "    t         j                  S r$   )pypikaQueryrE   r*   r(   querybuilderzSqliteDB.querybuildery   s     ||r*   c                       y)N?rE   rE   r*   r(   parameter_formatzSqliteDB.parameter_format~   s     r*   c                       y)NsqliterE   rE   r*   r(   migration_scopezSqliteDB.migration_scope   s     r*   c                     | j                   S r$   )rJ   r2   s    r(   migration_dirszSqliteDB.migration_dirs   s    &&&r*   c                     t        | j                  d      sg | j                  _        t        | j                  | j                        S )Nr"   )r"   )hasattrr%   r"   r   rH   r2   s    r(   rb   zSqliteDB.tx   s1    t~~w/#%DNN ??r*   zSqliteDB.reset_statec                    | j                   j                  d      st        d      | j                         5 }|j	                  d       |j                         D ]  }|j	                  d|d            	 d d d        | j                  j                          | j                          t        | )          y # 1 sw Y   BxY w)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   s     ~~%%m4 p  WWY#KK ||~3CF8<= &  	

 Ys   >B88CzSqliteDB.setup_migrationsc                 p    | j                         5 }|j                  d       d d d        y # 1 sw Y   y xY w)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*     WWY#KK	 YYs   ,5zSqliteDB.migrations_initializedc                     | j                         5 }|j                  d       |j                         d   dk(  r
	 d d d        y	 d d d        y# 1 sw Y   y xY w)Nz[SELECT count(*) FROM sqlite_master
                WHERE type='table' AND name='migrations'r   FT)rb   r/   fetchoner   s     r(   migrations_initializedzSqliteDB.migrations_initialized   sN     WWY#KK<
 ||~a A% Y  YYs   )AAAzSqliteDB.db_migrationsdirc                    | j                         5 }|j                  d|j                  f       g }|j                         D ]  }t	        t
        |d         }t	        t        |d         }t	        t
        |d         }t	        t
        |d         }t	        t
        |d         }	|j                  t        |||||	| j                                       |cd d d        S # 1 sw Y   y xY w)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   s     WWY#KK  J||~ c!f-	 $S#a& 1!%c3q6!2 c!f-	!#s1v.
!!% -!/%'"224	 &  9 YYs   CCC'ri   	migrationc           	      x    |j                  |d          |j                  d|d   |d   |d   |d   |d   f       y )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   sU    )E*+
 % )$*%% &!	
r*   rf   c                      | t        |       S d S r$   r   )rf   s    r(   uuid_from_dbzSqliteDB.uuid_from_db   s     $/tE{9T9r*   uuidc                      | t        |       S d S r$   )r   )r   s    r(   
uuid_to_dbzSqliteDB.uuid_to_db   s     !,s4y6$6r*   c                  "    t         j                  S r$   )sqlite3IntegrityErrorrE   r*   r(   unique_constraint_errorz SqliteDB.unique_constraint_error  s     %%%r*   timeoutc                     | j                   j                         }|j                  dt        |      dz          |j                  d       |j                  d       y)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  sO    &&(-c'lT.A-BCDX	
r*   )r+   N)   )/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    --M!v !4 "$<$@$@A  B  /#;#?#?@   A  $v||,    c    S    ' 5 ' ' @I @ @
 (*B*F*FG  H& -/G/K/KL  M 35M5Q5QR
 
  S
 *,D,H,HI )1D   J> 
4;; 
9 
 
 
  :HSM :htn :  : 7$ 7HSM 7  7 &T-%8 &  &

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 : ,   B - 
    6 6 %  	   % /			8	$   FR
|/ R
r*   