§
    HŠtjn* ã                  ó  — 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j)        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/¦  «        Z3d;d!„Z4 G d"„ d#¦  «        Z5d<d%„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/„ d0¦  «        Z= G d1„ d2e=¦  «        Z> G d3„ d4e=¦  «        Z? G d5„ d6¦  «        Z@ G d7„ d8¦  «        ZA G d9„ d:¦  «        ZBdS )=é    )Ú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                  ó†   — 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dS )Ú
SelectableÚaliasÚstrÚreturnÚNonec                ó   — || _         d S ©N©r,   ©Úselfr,   s     úL/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/pypika/queries.pyÚ__init__zSelectable.__init__2   s   € ØˆŒ
ˆ
ˆ
ó    c                ó   — || _         d S r1   r2   r3   s     r5   Úas_zSelectable.as_5   s   € àˆŒ
ˆ
ˆ
r7   Únamer   c                ó$   — t          || ¬¦  «        S )N©Útable©r   ©r4   r:   s     r5   ÚfieldzSelectable.field9   s   € Ý�T Ð&Ñ&Ô&Ð&r7   r   c                ó    — t          | ¦  «        S r1   )r   ©r4   s    r5   ÚstarzSelectable.star<   s   € å�D‰zŒzÐr7   c                ó,   — |                       |¦  «        S r1   ©r@   r?   s     r5   Ú__getattr__zSelectable.__getattr__@   ó   € à�zŠz˜$ÑÔÐr7   c                ó,   — |                       |¦  «        S r1   rE   r?   s     r5   Ú__getitem__zSelectable.__getitem__D   rG   r7   c                ó   — | j         S r1   r2   rB   s    r5   Úget_table_namezSelectable.get_table_nameH   s
   € ØŒzÐr7   N)r,   r-   r.   r/   )r:   r-   r.   r   )r.   r   ©r.   r-   )Ú__name__Ú
__module__Ú__qualname__r6   r    r9   r@   ÚpropertyrC   r#   rF   rI   rK   © r7   r5   r+   r+   1   sÐ   € € € € € ðð ð ð ð ðð ð ñ „Wðð'ð 'ð 'ð 'ð ðð ð ñ „Xðð ð ð  ð  ñ „[ð ð ð ð  ð  ñ „[ð ðð ð ð ð ð r7   r+   c                  ó:   ‡ — e Zd Zddˆ fd„Zdd„Zdd„Zdd„Zˆ xZS )ÚAliasedQueryNr:   r-   ÚqueryúSelectable | Noner.   r/   c                óh   •— t          ¦   «                              |¬¦  «         || _        || _        d S )Nr2   )Úsuperr6   r:   rT   )r4   r:   rT   Ú	__class__s      €r5   r6   zAliasedQuery.__init__M   s0   ø€ Ý‰Œ×Ò˜tÐÑ$Ô$Ð$ØˆŒ	ØˆŒ
ˆ
ˆ
r7   Úkwargsr   c                óB   — | j         €| j        S  | j         j        di |¤ŽS ©NrQ   )rT   r:   Úget_sql©r4   rY   s     r5   r\   zAliasedQuery.get_sqlR   s-   € ØŒ:ÐØ”9ÐØ!ˆtŒzÔ!Ð+Ð+ FÐ+Ð+Ð+r7   ÚotherÚboolc                óL   — t          |t          ¦  «        o| j        |j        k    S r1   )Ú
isinstancerS   r:   ©r4   r^   s     r5   Ú__eq__zAliasedQuery.__eq__W   s    € Ý˜%¥Ñ.Ô.ÐJ°4´9ÀÄ
Ò3JÐJr7   Úintc                óD   — t          t          | j        ¦  «        ¦  «        S r1   )Úhashr-   r:   rB   s    r5   Ú__hash__zAliasedQuery.__hash__Z   s   € Ý•C˜œ	‘N”NÑ#Ô#Ð#r7   r1   )r:   r-   rT   rU   r.   r/   ©rY   r   r.   r-   )r^   rS   r.   r_   ©r.   rd   )rM   rN   rO   r6   r\   rc   rg   Ú__classcell__©rX   s   @r5   rS   rS   L   s‚   ø€ € € € € ðð ð ð ð ð ð ð
,ð ,ð ,ð ,ð
Kð Kð Kð Kð$ð $ð $ð $ð $ð $ð $ð $r7   rS   c                  óJ   — e Zd Zddd„Zdd„Zdd„Zedd„¦   «         Zddd„ZdS )ÚSchemaNr:   r-   ÚparentúSchema | Noner.   r/   c                ó"   — || _         || _        d S r1   )Ú_nameÚ_parent)r4   r:   rn   s      r5   r6   zSchema.__init___   s   € ØˆŒ
ØˆŒˆˆr7   r^   r_   c                ól   — t          |t          ¦  «        o| j        |j        k    o| j        |j        k    S r1   )ra   rm   rq   rr   rb   s     r5   rc   zSchema.__eq__c   s0   € Ý˜%¥Ñ(Ô(Ðh¨T¬Z¸5¼;Ò-FÐhÈ4Ì<Ð[`Ô[hÒKhÐhr7   c                ó.   — |                       |¦  «         S r1   ©rc   rb   s     r5   Ú__ne__zSchema.__ne__f   ó   € Ø—;’;˜uÑ%Ô%Ð%Ð%r7   ÚitemÚTablec                ó$   — t          || ¬¦  «        S )N©Úschema©ry   ©r4   rx   s     r5   rF   zSchema.__getattr__i   s   € å�T $Ð'Ñ'Ô'Ð'r7   Ú
quote_charú
str | NonerY   r   c                ó�   — t          | j        |¦  «        }| j        �)d                      | j        j        dd|i|¤Ž|¬¦  «        S |S )Nz{parent}.{schema}r   )rn   r|   rQ   )r"   rq   rr   Úformatr\   )r4   r   rY   Ú
schema_sqls       r5   r\   zSchema.get_sqlm   s`   € Ý" 4¤:¨zÑ:Ô:ˆ
àŒ<Ð#Ø&×-Ò-Ø+�t”|Ô+ÐLÐL°zÐLÀVÐLÐLØ!ð .ñ ô ð ð
 Ðr7   r1   )r:   r-   rn   ro   r.   r/   )r^   rm   r.   r_   )rx   r-   r.   ry   ©r   r€   rY   r   r.   r-   )	rM   rN   rO   r6   rc   rv   r#   rF   r\   rQ   r7   r5   rm   rm   ^   s’   € € € € € ðð ð ð ð ðið ið ið ið&ð &ð &ð &ð ð(ð (ð (ñ „[ð(ð	ð 	ð 	ð 	ð 	ð 	ð 	r7   rm   c                  ó&   — e Zd Zedd„¦   «         ZdS )ÚDatabaserx   r-   r.   rm   c                ó$   — t          || ¬¦  «        S ©N)rn   ©rm   r~   s     r5   rF   zDatabase.__getattr__z   s   € å�d 4Ð(Ñ(Ô(Ð(r7   N)rx   r-   r.   rm   )rM   rN   rO   r#   rF   rQ   r7   r5   r†   r†   y   s2   € € € € € Øð)ð )ð )ñ „[ð)ð )ð )r7   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d0d „Zd1d$„Zd2d%„Zd1d&„Zˆ xZS )3ry   r|   ú"str | list | tuple | Schema | Noner.   c                óè   — t          | t          ¦  «        r| S t          | t          t          f¦  «        r-t	          d„ | dd …         t          | d         ¦  «        ¦  «        S | �t          | ¦  «        S d S )Nc                ó$   — t          || ¬¦  «        S rˆ   r‰   )ÚobjÚss     r5   ú<lambda>z$Table._init_schema.<locals>.<lambda>‡   s   € ­°¸#Ð)>Ñ)>Ô)>€ r7   é   r   )ra   rm   ÚlistÚtupler   r{   s    r5   Ú_init_schemazTable._init_schema€   sv   € õ �f�fÑ%Ô%ð 	ØˆMÝ�f�t¥U˜mÑ,Ô,ð 	_ÝÐ>Ð>ÀÀqÀrÀrÄ
ÍFÐSYÐZ[ÔS\ÑL]ÔL]Ñ^Ô^Ð^ØÐÝ˜&‘>”>Ð!Øˆtr7   Nr:   r-   úSchema | str | Noner,   r€   Ú	query_clsútype[Query] | Noner/   c                ó  •— t          ¦   «                              |¦  «         || _        |                      |¦  «        | _        |pt
          | _        d | _        d | _        t          | j        t
          ¦  «        st          d¦  «        ‚d S )Nz,Expected 'query_cls' to be subclass of Query)rW   r6   Ú_table_namer”   Ú_schemaÚQueryÚ
_query_clsÚ_forÚ_for_portionÚ
issubclassÚ	TypeError)r4   r:   r|   r,   r–   rX   s        €r5   r6   zTable.__init__Œ   s…   ø€ õ 	‰Œ×Ò˜ÑÔÐØˆÔØ×(Ò(¨Ñ0Ô0ˆŒØ#Ð,¥uˆŒØˆŒ	Ø ˆÔÝ˜$œ/­5Ñ1Ô1ð 	LÝÐJÑKÔKÐKð	Lð 	Lr7   c                ó   — | j         p| j        S r1   )r,   r™   rB   s    r5   rK   zTable.get_table_nameœ   s   € ØŒzÐ-˜TÔ-Ð-r7   rY   r   c                ó’  — |                      d¦  «        }t          | j        |¦  «        }| j        �'d                      | j        j        di |¤Ž|¬¦  «        }| j        r(d                     | | j        j        di |¤Ž¬¦  «        }n.| j        r'd                     | | j        j        di |¤Ž¬¦  «        }t          || j	        fi |¤ŽS )Nr   z{schema}.{table})r|   r=   z{table} FOR {criterion})r=   Ú	criterionz"{table} FOR PORTION OF {criterion}rQ   )
Úgetr"   r™   rš   r‚   r\   r�   rž   r!   r,   )r4   rY   r   Ú	table_sqls       r5   r\   zTable.get_sqlŸ   sø   € Ø—Z’Z Ñ-Ô-ˆ
Ý! $Ô"2°JÑ?Ô?ˆ	àŒ<Ð#Ø*×1Ò1Ð9M¸¼Ô9MÐ9WÐ9WÐPVÐ9WÐ9WÐ_hÐ1ÑiÔiˆIàŒ9ð 	Ø1×8Ò8¸yÐTeÐTXÔT]ÔTeÐToÐToÐhnÐToÐToÐ8ÑpÔpˆIˆIØÔð 	Ø<×CÒCØÐ+D¨4Ô+<Ô+DÐ+NÐ+NÀvÐ+NÐ+Nð Dñ ô ˆIõ   	¨4¬:Ð@Ð@¸Ð@Ð@Ð@r7   Útemporal_criterionr   c                ól   — | j         rt          d¦  «        ‚| j        rt          d¦  «        ‚|| _         d S )Nú)'Query' object already has attribute for_ú0'Query' object already has attribute for_portion)r�   ÚAttributeErrorrž   )r4   r¦   s     r5   Úfor_z
Table.for_¯   sB   € àŒ9ð 	NÝ Ð!LÑMÔMÐMØÔð 	UÝ Ð!SÑTÔTÐTØ&ˆŒ	ˆ	ˆ	r7   Úperiod_criterionr   c                ól   — | j         rt          d¦  «        ‚| j        rt          d¦  «        ‚|| _         d S )Nr©   r¨   )rž   rª   r�   )r4   r¬   s     r5   Úfor_portionzTable.for_portion·   sE   € àÔð 	UÝ Ð!SÑTÔTÐTØŒ9ð 	NÝ Ð!LÑMÔMÐMØ,ˆÔÐÐr7   c                ó.   — |                       d¬¦  «        S ©Nú"©r   ©r\   rB   s    r5   Ú__str__zTable.__str__¿   ó   € Ø�|Š| sˆ|Ñ+Ô+Ð+r7   r_   c                ó    — t          |t          ¦  «        sdS | j        |j        k    rdS | j        |j        k    rdS | j        |j        k    rdS dS ©NFT)ra   ry   r™   rš   r,   rb   s     r5   rc   zTable.__eq__Â   s\   € Ý˜%¥Ñ'Ô'ð 	Ø�5àÔ˜uÔ0Ò0Ð0Ø�5àŒ<˜5œ=Ò(Ð(Ø�5àŒ:˜œÒ$Ð$Ø�5àˆtr7   c                ó„   — | j         r d                     | j        | j         ¦  «        S d                     | j        ¦  «        S )NzTable('{}', schema='{}')zTable('{}'))rš   r‚   r™   rB   s    r5   Ú__repr__zTable.__repr__Ñ   s?   € ØŒ<ð 	UØ-×4Ò4°TÔ5EÀtÄ|ÑTÔTÐTØ×#Ò# DÔ$4Ñ5Ô5Ð5r7   r^   c                ó.   — |                       |¦  «         S r1   ru   rb   s     r5   rv   zTable.__ne__Ö   rw   r7   rd   c                ó:   — t          t          | ¦  «        ¦  «        S r1   )rf   r-   rB   s    r5   rg   zTable.__hash__Ù   s   € Ý•C˜‘I”I‰ŒÐr7   Útermsú'int | float | str | bool | Term | Fieldr(   c                óF   —  | 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©r4   r¼   s     r5   rÀ   zTable.selectÜ   s$   € ð 2ˆtŒ×$Ò$ TÑ*Ô*Ô1°5Ð9Ð9r7   c                ó6   — | j                              | ¦  «        S )za
        Perform an UPDATE operation on the current table

        :return: QueryBuilder
        )rœ   ÚupdaterB   s    r5   rÃ   zTable.updateé   s   € ð Œ×%Ò% dÑ+Ô+Ð+r7   c                óF   —  | 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     r5   rÆ   zTable.insertñ   s$   € ð 1ˆtŒ×#Ò# DÑ)Ô)Ô0°%Ð8Ð8r7   )r|   r‹   r.   r‹   ©NNN)
r:   r-   r|   r•   r,   r€   r–   r—   r.   r/   rL   rh   )r¦   r   r.   r/   )r¬   r   r.   r/   )r.   r_   )r^   r   r.   r_   ri   )r¼   r½   r.   r(   ©r.   r(   )rM   rN   rO   Ústaticmethodr”   r6   rK   r\   r    r«   r®   r´   rc   r¹   rv   rg   rÀ   rÃ   rÆ   rj   rk   s   @r5   ry   ry      s~  ø€ € € € € Øð	ð 	ð 	ñ „\ð	ð '+Ø Ø(,ðLð Lð Lð Lð Lð Lð Lð .ð .ð .ð .ðAð Að Að Að  ð'ð 'ð 'ñ „Wð'ð ð-ð -ð -ñ „Wð-ð,ð ,ð ,ð ,ðð ð ð ð6ð 6ð 6ð 6ð
&ð &ð &ð &ðð ð ð ð:ð :ð :ð :ð,ð ,ð ,ð ,ð9ð 9ð 9ð 9ð 9ð 9ð 9ð 9r7   ry   Únamesútuple[str, str] | strrY   r   r.   úlist[Table]c            	     óŠ  — g }| D ]½}t          |t          ¦  «        rYt          |¦  «        dk    rFt          |d         |d         |                     d¦  «        |                     d¦  «        ¬¦  «        }n8t          ||                     d¦  «        |                     d¦  «        ¬¦  «        }|                     |¦  «         Œ¾|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‘   r|   r–   )r:   r,   r|   r–   )r:   r|   r–   )ra   r“   Úlenry   r¤   Úappend)rÊ   rY   Útablesr:   Úts        r5   Úmake_tablesrÓ   ÿ   sÍ   € ð €FØð ð ˆÝ�d�EÑ"Ô"ð 	¥s¨4¡y¤y°A¢~ ~ÝØ˜!”WØ˜1”gØ—z’z (Ñ+Ô+Ø Ÿ*š* [Ñ1Ô1ð	ñ ô ˆAˆAõ ØØ—z’z (Ñ+Ô+Ø Ÿ*š* [Ñ1Ô1ðñ ô ˆAð
 	�Š�aÑÔÐÐØ€Mr7   c                  ó:   — e Zd ZdZ	 	 	 ddd„Zdd„Zdd„Zdd„ZdS )ÚColumnzRepresents a column.NÚcolumn_namer-   Úcolumn_typer€   Únullableúbool | NoneÚdefaultúAny | Term | Noner.   r/   c                óŠ   — || _         || _        || _        |�t          |t          ¦  «        r|nt          |¦  «        | _        d S r1   )r:   ÚtyperØ   ra   r   r   rÚ   )r4   rÖ   r×   rØ   rÚ   s        r5   r6   zColumn.__init__  sD   € ð  ˆŒ	ØˆŒ	Ø ˆŒØ") /µZÀÍÑ5NÔ5N /�w�wÕT`ÐahÑTiÔTiˆŒˆˆr7   rY   r   c                ó‚   — |                      d¦  «        }d                     t          | j        |¦  «        ¬¦  «        }|S )Nr   z{name}©r:   )r¤   r‚   r"   r:   )r4   rY   r   Ú
