
    wi                    b   d dl mZ d dlZd dlZd dlmZ d dl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mZ d dlmZ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          Z0 G d+ d,e          Z1 G d- d.e          Z2 G d/ d0e          Z3 G d1 d2e          Z4 G d3 d4e-          Z5 G d5 d6e          Z6 G d7 d8e          Z7 G d9 d:e          Z8 G d; d<e          Z9 G d= d>e          Z: G d? d@e          Z; G dA dBe          Z< G dC dDe          Z= G dE dFe          Z> G dG dHe>          Z? G dI dJe          Z@ G dK dLe          ZAdS )M    )annotationsN)copy)Any)Dialects)CreateQueryBuilderDatabaseDropQueryBuilderQueryQueryBuilder
SelectableTable)	ArithmeticExpression	CriterionEmptyCriterionFieldFunctionNullCriterionStarTermValueWrapper)QueryExceptionbuilderformat_alias_sqlformat_quotesc                  Z    e Zd ZdZedd            Zedd
            Zedd            ZdS )SnowflakeQueryz7
    Defines a query class for use with Snowflake.
    kwargsr   returnSnowflakeQueryBuilderc                    t          di |S N )r   clsr   s     B/var/www/icac/venv/lib/python3.11/site-packages/pypika/dialects.py_builderzSnowflakeQuery._builder%   s    $..v...    tablestr | TableSnowflakeCreateQueryBuilderc                D    t                                          |          S N)r*   create_tabler$   r(   s     r%   r-   zSnowflakeQuery.create_table)   s    *,,99%@@@r'   SnowflakeDropQueryBuilderc                D    t                                          |          S r,   )r/   
