
    Wi                       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      ZAy)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                  F    e Zd ZdZedd       Zedd       Zedd       Zy)	SnowflakeQueryz7
    Defines a query class for use with Snowflake.
    c                    t        di |S N )SnowflakeQueryBuilderclskwargss     Y/home/obispo/Crisostomo_bridge/mision_env/lib/python3.12/site-packages/pypika/dialects.py_builderzSnowflakeQuery._builder%   s    $.v..    c                4    t               j                  |      S N)SnowflakeCreateQueryBuildercreate_tabler"   tables     r$   r*   zSnowflakeQuery.create_table)   s    *,99%@@r&   c                4    t               j                  |      S r(   )SnowflakeDropQueryBuilder
drop_tabler+   s     r$   r/   zSnowflakeQuery.drop_table-   s    (*55e<<r&   N)r#   r   returnr    )r,   str | Tabler0   r)   )r,   r1   r0   r.   )__name__
__module____qualname____doc__classmethodr%   r*   r/   r   r&   r$   r   r       sE     / / 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" c                D    t        |   ddt        j                  i| y Ndialectr   super__init__r   	SNOWFLAKEselfr#   	__class__s     r$   r?   zSnowflakeQueryBuilder.__init__8   s    >!3!3>v>r&   r#   r   r0   None)
r2   r3   r4   
QUOTE_CHARALIAS_QUOTE_CHARQUERY_ALIAS_QUOTE_CHARr   	QUERY_CLSr?   __classcell__rC   s   @r$   r    r    2   s#    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4r&   r0   rE   r2   r3   r4   rF   r   rI   r?   rJ   rK   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 rN   r=   rP   s    r$   r?   z"SnowflakeDropQueryBuilder.__init__H   rQ   r&   rR   rS   rK   s   @r$   r.   r.   D   rT   r&   r.   c                  X    e Zd ZdZedd       Zedd       Zed	d       Zed
d       Zy)
MySQLQueryz3
    Defines a query class for use with MySQL.
    c                    t        di |S r   )MySQLQueryBuilderr!   s     r$   r%   zMySQLQuery._builderQ        *6**r&   c                4    t               j                  |      S r(   )MySQLLoadQueryBuilderloadr"   fps     r$   r^   zMySQLQuery.loadU   s    $&++B//r&   c                4    t               j                  |      S r(   )MySQLCreateQueryBuilderr*   r+   s     r$   r*   zMySQLQuery.create_tableY   s    &(55e<<r&   c                4    t               j                  |      S r(   )MySQLDropQueryBuilderr/   r+   s     r$   r/   zMySQLQuery.drop_table]   s    $&11%88r&   N)r#   r   r0   rZ   )r`   strr0   r]   )r,   r1   r0   rb   )r,   r1   r0   rd   )	r2   r3   r4   r5   r6   r%   r^   r*   r/   r   r&   r$   rX   rX   L   sW     + + 0 0 = = 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 )rZ   `c                    t        |   ddt        j                  i| g | _        d| _        g | _        d| _        d| _        t               | _
        y Nr<   Fr   )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__f   sM    ::6:"$"'"'',$!er&   c                    t         |          }t        | j                        |_        t        | j                        |_        |S r(   )r>   __copy__r   rk   rl   rB   newonerC   s     r$   rs   zMySQLQueryBuilder.__copy__p   s;    !#$()@)@$A!$()@)@$A!r&   c                N    d| _         || _        || _        t        |      | _        y NT_for_updatero   rn   rp   rq   rB   nowaitskip_lockedofs       r$   