column_sqls       r5   Úget_name_sqlzColumn.get_name_sql'  sB   € Ø—Z’Z Ñ-Ô-ˆ
à—_’_Ý˜tœy¨*Ñ5Ô5ð %ñ 
ô 
ˆ
ð Ðr7   c                ó8  — d                       | j        di |¤Ž| j        rd                      | j        ¦  «        nd| j        �d                      | j        rdnd¦  «        nd| j        r(d                      d | j        j        di |¤Žz   ¦  «        nd¬¦  «        }|S )	Nz{name}{type}{nullable}{default}z {}Ú ÚNULLzNOT NULLzDEFAULT )r:   rÝ   rØ   rÚ   rQ   )r‚   rá   rÝ   rØ   rÚ   r\   )r4   rY   rà   s      r5   r\   zColumn.get_sql0  s¶   € Ø6×=Ò=Ø"�Ô"Ð,Ð, VÐ,Ð,Ø,0¬IÐ=�—’˜dœiÑ(Ô(Ð(¸2ØNRÌmÐNg�U—\’\¨D¬MÐ"I & &¸zÑJÔJÐJÐmoØQUÔQ]Ðe�E—L’L Ð.B¨d¬lÔ.BÐ.LÐ.LÀVÐ.LÐ.LÑ!LÑMÔMÐMÐceð	 >ñ 
ô 
ˆ
ð Ðr7   c                ó.   — |                       d¬¦  «        S r°   r³   rB   s    r5   r´   zColumn.__str__:  rµ   r7   rÇ   )
rÖ   r-   r×   r€   rØ   rÙ   rÚ   rÛ   r.   r/   rh   rL   )rM   rN   rO   Ú__doc__r6   rá   r\   r´   rQ   r7   r5   rÕ   rÕ     s   € € € € € ØÐð
 #'Ø $Ø%)ð
jð 
jð 
jð 
jð 
jðð ð ð ðð ð ð ð,ð ,ð ,ð ,ð ,ð ,r7   rÕ   úlist[Column]c                 óê   — g }| D ]m}t          |t          ¦  «        r1t          |¦  «        dk    rt          |d         |d         ¬¦  «        }nt          |¬¦  «        }|                     |¦  «         Œn|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Ö   )ra   r“   rÏ   rÕ   rÐ   )rÊ   Úcolumnsr:   Úcolumns       r5   Úmake_columnsrì   >  s~   € ð €GØð ð ˆÝ�d�EÑ"Ô"ð 	.¥s¨4¡y¤y°A¢~ ~Ý¨¨Q¬¸TÀ!¼WÐEÑEÔEˆFˆFå¨Ð-Ñ-Ô-ˆFØ�Š�vÑÔÐÐà€Nr7   c                  ó   — e Zd Zdd„Zdd„ZdS )Ú	PeriodForr:   r-   Ústart_columnústr | ColumnÚ
end_columnr.   r/   c                óÀ   — || _         t          |t          ¦  «        r|nt          |¦  «        | _        t          |t          ¦  «        r|nt          |¦  «        | _        d S r1   )r:   ra   rÕ   rï   rñ   ©r4   r:   rï   rñ   s       r5   r6   zPeriodFor.__init__P  sU   € ØˆŒ	Ý,6°|ÅVÑ,LÔ,LÐf˜L˜LÕRXÐYeÑRfÔRfˆÔÝ(2°:½vÑ(FÔ(FÐ^˜*˜*ÍFÐS]ÑL^ÔL^ˆŒˆˆr7   rY   r   c           	     óÆ   — |                      d¦  «        }d                     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_namerQ   )r¤   r‚   r"   r:   rï   rá   rñ   )r4   rY   r   Úperiod_for_sqls       r5   r\   zPeriodFor.get_sqlU  sv   € Ø—Z’Z Ñ-Ô-ˆ
àT×[Ò[Ý˜tœy¨*Ñ5Ô5Ø<˜dÔ/Ô<ÐFÐF¸vÐFÐFØ8˜DœOÔ8ÐBÐB¸6ÐBÐBð \ñ 
ô 
ˆð Ðr7   N)r:   r-   rï   rð   rñ   rð   r.   r/   rh   )rM   rN   rO   r6   r\   rQ   r7   r5   rî   rî   O  s@   € € € € € ð_ð _ð _ð _ð
	ð 	ð 	ð 	ð 	ð 	r7   rî   c                  óz  — e Zd ZdZed-d„¦   «         Zed.d	„¦   «         Zed/d„¦   «         Zed0d„¦   «         Zed1d„¦   «         Z	ed2d„¦   «         Z
ed3d„¦   «         Zed4d„¦   «         Zed5d„¦   «         Zed6d„¦   «         Zed7d „¦   «         Zed8d#„¦   «         Zed9d$„¦   «         Zed:d'„¦   «         Zed;d+„¦   «         Zd,S )<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)
    rY   r   r.   r(   c                ó   — t          di |¤ŽS r[   )r(   )ÚclsrY   s     r5   Ú_builderzQuery._builderw  s   € åÐ%Ð%˜fÐ%Ð%Ð%r7   r=   úSelectable | strc                óB   —  | j         di |¤Ž                     |¦  «        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
        rQ   )rû   r¿   ©rú   r=   rY   s      r5   r¿   zQuery.from_{  s*   € ð ˆsŒ|Ð%Ð%˜fÐ%Ð%×+Ò+¨EÑ2Ô2Ð2r7   ústr | TableÚCreateQueryBuilderc                óD   — t          ¦   «                              |¦  «        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
        )r   Úcreate_table©rú   r=   s     r5   r  zQuery.create_tableŠ  s   € õ "Ñ#Ô#×0Ò0°Ñ7Ô7Ð7r7   Úindexústr | IndexÚCreateIndexBuilderc                óD   — t          ¦   «                              |¦  «        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.
        )r  Úcreate_index©rú   r  s     r5   r  zQuery.create_index–  s   € õ "Ñ#Ô#×0Ò0°Ñ7Ô7Ð7r7   ÚdatabaseúDatabase | TableÚDropQueryBuilderc                óD   — t          ¦   «                              |¦  «        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
        )r  Údrop_database)rú   r
  s     r5   r  zQuery.drop_databasež  s   € õ  Ñ!Ô!×/Ò/°Ñ9Ô9Ð9r7   c                óD   — t          ¦   «                              |¦  «        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     r5   r  zQuery.drop_tableª  s   € õ  Ñ!Ô!×,Ò,¨UÑ3Ô3Ð3r7   Úuserr-   c                óD   — t          ¦   «                              |¦  «        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ú   r  s     r5   r  zQuery.drop_user¶  ó   € õ  Ñ!Ô!×+Ò+¨DÑ1Ô1Ð1r7   Úviewc                óD   — t          ¦   «                              |¦  «        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ú   r  s     r5   r  zQuery.drop_viewÂ  r  r7   c                óD   — t          ¦   «                              |¦  «        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     r5   r  zQuery.drop_indexÎ  s   € õ  Ñ!Ô!×,Ò,¨UÑ3Ô3Ð3r7   úTable | strc                óB   —  | j         di |¤Ž                     |¦  «        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
        rQ   )rû   rÅ   rþ   s      r5   rÅ   z
Query.intoÖ  s*   € ð ˆsŒ|Ð%Ð%˜fÐ%Ð%×*Ò*¨5Ñ1Ô1Ð1r7   ústr | Selectabler:   c                óD   —  | j         di |¤Ž                     ||¦  «        S r[   )rû   Úwith_)rú   r=   r:   rY   s       r5   r  zQuery.with_å  s*   € àˆsŒ|Ð%Ð%˜fÐ%Ð%×+Ò+¨E°4Ñ8Ô8Ð8r7   r¼   úint | float | str | bool | Termc                ó,   —   | 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
        rQ   )rû   rÀ   )rú   r¼   rY   s      r5   rÀ   zQuery.selecté  s&   € ð -ˆ|ˆsŒ|Ð%Ð%˜fÐ%Ð%Ô,¨eÐ4Ð4r7   c                óB   —  | j         di |¤Ž                     |¦  «        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
        rQ   )rû   rÃ   rþ   s      r5   rÃ   zQuery.updateù  s*   € ð ˆsŒ|Ð%Ð%˜fÐ%Ð%×,Ò,¨UÑ3Ô3Ð3r7   Ú
table_nameÚ_TableClassc                ó&   — | |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–   r}   )rú   r"  rY   s      r5   ry   zQuery.Table  s$   € ð "ˆˆ{ÑÝ�ZÐ*Ð* 6Ð*Ð*Ð*r7   rÊ   rË   úlist[_TableClass]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Ê   rY   s      r5   ÚTableszQuery.Tables  s!   € ð "ˆˆ{ÑÝ˜EÐ, VÐ,Ð,Ð,r7   N)rY   r   r.   r(   )r=   rü   rY   r   r.   r(   )r=   rÿ   r.   r   )r  r  r.   r  )r
  r  r.   r  )r=   rÿ   r.   r  )r  r-   r.   r  )r  r-   r.   r  )r  r  r.   r  )r=   r  rY   r   r.   r(   )r=   r  r:   r-   rY   r   r.   r(   )r¼   r  rY   r   r.   r(   )r=   rÿ   r.   r(   )r"  r-   r.   r#  )rÊ   rË   rY   r   r.   r%  )rM   rN   rO   ræ   Úclassmethodrû   r¿   r  r  r  r  r  r  r  rÅ   r  rÀ   rÃ   ry   r'  rQ   r7   r5   r›   r›   e  sþ  € € € € € ðð ð" ð&ð &ð &ñ „[ð&ð ð3ð 3ð 3ñ „[ð3ð ð	8ð 	8ð 	8ñ „[ð	8ð ð8ð 8ð 8ñ „[ð8ð ð	:ð 	:ð 	:ñ „[ð	:ð ð	4ð 	4ð 	4ñ „[ð	4ð ð	2ð 	2ð 	2ñ „[ð	2ð ð	2ð 	2ð 	2ñ „[ð	2ð ð4ð 4ð 4ñ „[ð4ð ð2ð 2ð 2ñ „[ð2ð ð9ð 9ð 9ñ „[ð9ð ð5ð 5ð 5ñ „[ð5ð ð4ð 4ð 4ñ „[ð4ð ð+ð +ð +ñ „[ð+ð ð-ð -ð -ñ „[ð-ð -ð -r7   r›   c                  ó.  ‡ — e Zd ZdZdefd.ˆ fd„Zed/d„¦   «         Zed0d„¦   «         Zed1d„¦   «         Z	ed2d„¦   «         Z
ed2d„¦   «         Zed2d„¦   «         Zed2d„¦   «         Zed2d„¦   «         Zd3d „Zd3d!„Zd4d"„Zd5d$„Zd6d7d)„Zd8d9d+„Zd5d,„Zd5d-„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.
    NÚ
base_queryr(   Úset_operation_queryÚset_operationr   r,   r€   Úwrapper_clsútype[ValueWrapper]c                ó¤   •— t          ¦   «                              |¦  «         || _        ||fg| _        g | _        d | _        d | _        || _        d S r1   )rW   r6   r+  Ú_set_operationÚ	_orderbysÚ_limitÚ_offsetÚ_wrapper_cls)r4   r+  r,  r-  r,   r.  rX   s         €r5   r6   z_SetOperation.__init__1  sX   ø€ õ 	‰Œ×Ò˜ÑÔÐØ$ˆŒØ -Ð/BÐCÐDˆÔØˆŒàˆŒØˆŒà'ˆÔÐÐr7   Úfieldsr   rY   r   r.   r/   c                ó  — |D ]�}t          |t          ¦  «        r!t          || j        j        d         ¬¦  «        n| j                             |¦  «        }| j                             ||                     d¦  «        f¦  «         Œ‚d S ©Nr   r<   Úorder)	ra   r-   r   r+  Ú_fromÚwrap_constantr2  rÐ   r¤   ©r4   r6  rY   r@   s       r5   Úorderbyz_SetOperation.orderbyC  s“   € àð 	@ð 	@ˆEõ ˜e¥SÑ)Ô)ð:•�e 4¤?Ô#8¸Ô#;Ð<Ñ<Ô<Ð<à”_×2Ò2°5Ñ9Ô9ð ð ŒN×!Ò! 5¨&¯*ª*°WÑ*=Ô*=Ð">Ñ?Ô?Ð?Ð?ð	@ð 	@r7   Úlimitrd   c                ó   — || _         d S r1   ©r3  ©r4   r>  s     r5   r>  z_SetOperation.limitN  ó   € àˆŒˆˆr7   Úoffsetc                ó   — || _         d S r1   ©r4  ©r4   rC  s     r5   rC  z_SetOperation.offsetR  ó   € àˆŒˆˆr7   r^   r+   c                óR   — | j                              t          j        |f¦  «         d S r1   )r1  rÐ   r   Úunionrb   s     r5   rI  z_SetOperation.unionV  ó'   € àÔ×"Ò"¥LÔ$6¸Ð#>Ñ?Ô?Ð?Ð?Ð?r7   c                óR   — | j                              t          j        |f¦  «         d S r1   )r1  rÐ   r   Ú	union_allrb   s     r5   rL  z_SetOperation.union_allZ  ó'   € àÔ×"Ò"¥LÔ$:¸EÐ#BÑCÔCÐCÐCÐCr7   c                óR   — | j                              t          j        |f¦  «         d S r1   )r1  rÐ   r   Ú	intersectrb   s     r5   rO  z_SetOperation.intersect^  rM  r7   c                óR   — | j                              t          j        |f¦  «         d S r1   )r1  rÐ   r   Ú	except_ofrb   s     r5   rQ  z_SetOperation.except_ofb  rM  r7   c                óR   — | j                              t          j        |f¦  «         d S r1   )r1  rÐ   r   Úminusrb   s     r5   rS  z_SetOperation.minusf  rJ  r7   c                ó,   — |                       |¦  «        S r1   ©rI  rb   s     r5   Ú__add__z_SetOperation.__add__j  ó   € Ø�zŠz˜%Ñ Ô Ð r7   c                ó,   — |                       |¦  «        S r1   ©rL  rb   s     r5   Ú__mul__z_SetOperation.__mul__m  ó   € Ø�~Š~˜eÑ$Ô$Ð$r7   c                ó,   — |                       |¦  «        S r1   ©rS  rb   s     r5   Ú__sub__z_SetOperation.__sub__p  rW  r7   r-   c                ó*   — |                       ¦   «         S r1   r³   rB   s    r5   r´   z_SetOperation.__str__s  ó   € Ø�|Š|‰~Œ~Ðr7   FÚ
with_aliasr_   Úsubqueryc                óú  — d}|                      d| 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        ¦  «        k    r$t          d 
                    ||	¬¦  «        ¦  «        ‚|| 
                    |j        |	¬¦  «        z  }Œ‘| j        r| | j        d
i |¤Žz  }| j        �||                      ¦   «         z  }| j        r||                      ¦   «         z  }|r dj
        d
d	|i|¤Ž}|rt%          || j        p| j        fi |¤ŽS |S )Nz {type} {query_string}Údialectr   rb  z€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})rT   rQ   )Ú
setdefaultr+  rd  Ú
QUOTE_CHARr\   Úwrap_set_operation_queriesr1  rÏ   Ú_selectsr   r‚   Úvaluer2  Ú_orderby_sqlr3  Ú
_limit_sqlr4  Ú_offset_sqlr!   r,   r™   )
r4   ra  rb  rY   Úset_operation_templateÚbase_querystringÚquerystringr-  r,  Úset_operation_querystrings
             r5   r\   z_SetOperation.get_sqlv  sý  € Ø!9Ðà×Ò˜) T¤_Ô%<Ñ=Ô=Ð=ð 	×Ò˜,¨¬Ô(BÑCÔCÐCà2˜4œ?Ô2ÐqÐq¸D¼OÔ<fÐqÐjpÐqÐqÐà&ˆØ26Ô2Eð 	ð 	Ñ.ˆMÐ.Ø(CÐ(;Ô(Cð )ð )ØœÔCð)ØGMð)ð )Ð%õ �4”?Ô+Ñ,Ô,µÐ4GÔ4PÑ0QÔ0QÒQÐQÝ+ðSßSYÒSYØ/Ð8Qð TZñ Tô Tñô ð ð Ð1×8Ò8Ø"Ô(Ð7Pð 9ñ ô ñ ˆKˆKð Œ>ð 	7ØÐ,˜4Ô,Ð6Ð6¨vÐ6Ð6Ñ6ˆKàŒ;Ð"Ø˜4Ÿ?š?Ñ,Ô,Ñ,ˆKàŒ<ð 	.Ø˜4×+Ò+Ñ-Ô-Ñ-ˆKàð 	JØ,˜+Ô,ÐIÐI°;ÐIÀ&ÐIÐIˆKàð 	[Ý# K°´Ð1O¸tÔ?OÐZÐZÐSYÐZÐZÐZàÐr7   r   c                ól  — g }d„ | j         j        D ¦   «         }| j        D ]l\  }}|j        r|j        |v rt	          |j        |¦  «        n |j        d	d|i|¤Ž}|                     |�d                     ||j        ¬¦  «        n|¦  «         Œmd                     d 	                    |¦  «        ¬¦  «        S )
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.
        c                ó   — h | ]	}|j         ’Œ
