
    Ji                       S SK Jr  S SKr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JrJrJrJrJr  S SKJrJrJrJrJrJrJrJrJr  S SKJrJrJrJr   " S	 S
\5      r  " S S\5      r! " S S\
5      r" " S S\5      r# " S S\5      r$ " S S\5      r% " S S5      r& " S S\
5      r' " S S\5      r( " S S\5      r) " S S\5      r* " S S \
5      r+ " S! S"5      r, " S# S$\5      r- " S% S&\5      r. " S' S(\-5      r/ " S) S*\5      r0 " S+ S,\5      r1 " S- S.\5      r2 " S/ S0\5      r3 " S1 S2\5      r4 " S3 S4\-5      r5 " S5 S6\5      r6 " S7 S8\5      r7 " S9 S:\5      r8 " S; S<\5      r9 " S= S>\5      r: " S? S@\5      r; " SA SB\5      r< " SC SD\5      r= " SE SF\5      r> " SG SH\>5      r? " SI SJ\5      r@ " SK SL\5      rAg)M    )annotationsN)copy)Any)Dialects)CreateQueryBuilderDatabaseDropQueryBuilderQueryQueryBuilder
SelectableTable)	ArithmeticExpression	CriterionEmptyCriterionFieldFunctionNullCriterionStarTermValueWrapper)QueryExceptionbuilderformat_alias_sqlformat_quotesc                  T    \ rS rSrSr\SS j5       r\S	S j5       r\S
S j5       rSr	g)SnowflakeQuery    z/
Defines a query class for use with Snowflake.
c                    [        S0 UD6$ N )SnowflakeQueryBuilderclskwargss     Q/var/www/html/dynamic-report/venv/lib/python3.13/site-packages/pypika/dialects.py_builderSnowflakeQuery._builder%   s    $.v..    c                4    [        5       R                  U5      $ N)SnowflakeCreateQueryBuildercreate_tabler#   tables     r%   r,   SnowflakeQuery.create_table)   s    *,99%@@r(   c                4    [        5       R                  U5      $ r*   )SnowflakeDropQueryBuilder
drop_tabler-   s     r%   r2   SnowflakeQuery.drop_table-   s    (*55e<<r(   r    N)r$   r   returnr!   )r.   str | Tabler4   r+   )r.   r5   r4   r1   )
__name__
__module____qualname____firstlineno____doc__classmethodr&   r,   r2   __static_attributes__r    r(   r%   r   r       sE     / / A A = =r(   r   c                  <   ^  \ rS rSrSrSrSr\rSU 4S jjr	Sr
U =r$ )r!   2   N" c                F   > [         TU ]  " SS[        R                  0UD6  g Ndialectr    super__init__r   	SNOWFLAKEselfr$   	__class__s     r%   rF   SnowflakeQueryBuilder.__init__8   s    >!3!3>v>r(   r    r$   r   r4   None)r6   r7   r8   r9   
QUOTE_CHARALIAS_QUOTE_CHARQUERY_ALIAS_QUOTE_CHARr   	QUERY_CLSrF   r<   __classcell__rJ   s   @r%   r!   r!   2   s#    JI? ?r(   r!   c                  4   ^  \ rS rSrSr\rSU 4S jjrSrU =r	$ )r+   <   Nc                <   > [         TU ]  [        R                  S9  g NrC   rD   rI   rJ   s    r%   rF   $SnowflakeCreateQueryBuilder.__init__@       !3!34r(   r    r4   rM   
r6   r7   r8   r9   rN   r   rQ   rF   r<   rR   rS   s   @r%   r+   r+   <       JI5 5r(   r+   c                  4   ^  \ rS rSrSr\rSU 4S jjrSrU =r	$ )r1   D   Nc                <   > [         TU ]  [        R                  S9  g rW   rD   rY   s    r%   rF   "SnowflakeDropQueryBuilder.__init__H   r[   r(   r    r\   r]   rS   s   @r%   r1   r1   D   r^   r(   r1   c                  h    \ rS rSrSr\S	S j5       r\S
S j5       r\SS j5       r\SS j5       r	Sr
g)
MySQLQueryL   z+
Defines a query class for use with MySQL.
c                    [        S0 UD6$ r   )MySQLQueryBuilderr"   s     r%   r&   MySQLQuery._builderQ        *6**r(   c                4    [        5       R                  U5      $ r*   )MySQLLoadQueryBuilderloadr#   fps     r%   rl   MySQLQuery.loadU   s    $&++B//r(   c                4    [        5       R                  U5      $ r*   )MySQLCreateQueryBuilderr,   r-   s     r%   r,   MySQLQuery.create_tableY   s    &(55e<<r(   c                4    [        5       R                  U5      $ r*   )MySQLDropQueryBuilderr2   r-   s     r%   r2   MySQLQuery.drop_table]   s    $&11%88r(   r    N)r$   r   r4   rg   )rn   strr4   rk   )r.   r5   r4   rq   )r.   r5   r4   rt   )r6   r7   r8   r9   r:   r;   r&   rl   r,   r2   r<   r    r(   r%   rd   rd   L   sW     + + 0 0 = = 9 9r(   rd   c                     ^  \ rS rSrSr\rSU 4S jjrSU 4S jjr\	SSS jj5       r
\	SS j5       r\	SS j5       rSU 4S jjrSS	 jrSS
 jrSS jr\	SS j5       rSS jrSrU =r$ )rg   b   `c                   > [         TU ]  " SS[        R                  0UD6  / U l        SU l        / U l        SU l        SU l        [        5       U l
        g NrC   Fr    )rE   rF   r   MYSQL_duplicate_updates_ignore_duplicates
_modifiers_for_update_nowait_for_update_skip_lockedset_for_update_ofrH   s     r%   rF   MySQLQueryBuilder.__init__f   sM    ::6:"$"'"'',$!er(   c                   > [         TU ]  5       n[        U R                  5      Ul        [        U R                  5      Ul        U$ r*   )rE   __copy__r   r}   r~   rI   newonerJ   s     r%   r   MySQLQueryBuilder.__copy__p   s;    !#$()@)@$A!$()@)@$A!r(   c                J    SU l         X l        Xl        [        U5      U l        g NT_for_updater   r   r   r   rI   nowaitskip_lockedofs       r%   
for_updateMySQLQueryBuilder.for_updatev   "    '2$"(!"gr(   c                    U R                   (       a  [        S5      e[        U[        5      (       d  [        U5      OUnU R                  R                  U[        U5      45        g )N"Can not have two conflict handlers)r~   r   
isinstancer   r}   appendr   )rI   fieldvalues      r%   on_duplicate_key_update)MySQLQueryBuilder.on_duplicate_key_update}   sL    "" !EFF$.ue$<$<e%&&|E/B'CDr(   c                J    U R                   (       a  [        S5      eSU l        g )Nr   T)r}   r   r~   rI   s    r%   on_duplicate_key_ignore)MySQLQueryBuilder.on_duplicate_key_ignore   s    "" !EFF"&r(   c                   > U R                  U5        [        TU ]  " S0 UD6nU(       aJ  U R                  (       a  X R                  " S0 UD6-  nU$ U R
                  (       a  X R                  5       -  nU$ r   )_set_kwargs_defaultsrE   get_sqlr}   _on_duplicate_key_update_sqlr~   _on_duplicate_key_ignore_sql)rI   r$   querystringrJ   s      r%   r   MySQLQueryBuilder.get_sql   sn    !!&)go//&&@@J6JJ  ((@@BBr(   c                R   U R                   (       a  SnU R                  (       aK  USSR                  U R                   Vs/ s H  n[        U5      R                  " S0 UD6PM      sn5       3-  nU R
                  (       a  US-  nU$ U R                  (       a  US-  nU$ SnU$ s  snf Nz FOR UPDATEz OF , z NOWAITz SKIP LOCKEDr@   r    r   r   joinr   r   r   r   rI   r$   r   items       r%   _for_update_sql!MySQLQueryBuilder._for_update_sql       &J""TYYZ^ZmZm/nZmRVd0C0C0Mf0MZm/n%o$pqq
&&i'
  --n,
  J 0o    %B$c                h   ^ SR                  SR                  U4S jU R                   5       5      S9$ )Nz" ON DUPLICATE KEY UPDATE {updates},c           	   3     >#    U  H7  u  pS R                  UR                  " S0 TD6UR                  " S0 TD6S9v   M9     g7f){field}={value}r   r   Nr    )formatr   .0r   r   r$   s      r%   	<genexpr>AMySQLQueryBuilder._on_duplicate_key_update_sql.<locals>.<genexpr>   sC      $;LE "((u}}/Fv/FemmNe^dNe(f$;s   ?Aupdates)r   r   r}   rI   r$   s    `r%   r   .MySQLQueryBuilder._on_duplicate_key_update_sql   s:    3::HH $($;$;  ; 
 	
r(   c                    g)Nz ON DUPLICATE KEY IGNOREr    r   s    r%   r   .MySQLQueryBuilder._on_duplicate_key_ignore_sql   s    )r(   c                :    U R                   R                  U5        g)z
Adds a modifier such as SQL_CALC_FOUND_ROWS to the query.
https://dev.mysql.com/doc/refman/5.7/en/select.html

:param value: The modifier value e.g. SQL_CALC_FOUND_ROWS
N)r   r   )rI   r   s     r%   modifierMySQLQueryBuilder.modifier   s     	u%r(   c                  ^ SR                  U R                  (       a  SOSU R                  (       a*  SR                  SR                  U R                  5      5      OSSR                  U4S jU R                   5       5      S9$ )	zw
Overridden function to generate the SELECT part of the SQL statement,
with the addition of the a modifier if present.
z#SELECT {distinct}{modifier}{select}	DISTINCT r@   z{}  r   c              3  L   >#    U  H  oR                   " SS S S.TD6v   M     g7fT)
with_aliassubqueryNr    r   r   termr$   s     r%   r   0MySQLQueryBuilder._select_sql.<locals>.<genexpr>   %     m_lW[LLRD4R6R_l   !$)distinctr   select)r   	_distinctr   r   _selectsr   s    `r%   _select_sqlMySQLQueryBuilder._select_sql   sc    
 5;;$(NN[@DU\\#((4??";<UW88m_c_l_lmm < 
 	
r(   )r}   r   r   r   r   r~   r   rL   )r4   rg   FFr    )r   boolr   r   r   tuple[str, ...]r4   rM   )r   zField | strr   r   r4   rM   r\   r$   r   r4   rv   r4   rv   )r   rv   r4   rM   )r6   r7   r8   r9   rN   rd   rQ   rF   r   r   r   r   r   r   r   r   r   r   r   r<   rR   rS   s   @r%   rg   rg   b   s    JI$ & & E E ' '
* & &	
 	
r(   rg   c                  |    \ rS rSr\rSS jr\SS j5       r\SS j5       r	SS jr
SS jrSS jrSS jrSS	 jrS
rg)rk      c                     S U l         S U l        g r*   )
_load_file_into_tabler   s    r%   rF   MySQLLoadQueryBuilder.__init__   s    r(   c                    Xl         g r*   )r   rI   rn   s     r%   rl   MySQLLoadQueryBuilder.load       r(   c                \    [        U[        5      (       a  Xl        g [        U5      U l        g r*   )r   r   r   rI   r.   s     r%   intoMySQLLoadQueryBuilder.into       $.ue$<$<5%,r(   c                    SnU R                   (       aM  U R                  (       a<  X0R                  " S0 UD6-  nX0R                  " S0 UD6-  nX0R                  " S0 UD6-  nU$ Nr@   r    )r   r   _load_file_sql_into_table_sql_options_sqlrI   argsr$   r   s       r%   r   MySQLLoadQueryBuilder.get_sql   s^    ??t//..888K//9&99K,,6v66Kr(   c                8    SR                  U R                  5      $ )NzLOAD DATA LOCAL INFILE '{}')r   r   r   s     r%   r   $MySQLLoadQueryBuilder._load_file_sql   s    ,33DOODDr(   c                X    SR                  U R                  R                  " S0 UD65      $ )Nz INTO TABLE `{}`r    )r   r   r   r   s     r%   r   %MySQLLoadQueryBuilder._into_table_sql   s'    !(()9)9)A)A)KF)KLLr(   c                    g)Nz FIELDS TERMINATED BY ','r    r   s     r%   r   "MySQLLoadQueryBuilder._options_sql   s    *r(   c                "    U R                  5       $ r*   r   r   s    r%   __str__MySQLLoadQueryBuilder.__str__       ||~r(   )r   r   Nr\   rn   rv   r4   rM   r.   r5   r4   rM   r   r   r$   r   r4   rv   r   r   )r6   r7   r8   r9   rd   rQ   rF   r   rl   r   r   r   r   r   r   r<   r    r(   r%   rk   rk      sQ    I    O OEM+r(   rk   c                      \ rS rSrSrSrg)rq      ry   r    Nr6   r7   r8   r9   rN   r<   r    r(   r%   rq   rq          Jr(   rq   c                      \ rS rSrSrSrg)rt      ry   r    Nr  r    r(   r%   rt   rt      r  r(   rt   c                  T    \ rS rSrSr\SS j5       r\S	S j5       r\S
S j5       rSr	g)VerticaQuery   z-
Defines a query class for use with Vertica.
c                    [        S0 UD6$ r   )VerticaQueryBuilderr"   s     r%   r&   VerticaQuery._builder       ",V,,r(   c                4    [        5       R                  U5      $ r*   )VerticaCopyQueryBuilder	from_filerm   s     r%   r  VerticaQuery.from_file   s    &(22266r(   c                4    [        5       R                  U5      $ r*   )VerticaCreateQueryBuilderr,   r-   s     r%   r,   VerticaQuery.create_table   s    (*77>>r(   r    N)r4   r  )rn   rv   r4   r  )r.   r5   r4   r  )
r6   r7   r8   r9   r:   r;   r&   r  r,   r<   r    r(   r%   r	  r	     sC     - - 7 7 ? ?r(   r	  c                  T   ^  \ rS rSr\rSU 4S jjr\SS j5       rSU 4S jjr	Sr
U =r$ )	r  i  c                T   > [         TU ]  " SS[        R                  0UD6  S U l        g rB   )rE   rF   r   VERTICA_hintrH   s     r%   rF   VerticaQueryBuilder.__init__  s%    <!1!1<V<
r(   c                    Xl         g r*   r  )rI   labels     r%   hintVerticaQueryBuilder.hint  s    
r(   c                   > [         TU ]  " U0 UD6nU R                  b1  SR                  US S SR	                  U R                  S9USS  /5      nU$ )Nr@      z/*+label({hint})*/)r     )rE   r   r  r   r   )rI   r   r$   sqlrJ   s       r%   r   VerticaQueryBuilder.get_sql  s]    got.v.::!''3r7$8$?$?TZZ$?$PRUVWVXRYZ[C
r(   r  rL   )r  rv   r4   rM   r  )r6   r7   r8   r9   r	  rQ   rF   r   r  r   r<   rR   rS   s   @r%   r  r    s+    I   r(   r  c                     ^  \ rS rSr\rS
U 4S jjr\S
S j5       r\S
S j5       r	SS jr
SU 4S jjrSS jrSS jrS	rU =r$ )r  i  c                X   > [         TU ]  [        R                  S9  SU l        SU l        g )NrX   F)rE   rF   r   r  _local_preserve_rowsrY   s    r%   rF   "VerticaCreateQueryBuilder.__init__  s(    !1!12#r(   c                J    U R                   (       d  [        S5      eSU l        g Nz)'Query' object has no attribute temporaryT)
_temporaryAttributeErrorr'  r   s    r%   localVerticaCreateQueryBuilder.local   s     !LMMr(   c                J    U R                   (       d  [        S5      eSU l        g r+  )r,  r-  r(  r   s    r%   preserve_rows'VerticaCreateQueryBuilder.preserve_rows'  s     !LMM"r(   c           	         SR                  U R                  (       a  SOSU R                  (       a  SOSU R                  R                  " S0 UD6S9$ )Nz&CREATE {local}{temporary}TABLE {table}zLOCAL r@   z
TEMPORARY )r.  	temporaryr.   r    )r   r'  r,  _create_tabler   r   s     r%   _create_table_sql+VerticaCreateQueryBuilder._create_table_sql.  sG    7>>"kk(r&*ool2$$,,6v6 ? 
 	
r(   c                L   > [         TU ]  " S0 UD6nX R                  5       -  nU$ r   )rE   _table_options_sql_preserve_rows_sql)rI   r$   table_optionsrJ   s      r%   r9  ,VerticaCreateQueryBuilder._table_options_sql5  s,    2<V<0022r(   c                r    SR                  U R                  5       U R                  R                  " S0 UD6S9$ )Nz{preserve_rows} AS ({query}))r1  queryr    )r   r:  
_as_selectr   r   s     r%   _as_select_sql(VerticaCreateQueryBuilder._as_select_sql:  s;    -44113//))3F3 5 
 	
r(   c                ,    U R                   (       a  S$ S$ )Nz ON COMMIT PRESERVE ROWSr@   )r(  r   s    r%   r:  ,VerticaCreateQueryBuilder._preserve_rows_sql@  s    -1-@-@)HbHr(   )r'  r(  r\   r   r   )r6   r7   r8   r9   r	  rQ   rF   r   r.  r1  r6  r9  r@  r:  r<   rR   rS   s   @r%   r  r    sP    I$
   # #


I Ir(   r  c                  |    \ rS rSr\rSS jr\SS j5       r\SS j5       r	SS jr
SS jrSS jrSS jrSS	 jrS
rg)r  iD  c                     S U l         S U l        g r*   _copy_table
_from_filer   s    r%   rF    VerticaCopyQueryBuilder.__init__G  s    r(   c                    Xl         g r*   )rH  r   s     r%   r  !VerticaCopyQueryBuilder.from_fileK  r   r(   c                \    [        U[        5      (       a  Xl        g [        U5      U l        g r*   )r   r   rG  r   s     r%   copy_VerticaCopyQueryBuilder.copy_O  r   r(   c                    SnU R                   (       aM  U R                  (       a<  X0R                  " S0 UD6-  nX0R                  " S0 UD6-  nX0R                  " S0 UD6-  nU$ r   )rG  rH  _copy_table_sql_from_file_sqlr   r   s       r%   r   VerticaCopyQueryBuilder.get_sqlS  s^    //9&99K..888K,,6v66Kr(   c                X    SR                  U R                  R                  " S0 UD65      $ )Nz	COPY "{}"r    )r   rG  r   r   s     r%   rP  'VerticaCopyQueryBuilder._copy_table_sql\  s'    !!$"2"2":":"DV"DEEr(   c                8    SR                  U R                  5      $ )Nz FROM LOCAL '{}')r   rH  r   s     r%   rQ  &VerticaCopyQueryBuilder._from_file_sql_  s    !((99r(   c                    g)Nz  PARSER fcsvparser(header=false)r    r   s     r%   r   $VerticaCopyQueryBuilder._options_sqlb  s    1r(   c                "    U R                  5       $ r*   r   r   s    r%   r   VerticaCopyQueryBuilder.__str__e  r   r(   rF  Nr\   r   r   r  r   r   )r6   r7   r8   r9   r	  rQ   rF   r   r  rM  r   rP  rQ  r   r   r<   r    r(   r%   r  r  D  sP    I   O OF:2r(   r  c                  <    \ rS rSrSS jrSS jr\SS j5       rSrg)	"FetchNextAndOffsetRowsQueryBuilderii  c                4    SR                  U R                  S9$ )Nz FETCH NEXT {limit} ROWS ONLY)limit)r   _limitr   s    r%   
_limit_sql-FetchNextAndOffsetRowsQueryBuilder._limit_sqlj  s    .55DKK5HHr(   c                F    SR                  U R                  =(       d    SS9$ )Nz OFFSET {offset} ROWSr   )offset)r   _offsetr   s    r%   _offset_sql.FetchNextAndOffsetRowsQueryBuilder._offset_sqlm  s    &--T\\5FQ-GGr(   c                F    [         R                  " S[        5        Xl        g )Nz:`fetch_next` is deprecated - please use the `limit` method)warningswarnDeprecationWarningr_  )rI   r^  s     r%   
fetch_next-FetchNextAndOffsetRowsQueryBuilder.fetch_nextp  s    RTfgr(   )r_  Nr   )r^  intr4   rM   )	r6   r7   r8   r9   r`  re  r   rk  r<   r    r(   r%   r\  r\  i  s"    IH  r(   r\  c                  ,    \ rS rSrSr\SS j5       rSrg)OracleQueryiv  z,
Defines a query class for use with Oracle.
c                    [        S0 UD6$ r   )OracleQueryBuilderr"   s     r%   r&   OracleQuery._builder{  s    !+F++r(   r    N)r$   r   r4   rq  r6   r7   r8   r9   r:   r;   r&   r<   r    r(   r%   ro  ro  v  s     , ,r(   ro  c                  N   ^  \ rS rSrSr\rSU 4S jjrSU 4S jjrS	S jr	Sr
U =r$ )
rq  i  Nc                F   > [         TU ]  " SS[        R                  0UD6  g rB   )rE   rF   r   ORACLErH   s     r%   rF   OracleQueryBuilder.__init__  s    ;;F;r(   c                .   > SUS'   [         TU ]  " U0 UD6$ NFgroupby_aliasrE   r   rI   r   r$   rJ   s      r%   r   OracleQueryBuilder.get_sql  #     #(w///r(   c                    U R                   (       a  XR                  5       -  nU R                  b  XR                  5       -  nU$ r*   )rd  re  r_  r`  rI   r   r$   s      r%   _apply_pagination$OracleQueryBuilder._apply_pagination  s9    <<++--K;;"??,,Kr(   r    rL   r  r   rv   r4   rv   )r6   r7   r8   r9   rN   ro  rQ   rF   r   r  r<   rR   rS   s   @r%   rq  rq    s!    JI<0 r(   rq  c                  ,    \ rS rSrSr\SS j5       rSrg)PostgreSQLQueryi  z0
Defines a query class for use with PostgreSQL.
c                    [        S0 UD6$ r   )PostgreSQLQueryBuilderr"   s     r%   r&   PostgreSQLQuery._builder  s    %///r(   r    Nr4   r  rs  r    r(   r%   r  r    s     0 0r(   r  c                  z  ^  \ rS rSrSr\rSU 4S jjrSU 4S jjr\	SS j5       r
\	SSS jj5       r\	SS j5       r\	S S j5       r\	S!S"S	 jj5       r\	S#U 4S
 jj5       r\	S$S j5       rS%U 4S jjrS&S jrS%S jrS'S jrS%S jr\	S(S j5       rS)S jrS S jrS*S jrS*S jrS+S jrS%S jrS,S-U 4S jjjrSrU =r$ ).r  i  r?   c                   > [         TU ]  " SS[        R                  0UD6  / U l        SU l        SU l        / U l        SU l        / U l	        S U l
        S U l        / U l        SU l        SU l        [        5       U l        g r{   )rE   rF   r   
POSTGRESQL_returns_return_star_on_conflict_on_conflict_fields_on_conflict_do_nothing_on_conflict_do_updates_on_conflict_wheres_on_conflict_do_update_wheres_distinct_onr   r   r   r   rH   s     r%   rF   PostgreSQLQueryBuilder.__init__  s    ?!4!4??!!#% ',$')$#' -1*"'',$!er(   c                   > [         TU ]  5       n[        U R                  5      Ul        [        U R                  5      Ul        U$ r*   )rE   r   r   r  r  r   s     r%   r   PostgreSQLQueryBuilder.__copy__  s8    !#t}}-)-d.J.J)K&r(   c                    U Hp  n[        U[        5      (       a&  U R                  R                  [	        U5      5        M>  [        U[
        5      (       d  MU  U R                  R                  U5        Mr     g r*   r   rv   r  r   r   r   rI   fieldsr   s      r%   distinct_on"PostgreSQLQueryBuilder.distinct_on  R    E%%%!!((u6E4((!!((/	 r(   c                J    SU l         X l        Xl        [        U5      U l        g r   r   r   s       r%   r   !PostgreSQLQueryBuilder.for_update  r   r(   c                B   U R                   (       d  [        S5      eSU l        U Hv  n[        U[        5      (       a,  U R
                  R                  U R                  U5      5        MD  [        U[        5      (       d  M[  U R
                  R                  U5        Mx     g )Nz(On conflict only applies to insert queryT)	_insert_tabler   r  r   rv   r  r   _conflict_field_strr   )rI   target_fieldstarget_fields      r%   on_conflict"PostgreSQLQueryBuilder.on_conflict  sv    !! !KLL )L,,,((//0H0H0VWL$//((//=	 *r(   c                Z    [        U R                  5      S:  a  [        S5      eSU l        g )Nr   r   T)lenr  r   r  r   s    r%   
do_nothing!PostgreSQLQueryBuilder.do_nothing  s)    t++,q0 !EFF'+$r(   c                ^   U R                   (       a  [        S5      e[        U[        5      (       a  U R	                  U5      nO#[        U[
        5      (       a  UnO[        S5      eUb'  U R                  R                  U[        U5      45        g U R                  R                  US 45        g )Nr   zUnsupported update_field)	r  r   r   rv   r  r   r  r   r   )rI   update_fieldupdate_valuer   s       r%   	do_update PostgreSQLQueryBuilder.do_update  s    '' !EFFlC((,,\:Ee,, E !;<<#((//\8R0ST((//>r(   c                  > U R                   (       d  [        TU ]	  U5      $ [        U[        5      (       a  g U R
                  (       a  [        S5      eU R                  (       a?  U R                  (       a.  U R                  (       a  U =R                  U-  sl	        g Xl	        g U R                  (       a.  U R                  (       a  U =R                  U-  sl
        g Xl
        g [        S5      e)Nz"DO NOTHING doest not support WHEREz(Can not have fieldless ON CONFLICT WHERE)r  rE   wherer   r   r  r   r  r  r  r  )rI   	criterionrJ   s     r%   r  PostgreSQLQueryBuilder.where  s      7=++i00'' !EFF##(D(D1122i?25>2%%''((I5(+4( !KLLr(   c                :    U R                   R                  U5        g r*   )_usingr   r   s     r%   usingPostgreSQLQueryBuilder.using	  s    5!r(   c                   >^ U R                   (       a2  SR                  SR                  U4S jU R                    5       5      S9$ [        TU ]  " S0 TD6$ )NDISTINCT ON({distinct_on}) r   c              3  J   >#    U  H  oR                   " SS S0TD6v   M     g7fr   TNr    r   r   s     r%   r   7PostgreSQLQueryBuilder._distinct_sql.<locals>.<genexpr>  #     $kYjQU\\%LT%LV%LYj    #r  r    r  r   r   rE   _distinct_sqlrH   s    `r%   r  $PostgreSQLQueryBuilder._distinct_sql  R    077HH$kY]YjYj$kk 8   w$.v..r(   c                L    U R                   (       a  [        XR                   S9$ g Nr.   )r  r   rI   r   s     r%   r  *PostgreSQLQueryBuilder._conflict_field_str  s!    %7%788 r(   c                *   U R                   (       d6  [        U R                  5      S:X  a  U R                  (       d  g[	        S5      eU R                  (       a  U R                  (       d  [	        S5      eSnU R                  (       aG  U R                   Vs/ s H  o3R
                  " SSS0UD6PM     nnUSS	R                  U5      -   S
-   -  nU R                  (       a.  USR                  U R                  R
                  " SSS0UD6S9-  nU$ s  snf )Nr   r@   z"No handler defined for on conflictz,Can not have fieldless on conflict do updatez ON CONFLICTr   Tz (r   ) WHERE {where}r   r  r    )	r  r  r  r  r   r   r   r  r   )rI   r$   conflict_queryfr  s        r%   _on_conflict_sql'PostgreSQLQueryBuilder._on_conflict_sql  s    ++D4P4P0QUV0V++ !EFF''0H0H !OPP'##DHD\D\]D\qii:4:6:D\F]dTYYv%66<<N##.55D<T<T<\<\<ufj<unt<u5vvN ^s   Dc                R   U R                   (       a  SnU R                  (       aK  USSR                  U R                   Vs/ s H  n[        U5      R                  " S0 UD6PM      sn5       3-  nU R
                  (       a  US-  nU$ U R                  (       a  US-  nU$ SnU$ s  snf r   r   r   s       r%   r   &PostgreSQLQueryBuilder._for_update_sql+  r   r   c                \   U R                   (       a  g[        U R                  5      S:  Ga   / nU R                   H  u  p4U(       aC  UR                  SR	                  UR
                  " S0 UD6UR
                  " SSS0UD6S95        MO  UR                  SR	                  UR
                  " S0 UD6UR
                  " S0 UD6S95        M     SR	                  S	R                  U5      S
9nU R                  (       a/  USR	                  U R                  R
                  " SSSS.UD6S9-  nU$ g)Nz DO NOTHINGr   r   with_namespaceTr   z{field}=EXCLUDED.{value}z DO UPDATE SET {updates}r   r   r  )r   r  r  r@   r    )r  r  r  r   r   r   r   r  )rI   r$   r   r   r   
action_sqls         r%   _on_conflict_action_sql.PostgreSQLQueryBuilder._on_conflict_action_sql9  s+   '' --.2G $ < <NN)00"'--"9&"9"'--"Nt"Nv"N 1  NN299"'--"9&"9"'--"9&"9 :  != 4::388GCT:UJ11.55<<DDrdcgrkqr 6  
 r(   c                   U H  n[        U[        5      (       a  U R                  U5        M+  [        U[        5      (       a  U R	                  U5        MS  [        U[
        [        45      (       a/  UR                  (       a  [        S5      eU R                  U5        M  U R                  U R                  X R                  5      5        M     g )Nz0Aggregate functions are not allowed in returning)r   r   _return_fieldrv   _return_field_strr   r   is_aggregater   _return_otherwrap_constant_wrapper_cls)rI   termsr   s      r%   	returning PostgreSQLQueryBuilder.returningW  s    D$&&""4(D#&&&&t,D8-A"BCC$$()[\\""4(""4#5#5d<M<M#NO r(   c           	     B   UR                  5        GH  n[        U R                  U R                  U R                  /5      (       d  [        S5      eUR                  U R                  U R                  1;   n[        [        R                  R                  U R                   Vs/ s H  oDR                  R                  PM     sn5      5      n[        U R                  5      U-  n[        UR                  U-
  5      nU(       a  M  U(       d  M  [        S5      e   g s  snf )N%Returning can't be used in this queryz"You can't return from other tables)fields_anyr  _update_table_delete_fromr   r.   r   	itertoolschainfrom_iterable_joinsr  tables__fromr   )rI   r   r   table_is_insert_or_update_tablejjoin_tablesjoin_and_base_tablestable_not_base_or_joins           r%   _validate_returning_term/PostgreSQLQueryBuilder._validate_returning_terme  s    \\^E**D,>,>@Q@QRSS$%LMM.3kkd>P>PRVRdRd=e.e+ioo;;Z^ZeZe<fZeUV[[=P=PZe<fghK#&tzz?[#@ %)$,,9M*M%N"227M7M$%IJJ $
 =gs   "Dc                    U R                    Vs/ s H  n[        US5      (       a  M  UPM     snU l         SU l        g s  snf )Nr.   T)r  hasattrr  )rI   r  s     r%   _set_returns_for_star,PostgreSQLQueryBuilder._set_returns_for_starq  s5    48MMeMyQZ\cIdMe  fs   >>c                    U R                   (       a  g U R                  U5        [        U[        5      (       a  U R	                  5         U R
                  R                  U5        g r*   )r  r  r   r   r  r  r   r  s     r%   r  $PostgreSQLQueryBuilder._return_fieldu  sG    %%d+dD!!&&(T"r(   c                   US:X  a4  U R                  5         U R                  R                  [        5       5        g U R                  (       a#  U R                  [        XR                  S95        g U R                  (       a#  U R                  [        XR                  S95        g U R                  (       a&  U R                  [        XR                  S   S95        g [        S5      e)N*r  r   r  )r  r  r   r   r  r  r   r  r  r  r   r  s     r%   r  (PostgreSQLQueryBuilder._return_field_str  s    3;&&(MM  (uT1C1CDEuT1C1CDEuTA?@ !HIIr(   c                \    U R                  U5        U R                  R                  U5        g r*   )r  r  r   )rI   functions     r%   r  $PostgreSQLQueryBuilder._return_other  s"    %%h/X&r(   c                h   ^ SR                  SR                  U4S jU R                   5       5      S9$ )Nz RETURNING {returning}r   c              3  J   >#    U  H  oR                   " SS S0TD6v   M     g7fr  r   r   s     r%   r   8PostgreSQLQueryBuilder._returning_sql.<locals>.<genexpr>  s"     aS`4||FtFvFS`r  )r  )r   r   r  r   s    `r%   _returning_sql%PostgreSQLQueryBuilder._returning_sql  s4    '..hhaSWS`S`aa / 
 	
r(   c                *  > U R                  U5        [        TU ]  " X40 UD6nX@R                  " S0 UD6-  nX@R                  " S0 UD6-  nU R
                  (       a6  U R                  =(       a    U R                  US'   X@R                  " S0 UD6-  nU$ )Nr  r    )	r   rE   r   r  r  r  r  from_r  )rI   r   r   r$   r   rJ   s        r%   r   PostgreSQLQueryBuilder.get_sql  s    !!&)gojEfE,,6v6633=f===='+'9'9'HdjjF#$..888Kr(   )r  r   r   r   r   r  r  r  r  r  r  r  r  rL   r  r  
str | Termr4   rM   r   )r   r   r   r   r   r   r4   r   )r  r  r4   rM   r\   r*   )r  str | Fieldr  z
Any | Noner4   rM   )r  r   r4   rM   )r.   zSelectable | strr4   rM   r   )r   rv   r4   zField | Noner   r  r   r4   rM   )r   r   r4   rM   )r   r  r4   rM   )r  r   r4   rM   FF)r   r   r   r   r$   r   r4   rv   ) r6   r7   r8   r9   rO   r  rQ   rF   r   r   r  r   r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r   r<   rR   rS   s   @r%   r  r    s    I$$ 0 0 & & 
> 
> , ,
 ? ?  M M. " "/9&< P P
K!
#J'

 r(   r  c                  ,    \ rS rSrSr\SS j5       rSrg)RedshiftQueryi  z5
Defines a query class for use with Amazon Redshift.
c                8    [        SS[        R                  0UD6$ rB   )RedShiftQueryBuilderr   REDSHIFTr"   s     r%   r&   RedshiftQuery._builder  s    #HH,=,=HHHr(   r    N)r$   r   r4   r  rs  r    r(   r%   r  r    s     I Ir(   r  c                      \ rS rSr\rSrg)r  i  r    N)r6   r7   r8   r9   r  rQ   r<   r    r(   r%   r  r    s    Ir(   r  c                  ,    \ rS rSrSr\SS j5       rSrg)
MSSQLQueryi  :
Defines a query class for use with Microsoft SQL Server.
c                    [        S0 UD6$ r   )MSSQLQueryBuilderr"   s     r%   r&   MSSQLQuery._builder  ri   r(   r    N)r$   r   r4   r  rs  r    r(   r%   r  r    s     + +r(   r  c                  v   ^  \ rS rSr\rS	U 4S jjr\S
SS jj5       rSS jr	SU 4S jjr
SS jrSS jrSrU =r$ )r  i  c                p   > [         TU ]  " SS[        R                  0UD6  S U l        SU l        SU l        g r{   )rE   rF   r   MSSQL_top_top_with_ties_top_percentrH   s     r%   rF   MSSQLQueryBuilder.__init__  s3    ::6: $	$)"'r(   c                     [        U5      U l        U(       a#  S[        U5      s=::  a  S::  d  O  [        S5      eX l        X0l        g! [         a    [        S5      ef = f)z
Implements support for simple TOP clauses.
https://docs.microsoft.com/en-us/sql/t-sql/queries/top-transact-sql?view=sql-server-2017
zTOP value must be an integerr   d   z?TOP value must be between 0 and 100 when `percent` is specifiedN)rm  r   
ValueErrorr   r"  r!  )rI   r   percent	with_tiess       r%   topMSSQLQueryBuilder.top  s_    	AE
DI AU2s2 !eff")$-  	A !?@@	As   A	 	Ac                    U R                   c  U R                  (       a  XR                  5       -  nU R                   b  XR                  5       -  nU$ r*   )r_  rd  re  r`  r  s      r%   r  #MSSQLQueryBuilder._apply_pagination  sB    ;;"dll++--K;;"??,,Kr(   c                .   > SUS'   [         TU ]  " U0 UD6$ ry  r{  r|  s      r%   r   MSSQLQueryBuilder.get_sql  r~  r(   c                    SnU R                   (       a<  SU R                    S3nU R                  (       a  U S3nU R                  (       a  U S3nU$ )Nr@   zTOP (z) zPERCENT z
WITH TIES r   r"  r!  )rI   _top_statements     r%   _top_sqlMSSQLQueryBuilder._top_sql  sR     99$TYYKr2N  $2#38!<""$2#3:!>r(   c                   ^ SR                  U R                  5       U R                  (       a  SOSSR                  U4S jU R                   5       5      S9$ )NzSELECT {distinct}{top}{select}r   r@   r   c              3  L   >#    U  H  oR                   " SS S S.TD6v   M     g7fr   r   r   s     r%   r   0MSSQLQueryBuilder._select_sql.<locals>.<genexpr>  r   r   )r)  r   r   )r   r2  r   r   r   r   s    `r%   r   MSSQLQueryBuilder._select_sql  sH    /66$(NN[88m_c_l_lmm 7 
 	
r(   r0  rL   r  )r   z	str | intr'  r   r(  r   r4   rM   r  r  r   r   )r6   r7   r8   r9   r  rQ   rF   r   r)  r  r   r2  r   r<   rR   rS   s   @r%   r  r    s:    I( . .	0	
 
r(   r  c                      \ rS rSrSr\SS j5       r\SS j5       r\SS j5       r\SS j5       r	\SS j5       r
\SS j5       r\SS	 j5       rS
rg)ClickHouseQueryi  z7
Defines a query class for use with Yandex ClickHouse.
c                <    [        S[        R                  SSS.UD6$ )NFT)rC   wrap_set_operation_queries
as_keywordr    )ClickHouseQueryBuilderr   
CLICKHOUSEr"   s     r%   r&   ClickHouseQuery._builder  s*    % 
''EVZ
^d
 	
r(   c                4    [        5       R                  U5      $ r*   )ClickHouseDropQueryBuilderdrop_database)rI   databases     r%   rB  ClickHouseQuery.drop_database  s    )+99(CCr(   c                4    [        5       R                  U5      $ r*   )rA  r2   r   s     r%   r2   ClickHouseQuery.drop_table      )+66u==r(   c                4    [        5       R                  U5      $ r*   )rA  drop_dictionary)rI   
dictionarys     r%   rI  ClickHouseQuery.drop_dictionary  s    )+;;JGGr(   c                4    [        5       R                  U5      $ r*   )rA  
drop_quota)rI   quotas     r%   rM  ClickHouseQuery.drop_quota  rG  r(   c                4    [        5       R                  U5      $ r*   )rA  	drop_user)rI   users     r%   rQ  ClickHouseQuery.drop_user      )+55d;;r(   c                4    [        5       R                  U5      $ r*   )rA  	drop_view)rI   views     r%   rV  ClickHouseQuery.drop_view  rT  r(   r    N)r$   r   r4   r=  )rC  zDatabase | strr4   rA  )r.   zTable | strr4   rA  )rJ  rv   r4   rA  )rN  rv   r4   rA  )rR  rv   r4   rA  )rW  rv   r4   rA  )r6   r7   r8   r9   r:   r;   r&   rB  r2   rI  rM  rQ  rV  r<   r    r(   r%   r9  r9    s     
 

 D D > > H H > > < < < <r(   r9  c                  .  ^  \ rS rSr% \rS\S'   S\S'   SU 4S jjrSU 4S jjr\	SS j5       r
\	SSS	 jj5       r\SS
 j5       rSS jrSSS jjrSS jr\	SS j5       rSU 4S jjr\	SS j5       r\	SS j5       rSU 4S jjrSS jrS U 4S jjrSrU =r$ )!r=  i   z
list[Term]r  z"tuple[int, int, list[Term]] | None	_limit_byc                l   > [         TU ]  " S0 UD6  SU l        S U l        S U l        / U l        S U l        g )NFr    )rE   rF   _final_sample_sample_offsetr  rZ  rH   s     r%   rF   ClickHouseQueryBuilder.__init__&  s8    "6""r(   c                X   > [         TU ]  5       n[        U R                  5      Ul        U$ r*   )rE   r   r   rZ  r   s     r%   r   ClickHouseQueryBuilder.__copy__.  s&    !#/r(   c                    SU l         g r   )r\  r   s    r%   finalClickHouseQueryBuilder.final3  s	    r(   c                    Xl         X l        g r*   )r]  r^  )rI   samplerc  s      r%   rf  ClickHouseQueryBuilder.sample7  s    $r(   c                     g)NzALTER TABLEr    )r$   s    r%   _delete_sql"ClickHouseQueryBuilder._delete_sql<  s    r(   c                T    SR                  U R                  R                  " S0 UD6S9$ )NzALTER TABLE {table}r  r    )r   r  r   r   s     r%   _update_sql"ClickHouseQueryBuilder._update_sql@  s*    $++$2D2D2L2L2Vv2V+WWr(   c                  ^ SR                  U4S jU R                   5       5      nU R                  (       a  SU S3$ U/nU R                  SLa  UR	                  S5        U R
                  b  UR	                  SU R
                   35        U R                  b  UR	                  SU R                   35        S	R                  SR                  U5      S
9$ )Nr   c              3  L   >#    U  H  oR                   " SS S S.TD6v   M     g7f)T)r   r   Nr    r   )r   clauser$   s     r%   r   3ClickHouseQueryBuilder._from_sql.<locals>.<genexpr>D  s%     peo[annVdtVvVeor   r   z DELETEFFINALzSAMPLE zOFFSET z FROM {clauses})clauses)r   r  r  r\  r   r]  r^  r   )rI   r  r$   
selectablers  s     `  r%   	_from_sql ClickHouseQueryBuilder._from_sqlC  s    XXpeieoeopp
zl'**,;;e#NN7#<<#NNWT\\N34*NNWT%8%8$9:; ''0A'BBr(   c                h   ^ SR                  SR                  U4S jU R                   5       5      S9$ )Nz UPDATE {set}r   c              3     >#    U  H?  u  pS R                  UR                  " S0 [        TSS9D6UR                  " S0 TD6S9v   MA     g7f)r   F)r  r   Nr    )r   r   dictr   s      r%   r   2ClickHouseQueryBuilder._set_sql.<locals>.<genexpr>R  sV       %2LE "((--M$ve*LMUZUbUbUlekUl )  %2s   AA
)r   )r   r   _updatesr   s    `r%   _set_sqlClickHouseQueryBuilder._set_sqlP  s:    %%  %)MM	  & 
 	
r(   c                    U Hp  n[        U[        5      (       a&  U R                  R                  [	        U5      5        M>  [        U[
        5      (       d  MU  U R                  R                  U5        Mr     g r*   r  r  s      r%   r  "ClickHouseQueryBuilder.distinct_onZ  r  r(   c                   >^ U R                   (       a2  SR                  SR                  U4S jU R                    5       5      S9$ [        TU ]  " S0 TD6$ )Nr  r   c              3  J   >#    U  H  oR                   " SS S0TD6v   M     g7fr  r   r   s     r%   r   7ClickHouseQueryBuilder._distinct_sql.<locals>.<genexpr>e  r  r  r  r    r  rH   s    `r%   r  $ClickHouseQueryBuilder._distinct_sqlb  r  r(   c           	         USU Vs/ s H%  n[        U[        5      (       a  [        U5      OUPM'     sn4U l        g s  snf )Nr   r   rv   r   rZ  )rI   nbyr   s       r%   limit_byClickHouseQueryBuilder.limit_byi  s;    Q`b c`bW\E31G1GuU!R`b cd cs   ,=c           	         XU Vs/ s H%  n[        U[        5      (       a  [        U5      OUPM'     sn4U l        g s  snf r*   r  )rI   r  rc  r  r   s        r%   limit_offset_by&ClickHouseQueryBuilder.limit_offset_bym  s:    eg%heg\aj6L6LeElRW&Weg%hi%hs   ,<c                p   > U R                   (       a  XR                  " S0 UD6-  n[        TU ]  " U40 UD6$ r   )rZ  _limit_by_sqlrE   r  )rI   r   r$   rJ   s      r%   r  (ClickHouseQueryBuilder._apply_paginationq  s7     >>--777Kw(???r(   c                   ^ U R                   u  p#nSR                  U4S jU 5       5      nUS:w  a  SU SU SU S3$ SU SU S3$ )Nr   c              3  J   >#    U  H  oR                   " SS S0TD6v   M     g7fr  r   r   s     r%   r   7ClickHouseQueryBuilder._limit_by_sql.<locals>.<genexpr>{  s      M"$ll=d=f="r  r   z LIMIT z OFFSET z BY (r  )rZ  r   )rI   r$   r  rc  r  s    `   r%   r  $ClickHouseQueryBuilder._limit_by_sqly  s[    ..BXXM"MMQ;QCxxuRD::QCuRD**r(   c           	        > [         TU ]  X5      nU R                  (       aP  U R                  S   U R                  S   U R                  S    Vs/ s H  oDR                  X5      PM     sn4Ul        U$ s  snf )Nr         )rE   replace_tablerZ  )rI   current_table	new_tabler   columnrJ   s        r%   r  $ClickHouseQueryBuilder.replace_table  so    &}@>>q!q!NRnn]^N_`N_F%%m?N_` F
  as   A4)r  r\  rZ  r]  r^  r\   )r4   r=  r*   )rf  rm  rc  z
int | Noner4   rM   r   F)r  r   r$   r   r4   rv   r  )r  r  r4   rM   r  )r  Table | Noner  r  r4   r=  )r6   r7   r8   r9   r9  rQ   __annotations__rF   r   r   rc  rf  staticmethodri  rl  ru  r|  r  r  r  r  r  r  r  r<   rR   rS   s   @r%   r=  r=     s    I11
   % %  XC
 0 0/ e e j j@+ r(   r=  c                     ^  \ rS rSr\rU 4S jr\SU 4S jj5       r\S	U 4S jj5       r	\S
S j5       r
SU 4S jjrSrU =r$ )rA  i  c                J   > [         TU ]  [        R                  S9  S U l        g rW   )rE   rF   r   r>  _cluster_namerY   s    r%   rF   #ClickHouseDropQueryBuilder.__init__  s!    !4!45!r(   c                &   > [         TU ]  SU5        g )N
DICTIONARYrE   _set_target)rI   rJ  rJ   s     r%   rI  *ClickHouseDropQueryBuilder.drop_dictionary  s    L*5r(   c                &   > [         TU ]  SU5        g )NQUOTAr  )rI   rN  rJ   s     r%   rM  %ClickHouseDropQueryBuilder.drop_quota  s    GU+r(   c                H    U R                   (       a  [        S5      eXl         g )Nz5'DropQuery' object already has attribute cluster_name)r  r-  )rI   clusters     r%   
on_cluster%ClickHouseDropQueryBuilder.on_cluster  s     !XYY$r(   c                   > [         TU ]  " S0 UD6nU R                  S:w  a1  U R                  b$  US[	        U R                  [         TU ]  5      -   -  nU$ )Nr  z ON CLUSTER r    )rE   r   _drop_target_kindr  r   rN   )rI   r$   r>  rJ   s      r%   r   "ClickHouseDropQueryBuilder.get_sql  sS    )&)!!\1d6H6H6T^mD4F4FHZ&[[[Er(   )r  )rJ  rv   r4   rM   )rN  rv   r4   rM   )r  rv   r4   rM   r   )r6   r7   r8   r9   r9  rQ   rF   r   rI  rM  r  r   r<   rR   rS   s   @r%   rA  rA    sS    I" 6 6 , , % %
 r(   rA  c                  ,   ^  \ rS rSrSU 4S jjrSrU =r$ )SQLLiteValueWrapperi  c                   > [        U R                  [        5      (       a  U R                  (       a  S$ S$ [        TU ]  " S0 UD6$ )N10r    )r   r   r   rE   get_value_sqlrH   s     r%   r  !SQLLiteValueWrapper.get_value_sql  s8    djj$''**3-#-w$.v..r(   r    r   )r6   r7   r8   r9   r  r<   rR   rS   s   @r%   r  r    s    / /r(   r  c                  ,    \ rS rSrSr\SS j5       rSrg)SQLLiteQueryi  r  c                    [        S0 UD6$ r   )SQLLiteQueryBuilderr"   s     r%   r&   SQLLiteQuery._builder  r  r(   r    N)r$   r   r4   r  rs  r    r(   r%   r  r    s     - -r(   r  c                  T   ^  \ rS rSr\rSU 4S jjr\SS j5       rSU 4S jjr	Sr
U =r$ )	r  i  c                ^   > [         TU ]  " S[        R                  [        S.UD6  SU l        g )N)rC   wrapper_clsFr    )rE   rF   r   SQLLITEr  _insert_or_replacerH   s     r%   rF   SQLLiteQueryBuilder.__init__  s*    ]!1!1?R]V\]"'r(   c                >    U R                   " U6   SU l        SU l        g r   )_apply_terms_replacer  )rI   r  s     r%   insert_or_replace%SQLLiteQueryBuilder.insert_or_replace  s    5!"&r(   c                T   > U R                   (       a  SOSnU[        TU ]  " S0 UD6-   $ )Nz
INSERT OR r@   r    )r  rE   _replace_sql)rI   r$   prefixrJ   s      r%   r   SQLLiteQueryBuilder._replace_sql  s*    !%!8!8b,6v666r(   )r  r  rL   r  r   )r6   r7   r8   r9   r  rQ   rF   r   r  r  r<   rR   rS   s   @r%   r  r    s+    I( ' '
7 7r(   r  c                  l    \ rS rSrSr\S	S j5       r\S
S j5       r\SSS jj5       r\SS j5       r	Sr
g)	JiraQueryi  z*
Defines a query class for use with Jira.
c                    [        S0 UD6$ r   )JiraQueryBuilderr"   s     r%   r&   JiraQuery._builder  s    )&))r(   c                6    [        5       R                  " U0 UD6$ r*   )r  r  )r#   r   r$   s      r%   r  JiraQuery.where  s    !''888r(   c                    A[        5       $ )z-
Convenience method for creating a JiraTable
)	JiraTable)r#   
table_name_s      r%   r   JiraQuery.Table  s    
 {r(   c                h    A[        [        U5      5       Vs/ s H  n[        5       PM     sn$ s  snf )z:
Convenience method for creating many JiraTable instances
)ranger  r  )r#   namesr$   r  s       r%   TablesJiraQuery.Tables  s,    
 %*3u:%67%6	%6777s   /r    N)r4   r  )r4   r   )r@   )r  rv   r4   r  )r  ztuple[str, str] | strr$   r   r4   zlist[JiraTable])r6   r7   r8   r9   r:   r;   r&   r  r   r  r<   r    r(   r%   r  r    sW     * * 9 9   8 8r(   r  c                  v   ^  \ rS rSrSrSrSr\rSU 4S jjr	SSU 4S jjjr
SSS jjrSS jrSSS	 jjrS
rU =r$ )r  i  z>
Defines a main query builder class to produce JQL expression
r@   r?   c                   > [         TU ]  " SS[        R                  0UD6  [	        5       /U l        [        5       /U l        SU l        g )NrC   Tr    )	rE   rF   r   JIRAr  r  r   r   _select_starrH   s     r%   rF   JiraQueryBuilder.__init__  s:    99&9k]
 r(   c                B   > [         TU ]  " X40 UD6R                  5       $ r*   )rE   r   strip)rI   r   r   r$   rJ   s       r%   r   JiraQueryBuilder.get_sql  s     wz>v>DDFFr(   c                    g)z!
JQL doen't have from statements
r@   r    )rI   r  r  s      r%   ru  JiraQueryBuilder._from_sql       r(   c                    g)z#
JQL doen't have select statements
r@   r    )rI   r  s     r%   r   JiraQueryBuilder._select_sql  r  r(   c                @    U R                   R                  " SUSS.UD6$ )NT)
quote_charr   r    )_wheresr   )rI   r  r$   s      r%   
_where_sqlJiraQueryBuilder._where_sql	  s!    ||##SzDSFSSr(   )r  r  r   r\   r  )r   r   r   r   r4   rv   r  )r  r   r  r   r4   rv   )r  r   r4   rv   r*   r   )r6   r7   r8   r9   r:   rN   SECONDARY_QUOTE_CHARr  rQ   rF   r   ru  r   r  r<   rR   rS   s   @r%   r  r    sA     JI!G GT Tr(   r  c                  "    \ rS rSrSSS jjrSrg)JiraEmptyCriterioni  c                    ASR                  U R                  R                  " S0 UD6S9n[        X0R                  40 UD6$ )Nz{term} is EMPTYr   r    r   r   r   r   aliasrI   r   r$   r#  s       r%   r   JiraEmptyCriterion.get_sql  sE    &&"",V, ' 
  ZZ:6::r(   r    Nr  )r   r   r$   r   r4   rv   r6   r7   r8   r9   r   r<   r    r(   r%   r  r        ; ;r(   r  c                  "    \ rS rSrSSS jjrSrg)JiraNotEmptyCriterioni  c                    ASR                  U R                  R                  " S0 UD6S9n[        X0R                  40 UD6$ )Nz{term} is not EMPTYr  r    r  r  s       r%   r   JiraNotEmptyCriterion.get_sql  sE    #**"",V, + 
  ZZ:6::r(   r    Nr  )r   r   r4   rv   r  r    r(   r%   r  r    r  r(   r  c                  (    \ rS rSrSS jrSS jrSrg)	JiraFieldi  c                    [        U 5      $ r*   )r  r   s    r%   isemptyJiraField.isempty   s    !$''r(   c                    [        U 5      $ r*   )r  r   s    r%   notemptyJiraField.notempty#  s    $T**r(   r    N)r4   r  )r4   r  )r6   r7   r8   r9   r  r  r<   r    r(   r%   r  r    s    (+r(   r  c                  2   ^  \ rS rSrU 4S jrSS jrSrU =r$ )r  i'  c                $   > [         TU ]  S5        g )Nissues)rE   rF   rY   s    r%   rF   JiraTable.__init__(  s    "r(   c                    [        XS9$ r  )r  )rI   names     r%   r   JiraTable.field+  s    **r(   r    )r  rv   r4   r  )r6   r7   r8   r9   rF   r   r<   rR   rS   s   @r%   r  r  '  s    #+ +r(   r  )B
__future__r   r  rh  r   typingr   pypika.enumsr   pypika.queriesr   r   r	   r
   r   r   r   pypika.termsr   r   r   r   r   r   r   r   r   pypika.utilsr   r   r   r   r   r!   r+   r1   rd   rg   rk   rq   rt   r	  r  r  r  r\  ro  rq  r  r  r  r  r  r  r9  r=  rA  r  r  r  r  r  r  r  r  r  r    r(   r%   <module>r     s   "     !  
 
 
 R Q=U =$?L ?5"4 55 0 59 9,`
 `
F" "J0 , ?5 ?$, ()I 2 )IX" "J
 
,% ,; 00e 0B\ BJIE I< + +:
: :
z!<e !<Hi\ iX!1 </, /-5 -7, 7$8 8<T| TD; ;;. ;+ ++ +r(   