
    2iv                        S SK r S SKJr  S SKJrJrJr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  S SK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      r/ " S* S+\5      r0 " S, S-\5      r1 " S. S/\5      r2 " S0 S1\5      r3 " S2 S3\5      r4 " S4 S5\5      r5 " S6 S7\5      r6 " S8 S9\5      r7 " S: S;\5      r8 " S< S=\5      r9g)>    N)copy)AnyOptionalUnionTuple)Dialects)CreateQueryBuilderDatabaseDropQueryBuilder
SelectableTableQueryQueryBuilder)ArithmeticExpression	CriterionEmptyCriterionFieldFunctionStarTermValueWrapper)QueryExceptionbuilderformat_quotesc                       \ rS rSrSr\S\SS4S j5       r\S\\	\
4   SS4S	 j5       r\S\\	\
4   SS
4S j5       rSrg)SnowflakeQuery   z/
Defines a query class for use with Snowflake.
kwargsreturnSnowflakeQueryBuilderc                     [        S0 UD6$ N )r    clsr   s     I/home/james-whalen/.local/lib/python3.13/site-packages/pypika/dialects.py_builderSnowflakeQuery._builder   s    $.v..    tableSnowflakeCreateQueryBuilderc                 4    [        5       R                  U5      $ N)r+   create_tabler%   r*   s     r&   r.   SnowflakeQuery.create_table   s    *,99%@@r)   SnowflakeDropQueryBuilderc                 4    [        5       R                  U5      $ r-   )r1   
drop_tabler/   s     r&   r3   SnowflakeQuery.drop_table    s    (*55e<<r)   r#   N)__name__
__module____qualname____firstlineno____doc__classmethodr   r'   r   strr   r.   r3   __static_attributes__r#   r)   r&   r   r      s     / /(? / / AsEz!2 A7T A A =uS%Z0 =5P = =r)   r   c                   D   ^  \ rS rSrSrSrSr\rS\	SS4U 4S jjr
SrU =r$ )	r    %   N" r   r   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__+   s    >!3!3>v>r)   r#   )r5   r6   r7   r8   
QUOTE_CHARALIAS_QUOTE_CHARQUERY_ALIAS_QUOTE_CHARr   	QUERY_CLSr   rF   r<   __classcell__rJ   s   @r&   r    r    %   s1    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!34r)   r#   r   N
r5   r6   r7   r8   rL   r   rO   rF   r<   rP   rQ   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   7   Nc                 <   > [         TU ]  [        R                  S9  g rU   rD   rW   s    r&   rF   "SnowflakeDropQueryBuilder.__init__;   rY   r)   r#   rZ   r[   rQ   s   @r&   r1   r1   7   r\   r)   r1   c                       \ rS rSrSr\S\SS4S j5       r\S\SS4S	 j5       r	\S
\
\\4   SS4S j5       r\S
\
\\4   SS4S j5       rSrg)
MySQLQuery?   z+
Defines a query class for use with MySQL.
r   r   MySQLQueryBuilderc                     [        S0 UD6$ r"   )rd   r$   s     r&   r'   MySQLQuery._builderD        *6**r)   fpMySQLLoadQueryBuilderc                 4    [        5       R                  U5      $ r-   )ri   loadr%   rh   s     r&   rk   MySQLQuery.loadH   s    $&++B//r)   r*   MySQLCreateQueryBuilderc                 4    [        5       R                  U5      $ r-   )rn   r.   r/   s     r&   r.   MySQLQuery.create_tableL   s    &(55e<<r)   MySQLDropQueryBuilderc                 4    [        5       R                  U5      $ r-   )rq   r3   r/   s     r&   r3   MySQLQuery.drop_tableP   s    $&11%88r)   r#   N)r5   r6   r7   r8   r9   r:   r   r'   r;   rk   r   r   r.   r3   r<   r#   r)   r&   rb   rb   ?   s     + +(; + + 0c 05 0 0 =sEz!2 =7P = = 9uS%Z0 95L 9 9r)   rb   c            
       2  ^  \ rS rSrSr\rS\SS4U 4S jjrSU 4S jjr	\
 SS\S	\S
\\S4   SS4S jj5       r\
S\\\4   S\SS 4S j5       r\
SS j5       rS\S\4U 4S jjrS\4S jrS\S\4S jrS\4S jr\
S\SS 4S j5       rS\S\4S jrSrU =r$ )rd   U   `r   r   Nc                    > [         TU ]  " S[        R                  SS.UD6  / U l        SU l        / U l        SU l        SU l        [        5       U l
        g )NF)rC   wrap_set_operation_queriesr#   )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__Y   sP    \E\U[\"$"'"'',$!er)   c                    > [         TU ]  5       n[        U R                  5      Ul        [        U R                  5      Ul        U$ r-   )rE   __copy__r   rz   r{   rI   newonerJ   s     r&   r   MySQLQueryBuilder.__copy__c   s;    !#$()@)@$A!$()@)@$A!r)   nowaitskip_lockedof.r   c                 J    SU l         X l        Xl        [        U5      U l        g NT_for_updater~   r}   r   r   rI   r   r   r   s       r&   
for_updateMySQLQueryBuilder.for_updatei   $      '2$"(!"gr)   fieldvaluec                     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   rz   appendr   )rI   r   r   s      r&   on_duplicate_key_update)MySQLQueryBuilder.on_duplicate_key_updater   sL    "" !EFF$.ue$<$<e%&&|E/B'CDr)   c                 J    U R                   (       a  [        S5      eSU l        g )Nr   T)rz   r   r{   rI   s    r&   on_duplicate_key_ignore)MySQLQueryBuilder.on_duplicate_key_ignorez   s    "" !EFF"&r)   c                    > U R                  U5        [        [        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   rd   get_sqlrz   _on_duplicate_key_update_sqlr{   _on_duplicate_key_ignore_sql)rI   r   querystringrJ   s      r&   r   MySQLQueryBuilder.get_sql   sr    !!&)-t<FvF&&@@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   rz   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)   )rz   r   r}   r   r~   r{   r|   )r   rd   FFr#   )r5   r6   r7   r8   rL   rb   rO   r   rF   r   r   bool
TypedTupler;   r   r   r   r   r   r   r   r   r   r   r   r<   rP   rQ   s   @r&   rd   rd   U   s+   JI$ $ $ Z\&&15&CMcSVhCW&	& & EU5#:-> Es EOb E E ' '  3 
S 
S 
*c * &c &&9 & &	
C 	
C 	
 	
r)   rd   c                       \ rS rSr\rSS jr\S\SS 4S j5       r	\S\
\\4   SS 4S j5       rS	\S
\S\4S jrS
\S\4S jrS
\S\4S jrS
\S\4S jrS\4S jrSrg)ri      r   Nc                      S U l         S U l        g r-   )
_load_file_into_tabler   s    r&   rF   MySQLLoadQueryBuilder.__init__   s    r)   rh   c                     Xl         g r-   )r   rI   rh   s     r&   rk   MySQLLoadQueryBuilder.load       r)   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)   argsr   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   r   r   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   rZ   )r5   r6   r7   r8   rb   rO   rF   r   r;   rk   r   r   r   r   r   r   r   r   r   r<   r#   r)   r&   ri   ri      s    I  s 6   O%U
+ O0G O OS C C Es Es EM M M+S +S + r)   ri   c                       \ rS rSrSrSrg)rn      rv   r#   Nr5   r6   r7   r8   rL   r<   r#   r)   r&   rn   rn          Jr)   rn   c                       \ rS rSrSrSrg)rq      rv   r#   Nr   r#   r)   r&   rq   rq      r   r)   rq   c                   n    \ rS rSrSr\SS j5       r\S\SS4S j5       r\S\	\\
4   SS	4S
 j5       rSrg)VerticaQuery   z-
Defines a query class for use with Vertica.
r   c                     [        S0 UD6$ r"   )VerticaQueryBuilderr$   s     r&   r'   VerticaQuery._builder       ",V,,r)   rh   VerticaCopyQueryBuilderc                 4    [        5       R                  U5      $ r-   )r  	from_filerl   s     r&   r	  VerticaQuery.from_file   s    &(22266r)   r*   VerticaCreateQueryBuilderc                 4    [        5       R                  U5      $ r-   )r  r.   r/   s     r&   r.   VerticaQuery.create_table   s    (*77>>r)   r#   N)r   r  )r5   r6   r7   r8   r9   r:   r'   r;   r	  r   r   r.   r<   r#   r)   r&   r  r     sj     - - 73 7#< 7 7 ?sEz!2 ?7R ? ?r)   r  c                   p   ^  \ rS rSr\rS\SS4U 4S jjr\S\	SS 4S j5       r
S\S\S\	4U 4S	 jjrS
rU =r$ )r     r   r   Nc                 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)   labelc                     Xl         g r-   r  )rI   r  s     r&   hintVerticaQueryBuilder.hint   s    
r)   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  )r5   r6   r7   r8   r  rO   r   rF   r   r;   r  r   r<   rP   rQ   s   @r&   r  r     s]    I   # "7  S C C  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\4S jrS\4U 4S jjrS\
S\4S	 jrS\4S
 jrSrU =r$ )r  i  r   c                 X   > [         TU ]  [        R                  S9  SU l        SU l        g )NrV   F)rE   rF   r   r  _local_preserve_rowsrW   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)   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&   r2  ,VerticaCreateQueryBuilder._table_options_sql*  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}))r*  queryr#   )r   r3  
_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&   r3  ,VerticaCreateQueryBuilder._preserve_rows_sql5  s    -1-@-@)HbHr)   )r   r!  rZ   )r   r  )r5   r6   r7   r8   r  rO   rF   r   r'  r*  r   r;   r/  r2  r9  r3  r<   rP   rQ   s   @r&   r  r    s{    I$
   # #
# 
# 
c 

s 
s 
IC I Ir)   r  c                       \ rS rSr\rSS jr\S\SS 4S j5       r	\S\
\\4   SS 4S j5       rS	\S
\S\4S jrS
\S\4S jrS
\S\4S jrS
\S\4S jrS\4S jrSrg)r  i9  r   Nc                      S U l         S U l        g r-   _copy_table
_from_filer   s    r&   rF    VerticaCopyQueryBuilder.__init__<  s    r)   rh   c                     Xl         g r-   )rA  r   s     r&   r	  !VerticaCopyQueryBuilder.from_file@  r   r)   r*   c                 \    [        U[        5      (       a  Xl        g [        U5      U l        g r-   )r   r   r@  r   s     r&   copy_VerticaCopyQueryBuilder.copy_D  r   r)   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   )r@  rA  _copy_table_sql_from_file_sqlr   r   s       r&   r   VerticaCopyQueryBuilder.get_sqlH  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   r@  r   r   s     r&   rI  'VerticaCopyQueryBuilder._copy_table_sqlQ  s'    !!$"2"2":":"DV"DEEr)   c                 8    SR                  U R                  5      $ )Nz FROM LOCAL '{}')r   rA  r   s     r&   rJ  &VerticaCopyQueryBuilder._from_file_sqlT  s    !((99r)   c                     g)Nz  PARSER fcsvparser(header=false)r#   r   s     r&   r   $VerticaCopyQueryBuilder._options_sqlW  s    1r)   c                 "    U R                  5       $ r-   r   r   s    r&   r   VerticaCopyQueryBuilder.__str__Z  r   r)   r?  rZ   )r5   r6   r7   r8   r  rO   rF   r   r;   r	  r   r   rF  r   r   rI  rJ  r   r   r<   r#   r)   r&   r  r  9  s    I C $=   O5e, O1J O OS C C F F F:s :s :2S 2S 2 r)   r  c                   4    \ rS rSrSr\S\SS4S j5       rSrg)	OracleQueryi^  z,
Defines a query class for use with Oracle.
r   r   OracleQueryBuilderc                     [        S0 UD6$ r"   )rV  r$   s     r&   r'   OracleQuery._builderc  s    !+F++r)   r#   N	r5   r6   r7   r8   r9   r:   r   r'   r<   r#   r)   r&   rU  rU  ^  s*     , ,(< , ,r)   rU  c                   X   ^  \ rS rSrSr\rS\SS4U 4S jjrS\S\S\	4U 4S jjr
SrU =r$ )	rV  ih  Nr   r   c                 F   > [         TU ]  " SS[        R                  0UD6  g rB   )rE   rF   r   ORACLErH   s     r&   rF   OracleQueryBuilder.__init__l  s    ;;F;r)   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_sqlo  #     #(w///r)   r#   )r5   r6   r7   r8   rL   rU  rO   r   rF   r;   r   r<   rP   rQ   s   @r&   rV  rV  h  s?    JI< < <0S 0C 0C 0 0r)   rV  c                   ,    \ rS rSrSr\SS j5       rSrg)PostgreSQLQueryiv  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r   rh  )r5   r6   r7   r8   r9   r:   r'   r<   r#   r)   r&   rf  rf  v  s     0 0r)   rf  c            
       x  ^  \ rS rSrSr\rS\SS4U 4S jjrS-U 4S jjr	\
S\\\4   SS 4S	 j5       r\
 S.S
\S\S\\S4   SS4S jj5       r\
S\\\4   SS 4S j5       r\
S-S j5       r\
 S/S\\\4   S\\   SS 4S jj5       r\
S\SS 4U 4S jj5       r\
S\\\4   SS4S j5       rS\S\4U 4S jjrS\S\\   4S jrS\S\4S jrS\4S jrS\S\4S jr\
S \SS 4S! j5       r S\SS4S" jr!S0S# jr"S\\\4   SS4S$ jr#S\\\4   SS4S% jr$S&\SS4S' jr%S\S\4S( jr&S1S)\S*\S\S\4U 4S+ jjjr'S,r(U =r)$ )2rh  i  r?   r   r   Nc                    > [         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 NrC   Fr#   )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   ro  rt  r   s     r&   r   PostgreSQLQueryBuilder.__copy__  s8    !#t}}-)-d.J.J)K&r)   fieldsc                     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;   rw  r   r   r   )rI   r{  r   s      r&   distinct_on"PostgreSQLQueryBuilder.distinct_on  sR    E%%%!!((u6E4((!!((/	 r)   r   r   r   .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)   target_fieldsc                 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   rq  r   r;   rr  r   _conflict_field_strr   )rI   r  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)lenrt  r   rs  r   s    r&   
do_nothing!PostgreSQLQueryBuilder.do_nothing  s)    t++,q0 !EFF'+$r)   update_fieldupdate_valuec                 ^   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)	rs  r   r   r;   r  r   rt  r   r   )rI   r  r  r   s       r&   	do_update PostgreSQLQueryBuilder.do_update  s     '' !EFFlC((,,\:Ee,, E !;<<#((//\8R0ST((//>r)   	criterionc                   > 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)rq  rE   wherer   r   rs  r   rr  rt  rv  ru  )rI   r  rJ   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)   r*   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$ )Nz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>  s#     $kYjQU\\%LT%LV%LYj    #)r}  r#   )rw  r   r   rE   _distinct_sqlrH   s    `r&   r  $PostgreSQLQueryBuilder._distinct_sql  sR    077HH$kY]YjYj$kk 8   w$.v..r)   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#   )	rs  r  rt  rr  r   r   r   ru  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#   )rs  r  rt  r   r   r   r   rv  )rI   r   r   r   r   
action_sqls         r&   _on_conflict_action_sql.PostgreSQLQueryBuilder._on_conflict_action_sql  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)   termsc                    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_fieldr;   _return_field_strr   r   is_aggregater   _return_otherwrap_constant_wrapper_cls)rI   r  r   s      r&   	returning PostgreSQLQueryBuilder.returning9  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_termG  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)ro  hasattrrp  )rI   r  s     r&   _set_returns_for_star,PostgreSQLQueryBuilder._set_returns_for_starS  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-   )rp  r  r   r   r  ro  r   r  s     r&   r  $PostgreSQLQueryBuilder._return_fieldW  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  ro  r   r   r  r  r   r  r  r  r   r  s     r&   r  (PostgreSQLQueryBuilder._return_field_strc  s    3;&&(MM  (uT1C1CDEuT1C1CDEuTA?@ !HIIr)   functionc                 \    U R                  U5        U R                  R                  U5        g r-   )r  ro  r   )rI   r  s     r&   r  $PostgreSQLQueryBuilder._return_otherr  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>x  s"     aS`4||FtFvFS`r  )r  )r   r   ro  r   s    `r&   _returning_sql%PostgreSQLQueryBuilder._returning_sqlv  s4    '..hhaSWS`S`aa / 
 	
