
    uih                        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mZ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"m#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/  G d dee          Z0dS )    )OptionalSequenceAnyTuplecastDictUnionSet)UUID)override)TableColumn)groupby)DEFAULT_DATABASEDEFAULT_TENANTSystem)CursorSqlDBParameterValueget_sqlNotFoundErrorUniqueConstraintError)SysDB)add_attributes_to_current_spanOpenTelemetryClientOpenTelemetryGranularitytrace_method)Producer)	DatabaseOptionalArgumentSegmentMetadata
CollectionSegmentScopeTenantUnspecifiedUpdateMetadatac                       e Zd ZU eed<   def fdZ edej	                  e
d3 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
d	eddfd            Ze
d	edefd            Z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e         ded
ededeeef         fd                        Z edej	                  e
	 	 	 	 d4de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j	                  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%             e%            fdede&ee                  de&ee'                  ddfd&                        Z( ed'ej	                  e
 e%             e%             e%            fded	e&e         de&ee                  de&ee'                  ddf
d(                        Z) ed)ej	                  d*e ee*d+f                  dee         fd,            Z+ ed-ej	                  	 d5d.e,d/e-d0e.dede'd1ee/e                  ddfd2            Z0 xZ1S )6SqlSysDB	_producersystemc                     t                                          |           |                    t                    | _        d S N)super__init__requirer   _opentelemetry_client)selfr+   	__class__s     K/var/www/icac/venv/lib/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   r*   )r2   r3   s    r4   r8   zSqlSysDB.start.   s1     	..x88r5   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columnsr;   r<   	tenant_idinsertr   
uuid_to_dbselectfrom_wherer   parameter_formatexecuteunique_constraint_errorr   )r2   r;   r<   r=   curr?   r@   insert_databasesqlparamses              r4   create_databasezSqlSysDB.create_database4   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                 8   |                                  5 }t          d          }|                                                     |                              |j        |j                                      |j        t          |          k                                  |j	        t          |          k              }t          ||                                           \  }}|                    ||                                          }|st          d| d|           |d         t          d| d|           t          t           |                     |d                             }	t%          |	|d         |          cd d d            S # 1 swxY w Y   d S )Nr?   rA   z not found for tenant r      )r;   r<   r=   )rB   r   rC   rJ   rI   r;   r<   rK   r   rF   r   rL   rM   fetchoner   r   r   uuid_from_dbr   )
r2   r<   r=   rO   r?   qrQ   rR   rowr;   s
             r4   get_databasezSqlSysDB.get_databaseQ   s   WWYY 	#k**I!!##y!!	in55y~)=)==>>y*nV.D.DDEE  "!T%:%:%<%<==KC++c6**3355C V#$T$T$TF$T$TUUU1v~#$T$T$TF$T$TUUUD$"3"3CF";";<<BV  !	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   E-FFF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 )Nr@   Tenant  already exists)rB   r   rC   rD   rE   r;   rG   r   r   rL   rM   rN   r   )r2   r<   rO   r@   insert_tenantrQ   rR   rS   s           r4   create_tenantzSqlSysDB.create_tenanti   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 )Nr@   r]   
 not found)r<   )rB   r   rC   rJ   rI   r;   rK   r   r   rL   rM   rW   r   r%   )r2   r<   rO   r@   rY   rQ   rR   rZ   s           r4   
get_tenantzSqlSysDB.get_tenanty   s9   WWYY 	%#I&&G!!##w
##wz^D%9%99::	  "!T%:%:%<%<==KC++c6**3355C @#$>d$>$>$>???t$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%s   C)DDDsegmentc                 >   t          t          |d                   |d         |d         j        t          |d                   d           |                                 5 }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 d d            d S # 1 swxY w Y   d S )Nr;   typescope
collection
segment_idsegment_typesegment_scoperh   segmentsSegment r^   segment_metadatametadata)r   strvaluerB   r   rC   rD   rE   r;   rf   rg   rh   rG   r   rH   r   rL   rM   rN   r   _insert_metadatarj   )	r2   rd   rO   rm   insert_segmentrQ   rR   rS   
metadata_ts	            r4   create_segmentzSqlSysDB.create_segment   sY   &!'$-00 '!(!1!7!',"788	 	
 	
 	
 WWYY !	#Z((H!!##hKMN'	  "4??74=#A#ABB"76?33"77#3#9::"4??7<3H#I#IJJ	    ".$2G2G2I2IJJKCC((((//11   +=wt}===  122Jz" %%)DMJ'  7!	 !	 !	 !	 !	 !	 !	 !	 !	 !	 !	 !	 !	 !	 !	 !	 !	 !	s8    DH4F
HG"F<<GAHHHzSqlSysDB.create_collectionFrp   	dimensionget_or_createdatabasec                 0   ||st          d          t          t          |          |d           |                     |||          }|rn|rY|d         }	|)|	d         |k    r|                     |	d         |           |                     |	d         ||          d         d	fS t          d
| d          t          ||||||d          }	|                                 5 }
t          d          }t          d          }| 	                                
                    |                              |j        |j        |j        |j                                      t#          |                     |	d                             t#          |	d                   t#          |	d                   | 	                                                    |j                                      |                              |j        t#          |          k                                  |j        t#          |          k                        }t/          ||                                           \  }}	 |
                    ||           n9# |                                 $ r}t          d
