
    gv                        d dl Z d dlmZ d dlmZmZmZmZ d dlm	Z	 d dl
mZmZmZmZmZmZmZ d dlmZmZmZmZmZmZmZmZ d dlmZmZmZ  G d d	e      Z G d
 de      Z  G d de      Z! G d de      Z" G d de      Z# G d de      Z$ G d d      Z% G d de      Z& G d de      Z' G d de      Z( G d de      Z) G d de      Z* G d  d!      Z+ G d" d#e      Z, G d$ d%e      Z- G d& d'e      Z. G d( d)e      Z/ G d* d+e      Z0 G d, d-e      Z1 G d. d/e      Z2 G d0 d1e      Z3 G d2 d3e      Z4 G d4 d5e      Z5 G d6 d7e      Z6 G d8 d9e      Z7 G d: d;e      Z8 G d< d=e      Z9y)>    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    e Zd ZdZededdfd       Zedeee	f   ddfd       Z
edeee	f   dd	fd
       Zy)SnowflakeQueryz7
    Defines a query class for use with Snowflake.
    kwargsreturnSnowflakeQueryBuilderc                     t        di |S N )r   clsr   s     D/var/www/openai/venv/lib/python3.12/site-packages/pypika/dialects.py_builderzSnowflakeQuery._builder   s    $.v..    tableSnowflakeCreateQueryBuilderc                 4    t               j                  |      S N)r)   create_tabler$   r(   s     r%   r,   zSnowflakeQuery.create_table   s    *,99%@@r'   SnowflakeDropQueryBuilderc                 4    t               j                  |      S r+   )r.   
drop_tabler-   s     r%   r0   zSnowflakeQuery.drop_table    s    (*55e<<r'   N)__name__
__module____qualname____doc__classmethodr   r&   r   strr   r,   r0   r"   r'   r%   r   r      s     / /(? / / AsEz!2 A7T A A =uS%Z0 =5P = =r'   r   c                   8     e Zd ZdZdZdZeZdeddf fdZ	 xZ
S )r   N" r   r   c                 D    t        |   ddt        j                  i| y Ndialectr"   super__init__r   	SNOWFLAKEselfr   	__class__s     r%   r?   zSnowflakeQueryBuilder.__init__+   s    >!3!3>v>r'   )r1   r2   r3   
QUOTE_CHARALIAS_QUOTE_CHARQUERY_ALIAS_QUOTE_CHARr   	QUERY_CLSr   r?   __classcell__rC   s   @r%   r   r   %   s1    JI? ? ? ?r'   r   c                   (     e Zd ZdZeZd fdZ xZS )r)   Nc                 B    t         |   t        j                         y Nr<   r=   rB   rC   s    r%   r?   z$SnowflakeCreateQueryBuilder.__init__3       !3!34r'   r   Nr1   r2   r3   rD   r   rG   r?   rH   rI   s   @r%   r)   r)   /       JI5 5r'   r)   c                   (     e Zd ZdZeZd fdZ xZS )r.   Nc                 B    t         |   t        j                         y rL   r=   rN   s    r%   r?   z"SnowflakeDropQueryBuilder.__init__;   rO   r'   rP   rQ   rI   s   @r%   r.   r.   7   rR   r'   r.   c                       e Zd ZdZededdfd       Zededdfd       Zed	e	ee
f   dd
fd       Zed	e	ee
f   ddfd       Zy)
MySQLQueryz3
    Defines a query class for use with MySQL.
    r   r   MySQLQueryBuilderc                     t        di |S r!   )rW   r#   s     r%   r&   zMySQLQuery._builderD        *6**r'   fpMySQLLoadQueryBuilderc                 4    t               j                  |      S r+   )r[   loadr$   rZ   s     r%   r]   zMySQLQuery.loadH   s    $&++B//r'   r(   MySQLCreateQueryBuilderc                 4    t               j                  |      S r+   )r_   r,   r-   s     r%   r,   zMySQLQuery.create_tableL   s    &(55e<<r'   MySQLDropQueryBuilderc                 4    t               j                  |      S r+   )ra   r0   r-   s     r%   r0   zMySQLQuery.drop_tableP   s    $&11%88r'   N)r1   r2   r3   r4   r5   r   r&   r6   r]   r   r   r,   r0   r"   r'   r%   rV   rV   ?   s     + +(; + + 0c 05 0 0 =sEz!2 =7P = = 9uS%Z0 95L 9 9r'   rV   c            
           e Zd ZdZeZdeddf fdZd fdZe		 dde
