Ë
    ^Qêjn* ã                  ó¬  — d dl m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 d dl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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( e	rejR                  d
k\  rd dlm*Z* nd dl+m*Z* dZ,dZ- edd¬«      Z. G d„ de«      Z/ G d„ de/«      Z0 G d„ d«      Z1 G d„ de1«      Z2 G d„ de/«      Z3d4d„Z4 G d„ d«      Z5d5d„Z6 G d„ d «      Z7e3Z8 G d!„ d"«      Z9 G d#„ d$e/e«      Z: G d%„ de/e«      Z; G d&„ d'ee.   «      Z< G d(„ d)«      Z= G d*„ d+e=«      Z> G d,„ d-e=«      Z? G d.„ d/«      Z@ G d0„ d1«      ZA G d2„ d3«      ZBy)6é    )ÚannotationsN)ÚSequence)Úcopy)Úreduce)ÚTYPE_CHECKINGÚAnyÚGenericÚTypeVar)ÚDialectsÚJoinTypeÚReferenceOptionÚSetOperation)ÚArithmeticExpressionÚ	CriterionÚEmptyCriterionÚFieldÚFunctionÚIndexÚNodeÚPeriodCriterionÚRollupÚStarÚTermÚTupleÚValueWrapper)ÚJoinExceptionÚQueryExceptionÚRollupExceptionÚSetOperationExceptionÚbuilderÚformat_alias_sqlÚformat_quotesÚignore_copy)é   é   )ÚSelfzTimothy Heysztheys@kayak.comÚQBÚQueryBuilder)Úboundc                  ól   — e Zd Zd	d„Zed	d„«       Zd
d„Zedd„«       Ze	d
d„«       Z
e	d
d„«       Zdd„Zy)Ú
Selectablec                ó   — || _         y ©N©Úalias©Úselfr/   s     úS/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/pypika/queries.pyÚ__init__zSelectable.__init__2   s	   € Øˆ�
ó    c                ó   — || _         y r-   r.   r0   s     r2   Úas_zSelectable.as_5   s	   € àˆ�
r4   c                ó   — t        || ¬«      S )N©Útable)r   ©r1   Únames     r2   ÚfieldzSelectable.field9   s   € Ü�T Ô&Ð&r4   c                ó   — t        | «      S r-   )r   ©r1   s    r2   ÚstarzSelectable.star<   s   € ä�D‹zÐr4   c                ó$   — | j                  |«      S r-   ©r<   r:   s     r2   Ú__getattr__zSelectable.__getattr__@   ó   € à�z‰z˜$ÓÐr4   c                ó$   — | j                  |«      S r-   rA   r:   s     r2   Ú__getitem__zSelectable.__getitem__D   rC   r4   c                ó   — | j                   S r-   r.   r>   s    r2   Úget_table_namezSelectable.get_table_nameH   s   € Ø�z‰zÐr4   N)r/   ÚstrÚreturnÚNone)r;   rH   rI   r   )rI   r   ©rI   rH   )Ú__name__Ú
__module__Ú__qualname__r3   r    r6   r<   Úpropertyr?   r#   rB   rE   rG   © r4   r2   r+   r+   1   sa   „ óð òó ðó'ð òó ðð ò ó ð ð ò ó ð ôr4   r+   c                  ó:   ‡ — e Zd Zddˆ fd„Zdd„Zdd„Zd	d„Zˆ xZS )
ÚAliasedQueryc                óB   •— t         ‰| �  |¬«       || _        || _        y )Nr.   )Úsuperr3   r;   Úquery)r1   r;   rU   Ú	__class__s      €r2   r3   zAliasedQuery.__init__M   s!   ø€ Ü‰Ñ˜tÐÔ$ØˆŒ	Øˆ�
r4   c                ój   — | j                   €| j                  S  | j                   j                  di |¤ŽS ©NrP   )rU   r;   Úget_sql©r1   Úkwargss     r2   rY   zAliasedQuery.get_sqlR   s0   € Ø�:‰:ÐØ—9‘9ÐØ!ˆt�z‰z×!Ñ!Ñ+ FÑ+Ð+r4   c                óX   — t        |t        «      xr | j                  |j                  k(  S r-   )Ú
isinstancerR   r;   ©r1   Úothers     r2   Ú__eq__zAliasedQuery.__eq__W   s!   € Ü˜%¤Ó.ÒJ°4·9±9ÀÇ
Á
Ñ3JÐJr4   c                ó>   — t        t        | j                  «      «      S r-   )ÚhashrH   r;   r>   s    r2   Ú__hash__zAliasedQuery.__hash__Z   s   € Ü”C˜Ÿ	™	“NÓ#Ð#r4   r-   )r;   rH   rU   zSelectable | NonerI   rJ   ©r[   r   rI   rH   )r_   rR   rI   Úbool©rI   Úint)rL   rM   rN   r3   rY   r`   rc   Ú__classcell__©rV   s   @r2   rR   rR   L   s   ø„ öó
,ó
K÷$r4   rR   c                  óB   — e Zd Zddd„Zd	d„Zd	d„Zed
d„«       Zddd„Zy)ÚSchemaNc                ó    — || _         || _        y r-   )Ú_nameÚ_parent)r1   r;   Úparents      r2   r3   zSchema.__init___   s   € ØˆŒ
Øˆ�r4   c                óŽ   — t        |t        «      xr4 | j                  |j                  k(  xr | j                  |j                  k(  S r-   )r]   rk   rm   rn   r^   s     r2   r`   zSchema.__eq__c   s6   € Ü˜%¤Ó(Òh¨T¯Z©Z¸5¿;¹;Ñ-FÒhÈ4Ï<É<Ð[`×[hÑ[hÑKhÐhr4   c                ó&   — | j                  |«       S r-   ©r`   r^   s     r2   Ú__ne__zSchema.__ne__f   ó   € Ø—;‘;˜uÓ%Ð%Ð%r4   c                ó   — t        || ¬«      S )N©Úschema©ÚTable©r1   Úitems     r2   rB   zSchema.__getattr__i   s   € ä�T $Ô'Ð'r4   c                ó¨   — t        | j                  |«      }| j                  �/dj                   | j                  j                  dd|i|¤Ž|¬«      S |S )Nz{parent}.{schema}Ú
quote_char)ro   rw   rP   )r"   rm   rn   ÚformatrY   )r1   r}   r[   Ú
schema_sqls       r2   rY   zSchema.get_sqlm   s[   € Ü" 4§:¡:¨zÓ:ˆ
à�<‰<Ð#Ø&×-Ñ-Ø+�t—|‘|×+Ñ+ÑL°zÐLÀVÑLØ!ð .ó ð ð
 Ðr4   r-   )r;   rH   ro   zSchema | NonerI   rJ   )r_   rk   rI   re   )r{   rH   rI   ry   ©r}   ú
str | Noner[   r   rI   rH   )	rL   rM   rN   r3   r`   rs   r#   rB   rY   rP   r4   r2   rk   rk   ^   s+   „ ôóió&ð ò(ó ð(õ	r4   rk   c                  ó   — e Zd Zedd„«       Zy)ÚDatabasec                ó   — t        || ¬«      S ©N)ro   ©rk   rz   s     r2   rB   zDatabase.__getattr__z   s   € ä�d 4Ô(Ð(r4   N)r{   rH   rI   rk   )rL   rM   rN   r#   rB   rP   r4   r2   rƒ   rƒ   y   s   „ Øò)ó ñ)r4   rƒ   c                  óÀ   ‡ — e Zd Zedd„«       Z	 	 	 d	 	 	 	 	 	 	 	 	 dˆ fd„Zdd„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d„Zdd„Zdd„Zˆ xZS )ry   c                ó¨   — t        | t        «      r| S t        | t        t        f«      rt	        d„ | dd  t        | d   «      «      S | �t        | «      S y )Nc                ó   — t        || ¬«      S r…   r†   )ÚobjÚss     r2   ú<lambda>z$Table._init_schema.<locals>.<lambda>‡   s   € ¬°¸#Ô)>€ r4   é   r   )r]   rk   ÚlistÚtupler   rv   s    r2   Ú_init_schemazTable._init_schema€   sV   € ô �fœfÔ%ØˆMÜ�fœt¤U˜mÔ,ÜÑ>ÀÀqÀrÀ
ÌFÐSYÐZ[ÑS\ÓL]Ó^Ð^ØÐÜ˜&“>Ð!Ør4   c                óâ   •— t         ‰| �  |«       || _        | j                  |«      | _        |xs t
        | _        d | _        d | _        t        | j                  t
        «      st        d«      ‚y )Nz,Expected 'query_cls' to be subclass of Query)rT   r3   Ú_table_namer�   Ú_schemaÚQueryÚ
_query_clsÚ_forÚ_for_portionÚ
issubclassÚ	TypeError)r1   r;   rw   r/   Ú	query_clsrV   s        €r2   r3   zTable.__init__Œ   sf   ø€ ô 	‰Ñ˜ÔØˆÔØ×(Ñ(¨Ó0ˆŒØ#Ò,¤uˆŒØˆŒ	Ø ˆÔÜ˜$Ÿ/™/¬5Ô1ÜÐJÓKÐKð 2r4   c                ó6   — | j                   xs | j                  S r-   )r/   r’   r>   s    r2   rG   zTable.get_table_nameœ   s   € Ø�z‰zÒ-˜T×-Ñ-Ð-r4   c                óÖ  — |j                  d«      }t        | j                  |«      }| j                  �-dj	                   | j                  j
                  di |¤Ž|¬«      }| j                  r.dj	                  | | j                  j
                  di |¤Ž¬«      }n9| j                  r-dj	                  | | j                  j
                  di |¤Ž¬«      }t        || j                  fi |¤ŽS )Nr}   z{schema}.{table})rw   r9   z{table} FOR {criterion})r9   Ú	criterionz"{table} FOR PORTION OF {criterion}rP   )
Úgetr"   r’   r“   r~   rY   r–   r—   r!   r/   )r1   r[   r}   Ú	table_sqls       r2   rY   zTable.get_sqlŸ   sà   € Ø—Z‘Z Ó-ˆ
Ü! $×"2Ñ"2°JÓ?ˆ	à�<‰<Ð#Ø*×1Ñ1Ð9M¸¿¹×9MÑ9MÑ9WÐPVÑ9WÐ_hÐ1ÓiˆIà�9Š9Ø1×8Ñ8¸yÐTeÐTX×T]ÑT]×TeÑTeÑToÐhnÑToÐ8Óp‰IØ×ÒØ<×CÑCØÐ+D¨4×+<Ñ+<×+DÑ+DÑ+NÀvÑ+Nð Dó ˆIô   	¨4¯:©:Ñ@¸Ñ@Ð@r4   c                ón   — | j                   rt        d«      ‚| j                  rt        d«      ‚|| _         y )Nú)'Query' object already has attribute for_ú0'Query' object already has attribute for_portion)r–   ÚAttributeErrorr—   )r1   Útemporal_criterions     r2   Úfor_z
Table.for_¯   s1   € à�9Š9Ü Ð!LÓMÐMØ×ÒÜ Ð!SÓTÐTØ&ˆ�	r4   c                ón   — | j                   rt        d«      ‚| j                  rt        d«      ‚|| _         y )Nr¢   r¡   )r—   r£   r–   )r1   Úperiod_criterions     r2   Úfor_portionzTable.for_portion·   s2   € à×ÒÜ Ð!SÓTÐTØ�9Š9Ü Ð!LÓMÐMØ,ˆÕr4   c                ó&   — | j                  d¬«      S ©Nú"©r}   ©rY   r>   s    r2   Ú__str__zTable.__str__¿   ó   € Ø�|‰| sˆ|Ó+Ð+r4   c                óÂ   — t        |t        «      sy| j                  |j                  k7  ry| j                  |j                  k7  ry| j                  |j                  k7  ryy©NFT)r]   ry   r’   r“   r/   r^   s     r2   r`   zTable.__eq__Â   sO   € Ü˜%¤Ô'Øà×Ñ˜u×0Ñ0Ò0Øà�<‰<˜5Ÿ=™=Ò(Øà�:‰:˜Ÿ™Ò$Øàr4   c                óœ   — | j                   r&dj                  | j                  | j                   «      S dj                  | j                  «      S )NzTable('{}', schema='{}')zTable('{}'))r“   r~   r’   r>   s    r2   Ú__repr__zTable.__repr__Ñ   s=   € Ø�<Š<Ø-×4Ñ4°T×5EÑ5EÀtÇ|Á|ÓTÐTØ×#Ñ# D×$4Ñ$4Ó5Ð5r4   c                ó&   — | j                  |«       S r-   rr   r^   s     r2   rs   zTable.__ne__Ö   rt   r4   c                ó*   — t        t        | «      «      S r-   )rb   rH   r>   s    r2   rc   zTable.__hash__Ù   s   € Ü”C˜“I‹Ðr4   c                óR   —  | j                   j                  | «      j                  |Ž S )a  
        Perform a SELECT operation on the current table

        :param terms:
            Type:  list[expression]

            A list of terms to select. These can be any type of int, float, str, bool or Term or a Field.

        :return:  QueryBuilder
        )r•   Úfrom_Úselect©r1   Útermss     r2   r¸   zTable.selectÜ   s&   € ð 2ˆt�‰×$Ñ$ TÓ*×1Ñ1°5Ð9Ð9r4   c                ó8   — | j                   j                  | «      S )za
        Perform an UPDATE operation on the current table

        :return: QueryBuilder
        )r•   Úupdater>   s    r2   r¼   zTable.updateé   s   € ð �‰×%Ñ% dÓ+Ð+r4   c                óR   —  | j                   j                  | «      j                  |Ž S )a  
        Perform an INSERT operation on the current table

        :param terms:
            Type: list[expression]

            A list of terms to select. These can be any type of int, float, str, bool or  any other valid data

        :return: QueryBuilder
        )r•   ÚintoÚinsertr¹   s     r2   r¿   zTable.insertñ   s&   € ð 1ˆt�‰×#Ñ# DÓ)×0Ñ0°%Ð8Ð8r4   )rw   ú"str | list | tuple | Schema | NonerI   rÀ   ©NNN)
r;   rH   rw   zSchema | str | Noner/   r�   rš   ztype[Query] | NonerI   rJ   rK   rd   )r¤   r   rI   rJ   )r§   r   rI   rJ   )rI   re   )r_   r   rI   re   rf   )rº   z'int | float | str | bool | Term | FieldrI   r(   ©rI   r(   )rL   rM   rN   Ústaticmethodr�   r3   rG   rY   r    r¥   r¨   r®   r`   r³   rs   rc   r¸   r¼   r¿   rh   ri   s   @r2   ry   ry      s¶   ø„ Øò	ó ð	ð '+Ø Ø(,ðLàðLð $ðLð ð	Lð
 &ðLð 
õLó .óAð  ò'ó ð'ð ò-ó ð-ó,óó6ó
&óó:ó,÷9r4   ry   c            	     ó6  — g }| D ]‘  }t        |t        «      rBt        |«      dk(  r4t        |d   |d   |j	                  d«      |j	                  d«      ¬«      }n,t        ||j	                  d«      |j	                  d«      ¬«      }|j                  |«       Œ“ |S )zñ
    Shortcut to create many tables. If `names` param is a tuple, the first
    position will refer to the `_table_name` while the second will be its `alias`.
    Any other data structure will be treated as a whole as the `_table_name`.
    é   r   r�   rw   rš   )r;   r/   rw   rš   )r;   rw   rš   )r]   r�   Úlenry   rž   Úappend)Únamesr[   Útablesr;   Úts        r2   Úmake_tablesrË   ÿ   s˜   € ð €FØò ˆÜ�dœEÔ"¤s¨4£y°A¢~ÜØ˜!‘WØ˜1‘gØ—z‘z (Ó+Ø Ÿ*™* [Ó1ô	‰Aô ØØ—z‘z (Ó+Ø Ÿ*™* [Ó1ôˆAð
 	�‰�aÕðð €Mr4   c                  óJ   — e Zd ZdZ	 	 	 d	 	 	 	 	 	 	 	 	 dd„Zd	d„Zd	d„Zd
d„Zy)ÚColumnzRepresents a column.Nc                ó‚   — || _         || _        || _        |�t        |t        «      r|| _        y t        |«      | _        y r-   )r;   ÚtypeÚnullabler]   r   r   Údefault)r1   Úcolumn_nameÚcolumn_typerÐ   rÑ   s        r2   r3   zColumn.__init__  s:   € ð  ˆŒ	ØˆŒ	Ø ˆŒØ") /´ZÀÌÔ5N�wˆ�ÔT`ÐahÓTiˆ�r4   c                ót   — |j                  d«      }dj                  t        | j                  |«      ¬«      }|S )Nr}   z{name})r;   )rž   r~   r"   r;   )r1   r[   r}   Ú
column_sqls       r2   Úget_name_sqlzColumn.get_name_sql'  s9   € Ø—Z‘Z Ó-ˆ
à—_‘_Ü˜tŸy™y¨*Ó5ð %ó 
ˆ
ð Ðr4   c                óh  — dj                   | j                  di |¤Ž| j                  rdj                  | j                  «      nd| j                  �dj                  | j                  rdnd«      nd| j                  r.dj                  d | j                  j
                  di |¤Žz   «      nd¬«      }|S )	Nz{name}{type}{nullable}{default}z {}Ú ÚNULLzNOT NULLzDEFAULT )r;   rÏ   rÐ   rÑ   rP   )r~   rÖ   rÏ   rÐ   rÑ   rY   )r1   r[   rÕ   s      r2   rY   zColumn.get_sql0  s›   € Ø6×=Ñ=Ø"�×"Ñ"Ñ, VÑ,Ø,0¯IªI�—‘˜dŸi™iÔ(¸2ØNRÏmÉmÐNg�U—\‘\¨D¯MªM¡&¸zÔJÐmoØQU×Q]ÒQ]�E—L‘L Ð.B¨d¯l©l×.BÑ.BÑ.LÀVÑ.LÑ!LÔMÐceð	 >ó 
ˆ
ð Ðr4   c                ó&   — | j                  d¬«      S rª   r­   r>   s    r2   r®   zColumn.__str__:  r¯   r4   rÁ   )
rÒ   rH   rÓ   r�   rÐ   zbool | NonerÑ   zAny | Term | NonerI   rJ   rd   rK   )rL   rM   rN   Ú__doc__r3   rÖ   rY   r®   rP   r4   r2   rÍ   rÍ     sZ   „ Ùð
 #'Ø $Ø%)ð