drop_tabler.   s     r%   r1   zSnowflakeQuery.drop_table-   s    (**55e<<<r'   N)r   r   r   r   )r(   r)   r   r*   )r(   r)   r   r/   )__name__
__module____qualname____doc__classmethodr&   r-   r1   r"   r'   r%   r   r       s          / / / [/ A A A [A = = = [= = =r'   r   c                  0     e Zd ZdZdZdZeZd	 fdZ xZ	S )
r   N" r   r   r   Nonec                R     t                      j        ddt          j        i| d S Ndialectr"   super__init__r   	SNOWFLAKEselfr   	__class__s     r%   r@   zSnowflakeQueryBuilder.__init__8   s.    >>!3>v>>>>>r'   r   r   r   r:   )
r2   r3   r4   
QUOTE_CHARALIAS_QUOTE_CHARQUERY_ALIAS_QUOTE_CHARr   	QUERY_CLSr@   __classcell__rD   s   @r%   r   r   2   sS        JI? ? ? ? ? ? ? ? ? ?r'   r   c                  (     e Zd ZdZeZd fdZ xZS )r*   Nr   r:   c                `    t                                          t          j                   d S Nr=   r>   rC   rD   s    r%   r@   z$SnowflakeCreateQueryBuilder.__init__@   '    !344444r'   r   r:   r2   r3   r4   rF   r   rI   r@   rJ   rK   s   @r%   r*   r*   <   G        JI5 5 5 5 5 5 5 5 5 5r'   r*   c                  (     e Zd ZdZeZd fdZ xZS )r/   Nr   r:   c                `    t                                          t          j                   d S rN   r>   rP   s    r%   r@   z"SnowflakeDropQueryBuilder.__init__H   rQ   r'   rR   rS   rK   s   @r%   r/   r/   D   rT   r'   r/   c                  r    e Zd ZdZedd            Zedd
            Zedd            Zedd            ZdS )
MySQLQueryz3
    Defines a query class for use with MySQL.
    r   r   r   MySQLQueryBuilderc                    t          di |S r!   )rY   r#   s     r%   r&   zMySQLQuery._builderQ        **6***r'   fpstrMySQLLoadQueryBuilderc                D    t                                          |          S r,   )r^   loadr$   r\   s     r%   r`   zMySQLQuery.loadU   s    $&&++B///r'   r(   r)   MySQLCreateQueryBuilderc                D    t                                          |          S r,   )rb   r-   r.   s     r%   r-   zMySQLQuery.create_tableY   s    &((55e<<<r'   MySQLDropQueryBuilderc                D    t                                          |          S r,   )rd   r1   r.   s     r%   r1   zMySQLQuery.drop_table]   s    $&&11%888r'   N)r   r   r   rY   )r\   r]   r   r^   )r(   r)   r   rb   )r(   r)   r   rd   )	r2   r3   r4   r5   r6   r&   r`   r-   r1   r"   r'   r%   rX   rX   L   s          + + + [+ 0 0 0 [0 = = = [= 9 9 9 [9 9 9r'   rX   c                       e Zd ZdZeZd fdZd fdZeddd            Z	ed d            Z
ed!d            Zd" fdZd#dZd"dZd#dZed$d            Zd"dZ xZS )%rY   `r   r   r   r:   c                     t                      j        ddt          j        i| g | _        d| _        g | _        d| _        d| _        t                      | _
        d S Nr=   Fr"   )r?   r@   r   MYSQL_duplicate_updates_ignore_duplicates
_modifiers_for_update_nowait_for_update_skip_lockedset_for_update_ofrB   s     r%   r@   zMySQLQueryBuilder.__init__f   s`    :::6:::"$"'"'',$!eer'   c                    t                                                      }t          | j                  |_        t          | j                  |_        |S r,   )r?   __copy__r   rk   rl   rC   newonerD   s     r%   rs   zMySQLQueryBuilder.__copy__p   sC    !!##$()@$A$A!$()@$A$A!r'   Fr"   nowaitboolskip_lockedoftuple[str, ...]c                X    d| _         || _        || _        t          |          | _        d S NT_for_updatero   rn   rp   rq   rC   rv   rx   ry   s       r%   
for_updatezMySQLQueryBuilder.for_updatev   .    '2$"(!"ggr'   fieldField | strvaluec                    | j         rt          d          t          |t                    st          |          n|}| j                            |t          |          f           d S )N"Can not have two conflict handlers)rl   r   
isinstancer   rk   appendr   )rC   r   r   s      r%   on_duplicate_key_updatez)MySQLQueryBuilder.on_duplicate_key_update}   se    " 	G !EFFF$.ue$<$<Ge%&&|E/B/B'CDDDDDr'   c                @    | j         rt          d          d| _        d S )Nr   T)rk   r   rl   rC   s    r%   on_duplicate_key_ignorez)MySQLQueryBuilder.on_duplicate_key_ignore   s+    " 	G !EFFF"&r'   r]   c                    |                      |            t                      j        di |}|r6| j        r| | j        di |z  }n| j        r||                                 z  }|S r!   )_set_kwargs_defaultsr?   get_sqlrk   _on_duplicate_key_update_sqlrl   _on_duplicate_key_ignore_sql)rC   r   querystringrD   s      r%   r   zMySQLQueryBuilder.get_sql   s    !!&)))%eggo//// 	C& C@t@JJ6JJJ( Ct@@BBBr'   c                    | j         rOd}| j        r,|dd                    fd| j        D                        z  }| j        r|dz  }n| j        r|dz  }nd}|S )N FOR UPDATE OF , c                D    g | ]} t          |          j        d i S r"   r   r   .0itemr   s     r%   
<listcomp>z5MySQLQueryBuilder._for_update_sql.<locals>.<listcomp>   4    /n/n/nRV0Cd0C0M0Mf0M0M/n/n/nr'    NOWAIT SKIP LOCKEDr9   r~   rq   joinrn   ro   rC   r   r   s    ` r%   _for_update_sqlz!MySQLQueryBuilder._for_update_sql        		&J" rqTYY/n/n/n/nZ^Zm/n/n/n%o%oqqq
& -i'

- -n,
Jr'   c                x    d                     d                    fd| j        D                                 S )Nz" ON DUPLICATE KEY UPDATE {updates},c           	   3  x   K   | ]4\  }}d                       |j        di  |j        di           V  5dS ){field}={value}r   r   Nr"   )formatr   r   r   r   r   s      r%   	<genexpr>zAMySQLQueryBuilder._on_duplicate_key_update_sql.<locals>.<genexpr>   ss         E5 "((}u}/F/Fv/F/FmemNeNe^dNeNe(ff     r'   updates)r   r   rk   rC   r   s    `r%   r   z.MySQLQueryBuilder._on_duplicate_key_update_sql   sZ    3::HH    $($;     ; 
 
 	
r'   c                    dS )Nz ON DUPLICATE KEY IGNOREr"   r   s    r%   r   z.MySQLQueryBuilder._on_duplicate_key_ignore_sql   s    ))r'   c                :    | j                             |           dS )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)rm   r   )rC   r   s     r%   modifierzMySQLQueryBuilder.modifier   s      	u%%%%%r'   c                    d                     | j        rdnd| j        r-d                     d                    | j                            ndd                    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  8   K   | ]} |j         dd d dV  dS T)
with_aliassubqueryNr"   r   r   termr   s     r%   r   z0MySQLQueryBuilder._select_sql.<locals>.<genexpr>   =      mmW[LDLRD4RR6RRmmmmmmr'   )distinctr   select)r   	_distinctrm   r   _selectsr   s    `r%   _select_sqlzMySQLQueryBuilder._select_sql   s    
 5;;$(N:[[@DWU\\#((4?";";<<<UW88mmmm_c_lmmmmm < 
 
 	
r'   rE   )r   rY   FFr"   )rv   rw   rx   rw   ry   rz   r   r:   )r   r   r   r   r   r:   rR   r   r   r   r]   r   r]   )r   r]   r   r:   )r2   r3   r4   rF   rX   rI   r@   rs   r   r   r   r   r   r   r   r   r   r   rJ   rK   s   @r%   rY   rY   b   s\       JI$ $ $ $ $ $      & & & & W& E E E WE ' ' ' W'        
 
 
 
* * * * & & & W&	
 	
 	
 	
 	
 	
 	
 	
r'   rY   c                  r    e Zd ZeZddZedd            Zedd	            ZddZ	ddZ
ddZddZddZdS )r^   r   r:   c                "    d | _         d | _        d S r,   )
_load_file_into_tabler   s    r%   r@   zMySQLLoadQueryBuilder.__init__   s    r'   r\   r]   c                    || _         d S r,   )r   rC   r\   s     r%   r`   zMySQLLoadQueryBuilder.load       r'   r(   r)   c                \    t          |t                    r|nt          |          | _        d S r,   )r   r   r   rC   r(   s     r%   intozMySQLLoadQueryBuilder.into   )    $.ue$<$<N55%,,r'   argsr   r   c                    d}| j         r7| j        r0| | 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rC   r   r   r   s       r%   r   zMySQLLoadQueryBuilder.get_sql   s{    ? 	7t/ 	7.4.88888K/4/99&999K,4,66v666Kr'   c                6    d                     | j                  S )NzLOAD DATA LOCAL INFILE '{}')r   r   r   s     r%   r   z$MySQLLoadQueryBuilder._load_file_sql   s    ,33DODDDr'   c                L    d                      | j        j        di |          S )Nz INTO TABLE `{}`r"   )r   r   r   r   s     r%   r   z%MySQLLoadQueryBuilder._into_table_sql   s-    !(()A)9)A)K)KF)K)KLLLr'   c                    dS )Nz FIELDS TERMINATED BY ','r"   r   s     r%   r   z"MySQLLoadQueryBuilder._options_sql   s    **r'   c                *    |                                  S r,   r   r   s    r%   __str__zMySQLLoadQueryBuilder.__str__       ||~~r'   NrR   r\   r]   r   r:   r(   r)   r   r:   r   r   r   r   r   r]   r   r   )r2   r3   r4   rX   rI   r@   r   r`   r   r   r   r   r   r   r"   r'   r%   r^   r^      s        I           W O O O WO   E E E EM M M M+ + + +     r'   r^   c                      e Zd ZdZdS )rb   rg   Nr2   r3   r4   rF   r"   r'   r%   rb   rb              JJJr'   rb   c                      e Zd ZdZdS )rd   rg   Nr   r"   r'   r%   rd   rd      r   r'   rd   c                  Z    e Zd ZdZedd            Zedd            Zedd            ZdS )VerticaQueryz5
    Defines a query class for use with Vertica.
    r   VerticaQueryBuilderc                    t          di |S r!   )r   r#   s     r%   r&   zVerticaQuery._builder       ",,V,,,r'   r\   r]   VerticaCopyQueryBuilderc                D    t                                          |          S r,   )r   	from_filera   s     r%   r   zVerticaQuery.from_file   s    &((222666r'   r(   r)   VerticaCreateQueryBuilderc                D    t                                          |          S r,   )r   r-   r.   s     r%   r-   zVerticaQuery.create_table   s    (**77>>>r'   N)r   r   )r\   r]   r   r   )r(   r)   r   r   )r2   r3   r4   r5   r6   r&   r   r-   r"   r'   r%   r   r      s~          - - - [- 7 7 7 [7 ? ? ? [? ? ?r'   r   c                  H     e Zd ZeZd fdZedd            Zd fd
Z xZ	S )r   r   r   r   r:   c                `     t                      j        ddt          j        i| d | _        d S r<   )r?   r@   r   VERTICA_hintrB   s     r%   r@   zVerticaQueryBuilder.__init__  s3    <<!1<V<<<


r'   labelr]   c                    || _         d S r,   )r   )rC   r   s     r%   hintzVerticaQueryBuilder.hint  s    