for_updatezMySQLQueryBuilder.for_updatev   &    '2$"(!"gr&   c                    | j                   rt        d      t        |t              st        |      n|}| j                  j                  |t        |      f       y )N"Can not have two conflict handlers)rl   r   
isinstancer   rk   appendr   )rB   fieldvalues      r$   on_duplicate_key_updatez)MySQLQueryBuilder.on_duplicate_key_update}   sI    "" !EFF$.ue$<e%&&|E/B'CDr&   c                @    | j                   rt        d      d| _        y )Nr   T)rk   r   rl   rB   s    r$   on_duplicate_key_ignorez)MySQLQueryBuilder.on_duplicate_key_ignore   s    "" !EFF"&r&   c                    | j                  |       t        |   di |}|rB| j                  r| | j                  di |z  }|S | j
                  r|| j                         z  }|S r   )_set_kwargs_defaultsr>   get_sqlrk   _on_duplicate_key_update_sqlrl   _on_duplicate_key_ignore_sql)rB   r#   querystringrC   s      r$   r   zMySQLQueryBuilder.get_sql   su    !!&)go//&&@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   rq   joinr   r   rn   ro   rB   r#   r~   items       r$   _for_update_sqlz!MySQLQueryBuilder._for_update_sql       &J""TYYZ^ZmZm/nRV0Cd0C0C0Mf0M/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       E5 "((}u}}/Fv/FmemmNe^dNe(fs   A Aupdates)r   r   rk   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)rm   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>   '     mW[LDLLRD4R6Rm   ")distinctr   select)r   	_distinctrm   r   _selectsr   s    `r$   _select_sqlzMySQLQueryBuilder._select_sql   sc    
 5;;$(NN[@DU\\#((4??";<UW88m_c_l_lmm < 
 	
r&   rD   )r0   rZ   FFr   )r{   boolr|   r   r}   tuple[str, ...]r0   rE   )r   zField | strr   r   r0   rE   rR   r#   r   r0   re   r0   re   )r   re   r0   rE   )r2   r3   r4   rF   rX   rI   r?   rs   r   r~   r   r   r   r   r   r   r   r   rJ   rK   s   @r$   rZ   rZ   b   s    JI$ & & E E ' '
* & &	
r&   rZ   c                  d    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y	)r]   c                     d | _         d | _        y r(   )
_load_file_into_tabler   s    r$   r?   zMySQLLoadQueryBuilder.__init__   s    r&   c                    || _         y r(   )r   rB   r`   s     r$   r^   zMySQLLoadQueryBuilder.load   	    r&   c                T    t        |t              r|| _        y t        |      | _        y r(   )r   r   r   rB   r,   s     r$   intozMySQLLoadQueryBuilder.into       $.ue$<5%,r&   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   argsr#   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&   NrR   r`   re   r0   rE   r,   r1   r0   rE   r   r   r#   r   r0   re   r   r   )r2   r3   r4   rX   rI   r?   r   r^   r   r   r   r   r   r   r   r&   r$   r]   r]      sQ    I    O OEM+r&   r]   c                      e Zd ZdZy)rb   rg   Nr2   r3   r4   rF   r   r&   r$   rb   rb          Jr&   rb   c                      e Zd ZdZy)rd   rg   Nr   r   r&   r$   rd   rd      r   r&   rd   c                  F    e Zd ZdZedd       Zedd       Zedd       Zy)	VerticaQueryz5
    Defines a query class for use with Vertica.
    c                    t        di |S r   )VerticaQueryBuilderr!   s     r$   r%   zVerticaQuery._builder       ",V,,r&   c                4    t               j                  |      S r(   )VerticaCopyQueryBuilder	from_filer_   s     r$   r   zVerticaQuery.from_file   s    &(22266r&   c                4    t               j                  |      S r(   )VerticaCreateQueryBuilderr*   r+   s     r$   r*   zVerticaQuery.create_table   s    (*77>>r&   N)r0   r   )r`   re   r0   r   )r,   r1   r0   r   )r2   r3   r4   r5   r6   r%   r   r*   r   r&   r$   r   r      sC     - - 7 7 ? ?r&   r   c                  B     e Zd ZeZd fdZedd       Zd fdZ xZ	S )r   c                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&   c                    || _         y r(   )r   )rB   labels     r$   hintzVerticaQueryBuilder.hint  s	    
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&   rD   )r   re   r0   rE   r   )
r2   r3   r4   r   rI   r?   r   r   r   rJ   rK   s   @r$   r   r     s+    I   r&   r   c                  l     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   c                ^    t         |   t        j                         d| _        d| _        y )NrO   F)r>   r?   r   r   _local_preserve_rowsrP   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&   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_sql5  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_sql@  s    -1-@-@)HbHr&   rR   r   r   )r2   r3   r4   r   rI   r?   r   r   r   r  r  r	  r  rJ   rK   s   @r$   r   r     sJ    I$
   # #