jàð
jð  ð
jð ð	
jð
 #ð
jð 
ó
jóóô,r4   rÍ   c                 ó¶   — g }| D ]Q  }t        |t        «      r"t        |«      dk(  rt        |d   |d   ¬«      }nt        |¬«      }|j	                  |«       ŒS |S )zã
    Shortcut to create many columns. If `names` param is a tuple, the first
    position will refer to the `name` while the second will be its `type`.
    Any other data structure will be treated as a whole as the `name`.
    rÅ   r   r�   ©rÒ   rÓ   )rÒ   )r]   r�   rÆ   rÍ   rÇ   )rÈ   Úcolumnsr;   Úcolumns       r2   Úmake_columnsrà   >  s]   € ð €GØò ˆÜ�dœEÔ"¤s¨4£y°A¢~Ü¨¨Q©¸TÀ!¹WÔE‰Fä¨Ô-ˆFØ�‰�vÕðð €Nr4   c                  ó   — e Zd Zdd„Zdd„Zy)Ú	PeriodForc                ó¦   — || _         t        |t        «      r|n
t        |«      | _        t        |t        «      r|| _        y t        |«      | _        y r-   )r;   r]   rÍ   Ústart_columnÚ
end_column©r1   r;   rä   rå   s       r2   r3   zPeriodFor.__init__P  s?   € ØˆŒ	Ü,6°|ÄVÔ,L™LÔRXÐYeÓRfˆÔÜ(2°:¼vÔ(F˜*ˆ�ÌFÐS]ÓL^ˆ�r4   c           	     óà   — |j                  d«      }dj                  t        | j                  |«       | j                  j
                  di |¤Ž | j                  j
                  di |¤Ž¬«      }|S )Nr}   z9PERIOD FOR {name} ({start_column_name},{end_column_name}))r;   Ústart_column_nameÚend_column_namerP   )rž   r~   r"   r;   rä   rÖ   rå   )r1   r[   r}   Úperiod_for_sqls       r2   rY   zPeriodFor.get_sqlU  sl   € Ø—Z‘Z Ó-ˆ
àT×[Ñ[Ü˜tŸy™y¨*Ó5Ø<˜d×/Ñ/×<Ñ<ÑF¸vÑFØ8˜DŸO™O×8Ñ8ÑB¸6ÑBð \ó 
ˆð Ðr4   N)r;   rH   rä   ústr | Columnrå   rë   rI   rJ   rd   )rL   rM   rN   r3   rY   rP   r4   r2   râ   râ   O  s   „ ó_ô
	r4   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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ed d„«       Zy)!r”   ai  
    Query is the primary class and entry point in pypika. It is used to build queries iteratively using the builder
    design
    pattern.

    This class is immutable.

    Examples
    --------
    Simple query

    .. code-block:: python

        from pypika import Query, Field
        q = Query.from_('customers').select('*').where(Field("id") == 1)
    c                ó   — t        di |¤ŽS rX   )r(   )Úclsr[   s     r2   Ú_builderzQuery._builderw  s   € äÑ%˜fÑ%Ð%r4   c                óD   —  | j                   di |¤Žj                  |«      S )aH  
        Query builder entry point.  Initializes query building and sets the table to select from.  When using this
        function, the query becomes a SELECT query.

        :param table:
            Type: Table or str

            An instance of a Table object or a string table name.

        :return: QueryBuilder
        rP   )rï   r·   ©rî   r9   r[   s      r2   r·   zQuery.from_{  s#   € ð ˆs�|‰|Ñ%˜fÑ%×+Ñ+¨EÓ2Ð2r4   c                ó4   — t        «       j                  |«      S )a(  
        Query builder entry point. Initializes query building and sets the table name to be created. When using this
        function, the query becomes a CREATE statement.

        :param table: An instance of a Table object or a string table name.

        :return: CreateQueryBuilder
        )ÚCreateQueryBuilderÚcreate_table©rî   r9   s     r2   rô   zQuery.create_tableŠ  s   € ô "Ó#×0Ñ0°Ó7Ð7r4   c                ó4   — t        «       j                  |«      S )z¶
        Query builder entry point. Initializes query building and sets the index name to be created. When using this
        function, the query becomes a CREATE statement.
        )ÚCreateIndexBuilderÚcreate_index©rî   Úindexs     r2   rø   zQuery.create_index–  s   € ô "Ó#×0Ñ0°Ó7Ð7r4   c                ó4   — t        «       j                  |«      S )a-  
        Query builder entry point. Initializes query building and sets the table name to be dropped. When using this
        function, the query becomes a DROP statement.

        :param database: An instance of a Database object or a string database name.

        :return: DropQueryBuilder
        )ÚDropQueryBuilderÚdrop_database)rî   Údatabases     r2   rý   zQuery.drop_databasež  s   € ô  Ó!×/Ñ/°Ó9Ð9r4   c                ó4   — t        «       j                  |«      S )a$  
        Query builder entry point. Initializes query building and sets the table name to be dropped. When using this
        function, the query becomes a DROP statement.

        :param table: An instance of a Table object or a string table name.

        :return: DropQueryBuilder
        )rü   Ú
drop_tablerõ   s     r2   r   zQuery.drop_tableª  s   € ô  Ó!×,Ñ,¨UÓ3Ð3r4   c                ó4   — t        «       j                  |«      S )zÿ
        Query builder entry point. Initializes query building and sets the table name to be dropped. When using this
        function, the query becomes a DROP statement.

        :param user: String user name.

        :return: DropQueryBuilder
        )rü   Ú	drop_user)rî   Úusers     r2   r  zQuery.drop_user¶  ó   € ô  Ó!×+Ñ+¨DÓ1Ð1r4   c                ó4   — t        «       j                  |«      S )zÿ
        Query builder entry point. Initializes query building and sets the table name to be dropped. When using this
        function, the query becomes a DROP statement.

        :param view: String view name.

        :return: DropQueryBuilder
        )rü   Ú	drop_view)rî   Úviews     r2   r  zQuery.drop_viewÂ  r  r4   c                ó4   — t        «       j                  |«      S )z´
        Query builder entry point. Initializes query building and sets the index name to be dropped. When using this
        function, the query becomes a DROP statement.
        )rü   Ú
drop_indexrù   s     r2   r	  zQuery.drop_indexÎ  s   € ô  Ó!×,Ñ,¨UÓ3Ð3r4   c                óD   —  | j                   di |¤Žj                  |«      S )aH  
        Query builder entry point.  Initializes query building and sets the table to insert into.  When using this
        function, the query becomes an INSERT query.

        :param table:
            Type: Table or str

            An instance of a Table object or a string table name.

        :return QueryBuilder
        rP   )rï   r¾   rñ   s      r2   r¾   z
Query.intoÖ  s#   € ð ˆs�|‰|Ñ%˜fÑ%×*Ñ*¨5Ó1Ð1r4   c                óF   —  | j                   di |¤Žj                  ||«      S rX   )rï   Úwith_)rî   r9   r;   r[   s       r2   r  zQuery.with_å  s#   € àˆs�|‰|Ñ%˜fÑ%×+Ñ+¨E°4Ó8Ð8r4   c                ó@   —   | j                   di |¤Žj                  |Ž S )a¬  
        Query builder entry point.  Initializes query building without a table and selects fields.  Useful when testing
        SQL functions.

        :param terms:
            Type: list[expression]

            A list of terms to select.  These can be any type of int, float, str, bool, or Term.  They cannot be a Field
            unless the function ``Query.from_`` is called first.

        :return: QueryBuilder
        rP   )rï   r¸   )rî   rº   r[   s      r2   r¸   zQuery.selecté  s%   € ð -ˆ|ˆs�|‰|Ñ%˜fÑ%×,Ñ,¨eÐ4Ð4r4   c                óD   —  | j                   di |¤Žj                  |«      S )aD  
        Query builder entry point.  Initializes query building and sets the table to update.  When using this
        function, the query becomes an UPDATE query.

        :param table:
            Type: Table or str

            An instance of a Table object or a string table name.

        :return: QueryBuilder
        rP   )rï   r¼   rñ   s      r2   r¼   zQuery.updateù  s#   € ð ˆs�|‰|Ñ%˜fÑ%×,Ñ,¨UÓ3Ð3r4   c                ó$   — | |d<   t        |fi |¤ŽS )zÁ
        Convenience method for creating a Table that uses this Query class.

        :param table_name:
            Type: str

            A string table name.

        :return: Table
        rš   rx   )rî   Ú
table_namer[   s      r2   ry   zQuery.Table  s   € ð "ˆˆ{ÑÜ�ZÑ* 6Ñ*Ð*r4   c                ó"   — | |d<   t        |i |¤ŽS )a!  
        Convenience method for creating many tables that uses this Query class.
        See ``Query.make_tables`` for details.

        :param names:
            Type: list[str or tuple]

            A list of string table names, or name and alias tuples.

        :return: Table
        rš   )rË   )rî   rÈ   r[   s      r2   ÚTableszQuery.Tables  s   € ð "ˆˆ{ÑÜ˜EÐ, VÑ,Ð,r4   N)r[   r   rI   r(   )r9   zSelectable | strr[   r   rI   r(   )r9   ústr | TablerI   ró   )rú   ústr | IndexrI   r÷   )rþ   zDatabase | TablerI   rü   )r9   r  rI   rü   )r  rH   rI   rü   )r  rH   rI   rü   )rú   r  rI   rü   )r9   úTable | strr[   r   rI   r(   )r9   zstr | Selectabler;   rH   r[   r   rI   r(   )rº   zint | float | str | bool | Termr[   r   rI   r(   )r9   r  rI   r(   )r  rH   rI   Ú_TableClass)rÈ   útuple[str, str] | strr[   r   rI   zlist[_TableClass])rL   rM   rN   rÛ   Úclassmethodrï   r·   rô   rø   rý   r   r  r  r	  r¾   r  r¸   r¼   ry   r  rP   r4   r2   r”   r”   e  s3  „ ñð" ò&ó ð&ð ò3ó ð3ð ò	8ó ð	8ð ò8ó ð8ð ò	:ó ð	:ð ò	4ó ð	4ð ò	2ó ð	2ð ò	2ó ð	2ð ò4ó ð4ð ò2ó ð2ð ò9ó ð9ð ò5ó ð5ð ò4ó ð4ð ò+ó ð+ð ò-ó ñ-r4   r”   c                  ó  ‡ — e Zd ZdZdef	 	 	 	 	 	 	 	 	 dˆ f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edd„«       Zdd„Zdd„Zdd„Zdd„Zddd„Zddd„Zdd„Zdd„Zˆ xZS ) Ú_SetOperationa  
    A Query class wrapper for a all set operations, Union DISTINCT or ALL, Intersect, Except or Minus

    Created via the functions `Query.union`,`Query.union_all`,`Query.intersect`, `Query.except_of`,`Query.minus`.

    This class should not be instantiated directly.
    Nc                ó~   •— t         ‰| �  |«       || _        ||fg| _        g | _        d | _        d | _        || _        y r-   )rT   r3   Ú
base_queryÚ_set_operationÚ	_orderbysÚ_limitÚ_offsetÚ_wrapper_cls)r1   r  Úset_operation_queryÚset_operationr/   Úwrapper_clsrV   s         €r2   r3   z_SetOperation.__init__1  sG   ø€ ô 	‰Ñ˜ÔØ$ˆŒØ -Ð/BÐCÐDˆÔØˆŒàˆŒØˆŒà'ˆÕr4   c                ó  — |D ]}  }t        |t        «      r$t        || j                  j                  d   ¬«      n| j                  j                  |«      }| j                  j                  ||j                  d«      f«       Œ y ©Nr   r8   Úorder)	r]   rH   r   r  Ú_fromÚwrap_constantr  rÇ   rž   ©r1   Úfieldsr[   r<   s       r2   Úorderbyz_SetOperation.orderbyC  ss   € àò 	@ˆEô ˜e¤SÔ)ô �e 4§?¡?×#8Ñ#8¸Ñ#;Õ<à—_‘_×2Ñ2°5Ó9ð ð �N‰N×!Ñ! 5¨&¯*©*°WÓ*=Ð">Õ?ñ	@r4   c                ó   — || _         y r-   ©r  ©r1   Úlimits     r2   r0  z_SetOperation.limitN  ó	   € àˆ�r4   c                ó   — || _         y r-   ©r   ©r1   Úoffsets     r2   r5  z_SetOperation.offsetR  ó	   € àˆ�r4   c                óZ   — | j                   j                  t        j                  |f«       y r-   )r  rÇ   r   Úunionr^   s     r2   r8  z_SetOperation.unionV  ó!   € à×Ñ×"Ñ"¤L×$6Ñ$6¸Ð#>Õ?r4   c                óZ   — | j                   j                  t        j                  |f«       y r-   )r  rÇ   r   Ú	union_allr^   s     r2   r;  z_SetOperation.union_allZ  ó!   € à×Ñ×"Ñ"¤L×$:Ñ$:¸EÐ#BÕCr4   c                óZ   — | j                   j                  t        j                  |f«       y r-   )r  rÇ   r   Ú	intersectr^   s     r2   r>  z_SetOperation.intersect^  r<  r4   c                óZ   — | j                   j                  t        j                  |f«       y r-   )r  rÇ   r   Ú	except_ofr^   s     r2   r@  z_SetOperation.except_ofb  r<  r4   c                óZ   — | j                   j                  t        j                  |f«       y r-   )r  rÇ   r   Úminusr^   s     r2   rB  z_SetOperation.minusf  r9  r4   c                ó$   — | j                  |«      S r-   ©r8  r^   s     r2   Ú__add__z_SetOperation.__add__j  ó   € Ø�z‰z˜%Ó Ð r4   c                ó$   — | j                  |«      S r-   ©r;  r^   s     r2   Ú__mul__z_SetOperation.__mul__m  ó   € Ø�~‰~˜eÓ$Ð$r4   c                ó$   — | j                  |«      S r-   ©rB  r^   s     r2   Ú__sub__z_SetOperation.__sub__p  rF  r4   c                ó"   — | j                  «       S r-   r­   r>   s    r2   r®   z_SetOperation.__str__s  ó   € Ø�|‰|‹~Ðr4   c                óœ  — d}|j                  d| j                  j                  «       |j                  d| j                  j                  «        | j                  j                  d
d| j                  j
                  i|¤Ž}|}| j                  D ]ž  \  }} |j                  d
d| j                  j
                  i|¤Ž}	t        | j                  j                  «      t        |j                  «      k7  rt        dj                  ||	¬«      «      ‚||j                  |j                  |	¬«      z  }Œ  | j                  r| | j                  d
i |¤Žz  }| j                  �|| j                  «       z  }| j                   r|| j#                  «       z  }|r dj                  d
d	|i|¤Ž}|r%t%        || j&                  xs | j(                  fi |¤ŽS |S )Nz {type} {query_string}Údialectr}   Úsubqueryz€Queries must have an equal number of select statements in a set operation.

Main Query:
{query1}

Set Operations Query:
{query2})Úquery1Úquery2)rÏ   Úquery_stringú	({query})rU   rP   )Ú
setdefaultr  rQ  Ú
QUOTE_CHARrY   Úwrap_set_operation_queriesr  rÆ   Ú_selectsr   r~   Úvaluer  Ú_orderby_sqlr  Ú
_limit_sqlr   Ú_offset_sqlr!   r/   r’   )
r1   Ú
with_aliasrR  r[   Úset_operation_templateÚbase_querystringÚquerystringr#  r"  Úset_operation_querystrings
             r2   rY   z_SetOperation.get_sqlv  sÓ  € Ø!9Ðà×Ñ˜) T§_¡_×%<Ñ%<Ô=ð 	×Ñ˜,¨¯©×(BÑ(BÔCà2˜4Ÿ?™?×2Ñ2Ñq¸D¿O¹O×<fÑ<fÐqÐjpÑqÐà&ˆØ26×2EÑ2Eò 	Ñ.ˆMÐ.Ø(CÐ(;×(CÑ(Cñ )ØŸ™×CÑCð)ØGMñ)Ð%ô �4—?‘?×+Ñ+Ó,´Ð4G×4PÑ4PÓ0QÒQÜ+ðSßSYÑSYØ/Ð8Qð TZó Tóð ð Ð1×8Ñ8Ø"×(Ñ(Ð7Pð 9ó ñ ‰Kð	ð" �>Š>ØÐ,˜4×,Ñ,Ñ6¨vÑ6Ñ6ˆKà�;‰;Ð"Ø˜4Ÿ?™?Ó,Ñ,ˆKà�<Š<Ø˜4×+Ñ+Ó-Ñ-ˆKáØ,˜+×,Ñ,ÑI°;ÐIÀ&ÑIˆKáÜ# K°·±Ò1O¸t×?OÑ?OÑZÐSYÑZÐZàÐr4   c                ó¼  — g }| j                   j                  D �ch c]  }|j                  ’Œ }}| j                  D ]y  \  }}|j                  r$|j                  |v rt	        |j                  |«      n |j
                  dd|i|¤Ž}|j                  |�dj                  ||j                  ¬«      n|«       Œ{ dj                  dj                  |«      ¬«      S c c}w )a×  
        Produces the ORDER BY part of the query.  This is a list of fields and possibly their directionality, ASC or
        DESC. The clauses are stored in the query under self._orderbys as a list of tuples containing the field and
        directionality (which can be None).

        If an order by field is used in the select clause, determined by a matching , then the ORDER BY clause will use
        the alias, otherwise the field will be rendered as SQL.
        r}   ú{term} {orient}©ÚtermÚorientú ORDER BY {orderby}ú,©r,  rP   )