de
d	eed
f   ddfd       Ze	deeef   dedd fd       Ze	dd       Zdedef fdZdefdZdedefdZdefdZe	dedd fd       ZdedefdZ xZS )rW   `r   r   Nc                     t        |   dt        j                  dd| g | _        d| _        g | _        d| _        d| _        t               | _
        y )NF)r<   wrap_set_operation_queriesr"   )r>   r?   r   MYSQL_duplicate_updates_ignore_duplicates
_modifiers_for_update_nowait_for_update_skip_lockedset_for_update_ofrA   s     r%   r?   zMySQLQueryBuilder.__init__Y   sP    \E\U[\"$"'"'',$!er'   c                     t         |          }t        | j                        |_        t        | j                        |_        |S r+   )r>   __copy__r   rh   ri   rB   newonerC   s     r%   rp   zMySQLQueryBuilder.__copy__c   s;    !#$()@)@$A!$()@)@$A!r'   nowaitskip_lockedof.r   c                 N    d| _         || _        || _        t        |      | _        y NT_for_updaterl   rk   rm   rn   rB   rs   rt   ru   s       r%   
for_updatezMySQLQueryBuilder.for_updatei   (      '2$"(!"gr'   fieldvaluec                     | j                   rt        d      t        |t              st        |      n|}| j                  j                  |t        |      f       y )N"Can not have two conflict handlers)ri   r   
isinstancer   rh   appendr   )rB   r}   r~   s      r%   on_duplicate_key_updatez)MySQLQueryBuilder.on_duplicate_key_updater   sI    "" !EFF$.ue$<e%&&|E/B'CDr'   c                 @    | j                   rt        d      d| _        y )Nr   T)rh   r   ri   rB   s    r%   on_duplicate_key_ignorez)MySQLQueryBuilder.on_duplicate_key_ignorez   s    "" !EFF"&r'   c                     | j                  |       t        t        |   di |}|rB| j                  r| | j
                  di |z  }|S | j                  r|| j                         z  }|S r!   )_set_kwargs_defaultsr>   rW   get_sqlrh   _on_duplicate_key_update_sqlri   _on_duplicate_key_ignore_sql)rB   r   querystringrC   s      r%   r   zMySQLQueryBuilder.get_sql   sy    !!&)-t<FvF&&@t@@J6JJ  ((t@@BBr'   c                 $   | j                   r|d}| j                  rH|ddj                  | j                  D cg c]  } t        |      j                  di | c}       z  }| j
                  r|dz  }|S | j                  r|dz  }|S d}|S c c}w Nz FOR UPDATEz OF , z NOWAITz SKIP LOCKEDr9   r"   ry   rn   joinr   r   rk   rl   rB   r   r{   items       r%   _for_update_sqlz!MySQLQueryBuilder._for_update_sql       &J""TYYZ^ZmZm/nZmRV0Cd0C0C0Mf0MZm/n%o$pqq
&&i'
  --n,
  J 0o   "Bc                 l    dj                  dj                  fd| j                  D                    S )Nz" ON DUPLICATE KEY UPDATE {updates},c           	   3      K   | ]:  \  }}d j                   |j                  di  |j                  di        < yw){field}={value}r}   r~   Nr"   )formatr   .0r}   r~   r   s      r%   	<genexpr>zAMySQLQueryBuilder._on_duplicate_key_update_sql.<locals>.<genexpr>   sJ      $;LE5 "((}u}}/Fv/FmemmNe^dNe(f$;s   A Aupdates)r   r   rh   rB   r   s    `r%   r   z.MySQLQueryBuilder._on_duplicate_key_update_sql   s:    3::HH $($;$;  ; 
 	
r'   c                      y)Nz ON DUPLICATE KEY IGNOREr"   r   s    r%   r   z.MySQLQueryBuilder._on_duplicate_key_ignore_sql   s    )r'   c                 :    | j                   j                  |       y)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)rj   r   )rB   r~   s     r%   modifierzMySQLQueryBuilder.modifier   s     	u%r'   c                     dj                  | j                  rdnd| j                  r*dj                  dj                  | j                              nddj                  fd| j                  D                    S )	z
        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 r9   z{}  r   c              3   H   K   | ]  } |j                   dd d d  ywT)