r'   r   c                     t                      j        |i |}| j        Ad                    |d d         d                    | j                  |dd          g          }|S )Nr9      z/*+label({hint})*/)r      )r?   r   r   r   r   )rC   r   r   sqlrD   s       r%   r   zVerticaQueryBuilder.get_sql  sk    eggot.v..:!''3rr7$8$?$?TZ$?$P$PRUVWVXVXRYZ[[C
r'   rE   )r   r]   r   r:   r   )
r2   r3   r4   r   rI   r@   r   r   r   rJ   rK   s   @r%   r   r     s        I         W         r'   r   c                  x     e Zd ZeZd fdZedd            Zedd            Zdd	Z	d fd
Z
ddZddZ xZS )r   r   r:   c                |    t                                          t          j                   d| _        d| _        d S )NrO   F)r?   r@   r   r   _local_preserve_rowsrP   s    r%   r@   z"VerticaCreateQueryBuilder.__init__  s6    !1222#r'   c                @    | j         st          d          d| _        d S Nz)'Query' object has no attribute temporaryT)
_temporaryAttributeErrorr   r   s    r%   localzVerticaCreateQueryBuilder.local   s'     	N !LMMMr'   c                @    | j         st          d          d| _        d S r   )r  r  r   r   s    r%   preserve_rowsz'VerticaCreateQueryBuilder.preserve_rows'  s*     	N !LMMM"r'   r   r   r]   c           	     v    d                     | 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.  sT    7>>"k1((r&*o=ll2,$$,66v66 ? 
 
 	
r'   c                h     t                      j        di |}||                                 z  }|S r!   )r?   _table_options_sql_preserve_rows_sql)rC   r   table_optionsrD   s      r%   r  z,VerticaCreateQueryBuilder._table_options_sql5  s;    22<<V<<00222r'   c                t    d                     |                                  | 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:  sF    -441133)$/)33F33 5 
 
 	
r'   c                    | j         rdndS )Nz ON COMMIT PRESERVE ROWSr9   )r   r   s    r%   r  z,VerticaCreateQueryBuilder._preserve_rows_sql@  s    -1-@H))bHr'   rR   r   r   )r2   r3   r4   r   rI   r@   r   r  r  r	  r  r  r  rJ   rK   s   @r%   r   r     s        I$ $ $ $ $ $
    W # # # W#
 
 
 
     

 
 
 
I I I I I I I Ir'   r   c                  r    e Zd ZeZddZedd            Zedd	            ZddZ	ddZ
ddZddZddZdS )r   r   r:   c                "    d | _         d | _        d S r,   )_copy_table
_from_filer   s    r%   r@   z VerticaCopyQueryBuilder.__init__G  s    r'   r\   r]   c                    || _         d S r,   )r  r   s     r%   r   z!VerticaCopyQueryBuilder.from_fileK  r   r'   r(   r)   c                \    t          |t                    r|nt          |          | _        d S r,   )r   r   r  r   s     r%   copy_zVerticaCopyQueryBuilder.copy_O  r   r'   r   r   r   c                    d}| j         r7| j        r0| | 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_sqlS  s{     	7 	7/4/99&999K.4.88888K,4,66v666Kr'   c                L    d                      | j        j        di |          S )Nz	COPY "{}"r"   )r   r  r   r   s     r%   r  z'VerticaCopyQueryBuilder._copy_table_sql\  s-    !!":$"2":"D"DV"D"DEEEr'   c                6    d                     | j                  S )Nz FROM LOCAL '{}')r   r  r   s     r%   r  z&VerticaCopyQueryBuilder._from_file_sql_  s    !((999r'   c                    dS )Nz  PARSER fcsvparser(header=false)r"   r   s     r%   r   z$VerticaCopyQueryBuilder._options_sqlb  s    11r'   c                *    |                                  S r,   r   r   s    r%   r   zVerticaCopyQueryBuilder.__str__e  r   r'   NrR   r   r   r   r   r   )r2   r3   r4   r   rI   r@   r   r   r  r   r  r  r   r   r"   r'   r%   r   r   D  s        I       W O O O WO   F F F F: : : :2 2 2 2     r'   r   c                  6    e Zd Zd
dZd
dZedd            Zd	S )"FetchNextAndOffsetRowsQueryBuilderr   r]   c                8    d                     | j                  S )Nz FETCH NEXT {limit} ROWS ONLY)limit)r   _limitr   s    r%   
_limit_sqlz-FetchNextAndOffsetRowsQueryBuilder._limit_sqlj  s    .55DK5HHHr'   c                <    d                     | j        pd          S )Nz OFFSET {offset} ROWSr   )offset)r   _offsetr   s    r%   _offset_sqlz.FetchNextAndOffsetRowsQueryBuilder._offset_sqlm  s     &--T\5FQ-GGGr'   r$  intr:   c                H    t          j        dt                     || _        d S )Nz:`fetch_next` is deprecated - please use the `limit` method)warningswarnDeprecationWarningr%  )rC   r$  s     r%   
fetch_nextz-FetchNextAndOffsetRowsQueryBuilder.fetch_nextp  s!    RTfgggr'   Nr   )r$  r+  r   r:   )r2   r3   r4   r&  r*  r   r0  r"   r'   r%   r"  r"  i  sd        I I I IH H H H    W  r'   r"  c                  *    e Zd ZdZedd            ZdS )	OracleQueryz4
    Defines a query class for use with Oracle.
    r   r   r   OracleQueryBuilderc                    t          di |S r!   )r3  r#   s     r%   r&   zOracleQuery._builder{  s    !++F+++r'   N)r   r   r   r3  r2   r3   r4   r5   r6   r&   r"   r'   r%   r2  r2  v  s>          , , , [, , ,r'   r2  c                  <     e Zd ZdZeZd fdZd fd	ZddZ xZ	S )r3  Nr   r   r   r:   c                R     t                      j        ddt          j        i| d S r<   )r?   r@   r   ORACLErB   s     r%   r@   zOracleQueryBuilder.__init__  s-    ;;;F;;;;;r'   r   r]   c                @    d|d<    t                      j        |i |S NFgroupby_aliasr?   r   rC   r   r   rD   s      r%   r   zOracleQueryBuilder.get_sql  *     #(uww////r'   r   c                ~    | j         r||                                 z  }| j        ||                                 z  }|S r,   )r)  r*  r%  r&  rC   r   r   s      r%   _apply_paginationz$OracleQueryBuilder._apply_pagination  sD    < 	.4++---K;"4??,,,Kr'   rE   r   r   r]   r   r]   )
r2   r3   r4   rF   r2  rI   r@   r   rA  rJ   rK   s   @r%   r3  r3    sy        JI< < < < < <0 0 0 0 0 0       r'   r3  c                  *    e Zd ZdZedd            ZdS )PostgreSQLQueryz8
    Defines a query class for use with PostgreSQL.
    r   PostgreSQLQueryBuilderc                    t          di |S r!   )rE  r#   s     r%   r&   zPostgreSQLQuery._builder  s    %/////r'   Nr   rE  r5  r"   r'   r%   rD  rD    s>          0 0 0 [0 0 0r'   rD  c                  f    e Zd ZdZeZd8 fdZd9 fdZed:d
            Z	ed;d<d            Z
