
    7|hf(                        d dl Z d dlmZ d dlmZmZmZmZmZm	Z	m
Z
mZmZmZmZmZ d dlmZ d dlmZmZmZmZmZmZ d dlmZ d dlmZmZmZ d dlm Z m!Z!m"Z"m#Z# 	 d d	lm$Z$  e"       Z'	 d dlm(Z(  G d de'      Z)dedede+fdZ, G d dee-e.f         Z/y# e%$ r  e&d
e&fi       Z$Y Fw xY w# e%$ r d dlm*Z*  G d de'      Z)Y Iw xY w)    N)Path)AnyAsyncGeneratorAsyncIteratorDict	GeneratorIteratorListOptionalSequenceTupleUnioncast)	BaseStore)LargeBinaryTextand_create_enginedeleteselect)Engine)AsyncEngineAsyncSessioncreate_async_engine)MappedSessiondeclarative_basesessionmaker)async_sessionmakerr   )mapped_columnc                   x    e Zd ZU dZdZ eddd      Zee   e	d<    eddd      Z
ee   e	d<    eedd      Zy	)
LangchainKeyValueStoresTable used to save values.langchain_key_value_storesTFprimary_keyindexnullable	namespacekeyr'   r(   N)__name__
__module____qualname____doc____tablename__r    r)   r   str__annotations__r*   r   value     ^/var/www/html/test/engine/venv/lib/python3.12/site-packages/langchain_community/storage/sql.pyr"   r"   3   sP    ( 5!.D5"
	6#; 	
 )TPUVVC[VkGr5   r"   )Columnc                   n    e Zd ZdZdZ e e       ddd      Z e e       ddd      Z ee	dd      Z
y)r"   r#   r$   TFr%   r+   N)r,   r-   r.   r/   r0   r7   r   r)   r*   r   r3   r4   r5   r6   r"   r"   F   s>    ( 546t4%P	TVTEJ{%%@r5   xyreturnc                     | |k(  S Nr4   )r9   r:   s     r6   items_equalr>   T   s    6Mr5   c                      e Zd ZdZddddddedeeeef      deeee	f      dee
eef      dee   f
d	ZddZddZddZdee   d
eee      fdZdee   d
eee      fdZdeeeef      d
dfdZdeeeef      d
dfdZdee   ded
dfdZdee   ded
dfdZdee   d
dfdZdee   d
dfdZdddee   d
ee   fdZ dddee   d
e!e   fdZ"e#jH                  d
e%eddf   fd       Z&e#jN                  d
e(edf   fd       Z)y) SQLStorea  BaseStore interface that works on an SQL database.

    Examples:
        Create a SQLStore instance and perform operations on it:

        .. code-block:: python

            from langchain_community.storage import SQLStore

            # Instantiate the SQLStore with the root path
            sql_store = SQLStore(namespace="test", db_url="sqlite://:memory:")

            # Set values for keys
            sql_store.mset([("key1", b"value1"), ("key2", b"value2")])

            # Get values for keys
            values = sql_store.mget(["key1", "key2"])  # Returns [b"value1", b"value2"]

            # Delete keys
            sql_store.mdelete(["key1"])

            # Iterate over keys
            for key in sql_store.yield_keys():
                print(key)

    N)db_urlengineengine_kwargs
async_moder)   rA   rB   rC   rD   c                   ||t        d      ||t        d      |r<|d}|rt        ddt        |      i|xs i }n+t        ddt        |      i|xs i }n|r|}nt	        d      t        |t              rd| _        t        |      }nd| _        t        |      }|| _
        |j                  j                  | _        || _        || _        y )	Nz$Must specify either db_url or enginez.Must specify either db_url or engine, not bothFurlz2Something went wrong with configuration of engine.Tbindr4   )