with_aliassubqueryNr"   r   r   termr   s     r%   r   z0MySQLQueryBuilder._select_sql.<locals>.<genexpr>   *     m_lW[LDLLRD4R6R_l   ")distinctr   select)r   	_distinctrj   r   _selectsr   s    `r%   _select_sqlzMySQLQueryBuilder._select_sql   sc    
 5;;$(NN[@DU\\#((4??";<UW88m_c_l_lmm < 
 	
r'   )r   rW   FFr"   )r1   r2   r3   rD   rV   rG   r   r?   rp   r   bool
TypedTupler6   r{   r   r   r   r   r   r   r   r   r   r   rH   rI   s   @r%   rW   rW   U   s&   JI$ $ $ Z\&&15&CMcSVhCW&	& & EU5#:-> Es EOb E E ' '  3 
S 
S 
*c * &c &&9 & &	
C 	
C 	
r'   rW   c                       e Zd ZeZddZededd fd       Zede	ee
f   dd fd       Zded	edefd
Zd	edefdZd	edefdZd	edefdZdefdZy)r[   r   Nc                      d | _         d | _        y r+   )
_load_file_into_tabler   s    r%   r?   zMySQLLoadQueryBuilder.__init__   s    r'   rZ   c                     || _         y r+   )r   rB   rZ   s     r%   r]   zMySQLLoadQueryBuilder.load   	    r'   r(   c                 T    t        |t              r|| _        y t        |      | _        y r+   )r   r   r   rB   r(   s     r%   intozMySQLLoadQueryBuilder.into       $.ue$<5%,r'   argsr   c                     d}| j                   rK| j                  r?| | j                  di |z  }| | j                  di |z  }| | j                  di |z  }|S Nr9   r"   )r   r   _load_file_sql_into_table_sql_options_sqlrB   r   r   r   s       r%   r   zMySQLLoadQueryBuilder.get_sql   sm    ??t//.4..888K/4//9&99K,4,,6v66Kr'   c                 8    dj                  | j                        S )NzLOAD DATA LOCAL INFILE '{}')r   r   r   s     r%   r   z$MySQLLoadQueryBuilder._load_file_sql   s    ,33DOODDr'   c                 X    dj                   | j                  j                  di |      S )Nz INTO TABLE `{}`r"   )r   r   r   r   s     r%   r   z%MySQLLoadQueryBuilder._into_table_sql   s*    !(()A)9)9)A)A)KF)KLLr'   c                      y)Nz FIELDS TERMINATED BY ','r"   r   s     r%   r   z"MySQLLoadQueryBuilder._options_sql   s    *r'   c                 "    | j                         S r+   r   r   s    r%   __str__zMySQLLoadQueryBuilder.__str__       ||~r'   rP   )r1   r2   r3   rV   rG   r?   r   r6   r]   r   r   r   r   r   r   r   r   r   r"   r'   r%   r[   r[      s    I  s 6   O%U
+ O0G O OS C C Es Es EM M M+S +S + r'   r[   c                       e Zd ZdZy)r_   rd   Nr1   r2   r3   rD   r"   r'   r%   r_   r_          Jr'   r_   c                       e Zd ZdZy)ra   rd   Nr   r"   r'   r%   ra   ra      r   r'   ra   c                   `    e Zd ZdZedd       Zededdfd       Zedeee	f   ddfd	       Z
y
)VerticaQueryz5
    Defines a query class for use with Vertica.
    r   c                     t        di |S r!   )VerticaQueryBuilderr#   s     r%   r&   zVerticaQuery._builder       ",V,,r'   rZ   VerticaCopyQueryBuilderc                 4    t               j                  |      S r+   )r   	from_filer^   s     r%   r   zVerticaQuery.from_file   s    &(22266r'   r(   VerticaCreateQueryBuilderc                 4    t               j                  |      S r+   )r   r,   r-   s     r%   r,   zVerticaQuery.create_table   s    (*77>>r'   N)r   r   )r1   r2   r3   r4   r5   r&   r6   r   r   r   r,   r"   r'   r%   r   r      sj     - - 73 7#< 7 7 ?sEz!2 ?7R ? ?r'   r   c                   ^     e Zd ZeZdeddf fdZededd fd       Z	dededef fdZ
 xZS )	r   r   r   Nc                 R    t        |   ddt        j                  i| d | _        y r;   )r>   r?   r   VERTICA_hintrA   s     r%   r?   zVerticaQueryBuilder.__init__   s%    <!1!1<V<
r'   labelc                     || _         y r+   )r   )rB   r   s     r%   hintzVerticaQueryBuilder.hint   s	    
r'   r   c                     t        |   |i |}| j                  4dj                  |d d dj	                  | j                        |dd  g      }|S )Nr9      z/*+label({hint})*/)r      )r>   r   r   r   r   )rB   r   r   sqlrC   s       r%   r   zVerticaQueryBuilder.get_sql  s]    got.v.::!''3r7$8$?$?TZZ$?$PRUVWVXRYZ[C
r'   )r1   r2   r3   r   rG   r   r?   r   r6   r   r   rH   rI   s   @r%   r   r      s]    I   # "7  S C C  r'   r   c                        e Zd ZeZd
 fdZedd       Zedd       Zde	de
fdZde
f fdZde	de
fdZde
fd	Z xZS )r   r   c                 ^    t         |   t        j                         d| _        d| _        y )NrM   F)r>   r?   r   r   _local_preserve_rowsrN   s    r%   r?   z"VerticaCreateQueryBuilder.__init__  s(    !1!12#r'   c                 @    | j                   st        d      d| _        y Nz)'Query' object has no attribute temporaryT)
_temporaryAttributeErrorr   r   s    r%   localzVerticaCreateQueryBuilder.local  s     !LMMr'   c                 @    | j                   st        d      d| _        y r   )r   r   r   r   s    r%   preserve_rowsz'VerticaCreateQueryBuilder.preserve_rows  s     !LMM"r'   r   c           	          dj                  | j                  rdnd| j                  rdnd | j                  j                  di |      S )Nz&CREATE {local}{temporary}TABLE {table}zLOCAL r9   z
TEMPORARY )r   	temporaryr(   r"   )r   r   r   _create_tabler   r   s     r%   _create_table_sqlz+VerticaCreateQueryBuilder._create_table_sql#  sI    7>>"kk(r&*ool2,$$$,,6v6 ? 
 	
r'   c                 L    t        |   di |}|| j                         z  }|S r!   )r>   _table_options_sql_preserve_rows_sql)rB   r   table_optionsrC   s      r%   r   z,VerticaCreateQueryBuilder._table_options_sql*  s.    2<V<0022r'   c                 x    dj                  | j                          | j                  j                  di |      S )Nz{preserve_rows} AS ({query}))r   queryr"   )r   r   
_as_selectr   r   s     r%   _as_select_sqlz(VerticaCreateQueryBuilder._as_select_sql/  s=    -44113)$//))3F3 5 
 	
