
    +j(                     p   S SK rS SK Jr  S SKJr  S SKJr  S SKJrJ	r	  S SK
JrJrJr  S\S\S	\4S
 jrS\S\S	\S-  4S jr SS\S\S\S\S-  S	\\\\4   4
S jjr SS\S\S\S-  S	\4S jjrS\S\\   S	S4S jrS\S\\   S	\\   4S jr  SS\S\S\S-  S\S-  S	\4
S jjrS\S\S\S\S	S4
S jrg)    N)select)sqlite)Session)AssetAssetReference)MAX_BIND_PARAMScalculate_rows_per_statementiter_chunkssession
asset_hashreturnc                    U R                  [        [        R                  " S5      5      R	                  [
        5      R                  [
        R                  U:H  5      R                  S5      5      R                  5       nUSL$ )z9
Check if an asset with a given hash exists in database.
T   N)
executer   saliteralselect_fromr   wherehashlimitfirst)r   r   rows      A/home/wildlama/comfy/ComfyUI/app/assets/database/queries/asset.pyasset_exists_by_hashr   
   sa     	2::d#$[U5::+,U1X		
 eg  d?    c                     U R                  [        [        5      R                  [        R                  U:H  5      R                  S5      5      R                  5       R                  5       $ )Nr   )r   r   r   r   r   r   scalarsr   )r   r   s     r   get_asset_by_hashr      sF    
 
,,UZZ:-EFLLQO	P		r   
size_bytes	mime_typec                    U[        U5      S.nU(       a  X4S'   [        R                  " [        5      R                  " S	0 UD6R                  [        R                  /S9nU R                  U5      n[        UR                  =(       d    S5      S:  nU R                  [        [        5      R                  [        R                  U:H  5      R                  S5      5      R                  5       R                  5       nU(       d  [        S5      eSn	U(       de  Sn
UR                  [        U5      :w  a!  [        U5      S:  a  [        U5      Ul        Sn
U(       a  UR                   (       d  X8l        Sn
U
(       a  Sn	XU	4$ )
z;Upsert an Asset by hash. Returns (asset, created, updated).)r   r   r    index_elementsr   r   z!Asset row not found after upsert.FT )intr   insertr   valueson_conflict_do_nothingr   r   rowcountr   r   r   r   r   RuntimeErrorr   r    )r   r   r   r    valsinsrescreatedassetupdatedchangeds              r   upsert_assetr2   '   s9    c*o>D%[ 	e		 				

|		< 
 //#
C#,,#!$q(G 	u++EJJ*,DEKKANO		 

 >??Gs:.3z?Q3F":EGU__'OGG7""r   c                 \    [        XSS9nU R                  U5        U R                  5         U$ )z<Create a new asset with no hash (stub for later enrichment).N)r   r    r   )r   addflush)r   r   r    r/   s       r   create_stub_assetr6   Q   s*     Z4HEKKMMOLr   rowsc                     U(       d  g[         R                  " [        5      R                  [        R                  /S9n[        U[        S5      5       H  nU R                  X#5        M     g)z;Bulk insert Asset rows with ON CONFLICT DO NOTHING on hash.Nr"      )r   r&   r   r(   r   r
   r	   r   )r   r7   r,   chunks       r   bulk_insert_assetsr;   ]   sP    
 
--

5
5ejj\
5
RCT#?#BC# Dr   	asset_idsc                 ^   U(       d
  [        5       $ [        5       n[        U[        5       H}  nU R                  [	        [
        R                  5      R                  [
        R                  R                  U5      5      5      R                  5       nUR                  S U 5       5        M     U$ )z:Return the subset of asset_ids that exist in the database.c              3   *   #    U  H	  oS    v   M     g7f)r   Nr$   ).0r   s     r   	<genexpr>)get_existing_asset_ids.<locals>.<genexpr>u   s     ,tVts   )setr
   r   r   r   r   idr   in_fetchallupdate)r   r<   foundr:   r7   s        r   get_existing_asset_idsrH   i   s}    
 ueEY8588""588<<#67

(* 	 	,t,,	 9
 Lr   asset_idc                     U R                  [        U5      nU(       d  gUb  X$l        Ub  UR                  (       d  X4l        g)zDUpdate asset hash and/or mime_type. Returns True if asset was found.FT)getr   r   r    )r   rI   r   r    r/   s        r   update_asset_hash_and_mimerL   y   s9     KKx(E
U__#r   from_asset_idto_asset_idreference_idc                     U R                  [        U5      nU(       a  UR                  U:X  a  X$l        U R                  5         g)z{Reassign a reference from one asset to another.

Used when merging a stub asset into an existing asset with the same hash.
N)rK   r   rI   r5   )r   rM   rN   rO   refs        r   reassign_asset_referencesrR      s0     ++nl
3C
s||},"MMOr   )N)NN)
sqlalchemyr   r   sqlalchemy.dialectsr   sqlalchemy.ormr   app.assets.database.modelsr   r   "app.assets.database.queries.commonr   r	   r
   strboolr   r   r%   tupler2   r6   listdictr;   rB   rH   rL   rR   r$   r   r   <module>r]      s     & " < i i 
$ T\ !	'#'#'# '# Tz	'#
 5$'#Z !			 Tz	 			$	$
t*	$ 
	$Cy 	X& " 	 d
 Tz	
 
"  	
 
r   