
    +j              	       ,   S r SSKrSSKJr  SSKJrJr  SSKrSSKJ	r	  SSK
JrJrJr  SSKJrJr  SrS	\S
\4S jrS\4S jrS\\   S\S
\\\      4S jrS\S
\R2                  R4                  4S jrS\\   S
\\R2                  R8                     4S jr  SS\R2                  R<                  S\\   S-  S\\   S-  S
\R2                  R<                  4S jjr SS\R2                  R<                  S\S-  S
\R2                  R<                  4S jjr g)z,Shared utilities for database query modules.    N)Decimal)IterableSequence)exists)AssetReferenceAssetReferenceMetaAssetReferenceTag)escape_sql_like_stringnormalize_tagsi   colsreturnc                 <    [        S[        [        SU 5      -  5      $ )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    nc              #   V   #    [        S[        U 5      U5       H  nXX!-    v   M     g7f)z)Yield successive n-sized chunks from seq.r   N)rangelen)seqr   is      r   iter_chunksr      s(     1c#h"aen #s   ')rowscols_per_rowc              #   Z   #    U (       d  g[        U [        U5      5       Sh  vN   g N7f)z;Yield chunks of rows sized to fit within bind param limits.N)r   r   )r   r   s     r   iter_row_chunksr      s!     4!=l!KLLLs   !+)+owner_idc                     U =(       d    SR                  5       n U S:X  a  [        R                  S:H  $ [        R                  R                  SU /5      $ )zVBuild owner visibility predicate for reads.

Owner-less rows are visible to everyone.
 )stripr   r    in_)r    s    r   build_visible_owner_clauser%   "   sI    
 B%%'H2~&&",,""&&H~66r   prefixesc                 B   / nU  H  n[         R                  R                  U5      nUR                  [         R                  5      (       d  U[         R                  -  n[        U5      u  pEUR                  [        R                  R                  US-   US95        M     U$ )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wwq!}}RVV$$BFFND-d3^--227S=2MN  Lr   stmtinclude_tagsexclude_tagsc                    [        U5      n[        U5      nU(       ad  U H^  nU R                  [        5       R                  [        R                  [
        R                  :H  [        R                  U:H  -  5      5      n M`     U(       ah  U R                  [        5       R                  [        R                  [
        R                  :H  [        R                  R                  U5      -  5      ) 5      n U $ )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9^=N=NN(11X=?D % zzX^^"559J9JJ$--11,?A 
 Kr   metadata_filterc                   ^ U(       d  U $ S[         S[        R                  R                  4S jmS[         S[        R                  R                  4U4S jjnUR	                  5        Hu  u  p4[        U[        5      (       aD  U Vs/ s H
  oR" X55      PM     nnU(       a$  U R                  [        R                  " U6 5      n M\  M^  U R                  U" X45      5      n Mw     U $ s  snf )z:Apply filters using asset_reference_meta projection table.keyr   c                     [         R                  " 5       R                  " [        R                  [
        R                  :H  [        R                  U :H  /UQ76 $ N)sar   r<   r   r=   r   r>   rC   )rC   predss     r   _exists_for_pred/apply_metadata_filter.<locals>._exists_for_pred_   sG    yy{  11^5F5FF""c)
 
 	
r   c                   > Uci  [         R                  " [         R                  " 5       R                  [        R
                  [        R                  :H  [        R                  U :H  5      5      $ [        U[        5      (       a#  T" U [        R                  [        U5      :H  5      $ [        U[        [        [        45      (       aE  [        U[        5      (       a  UO[        [        U5      5      nT" U [        R                   U:H  5      $ [        U[        5      (       a  T" U [        R"                  U:H  5      $ T" U [        R$                  U:H  5      $ 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_value7apply_metadata_filter.<locals>._exists_clause_for_valuef   s   =77		!!&99^=N=NN&**c1  eT""#C);)D)DU)STTec5'233%eW55%73u:;NC#C);)C)Cs)JKKeS!!#C);)C)Cu)LMM%7%@%@E%IJJr   )	rQ   rF   sqlClauseElementitemsrL   listr<   or_)r8   rA   rW   kvelemorsrH   s          @r   apply_metadata_filterrb   W   s    
 
c 
bff.B.B 
Kc KRVV5I5I K$  %%'aABC+A4CCzz"&&#,/  ::6q<=D ( K Ds   C#)NNrE   )!__doc__r*   decimalr   typingr   r   
sqlalchemyrF   r   app.assets.database.modelsr   r   r	   app.assets.helpersr
   r   r   rO   r   r   r\   dictr   rQ   rY   rZ   r%   ColumnElementr7   Selectr@   rb    r   r   <module>rm      s?   2 	  %   \ \ E3s 3s 3
 M$t* MC MHT$Z<P M7 71E1E 73i	"&&

  *.)-
&&--3-$& 3-$& VV]]	< $((
&&--(D[( VV]](r   