r'   c                 "    | j                   rdS dS )Nz ON COMMIT PRESERVE ROWSr9   )r   r   s    r%   r   z,VerticaCreateQueryBuilder._preserve_rows_sql5  s    -1-@-@)HbHr'   rP   )r   r   )r1   r2   r3   r   rG   r?   r   r   r   r   r6   r   r   r  r   rH   rI   s   @r%   r   r     su    I$
   # #
# 
# 
c 

s 
s 
IC Ir'   r   c                       e Zd ZeZddZededd fd       Zede	ee
f   dd fd       Zded	edefd
Zd	edefdZd	edefdZd	edefdZdefdZy)r   r   Nc                      d | _         d | _        y r+   )_copy_table
_from_filer   s    r%   r?   z VerticaCopyQueryBuilder.__init__<  s    r'   rZ   c                     || _         y r+   )r  r   s     r%   r   z!VerticaCopyQueryBuilder.from_file@  r   r'   r(   c                 T    t        |t              r|| _        y t        |      | _        y r+   )r   r   r  r   s     r%   copy_zVerticaCopyQueryBuilder.copy_D  r   r'   r   r   c                     d}| j                   rK| j                  r?| | j                  di |z  }| | j                  di |z  }| | j                  di |z  }|S r   )r  r  _copy_table_sql_from_file_sqlr   r   s       r%   r   zVerticaCopyQueryBuilder.get_sqlH  sm    /4//9&99K.4..888K,4,,6v66Kr'   c                 X    dj                   | j                  j                  di |      S )Nz	COPY "{}"r"   )r   r  r   r   s     r%   r  z'VerticaCopyQueryBuilder._copy_table_sqlQ  s*    !!":$"2"2":":"DV"DEEr'   c                 8    dj                  | j                        S )Nz FROM LOCAL '{}')r   r  r   s     r%   r  z&VerticaCopyQueryBuilder._from_file_sqlT  s    !((99r'   c                      y)Nz  PARSER fcsvparser(header=false)r"   r   s     r%   r   z$VerticaCopyQueryBuilder._options_sqlW  s    1r'   c                 "    | j                         S r+   r   r   s    r%   r   zVerticaCopyQueryBuilder.__str__Z  r   r'   rP   )r1   r2   r3   r   rG   r?   r   r6   r   r   r   r	  r   r   r  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                   *    e Zd ZdZededdfd       Zy)OracleQueryz4
    Defines a query class for use with Oracle.
    r   r   OracleQueryBuilderc                     t        di |S r!   )r  r#   s     r%   r&   zOracleQuery._builderc  s    !+F++r'   Nr1   r2   r3   r4   r5   r   r&   r"   r'   r%   r  r  ^  s*     , ,(< , ,r'   r  c                   H     e Zd ZdZeZdeddf fdZdededef fdZ	 xZ
S )r  Nr   r   c                 D    t        |   ddt        j                  i| y r;   )r>   r?   r   ORACLErA   s     r%   r?   zOracleQueryBuilder.__init__l  s    ;;F;r'   r   c                 ,    d|d<   t        |   |i |S NFgroupby_aliasr>   r   rB   r   r   rC   s      r%   r   zOracleQueryBuilder.get_sqlo  #     #(w///r'   )r1   r2   r3   rD   r  rG   r   r?   r6   r   rH   rI   s   @r%   r  r  h  s?    JI< < <0S 0C 0C 0 0r'   r  c                   "    e Zd ZdZedd       Zy)PostgreSQLQueryz8
    Defines a query class for use with PostgreSQL.
    c                     t        di |S r!   )PostgreSQLQueryBuilderr#   s     r%   r&   zPostgreSQLQuery._builder{  s    %///r'   Nr   r"  )r1   r2   r3   r4   r5   r&   r"   r'   r%   r   r   v  s     0 0r'   r   c            
       4    e Zd ZdZeZdeddf fdZd+ fdZe	de
eef   dd fd       Ze		 d,d	ed
edeedf   ddfd       Ze	de
eef   dd fd       Ze	d+d       Ze		 d-de
eef   dee   dd fd       Ze	dedd f fd       Ze	de
eef   ddfd       Zdedef fdZdedee   fdZdedefdZdefdZdedefdZe	dedd fd        Zdeddfd!Z d.d"Z!de
eef   ddfd#Z"de
eef   ddfd$Z#d%eddfd&Z$dedefd'Z%d/d(ed)ededef fd*Z& xZ'S )0r"  r8   r   r   Nc                     t        |   ddt        j                  i| g | _        d| _        d| _        g | _        d| _        g | _	        d | _
        d | _        g | _        d| _        d| _        t               | _        y Nr<   Fr"   )r>   r?   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_onrk   rl   rm   rn   rA   s     r%   r?   zPostgreSQLQueryBuilder.__init__  s    ?!4!4??!!#% ',$')$#' -1*"'',$!er'   c                     t         |          }t        | j                        |_        t        | j                        |_        |S r+   )r>   rp   r   r(  r-  rq   s     r%   rp   zPostgreSQLQueryBuilder.__copy__  s8    !#t}}-)-d.J.J)K&r'   fieldsc                     |D ]c  }t        |t              r%| j                  j                  t	        |             8t        |t
              sI| j                  j                  |       e y r+   )r   r6   r0  r   r   r   )rB   r2  r}   s      r%   distinct_onz"PostgreSQLQueryBuilder.distinct_on  sL    E%%!!((u6E4(!!((/	 r'   rs   rt   ru   .r   c                 N    d| _         || _        || _        t        |      | _        y rw   rx   rz   s       r%   r{   z!PostgreSQLQueryBuilder.for_update  r|   r'   target_fieldsc                    | j                   st        d      d| _        |D ]i  }t        |t              r+| j
                  j                  | j                  |             >t        |t              sO| j
                  j                  |       k y )Nz(On conflict only applies to insert queryT)	_insert_tabler   r*  r   r6   r+  r   _conflict_field_strr   )rB   r6  target_fields      r%   on_conflictz"PostgreSQLQueryBuilder.on_conflict  sp    !! !KLL )L,,((//0H0H0VWL$/((//=	 *r'   c                 X    t        | j                        dkD  rt        d      d| _        y )Nr   r   T)lenr-  r   r,  r   s    r%   