S rQ   r2   ©Ú.0r�   s     r5   ú	<setcomp>z-_SetOperation._orderby_sql.<locals>.<setcomp>­  s   € ÐFÐFÐF¨˜AœGÐFÐFÐFr7   r   Nú{term} {orient}©ÚtermÚorientú ORDER BY {orderby}ú,©r=  rQ   )
r+  rl  r2  r,   r"   r\   rÐ   r‚   rm  Újoin)r4   r   rY   ÚclausesÚselected_aliasesr@   Údirectionalityr|  s           r5   rn  z_SetOperation._orderby_sql£  sí   € ð ˆØFÐF¨T¬_Ô-EÐFÑFÔFÐØ%)¤^ð 		ð 		Ñ!ˆE�>ð ”;ðDØ#(¤;Ð2BÐ#BÐ#Bõ ˜eœk¨:Ñ6Ô6Ð6à"�U”]ÐCÐC¨jÐC¸FÐCÐCð ð �NŠNØTbÐTnÐ!×(Ò(¨d¸>Ô;OÐ(ÑPÔPÐPÐtxñô ð ð ð %×+Ò+°C·H²H¸WÑ4EÔ4EÐ+ÑFÔFÐFr7   c                ó8   — d                      | j        ¬¦  «        S )Nz OFFSET {offset})rC  )r‚   r4  rB   s    r5   rp  z_SetOperation._offset_sql»  s   € Ø!×(Ò(°´Ð(Ñ=Ô=Ð=r7   c                ó8   — d                      | j        ¬¦  «        S )Nz LIMIT {limit})r>  )r‚   r3  rB   s    r5   ro  z_SetOperation._limit_sql¾  s   € Ø×&Ò&¨T¬[Ð&Ñ9Ô9Ð9r7   )
r+  r(   r,  r(   r-  r   r,   r€   r.  r/  )r6  r   rY   r   r.   r/   ©r>  rd   r.   r/   ©rC  rd   r.   r/   )r^   r+   r.   r/   )r^   r+   r.   r*  ©r^   r(   r.   r*  rL   ©FF©ra  r_   rb  r_   rY   r   r.   r-   r1   r„   )rM   rN   rO   ræ   r   r6   r    r=  r>  rC  rI  rL  rO  rQ  rS  rV  rZ  r^  r´   r\   rn  rp  ro  rj   rk   s   @r5   r*  r*  (  s  ø€ € € € € ðð ð !Ø*6ð(ð (ð (ð (ð (ð (ð (ð$ ð@ð @ð @ñ „Wð@ð ðð ð ñ „Wðð ðð ð ñ „Wðð ð@ð @ð @ñ „Wð@ð ðDð Dð Dñ „WðDð ðDð Dð Dñ „WðDð ðDð Dð Dñ „WðDð ð@ð @ð @ñ „Wð@ð!ð !ð !ð !ð%ð %ð %ð %ð!ð !ð !ð !ðð ð ð ð+ð +ð +ð +ð +ðZGð Gð Gð Gð Gð0>ð >ð >ð >ð:ð :ð :ð :ð :ð :ð :ð :r7   r*  c                  ó~  ‡ — e Zd ZdZdZdZdZdZeZ	dde
ddfd§ˆ f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'„¦   «         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°d2„¦   «         Zed±d4„¦   «         Zed±d5„¦   «         Zed±d6„¦   «         Z ed²d8„¦   «         Z!ed®d9„¦   «         Z"ed³d<„¦   «         Z#ed´d>„¦   «         Z$ee%j&        fdµdD„¦   «         Z'd¶dF„Z(d¶dG„Z)d¶dH„Z*d¶dI„Z+d¶dJ„Z,d¶dK„Z-d¶dL„Z.d¶dM„Z/d¶dN„Z0ed·dQ„¦   «         Z1ed¸dS„¦   «         Z2ed¹dV„¦   «         Z3ed¹dW„¦   «         Z4ed¹dX„¦   «         Z5ed¹dY„¦   «         Z6ed¹dZ„¦   «         Z7edºd^„¦   «         Z8d¹d_„Z9d¹d`„Z:d¹da„Z;ed»dc„¦   «         Z<d¼ˆ fde„Z=e>d½d¾dk„¦   «         Z?d¿dl„Z@dÀdn„ZAdÁdq„ZBdÂds„ZCdÃdv„ZDdÄdx„ZEdÅdz„ZFdÆd|„ZGd­d}„ZHdÇd~„ZIdÇd„ZJdÈd€„ZKdÈd�„ZLdÉd‚„ZMdÊd„„ZNdËdÌd†„ZOdÍdˆ„ZPdÎd‰„ZQdÎdŠ„ZRdÇd‹„ZSdÎdŒ„ZTdÎd�„ZUdÎdŽ„ZVe>dÎd�„¦   «         ZWdÎd�„ZXdÏdÐd’„ZYdÎd“„ZZdÎd”„Z[dÏdÐd•„Z\dÏdÐd–„Z]dÎd—„Z^dÎd˜„Z_d½dÑd™„Z`d½dÑdš„Za	 	 	 dÒdÓd�„Zb	 	 	 dÒdÔdŸ„ZcdÇd „Zdd½dÑd¡„Zed½dÑd¢„ZfdÇd£„ZgdÇd¤„ZhdÎd¥„Zid¦„ 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±   ú'NTFrd  úDialects | Nonerk  r_   r.  r/  Ú	immutableÚ
as_keywordc                óv  •— 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| _#        || _$        || _%        || _&        || _'        || _(        d S )NFr   ))rW   r6   r:  Ú_insert_tableÚ_update_tableÚ_delete_fromÚ_replaceÚ_withrl  Ú_force_indexesÚ_use_indexesÚ_columnsÚ_valuesÚ	_distinctÚ_ignoreÚ_for_updateÚ_wheresÚ
_prewheresÚ	_groupbysÚ_with_totalsÚ_havingsÚ	_qualifysr2  Ú_joinsÚ_unionsÚ_usingr3  r4  Ú_updatesÚ_select_starÚsetÚ_select_star_tablesÚ_mysql_rollupÚ_select_intoÚ_subquery_countÚ_foreign_tablerd  r�  rk  r5  r�  )r4   rd  rk  r.  r�  r�  rX   s         €r5   r6   zQueryBuilder.__init__Î  s>  ø€ õ 	‰Œ×Ò˜ÑÔÐàˆŒ
Ø!ˆÔØ!ˆÔØ!ˆÔØˆŒàˆŒ
ØˆŒØ ˆÔØˆÔØˆŒØˆŒØˆŒØˆŒà ˆÔàˆŒØˆŒØˆŒØ!ˆÔØˆŒØˆŒØˆŒØˆŒØˆŒØˆŒàˆŒØˆŒàˆŒà!ˆÔÝ#&¡5¤5ˆÔ Ø"ˆÔØ!ˆÔà ˆÔØ#ˆÔàˆŒØ$ˆŒØ*DˆÔ'à'ˆÔà"ˆŒˆˆr7   r.   c                ó,  — t          | ¦  «                             t          | ¦  «        ¦  «        }|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 r1   )rÝ   Ú__new__Ú__dict__rÃ   r   rª  r:  r–  rl  r™  rš  r   r2  r¤  r¥  r§  r—  r˜  )r4   Únewones     r5   Ú__copy__zQueryBuilder.__copy__	  s#  € Ý�d‘”×#Ò#¥D¨¡J¤JÑ/Ô/ˆØŒ×Ò˜tœ}Ñ-Ô-Ð-Ý%)¨$Ô*BÑ%CÔ%CˆÔ"Ý˜DœJÑ'Ô'ˆŒÝ˜DœJÑ'Ô'ˆŒÝ˜tœ}Ñ-Ô-ˆŒÝ˜tœ}Ñ-Ô-ˆŒÝ˜dœlÑ+Ô+ˆŒÝ ¤Ñ/Ô/ˆÔÝ ¤Ñ/Ô/ˆÔÝ˜Tœ[Ñ)Ô)ˆŒÝ˜dœlÑ+Ô+ˆŒÝ˜tœ}Ñ-Ô-ˆŒÝ $ TÔ%8Ñ 9Ô 9ˆÔÝ" 4Ô#4Ñ5Ô5ˆÔØˆr7   Ú
selectableúSelectable | Query | strr/   c                ó`  — | j                              t          |t          ¦  «        rt	          |¦  «        n|¦  «         t          |t
          t          f¦  «        rQ|j        €Lt          |t
          ¦  «        r|j        }nd}t          | j        |¦  «        }d|z  |_        |dz   | _        dS dS dS )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Ð   ra   r-   ry   r(   r*  r,   r­  Úmax)r4   r´  Úsub_query_counts      r5   r¿   zQueryBuilder.from_  s¹   € ð 	Œ
×Ò­z¸*ÅcÑ/JÔ/JÐZ�% 
Ñ+Ô+Ð+ÐPZÑ[Ô[Ð[å�j¥<µÐ"?Ñ@Ô@ð 	7ÀZÔEUÐE]Ý˜*¥lÑ3Ô3ð $Ø",Ô"<��à"#�å! $Ô"6¸ÑHÔHˆOØ%¨Ñ7ˆJÔØ#2°QÑ#6ˆDÔ Ð Ð ð	7ð 	7ÐE]ÐE]r7   Úcurrent_tableúTable | NoneÚ	new_tablec                óÄ  ‡‡— ˆˆfd„| j         D ¦   «         | _         | j        ‰k    r‰n| j        | _        | j        ‰k    r‰n| j        | _        ˆˆfd„| j        D ¦   «         | _        ˆˆfd„| j        D ¦   «         | _        ˆˆfd„| j        D ¦   «         | _        ˆˆfd„| j        D ¦   «         | _        | j        r| j                             ‰‰¦  «        nd| _        | j	        r| j	                             ‰‰¦  «        nd| _	        ˆˆfd„| j
        D ¦   «         | _
        | j        r| j                             ‰‰¦  «        nd| _        | j        r| j                             ‰‰¦  «        nd| _        ˆˆfd„| j        D ¦   «         | _        ˆˆfd	„| j        D ¦   «         | _        ‰| j        v r6| j                             ‰¦  «         | j                             ‰¦  «         dS dS )
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.
        c                ó$   •— g | ]}|‰k    r‰n|‘ŒS rQ   rQ   )rx  r=   rº  r¼  s     €€r5   ú
<listcomp>z.QueryBuilder.replace_table.<locals>.<listcomp>C  s'   ø€ Ð]Ð]Ð]È 5¨MÒ#9Ð#9�i�i¸uÐ]Ð]Ð]r7   c                ó<   •— g | ]}|                      ‰‰¦  «        ‘ŒS rQ   ©Úreplace_table)rx  Úalias_queryrº  r¼  s     €€r5   r¿  z.QueryBuilder.replace_table.<locals>.<listcomp>G  s)   ø€ ÐhÐhÐhÈk�k×/Ò/°¸yÑIÔIÐhÐhÐhr7   c                ó<   •— g | ]}|                      ‰‰¦  «        ‘ŒS rQ   rÁ  )rx  rÀ   rº  r¼  s     €€r5   r¿  z.QueryBuilder.replace_table.<locals>.<listcomp>H  ó)   ø€ ÐdÐdÐdÈF˜×-Ò-¨m¸YÑGÔGÐdÐdÐdr7   c                ó<   •— g | ]}|                      ‰‰¦  «        ‘ŒS rQ   rÁ  )rx  rë   rº  r¼  s     €€r5   r¿  z.QueryBuilder.replace_table.<locals>.<listcomp>I  rÅ  r7   c                ó.   •— g | ]}ˆˆfd „|D ¦   «         ‘ŒS )c                ó<   •— g | ]}|                      ‰‰¦  «        ‘ŒS rQ   rÁ  )rx  rm  rº  r¼  s     €€r5   r¿  z9QueryBuilder.replace_table.<locals>.<listcomp>.<listcomp>K  s)   ø€ ÐSÐSÐS¸uˆU× Ò  °	Ñ:Ô:ÐSÐSÐSr7   rQ   )rx  Ú
value_listrº  r¼  s     €€r5   r¿  z.QueryBuilder.replace_table.<locals>.<listcomp>J  s>   ø€ ð 
ð 
ð 
ØXbÐSÐSÐSÐSÐSÈ
ÐSÑSÔSð
ð 
ð 
r7   Nc                ó<   •— g | ]}|                      ‰‰¦  «        ‘ŒS rQ   rÁ  )rx  Úgroupbyrº  r¼  s     €€r5   r¿  z.QueryBuilder.replace_table.<locals>.<listcomp>P  s)   ø€ ÐhÐhÐhÈg˜'×/Ò/°¸yÑIÔIÐhÐhÐhr7   c                óX   •— g | ]&}|d                                ‰‰¦  «        |d         f‘Œ'S )r   r‘   rÁ  )rx  r=  rº  r¼  s     €€r5   r¿  z.QueryBuilder.replace_table.<locals>.<listcomp>S  sC   ø€ ð 
ð 
ð 
ØQXˆW�QŒZ×%Ò% m°YÑ?Ô?ÀÈÄÐLð
ð 
ð 
r7   c                ó<   •— g | ]}|                      ‰‰¦  «        ‘ŒS rQ   rÁ  )rx  r�  rº  r¼  s     €€r5   r¿  z.QueryBuilder.replace_table.<locals>.<listcomp>V  s)   ø€ Ð\Ð\Ð\È�t×)Ò)¨-¸ÑCÔCÐ\Ð\Ð\r7   )r:  r’  r“  r–  rl  r™  rš  rž  rÂ  rŸ  r   r¢  r£  r2  r¤  rª  ÚremoveÚadd©r4   rº  r¼  s    ``r5   rÂ  zQueryBuilder.replace_table6  s]  øø€ ð ^Ð]Ð]Ð]Ð]ÐRVÔR\Ð]Ñ]Ô]ˆŒ
Ø*.Ô*<ÀÒ*MÐ*M˜Y˜YÐSWÔSeˆÔØ*.Ô*<ÀÒ*MÐ*M˜Y˜YÐSWÔSeˆÔàhÐhÐhÐhÐhÐ]aÔ]gÐhÑhÔhˆŒ
ØdÐdÐdÐdÐdÐVZÔVcÐdÑdÔdˆŒØdÐdÐdÐdÐdÐVZÔVcÐdÑdÔdˆŒð
ð 
ð 
ð 
ð 
ØfjÔfrð
ñ 
ô 
ˆŒð PTÌ|Ðe�t”|×1Ò1°-ÀÑKÔKÐKÐaeˆŒØUYÔUdÐn˜$œ/×7Ò7¸ÀyÑQÔQÐQÐjnˆŒØhÐhÐhÐhÐhÐY]ÔYgÐhÑhÔhˆŒØQUÔQ^Ðh˜œ×3Ò3°MÀ9ÑMÔMÐMÐdhˆŒØSWÔSaÐk˜œ×5Ò5°mÀYÑOÔOÐOÐgkˆŒð
ð 
ð 
ð 
ð 
Ø\`Ô\jð
ñ 
ô 
ˆŒð ]Ð\Ð\Ð\Ð\ÐPTÔP[Ð\Ñ\Ô\ˆŒà˜DÔ4Ð4Ð4ØÔ$×+Ò+¨MÑ:Ô:Ð:ØÔ$×(Ò(¨Ñ3Ô3Ð3Ð3Ð3ð 5Ð4r7   r+   r:   r-   c                óZ   — t          ||¦  «        }| j                             |¦  «         d S r1   )rS   r–  rÐ   )r4   r´  r:   rÒ   s       r5   r  zQueryBuilder.with_\  s-   € å˜˜zÑ*Ô*ˆØŒ
×Ò˜!ÑÔÐÐÐr7   r=   rÿ   c                óª   — | j         �t          ddz  ¦  «        ‚| j        rd| _        t	          |t
          ¦  «        r|nt          |¦  «        | _         d S )Nú$'Query' object has no attribute '%s'rÅ   T)r’  rª   rl  r¬  ra   ry   ©r4   r=   s     r5   rÅ   zQueryBuilder.intoa  sX   € àÔÐ)Ý Ð!GÈ&Ñ!PÑQÔQÐQàŒ=ð 	%Ø $ˆDÔå&0°½Ñ&>Ô&>ÐP˜U˜UÅEÈ%ÁLÄLˆÔÐÐr7   r¼   r   c                ó~  — |D ]¹}t          |t          ¦  «        r|                      |¦  «         Œ-t          |t          ¦  «        r|                      |¦  «         ŒXt          |t
          t          f¦  «        r|                      |¦  «         ŒŠ|                      |                      || j	        ¬¦  «        ¦  «         Œºd S ©N)r.  )
ra   r   Ú_select_fieldr-   Ú_select_field_strr   r   Ú_select_otherr;  r5  ©r4   r¼   r|  s      r5   rÀ   zQueryBuilder.selectk  sÐ   € àð 	\ð 	\ˆDÝ˜$¥Ñ&Ô&ð \Ø×"Ò" 4Ñ(Ô(Ð(Ð(Ý˜D¥#Ñ&Ô&ð \Ø×&Ò& tÑ,Ô,Ð,Ð,Ý˜D¥8Õ-AÐ"BÑCÔCð \Ø×"Ò" 4Ñ(Ô(Ð(Ð(à×"Ò" 4×#5Ò#5°dÈÔHYÐ#5Ñ#ZÔ#ZÑ[Ô[Ð[Ð[ð	\ð 	\r7   c                ób   — | j         s| j        s| j        rt          ddz  ¦  «        ‚d| _         d S )NrÓ  ÚdeleteT)r”  rl  r“  rª   rB   s    r5   rÜ  zQueryBuilder.deletew  sE   € àÔð 	T ¤ð 	T°Ô1Cð 	TÝ Ð!GÈ(Ñ!RÑSÔSÐSà ˆÔÐÐr7   c                óª   — | j         €| j        s| j        rt          ddz  ¦  «        ‚t	          |t
          ¦  «        r|nt          |¦  «        | _         d S )NrÓ  rÃ   )r“  rl  r”  rª   ra   ry   rÔ  s     r5   rÃ   zQueryBuilder.update~  sU   € àÔÐ)¨T¬]Ð)¸dÔ>OÐ)Ý Ð!GÈ(Ñ!RÑSÔSÐSå&0°½Ñ&>Ô&>ÐP˜U˜UÅEÈ%ÁLÄLˆÔÐÐr7   c                ó$  — | j         €t          ddz  ¦  «        ‚|r*t          |d         t          t          f¦  «        r|d         }|D ]G}t          |t
          ¦  «        rt          || j         ¬¦  «        }| j                             |¦  «         ŒHd S )NrÓ  rÆ   r   r<   )	r’  rª   ra   r’   r“   r-   r   r™  rÐ   rÚ  s      r5   rê   zQueryBuilder.columns…  s¢   € àÔÐ%Ý Ð!GÈ(Ñ!RÑSÔSÐSàð 	•Z  a¤­4µ¨-Ñ8Ô8ð 	Ø˜!”HˆEàð 	'ð 	'ˆDÝ˜$¥Ñ$Ô$ð =Ý˜T¨Ô);Ð<Ñ<Ô<�ØŒM× Ò  Ñ&Ô&Ð&Ð&ð	'ð 	'r7   c                ó(   —  | j         |Ž  d| _        d S ©NF©Ú_apply_termsr•  rÁ   s     r5   rÆ   zQueryBuilder.insert’  s   € àˆÔ˜5Ð!Ð!ØˆŒˆˆr7   c                ó(   —  | j         |Ž  d| _        d S ©NTrá  rÁ   s     r5   ÚreplacezQueryBuilder.replace—  s   € àˆÔ˜5Ð!Ð!ØˆŒˆˆr7   r|  r  c                óð   — |g|¢R D ]n}t          |t          ¦  «        r| j                             |¦  «         Œ2t          |t          ¦  «        r'| j                             t          |¦  «        ¦  «         Œod S r1   )ra   r   r—  rÐ   r-   ©r4   r|  r¼   rÒ   s       r5   Úforce_indexzQueryBuilder.force_indexœ  s   € à�˜��ð 	5ð 	5ˆAÝ˜!�UÑ#Ô#ð 5ØÔ#×*Ò*¨1Ñ-Ô-Ð-Ð-Ý˜A�sÑ#Ô#ð 5ØÔ#×*Ò*­5°©8¬8Ñ4Ô4Ð4øð		5ð 	5r7   c                óð   — |g|¢R D ]n}t          |t          ¦  «        r| j                             |¦  «         Œ2t          |t          ¦  «        r'| j                             t          |¦  «        ¦  «         Œod S r1   )ra   r   r˜  rÐ   r-   rç  s       r5   Ú	use_indexzQueryBuilder.use_index¤  s   € à�˜��ð 	3ð 	3ˆAÝ˜!�UÑ#Ô#ð 3ØÔ!×(Ò(¨Ñ+Ô+Ð+Ð+Ý˜A�sÑ#Ô#ð 3ØÔ!×(Ò(­¨q©¬Ñ2Ô2Ð2øð		3ð 	3r7   c                ó   — d| _         d S rä  ©r›  rB   s    r5   ÚdistinctzQueryBuilder.distinct¬  s   € àˆŒˆˆr7   c                ó   — d| _         d S rä  ©r�  rB   s    r5   Ú
for_updatezQueryBuilder.for_update°  s   € àˆÔÐÐr7   c                ó   — d| _         d S rä  )rœ  rB   s    r5   ÚignorezQueryBuilder.ignore´  s   € àˆŒˆˆr7   r£   r   c                ó~   — |                       |¦  «        sd| _        | j        r| xj        |z  c_        d S || _        d S rä  )Ú_validate_tabler®  rŸ  ©r4   r£   s     r5   ÚprewherezQueryBuilder.prewhere¸  sI   € à×#Ò# IÑ.Ô.ð 	'Ø"&ˆDÔàŒ?ð 	(ØˆOŒO˜yÑ(ˆOŒOˆOˆOà'ˆDŒOˆOˆOr7   úTerm | EmptyCriterionc                ó¬   — t          |t          ¦  «        rd S |                      |¦  «        sd| _        | j        r| xj        |z  c_        d S || _        d S rä  )ra   r   rô  r®  rž  rõ  s     r5   ÚwherezQueryBuilder.whereÂ  s`   € å�i¥Ñ0Ô0ð 	ØˆFà×#Ò# IÑ.Ô.ð 	'Ø"&ˆDÔàŒ<ð 	%ØˆLŒL˜IÑ%ˆLŒLˆLˆLà$ˆDŒLˆLˆLr7   c                ót   — t          |t          ¦  «        rd S | j        r| xj        |z  c_        d S || _        d S r1   )ra   r   r¢  rõ  s     r5   ÚhavingzQueryBuilder.havingÏ  sB   € å�i¥Ñ0Ô0ð 	ØˆFàŒ=ð 	&ØˆMŒM˜YÑ&ˆMŒMˆMˆMà%ˆDŒMˆMˆMr7   c                ót   — t          |t          ¦  «        rd S | j        r| xj        |z  c_        d S || _        d S r1   )ra   r   r£  rõ  s     r5   ÚqualifyzQueryBuilder.qualifyÙ  sB   € å�i¥Ñ0Ô0ð 	ØˆFàŒ>ð 	'ØˆNŒN˜iÑ'ˆNŒNˆNˆNà&ˆDŒNˆNˆNr7   ústr | int | Termc                óJ  — |D ]Ÿ}t          |t          ¦  «        rt          || j        d         ¬¦  «        }nQt          |t          ¦  «        r<t          t          |¦  «        | j        d         ¬¦  «                             |¦  «        }| j                             |¦  «         Œ d S )Nr   r<   )ra   r-   r   r:  rd   r;  r   rÐ   rÚ  s      r5   rË  zQueryBuilder.groupbyã  s    € àð 	(ð 	(ˆDÝ˜$¥Ñ$Ô$ð QÝ˜T¨¬°A¬Ð7Ñ7Ô7��Ý˜D¥#Ñ&Ô&ð QÝ�S ™YœY¨d¬j¸¬mÐ<Ñ<Ô<×JÒJÈ4ÑPÔP�àŒN×!Ò! $Ñ'Ô'Ð'Ð'ð	(ð 	(r7   c                ó   — d| _         d S rä  )r¡  rB   s    r5   Úwith_totalszQueryBuilder.with_totalsí  s   € à ˆÔÐÐr7   úlist | tuple | set | TermrY   c                óÔ  — d|                      d¦  «        k    }| j        rt          ddz  ¦  «        ‚d„ |D ¦   «         }|r1|s| j        st	          d¦  «        ‚d| _        | xj        |z  c_        d S dt          | j        ¦  «        k     r=t          | j        d	         t          ¦  «        r| j        d	         xj        |z  c_        d S | j         	                    t          |Ž ¦  «         d S )
NÚmysqlÚvendorrÓ  Úrollupc                óh   — g | ]/}t          |t          t          t          f¦  «        r	t	          |Ž n|‘Œ0S rQ   )ra   r’   r“   r©  r   )rx  r|  s     r5   r¿  z'QueryBuilder.rollup.<locals>.<listcomp>ø  s7   € ÐbÐbÐbÐTX¥¨Dµ4½ÅÐ2DÑ!EÔ!EÐO•˜��È4ÐbÐbÐbr7   zWAt least one group is required. Call Query.groupby(term) or passas parameter to rollup.Tr   éÿÿÿÿ)
r¤   r«  rª   r   r   rÏ   ra   r   ÚargsrÐ   )r4   r¼   rY   Ú	for_mysqls       r5   r  zQueryBuilder.rollupñ  s  € à˜vŸzšz¨(Ñ3Ô3Ò3ˆ	àÔð 	TÝ Ð!GÈ(Ñ!RÑSÔSÐSàbÐbÐ\aÐbÑbÔbˆàð 	2àð  ¤ð Ý%Øpñô ð ð "&ˆDÔØˆNŒN˜eÑ#ˆNŒNˆNˆNà•�T”^Ñ$Ô$Ò$Ð$­°D´NÀ2Ô4FÍÑ)OÔ)OÐ$àŒN˜2ÔÐ#Ô# uÑ,Ð#Ô#Ð#Ð#ð ŒN×!Ò!¥&¨% .Ñ1Ô1Ð1Ð1Ð1r7   r6  c                óú   — |D ]w}t          |t          ¦  «        rt          || j        d         ¬¦  «        n|                      |¦  «        }| j                             ||                     d¦  «        f¦  «         Œxd S r8  )ra   r-   r   r:  r;  r2  rÐ   r¤   r<  s       r5   r=  zQueryBuilder.orderby  s…   € àð 	@ð 	@ˆEÝ9CÀEÍ3Ñ9OÔ9OÐn•E˜% t¤z°!¤}Ð5Ñ5Ô5Ð5ÐUY×UgÒUgÐhmÑUnÔUnˆEàŒN×!Ò! 5¨&¯*ª*°WÑ*=Ô*=Ð">Ñ?Ô?Ð?Ð?ð	@ð 	@r7   rx   ú0Table | QueryBuilder | AliasedQuery | SelectableÚhowr   úJoiner[Self]c                ó¸  — t          |t          ¦  «        rt          | ||d¬¦  «        S t          |t          ¦  «        r/|j        €|                      |¦  «         t          | ||d¬¦  «        S t          |t          ¦  «        rt          | ||d¬¦  «        S t          |t          ¦  «        rt          | ||d¬¦  «        S t          dt          |¦  «        z  ¦  «        ‚)Nr=   )Ú
type_labelrb  zCannot join on type '%s')
ra   ry   ÚJoinerr(   r,   Ú_tag_subqueryrS   r+   Ú
ValueErrorrÝ   ©r4   rx   r  s      r5   r�  zQueryBuilder.join  sâ   € õ �d�EÑ"Ô"ð 	BÝ˜$  c°gÐ>Ñ>Ô>Ð>å˜�lÑ+Ô+ð 		BØŒzÐ!Ø×"Ò" 4Ñ(Ô(Ð(Ý˜$  c°jÐAÑAÔAÐAå˜�lÑ+Ô+ð 	BÝ˜$  c°gÐ>Ñ>Ô>Ð>å˜�jÑ)Ô)ð 	BÝ˜$  c°jÐAÑAÔAÐAåÐ3µd¸4±j´jÑ@ÑAÔAÐAr7   ú#Table | QueryBuilder | AliasedQueryc                óB   — |                       |t          j        ¦  «        S r1   )r�  r   Úinnerr~   s     r5   Ú
inner_joinzQueryBuilder.inner_join&  ó   € Ø�yŠy˜�xœ~Ñ.Ô.Ð.r7   c                óB   — |                       |t          j        ¦  «        S r1   )r�  r   Úleftr~   s     r5   Ú	left_joinzQueryBuilder.left_join)  ó   € Ø�yŠy˜�xœ}Ñ-Ô-Ð-r7   c                óB   — |                       |t          j        ¦  «        S r1   )r�  r   Ú
left_outerr~   s     r5   Úleft_outer_joinzQueryBuilder.left_outer_join,  ó   € Ø�yŠy˜�xÔ2Ñ3Ô3Ð3r7   c                óB   — |                       |t          j        ¦  «        S r1   )r�  r   Úrightr~   s     r5   Ú
right_joinzQueryBuilder.right_join/  r  r7   c                óB   — |                       |t          j        ¦  «        S r1   )r�  r   Úright_outerr~   s     r5   Úright_outer_joinzQueryBuilder.right_outer_join2  s   € Ø�yŠy˜�xÔ3Ñ4Ô4Ð4r7   c                óB   — |                       |t          j        ¦  «        S r1   )r�  r   Úouterr~   s     r5   Ú
outer_joinzQueryBuilder.outer_join5  r  r7   c                óB   — |                       |t          j        ¦  «        S r1   )r�  r   Ú
full_outerr~   s     r5   Úfull_outer_joinzQueryBuilder.full_outer_join8  r!  r7   c                óB   — |                       |t          j        ¦  «        S r1   )r�  r   Úcrossr~   s     r5   Ú
cross_joinzQueryBuilder.cross_join;  r  r7   c                óB   — |                       |t          j        ¦  «        S r1   )r�  r   rf   r~   s     r5   Ú	hash_joinzQueryBuilder.hash_join>  r  r7   r>  rd   c                ó   — || _         d S r1   r@  rA  s     r5   r>  zQueryBuilder.limitA  rB  r7   rC  c                ó   — || _         d S r1   rE  rF  s     r5   rC  zQueryBuilder.offsetE  rG  r7   r^   r*  c                óF   — t          | |t          j        | j        ¬¦  «        S rÖ  )r*  r   rI  r5  rb   s     r5   rI  zQueryBuilder.unionI  ó   € å˜T 5­,Ô*<È$ÔJ[Ð\Ñ\Ô\Ð\r7   c                óF   — t          | |t          j        | j        ¬¦  «        S rÖ  )r*  r   rL  r5  rb   s     r5   rL  zQueryBuilder.union_allM  ó   € å˜T 5­,Ô*@ÈdÔN_Ð`Ñ`Ô`Ð`r7   c                óF   — t          | |t          j        | j        ¬¦  «        S rÖ  )r*  r   rO  r5  rb   s     r5   rO  zQueryBuilder.intersectQ  r8  r7   c                óF   — t          | |t          j        | j        ¬¦  «        S rÖ  )r*  r   rQ  r5  rb   s     r5   rQ  zQueryBuilder.except_ofU  r8  r7   c                óF   — t          | |t          j        | j        ¬¦  «        S rÖ  )r*  r   rS  r5  rb   s     r5   rS  zQueryBuilder.minusY  r6  r7   r@   úField | strrm  c                óì   — t          |t          ¦  «        st          |¦  «        n|}t          |t          ¦  «        s|                      || j        ¬¦  «        }| j                             ||f¦  «         d S rÖ  )ra   r   r   r;  r5  r§  rÐ   )r4   r@   rm  s      r5   r©  zQueryBuilder.set]  sn   € å$.¨uµeÑ$<Ô$<ÐG•�e‘”�À%ˆÝ˜%¥Ñ&Ô&ð 	MØ×&Ò& u¸$Ô:KÐ&ÑLÔLˆEØŒ×Ò˜e U˜^Ñ,Ô,Ð,Ð,Ð,r7   c                ó,   — |                       |¦  «        S r1   rU  rb   s     r5   rV  zQueryBuilder.__add__d  rW  r7   c                ó,   — |                       |¦  «        S r1   rY  rb   s     r5   rZ  zQueryBuilder.__mul__g  r[  r7   c                ó,   — |                       |¦  «        S r1   r]  rb   s     r5   r^  zQueryBuilder.__sub__j  rW  r7   Úslicec                ó6   — |j         | _        |j        | _        d S r1   )Ústartr4  Ústopr3  )r4   rA  s     r5   rA  zQueryBuilder.slicem  s   € à”{ˆŒØ”jˆŒˆˆr7   úQueryBuilder | Fieldc                óš   •— t          |t          ¦  «        s!t          ¦   «                              |¦  «        S |                      |¦  «        S r1   )ra   rA  rW   rI   )r4   rx   rX   s     €r5   rI   zQueryBuilder.__getitem__r  s?   ø€ Ý˜$¥Ñ&Ô&ð 	-Ý‘7”7×&Ò& tÑ,Ô,Ð,Ø�zŠz˜$ÑÔÐr7   Ú	field_setúSequence[Field]r   r€   ú	list[str]c                ó    ‡— ˆfd„| D ¦   «         S )Nc                óJ   •— g | ]}|j         p|                     ‰¬ ¦  «        ‘Œ S )r²   )r,   r\   )rx  r@   r   s     €r5   r¿  z.QueryBuilder._list_aliases.<locals>.<listcomp>y  s.   ø€ Ð[Ð[Ð[È�”ÐC˜uŸ}š}¸
˜}ÑCÔCÐ[Ð[Ð[r7   rQ   )rG  r   s    `r5   Ú_list_aliaseszQueryBuilder._list_aliasesw  s   ø€ à[Ð[Ð[Ð[ÐQZÐ[Ñ[Ô[Ð[r7   c                ó   — dt          | j        ¦  «        k    rt          d|› d�¦  «        ‚|dk    rd| _        t	          ¦   «         g| _        d S |                      t          || j        d         ¬¦  «        ¦  «         d S )Nr   zCannot select z, no FROM table specified.Ú*Tr<   )rÏ   r:  r   r¨  r   rl  r×  r   ©r4   r|  s     r5   rØ  zQueryBuilder._select_field_str{  s   € Ø•�D”J‘”ÒÐÝ Ð!R°$Ð!RÐ!RÐ!RÑSÔSÐSà�3Š;ˆ;Ø $ˆDÔÝ!™VœV˜HˆDŒMØˆFà×Ò�5 ¨T¬Z¸¬]Ð;Ñ;Ô;Ñ<Ô<Ð<Ð<Ð<r7   r   c                ó  ‡— | j         rd S ‰j        | j        v rd S t          ‰t          ¦  «        r7ˆfd„| j        D ¦   «         | _        | j                             ‰j        ¦  «         | j                             ‰¦  «         d S )Nc                óT   •— g | ]$}t          |d ¦  «        r‰j        |j        k    ¯"|‘Œ%S r<   )Úhasattrr=   )rx  rÀ   r|  s     €r5   r¿  z.QueryBuilder._select_field.<locals>.<listcomp>�  sC   ø€ ð ð ð Ø!½'À&È'Ñ:RÔ:RðØVZÔV`ÐdjÔdpÒVpÐVp�ÐVpÐVpÐVpr7   )r¨  r=   rª  ra   r   rl  rÏ  rÐ   rO  s    `r5   r×  zQueryBuilder._select_field†  s�   ø€ ØÔð 	àˆFàŒ:˜Ô1Ð1Ð1àˆFå�d�DÑ!Ô!ð 	5ðð ð ð Ø%)¤]ðñ ô ˆDŒMð Ô$×(Ò(¨¬Ñ4Ô4Ð4àŒ×Ò˜TÑ"Ô"Ð"Ð"Ð"r7   Úfunctionr   c                ó:   — | j                              |¦  «         d S r1   )rl  rÐ   )r4   rS  s     r5   rÙ  zQueryBuilder._select_other—  s   € ØŒ×Ò˜XÑ&Ô&Ð&Ð&Ð&r7   úlist[Field]c                ó   — g S r1   rQ   rB   s    r5   Úfields_zQueryBuilder.fields_š  s   € àˆ	r7   r�  ÚJoinc                ó^  ‡‡— | j         | j        gz   | j        z   Š‰                     ‰| j        ¦  «         t          ˆˆfd„‰D ¦   «         ¦  «        }t          ‰j        t          ¦  «        r'‰j        j	        €|r‰j        j
        dz   ‰j        _	        | j                             ‰¦  «         d S )Nc              3  óT   •K  — | ]"}t          |t          ¦  «        o‰j        ‰v V — Œ#d S r1   )ra   ry   rx   )rx  ÚclauseÚbase_tablesr�  s     €€r5   ú	<genexpr>z'QueryBuilder.do_join.<locals>.<genexpr>¢  s:   øè è € ÐnÐnÐX^�Z¨µÑ6Ô6ÐS¸4¼9ÈÐ;SÐnÐnÐnÐnÐnÐnr7   Ú2)r:  r“  r–  Úvalidater¤  Úanyra   rx   ry   r,   r™   rÐ   )r4   r�  Útable_in_queryr\  s    ` @r5   Údo_joinzQueryBuilder.do_joinž  s¬   øø€ Ø”j DÔ$6Ð#7Ñ7¸$¼*ÑDˆØ�Š�k 4¤;Ñ/Ô/Ð/åÐnÐnÐnÐnÐnÐbmÐnÑnÔnÑnÔnˆÝ�d”i¥Ñ'Ô'ð 	:¨D¬I¬OÐ,CÈÐ,Cð #œiÔ3°cÑ9ˆDŒIŒOàŒ×Ò˜4Ñ Ô Ð Ð Ð r7   ry   c                óD   ‡— t          ˆfd„| j        D ¦   «         ¦  «        S )Nc              3  ó.   •K  — | ]}‰|j         k    V — Œd S r1   ©rx   )rx  r�  r=   s     €r5   r]  z)QueryBuilder.is_joined.<locals>.<genexpr>«  s*   øè è € Ð>Ð>¨$�5˜DœIÒ%Ð>Ð>Ð>Ð>Ð>Ð>r7   )r`  r¤  rÔ  s    `r5   Ú	is_joinedzQueryBuilder.is_joinedª  s(   ø€ ÝÐ>Ð>Ð>Ð>°$´+Ð>Ñ>Ô>Ñ>Ô>Ð>r7   r   c                óð   — | j         | j        gz   }|                     ¦   «         D ]P}|j        |v }|j        d„ | j        D ¦   «         v }t          |j        du| | |j        | j        k    g¦  «        r dS ŒQdS )z‡
        Returns False if the term references a table not already part of the
        FROM clause or JOINS and True otherwise.
        c                ó   — g | ]	}|j         ‘Œ
