
    +j(                     t   d dl Zd dl mZ d dlmZ d dlmZ d dlmZm	Z	 d dl
mZmZmZ deded	efd
Zdeded	edz  fdZ	 ddededededz  d	eeeef         f
dZ	 ddedededz  d	efdZdedee         d	dfdZdedee         d	ee         fdZ	 	 ddedededz  dedz  d	ef
dZdedededed	df
dZdS )    N)select)sqlite)Session)AssetAssetReference)MAX_BIND_PARAMScalculate_rows_per_statementiter_chunkssession
asset_hashreturnc                 .   |                      t          t          j        d                                        t
                                        t
          j        |k                                  d                    	                                }|duS )zA
    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   
   sr     	2:d##$$[U5:+,,U1XX		
 	
 egg  d?    c                     |                      t          t                                        t          j        |k                                  d                                                                                    S )Nr   )r   r   r   r   r   r   scalarsr   )r   r   s     r   get_asset_by_hashr      sS    
 
,,UZ:-EFFLLQOO	P	P		r   
size_bytes	mime_typec                    |t          |          d}|r||d<    t          j        t                    j        d	i |                    t          j        g          }|                     |          }t          |j        pd          dk    }|                     t          t                    
                    t          j        |k                                  d                                                                                    }|st          d          d}	|sYd}
|j        t          |          k    r)t          |          dk    rt          |          |_        d}
|r|j        s	||_        d}
|
rd}	|||	fS )
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   '   s    c*oo>>D &%[	e		 		 			
|		<	< 
 //#

C#,#!$$q(G 	u++EJ*,DEEKKANNOO		 

  @>???G 	s:..3z??Q3F3F":EG 	U_ 	'EOG 	G'7""r   c                 |    t          ||d          }|                     |           |                                  |S )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<     Z94HHHEKKMMOOOLr   rowsc                     |sdS t          j        t                                        t          j        g          }t          |t          d                    D ]}|                     ||           dS )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;   ]   sx    
  
-


5
5ej\
5
R
RCT#?#B#BCC $ $U####$ $r   	asset_idsc                    |st                      S t                      }t          |t                    D ]}|                     t	          t
          j                                      t
          j                            |                              	                                }|
                    d |D                        |S )z:Return the subset of asset_ids that exist in the database.c              3   &   K   | ]}|d          V  dS )r   Nr$   ).0r   s     r   	<genexpr>z)get_existing_asset_ids.<locals>.<genexpr>u   s&      ,,SV,,,,,,r   )setr
   r   r   r   r   idr   in_fetchallupdate)r   r<   foundr:   r7   s        r   get_existing_asset_idsrG   i   s    
  uueeEY88 - -58""58<<#6#677
 

(** 	 	,,t,,,,,,,Lr   asset_idc                 v    |                      t          |          }|sdS |||_        ||j        s||_        dS )zDUpdate asset hash and/or mime_type. Returns True if asset was found.FNT)getr   r   r    )r   rH   r   r    r/   s        r   update_asset_hash_and_mimerK   y   sJ     KKx((E u
U_#4r   from_asset_idto_asset_idreference_idc                     |                      t          |          }|r|j        |k    r||_        |                                  dS )zReassign a reference from one asset to another.

    Used when merging a stub asset into an existing asset with the same hash.
    N)rJ   r   rH   r5   )r   rL   rM   rN   refs        r   reassign_asset_referencesrQ      sC     ++nl
3
3C
 #s|},,"MMOOOOOr   )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;   rA   rG   rK   rQ   r$   r   r   <module>r\      s             & & & & & & " " " " " " < < < < < < < < i i i i i i i i i i 
   $ T\    !	'# '#'#'# '# Tz	'#
 5$'# '# '# '#Z !	 			 Tz	 		 	 	 		$	$
t*	$ 
	$ 	$ 	$ 	$Cy 	X   & " 	  d
 Tz	
 
   "  	
 
     r   