do_nothingz!PostgreSQLQueryBuilder.do_nothing  s)    t++,q0 !EFF'+$r'   update_fieldupdate_valuec                 >   | j                   rt        d      t        |t              r| j	                  |      }nt        |t
              r|}nt        d      |'| j                  j                  |t        |      f       y | j                  j                  |d f       y )Nr   zUnsupported update_field)	r,  r   r   r6   r9  r   r-  r   r   )rB   r?  r@  r}   s       r%   	do_updatez PostgreSQLQueryBuilder.do_update  s     '' !EFFlC(,,\:Ee, E !;<<#((//\8R0ST((//>r'   	criterionc                    | j                   st        | 	  |      S t        |t              ry | j
                  rt        d      | j                  r6| j                  r*| j                  r| xj                  |z  c_	        y || _	        y | j                  r*| j                  r| xj                  |z  c_
        y || _
        y t        d      )Nz"DO NOTHING doest not support WHEREz(Can not have fieldless ON CONFLICT WHERE)r*  r>   wherer   r   r,  r   r+  r-  r/  r.  )rB   rC  rC   s     r%   rE  zPostgreSQLQueryBuilder.where  s      7=++i0'' !EFF##(D(D1122i?25>2%%''((I5(+4( !KLLr'   r(   c                 :    | j                   j                  |       y r+   )_usingr   r   s     r%   usingzPostgreSQLQueryBuilder.using  s    5!r'   c                     | j                   r4dj                  dj                  fd| j                   D                    S t        |   di S )NzDISTINCT ON({distinct_on}) r   c              3   F   K   | ]  } |j                   dd di  ywr   TNr"   r   r   s     r%   r   z7PostgreSQLQueryBuilder._distinct_sql.<locals>.<genexpr>  s(     $kYjQU\T\\%LT%LV%LYj   !)r4  r"   )r0  r   r   r>   _distinct_sqlrA   s    `r%   rM  z$PostgreSQLQueryBuilder._distinct_sql  sR    077HH$kY]YjYj$kk 8   w$.v..r'   r   c                 J    | j                   rt        || j                         S y )Nr(   )r8  r   rB   r   s     r%   r9  z*PostgreSQLQueryBuilder._conflict_field_str  s#    T%7%788 r'   c                    | j                   s0t        | j                        dk(  r| j                  syt	        d      | j                  r| j                  st	        d      d}| j                  rE| j                  D cg c]  } |j
                  dddi| }}|dd	j                  |      z   d
z   z  }| j                  r1|dj                   | j                  j
                  dddi|      z  }|S c c}w )Nr   r9   z"No handler defined for on conflictz,Can not have fieldless on conflict do updatez ON CONFLICTr   Tz (r   ) WHERE {where}r   rE  r"   )	r,  r=  r-  r+  r   r   r   r.  r   )rB   r   conflict_queryfr2  s        r%   _on_conflict_sqlz'PostgreSQLQueryBuilder._on_conflict_sql  s    ++D4P4P0QUV0V++ !EFF''0H0H !OPP'##DHD\D\]D\qiaii:4:6:D\F]dTYYv%66<<N##.55<\D<T<T<\<\<ufj<unt<u5vvN ^s   <C2c                 $   | j                   r|d}| j                  rH|ddj                  | j                  D cg c]  } t        |      j                  di | c}       z  }| j
                  r|dz  }|S | j                  r|dz  }|S d}|S c c}w r   r   r   s       r%   r   z&PostgreSQLQueryBuilder._for_update_sql  r   r   c                 P   | j                   ryt        | j                        dkD  r g }| j                  D ]  \  }}|rE|j                  dj	                   |j
                  di | |j
                  dddi|             M|j                  dj	                   |j
                  di | |j
                  di |              dj	                  d	j                  |      
      }| j                  r2|dj	                   | j                  j
                  dddd|      z  }|S y)Nz DO NOTHINGr   r   with_namespaceTr   z{field}=EXCLUDED.{value}z DO UPDATE SET {updates}r   r   rS  )r   rZ  rT  r9   r"   )r,  r=  r-  r   r   r   r   r/  )rB   r   r   r}   r~   