S rQ   re  ©rx  r�  s     r5   r¿  z0QueryBuilder._validate_table.<locals>.<listcomp>¶  s   € Ð,OÐ,OÐ,O¸4¨T¬YÐ,OÐ,OÐ,Or7   NFT)r:  r“  rW  r=   r¤  Úall)r4   r|  r\  r@   Útable_in_base_tablesÚtable_in_joinss         r5   rô  zQueryBuilder._validate_table­  s¦   € ð
 ”j DÔ$6Ð#7Ñ7ˆà—\’\‘^”^ð 	ð 	ˆEØ#(¤;°+Ð#=Ð Ø"œ[Ð,OÐ,OÀ4Ä;Ð,OÑ,OÔ,OÐOˆNÝà”K tÐ+Ø,Ð,Ø&Ð&Ø”K 4Ô#5Ò5ð	ñô ð ð �u�uðð ˆtr7   rb  c                óD   — d| j         z  |_        | xj         dz  c_         d S )Nr·  r‘   )r­  r,   )r4   rb  s     r5   r  zQueryBuilder._tag_subqueryÂ  s+   € Ø $Ô"6Ñ6ˆŒØÐÔ Ñ!ÐÔÐÐr7   c                óî   ‡ — ‰ j         €t          ddz  ¦  «        ‚|sdS t          |d         t          t          t
          f¦  «        s|g}|D ](}‰ j                             ˆ fd„|D ¦   «         ¦  «         Œ)dS )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   c                óh   •— g | ].}t          |t          ¦  «        r|n‰                     |¦  «        ‘Œ/S rQ   )ra   r   r;  )rx  rm  r4   s     €r5   r¿  z-QueryBuilder._apply_terms.<locals>.<listcomp>Õ  s<   ø€ Ð uÐ uÐ uÐej­*°U½DÑ*AÔ*AÐ!`  Àt×GYÒGYÐZ_ÑG`ÔG`Ð uÐ uÐ ur7   )r’  rª   ra   r’   r“   r©  rš  rÐ   )r4   r¼   Úvaluess   `  r5   râ  zQueryBuilder._apply_termsÆ  sŸ   ø€ ð
 ÔÐ%Ý Ð!GÈ(Ñ!RÑSÔSÐSàð 	ØˆFå˜% œ(¥T­5µ#Ð$6Ñ7Ô7ð 	Ø�GˆEàð 	wð 	wˆFØŒL×ÒÐ uÐ uÐ uÐ uÐntÐ uÑ uÔ uÑvÔvÐvÐvð	wð 	wr7   c                ó8   — |                       | j        ¬¦  «        S )N)rd  )r\   rd  rB   s    r5   r´   zQueryBuilder.__str__×  s   € Ø�|Š| D¤Lˆ|Ñ1Ô1Ð1r7   c                ó*   — |                       ¦   «         S r1   ©r´   rB   s    r5   r¹   zQueryBuilder.__repr__Ú  r`  r7   c                óX   — t          |t          ¦  «        sdS | j        |j        k    sdS dS r·   )ra   r(   r,   rb   s     r5   rc   zQueryBuilder.__eq__Ý  s2   € Ý˜%¥Ñ.Ô.ð 	Ø�5àŒz˜Uœ[Ò(Ð(Ø�5àˆtr7   c                ó.   — |                       |¦  «         S r1   ru   rb   s     r5   rv   zQueryBuilder.__ne__æ  rw   r7   c                óh   — t          | j        ¦  «        t          d„ | j        D ¦   «         ¦  «        z   S )Nc              3  ó4   K  — | ]}t          |¦  «        V — Œd S r1   )rf   )rx  r[  s     r5   r]  z(QueryBuilder.__hash__.<locals>.<genexpr>ê  s(   è è € Ð%LÐ%L°v¥d¨6¡l¤lÐ%LÐ%LÐ%LÐ%LÐ%LÐ%Lr7   )rf   r,   Úsumr:  rB   s    r5   rg   zQueryBuilder.__hash__é  s0   € Ý�D”JÑÔ¥#Ð%LÐ%LÀÄÐ%LÑ%LÔ%LÑ"LÔ"LÑLÐLr7   Údictc                ó  — |                      d| j        ¦  «         |                      d| j        ¦  «         |                      d| j        ¦  «         |                      d| j        ¦  «         |                      d| j        ¦  «         d S )Nr   Úsecondary_quote_charÚalias_quote_charr�  rd  )ri  rj  ÚSECONDARY_QUOTE_CHARÚALIAS_QUOTE_CHARr�  rd  r]   s     r5   Ú_set_kwargs_defaultsz!QueryBuilder._set_kwargs_defaultsì  s„   € Ø×Ò˜,¨¬Ñ8Ô8Ð8Ø×ÒÐ0°$Ô2KÑLÔLÐLØ×ÒÐ,¨dÔ.CÑDÔDÐDØ×Ò˜,¨¬Ñ8Ô8Ð8Ø×Ò˜) T¤\Ñ2Ô2Ð2Ð2Ð2r7   ra  c                ó^  ‡— |                       ‰¦  «         | j        s| j        s| j        s	| j        sdS | j        r| j        s	| j        sdS | j        r	| j        sdS t          | j        ¦  «        }dt          | j
        ¦  «        k     }dt          | j
        ¦  «        k     ot          | j
        d         t          ¦  «        }| j        }| j        o| j
        }t          |||||g¦  «        ‰d<   | j        r·| j        r | j        di ‰¤Žnd}	|	 | j        di ‰¤Žz  }	| j        r,|	dd                     ˆfd„| j        D ¦   «         ¦  «        z   z  }	|	 | j        di ‰¤Žz  }	| j
        r|	 | j        di ‰¤Žz  }	| j        r|	 | j        di ‰¤Žz  }	| j        �|	|                      ¦   «         z  }	|	S | j        r | j        di ‰¤Ž}	nÍ| j        s‰| j        r‚| j        r | j        di ‰¤Žnd}	| j        r|	 | j        di ‰¤Žz  }	n|	 | j        di ‰¤Žz  }	| j        r|	 | j        di ‰¤Žz  }	| j        r|	 | j         di ‰¤Žz  }	|	S |	d | j!        di ‰¤Žz   z  }	n=| j        r | j        di ‰¤Žnd}	|	 | j!        di ‰¤Žz  }	| j        r|	 | j"        di ‰¤Žz  }	| j
        r|	 | j        di ‰¤Žz  }	| j#        r|	 | j$        di ‰¤Žz  }	| j%        r|	 | j&        di ‰¤Žz  }	| j'        r|	 | j(        di ‰¤Žz  }	| j        r,|	dd                     ˆfd„| j        D ¦   «         ¦  «        z   z  }	| j)        r|	 | j*        di ‰¤Žz  }	| j        r|	 | j        di ‰¤Žz  }	| j+        r.|	 | j,        di ‰¤Žz  }	| j-        r|	|  .                    ¦   «         z  }	| j/        r|	 | j0        di ‰¤Žz  }	| j1        r|	 | j2        di ‰¤Žz  }	| j3        r|	 | j4        di ‰¤Žz  }	 | j5        |	fi ‰¤Ž}	| j6        r|	 | j7        di ‰¤Žz  }	|rd 8                    |	¬	¦  «        }	|r+| j9        €| j:        n| j9        ‰d