r)   r   r   c                 2  > U R                  U5        [        [        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   rh  r   r  r  ro  r  from_r  )rI   r   r   r   r   rJ   s        r&   r   PostgreSQLQueryBuilder.get_sql{  s    !!&)2DA*aZ`a,,6v6633=f===='+'9'9'HdjjF#$..888Kr)   )rw  r   r}   r   r~   rq  rs  rv  rt  rr  ru  rp  ro  rj  r   r-   rZ   FF)*r5   r6   r7   r8   rM   rf  rO   r   rF   r   r   r   r;   r   r}  r   r   r   r  r  r   r   r  r   r  r   r  r  r  r  r   r  r  r  r  r  r  r  r  r   r<   rP   rQ   s   @r&   rh  rh    s   I$ $ $$ 05d#3 08P 0 0 Z\&&15&CMcSVhCW&	& & 
>%T	*: 
>?W 
> 
> , ,
 MQ?!#u*-?=Ec]?	!? ?$ My M-E M M. "5S1 "n " "/c /c /9 9 9  &3   < P P(@ P P
KT 
Kd 
K!
#%U
"3 
# 
#JeCJ&7 JD J'd 't '
s 
s 

$ $ RU Z]  r)   rh  c                   4    \ rS rSrSr\S\SS4S j5       rSrg)	RedshiftQueryi  z5
Defines a query class for use with Amazon Redshift.
r   r   RedShiftQueryBuilderc                 8    [        SS[        R                  0UD6$ rB   )r  r   REDSHIFTr$   s     r&   r'   RedshiftQuery._builder  s    #HH,=,=HHHr)   r#   NrY  r#   r)   r&   r  r    s.     I I(> I Ir)   r  c                       \ rS rSr\rSrg)r  i  r#   N)r5   r6   r7   r8   r  rO   r<   r#   r)   r&   r  r    s    Ir)   r  c                   4    \ rS rSrSr\S\SS4S j5       rSrg)	
MSSQLQueryi  :
Defines a query class for use with Microsoft SQL Server.
r   r   MSSQLQueryBuilderc                     [        S0 UD6$ r"   )r  r$   s     r&   r'   MSSQLQuery._builder  rg   r)   r#   NrY  r#   r)   r&   r  r    s*     + +(; + +r)   r  c            
          ^  \ rS rSr\rS\SS4U 4S jjr\SS\	\
\4   S\S\SS 4S	 jj5       r\S
\SS 4S j5       rS\
4S jrS\
4S jrS\
S\
4S jrS\S\S\
4U 4S jjrS\
4S jrS\S\
4S jrSrU =r$ )r  i  r   r   Nc                 p   > [         TU ]  " SS[        R                  0UD6  S U l        SU l        SU l        g rm  )rE   rF   r   MSSQL_top_top_with_ties_top_percentrH   s     r&   rF   MSSQLQueryBuilder.__init__  s3    ::6:&*	$)"'r)   r   percent	with_tiesc                      [        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)intr  
ValueErrorr   r  r  )rI   r   r  r  s       r&   topMSSQLQueryBuilder.top  s_    	AE
DI AU2s2 !eff")$-  	A !?@@	As   A	 	Alimitc                     Xl         g r-   )_limit)rI   r  s     r&   
fetch_nextMSSQLQueryBuilder.fetch_next  s	     r)   c                 F    SR                  U R                  =(       d    SS9$ )Nz OFFSET {offset} ROWSr   )offset)r   _offsetr   s    r&   _offset_sqlMSSQLQueryBuilder._offset_sql  s    &--T\\5FQ-GGr)   c                 4    SR                  U R                  S9$ )Nz FETCH NEXT {limit} ROWS ONLY)r  )r   r  r   s    r&   
_limit_sqlMSSQLQueryBuilder._limit_sql  s    .55DKK5HHr)   r   c                     U R                   c  U R                  (       a  XR                  5       -  nU R                   b  XR                  5       -  nU$ r-   )r  r  r	  r  )rI   r   s     r&   _apply_pagination#MSSQLQueryBuilder._apply_pagination  sB    ;;"dll++--K;;"??,,Kr)   r   c                 .   > SUS'   [         TU ]  " U0 UD6$ r_  ra  rb  s      r&   r   MSSQLQueryBuilder.get_sql  rd  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   r  r   r   r   r   s    `r&   r   MSSQLQueryBuilder._select_sql  sH    /66$(NN[88m_c_l_lmm 7 
 	
r)   )r  r  r  r  r  )r5   r6   r7   r8   r  rO   r   rF   r   r   r;   r  r   r  r  r	  r  r  r   r  r   r<   rP   rQ   s   @r&   r  r    s    I( ( ( .sCx .4 .D .]p . .  (;  HS HIC I	S 	S 	0S 0C 0C 0	# 	
C 
C 
 
r)   r  c                       \ rS rSrSr\S\SS4S j5       r\S\\	\
4   SS4S	 j5       r\S
\\\
4   SS4S j5       r\S\
SS4S j5       r\S\
SS4S j5       r\S\
SS4S j5       r\S\
SS4S j5       rSrg)ClickHouseQueryi  z7
Defines a query class for use with Yandex ClickHouse.
r   r   ClickHouseQueryBuilderc                 <    [        S[        R                  SSS.UD6$ )NFT)rC   rx   
as_keywordr#   )r  r   
CLICKHOUSEr$   s     r&   r'   ClickHouseQuery._builder  s*    % 
''EVZ
^d
 	
r)   databaseClickHouseDropQueryBuilderc                 4    [        5       R                  U5      $ r-   )r#  drop_database)rI   r"  s     r&   r%  ClickHouseQuery.drop_database  s    )+99(CCr)   r*   c                 4    [        5       R                  U5      $ r-   )r#  r3   r   s     r&   r3   ClickHouseQuery.drop_table      )+66u==r)   
dictionaryc                 4    [        5       R                  U5      $ r-   )r#  drop_dictionary)rI   r*  s     r&   r,  ClickHouseQuery.drop_dictionary  s    )+;;JGGr)   quotac                 4    [        5       R                  U5      $ r-   )r#  
drop_quota)rI   r.  s     r&   r0  ClickHouseQuery.drop_quota   r)  r)   userc                 4    [        5       R                  U5      $ r-   )r#  	drop_user)rI   r2  s     r&   r4  ClickHouseQuery.drop_user      )+55d;;r)   viewc                 4    [        5       R                  U5      $ r-   )r#  	drop_view)rI   r7  s     r&   r9  ClickHouseQuery.drop_view  r6  r)   r#   N)r5   r6   r7   r8   r9   r:   r   r'   r   r
   r;   r%  r   r3   r,  r0  r4  r9  r<   r#   r)   r&   r  r    s    
 