ValueErrorr   r1   r   AssertionError
isinstancer   rD   r   r   rB   dialectnamesession_makerr)   )selfr)   rA   rB   rC   rD   _engine_session_makers           r6   __init__zSQLStore.__init__v   s     >fnCDD&"4MNN !"
- F$*
 (QCKQM<ORQG !!UVV g{+"DO/W=N#DO)w7N+++"r5   r;   c                 V    t         j                  j                  | j                         y r=   )Basemetadata
create_allrB   rO   s    r6   create_schemazSQLStore.create_schema   s      -r5   c                 B  K   t        | j                  t              sJ | j                  j                         4 d {   }|j	                  t
        j                  j                         d {    d d d       d {    y 7 F7 7 	# 1 d {  7  sw Y   y xY wwr=   )rK   rB   r   beginrun_syncrT   rU   rV   rO   sessions     r6   acreate_schemazSQLStore.acreate_schema   s}     $++{333;;$$& 	= 	='""4==#;#;<<<	= 	= 	=<	= 	= 	= 	=sW   ;BBB-B
.B/B
3B>B?BB
B
BBBBc                 t    t         j                  j                  | j                  j	                                y )NrG   )rT   rU   drop_allrB   connectrW   s    r6   dropzSQLStore.drop   s$    DKK$7$7$9:r5   keysc                 D  K   t        | j                  t              sJ i }| j                         4 d {   }t	        t
              j                  t        t
        j                  j                  |      t
        j                  | j                  k(              }|j                  |       d {   D ]  }|j                  ||j                  <    d d d       d {    |D cg c]  }|j                  |       c}S 7 7 S7 '# 1 d {  7  sw Y   7xY wc c}w wr=   )rK   rB   r   _make_async_sessionr   r"   filterr   r*   in_r)   scalarsr3   getrO   rc   resultr]   stmtvr*   s          r6   amgetzSQLStore.amget   s     $++{333#%++- 	( 	(1299+//33D9+55GD #??400 ( !quu(	( 	( ,00C

300	( 1	( 	( 	( 	( 1sc   3D D D A5D.D/"DD DD %D=D DD DDDD c                    i }| j                         5 }t        t              j                  t	        t        j
                  j                  |      t        j                  | j                  k(              }|j                  |      D ]  }|j                  ||j
                  <    	 d d d        |D cg c]  }|j                  |       c}S # 1 sw Y   (xY wc c}w r=   )_make_sync_sessionr   r"   rf   r   r*   rg   r)   rh   r3   ri   rj   s          r6   mgetzSQLStore.mget   s    $$& 	('1299+//33D9+55GD __T* ( !quu(	( ,00C

300	( 	( 1s   BC0CCkey_value_pairsc                   K   | j                         4 d {   }| j                  |D cg c]  \  }}|	 c}}|       d {    |j                  |D cg c]  \  }}t        | j                  ||       c}}       |j                          d {    d d d       d {    y 7 c c}}w 7 oc c}}w 7 %7 # 1 d {  7  sw Y   y xY wwN)r)   r*   r3   )re   	_amdeleteadd_allr"   r)   commit)rO   rr   r]   r*   _krm   s          r6   amsetzSQLStore.amset   s     ++- 	# 	#..O!D&#q#!DgNNNOO !01 ,dnn!STU .."""	# 	# 	#!DN
 #	# 	# 	# 	#s~   CB,CC B.C B4C "B6;C B<C C&B>'C.C 6C >C CC	CCc                 r   t        |      }| j                         5 }| j                  t        |j	                               |       |j                  |j                         D cg c]  \  }}t        | j                  ||       c}}       |j                          d d d        y c c}}w # 1 sw Y   y xY wrt   )