<   tw          |	| j<        fi ‰¤ŽS |	S )Nrã   r‘   r   Úwith_namespaceú c              3  ó2   •K  — | ]} |j         di ‰¤ŽV — Œd S r[   r³   ©rx  r�  rY   s     €r5   r]  z'QueryBuilder.get_sql.<locals>.<genexpr>  s5   øè è € Ð-]Ð-]È¨l¨d¬lÐ.DÐ.D¸VÐ.DÐ.DÐ-]Ð-]Ð-]Ð-]Ð-]Ð-]r7   c              3  ó2   •K  — | ]} |j         di ‰¤ŽV — Œd S r[   r³   r„  s     €r5   r]  z'QueryBuilder.get_sql.<locals>.<genexpr>J  s5   øè è € Ð)YÐ)YÀT¨,¨$¬,Ð*@Ð*@¸Ð*@Ð*@Ð)YÐ)YÐ)YÐ)YÐ)YÐ)Yr7   rh  ©rT   r|  rQ   )=r  rl  r’  r”  r“  rš  r§  r_   r¤  rÏ   r:  ra   r(   r®  r`  r–  Ú	_with_sqlÚ_update_sqlr�  Ú_set_sqlÚ	_from_sqlrž  Ú
_where_sqlr3  ro  Ú_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_sqlr2  rn  Ú_apply_paginationr�  Ú_for_update_sqlr‚   ÚQUERY_ALIAS_QUOTE_CHARr~  r!   r,   )
r4   ra  rb  rY   Ú	has_joinsÚhas_multiple_from_clausesÚhas_subquery_from_clauseÚhas_reference_to_foreign_tableÚhas_update_fromrs  s
      `      r5   r\   zQueryBuilder.get_sqló  sE  ø€ Ø×!Ò! &Ñ)Ô)Ð)Ø”ð 	 Ô!3ð 	°tÔ7Hð 	ÈDÔL^ð 	Ø�2ØÔð 	 t¤}ð 	¸¼ð 	Ø�2ØÔð 	 d¤mð 	Ø�2å˜œÑ%Ô%ˆ	Ø$%­¨D¬J©¬Ò$7Ð!Ø#$¥s¨4¬:¡¤Ò#6Ð#b½:ÀdÄjÐQRÄmÕUaÑ;bÔ;bÐ Ø)-Ô)<Ð&ØÔ,Ð;°´ˆå#&àØ)Ø(Ø.Øðñ$
ô $
ˆÐÑ ð Ôð 	Ø6:´jÐH˜.˜$œ.Ð2Ð2¨6Ð2Ð2Ð2ÀbˆKàÐ+˜4Ô+Ð5Ð5¨fÐ5Ð5Ñ5ˆKàŒ{ð ^Ø˜s S§X¢XÐ-]Ð-]Ð-]Ð-]ÐQUÔQ\Ð-]Ñ-]Ô-]Ñ%]Ô%]Ñ]Ñ]�à˜=˜4œ=Ð2Ð2¨6Ð2Ð2Ñ2ˆKàŒzð 8Ø˜~˜tœ~Ð7Ð7°Ð7Ð7Ñ7�àŒ|ð 9Ø˜˜tœÐ8Ð8°Ð8Ð8Ñ8�àŒ{Ð&Ø˜tŸšÑ0Ô0Ñ0�àÐàÔð 	8Ø*˜$Ô*Ð4Ð4¨VÐ4Ð4ˆKˆKàÔ"ð 	8 tÔ'9ð 	8Ø6:´jÐH˜.˜$œ.Ð2Ð2¨6Ð2Ð2Ð2ÀbˆKàŒ}ð :ØÐ0˜tÔ0Ð:Ð:°6Ð:Ð:Ñ:��àÐ/˜tÔ/Ð9Ð9°&Ð9Ð9Ñ9�àŒ}ð ;ØÐ0˜tÔ0Ð:Ð:°6Ð:Ð:Ñ:�àŒ|ð @ØÐ/˜tÔ/Ð9Ð9°&Ð9Ð9Ñ9�Ø"Ð"à˜sÐ%5 TÔ%5Ð%?Ð%?¸Ð%?Ð%?Ñ?Ñ?��ð 7;´jÐH˜.˜$œ.Ð2Ð2¨6Ð2Ð2Ð2ÀbˆKàÐ+˜4Ô+Ð5Ð5¨fÐ5Ð5Ñ5ˆKàÔ!ð 8Ø˜~˜tœ~Ð7Ð7°Ð7Ð7Ñ7�àŒ:ð 	4Ø˜>˜4œ>Ð3Ð3¨FÐ3Ð3Ñ3ˆKàŒ;ð 	5Ø˜?˜4œ?Ð4Ð4¨VÐ4Ð4Ñ4ˆKàÔð 	;ØÐ0˜4Ô0Ð:Ð:°6Ð:Ð:Ñ:ˆKàÔð 	9ØÐ.˜4Ô.Ð8Ð8°Ð8Ð8Ñ8ˆKàŒ;ð 	ZØ˜3 §¢Ð)YÐ)YÐ)YÐ)YÈTÌ[Ð)YÑ)YÔ)YÑ!YÔ!YÑYÑYˆKàŒ?ð 	8ØÐ-˜4Ô-Ð7Ð7°Ð7Ð7Ñ7ˆKàŒ<ð 	5Ø˜?˜4œ?Ð4Ð4¨VÐ4Ð4Ñ4ˆKàŒ>ð 	2Ø˜?˜4œ?Ð4Ð4¨VÐ4Ð4Ñ4ˆKØÔ!ð 2Ø˜t×/Ò/Ñ1Ô1Ñ1�àŒ=ð 	6ØÐ+˜4Ô+Ð5Ð5¨fÐ5Ð5Ñ5ˆKàŒ>ð 	7ØÐ,˜4Ô,Ð6Ð6¨vÐ6Ð6Ñ6ˆKàŒ>ð 	7ØÐ,˜4Ô,Ð6Ð6¨vÐ6Ð6Ñ6ˆKà,�dÔ,¨[ÐCÐC¸FÐCÐCˆàÔð 	:ØÐ/˜4Ô/Ð9Ð9°&Ð9Ð9Ñ9ˆKàð 	@Ø%×,Ò,°;Ð,Ñ?Ô?ˆKàð 	Gà)-Ô)DÐ)L�Ô%Ð%ÐRVÔRmð Ð%Ñ&õ $ K°´ÐFÐF¸vÐFÐFÐFàÐr7   rs  c                ó~   — | j         �||                      ¦   «         z  }| j        r||                      ¦   «         z  }|S r1   )r3  ro  r4  rp  )r4   rs  rY   s      r5   r›  zQueryBuilder._apply_paginationp  sD   € ØŒ;Ð"Ø˜4Ÿ?š?Ñ,Ô,Ñ,ˆKàŒ<ð 	.Ø˜4×+Ò+Ñ-Ô-Ñ-ˆKàÐr7   c                óV   ‡— dd                      ˆfd„| j        D ¦   «         ¦  «        z   S )NzWITH r  c              3  óT   •K  — | ]"}|j         d z    |j        ddddœ‰¤Žz   dz   V — Œ#dS )z AS (F©rb  ra  z) NrQ   )r:   r\   ©rx  r[  rY   s     €r5   r]  z)QueryBuilder._with_sql.<locals>.<genexpr>z  sc   øè è € ð "
ð "
àð ŒK˜'Ñ! N F¤NÐ$^¸EÈeÐ$^Ð$^ÐW]Ð$^Ð$^Ñ^ÐaeÑeð"
ð "
ð "
ð "
ð "
ð "
r7   )r�  r–  r]   s    `r5   r‡  zQueryBuilder._with_sqly  sH   ø€ Ø˜Ÿšð "
ð "
ð "
ð "
àœ*ð"
ñ "
ô "
ñ 
ô 
ñ 
ð 	
r7   c                ó   — | j         rdnd}|S )Nz	DISTINCT rã   rì  )r4   rY   rí  s      r5   Ú_distinct_sqlzQueryBuilder._distinct_sql  s   € Ø"&¤.Ð8�;�;°bˆàˆr7   c                ó   — | j         rdnd}|S )Nz FOR UPDATErã   rï  )r4   rY   rð  s      r5   rœ  zQueryBuilder._for_update_sql„  s   € Ø&*Ô&6Ð>�]�]¸Bˆ
àÐr7   c                ó�   ‡— d                       | j        di ‰¤Žd                     ˆfd„| j        D ¦   «         ¦  «        ¬¦  «        S )NzSELECT {distinct}{select}r  c              3  ó8   •K  — | ]} |j         dd d dœ‰¤ŽV — ŒdS ©T)ra  rb  NrQ   r³   ©rx  r|  rY   s     €r5   r]  z+QueryBuilder._select_sql.<locals>.<genexpr>Œ  s=   øè è € ÐmÐmÐW[˜L˜DœLÐR°DÀ4ÐRÐRÈ6ÐRÐRÐmÐmÐmÐmÐmÐmr7   )rí  rÀ   rQ   )r‚   r©  r�  rl  r]   s    `r5   r‘  zQueryBuilder._select_sql‰  s^   ø€ Ø*×1Ò1Ø'�TÔ'Ð1Ð1¨&Ð1Ð1Ø—8’8ÐmÐmÐmÐmÐ_cÔ_lÐmÑmÔmÑmÔmð 2ñ 
ô 
ð 	
r7   c                ób   — d                       | j        j        di |¤Ž| j        rdnd¬¦  «        S )NzINSERT {ignore}INTO {table}zIGNORE rã   )r=   rò  rQ   )r‚   r’  r\   rœ  r]   s     r5   rŽ  zQueryBuilder._insert_sql�  sF   € Ø,×3Ò3Ø,�$Ô$Ô,Ð6Ð6¨vÐ6Ð6Ø $¤Ð4�9�9°"ð 4ñ 
ô 
ð 	
r7   c                óN   — d                       | j        j        di |¤Ž¬¦  «        S )NzREPLACE INTO {table}r<   rQ   ©r‚   r’  r\   r]   s     r5   r�  zQueryBuilder._replace_sql•  s8   € Ø%×,Ò,Ø,�$Ô$Ô,Ð6Ð6¨vÐ6Ð6ð -ñ 
ô 
ð 	
r7   c                 ó   — dS )NÚDELETErQ   )rY   s    r5   rŒ  zQueryBuilder._delete_sqlš  s   € àˆxr7   c                óN   — d                       | j        j        di |¤Ž¬¦  «        S )NzUPDATE {table}r<   rQ   )r‚   r“  r\   r]   s     r5   rˆ  zQueryBuilder._update_sqlž  s0   € Ø×&Ò&Ð-G¨TÔ-?Ô-GÐ-QÐ-QÈ&Ð-QÐ-QÐ&ÑRÔRÐRr7   r�  c                óx   ‡— d                      d                     ˆ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})r  c              3  ó6   •K  — | ]} |j         dd di‰¤ŽV — ŒdS )r�  FNrQ   r³   r®  s     €r5   r]  z,QueryBuilder._columns_sql.<locals>.<genexpr>¨  s:   øè è € ÐdÐdÈd˜\˜Tœ\ÐIÐI¸ÐIÀ&ÐIÐIÐdÐdÐdÐdÐdÐdr7   ©rê   )r‚   r�  r™  ©r4   r�  rY   s     `r5   r�  zQueryBuilder._columns_sql¡  sJ   ø€ ð ×$Ò$Ø—H’HÐdÐdÐdÐdÐVZÔVcÐdÑdÔdÑdÔdð %ñ 
ô 
ð 	
r7   c                óx   ‡— d                      d                     ˆfd„| j        D ¦   «         ¦  «        ¬¦  «        S )Nz VALUES ({values})z),(c              3  óZ   •K  — | ]%}d                       ˆfd„|D ¦   «         ¦  «        V — Œ&dS )r  c              3  ó8   •K  — | ]} |j         dd d dœ‰¤ŽV — ŒdS r­  r³   r®  s     €r5   r]  z5QueryBuilder._values_sql.<locals>.<genexpr>.<genexpr>®  s=   øè è € Ð`Ð`ÐTX˜˜œÐO°ÀÐOÐOÈÐOÐOÐ`Ð`Ð`Ð`Ð`Ð`r7   N)r�  )rx  ÚrowrY   s     €r5   r]  z+QueryBuilder._values_sql.<locals>.<genexpr>­  sV   øè è € ð ð Øeh�—’Ð`Ð`Ð`Ð`Ð\_Ð`Ñ`Ô`Ñ`Ô`ðð ð ð ð ð r7   )rp  )r‚   r�  rš  r]   s    `r5   r�  zQueryBuilder._values_sql«  sZ   ø€ Ø#×*Ò*Ø—:’:ð ð ð ð ØlpÔlxðñ ô ñ ô ð +ñ 
ô 
ð 	
r7   c                óR   — d                       | j        j        dddi|¤Ž¬¦  «        S )Nz INTO {table}ra  Fr<   rQ   r±  r]   s     r5   r’  zQueryBuilder._into_sql²  s=   € Ø×%Ò%Ø,�$Ô$Ô,ÐHÐH¸ÐHÀÐHÐHð &ñ 
ô 
ð 	
r7   c                óx   ‡— d                      d                     ˆfd„| j        D ¦   «         ¦  «        ¬¦  «        S )Nz FROM {selectable}r  c              3  ó8   •K  — | ]} |j         dd d dœ‰¤ŽV — ŒdS ©Tr¦  NrQ   r³   r§  s     €r5   r]  z)QueryBuilder._from_sql.<locals>.<genexpr>¹  s>   øè è € ÐrÐrÐ]c  ¤Ð X¸ÈÐ XÐ XÐQWÐ XÐ XÐrÐrÐrÐrÐrÐrr7   ©r´  )r‚   r�  r:  r¸  s     `r5   rŠ  zQueryBuilder._from_sql·  sH   ø€ Ø#×*Ò*Ø—x’xÐrÐrÐrÐrÐgkÔgqÐrÑrÔrÑrÔrð +ñ 
ô 
ð 	
r7   c                óx   ‡— d                      d                     ˆfd„| j        D ¦   «         ¦  «        ¬¦  «        S )Nz USING {selectable}r  c              3  ó8   •K  — | ]} |j         dd d dœ‰¤ŽV — ŒdS rÀ  r³   r§  s     €r5   r]  z*QueryBuilder._using_sql.<locals>.<genexpr>¾  s>   øè è € ÐsÐsÐ]c  ¤Ð X¸ÈÐ XÐ XÐQWÐ XÐ XÐsÐsÐsÐsÐsÐsr7   rÁ  )r‚   r�  r¦  r¸  s     `r5   r“  zQueryBuilder._using_sql¼  sH   ø€ Ø$×+Ò+Ø—x’xÐsÐsÐsÐsÐgkÔgrÐsÑsÔsÑsÔsð ,ñ 
ô 
ð 	
r7   c                óx   ‡— d                      d                     ˆfd„| j        D ¦   «         ¦  «        ¬¦  «        S )Nz FORCE INDEX ({indexes})r  c              3  ó2   •K  — | ]} |j         di ‰¤ŽV — Œd S r[   r³   ©rx  r  rY   s     €r5   r]  z0QueryBuilder._force_index_sql.<locals>.<genexpr>Ã  s5   øè è € ÐVÐV¸˜]˜Uœ]Ð4Ð4¨VÐ4Ð4ÐVÐVÐVÐVÐVÐVr7   ©Úindexes)r‚   r�  r—  r]   s    `r5   r”  zQueryBuilder._force_index_sqlÁ  sG   ø€ Ø)×0Ò0Ø—H’HÐVÐVÐVÐVÀ$ÔBUÐVÑVÔVÑVÔVð 1ñ 
ô 
ð 	
r7   c                óx   ‡— d                      d                     ˆfd„| j        D ¦   «         ¦  «        ¬¦  «        S )Nz USE INDEX ({indexes})r  c              3  ó2   •K  — | ]} |j         di ‰¤ŽV — Œd S r[   r³   rÆ  s     €r5   r]  z.QueryBuilder._use_index_sql.<locals>.<genexpr>È  s5   øè è € ÐTÐT¸˜]˜Uœ]Ð4Ð4¨VÐ4Ð4ÐTÐTÐTÐTÐTÐTr7   rÇ  )r‚   r�  r˜  r]   s    `r5   r•  zQueryBuilder._use_index_sqlÆ  sG   ø€ Ø'×.Ò.Ø—H’HÐTÐTÐTÐTÀ$ÔBSÐTÑTÔTÑTÔTð /ñ 
ô 
ð 	
r7   c                óT   — d                       | j        j        d|ddœ|¤Ž¬¦  «        S )Nz PREWHERE {prewhere}T©r   rb  )rö  rQ   )r‚   rŸ  r\   ©r4   r   rY   s      r5   r–  zQueryBuilder._prewhere_sqlË  s?   € Ø%×,Ò,Ø,�T”_Ô,Ð\¸
ÈTÐ\Ð\ÐU[Ð\Ð\ð -ñ 
ô 
ð 	
r7   c                óT   — d                       | j        j        d|ddœ|¤Ž¬¦  «        S )Nz WHERE {where}TrÌ  )rù  rQ   )r‚   rž  r\   rÍ  s      r5   r‹  zQueryBuilder._where_sqlÐ  s8   € Ø×&Ò&Ð-A¨T¬\Ô-AÐ-qÈZÐbfÐ-qÐ-qÐjpÐ-qÐ-qÐ&ÑrÔrÐrr7   r|  Úgroupby_aliasc           	     ój  — g }d„ | j         D ¦   «         }| j        D ]b}|r;|j        r4|j        |v r+|                     t	          |j        |p|¦  «        ¦  «         Œ?|                      |j        d||dœ|¤Ž¦  «         Œcd                     d                     |¦  «        ¬¦  «        }| j        r|dz   S |S )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.
        c                ó   — h | ]	}|j         ’Œ
S rQ   r2   rw  s     r5   ry  z*QueryBuilder._group_sql.<locals>.<setcomp>ä  ó   € Ð;Ð;Ð;¨˜AœGÐ;Ð;Ð;r7   ©r   r|  z GROUP BY {groupby}r  )rË  z WITH TOTALSrQ   )	rl  r   r,   rÐ   r"   r\   r‚   r�  r¡  )	r4   r   r|  rÏ  rY   r‚  rƒ  r@   Úsqls	            r5   r—  zQueryBuilder._group_sqlÓ  sæ   € ð  ˆØ;Ð;¨T¬]Ð;Ñ;Ô;ÐØ”^ð 	rð 	rˆEØð r ¤ð r°´Ð@PÐ1PÐ1PØ—’�}¨U¬[Ð:JÐ:XÈjÑYÔYÑZÔZÐZÐZà—’˜}˜uœ}Ðp¸
ÐUeÐpÐpÐioÐpÐpÑqÔqÐqÐqà#×*Ò*°3·8²8¸GÑ3DÔ3DÐ*ÑEÔEˆàÔð 	(Ø˜Ñ'Ð'àˆ
r7   Úorderby_aliasc                ól  — g }d„ | j         D ¦   «         }| j        D ]q\  }}|r'|j        r |j        |v rt          |j        |p|¦  «        n |j        d	||dœ|¤Ž}	|                     |�d                     |	|j        ¬¦  «        n|	¦  «         Œrd                     d                     |¦  «        ¬¦  «        S )
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.
        c                ó   — h | ]	}|j         ’Œ
S rQ   r2   rw  s     r5   ry  z,QueryBuilder._orderby_sql.<locals>.<setcomp>  rÒ  r7   rÓ  Nrz  r{  r~  r  r€  rQ   )	rl  r2  r,   r"   r\   rÐ   r‚   rm  r�  )
r4   r   r|  rÕ  rY   r‚  rƒ  r@   r„  r|  s
             r5   rn  zQueryBuilder._orderby_sqlò  sý   € ð" ˆØ;Ð;¨T¬]Ð;Ñ;Ô;ÐØ%)¤^ð 		ð 		Ñ!ˆE�>ð !ðgØ%*¤[ðgØ5:´[ÐDTÐ5TÐ5Tõ ˜eœkÐ+;Ð+I¸zÑJÔJÐJà"�U”]Ðf¨jÐK[ÐfÐfÐ_eÐfÐfð ð �NŠNØTbÐTnÐ!×(Ò(¨d¸>Ô;OÐ(ÑPÔPÐPÐtxñô ð ð ð %×+Ò+°C·H²H¸WÑ4EÔ4EÐ+ÑFÔFÐFr7   c                ó   — dS )Nz WITH ROLLUPrQ   rB   s    r5   r˜  zQueryBuilder._rollup_sql  s   € Øˆ~r7   c                óR   — d                       | j        j        dd|i|¤Ž¬¦  «        S )Nz HAVING {having}r   )rû  rQ   )r‚   r¢  r\   rÍ  s      r5   r™  zQueryBuilder._having_sql  s6   € Ø!×(Ò(Ð0E°´Ô0EÐ0fÐ0fÐQ[Ð0fÐ_eÐ0fÐ0fÐ(ÑgÔgÐgr7   c                óR   — d                       | j        j        dd|i|¤Ž¬¦  «        S )Nz QUALIFY {qualify}r   )rý  rQ   )r‚   r£  r\   rÍ  s      r5   rš  zQueryBuilder._qualify_sql  s6   € Ø#×*Ò*Ð3I°4´>Ô3IÐ3jÐ3jÐU_Ð3jÐciÐ3jÐ3jÐ*ÑkÔkÐkr7   c                ó   — d| j         › �S )Nz OFFSET rE  rB   s    r5   rp  zQueryBuilder._offset_sql  s   € Ø(˜$œ,Ð(Ð(Ð(r7   c                ó   — d| j         › �S )Nz LIMIT r@  rB   s    r5   ro  zQueryBuilder._limit_sql  s   € Ø&˜œÐ&Ð&Ð&r7   c                óx   ‡— d                      d                     ˆfd„| j        D ¦   «         ¦  «        ¬¦  «        S )Nz
 SET {set}r  c              3  ó–   •K  — | ]C\  }}d                        |j        di t          ‰d¬¦  «        ¤Ž |j        di ‰¤Ž¬¦  «        V — ŒDdS )z{field}={value}F)r�  )r@   rm  NrQ   )r‚   r\   ry  )rx  r@   rm  rY   s      €r5   r]  z(QueryBuilder._set_sql.<locals>.<genexpr>#  sŒ   øè è € ð ð ñ !�E˜5ð "×(Ò(Ø'˜%œ-ÐMÐM­$¨vÀeÐ*LÑ*LÔ*LÐMÐMÐUbÐUZÔUbÐUlÐUlÐekÐUlÐUlð )ñ ô ðð ð ð ð ð r7   )r©  )r‚   r�  r§  r]   s    `r5   r‰  zQueryBuilder._set_sql!  s[   ø€ Ø×"Ò"Ø—’ð ð ð ð ð %)¤Mð	ñ ô ñ ô ð #ñ 
