§
    ˜Štjü  ã                   óÄ   — d dl Z d dlZd dlmZmZ d dlmZmZ d dlZd dl	m
Z
 d dlmZ  G d„ d¦  «        Z G d„ d	e¦  «        Z G d
„ de¦  «        Z G d„ de¦  «        ZdS )é    N)ÚABCÚabstractmethod)ÚAnyÚSet)Úoverride)Ú	Annotatedc            
       ó¢   — e Zd ZU dZded<   eed<   ej        ed<   dddeded	e	d
e	f
d„Z
ddedej        fd„Zdd„Zdd„Zdej        fd„Zdd„ZdS )Ú
ConnectionzBA threadpool connection that returns itself to the pool on close()ÚPoolÚ_poolÚ_db_fileÚ_connÚpoolÚdb_fileÚis_uriÚargsÚkwargsc                 óv   — || _         || _        t          j        |g|¢R dd|dœ|¤Ž| _        d | j        _        d S )Niè  F)ÚtimeoutÚcheck_same_threadÚuri)r   r   Úsqlite3Úconnectr   Úisolation_level)Úselfr   r   r   r   r   s         úZ/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/chromadb/db/impl/sqlite_pool.pyÚ__init__zConnection.__init__   s`   € ð ˆŒ
ØˆŒÝ”_Øð
ØIMð
ð 
Ø!°UÀð
ð 
ØQWð
ð 
ˆŒ
ð &*ˆŒ
Ô"Ð"Ð"ó    .ÚsqlÚreturnc                 ót   — |du r| j                              |¦  «        S | j                              ||¦  «        S )N.)r   Úexecute)r   r   Ú
parameterss      r   r"   zConnection.execute   s;   € Ø˜ÐÐØ”:×%Ò% cÑ*Ô*Ð*ØŒz×!Ò! # zÑ2Ô2Ð2r   Nc                 ó8   — | j                              ¦   «          d S ©N)r   Úcommit©r   s    r   r&   zConnection.commit    s   € ØŒ
×ÒÑÔÐÐÐr   c                 ó8   — | j                              ¦   «          d S r%   )r   Úrollbackr'   s    r   r)   zConnection.rollback#   s   € ØŒ
×ÒÑÔÐÐÐr   c                 ó4   — | j                              ¦   «         S r%   )r   Úcursorr'   s    r   r+   zConnection.cursor&   s   € ØŒz× Ò Ñ"Ô"Ð"r   c                 ó8   — | j                              ¦   «          dS )z(Actually closes the connection to the dbN)r   Úcloser'   s    r   Úclose_actualzConnection.close_actual)   s   € àŒ
×ÒÑÔÐÐÐr   ).©r    N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__Ústrr   r
   Úboolr   r   ÚCursorr"   r&   r)   r+   r.   © r   r   r
   r
   
   sû   € € € € € € ØLÐLà€M€M�MØ€M€M�MØÔÐÐÑð*Øð*Ø%(ð*Ø26ð*Ø?Bð*ØNQð*ð *ð *ð *ð3ð 3˜3ð 3°7´>ð 3ð 3ð 3ð 3ð
ð ð ð ðð ð ð ð#˜œð #ð #ð #ð #ðð ð ð ð ð r   r
   c                   ó’   — e Zd ZdZedededdfd„¦   «         Zededede	fd	„¦   «         Z
edd
„¦   «         Zede	ddfd„¦   «         ZdS )r   zCAbstract base class for a pool of connections to a sqlite database.r   r   r    Nc                 ó   — d S r%   r8   ©r   r   r   s      r   r   zPool.__init__1   ó   € àˆr   r   r   c                 ó   — dS )z"Return a connection from the pool.Nr8   )r   r   r   s      r   r   zPool.connect5   ó	   € ð 	ˆr   c                 ó   — dS )z"Close all connections in the pool.Nr8   r'   s    r   r-   z
Pool.close:   r>   r   Úconnc                 ó   — dS )z Return a connection to the pool.Nr8   ©r   r@   s     r   Úreturn_to_poolzPool.return_to_pool?   r>   r   r/   )r0   r1   r2   r3   r   r5   r6   r   r   r
   r   r-   rC   r8   r   r   r   r   .   sÐ   € € € € € ØMÐMàð ð ¨Tð °dð ð ð ñ „^ðð ð˜Sð ¨Cð °Jð ð ð ñ „^ðð ðð ð ñ „^ðð ð :ð °$ð ð ð ñ „^ðð ð r   r   c                   óî   — e Zd ZU dZeeej        ef                  e	d<   e
j        e	d<   e
j        e	d<   ee	d<   ee	d<   dded	efd
„Zedededefd„¦   «         Zededdfd„¦   «         Zedd„¦   «         ZdS )ÚLockPoolaI  A pool that has a single connection per thread but uses a lock to ensure that only one thread can use it at a time.
    This is used because sqlite does not support multithreaded access with connection timeouts when using the
    shared cache mode. We use the shared cache mode to allow multiple threads to share a database.
    Ú_connectionsÚ_lockÚ_connectionr   Ú_is_uriFr   r   c                 ó¨   — t          ¦   «         | _        t          j        ¦   «         | _        t          j        ¦   «         | _        || _        || _        d S r%   )	ÚsetrF   Ú	threadingÚlocalrH   ÚRLockrG   r   rI   r;   s      r   r   zLockPool.__init__Q   s?   € Ý™EœEˆÔÝ$œ?Ñ,Ô,ˆÔÝ”_Ñ&Ô&ˆŒ
ØˆŒØˆŒˆˆr   r   r   r    c                 ó:  — | j                              ¦   «          t          | j        d¦  «        r| j        j        �| j        j        S t          | | j        | j        g|¢R i |¤Ž}|| j        _        | j         	                    t          j        |¦  «        ¦  «         |S ©Nr@   )rG   ÚacquireÚhasattrrH   r@   r
   r   rI   rF   ÚaddÚweakrefÚref©r   r   r   Únew_connections       r   r   zLockPool.connectX   sª   € àŒ
×ÒÑÔÐÝ�4Ô# VÑ,Ô,ð 	"°Ô1AÔ1FÐ1RØÔ#Ô(Ð(å'Ø�d”m T¤\ðØ48ðð ð Ø<Bðð ˆNð %3ˆDÔÔ!ØÔ×!Ò!¥'¤+¨nÑ"=Ô"=Ñ>Ô>Ð>Ø!Ð!r   r@   Nc                 ó\   — 	 | j                              ¦   «          d S # t          $ r Y d S w xY wr%   )rG   ÚreleaseÚRuntimeErrorrB   s     r   rC   zLockPool.return_to_poole   sC   € ð	ØŒJ×ÒÑ Ô Ð Ð Ð øÝð 	ð 	ð 	ØˆDˆDð	øøøs   ‚ �
+ª+c                 ó  — | j         D ](} |¦   «         � |¦   «                              ¦   «          Œ)| j                              ¦   «          t          j        ¦   «         | _        	 | j                             ¦   «          d S # t          $ r Y d S w xY wr%   )	rF   r.   ÚclearrL   rM   rH   rG   rY   rZ   rB   s     r   r-   zLockPool.closel   sŸ   € àÔ%ð 	&ð 	&ˆDØˆt‰vŒvÐ!Ø�‘”×#Ò#Ñ%Ô%Ð%øØÔ×ÒÑ!Ô!Ð!Ý$œ?Ñ,Ô,ˆÔð	ØŒJ×ÒÑ Ô Ð Ð Ð øÝð 	ð 	ð 	ØˆDˆDð	øøøs   Á#A> Á>
BÂB©Fr/   )r0   r1   r2   r3   r   r   rT   ÚReferenceTyper
   r4   rL   rN   rM   r5   r6   r   r   r   r   rC   r-   r8   r   r   rE   rE   E   s  € € € € € € ðð ð
 �i Ô 5°zÐ AÔBÔCÐCÐCÑCØŒ?ÐÐÑØ”Ð Ð Ñ Ø€M€M�MØ€M€M�Mðð  ð ¨Tð ð ð ð ð ð
"˜Sð 
"¨Cð 
"°Jð 
"ð 
"ð 
"ñ „Xð
"ð ð :ð °$ð ð ð ñ „Xðð ð	ð 	ð 	ñ „Xð	ð 	ð 	r   rE   c                   óî   — e Zd ZU dZeeej        ef                  e	d<   e
j        e	d<   e
j        e	d<   ee	d<   ee	d<   dded	efd
„Zedededefd„¦   «         Zedd„¦   «         Zededdfd„¦   «         ZdS )ÚPerThreadPoolz¾Maintains a connection per thread. For now this does not maintain a cap on the number of connections, but it could be
    extended to do so and block on connect() if the cap is reached.
    rF   rG   rH   r   Ú_is_uri_Fr   r   c                 ó¨   — t          ¦   «         | _        t          j        ¦   «         | _        t          j        ¦   «         | _        || _        || _        d S r%   )	rK   rF   rL   rM   rH   ÚLockrG   r   rI   r;   s      r   r   zPerThreadPool.__init__„   s?   € Ý™EœEˆÔÝ$œ?Ñ,Ô,ˆÔÝ”^Ñ%Ô%ˆŒ
ØˆŒØˆŒˆˆr   r   r   r    c                 óF  — t          | j        d¦  «        r| j        j        �| j        j        S t          | | j        | j        g|¢R i |¤Ž}|| j        _        | j        5  | j                             t          j
        |¦  «        ¦  «         d d d ¦  «         n# 1 swxY w Y   |S rP   )rR   rH   r@   r
   r   rI   rG   rF   rS   rT   rU   rV   s       r   r   zPerThreadPool.connect‹   s  € å�4Ô# VÑ,Ô,ð 		"°Ô1AÔ1FÐ1RØÔ#Ô(Ð(å'Ø�d”m T¤\ðØ48ðð ð Ø<Bðð ˆNð %3ˆDÔÔ!Ø”ð Cð CØÔ!×%Ò%¥g¤k°.Ñ&AÔ&AÑBÔBÐBðCð Cð Cñ Cô Cð Cð Cð Cð Cð Cð Cøøøð Cð Cð Cð Cà!Ð!s   Á-BÂBÂBNc                 ó  — | j         5  | j        D ](} |¦   «         � |¦   «                              ¦   «          Œ)| j                             ¦   «          t	          j        ¦   «         | _        d d d ¦  «         d S # 1 swxY w Y   d S r%   )rG   rF   r.   r\   rL   rM   rH   rB   s     r   r-   zPerThreadPool.close˜   sÊ   € àŒZð 	1ð 	1ØÔ)ð *ð *�Ø�4‘6”6Ð%Ø�D‘F”F×'Ò'Ñ)Ô)Ð)øØÔ×#Ò#Ñ%Ô%Ð%Ý(œÑ0Ô0ˆDÔð	1ð 	1ð 	1ñ 	1ô 	1ð 	1ð 	1ð 	1ð 	1ð 	1ð 	1ð 	1øøøð 	1ð 	1ð 	1ð 	1ð 	1ð 	1s   ˆA"A7Á7A;Á>A;r@   c                 ó   — d S r%   r8   rB   s     r   rC   zPerThreadPool.return_to_pool¡   r<   r   r]   r/   )r0   r1   r2   r3   r   r   rT   r^   r
   r4   rL   rc   rM   r5   r6   r   r   r   r   r-   rC   r8   r   r   r`   r`   y   s  € € € € € € ðð ð �i Ô 5°zÐ AÔBÔCÐCÐCÑCØŒ>ÐÐÑØ”Ð Ð Ñ Ø€M€M�MØ€N€N�Nðð  ð ¨Tð ð ð ð ð ð
"˜Sð 
"¨Cð 
"°Jð 
"ð 
"ð 
"ñ „Xð
"ð ð1ð 1ð 1ñ „Xð1ð ð :ð °$ð ð ð ñ „Xðð ð r   r`   )r   rT   Úabcr   r   Útypingr   r   rL   Ú	overridesr   Útyping_extensionsr   r
   r   rE   r`   r8   r   r   ú<module>rk      s)  ðØ €€€Ø €€€Ø #Ð #Ð #Ð #Ð #Ð #Ð #Ð #Ø Ð Ð Ð Ð Ð Ð Ð Ø Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'ð!ð !ð !ð !ð !ñ !ô !ð !ðHð ð ð ð ˆ3ñ ô ð ð.1ð 1ð 1ð 1ð 1ˆtñ 1ô 1ð 1ðh*ð *ð *ð *ð *�Dñ *ô *ð *ð *ð *r   