(@ 
 

 DeHcM&: D?[ D D >eSj 1 >6R > > H# H2N H H > >(D > > <c <&B < < <c <&B < <r)   r  c                   r    \ rS rSr\r\S\S\4S j5       r	S\S\4S jr
SS\S\S\4S jjrS\S\4S jrS	rg
)r  i  r   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)   r  c                    ^ SR                  U4S jU R                   5       5      nU R                  (       a  SR                  US9$ SR                  U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>  s%     peo[annVdtVvVeor   z {selectable} DELETE)
selectablez FROM {selectable})r   r  r  r   )rI   r  r   rF  s     ` r&   	_from_sql ClickHouseQueryBuilder._from_sql  sO    XXpeieoeopp
)00J0GG#**j*AAr)   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>  sV       %2LE "((--M$ve*LMUZUbUbUlekUl )  %2s   AA
)r   )r   r   _updatesr   s    `r&   _set_sqlClickHouseQueryBuilder._set_sql  s:    %%  %)MM	  & 
 	
r)   r#   N)F)r5   r6   r7   r8   r  rO   staticmethodr   r;   r=  r@  r   rG  rN  r<   r#   r)   r&   r  r    sn    Ic c  XC XC XB B B B
 
 
r)   r  c                      ^  \ rS rSr\rU 4S jr\S\SS 4U 4S jj5       r	\S\SS 4U 4S jj5       r
\S\SS 4S	 j5       rS
\S\4U 4S jjrSrU =r$ )r#  i(  c                 J   > [         TU ]  [        R                  S9  S U l        g rU   )rE   rF   r   r   _cluster_namerW   s    r&   rF   #ClickHouseDropQueryBuilder.__init__+  s!    !4!45!r)   r*  r   c                 &   > [         TU ]  SU5        g )N
DICTIONARYrE   _set_target)rI   r*  rJ   s     r&   r,  *ClickHouseDropQueryBuilder.drop_dictionary/  s    L*5r)   r.  c                 &   > [         TU ]  SU5        g )NQUOTArW  )rI   r.  rJ   s     r&   r0  %ClickHouseDropQueryBuilder.drop_quota3  s    GU+r)   clusterc                 H    U R                   (       a  [        S5      eXl         g )Nz5'DropQuery' object already has attribute cluster_name)rS  r&  )rI   r]  s     r&   
on_cluster%ClickHouseDropQueryBuilder.on_cluster7  s     !XYY$r)   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$ )NrV  z ON CLUSTER r#   )rE   r   _drop_target_kindrS  r   rL   )rI   r   r7  rJ   s      r&   r   "ClickHouseDropQueryBuilder.get_sql=  sS    )&)!!\1d6H6H6T^mD4F4FHZ&[[[Er)   )rS  )r5   r6   r7   r8   r  rO   rF   r   r;   r,  r0  r_  r   r   r<   rP   rQ   s   @r&   r#  r#  (  s    I" 6# 62N 6 6 , ,(D , , %# %*F % %
   r)   r#  c                   4   ^  \ rS rSrS\S\4U 4S jjrSrU =r$ )SQLLiteValueWrapperiF  r   r   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&   ri  !SQLLiteValueWrapper.get_value_sqlG  s8    djj$''**3-#-w$.v..r)   r#   )	r5   r6   r7   r8   r   r;   ri  r<   rP   rQ   s   @r&   re  re  F  s    /c /c / /r)   re  c                   4    \ rS rSrSr\S\SS4S j5       rSrg)	SQLLiteQueryiM  r  r   r   SQLLiteQueryBuilderc                     [        S0 UD6$ r"   )rm  r$   s     r&   r'   SQLLiteQuery._builderR  r  r)   r#   NrY  r#   r)   r&   rl  rl  M  s*     - -(= - -r)   rl  c                   l   ^  \ rS rSr\rS\SS4U 4S jjr\S\SS 4S j5       r	S\S\