Ir&   r   c                  d    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y	)r   c                     d | _         d | _        y r(   )_copy_table
_from_filer   s    r$   r?   z VerticaCopyQueryBuilder.__init__G  s    r&   c                    || _         y r(   )r  r   s     r$   r   z!VerticaCopyQueryBuilder.from_fileK  r   r&   c                T    t        |t              r|| _        y t        |      | _        y r(   )r   r   r  r   s     r$   copy_zVerticaCopyQueryBuilder.copy_O  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_sqlS  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_sql\  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_sql_  s    !((99r&   c                     y)Nz  PARSER fcsvparser(header=false)r   r   s     r$   r   z$VerticaCopyQueryBuilder._options_sqlb  s    1r&   c                "    | j                         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  sP    I   O OF:2r&   r   c                  .    e Zd ZddZddZedd       Zy)"FetchNextAndOffsetRowsQueryBuilderc                :    dj                  | j                        S )Nz FETCH NEXT {limit} ROWS ONLY)limit)r   _limitr   s    r$   
_limit_sqlz-FetchNextAndOffsetRowsQueryBuilder._limit_sqlj  s    .55DKK5HHr&   c                B    dj                  | j                  xs d      S )Nz OFFSET {offset} ROWSr   )offset)r   _offsetr   s    r$   _offset_sqlz.FetchNextAndOffsetRowsQueryBuilder._offset_sqlm  s    &--T\\5FQ-GGr&   c                F    t        j                  dt               || _        y )Nz:`fetch_next` is deprecated - please use the `limit` method)warningswarnDeprecationWarningr  )rB   r  s     r$   
fetch_nextz-FetchNextAndOffsetRowsQueryBuilder.fetch_nextp  s    RTfgr&   Nr   )r  intr0   rE   )r2   r3   r4   r  r"  r   r'  r   r&   r$   r  r  i  s"    IH  r&   r  c                  "    e Zd ZdZedd       Zy)OracleQueryz4
    Defines a query class for use with Oracle.
    c                    t        di |S r   )OracleQueryBuilderr!   s     r$   r%   zOracleQuery._builder{  s    !+F++r&   N)r#   r   r0   r,  r2   r3   r4   r5   r6   r%   r   r&   r$   r*  r*  v  s     , ,r&   r*  c                  <     e Zd ZdZeZd fdZd fdZddZ xZ	S )r,  Nc                D    t        |   ddt        j                  i| y r;   )r>   r?   r   ORACLErA   s     r$   r?   zOracleQueryBuilder.__init__  s    ;;F;r&   c                ,    d|d<   t        |   |i |S NFgroupby_aliasr>   r   rB   r   r#   rC   s      r$   r   zOracleQueryBuilder.get_sql  #     #(w///r&   c                    | j                   r|| j                         z  }| j                  || j                         z  }|S r(   )r!  r"  r  r  rB   r   r#   s      r$   _apply_paginationz$OracleQueryBuilder._apply_pagination  s=    <<4++--K;;"4??,,Kr&   rD   r   r   re   r0   re   )
