o
    ðT·jn, ã                   @   sœ  d dl mZ d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZ d dl
mZ d d	l
mZ d d
lmZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl Z d dl!Z!zd dl"m#Z$ W n e%y—   dZ$Y nw zd dl&Z&W n e%y©   e$Z&Y nw e$r´e$j'e&j'kr´e$Z&zd dl(m)Z) e) *¡  W n	 e%yÉ   Y nw zd dl+Z+d dl+m,Z- d dl.m/Z0 d dl.m1Z2 e0ƒ  W n e%yò   d Z+Z2Y nw zd dl3Z3d dl4m5Z5 d dl6m1Z7 d dl6m8Z9 W n e%�y   d Z3 Z7Z9Y nw zd dl:Z;W n e%�y?   zd dl<Z;W n e%�y<   dZ;Y nw Y nw dZ=g d¢Z>e ?d¡Z@e@ Ae B¡ ¡ dd„ ZCeDeEeFeGeHejIfZJ�dŠdd„ZKdd„ ZLejMdk �rxejjNZNejjOZOndd„ ZNd d!„ ZOe&�rÁe& PejQeR¡ e& PejSeR¡ e& PejeR¡ ejMdk�r½d"d#„ ZTd$d%„ ZUd&d'„ ZVe& PejeT¡ e& Wd(eU¡ e& Wd)eV¡ e&j'ZXnd*ZXeGd+ƒZYd,ZZd-d.d/d0d1d2d+œZ[e[ ¡ Z\d3e\d4< d5e\d6< d7d8„ Z]d9d:„ Z^d;d<„ Z_d=d>„ Z`d?d@„ Za�d‹dBdC„ZbdDdE„ ZcdFdG„ ZdG dHdI„ dIeeƒZfG dJdK„ dKegƒZheeƒ Zieh�dŒi dLdL“dMdM“dNdO“dPdQ“dRdS“dTdU“dVdW“dXdY“dZd[“d\d]“d^d_“d`da“dbdc“ddde“dfdg“dhdi“djdj“dkdl“dmdm“dndo“dpdp“dqdq“drdr“dsds“dtdt“dudv“dwdx“ŽZjehi dyejk“dzejl“d{ejm“d|ejn“d}ejo“d~ejp“dejq“d€d�d„ “d‚dƒd„ “d„d…d„ “d†d‡d„ “dˆd‰d„ “dŠd‹d„ “dŒd�d„ “dŽd�d„ “d�d‘d„ “d’d“d„ “d”d„ d•d„ d–œ¥ƒZreh�dŒi d—d˜“d™dš“dšdš“d›d›“dœd�“dždž“dŸdŸ“d d “d¡d¡“d¢d£“d¤d¥“d¦d¥“d§d˜“d�d�“d¨d¨“d©d©“dªd¨“d«d›“d¬d¬“ŽZsehd­d®d¯d°d±d²d³d´dµd¶�	Ztehd·d¸d¹dºd»d¼�Zuehd·d¸d¹d½�Zvd·Zwd¸ZxdºZyd¾Zzd¿Z{d Z|d·Z}d¸Z~d¹Zd Z€d·Z�d¸Z‚e ƒdÀ¡Z„e ƒdÁ¡Z…e ƒdÂ¡Z†dÃdÄ„ Z‡dÅdÆ„ ZˆdÇd„ Z‰ejŠfdÈdÉ„Z‹dÊdË„ ZŒdÌdÍ„ Z�dÎdÏ„ ZŽdÐdÑ„ Z�dÒdÓ„ Z�G dÔdÕ„ dÕeeƒZ‘G dÖd×„ d×eeƒZ’G dØdÙ„ dÙe’ƒZ“G dÚdÛ„ dÛeeƒZ”G dÜdÝ„ dÝeeƒZ•G dÞdß„ dßeeƒZ–dàdá„ Z—G dâdã„ dãeeƒZ˜dädå„ Z™dædç„ ZšG dèdé„ déeeƒZ›G dêdë„ dëeeƒZœG dìdí„ díeeƒZ�G dîdï„ dïeeƒZžG dðdñ„ dñe›ƒZŸG dòdó„ dóe›ƒZ G dôdõ„ dõeeƒZ¡död÷„ Z¢etj£døfdùdú„Z¤G dûdü„ düe ƒZ¥G dýdþ„ dþe‘ƒZ¦G dÿ�d „ �d e¡e¥ƒZ§G �d�d„ �de¥ƒZ¨G �d�d„ �de¡e¥ƒZ©G �d�d„ �de¡e ƒZªG �d�d„ �de›ƒZ«G �d	�d
„ �d
e«ƒZ¬G �d�d„ �de«ƒZ­G �d�d„ �deeƒZ®G �d�d„ �deeƒZ¯G �d�d„ �de­ƒZ°G �d�d„ �de­ƒZ±G �d�d„ �de­ƒZ²G �d�d„ �deeƒZ³G �d�d„ �de³e­ƒZ´G �d�d„ �de«ƒZµG �d�d„ �de­ƒZ¶�d��d�d „Z·G �d!�d"„ �d"e­ƒZ¸G �d#�d$„ �d$e­ƒZ¹�dŽ�d%�d&„Zº�dŽ�d'�d(„Z»G �d)�d*„ �d*e«ƒZ¼G �d+�d,„ �d,e¼ƒZ½G �d-�d.„ �d.e«ƒZ¾G �d/�d0„ �d0e«ƒZ¿�d��d1�d2„ZÀ�d3�d4„ ZÁG �d5�d6„ �d6e«ƒZÂeÂddƒZÃG �d7�d8„ �d8e›ƒZÄG �d9�d:„ �d:e›ƒZÅG �d;�d<„ �d<e›ƒZÆG �d=�d>„ �d>e«ƒZÇG �d?�d@„ �d@e›ƒZÈG �dA�dB„ �dBe«ƒZÉ�dC�dD„ ZÊ�dE�dF„ ZËG �dG�dH„ �dHe›ƒZÌG �dI�dJ„ �dJe«ƒZÍeÌ�dKƒZÎG �dL�dM„ �dMe«ƒZÏ�dNd„ ZÐG �dO�dP„ �dPe­ƒZÑ�dQ�dR„ ZÒG �dS�dT„ �dTe›ƒZÓ�dU�dV„ ZÔG �dW�dX„ �dXe›ƒZÕG �dY�dZ„ �dZeÕƒZÖG �d[�d\„ �d\eÕƒZ×�d��d]�d^„ZØG �d_�d`„ �d`e×ƒZÙG �da�db„ �dbe¡e eÙƒZÚG �dc�dd„ �ddeÚƒZÛG �de�df„ �dfeÚƒZÜG �dg�dh„ �dhe×ƒZÝG �di�dj„ �djeÝƒZÞG �dk�dl„ �dleÝƒZßG �dm�dn„ �dneÝƒZàG �do�dp„ �dpe›ƒZáG �dq�dr„ �dreáƒZâ�d��dt�du„ZãG �dv�dw„ �dweeƒZäG �dx�dy„ �dyeäƒZåG �dz�d{„ �d{eäƒZæG �d|�d}„ �d}eäƒZçG �d~�d„ �deèƒZéG �d€�d�„ �d�eéƒZêG �d‚�dƒ„ �dƒeéƒZëG �d„�d…„ �d…eëƒZìG �d†�d‡„ �d‡eëƒZíG �dˆ�d‰„ �d‰eéƒZîG �dŠ�d‹„ �d‹eëƒZïG �dŒ�d�„ �d�eëƒZðG �dŽ�d�„ �d�eëƒZñG �d��d‘„ �d‘eëƒZòG �d’�d“„ �d“eeƒZói �d”eí“�dƒeë“�d…eì“�d•eí“�d‡eí“�d‰eî“�d–eï“�d‹eï“�d�eð“�d�eñ“�d—eñ“�d‘eò“�d˜eò“�d™eñ“�dšeò“�d›eí“ZôeóeôƒZõe ö�dœ�d�¡Z÷ejö�dž�dŸ�d �d¡�Zøejö�d¢�d£�d¤�d¡�Zùe ö�d¥�d¦¡Zúe ö�d§�d¨¡ZûG �d©�dª„ �dªeeƒZüG �d«�d¬„ �d¬eüejýƒZþG �d­�d®„ �d®eeƒZÿG �d¯�d°„ �d°e‘ƒ�Z G �d±�d²„ �d²e‘ƒ�Z�d³�d´„ �ZG �dµ�d¶„ �d¶�eƒ�ZG �d·�d¸„ �d¸eeƒ�ZG �d¹�dº„ �dº�eƒ�ZG �d»�d¼„ �d¼�eƒ�ZG �d½�d¾„ �d¾�eƒ�ZG �d¿�dÀ„ �dÀ�eƒ�ZG �dÁ�dÂ„ �dÂe‘ƒ�Z	G �dÃ�dÄ„ �dÄe‘ƒ�Z
G �dÅ�dÆ„ �dÆe‘ƒ�ZG �dÇ�dÈ„ �dÈe‘ƒ�ZG �dÉ�dÊ„ �dÊeeƒ�ZG �dË�dÌ„ �dÌ�eƒ�ZG �dÍ�dÎ„ �dÎ�eƒ�ZG �dÏ�dÐ„ �dÐ�eƒ�ZG �dÑ�dÒ„ �dÒeeƒ�ZG �dÓ�dÔ„ �dÔeeƒ�ZG �dÕ�dÖ„ �dÖ�eƒ�ZG �d×�dØ„ �dØeeƒ�ZG �dÙ�dÚ„ �dÚeeƒ�ZG �dÛ�dÜ„ �dÜe«ƒ�ZG �dÝ�dÞ„ �dÞ�eƒ�ZG �dß�dà„ �dà�eƒ�ZG �dá�dâ„ �dâ�eƒ�ZG �dã�dä„ �dä�eƒ�ZG �då�dæ„ �dæ�eƒ�ZG �dç�dè„ �dè�eƒ�ZG �dé�dê„ �dê�eƒ�ZG �dë�dì„ �dì�eƒ�ZG �dí�dî„ �dî�eƒ�ZG �dï�dð„ �dð�eƒ�Z G �dñ�dò„ �dò�eƒ�Z!G �dó�dô„ �dô�eƒ�Z"G �dõ�dö„ �dö�e"ƒ�Z#G �d÷�dø„ �dø�e#ƒ�Z$G �dù�dú„ �dú�e"ƒ�Z%G �dû�dü„ �düeeƒ�Z&G �dý�dþ„ �dþ�e&�eƒ�Z'G �dÿ�d „ �d e³�eƒ�Z(G �d�d„ �deeƒ�Z)G �d�d„ �d�eƒ�Z*G �d�d„ �d�e'ƒ�Z+G �d�d„ �d�eƒ�Z,G �d	�d
„ �d
�e'ƒ�Z-�d�d„ �Z.ej�j/�Z0�d��d�d„�Z1�d�d„ �Z2G �d�d„ �d�eƒ�Z3G �d�d„ �d�e3ƒ�Z4G �d�d„ �d�e3ƒ�Z5G �d�d„ �d�e3ƒ�Z6�d�d„ �Z7G �d�d„ �d�eƒ�Z8G �d�d„ �d�eƒ�Z9G �d�d „ �d �eƒ�Z:G �d!�d"„ �d"e«ƒ�Z;G �d#�d$„ �d$�e&�eƒ�Z<G �d%�d&„ �d&�eƒ�Z=G �d'�d(„ �d(�eƒ�Z>G �d)�d*„ �d*�eƒ�Z?G �d+�d,„ �d,eeƒ�Z@G �d-�d.„ �d.�eƒ�ZAG �d/�d0„ �d0�eƒ�ZBG �d1�d2„ �d2�eAƒ�ZCG �d3�d4„ �d4�eAƒ�ZDG �d5�d6„ �d6�eAƒ�ZEG �d7�d8„ �d8eeƒ�ZFG �d9�d:„ �d:eeƒ�ZGG �d;�d<„ �d<eeƒ�ZHG �d=�d>„ �d>�eHƒ�ZIG �d?�d@„ �d@eèƒ�ZJG �dA�dB„ �dB�eKƒ�ZLG �dC�dD„ �dDe‘ƒ�ZMG �dE�dF„ �dFe›�eL�dG��ZNG �dH�dI„ �dIe›ƒ�ZOG �dJ�dK„ �dK�eƒ�ZP�dL�dM„ �ZQG �dN�dO„ �dOeeƒ�ZRG �dP�dQ„ �dQ�eReÖƒ�ZSG �dR�dS„ �dS�eRƒ�ZTG �dT�dU„ �dU�eTeÛƒ�ZU�dV�dW„ �ZVG �dX�dY„ �dY�eTeÜƒ�ZWG �dZ�d[„ �d[�eWƒ�ZXG �d\�d]„ �d]�eRƒ�ZYG �d^�d_„ �d_�eYeÞƒ�ZZG �d`�da„ �da�eYeßƒ�Z[G �db�dc„ �dc�eYeàƒ�Z\G �dd�de„ �de�eWƒ�Z]�df�dg„ �Z^�dh�di„ �Z_G �dj�dk„ �dk�eƒ�Z`G �dl�dm„ �dm�e`ƒ�ZaG �dn�do„ �do�e`ƒ�ZbG �dp�dq„ �dq�ebƒ�ZcG �dr�ds„ �ds�eaƒ�ZdG �dt�du„ �du�e`ƒ�ZeG �dv�dw„ �dwe ö�dx�dy¡ƒ�Zf�dz�d{„ �Zg�d|�d}„ �Zh�d~�d„ �Zi�d€�d�„ �Zj�d‚�dƒ„ �Zk�d„�d…„ �ZlG �d†�d‡„ �d‡e›ƒ�Zm�d‘�dˆ�d‰„�ZndS (’  é    )Úbisect_left)Úbisect_right)ÚCallable)ÚMapping)Úcontextmanager)Údeepcopy)Úpartial©Úreduce©Úwraps)ÚisclassN)Údbapi2)Úcompat)Ú
extensions)Úregister_uuid)ÚJson)ÚTransactionStatus)ÚJsonbz4.5.1)PÚAnyFieldÚAsIsÚ	AutoFieldÚ	BareFieldÚBigAutoFieldÚBigBitFieldÚBigIntegerFieldÚBinaryUUIDFieldÚBitFieldÚ	BlobFieldÚBooleanFieldÚCaseÚCastÚ	CharFieldÚCheckÚchunkedÚColumnÚCompositeKeyÚContextÚDatabaseÚDatabaseErrorÚDatabaseProxyÚ	DataErrorÚ	DateFieldÚDateTimeFieldÚDecimalFieldÚDefaultÚDeferredForeignKeyÚDeferredThroughModelÚ
DJANGO_MAPÚDoesNotExistÚDoubleFieldÚDQÚEntityÚEXCLUDEDÚFieldÚFixedCharFieldÚ
FloatFieldÚfnÚForeignKeyFieldÚIdentityFieldÚImproperlyConfiguredÚIndexÚIntegerFieldÚIntegrityErrorÚInterfaceErrorÚInternalErrorÚIPFieldÚJOINÚ	JSONFieldÚLoadÚManyToManyFieldÚModelÚ
ModelIndexÚMySQLDatabaseÚNotSupportedErrorÚOPÚOperationalErrorÚPostgresqlDatabaseÚPrimaryKeyFieldÚprefetchÚPREFETCH_TYPEÚProgrammingErrorÚProxyÚQualifiedNamesÚ
QueryEventÚSchemaManagerÚSmallIntegerFieldÚSelectÚSQLÚSqliteDatabaseÚTableÚ	TextFieldÚ	TimeFieldÚTimestampFieldÚTupleÚ	UUIDFieldÚValueÚ
ValuesListÚWindowÚpeeweec                 C   s
   t | tƒS ©N)Ú
isinstancer   )Úc© ri   úI/home/dinkstrade/pdmp-scanner/venv/lib/python3.10/site-packages/peewee.pyÚ<lambda>    ó   
 rk   ú"c                 C   s   |   ||| ¡S rf   ©Úreplace)ÚsÚqri   ri   rj   Úqesc£   ó   rr   c                 C   s,   |   ¡ } t d| ¡r| dd…  dd¡S | S )Nz^"(?:[^"]|"")*"$é   éÿÿÿÿú""rm   )ÚstripÚreÚmatchro   )Úpartri   ri   rj   Úunqesc¦   s   r{   )é   é   c                 C   s   t j j| t jjd�jd d�S )N)Útz©Útzinfo)ÚdatetimeÚfromtimestampÚtimezoneÚutcro   )Útsri   ri   rj   Úutcfromtimestamp±   s
   
ÿþr†   c                   C   s   t j  t jj¡jd d�S )Nr   )r�   Únowrƒ   r„   ro   ri   ri   ri   rj   Úutcnowµ   s   
þrˆ   c                 C   ó
   |   d¡S ©Nú )Ú	isoformat©Údri   ri   rj   Údatetime_adapterÁ   rl   r�   c                 C   s   t jtt|  d¡ƒŽ S )Nó   -)r�   ÚdateÚmapÚintÚsplitr�   ri   ri   rj   Úconvert_dateÂ   ó    r•   c              	   C   s˜   d| v r	|   d¡n|   d¡\}}tt|  d¡ƒ\}}}|  d¡}tt|d   d¡ƒ\}}}	t|ƒdkr?td |d	  ¡ ¡ƒ}
nd}
t ||||||	|
¡S )
Nó   Tó    r�   ó   .r   ó   :é   z{:0<6.6}rt   )r”   r’   r“   ÚlenÚformatÚdecoder�   )Útr‘   ÚtimeÚyÚmrŽ   Út_fullÚhourÚminuteÚsecondÚusecri   ri   rj   Úconvert_timestampÃ   s    
r¨   r‘   Ú	timestamp©r   r   r   )ÚyearÚmonthÚdayr¤   r¥   r¦   )
ú%Y-%m-%d %H:%M:%Sú%Y-%m-%d %H:%M:%S.%fú%Y-%m-%d %H:%M:%S%zú%Y-%m-%d %H:%M:%S.%f%zú%Y-%m-%dú%H:%M:%Sú%H:%M:%S.%fú
%H:%M:%S%zú%H:%M:%S.%f%zú%H:%Mz%Y-01-01 00:00:00z%Y-%m-01 00:00:00z%Y-%m-%d 00:00:00z%Y-%m-%d %H:00:00z%Y-%m-%d %H:%M:00r®   z%Y-%m-%d %H:%i:00r¥   z%Y-%m-%d %H:%i:%Sr¦   c                 C   s(   | t v sJ ‚|s
d S t|tƒ}t|| ƒS rf   )Ú__date_parts__Úformat_date_timeÚ__sqlite_datetime_formats__Úgetattr©Úlookup_typeÚdatetime_stringÚdtri   ri   rj   Ú_sqlite_date_partò   s
   

rÀ   c                 C   s,   | t v sJ ‚|s
d S t|tƒ}| t |  ¡S rf   )Ú__sqlite_date_trunc__r¹   rº   Ústrftimer¼   ri   ri   rj   Ú_sqlite_date_truncù   s
   
rÃ   c                 C   s   |d u rdS t  | |¡d uS ©NF)rx   Úsearch)ÚregexÚvalueri   ri   rj   Ú_sqlite_regexp   s   rÈ   c                 C   s$   t | tƒs
t |tƒr| |u S | |kS rf   )rg   Úbool)ÚaÚbri   ri   rj   Ú_json_scalar_eq  s   $rÌ   c                    s:   t ˆ ttfƒrt‡ fdd„| D ƒƒS t‡ fdd„| D ƒƒS )Nc                 3   s   � | ]	}t |ˆ d ƒV  qdS ©FN©Ú_json_document_contains©Ú.0Úx©r¡   ri   rj   Ú	<genexpr>
  s   € z"_json_array_has.<locals>.<genexpr>c                 3   s*   � | ]}t |ttfƒ ot|ˆ ƒV  qd S rf   )rg   ÚdictÚlistrÌ   rÐ   rÓ   ri   rj   rÔ     s   € "ÿ)rg   rÕ   rÖ   Úany)rÊ   r¡   ri   rÓ   rj   Ú_json_array_has  s
   ÿrØ   Tc                    sŠ   t |tƒrt ˆ tƒot‡ fdd„| ¡ D ƒƒS t |tƒr,t ˆ tƒo+t‡ fdd„|D ƒƒS |r8t ˆ tƒr8tˆ |ƒS t ˆ ttfƒ oDtˆ |ƒS )Nc                 3   s,   � | ]\}}|ˆ v ot ˆ | |d ƒV  qdS rÍ   rÎ   ©rÑ   ÚkÚv©rÊ   ri   rj   rÔ     s
   € ÿ
ÿz*_json_document_contains.<locals>.<genexpr>c                 3   s   � | ]}t ˆ |ƒV  qd S rf   )rØ   )rÑ   r¡   rÜ   ri   rj   rÔ     ó   € )rg   rÕ   ÚallÚitemsrÖ   rØ   rÌ   )rÊ   rË   Útopri   rÜ   rj   rÏ     s   
þ
 
rÏ   c              	   C   sD   zt  | ¡}t  |¡}W n ttfy   Y d S w t||ƒr dS dS ©Nrt   r   )ÚjsonÚloadsÚ	TypeErrorÚ
ValueErrorrÏ   )ÚhaystackÚneedleÚhÚnri   ri   rj   Ú_sqlite_json_contains  s   
ÿrê   c                 C   s   t  | t¡ d S rf   )ÚwarningsÚwarnÚDeprecationWarning)rp   ri   ri   rj   Ú__deprecated__"  rs   rî   c                   @   ó   e Zd Zdd„ Zddd„ZdS )Úclassmethod_onlyc                 C   ó
   || _ d S rf   ©r;   ©Úselfr;   ri   ri   rj   Ú__init__&  rl   zclassmethod_only.__init__Nc                 C   s$   |d urt d| jj ƒ‚t| j|ƒS )Nz%%s cannot be called from an instance.)rä   r;   Ú__name__r   ©rô   ÚinstanceÚinstance_typeri   ri   rj   Ú__get__'  s
   ÿzclassmethod_only.__get__rf   ©rö   Ú
__module__Ú__qualname__rõ   rú   ri   ri   ri   rj   rð   %  s    rð   c                   @   ó,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
Úattrdictc                 C   s"   z| | W S  t y   t|ƒ‚w rf   )ÚKeyErrorÚAttributeError©rô   Úattrri   ri   rj   Ú__getattr__/  s
   
ÿzattrdict.__getattr__c                 C   s   || |< d S rf   ri   ©rô   r  rÇ   ri   ri   rj   Ú__setattr__4  ó    zattrdict.__setattr__c                 C   s   |   |¡ | S rf   ©Úupdate©rô   Úrhsri   ri   rj   Ú__iadd__5  ó    zattrdict.__iadd__c                 C   s   t | ƒ}| |¡ |S rf   )rÿ   r	  )rô   r  rŽ   ri   ri   rj   Ú__add__6  r–   zattrdict.__add__N)rö   rü   rý   r  r  r  r  ri   ri   ri   rj   rÿ   .  s
    rÿ   ÚANDÚORÚADDú+ÚSUBú-ÚMULÚ*ÚDIVú/ÚBIN_ANDú&ÚBIN_ORú|ÚXORú#ÚMODú%ÚEQú=ÚLTú<ÚLTEz<=ÚGTú>ÚGTEz>=ÚNEz!=ÚINÚNOT_INzNOT INÚISÚIS_NOTzIS NOTÚLIKEÚILIKEÚBETWEENÚREGEXPÚIREGEXPÚCONCATú||ÚBITWISE_NEGATIONú~ÚeqÚltÚlteÚgtÚgteÚneÚinÚnot_inc                 C   ó
   |   |¡S rf   )r>  ©ÚlÚrri   ri   rj   rk   b  rl   Úisc                 C   ó   t | tj|ƒS rf   )Ú
ExpressionrM   r,  r@  ri   ri   rj   rk   c  r  Úis_notc                 C   rD  rf   )rE  rM   r-  r@  ri   ri   rj   rk   d  r  Úlikec                 C   rD  rf   )rE  rM   r.  r@  ri   ri   rj   rk   e  r  Úilikec                 C   rD  rf   )rE  rM   r/  r@  ri   ri   rj   rk   f  r  Úregexpc                 C   rD  rf   )rE  rM   r1  r@  ri   ri   rj   rk   g  r  Úiregexpc                 C   r?  rf   )rJ  r@  ri   ri   rj   rk   h  rl   Úcontainsc                 C   r?  rf   )rK  r@  ri   ri   rj   rk   i  rl   Ú
startswithc                 C   r?  rf   ©rL  r@  ri   ri   rj   rk   j  rl   Úendswithc                 C   r?  rf   )rN  r@  ri   ri   rj   rk   k  rl   c                 C   ó
   | j |Ž S rf   )Úbetweenr@  ri   ri   rj   rk   l  rl   c                 C   r?  rf   )Úis_nullr@  ri   ri   rj   rk   m  rl   )rP  rQ  ÚAUTOÚINTEGERÚBIGAUTOÚBIGINTÚBLOBÚBOOLÚSMALLINTÚCHARÚDATEÚDATETIMEÚDECIMALÚDEFAULTÚ ÚDOUBLEÚREALÚFLOATÚINTÚTEXTÚTIMEÚUUIDÚUUIDBÚVARCHARz
INNER JOINzLEFT OUTER JOINzRIGHT OUTER JOINz	FULL JOINzFULL OUTER JOINz
CROSS JOINzNATURAL JOINzJOIN LATERALzLEFT JOIN LATERAL)	ÚINNERÚ
LEFT_OUTERÚRIGHT_OUTERÚFULLÚ
FULL_OUTERÚCROSSÚNATURALÚLATERALÚLEFT_LATERALrt   r›   r|   é   é   )ÚTUPLEÚDICTÚNAMED_TUPLEÚCONSTRUCTORÚMODEL)ÚWHERErE   ÚMATERIALIZEé   é   z(.)_*([A-Z][a-z]+)z([a-z0-9])_*([A-Z])z[A-Za-z_][A-Za-z0-9_]*c                 C   s   |   ¡ }|r| |¡ |S rf   )Úcopyr	  )ÚsourceÚ	overridesÚmergedri   ri   rj   Ú
merge_dict¾  s   
r€  c                    s2   t | ƒdkr| d  ˆ ¡S d ‡ fdd„| D ƒ¡S )Nrt   r   Ú.c                    s   g | ]}|  ˆ ¡‘qS ri   ©Újoin)rÑ   rz   ©Úquote_charsri   rj   Ú
<listcomp>Ç  r–   zquote.<locals>.<listcomp>)rœ   rƒ  )Úpathr…  ri   r„  rj   ÚquoteÄ  s   rˆ  c                 C   s   t | ƒot| tƒS rf   )r   Ú
issubclassrI   )Úori   ri   rj   rk   É  ó    c                 C   s   | d ur	| f| }t ||ƒS rf   r	   )ÚexistingÚexpressionsÚopri   ri   rj   Ú_combineË  s   

r�  c                 C   s$   | d urt | ttfƒr| S | fS d S rf   )rg   rÖ   Útuple©rÇ   ri   ri   rj   Úensure_tupleÐ  s   ÿr’  c                 C   s"   | d urt | tƒr| S t| ƒS d S rf   )rg   ÚNoder6   r‘  ri   ri   rj   Úensure_entityÔ  ó   ÿr”  c                 C   s   t  d| ¡}t d|¡ ¡ S )Nz\1_\2)ÚSNAKE_CASE_STEP1ÚsubÚSNAKE_CASE_STEP2Úlower)rp   Úfirstri   ri   rj   Úmake_snake_caseØ  s   r›  c                 C   s*   t  |  dd¡d ¡}|d ur| ¡ S | S )Nr�  rt   ru   )ÚIDENTIFIER_RErÅ   ÚrsplitÚgroup)rp   Ú	match_objri   ri   rj   Úmake_identifierÜ  s   r   c                 c   sh   � t ƒ }tjt| ƒg| d|iŽ}dd„ |D ƒD ]}|r.|d |u r.| ¡  |r.|d |u s"|V  qd S )NÚ	fillvaluec                 s   ó   � | ]}t |ƒV  qd S rf   ©rÖ   )rÑ   Úgri   ri   rj   rÔ   å  ó   € zchunked.<locals>.<genexpr>ru   )ÚobjectÚ	itertoolsÚzip_longestÚiterÚpop)Úitré   ÚmarkerÚgroupsrž  ri   ri   rj   r$   â  s   €ÿýr$   c                   @   ó    e Zd ZdZdd„ Zdd„ ZdS )Ú_callable_context_managerri   c                 C   ó   | S rf   ri   ©rô   ri   ri   rj   Ú
_build_ctxî  ó   z$_callable_context_manager._build_ctxc                    s   t ˆ ƒ‡ ‡fdd„ƒ}|S )Nc                     s:   ˆ  ¡ � ˆ | i |¤ŽW  d   ƒ S 1 sw   Y  d S rf   )r²  ©ÚargsÚkwargs©r;   rô   ri   rj   Úinnerò  s   
$ÿz1_callable_context_manager.__call__.<locals>.innerr   )rô   r;   r¸  ri   r·  rj   Ú__call__ñ  s   z"_callable_context_manager.__call__N)rö   rü   rý   Ú	__slots__r²  r¹  ri   ri   ri   rj   r¯  ë  s    r¯  c                       sX   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zed
ƒZedƒZ	dd„ Z
‡ fdd„Z‡  ZS )rT   ©ÚobjÚ
_callbacksc                 C   s   g | _ |  d ¡ d S rf   )r½  Ú
initializer±  ri   ri   rj   rõ   ü  ó   zProxy.__init__c                 C   s   || _ | jD ]}||ƒ qd S rf   r»  )rô   r¼  Úcallbackri   ri   rj   r¾     s   

ÿzProxy.initializec                 C   s   | j  |¡ |S rf   )r½  Úappend)rô   rÀ  ri   ri   rj   Úattach_callback  ó   zProxy.attach_callbackc                    ó   ‡ fdd„}|S )Nc                    s(   | j d u r	tdƒ‚t| j ˆ ƒ|i |¤ŽS ©NzCannot use uninitialized Proxy.©r¼  r  r»   ©rô   rµ  r¶  ©Úmethodri   rj   r¸  
  s   
z Proxy.passthrough.<locals>.innerri   ©rÉ  r¸  ri   rÈ  rj   Úpassthrough	  s   zProxy.passthroughÚ	__enter__Ú__exit__c                 C   s   | j d u r	tdƒ‚t| j |ƒS rÅ  rÆ  r  ri   ri   rj   r    ó   
zProxy.__getattr__c                    s$   || j vr	tdƒ‚tt| ƒ ||¡S )NzCannot set attribute on proxy.)rº  r  ÚsuperrT   r  r  ©Ú	__class__ri   rj   r    s   
zProxy.__setattr__)rö   rü   rý   rº  rõ   r¾  rÂ  rË  rÌ  rÍ  r  r  Ú__classcell__ri   ri   rÐ  rj   rT   ù  s    rT   c                   @   sD   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Ze	dd„ ƒZ
dS )r*   )r¼  r½  Ú_Modelc                 C   ó   t | ƒS rf   ©ÚConnectionContextr±  ri   ri   rj   Úconnection_context"  ó   z DatabaseProxy.connection_contextc                 O   ó   t | g|¢R i |¤ŽS rf   ©Ú_atomicrÇ  ri   ri   rj   Úatomic$  ó   zDatabaseProxy.atomicc                 C   rÔ  rf   ©Ú_manualr±  ri   ri   rj   Úmanual_commit&  rØ  zDatabaseProxy.manual_commitc                 O   rÙ  rf   ©Ú_transactionrÇ  ri   ri   rj   Útransaction(  rÝ  zDatabaseProxy.transactionc                 C   rÔ  rf   ©Ú
_savepointr±  ri   ri   rj   Ú	savepoint*  rØ  zDatabaseProxy.savepointc                    ó6   t ˆ dƒsG ‡ fdd„dƒ}tdtfd|iƒˆ _ˆ jS )NrÓ  c                       ó   e Zd Z” ZdS )z!DatabaseProxy.Model.<locals>.MetaN©rö   rü   rý   Údatabaseri   r±  ri   rj   ÚMeta/  ó    rë  Ú	BaseModel©ÚhasattrÚtyperI   rÓ  ©rô   rë  ri   r±  rj   rI   ,  ó   
zDatabaseProxy.ModelN)rö   rü   rý   rº  r×  rÜ  rà  rã  ræ  ÚpropertyrI   ri   ri   ri   rj   r*     s    r*   c                   @   ó   e Zd ZdS )ÚModelDescriptorN©rö   rü   rý   ri   ri   ri   rj   rõ  4  r  rõ  c                   @   sV   e Zd ZdZdd„ Zedd„ ƒZdd„ Zdd	d
„Zdd„ Z	dd„ Z
dd„ Zdd„ ZdS )ÚAliasManager)Ú_counterÚ_current_indexÚ_mappingc                 C   s   d| _ d| _g | _|  ¡  d S ©Nr   )rø  rù  rú  Úpushr±  ri   ri   rj   rõ   =  s   zAliasManager.__init__c                 C   s   | j | jd  S ©Nrt   )rú  rù  r±  ri   ri   rj   ÚmappingD  ó   zAliasManager.mappingc                 C   s0   || j vr|  jd7  _d| j | |< | j | S )Nrt   zt%d)rþ  rø  ©rô   r}  ri   ri   rj   ÚaddH  s   

zAliasManager.addFc                 C   sB   |rt t| jƒƒD ]}|| j| v r| j| |   S q	|  |¡S rf   )ÚreversedÚrangerù  rú  r  )rô   r}  Ú	any_depthÚidxri   ri   rj   ÚgetN  s   ÿ
zAliasManager.getc                 C   r?  rf   )r  r   ri   ri   rj   Ú__getitem__U  ó   
zAliasManager.__getitem__c                 C   s   || j |< d S rf   )rþ  )rô   r}  Úaliasri   ri   rj   Ú__setitem__X  ó   zAliasManager.__setitem__c                 C   s2   |  j d7  _ | j t| jƒkr| j i ¡ d S d S rý  )rù  rœ   rú  rÁ  r±  ri   ri   rj   rü  [  s   ÿzAliasManager.pushc                 C   s8   | j dkr	tdƒ‚| j| j d   ¡  |  j d8  _ d S )Nrt   z&Cannot pop() from empty alias manager.)rù  rå   rú  Úclearr±  ri   ri   rj   rª  `  s   
zAliasManager.popN©F)rö   rü   rý   rº  rõ   ró  rþ  r  r  r  r
  rü  rª  ri   ri   ri   rj   r÷  :  s    

r÷  c                   @   s2   e Zd ZdZeddfdd„Zd
dd„Zdd	„ ZdS )ÚState©ÚsettingsÚscopeÚparenthesesFNc                 C   s"   |d ur|ni | _ || _|| _d S rf   r  )rô   r  r  r  ri   ri   rj   rõ   j  s   
zState.__init__c                 K   sN   |d u r| j n|}|r| jr| j ¡ }| |¡ n|r|}n| j}t|||ƒS rf   )r  r  r|  r	  r  )rô   r  r  r¶  r  ri   ri   rj   r¹  o  s   

zState.__call__c                 C   ó   | j  |¡S rf   )r  r  )rô   Ú	attr_nameri   ri   rj   r  }  ó   zState.__getattr__©NN)rö   rü   rý   rº  ÚSCOPE_NORMALrõ   r¹  r  ri   ri   ri   rj   r  g  s
    
r  c                    rÄ  )Nc                    s   | ddˆ i|¤ŽS ©Nr  ri   ri   ©rô   r¶  ©r  ri   rj   r¸  ‚  ó   z __scope_context__.<locals>.innerri   )r  r¸  ri   r  rj   Ú__scope_context__�  ó   r  c                   @   sÊ   e Zd ZdZdd„ Zdd„ Zdd„ Zedd	„ ƒZed
d„ ƒZ	edd„ ƒZ
dd„ ZeeƒZeeƒZeeƒZeeƒZeeƒZdd„ Zdd„ Zedd„ ƒZdd„ Zdd„ Zd$dd„Zdd„ Zd d!„ Zd"d#„ Z dS )%r'   )ÚstackÚ_sqlÚ_valuesÚalias_managerÚstatec                 K   sD   |  dt¡}|  dd¡}g | _g | _g | _tƒ | _t|||ƒ| _d S )Nr  r  F)	rª  r  r  r  r   r÷  r!  r  r"  )rô   r  r  r  ri   ri   rj   rõ   Š  s   zContext.__init__c                 C   s   t di | jj¤ŽS ©Nri   )r'   r"  r  r±  ri   ri   rj   Úas_new“  r  zContext.as_newc                 C   s   |d   | ¡S rû  ©Úget_sort_key©rô   Úitemri   ri   rj   Úcolumn_sort_key–  r  zContext.column_sort_keyc                 C   ó   | j jS rf   )r"  r  r±  ri   ri   rj   r  ™  ó   zContext.scopec                 C   r*  rf   )r"  r  r±  ri   ri   rj   r  �  r+  zContext.parenthesesc                 C   r*  rf   )r"  Úsubqueryr±  ri   ri   rj   r,  ¡  r+  zContext.subqueryc                 K   s>   |r|  d¡| jkr|d= | j | j¡ | jdi |¤Ž| _| S r  )r  r  r  rÁ  r"  )rô   r~  ri   ri   rj   r¹  ¥  s
   zContext.__call__c                 C   s   | j r|  d¡ | S )Nú()r  Úliteralr±  ri   ri   rj   rÌ  ³  s   
zContext.__enter__c                 C   s    | j r|  d¡ | j ¡ | _d S )Nú))r  r.  r  rª  r"  ©rô   Úexc_typeÚexc_valÚexc_tbri   ri   rj   rÍ  ¸  s   
zContext.__exit__c                 c   s    � | j  ¡  d V  | j  ¡  d S rf   )r!  rü  rª  r±  ri   ri   rj   Ú
push_alias½  s   €
zContext.push_aliasc                 C   s<   t |ttfƒr| | ¡S t|ƒr|jj | ¡S |  t|ƒ¡S rf   )	rg   r“  r'   Ú__sql__Úis_modelÚ_metaÚtableÚsqlrb   ©rô   r¼  ri   ri   rj   r9  Ã  s
   
zContext.sqlc                 C   s   | j  |¡ | S rf   )r  rÁ  )rô   Úkeywordri   ri   rj   r.  Ë  rÃ  zContext.literalNTc                 C   sà   |r||ƒ}n|d u r| j jr| j  |¡}t|tƒr5| d d�� |  |¡W  d   ƒ S 1 s/w   Y  nt|ƒrR|  ¡ � |  |¡W  d   ƒ S 1 sMw   Y  | j jr]|  t	|ƒ¡S | j
 |¡ |rn|  | j jpld¡S | S )N©Ú	converterú?)r"  r=  rg   r“  r9  r6  Úscope_columnÚvalue_literalsr.  Ú_query_val_transformr   rÁ  Úparam)rô   rÇ   r=  Ú	add_paramri   ri   rj   rÇ   Ï  s    

"ÿ
 ÿzContext.valuec                 C   s    |j  | j ¡ |j | j¡ |S rf   )r  Úextendr   ©rô   Úctxri   ri   rj   r5  è  s   zContext.__sql__c                 C   s   |   |¡ ¡ S rf   )r9  Úquery©rô   Únoderi   ri   rj   Úparseí  r  zContext.parsec                 C   s   d  | j¡| jfS )Nr^  )rƒ  r  r   r±  ri   ri   rj   rG  ð  r  zContext.query©NT)!rö   rü   rý   rº  rõ   r$  r)  ró  r  r  r,  r¹  r  r  Úscope_normalÚSCOPE_SOURCEÚscope_sourceÚSCOPE_VALUESÚscope_valuesÚ	SCOPE_CTEÚ	scope_cteÚSCOPE_COLUMNr?  rÌ  rÍ  r   r4  r9  r.  rÇ   r5  rJ  rG  ri   ri   ri   rj   r'   ‡  s6    	




r'   c                 C   sp   t | dd ƒ}|d ur| ¡ }ntƒ }| | ¡ ¡ \}}|s|S |jjp$d}|dkr/| dd¡}|tt	t
|ƒƒ S )NÚ	_databaser>  ú%s)r»   Úget_sql_contextr'   r9  rG  r"  rB  ro   r�  r’   rA  )rG  ÚdbrF  r9  ÚparamsrB  ri   ri   rj   Úquery_to_stringô  s   
rY  c                 C   s°   t | ttjtjtjfƒrdt| ƒ dd¡ } | S t | tƒr=z|  d¡} W n ty2   |  d¡} Y nw d|  dd¡ } | S t | t	ƒrJdt	| ƒ } | S | d u rRd} | S t| ƒ} | S )Nz'%s'ú'ú''Úutf8Úraw_unicode_escaperU  ÚNULL)
rg   Ústrr�   r‘   r    ro   Úbytesrž   ÚUnicodeDecodeErrorr“   ©rÛ   ri   ri   rj   rA    s*   ÿ
ôÿ
úüÿrA  c                   @   sJ   e Zd ZdZdZdd„ Zdd„ Zedd„ ƒZdd	d
„Z	dd„ Z
dd„ ZdS )r“  TFc                 C   s   | j  | j ¡}| j ¡ |_|S rf   )rÑ  Ú__new__Ú__dict__r|  r:  ri   ri   rj   Úclone#  ó   z
Node.clonec                 C   ó   t ‚rf   ©ÚNotImplementedErrorrE  ri   ri   rj   r5  (  r³  zNode.__sql__c                    rÄ  )Nc                    s"   |   ¡ }ˆ |g|¢R i |¤Ž |S rf   ©re  )rô   rµ  r¶  re  rÈ  ri   rj   r¸  -  s   zNode.copy.<locals>.innerri   rÊ  ri   rÈ  rj   r|  +  s   z	Node.copyc                 C   s    || j kr|  ¡ }||_ |S | S rf   )Ú_coercere  )rô   rk  re  ri   ri   rj   Úcoerce3  s
   
zNode.coercec                 C   ó   dS rÄ   ri   r±  ri   ri   rj   Úis_alias:  r³  zNode.is_aliasc                 C   r°  rf   ri   r±  ri   ri   rj   Úunwrap=  r³  zNode.unwrapN©T)rö   rü   rý   rk  Ú__isabstractmethod__re  r5  Ústaticmethodr|  rl  rn  ro  ri   ri   ri   rj   r“    s    

r“  c                   @   ó$   e Zd ZdZdd„ Zdd„ ZeZdS )ÚColumnFactory©rI  c                 C   rñ   rf   ru  rH  ri   ri   rj   rõ   D  r  zColumnFactory.__init__c                 C   ó   t | j|ƒS rf   )r%   rI  r  ri   ri   rj   r  G  r  zColumnFactory.__getattr__N©rö   rü   rý   rº  rõ   r  r  ri   ri   ri   rj   rt  A  s
    rt  c                   @   ó   e Zd ZdZddd„ZdS )Ú_DynamicColumnri   Nc                 C   s   |d urt |ƒS | S rf   )rt  r÷   ri   ri   rj   rú   O  s   z_DynamicColumn.__get__rf   ©rö   rü   rý   rº  rú   ri   ri   ri   rj   ry  L  ó    ry  c                   @   rx  )Ú_ExplicitColumnri   Nc                 C   s   |d ur
t d| ƒ‚| S )NzM%s specifies columns explicitly, and does not support dynamic column lookups.©r  r÷   ri   ri   rj   rú   X  s   ÿÿz_ExplicitColumn.__get__rf   rz  ri   ri   ri   rj   r|  U  r{  r|  c                   @   ó   e Zd Zdd„ Zdd„ ZdS )ÚStarc                 C   rñ   rf   )r}  r   ri   ri   rj   rõ   a  r  zStar.__init__c                 C   s   |  t| jƒ¡ d¡S )Nz.*)r9  rU   r}  r.  rE  ri   ri   rj   r5  c  rÝ  zStar.__sql__N©rö   rü   rý   rõ   r5  ri   ri   ri   rj   r  `  s    r  c                       s‚   e Zd Zeƒ Zd‡ fdd„	Zejdd„ ƒZdd„ Z	e
dd	„ ƒZejdfd
d„Zddd„Zddd„Zdd„ Zdd„ Zdd„ Z‡  ZS )ÚSourceNc                    s   t t| ƒ ¡  || _d S rf   )rÏ  r�  rõ   Ú_alias©rô   r	  rÐ  ri   rj   rõ   j  s   
zSource.__init__c                 C   rñ   rf   ©r‚  ©rô   Únameri   ri   rj   r	  n  ó   
zSource.aliasc                 G   s   |st dƒf}t| f|ƒS )Nr  )rZ   rY   ©rô   Úcolumnsri   ri   rj   Úselectr  s   
zSource.selectc                 C   rÔ  rf   )r  r±  ri   ri   rj   Ú__star__w  r+  zSource.__star__c                 C   s   t | |||ƒS rf   ©ÚJoin)rô   ÚdestÚ	join_typeÚonri   ri   rj   rƒ  {  r  zSource.joinc                 C   s   t | |tj|ƒS rf   )r�  rE   ri  ©rô   rŽ  r�  ri   ri   rj   Úleft_outer_join~  rs   zSource.left_outer_joinFc                 C   ó   t || |||d�S ©N)Ú	recursiver‰  Úmaterialized©ÚCTE©rô   r†  r•  r‰  r–  ri   ri   rj   Úcte�  ó   
ÿz
Source.ctec                 C   s   | j r| j fS |j|  fS rf   )r‚  r!  rE  ri   ri   rj   r&  …  ó   zSource.get_sort_keyc                 C   s:   |j tkr| jr| j|j| < | d¡ t|j|  ƒ¡ |S ©Nú AS )r  rM  r‚  r!  r.  r9  r6   rE  ri   ri   rj   Úapply_aliasŠ  s
   
zSource.apply_aliasc                 C   s&   | j r	| j |j| < | t|j|  ƒ¡S rf   )r‚  r!  r9  r6   rE  ri   ri   rj   Úapply_column“  s   zSource.apply_columnrf   ©FNN)rö   rü   rý   ry  rh   rõ   r“  r|  r	  rŠ  ró  r‹  rE   rh  rƒ  r’  rš  r&  rŸ  r   rÒ  ri   ri   rÐ  rj   r�  g  s    



	r�  c                       sŽ   e Zd Z‡ fdd„Zejdd„ ƒZ‡ fdd„Zdd„ Zd	d
„ Z	dd„ Z
dd„ Zdd„ Zdd„ ZeejƒZeejƒZeejƒZeejƒZ‡  ZS )Ú_HashableSourcec                    s"   t t| ƒj|i |¤Ž |  ¡  d S rf   )rÏ  r¢  rõ   Ú_update_hashrÇ  rÐ  ri   rj   rõ   š  ó   z_HashableSource.__init__c                 C   s   || _ |  ¡  d S rf   )r‚  r£  r…  ri   ri   rj   r	  ž  s   z_HashableSource.aliasc                    s   t t| ƒ ¡ }| ¡  |S rf   )rÏ  r¢  re  r£  ©rô   re  rÐ  ri   rj   re  £  s   z_HashableSource.clonec                 C   s   |   ¡ | _d S rf   )Ú	_get_hashÚ_hashr±  ri   ri   rj   r£  ©  r  z_HashableSource._update_hashc                 C   s   t | j| j| jfƒS rf   )ÚhashrÑ  Ú_pathr‚  r±  ri   ri   rj   r¦  ¬  ó   z_HashableSource._get_hashc                 C   ó   | j S rf   )r§  r±  ri   ri   rj   Ú__hash__¯  ó   z_HashableSource.__hash__c                 C   s$   t |tƒr| j|jkS t| tj|ƒS rf   )rg   r¢  r§  rE  rM   r!  ©rô   Úotherri   ri   rj   Ú__eq__²  ó   
z_HashableSource.__eq__c                 C   s$   t |tƒr| j|jkS t| tj|ƒS rf   )rg   r¢  r§  rE  rM   r)  r®  ri   ri   rj   Ú__ne__·  r±  z_HashableSource.__ne__c                    rÄ  )Nc                    s   t | ˆ |ƒS rf   ©rE  r
  ©rŽ  ri   rj   r¸  ½  r  z!_HashableSource._e.<locals>.innerri   )rŽ  r¸  ri   r´  rj   Ú_e¼  r  z_HashableSource._e)rö   rü   rý   rõ   r“  r|  r	  re  r£  r¦  r¬  r°  r²  rµ  rM   r#  Ú__lt__r%  Ú__le__r&  Ú__gt__r(  Ú__ge__rÒ  ri   ri   rÐ  rj   r¢  ™  s    



r¢  c                    s   t ˆ ƒ‡ fdd„ƒ}|S )Nc                    s,   ˆ | g|¢R i |¤Ž}| j r| | j ¡S |S rf   )rT  Úbind)rô   rµ  r¶  Úresult©Úmethri   rj   r¸  Ç  s   z __bind_database__.<locals>.innerr   )r½  r¸  ri   r¼  rj   Ú__bind_database__Æ  s   r¾  Fc                    ó   ‡ ‡fdd„}|S )Nc                    s   ˆ r|| } }t | |ˆd�S )N)r�  rŒ  r®  ©Úinvertedr�  ri   rj   rÉ  Ñ  s   
z__join__.<locals>.methodri   )r�  rÁ  rÉ  ri   rÀ  rj   Ú__join__Ð  ó   rÂ  c                   @   s„   e Zd ZeejƒZeejƒZeej	ƒZ
eejƒZeejƒZeejdd�Zeejdd�Zeej	dd�Zeejdd�Zeejdd�ZdS )Ú	BaseTableT©rÁ  N)rö   rü   rý   rÂ  rE   rh  Ú__and__ri  r  rj  Ú__sub__rl  Ú__or__rm  Ú__mul__Ú__rand__Ú__radd__Ú__rsub__Ú__ror__Ú__rmul__ri   ri   ri   rj   rÄ  Ø  s    




rÄ  c                   @   rþ   )
Ú_BoundTableContextc                 C   ó   || _ || _d S rf   )r8  rê  )rô   r8  rê  ri   ri   rj   rõ   æ  ó   
z_BoundTableContext.__init__c                 C   s   t | ƒ| j| jƒS rf   )rð  r8  rê  r±  ri   ri   rj   r²  ê  r  z_BoundTableContext._build_ctxc                 C   s:   | j j| _| j  | j¡ | j jd ur| j j | j¡ | j S rf   )r8  rT  Ú_orig_databaserº  rê  Ú_modelr±  ri   ri   rj   rÌ  í  s
   
z_BoundTableContext.__enter__c                 C   s2   | j  | j¡ | j jd ur| j j | j¡ d S d S rf   )r8  rº  rÒ  rÓ  r0  ri   ri   rj   rÍ  ô  s   ÿz_BoundTableContext.__exit__N©rö   rü   rý   rõ   r²  rÌ  rÍ  ri   ri   ri   rj   rÏ  å  s
    rÏ  c                       s�   e Zd Z		d‡ fdd„	Zdd„ Zddd„Zddd	„Zd
d„ Zedd„ ƒZ	eddd„ƒZ
eddd„ƒZeddd„ƒZedd„ ƒZdd„ Z‡  ZS )r\   Nc           
         s¤   || _ || _|| _|| _|r||fn|f| _|| _|| _tt| ƒj	|d� |d ur;t
ƒ | _|D ]}t| |t| |ƒƒ q/|rM| jrB| n| j}	t|	|ƒ| _d S d | _d S ©N©r	  )rö   Ú_columnsÚ_primary_keyÚ_schemar©  rÓ  rT  rÏ  r\   rõ   r|  rh   Úsetattrr%   r»   Úprimary_key)
rô   r†  r‰  rÛ  Úschemar	  rÓ  rT  ÚcolumnÚcol_srcrÐ  ri   rj   rõ   û  s    
zTable.__init__c              	   C   s$   t | j| j| j| j| j| j| jd�S )N)r‰  rÛ  rÜ  r	  rÓ  rT  )r\   rö   r×  rØ  rÙ  r‚  rÓ  rT  r±  ri   ri   rj   re    s   ùzTable.clonec                 C   ó
   || _ | S rf   ©rT  ©rô   rê  ri   ri   rj   rº    ó   z
Table.bindc                 C   ó
   t | |ƒS rf   )rÏ  rá  ri   ri   rj   Úbind_ctx!  r  zTable.bind_ctxc                 C   s   t | j| j| j| jfƒS rf   )r¨  rÑ  r©  r‚  rÓ  r±  ri   ri   rj   r¦  $  ó   zTable._get_hashc                    s4   |sˆ j r‡ fdd„ˆ j D ƒntdƒf}tˆ f|ƒS )Nc                    ó   g | ]}t ˆ |ƒ‘qS ri   )r%   ©rÑ   rÝ  r±  ri   rj   r†  *  r–   z Table.select.<locals>.<listcomp>r  )r×  rZ   rY   rˆ  ri   r±  rj   rŠ  '  s   ÿÿzTable.selectc                 K   sR   |r"|d u ri n|}| j r| n| j}| ¡ D ]\}}||t||ƒ< qt| ||d�S ©N©Úinsertr‰  )r×  rh   rß   r»   ÚInsert)rô   rê  r‰  r¶  ÚsrcÚkeyrÇ   ri   ri   rj   rê  .  s   zTable.insertc                 K   s   | j d||dœ|¤Ž d¡S )Nré  ÚREPLACEri   ©rê  Úon_conflict)rô   rê  r‰  r¶  ri   ri   rj   ro   7  s   ÿÿÿþzTable.replacec                 K   sP   |r"|d u ri n|}| j r| n| j}| ¡ D ]\}}||t||ƒ< qt| |d�S )Nr  )r×  rh   rß   r»   ÚUpdate)rô   r	  r¶  rì  rí  rÇ   ri   ri   rj   r	  =  s   zTable.updatec                 C   rÔ  rf   )ÚDeleter±  ri   ri   rj   ÚdeleteF  r+  zTable.deletec                 C   sV   |j tkr| t| jŽ ¡S | jr| j|j| < |j tkr&|  | t| jŽ ¡¡S |  	|¡S rf   )
r  rO  r9  r6   r©  r‚  r!  rM  rŸ  r   rE  ri   ri   rj   r5  J  s   


zTable.__sql__)NNNNNNrf   r  )rö   rü   rý   rõ   re  rº  rä  r¦  r¾  rŠ  rê  ro   r	  ró  r5  rÒ  ri   ri   rÐ  rj   r\   ú  s&    ÿ



r\   c                       s6   e Zd Zejddf‡ fdd„	Zdd„ Zdd„ Z‡  ZS )r�  Nc                    s.   t t| ƒj|d� || _|| _|| _|| _d S rÕ  )rÏ  r�  rõ   Úlhsr  r�  Ú_on)rô   rô  r  r�  r�  r	  rÐ  ri   rj   rõ   [  s
   
zJoin.__init__c                 C   rß  rf   )rõ  )rô   Ú	predicateri   ri   rj   r�  b  râ  zJoin.onc                 C   s@   |  | j¡ d| j ¡  | j¡ | jd ur| d¡  | j¡ |S )Nú %s ú ON )r9  rô  r.  r�  r  rõ  rE  ri   ri   rj   r5  f  s   

zJoin.__sql__)	rö   rü   rý   rE   rh  rõ   r�  r5  rÒ  ri   ri   rÐ  rj   r�  Z  s    r�  c                       s<   e Zd Zd
‡ fdd„	Zdd„ Zejdd„ ƒZdd	„ Z‡  Z	S )rc   Nc                    s"   || _ || _tt| ƒj|d� d S rÕ  )r   r×  rÏ  rc   rõ   )rô   Úvaluesr‰  r	  rÐ  ri   rj   rõ   q  s   zValuesList.__init__c                 C   s   t | jt| jƒ| jfƒS rf   )r¨  rÑ  Úidr   r‚  r±  ri   ri   rj   r¦  v  rå  zValuesList._get_hashc                 G   rñ   rf   )r×  )rô   Únamesri   ri   rj   r‰  y  r‡  zValuesList.columnsc                 C   sà   | j r	| j |j| < |jtks|jtkrd||j p|jjd�� | d¡ 	t
dd„ | jD ƒƒ¡}W d   ƒ n1 s9w   Y  |jtkrb| d¡ 	t|j|  ƒ¡ | jrbdd„ | jD ƒ}| 	t|ƒ¡ |S | 	t|j|  ƒ¡ |S )N©r  zVALUES c                 S   ó   g | ]}t |ƒ‘qS ri   ©ÚEnclosedNodeList©rÑ   Úrowri   ri   rj   r†  …  s    ÿz&ValuesList.__sql__.<locals>.<listcomp>rž  c                 S   rý  ri   )r6   ©rÑ   rh   ri   ri   rj   r†  ‹  ó    )r‚  r!  r  rM  r  r  r"  Úin_exprr.  r9  ÚCommaNodeListr   r6   r×  rÿ  )rô   rF  Úentitiesri   ri   rj   r5  }  s&   
ÿþÿ
þzValuesList.__sql__r  )
rö   rü   rý   rõ   r¦  r“  r|  r‰  r5  rÒ  ri   ri   rÐ  rj   rc   p  s    
rc   c                       sR   e Zd Z		d‡ fdd„	Zdd„ Zdd„ Zd	d
„ ZeZdd„ ZeZ	dd„ Z
‡  ZS )r˜  FNc                    sX   || _ | ¡  | _}|| _|| _|d urdd„ |D ƒ}|| _d|_tt| ƒj	|d� d S )Nc                 S   ó"   g | ]}t |tƒrt|ƒn|‘qS ri   ©rg   r_  r6   r  ri   ri   rj   r†  ›  s    ÿz CTE.__init__.<locals>.<listcomp>ri   rÖ  )
r‚  re  Ú_queryÚ
_recursiveÚ_materializedr×  Ú	_cte_listrÏ  r˜  rõ   )rô   r†  rG  r•  r‰  r–  rÐ  ri   rj   rõ   ”  s   ÿzCTE.__init__c                 G   sV   |st dƒ‚t| jdƒr| jjj|Ž  | ¡ | ¡}|S t| f|ƒ | ¡ | jj	¡}|S )NzFselect_from() must specify one or more columns from the CTE to select.Úmodel)
rå   rï  r	  r  rŠ  Úfrom_Úwith_cterY   rº  rT  ©rô   r‰  rG  ri   ri   rj   Úselect_from¡  s   ÿý
ý
þzCTE.select_fromc                 C   s   t | j| jt| jƒfƒS rf   )r¨  rÑ  r‚  rú  r	  r±  ri   ri   rj   r¦  ±  rå  zCTE._get_hashc                 C   s&   | j  ¡ }t| j|| | j| j| jƒS rf   ©r	  re  r˜  r‚  r
  r×  r  ©rô   r  re  ri   ri   rj   Ú	union_all´  ó   
ÿzCTE.union_allc                 C   s&   | j  ¡ }t| j||B | j| j| jƒS rf   r  r  ri   ri   rj   Úunionº  r  z	CTE.unionc              	   C   sø   |j tkr| t| jƒ¡S | ¡ �a | j|j| < | t| jƒ¡ | jr.| d¡ t	| jƒ¡ | d¡ | j
r<| d¡ n
| j
du rF| d¡ |jdd�� | | j¡ W d   ƒ n1 s]w   Y  W d   ƒ |S W d   ƒ |S 1 suw   Y  |S )Nr‹   rž  zMATERIALIZED FzNOT MATERIALIZED Trü  )r  rQ  r9  r6   r‚  r4  r!  r×  r.  rÿ  r  rL  r	  rE  ri   ri   rj   r5  À  s,   




ÿ
óþ
óñzCTE.__sql__r¡  )rö   rü   rý   rõ   r  r¦  r  r  r  rÈ  r5  rÒ  ri   ri   rÐ  rj   r˜  “  s    ÿr˜  c                   @   s$  e Zd ZdZejd1dd„ƒZdd„ Zdd„ Zdd	„ Z	d
d„ Z
d2dd„ZeZd2dd„ZeZdd„ Zd3dd„ZeejƒZeejƒZeejƒZeejƒZeejƒZeejƒZeejƒZeejdd�Z eejdd�Z!eejdd�Z"eejdd�Z#eejdd�Z$eejdd�Z%eejdd�Z&dd„ Z'dd„ Z(eej)ƒZ*eej+ƒZ,eej-ƒZ.eej/ƒZ0eej1ƒZ2eej3ƒZ4eej5ƒZ6eej7ƒZ8eej5ƒZ9eej7ƒZ:eej;ƒZ<eej=ƒZ>eej1ƒZ?eej@ƒZAeejBƒZCeejDƒZEd4dd„ZFdd„ ZGdd „ ZHd!d"„ ZId#d$„ ZJd%d&„ ZKd'd(„ ZLd)d*„ ZMdZNd+d,„ ZOd-d.„ ZPd/d0„ ZQdS )5Ú
ColumnBaseNc                 C   rñ   rf   )Ú
_converter)rô   r=  ri   ri   rj   r=  Ù  r‡  zColumnBase.converterc                 C   s   |rt | |ƒS | S rf   )ÚAliasrƒ  ri   ri   rj   r	  Ý  s   
zColumnBase.aliasc                 C   r°  rf   ri   r±  ri   ri   rj   Úunaliasâ  r³  zColumnBase.unaliasc                 C   rã  rf   )ÚBindTo)rô   rŽ  ri   ri   rj   Úbind_toå  r  zColumnBase.bind_toc                 C   rã  rf   )r!   )rô   Úas_typeri   ri   rj   Úcastè  r  zColumnBase.castc                 C   ó   t | ||d�S ©N)Ú	collationÚnulls)ÚAsc©rô   r!  r"  ri   ri   rj   Úascë  r  zColumnBase.ascc                 C   r  r   )ÚDescr$  ri   ri   rj   Údescï  r  zColumnBase.descc                 C   rÔ  rf   )ÚNegatedr±  ri   ri   rj   Ú
__invert__ó  rØ  zColumnBase.__invert__Fc                    r¿  )Nc                    s   ˆ rt |ˆ| ƒS t | ˆ|ƒS rf   r³  r
  ©ÚinvrŽ  ri   rj   r¸  ÷  s   zColumnBase._e.<locals>.innerri   )rŽ  r+  r¸  ri   r*  rj   rµ  ö  rÃ  zColumnBase._eT)r+  c                 C   ó    |d u rt jnt j}t| ||ƒS rf   )rM   r,  r!  rE  ©rô   r  rŽ  ri   ri   rj   r°    ó   zColumnBase.__eq__c                 C   r,  rf   )rM   r-  r)  rE  r-  ri   ri   rj   r²    r.  zColumnBase.__ne__c                 C   s   |rt jnt j}t| |d ƒS rf   )rM   r,  r-  rE  )rô   rQ  rŽ  ri   ri   rj   rQ  '  s   zColumnBase.is_nullc                 C   st   |  d¡dks|  d¡dks|  d¡dkr6| dd¡ dd¡ dd¡}tt|| dd	�td
ƒtddd	�fƒS || S )NÚ_r   r   ú\ú\\z\_z\%Fr<  ÚESCAPE)Úfindro   ÚNodeListrb   rZ   )rô   rp   Útemplateri   ri   rj   Ú_escape_like_expr+  s   *
ýzColumnBase._escape_like_exprc                 C   s>   t |tƒrtdtjt|tjdƒƒ}n|  |d¡}t| tj|ƒS )Nr   z%%%s%%©rg   r“  ÚStringExpressionrM   r3  r6  rE  r/  r
  ri   ri   rj   rK  6  s   
ÿzColumnBase.containsc                 C   s4   t |tƒrt|tjdƒ}n|  |d¡}t| tj|ƒS )Nr   z%s%%r7  r
  ri   ri   rj   rL  =  ó   
zColumnBase.startswithc                 C   s4   t |tƒrtdtj|ƒ}n|  |d¡}t| tj|ƒS )Nr   z%%%sr7  r
  ri   ri   rj   rN  C  r9  zColumnBase.endswithc                 C   s   t | tjt|tdƒ|fƒƒS )Nr  )rE  rM   r0  r4  rZ   ©rô   ÚloÚhiri   ri   rj   rP  I  ó   zColumnBase.betweenc                 C   rD  rf   ©r8  rM   r3  r
  ri   ri   rj   ÚconcatK  r  zColumnBase.concatc                 C   s>   t |tƒr|jd u s|jd u rtdƒ‚|  |j|j¡S | |kS )Nz4BETWEEN range must have both a start- and end-point.)rg   ÚsliceÚstartÚstoprå   rP  r'  ri   ri   rj   r  M  s
   
zColumnBase.__getitem__c                 C   s   t tdƒ| fƒS )NÚDISTINCT©r4  rZ   r±  ri   ri   rj   ÚdistinctV  rs   zColumnBase.distinctc                 C   s   t | td| ƒfƒS )Nú
COLLATE %srD  ©rô   r!  ri   ri   rj   ÚcollateY  rª  zColumnBase.collatec                 C   rm  r#  ri   rE  ri   ri   rj   r&  \  r³  zColumnBase.get_sort_keyrf   r  r  rp  )Rrö   rü   rý   r  r“  r|  r=  r	  r  r  r  r%  Ú__pos__r'  Ú__neg__r)  rµ  rM   r  rÆ  r  rÈ  r  r  r  rÇ  r  rÉ  r  Ú__truediv__r  Ú__xor__rË  rÌ  rÎ  Ú__rtruediv__rÊ  rÍ  Ú__rxor__r°  r²  r#  r¶  r%  r·  r&  r¸  r(  r¹  r*  Ú
__lshift__r,  Ú
__rshift__r.  Ú__mod__r/  Ú__pow__rG  rH  r  Úbin_andr  Úbin_orÚin_r+  r>  r1  rI  r2  rJ  rQ  r6  rK  rL  rN  rP  r?  r  Ú__iter__rE  rH  r&  ri   ri   ri   rj   r  Ö  st    


























r  c                   @   rþ   )
r%   c                 C   rÐ  rf   )r}  r†  )rô   r}  r†  ri   ri   rj   rõ   a  rÑ  zColumn.__init__c                 C   s&   |j tkr	| jfS | j |¡| jf S rf   )r  rO  r†  r}  r&  rE  ri   ri   rj   r&  e  s   
zColumn.get_sort_keyc                 C   ó   t | j| jfƒS rf   )r¨  r}  r†  r±  ri   ri   rj   r¬  k  rs   zColumn.__hash__c                 C   sd   |j tkr| t| jƒ¡S | ¡ � | | j¡ d¡ t| jƒ¡W  d   ƒ S 1 s+w   Y  d S ©Nr�  )r  rO  r9  r6   r†  r?  r}  r.  rE  ri   ri   rj   r5  n  s
   

$ÿzColumn.__sql__N)rö   rü   rý   rõ   r&  r¬  r5  ri   ri   ri   rj   r%   `  s
    r%   c                   @   ó$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚWrappedNodec                 C   s&   || _ t|ddƒ| _t|dd ƒ| _d S )Nrk  Tr  )rI  r»   rk  r  rH  ri   ri   rj   rõ   w  s   zWrappedNode.__init__c                 C   ó
   | j  ¡ S rf   )rI  rn  r±  ri   ri   rj   rn  |  r  zWrappedNode.is_aliasc                 C   r[  rf   )rI  ro  r±  ri   ri   rj   ro    r  zWrappedNode.unwrapN)rö   rü   rý   rõ   rn  ro  ri   ri   ri   rj   rZ  v  s    rZ  c                   @   r®  )ÚEntityFactoryru  c                 C   rñ   rf   ru  rH  ri   ri   rj   rõ   …  r  zEntityFactory.__init__c                 C   rv  rf   )r6   rI  r  ri   ri   rj   r  ‡  r  zEntityFactory.__getattr__N)rö   rü   rý   rº  rõ   r  ri   ri   ri   rj   r\  ƒ  s    r\  c                   @   rx  )Ú_DynamicEntityri   Nc                 C   s   |d ur	t |jƒS | S rf   )r\  r‚  r÷   ri   ri   rj   rú   �  s   
z_DynamicEntity.__get__rf   rz  ri   ri   ri   rj   r]  ‹  s    r]  c                       sf   e Zd Zeƒ Z‡ fdd„Zdd„ Zedd„ ƒZej	dd„ ƒZdd	d
„Z
dd„ Zdd„ Zdd„ Z‡  ZS )r  c                    ó   t t| ƒ |¡ || _d S rf   )rÏ  r  rõ   r‚  )rô   rI  r	  rÐ  ri   rj   rõ   –  ó   
zAlias.__init__c                 C   ó
   t | jƒS rf   )r¨  r‚  r±  ri   ri   rj   r¬  š  r  zAlias.__hash__c                 C   r«  rf   r„  r±  ri   ri   rj   r†  �  ó   z
Alias.namec                 C   rñ   rf   r„  ©rô   rÇ   ri   ri   rj   r†     r‡  Nc                 C   s   |d u r| j S t| j |ƒS rf   )rI  r  rƒ  ri   ri   rj   r	  ¤  s   zAlias.aliasc                 C   r«  rf   ru  r±  ri   ri   rj   r  ª  r­  zAlias.unaliasc                 C   rm  rK  ri   r±  ri   ri   rj   rn  ­  r³  zAlias.is_aliasc                 C   s8   |j tkr| | j¡ d¡ t| jƒ¡S | t| jƒ¡S r�  )r  rM  r9  rI  r.  r6   r‚  rE  ri   ri   rj   r5  °  s   
ýzAlias.__sql__rf   )rö   rü   rý   r]  rh   rõ   r¬  ró  r†  Úsetterr	  r  rn  r5  rÒ  ri   ri   rÐ  rj   r  “  s    


r  c                       ó$   e Zd Z‡ fdd„Zdd„ Z‡  ZS )r  c                    r^  rf   )rÏ  r  rõ   rŽ  )rô   rI  rŽ  rÐ  ri   rj   rõ   »  r_  zBindTo.__init__c                 C   ó   |  | j¡S rf   ©r9  rI  rE  ri   ri   rj   r5  ¿  r  zBindTo.__sql__©rö   rü   rý   rõ   r5  rÒ  ri   ri   rÐ  rj   r  º  ó    r  c                   @   r~  )r(  c                 C   r«  rf   ru  r±  ri   ri   rj   r)  Ä  r­  zNegated.__invert__c                 C   s   |  d¡ | j¡S )NzNOT )r.  r9  rI  rE  ri   ri   rj   r5  Ç  r  zNegated.__sql__N)rö   rü   rý   r)  r5  ri   ri   ri   rj   r(  Ã  ó    r(  c                   @   rþ   )
ÚBitwiseMixinc                 C   r?  rf   )rS  r®  ri   ri   rj   rÆ  Ì  r  zBitwiseMixin.__and__c                 C   r?  rf   )rT  r®  ri   ri   rj   rÈ  Ï  r  zBitwiseMixin.__or__c                 C   s   |   t|ƒ¡S rf   )rS  ÚBitwiseNegatedr®  ri   ri   rj   rÇ  Ò  r  zBitwiseMixin.__sub__c                 C   rÔ  rf   )rk  r±  ri   ri   rj   r)  Õ  rØ  zBitwiseMixin.__invert__N)rö   rü   rý   rÆ  rÈ  rÇ  r)  ri   ri   ri   rj   rj  Ë  s
    rj  c                   @   s"   e Zd ZejZdd„ Zdd„ ZdS )rk  c                 C   r«  rf   ru  r±  ri   ri   rj   r)  Ü  r­  zBitwiseNegated.__invert__c                 C   s6   |j jr|j j | j| j¡}n| j}| |¡ | j¡S rf   )r"  Ú
operationsr  rŽ  r.  r9  rI  )rô   rF  Úop_sqlri   ri   rj   r5  ß  s   zBitwiseNegated.__sql__N)rö   rü   rý   rM   r5  rŽ  r)  r5  ri   ri   ri   rj   rk  Ù  s    rk  c                   @   s   e Zd Zddd„Zdd„ ZdS )rb   NTc                 C   sp   || _ || _|ot| j tƒ| _| jr3g | _| j D ]}t|tƒr&| j |¡ q| j t|| jƒ¡ qd S d | _d S rf   )	rÇ   r=  rg   Úmulti_typesÚmultirù  r“  rÁ  rb   )rô   rÇ   r=  Úunpackr(  ri   ri   rj   rõ   è  s   

ü
zValue.__init__c                 C   s&   | j r| t| jƒ¡S | | j| j¡S rf   )ro  r9  rÿ  rù  rÇ   r=  rE  ri   ri   rj   r5  ö  s   zValue.__sql__rK  r€  ri   ri   ri   rj   rb   ç  s    
rb   c                   @   s   e Zd Zdd„ ZdS )ÚValueLiteralsc                 C   s:   |dd�� |  | j¡W  d   ƒ S 1 sw   Y  d S )NT)r@  rf  rE  ri   ri   rj   r5  ÿ  s   
$ÿzValueLiterals.__sql__N)rö   rü   rý   r5  ri   ri   ri   rj   rq  þ  s    rq  c                 C   s   t | |dd�S ©NF©rp  )rb   )rÇ   r=  ri   ri   rj   r     r  r   c                       rd  )r!   c                    s    t t| ƒ |¡ || _d| _d S rÄ   )rÏ  r!   rõ   Ú_castrk  )rô   rI  r  rÐ  ri   rj   rõ   	  s   
zCast.__init__c                 C   s   |  d¡ | j¡  d| j ¡S )NzCAST(z AS %s))r.  r9  rI  rt  rE  ri   ri   rj   r5    s
   ýzCast.__sql__rg  ri   ri   rÐ  rj   r!     ó    r!   c                       s>   e Zd Zd
‡ fdd„	Zejddd„ƒZdd„ Zdd	„ Z‡  Z	S )ÚOrderingNc                    sF   t t| ƒ |¡ || _|| _|| _|r| ¡ dvr!td| ƒ‚d S d S )N)rš  Úlastz<Ordering nulls= parameter must be "first" or "last", got: %s)rÏ  rv  rõ   Ú	directionr!  r"  r™  rå   )rô   rI  rx  r!  r"  rÐ  ri   rj   rõ     s   ÿÿzOrdering.__init__c                 C   rñ   rf   )r!  rG  ri   ri   rj   rH    r‡  zOrdering.collatec                 C   s6   |  ¡ dkrd\}}nd\}}td | j ¡ |ff|ƒS )Nrw  )rt   r   )r   rt   )r™  r    rI  rQ  )rô   r"  ÚifnullÚnotnullri   ri   rj   Ú_null_ordering_case#  s   
zOrdering._null_ordering_casec                 C   sz   | j r|jjs| |  | j ¡¡ d¡ | | j¡ | jr$| d| j ¡ | d| j ¡ | j r;|jjr;| d| j  ¡ |S )Nú, z COLLATE %sú %sz	 NULLS %s)	r"  r"  Únulls_orderingr9  r{  r.  rI  r!  rx  rE  ri   ri   rj   r5  *  s   zOrdering.__sql__r  rf   )
rö   rü   rý   rõ   r“  r|  rH  r{  r5  rÒ  ri   ri   rÐ  rj   rv    s    	rv  c                 C   ó   t | d||ƒS )NÚASC©rv  ©rI  r!  r"  ri   ri   rj   r#  7  r  r#  c                 C   r  )NÚDESCr�  r‚  ri   ri   rj   r&  ;  r  r&  c                   @   s&   e Zd Zd	dd„Zdd„ Zdd„ ZdS )
rE  Fc                 C   s@   || _ || _|tjtjfv rt|tjƒrt|ƒ}|| _	|| _
d S rf   )rô  rŽ  rM   r*  r+  rg   ÚtypesÚGeneratorTyper�  r  Úflat)rô   rô  rŽ  r  r†  ri   ri   rj   rõ   @  s   
zExpression.__init__c                 C   sL  | j  ddœ}| j }}t|tƒr| ¡ }t|tƒr*|jr*|j|d< t|tƒ|d< nd |d< |j	j
r=|j	j
 | j| j¡}n| j}|d	i |¤Ž�U | jtjkpS| jtjk}| j}|rs|  ||¡rs| | jtjkridnd¡W  d   ƒ S |d u r‡| jtjksƒ| jtjkr‡tdƒ}| | j¡ d| ¡ |¡W  d   ƒ S 1 sŸw   Y  d S )
NT)r  r  r=  Ú
is_fk_exprz0 = 1z1 = 1r^  r÷  ri   )r†  rô  rg   rZ  ro  r8   rk  Údb_valuer<   r"  rl  r  rŽ  rM   r*  r+  r  Ú_is_rhs_emptyr.  r,  r-  rZ   r9  )rô   rF  r~  rI  Úraw_noderm  Úop_inr  ri   ri   rj   r5  H  s0   


ú 
$ózExpression.__sql__c                 C   sB   t |tƒr
t|ƒ S t |tƒr|jo|j S | ¡  |¡d dkS )Nr   ú())rg   rn  rÉ   rb   ro  rù  r$  rJ  )rô   r  rF  ri   ri   rj   r‰  l  s
   


zExpression._is_rhs_emptyNr  )rö   rü   rý   rõ   r5  r‰  ri   ri   ri   rj   rE  ?  s    
$rE  c                       ó,   e Zd Z‡ fdd„Zdd„ Zdd„ Z‡  ZS )r8  c                    s:   | j tjkr|jjr| t | j| j¡¡S t	t
| ƒ |¡S rf   )rŽ  rM   r3  r"  Úuse_concat_functionr9  r;   rô  r  rÏ  r8  r5  rE  rÐ  ri   rj   r5  v  s   zStringExpression.__sql__c                 C   r?  rf   )r?  r
  ri   ri   rj   r  {  r  zStringExpression.__add__c                 C   ó   t |tj| ƒS rf   r>  )rô   rô  ri   ri   rj   rË  }  r  zStringExpression.__radd__)rö   rü   rý   r5  r  rË  rÒ  ri   ri   rÐ  rj   r8  u  s    r8  c                       s<   e Zd Zdd„ Z‡ fdd„Zdd„ Zdd„ Zd	d
„ Z‡  ZS )r6   c                 G   s   dd„ |D ƒ| _ d S )Nc                 S   s   g | ]}|r|‘qS ri   ri   ©rÑ   Úpri   ri   rj   r†  ƒ  r  z#Entity.__init__.<locals>.<listcomp>)r©  )rô   r‡  ri   ri   rj   rõ   ‚  rª  zEntity.__init__c                    s4   |  d¡r| d¡rtt| ƒ |¡S t| j|g Ž S )NÚ__)rL  rN  rÏ  r6   r  r©  r  rÐ  ri   rj   r  …  s   zEntity.__getattr__c                 C   r`  rf   )r�  r©  rE  ri   ri   rj   r&  Š  r  zEntity.get_sort_keyc                 C   s   t | jjt| jƒfƒS rf   )r¨  rÑ  rö   r�  r©  r±  ri   ri   rj   r¬  �  rÝ  zEntity.__hash__c                    s:   |j jpd‰ˆd ‰ ‡ ‡fdd„| jD ƒ}| t|ˆƒ¡S )Nrv   r   c                    s   g | ]}|  ˆ ˆ¡‘qS ri   rn   r�  ©rq   r…  ri   rj   r†  “  ó    z"Entity.__sql__.<locals>.<listcomp>)r"  rˆ  r©  r.  )rô   rF  Úescapedri   r“  rj   r5  �  s   zEntity.__sql__)	rö   rü   rý   rõ   r  r&  r¬  r5  rÒ  ri   ri   rÐ  rj   r6   �  s    r6   c                   @   ó   e Zd Zddd„Zdd„ ZdS )rZ   Nc                 C   rÐ  rf   ©r9  rX  ©rô   r9  rX  ri   ri   rj   rõ   ˜  rÑ  zSQL.__init__c                 C   s2   |  | j¡ | jr| jD ]
}|j|ddd� q|S ©NF)rC  )r.  r9  rX  rÇ   ©rô   rF  rB  ri   ri   rj   r5  œ  s
   
zSQL.__sql__rf   r€  ri   ri   ri   rj   rZ   —  ó    
rZ   c                 C   s*   t d|  ƒ}|s
|S tt dƒt|ƒ|fƒS )Nz
CHECK (%s)Ú
CONSTRAINT)rZ   r4  r6   )Ú
constraintr†  Úcheckri   ri   rj   r#   ¤  s   r#   c                 C   s   t d|  ƒS )Nz
DEFAULT %s©rZ   r‘  ri   ri   rj   r/   «  r  r/   c                   @   sj   e Zd ZedƒZddd„Zdd„ Zejddd	„ƒZ	ejd
d„ ƒZ
ejddd„ƒZ		ddd„Zdd„ ZdS )ÚFunction)ÚsumÚcountÚavgr  Ú	array_aggTNc                 C   sD   || _ || _d | _d | _|| _|r| ¡ | jv rd| _d S || _d S rÄ   )r†  Ú	argumentsÚ_filterÚ	_order_byÚ_python_valuer™  Úno_coerce_functionsrk  )rô   r†  r¥  rl  Úpython_valueri   ri   rj   rõ   ²  s   

zFunction.__init__c                    ó   ‡ fdd„}|S )Nc                     s   t ˆ | fi |¤ŽS rf   )r   r´  ©r  ri   rj   Ú	decorator¾  r  z'Function.__getattr__.<locals>.decoratorri   )rô   r  r­  ri   r¬  rj   r  ½  r  zFunction.__getattr__c                 C   rñ   rf   )r¦  )rô   Úwhereri   ri   rj   ÚfilterÂ  r‡  zFunction.filterc                 G   rñ   rf   ©r§  )rô   Úorderingri   ri   rj   Úorder_byÆ  r‡  zFunction.order_byc                 C   rñ   rf   )r¨  )rô   Úfuncri   ri   rj   rª  Ê  r‡  zFunction.python_valuec           	   	   C   sP   t |tƒr|d u r|}|d urt|ƒ}nt||||||dd�}t| tdƒ|fƒS )NT)Úpartition_byr²  rA  ÚendÚ
frame_typeÚexcludeÚ_inlineÚOVER)rg   rd   ÚWindowAliasr4  rZ   )	rô   r´  r²  rA  rµ  r¶  Úwindowr·  rI  ri   ri   rj   ÚoverÎ  s   
þzFunction.overc                 C   sÆ   |  | j¡ t| jƒs|  d¡ n?| j}| jr+t|ƒ}t|d tdƒt| jƒfƒ|d< |dt| jƒd�� | 	t
dd„ |D ƒƒ¡ W d   ƒ n1 sKw   Y  | jd ura|  d¡ 	| j¡  d	¡ |S )
NrŒ  ru   úORDER BYT©Úin_functionÚfunction_arg_countc                 S   s$   g | ]}t |tƒr|nt|d ƒ‘qS r  )rg   r“  rb   )rÑ   Úargri   ri   rj   r†  ì  ó    ÿÿz$Function.__sql__.<locals>.<listcomp>z FILTER (WHERE r/  )r.  r†  rœ   r¥  r§  rÖ   r4  rZ   r  r9  rÿ  r¦  )rô   rF  rµ  ri   ri   rj   r5  Û  s"   

ÿþÿ
zFunction.__sql__)TNrf   ©NNNNNNN)rö   rü   rý   Úsetr©  rõ   r  r“  r|  r¯  r²  rª  r¼  r5  ri   ri   ri   rj   r   ¯  s    


ÿr   c                       sÈ   e Zd ZedƒZedƒZedƒZedƒZdZdZ	dZ
				d‡ fd
d„	Zddd„Zejdd„ ƒZejdd„ ƒZejdd„ ƒZejddd„ƒZejddd„ƒZeddd„ƒZeddd„ƒZdd„ Z‡  ZS ) rd   zCURRENT ROWÚGROUPÚTIESz	NO OTHERSÚGROUPSÚRANGEÚROWSNFc
           
         s¶   t t| ƒ ¡  |d urt|tƒst|ƒ}|d ur!t|tƒs!t|ƒ}t|tƒr*t|ƒ}t|ƒ| _t|ƒ| _|| _	|| _
| j	d u rH| j
d urHtdƒ‚|pKd| _|	| _|| _|| _|| _d S )Nz(Cannot specify WINDOW end without start.Úw)rÏ  rd   rõ   rg   rZ   r_  r’  r´  r²  rA  rµ  rå   r‚  r¸  r¶  Ú_extendsÚ_exclude)
rô   r´  r²  rA  rµ  r¶  Úextendsr·  r	  r¸  rÐ  ri   rj   rõ     s$   




zWindow.__init__c                 C   s   |pd| _ | S ©NrÊ  r„  rƒ  ri   ri   rj   r	    s   
zWindow.aliasc                 C   ó   t j| _d S rf   )rd   rÈ  r¶  r±  ri   ri   rj   Úas_range  ó   zWindow.as_rangec                 C   rÏ  rf   )rd   rÉ  r¶  r±  ri   ri   rj   Úas_rows#  rÑ  zWindow.as_rowsc                 C   rÏ  rf   )rd   rÇ  r¶  r±  ri   ri   rj   Ú	as_groups'  rÑ  zWindow.as_groupsc                 C   rñ   rf   )rË  ©rô   r»  ri   ri   rj   rÍ  +  r‡  zWindow.extendsc                 C   s   t |tƒr	t|ƒ}|| _d S rf   )rg   r_  rZ   rÌ  )rô   Úframe_exclusionri   ri   rj   r·  /  s   

zWindow.excludec                 C   ó   | d u rt dƒS t d|  ƒS )NzUNBOUNDED FOLLOWINGz%d FOLLOWINGrŸ  r‘  ri   ri   rj   Ú	following5  ó   zWindow.followingc                 C   rÖ  )NzUNBOUNDED PRECEDINGz%d PRECEDINGrŸ  r‘  ri   ri   rj   Ú	preceding;  rØ  zWindow.precedingc                 C   sŽ  |j tkr| js| t| jƒ¡ | d¡ |dd��£ g }| jd ur>| j}t|t	ƒr0t|jƒ}n	t|t
ƒr9t|ƒ}| |¡ | jrM| tdƒt| jƒf¡ | jr\| tdƒt| jƒf¡ | jd ur}| jd ur}| jpjd}| td| ƒ| jtdƒ| jf¡ n"| jd ur�| t| jp‰dƒ| jf¡ n| jd urŸ| td	| j ƒ¡ | jd ur®| td
ƒ| jf¡ | t|ƒ¡ W d   ƒ |S 1 sÀw   Y  |S )Nrž  Trü  zPARTITION BYr½  rÉ  z
%s BETWEENr  z%s UNBOUNDED PRECEDINGÚEXCLUDE)r  rM  r¸  r9  r6   r‚  r.  rË  rg   rd   r_  rÁ  r´  rD  rZ   r  r²  rA  rµ  r¶  rÌ  r4  )rô   rF  ÚpartsÚextÚframeri   ri   rj   r5  A  sR   




þþ

ü



âázWindow.__sql__)	NNNNNNNNFrf   )rö   rü   rý   rZ   ÚCURRENT_ROWrÅ  rÆ  Ú	NO_OTHERSrÇ  rÈ  rÉ  rõ   r	  r“  r|  rÐ  rÒ  rÓ  rÍ  r·  rr  r×  rÙ  r5  rÒ  ri   ri   rÐ  rj   rd   ø  s8    þ



rd   c                   @   rY  )rº  c                 C   rñ   rf   )r»  rÔ  ri   ri   rj   rõ   i  r  zWindowAlias.__init__c                 C   s   || j _| S rf   )r»  r‚  )rô   Úwindow_aliasri   ri   rj   r	  l  ó   zWindowAlias.aliasc                 C   s   |  t| jjpdƒ¡S rÎ  )r9  r6   r»  r‚  rE  ri   ri   rj   r5  p  rÝ  zWindowAlias.__sql__N)rö   rü   rý   rõ   r	  r5  ri   ri   ri   rj   rº  h  s    rº  c                   @   s   e Zd Zddd„Zdd„ ZdS )Ú_InFunctionTc                 C   rÐ  rf   )rI  r¿  )rô   rI  r¿  ri   ri   rj   rõ   u  rÑ  z_InFunction.__init__c                 C   s>   || j dd�� | | j¡W  d   ƒ S 1 sw   Y  d S )Nr   r¾  )r¿  r9  rI  rE  ri   ri   rj   r5  y  s   
$ÿz_InFunction.__sql__Nrp  r€  ri   ri   ri   rj   râ  t  r›  râ  c                   @   r–  )r    Nc                 C   ó   || _ || _|| _d S rf   )rö  Úexpression_tuplesÚdefault)rô   rö  rä  rå  ri   ri   rj   rõ     ó   
zCase.__init__c                 C   sº   t dƒg}| jd ur| | j¡ | jD ]\}}| t dƒ|t dƒt|ƒf¡ q| jd ur8| t dƒt| jƒf¡ | t dƒ¡ |dd�� | t|ƒ¡W  d   ƒ S 1 sVw   Y  d S )NÚCASEÚWHENÚTHENÚELSEÚENDF)r¿  )	rZ   rö  rÁ  rä  rD  râ  rå  r9  r4  )rô   rF  ÚclausesÚexprrÇ   ri   ri   rj   r5  „  s   

ÿ
$ÿzCase.__sql__rf   r€  ri   ri   ri   rj   r    ~  ó    
r    c                   @   r–  )Ú	ForUpdateNc                 C   s˜   |du rdn|}|  ¡  d¡r|d d… }d}n|  ¡  d¡r'|d d… }d}|r/|r/tdƒ‚|| _|d urAt|tttfƒsA|f}|| _|| _	|| _
d S )NTz
FOR UPDATEÚnowaitiùÿÿÿzskip lockediôÿÿÿzFOnly one of nowait and skip_locked may be used in a FOR UPDATE clause.)r™  rN  rå   Ú_exprrg   rÖ   rÄ  r�  Ú_ofÚ_nowaitÚ_skip_locked)rô   rí  Úofrð  Úskip_lockedri   ri   rj   rõ   “  s   
zForUpdate.__init__c                 C   sT   |  | j¡ | jd ur|  d¡ t| jƒ¡ | jr |  d¡ |S | jr(|  d¡ |S )Nz OF z NOWAITz SKIP LOCKED)r.  rñ  rò  r9  r  ró  rô  rE  ri   ri   rj   r5  §  s   

þ
zForUpdate.__sql__©NNNr€  ri   ri   ri   rj   rï  ’  s    
rï  c                   @   s   e Zd Zddd„Zdd„ ZdS )	r4  r‹   Fc                 C   rã  rf   )ÚnodesÚglueÚparens)rô   rø  rù  rú  ri   ri   rj   rõ   ³  ræ  zNodeList.__init__c                 C   sâ   t | jƒ}|dkr| jr| d¡S |S | jr6|dkr6t| jd tƒr6| jd js6| jd  ¡ f}d|d _n| j}|| jd��( t|d ƒD ]}| 	|| ¡ | | j
¡ qF| 	||d  ¡ W d   ƒ |S 1 sjw   Y  |S )Nr   rŒ  rt   Trü  )rœ   rø  rú  r.  rg   rE  r†  re  r  r9  rù  )rô   rF  Ún_nodesrø  Úiri   ri   rj   r5  ¸  s(   
ÿ
þ
üûzNodeList.__sql__N)r‹   Fr€  ri   ri   ri   rj   r4  ²  rî  r4  c                 C   ó
   t | dƒS )Nr|  ©r4  ©rø  ri   ri   rj   r  Í  r  r  c                 C   s   t | ddƒS )Nr|  Trþ  rÿ  ri   ri   rj   rÿ  Ñ  r  rÿ  c                   @   rs  )Ú
_Namespace©Ú_namec                 C   rñ   rf   r  r…  ri   ri   rj   rõ   ×  r  z_Namespace.__init__c                 C   rã  rf   )ÚNamespaceAttributer  ri   ri   rj   r  Ù  r  z_Namespace.__getattr__Nrw  ri   ri   ri   rj   r   Õ  s
    r   c                   @   r~  )r  c                 C   rÐ  rf   )Ú
_namespaceÚ
_attribute)rô   Ú	namespaceÚ	attributeri   ri   rj   rõ   Þ  rÑ  zNamespaceAttribute.__init__c                 C   s   |  | jjd ¡ t| jƒ¡S rX  )r.  r  r  r9  r6   r  rE  ri   ri   rj   r5  â  s   þzNamespaceAttribute.__sql__Nr€  ri   ri   ri   rj   r  Ý  ó    r  r7   c                       s2   e Zd Z‡ fdd„Zejdd„ ƒZdd„ Z‡  ZS )r5   c                    s   t t| ƒ ¡  || _d| _d S rÄ   )rÏ  r5   rõ   rG  Ú_negated©rô   rG  rÐ  ri   rj   rõ   ë  s   
zDQ.__init__c                 C   s   | j  | _ d S rf   )r	  r±  ri   ri   rj   r)  ð  ó   zDQ.__invert__c                 C   s   t di | j¤Ž}| j|_|S r#  )r5   rG  r	  rH  ri   ri   rj   re  ô  s   zDQ.clone)	rö   rü   rý   rõ   r“  r|  r)  re  rÒ  ri   ri   rÐ  rj   r5   ê  s
    
r5   c                  G   rÔ  rf   rþ  rÜ   ri   ri   rj   rk   ú  ó    c                       s(   e Zd Zef‡ fdd„	Zdd„ Z‡  ZS )rU   c                    r^  rf   )rÏ  rU   rõ   Ú_scope)rô   rI  r  rÐ  ri   rj   rõ   þ  r_  zQualifiedNames.__init__c                 C   s<   || j d�� | | j¡W  d   ƒ S 1 sw   Y  d S )Nr  )r  r9  rI  rE  ri   ri   rj   r5    s   
$ÿzQualifiedNames.__sql__)rö   rü   rý   rS  rõ   r5  rÒ  ri   ri   rÐ  rj   rU   ý  s    rU   c                 C   s   t | tƒr
t| tƒS | S rf   )rg   r  rU   r  ru  ri   ri   rj   Úqualify_names  s   

r  c                   @   s‚   e Zd Z			ddd„Zdd„ Zdd„ Zejdd	„ ƒZejdd
d„ƒZ	ejdd„ ƒZ
ejdd„ ƒZejdd„ ƒZejdd„ ƒZdS )Ú
OnConflictNc                 C   sN   || _ || _t|ƒ| _|| _|d ur|d urtdƒ‚t|ƒ| _|| _|| _d S )NzIonly one of "conflict_target" and "conflict_constraint" may be specified.)	Ú_actionÚ_updater’  Ú	_preserveÚ_whererå   Ú_conflict_targetÚ_conflict_whereÚ_conflict_constraint)rô   Úactionr	  Úpreserver®  Úconflict_targetÚconflict_whereÚconflict_constraintri   ri   rj   rõ     s   


zOnConflict.__init__c                 C   s"   |j jd u r
tdƒ‚|j  | |¡S )Nz=ON CONFLICT clause requires the query be bound to a database.)r"  Úconflict_statementrB   ©rô   rF  rG  ri   ri   rj   Úget_conflict_statement  s   z!OnConflict.get_conflict_statementc                 C   s   |j  | |¡S rf   )r"  Úconflict_updater  ri   ri   rj   Úget_conflict_update$  r  zOnConflict.get_conflict_updatec                 G   rñ   rf   )r  rˆ  ri   ri   rj   r  '  r‡  zOnConflict.preservec                 K   s:   |r|rt |tƒstdƒ‚|pi }|r| |¡ || _d S )NzGCannot mix data with keyword arguments in the OnConflict update method.)rg   rÕ   rå   r	  r  )rô   Ú_datar¶  ri   ri   rj   r	  +  s   

zOnConflict.updatec                 G   ó   t | j|ƒ| _d S rf   ©r�  r  ©rô   r�  ri   ri   rj   r®  5  ó   zOnConflict.wherec                 G   s   d | _ || _d S rf   ©r  r  )rô   Úconstraintsri   ri   rj   r  9  ó   
zOnConflict.conflict_targetc                 G   r"  rf   )r�  r  r$  ri   ri   rj   r  >  r%  zOnConflict.conflict_wherec                 C   ó   || _ d | _d S rf   r&  )rô   r�  ri   ri   rj   r  B  r(  zOnConflict.conflict_constraintrÃ  rf   )rö   rü   rý   rõ   r  r   r“  r|  r  r	  r®  r  r  r  ri   ri   ri   rj   r    s&    
þ
	


r  c                    s   t ˆ ƒd‡ fdd„	ƒ}|S )Nc                    s<   |d u r| j n|}|stdˆ j ƒ‚ˆ | |g|¢R i |¤ŽS )Nz8Query must be bound to a database in order to call "%s".)rT  rB   rö   )rô   rê  rµ  r¶  rÈ  ri   rj   r¸  I  s   ÿz database_required.<locals>.innerrf   r   rÊ  ri   rÈ  rj   Údatabase_requiredH  s   r*  c                       sâ   e Zd ZejZd)‡ fdd„	Zd)dd„Z‡ fdd„Ze	j
d*d	d
„ƒZe	j
d*dd„ƒZe	j
d*dd„ƒZe	j
d)dd„ƒZdd„ Zdd„ Zdd„ Zedd„ ƒZd)dd„Zdd„ Zd)dd„Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Z‡  ZS )+Ú	BaseQueryNc                    s2   || _ d | _d | _d | _tt| ƒjdi |¤Ž d S r#  )rT  Ú_cursor_wrapperÚ	_row_typeÚ_constructorrÏ  r+  rõ   )rô   rT  r¶  rÐ  ri   rj   rõ   W  s
   zBaseQuery.__init__c                 C   rß  rf   rà  rá  ri   ri   rj   rº  ^  râ  zBaseQuery.bindc                    s   t t| ƒ ¡ }d |_|S rf   )rÏ  r+  re  r,  r
  rÐ  ri   rj   re  b  s   zBaseQuery.cloneTc                 C   ó   |rt j| _d S d | _d S rf   )ÚROWrt  r-  )rô   Úas_dictri   ri   rj   Údictsg  ó   zBaseQuery.dictsc                 C   r/  rf   )r0  rs  r-  )rô   Úas_tupleri   ri   rj   Útuplesk  r3  zBaseQuery.tuplesc                 C   r/  rf   )r0  ru  r-  )rô   Úas_namedtupleri   ri   rj   Únamedtupleso  r3  zBaseQuery.namedtuplesc                 C   s   |rt jnd | _|| _d S rf   )r0  rv  r-  r.  ©rô   Úconstructorri   ri   rj   Úobjectss  s   
zBaseQuery.objectsc                 C   sd   | j p| j}|tjkrt|ƒS |tjkrt|ƒS |tjkr!t|ƒS |tj	kr,t
|| jƒS td| ƒ‚©NzUnrecognized row type: "%s".)r-  Údefault_row_typer0  rt  ÚDictCursorWrapperrs  ÚCursorWrapperru  ÚNamedTupleCursorWrapperrv  ÚObjectCursorWrapperr.  rå   ©rô   ÚcursorÚrow_typeri   ri   rj   Ú_get_cursor_wrapperx  s   



zBaseQuery._get_cursor_wrapperc                 C   rg  rf   rh  rE  ri   ri   rj   r5  †  r³  zBaseQuery.__sql__c                 C   s"   | j r	| j  ¡ }ntƒ }| | ¡S rf   )rT  rV  r'   rJ  )rô   Úcontextri   ri   rj   r9  ‰  s   
zBaseQuery.sqlc                 C   r?  rf   )Ú_executerá  ri   ri   rj   Úexecute�  r‡  zBaseQuery.executec                 Ã   s4   �|d u r| j n|}|stdƒ‚| | j|¡I d H S )Nz>Query must be bound to a database in order to call "aexecute".)rT  rB   ÚrunrG  rá  ri   ri   rj   Úaexecute”  s
   €zBaseQuery.aexecutec                 C   s&   | j d u r| | ¡}|  |¡| _ | j S rf   )r,  rG  rD  ©rô   rê  rB  ri   ri   rj   rF  ›  s   

zBaseQuery._executec                 C   s   t |  |¡ ¡ ƒS rf   )r©  rG  Úiteratorrá  ri   ri   rj   rK  ¡  r  zBaseQuery.iteratorc                 C   s(   | j d u r| jstdƒ‚|  ¡  d S d S )NzQuery has not been executed.)r,  rT  rå   rG  r±  ri   ri   rj   Ú_ensure_execution¤  s
   
ýzBaseQuery._ensure_executionc                 C   ó   |   ¡  t| jƒS rf   )rL  r©  r,  r±  ri   ri   rj   rV  ª  ó   
zBaseQuery.__iter__c                 C   sR   |   ¡  t|tƒr|j}n|}|d ur|dkr|d nd}| j |¡ | jj| S ©Nr   rt   )rL  rg   r@  rB  r,  Ú
fill_cacheÚ	row_cache)rô   rÇ   Úindexri   ri   rj   r  ®  s   
zBaseQuery.__getitem__c                 C   rM  rf   )rL  rœ   r,  r±  ri   ri   rj   Ú__len__¹  rN  zBaseQuery.__len__c                 C   rÔ  rf   )rY  r±  ri   ri   rj   Ú__str__½  rØ  zBaseQuery.__str__rf   rp  )rö   rü   rý   r0  rt  r<  rõ   rº  re  r“  r|  r2  r5  r7  r:  rD  r5  r9  r*  rG  rI  rF  rK  rL  rV  r  rS  rT  rÒ  ri   ri   rÐ  rj   r+  T  s4    



r+  c                       ó&   e Zd Zd‡ fdd„	Zdd„ Z‡  ZS )ÚRawQueryNc                    s&   t t| ƒjdi |¤Ž || _|| _d S r#  )rÏ  rV  rõ   r  Ú_params)rô   r9  rX  r¶  rÐ  ri   rj   rõ   Â  s   
zRawQuery.__init__c                 C   s0   |  | j¡ | jr| jD ]	}|j|dd� q|S r™  )r.  r  rW  rÇ   rš  ri   ri   rj   r5  Ç  s
   
zRawQuery.__sql__r  rg  ri   ri   rÐ  rj   rV  Á  ó    rV  c                       s¤   e Zd Zd‡ fdd„	Zejdd„ ƒZejdd„ ƒZejdd	„ ƒZejd
d„ ƒZ	ejdd„ ƒZ
ejddd„ƒZejddd„ƒZejddd„ƒZdd„ Zdd„ Z‡  ZS )ÚQueryNc                    s8   t t| ƒjdi |¤Ž || _|| _|| _|| _d | _d S r#  )rÏ  rY  rõ   r  r§  Ú_limitÚ_offsetr  )rô   r®  r²  ÚlimitÚoffsetr¶  rÐ  ri   rj   rõ   Ð  s   
zQuery.__init__c                 G   rñ   rf   )r  )rô   Úcte_listri   ri   rj   r  Ú  r‡  zQuery.with_ctec                 G   r"  rf   r#  r$  ri   ri   rj   r®  Þ  r%  zQuery.wherec                 G   s   t | j|tjƒ| _d S rf   )r�  r  ÚoperatorÚor_r$  ri   ri   rj   Úorwhereâ  ó   zQuery.orwherec                 G   rñ   rf   r°  ©rô   rù  ri   ri   rj   r²  æ  r‡  zQuery.order_byc                 G   s   | j pd| pd | _ d S r#  r°  rc  ri   ri   rj   Úorder_by_extendê  ó   zQuery.order_by_extendc                 C   rñ   rf   )rZ  rb  ri   ri   rj   r\  î  r‡  zQuery.limitc                 C   rñ   rf   )r[  rb  ri   ri   rj   r]  ò  r‡  zQuery.offseté   c                 C   s(   |dkr|d nd}|| _ || | _d S rO  )rZ  r[  )rô   ÚpageÚpaginate_byri   ri   rj   Úpaginateö  s   zQuery.paginatec                 C   s€   | j r| d¡ t| j ƒ¡ | jd us| jd ur0|jjr0| jd u r%|jjn| j}| d¡ |¡ | jd ur>| d¡ | j¡ |S )Nz
 ORDER BY z LIMIT z OFFSET )r§  r.  r9  r  rZ  r[  r"  Ú	limit_max)rô   rF  r\  ri   ri   rj   Ú_apply_orderingü  s   ÿ
zQuery._apply_orderingc                 C   sp   | j r6tdd„ | j D ƒƒ}|jdd�� | |rdnd¡ t| j ƒ¡ d¡ W d   ƒ |S 1 s1w   Y  |S )Nc                 s   s   � | ]}|j V  qd S rf   )r
  )rÑ   rš  ri   ri   rj   rÔ   	  s   € z Query.__sql__.<locals>.<genexpr>F©r,  zWITH RECURSIVE zWITH r‹   )r  r×   rR  r.  r9  r  )rô   rF  r•  ri   ri   rj   r5  		  s   

üûzQuery.__sql__©NNNNrf   )rf  )rö   rü   rý   rõ   r“  r|  r  r®  ra  r²  rd  r\  r]  ri  rk  r5  rÒ  ri   ri   rÐ  rj   rY  Ï  s(    





rY  c                    s   t ‡ ‡fdd„ƒ}|S )Nc                    s   ˆ r|| } }t | ˆ|ƒS rf   )ÚCompoundSelectQueryr®  ©rÁ  Ú	operationri   rj   rÉ  	  s   
z#__compound_select__.<locals>.method)r¾  )rp  rÁ  rÉ  ri   ro  rj   Ú__compound_select__	  s   rq  c                   @   st   e Zd Zedƒ ZZedƒ ZZedƒ ZZ	edƒ Z
Zeddd�Zeddd�Zeddd�Zeddd�Zdd„ Zd	S )
ÚSelectQueryú	UNION ALLÚUNIONÚ	INTERSECTÚEXCEPTTrÅ  c                 G   s@   |st dƒ‚t| f|ƒ | j¡}t| dd ƒd ur| | j¡}|S )Nz/select_from() must specify one or more columns.r  )rå   rY   rº  rT  r»   r:  r  r  ri   ri   rj   r  ,	  s   
ÿzSelectQuery.select_fromN)rö   rü   rý   rq  r  r  r  rÈ  Ú	intersectrÆ  Úexcept_rÇ  rË  rÍ  rÊ  rÌ  r  ri   ri   ri   rj   rr  "	  s    rr  c                   @   sˆ   e Zd Zdd„ Zeddd„ƒZeddd„ƒZedd	d
„ƒZedd„ ƒZdd„ Z	eddd„ƒZ
edd„ ƒZedd„ ƒZdd„ Zdd„ ZdS )Ú
SelectBasec                 C   s   t | j| jp	t| ƒfƒS rf   )r¨  rÑ  r‚  rú  r±  ri   ri   rj   r¦  9	  rå  zSelectBase._get_hashrt   c                 C   s.   |   |¡d |… }|r|dkr|d S |S d S rá   )rG  )rô   rê  ré   Úrowsri   ri   rj   Úpeek<	  s   ÿzSelectBase.peekc                 C   s$   | j |kr|| _ d | _| j||d�S )N)ré   )rZ  r,  r{  )rô   rê  ré   ri   ri   rj   rš  B	  s   
zSelectBase.firstFc                 C   s4   |r	|   ¡  |¡S |  ¡  |¡}|r|s|d S |S rû  )r2  rš  r5  )rô   rê  r4  r1  r  ri   ri   rj   ÚscalarI	  s   zSelectBase.scalarc                 c   s$   � |   ¡  |¡D ]}|d V  qd S rû  )r5  rG  )rô   rê  r  ri   ri   rj   ÚscalarsP	  s   €ÿzSelectBase.scalarsc                 C   rm  rÄ   ri   r±  ri   ri   rj   Ú_count_can_project_oneU	  ó   z!SelectBase._count_can_project_onec                 C   sR   |   ¡  d¡}|rd  |_|_| ¡ r| tdƒ¡}t|gt 	tdƒ¡gƒ 
|¡S )NÚ_wrappedÚ1)r²  r	  rZ  r[  r~  rŠ  rZ   rY   r;   ÚCOUNTr|  )rô   rê  Úclear_limitre  ri   ri   rj   r¢  Y	  s   zSelectBase.countc                 C   s(   |   tdƒ¡}d|_d |_t| |¡ƒS )Nr�  rt   )r‰  rZ   rZ  r[  rÉ   r|  )rô   rê  re  ri   ri   rj   Úexistsb	  s   zSelectBase.existsc                 C   s,   d | _ z|  |¡d W S  ty   Y d S w rû  )r,  rG  Ú
IndexErrorrá  ri   ri   rj   r  i	  s   ÿzSelectBase.getc                 C   s(   |j jr|j jdkrdS |jp|jtkS ©Nrt   F)r"  r¿  rÀ  r,  r  rM  rE  ri   ri   rj   Ú_subquery_parensq	  s   zSelectBase._subquery_parensc                 C   s0   |j js| jd u r|j js|j jr|S |  |¡S rf   )r"  r¿  r‚  r  Úin_projectionrŸ  rE  ri   ri   rj   Ú_apply_subquery_aliasw	  s   ÿÿ
z SelectBase._apply_subquery_aliasN©rt   ©FFr  )rö   rü   rý   r¦  r*  r{  rš  r|  r}  r~  r¢  r„  r  r‡  r‰  ri   ri   ri   rj   ry  8	  s&    


ry  c                       sn   e Zd Z‡ fdd„Zedd„ ƒZedd„ ƒZdd„ Zdd
d„Z	dd„ Z
ddd„Zddd„Z‡ fdd„Z‡  ZS )rn  c                    s$   t t| ƒ ¡  || _|| _|| _d S rf   )rÏ  rn  rõ   rô  rŽ  r  )rô   rô  rŽ  r  rÐ  ri   rj   rõ   ƒ	  ó   
zCompoundSelectQuery.__init__c                 C   r*  rf   )rô  Ú
_returningr±  ri   ri   rj   r�  ‰	  r+  zCompoundSelectQuery._returningc                 C   s*   t |  d¡ftdƒfƒ |¡}t| ¡ ƒS )Nrt   r�  )rY   r\  rZ   rº  rÉ   r|  )rô   rê  rG  ri   ri   rj   r„  �	  s   zCompoundSelectQuery.existsc                 C   s   t |jƒp|jd up|jd uS rf   )rÉ   r§  rZ  r[  ©rô   Úsubqri   ri   rj   Ú_self_wraps’	  s   ÿzCompoundSelectQuery._self_wrapsFc                 C   s‚   |   |¡rdS |r| jdko|j| jkS | jdkrdS |}t|tƒr?|j| jkr*dS |j}t|tƒr:|   |¡r:	 dS t|tƒs"dS )NTru  rv  F)r�  rŽ  rg   rn  rô  )rô   r�  rô  rI  ri   ri   rj   Ú_needs_group—	  s$   



ÿ
ùz CompoundSelectQuery._needs_groupc                 C   s>   t |tƒsdS |jdvs|  |¡rdS |  |j¡o|  |j¡S )NT©rt  rs  F)rg   rn  rŽ  r�  Ú_union_onlyrô  r  rŽ  ri   ri   rj   r“  ¯	  s
   
zCompoundSelectQuery._union_onlyc                 C   sä   |j j}|r
|tkr"t|tƒr|  ||¡rtS tS |  |¡r tS tS |tkr(t	S |t
kr?|j js4|j jr6tS t|tƒs=t	S tS |tkrpt|tƒrf|j jsP|j jr\| jdv r\|  |¡r\tS |  ||¡rdt	S tS |j jsp|j jspt	S tS )Nr’  )r"  Úcompound_select_parenthesesÚCSQ_PARENTHESES_NEVERrg   rn  r‘  ÚCSQ_WRAPr�  ÚCSQ_PARENTHESES_ALWAYSÚ
CSQ_PARENSÚCSQ_PARENTHESES_UNNESTEDr  r¿  ÚCSQ_FLATÚCSQ_PARENTHESES_GROUPEDrŽ  r“  )rô   rF  r�  rô  Úcsq_settingri   ri   rj   Ú_member_style·	  s<   
 
áã
ð

ÿþz!CompoundSelectQuery._member_stylec                 C   sb   |   |||¡}|tkr| d¡ |j|tkdd�� | |¡ W d   ƒ d S 1 s*w   Y  d S )NzSELECT * FROM F)r  r,  )r�  r–  r.  rL  rš  r9  )rô   rF  r�  rô  Ústyleri   ri   rj   Ú_member_sqlã	  s   
"ÿzCompoundSelectQuery._member_sqlc              	      s  |j tkr
|  |¡S tt| ƒ |¡ ||  |¡d��Z t|jj	ƒ}| j
|| jdd� | d| j ¡ | ¡ � |jj	 |¡ |  
|| j¡ W d   ƒ n1 sOw   Y  | ¡ � |  |¡ W d   ƒ n1 shw   Y  W d   ƒ n1 sww   Y  |  |¡S )Nrü  T)rô  r÷  )r  rS  r   rÏ  rn  r5  r‡  rÕ   r!  rþ  rŸ  rô  r.  rŽ  r4  r	  r  rP  rk  r‰  )rô   rF  Úouter_aliasesrÐ  ri   rj   r5  ê	  s"   


ý
	ÿ€ñ
zCompoundSelectQuery.__sql__r  )rö   rü   rý   rõ   ró  r�  r*  r„  r�  r‘  r“  r�  rŸ  r5  rÒ  ri   ri   rÐ  rj   rn  ‚	  s    




,rn  c                       s  e Zd Z			d)‡ fdd„	Z‡ fdd„Zejdd„ ƒZeZejdd	„ ƒZ	e
d
d„ ƒZejdd„ ƒZejdd„ ƒZejejdfdd„ƒZd*dd„Zejdd„ ƒZdd„ Zejdd„ ƒZejdd„ ƒZejdd„ ƒZej		d+dd„ƒZejd,d d!„ƒZd"d#„ Zd-d%d&„Z‡ fd'd(„Z‡  ZS ).rY   Nc	           
         s”   t t| ƒjdi |	¤Ž t|tƒrt|ƒn|pg | _|| _|| _|| _	|r(t|ƒnd | _
|| _|| _d  | _| _|rEt|tƒrB|| _n|| _d | _d S r#  )rÏ  rY   rõ   rg   r�  rÖ   Ú
_from_listr�  Ú	_group_byÚ_havingÚ_windowsÚ_for_updateÚ_lateralÚ	_distinctÚ_simple_distinctrÉ   r,  )
rô   Ú	from_listr‰  Úgroup_byÚhavingrE  ÚwindowsÚ
for_updateÚlateralr¶  rÐ  ri   rj   rõ   
  s$   ÿÿ

zSelect.__init__c                    s$   t t| ƒ ¡ }|jrt|jƒ|_|S rf   )rÏ  rY   re  r¡  rÖ   r¥  rÐ  ri   rj   re  
  s   zSelect.clonec                 G   rñ   rf   ©r�  rˆ  ri   ri   rj   r‰  #
  r‡  zSelect.columnsc                 G   s   t | jƒ| | _d S rf   )r�  r�  rˆ  ri   ri   rj   Úselect_extend(
  ó   zSelect.select_extendc                 C   r«  rf   r¯  r±  ri   ri   rj   Úselected_columns,
  ra  zSelect.selected_columnsc                 C   rñ   rf   r¯  rb  ri   ri   rj   r²  /
  r‡  c                 G   s   t |ƒ| _d S rf   )rÖ   r¡  ©rô   Úsourcesri   ri   rj   r  3
  r  zSelect.from_c                 C   sh   | j stdƒ‚| j  ¡ }|d u r'|tjks%|tjks%|tjkr't|ddƒr'd}| j  t	||||ƒ¡ d S )NúNo sources to join on.r¦  FT)
r¡  rå   rª  rE   ro  rp  rm  r»   rÁ  r�  )rô   rŽ  r�  r�  r(  ri   ri   rj   rƒ  7
  s   




ÿzSelect.joinc                 C   s   |   |tj|¡S rf   ©rƒ  rE   ri  r‘  ri   ri   rj   r’  E
  rs   zSelect.left_outer_joinc                    sV   g }|D ]!‰ t ˆ tƒr ˆ jstdƒ‚| ‡ fdd„ˆ jD ƒ¡ q| ˆ ¡ q|| _d S )NúQCannot pass a table to group_by() that does not have columns explicitly declared.c                    ræ  ri   ©r»   ©rÑ   Úcol_name©rÝ  ri   rj   r†  Q
  ó    ÿz#Select.group_by.<locals>.<listcomp>)rg   r\   r×  rå   rD  rÁ  r¢  ©rô   r‰  Úgroupingri   r»  rj   rª  H
  s   

ÿ
zSelect.group_byc                 G   s   t | jpdƒ| }| j|Ž S r#  )r�  r¢  rª  )rô   rù  rª  ri   ri   rj   Úgroup_by_extendW
  s   
zSelect.group_by_extendc                 G   r"  rf   )r�  r£  r$  ri   ri   rj   r«  [
  r%  zSelect.havingc                 G   sH   t |ƒdkr|d du s|d du r|d | _d | _d S d| _|| _d S )Nrt   r   TF)rœ   r¨  r§  rˆ  ri   ri   rj   rE  _
  s
   $


zSelect.distinctc                 G   sB   dd„ |D ƒ}t t|ƒƒt |ƒkrtdƒ‚|r|| _d S d | _d S )Nc                 S   ó   g | ]}|j ‘qS ri   r„  )rÑ   r»  ri   ri   rj   r†  j
  r‹  z!Select.window.<locals>.<listcomp>zLWindow definitions must have unique aliases. Use alias= to name each window.)rœ   rÄ  rå   r¤  )rô   r¬  Úaliasesri   ri   rj   r»  h
  s   zSelect.windowTc                 C   s:   |s|d us
|s
|rd}|sd | _ d S t||||ƒ| _ d S rK  )r¥  rï  )rô   r­  rõ  rð  rö  ri   ri   rj   r­  p
  s
   
zSelect.for_updatec                 C   rñ   rf   )r¦  )rô   r®  ri   ri   rj   r®  {
  r‡  zSelect.lateralc                 C   s2   | j d u o| jd u o| jd u o| jd u o| jduS rK  )r£  r¢  r¤  r§  r¨  r±  ri   ri   rj   r~  
  s   ÿÿþzSelect._count_can_project_oneFc                 C   s   |  t| jƒ¡S rf   )r9  r  r�  ©rô   rF  Úis_subqueryri   ri   rj   Ú__sql_selection__…
  rs   zSelect.__sql_selection__c              	      s,  |j tkr
|  |¡S | jr|j tkr| d¡ |j}|j tko#|jj }d ddd|  	|¡ddœ}|j
di |¤Ž�Ð tt| ƒ |¡ | d¡ | jsN| jd urd| d¡ | jrd| d¡ t| jƒ¡ d¡ |jdd	�� |  ||or| ¡}W d   ƒ n1 s~w   Y  | jr§|jdd
�� | d¡ t| jƒ¡ W d   ƒ n1 s¢w   Y  | jd urµ| d¡ | j¡ | jrÃ| d¡ t| jƒ¡ | jd urÑ| d¡ | j¡ | jd urã| d¡ | t| jƒ¡ |  |¡ | jd u�r|jjsötdƒ‚| d¡ | | j¡ W d   ƒ n	1 �sw   Y  |  |¡S )NzLATERAL FT)r=  r  r¿  rˆ  r  r,  zSELECT z	DISTINCT zON r‹   )rˆ  rü  ú FROM ú WHERE z
 GROUP BY z HAVING z WINDOW z3FOR UPDATE specified but not supported by database.ri   )r  rS  r   r¦  rM  r.  r,  r"  rˆ  r‡  rL  rÏ  rY   r5  r¨  r§  r9  rÿ  rN  rÄ  r¡  r  r  r¢  r£  r¤  rk  r¥  r­  rå   r‰  )rô   rF  rÃ  Ú	is_sourcer"  rÐ  ri   rj   r5  ˆ
  sd   


ú	


ÿÿÿ





€Ô
.zSelect.__sql__)NNNNNNNNrf   )TNNNrp  r  )rö   rü   rý   rõ   re  r“  r|  r‰  rŠ  r°  ró  r²  rc  r  rE   rh  rƒ  r’  rª  r¿  r«  rE  r»  r­  r®  r~  rÄ  r5  rÒ  ri   ri   rÐ  rj   rY   
  sL    þ









ÿ

rY   c                       sn   e Zd Zd‡ fdd„	Zddd„Zejdd„ ƒZd	d
„ Zdd„ Z	‡ fdd„Z
dd„ Zdd„ Z‡ fdd„Z‡  ZS )Ú_WriteQueryNc                    s4   || _ || _|r
dnd| _tt| ƒjdi |¤Ž d S )NTFri   )r8  r�  Ú_return_cursorrÏ  rÈ  rõ   )rô   r8  Ú	returningr¶  rÐ  ri   rj   rõ   Î
  s   z_WriteQuery.__init__Fc                 C   r“  r”  r—  r™  ri   ri   rj   rš  Ô
  r›  z_WriteQuery.ctec                 G   s   || _ |r
d| _d S d| _d S ©NTF)r�  rÉ  ©rô   rÊ  ri   ri   rj   rÊ  Ø
  s   z_WriteQuery.returningc                 C   sJ   | j r#| ¡ � | d¡ t| j ƒ¡ W d   ƒ |S 1 sw   Y  |S )Nz RETURNING )r�  rN  r.  r9  r  rE  ri   ri   rj   Úapply_returningÝ
  s   

ÿþz_WriteQuery.apply_returningc                 C   s(   | j r	|  |¡}n| | ¡}|  ||¡S rf   )r�  Úexecute_returningrG  Úhandle_resultrJ  ri   ri   rj   rF  ã
  s   
z_WriteQuery._executec                    s   t t| ƒ |¡S rf   )rÏ  rÈ  rF  rá  rÐ  ri   rj   rÎ  ê
  rs   z_WriteQuery.execute_returningc                 C   s   | j r|S | |¡S rf   )rÉ  Úrows_affectedrJ  ri   ri   rj   rÏ  í
  s   
z_WriteQuery.handle_resultc                 C   s   | j j|j| j < d S rf   )r8  rö   r!  rE  ri   ri   rj   Ú_set_table_aliasò
  rª  z_WriteQuery._set_table_aliasc                    s   t t| ƒ |¡ |  |¡ |S rf   )rÏ  rÈ  r5  rÑ  rE  rÐ  ri   rj   r5  õ
  s   
z_WriteQuery.__sql__rf   r¡  )rö   rü   rý   rõ   rš  r“  r|  rÊ  rÍ  rF  rÎ  rÏ  rÑ  r5  rÒ  ri   ri   rÐ  rj   rÈ  Í
  s    

rÈ  c                       s8   e Zd Zd‡ fdd„	Zejdd„ ƒZ‡ fdd„Z‡  ZS )	rñ  Nc                    s(   t t| ƒj|fi |¤Ž || _d | _d S rf   )rÏ  rñ  rõ   r  Ú_from)rô   r8  r	  r¶  rÐ  ri   rj   rõ   ÿ
  s   
zUpdate.__init__c                 G   rñ   rf   )rÒ  r³  ri   ri   rj   r    r‡  zUpdate.from_c              	      sž  t t| ƒ |¡ |jdd��· | d¡ g }t| j ¡ |jd�D ]?\}}t	|t
ƒs;t	|tƒr4| |¡}nt|dd�}nt	|tƒrJt	|tƒrJ| |¡}t	|tƒsSt|ƒ}| t|tdƒ|fƒ¡ q | | j¡ d¡ t|ƒ¡ | jr’|jdd	�� | d
¡ t| jƒ¡ W d   ƒ n1 s�w   Y  | jd ur´| ¡ � | d¡ | j¡ W d   ƒ n1 s¯w   Y  |  |¡ |  |¡W  d   ƒ S 1 sÈw   Y  d S )NTrl  zUPDATE ©rí  Frs  r"  z SET rü  rÅ  rÆ  )rÏ  rñ  r5  rP  r.  Úsortedr  rß   r)  rg   r“  r8   Úto_valuerb   rI   r<   r  rÁ  r4  rZ   r9  r8  r  rÒ  rN  r  rL  rk  rÍ  )rô   rF  r�  rÚ   rÛ   rÐ  ri   rj   r5    s:   




ÿ

ÿ
$ÞzUpdate.__sql__rf   )	rö   rü   rý   rõ   r“  r|  r  r5  rÒ  ri   ri   rÐ  rj   rñ  þ
  s
    
rñ  c                       sä   e Zd ZdZdZdZG dd„ deƒZd*‡ fdd„	Zd	d
„ Z	e
jd+dd„ƒZe
jd+dd„ƒZe
jd+dd„ƒZe
jdd„ ƒZdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zed d!„ ƒZ‡ fd"d#„Zd$d%„ Z‡ fd&d'„Zd(d)„ Z‡  ZS ),rë  r   rt   r›   c                   @   rô  )zInsert.DefaultValuesExceptionNrö  ri   ri   ri   rj   ÚDefaultValuesException4  r  rÖ  Nc                    s4   t t| ƒj|fi |¤Ž || _|| _|| _d| _d S rÄ   )rÏ  rë  rõ   Ú_insertr×  Ú_on_conflictÚ_as_rowcount)rô   r8  rê  r‰  rð  r¶  rÐ  ri   rj   rõ   6  s
   
zInsert.__init__c                 G   ó   t dƒ‚)Nz*INSERT queries cannot have a WHERE clause.rh  r$  ri   ri   rj   r®  >  rØ  zInsert.whereTc                 C   rñ   rf   )rÙ  )rô   rÙ  ri   ri   rj   Úas_rowcountA  r‡  zInsert.as_rowcountc                 C   ó   |r	t dƒ| _d S d | _d S )NÚIGNORE©r  rØ  )rô   Úignoreri   ri   rj   Úon_conflict_ignoreE  ó   zInsert.on_conflict_ignorec                 C   rÜ  ©Nrî  rÞ  )rô   ro   ri   ri   rj   Úon_conflict_replaceI  rá  zInsert.on_conflict_replacec                 O   s&   |s|rt |i |¤Ž| _d S d | _d S rf   rÞ  rÇ  ri   ri   rj   rð  M  s   ÿzInsert.on_conflictc                 C   s(   | j s|  ¡ s|  d¡‚|  | j f|¡S )NúError: no data to insert.)r×  Úget_default_datarÖ  Ú_generate_insertrE  ri   ri   rj   Ú_simple_insertR  s   
zInsert._simple_insertc                 C   s   i S rf   ri   r±  ri   ri   rj   rå  W  r³  zInsert.get_default_datac                    s"   ˆ j jr‡ fdd„ˆ j jD ƒS d S )Nc                    s$   g | ]}|ˆ j jkrtˆ j |ƒ‘qS ri   )r8  rØ  r»   ©rÑ   Úcolr±  ri   rj   r†  \  s    
ÿz.Insert.get_default_columns.<locals>.<listcomp>)r8  r×  r±  ri   r±  rj   Úget_default_columnsZ  r•  zInsert.get_default_columnsc                    sZ  t |ƒ}| j}|  ¡ }|sozt|ƒ}W n ty   |  d¡‚w t|tƒs2|  ¡ }|d u r1t	dƒ‚n3g }|D ]}t|t
ƒrCt| j|ƒ}| |¡ q6t|ƒ}	t|ƒ|	 D ]}
| |
¡ qSt|‡ fdd„d�}t t |fƒ|¡}n:g }tƒ }|D ]}t|t
ƒr„t| j|ƒ}n|}| |¡ | |¡ qv|}t|‡ fdd„d�D ]}
|
|vr¨| |
¡ q�tƒ }tƒ }i }|D ].}||jg}t|tƒrÝ|j|jkrË| |j¡ |jrÓ| |¡ t|tƒrÝ| |¡ |||< q³ˆ  t|ƒ¡ d¡ dd	„ |D ƒ}g }|D ]�}g }t|tƒ}t|ƒD ]x\}\}}z&|�r+|| D ]}z|| }W n t�y%   Y �qw  nt‚n|| }W n- ttf�y]   ||v �rL|| }t|ƒ�rK|ƒ }n||v �rTd }nt	d
|j ƒ‚Y nw t|tƒ�rot|t ƒ�rv||v �rvt!||dd�}| |¡ �q| t|ƒ¡ q÷|�s�|  d¡‚ˆ j"dd�� ˆ  t#|ƒ¡W  d   ƒ S 1 �s¦w   Y  d S )NzError: no rows to insert.z!Bulk insert must specify columns.c                    ó
   |   ˆ ¡S rf   r%  ©r¼  ©rF  ri   rj   rk   €  rl   z)Insert._generate_insert.<locals>.<lambda>rÓ  c                    rë  rf   r%  rì  rí  ri   rj   rk   Ž  rl   z VALUES c                 S   s$   g | ]}|t |tƒr|jnd f‘qS rf   )rg   r8   rˆ  rç  ri   ri   rj   r†  ¡  rÂ  z+Insert._generate_insert.<locals>.<listcomp>zMissing value for %s.F)r=  rp  rä  Trl  )$r©  r×  rå  ÚnextÚStopIterationrÖ  rg   r   rê  rå   r_  r»   r8  rÁ  rÄ  rÔ  r§  Úchainr  r†  r8   Úcolumn_nameÚnullr<   r9  rÿ  r.  Ú	enumerater   r…  Ú	callable_r“  rI   rb   rP  r  )rô   rê  rF  Ú	rows_iterr‰  Údefaultsr  ÚaccumrÝ  Ú
column_setré  Úclean_columnsÚseenÚ
column_objÚ	fk_fieldsÚnullable_columnsÚvalue_lookupsÚlookupsÚcolumns_convertersÚ
all_valuesrù  Úis_dictrü  r=  ÚlookupÚvalri   rí  rj   ræ  _  s¶   
ÿ
ÿ



€





þ
þ€

€
€ø


&ÿzInsert._generate_insertc                 C   s(   | j r| t| j ƒ¡ d¡ | | j¡S rŠ   )r×  r9  rÿ  r.  r×  rE  ri   ri   rj   Ú_query_insertÑ  s   zInsert._query_insertc                 C   s   | j s| d¡S | j  |¡S ©NzDEFAULT VALUES)rT  r.  Údefault_values_insertrE  ri   ri   rj   Ú_default_valuesÖ  s   
zInsert._default_valuesc                 C   s4   t | jtƒr| jstjS t | jttfƒrtjS tj	S rf   )
rg   r×  r   r×  rë  ÚSIMPLErr  rZ   ÚQUERYÚMULTIr±  ri   ri   rj   Ú_query_typeÛ  s
   zInsert._query_typec              	      sD  t t| ƒ |¡ | ¡ �Œ d }| jd ur| j || ¡}| |p"tdƒ¡ d¡ | j	¡ d¡ | j
}|tjkrMz|  |¡ W n! | jyL   |  |¡ Y nw |tjkrX|  |¡ n|  | j|¡ | jd urŒ| j || ¡}|d urŒ|dd�� | d¡ |¡ W d   ƒ n1 s‡w   Y  |  |¡W  d   ƒ S 1 s›w   Y  d S )NÚINSERTz INTO r‹   Trl  )rÏ  rë  r5  rP  rØ  r  r9  rZ   r.  r8  r  r	  rç  rÖ  r  r
  r  ræ  r×  r   rÍ  )rô   rF  ÚstmtÚ
query_typer	  rÐ  ri   rj   r5  ä  s8   


ÿ

ÿ$äzInsert.__sql__c                 C   s   | j jr	| j jfS d S rf   )r8  rØ  rÛ  r±  ri   ri   rj   Ú_pk_returning  s   
ÿzInsert._pk_returningc                    sh   | j r
| js	d | _n| jd u r|jr|  ¡ }|r|| _tj| _z	tt	| ƒ 
|¡W S  | jy3   Y d S w rf   )rÙ  rÉ  r�  Úreturning_clauser  r0  rs  r-  rÏ  rë  rF  rÖ  )rô   rê  rÊ  rÐ  ri   rj   rF    s   €ÿzInsert._executec                 C   s(   | j r|S | jr| |¡S | || j¡S rf   )rÉ  rÙ  rÐ  Úlast_insert_idr  rJ  ri   ri   rj   rÏ    s
   
zInsert.handle_resultr÷  rp  )rö   rü   rý   r	  r
  r  Ú	ExceptionrÖ  rõ   r®  r“  r|  rÛ  rà  rã  rð  rç  rå  rê  ræ  r  r  ró  r  r5  r  rF  rÏ  rÒ  ri   ri   rÐ  rj   rë  0  s6    
r
 rë  c                       ó   e Zd Z‡ fdd„Z‡  ZS )rò  c              	      sª   t t| ƒ |¡ |jdd��= | d¡ | j¡ | jd ur:| ¡ � | d¡ | j¡ W d   ƒ n1 s5w   Y  |  	|¡ |  
|¡W  d   ƒ S 1 sNw   Y  d S )NTrl  úDELETE FROM rÆ  )rÏ  rò  r5  rP  r.  r9  r8  r  rL  rk  rÍ  rE  rÐ  ri   rj   r5     s   

ÿ
$ùzDelete.__sql__)rö   rü   rý   r5  rÒ  ri   ri   rÐ  rj   rò    ó    rò  c                   @   s`   e Zd Z		ddd„Zejddd„ƒZejdd	„ ƒZejdd
d„ƒZejddd„ƒZ	dd„ Z
dS )r?   FNc	           	      C   sb   || _ t|tƒst|ƒn|| _|| _|| _|| _|| _|| _	|| _
| j
d ur-| js/tdƒ‚d S d S ©Nz-NULLS DISTINCT is only available with UNIQUE.)r  rg   r\   r6   Ú_tableÚ_expressionsr  Ú_uniqueÚ_safeÚ_usingÚ_nulls_distinctrå   )	rô   r†  r8  r�  ÚuniqueÚsafer®  ÚusingÚnulls_distinctri   ri   rj   rõ   .  s   ÿzIndex.__init__Tc                 C   rñ   rf   )r  )rô   r  ri   ri   rj   r  ;  r‡  z
Index.safec                 G   r"  rf   r#  r$  ri   ri   rj   r®  ?  r%  zIndex.wherec                 C   rñ   rf   )r  )rô   r  ri   ri   rj   r   C  r‡  zIndex.usingc                 C   s    |d ur| j stdƒ‚|| _d S r  )r  rå   r  )rô   r!  ri   ri   rj   r!  G  s   
zIndex.nulls_distinctc                 C   sl  | j rdnd}|jdd��Ÿ | |¡ | jr| d¡ |jjr8t| jtƒr8| jj	r8t
| jj	| jƒ}t
| jjƒ}nt
| jƒ}| j}| |¡ | jd urV|jjrV| d| j ¡ | d¡ |¡ d¡ | jd urr|jjsr| d	| j ¡ | td
d„ | jD ƒƒ¡ | jd urŽ| | jr‹dnd¡ | jd ur¤| d¡ | j¡ W d   ƒ |S W d   ƒ |S 1 s¯w   Y  |S )NzCREATE UNIQUE INDEX zCREATE INDEX Trl  úIF NOT EXISTS z	 USING %srø  r‹   z	USING %s c                 S   r  ri   )rg   r_  rZ   )rÑ   rí  ri   ri   rj   r†  l  ó    ÿÿz!Index.__sql__.<locals>.<listcomp>z NULLS DISTINCTz NULLS NOT DISTINCTrÆ  )r  rP  r.  r  r"  Úindex_schema_prefixrg   r  r\   rÙ  r6   r  rö   r9  r  Úindex_using_precedes_tablerÿ  r  r  r  )rô   rF  Ú	statementÚ
index_nameÚ
table_nameri   ri   rj   r5  M  sV   


ÿÿ


ÿ
ÿ
þ
ÿ

Û'ý
Ü'Ù'zIndex.__sql__)FFNNNrp  rf   )rö   rü   rý   rõ   r“  r|  r  r®  r   r!  r5  ri   ri   ri   rj   r?   -  s    
ÿ
r?   c                       s*   e Zd Z		d‡ fdd„	Zdd„ Z‡  ZS )	rJ   FTNc	           
   
      sn   || _ |d u r|  ||¡}|d u r#|D ]}	t|	tƒr"t|	dƒr"|	j}qtt| ƒj||j	j
||||||d� d S )NÚ
index_type)r†  r8  r�  r  r  r®  r   r!  )rÓ  Ú_generate_name_from_fieldsrg   r8   rï  r)  rÏ  rJ   rõ   r7  r8  )
rô   r  Úfieldsr  r  r®  r   r†  r!  ÚfieldrÐ  ri   rj   rõ   z  s$   €

øzModelIndex.__init__c                 C   s¨   g }|D ]*}t |tƒr| | ¡ d ¡ qt |tƒr#t |tƒs#| ¡ }t |tƒr.| |j¡ q|s5tdƒ‚t	 
ddd |¡¡}|j}|jrH|jn|j}td ||f¡ƒS )Nr   zJUnable to generate a name for the index, please explicitly specify a name.ú[^\w]+r^  r/  )rg   r_  rÁ  r”   r“  r8   ro  rñ  rå   rx   r—  rƒ  r7  Úlegacy_table_namesr†  r(  Ú_truncate_constraint_name)rô   r  r+  r÷  r,  Úclean_field_namesÚmetaÚprefixri   ri   rj   r*  �  s   

€z%ModelIndex._generate_name_from_fields)FTNNNN)rö   rü   rý   rõ   r*  rÒ  ri   ri   rÐ  rj   rJ   y  s
    ÿrJ   é@   c                 C   sD   t | ƒ|kr t |  d¡¡ ¡ }d| d |d … |d d… f } | S )Núutf-8ú%s_%srz  é   )rœ   ÚhashlibÚmd5ÚencodeÚ	hexdigest)r�  ÚmaxlenÚ	name_hashri   ri   rj   r/  ¢  s    r/  c                   @   sÂ   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zed	d
„ ƒZd/dd„Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Zd.S )0ÚBaseJSONMethodsc                 C   rñ   rf   ©rê  rá  ri   ri   rj   rõ   «  r  zBaseJSONMethods.__init__c                    r«  )Nc              	      s2   t | tƒrzˆ | ƒW S  ttfy   Y | S w | S rf   )rg   r_  rä   rå   r‘  ©rã   ri   rj   Úreader¯  s   

þz1BaseJSONMethods.make_value_reader.<locals>.readerri   )rô   rã   r@  ri   r?  rj   Úmake_value_reader®  s   z!BaseJSONMethods.make_value_readerc                 C   s
   |  |¡S rf   )rˆ  ©rô   r,  rÇ   ri   ri   rj   Úcompare_value¸  r‡  zBaseJSONMethods.compare_valuec                 C   s   t | |¡dd�S ©NFr<  )rb   Ú_dumpsrB  ri   ri   rj   Ú_contains_value¼  r  zBaseJSONMethods._contains_valuec                 C   s   | dk rd|  S d|  S )Nr   z[#%d]ú[%d]ri   ©r  ri   ri   rj   Ú_path_index¿  re  zBaseJSONMethods._path_indexr^  c                 C   sn   dg}|D ]#}t |tƒr| |  |¡¡ qt|ƒ dd¡ dd¡}| d| ¡ q| |¡ td |¡dd	�S )
Nú$r0  r1  rm   z\"z."%s"r^  Fr<  )rg   r“   rÁ  rI  r_  ro   rb   rƒ  )rô   ÚkeysÚsuffixrÛ  rÚ   ri   ri   rj   r©  Ã  s   

zBaseJSONMethods._pathc                 C   rg  rf   rh  ©rô   r,  rK  ri   ri   rj   ÚextractÎ  r³  zBaseJSONMethods.extractc                 C   rg  rf   rh  rM  ri   ri   rj   Úextract_textÐ  r³  zBaseJSONMethods.extract_textc                 C   rg  rf   rh  ©rô   rŸ   ri   ri   rj   Ú	cast_typeÒ  r³  zBaseJSONMethods.cast_typec                 C   ó   d S rf   ri   rB  ri   ri   rj   Úcast_for_caseÔ  s   zBaseJSONMethods.cast_for_casec                 C   rg  rf   rh  ©rô   r,  rK  rÇ   ri   ri   rj   rÄ  Ù  r³  zBaseJSONMethods.setc                 C   rg  rf   rh  rT  ri   ri   rj   rê  Û  r³  zBaseJSONMethods.insertc                 C   rg  rf   rh  rT  ri   ri   rj   ro   Ý  r³  zBaseJSONMethods.replacec                 C   rg  rf   rh  rT  ri   ri   rj   rÁ  ß  r³  zBaseJSONMethods.appendc                 C   rg  rf   rh  rM  ri   ri   rj   Úremoveá  r³  zBaseJSONMethods.removec                 C   rg  rf   rh  rB  ri   ri   rj   r	  ã  r³  zBaseJSONMethods.updatec                 C   rg  rf   rh  rM  ri   ri   rj   Úlengthå  r³  zBaseJSONMethods.lengthc                 C   rg  rf   rh  rT  ri   ri   rj   rK  é  r³  zBaseJSONMethods.containsc                 C   rg  rf   rh  rT  ri   ri   rj   Úcontained_byë  r³  zBaseJSONMethods.contained_byc                 C   rg  rf   rh  )rô   r,  rK  rí  ri   ri   rj   Úhas_keyí  r³  zBaseJSONMethods.has_keyc                 C   rg  rf   rh  ©rô   r,  rK  Úkey_listri   ri   rj   Úhas_keysï  r³  zBaseJSONMethods.has_keysc                 C   rg  rf   rh  rY  ri   ri   rj   Úhas_any_keysñ  r³  zBaseJSONMethods.has_any_keysN)r^  )rö   rü   rý   rõ   rA  rC  rF  rr  rI  r©  rN  rO  rQ  rS  rÄ  rê  ro   rÁ  rU  r	  rV  rK  rW  rX  r[  r\  ri   ri   ri   rj   r=  ©  s0    


r=  c                       s¤   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Z‡  ZS )%ÚSqliteJSONMethodsc                    s$   t t| ƒ |¡ tdk rtdƒ‚d S )N)r|   é&   r   z!JSONField requires Sqlite >= 3.38)rÏ  r]  rõ   Ú__sqlite_version__rL   rá  rÐ  ri   rj   rõ   õ  s   ÿzSqliteJSONMethods.__init__c                    r«  )Nc                    s   t  ˆ | ƒ¡S rf   )r;   râ   r‘  ©Údumpsri   rj   Úwrapperû  r  z5SqliteJSONMethods.make_value_wrapper.<locals>.wrapperri   ©rô   ra  rb  ri   r`  rj   Úmake_value_wrapperú  r  z$SqliteJSONMethods.make_value_wrapperc                 C   s>   |d u rt  tddd�¡S t|tttfƒrt  | |¡¡S |S )Nrò  Fr<  )r;   râ   rb   rg   rÕ   rÖ   rÉ   rE  rB  ri   ri   rj   Ú_wrap_valueÿ  s
   zSqliteJSONMethods._wrap_valuec                 C   ó   |rt |d|  |¡ƒS |S )Nz->©rE  r©  rM  ri   ri   rj   rN  
  ó   zSqliteJSONMethods.extractc                 C   rf  )Nz->>rg  rM  ri   ri   rj   rO    rh  zSqliteJSONMethods.extract_textc                 C   ó   dddœ| S )NrS  r`  ©r“   Úfloatri   rP  ri   ri   rj   rQ    r  zSqliteJSONMethods.cast_typec                 C   ó   t  ||  |¡|  ||¡¡S rf   ©r;   Újson_setr©  re  rT  ri   ri   rj   rÄ    ó
   
ýzSqliteJSONMethods.setc                 C   rl  rf   )r;   Újson_insertr©  re  rT  ri   ri   rj   rê    ro  zSqliteJSONMethods.insertc                 C   rl  rf   )r;   Újson_replacer©  re  rT  ri   ri   rj   ro     ro  zSqliteJSONMethods.replacec                 C   s   t  ||  |d¡|  ||¡¡S )Nz[#]rm  rT  ri   ri   rj   rÁ  %  s
   

ýzSqliteJSONMethods.appendc                 C   ó   t  ||  |¡¡S rf   )r;   Újson_remover©  rM  ri   ri   rj   rU  +  r  zSqliteJSONMethods.removec                 C   ó    |rt  ||  |¡¡S t  |¡S rf   )r;   Újson_array_lengthr©  rM  ri   ri   rj   rV  .  ó   
zSqliteJSONMethods.lengthc                 C   s   t  |t  | |¡¡¡S rf   )r;   Ú
json_patchrâ   rE  rB  ri   ri   rj   r	  3  re  zSqliteJSONMethods.updatec                 C   s*   t  |  ||¡|  ||¡¡}t|tjdƒS rý  )r;   Ú_pw_json_containsrN  rF  rE  rM   r!  ©rô   r,  rK  rÇ   Úcallri   ri   rj   rK  7  ó   
ÿzSqliteJSONMethods.containsc                 C   s*   t  |  ||¡|  ||¡¡}t|tjdƒS rý  )r;   rx  rF  rN  rE  rM   r!  ry  ri   ri   rj   rW  <  r{  zSqliteJSONMethods.contained_byc                 C   s*   |   t|ƒ|f ¡}tt ||¡tjd ƒS rf   )r©  r�  rE  r;   Ú	json_typerM   r-  )rô   r,  rK  rí  r‡  ri   ri   rj   rX  A  s   zSqliteJSONMethods.has_keyc                    ó   t tj‡ ‡‡fdd„|D ƒƒS )Nc                    ó   g | ]	}ˆ  ˆ ˆ|¡‘qS ri   ©rX  ©rÑ   rÚ   ©r,  rK  rô   ri   rj   r†  H  ó    z.SqliteJSONMethods.has_keys.<locals>.<listcomp>)r
   r_  Úand_rY  ri   r�  rj   r[  F  ó   ÿzSqliteJSONMethods.has_keysc                    r}  )Nc                    r~  ri   r  r€  r�  ri   rj   r†  L  r‚  z2SqliteJSONMethods.has_any_keys.<locals>.<listcomp>)r
   r_  r`  rY  ri   r�  rj   r\  J  r„  zSqliteJSONMethods.has_any_keys)rö   rü   rý   rõ   rd  re  rN  rO  rQ  rÄ  rê  ro   rÁ  rU  rV  r	  rK  rW  rX  r[  r\  rÒ  ri   ri   rÐ  rj   r]  ô  s&    r]  c                   @   s¬   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)S )*ÚPostgresqlJSONMethodsc                    s2   | j }|j}|j|jf‰|j‰‡ ‡‡fdd„}|S )Nc                    s   t | ˆƒr| S ˆ| ˆ d�S ©Nr`  )rg   r‘  ©ra  Ú
json_typesÚ	jsonb_clsri   rj   rb  T  s   
z9PostgresqlJSONMethods.make_value_wrapper.<locals>.wrapper)rê  Ú_adapterr|  Ú
jsonb_type)rô   ra  rW  Úadapterrb  ri   r‡  rj   rd  O  s   z(PostgresqlJSONMethods.make_value_wrapperc                 C   s   dd„ S )Nc                 S   r°  rf   ri   rb  ri   ri   rj   rk   ]  ó    z9PostgresqlJSONMethods.make_value_reader.<locals>.<lambda>ri   ©rô   rã   ri   ri   rj   rA  Z  s   z'PostgresqlJSONMethods.make_value_readerc                 C   s0   | j j}|j}t||j|fƒr|S |||jd�S r†  )rê  rŠ  r‹  rg   r|  rE  )rô   r,  rÇ   rŒ  r‰  ri   ri   rj   Ú_jsonb_wrap_  s
   z!PostgresqlJSONMethods._jsonb_wrapc                 C   s   dd„ |D ƒ}t t|dƒdƒS )Nc                 S   rý  ri   ©r_  r€  ri   ri   rj   r†  h  r  z5PostgresqlJSONMethods._path_array.<locals>.<listcomp>Fztext[])r!   r   )rô   rK  rÛ  ri   ri   rj   Ú_path_arrayf  s   z!PostgresqlJSONMethods._path_arrayc                 C   ó   |s|S t |d|  |¡ƒS )Nz#>©rE  r‘  rM  ri   ri   rj   rN  k  ó   zPostgresqlJSONMethods.extractc                 C   r’  )Nz#>>r“  rM  ri   ri   rj   rO  p  r”  z"PostgresqlJSONMethods.extract_textc                 C   ri  )NrS  úDOUBLE PRECISIONrj  ri   rP  ri   ri   rj   rQ  u  r  zPostgresqlJSONMethods.cast_typec                 C   s   t t| |¡ƒdƒS )NÚJSONB)r!   rb   rE  rB  ri   ri   rj   rS  x  rª  z#PostgresqlJSONMethods.cast_for_casec                 C   ó   t  ||  |¡|  ||¡d¡S rK  ©r;   Ú	jsonb_setr‘  r�  rT  ri   ri   rj   rÄ  {  s   
üzPostgresqlJSONMethods.setc                 C   s8   t d |  ||¡ ¡ t ||  |¡|  ||¡d¡fg|ƒS rK  )r    rN  rQ  r;   r™  r‘  r�  rT  ri   ri   rj   rê  ƒ  s   ÿÿÿüzPostgresqlJSONMethods.insertc                 C   r—  rÄ   r˜  rT  ri   ri   rj   ro   Œ  s   
üzPostgresqlJSONMethods.replacec                 C   s(   t  ||  t|ƒdg ¡|  ||¡d¡S )Nz-1T)r;   Újsonb_insertr‘  rÖ   r�  rT  ri   ri   rj   rÁ  “  s   
üzPostgresqlJSONMethods.appendc                 C   s   t |d|  |¡ƒS )Nz#-r“  rM  ri   ri   rj   rU  š  r  zPostgresqlJSONMethods.removec                 C   s    |rt  |  ||¡¡S t  |¡S rf   )r;   Újsonb_array_lengthrN  rM  ri   ri   rj   rV  �  rv  zPostgresqlJSONMethods.lengthc                 C   s   t |d|  ||¡ƒS )Nr4  )rE  r�  rB  ri   ri   rj   r	  ¢  r±  zPostgresqlJSONMethods.updatec                 C   ó    |   ||¡}t|d|  ||¡ƒS )Nz@>©rN  rE  r�  ©rô   r,  rK  rÇ   rô  ri   ri   rj   rK  ¦  ó   zPostgresqlJSONMethods.containsc                 C   rœ  )Nz<@r�  rž  ri   ri   rj   rW  ª  rŸ  z"PostgresqlJSONMethods.contained_byc                 C   s    |   ||¡}t|dt|dd�ƒS )Nr>  Fr<  )rN  rE  rb   )rô   r,  rK  rí  rô  ri   ri   rj   rX  ®  rŸ  zPostgresqlJSONMethods.has_keyc                 C   ó"   |   ||¡}t|dtt|ƒdƒƒS )Nz?&F©rN  rE  r   rÖ   ©rô   r,  rK  rZ  rô  ri   ri   rj   r[  ²  ó   zPostgresqlJSONMethods.has_keysc                 C   r   )Nz?|Fr¡  r¢  ri   ri   rj   r\  ¶  r£  z"PostgresqlJSONMethods.has_any_keysN)rö   rü   rý   rd  rA  r�  r‘  rN  rO  rQ  rS  rÄ  rê  ro   rÁ  rU  rV  r	  rK  rW  rX  r[  r\  ri   ri   ri   rj   r…  N  s*    	r…  c                   @   s²   e Zd Zd+dd„Zdd„ Zedd„ ƒZdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zd*S ),ÚMySQLJSONMethodsTc                 C   s$   | j jr|rt |¡S |S t|dƒS )NÚJSON)rê  Úmariadbr;   ÚJSON_COMPACTr!   )rô   rI  Úcompactri   ri   rj   Ú_as_json»  s   
zMySQLJSONMethods._as_jsonc                    r¿  )Nc                    s   ˆj tˆ | ƒdd�dd�S )NFr<  )r¨  )r©  rb   r‘  ©ra  rô   ri   rj   rb  Â  s   ÿz4MySQLJSONMethods.make_value_wrapper.<locals>.wrapperri   rc  ri   rª  rj   rd  Á  ó   z#MySQLJSONMethods.make_value_wrapperc                 C   s(   | dk r| dkr
dS d| d  S d|  S )Nr   ru   z[last]z[last%d]rt   rG  ri   rH  ri   ri   rj   rI  Ç  s   zMySQLJSONMethods._path_indexc                 C   s    |s|S |   t ||  |¡¡¡S rf   )r©  r;   Újson_extractr©  rM  ri   ri   rj   rN  Í  s   zMySQLJSONMethods.extractc                 C   s    |s|S t  t  ||  |¡¡¡S rf   )r;   Újson_unquoter¬  r©  rM  ri   ri   rj   rO  Ó  s   zMySQLJSONMethods.extract_textc                 C   ri  )NÚSIGNEDr_  rj  ri   rP  ri   ri   rj   rQ  Ø  r  zMySQLJSONMethods.cast_typec                 C   s8   |d u st |ttttfƒr|  |  ||¡¡S t|dd�S rD  )rg   rÕ   rÖ   rÉ   rk  r©  rF  rb   rB  ri   ri   rj   Ú_json_valueÛ  s   zMySQLJSONMethods._json_valuec                 C   s(   |d u s	t |tƒr|S |  |  ||¡¡S rf   )rg   r“  r©  rF  rB  ri   ri   rj   rC  ä  s   zMySQLJSONMethods.compare_valuec                 C   rl  rf   )r;   ÚJSON_SETr©  r¯  rT  ri   ri   rj   rÄ  ë  ó   
ÿzMySQLJSONMethods.setc                 C   rl  rf   )r;   ÚJSON_INSERTr©  r¯  rT  ri   ri   rj   rê  ï  r±  zMySQLJSONMethods.insertc                 C   rl  rf   )r;   ÚJSON_REPLACEr©  r¯  rT  ri   ri   rj   ro   ó  r±  zMySQLJSONMethods.replacec                 C   rl  rf   )r;   ÚJSON_ARRAY_APPENDr©  r¯  rT  ri   ri   rj   rÁ  ÷  r±  zMySQLJSONMethods.appendc                 C   rr  rf   )r;   ÚJSON_REMOVEr©  rM  ri   ri   rj   rU  û  r  zMySQLJSONMethods.removec                 C   rt  rf   )r;   ÚJSON_LENGTHr©  rM  ri   ri   rj   rV  þ  rv  zMySQLJSONMethods.lengthc                 C   s   t  ||  ||¡¡S rf   )r;   ÚJSON_MERGE_PATCHr¯  rB  ri   ri   rj   r	    s   zMySQLJSONMethods.updatec                 C   s>   |r|   |¡fnd}tj||  ||¡g|¢R Ž }t|tjdƒS )Nri   rt   )r©  r;   ÚJSON_CONTAINSrF  rE  rM   r!  )rô   r,  rK  rÇ   Ú	path_argsrz  ri   ri   rj   rK    s
   ÿzMySQLJSONMethods.containsc                 C   s6   |r|   ||¡n|}t |  ||¡|¡}t|tjdƒS rý  )rN  r;   r¸  rF  rE  rM   r!  )rô   r,  rK  rÇ   rô  rz  ri   ri   rj   rW    ó   zMySQLJSONMethods.contained_byc                 C   s0   |   t|ƒ|f ¡}t |d|¡}t|tjdƒS )NÚonert   )r©  r�  r;   ÚJSON_CONTAINS_PATHrE  rM   r!  )rô   r,  rK  rí  r‡  rz  ri   ri   rj   rX    s   zMySQLJSONMethods.has_keyc                    ó6   ‡ ‡fdd„|D ƒ}t j|dg|¢R Ž }t|tjdƒS )Nc                    ó    g | ]}ˆ  tˆ ƒ|f ¡‘qS ri   ©r©  r�  r€  ©rK  rô   ri   rj   r†    ó     z-MySQLJSONMethods.has_keys.<locals>.<listcomp>rÞ   rt   ©r;   r¼  rE  rM   r!  ©rô   r,  rK  rZ  Úpathsrz  ri   rÀ  rj   r[    rº  zMySQLJSONMethods.has_keysc                    r½  )Nc                    r¾  ri   r¿  r€  rÀ  ri   rj   r†     rÁ  z1MySQLJSONMethods.has_any_keys.<locals>.<listcomp>r»  rt   rÂ  rÃ  ri   rÀ  rj   r\    rº  zMySQLJSONMethods.has_any_keysNrp  )rö   rü   rý   r©  rd  rr  rI  rN  rO  rQ  r¯  rC  rÄ  rê  ro   rÁ  rU  rV  r	  rK  rW  rX  r[  r\  ri   ri   ri   rj   r¤  º  s,    

	r¤  c                       r  )ÚPeeweeExceptionc                    s>   |rt |d tƒr|d |dd … | _}tt| ƒj|Ž  d S rO  )rg   r  ÚorigrÏ  rÅ  rõ   )rô   rµ  rÐ  ri   rj   rõ   )  s   zPeeweeException.__init__©rö   rü   rý   rõ   rÒ  ri   ri   rÐ  rj   rÅ  (  r  rÅ  c                   @   rô  )r>   Nrö  ri   ri   ri   rj   r>   -  r  r>   c                   @   rô  )r)   Nrö  ri   ri   ri   rj   r)   .  r  r)   c                   @   rô  )r+   Nrö  ri   ri   ri   rj   r+   /  r  r+   c                   @   rô  )rA   Nrö  ri   ri   ri   rj   rA   0  r  rA   c                   @   rô  )rB   Nrö  ri   ri   ri   rj   rB   1  r  rB   c                   @   rô  )rC   Nrö  ri   ri   ri   rj   rC   2  r  rC   c                   @   rô  )rL   Nrö  ri   ri   ri   rj   rL   3  r  rL   c                   @   rô  )rN   Nrö  ri   ri   ri   rj   rN   4  r  rN   c                   @   rô  )rS   Nrö  ri   ri   ri   rj   rS   5  r  rS   c                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	ÚExceptionWrapper©Ú
exceptionsc                 C   rñ   rf   rÉ  )rô   rÊ  ri   ri   rj   rõ   :  r  zExceptionWrapper.__init__c                 C   rR  rf   ri   r±  ri   ri   rj   rÌ  <  r�  zExceptionWrapper.__enter__c                 C   sZ   |d u rd S |j | jvr|jd }|j | jv r+| j|j  }|j}||g|¢R Ž  |¡‚d S rû  )rö   rÊ  Ú	__bases__rµ  Úwith_traceback)rô   r1  Ú	exc_valueÚ	tracebackÚnew_typeÚexc_argsri   ri   rj   rÍ  =  s   
ýzExceptionWrapper.__exit__N)rö   rü   rý   rº  rõ   rÌ  rÍ  ri   ri   ri   rj   rÈ  8  s
    rÈ  ÚConstraintErrorÚ!IntegrityConstraintViolationErrorÚInternalClientErrorÚPostgresConnectionErrorÚSyntaxOrAccessErrorÚTransactionRollbackErrorÚUndefinedFunctionÚUniqueViolationÚIndexMetadata)r†  r9  r‰  r  r8  ÚColumnMetadata)r†  Ú	data_typerò  rÛ  r8  rå  Ú	full_typeÚidentityrÄ   )rö  ÚForeignKeyMetadata)rÝ  Ú
dest_tableÚdest_columnr8  r†  Ú	on_deleteÚ	on_updater÷  ÚViewMetadata)r†  r9  rV   )r9  rX  ÚdurationÚ	exceptionc                       r�  )Ú_ConnectionStatec                    s"   t t| ƒjdi |¤Ž |  ¡  d S r#  )rÏ  ræ  rõ   Úresetr  rÐ  ri   rj   rõ   q  r¤  z_ConnectionState.__init__c                 C   s"   d| _ d | _g | _g | _g | _d S rK  )ÚclosedÚconnrF  ÚtransactionsÚcommit_callbacksr±  ri   ri   rj   rç  u  ó
   
z_ConnectionState.resetc                 C   s"   || _ d| _g | _g | _g | _d S rÄ   )ré  rè  rF  rê  rë  ©rô   ré  ri   ri   rj   Úset_connection|  rì  z_ConnectionState.set_connection)rö   rü   rý   rõ   rç  rî  rÒ  ri   ri   rÐ  rj   ræ  p  s    ræ  c                   @   rô  )Ú_ConnectionLocalNrö  ri   ri   ri   rj   rï  „  r  rï  c                   @   r®  )Ú	_NoopLockri   c                 C   r°  rf   ri   r±  ri   ri   rj   rÌ  ‡  r�  z_NoopLock.__enter__c                 C   rR  rf   ri   r0  ri   ri   rj   rÍ  ˆ  r�  z_NoopLock.__exit__N)rö   rü   rý   rº  rÌ  rÍ  ri   ri   ri   rj   rð  …  s    rð  c                   @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )rÖ  ©rW  c                 C   rñ   rf   rñ  ©rô   rW  ri   ri   rj   rõ   �  r  zConnectionContext.__init__c                 C   s(   | j  ¡ r
| j  ¡  | j jj | ¡ d S rf   )rW  Ú	is_closedÚconnectÚ_staterF  rÁ  r±  ri   ri   rj   rÌ  �  s   

zConnectionContext.__enter__c                 C   s*   | j jj ¡  | j jjs| j  ¡  d S d S rf   )rW  rõ  rF  rª  Úcloser0  ri   ri   rj   rÍ  “  s   
ÿzConnectionContext.__exit__c                 C   ó   t | ƒ| jƒS rf   ©rð  rW  r±  ri   ri   rj   r²  —  r  zConnectionContext._build_ctxN)rö   rü   rý   rº  rõ   rÌ  rÍ  r²  ri   ri   ri   rj   rÖ  ‹  s    rÖ  c                   @   s²  e Zd ZeZi Zi ZdZdZdZ	dZ
eZeZdZdZdZdZdZdZdZdZdZdZdZ			d’dd„Zdd	„ Zd
d„ Zdd„ Zdd„ Zdd„ Zdd„ Z d“dd„Z!dd„ Z"dd„ Z#dd„ Z$dd„ Z%dd„ Z&d d!„ Z'd"d#„ Z(d$d%„ Z)d”d&d'„Z*d(d)„ Z+d*d+„ Z,d,d-„ Z-d”d.d/„Z.d0d1„ Z/d2d3„ Z0d4d5„ Z1d6d7„ Z2d8d9„ Z3d:d;„ Z4d<d=„ Z5d>d?„ Z6d@dA„ Z7d”dBdC„Z8dDdE„ Z9dFdG„ Z:dHdI„ Z;dJdK„ Z<dLdM„ Z=dNdO„ Z>dPdQ„ Z?dRdS„ Z@dTdU„ ZAdVdW„ ZBdXdY„ ZCdZd[„ ZDd\d]„ ZEd^d_„ ZFd`da„ ZGdbdc„ ZHddde„ ZIdfdg„ ZJdhdi„ ZKdjdk„ ZLdldm„ ZMd”dndo„ZNd”dpdq„ZOd”drds„ZPd”dtdu„ZQd”dvdw„ZRd”dxdy„ZSd”dzd{„ZTd|d}„ ZUd~d„ ZVd€d�„ ZWd‚dƒ„ ZXd„d…„ ZYd†d‡„ ZZdˆd‰„ Z[d•dŠd‹„Z\d•dŒd�„Z]dŽd�„ Z^e_d�d‘„ ƒZ`dS )–r(   Fr>  rv   NTc           	      K   s®   t t| jƒ| _t t| jƒ| _|r| j |¡ |r| j |¡ || _|| _	g | _
|r3tƒ | _t ¡ | _ntƒ | _tƒ | _|rAtdƒ |d urItdƒ i | _| j|fi |¤Ž d S )Nz¸Peewee no longer uses the "autorollback" option, as we always run in autocommit-mode now. This changes psycopg2's semantics so that the conn is not left in a transaction-aborted state.a^  Peewee no longer uses the "autocommit" option, as the semantics now require it to always be True. Because some database-drivers also use the "autocommit" parameter, you are receiving a warning so you may update your code and remove the parameter, as in the future, specifying autocommit could impact the behavior of the database driver you are using.)r€  ÚFIELDÚfield_typesÚ_field_typesrM   rl  Ú_operationsr	  ÚautoconnectÚthread_safeÚquery_hooksrï  rõ  Ú	threadingÚLockÚ_lockræ  rð  rî   Úconnect_paramsÚinit)	rô   rê  rþ  Úautorollbackrú  rl  Ú
autocommitrý  r¶  ri   ri   rj   rõ   ³  s(   	zDatabase.__init__c                 K   s2   |   ¡ s|  ¡  || _| j |¡ t|ƒ | _d S rf   )ró  rö  rê  r  r	  rÉ   Údeferred)rô   rê  r¶  ri   ri   rj   r  Ú  s
   zDatabase.initc                 C   r°  rf   ri   ©rô   Úmemori   ri   rj   Ú__deepcopy__á  r  zDatabase.__deepcopy__c                 C   s2   |   ¡ r|  ¡  |  ¡ }| ¡  | jj |¡ | S rf   )ró  rô  rÜ  rÌ  rõ  rF  rÁ  rE  ri   ri   rj   rÌ  å  s   zDatabase.__enter__c                 C   sJ   | j j ¡ }z| |||¡ W | j js|  ¡  d S d S | j js$|  ¡  w w rf   )rõ  rF  rª  rÍ  rö  )rô   r1  r2  r3  rF  ri   ri   rj   rÍ  î  s   ÿ
ÿzDatabase.__exit__c                 C   rÔ  rf   rÕ  r±  ri   ri   rj   r×  ö  rØ  zDatabase.connection_contextc                 C   rg  rf   rh  r±  ri   ri   rj   Ú_connectù  r³  zDatabase._connectc              	   C   sÔ   | j �] | jrtdƒ‚| jjs|r	 W d   ƒ dS tdƒ‚| j ¡  t�# | j |  	¡ ¡ | j
d u r:|  | jj¡ |  | jj¡ W d   ƒ n1 sKw   Y  W d   ƒ dS W d   ƒ dS 1 scw   Y  dS )Nú@Error, database must be initialized before opening a connection.FzConnection already opened.T)r  r  rB   rõ  rè  rN   rç  Ú__exception_wrapper__rî  r  Úserver_versionÚ_set_server_versionré  Ú_initialize_connection)rô   Úreuse_if_openri   ri   rj   rô  ü  s,   ú

ü
öû
öñzDatabase.connectc                 C   rR  rf   ri   rí  ri   ri   rj   r    r³  zDatabase._initialize_connectionc                 C   s
   d| _ d S rû  ©r  rí  ri   ri   rj   r    r  zDatabase._set_server_versionc              	   C   s¨   | j �G | jrtdƒ‚|  ¡ rtdƒ‚| jj }z"|r4t� |  | jj	¡ W d   ƒ n1 s/w   Y  W | j 
¡  n| j 
¡  w |W  d   ƒ S 1 sMw   Y  d S )Nr  z7Attempting to close database while transaction is open.)r  r  rB   Úin_transactionrN   rõ  rè  r  Ú_closeré  rç  )rô   Úis_openri   ri   rj   rö    s   
ÿ€$òzDatabase.closec                 C   s6   | j � | j ¡  W d   ƒ d S 1 sw   Y  d S rf   )r  rõ  rç  r±  ri   ri   rj   Údispose%  s   "ÿzDatabase.disposec                 C   ó   |  ¡  d S rf   )rö  rí  ri   ri   rj   r  )  r  zDatabase._closec                 C   r*  rf   ©rõ  rè  r±  ri   ri   rj   ró  ,  rØ  zDatabase.is_closedc                 C   s
   | j j S rf   r  r±  ri   ri   rj   Úis_connection_usable/  r  zDatabase.is_connection_usablec                 C   s   |   ¡ r|  ¡  | jjS rf   )ró  rô  rõ  ré  r±  ri   ri   rj   Ú
connection2  s   zDatabase.connectionc                 C   s,   |   ¡ r| jr|  ¡  ntdƒ‚| jj ¡ S )Nz&Error, database connection not opened.)ró  rý  rô  rB   rõ  ré  rB  )rô   Únamed_cursorri   ri   rj   rB  7  s
   
zDatabase.cursorc                 C   s"   t  tj¡rt  ||f¡ d S d S rf   )ÚloggerÚisEnabledForÚloggingÚDEBUGÚdebugr˜  ri   ri   rj   Ú
_log_query?  ó   ÿzDatabase._log_queryc                 C   s.   t ||t ¡ | |ƒ}| jD ]}||ƒ qd S rf   )rV   r    Úperf_counterrÿ  )rô   r9  rX  rA  ÚexcÚeventÚhookri   ri   rj   Ú_notify_hooksC  s   

ÿzDatabase._notify_hooksc              
   K   s¶   |   ||¡ | jrt ¡ nd }z$t� | jdi |¤Ž}| ||p!d¡ W d   ƒ n1 s-w   Y  W n tyL } z|d urG|  ||||¡ ‚ d }~ww |d urY|  |||d ¡ |S r#  )	r!  rÿ  r    r#  r  rB  rG  r  r'  )rô   r9  rX  Úcursor_optionsrA  rB  r$  ri   ri   rj   Ú_execute_cursorH  s"   þ€€ýzDatabase._execute_cursorc                 C   s   |   ||¡S rf   )r)  r˜  ri   ri   rj   Úexecute_sqlW  r  zDatabase.execute_sqlc                 K   s.   | j di |¤Ž}| |¡ ¡ \}}|  ||¡S r#  )rV  r9  rG  r*  )rô   rG  Úcontext_optionsrF  r9  rX  ri   ri   rj   rG  Z  s   zDatabase.executec                 C   s:   | j | j| j| j| j| j| j| j| j| j	| j
| j| jdœS )N)rú  rl  rB  rˆ  r”  r  r  r­  r$  r%  rj  r~  rŽ  )rû  rü  rB  rˆ  r”  r  r  r­  r$  r%  rj  r~  rŽ  r±  ri   ri   rj   Úget_context_options_  s   ózDatabase.get_context_optionsc                 K   s&   |   ¡ }|r| |¡ | jdi |¤ŽS r#  )r,  r	  Úcontext_class)rô   r+  rE  ri   ri   rj   rV  p  s   
zDatabase.get_sql_contextc                 C   rg  rf   rh  ©rô   rð  rG  ri   ri   rj   r  v  r³  zDatabase.conflict_statementc                 C   rg  rf   rh  r.  ri   ri   rj   r  y  r³  zDatabase.conflict_updatec                 C   sˆ   g }|j  ¡ D ]:\}}t|tƒs-t|tƒrt|j|ƒ}t|tƒr&| |¡}nt	|dd�}n|r3t
|ƒ}| tt|ƒtdƒ|fƒ¡ q|S )NFrs  r"  )r  rß   rg   r“  r_  r»   r8  r8   rÕ  rb   r  rÁ  r4  r”  rZ   )rô   rð  rG  Úqualifyrß   rÚ   rÛ   ri   ri   rj   Ú_conflict_update_items|  s   


zDatabase._conflict_update_itemsc                 C   s~   |j r$tdd„ |j D ƒƒ}|jd urt|tdƒ|jgƒ}ttdƒ|gƒS |jr;|j}t|tƒr3t|ƒ}ttdƒ|gƒS tdƒS )Nc                 S   r  ri   r  rè  ri   ri   rj   r†  �  r#  z6Database._build_on_conflict_target.<locals>.<listcomp>rx  zON CONFLICTzON CONFLICT ON CONSTRAINT)	r  rÿ  r  r4  rZ   r  rg   r_  r6   )rô   rð  Útargetr�  ri   ri   rj   Ú_build_on_conflict_target�  s   þ

ÿ
z"Database._build_on_conflict_targetc                 C   s¬   g }|j r'|j D ]}ttdƒt|ƒfdd�}tt|ƒtdƒ|fƒ}| |¡ q|jr5| | j||dd�¡ |  |¡tdƒt	|ƒg}|j
d urR| tdƒt|j
ƒf¡ t|ƒS )	Nr7   r�  ©rù  r"  T©r/  zDO UPDATE SETrx  )r  r4  rZ   r”  rÁ  r  rD  r0  r2  r  r  r  )rô   rð  rG  ÚupdatesrÝ  ÚexcludedÚ
expressionrÛ  ri   ri   rj   Ú_build_on_conflict_update�  s(   
ÿÿÿÿ
z"Database._build_on_conflict_updatec                 C   ó   |j S rf   )Ú	lastrowid©rô   rB  ri   ri   rj   Ú_last_insert_rowid²  r­  zDatabase._last_insert_rowidc                 C   sj   | j s|  |¡S |tjkr3z|d }t|tƒr t|ƒdkr |W S |d W S  ttt	t
fy2   Y d S w |S rO  )r  r<  rë  r	  rg   r�  rœ   r  r…  r   rä   )rô   rB  r  r  ri   ri   rj   r  µ  s   


ÿzDatabase.last_insert_idc                 C   s$   z|j W S  ty   |jj  Y S w rf   )Úrowcountr  rB  r;  ri   ri   rj   rÐ  Â  s
   ÿzDatabase.rows_affectedc                 C   ó
   |  d¡S r  ©r.  rE  ri   ri   rj   r  È  r  zDatabase.default_values_insertc                 C   ó   |   ¡  ¡ S rf   )rã  rÌ  r±  ri   ri   rj   Úsession_startË  r  zDatabase.session_startc                 C   ó6   z|   ¡ }W n
 ty   Y dS w |j|  ¡ d� dS ©NF©ÚbeginT)Úpop_transactionr…  Úcommitr  ©rô   Útxnri   ri   rj   Úsession_commitÎ  ó   ÿzDatabase.session_commitc                 C   rB  rC  )rF  r…  Úrollbackr  rH  ri   ri   rj   Úsession_rollbackÖ  rK  zDatabase.session_rollbackc                 C   ó   t | jjƒS rf   )rÉ   rõ  rê  r±  ri   ri   rj   r  Þ  r  zDatabase.in_transactionc                 C   s   | j j |¡ d S rf   )rõ  rê  rÁ  )rô   rã  ri   ri   rj   Úpush_transactioná  r  zDatabase.push_transactionc                 C   s   | j j ¡ S rf   )rõ  rê  rª  r±  ri   ri   rj   rF  ä  r  zDatabase.pop_transactionc                 C   rN  rf   )rœ   rõ  rê  r±  ri   ri   rj   Útransaction_depthç  r  zDatabase.transaction_depthc                 C   s   | j jr
| j jd S d S ©Nru   )rõ  rê  r±  ri   ri   rj   Útop_transactionê  s   ÿzDatabase.top_transactionc                 C   s>   t |  ¡ tƒrtdƒ‚|  ¡ dkr|ƒ  |S | jj |¡ |S )Nz+after_commit() cannot be used with `manual`r   )rg   rR  rß  rå   rP  rõ  rë  rÁ  ró   ri   ri   rj   Úafter_commitî  s   ÿzDatabase.after_commitc                 C   s:   | j j}|rt|ƒg }|d d …< |D ]}|ƒ  qd S d S rf   )rõ  rë  rÖ   )rô   Ú	callbacksÚtodor;   ri   ri   rj   Ú_run_commit_callbacks÷  s   ýzDatabase._run_commit_callbacksc                 C   s   | j jd d …= d S rf   )rõ  rë  r±  ri   ri   rj   Ú_clear_commit_callbacksþ  r  z Database._clear_commit_callbacksc                 O   rÙ  rf   rÚ  rÇ  ri   ri   rj   rÜ    rÝ  zDatabase.atomicc                 C   rÔ  rf   rÞ  r±  ri   ri   rj   rà    rØ  zDatabase.manual_commitc                 O   rÙ  rf   rá  rÇ  ri   ri   rj   rã    rÝ  zDatabase.transactionc                 C   rÔ  rf   rä  r±  ri   ri   rj   ræ  
  rØ  zDatabase.savepointc                 C   s8   t � |  ¡  d¡ W d   ƒ d S 1 sw   Y  d S )NÚBEGIN©r  rB  rG  r±  ri   ri   rj   rE    s   "ÿzDatabase.beginc                 C   óH   |   ¡ rtdƒ‚t� |  ¡  d¡ W d   ƒ d S 1 sw   Y  d S )Nz.Cannot rollback, database connection not open.ÚROLLBACK©ró  rB   r  rB  rG  r±  ri   ri   rj   rL    ó
   "ÿzDatabase.rollbackc                 C   rZ  )Nz,Cannot commit, database connection not open.ÚCOMMITr\  r±  ri   ri   rj   rG    r]  zDatabase.commitc              	   c   sN   � t ||ƒD ]}|  ¡ � |D ]}|V  qW d   ƒ n1 sw   Y  qd S rf   )r$   rÜ  )rô   r«  ré   rž  r¼  ri   ri   rj   Úbatch_commit  s   €
ÿÿ€ÿzDatabase.batch_commitc                 C   s,   t |ƒr|}|jj}|jj}|| j|d�v S )N)rÜ  )r6  r7  r(  rÜ  Ú
get_tables)rô   r(  rÜ  r  ri   ri   rj   Útable_exists%  s
   zDatabase.table_existsc                 C   rg  rf   rh  )rô   rÜ  ri   ri   rj   r`  ,  r³  zDatabase.get_tablesc                 C   rg  rf   rh  ©rô   r8  rÜ  ri   ri   rj   Úget_indexes/  r³  zDatabase.get_indexesc                 C   rg  rf   rh  rb  ri   ri   rj   Úget_columns2  r³  zDatabase.get_columnsc                 C   rg  rf   rh  rb  ri   ri   rj   Úget_primary_keys5  r³  zDatabase.get_primary_keysc                 C   rg  rf   rh  rb  ri   ri   rj   Úget_foreign_keys8  r³  zDatabase.get_foreign_keysc                 C   rg  rf   rh  )rô   ÚseqrÜ  ri   ri   rj   Úsequence_exists;  r³  zDatabase.sequence_existsc                 K   s"   t |ƒD ]
}|jdi |¤Ž qd S r#  )Úsort_modelsÚcreate_table)rô   ÚmodelsÚoptionsr  ri   ri   rj   Úcreate_tables>  r"  zDatabase.create_tablesc                 K   s&   t t|ƒƒD ]
}|jdi |¤Ž qd S r#  )r  ri  Ú
drop_table)rô   rk  r¶  r  ri   ri   rj   Údrop_tablesB  s   ÿzDatabase.drop_tablesc                 C   rg  rf   rh  ©rô   Ú	date_partÚ
date_fieldri   ri   rj   Úextract_dateF  r³  zDatabase.extract_datec                 C   rg  rf   rh  rp  ri   ri   rj   Útruncate_dateI  r³  zDatabase.truncate_datec                 C   rg  rf   rh  ©rô   rr  ri   ri   rj   Úto_timestampL  r³  zDatabase.to_timestampc                 C   rg  rf   rh  ru  ri   ri   rj   Úfrom_timestampO  r³  zDatabase.from_timestampc                 C   ó   t  ¡ S rf   )r;   Úrandomr±  ri   ri   rj   ry  R  rØ  zDatabase.randomc                 C   s   |D ]
}|j | ||d� qd S )N)Ú	bind_refsÚbind_backrefs)rº  )rô   rk  rz  r{  r  ri   ri   rj   rº  U  ó   ÿzDatabase.bindc                 C   s   t || ||ƒS rf   ©Ú_BoundModelsContext)rô   rk  rz  r{  ri   ri   rj   rä  Y  r  zDatabase.bind_ctxc                 C   r>  )NzSELECT 0 WHERE 0r?  rE  ri   ri   rj   Úget_noop_select\  r  zDatabase.get_noop_selectc                    rç  )NrÓ  c                       rè  )zDatabase.Model.<locals>.MetaNré  ri   r±  ri   rj   rë  b  rì  rë  rí  rî  rñ  ri   r±  rj   rI   _  rò  zDatabase.Model)TFNNNTr  rf   ©TT)arö   rü   rý   r'   r-  rú  rl  rŽ  rB  rˆ  r  r=  Újson_methodsr•  r”  r­  r$  r%  Úindex_value_literalsrj  r~  r  Úsafe_create_indexÚsafe_drop_indexÚ	sequencesÚtruncate_tablerõ   r  r
  rÌ  rÍ  r×  r  rô  r  r  rö  r  r  ró  r  r  rB  r!  r'  r)  r*  rG  r,  rV  r  r  r0  r2  r8  r<  r  rÐ  r  rA  rJ  rM  r  rO  rF  rP  rR  rS  rV  rW  rÜ  rà  rã  ræ  rE  rL  rG  r_  ra  r`  rc  rd  re  rf  rh  rm  ro  rs  rt  rv  rw  ry  rº  rä  r  ró  rI   ri   ri   ri   rj   r(   ›  s¾    
þ'	



	








r(   c                    s"   ‡ fdd„}‡ fdd„}t ||ƒS )Nc                    rë  rf   ©Úpragmar±  ©r†  ri   rj   rú   h  r  z__pragma__.<locals>.__get__c                    s   |   ˆ |¡S rf   r‡  rb  r‰  ri   rj   Ú__set__j  r  z__pragma__.<locals>.__set__)ró  )r†  rú   rŠ  ri   r‰  rj   Ú
__pragma__g  s   
r‹  c                       sV  e Zd ZejejejejdejejdœZdddœZ	dZ
dZdZeZdZeZ			dn‡ fd
d„	Zdo‡ fdd„	Zdd„ Zdd„ Zdd„ Zdd„ Zedd	fdd„ZedƒZedƒZedƒZedƒZedƒZedƒZ edƒZ!ed ƒZ"ed!ƒZ#ed"ƒZ$ed#ƒZ%ed$ƒZ&e'd%d&„ ƒZ(e(j)d'd&„ ƒZ(d(d)„ Z*d*d+„ Z+d,d-„ Z,d.d/„ Z-dpd0d1„Z.dpd2d3„Z/dqd4d5„Z0dqd6d7„Z1			drd8d9„Z2drd:d;„Z3dpd<d=„Z4dpd>d?„Z5d@dA„ Z6dBdC„ Z7dDdE„ Z8dFdG„ Z9dHdI„ Z:dJdK„ Z;dLdM„ Z<dNdO„ Z=dPdQ„ Z>dqdRdS„Z?dqdTdU„Z@dqdVdW„ZAdqdXdY„ZBdqdZd[„ZCdqd\d]„ZDdqd^d_„ZEd`da„ ZFdbdc„ ZGddde„ ZHdfdg„ ZIdhdi„ ZJdjdk„ ZKdldm„ ZL‡  ZMS )sr[   rc  )rT  rU  rW  r_  r¥  rX  re  ÚGLOBr.  )r.  r/  Tru   FNc                    sÞ   |  dd ¡}|d urtdƒ‚|pd| _|| _tt| ƒj|g|¢R i |¤Ž i | _i | _i | _	i | _
tƒ | _i | _| jdk| _|  tdd¡ |  tdd¡ |  tdd¡ |r\|  td	d¡ |rmd
dlm}	m}
 |	| |
ƒ d S d S )NÚisolation_levelz/isolation_level must be None when using peewee.ri   )r|   é   r   rq  r›   Ú
date_truncrx  rI  r   )Úregister_udf_groupsÚRANK)rª  r>   Ú_pragmasÚ
_lock_typerÏ  r[   rõ   Ú_aggregatesÚ_collationsÚ
_functionsÚ_window_functionsrÄ  Ú_extensionsÚ	_attachedr  r~  Úregister_functionrÀ   rÃ   rê   rÈ   Úplayhouse.sqlite_udfr�  r‘  )rô   rê  ÚpragmasÚregexp_functionÚrank_functionsÚ	lock_typerµ  r¶  Ú	isolationr�  r‘  rÐ  ri   rj   rõ   ‚  s,   
þzSqliteDatabase.__init__rr  c                    sl   |d ur|| _ t| j tƒrt| j  ¡ ƒ| _ |d ur%tdk r"t d¡ || _|| _	t
t| ƒj|fi |¤Ž d S )N)r|   é#   r   z.RETURNING clause requires Sqlite 3.35 or newer)r’  rg   rÕ   rÖ   rß   r_  rë   rì   r  Ú_timeoutrÏ  r[   r  )rô   rê  rœ  Útimeoutr  r¶  rÐ  ri   rj   r  œ  s   
zSqliteDatabase.initc                 C   sX   t d u rtdƒ‚t j| jf| jd dœ| j¤Ž}z|  |¡ W |S  ty+   | ¡  ‚ w )NzSQLite driver not installed!)r£  r�  )	Úsqlite3r>   rô  rê  r¢  r  Ú_add_conn_hooksr  rö  rí  ri   ri   rj   r  ©  s   ÿÿýþzSqliteDatabase._connectc                 C   sj   | j r|  |¡ | jr|  |¡ |  |¡ |  |¡ |  |¡ | jdkr)|  |¡ | j	r3|  
|¡ d S d S )N)r|   é   r   )r™  Ú_attach_databasesr’  Ú_set_pragmasÚ_load_aggregatesÚ_load_collationsÚ_load_functionsr  Ú_load_window_functionsr˜  Ú_load_extensionsrí  ri   ri   rj   r¥  µ  s   






ÿzSqliteDatabase._add_conn_hooksc                 C   s6   |  ¡ }| jD ]\}}| d||f ¡ q| ¡  d S )NzPRAGMA %s = %s;)rB  r’  rG  rö  )rô   ré  rB  rˆ  rÇ   ri   ri   rj   r¨  Â  s   zSqliteDatabase._set_pragmasc                 C   s:   |  ¡ }| j ¡ D ]\}}| d||f ¡ q	| ¡  d S )NzATTACH DATABASE "%s" AS "%s")rB  r™  rß   rG  rö  )rô   ré  rB  r†  rW  ri   ri   rj   r§  È  s   z SqliteDatabase._attach_databasesc                 C   sˆ   |d ur
d||f }d| }|t ur/|d|pd 7 }|r.t| jp!dƒ}|||< t| ¡ ƒ| _n|r5tdƒ‚|  |¡ ¡ }|rB|d S d S )Nz"%s".%sz	PRAGMA %sz = %sr   ri   z/Cannot specify a permanent pragma without value)ÚSENTINELrÕ   r’  rÖ   rß   rå   r*  Úfetchone)rô   rí  rÇ   Ú	permanentrÜ  r9  rœ  r  ri   ri   rj   rˆ  Î  s    €ÿzSqliteDatabase.pragmaÚ
cache_sizeÚforeign_keysÚjournal_modeÚjournal_size_limitÚ	mmap_sizeÚ	page_sizeÚread_uncommittedÚsynchronousÚwal_autocheckpointÚapplication_idÚuser_versionÚdata_versionc                 C   r«  rf   )r¢  r±  ri   ri   rj   r£  ë  ra  zSqliteDatabase.timeoutc                 C   s6   | j |krd S || _ |  ¡ s|  d|d  ¡ d S d S )NzPRAGMA busy_timeout=%d;iè  )r¢  ró  r*  )rô   Úsecondsri   ri   rj   r£  ï  s   
ýc                 C   ó*   | j  ¡ D ]\}\}}| |||¡ qd S rf   )r”  rß   Úcreate_aggregate©rô   ré  r†  ÚklassÚ
num_paramsri   ri   rj   r©  ú  ó   ÿzSqliteDatabase._load_aggregatesc                 C   s$   | j  ¡ D ]
\}}| ||¡ qd S rf   )r•  rß   Úcreate_collation)rô   ré  r†  r;   ri   ri   rj   rª  þ  s   ÿzSqliteDatabase._load_collationsc                 C   sD   | j  ¡ D ]\}\}}}|rd|ini }|j|||fi |¤Ž qd S )NÚdeterministic)r–  rß   Úcreate_function)rô   ré  r†  r;   Ún_paramsrÅ  r¶  ri   ri   rj   r«    s   þzSqliteDatabase._load_functionsc                 C   r¾  rf   )r—  rß   Úcreate_window_functionrÀ  ri   ri   rj   r¬    rÃ  z%SqliteDatabase._load_window_functionsc                 C   s6   ||f| j |p|j ¡ < |  ¡ s|  |  ¡ ¡ d S d S rf   )r”  rö   r™  ró  r©  r  ©rô   rÁ  r†  rÂ  ri   ri   rj   Úregister_aggregate  s   ÿz!SqliteDatabase.register_aggregatec                    ó   ‡ ‡‡fdd„}|S )Nc                    ó   ˆ  | ˆ ˆ¡ | S rf   )rÊ  ©rÁ  ©r†  rÂ  rô   ri   rj   r­    ó   z+SqliteDatabase.aggregate.<locals>.decoratorri   ©rô   r†  rÂ  r­  ri   rÎ  rj   Ú	aggregate  ó   zSqliteDatabase.aggregatec                    sD   ˆ p|j ‰ ‡ fdd„}||_|| jˆ < |  ¡ s |  |  ¡ ¡ d S d S )Nc                     s   | t dˆ  ƒf }t|ƒS )Nz
collate %s)rZ   r4  )rµ  r�  r‰  ri   rj   Ú
_collation  s   z5SqliteDatabase.register_collation.<locals>._collation)rö   r!  r•  ró  rª  r  )rô   r;   r†  rÓ  ri   r‰  rj   Úregister_collation  s   

ÿz!SqliteDatabase.register_collationc                    r¿  )Nc                    s   ˆ  | ˆ ¡ | S rf   )rÔ  rò   ©r†  rô   ri   rj   r­  !  rÃ  z+SqliteDatabase.collation.<locals>.decoratorri   )rô   r†  r­  ri   rÕ  rj   r!     r«  zSqliteDatabase.collationc                 C   s4   |||f| j |p
|j< |  ¡ s|  |  ¡ ¡ d S d S rf   )r–  rö   ró  r«  r  )rô   r;   r†  rÂ  rÅ  ri   ri   rj   rš  &  s   ÿz SqliteDatabase.register_functionc                    s   ‡ ‡‡‡fdd„}|S )Nc                    s   ˆ  | ˆˆˆ ¡ | S rf   )rš  rò   ©rÅ  r†  rÂ  rô   ri   rj   r­  -  s   z&SqliteDatabase.func.<locals>.decoratorri   )rô   r†  rÂ  rÅ  r­  ri   rÖ  rj   r³  ,  s   zSqliteDatabase.funcc                 C   s:   |p|j  ¡ }||f| j|< |  ¡ s|  |  ¡ ¡ d S d S rf   )rö   r™  r—  ró  r¬  r  rÉ  ri   ri   rj   Úregister_window_function2  s
   ÿz'SqliteDatabase.register_window_functionc                    rË  )Nc                    rÌ  rf   )r×  rÍ  rÎ  ri   rj   r­  9  rÏ  z1SqliteDatabase.window_function.<locals>.decoratorri   rÐ  ri   rÎ  rj   Úwindow_function8  rÒ  zSqliteDatabase.window_functionc                 C   ó   | j |= d S rf   )r”  r…  ri   ri   rj   Úunregister_aggregate>  r  z#SqliteDatabase.unregister_aggregatec                 C   rÙ  rf   )r•  r…  ri   ri   rj   Úunregister_collationA  r  z#SqliteDatabase.unregister_collationc                 C   rÙ  rf   )r–  r…  ri   ri   rj   Úunregister_functionD  r  z"SqliteDatabase.unregister_functionc                 C   rÙ  rf   )r—  r…  ri   ri   rj   Úunregister_window_functionG  r  z)SqliteDatabase.unregister_window_functionc                 C   s$   |  d¡ | jD ]}| |¡ qd S rK  )Úenable_load_extensionr˜  Úload_extension)rô   ré  Ú	extensionri   ri   rj   r­  J  s   

ÿzSqliteDatabase._load_extensionsc                 C   s8   | j  |¡ |  ¡ s|  ¡ }| d¡ | |¡ d S d S rK  )r˜  r  ró  r  rÞ  rß  )rô   rà  ré  ri   ri   rj   rß  O  s   
ýzSqliteDatabase.load_extensionc                 C   s   | j  |¡ d S rf   )r˜  rU  )rô   rà  ri   ri   rj   Úunload_extensionV  rs   zSqliteDatabase.unload_extensionc                 C   sN   || j v r| j | |krdS td| ƒ‚|| j |< |  ¡ s%|  d||f¡ dS )NFzschema "%s" already attached.zATTACH DATABASE ? AS ?T)r™  rN   ró  r*  )rô   Úfilenamer†  ri   ri   rj   ÚattachY  s   

zSqliteDatabase.attachc                 C   s0   || j vrdS | j |= |  ¡ s|  d|f¡ dS )NFzDETACH DATABASE ?T)r™  ró  r*  r…  ri   ri   rj   Údetachd  s   
zSqliteDatabase.detachc                 C   sR   |p| j }|rd| nd}t� |  ¡  |¡ W d   ƒ d S 1 s"w   Y  d S )NzBEGIN %srX  )r“  r  rB  rG  )rô   rŸ  r&  ri   ri   rj   rE  m  s
   
"ÿzSqliteDatabase.beginc                 C   s.   t |pdƒ}|  d| d¡}dd„ | ¡ D ƒS )NÚmainz>SELECT name FROM "%s".sqlite_master WHERE type=? ORDER BY name©r8  c                 S   ó   g | ]\}|‘qS ri   ri   r   ri   ri   rj   r†  w  r‹  z-SqliteDatabase.get_tables.<locals>.<listcomp>©rr   r*  Úfetchall)rô   rÜ  rB  ri   ri   rj   r`  s  s   ÿÿzSqliteDatabase.get_tablesc                 C   s*   t |pdƒ}d| }dd„ |  |d¡D ƒS )Nrå  zCSELECT name, sql FROM "%s".sqlite_master WHERE type=? ORDER BY namec                 S   ó   g | ]}t |Ž ‘qS ri   ©rã  r   ri   ri   rj   r†  }  r  z,SqliteDatabase.get_views.<locals>.<listcomp>)Úview)rr   r*  )rô   rÜ  r9  ri   ri   rj   Ú	get_viewsy  s
   ÿzSqliteDatabase.get_viewsc           	         sÚ   t |pdƒ}d| }|  |ˆdf¡}t| ¡ ƒ‰tƒ ‰|  d|t ˆƒf ¡}| ¡ D ]}|d }t|d ƒdk}|r?ˆ |¡ q*i ‰ tˆƒD ]}|  d|t |ƒf ¡}dd	„ | ¡ D ƒˆ |< qF‡ ‡‡‡fd
d	„tˆƒD ƒS )Nrå  zVSELECT name, sql FROM "%s".sqlite_master WHERE tbl_name = ? AND type = ? ORDER BY namerR  zPRAGMA "%s".index_list("%s")rt   r›   zPRAGMA "%s".index_info("%s")c                 S   ó   g | ]}|d  ‘qS )r›   ri   r   ri   ri   rj   r†  •  r  z.SqliteDatabase.get_indexes.<locals>.<listcomp>c                    s(   g | ]}t |ˆ| ˆ | |ˆv ˆƒ‘qS ri   ©rÙ  ©rÑ   r†  ©Úindex_columnsÚindex_to_sqlr8  Úunique_indexesri   rj   r†  —  s    úûÿ)rr   r*  rÕ   ré  rÄ  r“   r  rÔ  )	rô   r8  rÜ  rG  rB  r  r†  Ú	is_uniquer'  ri   rñ  rj   rc    s2   ÿ
ÿ
€
ÿùzSqliteDatabase.get_indexesc                    sl   t |pdƒ}|  d|t ˆƒf ¡ ¡ }dd„ |D ƒ}t|ƒdko+|d d p'd ¡ d	k‰ ‡ ‡fd
d„|D ƒS )Nrå  úPRAGMA "%s".table_info("%s")c                 S   s   g | ]}|d  r|‘qS )rr  ri   ©rÑ   rB  ri   ri   rj   r†  ¤  r”  z.SqliteDatabase.get_columns.<locals>.<listcomp>rt   r   r›   r^  rS  c                    sL   g | ]"}t |d  |d |d  t|d ƒˆ|d |d t|d ƒo"ˆ ƒ‘qS )rt   r›   r|   rr  rq  )rÚ  rÉ   r÷  ©Úis_rowidr8  ri   rj   r†  ¦  s
    (þÿ)rr   r*  ré  rœ   Úupper)rô   r8  rÜ  rz  Úpksri   rø  rj   rd     s   
ÿÿ$þzSqliteDatabase.get_columnsc                 C   s>   t |pdƒ}|  d|t |ƒf ¡}dd„ tdd„ | ¡ ƒD ƒS )Nrå  rö  c                 S   rî  rŠ  ri   r   ri   ri   rj   r†  ®  r  z3SqliteDatabase.get_primary_keys.<locals>.<listcomp>c                 S   s   | d S rQ  ri   )rB  ri   ri   rj   rk   ®  r  z1SqliteDatabase.get_primary_keys.<locals>.<lambda>)rr   r*  r¯  ré  ©rô   r8  rÜ  rB  ri   ri   rj   re  ª  s
   
ÿzSqliteDatabase.get_primary_keysc                    s8   t |pdƒ}|  d|t ˆ ƒf ¡}‡ fdd„| ¡ D ƒS )Nrå  z"PRAGMA "%s".foreign_key_list("%s")c                    s4   g | ]}t |d  |d |d ˆ d|d |d ƒ‘qS )r|   r›   rq  Né   rr  ©rÞ  r   ræ  ri   rj   r†  ´  s
    þÿz3SqliteDatabase.get_foreign_keys.<locals>.<listcomp>rè  rü  ri   ræ  rj   rf  °  s   
ÿ
þzSqliteDatabase.get_foreign_keysc                 C   ó   t jS rf   )r¤  ÚBinaryr±  ri   ri   rj   Úget_binary_type¸  r­  zSqliteDatabase.get_binary_typec                 C   s:   |j r|j  ¡ nd}|r|dvrtd|j  ¡  ƒS d S d S )Nr^  ©Únothingr	  zINSERT OR %s)r  r™  rZ   rú  ©rô   rð  rG  r  ri   ri   rj   r  »  s   ÿz!SqliteDatabase.conflict_statementc                 C   sº   | j dk rt|j|j|j|j|jfƒrtdƒ‚|jr|j 	¡ nd}|r)|dvr)d S |dkr?|jr4tdƒ‚t
|  |¡tdƒgƒS |jsI|jsItdƒ‚|jrPtdƒ‚|jsWtd	ƒ‚|  ||¡S )
N)r|   é   r   zFSQLite does not support specifying which values to preserve or update.r^  r  r  zMSQLite does not support specifying named constraints for conflict resolution.ú
DO NOTHINGzŠIf you are not performing any updates (or preserving any INSERTed values), then the conflict resolution action should be set to "NOTHING".zISQLite requires that a conflict target be specified when doing an upsert.)r  r×   r  r  r  r  r  rå   r  r™  r4  r2  rZ   r8  ©rô   ÚocrG  r  ri   ri   rj   r  À  s,   
ÿÿ
ÿzSqliteDatabase.conflict_updatec                 C   ó   t j||td�S ©N)rª  )r;   rq  r“   rp  ri   ri   rj   rs  à  rs   zSqliteDatabase.extract_datec                 C   r	  r
  )r;   r�  Úsimple_date_timerp  ri   ri   rj   rt  ã  s   ÿzSqliteDatabase.truncate_datec                 C   s   t  d|¡ d¡S )NrU  Úinteger)r;   rÂ   r  ru  ri   ri   rj   rv  ç  r  zSqliteDatabase.to_timestampc                 C   s   t  |d¡S )NÚ	unixepoch)r;   r�   ru  ri   ri   rj   rw  ê  r  zSqliteDatabase.from_timestamp)NFFN)Nrr  NrQ  rf   )Nru   N)Nrö   rü   rý   rù  rR  rb  ra  rc  rú  rl  r$  r‚  rj  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£  rc  r©  rª  r«  r¬  rÊ  rÑ  rÔ  r!  rš  r³  r×  rØ  rÚ  rÛ  rÜ  rÝ  r­  rß  rá  rã  rä  rE  r`  rí  rc  rd  re  rf  r  r  r  rs  rt  rv  rw  rÒ  ri   ri   rÐ  rj   r[   o  s     ù	þÿ








ÿ



	



!


 r[   c                   @   sL   e Zd Zi Zd Z ZZdd„ Zdd„ Zdd„ Z	dd	„ Z
d
d„ Zdd„ ZdS )Ú_BasePsycopgAdapterNc                 C   s   dd„ | j  ¡ D ƒ| _d S )Nc                 S   s   i | ]\}}||“qS ri   ri   rÙ   ri   ri   rj   Ú
<dictcomp>ó  s    
ÿz0_BasePsycopgAdapter.__init__.<locals>.<dictcomp>)Úisolation_levelsrß   Úisolation_levels_invr±  ri   ri   rj   rõ   ò  s   ÿz_BasePsycopgAdapter.__init__c                 C   ó   t |tƒr
| j| S |S rf   )rg   r_  r  ©rô   r�  ri   ri   rj   Úisolation_level_intö  ó   

z'_BasePsycopgAdapter.isolation_level_intc                 C   r  rf   )rg   r“   r  r  ri   ri   rj   Úisolation_level_strû  r  z'_BasePsycopgAdapter.isolation_level_strc                 C   s   |   |¡| jk S rf   )Ú
txn_statusÚtxn_inerrorrí  ri   ri   rj   r     rs   z(_BasePsycopgAdapter.is_connection_usablec                 C   sL   |   |¡}|| jkrdS || jkr$z|  |¡ W dS  ty#   Y dS w dS ©NFT)r  Útxn_unknownÚtxn_idlerL  r  ©rô   ré  Ústatusri   ri   rj   Úis_connection_reusable  s   


þÿz*_BasePsycopgAdapter.is_connection_reusablec                 C   s\   |   |¡}|| jkrdS z|| jkr|  |¡ W dS | ¡  d¡ W dS  ty-   Y dS w )NTzSELECT 1F)r  r  r  rL  rB  rG  r  r  ri   ri   rj   Úis_connection_closed  s   


ýþÿz(_BasePsycopgAdapter.is_connection_closed)rö   rü   rý   r  r  r  r  rõ   r  r  r  r  r  ri   ri   ri   rj   r  î  s    r  c                       ó|   e Zd ZdddddœZedurejZejZ	ej
Z‡ fdd„Zd	d
„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Z‡  ZS )ÚPsycopg2AdapterúREAD COMMITTEDúREPEATABLE READÚSERIALIZABLEúREAD UNCOMMITTED©rt   r›   r|   rq  Nc                    s$   t t| ƒ ¡  t| _t| _d| _d S rK  )rÏ  r!  rõ   ÚJson_pg2r|  r‹  Úcast_json_caser±  rÐ  ri   rj   rõ   ,  rŒ  zPsycopg2Adapter.__init__c                 C   ó   t d u rtdƒ‚d S )Nz#psycopg2 postgres driver not found.)Úpsycopg2r>   r±  ri   ri   rj   Úcheck_driver2  ó   ÿzPsycopg2Adapter.check_driverc                 C   rÿ  rf   )r*  r   r±  ri   ri   rj   r  6  r­  zPsycopg2Adapter.get_binary_typec                 K   sr   |j  d¡r| d|j ¡ n| d|j ¡ tjdi |¤Ž}|jr.t tj|¡ t tj	|¡ |j
r7| |j
¡ |S )Núpostgresql://ÚdsnÚdbnameri   )rê  rL  Ú
setdefaultr*  rô  Ú_register_unicodeÚpg_extensionsÚregister_typeÚUNICODEÚUNICODEARRAYÚ	_encodingÚset_client_encoding)rô   rW  rX  ré  ri   ri   rj   rô  9  s   zPsycopg2Adapter.connectc                 C   r9  rf   r  rí  ri   ri   rj   Úget_server_versionG  r­  z"Psycopg2Adapter.get_server_versionc                 C   s   |  ¡ S rf   )Úget_transaction_statusrí  ri   ri   rj   r  J  rØ  zPsycopg2Adapter.txn_statusc                 C   s   |  ¡  d¡ d S )Nr[  )rB  rG  rí  ri   ri   rj   rL  M  s   zPsycopg2Adapter.rollbackc                 C   s   |j tt ¡ ƒdd�S )NT©r†  Úwithhold)rB  r_  ÚuuidÚuuid1rí  ri   ri   rj   Úserver_side_cursorR  s   z"Psycopg2Adapter.server_side_cursor)rö   rü   rý   r  r*  r2  ÚTRANSACTION_STATUS_IDLEr  ÚTRANSACTION_STATUS_INERRORr  ÚTRANSACTION_STATUS_UNKNOWNr  rõ   r+  r  rô  r8  r  rL  r>  rÒ  ri   ri   rÐ  rj   r!    s$    ür!  c                       r   )ÚPsycopg3Adapterr%  r"  r#  r$  r&  Nc                    s$   t t| ƒ ¡  t| _t| _d| _d S rÄ   )rÏ  rB  rõ   ÚJson_pg3r|  Ú	Jsonb_pg3r‹  r(  r±  rÐ  ri   rj   rõ   d  rŒ  zPsycopg3Adapter.__init__c                 C   r)  )Nz"psycopg postgres driver not found.)Úpsycopgr>   r±  ri   ri   rj   r+  j  r,  zPsycopg3Adapter.check_driverc                 C   rÿ  rf   )rE  r   r±  ri   ri   rj   r  n  r­  zPsycopg3Adapter.get_binary_typec                 K   sN   |j r
| d|j ¡ |j d¡r| d|j¡ n| d|j¡ tjdi |¤ŽS )NÚclient_encodingr-  Úconninfor/  ri   )r6  r0  rê  rL  rE  rô  )rô   rW  rX  ri   ri   rj   rô  q  s   zPsycopg3Adapter.connectc                 C   ó   |j jS rf   )Úpgconnr  rí  ri   ri   rj   r8  z  rØ  z"Psycopg3Adapter.get_server_versionc                 C   rH  rf   )rI  Útransaction_statusrí  ri   ri   rj   r  }  rØ  zPsycopg3Adapter.txn_statusc                 C   r  rf   )rL  rí  ri   ri   rj   rL  €  rÑ  zPsycopg3Adapter.rollbackc                 C   s(   |   |¡tjk}|jtt ¡ ƒ| d�S )Nr:  )r  r   ÚINTRANSrB  r_  r<  r=  )rô   ré  Úin_txnri   ri   rj   r>  „  ó   z"Psycopg3Adapter.server_side_cursor)rö   rü   rý   r  rE  r   ÚIDLEr  ÚINERRORr  ÚUNKNOWNr  rõ   r+  r  rô  r8  r  rL  r>  rÒ  ri   ri   rÐ  rj   rB  X  s$    ü	rB  c                       s6  e Zd Zddddddddd	dd
œ
ZdddœZdZeZeZ	dZ
dZdZdZeZeZ		dA‡ fdd„	Zedd„ ƒZdd„ Zdd„ Zdd„ ZdBdd„ZdBdd„ZdBdd „ZdBd!d"„ZdBd#d$„ZdBd%d&„ZdBd'd(„ZdBd)d*„Zd+d,„ Z d-d.„ Z!d/d0„ Z"d1d2„ Z#d3d4„ Z$d5d6„ Z%d7d8„ Z&d9d:„ Z'd;d<„ Z(d=d>„ Z)d?d@„ Z*‡  Z+S )CrO   ÚSERIALÚ	BIGSERIALÚBYTEAÚBOOLEANÚ	TIMESTAMPÚNUMERICr•  r–  re  )
rR  rT  rV  rW  r[  r\  r_  r¥  re  rf  r6  z~*)r1  r2  rU  TNc                    sl   || _ || _| dd¡}td ur|std u r|  ¡ | _n|  ¡ | _| j |¡| _	t
t| ƒj|fi |¤Ž d S )NÚprefer_psycopg3F)r1  r6  rª  rE  r*  Úpsycopg3_adapterrŠ  Úpsycopg2_adapterr  Ú_isolation_levelrÏ  rO   r  )rô   rê  Úregister_unicodeÚencodingr�  r¶  rW  rÐ  ri   rj   r  ¤  s   
ÿzPostgresqlDatabase.initc                 C   s   t | jtƒS rf   )rg   rŠ  rB  r±  ri   ri   rj   r‚  ¶  s   z'PostgresqlDatabase.index_value_literalsc                 C   s<   | j  ¡  | j j| fi | j¤Ž}| jr| | j¡ d|_|S rK  )rŠ  r+  rô  r  rZ  Úset_isolation_levelr  rí  ri   ri   rj   r  »  s   
zPostgresqlDatabase._connectc                 C   ó   | j  |¡| _d S rf   )rŠ  r8  r  rí  ri   ri   rj   r  È  r  z&PostgresqlDatabase._set_server_versionc                 C   s   | j jrdS | j | j j¡S rÄ   )rõ  rè  rŠ  r  ré  r±  ri   ri   rj   r  Ë  s   z'PostgresqlDatabase.is_connection_usablec                 C   sd   |d u r| j }|r| j |¡}d| }nd}t� |  ¡  |¡ W d   ƒ d S 1 s+w   Y  d S )Nz$BEGIN TRANSACTION ISOLATION LEVEL %srX  )rZ  rŠ  r  r  rB  rG  )rô   r�  Útxn_typer  ri   ri   rj   rE  Ô  s   
"ÿzPostgresqlDatabase.beginc                 C   ó$   d}|   ||f¡}dd„ | ¡ D ƒS )NzoSELECT tablename FROM pg_catalog.pg_tables WHERE schemaname = COALESCE(%s, current_schema()) ORDER BY tablenamec                 S   rç  ri   ri   ©rÑ   r8  ri   ri   rj   r†  ä  r‹  z1PostgresqlDatabase.get_tables.<locals>.<listcomp>©r*  ré  ©rô   rÜ  rG  rB  ri   ri   rj   r`  ß  s   zPostgresqlDatabase.get_tablesc                 C   r`  )NzxSELECT viewname, definition FROM pg_catalog.pg_views WHERE schemaname = COALESCE(%s, current_schema()) ORDER BY viewnamec                 S   s    g | ]\}}t || d ¡ƒ‘qS )z 	;)rã  rw   )rÑ   Ú	view_namer9  ri   ri   rj   r†  ë  ó    ÿz0PostgresqlDatabase.get_views.<locals>.<listcomp>rb  rc  ri   ri   rj   rí  æ  s
   ÿzPostgresqlDatabase.get_viewsc                    s,   d}|   |ˆ d|f¡}‡ fdd„| ¡ D ƒS )Naˆ  
            SELECT
                i.relname, idxs.indexdef, idx.indisunique,
                ARRAY(
                    SELECT pg_get_indexdef(idx.indexrelid, k + 1, TRUE)
                    FROM generate_subscripts(idx.indkey, 1) AS k
                    ORDER BY k)
            FROM pg_catalog.pg_class AS t
            INNER JOIN pg_catalog.pg_namespace AS n ON t.relnamespace = n.oid
            INNER JOIN pg_catalog.pg_index AS idx ON t.oid = idx.indrelid
            INNER JOIN pg_catalog.pg_class AS i ON idx.indexrelid = i.oid
            INNER JOIN pg_catalog.pg_indexes AS idxs ON (
                idxs.tablename = t.relname
                AND idxs.indexname = i.relname
                AND idxs.schemaname = n.nspname)
            WHERE t.relname = %s AND t.relkind = %s
                AND n.nspname = COALESCE(%s, current_schema())
            ORDER BY idx.indisunique DESC, i.relname;rB  c                    s4   g | ]\}}}}t || d ¡dd„ |D ƒ|ˆ ƒ‘qS )z ;c                 S   rý  ri   )r{   r  ri   ri   rj   r†    r  z=PostgresqlDatabase.get_indexes.<locals>.<listcomp>.<listcomp>)rÙ  Úrstrip)rÑ   r†  r9  r  Úcolsræ  ri   rj   r†    s
    
þÿz2PostgresqlDatabase.get_indexes.<locals>.<listcomp>rb  ©rô   r8  rÜ  rG  rB  ri   ræ  rj   rc  î  s
   
þzPostgresqlDatabase.get_indexesc                    sF   d}|   |ˆ|f¡}t|  ˆ|¡ƒ‰dd„ ‰ ‡ ‡‡fdd„| ¡ D ƒS )Naþ  
            SELECT c.column_name, c.is_nullable, c.data_type,
                c.column_default,
                pg_catalog.format_type(a.atttypid, a.atttypmod),
                c.is_identity
            FROM information_schema.columns AS c
            INNER JOIN pg_catalog.pg_namespace AS n
                ON (n.nspname = c.table_schema)
            INNER JOIN pg_catalog.pg_class AS t
                ON (t.relname = c.table_name AND t.relnamespace = n.oid)
            INNER JOIN pg_catalog.pg_attribute AS a
                ON (a.attrelid = t.oid AND a.attname = c.column_name)
            WHERE c.table_name = %s
                AND c.table_schema = COALESCE(%s, current_schema())
                AND NOT a.attisdropped
            ORDER BY c.ordinal_positionc                 S   s   | dkp
|pd  d¡S )NÚYESr^  )znextval(zunique_rowid(rM  )ÚidentÚdfri   ri   rj   Úis_ident  ó   ÿz0PostgresqlDatabase.get_columns.<locals>.is_identc                    s<   g | ]\}}}}}}t |||d k|ˆv ˆ||ˆ ||ƒƒ‘qS )ri  )rÚ  )rÑ   r†  rò  r¿   rk  Úftrj  ©rl  rû  r8  ri   rj   r†    s
    þÿz2PostgresqlDatabase.get_columns.<locals>.<listcomp>)r*  rÄ  re  ré  rh  ri   ro  rj   rd    s   þzPostgresqlDatabase.get_columnsc                 C   s,   d}d}|   ||||f¡}dd„ | ¡ D ƒS )Naë  
            SELECT kc.column_name
            FROM information_schema.table_constraints AS tc
            INNER JOIN information_schema.key_column_usage AS kc ON (
                tc.table_name = kc.table_name AND
                tc.table_schema = kc.table_schema AND
                tc.constraint_name = kc.constraint_name)
            WHERE
                tc.constraint_type = %s AND
                tc.table_name = %s AND
                tc.table_schema = COALESCE(%s, current_schema())úPRIMARY KEYc                 S   rç  ri   ri   ©rÑ   Úpkri   ri   rj   r†  .  r‹  z7PostgresqlDatabase.get_primary_keys.<locals>.<listcomp>rb  )rô   r8  rÜ  rG  ÚctyperB  ri   ri   rj   re     s   z#PostgresqlDatabase.get_primary_keysc                    ó*   d}|   |ˆ |f¡}‡ fdd„| ¡ D ƒS )NaH  
            SELECT DISTINCT
                kcu.column_name, ccu.table_name, ccu.column_name,
                tc.constraint_name, rc.delete_rule, rc.update_rule
            FROM information_schema.table_constraints AS tc
            JOIN information_schema.key_column_usage AS kcu
                ON (tc.constraint_name = kcu.constraint_name AND
                    tc.constraint_schema = kcu.constraint_schema AND
                    tc.table_name = kcu.table_name AND
                    tc.table_schema = kcu.table_schema)
            JOIN information_schema.constraint_column_usage AS ccu
                ON (ccu.constraint_name = tc.constraint_name AND
                    ccu.constraint_schema = tc.constraint_schema)
            JOIN information_schema.referential_constraints AS rc
                ON (rc.constraint_name = tc.constraint_name AND
                    rc.constraint_schema = tc.constraint_schema)
            WHERE
                tc.constraint_type = 'FOREIGN KEY' AND
                tc.table_name = %s AND
                tc.table_schema = COALESCE(%s, current_schema())c                    ó8   g | ]}t |d  |d |d ˆ |d |d |d ƒ‘qS ©r   rt   r›   r|   rq  rr  rþ  r   ræ  ri   rj   r†  F  ó
    þÿz7PostgresqlDatabase.get_foreign_keys.<locals>.<listcomp>rb  )rô   r8  rÜ  r9  rB  ri   ræ  rj   rf  0  s
   
þz#PostgresqlDatabase.get_foreign_keysc                 C   s@   |d u r|  d¡\}}}d}|  |||pd f¡}t| ¡ d ƒS )Nr�  zí
            SELECT COUNT(*) FROM pg_class, pg_namespace
            WHERE relkind='S'
                AND pg_class.relnamespace = pg_namespace.oid
                AND relname=%s
                AND nspname=COALESCE(%s, current_schema())r   )Ú
rpartitionr*  rÉ   r¯  )rô   ÚsequencerÜ  r/  rG  Úcursri   ri   rj   rh  J  s
   z"PostgresqlDatabase.sequence_existsc                 C   s$   z| j  ¡ W S  ty   tdƒ‚w )NzPostgres driver not installed.)rŠ  r  r  r>   r±  ri   ri   rj   r  V  s
   ÿz"PostgresqlDatabase.get_binary_typec                 C   rR  rf   ri   r.  ri   ri   rj   r  \  r³  z%PostgresqlDatabase.conflict_statementc                 C   sz   |j r|j  ¡ nd}|dv rt|  |¡tdƒgƒS |r#|dkr#tdƒ‚|js-|js-tdƒ‚|js7|j	s7tdƒ‚|  
||¡S )Nr^  )rß  r  r  r	  z\The only supported actions for conflict resolution with Postgresql are "ignore" or "update".z‰If you are not performing any updates (or preserving any INSERTed values), then the conflict resolution action should be set to "IGNORE".zKPostgres requires that a conflict target be specified when doing an upsert.)r  r™  r4  r2  rZ   rå   r  r  r  r  r8  r  ri   ri   rj   r  _  s   
ÿz"PostgresqlDatabase.conflict_updatec                 C   ó   t  tt|ƒtdƒ|fƒ¡S ©NÚFROM©r;   ÚEXTRACTr4  rZ   rp  ri   ri   rj   rs  s  r=  zPostgresqlDatabase.extract_datec                 C   s   t  ||¡S rf   )r;   Ú
DATE_TRUNCrp  ri   ri   rj   rt  v  r  z PostgresqlDatabase.truncate_datec                 C   s   t tdƒ|fƒS )NÚintervalrD  ©rô   r  ri   ri   rj   r�  y  rs   zPostgresqlDatabase.intervalc                 C   s   |   d|¡S )NÚEPOCH)rs  ru  ri   ri   rj   rv  |  r  zPostgresqlDatabase.to_timestampc                 C   ó
   t  |¡S rf   )r;   rv  ru  ri   ri   rj   rw    r‡  z!PostgresqlDatabase.from_timestampc                 C   r>  )NzSELECT 0 WHERE falser?  rE  ri   ri   rj   r  ƒ  r  z"PostgresqlDatabase.get_noop_selectc                 C   s   |   d| dd¡ ¡ d S )Nzset time zone '%s';rZ  r[  )r*  ro   )rô   rƒ   ri   ri   rj   Úset_time_zone†  rh  z PostgresqlDatabase.set_time_zonec                 C   r^  rf   )rŠ  r  rZ  r  ri   ri   rj   r]  ‰  s   
ÿz&PostgresqlDatabase.set_isolation_level)TNNrf   ),rö   rü   rý   rú  rl  rB  r…  r�  r—  r”  r­  r~  r  r…  r!  rY  rB  rX  r  ró  r‚  r  r  r  rE  r`  rí  rc  rd  re  rf  rh  r  r  r  rs  rt  r�  rv  rw  r  r…  r]  rÒ  ri   ri   rÐ  rj   rO   ‹  sb    ö
ÿ

	






rO   c                
       s<  e Zd Zddddddddd	d
œ	ZddddddœZdZdZeZdZ	dZ
eZdZdZdZdZdZdZdG‡ fdd„	Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ ZdGd%d&„ZdGd'd(„ZdGd)d*„Zd+d,„ ZdGd-d.„ZdGd/d0„ZdGd1d2„Z dGd3d4„Z!d5d6„ Z"d7d8„ Z#d9d:„ Z$d;d<„ Z%d=d>„ Z&d?d@„ Z'dAdB„ Z(dCdD„ Z)dEdF„ Z*‡  Z+S )HrK   zINTEGER AUTO_INCREMENTzBIGINT AUTO_INCREMENTrW  rV  r•  ra  r¥  zVARCHAR(40)zVARBINARY(16))	rR  rT  rW  r\  r_  ra  r¥  re  rf  zLIKE BINARYr.  zREGEXP BINARYr1  r  )r.  r/  r1  r2  r  rU  z``TFl   ÿÿÿÿ Nc                    sP   |d ur|| _ ddi}| jd ur| j|d< | |¡ tt| ƒj|fi |¤Ž d S )NÚcharsetÚutf8mb4Úsql_mode)r¦  rˆ  r	  rÏ  rK   r  )rô   rê  r¦  r¶  rX  rÐ  ri   rj   r  ­  s   


zMySQLDatabase.initc                 C   s.   t d u rtdƒ‚t jd| jddœ| j¤Ž}|S )NzMySQL driver not installed!T)rê  r  ri   )Úmysqlr>   rô  rê  r  rí  ri   ri   rj   r  ¶  s   ÿzMySQLDatabase._connectc                 C   s\   z|j }W n ty   | ¡ }Y nw |  |¡| _ |  | jp*dt|ƒ ¡ v p*| j dk¡ d S )NÚmaria©é
   )r  r  Úget_server_infoÚ_extract_server_versionÚ_set_csq_groupedr¦  r_  r™  )rô   ré  Úversion_rawri   ri   rj   r  ½  s   
ÿ
ÿþz!MySQLDatabase._set_server_versionc                 C   s8   |r| j dkn| j dk}|r| jtkrt| _d S d S d S )N)rŒ  rq  )rz  r   é   )r  r”  r™  r›  )rô   Ú
is_mariadbÚ	supportedri   ri   rj   r�  È  s   ÿÿ
ûzMySQLDatabase._set_csq_groupedc                 C   sr   t |tƒr|S | ¡ }d|v rt d|¡}nt d|¡}|d ur0tdd„ | ¡ d  d¡D ƒƒS t d| ¡ d	S )
NrŠ  z(1\d\.\d+\.\d+)z(\d{1,2}\.\d+\.\d+)c                 s   r¢  rf   )r“   )rÑ   Únumri   ri   rj   rÔ   Û  r¥  z8MySQLDatabase._extract_server_version.<locals>.<genexpr>r   r�  z'Unable to determine MySQL version: "%s"rª   )	rg   r�  r™  rx   rÅ   r­  r”   rë   rì   )rô   ÚversionrŸ  ri   ri   rj   rŽ  Ò  s   
 z%MySQLDatabase._extract_server_versionc                 C   s`   | j jrdS | j j}t|dƒr.| jd dkrd}nd}z|j|Ž  W dS  ty-   Y dS w dS )NFÚpingr   rz  ri   r  T)rõ  rè  ré  rï  r  r–  r  )rô   ré  rµ  ri   ri   rj   r  à  s   
þÿz"MySQLDatabase.is_connection_usablec                 C   r>  )Nz() VALUES ()r?  rE  ri   ri   rj   r  ð  r  z#MySQLDatabase.default_values_insertc                 C   sN   t � |  ¡ }|r| d| ¡ | d¡ W d   ƒ d S 1 s w   Y  d S )Nz"SET TRANSACTION ISOLATION LEVEL %srX  rY  )rô   r�  rz  ri   ri   rj   rE  ó  s   ÿ"ûzMySQLDatabase.beginc                 C   s   d}dd„ |   ||df¡D ƒS )Nz‡SELECT table_name FROM information_schema.tables WHERE table_schema = COALESCE(%s, DATABASE()) AND table_type != %s ORDER BY table_namec                 S   rç  ri   ri   ra  ri   ri   rj   r†  ÿ  r‹  z,MySQLDatabase.get_tables.<locals>.<listcomp>ÚVIEW)r*  )rô   rÜ  rG  ri   ri   rj   r`  û  s   zMySQLDatabase.get_tablesc                 C   r`  )Nz‚SELECT table_name, view_definition FROM information_schema.views WHERE table_schema = COALESCE(%s, DATABASE()) ORDER BY table_namec                 S   rê  ri   rë  r   ri   ri   rj   r†    r  z+MySQLDatabase.get_views.<locals>.<listcomp>rb  rc  ri   ri   rj   rí    s   zMySQLDatabase.get_viewsc                 C   s(   t |dƒ}|rdt |dƒ|f S d| S )Nú`z	`%s`.`%s`z`%s`)rr   rb  ri   ri   rj   Ú_show_index_target	  s   
z MySQLDatabase._show_index_targetc                    s€   |   d|  ˆ|¡ ¡}tƒ ‰i ‰ | ¡ D ] }|d s!ˆ |d ¡ ˆ  |d g ¡ ˆ |d   |d ¡ q‡ ‡‡fdd„ˆ D ƒS )NúSHOW INDEX FROM %srt   r›   rq  c                    s$   g | ]}t |d ˆ | |ˆv ˆƒ‘qS rf   rï  rð  ©Úindexesr8  r  ri   rj   r†    ó    ÿz-MySQLDatabase.get_indexes.<locals>.<listcomp>)r*  r™  rÄ  ré  r  r0  rÁ  )rô   r8  rÜ  rB  r  ri   r›  rj   rc    s   
ÿÿzMySQLDatabase.get_indexesc                 C   s†   d}|   |||f¡}t|  ||¡ƒ}g }| ¡ D ](\}}}	}
}}|dk}|r,|
dkr,d }
| t||	|||v ||
|d|p<dv ƒ¡ q|S )Na  
            SELECT column_name, is_nullable, data_type, column_default,
                column_type, extra
            FROM information_schema.columns
            WHERE table_name = %s AND table_schema = COALESCE(%s, DATABASE())
            ORDER BY ordinal_positionri  r^  Úauto_incrementr^  )r*  rÄ  re  ré  rÁ  rÚ  )rô   r8  rÜ  r9  rB  rû  r÷  r†  rò  r¿   rk  rn  Úextrari   ri   rj   rd    s   
þzMySQLDatabase.get_columnsc                 C   s2   |   d|  ||¡ ¡}dd„ tdd„ | ¡ ƒD ƒS )Nrš  c                 S   rî  )rq  ri   r   ri   ri   rj   r†  4  r  z2MySQLDatabase.get_primary_keys.<locals>.<listcomp>c                 S   s   | d dkS )Nr›   ÚPRIMARYri   ©r  ri   ri   rj   rk   5  r  z0MySQLDatabase.get_primary_keys.<locals>.<lambda>)r*  r™  r¯  ré  rü  ri   ri   rj   re  1  s   
ÿÿzMySQLDatabase.get_primary_keysc                    rt  )NaÈ  
            SELECT kcu.column_name, kcu.referenced_table_name,
                kcu.referenced_column_name, kcu.constraint_name,
                rc.delete_rule, rc.update_rule
            FROM information_schema.key_column_usage AS kcu
            INNER JOIN information_schema.referential_constraints AS rc
                ON (rc.constraint_schema = kcu.constraint_schema AND
                    rc.constraint_name = kcu.constraint_name AND
                    rc.table_name = kcu.table_name)
            WHERE kcu.table_name = %s
                AND kcu.table_schema = COALESCE(%s, DATABASE())
                AND kcu.referenced_table_name IS NOT NULL
                AND kcu.referenced_column_name IS NOT NULLc                    ru  rv  rþ  r   ræ  ri   rj   r†  F  rw  z2MySQLDatabase.get_foreign_keys.<locals>.<listcomp>rb  rh  ri   ræ  rj   rf  7  s
   
þzMySQLDatabase.get_foreign_keysc                 C   rÿ  rf   )r‰  r   r±  ri   ri   rj   r  J  r­  zMySQLDatabase.get_binary_typec                 C   sH   |j sd S |j  ¡ }|dkrtdƒS |dkrtdƒS |dkr"tdƒ‚d S )Nro   rî  rß  zINSERT IGNOREr	  zWUn-supported action for conflict resolution. MySQL supports REPLACE, IGNORE and UPDATE.)r  r™  rZ   rå   r  ri   ri   rj   r  M  s   

ÿz MySQLDatabase.conflict_statementc           	      C   s¸   |j d us|js|jrtdƒ‚g }|jr@| jpd}|dkr!tj}ntj}|jD ]}t	|ƒ}t
t	|ƒtdƒ||ƒfƒ}| |¡ q'|jrN| | j||dd�¡ |rZt
tdƒt|ƒfƒS d S )NzfMySQL does not support the specification of where clauses or conflict targets for conflict resolution.©r   )rŒ  r|   r|   r"  Fr4  zON DUPLICATE KEY UPDATE)r  r  r  rå   r  r  r;   ÚVALUEÚVALUESr”  r4  rZ   rÁ  r  rD  r0  r  )	rô   rð  rG  r5  r•  ÚVALUE_FNrÝ  Úentityr7  ri   ri   rj   r  Y  s6   ÿ

ýÿÿÿzMySQLDatabase.conflict_updatec                 C   r{  r|  r~  rp  ri   ri   rj   rs  {  r=  zMySQLDatabase.extract_datec                 C   s   t j|t| td�S r
  )r;   ÚDATE_FORMATÚ__mysql_date_trunc__r  rp  ri   ri   rj   rt  ~  s   ÿzMySQLDatabase.truncate_datec                 C   r„  rf   )r;   ÚUNIX_TIMESTAMPru  ri   ri   rj   rv  ‚  r  zMySQLDatabase.to_timestampc                 C   r„  rf   )r;   ÚFROM_UNIXTIMEru  ri   ri   rj   rw  …  r  zMySQLDatabase.from_timestampc                 C   rx  rf   )r;   Úrandr±  ri   ri   rj   ry  ˆ  rØ  zMySQLDatabase.randomc                 C   r>  )NzSELECT 0 WHERE 0=1r?  rE  ri   ri   rj   r  ‹  r  zMySQLDatabase.get_noop_selectrf   ),rö   rü   rý   rú  rl  rB  rˆ  r¤  r�  rŽ  r¦  r™  r”  r­  r%  rj  rƒ  r„  rˆ  r  r  r  r�  rŽ  r  r  rE  r`  rí  r™  rc  rd  re  rf  r  r  r  rs  rt  rv  rw  ry  r  rÒ  ri   ri   rÐ  rj   rK   Ž  sj    ÷û	







"rK   c                   @   rþ   )
rß  c                 C   rñ   rf   rñ  rò  ri   ri   rj   rõ   “  r  z_manual.__init__c                 C   r÷  rf   rø  r±  ri   ri   rj   r²  –  r  z_manual._build_ctxc                 C   s4   | j  ¡ }|d urt|tƒstdƒ‚| j  | ¡ d S )Nz?Cannot enter manual commit block while a transaction is active.)rW  rR  rg   rß  rå   rO  )rô   rà   ri   ri   rj   rÌ  ™  s   
z_manual.__enter__c                 C   s   | j  ¡ | urtdƒ‚d S )Nz>Transaction stack corrupted while exiting manual commit block.)rW  rF  rå   r0  ri   ri   rj   rÍ     s   ÿz_manual.__exit__NrÔ  ri   ri   ri   rj   rß  ’  s
    rß  c                   @   rþ   )
rÛ  c                 O   ó   || _ ||f| _d S rf   )rW  Ú_transaction_args©rô   rW  rµ  r¶  ri   ri   rj   rõ   §  r¿  z_atomic.__init__c                 C   ó&   | j \}}t| ƒ| jg|¢R i |¤ŽS rf   )r­  rð  rW  rÇ  ri   ri   rj   r²  «  ó   
z_atomic._build_ctxc                 C   s\   | j  ¡ dkr| j\}}| j j|i |¤Ž| _nt| j  ¡ tƒr#tdƒ‚| j  	¡ | _| j 
¡ S )Nr   z=Cannot enter atomic commit block while in manual commit mode.)rW  rP  r­  rã  Ú_helperrg   rR  rß  rå   ræ  rÌ  rÇ  ri   ri   rj   rÌ  ¯  s   

z_atomic.__enter__c                 C   s   | j  |||¡S rf   )r±  rÍ  r0  ri   ri   rj   rÍ  º  rs   z_atomic.__exit__NrÔ  ri   ri   ri   rj   rÛ  ¦  s
    rÛ  c                   @   sH   e Zd Zdd„ Zdd„ Zdd„ Zddd	„Zdd
d„Zdd„ Zdd„ Z	dS )râ  c                 O   r¬  rf   )rW  Ú_begin_argsr®  ri   ri   rj   rõ   ¿  r¿  z_transaction.__init__c                 C   r¯  rf   )r²  rð  rW  rÇ  ri   ri   rj   r²  Ã  r°  z_transaction._build_ctxc                 C   s    | j \}}| jj|i |¤Ž d S rf   )r²  rW  rE  rÇ  ri   ri   rj   Ú_beginÇ  s   
z_transaction._beginTc                 C   ó(   | j  ¡  | j  ¡  |r|  ¡  d S d S rf   )rW  rG  rV  r³  ©rô   rE  ri   ri   rj   rG  Ë  ó
   

ÿz_transaction.commitc                 C   r´  rf   )rW  rL  rW  r³  rµ  ri   ri   rj   rL  Ñ  r¶  z_transaction.rollbackc                 C   s&   | j  ¡ dkr|  ¡  | j  | ¡ | S rû  )rW  rP  r³  rO  r±  ri   ri   rj   rÌ  ×  s   z_transaction.__enter__c                 C   sf   | j  ¡ }| j  ¡  |r|dkr|  d¡ d S |dkr1z|  d¡ W d S  ty0   |  d¡ ‚ w d S r†  )rW  rP  rF  rL  rG  r  )rô   r1  r2  r3  Údepthri   ri   rj   rÍ  Ý  s   


þýz_transaction.__exit__Nrp  ©
rö   rü   rý   rõ   r²  r³  rG  rL  rÌ  rÍ  ri   ri   ri   rj   râ  ¾  s    

râ  c                   @   sJ   e Zd Zddd„Zdd„ Zdd„ Zdd	d
„Zddd„Zdd„ Zdd„ Z	dS )rå  Nc                 C   s0   || _ |pdt ¡ j | _| j | j j¡| _d S )Nrp   )rW  r<  Úuuid4ÚhexÚsidrƒ  rˆ  Ú
quoted_sid)rô   rW  r»  ri   ri   rj   rõ   ë  s   z_savepoint.__init__c                 C   r÷  rf   rø  r±  ri   ri   rj   r²  ð  r  z_savepoint._build_ctxc                 C   s   | j  d| j ¡ d S )NzSAVEPOINT %s;)rW  r*  r¼  r±  ri   ri   rj   r³  ó  rÝ  z_savepoint._beginTc                 C   ó&   | j  d| j ¡ |r|  ¡  d S d S )NzRELEASE SAVEPOINT %s;©rW  r*  r¼  r³  rµ  ri   ri   rj   rG  ö  ó   z_savepoint.commitc                 C   r½  )NzROLLBACK TO SAVEPOINT %s;r¾  rµ  ri   ri   rj   rL  ú  r¿  z_savepoint.rollbackc                 C   s   |   ¡  | S rf   )r³  r±  ri   ri   rj   rÌ  þ  rá  z_savepoint.__enter__c                 C   sB   |r	|   d¡ d S z	| jdd� W d S  ty    | j dd� ‚ w )NFrD  )rL  rG  r  r0  ri   ri   rj   rÍ    s   þz_savepoint.__exit__rf   rp  r¸  ri   ri   ri   rj   rå  ê  s    


rå  c                   @   sb   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zddd„Zdd„ Z	dd„ Z
ddd„Zddd„ZdS )r>  c                 C   s(   || _ d| _d| _d| _d| _g | _d S )Nr   F)rB  r¢  rR  ÚinitializedÚ	populatedrQ  r;  ri   ri   rj   rõ     s   
zCursorWrapper.__init__c                 C   s   | j rt| jƒS t| ƒS rf   )rÁ  r©  rQ  ÚResultIteratorr±  ri   ri   rj   rV    s   
zCursorWrapper.__iter__c                 C   st   t |tƒr|j}|d u s|dk r|  ¡  n|  |¡ | j| S t |tƒr6|  |dkr.|d nd¡ | j| S tdƒ‚)Nr   rt   z6CursorWrapper only supports integer and slice indexes.)rg   r@  rB  rP  rQ  r“   rå   )rô   r(  rB  ri   ri   rj   r    s   





zCursorWrapper.__getitem__c                 C   s   |   ¡  | jS rf   )rP  r¢  r±  ri   ri   rj   rS  -  s   zCursorWrapper.__len__c                 C   rR  rf   ri   r±  ri   ri   rj   r¾  1  r³  zCursorWrapper.initializeTc                 C   sf   | j  ¡ }|d u rd| _| j  ¡  t‚| js|  ¡  d| _|  jd7  _|  |¡}|r1| j	 
|¡ |S )NTrt   )rB  r¯  rÁ  rö  rï  rÀ  r¾  r¢  Úprocess_rowrQ  rÁ  )rô   Úcacher  r»  ri   ri   rj   Úiterate4  s   


zCursorWrapper.iteratec                 C   ó   |S rf   ri   ©rô   r  ri   ri   rj   rÃ  C  r³  zCursorWrapper.process_rowc                 c   s,   � 	 z|   d¡V  W n
 ty   Y d S w qrË  )rÅ  rï  r±  ri   ri   rj   rK  F  s   €ÿýzCursorWrapper.iteratorr   c                 C   s’   |pt dƒ}|dk rtdƒ‚| js|| jkrd S t| ƒ}| j|_| jsC|| jkrEz| ¡  W n
 ty8   Y d S w | jsG|| jks(d S d S d S d S )NÚInfr   z"Negative values are not supported.)rk  rå   rÁ  r¢  rÂ  rR  rî  rï  )rô   ré   rK  ri   ri   rj   rP  M  s   ÿ ýzCursorWrapper.fill_cachec                 C   s^   g }i }|D ]&}|rt |ƒ}||v r#||  d7  < d||| f }nd||< | |¡ q|S )Nrt   r5  )r   rÁ  )rô   r‰  Úvalid_identifiersÚidentifiersÚ
duplicatesrÝ  ri   ri   rj   Údedupe_columns]  s   zCursorWrapper.dedupe_columnsNrp  r¢  )rö   rü   rý   rõ   rV  r  rS  r¾  rÅ  rÃ  rK  rP  rÌ  ri   ri   ri   rj   r>    s    

r>  c                   @   rs  )r=  Fc                 C   s0   | j dd„ | jjD ƒ| jd�| _t| jƒ| _d S )Nc                 S   rî  r¢  ri   ©rÑ   Úcol_specri   ri   rj   r†  v  r  z0DictCursorWrapper.initialize.<locals>.<listcomp>©rÉ  )rÌ  rB  ÚdescriptionrÉ  r‰  rœ   Úncolsr±  ri   ri   rj   r¾  t  s
   þzDictCursorWrapper.initializec                    s   ‡ ‡fdd„t ˆjƒD ƒS )Nc                    s   i | ]
}ˆj | ˆ | “qS ri   )r‰  ©rÑ   rü  ©r  rô   ri   rj   r  {  ó    z2DictCursorWrapper._row_to_dict.<locals>.<dictcomp>)r  rÑ  rÇ  ri   rÓ  rj   Ú_row_to_dictz  rh  zDictCursorWrapper._row_to_dictN)rö   rü   rý   rÉ  r¾  rÕ  rÃ  ri   ri   ri   rj   r=  q  s
    r=  c                   @   r~  )r?  c                 C   s.   |   dd„ | jjD ƒ¡}tjd|dd�| _d S )Nc                 S   rî  r¢  ri   rÍ  ri   ri   rj   r†  ‚  r  z6NamedTupleCursorWrapper.initialize.<locals>.<listcomp>ÚRowT©Úrename)rÌ  rB  rÐ  ÚcollectionsÚ
namedtupleÚtuple_class©rô   rÊ  ri   ri   rj   r¾  €  s   ÿÿz"NamedTupleCursorWrapper.initializec                 C   rO  rf   )rÛ  rÇ  ri   ri   rj   rÃ  †  r  z#NamedTupleCursorWrapper.process_rowN)rö   rü   rý   r¾  rÃ  ri   ri   ri   rj   r?    s    r?  c                       ó(   e Zd ZdZ‡ fdd„Zdd„ Z‡  ZS )r@  Tc                    r^  rf   )rÏ  r@  rõ   r9  )rô   rB  r9  rÐ  ri   rj   rõ   �  r_  zObjectCursorWrapper.__init__c                 C   s   |   |¡}| jdi |¤ŽS r#  )rÕ  r9  )rô   r  Úrow_dictri   ri   rj   rÃ  ‘  ó   
zObjectCursorWrapper.process_row©rö   rü   rý   rÉ  rõ   rÃ  rÒ  ri   ri   rÐ  rj   r@  Š  ó    r@  c                   @   s(   e Zd Zdd„ Zdd„ Zdd„ ZeZdS )rÂ  c                 C   s   || _ d| _d S rû  )Úcursor_wrapperrR  )rô   râ  ri   ri   rj   rõ   —  rÑ  zResultIterator.__init__c                 C   r°  rf   ri   r±  ri   ri   rj   rV  ›  r³  zResultIterator.__iter__c                 C   sV   | j | jjk r| jj| j  }n| jjs | j ¡  | jj| j  }nt‚|  j d7  _ |S rý  )rR  râ  r¢  rQ  rÁ  rÅ  rï  r:  ri   ri   rj   rî  ž  s   
zResultIterator.nextN)rö   rü   rý   rõ   rV  rî  Ú__next__ri   ri   ri   rj   rÂ  –  s
    rÂ  c                   @   ó&   e Zd Zdd„ Zddd„Zdd„ ZdS )	ÚFieldAccessorc                 C   rã  rf   )r  r,  r†  ©rô   r  r,  r†  ri   ri   rj   rõ   ®  ræ  zFieldAccessor.__init__Nc                 C   s2   |d urz|j | j W S  ty   Y d S w | jS rf   )Ú__data__r†  r   r,  r÷   ri   ri   rj   rú   ³  s   ÿzFieldAccessor.__get__c                 C   s   ||j | j< |j | j¡ d S rf   )rç  r†  Ú_dirtyr  ©rô   rø   rÇ   ri   ri   rj   rŠ  »  s   zFieldAccessor.__set__rf   ©rö   rü   rý   rõ   rú   rŠ  ri   ri   ri   rj   rå  ­  s    
rå  c                       ó6   e Zd Z‡ fdd„Zdd„ Zd
dd„Zdd	„ Z‡  ZS )ÚForeignKeyAccessorc                    s    t t| ƒ |||¡ |j| _d S rf   )rÏ  rì  rõ   Ú	rel_modelræ  rÐ  ri   rj   rõ   Á  r.  zForeignKeyAccessor.__init__c                 C   s‚   |j  | j¡}|d us| j|jv r3| j|jvr+| jjr+| j | jj|k¡}||j| j< |j | j|¡S | jjs?| jjr?| jj	‚|S rf   )
rç  r  r†  Ú__rel__r,  Ú	lazy_loadrí  Ú	rel_fieldrò  r3   )rô   rø   rÇ   r¼  ri   ri   rj   Úget_rel_instanceÅ  s   z#ForeignKeyAccessor.get_rel_instanceNc                 C   s   |d ur	|   |¡S | jS rf   )rñ  r,  r÷   ri   ri   rj   rú   Ð  s   
zForeignKeyAccessor.__get__c                 C   s˜   t || jƒrt|| jjjƒ|j| j< ||j| j< n*|j | j¡}||j| j< | j|jv rC|d uo;||ko;|j| j d u}|sC|j| j= |j	 
| j¡ d S rf   )rg   rí  r»   r,  rð  r†  rç  rî  r  rè  r  )rô   rø   r¼  Úfk_valueÚkeepri   ri   rj   rŠ  Õ  s   ÿ
zForeignKeyAccessor.__set__rf   )rö   rü   rý   rõ   rñ  rú   rŠ  rÒ  ri   ri   rÐ  rj   rì  À  s
    
rì  c                   @   rï   )ÚBackrefAccessorc                 C   s   || _ |j| _|j| _d S rf   )r,  rí  r  ©rô   r,  ri   ri   rj   rõ   æ  rœ  zBackrefAccessor.__init__Nc                 C   s2   |d ur| j jj}| j ¡  | j t||ƒk¡S | S rf   )r,  rð  r†  rí  rŠ  r®  r»   )rô   rø   rù   rŽ  ri   ri   rj   rú   ë  s   
þzBackrefAccessor.__get__rf   rû   ri   ri   ri   rj   rô  å  s    rô  c                   @   rä  )	ÚObjectIdAccessorc                 C   rñ   rf   ©r,  rõ  ri   ri   rj   rõ   õ  r  zObjectIdAccessor.__init__Nc                 C   sR   |d ur&|j  | jj¡}|d u r$|j | jj¡}|d ur$t|| jjjƒ}|S | jS rf   )rç  r  r,  r†  rî  r»   rð  )rô   rø   rù   rÇ   Úrel_objri   ri   rj   rú   ø  s   zObjectIdAccessor.__get__c                 C   s   t || jj|ƒ d S rf   )rÚ  r,  r†  ré  ri   ri   rj   rŠ    rª  zObjectIdAccessor.__set__rf   rê  ri   ri   ri   rj   rö  ô  s    
rö  c                   @   s¾   e Zd ZdZdZeZdZdZdZ						d(dd„Z
dd„ Zd	d
„ Zd)dd„Zedd„ ƒZdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ ZdS )*r8   r   FNr]  c                 C   s¤   |d ur
t dƒ |}|| _|| _|| _|| _|| _|| _|| _|| _|	| _	|
| _
|| _|| _|| _|p5| j| _|| _t jd7  _tj| _| jrJdpKd| jf| _d S )NzL"db_column" has been deprecated in favor of "column_name" for Field objects.rt   r›   )rî   rò  rR  r  rñ  rå  rÛ  r'  ry  r!  Ú	unindexedÚchoicesÚ	help_textÚverbose_nameÚdefault_index_typer)  Ú_hiddenr8   Ú_field_counterÚ_orderÚ	_sort_key)rô   rò  rR  r  rñ  rå  rÛ  r'  ry  r!  rù  rú  rû  rü  r)  Ú	db_columnrþ  ri   ri   rj   rõ     s*   zField.__init__c                 C   rW  rf   )r¨  r  r†  r±  ri   ri   rj   r¬  /  rÿ  zField.__hash__c                 C   s>   t | dƒrt| dd ƒrdt| ƒj| jj| jf S dt| ƒj S )Nr  r†  z<%s: %s.%s>z<%s: (unbound)>)rï  r»   rð  rö   r  r†  r±  ri   ri   rj   Ú__repr__3  s   
þzField.__repr__Tc                 C   s@   || _ | | _| _| jp|| _|rt|||  || |¡ƒ d S d S rf   )r  r†  Ú	safe_namerñ  rÚ  Úaccessor_class©rô   r  r†  Úset_attributeri   ri   rj   rº  :  s   ÿz
Field.bindc                 C   s   t | jjj| jƒS rf   )r%   r  r7  r8  rñ  r±  ri   ri   rj   rÝ  A  r%  zField.columnc                 C   rÆ  rf   ri   rb  ri   ri   rj   ÚadaptE  r³  zField.adaptc                 C   ó   |d u r|S |   |¡S rf   ©r  rb  ri   ri   rj   rˆ  H  rÝ  zField.db_valuec                 C   r	  rf   r
  rb  ri   ri   rj   rª  K  rÝ  zField.python_valuec                 C   s   t || jdd�S rr  )rb   rˆ  rb  ri   ri   rj   rÕ  N  rs   zField.to_valuec                 C   r?  rf   )rÕ  rb  ri   ri   rj   Ú
case_valueQ  r‡  zField.case_valuec                 C   r«  rf   )r  rE  ri   ri   rj   r&  U  r­  zField.get_sort_keyc                 C   re  rf   )r9  rÝ  rE  ri   ri   rj   r5  X  r  zField.__sql__c                 C   rR  rf   ri   r±  ri   ri   rj   Úget_modifiers[  r³  zField.get_modifiersc                 C   sd   |r|j jr|j j | j| j¡}n| j}|  ¡ }|r.|r.d dd„ |D ƒ¡}td||f ƒS t|ƒS )Nr|  c                 S   rý  ri   r�  )rÑ   r¢   ri   ri   rj   r†  g  r  z&Field.ddl_datatype.<locals>.<listcomp>z%s(%s))r"  rú  r  Ú
field_typer  rƒ  rZ   )rô   rF  Úcolumn_typeÚ	modifiersÚmodifier_literalri   ri   rj   Úddl_datatype^  s   ÿzField.ddl_datatypec                 C   sD   d| j v r| j  dd¡S t| dd ƒ}|d ur|jj| j gS d | j gS )Nr�  rt   r  )ry  r�  r»   r7  rÜ  ©rô   r  ri   ri   rj   Ú_sequence_partsl  s   
ÿÿzField._sequence_partsc                 C   s    |   ¡ \}}|rd||f S |S )Nz%s.%s)r  )rô   rÜ  r†  ri   ri   rj   Ú_sequence_nameu  rŸ  zField._sequence_namec                 C   s°   t | jƒg}|  |¡}|r| |¡ | jr| tdƒ¡ | js&| tdƒ¡ | jr0| tdƒ¡ | jr>| td|  	¡  ƒ¡ | j
rG| | j
¡ | jrT| td| j ƒ¡ t|ƒS )NÚ	UNINDEXEDzNOT NULLrp  zDEFAULT NEXTVAL('%s')rF  )r6   rñ  r  rÁ  rù  rZ   rò  rÛ  ry  r  r'  rD  r!  r4  )rô   rF  r÷  rÛ  ri   ri   rj   Úddly  s"   

z	Field.ddl)FFFNNFNNNFNNNNNFrp  )rö   rü   rý   rÿ  r   rå  r  rž  rý  r  rõ   r¬  r  rº  ró  rÝ  r  rˆ  rª  rÕ  r  r&  r5  r  r  r  r  r  ri   ri   ri   rj   r8     s<    
ü 

	r8   c                   @   ó   e Zd ZdZdS )r   ÚANYN©rö   rü   rý   r  ri   ri   ri   rj   r   �  ó    r   c                   @   ó   e Zd ZdZdd„ ZdS )r@   rb  c              	   C   ó&   zt |ƒW S  ttfy   | Y S w rf   )r“   rå   rä   rb  ri   ri   rj   r  ”  ó
   
ÿzIntegerField.adaptN©rö   rü   rý   r  r  ri   ri   ri   rj   r@   ‘  ó    r@   c                   @   r  )r   rU  Nr  ri   ri   ri   rj   r   ›  r  r   c                   @   r  )rX   rX  Nr  ri   ri   ri   rj   rX   Ÿ  r  rX   c                       s$   e Zd ZdZdZ‡ fdd„Z‡  ZS )r   TrR  c                    s@   |  d¡du rtdt| ƒ ƒ‚d|d< tt| ƒj|i |¤Ž d S )NrÛ  Fz %s must always be a primary key.T)r  rå   rð  rÏ  r   rõ   rÇ  rÐ  ri   rj   rõ   §  s   zAutoField.__init__)rö   rü   rý   rž  r  rõ   rÒ  ri   ri   rÐ  rj   r   £  s    r   c                   @   r  )r   rT  Nr  ri   ri   ri   rj   r   ®  r  r   c                       s"   e Zd ZdZd‡ fdd„	Z‡  ZS )r=   z$INT GENERATED BY DEFAULT AS IDENTITYFc                    s$   |rd| _ tt| ƒjdi |¤Ž d S )Nz INT GENERATED ALWAYS AS IDENTITYri   )r  rÏ  r=   rõ   )rô   Úgenerate_alwaysr¶  rÐ  ri   rj   rõ   µ  s   zIdentityField.__init__r  )rö   rü   rý   r  rõ   rÒ  ri   ri   rÐ  rj   r=   ²  ó    r=   c                       r  )rP   c                    s"   t dƒ tt| ƒj|i |¤Ž d S )Nz’"PrimaryKeyField" has been renamed to "AutoField". Please update your code accordingly as this will be completely removed in a subsequent release.)rî   rÏ  rP   rõ   rÇ  rÐ  ri   rj   rõ   ¼  s   zPrimaryKeyField.__init__rÇ  ri   ri   rÐ  rj   rP   »  r  rP   c                   @   r  )r:   ra  c              	   C   r  rf   )rk  rå   rä   rb  ri   ri   rj   r  Æ  r  zFloatField.adaptNr  ri   ri   ri   rj   r:   Ã  r  r:   c                   @   r  )r4   r_  Nr  ri   ri   ri   rj   r4   Í  r  r4   c                       s>   e Zd ZdZ		d‡ fdd„	Zdd	„ Zd
d„ Zdd„ Z‡  ZS )r.   r\  rŒ  rr  FNc                    sN   || _ || _|| _|ptjj| _t d¡| j  | _tt	| ƒj
|i |¤Ž d S )NrŒ  )Ú
max_digitsÚdecimal_placesÚ
auto_roundÚdecimalÚDefaultContextÚroundingÚDecimalÚ_exprÏ  r.   rõ   )rô   r"  r#  r$  r'  rµ  r¶  rÐ  ri   rj   rõ   Ô  s   zDecimalField.__init__c                 C   s   | j | jgS rf   )r"  r#  r±  ri   ri   rj   r  Ý  r  zDecimalField.get_modifiersc                 C   sF   t j}|s|d u r|S |dƒS | jr!|t|ƒƒ}|j| j| jd�S |S )Nr   )r'  )r%  r(  r$  r_  Úquantizer)  r'  )rô   rÇ   ÚDÚdecimal_valueri   ri   rj   rˆ  à  s   zDecimalField.db_valuec                 C   s*   |d urt |tjƒr|S t t|ƒ¡S d S rf   )rg   r%  r(  r_  rb  ri   ri   rj   rª  é  s
   ýzDecimalField.python_value)rŒ  rr  FN)	rö   rü   rý   r  rõ   r  rˆ  rª  rÒ  ri   ri   rÐ  rj   r.   Ñ  s    ÿ		r.   c                   @   rY  )Ú_StringFieldc                 C   s*   t |tƒr|S t |tƒr| d¡S t|ƒS )Nr4  )rg   r_  r`  rž   rb  ri   ri   rj   r  ñ  s
   


z_StringField.adaptc                 C   rD  rf   r>  r®  ri   ri   rj   r  ø  r  z_StringField.__add__c                 C   r�  rf   r>  r®  ri   ri   rj   rË  ù  r  z_StringField.__radd__N)rö   rü   rý   r  r  rË  ri   ri   ri   rj   r-  ð  s    r-  c                       s*   e Zd ZdZd‡ fdd„	Zdd„ Z‡  ZS )r"   rg  éÿ   c                    ó    || _ tt| ƒj|i |¤Ž d S rf   )Ú
max_lengthrÏ  r"   rõ   )rô   r0  rµ  r¶  rÐ  ri   rj   rõ   ÿ  ó   zCharField.__init__c                 C   s   | j r| j gpd S rf   )r0  r±  ri   ri   rj   r    r  zCharField.get_modifiers)r.  )rö   rü   rý   r  rõ   r  rÒ  ri   ri   rÐ  rj   r"   ü  s    r"   c                       s    e Zd ZdZ‡ fdd„Z‡  ZS )r9   rY  c                    s.   t t| ƒ |¡}|r| ¡ d | j…  ¡ }|S rf   )rÏ  r9   r  rw   r0  rb  rÐ  ri   rj   r  
  s   zFixedCharField.adapt)rö   rü   rý   r  r  rÒ  ri   ri   rÐ  rj   r9     s    r9   c                   @   r  )r]   rc  Nr  ri   ri   ri   rj   r]     r  r]   c                       s&   e Zd Zdd„ Zd‡ fdd„	Z‡  ZS )ÚFieldDatabaseHookc                 C   rÚ  )NzSubclasses must implementrh  rá  ri   ri   rj   Ú_db_hook  rØ  zFieldDatabaseHook._db_hookTc                    sZ   |j j}t|tƒr| | j¡ |jd u rd }|  |¡ |j j | j¡ t	t
| ƒ |||¡S rf   )r7  rê  rg   rT   rÂ  r3  r¼  Ú	_db_hooksrÁ  rÏ  r2  rº  )rô   r  r†  r  rê  rÐ  ri   rj   rº    s   


zFieldDatabaseHook.bindrp  )rö   rü   rý   r3  rº  rÒ  ri   ri   rÐ  rj   r2    s    r2  c                   @   r®  )r   rV  c                 C   s    |d u r	t | _d S | ¡ | _d S rf   )Ú	bytearrayr.  r  rá  ri   ri   rj   r3  *  s   
zBlobField._db_hookc                 C   s@   t |tƒr| d¡}n	t |tƒr| ¡ }t |tƒr|  |¡S |S )Nr\  )rg   r_  r9  Ú
memoryviewÚtobytesr`  r.  rb  ri   ri   rj   rˆ  0  s   



zBlobField.db_valueN)rö   rü   rý   r  r3  rˆ  ri   ri   ri   rj   r   '  s    r   c                       s&   e Zd Z‡ fdd„Zddd„Z‡  ZS )r   c                    s,   |  dd¡ tt| ƒj|i |¤Ž d| _d S )Nrå  r   rt   )r0  rÏ  r   rõ   Ú_BitField__current_flagrÇ  rÐ  ri   rj   rõ   ;  s   
zBitField.__init__Nc                    sF   |d u r| j }|  j dK  _ n|d> | _ G ‡ fdd„dtƒ‰ ˆ | |ƒS )Nrt   c                       sH   e Zd Z‡‡ fdd„Zdd„ Zdd„ Zddd	„Zd
d„ Zdd„ Z‡  Z	S )z%BitField.flag.<locals>.FlagDescriptorc                    s   || _ || _tˆ | ƒ ¡  d S rf   )Ú_fieldÚ_valuerÏ  rõ   rB  )ÚFlagDescriptorrÑ  ri   rj   rõ   H  s   z.BitField.flag.<locals>.FlagDescriptor.__init__c                 S   s   | j  | j ¡S rf   )r9  rS  r:  r±  ri   ri   rj   r  L  rs   z+BitField.flag.<locals>.FlagDescriptor.clearc                 S   s   | j  | j¡S rf   )r9  rT  r:  r±  ri   ri   rj   rÄ  N  r  z)BitField.flag.<locals>.FlagDescriptor.setNc                 S   s,   |d u r| S t || jjƒpd}|| j@ dkS rû  )r»   r9  r†  r:  )rô   rø   rù   rÇ   ri   ri   rj   rú   P  s   z-BitField.flag.<locals>.FlagDescriptor.__get__c                 S   sR   |dvrt dƒ‚t|| jjƒpd}|r|| jO }n|| j M }t|| jj|ƒ d S )N©TFz"Value must be either True or Falser   )rå   r»   r9  r†  r:  rÚ  )rô   rø   Úis_setrÇ   ri   ri   rj   rŠ  U  s   z-BitField.flag.<locals>.FlagDescriptor.__set__c                 S   s   |  | j | j¡dk¡S rû  )r9  r9  rS  r:  rE  ri   ri   rj   r5  ^  rå  z-BitField.flag.<locals>.FlagDescriptor.__sql__rf   )
rö   rü   rý   rõ   r  rÄ  rú   rŠ  r5  rÒ  ri   ©r;  rÐ  rj   r;  G  s    
	r;  )r8  r  rb  ri   r>  rj   Úflag@  s   

zBitField.flagrf   )rö   rü   rý   rõ   r?  rÒ  ri   ri   rÐ  rj   r   :  s    r   c                   @   s”   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	e	Z
dd„ ZeZdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!S )"ÚBigBitFieldDatac                 C   sR   || _ || _| j j | j¡}|stƒ }n	t|tƒst|ƒ}| | _| j j| j< d S rf   )rø   r†  rç  r  r5  rg   Ú_buffer)rô   rø   r†  rÇ   ri   ri   rj   rõ   d  s   
zBigBitFieldData.__init__c                 C   s   | j  ¡  d S rf   )rA  r  r±  ri   ri   rj   r  n  r  zBigBitFieldData.clearc                 C   s@   t |dƒ\}}t| jƒ}||kr| j d|d |  ¡ ||fS )Nrz  ó    rt   )Údivmodrœ   rA  rD  ©rô   r  Úbyte_numÚbyte_offsetÚcur_sizeri   ri   rj   Ú_ensure_lengthq  s
   
zBigBitFieldData._ensure_lengthc                 C   s(   |   |¡\}}| j|  d|> O  < d S rý  ©rH  rA  ©rô   r  rE  rF  ri   ri   rj   Úset_bitx  s   zBigBitFieldData.set_bitc                 C   s*   |   |¡\}}| j|  d|>  M  < d S rý  rI  rJ  ri   ri   rj   Ú	clear_bit|  s   zBigBitFieldData.clear_bitc                 C   s:   |   |¡\}}| j|  d|> N  < t| j| d|> @ ƒS rý  )rH  rA  rÉ   rJ  ri   ri   rj   Ú
toggle_bit€  s   zBigBitFieldData.toggle_bitc                 C   s:   t |dƒ\}}t| jƒ}||krdS t| j| d|> @ ƒS )Nrz  Frt   )rC  rœ   rA  rÉ   rD  ri   ri   rj   r=  …  s
   
zBigBitFieldData.is_setc                 C   s    |r	|   |¡ d S |  |¡ d S rf   )rK  rL  )rô   r(  rÇ   ri   ri   rj   r
  �  ó    zBigBitFieldData.__setitem__c                 C   r`  rf   )rœ   rA  r±  ri   ri   rj   rS  ‘  r  zBigBitFieldData.__len__c           	      C   s„   t |tƒr	|j}nt |tttfƒr|}ntdƒ‚tdtt| ƒt|ƒƒ ƒ}t	j
| j|dd�}t|ƒD ]\}\}}|||ƒ||< q2|S )NzIncompatible data-typerB  r   )r¡  )rg   r@  rA  r`  r5  r6  rå   Úmaxrœ   r§  r¨  ró  )	rô   r¯  rŽ  ÚdataÚbufr«  rü  rÊ   rË   ri   ri   rj   Ú_bitwise_op”  s   
zBigBitFieldData._bitwise_opc                 C   ó   |   |tj¡S rf   )rR  r_  rƒ  r®  ri   ri   rj   rÆ  ¡  r  zBigBitFieldData.__and__c                 C   rS  rf   )rR  r_  r`  r®  ri   ri   rj   rÈ  £  r  zBigBitFieldData.__or__c                 C   rS  rf   )rR  r_  Úxorr®  ri   ri   rj   rL  ¥  r  zBigBitFieldData.__xor__c                 c   s6   � | j D ]}tdƒD ]}|d|> @ rdndV  q
qd S )Nrz  rt   r   )rA  r  )rô   rË   Újri   ri   rj   rV  ¨  s   €
ÿÿzBigBitFieldData.__iter__c                 C   r`  rf   )ÚreprrA  r±  ri   ri   rj   r  ­  r  zBigBitFieldData.__repr__c                 C   r`  rf   )r`  rA  r±  ri   ri   rj   Ú	__bytes__°  r  zBigBitFieldData.__bytes__N)rö   rü   rý   rõ   r  rH  rK  rL  rM  r=  r  r
  Ú__delitem__rS  rR  rÆ  rÈ  rL  rV  r  rW  ri   ri   ri   rj   r@  c  s&    
r@  c                       s&   e Zd Zddd„Z‡ fdd„Z‡  ZS )ÚBigBitFieldAccessorNc                 C   s   |d u r| j S t|| jƒS rf   )r,  r@  r†  r÷   ri   ri   rj   rú   µ  s   zBigBitFieldAccessor.__get__c                    s†   |d u rn3t |tƒr| ¡ }n)t |tƒrt|ƒ}nt |tƒr$t|jƒ}nt |tƒr/| d¡}n	t |tƒs8t	dƒ‚t
t| ƒ ||¡ d S )Nr4  zEValue must be either a bytes, memoryview or BigBitFieldData instance.)rg   r6  r7  r5  r`  r@  rA  r_  r9  rå   rÏ  rY  rŠ  ré  rÐ  ri   rj   rŠ  ¹  s   






zBigBitFieldAccessor.__set__rf   )rö   rü   rý   rú   rŠ  rÒ  ri   ri   rÐ  rj   rY  ´  s    
rY  c                       s(   e Zd ZeZ‡ fdd„Zdd„ Z‡  ZS )r   c                    s&   |  dt¡ tt| ƒj|i |¤Ž d S )Nrå  )r0  r`  rÏ  r   rõ   rÇ  rÐ  ri   rj   rõ   Í  s   zBigBitField.__init__c                 C   s   |d urt |ƒS |S rf   ©r`  rb  ri   ri   rj   rˆ  Ñ  rª  zBigBitField.db_value)rö   rü   rý   rY  r  rõ   rˆ  rÒ  ri   ri   rÐ  rj   r   Ê  rá  r   c                   @   r®  )ra   re  c                 C   st   t |tƒrt|ƒdkr|S t |tƒrt|ƒdkrtj|d�}t |tjƒr'|jS zt |¡jW S  ty9   | Y S w )Né    r{  rZ  )rg   r_  rœ   r`  r<  re  rº  r  rb  ri   ri   rj   rˆ  Ø  s   ÿzUUIDField.db_valuec                 C   s&   t |tjƒr|S |d urt |¡S d S rf   )rg   r<  re  rb  ri   ri   rj   rª  æ  s   zUUIDField.python_valueN©rö   rü   rý   r  rˆ  rª  ri   ri   ri   rj   ra   Õ  s    ra   c                   @   r®  )r   rf  c                 C   sn   t |tƒrt|ƒdkr|  |¡S t |tƒr!t|ƒdkr!tj|d�}t |tjƒr-|  |j¡S |d ur5tdƒ‚d S )Nr{  r[  )rº  zTvalue for binary UUID field must be UUID(), a hexadecimal string, or a bytes object.)rg   r`  rœ   r.  r_  r<  re  rå   rb  ri   ri   rj   rˆ  ï  s   
ÿzBinaryUUIDField.db_valuec                 C   sR   t |tjƒr|S t |tƒr| ¡ }n|rt |tƒst|ƒ}|d ur'tj|d�S d S )NrZ  )rg   r<  re  r6  r7  r`  rb  ri   ri   rj   rª  ü  s   

zBinaryUUIDField.python_valueNr\  ri   ri   ri   rj   r   ì  s    r   c                    rÄ  )Nc                    s   | j jj ˆ | ¡S rf   )r  r7  rê  rs  r±  ©rq  ri   rj   Údec  r  z_date_part.<locals>.decri   ©rq  r^  ri   r]  rj   Ú
_date_part  r  r`  c              	   C   sÆ   |pdd„ }| rG| }t |ƒdkr$|d dkr$|d d… d |dd …  }|dd … dkr4|d d… d	 }z|t|ƒƒW S  ttfyF   Y nw |D ]}z|tj | |¡ƒW   S  ty`   Y qIw | S )
Nc                 S   r°  rf   ri   ©rÒ   ri   ri   rj   rk     r�  z"format_date_time.<locals>.<lambda>rŒ  r‹   ÚTé   ru   ÚZz+00:00)rœ   Ú_fromisoformaträ   rå   r�   Ústrptime)rÇ   ÚformatsÚpost_processrp   Úfmtri   ri   rj   r¹     s&   ÿÿr¹   c              	   C   s,   zt j  | d¡W S  ttfy   |  Y S w )Nr®   )r�   rf  rä   rå   r‘  ri   ri   rj   r  #  s
   ÿr  c                       s"   e Zd ZdZd‡ fdd„	Z‡  ZS )Ú_BaseFormattedFieldNc                    s(   |d ur|| _ tt| ƒj|i |¤Ž d S rf   )rg  rÏ  rj  rõ   )rô   rg  rµ  r¶  rÐ  ri   rj   rõ   -  s   z_BaseFormattedField.__init__rf   )rö   rü   rý   rg  rõ   rÒ  ri   ri   rÐ  rj   rj  *  r!  rj  c                   @   sx   e Zd ZdZg d¢Zdd„ Zdd„ Zdd„ Zee	d	ƒƒZ
ee	d
ƒƒZee	dƒƒZee	dƒƒZee	dƒƒZee	dƒƒZdS )r-   r[  )r¯   r®   r±   r°   r²   c                 C   s   |rt |tƒrt|| jƒS |S rf   )rg   r_  r¹   rg  rb  ri   ri   rj   r  =  rf  zDateTimeField.adaptc                 C   ó   | j jj | ¡S rf   ©r  r7  rê  rv  r±  ri   ri   rj   rv  B  rs   zDateTimeField.to_timestampc                 C   ó   | j jj || ¡S rf   ©r  r7  rê  rt  ©rô   rz   ri   ri   rj   ÚtruncateE  r  zDateTimeField.truncater«   r¬   r­   r¤   r¥   r¦   N)rö   rü   rý   r  rg  r  rv  rp  ró  r`  r«   r¬   r­   r¤   r¥   r¦   ri   ri   ri   rj   r-   3  s    r-   c                   @   sT   e Zd ZdZg d¢Zdd„ Zdd„ Zdd„ Zee	d	ƒƒZ
ee	d
ƒƒZee	dƒƒZdS )r,   rZ  )r²   r®   r¯   c                 C   s@   |rt |tƒrdd„ }t|| j|ƒS |rt |tjƒr| ¡ S |S )Nc                 S   ó   |   ¡ S rf   )r‘   ra  ri   ri   rj   rk   Z  r  z!DateField.adapt.<locals>.<lambda>)rg   r_  r¹   rg  r�   r‘   ©rô   rÇ   Úppri   ri   rj   r  X  s   zDateField.adaptc                 C   rk  rf   rl  r±  ri   ri   rj   rv  `  rs   zDateField.to_timestampc                 C   rm  rf   rn  ro  ri   ri   rj   rp  c  r  zDateField.truncater«   r¬   r­   N)rö   rü   rý   r  rg  r  rv  rp  ró  r`  r«   r¬   r­   ri   ri   ri   rj   r,   P  s    r,   c                   @   sD   e Zd ZdZg d¢Zdd„ ZeedƒƒZeedƒƒZ	eedƒƒZ
dS )	r^   rd  )r´   r³   r·   r¶   rµ   r¯   r®   c                 C   s€   t |tƒr$|r$ztj |¡W S  ty#   dd„ }t|| j|ƒ}Y |S w t |tjƒr0| ¡ }|S t |tjƒr>tjj	|  ¡ }|S )Nc                 S   rq  rf   )Útimetzra  ri   ri   rj   rk   |  r  z!TimeField.adapt.<locals>.<lambda>)
rg   r_  r�   r    Úfromisoformatrå   r¹   rg  Ú	timedeltaÚminrr  ri   ri   rj   r  w  s   ùþzTimeField.adaptr¤   r¥   r¦   N)rö   rü   rý   r  rg  r  ró  r`  r¤   r¥   r¦   ri   ri   ri   rj   r^   k  s    
r^   c                    rÄ  )Nc                    s<   | j jj}| jdkr| t| jdd� n| }| ˆ | |¡¡S ©Nrt   Fr<  )r  r7  rê  Ú
resolutionrb   rs  rw  )rô   rW  rí  r]  ri   rj   r^  Š  s   

ÿÿz!_timestamp_date_part.<locals>.decri   r_  ri   r]  rj   Ú_timestamp_date_part‰  ó   rz  c                       s    e Zd Zdd„ edƒD ƒZeejƒZ‡ fdd„Zdd„ Z	dd	„ Z
d
d„ Zdd„ ZeedƒƒZeedƒƒZeedƒƒZeedƒƒZeedƒƒZeedƒƒZ‡  ZS )r_   c                 C   s   g | ]}d | ‘qS r‹  ri   rÒ  ri   ri   rj   r†  ”  r  zTimestampField.<listcomp>r6  c                    sº   |  dd ¡| _| jsd| _n$| jtddƒv rd| j | _n| j| jvr2tdd dd	„ | jD ƒ¡ ƒ‚d
| j | _|  dd¡p?d| _| jrFtnt	j	j
}| d|¡ tt| ƒj|i |¤Ž d S )Nry  rt   r›   r6  rŒ  z,TimestampField resolution must be one of: %sr|  c                 s   r¢  rf   r�  rÒ  ri   ri   rj   rÔ      r¥  z*TimestampField.__init__.<locals>.<genexpr>i@B r„   Frå  )rª  ry  r  Úvalid_resolutionsrå   rƒ  Úticks_to_microsecondr„   rˆ   r�   r‡   r0  rÏ  r_   rõ   )rô   rµ  r¶  ÚdfltrÐ  ri   rj   rõ   —  s   ÿzTimestampField.__init__c                 C   s,   | j s|jd urt | ¡ ¡S t | ¡ ¡S rf   )r„   r€   ÚcalendarÚtimegmÚutctimetupler    ÚmktimeÚ	timetuplerb  ri   ri   rj   Úget_timestamp¨  s   zTimestampField.get_timestampc                 C   sœ   |d u rd S t |tƒrt|| jƒ}t |tjƒrnt |tjƒr)t |j|j|j¡}n	t	t
|| j ƒƒS |  |¡}| jdkrH||jd 7 }|| j9 }t	t
|ƒƒS )Nrt   g�íµ ÷Æ°>)rg   r_  r¹   rg  r�   r‘   r«   r¬   r­   r“   Úroundry  r„  Úmicrosecond)rô   rÇ   r©   ri   ri   rj   rˆ  °  s   



zTimestampField.db_valuec                 C   st   |d ur8t |ttfƒr8| jdkr t|| jƒ\}}t|| j ƒ}nd}| jr*t|ƒ}ntj 	|¡}|r8|j
|d�}|S )Nrt   r   )r†  )rg   r“   rk  ry  rC  r}  r„   r†   r�   r‚   ro   )rô   rÇ   ÚticksÚmicrosecondsri   ri   rj   rª  Ä  s   

zTimestampField.python_valuec                 C   s0   | j dkr| t| j dd� n| }| jjj |¡S rx  )ry  rb   r  r7  rê  rw  )rô   rí  ri   ri   rj   rw  Ö  s
   
ÿÿzTimestampField.from_timestampr«   r¬   r­   r¤   r¥   r¦   )rö   rü   rý   r  r|  rÖ   r-   rg  rõ   r„  rˆ  rª  rw  ró  rz  r«   r¬   r­   r¤   r¥   r¦   rÒ  ri   ri   rÐ  rj   r_   ’  s    
r_   c                   @   r~  )rD   c                 C   s"   |d urt  dt |¡¡d S d S )Nú!Ir   )Ústructrp  ÚsocketÚ	inet_atonr‚  ri   ri   rj   rˆ  ä  r•  zIPField.db_valuec                 C   s   |d urt  t d|¡¡S d S )Nr‰  )r‹  Ú	inet_ntoarŠ  Úpackr‚  ri   ri   rj   rª  è  r|  zIPField.python_valueN)rö   rü   rý   rˆ  rª  ri   ri   ri   rj   rD   ã  r  rD   c                   @   s   e Zd ZdZeZdS )r   rW  N)rö   rü   rý   r  rÉ   r  ri   ri   ri   rj   r   í  s    r   c                       sj  e Zd ZdT‡ fdd„	Zdd„ Zdd„ Zd	d
„ ZejdUdd„ƒZ	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdUdd„ZejZdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Zd.d/„ Z‡ fd0d1„Zd2d3„ Zd4d5„ Zd6d7„ Z d8d9„ Z!d:d;„ Z"d<d=„ Z#d>d?„ Z$d@dA„ Z%dBdC„ Z&dDdE„ Z'dFdG„ Z(dHdI„ Z)dJdK„ Z*dLdM„ Z+dNdO„ Z,dPdQ„ Z-dRdS„ Z.‡  Z/S )VÚJSONPathri   Fc                    s(   t t| ƒ ¡  || _t|ƒ| _|| _d S rf   )rÏ  r�  rõ   r9  r�  Ú_keysÚ_as_text)rô   r,  rK  Úas_textrÐ  ri   rj   rõ   ó  s   

zJSONPath.__init__c                 C   s   t | ƒ| j| j| jƒS rf   ©rð  r9  r�  r‘  r±  ri   ri   rj   re  ù  rÝ  zJSONPath.clonec                 C   s   t | ƒ| j| j|f | jƒS rf   r“  ©rô   rí  ri   ri   rj   r  ü  r=  zJSONPath.__getitem__c                 G   s   t | ƒ| j| j| | jƒS rf   r“  ©rô   rK  ri   ri   rj   r‡  ÿ  rh  zJSONPath.pathTc                 C   rñ   rf   )r‘  )rô   r’  ri   ri   rj   r’    r‡  zJSONPath.as_textc                 C   s,   | j j | j | j¡}| j j |¡}t||ƒS rf   )r9  r±  rO  r�  rQ  r!   )rô   rŸ   rí  Útyp_nameri   ri   rj   Ú_typed_cast  s   
zJSONPath._typed_castc                 C   r‰   )Nr“   ©r—  r±  ri   ri   rj   Úas_int  r  zJSONPath.as_intc                 C   r‰   )Nrk  r˜  r±  ri   ri   rj   Úas_float  r  zJSONPath.as_floatc                 C   s:   | j r| jj | j| j¡}n
| jj | j| j¡}| |¡S rf   )r‘  r9  r±  rO  r�  rN  r9  )rô   rF  rí  ri   ri   rj   r5    s   
zJSONPath.__sql__c                 C   s   | j s|d u r	|S | j |¡S rf   )r‘  r9  rª  rb  ri   ri   rj   r    s   zJSONPath._converterc                 C   ó   | j  | tjtj|| j¡S rf   )r9  Ú_comparerM   r!  r,  r‘  r
  ri   ri   rj   r°    rh  zJSONPath.__eq__c                 C   r›  rf   )r9  rœ  rM   r)  r-  r‘  r
  ri   ri   rj   r²    rh  zJSONPath.__ne__c                 C   s(   |rt jnt j}| j | t j|d | j¡S rf   )rM   r,  r-  r9  rœ  r!  r‘  )rô   rQ  Úis_opri   ri   rj   rQ  !  rM  zJSONPath.is_nullc                 C   s*   | j j}|d ur| | j |¡S | j  |¡S rf   )r9  r±  rC  rˆ  )rô   rÇ   Úhelperri   ri   rj   Ú_compare_value)  s   zJSONPath._compare_valuec                    sJ   t |tƒrtˆ ||ƒS ˆ jrtˆ |t|ƒƒS ‡ fdd„|D ƒ}tˆ ||ƒS )Nc                    s$   g | ]}t |tƒr|nˆ  |¡‘qS ri   )rg   r“  rŸ  r÷  r±  ri   rj   r†  5  r�  z'JSONPath._in_helper.<locals>.<listcomp>)rg   r“  rE  r‘  rÖ   ©rô   rŽ  r  ri   r±  rj   Ú
_in_helper/  s   

ÿzJSONPath._in_helperc                 C   ó   |   tj|¡S rf   )r¡  rM   r*  r
  ri   ri   rj   rU  8  r  zJSONPath.in_c                 C   r¢  rf   )r¡  rM   r+  r
  ri   ri   rj   r>  :  r  zJSONPath.not_inc                 C   s.   | j st|tƒrt| ||ƒS t| ||  |¡ƒS rf   )r‘  rg   r“  rE  rŸ  r   ri   ri   rj   Ú_cmp=  s   zJSONPath._cmpc                 C   r¢  rf   )r£  rM   r#  r
  ri   ri   rj   r¶  B  r  zJSONPath.__lt__c                 C   r¢  rf   )r£  rM   r%  r
  ri   ri   rj   r·  C  r  zJSONPath.__le__c                 C   r¢  rf   )r£  rM   r&  r
  ri   ri   rj   r¸  D  r  zJSONPath.__gt__c                 C   r¢  rf   )r£  rM   r(  r
  ri   ri   rj   r¹  E  r  zJSONPath.__ge__c                    s@   | j st|tƒs|  |¡}t|tƒs|  |¡}tt| ƒ ||¡S rf   )r‘  rg   r“  rŸ  rÏ  r�  rP  r:  rÐ  ri   rj   rP  F  s   



zJSONPath.betweenc                 C   ó   t  |  d¡|¡S rK  )r  rG  r’  r
  ri   ri   rj   rG  N  r  zJSONPath.likec                 C   r¤  rK  )r  rH  r’  r
  ri   ri   rj   rH  P  r  zJSONPath.ilikec                 C   r¤  rK  )r  rI  r’  r
  ri   ri   rj   rI  R  r  zJSONPath.regexpc                 C   r¤  rK  )r  rJ  r’  r
  ri   ri   rj   rJ  T  r  zJSONPath.iregexpc                 C   r¤  rK  )r  rL  r’  r
  ri   ri   rj   rL  V  r  zJSONPath.startswithc                 C   r¤  rK  )r  rN  r’  r
  ri   ri   rj   rN  X  r  zJSONPath.endswithc                 C   s(   | j r	t | |¡S | jj | j| j|¡S rf   )r‘  r  rK  r9  r±  r�  r
  ri   ri   rj   rK  [  s   zJSONPath.containsc                 C   ó   | j j | j | j|¡S rf   )r9  r±  rÄ  r�  rb  ri   ri   rj   rÄ  `  rÝ  zJSONPath.setc                 C   r¥  rf   )r9  r±  rê  r�  rb  ri   ri   rj   rê  c  rÝ  zJSONPath.insertc                 C   r¥  rf   )r9  r±  ro   r�  rb  ri   ri   rj   ro   f  rÝ  zJSONPath.replacec                 C   r¥  rf   )r9  r±  rÁ  r�  rb  ri   ri   rj   rÁ  i  rÝ  zJSONPath.appendc                 C   ó   | j j | j | j¡S rf   )r9  r±  rU  r�  r±  ri   ri   rj   rU  l  rª  zJSONPath.removec                 C   r¦  rf   )r9  r±  rV  r�  r±  ri   ri   rj   rV  o  rª  zJSONPath.lengthc                 C   r¥  rf   )r9  r±  rW  r�  rb  ri   ri   rj   rW  r  rÝ  zJSONPath.contained_byc                 C   r¥  rf   )r9  r±  rX  r�  r”  ri   ri   rj   rX  u  rÝ  zJSONPath.has_keyc                 C   r¥  rf   )r9  r±  r[  r�  ©rô   rZ  ri   ri   rj   r[  x  rÝ  zJSONPath.has_keysc                 C   r¥  rf   )r9  r±  r\  r�  r§  ri   ri   rj   r\  {  rm  zJSONPath.has_any_keys)ri   Frp  )0rö   rü   rý   rõ   re  r  r‡  r“  r|  r’  r—  r™  rš  r5  r  r°  r²  rQ  r¦  r¬  rŸ  r¡  rU  r>  r£  r¶  r·  r¸  r¹  rP  rG  rH  rI  rJ  rL  rN  rK  rÄ  rê  ro   rÁ  rU  rV  rW  rX  r[  r\  rÒ  ri   ri   rÐ  rj   r�  ò  sV    
	r�  c                       s¸   e Zd ZdZd)‡ fdd„	Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ ZejZdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Z‡  ZS )*rF   r¥  Nc                    sD   |pt j| _|p
t j| _d | _d | _d | _tt	| ƒj
di |¤Ž d S r#  )râ   ra  rE  rã   Ú_loadsr±  Ú_wrapÚ_readrÏ  rF   rõ   )rô   ra  rã   r¶  rÐ  ri   rj   rõ   ƒ  s   zJSONField.__init__c                 C   sR   |d u rd  | _  | _| _d S |j}||ƒ| _ | j  | j¡| _| j  | j¡| _d S rf   )r±  r©  rª  r�  rd  rE  rA  r¨  )rô   rê  Úclsri   ri   rj   r3  ‹  s   
zJSONField._db_hookc                 C   s.   |d u s	t |tƒr|S | jd ur|  |¡S |S rf   )rg   r“  r©  rb  ri   ri   rj   rˆ  •  s   zJSONField.db_valuec                 C   s$   |d u r|S | j d ur|   |¡S |S rf   )rª  rb  ri   ri   rj   rª  š  s   zJSONField.python_valuec                 C   s    |d u s	t |tƒr|S |  |¡S rf   )rg   r“  rˆ  rb  ri   ri   rj   rÕ  Ÿ  s   
zJSONField.to_valuec                 C   s@   | j d ur|d urt|tƒs| j  | |¡}|d ur|S |  |¡S rf   )r±  rg   r“  rS  rÕ  )rô   rÇ   r  ri   ri   rj   r  ¤  s   ÿ
zJSONField.case_valuec                 C   s   t | |fƒS rf   ©r�  r”  ri   ri   rj   r  ¬  r  zJSONField.__getitem__c                 G   rã  rf   r¬  r•  ri   ri   rj   r‡  ¯  r  zJSONField.pathc                 C   sž   |d u r%t |tƒr|js| jd ur| j | |j¡}t||d ƒS t||d ƒS |s,t |tƒr2t|||ƒS t |tƒrD| jd urD| j | |¡}n|  	|¡}t|||ƒS rf   )
rg   r�  r‘  r±  rO  r�  rE  r“  rC  rˆ  )rô   rô  Úeq_opr�  r  r’  rí  ri   ri   rj   rœ  ²  s   

zJSONField._comparec                 C   ó   |   | tjtj|d¡S rÄ   )rœ  rM   r!  r,  r
  ri   ri   rj   r°  Å  rÝ  zJSONField.__eq__c                 C   r®  rÄ   )rœ  rM   r)  r-  r
  ri   ri   rj   r²  Ç  rÝ  zJSONField.__ne__c                 C   s   | j  | d¡S r#  )r±  rV  r±  ri   ri   rj   rV  Ë  r  zJSONField.lengthc                 C   ó   | j  | d|¡S r#  )r±  rÁ  rb  ri   ri   rj   rÁ  Î  rÿ  zJSONField.appendc                 C   s   | j  | |¡S rf   )r±  r	  rb  ri   ri   rj   r	  Ò  s   zJSONField.updatec                 C   r¯  r#  )r±  rK  rb  ri   ri   rj   rK  ×  rs   zJSONField.containsc                 C   r¯  r#  )r±  rW  rb  ri   ri   rj   rW  Ú  rs   zJSONField.contained_byc                 C   r¯  r#  )r±  rX  r”  ri   ri   rj   rX  Ý  rs   zJSONField.has_keyc                 C   r¯  r#  )r±  r[  r§  ri   ri   rj   r[  à  rs   zJSONField.has_keysc                 C   r¯  r#  )r±  r\  r§  ri   ri   rj   r\  ã  rs   zJSONField.has_any_keysr  )rö   rü   rý   r  rõ   r3  rˆ  rª  rÕ  r  r  r‡  rœ  r°  r²  r8   r¬  rV  rÁ  r	  rK  rW  rX  r[  r\  rÒ  ri   ri   rÐ  rj   rF   €  s,    
rF   c                       rU  )r   Nc                    s,   t t| ƒj|i |¤Ž |d ur|| _d S d S rf   )rÏ  r   rõ   r  )rô   r  rµ  r¶  rÐ  ri   rj   rõ   è  s   
ÿzBareField.__init__c                 C   rR  rf   ri   rE  ri   ri   rj   r  í  r³  zBareField.ddl_datatyperf   )rö   rü   rý   rõ   r  rÒ  ri   ri   rÐ  rj   r   ç  rX  r   c                       s†   e Zd ZeZeZ				d‡ fdd„	Zedd„ ƒZ	‡ fdd„Z
d	d
„ Zdd„ Zdd„ Zdd„ Zd‡ fdd„	Zddd„Zdd„ Z‡  ZS )r<   NTc                    s¸   |  dd¡ tt| ƒj|i |¤Ž |d urtdƒ |}|	d ur%tdƒ |	}|d ur/tdƒ |}t|tƒo7|dk| _|| _|| _	|| _
d | _|| _|| _|| _|| _|
| _|| _|| _d S )NrR  TzP"rel_model" has been deprecated in favor of "model" for ForeignKeyField objects.zO"to_field" has been deprecated in favor of "field" for ForeignKeyField objects.zK"related_name" has been deprecated in favor of "backref" for Field objects.rô   )r0  rÏ  r<   rõ   rî   rg   r_  Ú_is_self_referencerí  rð  Údeclared_backrefÚbackrefrá  râ  Ú
deferrabler  Úobject_id_namerï  Úconstraint_name)rô   r  r,  r²  rá  râ  r³  Ú	_deferredrí  Úto_fieldr´  rï  rµ  Úrelated_namerµ  r¶  rÐ  ri   rj   rõ   õ  s.   
zForeignKeyField.__init__c                 C   s,   t | jtƒr	tjS t | jtƒs| jjS tjS rf   )rg   rð  r   r   r  r   r@   r±  ri   ri   rj   r    s
   zForeignKeyField.field_typec                    s$   t | jtƒs| j ¡ S tt| ƒ ¡ S rf   )rg   rð  r   r  rÏ  r<   r±  rÐ  ri   rj   r     s   
zForeignKeyField.get_modifiersc                 C   s"   | j pd| jjj| j| jjjf S )Nzfk_%s_%s_refs_%s)rµ  r  r7  r(  rñ  rí  r±  ri   ri   rj   Úget_constraint_name%  s
   ýz#ForeignKeyField.get_constraint_namec                 C   r  rf   )rð  r  rb  ri   ri   rj   r  +  r  zForeignKeyField.adaptc                 C   s&   t || jƒrt|| jjƒ}| j |¡S rf   )rg   rí  r»   rð  r†  rˆ  rb  ri   ri   rj   rˆ  .  s   zForeignKeyField.db_valuec                 C   s   t || jƒr|S | j |¡S rf   )rg   rí  rð  rª  rb  ri   ri   rj   rª  3  s   zForeignKeyField.python_valuec                    s>  | j s| d¡r
|n|d | _ | js#| j | _| j|kr"|  jd7  _n| j|kr2td|jj|f ƒ‚| jr8|| _t| j	t
ƒrGt| j| j	ƒ| _	n| j	d u rR| jjj| _	tt| ƒ |||¡ | j| _t| jƒrl|  | ¡| _n| jd | _| _| js~d|jj | _|r›t|| jt| ƒƒ | jdvr�t| j| j|  | ¡ƒ d S d S d S )NÚ_idzYForeignKeyField "%s"."%s" specifies an object_id_name that conflicts with its field name.z%s_set©r  ú!)rñ  rN  r´  rå   r7  r†  r°  rí  rg   rð  r_  r»   rÛ  rÏ  r<   rº  r  rô  r±  r²  rÚ  rö  Úbackref_accessor_classr  rÐ  ri   rj   rº  8  s@   
€

þ



ÿýzForeignKeyField.bindFc                 C   s²   g }| j s|r|  ¡ }| tdƒtt|ƒƒg¡ | tdƒt| fƒtdƒ| jt| jfƒg¡ | j	r;| 
td| j	 ƒ¡ | jrH| 
td| j ƒ¡ | jrU| 
td| j ƒ¡ t|ƒS )Nrœ  zFOREIGN KEYÚ
REFERENCESzON DELETE %szON UPDATE %szDEFERRABLE %s)rµ  r¹  rD  rZ   r6   r/  rÿ  rí  rð  rá  rÁ  râ  r³  r4  )rô   Úexplicit_namerÛ  r†  ri   ri   rj   Úforeign_key_constraint\  s*   

þ
ûz&ForeignKeyField.foreign_key_constraintc                 C   s:   |  d¡r	tdƒ‚|| jjjv r| jjj| S td| ƒ‚)Nr’  z)Cannot look-up non-existant "__" methods.zNForeign-key has no attribute %s, nor is it a valid field on the related model.)rL  r  rí  r7  r+  r  ri   ri   rj   r  r  s   
ÿzForeignKeyField.__getattr__)NNNNNNNNNTNNrp  r  )rö   rü   rý   rì  r  rô  r½  rõ   ró  r  r  r¹  r  rˆ  rª  rº  rÀ  r  rÒ  ri   ri   rÐ  rj   r<   ñ  s$    ý#

$r<   c                       sF   e Zd Zeƒ Z‡ fdd„ZejZd
dd„Zdd„ Z	e
dd	„ ƒZ‡  ZS )r0   c                    sH   || _ | ¡ | _tj | ¡ tt| ƒj| d¡| d¡| d¡d� d S )Nrñ  rò  rÛ  )rñ  rò  rÛ  )	Úfield_kwargsr™  Úrel_model_namer0   Ú_unresolvedr  rÏ  rõ   r  )rô   rÂ  r¶  rÐ  ri   rj   rõ     s   


ýzDeferredForeignKey.__init__Nc                 C   s   t | jfi | j¤ŽS rf   )r0   rÂ  rÁ  r  ri   ri   rj   r
  Š  rª  zDeferredForeignKey.__deepcopy__c                 C   sH   t |fddi| j¤Ž}|jr| jj | j|¡ d S | jj | j|¡ d S )Nr¶  T)r<   rÁ  rÛ  r  r7  Úset_primary_keyr†  Ú	add_field)rô   rí  r,  ri   ri   rj   Ú	set_model�  s   zDeferredForeignKey.set_modelc                 C   sH   t tjt d¡d�}|D ]}|j| j ¡ kr!| | ¡ tj 	|¡ qd S )Nr   rÓ  )
rÔ  r0   rÃ  r_  Ú
attrgetterrÂ  rö   r™  rÆ  Údiscard)Ú	model_clsÚ
unresolvedÚdrri   ri   rj   Úresolve•  s   ÿ
€ýzDeferredForeignKey.resolverf   )rö   rü   rý   rÄ  rÃ  rõ   r¦  r¬  r
  rÆ  rr  rÌ  rÒ  ri   ri   rÐ  rj   r0   |  s    	
r0   c                   @   rY  )r1   c                 C   s
   g | _ d S rf   )Ú_refsr±  ri   ri   rj   rõ      r  zDeferredThroughModel.__init__c                 C   s   | j  |||f¡ d S rf   )rÍ  rÁ  ræ  ri   ri   rj   Ú	set_field£  rÝ  zDeferredThroughModel.set_fieldc                 C   s*   | j D ]\}}}||_|j ||¡ qd S rf   )rÍ  Úthrough_modelr7  rÅ  )rô   rÏ  Ú	src_modelÚm2mfieldr†  ri   ri   rj   rÆ  ¦  s   þzDeferredThroughModel.set_modelN)rö   rü   rý   rõ   rÎ  rÆ  ri   ri   ri   rj   r1   Ÿ  s    r1   c                   @   s    e Zd Zd Z Z ZZdZdS )Ú	MetaFieldNF)rö   rü   rý   rñ  rå  r  r†  rÛ  ri   ri   ri   rj   rÒ  ¬  s    rÒ  c                       rë  )ÚManyToManyFieldAccessorc                    s”   t t| ƒ |||¡ |j| _|j| _|j| _| jjj| j }| jjj| j }|s2td| j| jf ƒ‚|s>td| j| jf ƒ‚|d | _	|d | _
d S )Nz.Cannot find foreign-key to "%s" on "%s" model.r   )rÏ  rÓ  rõ   r  rí  rÏ  r7  Ú
model_refsrå   Úsrc_fkÚdest_fk)rô   r  r,  r†  Úsrc_fksÚdest_fksrÐ  ri   rj   rõ   ²  s    
ÿ
ÿ
z ManyToManyFieldAccessor.__init__c                 C   s\   t || jjjƒ}|d u r| jjrtd| j|f ƒ‚t|| | jƒ 	| j
¡ 	| j¡ | j|k¡S )Nz9Cannot access many-to-many "%s" on unsaved instance "%s".)r»   rÕ  rð  r†  r,  Ú_prevent_unsavedrå   ÚManyToManyQueryrí  rƒ  rÏ  r  r®  )rô   rø   Úsrc_idri   ri   rj   Ú	get_queryÂ  s   ÿýz!ManyToManyFieldAccessor.get_queryNc                    sN   |d ur$ˆ j jdvrt|ˆ j jƒ}t|tƒr‡ fdd„|D ƒS ˆ  |¡S ˆ jS )Nr»  c                    s   g | ]	}t |ˆ jjƒ‘qS ri   )r»   rÖ  r†  ©rÑ   r¼  r±  ri   rj   r†  Ñ  r‚  z3ManyToManyFieldAccessor.__get__.<locals>.<listcomp>)rÕ  r²  r»   rg   rÖ   rÜ  r,  )rô   rø   rù   r²  ri   r±  rj   rú   Ì  s   

zManyToManyFieldAccessor.__get__c                 C   s   |   |¡j|dd� d S )NT)Úclear_existing)rÜ  r  ré  ri   ri   rj   rŠ  Õ  rå  zManyToManyFieldAccessor.__set__rf   )rö   rü   rý   rõ   rÜ  rú   rŠ  rÒ  ri   ri   rÐ  rj   rÓ  ±  s
    

	rÓ  c                       sb   e Zd ZeZ		ddd„Zd‡ fdd„	Zdd	„ Zed
d„ ƒZ	e	j
dd„ ƒZ	dd„ Zdd„ Z‡  ZS )rH   NTFc                 C   sl   |d urt |tƒst|ƒstdƒ‚|s|d us|d urtdƒ‚|| _|| _|| _|| _|| _	|| _
|| _d S )NzKUnexpected value for through_model. Expected Model or DeferredThroughModel.zFCannot specify on_delete or on_update when through_model is specified.)rg   r1   r6  rä   rå   rí  r²  Ú_through_modelÚ
_on_deleteÚ
_on_updaterÙ  Ú_is_backref)rô   r  r²  rÏ  rá  râ  Úprevent_unsavedrâ  ri   ri   rj   rõ   Ü  s   
ÿ
zManyToManyField.__init__c                    s’   t | jtƒr| j || |¡ d S tt| ƒ |||¡ | jsE| jp%|j	j
d | _| jdvrGt| j|| j| j| jdd�}| jj	 | j|¡ d S d S d S )Nrp   r»  T)r²  rÏ  rá  râ  râ  )rg   rß  r1   rÎ  rÏ  rH   rº  râ  r²  r7  r†  r  rÏ  rà  rá  rí  rÅ  )rô   r  r†  r  Úmany_to_many_fieldrÐ  ri   rj   rº  î  s$   
úözManyToManyField.bindc                 C   s   | j r	| j| jgS | j| jgS rf   )râ  rí  r  r±  ri   ri   rj   Ú
get_models  s   
ÿzManyToManyField.get_modelsc                 C   s   | j d u r
|  ¡ | _ | j S rf   )rß  Ú_create_through_modelr±  ri   ri   rj   rÏ    s   

zManyToManyField.through_modelc                 C   rñ   rf   )rß  rb  ri   ri   rj   rÏ    r‡  c                    s’   ˆ  ¡ \‰ ‰dd„ ˆ ˆfD ƒ‰G ‡ ‡‡‡fdd„dƒ}ˆjˆjdœ}ˆ jjtˆ fi |¤Žˆjjtˆfi |¤Žd|i}dˆ jˆjf }t|tf|ƒS )Nc                 S   ó   g | ]}|j j‘qS ri   )r7  r(  ©rÑ   r  ri   ri   rj   r†    r  z9ManyToManyField._create_through_model.<locals>.<listcomp>c                       sB   e Zd Z”jjjZ”jjjZde”ƒ Z” jj	”jj	fdffZ
dS )z3ManyToManyField._create_through_model.<locals>.Metaz%s_%s_throughTN)rö   rü   rý   r  r7  rê  rÜ  r�  r(  r†  rœ  ri   ©rô  r  rô   Útablesri   rj   rë    s    

ÿÿrë  )rá  râ  z%s%sThrough)	rå  rà  rá  r7  r†  r<   rö   rð  rI   )rô   rë  rX  ÚattrsÚ
klass_nameri   ré  rj   ræ    s   ýz%ManyToManyField._create_through_modelc                 C   r«  rf   )rÏ  r±  ri   ri   rj   Úget_through_model$  r­  z!ManyToManyField.get_through_model)NNNNTFrp  )rö   rü   rý   rÓ  r  rõ   rº  rå  ró  rÏ  rc  ræ  rí  rÒ  ri   ri   rÐ  rj   rH   Ù  s    
ÿ

rH   c                       s<   e Zd ZdZd‡ fdd„	Zdd„ Zdd„ Zdd	d
„Z‡  ZS )ÚVirtualFieldNc                    s@   |d ur|n| j }|d ur|ƒ nd | _tt| ƒj|i |¤Ž d S rf   )Úfield_classÚfield_instancerÏ  rî  rõ   )rô   rï  rµ  r¶  r8   rÐ  ri   rj   rõ   +  s   zVirtualField.__init__c                 C   ó   | j d ur| j  |¡S |S rf   )rð  rˆ  rb  ri   ri   rj   rˆ  0  ó   
zVirtualField.db_valuec                 C   rñ  rf   )rð  rª  rb  ri   ri   rj   rª  5  rò  zVirtualField.python_valueTc                 C   s:   || _ | | _ | _| _|rt|||  || |¡ƒ d S d S rf   )r  rñ  r†  r  rÚ  r  r  ri   ri   rj   rº  :  s
   ÿzVirtualField.bindrf   rp  )	rö   rü   rý   rï  rõ   rˆ  rª  rº  rÒ  ri   ri   rÐ  rj   rî  (  s    rî  c                   @   s`   e Zd ZdZdd„ Zedd„ ƒZddd„Zdd	„ Zd
d„ Z	dd„ Z
dd„ Zdd„ Zddd„ZdS )r&   Nc                 G   r)  rf   )Úfield_namesÚ_safe_field_names)rô   ró  ri   ri   rj   rõ   D  rÑ  zCompositeKey.__init__c                    s6   ˆ j d u rˆ jd u rˆ jS ‡ fdd„ˆ jD ƒˆ _ ˆ j S )Nc                    s   g | ]
}ˆ j jj| j‘qS ri   )r  r7  r+  r  ©rÑ   Úfr±  ri   rj   r†  N  s    ÿz1CompositeKey.safe_field_names.<locals>.<listcomp>)rô  r  ró  r±  ri   r±  rj   Úsafe_field_namesH  s   


ÿzCompositeKey.safe_field_namesc                    s$   ˆ d urt ‡ fdd„| jD ƒƒS | S )Nc                    ræ  ri   r¸  rõ  ©rø   ri   rj   r†  T  r–   z(CompositeKey.__get__.<locals>.<listcomp>)r�  r÷  r÷   ri   rø  rj   rú   R  s   zCompositeKey.__get__c                 C   sX   t |ttfƒstdƒ‚t|ƒt| jƒkrtdƒ‚t|ƒD ]\}}t|| j| |ƒ qd S )NzIA list or tuple must be used to set the value of a composite primary key.úVThe length of the value must equal the number of columns of the composite primary key.)	rg   rÖ   r�  rä   rœ   ró  rå   ró  rÚ  )rô   rø   rÇ   r  Úfield_valueri   ri   rj   rŠ  W  s   ÿzCompositeKey.__set__c                    sX   t |tƒst |ttfƒrt|ƒtˆ jƒkrtdƒ‚‡ fdd„tˆ j|ƒD ƒ}tt	j
|ƒS )Nrù  c                    s"   g | ]\}}ˆ j jj| |k‘qS ri   ©r  r7  r+  )rÑ   r,  rÇ   r±  ri   rj   r†  f  ó    ÿz'CompositeKey.__eq__.<locals>.<listcomp>)rg   r_  rÖ   r�  rœ   ró  rå   Úzipr
   r_  rƒ  )rô   r¯  r�  ri   r±  rj   r°  a  s   

ÿzCompositeKey.__eq__c                 C   s
   | |k S rf   ri   r®  ri   ri   rj   r²  j  r  zCompositeKey.__ne__c                 C   s   t | jj| jfƒS rf   )r¨  r  rö   ró  r±  ri   ri   rj   r¬  m  r  zCompositeKey.__hash__c                    s,   |j tk}| t‡ fdd„ˆ jD ƒd|ƒ¡S )Nc                    s   g | ]	}ˆ j jj| ‘qS ri   rû  ©rÑ   r,  r±  ri   rj   r†  u  ó    ÿz(CompositeKey.__sql__.<locals>.<listcomp>r|  )r  rM  r9  r4  ró  )rô   rF  rú  ri   r±  rj   r5  p  s   
ÿÿzCompositeKey.__sql__Tc                 C   s2   || _ | | _ | _| _|rt|| j| ƒ d S d S rf   )r  rñ  r†  r  rÚ  r  ri   ri   rj   rº  x  s
   ÿzCompositeKey.bindrf   rp  )rö   rü   rý   ry  rõ   ró  r÷  rú   rŠ  r°  r²  r¬  r5  rº  ri   ri   ri   rj   r&   A  s    

	
	r&   c                   @   sH   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dS )Ú_SortedFieldList©r�  Ú_itemsc                 C   s   g | _ g | _d S rf   r	  r±  ri   ri   rj   rõ   ‚  rÑ  z_SortedFieldList.__init__c                 C   s
   | j | S rf   )r	  )rô   rü  ri   ri   rj   r  †  r  z_SortedFieldList.__getitem__c                 C   r`  rf   )r©  r	  r±  ri   ri   rj   rV  ‰  r  z_SortedFieldList.__iter__c                 C   s0   |j }t| j|ƒ}t| j|ƒ}|| j||… v S rf   )r  r   r�  r   r	  )rô   r(  rÚ   rü  rU  ri   ri   rj   Ú__contains__Œ  s   z_SortedFieldList.__contains__c                 C   s   | j  |j¡S rf   )r�  rR  r  rõ  ri   ri   rj   rR  ’  r  z_SortedFieldList.indexc                 C   s2   |j }t| j|ƒ}| j ||¡ | j ||¡ d S rf   )r  r   r�  rê  r	  )rô   r(  rÚ   rü  ri   ri   rj   rê  •  s   z_SortedFieldList.insertc                 C   s   |   |¡}| j|= | j|= d S rf   )rR  r	  r�  )rô   r(  r  ri   ri   rj   rU  ›  rÎ  z_SortedFieldList.removeN)rö   rü   rý   rº  rõ   r  rV  r	  rR  rê  rU  ri   ri   ri   rj   r 	    s    r 	  c                   @   s8  e Zd ZdCdd„Zedd„ ƒZejdd„ ƒZdd„ ZdDd
d„Zdd„ Z	dDdd„Z
dDdd„ZdDdd„ZdDdd„ZdDdd„ZdEdd„ZdEdd„ZdDdd„ZdDdd „ZdDd!d"„ZdDd#d$„Zd%d&„ ZdFd'd(„ZdDd)d*„Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Zd9d:„ Zd;d<„ Z dDd=d>„Z!d?d@„ Z"dGdAdB„Z#dS )HrW   Nc                 K   s"   || _ || _| dt¡ || _d S )Nr  )r  rT  r0  rO  r+  )rô   r  rê  r+  ri   ri   rj   rõ   ¥  s   
zSchemaManager.__init__c                 C   s*   | j p| jjj}|d u rtd| j ƒ‚|S )Nz=database attribute does not appear to be set on the model: %s)rT  r  r7  rê  r>   rò  ri   ri   rj   rê  «  s   ÿzSchemaManager.databasec                 C   rñ   rf   rà  rb  ri   ri   rj   rê  ³  r‡  c                 C   s   | j jdi | j¤ŽS r#  )rê  rV  r+  r±  ri   ri   rj   Ú_create_context·  rª  zSchemaManager._create_contextTc                    sz  |  dd¡}|  ¡ }| |rdnd¡ |r| d¡ | | j¡ d¡ g }g }| jj‰ ˆ jrF‡ fdd„ˆ jjD ƒ}| 	t
td	ƒt|ƒfƒ¡ ˆ jD ]}| 	| |¡¡ t|tƒrb|jsb| 	| ¡ ¡ qIˆ jrl| ˆ j¡ | |  |¡¡ | t|| ƒ¡ ˆ jd ur�tˆ jƒ}	|	D ]}
t|
tƒs”td
ƒ‚| d¡ |
¡ q‰g }ˆ jr§| 	d¡ ˆ jr¯| 	d¡ |r»| dd |¡ ¡ |S )NÚ	temporaryFúCREATE TEMPORARY TABLE úCREATE TABLE r"  r‹   c                    s   g | ]}ˆ j | j‘qS ri   )r+  rÝ  ©rÑ   Ú
field_name©r1  ri   rj   r†  Æ  ó    ÿz/SchemaManager._create_table.<locals>.<listcomp>rp  ztable_settings must be stringsÚSTRICTzWITHOUT ROWIDr}  r|  )rª  r	  r.  r9  r  r7  Úcomposite_keyrÛ  ró  rÁ  r4  rZ   rÿ  Úsorted_fieldsr  rg   r<   r  rÀ  r'  rD  Ú_create_table_option_sqlÚtable_settingsr’  r_  rå   Ústrict_tablesÚwithout_rowidrƒ  )rô   r  rl  Úis_temprF  r‰  r'  Ú
pk_columnsr,  r	  ÚsettingÚ
extra_optsri   r
	  rj   Ú_create_tableº  sJ   

ÿÿ
€


zSchemaManager._create_tablec                 C   s|   g }t | jjjp	i |ƒ}|s|S t| ¡ ƒD ]%\}}t|tƒs.t|ƒr(|jj	}nt
t|ƒƒ}| tt
|ƒ|fdd�¡ q|S )Nr"  r3  )r€  r  r7  rl  rÔ  rß   rg   r“  r6  r8  rZ   r_  rÁ  r4  )rô   rl  r÷  rí  rÇ   ri   ri   rj   r	  ä  s   

z&SchemaManager._create_table_option_sqlc                 K   ó    | j  | jdd|i|¤Ž¡ d S ©Nr  ri   )rê  rG  r	  ©rô   r  rl  ri   ri   rj   rj  ó  rN  zSchemaManager.create_tablec                 K   sH   |   ¡  | d¡rdnd¡}|r| d¡ | tt|ƒŽ ¡ d¡ |¡S )Nr	  r	  r	  r"  rž  )r	  r.  r  r9  r6   r’  ©rô   r(  rG  r  r1  rF  ri   ri   rj   Ú_create_table_asö  s   ÿÿÿ
ýzSchemaManager._create_table_asc                 K   s(   | j ||fd|i|¤Ž}| j |¡ d S )Nr  )r	  rê  rG  r	  ri   ri   rj   Úcreate_table_as  s   zSchemaManager.create_table_asc                 K   sN   |   ¡  |rdnd¡ | j¡}| d¡r| d¡}|S | d¡r%| d¡}|S )NzDROP TABLE IF EXISTS zDROP TABLE Úcascadeú CASCADEÚrestrictz	 RESTRICT)r	  r.  r9  r  r  )rô   r  rl  rF  ri   ri   rj   Ú_drop_table  s   þ


þ
zSchemaManager._drop_tablec                 K   r	  r	  )rê  rG  r!	  r	  ri   ri   rj   rn    rN  zSchemaManager.drop_tableFc                 C   sX   | j }|js|  ¡  d¡ | j¡S |  ¡  d¡ | j¡}|r#| d¡}|r*| d¡}|S )Nr  zTRUNCATE TABLE z RESTART IDENTITYr	  )rê  r†  r	  r.  r9  r  )rô   Úrestart_identityr	  rW  rF  ri   ri   rj   Ú_truncate_table  s   ÿ

zSchemaManager._truncate_tablec                 C   s   | j  |  ||¡¡ d S rf   )rê  rG  r#	  )rô   r"	  r	  ri   ri   rj   r†    rå  zSchemaManager.truncate_tablec                    ó   ‡ ‡fdd„ˆj j ¡ D ƒS )Nc                    s   g | ]}ˆ  |ˆ ¡‘qS ri   )Ú_create_index©rÑ   rR  ©r  rô   ri   rj   r†  #  r	  z1SchemaManager._create_indexes.<locals>.<listcomp>©r  r7  Úfields_to_index©rô   r  ri   r'	  rj   Ú_create_indexes"  ó   
ÿzSchemaManager._create_indexesc                 C   sP   t |tƒr!| jjs| d¡}n
|j|kr| |¡}| jjr!t|ƒ}|  ¡  	|¡S rÄ   )
rg   r?   rê  rƒ  r  r  r‚  rq  r	  r9  )rô   rR  r  ri   ri   rj   r%	  &  s   


zSchemaManager._create_indexc                 C   ó"   | j |d�D ]}| j |¡ qd S ©N©r  )r+	  rê  rG  ©rô   r  rG  ri   ri   rj   Úcreate_indexes2  ó   ÿzSchemaManager.create_indexesc                    r$	  )Nc                    s"   g | ]}t |tƒrˆ |ˆ ¡‘qS ri   )rg   r?   Ú_drop_indexr&	  r'	  ri   rj   r†  7  s    þz/SchemaManager._drop_indexes.<locals>.<listcomp>r(	  r*	  ri   r'	  rj   Ú_drop_indexes6  r,	  zSchemaManager._drop_indexesc                 C   s\   d}|r| j jr|d7 }t|jtƒr|jjrt|jj|jƒ}nt|jƒ}|  ¡  	|¡ 
|¡S )NzDROP INDEX z
IF EXISTS )rê  r„  rg   r  r\   rÙ  r6   r  r	  r.  r9  )rô   rR  r  r&  r'  ri   ri   rj   r3	  ;  s   
ýzSchemaManager._drop_indexc                 C   sJ   |d u r|d u rt dƒ‚|rt| j|f|j|jd�}| j | j||d�¡S )Nz!field or index must be specified.©r  r   r/	  )rå   rJ   r  r  r)  rê  rG  r3	  )rô   r,  rR  r  ri   ri   rj   Ú
drop_indexH  s   ÿzSchemaManager.drop_indexc                 C   r-	  r.	  )r4	  rê  rG  r0	  ri   ri   rj   Údrop_indexesP  r2	  zSchemaManager.drop_indexesc                 C   s    |j r| jjstd|j ƒ‚d S )Nz@Sequences are either not supported, or are not defined for "%s".)ry  rê  r…  rå   r†  rõ  ri   ri   rj   Ú_check_sequencesT  s
   ÿÿzSchemaManager._check_sequencesc                 C   s   t | ¡ Ž S rf   )r6   r  rõ  ri   ri   rj   Ú_sequence_for_fieldY  r  z!SchemaManager._sequence_for_fieldc                 C   sB   |   |¡ | ¡ \}}| j ||¡s|  ¡  d¡ |  |¡¡S d S )NzCREATE SEQUENCE ©r8	  r  rê  rh  r	  r.  r9  r9	  ©rô   r,  rÜ  r†  ri   ri   rj   Ú_create_sequence\  ó   
ýÿzSchemaManager._create_sequencec                 C   ó&   |   |¡}|d ur| j |¡ d S d S rf   )r<	  rê  rG  ©rô   r,  Úseq_ctxri   ri   rj   Úcreate_sequencee  ó   
ÿzSchemaManager.create_sequencec                 C   sB   |   |¡ | ¡ \}}| j ||¡r|  ¡  d¡ |  |¡¡S d S )NzDROP SEQUENCE r:	  r;	  ri   ri   rj   Ú_drop_sequencej  r=	  zSchemaManager._drop_sequencec                 C   r>	  rf   )rC	  rê  rG  r?	  ri   ri   rj   Údrop_sequences  rB	  zSchemaManager.drop_sequencec                 C   s(   |   ¡  d¡ |j¡ d¡ | d¡¡S )NzALTER TABLE z ADD T)r	  r.  r9  r  rÀ  rõ  ri   ri   rj   Ú_create_foreign_keyx  s   ûz!SchemaManager._create_foreign_keyc                 C   s   | j  |  |¡¡ d S rf   )rê  rG  rE	  rõ  ri   ri   rj   Úcreate_foreign_key€  rÝ  z SchemaManager.create_foreign_keyc                 C   ó0   | j jr| jjjD ]}|jr|  |¡ q	d S d S rf   )rê  r…  r  r7  r	  ry  rA	  rõ  ri   ri   rj   Úcreate_sequencesƒ  ó   
€ýzSchemaManager.create_sequencesc                 K   s*   |   ¡  | j|fi |¤Ž | j|d� d S r.	  )rH	  rj  r1	  )rô   r  Útable_optionsri   ri   rj   Ú
create_all‰  s   zSchemaManager.create_allc                 C   rG	  rf   )rê  r…  r  r7  r	  ry  rD	  rõ  ri   ri   rj   Údrop_sequencesŽ  rI	  zSchemaManager.drop_sequencesc                 K   s&   | j |fi |¤Ž |r|  ¡  d S d S rf   )rn  rL	  )rô   r  rL	  rl  ri   ri   rj   Údrop_all”  s   ÿzSchemaManager.drop_allrf   rp  r‹  )NNTr€  )$rö   rü   rý   rõ   ró  rê  rc  r	  r	  r	  rj  r	  r	  r!	  rn  r#	  r†  r+	  r%	  r1	  r4	  r3	  r6	  r7	  r8	  r9	  r<	  rA	  rC	  rD	  rE	  rF	  rH	  rK	  rL	  rM	  ri   ri   ri   rj   rW   ¤  sF    



*













		
rW   c                   @   sô   e Zd Z						d/dd„Zdd„ Zd0dd	„Zd
d„ Zdd„ Zdd„ Zdd„ Z	e
dd„ ƒZejdd„ ƒZejdd„ ƒZe
dd„ ƒZejdd„ ƒZe
dd„ ƒZdd„ Zd1dd„Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ ZdS )2ÚMetadataNFTc                 K   sV  |d ur
t dƒ |}|| _|| _i | _i | _i | _tƒ | _g | _g | _	i | _
i | _g | _|j ¡ | _|| _|| _|sF| jrB|  |¡n|  ¡ }|| _d | _|rRt|ƒng | _|| _|| _|| _d  | _| _|| _|	| _|| _|| _|| _ || _!i | _"i | _#t$ %t¡| _&t$ %t¡| _'i | _(|
pŽi | _)| *¡ D ]
\}}t+| ||ƒ q”t,| -¡ ƒ| _.g | _/d S )NzC"db_table" has been deprecated in favor of "table_name" for Models.)0rî   r  rê  r+  r‰  Úcombinedr 	  Ú_sorted_field_listr	  Úsorted_field_namesrö  Ú_default_by_nameÚ_default_callable_liströ   r™  r†  Útable_functionr.  Úmake_table_namer(  r  rÖ   rœ  r'  rÙ  rÛ  r	  rž  Úonly_save_dirtyÚ
depends_onr	  r	  r	  r	  ÚrefsÚbackrefsrÙ  ÚdefaultdictrÔ  Úmodel_backrefsÚ
manytomanyrl  rß   rÚ  rÄ  rK  Ú_additional_keysr4  )rô   r  rê  r(  rœ  rÛ  r'  rÜ  rV	  rW	  rl  Údb_tablerT	  r	  r	  r	  r	  r.  r¶  rí  rÇ   ri   ri   rj   rõ   ›  sZ   ÿþ

zMetadata.__init__c                 C   s"   | j rt dd| j¡S t| jjƒS )Nr-  r/  )r.  rx   r—  r†  r›  r  rö   r±  ri   ri   rj   rU	  Ü  s   zMetadata.make_table_namec                 C   sÎ   |s|st dƒ‚d | jd fg}tƒ }t | f¡}|r|jn|j}|re|ƒ }||v r*q | |¡ |rI|j 	¡ D ]\}	}
| 
|	|
df¡ | 
|
j¡ q6|rc|j 	¡ D ]\}	}
| 
|	|
df¡ | 
|
j¡ qP|s"|S )Nz)One of `refs` or `backrefs` must be True.FT)rå   r  rÄ  rÙ  Údequerª  Úpopleftr  rX	  rß   rÁ  r7  rY	  )rô   rX	  rY	  Údepth_firstr÷  rú  ÚqueuerÉ  ÚcurrÚfkr  ri   ri   rj   Úmodel_graphá  s(   

ôzMetadata.model_graphc                 C   sF   |j }|| j|< | j|  |¡ | j|jj|< |jj| j  |¡ d S rf   )rí  rX	  rÔ  rÁ  r  r7  rY	  r[	  )rô   r,  Úrelri   ri   rj   Úadd_refú  s
   
zMetadata.add_refc                    s`   ˆ j }| jˆ = ‡ fdd„| j| D ƒ| j|< |jjˆ = |jj}‡ fdd„|| j D ƒ|| j< d S )Nc                    ó   g | ]}|ˆ ur|‘qS ri   ri   rõ  r÷  ri   rj   r†    ó    ÿz'Metadata.remove_ref.<locals>.<listcomp>c                    rh	  ri   ri   rõ  r÷  ri   rj   r†    ri	  )rí  rX	  rÔ  r7  rY	  r[	  r  )rô   r,  rf	  r[	  ri   r÷  rj   Ú
remove_ref  s   
"zMetadata.remove_refc                 C   s   || j |j< d S rf   ©r\	  r†  rõ  ri   ri   rj   Úadd_manytomany  rs   zMetadata.add_manytomanyc                 C   s   | j |j= d S rf   rk	  rõ  ri   ri   rj   Úremove_manytomany  r  zMetadata.remove_manytomanyc                 C   s8   | j d u rt| jdd„ | jD ƒ| j| j| jd�| _ | j S )Nc                 S   rÀ  ri   )rñ  rþ  ri   ri   rj   r†    r‹  z"Metadata.table.<locals>.<listcomp>)rÜ  rÓ  rT  )r  r\   r(  r	  rÜ  r  rê  r±  ri   ri   rj   r8    s   
ûzMetadata.tablec                 C   rÚ  )NzCannot set the "table".r}  rb  ri   ri   rj   r8    r+  c                 C   s
   d | _ d S rf   )r  r±  ri   ri   rj   r8     r‡  c                 C   r«  rf   )rÙ  r±  ri   ri   rj   rÜ  $  ra  zMetadata.schemac                 C   ó   || _ | `d S rf   )rÙ  r8  rb  ri   ri   rj   rÜ  (  s   c                 C   s   | j r
t| j | jƒS t| jƒS rf   )rÙ  r6   r(  r±  ri   ri   rj   r¦  -  s   
zMetadata.entityc                 C   s"   t | jƒ| _dd„ | jD ƒ| _d S )Nc                 S   rÀ  ri   r‰  rõ  ri   ri   rj   r†  6  r‹  z2Metadata._update_sorted_fields.<locals>.<listcomp>)rÖ   rP	  r	  rQ	  r±  ri   ri   rj   Ú_update_sorted_fields4  r£  zMetadata._update_sorted_fieldsc                 C   s&  || j v r|  |¡ n|| jv r|  | j| ¡ t|tƒsl| `| | j||¡ || j |j	< || j
|j< || j|j	< || j|j< | j |¡ |  ¡  |jd urk|j| j|< t|jƒrd| j |j	|jf¡ n|j| j|j	< n| | j||¡ t|tƒr€|  |¡ d S t|tƒr�|j	r‘|  |¡ d S d S d S rf   )r+  Úremove_fieldr\	  rm	  rg   rÒ  r8  rº  r  r†  r‰  rñ  rO	  rP	  rê  ro	  rå  rö  rô  rS	  rÁ  rR	  r<   rg	  rH   rl	  )rô   r		  r,  r  ri   ri   rj   rÅ  8  s6   





ÿ€
ÿzMetadata.add_fieldc                 C   s¬   || j vrd S | `| j  |¡}| j|j= | j|= |j|kr"| j|j= | j |¡ |  ¡  |j	d urH| j
|= t|j	ƒrD| j ||j	f¡ n| j|= t|tƒrT|  |¡ d S d S rf   )r+  r8  rª  r‰  rñ  rO	  rP	  rU  ro	  rå  rö  rô  rS	  rR	  rg   r<   rj	  )rô   r		  Úoriginalri   ri   rj   rp	  Y  s(   





ÿ
ÿzMetadata.remove_fieldc                 C   s4   t |tƒ| _|  ||¡ || _|jpt|jƒ| _d S rf   )rg   r&   r	  rÅ  rÛ  rž  rÉ   ry  )rô   r†  r,  ri   ri   rj   rÄ  q  s   þzMetadata.set_primary_keyc                    s6   ˆ j rt‡ fdd„ˆ jjD ƒƒS ˆ jdurˆ jfS dS )Nc                    s   g | ]}ˆ j | ‘qS ri   ©r+  r	  r±  ri   rj   r†  {  r¼  z-Metadata.get_primary_keys.<locals>.<listcomp>Fri   )r	  r�  rÛ  ró  r±  ri   r±  rj   re  y  s
   ÿzMetadata.get_primary_keysc                 C   s(   | j  ¡ }| jD ]	\}}|ƒ ||< q|S rf   )rR	  r|  rS	  )rô   Úddr		  rå  ri   ri   rj   Úget_default_dict€  s   
zMetadata.get_default_dictc              	   C   sÞ   g }| j D ]}|jrq|js|jr | t| j|f|j|jd�¡ q| jD ]H}t	|t
ƒr1| |¡ q$t	|ttfƒrl|\}}g }|D ] }t	|tƒrP| | j| ¡ q@t	|t
ƒr[| |¡ q@td| ƒ‚| t| j||d�¡ q$|S )Nr5	  z;Expected either a field name or a subclass of Node. Got: %s)r  )r	  rÛ  rR  r  rÁ  rJ   r  r)  rœ  rg   r“  rÖ   r�  r_  rO	  rå   )rô   rœ  rö  Ú	index_objÚindex_partsr  r+  rz   ri   ri   rj   r)	  †  s4   
ÿ€



ÿ€zMetadata.fields_to_indexc                 C   sD   || _ || jj_ | `t|tƒr|jd u rd }| jD ]}||ƒ qd S rf   )rê  r  rÙ  r8  rg   rT   r¼  r4  )rô   rê  r&  ri   ri   rj   Úset_database¡  s   


ÿzMetadata.set_databasec                 C   rn	  rf   )r(  r8  )rô   r(  ri   ri   rj   Úset_table_name®  s   zMetadata.set_table_namec                 C   s4   | j }|d u r	d S t|tƒr|jd ur|jS d S |S rf   )rê  rg   rT   r¼  rò  ri   ri   rj   Úget_database_instance²  s   
zMetadata.get_database_instance)NNNNNNFNNNNNFFNT)TTTrp  )rö   rü   rý   rõ   rU	  re	  rg	  rj	  rl	  rm	  ró  r8  rc  ÚdeleterrÜ  r¦  ro	  rÅ  rp	  rÄ  re  rt	  r)	  rw	  rx	  ry	  ri   ri   ri   rj   rN	  š  sH    
ûA









!rN	  c                       s(   e Zd Zg Z‡ fdd„Zdd„ Z‡  ZS )ÚSubclassAwareMetadatac                    s.   t t| ƒj|g|¢R i |¤Ž | j |¡ d S rf   )rÏ  r{	  rõ   rk  rÁ  ©rô   r  rµ  r¶  rÐ  ri   rj   rõ   ¾  s   zSubclassAwareMetadata.__init__c                 C   s   | j D ]}||ƒ qd S rf   )rk  )rô   r;   r  ri   ri   rj   Ú
map_modelsÂ  s   

ÿz SubclassAwareMetadata.map_models)rö   rü   rý   rk  rõ   r}	  rÒ  ri   ri   rÐ  rj   r{	  »  rá  r{	  c                   @   rô  )r3   Nrö  ri   ri   ri   rj   r3   Ç  r  r3   c                       sp   e Zd Zeg d¢ƒZ‡ fdd„Zdd„ Zdd„ Zdd	„ Zd
d„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Z‡  ZS )Ú	ModelBase)r'  rê  rœ  rÛ  rl  rÜ  rT	  r	  rV	  r.  r	  r	  c                    sô  t dd„ |D ƒƒsttˆ ƒjˆ |||fi |¤ŽS i }| dd ¡}|r5|j ¡ D ]\}}| d¡s4|||< q't|dd ƒ}	d  }
}|D ]\}t	|dƒsIqA|j
}|d u rUt|jƒ}ˆ j|jB }|jD ]}||v ro||vro|j| ||< q^| d|j¡ | d|j¡ |j ¡ D ]\}}||v rŒqƒt|tƒrœ|jjsœt|jƒ||< qƒqA| d	d ¡p¥i }| d
t¡}| dt¡}ttˆ ƒjˆ |||fi |¤Ž‰ d  ˆ _ˆ _|ˆ fi |¤Žˆ _
|ˆ fi |¤Žˆ _g }ˆ j ¡ D ]%\}}t|tƒ�r|jrõ|	rõtd| ƒ‚|jrþ||}	}
qà| ||f¡ qà|	d u �r%|du�r"|d u�r||jfntƒ df\}	}
nd}	nt|	t ƒ�r1d}
dˆ j
_!|	du�r=ˆ j
 "|
|	¡ |D ]\}}ˆ j
 #||¡ �q?d|v�r[t$ˆ d‡ fdd„ƒ dˆ j% }dˆ j&i}t'|t(f|ƒ}|ˆ _(ˆ  )¡  t* +ˆ ¡ ˆ S )Nc                 s   s   � | ]}t |tƒV  qd S rf   )rg   r~	  )rÑ   rË   ri   ri   rj   rÔ   Ò  rÝ   z$ModelBase.__new__.<locals>.<genexpr>rë  r/  rÛ  r7  rê  rÜ  Úschema_optionsÚmodel_metadata_classÚschema_manager_classzover-determined primary key %s.Frú  Ú__composite_key__Tr  c                    s   dˆ j |  ¡ f S )Nz<%s: %s>)rö   rT  r±  ©r«  ri   rj   rk     s    
ÿz#ModelBase.__new__.<locals>.<lambda>z%sDoesNotExistrü   ),r×   rÏ  r~	  rc  rª  rd  rß   rL  r»   rï  r7  r   rÛ  Úinheritabler]	  r0  rê  rÜ  rg   rå  r,  r  rN	  rW   rç  rî  rÙ  r8   rå   rÁ  r†  r   r&   r	  rÄ  rÅ  rÚ  rö   rü   rð  r3   Úvalidate_modelr0   rÌ  )r«  r†  Úbasesrë  r¶  Úmeta_optionsr1  rÚ   rÛ   rr  Úpk_nameÚ	parent_pkrË   Ú	base_metaÚall_inheritableÚsoptsrë  ÚSchemar+  rí  rÇ   r,  Úexc_nameÚ	exc_attrsÚexception_classrÐ  rƒ	  rj   rc  Ð  sŽ   ÿ
€


€
€ü
€



ÿþ




zModelBase.__new__c                 C   s
   d| j  S )Nz<Model: %s>)rö   r±  ri   ri   rj   r  ,  r  zModelBase.__repr__c                 C   s   t |  ¡ ƒS rf   )r©  rŠ  r±  ri   ri   rj   rV  /  r  zModelBase.__iter__c                 C   r?  rf   )Ú	get_by_idr”  ri   ri   rj   r  2  r  zModelBase.__getitem__c                 C   s   |   ||¡ d S rf   )Ú	set_by_id)rô   rí  rÇ   ri   ri   rj   r
  5  rs   zModelBase.__setitem__c                 C   s   |   |¡ d S rf   )Údelete_by_idr”  ri   ri   rj   rX  8  r  zModelBase.__delitem__c                 C   s(   z|   |¡ W dS  | jy   Y dS w r  )r‘	  r3   r”  ri   ri   rj   r	  ;  s   ýÿzModelBase.__contains__c                 C   r@  rf   )rŠ  r¢  r±  ri   ri   rj   rS  C  r  zModelBase.__len__c                 C   rm  rK  ri   r±  ri   ri   rj   Ú__bool__E  r�  zModelBase.__bool__c                 C   s   |  | jj¡S rf   )r9  r7  r8  rE  ri   ri   rj   r5  G  r  zModelBase.__sql__)rö   rü   rý   rÄ  r„	  rc  r  rV  r  r
  rX  r	  rS  r”	  r5  rÒ  ri   ri   rÐ  rj   r~	  Ê  s    \r~	  c                   @   rþ   )
r~  c                 C   s   || _ || _|| _|| _d S rf   )rk  rê  rz  r{  )rô   rk  rê  rz  r{  ri   ri   rj   rõ   L  s   
z_BoundModelsContext.__init__c                 C   s   t | ƒ| j| j| j| jƒS rf   )rð  rk  rê  rz  r{  r±  ri   ri   rj   r²  R  s   ÿz_BoundModelsContext._build_ctxc                 C   sF   g | _ | jD ]}| j  |jj¡ |j| j| j| jt| jƒd� q| jS ©N)rÌ  )	rÒ  rk  rÁ  r7  rê  rº  rz  r{  rÄ  r  ri   ri   rj   rÌ  V  s   
ÿz_BoundModelsContext.__enter__c                 C   s8   t | j| jƒD ]\}}|j|| j| jt| jƒd� qd S r•	  )rý  rk  rÒ  rº  rz  r{  rÄ  )rô   r1  r2  r3  r  rW  ri   ri   rj   rÍ  ^  s
   ÿÿz_BoundModelsContext.__exit__NrÔ  ri   ri   ri   rj   r~  K  s
    r~  c                   @   s<  e Zd Zdd„ Zdd„ Zedd„ ƒZedddd	„ƒZed
d„ ƒZedd„ ƒZ	edddd„ƒZ
edddd„ƒZedddd„ƒZedd„ ƒZedddd„ƒZedddd„ƒZedd„ ƒZedd„ ƒZedd„ ƒZeddd d!„ƒZeddd"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d0d1„ ƒZed2d3„ ƒZd4d5„ ZeeƒZ e j!d6d7„ ƒZ d8d9„ Z"d:d;„ Z#d<d=„ Z$ded?d@„Z%dAdB„ Z&edCdD„ ƒZ'edEdF„ ƒZ(dfdHdI„Z)dgdJdK„Z*dLdM„ Z+dNdO„ Z,dPdQ„ Z-dRdS„ Z.edhdTdU„ƒZ/edidVdW„ƒZ0edXdY„ ƒZ1edjdZd[„ƒZ2edid\d]„ƒZ3ed^d_„ ƒZ4ed`da„ ƒZ5edbdc„ ƒZ6dS )krI   c                 O   sX   |  dd ¡ri | _tƒ | _n| j ¡ | _t| jƒ| _i | _|D ]
}t| ||| ƒ qd S )NÚ__no_default__)rª  rç  rÄ  rè  r7  rt	  rî  rÚ  )rô   rµ  r¶  rÚ   ri   ri   rj   rõ   e  s   
ÿzModel.__init__c                 C   s   | j jdurt| jƒS dS )NFzn/a)r7  rÛ  r_  Ú_pkr±  ri   ri   rj   rT  q  rh  zModel.__str__c                 C   rR  rf   ri   rƒ	  ri   ri   rj   r…	  t  r  zModel.validate_modelNc                 C   rã  rf   )Ú
ModelAlias)r«  r	  ri   ri   rj   r	  x  r‡  zModel.aliasc                 G   s    | }|s	| j j}t| ||d�S )N)Ú
is_default)r7  r	  ÚModelSelect)r«  r+  r™	  ri   ri   rj   rŠ  |  s   zModel.selectc              	   C   sÚ   i }|rFt |tƒs|rtd| ƒ‚|S |D ]0}zt |tƒr|n| jj| }W n ty>   t |tƒs:td||f ƒ‚|}Y nw || ||< q|rk|D ] }z|| || jj| < W qJ tyj   || |t| |ƒ< Y qJw |S )Nz/Data cannot be mixed with keyword arguments: %sz$Unrecognized field name: "%s" in %s.)	rg   rÕ   rå   r8   r7  rO	  r   r“  r»   )r«  rP  r¶  Ú
normalizedrí  r,  ri   ri   rj   Ú_normalize_dataƒ  s:   
ÿ
ÿ
ÿüÿzModel._normalize_datac                 K   ó   t | |  ||¡ƒS rf   )ÚModelUpdaterœ	  )r«  Ú_Model__datar	  ri   ri   rj   r	  ž  r%  zModel.updatec                 K   r�	  rf   )ÚModelInsertrœ	  ©r«  rŸ	  rê  ri   ri   rj   rê  ¢  r%  zModel.insertc                 C   r  rè  ©r 	  ©r«  rz  r+  ri   ri   rj   Úinsert_many¦  r  zModel.insert_manyc                    s    ‡ fdd„|D ƒ}t ˆ ||d�S )Nc                    s$   g | ]}t |tƒrtˆ |ƒn|‘qS ri   )rg   r_  r»   rþ  rƒ	  ri   rj   r†  ¬  s
    ÿÿz%Model.insert_from.<locals>.<listcomp>ré  r¢	  )r«  rG  r+  r‰  ri   rƒ	  rj   Úinsert_fromª  s   
ÿzModel.insert_fromc                 K   s   | j |fi |¤Ž d¡S râ  rï  r¡	  ri   ri   rj   ro   °  re  zModel.replacec                 C   s   | j ||d� d¡S )N)rz  r+  rî  )r¤	  rð  r£	  ri   ri   rj   Úreplace_many´  s
   ÿþzModel.replace_manyc                 G   s   t | ||ƒS rf   )ÚModelRaw)r«  r9  rX  ri   ri   rj   Úrawº  rÑ  z	Model.rawc                 C   rÔ  rf   )ÚModelDeleterƒ	  ri   ri   rj   ró  ¾  r+  zModel.deletec                 K   s   | di |¤Ž}|j dd� |S )NT)Úforce_insertri   )Úsave)r«  rG  Úinstri   ri   rj   ÚcreateÂ  s   zModel.createc                    sü   |d ur
t ||ƒ}n|g}tˆjjƒ}ˆjjr!ˆjjj}| |¡ ˆjjj	r2ˆjjdur2ˆj 
¡ }nd }‡fdd„|D ƒ}dd„ |D ƒ‰ |D ]5}‡ fdd„|D ƒ}	ˆj|	|d� ¡ }
|r{|
d ur{t|
|ƒD ]\}}t||ƒD ]\}}t||j|ƒ qnqeqFd S )NFc                    s   g | ]}ˆ j j| ‘qS ri   )r7  r+  r	  rƒ	  ri   rj   r†  Ú  r”  z%Model.bulk_create.<locals>.<listcomp>c                 S   rÀ  ri   ©r  rþ  ri   ri   rj   r†  Û  r‹  c                 3   s"   � | ]‰ ‡ fd d„ˆD ƒV  qdS )c                    ræ  ri   r¸  rõ  ©r  ri   rj   r†  Þ  r–   z/Model.bulk_create.<locals>.<genexpr>.<listcomp>Nri   )rÑ   )rë  r¯	  rj   rÔ   Þ  s   € ÿz$Model.bulk_create.<locals>.<genexpr>rr	  )r$   rÖ   r7  rQ	  rž  rÛ  r†  rU  rê  r  re  r¤	  rG  rý  rÚ  )r«  Ú
model_listÚ
batch_sizeÚbatchesró  rˆ	  Ú	pk_fieldsr+  Úbatchr÷  Úresr  r  Úpk_fieldÚobj_idri   )rë  r«  rj   Úbulk_createÈ  s2   



ÿÿ€úzModel.bulk_createc                    s  t ˆ jjtƒrtdƒ‚‡ fdd„|D ƒ}dd„ |D ƒ}|d ur%t||ƒ}n|g}d}ˆ jj}|D ]P}dd„ |D ƒ}	i }
t||ƒD ].\}}g }|D ]}t||ƒ}t |tƒsY| 	|¡}| 
| |j¡|f¡ qHt||ƒ}||
|< q@|ˆ  |
¡ ˆ jj |	¡¡ ¡ 7 }q0|S )NzGbulk_update() is not supported for models with a composite primary key.c                    s&   g | ]}t |tƒrˆ jj| n|‘qS ri   )rg   r_  r7  r+  rõ  rƒ	  ri   rj   r†  í  s    ÿz%Model.bulk_update.<locals>.<listcomp>c                 S   rÀ  ri   r®	  rþ  ri   ri   rj   r†  ð  r‹  r   c                 S   rÀ  ri   )r—	  rè  ri   ri   rj   r†  û  r‹  )rg   r7  rÛ  r&   rå   r$   rý  r»   r“  r  rÁ  rÕ  r—	  r    r	  r®  rU  rG  )r«  r°	  r+  r±	  rë  r²	  ré   rr  r´	  Úid_listr	  r,  r  r÷  r  rÇ   Úcaseri   rƒ	  rj   Úbulk_updateæ  s8   
ÿ





þzModel.bulk_updatec                 C   rý  r#  )ÚNoopModelSelectrƒ	  ri   ri   rj   Únoop  r‡  z
Model.noopc                 O   sl   |   ¡ }|r(t|ƒdkr#t|d tƒr#| jjr#| | jj|d k¡}n|j|Ž }|r2|jdi |¤Ž}| 	¡ S )Nrt   r   ri   )
rŠ  rœ   rg   r“   r7  rž  r®  rÛ  r¯  r  )r«  rG  ÚfiltersÚsqri   ri   rj   r    s   ÿ
z	Model.getc                 O   s(   z	| j |i |¤ŽW S  ty   Y d S w rf   )r  r3   )r«  rG  r¾	  ri   ri   rj   Úget_or_none  s
   ÿzModel.get_or_nonec                 C   s   |   | jj|k¡S rf   )r  r7  rÛ  ©r«  rr  ri   ri   rj   r‘	  %  r%  zModel.get_by_idc                 C   s2   |d u r|   |¡ ¡ S |  |¡ | jj|k¡ ¡ S rf   )rê  rG  r	  r®  r7  rÛ  )r«  rí  rÇ   ri   ri   rj   r’	  )  s
   ÿzModel.set_by_idc                 C   s   |   ¡  | jj|k¡ ¡ S rf   )ró  r®  r7  rÛ  rG  rÁ	  ri   ri   rj   r“	  1  r3  zModel.delete_by_idc                 K   s  |  di ¡}|  ¡ }| ¡ D ]\}}| t| |ƒ|k¡}qz| ¡ dfW S  | jy�   z.|r4| |¡ | jj	 
¡ � | jdi |¤ŽdfW  d   ƒ W  Y S 1 sRw   Y  W Y d S  ty€ } zz| ¡ dfW W  Y d }~ Y S  | jy{   |‚w d }~ww w )Nrö  FTri   )rª  rŠ  rß   r®  r»   r  r3   r	  r7  rê  rÜ  r­	  rA   )r«  r¶  rö  rG  r,  rÇ   r$  ri   ri   rj   Úget_or_create5  s,   
.ÿÿ€ýúzModel.get_or_createc                 O   s   |   ¡ j|i |¤ŽS rf   )rŠ  r¯  )r«  Údq_nodesr¾	  ri   ri   rj   r¯  J  r±  zModel.filterc                 C   s    | j jdurt| | j jjƒS d S rÄ   )r7  rÛ  r»   r  r±  ri   ri   rj   Úget_idN  s   ÿzModel.get_idc                 C   s   t | | jjj|ƒ d S rf   )rÚ  r7  rÛ  r†  rb  ri   ri   rj   r—	  X  rb  z	Model._pkc                 C   s   | j j| jkS rf   )r7  rÛ  r—	  r±  ri   ri   rj   Ú_pk_expr\  r  zModel._pk_exprc                 C   sB   i }|D ]}t |tƒr| jj| }|j|v r||j ||j< q|S rf   )rg   r_  r7  rO	  r†  )rô   Ú
field_dictÚonlyÚnew_datar,  ri   ri   rj   Ú_prune_fields_  s   

€zModel._prune_fieldsc                 C   s`   | j jD ])}|j}||v o|| d u o| j |¡d u}|r-t| |t| |ƒƒ | j| ||< qd S rf   )r7  rX	  r†  rî  r  rÚ  r»   rç  )rô   rÆ	  Úforeign_key_fieldÚforeign_keyÚ
conditionsri   ri   rj   Ú_populate_unsaved_relationsh  s   
ÿý€øz!Model._populate_unsaved_relationsFc           	      C   sx  | j  ¡ }| jjdur| jj}| j}nd  }}|d ur"|  ||¡}n| jjr8|s8|  || j¡}|s8| j 	¡  dS |  
|¡ d}| jjrN|d u rN| |jd ¡ |d ur‚|s‚| jjre|jD ]}| |d ¡ q[n| |jd ¡ |srtdƒ‚| jdi |¤Ž |  ¡ ¡ ¡ }n/|d ur§| jdi |¤Ž ¡ }|d ur¦| jjsœ|d u r¦|| _| j |j¡ n
| jdi |¤Ž ¡  |  jt|ƒ8  _|S )NFrt   zno data to save!ri   )rç  r|  r7  rÛ  r—	  rÉ	  rV	  Údirty_fieldsrè  r  rÍ	  rž  rª  r†  r	  ró  rå   r	  r®  rÅ	  rG  rê  rÈ  rÄ  )	rô   rª	  rÇ	  rÆ	  r¶	  Úpk_valuerz  Úpk_part_namerr  ri   ri   rj   r«	  s  sF   



ÿ €z
Model.savec                 C   r`  rf   )rÉ   rè  r±  ri   ri   rj   Úis_dirtyž  r  zModel.is_dirtyc                    s   ‡ fdd„ˆ j jD ƒS )Nc                    s   g | ]
}|j ˆ jv r|‘qS ri   )r†  rè  rõ  r±  ri   rj   r†  £  rÔ  z&Model.dirty_fields.<locals>.<listcomp>)r7  r	  r±  ri   r±  rj   rÎ	  ¡  rb  zModel.dirty_fieldsc                 C   s   dd„ | j D ƒS )Nc                 S   rÀ  ri   r‰  rõ  ri   ri   rj   r†  §  r‹  z+Model.dirty_field_names.<locals>.<listcomp>)rÎ	  r±  ri   ri   rj   Údirty_field_names¥  rÿ  zModel.dirty_field_namesTc                 c   s  � t | ƒ}t | ƒd fg}i }tƒ }|rl| ¡ \}}||v rq| |¡ |jj ¡ D ]@\}	}
|
|u s5|d u r?|	| j|	jj	 k}n|	|> }|
 
|
jj¡ |¡}|	jrR|ri| |
g ¡ ||	f¡ |	jrb|si| |
|f¡ q)|sttt|ƒƒƒD ]}| |d¡D ]	\}}||fV  q|qtd S r#  )rð  rÄ  rª  r  r7  rY	  rß   rç  rð  r†  rŠ  rÛ  r®  rò  r0  rÁ  r  ri  rÖ   r  )rô   Úsearch_nullableÚexclude_null_childrenÚmodel_classr  Úqueriesrú  rÁ  rG  rd	  rí  rI  r,  r¢   r¿	  rq   ri   ri   rj   Údependencies©  s8   €
ÿ

€ïÿÿzModel.dependenciesc                 C   sz   |r0| j | d�D ]&\}}|j}|jr&|s&|jdi |jd i¤Ž |¡ ¡  q	| ¡  |¡ ¡  q	t| ƒ ¡  |  	¡ ¡ ¡ S )N)rÔ	  ri   )
r×	  r  rò  r	  r†  r®  rG  ró  rð  rÅ	  )rô   r•  Údelete_nullablerG  rd	  r  ri   ri   rj   Údelete_instanceÆ  s   
"zModel.delete_instancec                 C   rW  rf   )r¨  rÑ  r—	  r±  ri   ri   rj   r¬  Ð  rs   zModel.__hash__c                 C   s"   |j | j ko| jd uo| j|jkS rf   )rÑ  r—	  r®  ri   ri   rj   r°  Ó  s
   ÿ
ýzModel.__eq__c                 C   s
   | |k S rf   ri   r®  ri   ri   rj   r²  Ù  r  zModel.__ne__c              	   C   sh   |j jd ur"|j jr"z| t| |j jd�¡W S  ttfy!   Y nw | tt| | jj	j
ƒ| jj	jd�¡S )Nr<  )r"  r=  r‡  r9  rb   rä   rå   r»   r7  rÛ  r†  rˆ  rE  ri   ri   rj   r5  Ü  s   ÿÿzModel.__sql__c           
      C   sp   | j j|u}| j  |¡ |s|r6|d u rtƒ }| j j||d�}|D ]\}}}	||vr5|j  |¡ | |¡ q!|S )N)rX	  rY	  )r7  rê  rw	  rÄ  re	  r  )
r«  rê  rz  r{  rÌ  Úis_differentÚGr/  r  Ú
is_backrefri   ri   rj   rº  ð  s   
€z
Model.bindc                 C   s   t | f|||ƒS rf   r}  )r«  rê  rz  r{  ri   ri   rj   rä  þ  rÿ  zModel.bind_ctxc                 C   s   | j }| jj |jj|j¡S rf   )r7  rÙ  rê  ra  r8  rö   rÜ  )r«  ÚMri   ri   rj   ra     s   zModel.table_existsc                 K   sd   d|v rt dƒ | d¡}|r| jjjs|  ¡ rd S | jjr&| d| jj¡ | jj	|fi |¤Ž d S )NÚfail_silentlyzU"fail_silently" has been deprecated in favor of "safe" for the create_table() method.r	  )
rî   rª  rÙ  rê  rƒ  ra  r7  r	  r0  rK	  )r«  r  rl  ri   ri   rj   rj     s   
ÿzModel.create_tablec                 K   sL   |r| j jjs|  ¡ sd S | jjr| d| jj¡ | j j||fi |¤Ž d S )Nr	  )rÙ  rê  r„  ra  r7  r	  r0  rM	  )r«  r  rL	  rl  ri   ri   rj   rn     s   ÿzModel.drop_tablec                 K   s   | j jdi |¤Ž d S r#  )rÙ  r†  )r«  rl  ri   ri   rj   r†     rb  zModel.truncate_tablec                 O   s   t | |fi |¤ŽS rf   )rJ   ©r«  r+  r¶  ri   ri   rj   rR  "   r%  zModel.indexc                 O   sT   t |ƒdkrt|d ttfƒr| jj |d ¡ d S | jj t| |fi |¤Ž¡ d S rá   )rœ   rg   rZ   r?   r7  rœ  rÁ  rJ   rß	  ri   ri   rj   Ú	add_index&   s    zModel.add_indexrf   rÍ   r<  r‹  )TTNr€  rp  )7rö   rü   rý   rõ   rT  Úclassmethodr…	  r	  rŠ  rœ	  r	  rê  r¤	  r¥	  ro   r¦	  r¨	  rð   ró  r­	  r¸	  r»	  r½	  r  rÀ	  r‘	  r’	  r“	  rÂ	  r¯  rÄ	  ró  r—	  rc  rÅ	  rÉ	  rÍ	  r«	  rÑ	  rÎ	  rÒ	  r×	  rÙ	  r¬  r°  r²  r5  rº  rä  ra  rj  rn  r†  rR  rà	  ri   ri   ri   rj   rI   d  s¨    






%








	
+







rI   )Ú	metaclassc                   @   sF   e Zd Zddd„Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Z	dS )r˜	  Nc                 C   s   || j d< || j d< d S )Nr  r	  )rd  )rô   r  r	  ri   ri   rj   rõ   /   s   
zModelAlias.__init__c              	   C   sˆ   | j f| j j D ] }z|j| }t|tƒr| d | ¡W   S W q ty(   Y qw t| j |ƒ}t|tƒrBt	 
| |¡| j|< | j| S |S rf   )r  rË  rd  rg   rõ  rú   r   r»   r8   Ú
FieldAliasr­	  )rô   r  rË   r¼  Ú
model_attrri   ri   rj   r  3   s   

ÿÿ

zModelAlias.__getattr__c                 C   rÚ  )Nz'Cannot set attributes on model aliases.r}  r  ri   ri   rj   r  F   rØ  zModelAlias.__setattr__c                    s   ‡ fdd„ˆ j jjD ƒS )Nc                    ræ  ri   r¸  )rÑ   ré   r±  ri   rj   r†  J   r–   z0ModelAlias.get_field_aliases.<locals>.<listcomp>)r  r7  rQ	  r±  ri   r±  rj   Úget_field_aliasesI   rå  zModelAlias.get_field_aliasesc                 G   s   |s|   ¡ }t| |ƒS rf   )rå	  rš	  )rô   Ú	selectionri   ri   rj   rŠ  L   s   
zModelAlias.selectc                 K   s   | j di |¤ŽS r#  r¯	  r  ri   ri   rj   r¹  Q   rs   zModelAlias.__call__c                 C   sl   |j tkr| | j¡S | jr| j|j| < |j tkr,| | jjj¡ 	d¡ t
|j|  ƒ¡S | t
|j|  ƒ¡S r�  )r  rO  r9  r  r	  r!  rM  r7  r¦  r.  r6   rE  ri   ri   rj   r5  T   s   

ýzModelAlias.__sql__rf   )
rö   rü   rý   rõ   r  r  rå	  rŠ  r¹  r5  ri   ri   ri   rj   r˜	  .   s    
r˜	  c                   @   sP   e Zd Zdd„ Zedd„ ƒZdd„ Zdd„ Zd	d
„ Zdd„ Z	dd„ Z
dd„ ZdS )rã	  c                 C   s   || _ || _|| _d S rf   )r}  r  r,  )rô   r}  r,  ri   ri   rj   rõ   h   ræ  zFieldAlias.__init__c                 C   s    G dd„ d| t |ƒƒ}|||ƒS )Nc                   @   rô  )z&FieldAlias.create.<locals>._FieldAliasNrö  ri   ri   ri   rj   Ú_FieldAliaso   ó    rç	  )rð  )r«  r}  r,  rç	  ri   ri   rj   r­	  m   s   
zFieldAlias.createc                 C   s   t | j| jƒS rf   )rã	  r}  r,  r±  ri   ri   rj   re  s   r  zFieldAlias.clonec                 C   r  rf   )r,  r  rb  ri   ri   rj   r  v   r  zFieldAlias.adaptc                 C   r  rf   )r,  rª  rb  ri   ri   rj   rª  w   r  zFieldAlias.python_valuec                 C   r  rf   )r,  rˆ  rb  ri   ri   rj   rˆ  x   r  zFieldAlias.db_valuec                 C   rv  rf   )r»   r,  r  ri   ri   rj   r  y   r  zFieldAlias.__getattr__c                 C   s   |  t| j| jjƒ¡S rf   )r9  r%   r}  r,  rñ  rE  ri   ri   rj   r5  |   rÝ  zFieldAlias.__sql__N)rö   rü   rý   rõ   rá	  r­	  re  r  rª  rˆ  r  r5  ri   ri   ri   rj   rã	  g   s    
rã	  c                    sJ   t ˆƒ‰t ƒ ‰g ‰‡ ‡‡‡fdd„‰ dd„ }tˆ|d�D ]}ˆ |ƒ qˆS )Nc                    sr   | ˆv r5| ˆvr7ˆ  | ¡ | jj ¡ D ]\}}|jsˆ |ƒ q| jjr.| jjD ]}ˆ |ƒ q'ˆ | ¡ d S d S d S rf   )r  r7  rX	  rß   r  rW	  rÁ  )r  rË	  rí  Ú
dependency©Údfsrk  r±  rú  ri   rj   rë	  „   s   
€
özsort_models.<locals>.dfsc                 S   s   | j j| j jfS rf   )r7  r†  r(  )r¢   ri   ri   rj   rk   ‘   rì  zsort_models.<locals>.<lambda>rÓ  )rÄ  rÔ  )rk  rû  r¢   ri   rê	  rj   ri  €   s   
ri  c                       sP   e Zd ZejZ‡ fdd„Zejddd„ƒZ	ejdd„ ƒZ
dd	„ Zd
d„ Z‡  ZS )Ú_ModelQueryHelperc                    s0   t t| ƒj|i |¤Ž | js| jjj| _d S d S rf   )rÏ  rì	  rõ   rT  r  r7  rê  rÇ  rÐ  ri   rj   rõ   š   s   ÿz_ModelQueryHelper.__init__Nc                 C   s&   t j| _|d u r| j| _d S || _d S rf   )r0  rv  r-  r  r.  r8  ri   ri   rj   r:  Ÿ   s   z_ModelQueryHelper.objectsc                 C   rÏ  rf   )r0  rw  r-  r±  ri   ri   rj   rk  ¤   rÑ  z_ModelQueryHelper.modelsc                 C   s˜   | j p| j}|tjkr|  |¡S |tjkrt|| j| jƒS |tj	kr*t
|| j| jƒS |tjkr7t|| j| jƒS |tjkrFt|| j| j| jƒS td| ƒ‚r;  )r-  r<  r0  rw  Ú_get_model_cursor_wrapperrt  ÚModelDictCursorWrapperr  r�  rs  ÚModelTupleCursorWrapperru  ÚModelNamedTupleCursorWrapperrv  ÚModelObjectCursorWrapperr.  rå   rA  ri   ri   rj   rD  ¨   s    




ÿ
ÿz%_ModelQueryHelper._get_cursor_wrapperc                 C   s   t || jg | jƒS rf   )rñ	  r  r;  ri   ri   rj   rí	  ¹   r  z+_ModelQueryHelper._get_model_cursor_wrapperrf   )rö   rü   rý   r0  rw  r<  rõ   r“  r|  r:  rk  rD  rí	  rÒ  ri   ri   rÐ  rj   rì	  —   s    
rì	  c                       rd  )r§	  c                    s,   || _ d| _tt| ƒjd||dœ|¤Ž d S )Nri   r—  )r  r�  rÏ  r§	  rõ   )rô   r  r9  rX  r¶  rÐ  ri   rj   rõ   ¾   s    zModelRaw.__init__c              	   C   sB   z|   ¡ d W S  ty    |  ¡ \}}| j d| j||f ¡‚w )Nr   ú=%s instance matching query does not exist:
SQL: %s
Params: %s)rG  r…  r9  r  r3   r˜  ri   ri   rj   r  Ã   s   
þþzModelRaw.get)rö   rü   rý   rõ   r  rÒ  ri   ri   rÐ  rj   r§	  ½   ru  r§	  c                       s¦   e Zd ZdZdd„ ZeZdd„ ZeZdd„ ZeZ	dd	„ Z
e
Zd
d„ Zdd„ Z‡ fdd„Zd‡ fdd„	Zdd„ Zejdd„ ƒZddd„Zddd„Zejdd„ ƒZ‡  ZS )ÚBaseModelSelectNc                 C   ó   t | j| d|ƒS )Nrs  ©ÚModelCompoundSelectQueryr  r
  ri   ri   rj   r  Ð   rs   zBaseModelSelect.union_allc                 C   rô	  )Nrt  rõ	  r
  ri   ri   rj   r  Ô   rs   zBaseModelSelect.unionc                 C   rô	  )Nru  rõ	  r
  ri   ri   rj   rw  Ø   rs   zBaseModelSelect.intersectc                 C   rô	  )Nrv  rõ	  r
  ri   ri   rj   rx  Ü   rs   zBaseModelSelect.except_c                 C   s   | j s|  ¡  t| j ƒS rf   )r,  rG  r©  r±  ri   ri   rj   rV  à   s   
zBaseModelSelect.__iter__c                 C   s8   | j d tjfv r
dS | j tjkot| jtƒot| jtƒS rK  )	r-  r0  rw  rv  rg   r.  rð  r‰  rI   r±  ri   ri   rj   Ú_model_rowså   s   
ÿ
þzBaseModelSelect._model_rowsc                    sF   | j d u }tt| ƒ |¡}|r!| jr!|  ¡ r!tt|ƒ| | j|d� |S ©Nr>  )r,  rÏ  ró	  rF  Ú
_load_treer÷	  Ú_load_relatedrÖ   )rô   rê  Ú	first_runrâ  rÐ  ri   rj   rF  í   s   
ÿzBaseModelSelect._executec                    s   | j rtdƒ‚tt| ƒ |¡S )Nz/with_related() is incompatible with iterator().)rù	  rå   rÏ  ró	  rK  rá  rÐ  ri   rj   rK  õ   s
   ÿzBaseModelSelect.iteratorc                 O   rÙ  rf   )rQ   )rô   Ú
subqueriesr¶  ri   ri   rj   rQ   û   rÝ  zBaseModelSelect.prefetchc                 G   s   t dd„ |D ƒƒ| _d S )Nc                 s   ó&   � | ]}t |tƒr|nt|ƒV  qd S rf   ©rg   rG   )rÑ   rA  ri   ri   rj   rÔ   !  s   € ÿz/BaseModelSelect.with_related.<locals>.<genexpr>)r�  rù	  rŽ  ri   ri   rj   Úwith_relatedþ   s   ÿzBaseModelSelect.with_relatedc              	   C   sV   |   dd¡}d |_z| |¡d W S  ty*   | ¡ \}}| j d|j||f ¡‚w )Nrt   r   rò	  )ri  r,  rG  r…  r9  r  r3   )rô   rê  re  r9  rX  ri   ri   rj   r  !  s   
þþzBaseModelSelect.getc                 C   s(   z| j |d�W S  | jjy   Y d S w rø	  )r  r  r3   rá  ri   ri   rj   rÀ	  !  s
   ÿzBaseModelSelect.get_or_nonec                    sn   g }|D ]-‰ t ˆ ƒr| ˆ jj¡ qtˆ tƒr,ˆ jstdƒ‚| ‡ fdd„ˆ jD ƒ¡ q| ˆ ¡ q|| _	d S )Nr·  c                    ræ  ri   r¸  r¹  r»  ri   rj   r†   !  r¼  z,BaseModelSelect.group_by.<locals>.<listcomp>)
r6  rD  r7  r	  rg   r\   r×  rå   rÁ  r¢  r½  ri   r»  rj   rª  !  s   

ÿ
zBaseModelSelect.group_byrf   )rö   rü   rý   rù	  r  r  r  rÈ  rw  rÆ  rx  rÇ  rV  r÷	  rF  rK  rQ   r“  r|  rÿ	  r  rÀ	  rª  rÒ  ri   ri   rÐ  rj   ró	  Í   s*    


ró	  c                       rd  )rö	  c                    r/  rf   )r  rÏ  rö	  rõ   r|	  rÐ  ri   rj   rõ   (!  r1  z!ModelCompoundSelectQuery.__init__c                 C   r  rf   )rô  rí	  r;  ri   ri   rj   rí	  ,!  r  z2ModelCompoundSelectQuery._get_model_cursor_wrapper)rö   rü   rý   rõ   rí	  rÒ  ri   ri   rÐ  rj   rö	  '!  rh  rö	  c                    sz   g }| D ]6‰ t ˆ ƒr| ˆ jj¡ qtˆ tƒr| ˆ  ¡ ¡ qtˆ tƒr5ˆ jr5| ‡ fdd„ˆ jD ƒ¡ q| 	ˆ ¡ q|S )Nc                    ræ  ri   r¸  rè  ©Úfmri   rj   r†  8!  r–   z+_normalize_model_select.<locals>.<listcomp>)
r6  rD  r7  r	  rg   r˜	  rå	  r\   r×  rÁ  )Úfields_or_modelsr+  ri   r 
  rj   Ú_normalize_model_select0!  s   
r
  c                       sÒ   e Zd Zd&‡ fdd„	Z‡ fdd„Z‡ fdd„Z‡ fdd	„Zd'dd„Zdd„ Zdd„ Z	d(dd„Z
ejejd
d
d
fdd„ƒZd)dd„Zejd
d
fdd„Zdd„ Zd'dd„Zdd„ Zdd „ Zd*d"d#„Zd&d$d%„Z‡  ZS )+rš	  Fc                    s8   | | _ | _i | _|| _t|ƒ}tt| ƒ |g|¡ d S rf   )r  Ú	_join_ctxÚ_joinsÚ_is_defaultr
  rÏ  rš	  rõ   )rô   r  r
  r™	  r+  rÐ  ri   rj   rõ   ?!  s
   zModelSelect.__init__c                    s(   t t| ƒ ¡ }dd„ |j ¡ D ƒ|_|S )Nc                 S   s   i | ]	\}}|t |ƒ“qS ri   r£  )rÑ   rì  Újoinsri   ri   rj   r  J!  r‚  z%ModelSelect.clone.<locals>.<dictcomp>)rÏ  rš	  re  r
  rß   r¥  rÐ  ri   rj   re  F!  s
   ÿzModelSelect.clonec                    s0   |s| j st|ƒ}tt| ƒj|Ž }d|_ |S | S rÄ   )r
  r
  rÏ  rš	  rŠ  )rô   r
  r+  re  rÐ  ri   rj   rŠ  N!  s   
zModelSelect.selectc                    s"   t |ƒ}tt| ƒj|Ž }d|_|S rÄ   )r
  rÏ  rš	  r°  r
  )rô   r‰  r+  re  rÐ  ri   rj   r°  W!  s   zModelSelect.select_extendNc                 C   s   |d u r
| j | _| S || _| S rf   )r  r
  rE  ri   ri   rj   Úswitch^!  s   ÿzModelSelect.switchc                 C   sV   t |ƒr|dfS t|tƒr|jr|jdfS t|tƒr|jdfS t|tƒr)|jdfS dS )NTFrÄ   )r6  rg   r\   rÓ  r˜	  r  rš	  )rô   rì  ri   ri   rj   Ú
_get_modelb!  s   




zModelSelect._get_modelc                 C   sî  t |tƒ}|r|p|j}| ¡ }|  |¡\}}|  |¡\}}	| j}
|rÎ|rÎ|}
|}|r-|	sXt |tƒrX|j|u r?|jj	|j
 }n|j|u rL|jj	|j
 }n	td|||f ƒ‚d }nt |tƒrb|}d }nd }|  ||||¡\}}|d u r§|rvdnd}|	r|dnd}|r’t|t||ƒƒ}t|t|j|ƒƒ}nt|t||ƒƒ}t|t|j|ƒƒ}||k}|s¸|d ur³|s³|j
}n>|jj
}n9|rÍ|d urÍ||jkrÍ|sÍtd||f ƒ‚n#t |tƒråt}|pÙ|j}|sät |tƒrä|j}n|rñ|}
|}|pð|jj
}||||
fS )Nz2"on" clause Column %s does not belong to %s or %s.r†  rñ  zhCannot assign join alias to "%s", as this attribute is the object_id_name for the foreign-key field "%s")rg   r  r‚  r	  r	
  r
  r%   r}  r7  r‰  r†  r  r8   Ú_generate_on_clauser»   rð  r´  rå   r�  rÕ   r\   rö   )rô   rì  rŽ  r�  r  Úon_aliasrÐ  Úsrc_is_modelÚ
dest_modelÚdest_is_modelÚjoin_ctxr9  r·  Úfk_fieldrÜ	  Úsrc_attrÚ	dest_attrrô  r  ri   ri   rj   Ú_normalize_joinm!  sp   



þ
ÿ
þ€

€zModelSelect._normalize_joinc                    sj  |j }d ‰ }||jv r|j| }n||jv r|j| }d‰ |s.|d ur&dS td||f ƒ‚ˆd urGtˆtƒr:ˆjnˆ‰‡ ‡‡fdd„|D ƒ}t|ƒdkrS|d ˆ fS |d u rq|D ]}|j|j jkrh|ˆ f  S qYtd	||f ƒ‚d ‰t|t	ƒr±|j
|j}}	t|ƒ}
t|tƒr˜t|tƒr�|jn|}||
v r˜|‰ˆd u r±t|	tƒr±t|	tƒr©|	jn|	}||
v r±|‰ˆdfS )
NFTrÄ   zXUnable to find foreign key between %s and %s. Please specify an explicit join condition.c                    s&   g | ]}|ˆu sˆ r|j ˆu r|‘qS ri   )rð  rõ  ©rÜ	  r1  r·  ri   rj   r†  Î!  s    ÿ
þz3ModelSelect._generate_on_clause.<locals>.<listcomp>rt   r   zUMore than one foreign key between %s and %s. Please specify which you are joining on.)r7  rÔ  r[	  rå   rg   rã	  r,  rœ   r†  rE  rô  r  rÄ  r8   )rô   rì  rŽ  r·  r�  r1  rü  rd	  rô  r  Úfk_setÚlhs_fÚrhs_fri   r
  rj   r

  ·!  sR   


þÿÿþ

zModelSelect._generate_on_clausec           	      C   sâ   |d u r| j n|}|tjks|tjkr|d u rd}n>|tjkrP|d u r+t|ddƒr+d}|  ||||¡\}}}}|| _ |rO| j |g ¡ | j|  	||||f¡ n|d urXt
dƒ‚| js_t
dƒ‚| j ¡ }| j 	t||||ƒ¡ d S )NTr¦  Fz)Cannot specify on clause with cross join.rµ  )r
  rE   ro  rp  rm  r»   r
  r
  r0  rÁ  rå   r¡  rª  r�  )	rô   rŽ  r�  r�  rì  r  r9  r
  r(  ri   ri   rj   rƒ  ø!  s,   €
ÿ€
zModelSelect.joinc                 C   s   |   |tj|||¡S rf   r¶  )rô   rŽ  r�  rì  r  ri   ri   rj   r’  "  rª  zModelSelect.left_outer_joinc                 C   s   |   |||||¡S rf   r‚  )rô   rì  rŽ  r�  r�  r  ri   ri   rj   Ú	join_from"  r  zModelSelect.join_fromc                 C   s@   t | jƒdkr| jst|| j| j| jƒS t|| j| j| j| jƒS rý  )rœ   r¡  r
  rñ	  r  r�  ÚModelCursorWrapperr;  ri   ri   rj   rí	  "  s   ÿÿz%ModelSelect._get_model_cursor_wrapperc           	      K   sT   | j }| j |g ¡D ]\}}}}||kr|   S q
|  |¡j|fd|i|¤Ž |¡S )Nr�  )r
  r
  r  r
  rƒ  )	rô   ÚlmÚrmr�  Újoin_kwargsr
  rŽ  r/  r9  ri   ri   rj   Úensure_join"  s   ÿ"zModelSelect.ensure_joinc              
   C   s\  g }g }t tf}t| ¡ ƒD ]›\}}| j}d|v r0| dd¡d tv r0| dd¡\}}t| }n|d u r9td }ntd }d|vrGt||ƒ}	nZ| d¡}
t	|
ƒD ]P\}}zt||d ƒ}	W n	 t
ye   Y nw | j |d¡D ]\}}}}||ks�t|tƒr…|j|kr…|} nqmt||ƒ}	|t|
ƒd k r t|	|ƒr |	j}| |	¡ qP| ||	|ƒ¡ q||fS )Nr’  rt   rC  r7  ri   )r<   rô  rÔ  rß   r  r�  r2   r»   r”   ró  r  r
  r  rg   r˜	  r	  rœ   rí  rÁ  )rô   Úqdictr÷  r
  Úfksrí  rÇ   rc	  rŽ  rä	  Úpiecesrü  ÚpiecerŽ  r  r/  ri   ri   rj   Úconvert_dict_to_node&"  sB   


ÿ
€

€z ModelSelect.convert_dict_to_nodec                 O   s¨  |r|rt tjdd„ |D ƒƒtdi |¤Ž@ }n"|r(t tjdd„ |D ƒƒtƒ @ }n|r5tdi |¤Žtƒ @ }n|  ¡ S t |g¡}g }tƒ }|rš| 	¡ }t
|tƒsPqDd|jfd|jffD ]=\}}	t
|	tƒr’|  |	j¡\}
}|D ]}||vr}| |¡ | |¡ qmt tj|
ƒ}|	jr‹t|ƒ}t|||ƒ qZ| |	¡ qZ|sF|rž|s¡|j}|  ¡ }
|D ]'}t
|tƒr¸|j|j}}|}nt
|tƒrÇ|j|j}}|j}|
 |||¡}
q§|
 |¡S )Nc                 S   ó   g | ]}|  ¡ ‘qS ri   rj  ©rÑ   rÊ   ri   ri   rj   r†  Q"  r  z&ModelSelect.filter.<locals>.<listcomp>c                 S   r#
  ri   rj  r$
  ri   ri   rj   r†  T"  r  rô  r  ri   )r
   r_  rƒ  r5   r  re  rÙ  r_	  rÄ  r`	  rg   rE  rô  r  r"
  rG  rÁ  r  r	  r(  rÚ  r<   r  rí  rô  r,  r
  r®  )rô   rµ  r¶  Údq_noderq   Údq_joinsÚ
seen_joinsrc	  Úsider!
  rG  r
  rƒ  r7  r,  r
  r
  Ú	field_objri   ri   rj   r¯  N"  sX   ÿÿ



€ï


zModelSelect.filterTc                 K   s   | j jj|| |fi |¤ŽS rf   )r  rÙ  r	  )rô   r†  r  r1  ri   ri   rj   rj  €"  rh  zModelSelect.create_tablec                 C   sF   | j r|rt| jƒdkr| jjjdur| | jjj¡S | t| jƒ¡S r†  )r
  rœ   r�  r  r7  rÛ  r9  r  rÂ  ri   ri   rj   rÄ  ƒ"  s   zModelSelect.__sql_selection__r  rf   r  r÷  rp  )rö   rü   rý   rõ   re  rŠ  r°  r
  r	
  r
  r

  r“  r|  rE   rh  rƒ  r’  r
  rí	  r
  r"
  r¯  rj  rÄ  rÒ  ri   ri   rÐ  rj   rš	  >!  s&    	

JA

(
2rš	  c                   @   r~  )r¼	  c                 C   s   | j jj |¡S rf   )r  r7  rê  r  rE  ri   ri   rj   r5  Œ"  rs   zNoopModelSelect.__sql__c                 C   s   t |ƒS rf   )r>  r;  ri   ri   rj   rD  �"  rØ  z#NoopModelSelect._get_cursor_wrapperN)rö   rü   rý   r5  rD  ri   ri   ri   rj   r¼	  ‹"  ri  r¼	  c                       ó0   e Zd Z‡ fdd„Z‡ fdd„Zdd„ Z‡  ZS )Ú_ModelWriteQueryHelperc                    s(   || _ tt| ƒj|g|¢R i |¤Ž d S rf   )r  rÏ  r+
  rõ   r|	  rÐ  ri   rj   rõ   ”"  s   "z_ModelWriteQueryHelper.__init__c                    s@   g }|D ]}t |ƒr| |jj¡ q| |¡ qtt| ƒj|Ž S rf   )r6  rD  r7  r	  rÁ  rÏ  r+
  rÊ  )rô   rÊ  r÷  r(  rÐ  ri   rj   rÊ  ˜"  s   z _ModelWriteQueryHelper.returningc                 C   s   | j jj}|j|j|< d S rf   )r  r7  r8  rö   r!  )rô   rF  r8  ri   ri   rj   rÑ  ¡"  rß  z'_ModelWriteQueryHelper._set_table_alias)rö   rü   rý   rõ   rÊ  rÑ  rÒ  ri   ri   rÐ  rj   r+
  “"  s    	r+
  c                   @   rô  )rž	  Nrö  ri   ri   ri   rj   rž	  ¦"  rè	  rž	  c                       sF   e Zd ZejZ‡ fdd„Zdd„ Z‡ fdd„Zdd„ Z	d	d
„ Z
‡  ZS )r 	  c                    sT   t t| ƒj|i |¤Ž | jd u r$| jj ¡ }|d ur&|jr(|  ¡ | _d S d S d S d S rf   )	rÏ  r 	  rõ   r�  r  r7  ry	  r  r  )rô   rµ  r¶  rW  rÐ  ri   rj   rõ   ­"  s   
ýzModelInsert.__init__c                 C   s   | j j ¡ pd S rf   )r  r7  re  r±  ri   ri   rj   r  ´"  rs   zModelInsert._pk_returningc                    s&   |r| j d u rtj| _ tt| ƒj|Ž S rf   )r-  r0  rw  rÏ  r 	  rÊ  rÌ  rÐ  ri   rj   rÊ  ·"  s   zModelInsert.returningc                 C   s
   | j jjS rf   )r  r7  rö  r±  ri   ri   rj   rå  À"  r  zModelInsert.get_default_datac                 C   s$   | j jj}| j jjr|dd … S |S rý  )r  r7  r	  rž  )rô   r+  ri   ri   rj   rê  Ã"  s   
zModelInsert.get_default_columns)rö   rü   rý   r0  rs  r<  rõ   r  rÊ  rå  rê  rÒ  ri   ri   rÐ  rj   r 	  ª"  s    	r 	  c                   @   rô  )r©	  Nrö  ri   ri   ri   rj   r©	  È"  rè	  r©	  c                       s>   e Zd Z‡ fdd„Zdd„ Zddd„Zdd	„ Zd
d„ Z‡  ZS )rÚ  c                    sJ   || _ || _|jjj| _|jjj| _tt	| ƒj
||fg|¢R i |¤Ž d S rf   )Ú	_instanceÚ	_accessorrÕ  rð  r†  Ú	_src_attrrÖ  Ú
_dest_attrrÏ  rÚ  rõ   )rô   rø   Úaccessorrf	  rµ  r¶  rÐ  ri   rj   rõ   Í"  s
   &zManyToManyQuery.__init__c                    s$   t |d tƒr‡ fdd„|D ƒS |S )Nr   c                    s   g | ]}t |ˆ jƒ‘qS ri   )r»   r/
  rÝ  r±  ri   rj   r†  Ö"  r”  z,ManyToManyQuery._id_list.<locals>.<listcomp>)rg   rI   )rô   Úmodel_or_id_listri   r±  rj   Ú_id_listÔ"  s   zManyToManyQuery._id_listFc                    sœ   |r|   ¡  | j‰ t| j| jƒ‰t|tƒr/| tˆƒˆ j	j
¡}ˆ jjˆ jˆ j	g|d� ¡  d S t|ƒ}|s7d S ‡ ‡fdd„|  |¡D ƒ}ˆ j |¡ ¡  d S )N)r+  rG  c                    s    g | ]}ˆ j jˆˆ jj|i‘qS ri   )rÕ  r†  rÖ  )rÑ   Úrel_id©r0
  rÛ  ri   rj   r†  ê"  s
    þþz'ManyToManyQuery.add.<locals>.<listcomp>)r  r-
  r»   r,
  r.
  rg   rr  r‰  rb   rÖ  rð  rÏ  r¥	  rÕ  rG  r’  r2
  r¤	  )rô   rÇ   rÞ  rG  Úinsertsri   r4
  rj   r  Ù"  s(   
þ
þ
ýzManyToManyQuery.addc                 C   sš   t | j| jƒ}t|tƒr-t |j| jƒ}| |¡}| jj	 
¡  | jj|> | jj|k@ ¡ ¡ S t|ƒ}|s5d S | jj	 
¡  | jj|  |¡> | jj|k@ ¡ ¡ S rf   )r»   r,
  r.
  rg   rr  r  r/
  r‰  r-
  rÏ  ró  r®  rÖ  rÕ  rG  r’  r2
  )rô   rÇ   rÛ  rÝ  r,  ri   ri   rj   rU  ð"  s2   



ÿÿû
ÿÿûzManyToManyQuery.removec                 C   s,   t | j| jƒ}| jj ¡  | jj|k¡ ¡ S rf   )	r»   r,
  r.
  r-
  rÏ  ró  r®  rÕ  rG  )rô   rÛ  ri   ri   rj   r  #  s   ýzManyToManyQuery.clearr  )	rö   rü   rý   rõ   r2
  r  rU  r  rÒ  ri   ri   rÐ  rj   rÚ  Ì"  s    
rÚ  c                    rÄ  )Nc              	      s&   zˆ | ƒW S  t tfy   |  Y S w rf   )rä   rå   r‘  ©Ú	conv_funcri   rj   Úvalidate#  r  z#safe_python_value.<locals>.validateri   )r7
  r8
  ri   r6
  rj   Úsafe_python_value#  r{  r9
  c              	   C   sD  |j j}|j j}| j}t|ƒ}g }d g| }d g| }	t|ƒD ]Ü\}
}|d  }}| d¡}|dkr:||d d … }| d¡}| |¡ z||
 }W n t	y`   ||v r\||  }}nY qY nw | 
¡ }| ¡ }|ro|||
< t|tƒrˆ|jr||j||
< ||	|
< |s‡|j||
< qt|tƒr–|jr–|j||
< qt|tƒrÝ|jrÝ|jdu r¤q|jd ur¯|j||
< q|jrÜt|jd tƒrÜ|jd  
¡ }t|tƒrÐ|jd }| |¡}t|tƒrÜt|jƒ||
< q||v rû|jrë|| j||
< t|tƒrû|j|krû|| |	|
< qg }g }t|ƒD ]}|| d u�r| |¡ �q| |¡ �q||	|||fS )Nr   r�  ru   rt   z()"`F)r7  rO	  r8  rÐ  rœ   ró  Úrfindrw   rÁ  r…  ro  rn  rg   r8   rk  rª  r†  r  r  r   r¨  r¥  r“  r6   r©  r  r9
  r%   r}  r  )rB  r  rŠ  rO	  r8  rÐ  rÑ  r‰  Ú
convertersr+  r  Údescription_itemrÝ  Úorig_columnÚ	dot_indexrŠ  rI  rn  rš  r‡  Ú
no_convertÚconvertrü  ri   ri   rj   Ú_resolve_model_columns#  sz   




þþ


€





€€rA
  c                       r�  )ÚBaseModelCursorWrapperc                    s$   t t| ƒ |¡ || _|pg | _d S rf   )rÏ  rB
  rõ   r  rŠ  )rô   rB  r  r‰  rÐ  ri   rj   rõ   s#  s   zBaseModelCursorWrapper.__init__c                 C   s6   t | j| j| jƒ\| _| _| _| _| _t	| jƒ| _
d S rf   )rA
  rB  r  rŠ  r‰  r+  r;
  r?
  r@
  rœ   rÑ  r±  ri   ri   rj   r¾  x#  s   ÿÿz!BaseModelCursorWrapper.initializec                 C   rg  rf   rh  rÇ  ri   ri   rj   rÃ  ~#  r³  z"BaseModelCursorWrapper.process_row©rö   rü   rý   rõ   r¾  rÃ  rÒ  ri   ri   rÐ  rj   rB
  r#  s    rB
  c                       rÝ  )rî	  Fc                    s&   t t| ƒ ¡  | j| j| jd�| _d S )NrÏ  )rÏ  rî	  r¾  rÌ  r‰  rÉ  Úunique_columnsr±  rÐ  ri   rj   r¾  …#  s
   þz!ModelDictCursorWrapper.initializec                 C   sP   i }| j }| jD ]
}|| ||| < q| jD ]}| j| || ƒ||| < q|S rf   )rD
  r?
  r@
  r;
  )rô   r  r»  r‰  rü  ri   ri   rj   rÃ  ‹#  s   

z"ModelDictCursorWrapper.process_row)rö   rü   rý   rÉ  r¾  rÃ  rÒ  ri   ri   rÐ  rj   rî	  ‚#  s    rî	  c                   @   s   e Zd ZeZdd„ ZdS )rï	  c                    s&   | j ‰ |  ‡ ‡fdd„t| jƒD ƒ¡S )Nc                    s0   g | ]}ˆ | d urˆ | ˆ| ƒnˆ| ‘qS rf   ri   rÒ  ©r;
  r  ri   rj   r†  š#  s    "ÿÿz7ModelTupleCursorWrapper.process_row.<locals>.<listcomp>)r;
  r9  r  rÑ  rÇ  ri   rE
  rj   rÃ  ˜#  s   þz#ModelTupleCursorWrapper.process_rowN)rö   rü   rý   r�  r9  rÃ  ri   ri   ri   rj   rï	  •#  r  rï	  c                       r  )rð	  c                    s>   t tˆ ƒ ¡  ˆ  ˆ j¡}tjd|dd�ˆ _‡ fdd„ˆ _d S )NrÖ  Tr×  c                    s
   ˆ j | Ž S rf   )Úimplr¡  r±  ri   rj   rk   ¤#  rl   z9ModelNamedTupleCursorWrapper.initialize.<locals>.<lambda>)	rÏ  rð	  r¾  rÌ  r‰  rÙ  rÚ  rF
  r9  rÜ  rÐ  r±  rj   r¾   #  s   z'ModelNamedTupleCursorWrapper.initialize)rö   rü   rý   r¾  rÒ  ri   ri   rÐ  rj   rð	  Ÿ#  r  rð	  c                       s,   e Zd ZdZ‡ fdd„Z‡ fdd„Z‡  ZS )rñ	  Tc                    s(   || _ t|ƒ| _tt| ƒ |||¡ d S rf   )r9  r6  rÏ  rñ	  rõ   )rô   rB  r  rŠ  r9  rÐ  ri   rj   rõ   ª#  s   
z!ModelObjectCursorWrapper.__init__c                    sH   t t| ƒ |¡}| jr| jdddi|¤Ž}|j ¡  |S | jdi |¤ŽS )Nr–	  rt   ri   )rÏ  rñ	  rÃ  r6  r9  rè  r  )rô   r  r»  r¼  rÐ  ri   rj   rÃ  ¯#  s   
z$ModelObjectCursorWrapper.process_rowrà  ri   ri   rÐ  rj   rñ	  §#  s    rñ	  c                       r*
  )r
  c                    s$   t t| ƒ |||¡ || _|| _d S rf   )rÏ  r
  rõ   r©  r
  )rô   rB  r  rŠ  r©  r
  rÐ  ri   rj   rõ   »#  s   
zModelCursorWrapper.__init__c              	      s  t tˆƒ ¡  tdd„ ˆjD ƒƒ}ˆj}dd„ ˆjD ƒ‰ ˆjˆjdfiˆ_g ˆ_	t
 ˆj¡}|r | ¡ }t|tƒrF| |j¡ | |j¡ q.|ˆjvrLq.ˆj| D ]L\}}}}|ˆjvr�|t|ƒfˆj|< ˆj |¡}	|	d uo~|	d o~t|	d jj |¡tƒ}
ˆj	 ||||	d uo�|	d  d|v p”d|v |
f¡ | |¡ qQ|s0|D ] }|ˆjvrÂt|ƒrµ|dfˆj|< q¢t|tƒrÂ|jdfˆj|< q¢g ˆ_t|ƒD ]T\}}ˆj}ˆj| }|d urçt|tƒrã|j}n5|j}n1t|tƒ�r|jˆjv�rtd	|  ¡ |j|jf ƒ‚|j}nt|t!ƒ�r|  ¡ }t|t"ƒ�r|j}ˆj |¡ qÊt#‡ ‡fd
d„t$ˆj%ƒD ƒƒˆ_&dd„ ˆj '¡ D ƒˆ_(i ˆ_)ˆj	D ]H\}}}}}}|ˆjv�rP�q@tƒ }t
 |g¡}|�r€| ¡ }|ˆjv �r}ˆj| D ]\}}}}| *|¡ | |¡ �qk|�s\t+|ƒˆj)|< �q@d S )Nc                 S   s   g | ]	}|d ur|j ‘qS rf   r¯	  rþ  ri   ri   rj   r†  Â#  s    ÿz1ModelCursorWrapper.initialize.<locals>.<listcomp>c                 S   rý  ri   )r   r  ri   ri   rj   r†  Å#  r  Trt   r   ÚLEFTrk  zB%s specifies bind-to %s, but %s is not among the selected sources.c                 3   s,   � | ]}|ˆj | ˆ | ˆj| fV  qd S rf   )Úcolumn_keysr;
  rÒ  ©r‰  rô   ri   rj   rÔ   
$  s
   € ÿ
ÿz0ModelCursorWrapper.initialize.<locals>.<genexpr>c                 S   s   g | ]\}\}}|||f‘qS ri   ri   )rÑ   rí  Ú	constructÚ	_is_modelri   ri   rj   r†  $  s    
ÿÿ),rÏ  r
  r¾  rÄ  r+  rŠ  r‰  r  Úkey_to_constructorÚsrc_to_destrÙ  r_	  r©  r`	  rg   r�  rÁ  rô  r  r
  r6  r  r7  r<   r˜	  rH
  ró  rã	  r}  r  rŽ  rå   ro  r“  r%   r�  r  rÑ  Ú	_row_specrß   Ú_constructor_listÚ_dest_reachabler  Ú	frozenset)rô   Úselected_srcrŠ  r÷  rc	  rí  r  r9  r�  Úsrc_ctorÚis_fkrì  r  rI  r,  r/  rŽ  Ú	reachablerq   Ú_keyrÐ  rI
  rj   r¾  À#  s¨   



ÿÿÿú
€ã 

€

þ
þþ
ûôzModelCursorWrapper.initializec                 C   s¤  i }g }| j D ]\}}}|r|dd�||< | || ¡ q|ƒ ||< q|| j }tƒ }| jD ]1\}	}}
}| ||¡}||	 }|d urG| |¡ |d urO||ƒ}t|tƒrY|||
< q.t	||
|ƒ q.| j
D ]_\}}}}}}| |¡}| |¡}|d u r~||vr~qcd}||vr’|| jv r’t| j| |@ ƒ}||vrž|sž|r�d }nqc||vr©||vr©|r©qc|r°|||< qc|r¼|d u r¼d |j|< qct	|||ƒ qc|D ]}|j ¡  qÅ|| j S )NT)r–	  F)rO
  rÁ  r  rÄ  rN
  r  r  rg   rÕ   rÚ  rM
  rP
  rÉ   rî  rè  r  )rô   r  r:  r°	  rí  r9  rK
  Údefault_instanceÚset_keysr  rÝ  r=  rø   rÇ   rì  r  rŽ  r  Úis_outerrT
  Újoined_instanceÚassignri   ri   rj   rÃ  #$  sR   







zModelCursorWrapper.process_rowrC
  ri   ri   rÐ  rj   r
  º#  s    cr
  c                       s2   e Zd Z		d‡ fdd„	Zdd„ Zdd„ Z‡  ZS )	ÚPrefetchQueryNc              	      s‚   |r0|r|d u rdd„ |D ƒ}dd„ |D ƒ}n|d u r"dd„ |D ƒ}dd„ |D ƒ}t t||ƒƒ}|j}tt| ƒ | ||||||¡S )Nc                 S   rÀ  ri   r¯	  rþ  ri   ri   rj   r†  n$  r‹  z)PrefetchQuery.__new__.<locals>.<listcomp>c                 S   rç  ri   )rð  r†  rþ  ri   ri   rj   r†  o$  r  c                 S   rÀ  ri   )rí  rþ  ri   ri   rj   r†  r$  r‹  c                 S   rÀ  ri   r‰  rþ  ri   ri   rj   r†  s$  r‹  )rÖ   rý  r  rÏ  r\
  rc  )r«  rG  r+  rÜ	  Ú
rel_modelsÚfield_to_nameÚforeign_key_attrsr  rÐ  ri   rj   rc  i$  s   
ÿzPrefetchQuery.__new__c           	      C   s¶   | j r)| jD ] }|j|j }||f}||v r&t||j|| ƒ |j |j¡ qd S | jD ],\}}|j|jj }||f}| 	|g ¡}|D ]}t|||ƒ |j 
¡  qCt||j|ƒ q,d S rf   )rÜ	  r+  rç  r†  rÚ  rè  rÈ  r^
  rð  r  r  r²  )	rô   rø   Úid_mapr,  Ú
identifierrí  ÚattnameÚrel_instancesr¬	  ri   ri   rj   Úpopulate_instancey$  s$   
€ù	ùzPrefetchQuery.populate_instancec                 C   sX   | j D ]&\}}|j |j| ¡}||f}| jr|||< q| |g ¡ ||  |¡ qd S rf   )r^
  rð  rª  rç  rÜ	  r0  rÁ  )rô   rø   r`
  r,  rb
  rÝ  rí  ri   ri   rj   Ústore_instance�$  s   
ùzPrefetchQuery.store_instancerm  )rö   rü   rý   rc  rd
  re
  rÒ  ri   ri   rÐ  rj   r\
  g$  s    ÿr\
  Ú_PrefetchQuery)rG  r+  rÜ	  r]
  r^
  r  c                    st   t | tƒr|  d¡‰ tˆ f‡ fdd„|D ƒƒS | j|Ž ‰ | jd us&| jd ur8ˆ  d¡‰ tˆ f‡ fdd„|D ƒƒS ˆ S )NÚ	_compoundc                    ó   g | ]	}t ˆ j|jƒ‘qS ri   ©r»   rh   rñ  r  ©r—  ri   rj   r†  �$  r‚  z _parent_keys.<locals>.<listcomp>Ú_limitedc                    rh
  ri   ri
  r  rj
  ri   rj   r†  ¢$  r‚  )rg   rn  r	  rY   rŠ  rZ  r[  )Úparent_queryrg  ri   rj
  rj   Ú_parent_keys˜$  s   



rm
  c                    sj   t t dd„ |D ƒ¡ƒ}t||ƒ ¡  ¡ ‰ ttj‡ fdd„|D ƒƒ}| j	ˆ |d�} t
|ƒdkr3|  ¡ } | S )Nc                 S   s   g | ]\}}|‘qS ri   ri   )rÑ   r/  rí  ri   ri   rj   r†  ª$  r  z%_join_parent_keys.<locals>.<listcomp>c                    s"   g | ]\}}|t ˆ j|jƒk‘qS ri   ri
  ©rÑ   ré  rí  rj
  ri   rj   r†  ¬$  rü  ©r�  rt   )rÖ   rÕ   Úfromkeysrm
  r²  rE  r
   r_  r`  rƒ  rœ   )rG  rl
  ÚpairsrK  r�  ri   rj
  rj   Ú_join_parent_keys¦$  s   ÿrr
  c                    s:   |t jkrt| ˆ |ƒS ttj‡ fdd„|D ƒƒ}|  |¡S )Nc                    s    g | ]\}}|t ˆ |fƒ> ‘qS ri   )rm
  rn
  ©rl
  ri   rj   r†  º$  re  z_relate.<locals>.<listcomp>)rR   rE   rr
  r
   r_  r`  r®  )rG  rl
  rq
  Ústrategyrí  ri   rs
  rj   Ú_relate¶$  s   
ÿ
ru
  c                    s¦  t | ƒg}t|ƒD ]Ç\}}t|tƒr|\}}nd }t|tƒs"t|ƒs't|tƒr+| ¡ }|j‰t	t
|d ƒƒD ]L}d  }}	|| }
|
j}|
j }‰ t|tƒrP|j}ˆjj |g ¡}|rm‡fdd„|D ƒ}‡ fdd„|D ƒ}nˆjj |¡}	|sx|	r‚|ˆ u s€|d u r‚ nq6|r‰d| nd}td||f ƒ‚|r˜|fnd }|r³t||tt||ƒƒ|ƒ}| t ||d|ƒ¡ q	|	rÐ‡ ‡fd	d„|	D ƒ}t||||ƒ}| t ||	d
|ƒ¡ q	|S )Nrt   c                    s   g | ]}t ˆ |jƒ‘qS ri   )r»   r†  ©rÑ   rd	  )Úsubquery_modelri   rj   r†  Ó$  r”  z)prefetch_add_subquery.<locals>.<listcomp>c                    s   g | ]	}t ˆ |jjƒ‘qS ri   ©r»   rð  r†  rv
  )Úlast_objri   rj   r†  Ô$  r‚  z	 using %sr^  z1Error: unable to find foreign key for query: %s%sFc                    s&   g | ]}t ˆ|jjƒt ˆ |jƒf‘qS ri   rx
  )rÑ   r²  ©ry
  rw
  ri   rj   r†  ç$  s
    ÿ
ÿT)r\
  ró  rg   r�  rY  r6  r˜	  rŠ  r  r  r  rG  r7  rÔ  r  r[	  r  ru
  rÖ   rý  rÁ  )r¿	  rü	  Úprefetch_typeÚfixed_queriesrü  r,  Útarget_modelrU  r
  rY	  ÚfixedÚ
last_queryÚ
last_modelÚrelsrû  Útgt_errrŽ  rq
  ri   rz
  rj   Úprefetch_add_subquery¿$  sX   


ÿ

€ÿÿÿ€rƒ
  c                 O   s  |s| S |  dtj¡}|rtd| ƒ‚|tjkrtdƒ‚|t ¡ vr&tdƒ‚t| ||ƒ}i }i }t|ƒD ]M}|j}|j	rO|j
D ]}	| |	g ¡ ||	  |¡ q?| |i ¡ || }
t| |¡ƒ}|jD ]}|j	rn| ||
¡ |r€|| D ]}| |||j ¡ qtqcq4t|jƒS )Nr{
  zUnrecognized arguments: %szwPREFETCH_TYPE.MATERIALIZE is not supported by prefetch(). Use Model.select().with_related() with a Load() node instead.z,prefetch_type must be a PREFETCH_TYPE value.)rª  rR   rx  rå   ry  rù  rƒ
  r  r  r+  r]
  r0  rÁ  rÉ   r  rG  re
  rd
  rÖ   )r¿	  rü	  r¶  r{
  r|
  ÚdepsÚrel_mapÚpqÚquery_modelrí  r`
  Úhas_relationsrø   rf	  ri   ri   rj   rQ   ï$  s<   


€û
rQ   c                 C   sÊ   | j | jj }}|r@i }|D ]}| |j| g ¡ |¡ q| j}|D ]}	| |	j| g ¡}
|
D ]}|	|j|< q/t|	||
ƒ q"d S i }|D ]	}|||j| < qD|D ]}	|	j| }||v rb|| |	j|< qPd S rf   )	r†  rð  r0  rç  rÁ  r²  r  rî  rÚ  )r,  rÜ	  ÚchildrenÚparentsr†  Úrel_nameÚbucketsÚchildr²  Úparentrf	  r¬	  r`
  rí  ri   ri   rj   Ú_bucket%  s*   ü
€ýr�
  c                   @   s|   e Zd Zdejdfdd„Zedd„ ƒZej	dd„ ƒZ
dd	„ Zed
d„ ƒZdd„ Zdd„ Zddd„Zedd„ ƒZddd„ZdS )rG   Nc                 C   s”   |   |¡\| _| _| jr| jjn| jj}|d ur&|j|ur&td||jf ƒ‚|d ur2| ¡ s2tdƒ‚|t ¡ vr<tdƒ‚|| _	|| _
|| _d| _d S )Nz)Load() query must select from %s, got %s.zGLoad() query must return model instances, not dicts/tuples/namedtuples.z.Load() strategy must be a PREFETCH_TYPE value.ri   )Ú_resolver9  râ  r  rí  rå   r÷	  rR   rù  r	  Ú	_strategyÚ_per_parentÚ	_children)rô   rf	  rG  rt
  Ú
per_parentrí  ri   ri   rj   rõ   /%  s    ÿÿ
zLoad.__init__c                 C   sB   t | tƒr| j} t | tƒr| jdfS t | tƒr| dfS td|  ƒ‚)NTFz:Load() expects a foreign-key or backref reference, got %r.)rg   rã	  r,  rô  r<   rå   )rf	  ri   ri   rj   r�
  A%  s   



ÿzLoad._resolvec                 G   s   | j tdd„ |D ƒƒ | _ d S )Nc                 s   rý	  rf   rþ	  r  ri   ri   rj   rÔ   N%  s   € 
ÿzLoad.then.<locals>.<genexpr>)r“
  r�  )rô   r‰
  ri   ri   rj   ÚthenL%  s   ÿz	Load.thenc                 C   s   | j d ur| j S | ¡ S rf   )r	  rŠ  )rô   rí  ri   ri   rj   Ú_baseQ%  re  z
Load._basec                 C   sF   g t ƒ }}| D ]}||ƒ}|d ur ||vr | |¡ | |¡ q|S rf   )rÄ  r  rÁ  )rŠ
  Úget_keyrK  rú  rŽ
  rí  ri   ri   rj   r§  U%  s   

€zLoad._distinctc                    sZ   | j ‰ | jtjkr|  |‡ fdd„¡}| ˆ |> ¡S t|jˆ jj	ƒ}t
||ˆ |fg| jƒS )Nc                    s   t | ˆ jjƒS rf   rx
  ©r‘  r÷  ri   rj   rk   d%  r  z%Load._link_children.<locals>.<lambda>)r9  r‘
  rR   ry  r§  r®  r»   r  rð  r†  ru
  )rô   rG  rl
  rŠ
  rK  rr  ri   r÷  rj   Ú_link_children_%  s   
ÿzLoad._link_childrenc                    s\   | j ‰ | jtjkr|  |‡ fdd„¡}| ˆ j|> ¡S t|jˆ j	ƒ}t
||ˆ j|fg| jƒS )Nc                    s   | j  ˆ j¡S rf   )rç  r  r†  r˜
  r÷  ri   rj   rk   o%  r  z#Load._link_parent.<locals>.<lambda>)r9  r‘
  rR   ry  r§  r®  rð  r»   r  r†  ru
  )rô   rG  rl
  rŠ
  rK  rd	  ri   r÷  rj   Ú_link_parentk%  s   
ÿÿzLoad._link_parentr   c                 C   sz   | j }| jr| jd ur|  |||¡}n|  |  |j¡||¡}n|  |  |j¡||¡}t	| 
|¡ƒ}t|| j||ƒ ||fS rf   )r9  râ  r’
  Ú	_windowedr™
  r–
  r  rš
  rí  rÖ   rG  r�
  )rô   rŠ
  rl
  r·  rê  r,  Úchild_queryr‰
  ri   ri   rj   Ú_runu%  s   
ÿÿz	Load._runc                    sŠ   t | tƒr| nt| ƒ}|j ¡ ‰ t ˆ tƒrtdƒ‚ˆ |u s(t‡ fdd„|D ƒƒr*| S d|j 	¡ v r6t
 ˆ ¡nt
 ˆ ¡}t||j|j|jƒS )NzRper_parent cannot rank by a SQL() literal, order by a field or expression instead.c                 3   s   � | ]}ˆ |u V  qd S rf   ri   rq  ru  ri   rj   rÔ   Ž%  r¥  z"Load._rank_term.<locals>.<genexpr>rƒ  )rg   rv  r#  rI  ro  rZ   rå   r×   rx  rú  r;   ÚMAXÚMINr!  r"  )Útermrû  r,  rŠ  Úaggri   ru  rj   Ú
_rank_term…%  s   

"zLoad._rank_termc                    s"  ˆj ‰ˆj}ˆ |¡}|jd urtdƒ‚|j ¡ ‰‡‡‡fdd„|jp$ˆD ƒ}t 	¡ j
ˆg|d� d¡}|jg ˆ¢|‘R Ž  ¡  d ¡ d ¡jg ˆ¢ˆ‘R Ž }ˆ |||¡ d| ¡‰ ttj‡ fdd„ˆD ƒƒ}	|jro| ¡ }
n| d ¡ d ¡ |¡}
|
jˆ |	d� ˆ jjˆjk¡ ˆ ¡ ˆ jj¡S )	NzGper_parent is not supported with a grouped or aggregate relation query.c                    s   g | ]	}ˆ  |ˆˆ ¡‘qS ri   )r¢
  )rÑ   rŠ  )r,  rû  rô   ri   rj   r†  �%  rÿ  z"Load._windowed.<locals>.<listcomp>)r´  r²  Ú_rnz_load_ranked_%dc                    s   g | ]}|t ˆ j|jƒk‘qS ri   ri
  rq  )rš  ri   rj   r†  ©%  s    ro
  )r9  r  r–
  r¢  rå   r7  re  r§  r;   Ú
ROW_NUMBERr¼  r	  rŠ  r²  r\  r]  rª  r™
  rš  r
   r_  rƒ  r
  r
  rƒ  r®  rh   r£
  r’
  r  )rô   rl
  rŠ
  r·  rí  ÚbaseÚorderÚrnr¸  r�  Úouterri   )rš  r,  rû  rô   rj   r›
  “%  sF   


ÿÿþ"ÿÿÿ
ÿÿ

ýzLoad._windowed©r   Nr¢  )rö   rü   rý   rR   rx  rõ   rr  r�
  r“  r|  r•
  r–
  r§  r™
  rš
  r�
  r¢
  r›
  ri   ri   ri   rj   rG   .%  s"    
ÿ



	


rG   c                 C   sF   | sd S |D ]}|  | |||¡\}}|jr t|||j|d |ƒ qd S rý  )r�
  r“
  rú	  )rŠ
  rl
  rã   r·  rê  rI  r‰
  rœ
  ri   ri   rj   rú	  ¶%  s   
ÿÿ€ürú	  )rm   rp  ri   rf   r  r  )r3  r©
  (o  Úbisectr   r   Úcollections.abcr   r   Ú
contextlibr   r|  r   Ú	functoolsr   r
   r   Úinspectr   r  rÙ  r�   r%  r7  r§  râ   r  r_  rx   r‹  rŠ  Úsysr   r    r„  r<  rë   Ú	pysqlite3r   Úpysq3ÚImportErrorr¤  Úsqlite_version_infoÚpsycopg2cffir   Úregisterr*  r   r2  Úpsycopg2.extrasr   Úpg_register_uuidr   r'  rE  Ú
psycopg.pqr   Úpsycopg.types.jsonrC  r   rD  Úpymysqlr‰  ÚMySQLdbÚ__version__Ú__all__Ú	getLoggerr  Ú
addHandlerÚNullHandlerrô  rÖ   r�  rQ
  rÄ  r  r…  rn  rr   r{   Úversion_infor†   rˆ   Úregister_adapterr(  r_  r‘   r�   r•   r¨   Úregister_converterr_  r¸   rº   rÁ   r¨  rÀ   rÃ   rÈ   rÌ   rØ   rÏ   rê   rî   r¦  rð   rÕ   rÿ   r®  rM   r7  r8  Úler:  Úger<  Úlshiftr2   rù  rE   r0  rR   r  rM  rO  rQ  rS  r•  r—  r™  r›  rš  r˜  r–  Úcompiler–  r˜  rœ  r€  rˆ  r6  rƒ  r�  r’  r”  r›  r   r$   r¯  rT   r*   rõ  r÷  r  r  r'   rY  rA  r“  rt  ry  r|  r  r�  r¢  r¾  rh  rÂ  rÄ  rÏ  r\   r�  rc   r˜  r  r%   rZ  r\  r]  r  r  r(  rj  rk  rb   rq  r   r!   rv  r#  r&  rE  r8  r6   rZ   r#   r/   r   r;   rd   rº  râ  r    rï  r4  r  rÿ  r   r  r7   r5   r`   rU   r  r  r*  r+  rV  rY  rq  rr  ry  rn  rY   rÈ  rñ  rë  rò  r?   rJ   r/  r=  r]  r…  r¤  r  rÅ  r>   r)   r+   rA   rB   rC   rL   rN   rS   rÈ  Ú
EXCEPTIONSr  rÚ  rÙ  rÚ  rÞ  rã  rV   ræ  Úlocalrï  rð  rÖ  r(   r‹  r[   r  r!  rB  rO   rK   rß  rÛ  râ  rå  r>  r=  r?  r@  rÂ  rå  rì  rô  rö  r8   r   r@   r   rX   r   r   r=   rP   r:   r4   r.   r-  r"   r9   r]   r2  r   r   r@  rY  r   ra   r   r`  ru  re  r¹   r  rj  r-   r,   r^   rz  r_   rD   r   r�  rF   r   r<   r0   r1   rÒ  rÓ  rH   rî  r&   r 	  rW   rN	  r{	  r3   rð  r~	  r~  rI   r˜	  rã	  ri  rì	  r§	  ró	  rö	  r
  rš	  r¼	  r+
  rž	  r 	  r©	  rÚ  r9
  rA
  rB
  rî	  rï	  rð	  rñ	  r
  r\
  rm
  rr
  ru
  rƒ
  rQ   r�
  rG   rú	  ri   ri   ri   rj   Ú<module>   sœ   ÿÿÿ
ÿÿÿ€ý
S

ú		

ÿþýüûúùø	÷
öõôóòñðïîíìëêéèçæåÿþýüûúùø	÷
öõôóòñðï
í
ÿþýüûúùø	÷
öõôóòñðïîí÷ûý


	&-m"	2-
`#C '	"6
Fp
 



9mJ	J  H12 pL)KZlnÿþýüûúùø	÷
öõôóòñðþýýÿ   O   193    ,&a% 
	

)Q		Q
 g
 #(O>% w  #     M9&Z	  OB	[
 $.1	0% 	