action_sqls         r%   _on_conflict_action_sqlz.PostgreSQLQueryBuilder._on_conflict_action_sql  s7   '' --.2G $ < <u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Drdcgrkqr 6  
 r'   termsc                 n   |D ]  }t        |t              r| j                  |       %t        |t              r| j	                  |       Gt        |t
        t        f      r)|j                  rt        d      | j                  |       | j                  | j                  || j                                y )Nz0Aggregate functions are not allowed in returning)r   r   _return_fieldr6   _return_field_strr   r   is_aggregater   _return_otherwrap_constant_wrapper_cls)rB   r]  r   s      r%   	returningz PostgreSQLQueryBuilder.returning9  s    D$&""4(D#&&&t,D8-A"BC$$()[\\""4(""4#5#5dD<M<M#NO r'   c           	         |j                         D ]  }t        | j                  | j                  | j                  g      st        d      |j                  | j                  | j                  hv }t        t        j                  j                  | j                  D cg c]  }|j                  j                   c}            }t        | j                        |z  }t        |j                  |z
        }|r|st        d       y c c}w )N%Returning can't be used in this queryz"You can't return from other tables)fields_anyr8  _update_table_delete_fromr   r(   rm   	itertoolschainfrom_iterable_joinsrC  tables__fromr   )rB   r   r}   table_is_insert_or_update_tablejjoin_tablesjoin_and_base_tablestable_not_base_or_joins           r%   _validate_returning_termz/PostgreSQLQueryBuilder._validate_returning_termG  s    \\^E**D,>,>@Q@QRS$%LMM.3kkd>P>PRVRdRd=e.e+ioo;;Z^ZeZe<fZeUVQ[[=P=PZe<fghK#&tzz?[#@ %)$,,9M*M%N"27M$%IJJ $
 =gs   Dc                 t    | j                   D cg c]  }t        |d      r| c}| _         d| _        y c c}w )Nr(   T)r(  hasattrr)  )rB   re  s     r%   _set_returns_for_starz,PostgreSQLQueryBuilder._set_returns_for_starS  s5    48MMeMyQZ\cIdMe  fs   55c                     | j                   ry | j                  |       t        |t              r| j	                          | j
                  j                  |       y r+   )r)  rw  r   r   rz  r(  r   rP  s     r%   r_  z$PostgreSQLQueryBuilder._return_fieldW  sD    %%d+dD!&&(T"r'   c                    |dk(  r4| j                          | j                  j                  t                      y | j                  r'| j                  t        || j                               y | j                  r'| j                  t        || j                               y | j                  r*| j                  t        || j                  d                y t        d      )N*rO  r   rg  )rz  r(  r   r   r8  r_  r   rj  rk  rq  r   rP  s     r%   r`  z(PostgreSQLQueryBuilder._return_field_strc  s    3;&&(MM  (uT1C1CDEuT1C1CDEuTA?@ !HIIr'   functionc                 \    | j                  |       | j                  j                  |       y r+   )rw  r(  r   )rB   r~  s     r%   rb  z$PostgreSQLQueryBuilder._return_otherr  s"    %%h/X&r'   c                 l    dj                  dj                  fd| j                  D                    S )Nz RETURNING {returning}r   c              3   F   K   | ]  } |j                   dd di  ywrK  r   r   s     r%   r   z8PostgreSQLQueryBuilder._returning_sql.<locals>.<genexpr>x  s'     aS`4|t||FtFvFS`rL  )re  )r   r   r(  r   s    `r%   _returning_sqlz%PostgreSQLQueryBuilder._returning_sqlv  s4    '..hhaSWS`S`aa / 
 	
r'   r   r   c                 $   | j                  |       t        t        |   ||fi |}| | j                  di |z  }| | j
                  di |z  }| j                  r2| j                  xr | j                  |d<   | | j                  di |z  }|S )NrZ  r"   )
r   r>   r"  r   rW  r\  r(  rj  from_r  )rB   r   r   r   r   rC   s        r%   r   zPostgreSQLQueryBuilder.get_sql{  s    !!&)2DA*haZ`a,t,,6v663t33=f===='+'9'9'HdjjF#$.4..888Kr'   r#  r   r+   rP   FF)(r1   r2   r3   rE   r   rG   r   r?   rp   r   r   r6   r   r4  r   r   r{   r;  r>  r   r   rB  r   rE  r   rH  rM  r9  rW  r   r\  re  rw  rz  r_  r`  rb  r  r   rH   rI   s   @r%   r"  r"    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'   r"  c                   *    e Zd ZdZededdfd       Zy)RedshiftQueryz=
    Defines a query class for use with Amazon Redshift.
    r   r   RedShiftQueryBuilderc                 8    t        ddt        j                  i|S r;   )r  r   REDSHIFTr#   s     r%   r&   zRedshiftQuery._builder  s    #HH,=,=HHHr'   Nr  r"   r'   r%   r  r    s.     I I(> I Ir'   r  c                       e Zd ZeZy)r  N)r1   r2   r3   r  rG   r"   r'   r%   r  r    s    Ir'   r  c                   *    e Zd ZdZededdfd       Zy)