r2   r3   r4   rF   r*  rI   r?   r   r9  rJ   rK   s   @r$   r,  r,    s    JI<0r&   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r0   r>  r-  r   r&   r$   r<  r<    s     0 0r&   r<  c                  6    e Zd ZdZeZd fdZd 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d! fd	       Zed"d
       Zd# fdZd$dZd#dZd%dZd#dZed&d       Zd'dZddZd(dZd(dZd)dZd#dZd*d+ fdZ xZS ),r>  r8   c                    t        |   ddt        j                  i| g | _        d| _        d| _        g | _        d| _        g | _	        d | _
        d | _        g | _        d| _        d| _        t               | _        y 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   rA   s     r$   r?   zPostgreSQLQueryBuilder.__init__  s    ?!4!4??!!#% ',$')$#' -1*"'',$!er&   c                    t         |          }t        | j                        |_        t        | j                        |_        |S r(   )r>   rs   r   rC  rH  rt   s     r$   rs   zPostgreSQLQueryBuilder.__copy__  s8    !#t}}-)-d.J.J)K&r&   c                    |D ]c  }t        |t              r%| j                  j                  t	        |             8t        |t
              sI| j                  j                  |       e y r(   r   re   rK  r   r   r   rB   fieldsr   s      r$   distinct_onz"PostgreSQLQueryBuilder.distinct_on  Q     	0E%%!!((u6E4(!!((/		0r&   c                N    d| _         || _        || _        t        |      | _        y rw   rx   rz   s       r$   r~   z!PostgreSQLQueryBuilder.for_update  r   r&   c                   | 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   rE  r   re   rF  r   _conflict_field_strr   )rB   target_fieldstarget_fields      r$   on_conflictz"PostgreSQLQueryBuilder.on_conflict  su    !! !KLL ) 	>L,,((//0H0H0VWL$/((//=		>r&   c                X    t        | j                        dkD  rt        d      d| _        y )Nr   r   T)lenrH  r   rG  r   s    r$   
do_nothingz!PostgreSQLQueryBuilder.do_nothing  s)    t++,q0 !EFF'+$r&   c                >   | 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)	rG  r   r   re   rV  r   rH  r   r   )rB   update_fieldupdate_valuer   s       r$   	do_updatez PostgreSQLQueryBuilder.do_update  s    '' !EFFlC(,,\:Ee, E !;<<#((//\8R0ST((//>r&   c                   | 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)rE  r>   wherer   r   rG  r   rF  rH  rJ  rI  )rB   	criterionrC   s     r$   rb  zPostgreSQLQueryBuilder.where  s      7=++i0'' !EFF##(D(D1122i?25>2%%''((I5(+4( !KLLr&   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 )N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>  %     $kQU\T\\%LT%LV%L$k   !rQ  r   rK  r   r   r>   _distinct_sqlrA   s    `r$   ro  z$PostgreSQLQueryBuilder._distinct_sql  R    077HH$kY]YjYj$kk 8   w$.v..r&   c                J    | j                   rt        || j                         S y Nr,   )rU  r   rB   r   s     r$   rV  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   rb  r   )	rG  r[  rH  rF  r   r   r   rI  r   )rB   r#   conflict_queryfrP  s        r$   _on_conflict_sqlz'PostgreSQLQueryBuilder._on_conflict_sql  s    ++D4P4P0QUV0V++ !EFF''0H0H !OPP'##DHD\D\]qiaii:4:6:]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   rw  )r   r~  rx  r9   r   )rG  r[  rH  r   r   r   r   rJ  )rB   r#   r   r   r   
action_sqls         r$   _on_conflict_action_sqlz.PostgreSQLQueryBuilder._on_conflict_action_sql9  s<   '' --.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&   c                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_fieldre   _return_field_strr   r   is_aggregater   _return_otherwrap_constant_wrapper_cls)rB   termsr   s      r$   	returningz PostgreSQLQueryBuilder.returningW  s     
	PD$&""4(D#&&&t,D8-A"BC$$()[\\""4(""4#5#5dD<M<M#NO
	P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_anyrU  _update_table_delete_fromr   r,   rp   	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_terme  s    \\^ 		KE**D,>,>@Q@QRS$%LMM.3kkd>P>PRVRdRd=e.e+ioo;;Z^ZeZe<fUVQ[[=P=P<fghK#&tzz?[#@ %)$,,9M*M%N"27M$%IJJ		K
 =gs   Dc                t    | j                   D cg c]  }t        |d      r| c}| _         d| _        y c c}w )Nr,   T)rC  hasattrrD  )rB   r  s     r$   _set_returns_for_starz,PostgreSQLQueryBuilder._set_returns_for_starq  s1    48MMeyQZ\cIde  fs   55c                    | j                   ry | j                  |       t        |t              r| j	                          | j
                  j                  |       y r(   )rD  r  r   r   r  rC  r   rt  s     r$   r  z$PostgreSQLQueryBuilder._return_fieldu  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*rs  r   r  )r  rC  r   r   rU  r  r   r  r  r  r   rt  s     r$   r  z(PostgreSQLQueryBuilder._return_field_str  s    3;&&(MM  (uT1C1CDEuT1C1CDEuTA?@ !HIIr&   c                \    | j                  |       | j                  j                  |       y r(   )r  rC  r   )rB   functions     r$   r  z$PostgreSQLQueryBuilder._return_other  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rj  r   r   s     r$   r   z8PostgreSQLQueryBuilder._returning_sql.<locals>.<genexpr>  s$     a4|t||FtFvFarl  )r  )r   r   rC  r   s    `r$   _returning_sqlz%PostgreSQLQueryBuilder._returning_sql  s4    '..hhaSWS`S`aa / 
 	
r&   c                   | j                  |       t        |   ||fi |}| | j                  di |z  }| | j                  di |z  }| j
                  r2| j                  xr | j                  |d<   | | j                  di |z  }|S )Nr~  r   )	r   r>   r   r{  r  rC  r  from_r  )rB   r   r   r#   r   rC   s        r$   r   zPostgreSQLQueryBuilder.get_sql  s    !!&)goj(EfE,t,,6v663t33=f===='+'9'9'HdjjF#$.4..888Kr&   rD   r?  rP  
str | Termr0   rE   r   )r{   r   r|   r   r}   r   r0   r   )rW  r  r0   rE   rR   r(   )r^  str | Fieldr_  z
Any | Noner0   rE   )rc  r   r0   rE   )r,   zSelectable | strr0   rE   r   )r   re   r0   zField | Noner   r  r   r0   rE   )r   r   r0   rE   )r   r  r0   rE   )r  r   r0   rE   FF)r   r   r   r   r#   r   r0   re   )r2   r3   r4   rG   r<  rI   r?   rs   r   rQ  r~   rY  r\  r`  rb  rf  ro  rV  r{  r   r  r  r  r  r  r  r  r  r   rJ   rK   s   @r$   r>  r>    s    I$$ 0 0 & & 
> 
> , ,
 ? ?  M M. " "/9&< P P
K!
#J'

 r&   r>  c                  "    e Zd ZdZedd       Zy)RedshiftQueryz=
    Defines a query class for use with Amazon Redshift.
    c                8    t        ddt        j                  i|S r;   )RedShiftQueryBuilderr   REDSHIFTr!   s     r$   r%   zRedshiftQuery._builder  s    #HH,=,=HHHr&   N)r#   r   r0   r  r-  r   r&   r$   r  r    s     I Ir&   r  c                      e Zd ZeZy)r  N)r2   r3   r4   r  rI   r   r&   r$   r  r    s    Ir&   r  c                  "    e Zd ZdZedd       Zy)