r  rZ  r/   r  r"   rY   rÇ   r~   r[  Újoin)	r1   r}   r[   Úclausesr‹   Úselected_aliasesr<   Údirectionalityrg  s	            r2   r\  z_SetOperation._orderby_sql£  sØ   € ð ˆØ-1¯_©_×-EÑ-EÖF¨˜AŸG›GÐFÐÐFØ%)§^¡^ò 		Ñ!ˆE�>ð —;’; 5§;¡;Ð2BÑ#Bô ˜eŸk™k¨:Ô6à"�U—]‘]ÑC¨jÐC¸FÑCð ð �N‰NØTbÐTnÐ!×(Ñ(¨d¸>×;OÑ;OÐ(ÔPÐtxõð		ð %×+Ñ+°C·H±H¸WÓ4EÐ+ÓFÐFùò Gs   ›Cc                ó:   — dj                  | j                  ¬«      S )Nz OFFSET {offset})r5  )r~   r   r>   s    r2   r^  z_SetOperation._offset_sql»  s   € Ø!×(Ñ(°·±Ð(Ó=Ð=r4   c                ó:   — dj                  | j                  ¬«      S )Nz LIMIT {limit})r0  )r~   r  r>   s    r2   r]  z_SetOperation._limit_sql¾  s   € Ø×&Ñ&¨T¯[©[Ð&Ó9Ð9r4   )
r  r(   r"  r(   r#  r   r/   r�   r$  útype[ValueWrapper])r+  r   r[   r   rI   rJ   ©r0  rg   rI   rJ   ©r5  rg   rI   rJ   )r_   r+   rI   rJ   )r_   r+   rI   r  ©r_   r(   rI   r  rK   ©FF©r_  re   rR  re   r[   r   rI   rH   r-   r€   )rL   rM   rN   rÛ   r   r3   r    r,  r0  r5  r8  r;  r>  r@  rB  rE  rI  rM  r®   rY   r\  r^  r]  rh   ri   s   @r2   r  r  (  s  ø„ ñð !Ø*6ð(à ð(ð *ð(ð $ð	(ð
 ð(ð (õ(ð$ ò@ó ð@ð òó ðð òó ðð ò@ó ð@ð òDó ðDð òDó ðDð òDó ðDð ò@ó ð@ó!ó%ó!óô+ôZGó0>÷:r4   r  c                  óö  ‡ — e Zd ZdZdZdZdZdZeZ	dde
ddf	 	 	 	 	 	 	 	 	 dcˆ fd„Zddd„Zeded	„«       Zedfd
„«       Zedgd„«       Zedhd„«       Zedid„«       Zedjd„«       Zedhd„«       Zedid„«       Zedid„«       Zedid„«       Zedkd„«       Zedkd„«       Zedjd„«       Zedjd„«       Zedjd„«       Zedld„«       Zedmd„«       Zedmd„«       Zedmd„«       Z ednd„«       Z!edjd„«       Z"edod„«       Z#edpd„«       Z$ee%jL                  f	 	 	 	 	 dqd „«       Z'drd!„Z(drd"„Z)drd#„Z*drd$„Z+drd%„Z,drd&„Z-drd'„Z.drd(„Z/drd)„Z0edsd*„«       Z1edtd+„«       Z2edud,„«       Z3edud-„«       Z4edud.„«       Z5edud/„«       Z6edud0„«       Z7edvd1„«       Z8dud2„Z9dud3„Z:dud4„Z;edwd5„«       Z<dxˆ fd6„Z=e>dydzd7„«       Z?d{d8„Z@d|d9„ZAd}d:„ZBd~d;„ZCdd<„ZDd€d=„ZEd�d>„ZFd‚d?„ZGdid@„ZHdƒdA„ZIdƒdB„ZJd„dC„ZKd„dD„ZLd…dE„ZMd†dF„ZNd‡dˆdG„ZOd‰dH„ZPdŠdI„ZQdŠdJ„ZRdƒdK„ZSdŠdL„ZTdŠdM„ZUdŠdN„ZVe>dŠdO„«       ZWdŠdP„ZXd‹dŒdQ„ZYdŠdR„ZZdŠdS„Z[d‹dŒdT„Z\d‹dŒdU„Z]dŠdV„Z^dŠdW„Z_dyd�dX„Z`dyd�dY„Za	 	 	 dŽ	 	 	 	 	 	 	 	 	 d�dZ„Zb	 	 	 dŽ	 	 	 	 	 	 	 	 	 d�d[„Zcdƒd\„Zddyd�d]„Zedyd�d^„Zfdƒd_„Zgdƒd`„ZhdŠda„Zidb„ Zjˆ xZkS )‘r(   zž
    Query Builder is the main class in pypika which stores the state of a query and offers functions which allow the
    state to be branched immutably.
    r«   ú'NTFc                óH  •— t         ‰| �  d «       g | _        d | _        d | _        d| _        d| _        g | _        g | _        g | _	        g | _
        g | _        g | _        d| _        d| _        d| _        d | _        d | _        g | _        d| _        d | _        d | _        g | _        g | _        g | _        g | _        d | _        d | _        g | _        d| _        t=        «       | _        d| _         d| _!        d| _"        d| _#        || _$        || _%        || _&        || _'        || _(        y )NFr   ))rT   r3   r(  Ú_insert_tableÚ_update_tableÚ_delete_fromÚ_replaceÚ_withrZ  Ú_force_indexesÚ_use_indexesÚ_columnsÚ_valuesÚ	_distinctÚ_ignoreÚ_for_updateÚ_wheresÚ
_prewheresÚ	_groupbysÚ_with_totalsÚ_havingsÚ	_qualifysr  Ú_joinsÚ_unionsÚ_usingr  r   Ú_updatesÚ_select_starÚsetÚ_select_star_tablesÚ_mysql_rollupÚ_select_intoÚ_subquery_countÚ_foreign_tablerQ  Ú
as_keywordrY  r!  Ú	immutable)r1   rQ  rY  r$  r™  r˜  rV   s         €r2   r3   zQueryBuilder.__init__Î  s-  ø€ ô 	‰Ñ˜ÔàˆŒ
Ø!ˆÔØ!ˆÔØ!ˆÔØˆŒàˆŒ
ØˆŒØ ˆÔØˆÔØˆŒØˆŒØˆŒØˆŒà ˆÔàˆŒØˆŒØˆŒØ!ˆÔØˆŒØˆŒØˆŒØˆŒØˆŒØˆŒàˆŒØˆŒàˆŒà!ˆÔÜ#&£5ˆÔ Ø"ˆÔØ!ˆÔà ˆÔØ#ˆÔàˆŒØ$ˆŒØ*DˆÔ'à'ˆÔà"ˆ�r4   c                ó:  — t        | «      j                  t        | «      «      }|j                  j                  | j                  «       t	        | j
                  «      |_        t	        | j                  «      |_        t	        | j                  «      |_        t	        | j                  «      |_        t	        | j                  «      |_	        t	        | j                  «      |_
        t	        | j                  «      |_        t	        | j                  «      |_        t	        | j                  «      |_        t	        | j                  «      |_        t	        | j                  «      |_        t	        | j                   «      |_        t	        | j"                  «      |_        |S r-   )rÏ   Ú__new__Ú__dict__r¼   r   r“  r(  r  rZ  r‚  rƒ  r‰  r  r�  rŽ  r�  r€  r�  )r1   Únewones     r2   Ú__copy__zQueryBuilder.__copy__	  s  € Ü�d“×#Ñ#¤D¨£JÓ/ˆØ�‰×Ñ˜tŸ}™}Ô-Ü%)¨$×*BÑ*BÓ%CˆÔ"Ü˜DŸJ™JÓ'ˆŒÜ˜DŸJ™JÓ'ˆŒÜ˜tŸ}™}Ó-ˆŒÜ˜tŸ}™}Ó-ˆŒÜ˜dŸl™lÓ+ˆŒÜ §¡Ó/ˆÔÜ §¡Ó/ˆÔÜ˜TŸ[™[Ó)ˆŒÜ˜dŸl™lÓ+ˆŒÜ˜tŸ}™}Ó-ˆŒÜ $ T×%8Ñ%8Ó 9ˆÔÜ" 4×#4Ñ#4Ó5ˆÔØˆr4   c                óJ  — | j                   j                  t        |t        «      rt	        |«      n|«       t        |t
        t        f«      rW|j                  €Jt        |t
        «      r|j                  }nd}t        | j                  |«      }d|z  |_        |dz   | _        yyy)aŒ  
        Adds a table to the query. This function can only be called once and will raise an AttributeError if called a
        second time.

        :param selectable:
            Type: ``Table``, ``Query``, or ``str``

            When a ``str`` is passed, a table with the name matching the ``str`` value is used.

        :returns
            A copy of the query with the table added.
        Nr   úsq%dr�   )
r(  rÇ   r]   rH   ry   r(   r  r/   r–  Úmax)r1   Ú
selectableÚsub_query_counts      r2   r·   zQueryBuilder.from_  s‘   € ð 	�
‰
×Ñ¬z¸*ÄcÔ/Jœ% 
Ô+ÐPZÔ[ä�j¤<´Ð"?Ô@ÀZ×EUÑEUÐE]Ü˜*¤lÔ3Ø",×"<Ñ"<‘à"#�ä! $×"6Ñ"6¸ÓHˆOØ%¨Ñ7ˆJÔØ#2°QÑ#6ˆDÕ ð F^Ð@r4   c                óø  — | j                   D �cg c]  }||k(  r|n|‘Œ c}| _         | j                  |k(  r|n| j                  | _        | j                  |k(  r|n| j                  | _        | j                  D �cg c]  }|j	                  ||«      ‘Œ c}| _        | j
                  D �cg c]  }|j	                  ||«      ‘Œ c}| _        | j                  D �cg c]  }|j	                  ||«      ‘Œ c}| _        | j                  D ��cg c]"  }|D �cg c]  }|j	                  ||«      ‘Œ c}‘Œ$ c}}| _        | j                  r| j                  j	                  ||«      nd| _        | j                  r| j                  j	                  ||«      nd| _	        | j                  D �	cg c]  }	|	j	                  ||«      ‘Œ c}	| _
        | j                  r| j                  j	                  ||«      nd| _        | j                  r| j                  j	                  ||«      nd| _        | j                  D �
cg c]  }
|
d   j	                  ||«      |
d   f‘Œ c}
| _        | j                  D �cg c]  }|j	                  ||«      ‘Œ c}| _        || j                  v r7| j                  j!                  |«       | j                  j#                  |«       yyc c}w c c}w c c}w c c}w c c}w c c}}w c c}	w c c}
w c c}w )ak  
        Replaces all occurrences of the specified table with the new table. Useful when reusing fields across
        queries.

        :param current_table:
            The table instance to be replaces.
        :param new_table:
            The table instance to replace with.
        :return:
            A copy of the query with the tables replaced.
        Nr   r�   )r(  r{  r|  r  Úreplace_tablerZ  r‚  rƒ  r‡  rˆ  r‰  r‹  rŒ  r  r�  r“  ÚremoveÚadd)r1   Úcurrent_tableÚ	new_tabler9   Úalias_queryr¸   rß   Ú
value_listr[  Úgroupbyr,  rl  s               r2   r¥  zQueryBuilder.replace_table6  sƒ  € ð SW×R\ÑR\Ö]È 5¨MÒ#9‘i¸uÑDÒ]ˆŒ
Ø*.×*<Ñ*<ÀÒ*M™YÐSW×SeÑSeˆÔØ*.×*<Ñ*<ÀÒ*M™YÐSW×SeÑSeˆÔà]a×]gÑ]gÖhÈk�k×/Ñ/°¸yÕIÒhˆŒ
ØVZ×VcÑVcÖdÈF˜×-Ñ-¨m¸YÕGÒdˆŒØVZ×VcÑVcÖdÈF˜×-Ñ-¨m¸YÕGÒdˆŒàfj×frÑfr÷
ØXbÈ
ÖS¸uˆU× Ñ  °	Õ:ÔSó
ˆŒð PTÏ|Ê|�t—|‘|×1Ñ1°-ÀÔKÐaeˆŒØUY×UdÒUd˜$Ÿ/™/×7Ñ7¸ÀyÔQÐjnˆŒØY]×YgÑYgÖhÈg˜'×/Ñ/°¸yÕIÒhˆŒØQU×Q^ÒQ^˜Ÿ™×3Ñ3°MÀ9ÔMÐdhˆŒØSW×SaÒSa˜Ÿ™×5Ñ5°mÀYÔOÐgkˆŒà\`×\jÑ\jö
ØQXˆW�Q‰Z×%Ñ% m°YÓ?ÀÈÁÒLò
ˆŒð QU×P[ÑP[Ö\È�t×)Ñ)¨-¸ÕCÒ\ˆŒà˜D×4Ñ4Ñ4Ø×$Ñ$×+Ñ+¨MÔ:Ø×$Ñ$×(Ñ(¨Õ3ð 5ùò+ ^ùò iùÚdùÚdùâSùó
ùò iùò
ùò ]sA   �KÁ9KÂ(KÃKÄ	K'ÄK"Ä)K'Æ#K-È0!K2É'K7Ë"K'c                óR   — t        ||«      }| j                  j                  |«       y r-   )rR   r  rÇ   )r1   r¢  r;   rÊ   s       r2   r  zQueryBuilder.with_\  s    € ä˜˜zÓ*ˆØ�
‰
×Ñ˜!Õr4   c                ó®   — | j                   �t        ddz  «      ‚| j                  rd| _        t	        |t
        «      r|| _         y t        |«      | _         y )Nú$'Query' object has no attribute '%s'r¾   T)r{  r£   rZ  r•  r]   ry   ©r1   r9   s     r2   r¾   zQueryBuilder.intoa  sJ   € à×ÑÐ)Ü Ð!GÈ&Ñ!PÓQÐQà�=Š=Ø $ˆDÔä&0°¼Ô&>˜UˆÕÄEÈ%ÃLˆÕr4   c                óB  — |D ]š  }t        |t        «      r| j                  |«       Œ%t        |t        «      r| j	                  |«       ŒGt        |t
        t        f«      r| j                  |«       Œo| j                  | j                  || j                  ¬«      «       Œœ y ©N)r$  )
r]   r   Ú_select_fieldrH   Ú_select_field_strr   r   Ú_select_otherr)  r!  ©r1   rº   rg  s      r2   r¸   zQueryBuilder.selectk  s…   € àò 	\ˆDÜ˜$¤Ô&Ø×"Ñ" 4Õ(Ü˜D¤#Ô&Ø×&Ñ& tÕ,Ü˜D¤8Ô-AÐ"BÔCØ×"Ñ" 4Õ(à×"Ñ" 4×#5Ñ#5°dÈ×HYÑHYÐ#5Ó#ZÕ[ñ	\r4   c                óv   — | j                   s| j                  s| j                  rt        ddz  «      ‚d| _         y )Nr¯  ÚdeleteT)r}  rZ  r|  r£   r>   s    r2   r¸  zQueryBuilder.deletew  s2   € à×Ò §¢°×1CÒ1CÜ Ð!GÈ(Ñ!RÓSÐSà ˆÕr4   c                ó¸   — | j                   €| j                  s| j                  rt        ddz  «      ‚t	        |t
        «      r|| _         y t        |«      | _         y )Nr¯  r¼   )r|  rZ  r}  r£   r]   ry   r°  s     r2   r¼   zQueryBuilder.update~  sI   € à×ÑÐ)¨T¯]ª]¸d×>OÒ>OÜ Ð!GÈ(Ñ!RÓSÐSä&0°¼Ô&>˜UˆÕÄEÈ%ÃLˆÕr4   c                ó
  — | j                   €t        ddz  «      ‚|rt        |d   t        t        f«      r|d   }|D ]D  }t        |t
        «      rt        || j                   ¬«      }| j                  j                  |«       ŒF y )Nr¯  r¿   r   r8   )	r{  r£   r]   rŽ   r�   rH   r   r‚  rÇ   r¶  s      r2   rÞ   zQueryBuilder.columns…  sy   € à×ÑÐ%Ü Ð!GÈ(Ñ!RÓSÐSá”Z  a¡¬4´¨-Ô8Ø˜!‘HˆEàò 	'ˆDÜ˜$¤Ô$Ü˜T¨×);Ñ);Ô<�Ø�M‰M× Ñ  Õ&ñ	'r4   c                ó0   —  | j                   |Ž  d| _        y ©NF©Ú_apply_termsr~  r¹   s     r2   r¿   zQueryBuilder.insert’  s   € àˆ×Ñ˜5Ñ!Øˆ�r4   c                ó0   —  | j                   |Ž  d| _        y ©NTr½  r¹   s     r2   ÚreplacezQueryBuilder.replace—  s   € àˆ×Ñ˜5Ñ!Øˆ�r4   c                óÜ   — |g|¢­D ]c  }t        |t        «      r| j                  j                  |«       Œ/t        |t        «      sŒ@| j                  j                  t        |«      «       Œe y r-   )r]   r   r€  rÇ   rH   ©r1   rg  rº   rÊ   s       r2   Úforce_indexzQueryBuilder.force_indexœ  sW   € à�˜‘ò 	5ˆAÜ˜!œUÔ#Ø×#Ñ#×*Ñ*¨1Õ-Ü˜AœsÕ#Ø×#Ñ#×*Ñ*¬5°«8Õ4ñ		5r4   c                óÜ   — |g|¢­D ]c  }t        |t        «      r| j                  j                  |«       Œ/t        |t        «      sŒ@| j                  j                  t        |«      «       Œe y r-   )r]   r   r�  rÇ   rH   rÃ  s       r2   Ú	use_indexzQueryBuilder.use_index¤  sW   € à�˜‘ò 	3ˆAÜ˜!œUÔ#Ø×!Ñ!×(Ñ(¨Õ+Ü˜AœsÕ#Ø×!Ñ!×(Ñ(¬¨q«Õ2ñ		3r4   c                ó   — d| _         y rÀ  ©r„  r>   s    r2   ÚdistinctzQueryBuilder.distinct¬  s	   € àˆ�r4   c                ó   — d| _         y rÀ  ©r†  r>   s    r2   Ú