ed=d            Zed>d            Zed?d@d            ZedA fd            ZedBd"            ZdC fd$ZdDd'ZdCd(ZdEd)ZdCd*ZedFd,            ZdGd.Zd>d/ZdHd0ZdHd1ZdId3ZdCd4ZdJdK fd7Z xZS )LrE  r8   r   r   r   r:   c                    t                      j        ddt          j        i| g | _        d| _        d| _        g | _        d| _        g | _	        d | _
        d | _        g | _        d| _        d| _        t                      | _        d S ri   )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_onrn   ro   rp   rq   rB   s     r%   r@   zPostgreSQLQueryBuilder.__init__  s    ??!4????!!#% ',$')$#' -1*"'',$!eer'   c                    t                                                      }t          | j                  |_        t          | j                  |_        |S r,   )r?   rs   r   rK  rP  rt   s     r%   rs   zPostgreSQLQueryBuilder.__copy__  sA    !!##t}--)-d.J)K)K&r'   fields
str | Termc                    |D ]n}t          |t                    r(| j                            t	          |                     ?t          |t
                    r| j                            |           od S r,   r   r]   rS  r   r   r   rC   rU  r   s      r%   distinct_onz"PostgreSQLQueryBuilder.distinct_on  w     	0 	0E%%% 0!((u6666E4(( 0!((///		0 	0r'   Fr"   rv   rw   rx   ry   rz   r   c                X    d| _         || _        || _        t          |          | _        d S r|   r}   r   s       r%   r   z!PostgreSQLQueryBuilder.for_update  r   r'   target_fieldsc                .   | j         st          d          d| _        |D ]t}t          |t                    r.| j                            |                     |                     Et          |t                    r| j                            |           ud S )Nz(On conflict only applies to insert queryT)	_insert_tabler   rM  r   r]   rN  r   _conflict_field_strr   )rC   r]  target_fields      r%   on_conflictz"PostgreSQLQueryBuilder.on_conflict  s    ! 	M !KLLL ) 	> 	>L,,, >(//0H0H0V0VWWWWL$// >(//===		> 	>r'   c                b    t          | j                  dk    rt          d          d| _        d S )Nr   r   T)lenrP  r   rO  r   s    r%   
do_nothingz!PostgreSQLQueryBuilder.do_nothing  s5    t+,,q00 !EFFF'+$$$r'   Nupdate_fieldstr | Fieldupdate_value
Any | Nonec                h   | j         rt          d          t          |t                    r|                     |          }n't          |t
                    r|}nt          d          |+| j                            |t          |          f           d S | j                            |d f           d S )Nr   zUnsupported update_field)	rO  r   r   r]   r`  r   rP  r   r   )rC   rf  rh  r   s       r%   	do_updatez PostgreSQLQueryBuilder.do_update  s    ' 	G !EFFFlC(( 	=,,\::EEe,, 	= EE !;<<<#(//\8R8R0STTTTT(//>>>>>r'   	criterionr   c                ~   | j         s!t                                          |          S t          |t                    rd S | j        rt          d          | j        r)| j        r"| j	        r| xj	        |z  c_	        d S || _	        d S | j        r"| j
        r| xj
        |z  c_
        d S || _
        d S t          d          )Nz"DO NOTHING doest not support WHEREz(Can not have fieldless ON CONFLICT WHERE)rM  r?   wherer   r   rO  r   rN  rP  rR  rQ  )rC   rl  rD   s     r%   rn  zPostgreSQLQueryBuilder.where  s      	,77==+++i00 	F' 	G !EFFF# 	M(D 	M1 ?22i?22225>222% 	M' 5((I5((((+4((( !KLLLr'   r(   Selectable | strc                :    | j                             |           d S r,   )_usingr   r   s     r%   usingzPostgreSQLQueryBuilder.using	  s    5!!!!!r'   r]   c                    | j         r:d                    d                    fd| j         D                                 S  t                      j        di S )NDISTINCT ON({distinct_on}) r   c              3  6   K   | ]} |j         dd diV  dS r   TNr"   r   r   s     r%   r   z7PostgreSQLQueryBuilder._distinct_sql.<locals>.<genexpr>  ;      $k$kQU\T\%L%LT%LV%L%L$k$k$k$k$k$kr'   rZ  r"   rS  r   r   r?   _distinct_sqlrB   s    `r%   rz  z$PostgreSQLQueryBuilder._distinct_sql  s     	077HH$k$k$k$kY]Yj$k$k$kkk 8    %uww$..v...r'   r   Field | Nonec                @    | j         rt          || j                   S d S Nr(   )r_  r   rC   r   s     r%   r`  z*PostgreSQLQueryBuilder._conflict_field_str  s-     	9T%78888	9 	9r'   c                   | j         s0t          | j                  dk    r| j        sdS t	          d          | j        r| j        st	          d          d}| j        r1fd| j        D             }|dd                    |          z   d	z   z  }| j        r+|d
                     | j        j        dddi          z  }|S )Nr   r9   z"No handler defined for on conflictz,Can not have fieldless on conflict do updatez ON CONFLICTc                .    g | ]} |j         dd diS )r   Tr"   r   )r   fr   s     r%   r   z;PostgreSQLQueryBuilder._on_conflict_sql.<locals>.<listcomp>#  s0    ]]]qiai::4:6::]]]r'   z (r   ) WHERE {where}r   Trn  r"   )	rO  rd  rP  rN  r   r   rQ  r   r   )rC   r   conflict_queryrU  s    `  r%   _on_conflict_sqlz'PostgreSQLQueryBuilder._on_conflict_sql  s   + 	GD4P0Q0QUV0V0V+ r !EFFF' 	Q0H 	Q !OPPP'# 	=]]]]DD\]]]FdTYYv%6%66<<N# 	w.55<\D<T<\<u<ufj<unt<u<u5vvvNr'   c                    | j         rOd}| j        r,|dd                    fd| j        D                        z  }| j        r|dz  }n| j        r|dz  }nd}|S )Nr   r   r   c                D    g | ]} t          |          j        d i S r   r   r   s     r%   r   z:PostgreSQLQueryBuilder._for_update_sql.<locals>.<listcomp>/  r   r'   r   r   r9   r   r   s    ` r%   r   z&PostgreSQLQueryBuilder._for_update_sql+  r   r'   c                ,   | j         rdS t          | j                  dk    rg }| j        D ]\  }}|rC|                    d                     |j        di | |j        dddi|                     J|                    d                     |j        di | |j        di |                     d                    d	                    |          
          }| j        r,|d                     | j        j        dddd|          z  }|S dS )Nz DO NOTHINGr   r   with_namespaceTr   z{field}=EXCLUDED.{value}z DO UPDATE SET {updates}r   r   r  )r   r  r  r9   r"   )rO  rd  rP  r   r   r   r   rR  )rC   r   r   r   r   