MSSQLQueryB
    Defines a query class for use with Microsoft SQL Server.
    r   r   MSSQLQueryBuilderc                     t        di |S r!   )r  r#   s     r%   r&   zMSSQLQuery._builder  rY   r'   Nr  r"   r'   r%   r  r    s*     + +(; + +r'   r  c            
            e Zd ZeZdeddf fdZeddee	e
f   dededd fd       Zed	e
dd fd
       Zde	fdZde	fdZde	de	fdZdedede	f fdZde	fdZdede	fdZ xZS )r  r   r   Nc                 n    t        |   ddt        j                  i| d | _        d| _        d| _        y r&  )r>   r?   r   MSSQL_top_top_with_ties_top_percentrA   s     r%   r?   zMSSQLQueryBuilder.__init__  s3    ::6:&*	$)"'r'   r~   percent	with_tiesc                     	 t        |      | _        |r+dt        |      cxk  rdk  st        d       t        d      || _        || _        y# t        $ r t        d      w xY w)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  )rB   r~   r  r  s       r%   topzMSSQLQueryBuilder.top  st    	AE
DI AU2s2 !eff 3 !eff")$-  	A !?@@	As   A A#limitc                     || _         y r+   )_limit)rB   r  s     r%   
fetch_nextzMSSQLQueryBuilder.fetch_next  s     r'   c                 B    dj                  | j                  xs d      S )Nz OFFSET {offset} ROWSr   )offset)r   _offsetr   s    r%   _offset_sqlzMSSQLQueryBuilder._offset_sql  s    &--T\\5FQ-GGr'   c                 :    dj                  | j                        S )Nz FETCH NEXT {limit} ROWS ONLY)r  )r   r  r   s    r%   
_limit_sqlzMSSQLQueryBuilder._limit_sql  s    .55DKK5HHr'   r   c                     | j                   | j                  r|| j                         z  }| j                   || j                         z  }|S r+   )r  r  r  r  )rB   r   s     r%   _apply_paginationz#MSSQLQueryBuilder._apply_pagination  sF    ;;"dll4++--K;;"4??,,Kr'   r   c                 ,    d|d<   t        |   |i |S r  r  r  s      r%   r   zMSSQLQueryBuilder.get_sql  r  r'   c                     d}| j                   r2d| j                    d}| j                  r| d}| j                  r| d}|S )Nr9   zTOP (z) zPERCENT z
WITH TIES )r  r  r  )rB   _top_statements     r%   _top_sqlzMSSQLQueryBuilder._top_sql  sR     99$TYYKr2N  $2#38!<""$2#3:!>r'   c                     dj                  | j                         | j                  rdnddj                  fd| j                  D                    S )NzSELECT {distinct}{top}{select}r   r9   r   c              3   H   K   | ]  } |j                   dd d d  ywr   r   r   s     r%   r   z0MSSQLQueryBuilder._select_sql.<locals>.<genexpr>  r   r   )r  r   r   )r   r  r   r   r   r   s    `r%   r   zMSSQLQueryBuilder._select_sql  sH    /66$(NN[88m_c_l_lmm 7 
 	
r'   r  )r1   r2   r3   r  rG   r   r?   r   r   r6   r  r   r  r  r  r  r  r   r  r   rH   rI   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                       e Zd ZdZededdfd       Zedeee	f   ddfd       Z
ed	eee	f   ddfd
       Zede	ddfd       Zede	ddfd       Zede	ddfd       Zede	ddfd       Zy)ClickHouseQueryz?
    Defines a query class for use with Yandex ClickHouse.
    r   r   ClickHouseQueryBuilderc                 <    t        dt        j                  ddd|S )NFT)r<   rf   
as_keywordr"   )r  r   
CLICKHOUSEr#   s     r%   r&   zClickHouseQuery._builder  s*    % 
''EVZ
^d
 	
r'   databaseClickHouseDropQueryBuilderc                 4    t               j                  |      S r+   )r  drop_database)rB   r  s     r%   r  zClickHouseQuery.drop_database  s    )+99(CCr'   r(   c                 4    t               j                  |      S r+   )r  r0   r   s     r%   r0   zClickHouseQuery.drop_table      )+66u==r'   
dictionaryc                 4    t               j                  |      S r+   )r  drop_dictionary)rB   r  s     r%   r  zClickHouseQuery.drop_dictionary  s    )+;;JGGr'   quotac                 4    t               j                  |      S r+   )r  
drop_quota)rB   r  s     r%   r  zClickHouseQuery.drop_quota   r  r'   userc                 4    t               j                  |      S r+   )r  	drop_user)rB   r  s     r%   r  zClickHouseQuery.drop_user      )+55d;;r'   viewc                 4    t               j                  |      S r+   )r  	drop_view)rB   r  s     r%   r  zClickHouseQuery.drop_view  r  r'   N)r1   r2   r3   r4   r5   r   r&   r   r
   r6   r  r   r0   r  r  r  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                   `    e Zd ZeZededefd       ZdedefdZ	d	de
dedefdZdedefdZy)
r  r   r   c                       y)NzALTER TABLEr"   )r   s    r%   _delete_sqlz"ClickHouseQueryBuilder._delete_sql  s    r'   c                 Z    dj                   | j                  j                  di |      S )NzALTER TABLE {table}rO  r"   )r   rj  r   r   s     r%   _update_sqlz"ClickHouseQueryBuilder._update_sql  s-    $++2L$2D2D2L2L2Vv2V+WWr'   rZ  c                     dj                  fd| j                  D              }| j                  rdj                  |      S dj                  |      S )Nr   c              3   H   K   | ]  } |j                   dd d d  yw)T)r   r   Nr"   r   )r   clauser   s     r%   r   z3ClickHouseQueryBuilder._from_sql.<locals>.<genexpr>  s*     peo[anfnnVdtVvVeor   z {selectable} DELETE)
selectablez FROM {selectable})r   rq  rk  r   )rB   rZ  r   r  s     ` r%   	_from_sqlz ClickHouseQueryBuilder._from_sql  sO    XXpeieoeopp
)00J0GG#**j*AAr'   c                 l    dj                  dj                  fd| j                  D                    S )Nz UPDATE {set}r   c              3      K   | ]E  \  }}d j                   |j                  di t        d       |j                  di        G yw)r   F)rZ  r   Nr"   )r   r   dictr   s      r%   r   z2ClickHouseQueryBuilder._set_sql.<locals>.<genexpr>  s^       %2LE5 "(('%--M$ve*LMUbUZUbUbUlekUl )  %2s   AA)rm   )r   r   _updatesr   s    `r%   _set_sqlzClickHouseQueryBuilder._set_sql  s:    %%  %)MM	  & 
 	