for_updatezQueryBuilder.for_update°  s
   € àˆÕr4   c                ó   — d| _         y rÀ  )r…  r>   s    r2   ÚignorezQueryBuilder.ignore´  s	   € àˆ�r4   c                ó†   — | j                  |«      sd| _        | j                  r| xj                  |z  c_        y || _        y rÀ  )Ú_validate_tabler—  rˆ  ©r1   r�   s     r2   ÚprewherezQueryBuilder.prewhere¸  s4   € à×#Ñ# IÔ.Ø"&ˆDÔà�?Š?Ø�OŠO˜yÑ(ŽOà'ˆD�Or4   c                ó¨   — t        |t        «      ry | j                  |«      sd| _        | j                  r| xj                  |z  c_        y || _        y rÀ  )r]   r   rÐ  r—  r‡  rÑ  s     r2   ÚwherezQueryBuilder.whereÂ  sA   € ä�i¤Ô0Øà×#Ñ# IÔ.Ø"&ˆDÔà�<Š<Ø�LŠL˜IÑ%ŽLà$ˆD�Lr4   c                óx   — t        |t        «      ry | j                  r| xj                  |z  c_        y || _        y r-   )r]   r   r‹  rÑ  s     r2   ÚhavingzQueryBuilder.havingÏ  s+   € ä�i¤Ô0Øà�=Š=Ø�MŠM˜YÑ&ŽMà%ˆD�Mr4   c                óx   — t        |t        «      ry | j                  r| xj                  |z  c_        y || _        y r-   )r]   r   rŒ  rÑ  s     r2   ÚqualifyzQueryBuilder.qualifyÙ  s+   € ä�i¤Ô0Øà�>Š>Ø�NŠN˜iÑ'ŽNà&ˆD�Nr4   c                ó"  — |D ]Š  }t        |t        «      rt        || j                  d   ¬«      }nBt        |t        «      r2t        t        |«      | j                  d   ¬«      j                  |«      }| j                  j                  |«       ŒŒ y )Nr   r8   )r]   rH   r   r(  rg   r)  r‰  rÇ   r¶  s      r2   r¬  zQueryBuilder.groupbyã  sn   € àò 	(ˆDÜ˜$¤Ô$Ü˜T¨¯©°A©Ô7‘Ü˜D¤#Ô&ÜœS ›Y¨d¯j©j¸©mÔ<×JÑJÈ4ÓP�à�N‰N×!Ñ! $Õ'ñ	(r4   c                ó   — d| _         y rÀ  )rŠ  r>   s    r2   Úwith_totalszQueryBuilder.with_totalsí  s
   € à ˆÕr4   c           	     ó0  — d|j                  d«      k(  }| j                  rt        ddz  «      ‚|D �cg c]'  }t        |t        t
        t        f«      rt        |Ž n|‘Œ) }}|r6|s| j                  st        d«      ‚d| _        | xj                  |z  c_        y dt        | j                  «      k  r@t        | j                  d   t        «      r#| j                  d   xj                  |z  c_        y | j                  j                  t        |Ž «       y c c}w )	NÚmysqlÚvendorr¯  ÚrollupzWAt least one group is required. Call Query.groupby(term) or passas parameter to rollup.Tr   éÿÿÿÿ)rž   r”  r£   r]   rŽ   r�   r’  r   r‰  r   rÆ   r   ÚargsrÇ   )r1   rº   r[   Ú	for_mysqlrg  s        r2   rß  zQueryBuilder.rollupñ  së   € à˜vŸz™z¨(Ó3Ñ3ˆ	à×ÒÜ Ð!GÈ(Ñ!RÓSÐSà\aÖbÐTX¤¨D´4¼ÄÐ2DÔ!E”˜‘È4ÑOÐbˆÐbáá §¢Ü%Øpóð ð "&ˆDÔØ�NŠN˜eÑ#ŽNà”�T—^‘^Ó$Ò$¬°D·N±NÀ2Ñ4FÌÔ)Oà�N‰N˜2Ñ×#Ò# uÑ,Ö#ð �N‰N×!Ñ!¤&¨% .Õ1ùò# cs   ³,Dc                óà   — |D ]i  }t        |t        «      rt        || j                  d   ¬«      n| j	                  |«      }| j
                  j                  ||j                  d«      f«       Œk y r&  )r]   rH   r   r(  r)  r  rÇ   rž   r*  s       r2   r,  zQueryBuilder.orderby  s_   € àò 	@ˆEÜ9CÀEÌ3Ô9O”E˜% t§z¡z°!¡}Õ5ÐUY×UgÑUgÐhmÓUnˆEà�N‰N×!Ñ! 5¨&¯*©*°WÓ*=Ð">Õ?ñ	@r4   c                ób  — t        |t        «      rt        | ||d¬«      S t        |t        «      r,|j                  €| j                  |«       t        | ||d¬«      S t        |t        «      rt        | ||d¬«      S t        |t        «      rt        | ||d¬«      S t        dt        |«      z  «      ‚)Nr9   )Ú
type_labelrR  zCannot join on type '%s')
r]   ry   ÚJoinerr(   r/   Ú_tag_subqueryrR   r+   Ú
ValueErrorrÏ   ©r1   r{   Úhows      r2   rl  zQueryBuilder.join  s�   € ô �dœEÔ"Ü˜$  c°gÔ>Ð>ä˜œlÔ+Ø�z‰zÐ!Ø×"Ñ" 4Ô(Ü˜$  c°jÔAÐAä˜œlÔ+Ü˜$  c°gÔ>Ð>ä˜œjÔ)Ü˜$  c°jÔAÐAäÐ3´d¸4³jÑ@ÓAÐAr4   c                óB   — | j                  |t        j                  «      S r-   )rl  r   Úinnerrz   s     r2   Ú
inner_joinzQueryBuilder.inner_join&  ó   € Ø�y‰y˜œxŸ~™~Ó.Ð.r4   c                óB   — | j                  |t        j                  «      S r-   )rl  r   Úleftrz   s     r2   Ú	left_joinzQueryBuilder.left_join)  ó   € Ø�y‰y˜œxŸ}™}Ó-Ð-r4   c                óB   — | j                  |t        j                  «      S r-   )rl  r   Ú
left_outerrz   s     r2   Úleft_outer_joinzQueryBuilder.left_outer_join,  ó   € Ø�y‰y˜œx×2Ñ2Ó3Ð3r4   c                óB   — | j                  |t        j                  «      S r-   )rl  r   Úrightrz   s     r2   Ú
right_joinzQueryBuilder.right_join/  rî  r4   c                óB   — | j                  |t        j                  «      S r-   )rl  r   Úright_outerrz   s     r2   Úright_outer_joinzQueryBuilder.right_outer_join2  s   € Ø�y‰y˜œx×3Ñ3Ó4Ð4r4   c                óB   — | j                  |t        j                  «      S r-   )rl  r   Úouterrz   s     r2   Ú
outer_joinzQueryBuilder.outer_join5  rî  r4   c                óB   — | j                  |t        j                  «      S r-   )rl  r   Ú
full_outerrz   s     r2   Úfull_outer_joinzQueryBuilder.full_outer_join8  rö  r4   c                óB   — | j                  |t        j                  «      S r-   )rl  r   Úcrossrz   s     r2   Ú
cross_joinzQueryBuilder.cross_join;  rî  r4   c                óB   — | j                  |t        j                  «      S r-   )rl  r   rb   rz   s     r2   Ú	hash_joinzQueryBuilder.hash_join>  rò  r4   c                ó   — || _         y r-   r.  r/  s     r2   r0  zQueryBuilder.limitA  r1  r4   c                ó   — || _         y r-   r3  r4  s     r2   r5  zQueryBuilder.offsetE  r6  r4   c                óP   — t        | |t        j                  | j                  ¬«      S r²  )r  r   r8  r!  r^   s     r2   r8  zQueryBuilder.unionI  ó   € ä˜T 5¬,×*<Ñ*<È$×J[ÑJ[Ô\Ð\r4   c                óP   — t        | |t        j                  | j                  ¬«      S r²  )r  r   r;  r!  r^   s     r2   r;  zQueryBuilder.union_allM  ó   € ä˜T 5¬,×*@Ñ*@Èd×N_ÑN_Ô`Ð`r4   c                óP   — t        | |t        j                  | j                  ¬«      S r²  )r  r   r>  r!  r^   s     r2   r>  zQueryBuilder.intersectQ  r  r4   c                óP   — t        | |t        j                  | j                  ¬«      S r²  )r  r   r@  r!  r^   s     r2   r@  zQueryBuilder.except_ofU  r  r4   c                óP   — t        | |t        j                  | j                  ¬«      S r²  )r  r   rB  r!  r^   s     r2   rB  zQueryBuilder.minusY  r  r4   c                óÒ   — t        |t        «      st        |«      n|}t        |t        «      s| j                  || j                  ¬«      }| j
                  j                  ||f«       y r²  )r]   r   r   r)  r!  r�  rÇ   )r1   r<   r[  s      r2   r’  zQueryBuilder.set]  sQ   € ä$.¨u´eÔ$<”�e”À%ˆÜ˜%¤Ô&Ø×&Ñ& u¸$×:KÑ:KÐ&ÓLˆEØ�‰×Ñ˜e U˜^Õ,r4   c                ó$   — | j                  |«      S r-   rD  r^   s     r2   rE  zQueryBuilder.__add__d  rF  r4   c                ó$   — | j                  |«      S r-   rH  r^   s     r2   rI  zQueryBuilder.__mul__g  rJ  r4   c                ó$   — | j                  |«      S r-   rL  r^   s     r2   rM  zQueryBuilder.__sub__j  rF  r4   c                óH   — |j                   | _        |j                  | _        y r-   )Ústartr   Ústopr  )r1   Úslices     r2   r  zQueryBuilder.slicem  s   € à—{‘{ˆŒØ—j‘jˆ�r4   c                ód   •— t        |t        «      st        ‰| �  |«      S | j                  |«      S r-   )r]   r  rT   rE   )r1   r{   rV   s     €r2   rE   zQueryBuilder.__getitem__r  s,   ø€ Ü˜$¤Ô&Ü‘7Ñ& tÓ,Ð,Ø�z‰z˜$ÓÐr4   c                óh   — | D �cg c]"  }|j                   xs |j                  |¬«      ‘Œ$ c}S c c}w )Nr¬   )r/   rY   )Ú	field_setr}   r<   s      r2   Ú_list_aliaseszQueryBuilder._list_aliasesw  s-   € àQZÖ[È�—‘ÒC˜uŸ}™}¸
˜}ÓCÑCÒ[Ð[ùÒ[s   …'/c                óÞ   — dt        | j                  «      k(  rt        d|› d�«      ‚|dk(  rd| _        t	        «       g| _        y | j                  t        || j                  d   ¬«      «       y )Nr   zCannot select z, no FROM table specified.Ú*Tr8   )rÆ   r(  r   r‘  r   rZ  r³  r   )r1   rg  s     r2   r´  zQueryBuilder._select_field_str{  sa   € Ø”�D—J‘J“ÒÜ  >°$°Ð7QÐ!RÓSÐSà�3Š;Ø $ˆDÔÜ!›V˜HˆDŒMØà×Ñœ5 ¨T¯Z©Z¸©]Ô;Õ<r4   c                ó„  — | j                   ry |j                  | j                  v ry t        |t        «      rj| j
                  D �cg c]*  }t        |d«      r|j                  |j                  k7  sŒ)|‘Œ, c}| _        | j                  j                  |j                  «       | j
                  j                  |«       y c c}w )Nr9   )	r‘  r9   r“  r]   r   rZ  Úhasattrr§  rÇ   )r1   rg  r¸   s      r2   r³  zQueryBuilder._select_field†  s—   € Ø×Òàà�:‰:˜×1Ñ1Ñ1àä�dœDÔ!à%)§]¡]öØ!¼'À&È'Ô:RÐVZ×V`ÑV`Ðdj×dpÑdpÓVp’òˆDŒMð ×$Ñ$×(Ñ(¨¯©Ô4à�‰×Ñ˜TÕ"ùòs   Á*B=Á0B=c                ó:   — | j                   j                  |«       y r-   )rZ  rÇ   )r1   Úfunctions     r2   rµ  zQueryBuilder._select_other—  s   € Ø�‰×Ñ˜XÕ&r4   c                ó   — g S r-   rP   r>   s    r2   Úfields_zQueryBuilder.fields_š  s   € àˆ	r4   c                ó¢  ‡‡— | j                   | j                  gz   | j                  z   Š‰j                  ‰| j                  «       t        ˆˆfd„‰D «       «      }t        ‰j                  t        «      r@‰j                  j                  €*|r(‰j                  j                  dz   ‰j                  _	        | j                  j                  ‰«       y )Nc              3  ó^   •K  — | ]$  }t        |t        «      xr ‰j                  ‰v –— Œ& y ­wr-   )r]   ry   r{   )Ú.0ÚclauseÚbase_tablesrl  s     €€r2   ú	<genexpr>z'QueryBuilder.do_join.<locals>.<genexpr>¢  s*   øè ø€ ÒnÐX^œZ¨´Ó6ÒS¸4¿9¹9ÈÐ;SÓSÑnùs   ƒ*-Ú2)r(  r|  r  Úvalidater�  Úanyr]   r{   ry   r/   r’   rÇ   )r1   rl  Útable_in_queryr)  s    ` @r2   Údo_joinzQueryBuilder.do_joinž  s‘   ù€ Ø—j‘j D×$6Ñ$6Ð#7Ñ7¸$¿*¹*ÑDˆØ�‰�k 4§;¡;Ô/äÔnÐbmÔnÓnˆÜ�d—i‘i¤Ô'¨D¯I©I¯O©OÐ,CÉð #Ÿi™i×3Ñ3°cÑ9ˆD�I‰IŒOà�‰×Ñ˜4Õ r4   c                ó@   ‡— t        ˆfd„| j                  D «       «      S )Nc              3  ó<   •K  — | ]  }‰|j                   k(  –— Œ y ­wr-   )r{   )r'  rl  r9   s     €r2   r*  z)QueryBuilder.is_joined.<locals>.<genexpr>«  s   øè ø€ Ò>¨$�5˜DŸI™IÕ%Ñ>ùs   ƒ)r-  r�  r°  s    `r2   Ú	is_joinedzQueryBuilder.is_joinedª  s   ø€ ÜÓ>°$·+±+Ô>Ó>Ð>r4   c                óT  — | j                   | j                  gz   }|j                  «       D ]v  }|j                  |v }|j                  | j                  D �cg c]  }|j
                  ‘Œ c}v }t        |j                  du| | |j                  | j                  k7  g«      sŒv y yc c}w )z‡
        Returns False if the term references a table not already part of the
        FROM clause or JOINS and True otherwise.
        NFT)r(  r|  r$  r9   r�  r{   Úall)r1   rg  r)  r<   Útable_in_base_tablesrl  Útable_in_joinss          r2   rÐ  zQueryBuilder._validate_table­  s§   € ð
 —j‘j D×$6Ñ$6Ð#7Ñ7ˆà—\‘\“^ò 	ˆEØ#(§;¡;°+Ð#=Ð Ø"Ÿ[™[À4Ç;Á;Ö,O¸4¨T¯Y«YÒ,OÐOˆNÜà—K‘K tÐ+Ø,Ð,Ø&Ð&Ø—K‘K 4×#5Ñ#5Ñ5ð	õñ ð	ð ùò -Ps   ÁB%c                óV   — d| j                   z  |_        | xj                   dz  c_         y )Nr   r�   )r–  r/   )r1   rR  s     r2   rç  zQueryBuilder._tag_subqueryÂ  s%   € Ø $×"6Ñ"6Ñ6ˆŒØ×Ò Ñ!Ör4   c           
     ó,  — | j                   €t        ddz  «      ‚|syt        |d   t        t        t
        f«      s|g}|D ]L  }| j                  j                  |D �cg c]%  }t        |t        «      r|n| j                  |«      ‘Œ' c}«       ŒN yc c}w )zš
        Handy function for INSERT and REPLACE statements in order to check if
        terms are introduced and how append them to `self._values`
        Nr¯  r¿   r   )