action_sqls         r%   _on_conflict_action_sqlz.PostgreSQLQueryBuilder._on_conflict_action_sql9  s   ' 	 =-..22G $ <  u NN)00"/%-"9"9&"9"9"/%-"N"Nt"Nv"N"N 1      NN299"/%-"9"9&"9"9"/%-"9"9&"9"9 :      4::388GCTCT:UUJ1 .55D$<Drdcgrrkqrr 6   
 rr'   termsc                   |D ]}t          |t                    r|                     |           -t          |t                    r|                     |           Xt          |t
          t          f          r,|j        rt          d          | 	                    |           | 	                    | 
                    || j                             d S )Nz0Aggregate functions are not allowed in returning)r   r   _return_fieldr]   _return_field_strr   r   is_aggregater   _return_otherwrap_constant_wrapper_cls)rC   r  r   s      r%   	returningz PostgreSQLQueryBuilder.returningW  s     
	P 
	PD$&& 	P""4((((D#&& P&&t,,,,D8-A"BCC P$ ]()[\\\""4((((""4#5#5dD<M#N#NOOOO
	P 
	Pr'   r   c                   |                                 D ]}t          | j        | j        | j        g          st          d          |j        | j        | j        hv }t          t          j	        
                    d | j        D                                 }t          | j                  |z  }t          |j        |z
            }|s|rt          d          d S )N%Returning can't be used in this queryc                &    g | ]}|j         j        S r"   )rl  tables_)r   js     r%   r   zCPostgreSQLQueryBuilder._validate_returning_term.<locals>.<listcomp>k  s    <f<f<fUVQ[=P<f<f<fr'   z"You can't return from other tables)fields_anyr_  _update_table_delete_fromr   r(   rp   	itertoolschainfrom_iterable_joins_fromrw   r  )rC   r   r   table_is_insert_or_update_tablejoin_tablesjoin_and_base_tablestable_not_base_or_joins          r%   _validate_returning_termz/PostgreSQLQueryBuilder._validate_returning_terme  s    \\^^ 		K 		KE*D,>@QRSS N$%LMMM.3kd>PRVRd=e.e+io;;<f<fZ^Ze<f<f<fgghhK#&tz??[#@ %)$,9M*M%N%N"2 K7M K$%IJJJ		K 		Kr'   c                @    d | j         D             | _         d| _        d S )Nc                2    g | ]}t          |d           |S r  )hasattr)r   r  s     r%   r   z@PostgreSQLQueryBuilder._set_returns_for_star.<locals>.<listcomp>r  s)    eeeyQZ\cIdIdeeeer'   T)rK  rL  r   s    r%   _set_returns_for_starz,PostgreSQLQueryBuilder._set_returns_for_starq  s'    eeDMeee r'   c                    | j         rd S |                     |           t          |t                    r|                                  | j                            |           d S r,   )rL  r  r   r   r  rK  r   r  s     r%   r  z$PostgreSQLQueryBuilder._return_fieldu  sf     	F%%d+++dD!! 	)&&(((T"""""r'   c                   |dk    r<|                                   | j                            t                                 d S | j        r+|                     t          || j                             d S | j        r+|                     t          || j                             d S | j        r1|                     t          || j	        d                              d S t          d          )N*r  r   r  )r  rK  r   r   r_  r  r   r  r  r  r   r  s     r%   r  z(PostgreSQLQueryBuilder._return_field_str  s    3;;&&(((M  (((F 	JuT1CDDDEEEEE 	JuT1CDDDEEEEE 	JuTA???@@@@@ !HIIIr'   functionc                d    |                      |           | j                            |           d S r,   )r  rK  r   )rC   r  s     r%   r  z$PostgreSQLQueryBuilder._return_other  s2    %%h///X&&&&&r'   c                x    d                     d                    fd| j        D                                 S )Nz RETURNING {returning}r   c              3  6   K   | ]} |j         dd diV  dS rv  r   r   s     r%   r   z8PostgreSQLQueryBuilder._returning_sql.<locals>.<genexpr>  s:      aa4|t|FFtFvFFaaaaaar'   )r  )r   r   rK  r   s    `r%   _returning_sqlz%PostgreSQLQueryBuilder._returning_sql  sH    '..hhaaaaSWS`aaaaa / 
 
 	
r'   r   r   c                    |                      |            t                      j        ||fi |}| | j        di |z  }| | j        di |z  }| j        r!| j        o| j        |d<   | | j        di |z  }|S )Nr  r"   )	r   r?   r   r  r  rK  r  from_r  )rC   r   r   r   r   rD   s        r%   r   zPostgreSQLQueryBuilder.get_sql  s    !!&)))%eggoj(EEfEE,t,66v6663t3==f==== 	9'+'9'HdjF#$.4.88888Kr'   rE   rG  rU  rV  r   r:   r   )rv   rw   rx   rw   ry   rz   r   r   )r]  rV  r   r:   rR   r,   )rf  rg  rh  ri  r   r:   )rl  r   r   r:   )r(   ro  r   r:   r   )r   r]   r   r|  r   r  r   r   r:   )r   r   r   r:   )r   rg  r   r:   )r  r   r   r:   FF)r   rw   r   rw   r   r   r   r]   )r2   r3   r4   rG   rD  rI   r@   rs   r   rZ  r   rb  re  rk  rn  rr  rz  r`  r  r   r  r  r  r  r  r  r  r  r   rJ   rK   s   @r%   rE  rE    s       I$ $ $ $ $ $$      0 0 0 W0 & & & & W& 
> 
> 
> W
> , , , W,
 ? ? ? ? W?  M M M M M WM. " " " W"/ / / / / /9 9 9 9   &      < P P P WP
K 
K 
K 
K! ! ! !
# 
# 
# 
#J J J J' ' ' '
 
 
 

          r'   rE  c                  *    e Zd ZdZedd            ZdS )	RedshiftQueryz=
    Defines a query class for use with Amazon Redshift.
    r   r   r   RedShiftQueryBuilderc                2    t          ddt          j        i|S r<   )r  r   REDSHIFTr#   s     r%   r&   zRedshiftQuery._builder  s    #HHH,=HHHHr'   N)r   r   r   r  r5  r"   r'   r%   r  r    sD          I I I [I I Ir'   r  c                      e Zd ZeZdS )r  N)r2   r3   r4   r  rI   r"   r'   r%   r  r    s        IIIr'   r  c                  *    e Zd ZdZedd            ZdS )	
MSSQLQueryB
    Defines a query class for use with Microsoft SQL Server.
    r   r   r   MSSQLQueryBuilderc                    t          di |S r!   )r  r#   s     r%   r&   zMSSQLQuery._builder  r[   r'   N)r   r   r   r  r5  r"   r'   r%   r  r    s>          + + + [+ + +r'   r  c                  b     e Zd ZeZd fdZeddd            ZddZd fdZ	ddZ
ddZ xZS )r  r   r   r   r:   c                |     t                      j        ddt          j        i| d | _        d| _        d| _        d S ri   )r?   r@   r   MSSQL_top_top_with_ties_top_percentrB   s     r%   r@   zMSSQLQueryBuilder.__init__  sD    :::6::: $	$)"'r'   Fr   	str | intpercentrw   	with_tiesc                    	 t          |          | _        n# t          $ r t          d          w xY w|r+dt          |          cxk    rdk    sn t          d          || _        || _        dS )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)r+  r  
ValueErrorr   r  r  )rC   r   r  r  s       r%   topzMSSQLQueryBuilder.top  s    	AE

DII 	A 	A 	A !?@@@	A  	gAU2222s2222 !efff")$-s    1r   r]   c                    | j         | j        r||                                 z  }| j         ||                                 z  }|S r,   )r%  r)  r*  r&  r@  s      r%   rA  z#MSSQLQueryBuilder._apply_pagination  sI    ;"dl"4++---K;"4??,,,Kr'   r   c                @    d|d<    t                      j        |i |S r:  r<  r=  s      r%   r   zMSSQLQueryBuilder.get_sql  r>  r'   c                ^    d}| j         r#d| j          d}| j        r| d}| j        r| d}|S )Nr9   zTOP (z) zPERCENT z
WITH TIES )r  r  r  )rC   _top_statements     r%   _top_sqlzMSSQLQueryBuilder._top_sql  s[     9 	?2TY222N  =$2!<!<!<" ?$2!>!>!>r'   c                    d                     |                                 | j        rdndd                    fd| j        D                                 S )NzSELECT {distinct}{top}{select}r   r9   r   c              3  8   K   | ]} |j         dd d dV  dS 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  sa    /66$(N:[[88mmmm_c_lmmmmm 7 
 
 	
r'   rE   r  )r   r  r  rw   r  rw   r   r:   rB  r   r   r   )r2   r3   r4   r  rI   r@   r   r  rA  r   r  r   rJ   rK   s   @r%   r  r    s        I( ( ( ( ( ( . . . . W.	 	 	 	0 0 0 0 0 0	 	 	 	
 
 
 
 
 
 
 
r'   r  c                      e Zd ZdZedd            Zedd
            Zedd            Zedd            Zedd            Z	edd            Z
edd            ZdS )ClickHouseQueryz?
    Defines a query class for use with Yandex ClickHouse.
    r   r   r   ClickHouseQueryBuilderc                6    t          dt          j        ddd|S )NFT)r=   wrap_set_operation_queries
as_keywordr"   )r  r   
CLICKHOUSEr#   s     r%   r&   zClickHouseQuery._builder  s1    % 
'EVZ
 
^d
 
 	
r'   databaseDatabase | strClickHouseDropQueryBuilderc                D    t                                          |          S r,   )r  drop_database)rC   r  s     r%   r  zClickHouseQuery.drop_database  s    )++99(CCCr'   r(   Table | strc                D    t                                          |          S r,   )r  r1   r   s     r%   r1   zClickHouseQuery.drop_table      )++66u===r'   
dictionaryr]   c                D    t                                          |          S r,   )r  drop_dictionary)rC   r  s     r%   r  zClickHouseQuery.drop_dictionary  s    )++;;JGGGr'   quotac                D    t                                          |          S r,   )r  
drop_quota)rC   r  s     r%   r  zClickHouseQuery.drop_quota  r  r'   userc                D    t                                          |          S r,   )r  	drop_user)rC   r  s     r%   r  zClickHouseQuery.drop_user      )++55d;;;r'   viewc                D    t                                          |          S r,   )r  	drop_view)rC   r  s     r%   r  zClickHouseQuery.drop_view  r  r'   N)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  )r2   r3   r4   r5   r6   r&   r  r1   r  r  r  r  r"   r'   r%   r  r    s         
 
 
 [

 D D D [D > > > [> H H H [H > > > [> < < < [< < < < [< < <r'   r  c                      e Zd ZU eZded<   ded<   d( fdZd) fdZed(d	            Z	ed*d+d            Z
ed,d            Zd,dZd-d.dZd,dZed/d            Zd, fdZed0d            Zed0d             Zd1 fd"Zd,d#Zd2 fd'Z xZS )3r  z
list[Term]rS  z"tuple[int, int, list[Term]] | None	_limit_byr   r:   c                     t                      j        di | d| _        d | _        d | _        g | _        d | _        d S )NFr"   )r?   r@   _final_sample_sample_offsetrS  r  rB   s     r%   r@   zClickHouseQueryBuilder.__init__&  sI    ""6""""r'   c                z    t                                                      }t          | j                  |_        |S r,   )r?   rs   r   r  rt   s     r%   rs   zClickHouseQueryBuilder.__copy__.  s/    !!##//r'   c                    d| _         d S r|   )r  r   s    r%   finalzClickHouseQueryBuilder.final3  s    r'   Nsampler+  r(  
int | Nonec                "    || _         || _        d S r,   )r  r  )rC   r   r(  s      r%   r   zClickHouseQueryBuilder.sample7  s    $r'   r   r   r]   c                     dS )NzALTER TABLEr"   )r   s    r%   _delete_sqlz"ClickHouseQueryBuilder._delete_sql<  s    }r'   c                N    d                      | j        j        di |          S )NzALTER TABLE {table}r  r"   )r   r  r   r   s     r%   _update_sqlz"ClickHouseQueryBuilder._update_sql@  s0    $++2L$2D2L2V2Vv2V2V+WWWr'   Fr  rw   c                   d                     fd| j        D                       }| j        rd| dS |g}| j        dur|                    d           | j        |                    d| j                    | j        |                    d| j                    d	                    d                     |          
          S )Nr   c              3  8   K   | ]} |j         dd d dV  dS )T)r   r   Nr"   r   )r   clauser   s     r%   r   z3ClickHouseQueryBuilder._from_sql.<locals>.<genexpr>D  s=      pp[anfnVdtVVvVVppppppr'   r   z DELETEFFINALzSAMPLE zOFFSET z FROM {clauses})clauses)r   r  r  r  r   r  r  r   )rC   r  r   