|	d          d          |d }~ww xY wt          d          }|	d         r*|                     |
||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)r<   r=   ry   r   rp   r;   )rp   )r;   r=   ry   FCollection r^   r;   r<   rp   rw   r=   ry   versioncollectionsr?   r<   rw   collection_metadataT)
ValueErrorr   rq   get_collectionsupdate_collectionr   r#   rB   r   rC   rD   rE   r;   r<   rw   database_idrG   r   rH   rI   rJ   rK   rF   r   rL   rM   rN   rs   r|   )r2   r;   r<   rp   rw   rx   r=   ry   existingrh   rO   r   r?   insert_collectionrQ   rR   rS   ru   s                     r4   create_collectionzSqlSysDB.create_collection   s    :m:MNNN&!$R#' 	
 	
 	
 ''T&8'TT 	Q Q%a[
'Jz,Bh,N,N**"4(!) +   
 ((%d+FX )   	  ,,O$,O,O,OPPP
 
 

 WWYY (	#..Kk**I !!##k""N$)+	  "4??:d3C#D#DEE":f#566":k#:;;%%''VIL))U9%%U9>^H-E-EEFFU9..2H2HHII
 
 * ""3T5J5J5L5LMMKCC((((//11   +C*T"2CCC  455J*% %%,t$z*  E(	 (	 (	 (	 (	 (	 (	 (	 (	 (	 (	 (	 (	 (	 (	R 4s8   %FL	,JL	J9J44J99AL		LLzSqlSysDB.get_segmentsrf   rg   rh   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	         r!|                     |d         d	                   nd }|                      |          }|!                    tE          tG          tH          |          ||||
                     |cd d d            S # 1 swxY w Y   d S )N ri   rm   ro   c                 8    t          t          | d                   S Nr   r   objectrs    r4   <lambda>z'SqlSysDB.get_segments.<locals>.<lambda>F  s    fad1C1C r5   r   rV         )r;   rf   rg   rh   rp   )%r   rq   rr   r   rC   rJ   rI   r;   rf   rg   rh   key	str_value	int_valuefloat_value
bool_value	left_joinonrj   orderbyrK   r   rH   rB   r   rL   rM   fetchallr   rX   listr$   _metadata_from_rowsappendr!   r   r   )r2   r;   rf   rg   rh   
segments_tru   rY   rO   rQ   rR   rows
by_segmentrm   rj   segment_rowsrp   s                    r4   get_segmentszSqlSysDB.get_segments  s    	'!"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>B1gajRT..tAwqz:::d
33D99b>>!##-!)      -	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   EM33M7:M7zSqlSysDB.get_collectionslimitoffsetc                 x   |||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        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 }t3          |
|                                           \  }}|                    ||                                          }t;          |d           }g }|D ] \  }}|                     t          |                    }t?          |          }t          |d	         d
                   }|d	         d         rtA          |d	         d                   nd}| !                    |          }|"                    tG          tI          tJ          |          |||t          |d	         d                   t          |d	         d                   d	                     ||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{   r   r   r?   c                 8    t          t          | d                   S r   r   r   s    r4   r   z*SqlSysDB.get_collections.<locals>.<lambda>  s    D14F4F r5   r   rV   r      r   r   )&r   r   rq   r   rC   rJ   rI   r;   r<   rw   rF   r   r   r   r   r   r   r   r|   r   r   rK   r   rH   rB   r   rL   rM   r   r   rX   r   intr   r   r#   r   r   )r2   r;   r<   r=   ry   r   r   collections_tru   databases_trY   rO   rQ   rR   r   by_collectionr   r|   collection_rowsrw   rp   s                        r4   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 	#!!T%:%:%<%<==KC;;sF++4466D#D*F*FGGMK2?  .&&s='9'9::O,,471:/3AwqzCCQ
OOOt	33D99""b>>!!)"+"471:!$T!WQZ !  
 
 
 
  >F)&6E>*AB)&''2?	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   FP//P36P3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 SysDBrj   rm    RETURNING idrn   rb   N)r   rq   r   rC   rJ   rK   r;   r   rH   deleterB   r   rL   rM   rW   r   )r2   r;   trY   rO   rQ   rR   results           r4   delete_segmentzSqlSysDB.delete_segment  se    	'c"gg	
 	
 	

 *U1XXU14>$//"*=*=>>>??VXX	 	
 WWYY 	?#!!T%:%:%<%<==KC'C[[f--6688F ?#$=r$=$=$=>>>?	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	?s   7A(D--D14D1zSqlSysDB.delete_collectionc           	      &   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|   r   r?   r   r~   rb   Nr   )r   rq   r   rC   rJ   rK   r;   r   rH   r   rI   r<   rF   r   rB   r   rL   rM   rW   r   r*   