ô 
ð 	
r7   c                ó   —  || g|¢R 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")
            )
        rQ   )r4   Úfuncr	  rY   s       r5   ÚpipezQueryBuilder.pipe+  s%   € ð\ ˆt�DÐ*˜4Ð*Ð*Ð* 6Ð*Ð*Ð*r7   )
rd  rŽ  rk  r_   r.  r/  r�  r_   r�  r_   rÈ   )r´  rµ  r.   r/   ©rº  r»  r¼  r»  r.   r/   )r´  r+   r:   r-   r.   r/   )r=   rÿ   r.   r/   )r¼   r   r.   r/   ©r.   r/   )r|  r  r¼   r  r.   r/   )r£   r   r.   r/   ©r£   r÷  r.   r/   )r¼   rþ  r.   r/   )r¼   r  rY   r   r.   r/   )r6  r   rY   r   r.   r/   )rx   r  r  r   r.   r  )rx   r  r.   r  r‡  rˆ  r‰  )r@   r<  rm  r   r.   r/   )rA  rA  r.   r/   )rx   r   r.   rE  r1   )rG  rH  r   r€   r.   rI  )r|  r-   r.   r/   )r|  r   r.   r/   )rS  r   r.   r/   )r.   rU  )r�  rX  r.   r/   )r=   ry   r.   r_   )r|  r   r.   r_   )rb  r(   r.   r/   rL   )r^   r(   r.   r_   ri   ©rY   ry  r.   r/   rŠ  r‹  )rs  r-   r.   r-   rh   )F)r�  r_   rY   r   r.   r-   r„   )NNT)
r   r€   r|  r€   rÏ  r_   rY   r   r.   r-   )
r   r€   r|  r€   rÕ  r_   rY   r   r.   r-   )lrM   rN   rO   ræ   rj  r}  r~  r�  r›   Ú	QUERY_CLSr   r6   r³  r    r¿   rÂ  r  rÅ   rÀ   rÜ  rÃ   rê   rÆ   rå  rè  rê  rí  rð  rò  rö  rù  rû  rý  rË  r  r  r=  r   r  r�  r  r  r   r$  r'  r*  r-  r0  r2  r>  rC  rI  rL  rO  rQ  rS  r©  rV  rZ  r^  rA  rI   rÉ   rL  rØ  r×  rÙ  rW  rb  rf  rô  r  râ  r´   r¹   rc   rv   rg   r  r\   r›  r‡  r©  rœ  r‘  rŽ  r�  rŒ  rˆ  r�  r�  r’  rŠ  r“  r”  r•  r–  r‹  r—  rn  r˜  r™  rš  rp  ro  r‰  rá  rj   rk   s   @r5   r(   r(   Â  sð	  ø€ € € € € ðð ð
 €JØÐØÐØ!ÐØ€Ið $(Ø+/Ø*6ØØ ð9#ð 9#ð 9#ð 9#ð 9#ð 9#ð 9#ðvð ð ð ð$ ð7ð 7ð 7ñ „Wð7ð4 ð#4ð #4ð #4ñ „Wð#4ðJ ðð ð ñ „Wðð ðQð Qð Qñ „WðQð ð	\ð 	\ð 	\ñ „Wð	\ð ð!ð !ð !ñ „Wð!ð ðQð Qð Qñ „WðQð ð
'ð 
'ð 
'ñ „Wð
'ð ðð ð ñ „Wðð ðð ð ñ „Wðð ð5ð 5ð 5ñ „Wð5ð ð3ð 3ð 3ñ „Wð3ð ðð ð ñ „Wðð ð ð  ð  ñ „Wð ð ðð ð ñ „Wðð ð(ð (ð (ñ „Wð(ð ð
%ð 
%ð 
%ñ „Wð
%ð ð&ð &ð &ñ „Wð&ð ð'ð 'ð 'ñ „Wð'ð ð(ð (ð (ñ „Wð(ð ð!ð !ð !ñ „Wð!ð ð2ð 2ð 2ñ „Wð2ð2 ð@ð @ð @ñ „Wð@ð àV^ÔVdðBð Bð Bð Bñ „WðBð&/ð /ð /ð /ð.ð .ð .ð .ð4ð 4ð 4ð 4ð/ð /ð /ð /ð5ð 5ð 5ð 5ð/ð /ð /ð /ð4ð 4ð 4ð 4ð/ð /ð /ð /ð.ð .ð .ð .ð ðð ð ñ „Wðð ðð ð ñ „Wðð ð]ð ]ð ]ñ „Wð]ð ðað að añ „Wðað ðað að añ „Wðað ðað að añ „Wðað ð]ð ]ð ]ñ „Wð]ð ð-ð -ð -ñ „Wð-ð!ð !ð !ð !ð%ð %ð %ð %ð!ð !ð !ð !ð ð!ð !ð !ñ „Wð!ð ð  ð  ð  ð  ð  ð
 ð\ð \ð \ð \ñ „\ð\ð	=ð 	=ð 	=ð 	=ð#ð #ð #ð #ð"'ð 'ð 'ð 'ðð ð ð ð
!ð 
!ð 
!ð 
!ð?ð ?ð ?ð ?ðð ð ð ð*"ð "ð "ð "ðwð wð wð wð"2ð 2ð 2ð 2ðð ð ð ðð ð ð ð&ð &ð &ð &ðMð Mð Mð Mð3ð 3ð 3ð 3ð{ð {ð {ð {ð {ðzð ð ð ð
ð 
ð 
ð 
ðð ð ð ð
ð ð ð ð

ð 
ð 
ð 
ð
ð 
ð 
ð 
ð
ð 
ð 
ð 
ð
 ðð ð ñ „\ððSð Sð Sð Sð
ð 
ð 
ð 
ð 
ð
ð 
ð 
ð 
ð
ð 
ð 
ð 
ð

ð 
ð 
ð 
ð 
ð

ð 
ð 
ð 
ð 
ð

ð 
ð 
ð 
ð

ð 
ð 
ð 
ð

ð 
ð 
ð 
ð 
ð
sð sð sð sð sð
 "&Ø'+Ø"ð	ð ð ð ð ðB "&Ø'+Ø"ð	Gð Gð Gð Gð Gð@ð ð ð ðhð hð hð hð hðlð lð lð lð lð)ð )ð )ð )ð'ð 'ð 'ð 'ð
ð 
ð 
ð 
ð.+ð .+ð .+ð .+ð .+ð .+ð .+r7   c                  ó8   — e Zd Zdd„Zddd„Zdd„Zdd„Zdd„ZdS )r  rT   r'   rx   r  r  r   r  r-   r.   r/   c                ó>   — || _         || _        || _        || _        d S r1   )rT   rx   r  r  )r4   rT   rx   r  r  s        r5   r6   zJoiner.__init__]  s"   € ØˆŒ
ØˆŒ	ØˆŒØ$ˆŒˆˆr7   Nr£   úCriterion | NoneÚcollater€   c                óÌ   — |€(t          d                     | j        ¬¦  «        ¦  «        ‚| j                             t          | j        | j        ||¦  «        ¦  «         | j        S )NzIParameter 'criterion' is required for a {type} JOIN but was not supplied.©rÝ   )r   r‚   r  rT   rb  ÚJoinOnrx   r  )r4   r£   rê  s      r5   Úonz	Joiner.onc  sb   € ØÐÝð4ß4:²FÀÄ°FÑ4PÔ4Pñô ð ð
 	Œ
×Ò�6 $¤)¨T¬X°yÀ'ÑJÔJÑKÔKÐKØŒzÐr7   r6  r   c                ó\  — |s(t          d                     | j        ¬¦  «        ¦  «        ‚d }|D ]D}t          || j        j        d         ¬¦  «        t          || j        ¬¦  «        k    }|€|n||z  }ŒE| j                             t          | j        | j	        |¦  «        ¦  «         | j        S )NzFParameter 'fields' is required for a {type} JOIN but was not supplied.rì  r   r<   )
r   r‚   r  r   rT   r:  rx   rb  rí  r  )r4   r6  r£   r@   Úconstituents        r5   Úon_fieldzJoiner.on_fieldm  sÁ   € Øð 	ÝØ[×bÒbÐhlÔhwÐbÑxÔxñô ð ð ˆ	Øð 	Vð 	VˆEÝ ¨T¬ZÔ-=¸aÔ-@ÐAÑAÔAÅUÈ5ÐX\ÔXaÐEbÑEbÔEbÒbˆKØ'0Ð'8˜˜¸iÈ+Ñ>UˆIˆIàŒ
×Ò�6 $¤)¨T¬X°yÑAÔAÑBÔBÐBØŒzÐr7   c                ó¬   — |st          d¦  «        ‚| j                             t          | j        | j        d„ |D ¦   «         ¦  «        ¦  «         | j        S )NzUParameter 'fields' is required when joining with a using clause but was not supplied.c                ó,   — g | ]}t          |¦  «        ‘ŒS rQ   r>   )rx  r@   s     r5   r¿  z Joiner.using.<locals>.<listcomp>  s   € Ð:\Ð:\Ð:\ÈE½5À¹<¼<Ð:\Ð:\Ð:\r7   )r   rT   rb  Ú	JoinUsingrx   r  )r4   r6  s     r5   ÚusingzJoiner.using{  sX   € Øð 	yÝÐ wÑxÔxÐxàŒ
×Ò�9 T¤Y°´Ð:\Ð:\ÐU[Ð:\Ñ:\Ô:\Ñ]Ô]Ñ^Ô^Ð^ØŒzÐr7   c                ó~   — | j                              t          | j        t          j        ¦  «        ¦  «         | j         S )zReturn cross join)rT   rb  rX  rx   r   r/  rB   s    r5   r/  zJoiner.cross‚  s.   € àŒ
×Ò�4 ¤	­8¬>Ñ:Ô:Ñ;Ô;Ð;àŒzÐr7   )
rT   r'   rx   r  r  r   r  r-   r.   r/   r1   )r£   ré  rê  r€   r.   r'   )r6  r   r.   r'   )r.   r'   )rM   rN   rO   r6   rî  rñ  rõ  r/  rQ   r7   r5   r  r  \  s}   € € € € € ð%ð %ð %ð %ðð ð ð ð ðð ð ð ðð ð ð ðð ð ð ð ð r7   r  c                  ó>   — e Zd Zdd„Zdd„Zdd„Zedd„¦   «         ZdS )rX  rx   r   r  r   r.   r/   c                ó"   — || _         || _        d S r1   )rx   r  r  s      r5   r6   zJoin.__init__Š  s   € ØˆŒ	ØˆŒˆˆr7   rY   r   r-   c                ó²   — d                       | j        j        ddddœ|¤Ž¬¦  «        }| j        j        r!d                      || j        j        ¬¦  «        S |S )NzJOIN {table}Tr¦  r<   z{type} {join})r�  rÝ   rQ   )r‚   rx   r\   r  rm  )r4   rY   rÔ  s      r5   r\   zJoin.get_sqlŽ  sl   € Ø×#Ò#Ø#�$”)Ô#ÐM¨T¸dÐMÐMÀfÐMÐMð $ñ 
ô 
ˆð Œ8Œ>ð 	IØ"×)Ò)¨s¸¼¼Ð)ÑHÔHÐHØˆ
r7   r:  úSequence[Table]r¤  c                ó   — d S r1   rQ   ©r4   r:  r¤  s      r5   r_  zJoin.validate—  ó   € Øˆr7   rº  r»  r¼  c                óF   — | j                              ||¦  «        | _         dS ©áX  
        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)rx   rÂ  rÐ  s      r5   rÂ  zJoin.replace_tableš  s!   € ð ”I×+Ò+¨M¸9ÑEÔEˆŒ	ˆ	ˆ	r7   N)rx   r   r  r   r.   r/   rh   ©r:  rú  r¤  rú  r.   r/   râ  )rM   rN   rO   r6   r\   r_  r    rÂ  rQ   r7   r5   rX  rX  ‰  sv   € € € € € ðð ð ð ðð ð ð ðð ð ð ð ðFð Fð Fñ „WðFð Fð Fr7   rX  c                  óN   ‡ — e Zd Zddˆ fd„Zdˆ fd„Zdd„Zedd„¦   «         Zˆ xZS )rí  Nrx   r   r  r   Úcriteriar(   rê  r€   r.   r/   c                óh   •— t          ¦   «                              ||¦  «         || _        || _        d S r1   )rW   r6   r£   rê  )r4   rx   r  r  rê  rX   s        €r5   r6   zJoinOn.__init__«  s/   ø€ Ý‰Œ×Ò˜˜sÑ#Ô#Ð#Ø!ˆŒØˆŒˆˆr7   rY   r   r-   c                ó¬   •—  t          ¦   «         j        di |¤Ž}d                     | | j        j        dddi|¤Ž| j        r