MSSQLQueryB
    Defines a query class for use with Microsoft SQL Server.
    c                    t        di |S r   )MSSQLQueryBuilderr!   s     r$   r%   zMSSQLQuery._builder  r[   r&   N)r#   r   r0   r  r-  r   r&   r$   r  r    s     + +r&   r  c                  \     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  c                n    t        |   ddt        j                  i| d | _        d| _        d| _        y ri   )r>   r?   r   MSSQL_top_top_with_ties_top_percentrA   s     r$   r?   zMSSQLQueryBuilder.__init__  s3    ::6: $	$)"'r&   c                    	 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)r(  r  
ValueErrorr   r  r  )rB   r   percent	with_tiess       r$   topzMSSQLQueryBuilder.top  st    	AE
DI AU2s2 !eff 3 !eff")$-  	A !?@@	As   A A#c                    | j                   | j                  r|| j                         z  }| j                   || j                         z  }|S r(   )r  r!  r"  r  r8  s      r$   r9  z#MSSQLQueryBuilder._apply_pagination  sF    ;;"dll4++--K;;"4??,,Kr&   c                ,    d|d<   t        |   |i |S r2  r4  r5  s      r$   r   zMSSQLQueryBuilder.get_sql  r6  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&   rD   r  )r   z	str | intr  r   r  r   r0   rE   r:  r   r   r   )r2   r3   r4   r  rI   r?   r   r  r9  r   r  r   rJ   rK   s   @r$   r  r    s5    I( . .	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y	)ClickHouseQueryz?
    Defines a query class for use with Yandex ClickHouse.
    c                <    t        dt        j                  ddd|S )NFT)r<   wrap_set_operation_queries
as_keywordr   )ClickHouseQueryBuilderr   
CLICKHOUSEr!   s     r$   r%   zClickHouseQuery._builder  s*    % 
''EVZ
^d
 	
r&   c                4    t               j                  |      S r(   )ClickHouseDropQueryBuilderdrop_database)rB   databases     r$   r  zClickHouseQuery.drop_database  s    )+99(CCr&   c                4    t               j                  |      S r(   )r  r/   r   s     r$   r/   zClickHouseQuery.drop_table      )+66u==r&   c                4    t               j                  |      S r(   )r  drop_dictionary)rB   
dictionarys     r$   r  zClickHouseQuery.drop_dictionary  s    )+;;JGGr&   c                4    t               j                  |      S r(   )r  
drop_quota)rB   quotas     r$   r  zClickHouseQuery.drop_quota  r  r&   c                4    t               j                  |      S r(   )r  	drop_user)rB   users     r$   r  zClickHouseQuery.drop_user      )+55d;;r&   c                4    t               j                  |      S r(   )r  	drop_view)rB   views     r$   r  zClickHouseQuery.drop_view  r  r&   N)r#   r   r0   r  )r  zDatabase | strr0   r  )r,   zTable | strr0   r  )r  re   r0   r  )r  re   r0   r  )r  re   r0   r  )r  re   r0   r  )r2   r3   r4   r5   r6   r%   r  r/   r  r  r  r  r   r&   r$   r  r    s     
 

 D D > > 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dd       Zedd       Zd fdZddZd fdZ xZS )r  z