r'   N)F)r1   r2   r3   r  rG   staticmethodr   r6   r  r  r   r  r  r"   r'   r%   r  r    sn    Ic c  XC XC XB B B B
 
 
r'   r  c                        e Zd ZeZ fdZededd f fd       Zededd f fd       Z	ededd fd       Z
d	edef fd
Z xZS )r  c                 P    t         |   t        j                         d | _        y rL   )r>   r?   r   r  _cluster_namerN   s    r%   r?   z#ClickHouseDropQueryBuilder.__init__+  s!    !4!45!r'   r  r   c                 &    t         |   d|       y )N
DICTIONARYr>   _set_target)rB   r  rC   s     r%   r  z*ClickHouseDropQueryBuilder.drop_dictionary/  s    L*5r'   r  c                 &    t         |   d|       y )NQUOTAr  )rB   r  rC   s     r%   r  z%ClickHouseDropQueryBuilder.drop_quota3  s    GU+r'   clusterc                 @    | j                   rt        d      || _         y )Nz5'DropQuery' object already has attribute cluster_name)r  r   )rB   r  s     r%   
on_clusterz%ClickHouseDropQueryBuilder.on_cluster7  s     !XYY$r'   r   c                     t        |   di |}| j                  dk7  r0| j                  $|dt	        | j                  t         |         z   z  }|S )Nr  z ON CLUSTER r"   )r>   r   _drop_target_kindr  r   rD   )rB   r   r   rC   s      r%   r   z"ClickHouseDropQueryBuilder.get_sql=  sS    )&)!!\1d6H6H6T^mD4F4FHZ&[[[Er'   )r1   r2   r3   r  rG   r?   r   r6   r  r  r  r   r   rH   rI   s   @r%   r  r  (  s    I" 6# 62N 6 6 , ,(D , , %# %*F % %
   r'   r  c                   (     e Zd Zdedef fdZ xZS )SQLLiteValueWrapperr   r   c                 v    t        | j                  t              r| j                  rdS dS t        |   di |S )N10r"   )r   r~   r   r>   get_value_sqlrA   s     r%   r  z!SQLLiteValueWrapper.get_value_sqlG  s5    djj$'**3-#-w$.v..r'   )r1   r2   r3   r   r6   r  rH   rI   s   @r%   r  r  F  s    /c /c / /r'   r  c                   *    e Zd ZdZededdfd       Zy)SQLLiteQueryr  r   r   SQLLiteQueryBuilderc                     t        di |S r!   )r  r#   s     r%   r&   zSQLLiteQuery._builderR  r   r'   Nr  r"   r'   r%   r  r  M  s*     - -(= - -r'   r  c                   Z     e Zd ZeZdeddf fdZededd fd       Zdede	f fdZ
 xZS )r  r   r   Nc                 \    t        |   dt        j                  t        d| d| _        y )N)r<   wrapper_clsFr"   )r>   r?   r   SQLLITEr  _insert_or_replacerA   s     r%   r?   zSQLLiteQueryBuilder.__init__Z  s*    ]!1!1?R]V\]"'r'   r]  c                 >     | j                   |  d| _        d| _        y rw   )_apply_terms_replacer  )rB   r]  s     r%   insert_or_replacez%SQLLiteQueryBuilder.insert_or_replace^  s!    5!"&r'   c                 H    | j                   rdnd}|t        |   di |z   S )Nz
INSERT OR r9   r"   )r  r>   _replace_sql)rB   r   prefixrC   s      r%   r  z SQLLiteQueryBuilder._replace_sqld  s*    !%!8!8b,6v666r'   )r1   r2   r3   r  rG   r   r?   r   r  r6   r  rH   rI   s   @r%   r  r  W  sV    I( ( ( ' '0E ' '
7S 7S 7 7r'   r  ):rl  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)   r.   rV   rW   r[   r_   ra   r   r   r   r   r  r  r   r"  r  r  r  r  r  r  r  r  r  r  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'   