delete_log)r2   r;   r=   ry   r   r   rY   rO   rQ   rR   r   s              r4   delete_collectionzSqlSysDB.delete_collection  s    	'R	
 	
 	

 -  K((U1XXU14>$//"*=*=>>>??U$$&&''{##{'>(+C+CCDD{,v0F0FFGGH  VXX 	
 WWYY 	B#!!T%:%:%<%<==KC'C[[f--6688F B#$@"$@$@$@AAAB	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	!!&),,,,,s   1A(G&&G*-G*zSqlSysDB.update_segmentc                 h   t          t          |          t          |          d           t          d          }t          d          }|                                                     |                              |j        t          |                     |                    k              }|t                      k    s[t          t          t                   |          }|                    |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)rj   rh   rm   ro   )r   rq   r   rC   updaterK   r;   r   rH   r&   r   r   r   setrh   rB   r   rL   rM   rJ   rj   r   r'   rs   keys)
r2   r;   rh   rp   r   ru   rY   rO   rQ   rR   s
             r4   update_segmentzSqlSysDB.update_segment   s    	'!"gg!*oo 	
 	
 	
 :&&
-..
 VJU:=N4??23F3F$G$GGHH 	
 []]**htnj99J%~dooj6Q6Q'R'R A WWYY 	#!!T%:%:%<%<==KC )C(((%%''U:&&U:0N4??SUCVCV4W4WWXXVXX	  &a)>)>)@)@AAVC(((([]]**9999%%)((  #	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   /E+J''J+.J+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          |                                                     d d d            d S # 1 swxY w Y   d S )Nr|   r   r   r   r~   rb   )r   rq   r   rC   r   rK   r;   r   rH   r&   r   r<   rw   rB   r   rL   rM   rW   r   rJ   r|   r   r   r'   rs   r   )r2   r;   r<   rw   rp   r   ru   rY   rO   rQ   rR   r   s               r4   r   zSqlSysDB.update_collection7  s    	'R	
 	
 	

 m,,011
 VM""U=#~doob6I6I'J'JJKK 	
 {}}$$m(.*>*>??AKMM))m-~i/H/HIIAWWYY  	#!!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,,  3 	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	s   (FJ77J;>J;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   lenrq   r   floatbool)r2   r   rp   rZ   r   s        r4   r   zSqlSysDB._metadata_from_rowsv  s     	'CII	
 	
 	

 =? 		. 		.Cc"g,,C2w" #CGR$ #CGR$ %c"gR$ $SW4r5   zSqlSysDB._insert_metadatarO   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   ).0ks     r4   
<listcomp>z-SqlSysDB._insert_metadata.<locals>.<listcomp>  s     &M&M&MQ~a'8'8&M&M&Mr5   )r   r   rC   rJ   rK   r   rH   r   isinr   r   rL   rM   rD   rE   r   r   r   r   items
isinstancer   rG   r   rq   r   )r2   rO   r   r   r;   rp   r   rY   rQ   rR   sql_idr   vs                r4   rs   zSqlSysDB._insert_metadata  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$$$$$	% 	%r5   )r6   N)NNNNr-   )2__name__
__module____qualname__r   __annotations__r   r/   r   r   ALLr   r8   r   r   rq   rT   r   r[   r`   r%   rc   r!   rv   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
   rs   __classcell__)r3   s   @r4   r)   r)   %   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. T# T$ T T T XT %s %v % % % X% *g *$ * * * X*X \.0H0LMM
 (,#'#$(Y  Y Y  Y  8$	Y 
 C=Y  Y  Y  Y  
z4	 Y  Y  Y  X NMY v \)+C+GHH ""(,%)D DTND smD %	D
 TND 
'	D D D X IHDL \,.F.JKK ""$(# $a aTNa sma 	a
 a }a a 
*	a a a X LKaF \+-E-IJJ? ?$ ? ? ? X KJ?, \.0H0LMM %(	$- $-$- $- 	$-
 
$- $- $- X NM$-L \+-E-IJJ 8C{}}?J{}}	3 33 %Xd^43 #8N#;<	3
 
3 3 3 X KJ3j \.0H0LMM '2kmm5@[]]?J{}}; ;; s#; $HSM2	;
 #8N#;<; 
; ; ; X NM;z \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% U% U% U% U%r5   r)   N)1typingr   r   r   r   r   r   r	   r
   uuidr   	overridesr   pypikar   r   	itertoolsr   chromadb.configr   r   r   chromadb.db.baser   r   r   r   r   r   chromadb.db.systemr    chromadb.telemetry.opentelemetryr   r   r   r   chromadb.ingestr   chromadb.typesr   r    r!   r"   r#   r$   r%   r&   r'   r)   r   r5   r4   <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                % $ $ $ $ $            % $ $ $ $ $
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

% 
% 
% 
% 
%ue 
% 
% 
% 
% 
%r5   