r{  r£   r]   rŽ   r�   r’  rƒ  rÇ   r   r)  )r1   rº   Úvaluesr[  s       r2   r¾  zQueryBuilder._apply_termsÆ  s�   € ð
 ×ÑÐ%Ü Ð!GÈ(Ñ!RÓSÐSáØä˜% ™(¤T¬5´#Ð$6Ô7Ø�GˆEàò 	wˆFØ�L‰L×ÑÐntÖ uÐej¬*°U¼DÔ*A¡Àt×GYÑGYÐZ_ÓG`Ñ!`Ò uÕvñ	wùÚ us   Á*B
c                ó:   — | j                  | j                  ¬«      S )N)rQ  )rY   rQ  r>   s    r2   r®   zQueryBuilder.__str__×  s   € Ø�|‰| D§L¡Lˆ|Ó1Ð1r4   c                ó"   — | j                  «       S r-   ©r®   r>   s    r2   r³   zQueryBuilder.__repr__Ú  rO  r4   c                óZ   — t        |t        «      sy| j                  |j                  k(  syyr±   )r]   r(   r/   r^   s     r2   r`   zQueryBuilder.__eq__Ý  s%   € Ü˜%¤Ô.Øà�z‰z˜UŸ[™[Ò(Øàr4   c                ó&   — | j                  |«       S r-   rr   r^   s     r2   rs   zQueryBuilder.__ne__æ  rt   r4   c                óf   — t        | j                  «      t        d„ | j                  D «       «      z   S )Nc              3  ó2   K  — | ]  }t        |«      –— Œ y ­wr-   )rb   )r'  r(  s     r2   r*  z(QueryBuilder.__hash__.<locals>.<genexpr>ê  s   è ø€ Ò%L°v¤d¨6§lÑ%Lùs   ‚)rb   r/   Úsumr(  r>   s    r2   rc   zQueryBuilder.__hash__é  s%   € Ü�D—J‘JÓ¤#Ñ%LÀÇÁÔ%LÓ"LÑLÐLr4   c                ó  — |j                  d| j                  «       |j                  d| j                  «       |j                  d| j                  «       |j                  d| j                  «       |j                  d| j
                  «       y )Nr}   Úsecondary_quote_charÚalias_quote_charr˜  rQ  )rW  rX  ÚSECONDARY_QUOTE_CHARÚALIAS_QUOTE_CHARr˜  rQ  rZ   s     r2   Ú_set_kwargs_defaultsz!QueryBuilder._set_kwargs_defaultsì  sl   € Ø×Ñ˜,¨¯©Ô8Ø×ÑÐ0°$×2KÑ2KÔLØ×ÑÐ,¨d×.CÑ.CÔDØ×Ñ˜,¨¯©Ô8Ø×Ñ˜) T§\¡\Õ2r4   c                óò
  ‡— | j                  ‰«       | j                  s%| j                  s| j                  s| j                  sy| j                  r| j                  s| j
                  sy| j                  r| j                  syt        | j                  «      }dt        | j                  «      k  }dt        | j                  «      k  xr t        | j                  d   t        «      }| j                  }| j                  xr | j                  }t        |||||g«      ‰d<   | j                  rã| j                  r | j                   di ‰¤Žnd}	|	 | j"                  di ‰¤Žz  }	| j                  r*|	ddj%                  ˆfd„| j                  D «       «      z   z  }	|	 | j&                  di ‰¤Žz  }	| j                  r|	 | j(                  di ‰¤Žz  }	| j*                  r|	 | j,                  di ‰¤Žz  }	| j.                  �|	| j1                  «       z  }	|	S | j                  r | j2                  di ‰¤Ž}	�n"| j4                  sÀ| j                  r´| j                  r | j                   di ‰¤Žnd}	| j6                  r|	 | j8                  di ‰¤Žz  }	n|	 | j:                  di ‰¤Žz  }	| j<                  r|	 | j>                  di ‰¤Žz  }	| j
                  r|	 | j@                  di ‰¤Žz  }	|	S |	d | jB                  di ‰¤Žz   z  }	nV| j                  r | j                   di ‰¤Žnd}	|	 | jB                  di ‰¤Žz  }	| j                  r|	 | jD                  di ‰¤Žz  }	| j                  r|	 | j(                  di ‰¤Žz  }	| jF                  r|	 | jH                  di ‰¤Žz  }	| jJ                  r|	 | jL                  di ‰¤Žz  }	| jN                  r|	 | jP                  di ‰¤Žz  }	| j                  r*|	ddj%                  ˆfd„| j                  D «       «      z   z  }	| jR                  r|	 | jT                  di ‰¤Žz  }	| j*                  r|	 | j,                  di ‰¤Žz  }	| jV                  r4|	 | jX                  di ‰¤Žz  }	| jZ                  r|	| j]                  «       z  }	| j^                  r|	 | j`                  di ‰¤Žz  }	| jb                  r|	 | jd                  di ‰¤Žz  }	| jf                  r|	 | jh                  di ‰¤Žz  }	 | jj                  |	fi ‰¤Ž}	| jl                  r|	 | jn                  di ‰¤Žz  }	|rdjq                  |	¬	«      }	|r>| jr                  €| jt                  n| jr                  ‰d
<   tw        |	| jx                  fi ‰¤ŽS |	S )NrØ   r�   r   Úwith_namespaceú c              3  óB   •K  — | ]  } |j                   di ‰¤Ž–— Œ y ­wrX   r­   ©r'  rl  r[   s     €r2   r*  z'QueryBuilder.get_sql.<locals>.<genexpr>  s   øè ø€ Ò-]È¨l¨d¯l©lÑ.D¸VÕ.DÑ-]ùó   ƒc              3  óB   •K  — | ]  } |j                   di ‰¤Ž–— Œ y ­wrX   r­   rL  s     €r2   r*  z'QueryBuilder.get_sql.<locals>.<genexpr>J  s   øè ø€ Ò)YÀT¨,¨$¯,©,Ñ*@¸Õ*@Ñ)YùrM  rV  ©rU   rD  rP   )=rG  rZ  r{  r}  r|  rƒ  r�  re   r�  rÆ   r(  r]   r(   r—  r-  r  Ú	_with_sqlÚ_update_sqlrl  Ú_set_sqlÚ	_from_sqlr‡  Ú
_where_sqlr  r]  Ú_delete_sqlr•  r~  Ú_replace_sqlÚ_insert_sqlr‚  Ú_columns_sqlÚ_values_sqlÚ_select_sqlÚ	_into_sqlr�  Ú
_using_sqlr€  Ú_force_index_sqlr�  Ú_use_index_sqlrˆ  Ú_prewhere_sqlr‰  Ú
_group_sqlr”  Ú_rollup_sqlr‹  Ú_having_sqlrŒ  Ú_qualify_sqlr  r\  Ú_apply_paginationr†  Ú_for_update_sqlr~   ÚQUERY_ALIAS_QUOTE_CHARrF  r!   r/   )
r1   r_  rR  r[   Ú	has_joinsÚhas_multiple_from_clausesÚhas_subquery_from_clauseÚhas_reference_to_foreign_tableÚhas_update_fromrb  s
      `      r2   rY   zQueryBuilder.get_sqló  sD  ø€ Ø×!Ñ! &Ô)Ø—’ ×!3Ò!3°t×7HÒ7HÈD×L^ÒL^ØØ×Ò t§}¢}¸¿ºØØ×Ò d§m¢mØä˜Ÿ™Ó%ˆ	Ø$%¬¨D¯J©J«Ñ$7Ð!Ø#$¤s¨4¯:©:£Ñ#6Ò#b¼:ÀdÇjÁjÐQRÁmÔUaÓ;bÐ Ø)-×)<Ñ)<Ð&Ø×,Ñ,Ò;°·±ˆä#&àØ)Ø(Ø.Øðó$
ˆÐÑ ð ×ÒØ6:·j²j˜.˜$Ÿ.™.Ñ2¨6Ò2ÀbˆKàÐ+˜4×+Ñ+Ñ5¨fÑ5Ñ5ˆKà�{Š{Ø˜s S§X¡XÓ-]ÐQU×Q\ÑQ\Ô-]Ó%]Ñ]Ñ]�à˜=˜4Ÿ=™=Ñ2¨6Ñ2Ñ2ˆKà�zŠzØ˜~˜tŸ~™~Ñ7°Ñ7Ñ7�à�|Š|Ø˜˜tŸ™Ñ8°Ñ8Ñ8�à�{‰{Ð&Ø˜tŸ™Ó0Ñ0�àÐà×ÒØ*˜$×*Ñ*Ñ4¨VÑ4ŠKà×"Ò" t×'9Ò'9Ø6:·j²j˜.˜$Ÿ.™.Ñ2¨6Ò2ÀbˆKà�}Š}ØÐ0˜t×0Ñ0Ñ:°6Ñ:Ñ:‘àÐ/˜t×/Ñ/Ñ9°&Ñ9Ñ9�à�}Š}ØÐ0˜t×0Ñ0Ñ:°6Ñ:Ñ:�à�|Š|ØÐ/˜t×/Ñ/Ñ9°&Ñ9Ñ9�Ø"Ð"à˜sÐ%5 T×%5Ñ%5Ñ%?¸Ñ%?Ñ?Ñ?‘ð 7;·j²j˜.˜$Ÿ.™.Ñ2¨6Ò2ÀbˆKàÐ+˜4×+Ñ+Ñ5¨fÑ5Ñ5ˆKà×!Ò!Ø˜~˜tŸ~™~Ñ7°Ñ7Ñ7�à�:Š:Ø˜>˜4Ÿ>™>Ñ3¨FÑ3Ñ3ˆKà�;Š;Ø˜?˜4Ÿ?™?Ñ4¨VÑ4Ñ4ˆKà×ÒØÐ0˜4×0Ñ0Ñ:°6Ñ:Ñ:ˆKà×ÒØÐ.˜4×.Ñ.Ñ8°Ñ8Ñ8ˆKà�;Š;Ø˜3 §¡Ó)YÈTÏ[É[Ô)YÓ!YÑYÑYˆKà�?Š?ØÐ-˜4×-Ñ-Ñ7°Ñ7Ñ7ˆKà�<Š<Ø˜?˜4Ÿ?™?Ñ4¨VÑ4Ñ4ˆKà�>Š>Ø˜?˜4Ÿ?™?Ñ4¨VÑ4Ñ4ˆKØ×!Ò!Ø˜t×/Ñ/Ó1Ñ1�à�=Š=ØÐ+˜4×+Ñ+Ñ5¨fÑ5Ñ5ˆKà�>Š>ØÐ,˜4×,Ñ,Ñ6¨vÑ6Ñ6ˆKà�>Š>ØÐ,˜4×,Ñ,Ñ6¨vÑ6Ñ6ˆKà,�d×,Ñ,¨[ÑC¸FÑCˆà×ÒØÐ/˜4×/Ñ/Ñ9°&Ñ9Ñ9ˆKáØ%×,Ñ,°;Ð,Ó?ˆKáà)-×)DÑ)DÐ)L�×%Ò%ÐRV×RmÑRmð Ð%Ñ&ô $ K°·±ÑF¸vÑFÐFàÐr4   c                ó‚   — | j                   �|| j                  «       z  }| j                  r|| j                  «       z  }|S r-   )r  r]  r   r^  )r1   rb  r[   s      r2   rd  zQueryBuilder._apply_paginationp  s=   € Ø�;‰;Ð"Ø˜4Ÿ?™?Ó,Ñ,ˆKà�<Š<Ø˜4×+Ñ+Ó-Ñ-ˆKàÐr4   c                óR   ‡— ddj                  ˆfd„| j                  D «       «      z   S )NzWITH rj  c              3  ón   •K  — | ],  }|j                   d z    |j                  ddddœ‰¤Žz   dz   –— Œ. y­w)z AS (F©rR  r_  z) NrP   )r;   rY   ©r'  r(  r[   s     €r2   r*  z)QueryBuilder._with_sql.<locals>.<genexpr>z  sC   øè ø€ ò "
àð �K‰K˜'Ñ! N F§N¡NÐ$^¸EÈeÑ$^ÐW]Ñ$^Ñ^ÐaeÕeñ"
ùs   ƒ25)rl  r  rZ   s    `r2   rP  zQueryBuilder._with_sqly  s,   ø€ Ø˜Ÿ™ó "
àŸ*™*ô"
ó 
ñ 
ð 	
r4   c                ó*   — | j                   rd}|S d}|S )Nz	DISTINCT rØ   rÈ  )r1   r[   rÉ  s      r2   Ú_distinct_sqlzQueryBuilder._distinct_sql  s   € Ø"&§.¢.�;ˆàˆð 79ˆàˆr4   c                ó*   — | j                   rd}|S d}|S )Nz FOR UPDATErØ   rË  )r1   r[   rÌ  s      r2   re  zQueryBuilder._for_update_sql„  s"   € Ø&*×&6Ò&6�]ˆ
àÐð =?ˆ
àÐr4   c                óŽ   ‡— dj                   | j                  di ‰¤Ždj                  ˆfd„| j                  D «       «      ¬«      S )NzSELECT {distinct}{select}rj  c              3  óH   •K  — | ]  } |j                   dd d dœ‰¤Ž–— Œ y­w©T)r_  rR  NrP   r­   ©r'  rg  r[   s     €r2   r*  z+QueryBuilder._select_sql.<locals>.<genexpr>Œ  s'   øè ø€ ÒmÐW[˜L˜DŸL™LÐR°DÀ4ÑRÈ6ÕRÑmùó   ƒ")rÉ  r¸   rP   )r~   rr  rl  rZ  rZ   s    `r2   rZ  zQueryBuilder._select_sql‰  sG   ø€ Ø*×1Ñ1Ø'�T×'Ñ'Ñ1¨&Ñ1Ø—8‘8ÓmÐ_c×_lÑ_lÔmÓmð 2ó 
ð 	
r4   c                ó‚   — dj                   | j                  j                  di |¤Ž| j                  rd¬«      S d¬«      S )NzINSERT {ignore}INTO {table}zIGNORE rØ   )r9   rÎ  rP   )r~   r{  rY   r…  rZ   s     r2   rW  zQueryBuilder._insert_sql�  sN   € Ø,×3Ñ3Ø,�$×$Ñ$×,Ñ,Ñ6¨vÑ6Ø $§¢�9ð 4ó 
ð 	
à24ð 4ó 
ð 	
r4   c                óZ   — dj                   | j                  j                  di |¤Ž¬«      S )NzREPLACE INTO {table}r8   rP   ©r~   r{  rY   rZ   s     r2   rV  zQueryBuilder._replace_sql•  s3   € Ø%×,Ñ,Ø,�$×$Ñ$×,Ñ,Ñ6¨vÑ6ð -ó 
ð 	
r4   c                  ó   — y)NÚDELETErP   )r[   s    r2   rU  zQueryBuilder._delete_sqlš  s   € àr4   c                óZ   — dj                   | j                  j                  di |¤Ž¬«      S )NzUPDATE {table}r8   rP   )r~   r|  rY   rZ   s     r2   rQ  zQueryBuilder._update_sqlž  s-   € Ø×&Ñ&Ð-G¨T×-?Ñ-?×-GÑ-GÑ-QÈ&Ñ-QÐ&ÓRÐRr4   c                ól   ‡— dj                  dj                  ˆfd„| j                  D «       «      ¬«      S )zÒ
        SQL for Columns clause for INSERT queries
        :param with_namespace:
            Remove from kwargs, never format the column terms with namespaces since only one table can be inserted into
        z ({columns})rj  c              3  óF   •K  — | ]  } |j                   dd di‰¤Ž–— Œ y­w)rI  FNrP   r­   rw  s     €r2   r*  z,QueryBuilder._columns_sql.<locals>.<genexpr>¨  s$   øè ø€ ÒdÈd˜\˜TŸ\™\ÑI¸ÐIÀ&ÕIÑdùs   ƒ!©rÞ   )r~   rl  r‚  ©r1   rI  r[   s     `r2   rX  zQueryBuilder._columns_sql¡  s6   ø€ ð ×$Ñ$Ø—H‘HÓdÐVZ×VcÑVcÔdÓdð %ó 
ð 	
r4   c                ól   ‡— dj                  dj                  ˆfd„| j                  D «       «      ¬«      S )Nz VALUES ({values})z),(c              3  óR   •K  — | ]  }d j                  ˆfd„|D «       «      –— Œ  y­w)rj  c              3  óH   •K  — | ]  } |j                   dd d dœ‰¤Ž–— Œ y­wrv  r­   rw  s     €r2   r*  z5QueryBuilder._values_sql.<locals>.<genexpr>.<genexpr>®  s'   øè ø€ Ò`ÐTX˜˜Ÿ™ÐO°ÀÑOÈÕOÑ`ùrx  N)rl  )r'  Úrowr[   s     €r2   r*  z+QueryBuilder._values_sql.<locals>.<genexpr>­  s&   øè ø€ ò Øeh�—‘Ó`Ð\_Ô`×`ñùs   ƒ$')r9  )r~   rl  rƒ  rZ   s    `r2   rY  zQueryBuilder._values_sql«  s:   ø€ Ø#×*Ñ*Ø—:‘:ó Ølp×lxÑlxôó ð +ó 
ð 	
r4   c                ó^   — dj                   | j                  j                  dddi|¤Ž¬«      S )Nz INTO {table}r_  Fr8   rP   r{  rZ   s     r2   r[  zQueryBuilder._into_sql²  s8   € Ø×%Ñ%Ø,�$×$Ñ$×,Ñ,ÑH¸ÐHÀÑHð &ó 
ð 	
r4   c                ól   ‡— dj                  dj                  ˆfd„| j                  D «       «      ¬«      S )Nz FROM {selectable}rj  c              3  óH   •K  — | ]  } |j                   dd d dœ‰¤Ž–— Œ y­w©Tro  NrP   r­   rp  s     €r2   r*  z)QueryBuilder._from_sql.<locals>.<genexpr>¹  s(   øè ø€ ÒrÐ]c  §¡Ð X¸ÈÑ XÐQWÕ XÑrùrx  ©r¢  )r~   rl  r(  r‚  s     `r2   rS  zQueryBuilder._from_sql·  s4   ø€ Ø#×*Ñ*Ø—x‘xÓrÐgk×gqÑgqÔrÓrð +ó 
ð 	
r4   c                ól   ‡— dj                  dj                  ˆfd„| j                  D «       «      ¬«      S )Nz USING {selectable}rj  c              3  óH   •K  — | ]  } |j                   dd d dœ‰¤Ž–— Œ y­wrŠ  r­   rp  s     €r2   r*  z*QueryBuilder._using_sql.<locals>.<genexpr>¾  s(   øè ø€ ÒsÐ]c  §¡Ð X¸ÈÑ XÐQWÕ XÑsùrx  r‹  )r~   rl  r�  r‚  s     `r2   r\  zQueryBuilder._using_sql¼  s4   ø€ Ø$×+Ñ+Ø—x‘xÓsÐgk×grÑgrÔsÓsð ,ó 
ð 	
r4   c                ól   ‡— dj                  dj                  ˆfd„| j                  D «       «      ¬«      S )Nz FORCE INDEX ({indexes})rj  c              3  óB   •K  — | ]  } |j                   di ‰¤Ž–— Œ y ­wrX   r­   ©r'  rú   r[   s     €r2   r*  z0QueryBuilder._force_index_sql.<locals>.<genexpr>Ã  s   øè ø€ ÒV¸˜]˜UŸ]™]Ñ4¨VÕ4ÑVùrM  ©Úindexes)r~   rl  r€  rZ   s    `r2   r]  zQueryBuilder._force_index_sqlÁ  s3   ø€ Ø)×0Ñ0Ø—H‘HÓVÀ$×BUÑBUÔVÓVð 1ó 
ð 	
r4   c                ól   ‡— dj                  dj                  ˆfd„| j                  D «       «      ¬«      S )Nz USE INDEX ({indexes})rj  c              3  óB   •K  — | ]  } |j                   di ‰¤Ž–— Œ y ­wrX   r­   r�  s     €r2   r*  z.QueryBuilder._use_index_sql.<locals>.<genexpr>È  s   øè ø€ ÒT¸˜]˜UŸ]™]Ñ4¨VÕ4ÑTùrM  r‘  )r~   rl  r�  rZ   s    `r2   r^  zQueryBuilder._use_index_sqlÆ  s3   ø€ Ø'×.Ñ.Ø—H‘HÓTÀ$×BSÑBSÔTÓTð /ó 
ð 	
r4   c                ó`   — dj                   | j                  j                  d|ddœ|¤Ž¬«      S )Nz PREWHERE {prewhere}T©r}   rR  )rÒ  rP   )r~   rˆ  rY   ©r1   r}   r[   s      r2   r_  zQueryBuilder._prewhere_sqlË  s9   € Ø%×,Ñ,Ø,�T—_‘_×,Ñ,Ð\¸
ÈTÑ\ÐU[Ñ\ð -ó 
ð 	
r4   c                ó`   — dj                   | j                  j                  d|ddœ|¤Ž¬«      S )Nz WHERE {where}Tr–  )rÔ  rP   )r~   r‡  rY   r—  s      r2   rT  zQueryBuilder._where_sqlÐ  s4   € Ø×&Ñ&Ð-A¨T¯\©\×-AÑ-AÐ-qÈZÐbfÑ-qÐjpÑ-qÐ&ÓrÐrr4   c           	     ó´  — g }| j                   D �ch c]  }|j                  ’Œ }}| j                  D ]l  }|rD|j                  r8|j                  |v r*|j                  t	        |j                  |xs |«      «       ŒI|j                   |j
                  d||dœ|¤Ž«       Œn dj                  dj                  |«      ¬«      }	| j                  r|	dz   S |	S c c}w )až  
        Produces the GROUP BY part of the query.  This is a list of fields. The clauses are stored in the query under
        self._groupbys as a list fields.

        If an groupby field is used in the select clause,
        determined by a matching alias, and the groupby_alias is set True
        then the GROUP BY clause will use the alias,
        otherwise the entire field will be rendered as SQL.
        ©r}   rD  z GROUP BY {groupby}rj  )r¬  z WITH TOTALSrP   )	rZ  r/   r‰  rÇ   r"   rY   r~   rl  rŠ  )
r1   r}   rD  Úgroupby_aliasr[   rm  r‹   rn  r<   Úsqls
             r2   r`  zQueryBuilder._group_sqlÓ  sË   € ð  ˆØ-1¯]©]Ö;¨˜AŸG›GÐ;ÐÐ;Ø—^‘^ò 	rˆEÙ §¢°·±Ð@PÑ1PØ—‘œ}¨U¯[©[Ð:JÒ:XÈjÓYÕZà—‘˜}˜uŸ}™}Ðp¸
