
    Zi[                        d dl Z d dlZd dl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 d dlmZmZ d dl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  d dl!m"Z"m#Z# d dl$m%Z%m&Z&m'Z'm(Z( d dl)m*Z* d dl+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5 d dl6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZA  e jB        eC          ZD G d dee           ZEdS )    N)OptionalSequenceAnyTuplecastDictUnionSet)UUID)override)TableColumn)groupby)Schema)DEFAULT_DATABASEDEFAULT_TENANTSystem)CursorSqlDBParameterValueget_sql)SysDB)NotFoundErrorUniqueConstraintError)add_attributes_to_current_spanOpenTelemetryClientOpenTelemetryGranularitytrace_method)Producer)
CollectionAndSegmentsDatabaseOptionalArgumentSegmentMetadata
CollectionSegmentScopeTenantUnspecifiedUpdateMetadata)CreateCollectionConfigurationUpdateCollectionConfiguration+create_collection_configuration_to_json_str+load_collection_configuration_from_json_strCollectionConfiguration'create_collection_configuration_to_json collection_configuration_to_json$collection_configuration_to_json_str"overwrite_collection_configuration;update_collection_configuration_from_legacy_update_metadataCollectionMetadatac                       e Zd ZU eed<   def fdZ edej	                  e
dA fd                        Ze
efded	ed
eddfd            Ze
efd	ed
edefd            Ze
efd	ed
eddfd            Ze
ddefdee         dee         d
edee         fd            Ze
d	eddfd            Ze
d	edefd            ZdededdfdZ edej	                  e
deddfd                        Z edej	                  e
dddeefded	edee         de dee         dee!         dee         de"d
edede#e$e"f         fd                         Z% ed!ej	                  e
	 	 	 dBd"edee         d#ee         d$ee&         dee         f
d%                        Z' ed&ej	                  e
ddeeddfdee         d	ee         d
ededee         dee         dee$         fd'                        Z(e
d(ede)fd)            Z* ed*ej	                  e
d"ededdfd+                        Z+ded"eddfd,Z, ed-ej	                  e
eefded
ededdfd.                        Z- ed/ej	                  e
 e.            fd"edede/ee0                  ddfd0                        Z1 ed1ej	                  e
 e.             e.             e.             e.            fded	e/e         de/ee                  de/ee0                  de/ee2                  ddfd2                        Z3ded3e2deddfd4Z4 ed5ej	                  d6ee#e5d7f                  dee!         fd8            Z6 ed9ej	                  	 dCded:e7d;e8dede0d<ee9e                  ddfd=            Z:d(e5dee!         de;fd>Z<e