selectabler  s     `  r%   	_from_sqlz ClickHouseQueryBuilder._from_sqlC  s    XXppppeieoppppp
 	+*z****,;e##NN7###<#NN3T\33444*NN:T%8::;;; ''0A0A'BBBr'   c                x    d                     d                    fd| j        D                                 S )Nz UPDATE {set}r   c              3     K   | ]C\  }}d                       |j        di t          d           |j        di           V  DdS )r   F)r  r   Nr"   )r   r   dictr   s      r%   r   z2ClickHouseQueryBuilder._set_sql.<locals>.<genexpr>R  s         !E5 "(('%-MM$ve*L*L*LMMUbUZUbUlUlekUlUl )       r'   )rp   )r   r   _updatesr   s    `r%   _set_sqlzClickHouseQueryBuilder._set_sqlP  s[    %%     %)M	     & 
 
 	
r'   rU  rV  c                    |D ]n}t          |t                    r(| j                            t	          |                     ?t          |t
                    r| j                            |           od S r,   rX  rY  s      r%   rZ  z"ClickHouseQueryBuilder.distinct_onZ  r[  r'   c                    | j         r:d                    d                    fd| j         D                                 S  t                      j        di S )Nrt  r   c              3  6   K   | ]} |j         dd diV  dS rv  r   r   s     r%   r   z7ClickHouseQueryBuilder._distinct_sql.<locals>.<genexpr>e  rw  r'   rx  r"   ry  rB   s    `r%   rz  z$ClickHouseQueryBuilder._distinct_sqlb  r{  r'   byc                .    |dd |D             f| _         d S )Nr   c                Z    g | ](}t          |t                    rt          |          n|)S r"   r   r]   r   r   r   s     r%   r   z3ClickHouseQueryBuilder.limit_by.<locals>.<listcomp>k  s2     c c cW\E31G1G!RuU c c cr'   r  )rC   nr  s      r%   limit_byzClickHouseQueryBuilder.limit_byi  s$    Q c c`b c c cdr'   c                .    ||d |D             f| _         d S )Nc                Z    g | ](}t          |t                    rt          |          n|)S r"   r  r  s     r%   r   z:ClickHouseQueryBuilder.limit_offset_by.<locals>.<listcomp>o  s3    %h%h%h\aj6L6L&WeElllRW%h%h%hr'   r  )rC   r  r(  r  s       r%   limit_offset_byz&ClickHouseQueryBuilder.limit_offset_bym  s$    V%h%heg%h%h%hir'   r   c                f    | j         r| | j        di |z  } t                      j        |fi |S r!   )r  _limit_by_sqlr?   rA  )rC   r   r   rD   s      r%   rA  z(ClickHouseQueryBuilder._apply_paginationq  sL     > 	8-4-77777K(uww(?????r'   c                    | j         \  }}}d                    fd|D                       }|dk    rd| d| d| dS d| d| dS )Nr   c              3  6   K   | ]} |j         dd diV  dS rv  r   r   s     r%   r   z7ClickHouseQueryBuilder._limit_by_sql.<locals>.<genexpr>{  s:      MM$ldl==d=f==MMMMMMr'   r   z LIMIT z OFFSET z BY (r  )r  r   )rC   r   r  r(  r  s    `   r%   r"  z$ClickHouseQueryBuilder._limit_by_sqly  sy    .FBXXMMMM"MMMMMQ;;:Q::::R::::*Q**R****r'   current_tableTable | None	new_tablec                    t                                                    }| j        r8| j        d         | j        d         fd| j        d         D             f|_        |S )Nr      c                <    g | ]}|                               S r"   )replace_table)r   columnr%  r'  s     r%   r   z8ClickHouseQueryBuilder.replace_table.<locals>.<listcomp>  s)    ```F%%mY??```r'      )r?   r+  r  )rC   r%  r'  ru   rD   s    `` r%   r+  z$ClickHouseQueryBuilder.replace_table  so    &&}i@@> 	q!q!`````dn]^N_``` F
 r'   rR   )r   r  r,   )r   r+  r(  r  r   r:   r   F)r  rw   r   r   r   r]   r  )r  rV  r   r:   rB  )r%  r&  r'  r&  r   r  )r2   r3   r4   r  rI   __annotations__r@   rs   r   r  r   staticmethodr  r  r  r  rZ  rz  r  r   rA  r"  r+  rJ   rK   s   @r%   r  r     s        I1111          
    W % % % % W%    \X X X XC C C C C
 
 
 
 0 0 0 W0/ / / / / / e e e We j j j Wj@ @ @ @ @ @+ + + +         r'   r  c                  ~     e Zd ZeZ fdZed fd            Zed fd            Zedd
            Z	d fdZ
 xZS )r  c                n    t                                          t          j                   d | _        d S rN   )r?   r@   r   r  _cluster_namerP   s    r%   r@   z#ClickHouseDropQueryBuilder.__init__  s/    !4555!r'   r  r]   r   r:   c                L    t                                          d|           d S )N