list[Term]rK  z"tuple[int, int, list[Term]] | None	_limit_byc                j    t        |   di | d| _        d | _        d | _        g | _        d | _        y )NFr   )r>   r?   _final_sample_sample_offsetrK  r  rA   s     r$   r?   zClickHouseQueryBuilder.__init__&  s8    "6""r&   c                X    t         |          }t        | j                        |_        |S r(   )r>   rs   r   r  rt   s     r$   rs   zClickHouseQueryBuilder.__copy__.  s&    !#/r&   c                    d| _         y rw   )r  r   s    r$   finalzClickHouseQueryBuilder.final3  s	    r&   c                     || _         || _        y r(   )r  r  )rB   sampler   s      r$   r  zClickHouseQueryBuilder.sample7  s    $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}rs  r   )r   r  r   r   s     r$   _update_sqlz"ClickHouseQueryBuilder._update_sql@  s-    $++2L$2D2D2L2L2Vv2V+WWr&   c                   dj                  fd| j                  D              }| j                  rd| dS |g}| j                  dur|j	                  d       | j
                  |j	                  d| j
                          | j                  |j	                  d| j                          d	j                  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>D  s'     p[anfnnVdtVvVpr   r   z DELETEFFINALzSAMPLE zOFFSET z FROM {clauses})clauses)r   r  r  r  r   r  r  r   )rB   r~  r#   
selectabler  s     `  r$   	_from_sqlz ClickHouseQueryBuilder._from_sqlC  s    XXpeieoeopp
zl'**,;;e#NN7#<<#NNWT\\N34*NNWT%8%8$9:; ''0A'BBr&   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)r~  r   Nr   )r   r   dictr   s      r$   r   z2ClickHouseQueryBuilder._set_sql.<locals>.<genexpr>R  s\       !E5 "(('%--M$ve*LMUbUZUbUbUlekUl ) s   AA)rp   )r   r   _updatesr   s    `r$   _set_sqlzClickHouseQueryBuilder._set_sqlP  s:    %%  %)MM	  & 
 	
r&   c                    |D ]c  }t        |t              r%| j                  j                  t	        |             8t        |t
              sI| j                  j                  |       e y r(   rN  rO  s      r$   rQ  z"ClickHouseQueryBuilder.distinct_onZ  rR  r&   c                    | j                   r4dj                  dj                  fd| j                   D                    S t        |   di S )Nrh  r   c              3  F   K   | ]  } |j                   dd di  ywrj  r   r   s     r$   r   z7ClickHouseQueryBuilder._distinct_sql.<locals>.<genexpr>e  rk  rl  rm  r   rn  rA   s    `r$   ro  z$ClickHouseQueryBuilder._distinct_sqlb  rp  r&   c           	     t    |d|D cg c]  }t        |t              rt        |      n|! c}f| _        y c c}w )Nr   r   re   r   r  )rB   nbyr   s       r$   limit_byzClickHouseQueryBuilder.limit_byi  s2    Q`b cW\E31GuU!R cd c   $5c           	     t    |||D cg c]  }t        |t              rt        |      n|! c}f| _        y c c}w r(   r  )rB   r  r   r  r   s        r$   limit_offset_byz&ClickHouseQueryBuilder.limit_offset_bym  s3    Veg%h\aj6LeElRW&W%hi%hr	  c                f    | j                   r| | j                  di |z  }t        |   |fi |S r   )r  _limit_by_sqlr>   r9  )rB   r   r#   rC   s      r$   r9  z(ClickHouseQueryBuilder._apply_paginationq  s<     >>-4--777Kw(???r&   c                    | j                   \  }}}dj                  fd|D              }|dk7  rd| d| d| dS d| d| dS )Nr   c              3  F   K   | ]  } |j                   dd di  ywrj  r   r   s     r$   r   z7ClickHouseQueryBuilder._limit_by_sql.<locals>.<genexpr>{  s$     M$ldll=d=f=Mrl  r   z LIMIT z OFFSET z BY (rv  )r  r   )rB   r#   r  r   r  s    `   r$   r  z$ClickHouseQueryBuilder._limit_by_sqly  s]    ..FBXXM"MMQ;QCxxuRD::QCuRD**r&   c           	         t         |   ||      }| j                  rO| j                  d   | j                  d   | j                  d   D cg c]  }|j                  ||       c}f|_        |S c c}w )Nr         )r>   replace_tabler  )rB   current_table	new_tableru   columnrC   s        r$   r  z$ClickHouseQueryBuilder.replace_table  so    &}i@>>q!q!NRnn]^N_`F%%mY?` F
  as   A/rR   )r0   r  r(   )r  r(  r   z
int | Noner0   rE   r   F)r~  r   r#   r   r0   re   r  )r  r  r0   rE   r:  )r  Table | Noner  r  r0   r  )r2   r3   r4   r  rI   __annotations__r?   rs   r   r  r  staticmethodr  r  r  r   rQ  ro  r  r  r9  r  r  rJ   rK   s   @r$   r  r     s    I11
   % %  XC
 0 0/ e e j j@+ r&   r  c                  l     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                P    t         |   t        j                         d | _        y rN   )r>   r?   r   r  _cluster_namerP   s    r$   r?   z#ClickHouseDropQueryBuilder.__init__  s!    !4!45!r&   c                &    t         |   d|       y )N