dedefd?            Z=e
edfd
edee         defd@            Z> xZ?S )DSqlSysDB	_producersystemc                     t                                          |           |                    t                    | _        d S N)super__init__requirer   _opentelemetry_client)selfr8   	__class__s     U/root/projects/butler/venv/lib64/python3.11/site-packages/chromadb/db/mixins/sysdb.pyr<   zSqlSysDB.__init__:   s6       %+^^4G%H%H"""    zSqlSysDB.create_segmentreturnNc                     t                                                       | j                            t                    | _        d S r:   )r;   start_systeminstancer   r7   )r?   r@   s    rA   rE   zSqlSysDB.start>   s1     	..x88rB   idnametenantc                 h   |                                  5 }t          d          }t          d          }|                                                     |                              |j        |j        |j                                      t          | 
                    |                    t          |          |                                                     |j                                      |                              |j        t          |          k                        }t          ||                                           \  }}		 |                    ||	           n5# |                                 $ r}
t%          d| d|           |
d }
~
ww xY w	 d d d            d S # 1 swxY w Y   d S )N	databasestenants	Database z already exists for tenant )txr   querybuilderintocolumnsrH   rI   	tenant_idinsertr   
uuid_to_dbselectfrom_wherer   parameter_formatexecuteunique_constraint_errorr   )r?   rH   rI   rJ   currL   rM   insert_databasesqlparamses              rA   create_databasezSqlSysDB.create_databaseD   s    WWYY 	#k**II&&G!!##iy~y7JKK"4??2#6#677"4((%%''VGJ''U7^^U7:)?)??@@ 	  "/43H3H3J3JKKKCC((((//11   +IIIII  )'	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s6   D7F'E$#F'$F;FFF''F+.F+c                 <   |                                  5 }t          d          }|                                                     |                              |j        |j                                      |j        t          |          k                                  |j	        t          |          k              }t          ||                                           \  }}|                    ||                                          }|st          d| d| d          |d         t          d| d| d          t          t           |                     |d                             }	t%          |	|d         |          cd d d            S # 1 swxY w Y   d S )NrL   rN    not found for tenant z. Are you sure it exists?r      rH   rI   rJ   )rO   r   rP   rW   rV   rH   rI   rX   r   rS   r   rY   rZ   fetchoner   r   r   uuid_from_dbr!   )
r?   rI   rJ   r\   rL   qr^   r_   rowrH   s
             rA   get_databasezSqlSysDB.get_databasea   s   WWYY 	#k**I!!##y!!	in55y~)=)==>>y*nV.D.DDEE  "!T%:%:%<%<==KC++c6**3355C #]]]F]]]   1v~#]]]F]]]   D$"3"3CF";";<<BV  )	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   E/FFFc                    |                                  5 }t          d          }|                                                     |                              |j        t          |          k                                  |j        t          |          k                                              }t          || 
                                          \  }}|dz   }|                    ||                                          }|st          d| d|           t          d          }	|                                                     |	                              |	j        t          |d                   k                                              }t          || 
                                          \  }}|                    ||           d d d            d S # 1 swxY w Y   d S )NrL    RETURNING idrN   rc   collectionsr   )rO   r   rP   rW   rX   rI   r   rS   deleter   rY   rZ   rf   r   database_id)
r?   rI   rJ   r\   rL   rh   r^   r_   resultrm   s
             rA   delete_databasezSqlSysDB.delete_database}   s   WWYY 	%#k**I!!##y!!y~)=)==>>y*nV.D.DDEE  "!T%:%:%<%<==KC'C[[f--6688F V#$T$T$TF$T$TUUU  ..K!!##{##{..2K2KKLL	  "!T%:%:%<%<==KCKKV$$$3	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%s   F6GGGlimitoffsetc                                                       5 }t          d          }                                                     |                              |j        |j                                      |j        t                    k              
                    |                              |t          j        n|                              |j                  }t!          |                                           \  }}|                    ||                                          }	 fd|	D             cd d d            S # 1 swxY w Y   d S )NrL   c                     g | ]F}t          t          t                              |d                              |d                   GS )r   rd   re   )r!   r   r   rg   ).0ri   r?   rJ   s     rA   
<listcomp>z+SqlSysDB.list_databases.<locals>.<listcomp>   sc         D$"3"3CF";";<<Q!    rB   )rO   r   rP   rW   rV   rH   rI   rX   rS   r   rs   rr   sysmaxsizeorderby
created_atr   rY   rZ   fetchall)
r?   rr   rs   rJ   r\   rL   rh   r^   r_   rowss
   `  `      rA   list_databaseszSqlSysDB.list_databases   sy    WWYY 	#k**I!!##y!!	in55y*nV.D.DDEE#(=CKKe  -..  "!T%:%:%<%<==KC;;sF++4466D        	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   D%E		EEc                    |                                  5 }t          d          }|                                                     |                              |j                                      t          |                    }t          || 	                                          \  }}	 |
                    ||           n3# |                                 $ r}t          d| d          |d }~ww xY w	 d d d            d S # 1 swxY w Y   d S )NrM   Tenant  already exists)rO   r   rP   rQ   rR   rH   rT   r   r   rY   rZ   r[   r   )r?   rI   r\   rM   insert_tenantr^   r_   r`   s           rA   create_tenantzSqlSysDB.create_tenant   sc   WWYY 	T#I&&G!!##g$$t,,--	  "-1F1F1H1HIIKCTC((((//11 T T T+,Kd,K,K,KLLRSST )	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	Ts6   BD*C DC1C,,C11DD	Dc                 0   |                                  5 }t          d          }|                                                     |                              |j                                      |j        t          |          k              }t          || 	                                          \  }}|
                    ||                                          }|st          d| d          t          |          cd d d            S # 1 swxY w Y   d S )NrM   r   
 not found)rI   )rO   r   rP   rW   rV   rH   rX   r   r   rY   rZ   rf   r   r'   )r?   rI   r\   rM   rh   r^   r_   ri   s           rA   
get_tenantzSqlSysDB.get_tenant   s9   WWYY 	%#I&&G!!##w
##wz^D%9%99::	  "!T%:%:%<%<==KC++c6**3355C @#$>d$>$>$>???t$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%s   C)DDDr\   segmentc                 J   t          t          |d                   |d         |d         j        t          |d                   d           t          d          }|                                                     |                              |j        |j        |j	        |j
                                      t          |                     |d                             t          |d                   t          |d         j                  t          |                     |d                                       }t          ||                                           \  }}	 |                    ||           n9# |                                 $ r}t%          d|d          d          |d }~ww xY wt          d	          }|d
         r]	 |                     |||j        |d         |d
                    d S # t*          $ r#}t,                              d|             d }~ww xY wd S )NrH   typescope
collection
segment_idsegment_typesegment_scoper   segmentsSegment r   segment_metadatametadataz"Error inserting segment metadata: )r   strvaluer   rP   rQ   rR   rH   r   r   r   rT   r   rU   r   rY   rZ   r[   r   _insert_metadatar   	Exceptionloggererror)	r?   r\   r   r   insert_segmentr^   r_   r`   
metadata_ts	            rA   create_segment_with_txzSqlSysDB.create_segment_with_tx   sB   &!'$-00 '!(!1!7!',"788	 	
 	
 	
 $$T(^^W#	  Vtwt}==>>wv//ww/566tw|/DEEFF	  	  nd.C.C.E.EFFV	KKV$$$$++-- 	 	 	'974=999 	 -..
: 	
%%)DMJ'        E!EEFFF	 	s0   E6 6F,F''F,*G3 3
H =HH c                     |                                  5 }|                     ||           d d d            d S # 1 swxY w Y   d S r:   )rO   r   )r?   r   r\   s      rA   create_segmentzSqlSysDB.create_segment  s     WWYY 	6#''W555	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6s   9= =zSqlSysDB.create_collectionFschemaconfigurationr   r   	dimensionget_or_createdatabasec                    ||st          d          t          t          |          |d           |                     ||	|
          }|rB|r-|d         }|                     |j        |	|
          d         dfS t          d| d          t          ||t          |t          t          |                    d |||	|
d		  	        }| 
                                5 }t          d
          }t          d          }|                                                     |                              |j        |j        |j        |j        |j                                      t)          |                     |d                             t)          |d                   t)          t-          |t          t          |                              t)          |d                   |                                                     |j                                      |                              |j        t)          |
          k                                  |j        t)          |	          k                        }t7          ||                                           \  }}	 |                    ||           n9# |                                 $ r}t          d|d          d          |d }~ww xY wt          d          }|d         r)|                     |||j         |j        |d                    |D ]}| !                    ||           	 d d d            n# 1 swxY w Y   |dfS )Nz.id must be specified if get_or_create is Falsecollection_idcollection_name)rI   rJ   r   r   )rH   rJ   r   FCollection r   	rH   rI   configuration_jsonserialized_schemar   r   rJ   r   versionrm   rL   rH   rI   r   collection_metadatar   T)"
ValueErrorr   r   get_collectionsrH   r   r%   r/   r   r4   rO   r   rP   rQ   rR   rI   config_json_strr   ro   rT   r   rU   r,   rV   rW   rX   rS   r   rY   rZ   r[   r   r   r   )r?   rH   rI   r   r   r   r   r   r   rJ   r   existingr   r\   rm   rL   insert_collectionr^   r_   r`   r   r   s                         rA   create_collectionzSqlSysDB.create_collection  s    :m:MNNN&!$R#' 	
 	
 	
 ''T&8'TT 
	Q 	Q%a[
((%=( )   	  ,,O$,O,O,OPPPFt$6AA    #
 
 

 WWYY 1	:#..Kk**I !!##k""N$/)+  "4??:d3C#D#DEE":f#566"C)40BH+M+M  
 #:k#:;;%%''VIL))U9%%U9>^H-E-EEFFU9..2H2HHII  6 ""3T5J5J5L5LMMKCC((((//11   +C*T"2CCC  455J*% %%,Mz*   $ : :++C9999:a1	: 1	: 1	: 1	: 1	: 1	: 1	: 1	: 1	: 1	: 1	: 1	: 1	: 1	: 1	:f 4s8   F;MJ/.M/K%K  K%%AMMMzSqlSysDB.get_segmentsr   r   r   c                    t          t          |          |r|nd|r|j        ndt          |          d           t          d          }t          d          }|                                                     |                              |j        |j        |j	        |j
        |j        |j        |j        |j        |j        	  	                            |                              |j        |j        k                                  |j                  }|r>|                    |j        t+          |                     |                    k              }|r+|                    |j        t+          |          k              }|r0|                    |j	        t+          |j                  k              }|r>|                    |j
        t+          |                     |                    k              }|                                 5 }t1          ||                                           \  }	}
|                    |	|
                                          }t9          |d           }g }|D ]\  }}|                     t          |                    }t=          |          }t          |d         d                   }t?          t          |d         d                             }|                     |d         d	                   }|                      |          }|!                    tE          tG          tH          |          ||||i 
                     |cd d d            S # 1 swxY w Y   d S )N r   r   r   c                 8    t          t          | d                   S Nr   r   objectrs    rA   <lambda>z'SqlSysDB.get_segments.<locals>.<lambda>  s    fad1C1C rB   r   rd         )rH   r   r   r   r   
file_paths)%r   r   r   r   rP   rW   rV   rH   r   r   r   key	str_value	int_valuefloat_value
bool_value	left_joinonr   rz   rX   r   rU   rO   r   rY   rZ   r|   r   rg   listr&   _metadata_from_rowsappendr#   r   r   )r?   r   rH   r   r   
segments_tr   rh   r\   r^   r_   r}   
by_segmentr   r   segment_rowsr   s                    rA   get_segmentszSqlSysDB.get_segments}  sp    	'!"gg(, 4"05!=2!*oo	 	
 	
 	
 :&&
-..
U:V %$$&%
 
 Yz""R
!6677WZ]##! 	
$  	N
8K8K)L)LLMMA 	A
>$+?+??@@A 	I
(N5;,G,GGHHA 	%
8S8S)T)TT A WWYY 	#!!T%:%:%<%<==KC;;sF++4466D 'C'CDDJH,6  (
L&&s:77L))471:$Sa__55!..tAwqz::
33D99b>>!##-!)#%  	 	 	 	 /	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   EM$$M(+M(zSqlSysDB.get_collectionsc                 "	   |||t          d          t          t          |          |r|ndd           t          d          }t          d          }t          d          }	|                                                     |                              |j        |j        |j	        |j
        |	j        |	j        |j        |j        |j        |j        |j                                      |                              |j        |j        k                                  |	                              |j        |	j        k                                  |j                  }
|r>|
                    |j        t/          |                     |                    k              }
|r+|
                    |j        t/          |          k              }
||r|rt          d          }	|
                    |j        |                                                     |	j                                      |	                              |	j        t/          |          k                                  |	j        t/          |          k              k              }
|                                 5 }t5          |
|                                           \  }}|                    ||                                          }t=          |d           }g }|D ]O\  }}|                     t          |                    }tA          |          }t          |d	         d
                   }| !                    |          }|d	         d         rtE          |d	         d                   nd}|d	         d         tG          |d	         d                   }n| $                    ||          }|%                    tM          tO          tP          |          |tS          |          d||t          |d	         d                   t          |d	         d                   d		  	                   Q||d	}||||z            }n
||d         }|cddd           S # 1 swxY w Y   dS )z;Get collections by name, embedding function and/or metadataNzmIf name is specified, tenant and database must also be specified in order to uniquely identify the collectionr   r   rm   r   rL   c                 8    t          t          | d                   S r   r   r   s    rA   r   z*SqlSysDB.get_collections.<locals>.<lambda>  s    D14F4F rB   r   rd   r   r         r   )*r   r   r   r   rP   rW   rV   rH   rI   r   r   rS   r   r   r   r   r   r   r   r   ro   rz   rX   r   rU   rO   r   rY   rZ   r|   r   rg   r   r   intr-   !_insert_config_from_legacy_paramsr   r%   r   r   r0   )r?   rH   rI   rJ   r   rr   rs   collections_tr   databases_trh   r\   r^   r_   r}   by_collectionrm   r   collection_rowsr   r   r   s                         rA   r   zSqlSysDB.get_collections  s    83C   	'!$R+/#744R 	
 	
 	
 m,,011
K((U=!!V "-' %$$&%  Yz""R J$<<==Y{##R)[^;<<W]%&&) 	
,  	Q(N4??2;N;N,O,OOPPA 	D*nT.B.BBCCA :&:X:,,K)$$&&''{##{'>(+C+CCDD{,v0F0FFGGH A WWYY 0	#!!T%:%:%<%<==KC;;sF++4466D#D*F*FGGMK2? ! !.&&s='9'9::O,,471:33D99/3AwqzCCQ
OOOt	71:)$OQ
% %MM %)$J$J%x% %M ""b>>!+K), , +/!)"+"471:!$T!WQZ !     "  >F)&6E>*AB)&''2a0	 0	 0	 0	 0	 0	 0	 0	 0	 0	 0	 0	 0	 0	 0	 0	 0	 0	s   $GRRRr   c                     |                      |          }t          |          dk    rt          d| d          t          |d         |                     |                    S )N)rH   r   r   z does not exist.)r   )r   r   )r   lenr   r    r   )r?   r   rm   s      rA   get_collection_with_segmentsz%SqlSysDB.get_collection_with_segments=  sy     **m*<<{q   Mm M M MNNN$"1~&&-&@@
 
 
 	
rB   zSqlSysDB.delete_segmentc                 t   t          dt          |          i           t          d          }|                                                     |                              |j        t          |                     |                    k              	                                }| 
                                5 }t          ||                                           \  }}|dz   }|                    ||                                          }|st          d| d          	 ddd           dS # 1 swxY w Y   dS )zDelete a segment from the SysDBr   r   rl   r   r   N)r   r   r   rP   rW   rX   rH   r   rU   rn   rO   r   rY   rZ   rf   r   )	r?   r   rH   trh   r\   r^   r_   rp   s	            rA   delete_segmentzSqlSysDB.delete_segmentI  se    	'c"gg	
 	
 	

 *U1XXU14>$//"*=*=>>>??VXX	 	
 WWYY 	?#!!T%:%:%<%<==KC'C[[f--6688F ?#$=r$=$=$=>>>?	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	?s   7A(D--D14D1c                    t          d          }|                                                     |                              |j        t          |                     |                    k                                              }t          || 	                                          \  }}|
                    ||           d S )Nr   )r   rP   rW   rX   r   r   rU   rn   r   rY   rZ   )r?   r\   r   r   rh   r^   r_   s          rA   delete_segments_for_collectionz'SqlSysDB.delete_segments_for_collectionc  s    :&&
U:U:(N4??:;V;V,W,WWXXVXX	 	
 a!6!6!8!899VC     rB   zSqlSysDB.delete_collectionc           	      P   t          dt          |          i           t          d          }t          d          }|                                                     |                              |j        t          |                     |                    k                                  |j	        |                                 
                    |j                                      |                              |j        t          |          k                                  |j        t          |          k              k                                              }|                                 5 }t          ||                                           \  }}	|dz   }|                    ||	                                          }
|
st'          d| d          |                     ||           ddd           n# 1 swxY w Y   | j                            |
d                    dS )	z{Delete a collection and all associated segments from the SysDB. Deletes
        the log stream for this collection as well.r   rm   rL   rl   r   r   Nr   )r   r   r   rP   rW   rX   rH   r   rU   ro   rV   rI   rS   rn   rO   r   rY   rZ   rf   r   r   r7   
delete_log)r?   rH   rJ   r   r   r   rh   r\   r^   r_   rp   s              rA   delete_collectionzSqlSysDB.delete_collectionn  s    	'R	
 	
 	

 -  K((U1XXU14>$//"*=*=>>>??U$$&&''{##{'>(+C+CCDD{,v0F0FFGGH  VXX 	
 WWYY 	9#!!T%:%:%<%<==KC'C[[f--6688F B#$@"$@$@$@AAA//R888	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	!!&),,,,,s   1A>G;;G?G?zSqlSysDB.update_segmentc                     t          t          |          t          |          d           t          d          }t          d          }|                                                     |                              |j        t          |                     |                    k              	                    |j
        t          |                     |                              }|                                 5 }t          ||                                           \  }}	|r|                    ||	           ||                                                     |                              |j        t          |                     |                    k                                              }t          ||                                           \  }}	|                    ||	           nz|t%                      k    rht'          t(          |          }t'          t(          |          }|                     |||j        ||t          |                                                     d d d            d S # 1 swxY w Y   d S )N)r   r   r   r   )r   r   r   rP   updaterX   rH   r   rU   setr   rO   r   rY   rZ   rW   r   rn   r(   r   r)   r   keys)
r?   r   rH   r   r   r   rh   r\   r^   r_   s
             rA   update_segmentzSqlSysDB.update_segment  sh    	'!"gg!*oo 	
 	
 	
 :&&
-..
 VJU:=N4??23F3F$G$GGHHS&tz7R7R(S(STT	 	
 WWYY 	#!!T%:%:%<%<==KC )C(((%%''U:&&U:0N4??SUCVCV4W4WWXXVXX	  &a)>)>)@)@AAVC(((([]]**9999%%)((  #	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   ;E+I33I7:I7zSqlSysDB.update_collectionc                    t          dt          |          i           t          d          }t          d          }|                                                     |                              |j        t          |                     |                    k              }|t                      k    s(|
                    |j        t          |                    }|t                      k    s(|
                    |j        t          |                    }|                                 5 }	t          ||                                           \  }
}|
rB|
dz   }
|	                    |
|          }|                                st%          d| d          |t                      k    r|                                                     |                              |j        t          |                     |                    k                                              }t          ||                                           \  }
}|	                    |
|           |St-          t.          |          }|                     |	||j        ||t          |                                                     |t                      k    r-t-          t4          |          }|                     |	||           nO|t                      k    r=t-          t.          |          }|&t9          |          }|                     |	||           d d d            d S # 1 swxY w Y   d S )Nr   rm   r   rl   r   r   )r   r   r   rP   r   rX   rH   r   rU   r(   r   rI   r   rO   r   rY   rZ   rf   r   rW   r   rn   r   r)   r   r   r+   _update_config_json_strr3   )r?   rH   rI   r   r   r   r   r   rh   r\   r^   r_   rp   update_configurations                 rA   update_collectionzSqlSysDB.update_collection  sl    	'R	
 	
 	

 m,,011
 VM""U=#~doob6I6I'J'JJKK 	
 {}}$$m(.*>*>??AKMM))m-~i/H/HIIAWWYY 0	T#!!T%:%:%<%<==KC FO+S&11(( F'(Db(D(D(DEEE ;==((%%''U:&&U"0N4??SUCVCV4W4WW  VXX  &a)>)>)@)@AAVC((('#NH==H))""0 HMMOO,,   --'+1=( ($ ,,S2FKKKK{}},,#NH==H+W (  -
 44S:NPRSSSa0	T 0	T 0	T 0	T 0	T 0	T 0	T 0	T 0	T 0	T 0	T 0	T 0	T 0	T 0	T 0	T 0	T 0	Ts   (HMM	M	r   c                    t          d          }|                                                     |                              |j                                      |j        t          |                     |                    k              }t          || 
                                          \  }}|                    ||                                          }|st          d| d          |d         }	t          |	          }
t          |
|          }|                                                     |                              |j        t          t%          |                                                  |j        t          |                     |                    k              }t          || 
                                          \  }}|                    ||           d S )Nrm   r   r   r   )r   rP   rW   rV   r   rX   rH   r   rU   r   rY   rZ   rf   r   r-   r2   r   r   r1   )r?   r\   r   rH   r   rh   r^   r_   ri   r   existing_config
new_configs               rA   r   z SqlSysDB._update_config_json_str  s    m,,U=!!VM122U=#~doob6I6I'J'JJKK	 	
 a!6!6!8!899Vkk#v&&//11 	> <b < < <===a&EoVV71
 

 VM""S-CJOOPP  U=#~doob6I6I'J'JJKK 	
 a!6!6!8!899VC     rB   zSqlSysDB._metadata_from_rowsr}   .c                    t          dt          |          i           i }|D ]}t          |d                   }|d         t          |d                   ||<   8|d         t          |d                   ||<   Y|d         t	          |d                   ||<   z|d         t          |d                   ||<   |pdS )zGiven SQL rows, return a metadata map (assuming that the last four columns
        are the key, str_value, int_value & float_value)num_rowsN)r   r   r   r   floatbool)r?   r}   r   ri   r   s        rA   r   zSqlSysDB._metadata_from_rows<  s     	'CII	
 	
 	

 =? 		. 		.Cc"g,,C2w" #CGR$ #CGR$ %c"gR$ $SW4rB   zSqlSysDB._insert_metadatatableid_col
clear_keysc                 t   t          dt          |          i           |r|                                                     |                              |t          |                     |                    k                                  |j                            d |D                                 	                                }t          ||                                           \  }}	|                    ||	           |                                                     |                              ||j        |j        |j        |j        |j                  }|                     |          }
|                                D ]u\  }}t)          |t*                    rO|                    t          |
          t          |          d d d t          t/          |                              }jt)          |t0                    rB|                    t          |
          t          |          t          |          d d d           }t)          |t.                    rC|                    t          |
          t          |          d t          |          d d           }t)          |t2                    rC|                    t          |
          t          |          d d t          |          d           }q|uwt          ||                                           \  }}	|r|                    ||	           d S d S )Nnum_keysc                 ,    g | ]}t          |          S  )r   )rv   ks     rA   rw   z-SqlSysDB._insert_metadata.<locals>.<listcomp>k  s     &M&M&MQ~a'8'8&M&M&MrB   )r   r   rP   rW   rX   r   rU   r   isinrn   r   rY   rZ   rQ   rR   r   r   r   r   items
isinstancer   rT   r   r   r   )r?   r\   r   r   rH   r   r   rh   r^   r_   sql_idr   vs                rA   r   zSqlSysDB._insert_metadataT  s	    	'CMM	
 	
 	

  		%!!##uv0C0C!D!DDEEuy~~&M&M*&M&M&MNNOO  "!T%:%:%<%<==KCKKV$$$ T%[[W	!   	
 $$NN$$ (	 (	DAq !T"" %HH"6**"1%%"3q66**  As## HH"6**"1%%"1%%  As## HH"6**"1%%"1%%  Au%% 
HH"6**"1%%"1%%    a!6!6!8!899V 	%KKV$$$$$	% 	%rB   c                 Z   t          d          }t                      }t          |t          t          |                    }|                                                     |                              |j        t          |                    
                    |j        t          |          k              }t          ||                                           \  }}|                                 5 }	|	                    ||           ddd           n# 1 swxY w Y   t!          |          S )zuInsert the configuration from legacy metadata params into the collections table, and return the configuration object.rm   N)r   r*   r,   r   r4   rP   r   r   r   r   rX   rH   r   rY   rO   rZ   r-   )
r?   r   r   r   create_collection_configconfiguration_json_strrh   r^   r_   r\   s
             rA   r   z*SqlSysDB._insert_config_from_legacy_params  sD    m,,#@#B#B !L$d+=x&H&H"
 "
 VM""S-566  U=#~m'D'DDEE 	
 a!6!6!8!899VWWYY 	%#KKV$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%:;QRRRs   0DDDc                     t           r:   )NotImplementedError)r?   rH   s     rA   get_collection_sizezSqlSysDB.get_collection_size  s    !!rB   c                 b    ||dk    rdn|}t          |                     ||                    S )zFGets the number of collections for the (tenant, database) combination.Nr   )rJ   r   )r   r   )r?   rJ   r   request_databases       rA   count_collectionszSqlSysDB.count_collections  s=     '/&6(b..h4''v@P'QQRRRrB   )rC   N)NNNr:   )@__name__
__module____qualname__r   __annotations__r   r<   r   r   ALLr   rE   r   r   r   ra   r!   rj   rq   r   r   r   r~   r   r'   r   r   r#   r   r   r   r   r*   r$   r   r   r%   r   r&   r   r   r    r   r   r   r   r(   r"   r)   r   r+   r   r   r   r   r   r   r
   r   r.   r   r
  r  __classcell__)r@   s   @rA   r6   r6   5   s=	         Iv I I I I I I \+-E-IJJ9 9 9 9 9 X KJ9 1? !+.	   X8 4B   c x    X6 7E % %C % %$ % % % X%8   $ $$	 }  	
 
(	   X< T# T$ T T T XT %s %v % % % X%"0& 07 0t 0 0 0 0f \+-E-IJJ6g 6$ 6 6 6 X KJ6 \.0H0LMM (,#'#$(e  e e  e   	e 
 5e  7#e  8$e  C=e  e  e  e  
z4	 e  e  e  X NMe N \)+C+GHH ""(,E EE TNE sm	E
 %E 
'	E E E X IHEN \,.F.JKK ""$(# $s sTNs sms 	s
 s }s s 
*	s s s X LKsj 	
!	
		
 	
 	
 X	
 \+-E-IJJ? ?4 ?D ? ? ? X KJ?0	!& 	!d 	!t 	! 	! 	! 	! \.0H0LMM %(	'- '-'- '- 	'-
 
'- '- '- X NM'-R \+-E-IJJ
 @K{}}	. .. . #8N#;<	.
 
. . . X KJ.` \.0H0LMM '2kmm5@[]]?J{}} KMMNT NTNT s#NT $HSM2	NT
 #8N#;<NT (23
NT 
NT NT NT X NMNT`!!1N!TX!	! ! ! !> \02J2NOO U38_- 	(	      PO . \-/G/KLL *.U% U%U% U% 	U%
 U% !U% SX&U% 
U% U% U% MLU%nS S,4X,>S	 S S S S: "d "s " " " X"  %"&S SS 3-S 
	S S S XS S S S SrB   r6   )Floggingrx   typingr   r   r   r   r   r   r	   r
   uuidr   	overridesr   pypikar   r   	itertoolsr   chromadb.api.typesr   chromadb.configr   r   r   chromadb.db.baser   r   r   r   chromadb.db.systemr   chromadb.errorsr   r    chromadb.telemetry.opentelemetryr   r   r   r   chromadb.ingestr   chromadb.typesr    r!   r"   r#   r$   r%   r&   r'   r(   r)   %chromadb.api.collection_configurationr*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   	getLoggerr  r   r6   r   rB   rA   <module>r$     s    



 I I I I I I I I I I I I I I I I I I I I                                   % % % % % % D D D D D D D D D D C C C C C C C C C C C C $ $ $ $ $ $                   % $ $ $ $ $                                                 
	8	$	$eS eS eS eS eSue eS eS eS eS eSrB   