ÐUeÑpÐioÑpÕqð		rð $×*Ñ*°3·8±8¸GÓ3DÐ*ÓEˆà×ÒØ˜Ñ'Ð'àˆ
ùò <s   ‘Cc                ó¶  — g }| j                   D �ch c]  }|j                  ’Œ }}| j                  D ]€  \  }}	|r4|j                  r(|j                  |v rt        |j                  |xs |«      n |j                  d||dœ|¤Ž}
|j                  |	�dj                  |
|	j                  ¬«      n|
«       Œ‚ dj                  dj                  |«      ¬«      S c c}w )a  
        Produces the ORDER BY part of the query.  This is a list of fields and possibly their directionality, ASC or
        DESC. The clauses are stored in the query under self._orderbys as a list of tuples containing the field and
        directionality (which can be None).

        If an order by field is used in the select clause,
        determined by a matching, and the orderby_alias
        is set True then the ORDER BY clause will use
        the alias, otherwise the field will be rendered as SQL.
        rš  re  rf  ri  rj  rk  rP   )	rZ  r/   r  r"   rY   rÇ   r~   r[  rl  )r1   r}   rD  Úorderby_aliasr[   rm  r‹   rn  r<   ro  rg  s              r2   r\  zQueryBuilder._orderby_sqlò  sÝ   € ð" ˆØ-1¯]©]Ö;¨˜AŸG›GÐ;ÐÐ;Ø%)§^¡^ò 		Ñ!ˆE�>ñ ! U§[¢[°U·[±[ÐDTÑ5Tô ˜eŸk™kÐ+;Ò+I¸zÔJà"�U—]‘]Ðf¨jÐK[ÑfÐ_eÑfð ð �N‰NØTbÐTnÐ!×(Ñ(¨d¸>×;OÑ;OÐ(ÔPÐtxõð		ð %×+Ñ+°C·H±H¸WÓ4EÐ+ÓFÐFùò <s   ‘Cc                 ó   — y)Nz WITH ROLLUPrP   r>   s    r2   ra  zQueryBuilder._rollup_sql  s   € Ør4   c                ó^   — dj                   | j                  j                  dd|i|¤Ž¬«      S )Nz HAVING {having}r}   )rÖ  rP   )r~   r‹  rY   r—  s      r2   rb  zQueryBuilder._having_sql  s2   € Ø!×(Ñ(Ð0E°·±×0EÑ0EÑ0fÐQ[Ð0fÐ_eÑ0fÐ(ÓgÐgr4   c                ó^   — dj                   | j                  j                  dd|i|¤Ž¬«      S )Nz QUALIFY {qualify}r}   )rØ  rP   )r~   rŒ  rY   r—  s      r2   rc  zQueryBuilder._qualify_sql  s2   € Ø#×*Ñ*Ð3I°4·>±>×3IÑ3IÑ3jÐU_Ð3jÐciÑ3jÐ*ÓkÐkr4   c                ó    — d| j                   › �S )Nz OFFSET r3  r>   s    r2   r^  zQueryBuilder._offset_sql  s   € Ø˜$Ÿ,™,˜Ð(Ð(r4   c                ó    — d| j                   › �S )Nz LIMIT r.  r>   s    r2   r]  zQueryBuilder._limit_sql  s   € Ø˜Ÿ™˜Ð&Ð&r4   c                ól   ‡— dj                  dj                  ˆfd„| j                  D «       «      ¬«      S )Nz
 SET {set}rj  c              3  ó    •K  — | ]E  \  }}d j                   |j                  di t        ‰d¬«      ¤Ž |j                  di ‰¤Ž¬«      –— ŒG y­w)z{field}={value}F)rI  )r<   r[  NrP   )r~   rY   Údict)r'  r<   r[  r[   s      €r2   r*  z(QueryBuilder._set_sql.<locals>.<genexpr>#  s\   øè ø€ ò ñ !�E˜5ð "×(Ñ(Ø'˜%Ÿ-™-ÑM¬$¨vÀeÔ*LÑMÐUbÐUZ×UbÑUbÑUlÐekÑUlð )÷ ñùs   ƒAA)r’  )r~   rl  r�  rZ   s    `r2   rR  zQueryBuilder._set_sql!  s:   ø€ Ø×"Ñ"Ø—‘ó ð %)§M¡Mô	ó ð #ó 
ð 	
r4   c                ó   —  || g|¢­i |¤ŽS )aÈ  Call a function on the current object and return the result.

        Example usage:

        .. code-block:: python

            from pypika import Query, functions as fn
            from pypika.queries import QueryBuilder

            def rows_by_group(query: QueryBuilder, *groups) -> QueryBuilder:
                return (
                    query
                    .select(*groups, fn.Count("*").as_("n_rows"))
                    .groupby(*groups)
                )

            base_query = Query.from_("table")

            col1_agg = base_query.pipe(rows_by_group, "col1")
            col2_agg = base_query.pipe(rows_by_group, "col2")
            col1_col2_agg = base_query.pipe(rows_by_group, "col1", "col2")

        Makes chaining functions together easier, especially when the functions are
        defined elsewhere. For example, you could define a function that filters
        rows by a date range and then group by a set of columns:


        .. code-block:: python

            from datetime import datetime, timedelta

            from pypika import Field

            def days_since(query: QueryBuilder, n_days: int) -> QueryBuilder:
                return (
                    query
                    .where("date" > fn.Date(datetime.now().date() - timedelta(days=n_days)))
                )

            (
                base_query
                .pipe(days_since, n_days=7)
                .pipe(rows_by_group, "col1", "col2")
            )
        rP   )r1   Úfuncrá  r[   s       r2   ÚpipezQueryBuilder.pipe+  s   € ñ\ �DÐ*˜4Ò* 6Ñ*Ð*r4   )
rQ  úDialects | NonerY  re   r$  rr  r™  re   r˜  re   rÂ   )r¢  zSelectable | Query | strrI   rJ   ©r¨  úTable | Noner©  r¬  rI   rJ   )r¢  r+   r;   rH   rI   rJ   )r9   r  rI   rJ   )rº   r   rI   rJ   ©rI   rJ   )rg  r  rº   r  rI   rJ   )r�   r   rI   rJ   ©r�   zTerm | EmptyCriterionrI   rJ   )rº   zstr | int | TermrI   rJ   )rº   zlist | tuple | set | Termr[   r   rI   rJ   )r+  r   r[   r   rI   rJ   )r{   z0Table | QueryBuilder | AliasedQuery | Selectablerê  r   rI   úJoiner[Self])r{   ú#Table | QueryBuilder | AliasedQueryrI   r¯  rs  rt  ru  )r<   zField | strr[  r   rI   rJ   )r  r  rI   rJ   )r{   r   rI   zQueryBuilder | Fieldr-   )r  úSequence[Field]r}   r�   rI   ú	list[str])rg  rH   rI   rJ   )rg  r   rI   rJ   )r"  r   rI   rJ   )rI   zlist[Field])rl  ÚJoinrI   rJ   )r9   ry   rI   re   )rg  r   rI   re   )rR  r(   rI   rJ   rK   )r_   r(   rI   re   rf   ©r[   r¦  rI   rJ   rv  rw  )rb  rH   rI   rH   rd   )F)rI  re   r[   r   rI   rH   r€   )NNT)
r}   r�   rD  r�   r›  re   r[   r   rI   rH   )
r}   r�   rD  r�   rž  re   r[   r   rI   rH   )lrL   rM   rN   rÛ   rX  rE  rF  rf  r”   Ú	QUERY_CLSr   r3   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ì  rl  rí  rñ  rõ  rù  rü  rÿ  r  r  r  r0  r5  r8  r;  r>  r@  rB  r’  rE  rI  rM  r  rE   rÃ   r  r´  r³  rµ  r$  r/  r2  rÐ  rç  r¾  r®   r³   r`   rs   rc   rG  rY   rd  rP  rr  re  rZ  rW  rV  rU  rQ  rX  rY  r[  rS  r\  r]  r^  r_  rT  r`  r\  ra  rb  rc  r^  r]  rR  r©  rh   ri   s   @r2   r(   r(   Â  s  ø„ ñð
 €JØÐØÐØ!ÐØ€Ið $(Ø+/Ø*6ØØ ð9#à ð9#ð %)ð9#ð (ð	9#ð
 ð9#ð õ9#óvð$ ò7ó ð7ð4 ò#4ó ð#4ðJ òó ðð òQó ðQð ò	\ó ð	\ð ò!ó ð!ð òQó ðQð ò
'ó ð
'ð òó ðð òó ðð ò5ó ð5ð ò3ó ð3ð òó ðð ò ó ð ð òó ðð ò(ó ð(ð ò
%ó ð
%ð ò&ó ð&ð ò'ó ð'ð ò(ó ð(ð ò!ó ð!ð ò2ó ð2ð2 ò@ó ð@ð àV^×VdÑVdðBØDðBØKSðBà	òBó ðBó&/ó.ó4ó/ó5ó/ó4ó/ó.ð òó ðð òó ðð ò]ó ð]ð òaó ðað òaó ðað òaó ðað ò]ó ð]ð ò-ó ð-ó!ó%ó!ð ò!ó ð!õ ð
 ó\ó ð\ó	=ó#ó"'óó
!ó?óó*"ówó"2óóó&óMó3ô{ózó
óó
ó

ó
ó
ð
 òó ðóSô
ó
ó
ô

ô

ó

ó

ô

ô
sð
 "&Ø'+Ø"ð	àðð %ðð ð	ð
 ðð 
óðB "&Ø'+Ø"ð	GàðGð %ðGð ð	Gð
 ðGð 
óGó@ôhôló)ó'ó
ö.+r4   c                  ó6   — e Zd Zdd„Zdd	d„Zd
d„Zd
d„Zdd„Zy)ræ  c                ó<   — || _         || _        || _        || _        y r-   )rU   r{   rê  rå  )r1   rU   r{   rê  rå  s        r2   r3   zJoiner.__init__]  s   € ØˆŒ
ØˆŒ	ØˆŒØ$ˆ�r4   Nc                óÞ   — |€%t        dj                  | j                  ¬«      «      ‚| j                  j	                  t        | j                  | j                  ||«      «       | j                  S )NzIParameter 'criterion' is required for a {type} JOIN but was not supplied.©rÏ   )r   r~   rå  rU   r/  ÚJoinOnr{   rê  )r1   r�   Úcollates      r2   Úonz	Joiner.onc  s[   € ØÐÜð4ß4:±FÀÇÁ°FÓ4Póð ð
 	�
‰
×Ñœ6 $§)¡)¨T¯X©X°yÀ'ÓJÔKØ�z‰zÐr4   c                óx  — |s%t        dj                  | j                  ¬«      «      ‚d }|D ]G  }t        || j                  j
                  d   ¬«      t        || j                  ¬«      k(  }|€|n||z  }ŒI | j                  j                  t        | j                  | j                  |«      «       | j                  S )NzFParameter 'fields' is required for a {type} JOIN but was not supplied.r¹  r   r8   )
r   r~   rå  r   rU   r(  r{   r/  rº  rê  )r1   r+  r�   r<   Úconstituents        r2   Úon_fieldzJoiner.on_fieldm  s°   € ÙÜØ[×bÑbÐhl×hwÑhwÐbÓxóð ð ˆ	Øò 	VˆEÜ ¨T¯Z©Z×-=Ñ-=¸aÑ-@ÔAÄUÈ5ÐX\×XaÑXaÔEbÑbˆKØ'0Ð'8™¸iÈ+Ñ>U‰Ið	Vð 	�
‰
×Ñœ6 $§)¡)¨T¯X©X°yÓAÔBØ�z‰zÐr4   c                óà   — |st        d«      ‚| j                  j                  t        | j                  | j
                  |D �cg c]  }t        |«      ‘Œ c}«      «       | j                  S c c}w )NzUParameter 'fields' is required when joining with a using clause but was not supplied.)r   rU   r/  Ú	JoinUsingr{   rê  r   )r1   r+  r<   s      r2   ÚusingzJoiner.using{  sT   € ÙÜÐ wÓxÐxà�
‰
×Ñœ9 T§Y¡Y°·±ÐU[Ö:\ÈE¼5À½<Ò:\Ó]Ô^Ø�z‰zÐùò ;]s   ÁA+c                ó”   — | j                   j                  t        | j                  t        j
                  «      «       | j                   S )zReturn cross join)rU   r/  r³  r{   r   r  r>   s    r2   r  zJoiner.cross‚  s-   € à�
‰
×Ñœ4 §	¡	¬8¯>©>Ó:Ô;à�z‰zÐr4   )
rU   r'   r{   r°  rê  r   rå  rH   rI   rJ   r-   )r�   zCriterion | Noner»  r�   rI   r'   )r+  r   rI   r'   )rI   r'   )rL   rM   rN   r3   r¼  r¿  rÂ  r  rP   r4   r2   ræ  ræ  \  s   „ ó%ôóóôr4   ræ  c                  ó6   — e Zd Zdd„Zdd„Zdd„Zed	d„«       Zy)
r³  c                ó    — || _         || _        y r-   )r{   rê  ré  s      r2   r3   zJoin.__init__Š  s   € ØˆŒ	Øˆ�r4   c                óÞ   — dj                   | j                  j                  ddddœ|¤Ž¬«      }| j                  j                  r'dj                  || j                  j                  ¬«      S |S )NzJOIN {table}Tro  r8   z{type} {join})rl  rÏ   rP   )r~   r{   rY   rê  r[  )r1   r[   rœ  s      r2   rY   zJoin.get_sqlŽ  se   € Ø×#Ñ#Ø#�$—)‘)×#Ñ#ÐM¨T¸dÑMÀfÑMð $ó 
ˆð �8‰8�>Š>Ø"×)Ñ)¨s¸¿¹¿¹Ð)ÓHÐHØˆ
r4   c                 ó   — y r-   rP   ©r1   r(  r�  s      r2   r,  zJoin.validate—  ó   € Ør4   c                óF   — | j                   j                  ||«      | _         y©aX  
        Replaces all occurrences of the specified table with the new table. Useful when reusing
        fields across queries.

        :param current_table:
            The table to be replaced.
        :param new_table:
            The table to replace with.
        :return:
            A copy of the join with the tables replaced.
        N)r{   r¥  ©r1   r¨  r©  s      r2   r¥  zJoin.replace_tableš  s   € ð —I‘I×+Ñ+¨M¸9ÓEˆ�	r4   N)r{   r   rê  r   rI   rJ   rd   ©r(  úSequence[Table]r�  rÎ  rI   rJ   r«  )rL   rM   rN   r3   rY   r,  r    r¥  rP   r4   r2   r³  r³  ‰  s'   „ óóóð òFó ñFr4   r³  c                  óH   ‡ — e Zd Zddˆ fd„Zdˆ fd„Zdd„Zed	d„«       Zˆ xZS )
rº  c                óB   •— t         ‰| �  ||«       || _        || _        y r-   )rT   r3   r�   r»  )r1   r{   rê  Úcriteriar»  rV   s        €r2   r3   zJoinOn.__init__«  s    ø€ Ü‰Ñ˜˜sÔ#Ø!ˆŒØˆ�r4   c                óÂ   •— t        ‰| �  di |¤Ž}dj                  | | j                  j                  dddi|¤Ž| j                  rd| j                  › �¬«      S d¬«      S )Nz{join} ON {criterion}{collate}rR  Tz	 COLLATE rØ   )rl  r�   r»  rP   )rT   rY   r~   r�   r»  ©r1   r[   Újoin_sqlrV   s      €r2   rY   zJoinOn.get_sql°  su   ø€ Ü‘7‘?Ñ, VÑ,ˆØ/×6Ñ6ØØ,�d—n‘n×,Ñ,ÑE°dÐE¸fÑEØ26·,²,�i §¡˜~Ð.ð 7ó 
ð 	
ð EGð 7ó 
ð 	
r4   c           
     ót  — t        | j                  j                  «       D �cg c]  }|j                  ‘Œ c}«      }t        |«      |D �ch c]  }|j                  ’Œ c}z  | j                  hz  }||z
  }|r8t        dj                  dj                  t        t        |«      «      ¬«      «      ‚y c c}w c c}w )Nz�Invalid join criterion. One field is required from the joined item and another from the selected table or an existing join.  Found [{tables}]ú, )rÉ   )
r’  r�   r$  r9   r{   r   r~   rl  ÚmaprH   )r1   r(  r�  ÚfÚcriterion_tablesrl  Úavailable_tablesÚmissing_tabless           r2   r,  zJoinOn.validate¸  s§   € Ü°·±×1GÑ1GÓ1IÖJ¨A §£ÒJÓKÐÜ˜u›:¸vÖ(F°t¨¯«Ò(FÑFÈ$Ï)É)ÈÑTÐØ)Ð,<Ñ<ˆÙÜðYßY_ÑY_ØŸ9™9¤S¬¨nÓ%=Ó>ð Z`ó Zóð ð ùò  KùÚ(Fs   ¢B0Á
B5c                óŠ   — | j                   |k(  r|n| j                   | _         | j                  j                  ||«      | _        yrË  )r{   r�   r¥  rÌ  s      r2   r¥  zJoinOn.replace_tableÄ  s4   € ð "&§¡¨mÒ!;‘IÀÇÁˆŒ	ØŸ™×5Ñ5°mÀYÓOˆ�r4   r-   )
r{   r   rê  r   rÑ  r(   r»  r�   rI   rJ   rd   rÍ  r«  ©	rL   rM   rN   r3   rY   r,  r    r¥  rh   ri   s   @r2   rº  rº  ª  s(   ø„ öõ

ó
ð òPó ôPr4   rº  c                  óF   ‡ — e Zd Zdˆ fd„Zdˆ fd„Zdd„Zedd„«       Zˆ xZS )	rÁ  c                ó4   •— t         ‰| �  ||«       || _        y r-   )rT   r3   r+  )r1   r{   rê  r+  rV   s       €r2   r3   zJoinUsing.__init__Ö  s   ø€ Ü‰Ñ˜˜sÔ#Øˆ�r4   c                óŽ   •‡— t        ‰| �  di ‰¤Ž}dj                  |dj                  ˆfd„| j                  D «       «      ¬«      S )Nz{join} USING ({fields})rj  c              3  óB   •K  — | ]  } |j                   di ‰¤Ž–— Œ y ­wrX   r­   )r'  r<   r[   s     €r2   r*  z$JoinUsing.get_sql.<locals>.<genexpr>Þ  s   øè ø€ ÒM¸˜M˜EŸM™MÑ3¨FÕ3ÑMùrM  )rl  r+  rP   )rT   rY   r~   rl  r+  rÓ  s    ` €r2   rY   zJoinUsing.get_sqlÚ  sE   ù€ Ü‘7‘?Ñ, VÑ,ˆØ(×/Ñ/ØØ—8‘8ÓMÀÇÁÔMÓMð 0ó 
ð 	
r4   c                 ó   — y r-   rP   rÈ  s      r2   r,  zJoinUsing.validateá  rÉ  r4   c                ó°   — | j                   |k(  r|n| j                   | _         | j                  D �cg c]  }|j                  ||«      ‘Œ c}| _        yc c}w rË  )r{   r+  r¥  )r1   r¨  r©  r<   s       r2   r¥  zJoinUsing.replace_tableä  sD   € ð "&§¡¨mÒ!;‘IÀÇÁˆŒ	ØRV×R]ÑR]Ö^È�u×*Ñ*¨=¸)ÕDÒ^ˆ�ùÒ^s   ±A)r{   r   rê  r   r+  r±  rI   rJ   rd   rÍ  r«  rÝ  ri   s   @r2   rÁ  rÁ  Õ  s(   ø„ õõ
óð ò_ó ô_r4   rÁ  c                  ó|  — e Zd ZdZdZdZdZeZdd d„Z	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ed&d„«       Zed&d„«       Ze	 	 d'	 	 	 	 	 	 	 	 	 	 	 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,d„Zd+d„Zd+d„Zd+d„Zd*d„Z d-d„Z!d+d„Z"d+d„Z#y).ró   z5
    Query builder used to build CREATE queries.
    r«   ry  Nc                óä   — d | _         d| _        d| _        d | _        g | _        g | _        d| _        d | _        g | _        d| _	        || _
        d | _        d | _        d | _        d | _        d | _        y r¼  )Ú_create_tableÚ