4U 4S jjrS	rU =r$ )
rm  iW  r   r   Nc                 ^   > [         TU ]  " S[        R                  [        S.UD6  SU l        g )N)rC   wrapper_clsFr#   )rE   rF   r   SQLLITEre  _insert_or_replacerH   s     r&   rF   SQLLiteQueryBuilder.__init__Z  s*    ]!1!1?R]V\]"'r)   r  c                 >    U R                   " U6   SU l        SU l        g r   )_apply_terms_replacert  )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#   )rt  rE   _replace_sql)rI   r   prefixrJ   s      r&   r|   SQLLiteQueryBuilder._replace_sqld  s*    !%!8!8b,6v666r)   )rt  rx  )r5   r6   r7   r8   rl  rO   r   rF   r   ry  r;   r|  r<   rP   rQ   s   @r&   rm  rm  W  sV    I( ( ( ' '0E ' '
7S 7S 7 7r)   rm  ):r  r   typingr   r   r   r   r   pypika.enumsr   pypika.queriesr	   r
   r   r   r   r   r   pypika.termsr   r   r   r   r   r   r   r   pypika.utilsr   r   r   r   r    r+   r1   rb   rd   ri   rn   rq   r  r  r  r  rU  rV  rf  rh  r  r  r  r  r  r  r#  re  rl  rm  r#   r)   r&   <module>r     s     < < !   t s s ? ?=U =$?L ?5"4 55 0 59 9,b
 b
J" "J0 , ?5 ?$, ()I 2 )IX" "J,% ,0 00e 0F\ FRIE I< + +E
 E
P!<e !<H
\ 
6!1 </, /-5 -7, 7r)   