d| j        › �nd¬¦  «        S )Nz{join} ON {criterion}{collate}rb  Tz	 COLLATE rã   )r�  r£   rê  rQ   )rW   r\   r‚   r£   rê  ©r4   rY   Újoin_sqlrX   s      €r5   r\   zJoinOn.get_sql°  su   ø€ Ø"•5‘7”7”?Ð,Ð, VÐ,Ð,ˆØ/×6Ò6ØØ,�d”nÔ,ÐEÐE°dÐE¸fÐEÐEØ26´,ÐFÐ. ¤Ð.Ð.Ð.ÀBð 7ñ 
ô 
ð 	
r7   r:  rú  r¤  c           
     óP  — t          d„ | j                             ¦   «         D ¦   «         ¦  «        }t          |¦  «        d„ |D ¦   «         z  | j        hz  }||z
  }|rIt	          d                     d                     t          t          |¦  «        ¦  «        ¬¦  «        ¦  «        ‚d S )Nc                ó   — g | ]	}|j         ‘Œ
S rQ   r<   )rx  Úfs     r5   r¿  z#JoinOn.validate.<locals>.<listcomp>¹  s   € ÐJÐJÐJ¨A ¤ÐJÐJÐJr7   c                ó   — h | ]	}|j         ’Œ
S rQ   re  ri  s     r5   ry  z"JoinOn.validate.<locals>.<setcomp>º  s   € Ð(FÐ(FÐ(F°t¨¬Ð(FÐ(FÐ(Fr7   z�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£   rW  rx   r   r‚   r�  Úmapr-   )r4   r:  r¤  Úcriterion_tablesÚavailable_tablesÚmissing_tabless         r5   r_  zJoinOn.validate¸  s½   € ÝÐJÐJ°´×1GÒ1GÑ1IÔ1IÐJÑJÔJÑKÔKÐÝ˜u™:œ:Ð(FÐ(F¸vÐ(FÑ(FÔ(FÑFÈ$Ì)ÈÑTÐØ)Ð,<Ñ<ˆØð 	ÝðYßY_ÒY_ØŸ9š9¥S­¨nÑ%=Ô%=Ñ>Ô>ð Z`ñ Zô Zñô ð ð	ð 	r7   rº  r»  r¼  c                óx   — | j         |k    r|n| j         | _         | j                             ||¦  «        | _        dS rÿ  )rx   r£   rÂ  rÐ  s      r5   rÂ  zJoinOn.replace_tableÄ  s:   € ð "&¤¨mÒ!;Ð!;�I�IÀÄˆŒ	Øœ×5Ò5°mÀYÑOÔOˆŒˆˆr7   r1   )
rx   r   r  r   r  r(   rê  r€   r.   r/   rh   r  râ  ©	rM   rN   rO   r6   r\   r_  r    rÂ  rj   rk   s   @r5   rí  rí  ª  sœ   ø€ € € € € ðð ð ð ð ð ð ð

ð 
ð 
ð 
ð 
ð 
ð
ð 
ð 
ð 
ð ðPð Pð Pñ „WðPð Pð Pð Pð Pr7   rí  c                  óL   ‡ — e Zd Zdˆ fd	„Zdˆ fd„Zdd„Zedd„¦   «         Zˆ xZS )rô  rx   r   r  r   r6  rH  r.   r/   c                óZ   •— t          ¦   «                              ||¦  «         || _        d S r1   )rW   r6   r6  )r4   rx   r  r6  rX   s       €r5   r6   zJoinUsing.__init__Ö  s(   ø€ Ý‰Œ×Ò˜˜sÑ#Ô#Ð#ØˆŒˆˆr7   rY   r   r-   c                ó®   •‡—  t          ¦   «         j        di ‰¤Ž}d                     |d                     ˆfd„| j        D ¦   «         ¦  «        ¬¦  «        S )Nz{join} USING ({fields})r  c              3  ó2   •K  — | ]} |j         di ‰¤ŽV — Œd S r[   r³   )rx  r@   rY   s     €r5   r]  z$JoinUsing.get_sql.<locals>.<genexpr>Þ  s5   øè è € ÐMÐM¸˜M˜EœMÐ3Ð3¨FÐ3Ð3ÐMÐMÐMÐMÐMÐMr7   )r�  r6  rQ   )rW   r\   r‚   r�  r6  r  s    ` €r5   r\   zJoinUsing.get_sqlÚ  se   øø€ Ø"•5‘7”7”?Ð,Ð, VÐ,Ð,ˆØ(×/Ò/ØØ—8’8ÐMÐMÐMÐMÀÄÐMÑMÔMÑMÔMð 0ñ 
ô 
ð 	
r7   r:  rú  r¤  c                ó   — d S r1   rQ   rü  s      r5   r_  zJoinUsing.validateá  rý  r7   rº  r»  r¼  c                ón   ‡‡— | j         ‰k    r‰n| j         | _         ˆˆfd„| j        D ¦   «         | _        dS )r   c                ó<   •— g | ]}|                      ‰‰¦  «        ‘ŒS rQ   rÁ  )rx  r@   rº  r¼  s     €€r5   r¿  z+JoinUsing.replace_table.<locals>.<listcomp>ò  s)   ø€ Ð^Ð^Ð^È�u×*Ò*¨=¸)ÑDÔDÐ^Ð^Ð^r7   N)rx   r6  rÐ  s    ``r5   rÂ  zJoinUsing.replace_tableä  sE   øø€ ð "&¤¨mÒ!;Ð!;�I�IÀÄˆŒ	Ø^Ð^Ð^Ð^Ð^ÐRVÔR]Ð^Ñ^Ô^ˆŒˆˆr7   )rx   r   r  r   r6  rH  r.   r/   rh   r  râ  r  rk   s   @r5   rô  rô  Õ  s—   ø€ € € € € ðð ð ð ð ð ð
ð 
ð 
ð 
ð 
ð 
ðð ð ð ð ð_ð _ð _ñ „Wð_ð _ð _ð _ð _r7   rô  c                  óª  — e Zd ZdZdZdZdZeZd9d: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	 	 dAdBd#„¦   «         ZedCd&„¦   «         Zed=d'„¦   «         ZdDd*„ZdDd+„ZdEd,„ZdFd.„ZdFd/„ZdFd0„ZdEd1„ZdEd2„ZdEd3„ZdDd4„Z dGd6„Z!dEd7„Z"dEd8„Z#dS )Hr   z5
    Query builder used to build CREATE queries.
    r±   r�  Nrd  rŽ  r.   r/   c                óæ   — d | _         d| _        d| _        d | _        g | _        g | _        d| _        d | _        g | _        d| _	        || _
        d | _        d | _        d | _        d | _        d | _        d S rà  )Ú_create_tableÚ
_temporaryÚ	_unloggedÚ
_as_selectr™  Ú_period_forsÚ_with_system_versioningÚ_primary_keyÚ_uniquesÚ_if_not_existsrd  Ú_foreign_keyÚ_foreign_key_reference_tableÚ_foreign_key_referenceÚ_foreign_key_on_updateÚ_foreign_key_on_delete©r4   rd  s     r5   r6   zCreateQueryBuilder.__init__ÿ  s‚   € Ø!ˆÔØˆŒØˆŒØˆŒØˆŒØˆÔØ',ˆÔ$Ø ˆÔØˆŒØ#ˆÔØˆŒØ ˆÔØ,0ˆÔ)Ø&*ˆÔ#Ø7;ˆÔ#Ø7;ˆÔ#Ð#Ð#r7   rY   ry  c                ó¨   — |                      d| j        ¦  «         |                      d| j        ¦  «         |                      d| j        ¦  «         d S ©Nr   r{  rd  ©ri  rj  r}  rd  r]   s     r5   r  z'CreateQueryBuilder._set_kwargs_defaults  óR   € Ø×Ò˜,¨¬Ñ8Ô8Ð8Ø×ÒÐ0°$Ô2KÑLÔLÐLØ×Ò˜) T¤\Ñ2Ô2Ð2Ð2Ð2r7   r=   r  c                óˆ   — | j         rt          d¦  «        ‚t          |t          ¦  «        r|nt          |¦  «        | _         dS )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ª   ra   ry   rÔ  s     r5   r  zCreateQueryBuilder.create_table  sF   € ð Ôð 	VÝ Ð!TÑUÔUÐUå&0°½Ñ&>Ô&>ÐP˜U˜UÅEÈ%ÁLÄLˆÔÐÐr7   c                ó   — d| _         dS )z^
        Makes the table temporary.

        :return:
            CreateQueryBuilder.
        TN)r  rB   s    r5   Ú	temporaryzCreateQueryBuilder.temporary)  s   € ð ˆŒˆˆr7   c                ó   — d| _         dS )z]
        Makes the table unlogged.

        :return:
            CreateQueryBuilder.
        TN)r  rB   s    r5   ÚunloggedzCreateQueryBuilder.unlogged3  s   € ð ˆŒˆˆr7   c                ó   — d| _         dS )z[
        Adds system versioning.

        :return:
            CreateQueryBuilder.
        TN©r!  rB   s    r5   Úwith_system_versioningz)CreateQueryBuilder.with_system_versioning=  s   € ð (,ˆÔ$Ð$Ð$r7   rê   ústr | tuple[str, str] | Columnc                ó  — | j         rt          d¦  «        ‚|D ]s}t          |t          ¦  «        rt	          |¦  «        }n2t          |t
          ¦  «        rt	          |d         |d         ¬¦  «        }| j                             |¦  «         ŒtdS )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ª   ra   r-   rÕ   r“   r™  rÐ   ©r4   rê   rë   s      r5   rê   zCreateQueryBuilder.columnsG  s�   € ð  Œ?ð 	SÝ Ð!QÑRÔRÐRàð 	)ð 	)ˆFÝ˜&¥#Ñ&Ô&ð NÝ ™œ��Ý˜F¥EÑ*Ô*ð NÝ¨F°1¬IÀ6È!Ä9ÐMÑMÔM�ØŒM× Ò  Ñ(Ô(Ð(Ð(ð	)ð 	)r7   rï   rð   rñ   c                óX   — | j                              t          |||¦  «        ¦  «         dS )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       r5   Ú
period_forzCreateQueryBuilder.period_fora  s-   € ð" 	Ô× Ò ¥¨4°¸zÑ!JÔ!JÑKÔKÐKÐKÐKr7   c                ó`   — | j                              |                      |¦  «        ¦  «         dS )z¼
        Adds a UNIQUE constraint.

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

            A list of columns.

        :return:
            CreateQueryBuilder.
        N)r#  rÐ   Ú_prepare_columns_input©r4   rê   s     r5   ÚuniquezCreateQueryBuilder.uniquet  s.   € ð 	Œ×Ò˜T×8Ò8¸ÑAÔAÑBÔBÐBÐBÐBr7   c                óf   — | j         rt          d¦  «        ‚|                      |¦  «        | _         dS )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     r5   Úprimary_keyzCreateQueryBuilder.primary_keyƒ  s;   € ð  Ôð 	UÝ Ð!SÑTÔTÐTØ ×7Ò7¸Ñ@Ô@ˆÔÐÐr7   úlist[str | Column]Úreference_tablerÿ   Úreference_columnsÚ	on_deleter   Ú	on_updatec                óÄ   — | j         rt          d¦  «        ‚|                      |¦  «        | _         || _        |                      |¦  «        | _        || _        || _        dS )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(  )r4   rê   rC  rD  rE  rF  s         r5   Úforeign_keyzCreateQueryBuilder.foreign_key—  sk   € ðV Ôð 	UÝ Ð!SÑTÔTÐTØ ×7Ò7¸Ñ@Ô@ˆÔØ,;ˆÔ)Ø&*×&AÒ&AÐBSÑ&TÔ&TˆÔ#Ø&/ˆÔ#Ø&/ˆÔ#Ð#Ð#r7   Úquery_builderr(   c                óˆ   — | j         rt          d¦  «        ‚t          |t          ¦  «        st	          d¦  «        ‚|| _        dS )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ª   ra   r(   r    r  )r4   rI  s     r5   Ú	as_selectzCreateQueryBuilder.as_selectÊ  sK   € ð Œ=ð 	QÝ Ð!OÑPÔPÐPå˜-­Ñ6Ô6ð 	NÝÐLÑMÔMÐMà'ˆŒˆˆr7   c                ó   — d| _         d S rä  ©r$  rB   s    r5   Úif_not_existsz CreateQueryBuilder.if_not_existsà  ó   € à"ˆÔÐÐr7   r   r-   c                óî   — |                       |¦  «         | j        sdS | j        s	| j        sdS  | 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 (ú)rQ   )r  r  r™  r  Ú_create_table_sqlÚ_as_select_sqlÚ	_body_sqlÚ_table_options_sql)r4   rY   r  ÚbodyÚtable_optionss        r5   r\   zCreateQueryBuilder.get_sqlä  sÍ   € ð 	×!Ò! &Ñ)Ô)Ð)àÔ!ð 	Ø�2àŒ}ð 	 T¤_ð 	Ø�2à-�tÔ-Ð7Ð7°Ð7Ð7ˆàŒ?ð 	@ØÐ"5 $Ô"5Ð"?Ð"?¸Ð"?Ð"?Ñ?Ð?àˆtŒ~Ð'Ð' Ð'Ð'ˆØ/˜Ô/Ð9Ð9°&Ð9Ð9ˆàÐ8Ð8 $Ð8Ð8¨Ð8Ð8Ð8r7   c           	     ó’   — d}| j         rd}n	| j        rd}d}| j        rd}d                     || | j        j        di |¤Ž¬¦  «        S )Nrã   z