_temporaryÚ	_unloggedÚ
_as_selectr‚  Ú_period_forsÚ_with_system_versioningÚ_primary_keyÚ_uniquesÚ_if_not_existsrQ  Ú_foreign_keyÚ_foreign_key_reference_tableÚ_foreign_key_referenceÚ_foreign_key_on_updateÚ_foreign_key_on_delete©r1   rQ  s     r2   r3   zCreateQueryBuilder.__init__ÿ  s|   € Ø!ˆÔØˆŒØˆŒØˆŒØˆŒØˆÔØ',ˆÔ$Ø ˆÔØˆŒØ#ˆÔØˆŒØ ˆÔØ,0ˆÔ)Ø&*ˆÔ#Ø7;ˆÔ#Ø7;ˆÕ#r4   c                ó¬   — |j                  d| j                  «       |j                  d| j                  «       |j                  d| j                  «       y ©Nr}   rC  rQ  ©rW  rX  rE  rQ  rZ   s     r2   rG  z'CreateQueryBuilder._set_kwargs_defaults  óA   € Ø×Ñ˜,¨¯©Ô8Ø×ÑÐ0°$×2KÑ2KÔLØ×Ñ˜) T§\¡\Õ2r4   c                ó‚   — | j                   rt        d«      ‚t        |t        «      r|| _         yt        |«      | _         y)zý
        Creates the table.

        :param table:
            An instance of a Table object or a string table name.

        :raises AttributeError:
            If the table is already created.

        :return:
            CreateQueryBuilder.
        z1'Query' object already has attribute create_tableN)ræ  r£   r]   ry   r°  s     r2   rô   zCreateQueryBuilder.create_table  s5   € ð ×ÒÜ Ð!TÓUÐUä&0°¼Ô&>˜UˆÕÄEÈ%ÃLˆÕr4   c                ó   — d| _         y)z^
        Makes the table temporary.

        :return:
            CreateQueryBuilder.
        TN)rç  r>   s    r2   Ú	temporaryzCreateQueryBuilder.temporary)  s   € ð ˆ�r4   c                ó   — d| _         y)z]
        Makes the table unlogged.

        :return:
            CreateQueryBuilder.
        TN)rè  r>   s    r2   ÚunloggedzCreateQueryBuilder.unlogged3  s   € ð ˆ�r4   c                ó   — d| _         y)z[
        Adds system versioning.

        :return:
            CreateQueryBuilder.
        TN©rë  r>   s    r2   Úwith_system_versioningz)CreateQueryBuilder.with_system_versioning=  s   € ð (,ˆÕ$r4   c                óô   — | j                   rt        d«      ‚|D ]\  }t        |t        «      rt	        |«      }n#t        |t
        «      rt	        |d   |d   ¬«      }| j                  j                  |«       Œ^ y)a  
        Adds the columns.

        :param columns:
            Type:  Union[str, TypedTuple[str, str], Column]

            A list of columns.

        :raises AttributeError:
            If the table is an as_select table.

        :return:
            CreateQueryBuilder.
        z.'Query' object already has attribute as_selectr   r�   rÝ   N)ré  r£   r]   rH   rÍ   r�   r‚  rÇ   ©r1   rÞ   rß   s      r2   rÞ   zCreateQueryBuilder.columnsG  si   € ð  �?Š?Ü Ð!QÓRÐRàò 	)ˆFÜ˜&¤#Ô&Ü ›‘Ü˜F¤EÔ*Ü¨F°1©IÀ6È!Á9ÔM�Ø�M‰M× Ñ  Õ(ñ	)r4   c                óP   — | j                   j                  t        |||«      «       y)a&  
        Adds a PERIOD FOR clause.

        :param name:
            The period name.

        :param start_column:
            The column that starts the period.

        :param end_column:
            The column that ends the period.

        :return:
            CreateQueryBuilder.
        N)rê  rÇ   râ   ræ   s       r2   Ú
period_forzCreateQueryBuilder.period_fora  s!   € ð" 	×Ñ× Ñ ¤¨4°¸zÓ!JÕKr4   c                óX   — | j                   j                  | j                  |«      «       y)z¼
        Adds a UNIQUE constraint.

        :param columns:
            Type:  Union[str, Column]

            A list of columns.

        :return:
            CreateQueryBuilder.
        N)rí  rÇ   Ú_prepare_columns_input©r1   rÞ   s     r2   ÚuniquezCreateQueryBuilder.uniquet  s!   € ð 	�‰×Ñ˜T×8Ñ8¸ÓAÕBr4   c                ó^   — | j                   rt        d«      ‚| j                  |«      | _         y)a  
        Adds a primary key constraint.

        :param columns:
            Type:  Union[str, Column]

            A list of columns.

        :raises AttributeError:
            If the primary key is already defined.

        :return:
            CreateQueryBuilder.
        z0'Query' object already has attribute primary_keyN)rì  r£   r  r  s     r2   Úprimary_keyzCreateQueryBuilder.primary_keyƒ  s,   € ð  ×ÒÜ Ð!SÓTÐTØ ×7Ñ7¸Ó@ˆÕr4   c                ó´   — | j                   rt        d«      ‚| j                  |«      | _         || _        | j                  |«      | _        || _        || _        y)a±  
        Adds a foreign key constraint.

        :param columns:
            Type:  List[Union[str, Column]]

            A list of foreign key columns.

        :param reference_table:
            Type: Union[str, Table]

            The parent table name.

        :param reference_columns:
            Type: List[Union[str, Column]]

            Parent key columns.

        :param on_delete:
            Type: ReferenceOption

            Delete action.

        :param on_update:
            Type: ReferenceOption

            Update option.

        :raises AttributeError:
            If the foreign key is already defined.

        :return:
            CreateQueryBuilder.
        z0'Query' object already has attribute foreign_keyN)rï  r£   r  rð  rñ  ró  rò  )r1   rÞ   Úreference_tableÚreference_columnsÚ	on_deleteÚ	on_updates         r2   Úforeign_keyzCreateQueryBuilder.foreign_key—  sY   € ðV ×ÒÜ Ð!SÓTÐTØ ×7Ñ7¸Ó@ˆÔØ,;ˆÔ)Ø&*×&AÑ&AÐBSÓ&TˆÔ#Ø&/ˆÔ#Ø&/ˆÕ#r4   c                óv   — | j                   rt        d«      ‚t        |t        «      st	        d«      ‚|| _        y)zý
        Creates the table from a select statement.

        :param query_builder:
            The query.

        :raises AttributeError:
            If columns have been defined for the table.

        :return:
            CreateQueryBuilder.
        z,'Query' object already has attribute columnsz.Expected 'item' to be instance of QueryBuilderN)r‚  r£   r]   r(   r™   ré  )r1   Úquery_builders     r2   Ú	as_selectzCreateQueryBuilder.as_selectÊ  s4   € ð �=Š=Ü Ð!OÓPÐPä˜-¬Ô6ÜÐLÓMÐMà'ˆ�r4   c                ó   — d| _         y rÀ  ©rî  r>   s    r2   Úif_not_existsz CreateQueryBuilder.if_not_existsà  ó
   € à"ˆÕr4   c                ó2  — | j                  |«       | j                  sy| j                  s| j                  sy | j                  di |¤Ž}| j                  r| | j
                  di |¤Žz   S  | j                  di |¤Ž} | j                  di |¤Ž}|› d|› d|› �S )zr
        Gets the sql statement string.

        :return: The create table statement.
        :rtype: str
        rØ   z (ú)rP   )rG  ræ  r‚  ré  Ú_create_table_sqlÚ_as_select_sqlÚ	_body_sqlÚ_table_options_sql)r1   r[   rô   ÚbodyÚtable_optionss        r2   rY   zCreateQueryBuilder.get_sqlä  s¥   € ð 	×!Ñ! &Ô)à×!Ò!Øà�}Š} T§_¢_Øà-�t×-Ñ-Ñ7°Ñ7ˆà�?Š?ØÐ"5 $×"5Ñ"5Ñ"?¸Ñ"?Ñ?Ð?àˆt�~‰~Ñ' Ñ'ˆØ/˜×/Ñ/Ñ9°&Ñ9ˆà�˜r $  q¨¨Ð8Ð8r4   c           	     ó¼   — d}| j                   rd}n| j                  rd}d}| j                  rd}dj                  || | j                  j
                  di |¤Ž¬«      S )NrØ   z