dictrp   _mdeletelistrc   rv   itemsr"   r)   rw   )rO   rr   valuesr]   ry   rm   s         r6   msetzSQLStore.mset   s    #'#8$$& 	'MM$v{{}-w7OO !'1 ,dnn!STU NN	 		 	s   AB-$"B'B-'B--B6r]   c                     t        t              j                  t        t        j                  j                  |      t        j                  | j                  k(              }|j                  |       y r=   r   r"   rf   r   r*   rg   r)   executerO   rc   r]   rl   s       r6   r}   zSQLStore._mdelete   sT    -.55'++//5'11T^^C
 	r5   c                   K   t        t              j                  t        t        j                  j                  |      t        j                  | j                  k(              }|j                  |       d {    y 7 wr=   r   r   s       r6   ru   zSQLStore._amdelete   s^     -.55'++//5'11T^^C
 ood###s   A5A?7A=8A?c                     | j                         5 }| j                  ||       |j                          d d d        y # 1 sw Y   y xY wr=   )rp   r}   rw   rO   rc   r]   s      r6   mdeletezSQLStore.mdelete   s=    $$& 	'MM$(NN	 	 	s	   #=Ac                    K   | j                         4 d {   }| j                  ||       d {    |j                          d {    d d d       d {    y 7 G7 /7 7 # 1 d {  7  sw Y   y xY wwr=   )re   ru   rw   r   s      r6   amdeletezSQLStore.amdelete   so     ++- 	# 	#..w///.."""	# 	# 	#/"	# 	# 	# 	#sf   A<AA<A'A!A'	A#
A'A<A%A<!A'#A'%A<'A9-A0.A95A<)prefixr   c             #   ~  K   | j                         5 }|j                  t              j                  t        j                  | j                  k(        D ]B  }t        |j                        j                  |xs d      s,t        |j                         D |j                          d d d        y # 1 sw Y   y xY wwN )	rp   queryr"   rf   r)   r1   r*   
startswithclose)rO   r   r]   rm   s       r6   
yield_keyszSQLStore.yield_keys   s     $$& 	']]#:;BB'11T^^C % quu:((26aee*$	%
 MMO	 	 	s#   B=A+B1?)B1(	B=1B:6B=c                 K   | j                         4 d {   }t        t              j                  t        j                  | j                  k(        }|j                  |       d {   D ]C  }t        |j                        j                  |xs d      s,t        |j                         E |j                          d {    d d d       d {    y 7 7 u7 7 # 1 d {  7  sw Y   y xY wwr   )
re   r   r"   rf   r)   rh   r1   r*   r   r   )rO   r   r]   rl   rm   s        r6   ayield_keyszSQLStore.ayield_keys	  s     ++- 	" 	"1299'11T^^CD #??400 %quu:((26aee*$% --/!!	" 	" 	" 1 "	" 	" 	" 	"so   C:CC:AC%)C*/C%-C%C!C%C:C#C:C%!C%#C:%C7+C.,C73C:c              #      K   | j                   rt        d      t        t        | j	                               5 }t        t        |       ddd       y# 1 sw Y   yxY ww)Make an async session.zsAttempting to use a sync method in when async mode is turned on. Please use the corresponding async method instead.N)rD   rI   r   r   rN   r\   s     r6   rp   zSQLStore._make_sync_session  sZ      ??E  '4--/0 	)Gw((	) 	) 	)s   6A A	A AA c                   K   | j                   st        d      t        t        | j	                               4 d{   }t        t        |       ddd      d{    y7 (7 # 1 d{  7  sw Y   yxY ww)r   ztAttempting to use an async method in when sync mode is turned on. Please use the corresponding async method instead.N)rD   rI   r   r   rN   r\   s     r6   re   zSQLStore._make_async_session  su      E  d&8&8&:; 	. 	.w|W--	. 	. 	. 	. 	. 	. 	.sE   :A>A%A> A)A>A' A>'A>)A;/A20A;7A>)r;   N)*r,   r-   r.   r/   r1   r   r   r   r   r   r   r   boolrR   rX   r^   rb   r   r
   bytesrn   rq   r   rz   r   r   r}   r   ru   r   r   r	   r   r   r   
contextlibcontextmanagerr   rp   asynccontextmanagerr   re   r4   r5   r6   r@   r@   Z   s   > .27;26%)+# +# sDy)*	+#
 v{234+#  S#X/+# TN+#Z.=
;1 1$x2G 11# 14+@ 1	#8E#u*4E+F 	#4 	#
HU3:->$? 
D 
Xc] W  $HSM $L $T $HSM d 
#8C= #T #
 59 HSM Xc]  <@ "8C= "MRUDV " )IgtT.A$B ) ) ##.>,:L+M . $.r5   r@   )0r   pathlibr   typingr   r   r   r   r   r	   r
   r   r   r   r   r   langchain_core.storesr   
sqlalchemyr   r   r   r   r   r   sqlalchemy.engine.baser   sqlalchemy.ext.asyncior   r   r   sqlalchemy.ormr   r   r   r   r   ImportErrortyperT   r    r"   r7   r   r>   r1   r   r@   r4   r5   r6   <module>r      s         ,  * 
 A9
 !A,H$ HB3 3 4 M.ye$ M.a  A2TGR@A0  A!A$ A	As$   B (B* B'&B'*CC