DICTIONARYr>   _set_target)rB   r  rC   s     r$   r  z*ClickHouseDropQueryBuilder.drop_dictionary  s    L*5r&   c                &    t         |   d|       y )NQUOTAr   )rB   r  rC   s     r$   r  z%ClickHouseDropQueryBuilder.drop_quota  s    GU+r&   c                @    | j                   rt        d      || _         y )Nz5'DropQuery' object already has attribute cluster_name)r  r   )rB   clusters     r$   
on_clusterz%ClickHouseDropQueryBuilder.on_cluster  s     !XYY$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   rF   )rB   r#   r  rC   s      r$   r   z"ClickHouseDropQueryBuilder.get_sql  sS    )&)!!\1d6H6H6T^mD4F4FHZ&[[[Er&   )r  re   r0   rE   )r  re   r0   rE   )r%  re   r0   rE   r   )r2   r3   r4   r  rI   r?   r   r  r  r&  r   rJ   rK   s   @r$   r  r    sS    I" 6 6 , , % %
 r&   r  c                        e Zd Zd fdZ xZS )SQLLiteValueWrapperc                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_sql  s5    djj$'**3-#-w$.v..r&   r   )r2   r3   r4   r.  rJ   rK   s   @r$   r*  r*    s    / /r&   r*  c                  "    e Zd ZdZedd       Zy)SQLLiteQueryr  c                    t        di |S r   )SQLLiteQueryBuilderr!   s     r$   r%   zSQLLiteQuery._builder  r   r&   N)r#   r   r0   r2  r-  r   r&   r$   r0  r0    s     - -r&   r0  c                  B     e Zd ZeZd fdZedd       Zd fdZ xZ	S )r2  c                \    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__  s*    ]!1!1?R]V\]"'r&   c                >     | j                   |  d| _        d| _        y rw   )_apply_terms_replacer7  )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   )r7  r>   _replace_sql)rB   r#   prefixrC   s      r$   r=  z SQLLiteQueryBuilder._replace_sql  s*    !%!8!8b,6v666r&   rD   r  r   )
r2   r3   r4   r0  rI   r?   r   r;  r=  rJ   rK   s   @r$   r2  r2    s+    I( ' '
7 7r&   r2  c                  Z    e Zd ZdZedd       Zedd       Zed	d
d       Zedd       Zy)	JiraQueryz2
    Defines a query class for use with Jira.
    c                    t        di |S r   )JiraQueryBuilderr!   s     r$   r%   zJiraQuery._builder  s    )&))r&   c                6     t               j                  |i |S r(   )rB  rb  )r"   r   r#   s      r$   rb  zJiraQuery.where  s    '!''888r&   c                    ~t               S )z=
        Convenience method for creating a JiraTable
        )	JiraTable)r"   