TEMPORARY z	UNLOGGED zIF NOT EXISTS z/CREATE {table_type}TABLE {if_not_exists}{table})Ú
table_typer  r9   rP   )rç  rè  rî  r~   ræ  rY   )r1   r[   r!  r  s       r2   r  z$CreateQueryBuilder._create_table_sqlý  sj   € Øˆ
Ø�?Š?Ø%‰JØ�^Š^Ø$ˆJàˆØ×ÒØ,ˆMà@×GÑGØ!Ø'Ø,�$×$Ñ$×,Ñ,Ñ6¨vÑ6ð Hó 
ð 	
r4   c                ó,   — d}| j                   r|dz  }|S )NrØ   z WITH SYSTEM VERSIONINGrÿ  )r1   r[   r  s      r2   r  z%CreateQueryBuilder._table_options_sql  s!   € Øˆà×'Ò'ØÐ6Ñ6ˆMàÐr4   c                ó`   — | j                   D �cg c]  } |j                  di |¤Ž‘Œ c}S c c}w rX   )r‚  rY   )r1   r[   rß   s      r2   Ú_column_clausesz"CreateQueryBuilder._column_clauses  s(   € Ø7;·}±}ÖE¨V��—‘Ñ( Ó(ÒEÐEùÒEó   �+c                ó`   — | j                   D �cg c]  } |j                  di |¤Ž‘Œ c}S c c}w rX   )rê  rY   )r1   r[   r  s      r2   Ú_period_for_clausesz&CreateQueryBuilder._period_for_clauses  s-   € Ø?C×?PÑ?PÖQ°Ð"�
×"Ñ"Ñ, VÓ,ÒQÐQùÒQr%  c           	     ó’   ‡— | j                   D �cg c],  }dj                  dj                  ˆfd„|D «       «      ¬«      ‘Œ. c}S c c}w )NzUNIQUE ({unique})rj  c              3  óB   •K  — | ]  } |j                   di ‰¤Ž–— Œ y ­wrX   ©rÖ   ©r'  rß   r[   s     €r2   r*  z9CreateQueryBuilder._unique_key_clauses.<locals>.<genexpr>  s#   øè ø€ Ò6jÐY_Ð7J°v×7JÑ7JÑ7TÈVÕ7TÑ6jùrM  )r  )rí  r~   rl  )r1   r[   r  s    ` r2   Ú_unique_key_clausesz&CreateQueryBuilder._unique_key_clauses  sG   ø€ ð Ÿ-™-ö
àð  ×&Ñ&¨c¯h©hÓ6jÐciÔ6jÓ.jÐ&Õkò
ð 	
ùò 
s   �1Ac                ól   ‡— dj                  dj                  ˆfd„| j                  D «       «      ¬«      S )NzPRIMARY KEY ({columns})rj  c              3  óB   •K  — | ]  } |j                   di ‰¤Ž–— Œ y ­wrX   r*  r+  s     €r2   r*  z9CreateQueryBuilder._primary_key_clause.<locals>.<genexpr>$  ó"   øè ø€ Ò[¸vÐ0˜V×0Ñ0Ñ:°6Õ:Ñ[ùrM  r�  )r~   rl  rì  rZ   s    `r2   Ú_primary_key_clausez&CreateQueryBuilder._primary_key_clause"  s3   ø€ Ø(×/Ñ/Ø—H‘HÓ[È×IZÑIZÔ[Ó[ð 0ó 
ð 	
r4   c                óŒ  ‡— dj                  dj                  ˆfd„| j                  D «       «       | j                  j                  di ‰¤Ždj                  ˆfd„| j
                  D «       «      ¬«      }| j                  r|d| j                  j                  z   z  }| j                  r|d| j                  j                  z   z  }|S )	NzEFOREIGN KEY ({columns}) REFERENCES {table_name} ({reference_columns})rj  c              3  óB   •K  — | ]  } |j                   di ‰¤Ž–— Œ y ­wrX   r*  r+  s     €r2   r*  z9CreateQueryBuilder._foreign_key_clause.<locals>.<genexpr>)  r/  rM  c              3  óB   •K  — | ]  } |j                   di ‰¤Ž–— Œ y ­wrX   r*  r+  s     €r2   r*  z9CreateQueryBuilder._foreign_key_clause.<locals>.<genexpr>+  s"   øè ø€ Ò&oÈÐ': v×':Ñ':Ñ'D¸VÕ'DÑ&oùrM  )rÞ   r  r  z ON DELETE z ON UPDATE rP   )	r~   rl  rï  rð  rY   rñ  ró  r[  rò  )r1   r[   r(  s    ` r2   Ú_foreign_key_clausez&CreateQueryBuilder._foreign_key_clause'  s²   ø€ ØX×_Ñ_Ø—H‘HÓ[È×IZÑIZÔ[Ó[Ø@�t×8Ñ8×@Ñ@ÑJÀ6ÑJØ!Ÿh™hÓ&oÐSW×SnÑSnÔ&oÓoð `ó 
ˆð
 ×&Ò&Ø�m d×&AÑ&A×&GÑ&GÑGÑGˆFØ×&Ò&Ø�m d×&AÑ&A×&GÑ&GÑGÑGˆFàˆr4   c                óP  —  | j                   di |¤Ž}| | j                  di |¤Žz  }| | j                  di |¤Žz  }| j                  r!|j	                   | j
                  di |¤Ž«       | j                  r!|j	                   | j                  di |¤Ž«       dj                  |«      S )Nrj  rP   )	r$  r'  r,  rì  rÇ   r0  rï  r4  rl  )r1   r[   rm  s      r2   r  zCreateQueryBuilder._body_sql4  s¨   € Ø&�$×&Ñ&Ñ0¨Ñ0ˆØÐ+�4×+Ñ+Ñ5¨fÑ5Ñ5ˆØÐ+�4×+Ñ+Ñ5¨fÑ5Ñ5ˆà×ÒØ�N‰NÐ3˜4×3Ñ3Ñ=°fÑ=Ô>Ø×ÒØ�N‰NÐ3˜4×3Ñ3Ñ=°fÑ=Ô>à�x‰x˜Ó Ð r4   c                óZ   — dj                   | j                  j                  di |¤Ž¬«      S )Nz AS ({query})rO  rP   )r~   ré  rY   rZ   s     r2   r  z!CreateQueryBuilder._as_select_sql@  s1   € Ø×%Ñ%Ø)�$—/‘/×)Ñ)Ñ3¨FÑ3ð &ó 
ð 	
r4   c                ób   — |D �cg c]  }t        |t        «      r|n
t        |«      ‘Œ! c}S c c}w r-   )r]   rÍ   r  s      r2   r  z)CreateQueryBuilder._prepare_columns_inputE  s(   € ØY`ÖaÈvœ: f¬fÔ5‘¼6À&»>ÑIÒaÐaùÒas   …$,c                ó"   — | j                  «       S r-   r­   r>   s    r2   r®   zCreateQueryBuilder.__str__H  rO  r4   c                ó"   — | j                  «       S r-   r<  r>   s    r2   r³   zCreateQueryBuilder.__repr__K  rO  r4   r-   ©rQ  rª  rI   rJ   r´  ©r9   r  rI   rJ   r­  ©rÞ   zstr | tuple[str, str] | ColumnrI   rJ   )rä   rë   rå   rë   rI   rJ   )rÞ   rë   rI   rJ   )NN)rÞ   úlist[str | Column]r  r  r  r=  r  r   r  r   rI   rJ   )r  r(   rI   rJ   rd   rK   )rI   r²  )rÞ   r=  rI   úlist[Column])$rL   rM   rN   rÛ   rX  rE  rF  r”   rµ  r3   rG  r    rô   rû  rý  r   rÞ   r  r  r
  r  r  r  rY   r  r  r$  r'  r,  r0  r4  r  r  r  r®   r³   rP   r4   r2   ró   ró   õ  s”  „ ñð €JØÐØÐØ€Iô<ó$3ð
 òQó ðQð$ òó ðð òó ðð ò,ó ð,ð ò)ó ð)ð2 òLó ðLð$ òCó ðCð òAó ðAð& ð &*Ø%)ð00à#ð00ð %ð00ð .ð	00ð
 #ð00ð #ð00ð 
ò00ó ð00ðd ò(ó ð(ð* ò#ó ð#ó9ó2
ó"óFóRó
ó
ó
ó
!ó
ó
bóôr4   ró   c                  ó˜   — e Zd Z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d„Zdd	„Zdd
„Zy)r÷   c                óX   — d | _         g | _        d | _        d | _        d| _        d| _        y r¼  )Ú_indexr‚  Ú_tabler‡  Ú
_is_uniquerî  r>   s    r2   r3   zCreateIndexBuilder.__init__P  s-   € ØˆŒØˆŒØˆŒØˆŒØˆŒØ#ˆÕr4   c                ó   — || _         y r-   )rA  ©r1   rú   s     r2   rø   zCreateIndexBuilder.create_indexX  r1  r4   c                óÆ   — |D ]\  }t        |t        «      rt        |«      }n#t        |t        «      rt        |d   |d   ¬«      }| j                  j                  |«       Œ^ y )Nr   r�   rÝ   )r]   rH   rÍ   r�   r‚  rÇ   r  s      r2   rÞ   zCreateIndexBuilder.columns\  sT   € àò 	)ˆFÜ˜&¤#Ô&Ü ›‘Ü˜F¤EÔ*Ü¨F°1©IÀ6È!Á9ÔM�Ø�M‰M× Ñ  Õ(ñ	)r4   c                ó   — || _         y r-   )rB  r°  s     r2   r¼  zCreateIndexBuilder.one  r1  r4   c                óV   — | j                   r| xj                   |z  c_         y|| _         y)z-
        Partial index where clause.
        N)r‡  rÑ  s     r2   rÔ  zCreateIndexBuilder.wherei  s    € ð
 �<Š<Ø�LŠL˜IÑ%ŽLà$ˆD�Lr4   c                ó   — d| _         y rÀ  )rC  r>   s    r2   r  zCreateIndexBuilder.uniques  ó	   € àˆ�r4   c                ó   — d| _         y rÀ  r  r>   s    r2   r  z CreateIndexBuilder.if_not_existsw  r  r4   c                óê  — | j                   rt        | j                   «      dk(  rt        d«      ‚| j                  st        d«      ‚dj	                  | j                   D �cg c]  }|j
                  ‘Œ c}«      }| j                  rdnd}| j                  rdnd}d|› d	|› d
| j                  › d| j                  › d|› d�}| j                  r|d| j                  › �z  }|j                  dd
«      S c c}w )Nr   z#Cannot create index without columnsz!Cannot create index without tablerÖ  ÚUNIQUErØ   zIF NOT EXISTSzCREATE z INDEX rJ  z ON ú(r  z WHERE z  )r‚  rÆ   r£   rB  rl  r;   rC  rî  rA  r‡  rÁ  )r1   ÚcÚcolumns_strÚ
unique_strÚif_not_exists_strÚbase_sqls         r2   rY   zCreateIndexBuilder.get_sql{  sä   € Ø�}Š}¤ D§M¡MÓ 2°aÒ 7Ü Ð!FÓGÐGØ�{Š{Ü Ð!DÓEÐEØ—i‘i°·±Ö ?¨A §£Ò ?Ó@ˆØ!%§¢‘X°bˆ
Ø/3×/BÒ/B™OÈÐØ˜Z˜L¨Ð0AÐ/BÀ!ÀDÇKÁKÀ=ÐPTÐUY×U`ÑU`ÐTaÐabÐcnÐboÐopÐqˆØ�<Š<Ø˜' $§,¡, Ð0Ñ0ˆHØ×Ñ  cÓ*Ð*ùò !@s   Á C0c                ó"   — | j                  «       S r-   r­   r>   s    r2   r®   zCreateIndexBuilder.__str__ˆ  rO  r4   c                ó"   — | j                  «       S r-   r<  r>   s    r2   r³   zCreateIndexBuilder.__repr__‹  rO  r4   Nr­  )rú   r  rI   rJ   r<  r;  r®  rK   )rL   rM   rN   r3   r    rø   rÞ   r¼  rÔ  r  r  rY   r®   r³   rP   r4   r2   r÷   r÷   O  sŽ   „ ó$ð òó ðð ò)ó ð)ð òó ðð ò%ó ð%ð òó ðð ò#ó ð#ó+óôr4   r÷   c                  ó¾   — e Zd ZdZdZdZdZeZddd„Z	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d„Zdd„Zdd„Zdd„Zy)rü   z3
    Query builder used to build DROP queries.
    r«   ry  Nc                ó<   — d | _         d| _        d | _        || _        y )NrØ   )Ú_drop_target_kindÚ_drop_targetÚ
_if_existsrQ  rô  s     r2   r3   zDropQueryBuilder.__init__™  s    € Ø!%ˆÔØ46ˆÔØˆŒØˆ�r4   c                ó¬   — |j                  d| j                  «       |j                  d| j                  «       |j                  d| j                  «       y rö  r÷  rZ   s     r2   rG  z%DropQueryBuilder._set_kwargs_defaultsŸ  rø  r4   c                ób   — t        |t        «      r|n
t        |«      }| j                  d|«       y )NÚDATABASE)r]   rƒ   Ú_set_target)r1   rþ   Útargets      r2   rý   zDropQueryBuilder.drop_database¤  s'   € ä'¨´(Ô;‘ÄÈ(ÓASˆØ×Ñ˜ VÕ,r4   c                ób   — t        |t        «      r|n
t        |«      }| j                  d|«       y )NÚTABLE)r]   ry   r^  )r1   r9   r_  s      r2   r   zDropQueryBuilder.drop_table©  s&   € ä$ U¬EÔ2‘¼¸e»ˆØ×Ñ˜ &Õ)r4   c                ó(   — | j                  d|«       y )NÚUSER©r^  )r1   r  s     r2   r  zDropQueryBuilder.drop_user®  ó   € à×Ñ˜ Õ&r4   c                ó(   — | j                  d|«       y )NÚVIEWrd  )r1   r  s     r2   r  zDropQueryBuilder.drop_view²  re  r4   c                ó(   — | j                  d|«       y )NÚINDEXrd  rE  s     r2   r	  zDropQueryBuilder.drop_index¶  s   € à×Ñ˜ %Õ(r4   c                ó   — d| _         y rÀ  )rZ  r>   s    r2   Ú	if_existszDropQueryBuilder.if_existsº  rJ  r4   c                óN   — | j                   rt        d«      ‚|| _        || _         y )Nz4'DropQuery' object already has attribute drop_target)rY  r£   rX  )r1   Úkindr_  s      r2   r^  zDropQueryBuilder._set_target¾  s'   € Ø×ÒÜ Ð!WÓXÐXØ!%ˆÔØ"ˆÕr4   c                ó>  — | j                  |«       | j                  rdnd}d}t        | j                  t        t
        f«      r | j                  j                  di |¤Ž}n t        | j                  | j                  «      }dj                  | j                  ||¬«      S )Nz
IF EXISTS rØ   zDROP {kind} {if_exists}{name})rm  rk  r;   rP   )rG  rZ  r]   rY  rƒ   ry   rY   r"   rX  r~   rX  )r1   r[   rk  Útarget_names       r2   rY   zDropQueryBuilder.get_sqlÄ  s�   € Ø×!Ñ! &Ô)à$(§O¢O‘L¸ˆ	Øˆä�d×'Ñ'¬(´EÐ):Ô;Ø3˜$×+Ñ+×3Ñ3Ñ=°fÑ=‰Kä'¨×(9Ñ(9¸4¿?¹?ÓKˆKà.×5Ñ5Ø×'Ñ'°9À;ð 6ó 
ð 	
r4   c                ó"   — | j                  «       S r-   r­   r>   s    r2   r®   zDropQueryBuilder.__str__Ó  rO  r4   c                ó"   — | j                  «       S r-   r<  r>   s    r2   r³   zDropQueryBuilder.__repr__Ö  rO  r4   r-   r:  r´  )rþ   zDatabase | strrI   rJ   r;  )r  rH   rI   rJ   )r  rH   rI   rJ   )rú   rH   rI   rJ   r­  )rm  rH   r_  zDatabase | Table | strrI   rJ   rd   rK   )rL   rM   rN   rÛ   rX  rE  rF  r”   rµ  r3   rG  r    rý   r   r  r  r	  rk  r^  rY   r®   r³   rP   r4   r2   rü   rü   �  sµ   „ ñð €JØÐØÐØ€Iôó3ð
 ò-ó ð-ð ò*ó ð*ð ò'ó ð'ð ò'ó ð'ð ò)ó ð)ð òó ðó#ó
óôr4   rü   )rÈ   r  r[   r   rI   zlist[Table])rÈ   r  rI   r>  )CÚ
__future__r   ÚsysÚcollections.abcr   r   Ú	functoolsr   Útypingr   r   r	   r
   Úpypika.enumsr   r   r   r   Úpypika.termsr   r   r   r   r   r   r   r   r   r   r   r   r   Úpypika.utilsr   r   r   r   r    r!   r"   r#   Úversion_infor&   Útyping_extensionsÚ
__author__Ú	__email__r'   r+   rR   rk   rƒ   ry   rË   rÍ   rà   râ   r  r”   r  r(   ræ  r³  rº  rÁ  ró   r÷   rü   rP   r4   r2   ú<module>r~     sf  ðÝ "ã 
Ý $Ý Ý ß 7Ó 7ç JÓ J÷÷ ÷ õ ÷	÷ 	ó 	ñ Ø
×Ñ˜7Ò"Þå*à€
Ø€	ñ ˆT˜Ô(€ô�ô ô6$�:ô $÷$ñ ô6)ˆvô )ô}9ˆJô }9ó@÷2#,ñ #,óL÷"ñ ð& €÷@-ñ @-ôFW:�J ô W:ôtW+�:˜tô W+ôt*ˆW�R‰[ô *÷ZFñ FôB(PˆTô (PôV_�ô _÷@Wñ W÷t
=ñ =÷@Hò Hr4   