DICTIONARYr?   _set_target)rC   r  rD   s     r%   r  z*ClickHouseDropQueryBuilder.drop_dictionary  s#    L*55555r'   r  c                L    t                                          d|           d S )NQUOTAr6  )rC   r  rD   s     r%   r  z%ClickHouseDropQueryBuilder.drop_quota  s#    GU+++++r'   clusterc                @    | j         rt          d          || _         d S )Nz5'DropQuery' object already has attribute cluster_name)r3  r  )rC   r:  s     r%   
on_clusterz%ClickHouseDropQueryBuilder.on_cluster  s+     	Z !XYYY$r'   r   r   c                     t                      j        di |}| j        dk    r3| j        ,|dt	          | j        t                      j                  z   z  }|S )Nr5  z ON CLUSTER r"   )r?   r   _drop_target_kindr3  r   rF   )rC   r   r  rD   s      r%   r   z"ClickHouseDropQueryBuilder.get_sql  s\    ))&))!\11d6H6T^mD4FHZ&[&[[[Er'   )r  r]   r   r:   )r  r]   r   r:   )r:  r]   r   r:   r   )r2   r3   r4   r  rI   r@   r   r  r  r<  r   rJ   rK   s   @r%   r  r    s        I" " " " " 6 6 6 6 6 W6 , , , , , W, % % % W%
         r'   r  c                        e Zd Zd fdZ xZS )SQLLiteValueWrapperr   r   r   r]   c                    t          | j        t                    r| j        rdndS  t                      j        di |S )N10r"   )r   r   rw   r?   get_value_sqlrB   s     r%   rD  z!SQLLiteValueWrapper.get_value_sql  sE    dj$'' 	.*-33#-$uww$..v...r'   r   )r2   r3   r4   rD  rJ   rK   s   @r%   r@  r@    s=        / / / / / / / / / /r'   r@  c                  *    e Zd ZdZedd            ZdS )	SQLLiteQueryr  r   r   r   SQLLiteQueryBuilderc                    t          di |S r!   )rG  r#   s     r%   r&   zSQLLiteQuery._builder  r   r'   N)r   r   r   rG  r5  r"   r'   r%   rF  rF    s>          - - - [- - -r'   rF  c                  H     e Zd ZeZd
 fdZedd            Zd fd	Z xZ	S )rG  r   r   r   r:   c                l     t                      j        dt          j        t          d| d| _        d S )N)r=   wrapper_clsFr"   )r?   r@   r   SQLLITEr@  _insert_or_replacerB   s     r%   r@   zSQLLiteQueryBuilder.__init__  s:    ]!1?R]]V\]]]"'r'   r  c                6     | j         |  d| _        d| _        d S r|   )_apply_terms_replacerM  )rC   r  s     r%   insert_or_replacez%SQLLiteQueryBuilder.insert_or_replace  s'    5!!"&r'   r]   c                R    | j         rdnd}| t                      j        di |z   S )Nz