TEMPORARY z	UNLOGGED zIF NOT EXISTS z/CREATE {table_type}TABLE {if_not_exists}{table})Ú
table_typerN  r=   rQ   )r  r  r$  r‚   r  r\   )r4   rY   rY  rN  s       r5   rR  z$CreateQueryBuilder._create_table_sqlý  sy   € Øˆ
ØŒ?ð 	%Ø%ˆJˆJØŒ^ð 	%Ø$ˆJàˆØÔð 	-Ø,ˆMà@×GÒGØ!Ø'Ø,�$Ô$Ô,Ð6Ð6¨vÐ6Ð6ð Hñ 
ô 
ð 	
r7   c                ó"   — d}| j         r|dz  }|S )Nrã   z WITH SYSTEM VERSIONINGr5  )r4   rY   rW  s      r5   rU  z%CreateQueryBuilder._table_options_sql  s#   € ØˆàÔ'ð 	7ØÐ6Ñ6ˆMàÐr7   rI  c                ó*   ‡— ˆfd„| j         D ¦   «         S )Nc                ó*   •— g | ]} |j         d i ‰¤Ž‘ŒS ©rQ   r³   ©rx  rë   rY   s     €r5   r¿  z6CreateQueryBuilder._column_clauses.<locals>.<listcomp>  s+   ø€ ÐEÐEÐE¨V��”Ð(Ð( Ð(Ð(ÐEÐEÐEr7   )r™  r]   s    `r5   Ú_column_clausesz"CreateQueryBuilder._column_clauses  s   ø€ ØEÐEÐEÐE°t´}ÐEÑEÔEÐEr7   c                ó*   ‡— ˆfd„| j         D ¦   «         S )Nc                ó*   •— g | ]} |j         d i ‰¤Ž‘ŒS r]  r³   )rx  r;  rY   s     €r5   r¿  z:CreateQueryBuilder._period_for_clauses.<locals>.<listcomp>  s-   ø€ ÐQÐQÐQ°Ð"�
Ô"Ð,Ð, VÐ,Ð,ÐQÐQÐQr7   )r   r]   s    `r5   Ú_period_for_clausesz&CreateQueryBuilder._period_for_clauses  s    ø€ ØQÐQÐQÐQ¸tÔ?PÐQÑQÔQÐQr7   c                ó*   ‡— ˆfd„| j         D ¦   «         S )Nc                óz   •— g | ]7}d                       d                     ˆfd„|D ¦   «         ¦  «        ¬¦  «        ‘Œ8S )zUNIQUE ({unique})r  c              3  ó2   •K  — | ]} |j         di ‰¤ŽV — Œd S r[   ©rá   r^  s     €r5   r]  zDCreateQueryBuilder._unique_key_clauses.<locals>.<listcomp>.<genexpr>  s8   øè è € Ð6jÐ6jÐY_Ð7J°vÔ7JÐ7TÐ7TÈVÐ7TÐ7TÐ6jÐ6jÐ6jÐ6jÐ6jÐ6jr7   )r?  )r‚   r�  )rx  r?  rY   s     €r5   r¿  z:CreateQueryBuilder._unique_key_clauses.<locals>.<listcomp>  s\   ø€ ð 
ð 
ð 
àð  ×&Ò&¨c¯hªhÐ6jÐ6jÐ6jÐ6jÐciÐ6jÑ6jÔ6jÑ.jÔ.jÐ&ÑkÔkð
ð 
ð 
r7   )r#  r]   s    `r5   Ú_unique_key_clausesz&CreateQueryBuilder._unique_key_clauses  s0   ø€ ð
ð 
ð 
ð 
àœ-ð
ñ 
ô 
ð 	
r7   c                óx   ‡— d                      d                     ˆfd„| j        D ¦   «         ¦  «        ¬¦  «        S )NzPRIMARY KEY ({columns})r  c              3  ó2   •K  — | ]} |j         di ‰¤ŽV — Œd S r[   rf  r^  s     €r5   r]  z9CreateQueryBuilder._primary_key_clause.<locals>.<genexpr>$  ó7   øè è € Ð[Ð[¸vÐ0˜VÔ0Ð:Ð:°6Ð:Ð:Ð[Ð[Ð[Ð[Ð[Ð[r7   r·  )r‚   r�  r"  r]   s    `r5   Ú_primary_key_clausez&CreateQueryBuilder._primary_key_clause"  sG   ø€ Ø(×/Ò/Ø—H’HÐ[Ð[Ð[Ð[ÈÔIZÐ[Ñ[Ô[Ñ[Ô[ð 0ñ 
ô 
ð 	
r7   c                óL  ‡— d                      d                     ˆfd„| j        D ¦   «         ¦  «         | j        j        di ‰¤Žd                     ˆ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})r  c              3  ó2   •K  — | ]} |j         di ‰¤ŽV — Œd S r[   rf  r^  s     €r5   r]  z9CreateQueryBuilder._foreign_key_clause.<locals>.<genexpr>)  rj  r7   c              3  ó2   •K  — | ]} |j         di ‰¤ŽV — Œd S r[   rf  r^  s     €r5   r]  z9CreateQueryBuilder._foreign_key_clause.<locals>.<genexpr>+  s7   øè è € Ð&oÐ&oÈÐ': vÔ':Ð'DÐ'D¸VÐ'DÐ'DÐ&oÐ&oÐ&oÐ&oÐ&oÐ&or7   )rê   r"  rD  z ON DELETE z ON UPDATE rQ   )	r‚   r�  r%  r&  r\   r'  r)  rm  r(  )r4   rY   r[  s    ` r5   Ú_foreign_key_clausez&CreateQueryBuilder._foreign_key_clause'  sÏ   ø€ ØX×_Ò_Ø—H’HÐ[Ð[Ð[Ð[ÈÔIZÐ[Ñ[Ô[Ñ[Ô[Ø@�tÔ8Ô@ÐJÐJÀ6ÐJÐJØ!ŸhšhÐ&oÐ&oÐ&oÐ&oÐSWÔSnÐ&oÑ&oÔ&oÑoÔoð `ñ 
ô 
ˆð
 Ô&ð 	HØ�m dÔ&AÔ&GÑGÑGˆFØÔ&ð 	HØ�m dÔ&AÔ&GÑGÑGˆFàˆr7   c                ó"  —  | j         di |¤Ž}| | j        di |¤Žz  }| | j        di |¤Žz  }| j        r |                      | j        di |¤Ž¦  «         | j        r |                      | j        di |¤Ž¦  «         d                     |¦  «        S )Nr  rQ   )	r_  rb  rg  r"  rÐ   rk  r%  ro  r�  )r4   rY   r‚  s      r5   rT  zCreateQueryBuilder._body_sql4  sÊ   € Ø&�$Ô&Ð0Ð0¨Ð0Ð0ˆØÐ+�4Ô+Ð5Ð5¨fÐ5Ð5Ñ5ˆØÐ+�4Ô+Ð5Ð5¨fÐ5Ð5Ñ5ˆàÔð 	?Ø�NŠNÐ3˜4Ô3Ð=Ð=°fÐ=Ð=Ñ>Ô>Ð>ØÔð 	?Ø�NŠNÐ3˜4Ô3Ð=Ð=°fÐ=Ð=Ñ>Ô>Ð>à�xŠx˜Ñ Ô Ð r7   c                óN   — d                       | j        j        di |¤Ž¬¦  «        S )Nz AS ({query})r†  rQ   )r‚   r  r\   r]   s     r5   rS  z!CreateQueryBuilder._as_select_sql@  s7   € Ø×%Ò%Ø)�$”/Ô)Ð3Ð3¨FÐ3Ð3ð &ñ 
ô 
ð 	
r7   rç   c                ó   — d„ |D ¦   «         S )Nc                óZ   — g | ](}t          |t          ¦  «        r|nt          |¦  «        ‘Œ)S rQ   )ra   rÕ   )rx  rë   s     r5   r¿  z=CreateQueryBuilder._prepare_columns_input.<locals>.<listcomp>F  s1   € ÐaÐaÐaÈv�: f­fÑ5Ô5ÐI��½6À&¹>¼>ÐaÐaÐar7   rQ   r>  s     r5   r=  z)CreateQueryBuilder._prepare_columns_inputE  s   € ØaÐaÐY`ÐaÑaÔaÐar7   c                ó*   — |                       ¦   «         S r1   r³   rB   s    r5   r´   zCreateQueryBuilder.__str__H  r`  r7   c                ó*   — |                       ¦   «         S r1   rs  rB   s    r5   r¹   zCreateQueryBuilder.__repr__K  r`  r7   r1   ©rd  rŽ  r.   r/   rå  ©r=   r  r.   r/   rã  ©rê   r7  r.   r/   )rï   rð   rñ   rð   r.   r/   )rê   rð   r.   r/   )NN)rê   rB  rC  rÿ   rD  rB  rE  r   rF  r   r.   r/   )rI  r(   r.   r/   rh   rL   )r.   rI  )rê   rB  r.   rç   )$rM   rN   rO   ræ   rj  r}  r~  r›   ræ  r6   r  r    r  r1  r3  r6  rê   r;  r?  rA  rH  rK  rN  r\   rR  rU  r_  rb  rg  rk  ro  rT  rS  r=  r´   r¹   rQ   r7   r5   r   r   õ  sñ  € € € € € ðð ð €JØÐØÐØ€Ið<ð <ð <ð <ð <ð$3ð 3ð 3ð 3ð
 ðQð Qð Qñ „WðQð$ ðð ð ñ „Wðð ðð ð ñ „Wðð ð,ð ,ð ,ñ „Wð,ð ð)ð )ð )ñ „Wð)ð2 ðLð Lð Lñ „WðLð$ ðCð Cð Cñ „WðCð ðAð Að Añ „WðAð& ð &*Ø%)ð00ð 00ð 00ð 00ñ „Wð00ðd ð(ð (ð (ñ „Wð(ð* ð#ð #ð #ñ „Wð#ð9ð 9ð 9ð 9ð2
ð 
ð 
ð 
ð"ð ð ð ðFð Fð Fð FðRð Rð Rð Rð
ð 
ð 
ð 
ð
ð 
ð 
ð 
ð
ð ð ð ð
!ð 
!ð 
!ð 
!ð
ð 
ð 
ð 
ð
bð bð bð bðð ð ð ðð ð ð ð ð r7   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dS )r  r.   r/   c                óZ   — d | _         g | _        d | _        d | _        d| _        d| _        d S rà  )Ú_indexr™  Ú_tablerž  Ú
_is_uniquer$  rB   s    r5   r6   zCreateIndexBuilder.__init__P  s3   € ØˆŒØˆŒØˆŒØˆŒØˆŒØ#ˆÔÐÐr7   r  r  c                ó   — || _         d S r1   )r{  ©r4   r  s     r5   r  zCreateIndexBuilder.create_indexX  rB  r7   rê   r7  c                óò   — |D ]s}t          |t          ¦  «        rt          |¦  «        }n2t          |t          ¦  «        rt          |d         |d         ¬¦  «        }| j                             |¦  «         Œtd S )Nr   r‘   ré   )ra   r-   rÕ   r“   r™  rÐ   r9  s      r5   rê   zCreateIndexBuilder.columns\  s�   € àð 	)ð 	)ˆFÝ˜&¥#Ñ&Ô&ð NÝ ™œ��Ý˜F¥EÑ*Ô*ð NÝ¨F°1¬IÀ6È!Ä9ÐMÑMÔM�ØŒM× Ò  Ñ(Ô(Ð(Ð(ð	)ð 	)r7   r=   r  c                ó   — || _         d S r1   )r|  rÔ  s     r5   rî  zCreateIndexBuilder.one  rB  r7   r£   r÷  c                óF   — | j         r| xj         |z  c_         dS || _         dS )z-
        Partial index where clause.
        N)rž  rõ  s     r5   rù  zCreateIndexBuilder.wherei  s-   € ð
 Œ<ð 	%ØˆLŒL˜IÑ%ˆLŒLˆLˆLà$ˆDŒLˆLˆLr7   c                ó   — d| _         d S rä  )r}  rB   s    r5   r?  zCreateIndexBuilder.uniques  ó   € àˆŒˆˆr7   c                ó   — d| _         d S rä  rM  rB   s    r5   rN  z CreateIndexBuilder.if_not_existsw  rO  r7   r-   c                óŠ  — | j         rt          | j         ¦  «        dk    rt          d¦  «        ‚| j        st          d¦  «        ‚d                     d„ | j         D ¦   «         ¦  «        }| j        rdnd}| j        rdnd}d	|› d
|› d| j        › d| j        › d|› d�}| j        r|d| j        › �z  }| 	                    dd¦  «        S )Nr   z#Cannot create index without columnsz!Cannot create index without tabler  c                ó   — g | ]	}|j         ‘Œ
S rQ   rß   )rx  Úcs     r5   r¿  z.CreateIndexBuilder.get_sql.<locals>.<listcomp>€  s   € Ð ?Ð ?Ð ?¨A ¤Ð ?Ð ?Ð ?r7   ÚUNIQUErã   zIF NOT EXISTSzCREATE z INDEX r‚  z ON ú(rQ  z WHERE z  )
r™  rÏ   rª   r|  r�  r}  r$  r{  rž  rå  )r4   Úcolumns_strÚ
unique_strÚif_not_exists_strÚbase_sqls        r5   r\   zCreateIndexBuilder.get_sql{  sû   € ØŒ}ð 	H¥ D¤MÑ 2Ô 2°aÒ 7Ð 7Ý Ð!FÑGÔGÐGØŒ{ð 	FÝ Ð!DÑEÔEÐEØ—i’iÐ ?Ð ?°´Ð ?Ñ ?Ô ?Ñ@Ô@ˆØ!%¤Ð8�X�X°bˆ
Ø/3Ô/BÐJ˜O˜OÈÐØq˜ZÐqÐqÐ0AÐqÐqÀDÄKÐqÐqÐUYÔU`ÐqÐqÐcnÐqÐqÐqˆØŒ<ð 	1ØÐ0 $¤,Ð0Ð0Ñ0ˆHØ×Ò  cÑ*Ô*Ð*r7   c                ó*   — |                       ¦   «         S r1   r³   rB   s    r5   r´   zCreateIndexBuilder.__str__ˆ  r`  r7   c                ó*   — |                       ¦   «         S r1   rs  rB   s    r5   r¹   zCreateIndexBuilder.__repr__‹  r`  r7   Nrã  )r  r  r.   r/   rx  rw  rä  rL   )rM   rN   rO   r6   r    r  rê   rî  rù  r?  rN  r\   r´   r¹   rQ   r7   r5   r  r  O  s$  € € € € € ð$ð $ð $ð $ð ðð ð ñ „Wðð ð)ð )ð )ñ „Wð)ð ðð ð ñ „Wðð ð%ð %ð %ñ „Wð%ð ðð ð ñ „Wðð ð#ð #ð #ñ „Wð#ð+ð +ð +ð +ðð ð ð ðð ð ð ð ð r7   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dS )/r  z3
    Query builder used to build DROP queries.
    r±   r�  Nrd  rŽ  r.   r/   c                ó>   — d | _         d| _        d | _        || _        d S )Nrã   )Ú_drop_target_kindÚ_drop_targetÚ
_if_existsrd  r*  s     r5   r6   zDropQueryBuilder.__init__™  s$   € Ø!%ˆÔØ46ˆÔØˆŒØˆŒˆˆr7   rY   ry  c                ó¨   — |                      d| j        ¦  «         |                      d| j        ¦  «         |                      d| j        ¦  «         d S r,  r-  r]   s     r5   r  z%DropQueryBuilder._set_kwargs_defaultsŸ  r.  r7   r
  úDatabase | strc                ó~   — t          |t          ¦  «        r|nt          |¦  «        }|                      d|¦  «         d S )NÚDATABASE)ra   r†   Ú_set_target)r4   r
  Útargets      r5   r  zDropQueryBuilder.drop_database¤  s>   € å'¨µ(Ñ;Ô;ÐS��ÅÈ(ÑASÔASˆØ×Ò˜ VÑ,Ô,Ð,Ð,Ð,r7   r=   r  c                ó~   — t          |t          ¦  «        r|nt          |¦  «        }|                      d|¦  «         d S )NÚTABLE)ra   ry   rš  )r4   r=   r›  s      r5   r  zDropQueryBuilder.drop_table©  s<   € å$ U­EÑ2Ô2ÐD��½¸e¹¼ˆØ×Ò˜ &Ñ)Ô)Ð)Ð)Ð)r7   r  r-   c                ó2   — |                       d|¦  «         d S )NÚUSER©rš  )r4   r  s     r5   r  zDropQueryBuilder.drop_user®  ó   € à×Ò˜ Ñ&Ô&Ð&Ð&Ð&r7   r  c                ó2   — |                       d|¦  «         d S )NÚVIEWr   )r4   r  s     r5   r  zDropQueryBuilder.drop_view²  r¡  r7   r  c                ó2   — |                       d|¦  «         d S )NÚINDEXr   r  s     r5   r  zDropQueryBuilder.drop_index¶  s   € à×Ò˜ %Ñ(Ô(Ð(Ð(Ð(r7   c                ó   — d| _         d S rä  )r•  rB   s    r5   Ú	if_existszDropQueryBuilder.if_existsº  r„  r7   Úkindr›  úDatabase | Table | strc                óN   — | j         rt          d¦  «        ‚|| _        || _         d S )Nz4'DropQuery' object already has attribute drop_target)r”  rª   r“  )r4   r¨  r›  s      r5   rš  zDropQueryBuilder._set_target¾  s3   € ØÔð 	YÝ Ð!WÑXÔXÐXØ!%ˆÔØ"ˆÔÐÐr7   r   c                ó  — |                       |¦  «         | j        rdnd}d}t          | j        t          t
          f¦  «        r | j        j        di |¤Ž}nt          | j        | j        ¦  «        }d 	                    | j
        ||¬¦  «        S )Nz
IF EXISTS rã   zDROP {kind} {if_exists}{name})r¨  r§  r:   rQ   )r  r•  ra   r”  r†   ry   r\   r"   rj  r‚   r“  )r4   rY   r§  Útarget_names       r5   r\   zDropQueryBuilder.get_sqlÄ  sž   € Ø×!Ò! &Ñ)Ô)Ð)à$(¤OÐ;�L�L¸ˆ	Øˆå�dÔ'­(µEÐ):Ñ;Ô;ð 	LØ3˜$Ô+Ô3Ð=Ð=°fÐ=Ð=ˆKˆKå'¨Ô(9¸4¼?ÑKÔKˆKà.×5Ò5ØÔ'°9À;ð 6ñ 
ô 
ð 	
r7   c                ó*   — |                       ¦   «         S r1   r³   rB   s    r5   r´   zDropQueryBuilder.__str__Ó  r`  r7   c                ó*   — |                       ¦   «         S r1   rs  rB   s    r5   r¹   zDropQueryBuilder.__repr__Ö  r`  r7   r1   rv  rå  )r
  r—  r.   r/   rw  )r  r-   r.   r/   )r  r-   r.   r/   )r  r-   r.   r/   rã  )r¨  r-   r›  r©  r.   r/   rh   rL   )rM   rN   rO   ræ   rj  r}  r~  r›   ræ  r6   r  r    r  r  r  r  r  r§  rš  r\   r´   r¹   rQ   r7   r5   r  r  �  ss  € € € € € ðð ð €JØÐØÐØ€Iðð ð ð ð ð3ð 3ð 3ð 3ð
 ð-ð -ð -ñ „Wð-ð ð*ð *ð *ñ „Wð*ð ð'ð 'ð 'ñ „Wð'ð ð'ð 'ð 'ñ „Wð'ð ð)ð )ð )ñ „Wð)ð ðð ð ñ „Wðð#ð #ð #ð #ð
ð 
ð 
ð 
ðð ð ð ðð ð ð ð ð r7   r  )rÊ   rË   rY   r   r.   rÌ   )rÊ   rË   r.   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+   rS   rm   r†   ry   rÓ   rÕ   rì   rî   r#  r›   r*  r(   r  rX  rí  rô  r   r  r  rQ   r7   r5   ú<module>r»     sG  ðØ "Ð "Ð "Ð "Ð "Ð "à 
€
€
€
Ø $Ð $Ð $Ð $Ð $Ð $Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7à JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ Jðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð ð +Ø
Ô˜7Ò"Ð"ØÐÐÐÐÐÐà*Ð*Ð*Ð*Ð*Ð*à€
Ø€	ð €WˆT˜Ð(Ñ(Ô(€ðð ð ð ð �ñ ô ð ð6$ð $ð $ð $ð $�:ñ $ô $ð $ð$ð ð ð ð ñ ô ð ð6)ð )ð )ð )ð )ˆvñ )ô )ð )ð}9ð }9ð }9ð }9ð }9ˆJñ }9ô }9ð }9ð@ð ð ð ð2#,ð #,ð #,ð #,ð #,ñ #,ô #,ð #,ðLð ð ð ð"ð ð ð ð ñ ô ð ð& €ð@-ð @-ð @-ð @-ð @-ñ @-ô @-ð @-ðFW:ð W:ð W:ð W:ð W:�J ñ W:ô W:ð W:ðtW+ð W+ð W+ð W+ð W+�:˜tñ W+ô W+ð W+ðt*ð *ð *ð *ð *ˆW�RŒ[ñ *ô *ð *ðZFð Fð Fð Fð Fñ Fô Fð FðB(Pð (Pð (Pð (Pð (PˆTñ (Pô (Pð (PðV_ð _ð _ð _ð _�ñ _ô _ð _ð@Wð Wð Wð Wð Wñ Wô Wð Wðt
=ð =ð =ð =ð =ñ =ô =ð =ð@Hð Hð Hð Hð Hñ Hô Hð Hð Hð Hr7   