
    +j              	          d Z ddlZddlmZ ddlmZmZ ddlZddlm	Z	 ddl
mZmZmZ ddlmZmZ dZd	ed
efdZdefdZdee         ded
eee                  fdZded
ej        j        fdZdee         d
eej        j                 fdZ	 	 ddej        j        dee         dz  dee         dz  d
ej        j        fdZ	 ddej        j        dedz  d
ej        j        fdZ dS )z,Shared utilities for database query modules.    N)Decimal)IterableSequence)exists)AssetReferenceAssetReferenceMetaAssetReferenceTag)escape_sql_like_stringnormalize_tagsi   colsreturnc                 N    t          dt          t          d|           z            S )zDCalculate how many rows can fit in one statement given column count.   )maxMAX_BIND_PARAMS)r   s    B/home/wildlama/comfy/ComfyUI/app/assets/database/queries/common.pycalculate_rows_per_statementr      s    q/SD\\1222    nc              #   j   K   t          dt          |           |          D ]}| |||z            V  dS )z)Yield successive n-sized chunks from seq.r   N)rangelen)seqr   is      r   iter_chunksr      sL      1c#hh""  !a!e)n r   rowscols_per_rowc              #   X   K   | sdS t          | t          |                    E d{V  dS )z;Yield chunks of rows sized to fit within bind param limits.N)r   r   )r   r   s     r   iter_row_chunksr      sD       4!=l!K!KLLLLLLLLLLLr   owner_idc                     | pd                                 } | dk    rt          j        dk    S t          j                            d| g          S )z^Build owner visibility predicate for reads.

    Owner-less rows are visible to everyone.
     )stripr   r    in_)r    s    r   build_visible_owner_clauser%   "   sK    
 B%%''H2~~&",,"&&H~666r   prefixesc                 @   g }| D ]}t           j                            |          }|                    t           j                  s|t           j        z  }t          |          \  }}|                    t          j        	                    |dz   |                     |S )zGBuild LIKE conditions for matching file paths under directory prefixes.%)escape)
ospathabspathendswithsepr
   appendr   	file_pathlike)r&   condspbaseescapedescs         r   build_prefix_like_conditionsr7   -   s     E O Owq!!}}RV$$ 	BFND-d33^-227S=2MMNNNNLr   stmtinclude_tagsexclude_tagsc                    t          |          }t          |          }|rb|D ]_}|                     t                                          t          j        t
          j        k    t          j        |k    z                      } `|rm|                     t                                          t          j        t
          j        k    t          j                            |          z                       } | S )zKinclude_tags: every tag must be present; exclude_tags: none may be present.)	r   wherer   r	   asset_reference_idr   idtag_namer$   )r8   r9   r:   r?   s       r   apply_tag_filtersr@   ;   s     ",//L!,//L $ 	 	H::&9^=NN(1X=?  DD  
zzXX^^"59JJ$-11,??A  
 
 Kr   metadata_filterc                    |s| S dt           dt          j        j        fddt           dt          j        j        ffd|                                D ]l\  }t          |t                    r3fd|D             }|r!|                     t          j        |           } M|                      |                    } m| S )z:Apply filters using asset_reference_meta projection table.keyr   c                      t          j                    j        t          j        t
          j        k    t          j        | k    g|R  S N)sar   r<   r   r=   r   r>   rC   )rC   predss     r   _exists_for_predz/apply_metadata_filter.<locals>._exists_for_pred_   sG     ry{{ 1^5FF"c)
 
 
 
 	
r   c                    |_t          j        t          j                                        t          j        t          j        k    t          j        | k                        S t          |t                    r' | t          j        t          |          k              S t          |t          t          t          f          rMt          |t                    r|nt          t          |                    } | t          j        |k              S t          |t                    r | t          j        |k              S  | t          j        |k              S rE   )rF   not_r   r<   r   r=   r   r>   rC   
isinstanceboolval_boolintfloatr   strval_numval_strval_json)rC   valuenumrH   s      r   _exists_clause_for_valuez7apply_metadata_filter.<locals>._exists_clause_for_valuef   s,   =7	!!&9^=NN&*c1    eT"" 	U##C);)DU)STTTec5'233 	L%eW55N%%73u::;N;NC##C);)Cs)JKKKeS!! 	N##C);)Cu)LMMM%7%@E%IJJJr   c                 (    g | ]} |          S  rX   ).0elemrV   ks     r   
<listcomp>z)apply_metadata_filter.<locals>.<listcomp>z   s'    CCC++At44CCCr   )	rP   rF   sqlClauseElementitemsrK   listr<   or_)r8   rA   vorsrV   rH   r[   s       @@@r   apply_metadata_filterrd   W   s	   
  
c 
bf.B 
 
 
 
Kc KRV5I K K K K K K$  %%'' > >1a 	>CCCCCCCCC 0zz"&#,//::66q!<<==DDKr   )NNrE   )!__doc__r*   decimalr   typingr   r   
sqlalchemyrF   r   app.assets.database.modelsr   r   r	   app.assets.helpersr
   r   r   rN   r   r   r`   dictr   rP   r]   r^   r%   ColumnElementr7   Selectr@   rd   rX   r   r   <module>rn      s   2 2 				       % % % % % % % %           \ \ \ \ \ \ \ \ \ \ E E E E E E E E3s 3s 3 3 3 3
    M$t* MC MHT$Z<P M M M M7 71E 7 7 7 73i	"&
     *.)- 
&-3-$& 3-$& V]	   < $(( (
&-(D[( V]( ( ( ( ( (r   