INSERT OR r9   r"   )rM  r?   _replace_sql)rC   r   prefixrD   s      r%   rS  z SQLLiteQueryBuilder._replace_sql  s7    !%!8@b,,66v6666r'   rE   r  r   )
r2   r3   r4   rF  rI   r@   r   rQ  rS  rJ   rK   s   @r%   rG  rG    s        I( ( ( ( ( ( ' ' ' W'
7 7 7 7 7 7 7 7 7 7r'   rG  c                  t    e Zd ZdZedd            Zedd            Zeddd            Zedd            ZdS )	JiraQueryz2
    Defines a query class for use with Jira.
    r   JiraQueryBuilderc                    t          di |S r!   )rW  r#   s     r%   r&   zJiraQuery._builder  s    ))&)))r'   r   c                4     t                      j        |i |S r,   )rW  rn  )r$   r   r   s      r%   rn  zJiraQuery.where  s!    '!!'8888r'   r9   
table_namer]   	JiraTablec                     ~t                      S )z=
        Convenience method for creating a JiraTable
        r[  )r$   rZ  _s      r%   r   zJiraQuery.Table  s    
 {{r'   namestuple[str, str] | strr   r   list[JiraTable]c                P    ~d t          t          |                    D             S )zJ
        Convenience method for creating many JiraTable instances
        c                *    g | ]}t                      S r"   r]  )r   r^  s     r%   r   z$JiraQuery.Tables.<locals>.<listcomp>  s    777	777r'   )rangerd  )r$   r_  r   s      r%   TableszJiraQuery.Tables  s)    
 77U3u::%6%67777r'   N)r   rW  )r   r   )r9   )rZ  r]   r   r[  )r_  r`  r   r   r   ra  )	r2   r3   r4   r5   r6   r&   rn  r   re  r"   r'   r%   rV  rV    s          * * * [* 9 9 9 [9     [ 8 8 8 [8 8 8r'   rV  c                  Z     e Zd ZdZdZdZeZd fdZdd fdZ	dddZ
ddZdddZ xZS )rW  zF
    Defines a main query builder class to produce JQL expression
    r9   r8   r   r:   c                     t                      j        ddt          j        i| t	                      g| _        t                      g| _        d| _        d S )Nr=   Tr"   )	r?   r@   r   JIRAr[  r  r   r   _select_starrB   s     r%   r@   zJiraQueryBuilder.__init__  sO    999&999kk]
 r'   Fr   rw   r   r]   c                ^     t                      j        ||fi |                                S r,   )r?   r   strip)rC   r   r   r   rD   s       r%   r   zJiraQueryBuilder.get_sql  s/    uwwz8>>v>>DDFFFr'   r  r^  r   c                    dS )z1
        JQL doen't have from statements
        r9   r"   )rC   r  r^  s      r%   r  zJiraQueryBuilder._from_sql  	     rr'   c                    dS )z3
        JQL doen't have select statements
        r9   r"   )rC   r^  s     r%   r   zJiraQueryBuilder._select_sql  rm  r'   Nr   c                ,     | j         j        d|dd|S )NT)
quote_charr   r"   )_wheresr   )rC   rp  r   s      r%   
_where_sqlzJiraQueryBuilder._where_sql	  s$    #t|#SzDSSFSSSr'   rR   r  )r   rw   r   rw   r   r]   r.  )r  rw   r^  r   r   r]   )r^  r   r   r]   r,   r   )r2   r3   r4   r5   rF   SECONDARY_QUOTE_CHARrV  rI   r@   r   r  r   rr  rJ   rK   s   @r%   rW  rW    s          JI! ! ! ! ! !G G G G G G G       T T T T T T T T Tr'   rW  c                      e Zd Zd
ddZd	S )JiraEmptyCriterionFr   rw   r   r   r   r]   c                v    ~d                      | j        j        di |          }t          || j        fi |S )Nz{term} is EMPTYr   r"   r   r   r   r   aliasrC   r   r   r   s       r%   r   zJiraEmptyCriterion.get_sql  sS    &&"",,V,, ' 
 
  TZ::6:::r'   Nr.  )r   rw   r   r   r   r]   r2   r3   r4   r   r"   r'   r%   ru  ru    -        ; ; ; ; ; ; ;r'   ru  c                      e Zd Zdd	dZdS )
JiraNotEmptyCriterionFr   rw   r   r]   c                v    ~d                      | j        j        di |          }t          || j        fi |S )Nz{term} is not EMPTYrw  r"   rx  rz  s       r%   r   zJiraNotEmptyCriterion.get_sql  sS    #**"",,V,, + 
 
  TZ::6:::r'   Nr.  )r   rw   r   r]   r{  r"   r'   r%   r~  r~    r|  r'   r~  c                      e Zd ZddZddZdS )		JiraFieldr   ru  c                     t          |           S r,   )ru  r   s    r%   isemptyzJiraField.isempty   s    !$'''r'   r~  c                     t          |           S r,   )r~  r   s    r%   notemptyzJiraField.notempty#  s    $T***r'   N)r   ru  )r   r~  )r2   r3   r4   r  r  r"   r'   r%   r  r    s<        ( ( ( (+ + + + + +r'   r  c                  &     e Zd Z fdZddZ xZS )r[  c                J    t                                          d           d S )Nissues)r?   r@   rP   s    r%   r@   zJiraTable.__init__(  s!    """""r'   namer]   r   r  c                $    t          ||           S r~  )r  )rC   r  s     r%   r   zJiraTable.field+  s    T****r'   )r  r]   r   r  )r2   r3   r4   r@   r   rJ   rK   s   @r%   r[  r[  '  sL        # # # # #+ + + + + + + +r'   r[  )B
__future__r   r  r-  r   typingr   pypika.enumsr   pypika.queriesr   r   r	   r
   r   r   r   pypika.termsr   r   r   r   r   r   r   r   r   pypika.utilsr   r   r   r   r   r   r*   r/   rX   rY   r^   rb   rd   r   r   r   r   r"  r2  r3  rD  rE  r  r  r  r  r  r  r  r@  rF  rG  rV  rW  ru  r~  r  r[  r"   r'   r%   <module>r     s-   " " " " " "                  ! ! ! ! ! !                 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 R Q Q Q Q Q Q Q Q Q Q Q= = = = =U = = =$? ? ? ? ?L ? ? ?5 5 5 5 5"4 5 5 55 5 5 5 5 0 5 5 59 9 9 9 9 9 9 9,`
 `
 `
 `
 `
 `
 `
 `
F" " " " " " " "J    0       ,   ? ? ? ? ?5 ? ? ?$    ,   ()I )I )I )I )I 2 )I )I )IX" " " " " " " "J
 
 
 
 
 
 
 
, , , , ,% , , ,    ;   00 0 0 0 0e 0 0 0B B B B B\ B B BJI I I I IE I I I    <   + + + + + + + +:
 :
 :
 :
 :
: :
 :
 :
z!< !< !< !< !<e !< !< !<Hi i i i i\ i i iX    !1   </ / / / /, / / /- - - - -5 - - -7 7 7 7 7, 7 7 7$8 8 8 8 8 8 8 8<T T T T T| T T TD; ; ; ; ; ; ; ;; ; ; ; ;. ; ; ;+ + + + + + + ++ + + + + + + + + +r'   