table_name_s      r$   r   zJiraQuery.Table  s    
 {r&   c                b    ~t        t        |            D cg c]  }t                c}S c c}w )zJ
        Convenience method for creating many JiraTable instances
        )ranger[  rE  )r"   namesr#   rG  s       r$   TableszJiraQuery.Tables  s&    
 %*3u:%67	777s   ,N)r0   rB  )r0   r   )r9   )rF  re   r0   rE  )rJ  ztuple[str, str] | strr#   r   r0   zlist[JiraTable])	r2   r3   r4   r5   r6   r%   rb  r   rK  r   r&   r$   r@  r@    sW     * * 9 9   8 8r&   r@  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 )rB  zF
    Defines a main query builder class to produce JQL expression
    r9   r8   c                    t        |   ddt        j                  i| t	               g| _        t               g| _        d| _        y )Nr<   Tr   )	r>   r?   r   JIRArE  r  r   r   _select_starrA   s     r$   r?   zJiraQueryBuilder.__init__  s:    99&9k]
 r&   c                B    t        |   ||fi |j                         S r(   )r>   r   strip)rB   r   r   r#   rC   s       r$   r   zJiraQueryBuilder.get_sql  s"    wz8>v>DDFFr&   c                     y)z1
        JQL doen't have from statements
        r9   r   )rB   r~  rG  s      r$   r  zJiraQueryBuilder._from_sql       r&   c                     y)z3
        JQL doen't have select statements
        r9   r   )rB   rG  s     r$   r   zJiraQueryBuilder._select_sql  rS  r&   c                @     | j                   j                  d|dd|S )NT)
quote_charr   r   )_wheresr   )rB   rV  r#   s      r$   
_where_sqlzJiraQueryBuilder._where_sql	  s#    #t||##SzDSFSSr&   rR   r  )r   r   r   r   r0   re   r  )r~  r   rG  r   r0   re   )rG  r   r0   re   r(   r   )r2   r3   r4   r5   rF   SECONDARY_QUOTE_CHARr@  rI   r?   r   r  r   rX  rJ   rK   s   @r$   rB  rB    s;     JI!GT Tr&   rB  c                      e Zd ZdddZy)JiraEmptyCriterionc                    ~dj                   | j                  j                  di |      }t        || j                  fi |S )Nz{term} is EMPTYr   r   r   r   r   r   aliasrB   r   r#   r   s       r$   r   zJiraEmptyCriterion.get_sql  sI    &&""",V, ' 
  TZZ:6::r&   Nr  )r   r   r#   r   r0   re   r2   r3   r4   r   r   r&   r$   r[  r[        ;r&   r[  c                      e Zd ZdddZy)JiraNotEmptyCriterionc                    ~dj                   | j                  j                  di |      }t        || j                  fi |S )Nz{term} is not EMPTYr]  r   r^  r`  s       r$   r   zJiraNotEmptyCriterion.get_sql  sI    #**""",V, + 
  TZZ:6::r&   Nr  )r   r   r0   re   ra  r   r&   r$   rd  rd    rb  r&   rd  c                      e Zd ZddZddZy)	JiraFieldc                    t        |       S r(   )r[  r   s    r$   isemptyzJiraField.isempty   s    !$''r&   c                    t        |       S r(   )rd  r   s    r$   notemptyzJiraField.notempty#  s    $T**r&   N)r0   r[  )r0   rd  )r2   r3   r4   ri  rk  r   r&   r$   rg  rg    s    (+r&   rg  c                  &     e Zd Z fdZddZ xZS )rE  c                $    t         |   d       y )Nissues)r>   r?   rP   s    r$   r?   zJiraTable.__init__(  s    "r&   c                    t        ||       S rr  )rg  )rB   names     r$   r   zJiraTable.field+  s    T**r&   )rp  re   r0   rg  )r2   r3   r4   r?   r   rJ   rK   s   @r$   rE  rE  '  s    #+r&   rE  )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   rZ   r]   rb   rd   r   r   r   r   r  r*  r,  r<  r>  r  r  r  r  r  r  r  r*  r0  r2  r@  rB  r[  rd  rg  rE  r   r&   r$   <module>rw     s   "     !  
 
 
 R Q=U =$?L ?5"4 55 0 59 9,`
 `
F" "J0 , ?5 ?$, ()I 2 )IX" "J
 
,% ,; 00e 0B\ BJIE I< + +:
: :
z!<e !<Hi\ iX!1 </, /-5 -7, 7$8 8<T| TD; ;;. ;+ ++ +r&   