Viewing File: /opt/alt/python38/lib64/python3.8/site-packages/__pycache__/peewee.cpython-38.pyc

U

SW3@s
ddlZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
mZddl
mZddlmZddlmZzddlmZWnek
reZYnXddlmZddlmZdd	lmZd
Zddd
ddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=g3Zzdd>lmZWn(ek
rGd?d@d@ejZYnXe dAZ!e!"edBZ#e$fdCdDZ%ej&ddEkZ'ej&ddFkZ(ej&ddEdGkZ)e(r@ddl*Z*ddHlm+Z+ddIlm,Z,dJdKZ-e.Z/e0Z1e.Z2e3e*dLZ4dMdKZ5e6Z7d]dNdOZ8n,e'rde9Z/e2Z1e:Z5dPdQZ4e;dRne<dSe)rdTZ=dUdKZ>ndVdKZ>zddWl?m@ZAWnek
rdZAYnXzddlBZBWnek
reAZBYnXeAreAjCeBjCkreAZBzddXlDmEZEeEFWnek
r"YnXzddlGZGddYlGmHZIWnek
rVdZGYnXzddlJZKWn>ek
rzddlLZKWnek
rdZKYnXYnXz(ddZlMmNZNdd[lMmOZOdd\lMmPZPWn2ek
rd^d]d^ZNd_d`ZOdadbZPYnXz4ddclMmQZQdddlMmRZRddelMmSZSddflMmTZTWn&ek
rZdZQZRZSZTYnXeBreBUejVe.eBUejWe.eBUej
e.dgdhdidjdkdlgZXeYeXZZdmZ[dndoZ\dpdqdrdsdtdudvZ]e]Z^dwe^dk<dxe^dl<dydzZ_d{d|Z`Gd}d~d~eZaeaddddddddddddddddddddddddddZbeadddddZcecjdZeecjfZgecjhZidZjdEZkdFZldZmdZnebjoebjpebjqebjrebjsebjtebjuebjvebjwebjxebjydZzddZ{ddZ|ddZ}Gdd3d3e$Z~Gddde$ZGddde$ZGddde$ZGdd7d7eZeZGdddeZGdddeZedZGdddeZGdd.d.eZGdddeZGdddeZGdddeZGdddeZGdd=d=eZddZGdddeZGdddeZeddÃZGddńdeddǃZGddɄde$ZGdddeZGdddeZGdd"d"eZGdddeZGdd5d5eZGdd1d1eZGddфdeZGdddeZGdddeZGdddeZd_ddׄZGdddeZGdddeZGdd8d8eZGdd
d
eZGdd<d<eZddބZGdddeZGdddeZGdddeZGdd9d9eZGdd:d:eZGdddeZGdddeZGddde$ZGddde$ZGdd d eZGddde$ZGddde$ZGddde$ZGdddeZGddde$ZGddde$ZGdddeZGdddeZeTdk	r*eZTGdddeZeRdk	rHeZRGdddeZeQdk	rfeZQGdddeZeddZGdddeZGdddeZGdd	d	eZd
dZGdd
d
eZGdddeZGdddeZGdddeZGdddeƒZGdddeƒZGdddeƒZeddZeddZeddZGd d!d!eɃZGd"d!d!eʃZGd#ddeʃZGd$ddẽZGd%d#d#ẽZGd&d$d$eʃZGd'd%d%ẽZGd(d,d,ẽZGd)d-d-ẽZGd*d2d2ẽZGd+d,d,e$ZGd-d.d.e$ZGd/d0d0ee	jփZGd1d2d2e$ZGd3d6d6e؃ZGd4d/d/e؃ZGd5d+d+e؃ZGd6d7d7e$ZGd8d9d9e܃ZGd:d;d;e݃ZGd;d<d<e܃ZGd=d>d>e܃ZGd?d@d@e܃ZGdAdBdBeZGdCdDdDeZGdEdFdFe$ZeSdkrGdGdHdHe$ZSGdIddeɃZeBreِdJZndZGdKdLdLe$ZGdMdNdNeZGdOd*d*e%eZdPdQZdRdSZedTdUZGdVdWdWeZdXd0ZdYdZZd[d\ZdS(`N)bisect_left)bisect_right)deque)
namedtuple)OrderedDict)deepcopywraps)isclassz2.8.4	BareFieldBigIntegerField	BlobFieldBooleanField	CharFieldCheckClauseCompositeKey
DatabaseError	DataError	DateField
DateTimeFieldDecimalFieldDeferredRelationDoesNotExistDoubleFieldDQFieldFixedCharField
FloatFieldfnForeignKeyFieldImproperlyConfiguredIntegerFieldIntegrityErrorInterfaceError
InternalErrorJOIN	JOIN_FULL
JOIN_INNERJOIN_LEFT_OUTERModel
MySQLDatabaseNotSupportedErrorOperationalErrorParamPostgresqlDatabaseprefetchPrimaryKeyFieldProgrammingErrorProxyRSmallIntegerFieldSqliteDatabaseSQL	TextField	TimeFieldTimestampFieldUsing	UUIDFieldWindow)NullHandlerc@seZdZddZdS)r>cCsdSN)selfrecordr@r@
/peewee.pyemitiszNullHandler.emitN)__name__
__module____qualname__rDr@r@r@rCr>hsr>ZpeeweeZ_metaclass_helper_cCs|t|fiSr?)_METACLASS_)metabaser@r@rCwith_metaclassssrK)rL)Callable)reducecCs
t|tSr?)
isinstancerO)cr@r@rC<lambda>}rSprintcCst|dSNZraw_unicode_escape)bytesencodesr@r@rCrSrTcCs|j|k	r|||dSr?)
__traceback__with_traceback)tpvaluetbr@r@rCreraises

r`cCstj|tjddS)N
)sysstdoutwriterYr@r@rCprint_srez4def reraise(tp, value, tb=None): raise tp, value, tbzUnsupported python version.@BcCs&|jd|j|jddttS)Ngi)microsecondsZsecondsZdays_Mtr@r@rCrSrTcCs|Sr?)
total_secondsrjr@r@rCrSrT)dbapi2)compat)
extensions)format_date_time)sort_models_topologically)strip_parensc	CsH|p
dd}|D]2}z|tj||WStk
r@YqXq|S)NcSs|Sr?r@xr@r@rCrSrTz"format_date_time.<locals>.<lambda>)datetimestrptime
ValueError)r^formatsZpost_processZfmtr@r@rCrpsrpcsTttgfdddd}t|ddD]}|q:ttS)z@Sort models topologically so that parents will precede children.csD|kr@|kr@||jjD]}|jq&|dSr?)add_metareverse_relvaluesmodel_classappend)modelforeign_keydfsmodelsZorderingseenr@rCrs

z&sort_models_topologically.<locals>.dfscSs|jj|jjfSr?)rznamedb_table)mr@r@rCrSrTz+sort_models_topologically.<locals>.<lambda>T)keyreverse)setsortedlistreversed)rnamesrr@rrCrqs
rqcCs|r|ddkr|Sd}}t|}||krf||dkrf||ddkrf|d7}|d7}|d8}q$qfq$|rd}d}t|||D]N}||dkr|d7}n||dkr|d8}|dkr|d7}d}||krqq||8}|dkr|||S|S)Nr())lenrange)rZZctilZ
unbalanced_ctZrequiredr@r@rCrrs6

rr)_DictQueryResultWrapper)_ModelQueryResultWrapper)_SortedFieldList)_TuplesQueryResultWrapperyearmonthdayhourminutesecond)%Y-%m-%d %H:%M:%S%Y-%m-%d %H:%M:%S.%f%Y-%m-%d%H:%M:%S%H:%M:%S.%f%H:%McCs(|tkst|sdSt|t}t||Sr?)DATETIME_LOOKUPSAssertionErrorrpSQLITE_DATETIME_FORMATSgetattrZlookup_typeZdatetime_stringdtr@r@rC_sqlite_date_parts

rz%Yz%Y-%mrz%Y-%m-%d %Hz%Y-%m-%d %H:%Mr)rrrrrrz%Y-%m-%d %H:%iz%Y-%m-%d %H:%i:%ScCs,|tkst|sdSt|t}|t|Sr?)SQLITE_DATE_TRUNC_MAPPINGrrprstrftimerr@r@rC_sqlite_date_trunc&s

rcCst||tjdk	Sr?)researchI)Zregexr^r@r@rC_sqlite_regexp-src@seZdZddZdS)attrdictcCs||Sr?r@rAattrr@r@rC__getattr__1szattrdict.__getattr__N)rErFrGrr@r@r@rCr0srandor+-*/&|^%=<<=>>=!=inznot iniszis notlikeilikebetweenregexp||)ANDORADDSUBMULDIVBIN_ANDBIN_ORXORMODEQLTLTEGTGTENEINNOT_INISIS_NOTLIKEILIKEBETWEENREGEXPCONCATINNERz
LEFT OUTERzRIGHT OUTERFULL)r
LEFT_OUTERRIGHT_OUTERrr)eqltZltegtZgtenerrrrrcCs|}|||Sr?)copyupdate)sourceZ	overridesZmergedr@r@rC
merge_dictrs
rcsfdd}|_|S)z
    Method decorator that will "clone" the object before applying the given
    method.  This ensures that state is mutated in a more predictable fashion,
    and promotes the use of method-chaining.
    cs|}|f|||Sr?clone)rAargskwargsrfuncr@rCinner}szreturns_clone.<locals>.inner)Z
call_localrrr@rrC
returns_clonewsrcsfdd}|S)zu
    Method decorator to indicate a method is not allowed to be called.  Will
    raise a `NotImplementedError`.
    cstdt|jfdS)Nz!%s is not allowed on %s instances)NotImplementedErrortyperErArrrr@rCrsznot_allowed.<locals>.innerr@rr@rrCnot_allowedsrcsHeZdZdZddgZddZddZdd	Zd
dZfdd
Z	Z
S)r3zg
    Proxy class useful for situations when you wish to defer the initialization
    of an object.
    obj
_callbackscCsg|_|ddSr?)r
initializerAr@r@rC__init__szProxy.__init__cCs||_|jD]}||qdSr?)rr)rArcallbackr@r@rCrs
zProxy.initializecCs|j||Sr?)rr~)rArr@r@rCattach_callbackszProxy.attach_callbackcCs|jdkrtdt|j|S)NzCannot use uninitialized Proxy.)rAttributeErrorrrr@r@rCrs
zProxy.__getattr__cs$||jkrtdtt|||S)NzCannot set attribute on proxy.)	__slots__r
superr3__setattr__rArr^	__class__r@rCr
s
zProxy.__setattr__)rErFrG__doc__rrrr	rr

__classcell__r@r@rrCr3sc@s8eZdZeZd
ddZddZddZedd	Z	dS)rNcCs(g|_|dk	r$||_|j|dSr?)fieldslower_rel_model_name_unresolvedry)rAZrel_model_namer@r@rCrs
zDeferredRelation.__init__cCs|j|||fdSr?)rr~)rAr}fieldrr@r@rC	set_fieldszDeferredRelation.set_fieldcCs(|jD]\}}}||_|||qdSr?)r	rel_modeladd_to_class)rArrrrr@r@rC	set_modelszDeferredRelation.set_modelcCs>ttj}|D]*}|j|jkr||tj|qdSr?)rrrrrErrdiscard)Z	model_clsZ
unresolvedZdrr@r@rCresolves


zDeferredRelation.resolve)N)
rErFrGrrrrrstaticmethodrr@r@r@rCrs
c@seZdZdddZdS)_CDescriptorNcCs|dk	rt|jS|Sr?)Entity_aliasrAinstanceZ
instance_typer@r@rC__get__s
z_CDescriptor.__get__)N)rErFrGr$r@r@r@rCrsrc@seZdZdZeZdZddZed5ddZ	d	d
Z
ddZed
dZ
ed6ddZeddZeddZeddZddZddZd7ddZeejZeejZeejZeejZeejZeej Z!Z"eej#Z$eejddZ%eejddZ&eejddZ'eej ddZ(Z)eejddZ*eejddZ+eej#ddZ,dd Z-d!d"Z.eej/Z0eej1Z2eej3Z4eej5Z6eej7Z8eej9Z:eej;Z<eej=Z>eej?Z@eejAZBd#d$ZCd%d&ZDd8d'd(ZEd)d*ZFd+d,ZGd-d.ZHd/d0ZId1d2ZJd3d4ZKdS)9Nodez=Base-class for any part of a query which shall be composable.nodecCsd|_d|_d|_d|_dSNF)_negatedr!_bind_to	_orderingrr@r@rCrsz
Node.__init__NFcsfdd}|S)Ncs&p|j}rt|}t|||Sr?)rErsetattr)methodZmethod_namerclsrr@rC	decorators

zNode.extend.<locals>.decoratorr@)r.rrr/r@r-rCextendszNode.extendcCs
t|Sr?)rrr@r@rC
clone_baseszNode.clone_basecCs,|}|j|_|j|_|j|_|j|_|Sr?)r1r(r!r*r))rAinstr@r@rCrsz
Node.clonecCs|j|_dSr?)r(rr@r@rC
__invert__szNode.__invert__cCs
||_dSr?r!)rAar@r@rCaliassz
Node.aliascCs
||_dS)z
        Bind the results of an expression to a specific model type. Useful
        when adding expressions to a select, where the result of the expression
        should be placed on a joined instance.
        N)r))rAZbtr@r@rCbind_toszNode.bind_tocCs
d|_dS)NZASCr*rr@r@rCascszNode.asccCs
d|_dS)NDESCr8rr@r@rCdescsz	Node.desccCs|Sr?)r9rr@r@rC__pos__szNode.__pos__cCs|Sr?)r;rr@r@rC__neg__
szNode.__neg__csfdd}|S)z
        Lightweight factory which returns a method that builds an Expression
        consisting of the left-hand and right-hand operands, using `op`.
        csrt||St||Sr?)
ExpressionrArhsinvopr@rCrszNode._e.<locals>.innerr@)rCrBrr@rArC_e
szNode._eT)rBcCs$|dkrt|tjdSt|tj|Sr?)r>OPrrr?r@r@rC__eq__'szNode.__eq__cCs$|dkrt|tjdSt|tj|Sr?)r>rErrr?r@r@rC__ne__+szNode.__ne__cCst|tj|Sr?)r>rErr?r@r@rCin_=szNode.in_cCst|tj|Sr?)r>rErr?r@r@rCnot_in?szNode.not_incCs |rt|tjdSt|tjdSr?)r>rErr)rAis_nullr@r@rCrJAszNode.is_nullcCst|tjd|S)Nz%%%s%%r>rErr?r@r@rCcontainsEsz
Node.containscCst|tjd|S)Nz%s%%rKr?r@r@rC
startswithGszNode.startswithcCst|tjd|S)Nz%%%srKr?r@r@rCendswithIsz
Node.endswithcCst|tjt|td|S)Nr)r>rErrr4)rAZlowZhighr@r@rCrKszNode.betweencCst|tj|Sr?)r>rEr)rA
expressionr@r@rCrMszNode.regexpcCst|tj|Sr?)r>rErr?r@r@rCconcatOszNode.concat)NF)N)F)T)LrErFrGrrrR
_node_typerclassmethodr0r1rrr3r6r7r9r;r<r=rDrEr__and__r__or__r__add__r__sub__r__mul__rZ__div____truediv__r__xor____radd____rsub____rmul__Z__rdiv____rtruediv____rand____ror____rxor__rFrGr__lt__r__le__r__gt__r__ge__r
__lshift__r
__rshift__r__mod__r__pow__rZbin_andrZbin_orrHrIrJrLrMrNrrrPr@r@r@rCr%sp	






















r%cs,eZdZdZdZfddZddZZS)r7z2An unescaped SQL string, with optional parameters.sqlcs||_||_tt|dSr?)r^paramsrr7r)rAr^rjrr@rCrVszSQL.__init__cCst|jf|jSr?)r7r^rjrr@r@rCr1[szSQL.clone_baserErFrGrrQrr1rr@r@rrCr7Rscs4eZdZdZdZfddZddZddZZS)	r z/A quoted-name or entity, e.g. "table"."column".entitycstt|||_dSr?)rr rpath)rArmrr@rCrcszEntity.__init__cCs
t|jSr?)r rmrr@r@rCr1gszEntity.clone_basecCsttd|j|fSr?)r filterrmrr@r@rCrjszEntity.__getattr__)	rErFrGrrQrr1rrr@r@rrCr _s
r csTeZdZdZdZedZfddZedddZ	d	d
Z
ddd
ZddZZ
S)FunczAn arbitrary SQL function call.r)countsumcs6||_||_|r||jknd|_tt|dSr')r	argumentsr
_no_coerce_coercerror)rArrrrr@rCrrsz
Func.__init__TcCs
||_dSr?)rt)rAcoercer@r@rCruxszFunc.coercecCst|jf|j}|j|_|Sr?)rorrrrt)rAresr@r@rCr1|szFunc.clone_baseNcCsJt|tr|dkr|}|dkr0t||d}n
t|j}t|td|S)N)partition_byorder_byZOVER)rQr=__sql__r7r!r)rArwrxwindowrir@r@rCovers
z	Func.overcsfdd}|S)Ncstf||Sr?)rorrrr@rCdecszFunc.__getattr__.<locals>.decr@)rArr~r@r}rCrszFunc.__getattr__)T)NNN)rErFrGrrQrrsrrrur1r{rrr@r@rrCroms

rocs.eZdZdZdZdfdd	ZddZZS)	r>z0A binary expression, e.g `foo + 1` or `bar < 7`.rOFcs*tt|||_||_||_||_dSr?)rr>rlhsrCr@flat)rArrCr@rrr@rCrs
zExpression.__init__cCst|j|j|j|jSr?)r>rrCr@rrr@r@rCr1szExpression.clone_base)Frkr@r@rrCr>sr>cs.eZdZdZdZdfdd	ZddZZS)	r.z
    Arbitrary parameter passed into a query. Instructs the query compiler to
    specifically treat this value as a parameter, useful for `list` which is
    special-cased for `IN` lookups.
    paramNcs||_||_tt|dSr?)r^adaptrr.r)rAr^rrr@rCrszParam.__init__cCst|j|jSr?)r.r^rrr@r@rCr1szParam.clone_base)Nrkr@r@rrCr.sc@seZdZdZdS)PassthroughpassthroughN)rErFrGrQr@r@r@rCrsrcs4eZdZdZdZdZdZfddZddZZ	S)	rz8A SQL clause, one or more Node objects joined by spaces.clause Fcs@d|kr|d|_d|kr$|d|_tt|t||_dS)Nglueparens)rrrrrrnodes)rArrrr@rCrs

zClause.__init__cCst|j}|j|_|j|_|Sr?)rrrrrArr@r@rCr1s
zClause.clone_base)
rErFrGrrQrrrr1rr@r@rrCrsc@seZdZdZdZdS)CommaClausez5One or more Node objects joined by commas, no parens., N)rErFrGrrr@r@r@rCrsrc@seZdZdZdZdS)EnclosedClausezAOne or more Node objects joined by commas and enclosed in parens.TN)rErFrGrrr@r@r@rCrsrcs.eZdZdfdd	ZddZddZZS)	r=Ncs*tt|||_||_|jp"d|_dS)Nw)rr=rrwrxr!)rArwrxrr@rCrszWindow.__init__cCsPg}|jr$|ttdt|j|jrD|ttdt|jtt|S)NzPARTITION BYORDER BY)rwr~rr7rrxr)rAZover_clausesr@r@rCryszWindow.__sql__cCst|j|jSr?)r=rwrxrr@r@rCr1szWindow.clone_base)NN)rErFrGrryr1rr@r@rrCr=scCstd|S)Nz
CHECK (%s)r7)r^r@r@rCrscs(eZdZdZfddZddZZS)rz:A "django-style" filter expression, e.g. {'foo__eq': 'x'}.cstt|||_dSr?)rrrqueryrArrr@rCrszDQ.__init__cCstf|jSr?)rrrr@r@rCr1sz
DQ.clone_base)rErFrGrrr1rr@r@rrCrscs eZdZdZfddZZS)_StripParensrrcstt|||_dSr?)rrrr&)rAr&rr@rCrsz_StripParens.__init__)rErFrGrQrrr@r@rrCrsrJoinMetadata	src_model
dest_modelsrcdestrprimary_keyr
is_backrefr6is_self_join
is_expressionc@s:eZdZdddZddZddZdd	Zed
dZdS)
JoinNcCsXt|tst|trdS|j||}|dk	r6|dfS|j||}|dk	rT|dfSdS)NNNFT)rQSelectQueryrz
rel_for_modelreverse_rel_for_model)rArrrfk_fieldr{r@r@rCget_foreign_key
szJoin.get_foreign_keycCs|jp
tjSr?)	join_typer&rrr@r@rC
get_join_typeszJoin.get_join_typecCs$t|tr|jSt|tr |jS|Sr?)rQ
ModelAliasr}r)rAmodel_or_aliasr@r@rCmodel_from_aliass


zJoin.model_from_aliasc

CsB||j}||j}t|jtr,|jjp.d}t|jttt	f}t|jt
tfrX|jpZd}|rt|}|j|j
jk}n6||||j\}}|dkr|jdk	r|||\}}|dk	r|j}nd}|s|dk	r|r|j
j}	n|j}	n.z|jjj}	Wntk
r|j
j}	YnXnd}	t|||j|j|p,|	||||||k|dS)Nr)rrrrQonr%r!r>ror7r
FieldProxyrrzrrto_fieldrrr
r)
rArrZ
join_aliasrZon_fieldrrrZtarget_attrr@r@rC_join_metadatasJ
zJoin._join_metadatacCst|ds||_|jS)N_cached_metadata)hasattrrrrr@r@rCmetadataPs

z
Join.metadata)N)	rErFrGrrrrpropertyrr@r@r@rCr	s
1rZ_Join)rrrrc@s&eZdZddZdddZddZdS)	FieldDescriptorcCs||_|jj|_dSr?)rratt_namerArr@r@rCrYszFieldDescriptor.__init__NcCs|dk	r|j|jS|jSr?)_datagetrrr"r@r@rCr$]szFieldDescriptor.__get__cCs||j|j<|j|jdSr?)rr_dirtyryrAr#r^r@r@rC__set__bszFieldDescriptor.__set__)N)rErFrGrr$rr@r@r@rCrVs
rcseZdZdZdZdZdZdZd#fdd	Zd	d
Z	ddZ
d
dZddZddZ
ddZddZddZddZd$ddZddZdd Zd!d"ZZS)%rzA column on a table.rrunknownFNc

s||_||_||_||_||_||_||_||_|	|_|
|_	||_
||_tj
d7_
tj
|_|jrhdpjd|jf|_d|_tt|dS)NrrLF)nullindexuniqueverbose_name	help_text	db_columndefaultchoicesrsequenceconstraintsschemar_field_counter_order	_sort_key	_is_boundrr)
rArrrrrrrrrrrrrr@rCrms"zField.__init__cKsft|f|j|j|j|j|j|j|j|j|j	|j
|j|jd|}|j
rZ|j|_|j|_|j
|_
|S)N)rrrrrrrrrrrr)rrrrrrrrrrrrrrrr})rArr2r@r@rCr1s*
zField.clone_basecCsZ||_||_|jp|j|_|js4tdd||_|j|t	||t
|d|_dS)z
        Hook that replaces the `Field` attribute on a class with a named
        `FieldDescriptor`. Called by the metaclass during construction of the
        `Model`.
        _+rTN)rr}rrrsubtitlerz	add_fieldr+rrrAr}rr@r@rCrszField.add_to_classcCs
|jjjSr?)r}rzdatabaserr@r@rCget_databaseszField.get_databasecCs|}||Sr?)get_db_fieldrcompilerget_column_type)rAZ
field_typer@r@rCrszField.get_column_typecCs|jSr?)db_fieldrr@r@rCrszField.get_db_fieldcCsdSr?r@rr@r@rC
get_modifiersszField.get_modifierscCs|Sr?r@rAr^r@r@rCruszField.coercecCs|dkr|S||S)z5Convert the python value for storage in the database.Nrurr@r@rCdb_valueszField.db_valuecCs|dkr|S||S)z/Convert the database value to a pythonic value.Nrrr@r@rCpython_valueszField.python_valuecCs |rt|jjj|jSt|jSr?)r r}rzrr)rA
with_tabler@r@rC	as_entityszField.as_entitycCs0|}|r(td|dtt|fSt|S)z2Return the column type, e.g. VARCHAR(255) or REAL.%s(%s)r)rr7joinmapstr)rAcolumn_typeZ	modifiersr@r@rC__ddl_column__szField.__ddl_column__cCsj|||g}|js&|td|jr:|td|jrT|td|j|jrf||j|S)z8Return a list of Node instances that defines the column.zNOT NULLPRIMARY KEYzDEFAULT NEXTVAL('%s'))	rrrr~r7rrrr0)rArddlr@r@rC__ddl__sz
Field.__ddl__cCst|jd|jjSN.)hashrr}rErr@r@rC__hash__szField.__hash__)FFFNNNNNFNNN)F)rErFrGrrrrQrrr1rrrrrrurrrrrrrr@r@rrCrfs:

cs.eZdZdZdfdd	ZfddZZS)rbareNcs$tt|j|||dk	r ||_dSr?)rrrru)rArurrrr@rCrszBareField.__init__cstt|jfd|ji|S)Nru)rrr1rurArrr@rCr1szBareField.clone_base)N)rErFrGrrr1rr@r@rrCrsc@seZdZdZeZdS)r"intN)rErFrGrrrur@r@r@rCr"sc@seZdZdZdS)rbigintNrErFrGrr@r@r@rCrsc@seZdZdZdS)r5smallintNrr@r@r@rCr5scs eZdZdZfddZZS)r1rcsd|d<tt|j||dS)NTr)rr1rrrr@rCrszPrimaryKeyField.__init__)rErFrGrrrr@r@rrCr1scs eZdZdZfddZZS)_AutoPrimaryKeyFieldNcs4||jkrtdt||ftt|||dS)Nz%s must be named `%s`.)_column_namerwrrrrrrr@rCrs
z!_AutoPrimaryKeyField.add_to_class)rErFrGrrrr@r@rrCrsrc@seZdZdZeZdS)rfloatN)rErFrGrrrur@r@r@rCrsc@seZdZdZdS)rdoubleNrr@r@r@rCr	scsFeZdZdZdfdd	Zfdd	Zd
dZdd
ZddZZ	S)rdecimal
rFNcs6||_||_||_|ptjj|_tt|j||dSr?)	
max_digitsdecimal_places
auto_roundrZDefaultContextroundingrrr)rArrrrrrrr@rCrs
zDecimalField.__init__cs(tt|jf|j|j|j|jd|S)N)rrrr)rrr1rrrrrrr@rCr1szDecimalField.clone_basecCs|j|jgSr?)rrrr@r@rCrszDecimalField.get_modifierscCsTtj}|s|dkr|S|dS|jrP|d|j}|j}|t|j||dS|S)Nrr)r)rDecimalrrrrZquantize)rAr^DZexprr@r@rCr"szDecimalField.db_valuecCs*|dk	r&t|tjr|Stt|SdSr?)rQrrrrr@r@rCr,szDecimalField.python_value)rrFN)
rErFrGrrr1rrrrr@r@rrCrs
utf-8cCs*t|tr|St|tr"||St|Sr?)rQunicode_typestring_typedecode)rZencodingr@r@rCcoerce_to_unicode2s



rcs>eZdZdZdfdd	ZfddZddZd	d
ZZS)rstringcs||_tt|j||dSr?)
max_lengthrrr)rArrrrr@rCr<szCharField.__init__cstt|jfd|ji|S)Nr)rrr1rrrr@rCr1@s
zCharField.clone_basecCs|jr|jgpdSr?)rrr@r@rCrEszCharField.get_modifierscCst|pdSNrrr@r@rCruHszCharField.coerce)r)	rErFrGrrr1rrurr@r@rrCr9s
cs eZdZdZfddZZS)r
fixed_charcs tt||}|r|}|Sr?)rrrstriprrr@rCrNszFixedCharField.python_value)rErFrGrrrr@r@rrCrKsc@seZdZdZddZdS)r8textcCst|pdSrrrr@r@rCruWszTextField.coerceN)rErFrGrrur@r@r@rCr8Tscs4eZdZdZeZfddZddZddZZ	S)r
blobcs0t|jjtr|jj|jtt|||Sr?)	rQrzrr3r	_set_constructorrr
rrrr@rCr^szBlobField.add_to_classcCs||_dSr?)get_binary_type_constructor)rArr@r@rCrcszBlobField._set_constructorcCs,t|tr|d}t|tr(||S|SrV)rQrrX
basestringr
rr@r@rCrfs




zBlobField.db_value)
rErFrGrbinary_constructr
rrrrr@r@rrCr
Zs
c@s eZdZdZddZddZdS)r<uuidcCs6t|tjr|jSzt|jWS|YSXdSr?)rQrUUIDhexrr@r@rCrpszUUIDField.db_valuecCs&t|tjr|S|dkrdSt|Sr?)rQrrrr@r@rCrxszUUIDField.python_valueN)rErFrGrrrr@r@r@rCr<mscsfdd}|S)Ncs|jjj|Sr?)r}rzrextract_dater	date_partr@rCr~~sz_date_part.<locals>.decr@)rr~r@rrC
_date_part}srcs.eZdZdZdfdd	ZfddZZS)_BaseFormattedFieldNcs$|dk	r||_tt|j||dSr?)rxrrr)rArxrrrr@rCrsz_BaseFormattedField.__init__cstt|jfd|ji|S)Nrx)rrr1rxrrr@rCr1s
z_BaseFormattedField.clone_base)N)rErFrGrxrr1rr@r@rrCrsrc@sjeZdZdZdddgZddZeedZeedZ	eed	Z
eed
ZeedZeedZ
d
S)rrurrrcCs|rt|trt||jS|Sr?)rQrrprxrr@r@rCrszDateTimeField.python_valuerrrrrrN)rErFrGrrxrrrrrrrrrr@r@r@rCrsc@sFeZdZdZdddgZddZeedZeedZ	eed	Z
d
S)rdaterrrcCs@|r$t|tr$dd}t||j|S|r<t|tjr<|S|S)NcSs|Sr?)rrsr@r@rCrSrTz(DateField.python_value.<locals>.<lambda>)rQrrprxrurrAr^Zppr@r@rCrszDateField.python_valuerrrN)rErFrGrrxrrrrrrr@r@r@rCrsc@sJeZdZdZdddddgZddZeed	Zeed
Z	eedZ
dS)
r9timerrrrrcCs`|r8t|tr$dd}t||j|St|tjr8|S|dk	r\t|tjr\tjj|S|S)NcSs|Sr?)rrsr@r@rCrSrTz(TimeField.python_value.<locals>.<lambda>)rQrrprxrurZ	timedeltaminrr@r@rCrs
zTimeField.python_valuerrrN)rErFrGrrxrrrrrrr@r@r@rCr9scsFeZdZddedDZfddZddZdd	Zd
dZZ	S)r:cCsg|]}d|qS)rr@.0rr@r@rC
<listcomp>szTimestampField.<listcomp>cs|ddpd|_|j|jkr<tdddd|jD|ddpJd|_tj}|jr`|jn|j|_	|jrt|j
n|j}|d	|t
t|j||dS)
N
resolutionrz,TimestampField resolution must be one of: %srcss|]}t|VqdSr?)rrr@r@rC	<genexpr>sz*TimestampField.__init__.<locals>.<genexpr>utcFr)popr valid_resolutionsrwrr"ruZutcfromtimestampZ
fromtimestamp_convZutcnowZnow
setdefaultrr:r)rArrZ_dtZ_defaultrr@rCrszTimestampField.__init__cCs|jdkr|jStjSNr)r rrrr@r@rCrszTimestampField.get_db_fieldcCs|dkrdSt|tjrn4t|tjr<t|j|j|j}ntt||jS|j	rdt
|}nt
|}||jd7}|jdkr||j9}tt|S)Ngư>r)rQrurrrrrroundr r"calendarZtimegmZutctimetuplermktimeZ	timetuplemicrosecond)rAr^Z	timestampr@r@rCrs

zTimestampField.db_valuecCsp|dk	rlt|tttfrl|dkr$dS|jdkrbd|j}t||j\}}||}||j|dS||S|S)Nrrrf)r+)rQrrlongr divmodr%replace)rAr^Zticks_to_microsecondZticksrhr@r@rCrs


zTimestampField.python_value)
rErFrGrr$rrrrrr@r@rrCr:s

c@seZdZdZeZdS)rboolN)rErFrGrr/rur@r@r@rCrscs:eZdZdZfddZddZdddZd	d
ZZS)RelationDescriptorzEForeign-key abstraction to replace a related PK with a related model.cs||_tt||dSr?)rrr0r)rArrrr@rCrszRelationDescriptor.__init__cCsn|j|j}|dk	s"|j|jkrZ|j|jkrN|j|jj|k}||j|j<|j|jS|jjsj|jj|Sr?)	rrr
_obj_cacherrrrr)rAr#Zrel_idrr@r@rCget_object_or_idsz#RelationDescriptor.get_object_or_idNcCs|dk	r||S|jSr?)r2rr"r@r@rCr$s
zRelationDescriptor.__get__cCs|t||jr2t||jjj|j|j<||j|j<n8|j	|j}||j|j<||krj|j|jkrj|j|j=|j
|jdSr?)rQrrrrrrrr1rrry)rAr#r^Z
orig_valuer@r@rCr"s
zRelationDescriptor.__set__)N)	rErFrGrrr2r$rrr@r@rrCr0s

r0c@s"eZdZdZddZdddZdS)ReverseRelationDescriptorz<Back-reference to expose related objects as a `SelectQuery`.cCs||_|j|_dSr?)rr}rrr@r@rCr0sz"ReverseRelationDescriptor.__init__NcCs.|dk	r*|j|jt||jjjkS|Sr?)rselectwhererrrrr"r@r@rCr$4s

z!ReverseRelationDescriptor.__get__)N)rErFrGrrr$r@r@r@rCr3.sr3c@s*eZdZdZddZd	ddZddZdS)
ObjectIdDescriptorz(Gives direct access to the underlying idcCs|j|_t||_dSr?)r	attr_nameweakrefrefrrr@r@rCr<szObjectIdDescriptor.__init__NcCs|dk	r|j|jS|Sr?)rrr7rr"r@r@rCr$@szObjectIdDescriptor.__get__cCst||j|dSr?)r+r7rr@r@rCrEszObjectIdDescriptor.__set__)N)rErFrGrrr$rr@r@r@rCr6:s
r6cseZdZdfdd	ZfddZddZdd	Zd
dZdd
ZddZ	fddZ
fddZddZddZ
ddZZS)r Nc	sr|dkr(t|ttfs(t|ts(td||_||_t|ttf|_||_	||_
||_||_t
t|j||dS)NrAz[Unexpected value for `rel_model`.  Expected `Model`, `Proxy`, `DeferredRelation`, or "self")rQr3r
issubclassr*	TypeErrorr
_related_namedeferred	on_delete	on_updateextrarrr r)	rArrelated_namer>r?r@rrrrr@rCrIszForeignKeyField.__init__c	s2tt|jf|j||j|j|j|jd|S)N)rrAr>r?r@r)	rr r1r_get_related_namer>r?r@rrrr@rCr1YszForeignKeyField.clone_basecCst||jSr?)r0rrr@r@rC_get_descriptorcszForeignKeyField._get_descriptorcCst|Sr?)r6rr@r@rC_get_id_descriptorfsz"ForeignKeyField._get_id_descriptorcCst|Sr?)r3rr@r@rC_get_backref_descriptorisz'ForeignKeyField._get_backref_descriptorcCs.|jrt|jr||S|jp,d|jjjS)Nz%s_set)r<callabler}rzrrr@r@rCrBls
z!ForeignKeyField._get_related_namecstjtr,fdd}j|dStjtrLjdS__jpfdj_jkrd7j	st
dd_	j
_jdkrˆj_jdk	rtjtstjj_njj
j_j
jrtfdd	}jjj
jkr.|d
njjj
jkrH|dj
jkr`|dnjkrt|d
tttjjd_j
jj<jj
jj<dS)Ncs|_dSr?)rrr)r}rrAr@rCrssz.ForeignKeyField.add_to_class.<locals>.callbackz%s_idZ_idrrrAcs.|jdjjfjdt||dS)Nz%s.%s)rbackrefobj_id_name)rrzrrAr
)msgcontextr}rrIrAr@rCinvalidsz-ForeignKeyField.add_to_class.<locals>.invalidzVThe related_name of %(field)s ("%(backref)s") conflicts with a field of the same name.zWThe related_name of %(field)s ("%(backref)s") is already in use by another foreign key.zRThe object id descriptor of %(field)s conflicts with a field named %(obj_id_name)sz]Model attribute "%(obj_id_name)s" would be shadowed by the object id descriptor of %(field)s.T)rQrr3r	rrrr}rrrrrrzrrBrArrrrvalidate_backrefsrr{__dict__r+rCrDrErrel)rAr}rrrMr@rLrCrqsR






zForeignKeyField.add_to_classcs$t|jts|jStt|S)zr
        Overridden to ensure Foreign Keys use same column type as the primary
        key they point to.
        )rQrr1rrr rrr@rCrs
zForeignKeyField.get_db_fieldcs$t|jts|jStt|Sr?)rQrr1rrr rrr@rCrs
zForeignKeyField.get_modifierscCs|j|Sr?)rrurr@r@rCruszForeignKeyField.coercecCs t||jr|}|j|Sr?)rQr
_get_pk_valuerrrr@r@rCrszForeignKeyField.db_valuecCst||jr|S|j|Sr?)rQrrrrr@r@rCrszForeignKeyField.python_value)NNNNN)rErFrGrr1rCrDrErBrrrrurrrr@r@rrCr Hs 
@	c@sFeZdZdZdZddZddZdddZd	d
ZddZ	d
dZ
dS)rz+A primary key composed of multiple columns.NcGs
||_dSr?)field_names)rArRr@r@rCrszCompositeKey.__init__cCs||_||_t|||dSr?)rr}r+rr@r@rCrszCompositeKey.add_to_classcs$dk	r tfdd|jDS|S)Ncsg|]}t|qSr@)rr
field_namer#r@rCrsz(CompositeKey.__get__.<locals>.<listcomp>)tuplerRr"r@rUrCr$s
zCompositeKey.__get__cCsdSr?r@rr@r@rCrszCompositeKey.__set__cs&fddtj|D}ttj|S)Ncs"g|]\}}jjj||kqSr@)r}rzr)rrr^rr@rCrsz'CompositeKey.__eq__.<locals>.<listcomp>)ziprRrPoperatorand_)rAotherexpressionsr@rrCrFs

zCompositeKey.__eq__cCst|jj|jfSr?)rr}rErRrr@r@rCrszCompositeKey.__hash__)N)rErFrGrrrrr$rrFrr@r@r@rCrs
c@sDeZdZdZdddZddZddd	Zd
dZdd
ZddZ	dS)AliasMaprkrcCsi|_||_dSr?)
_alias_map_counter)rAstartr@r@rCrszAliasMap.__init__cCs
d|jS)Nz<AliasMap: %s>r]rr@r@rC__repr__szAliasMap.__repr__NcCs:||jkrdS|jd7_|p.d|j|jf|j|<dS)Nrz%s%s)r]r^prefix)rArr6r@r@rCrys
zAliasMap.addcCs||jkr|||j|Sr?)r]ryrArr@r@rC__getitem__s

zAliasMap.__getitem__cCs
||jkSr?r`rcr@r@rC__contains__szAliasMap.__contains__cCs.|r*|jD]\}}||kr||j|<q|Sr?)r]items)rA	alias_maprr6r@r@rCrs
zAliasMap.update)r)N)
rErFrGrbrraryrdrerr@r@r@rCr\s

r\c2@seZdZddddddddd	dd
d
dddd
dZejdejdejdejdej	dej
dejdejdej
dejdejdejdejdejdejdejdejdejd ejd!ejd"ejd#ejd$ejd%ejd&ejd'iZej d(ej!d)ej"d*ej#d+iZ$e%Z&dd/d0Z'd1d2Z(d3d4Z)d5d6Z*d7d8Z+d9d:Z,d;d<Z-d=d>Z.d?d@Z/dAdBZ0dCdDZ1dEdFZ2dGdHZ3dIdJZ4dKdLZ5dMdNZ6dOdPZ7dQdRZ8dSdTZ9ddUdVZ:ddXdYZ;ddZd[Z<dd\d]Z=d^d_Z>dd`daZ?dbdcZ@eAfdddeZBdfdgZCdhdiZDdjdkZEdldmZFdndoZGddpdqZHeGdrZIddtduZJeGdvZKddwdxZLeGdyZMddzd{ZNeGd|ZOd}d~ZPddZQeGdZRdddZSeGdZTddZUeGdZVddZWeGdZXd.S)
QueryCompilerrZBIGINTZBLOBZSMALLINTZDATEZDATETIMEZDECIMALZREALZCHARINTEGERZVARCHARTEXTZTIME)rrr
r/rrurrrrrrrrr	rrrrrrrrzNOT INrzIS NOTrrrrrrrrr#rrrrrz
INNER JOINzLEFT OUTER JOINzRIGHT OUTER JOINz	FULL JOIN"?NcCsJ||_||_t|j|pi|_t|j|p*i|_||_t	dg|_
dS)Nr)
quote_char
interpolationr	field_map
_field_mapop_map_op_map
get_parse_map
_parse_mapr_unknown_types)rArnrofield_overridesop_overridesr@r@rCrHs
zQueryCompiler.__init__cCs2|j|j|j|j|j|j|j|j|j|j	|j
dS)N)rOrrrrrlrriselect_querycompound_select_queryrr)_parse_expression_parse_param_parse_passthrough_parse_func
_parse_clause
_parse_entity_parse_field
_parse_sql_parse_select_query_parse_compound_select_query_parse_strip_parensrr@r@rCrtQszQueryCompiler.get_parse_mapcCsd|j||jfS)Nz%s%s%s)rn)rArZr@r@rCquotebszQueryCompiler.quotecCs||jkr|j|S|Sr?)rqupper)rAfr@r@rCreszQueryCompiler.get_column_typecCs
|j|Sr?)rs)rAqr@r@rCget_ophszQueryCompiler.get_opcCst|dddS)NcSs
|djSNr)r)rr@r@rCrSlrTz.QueryCompiler._sorted_fields.<locals>.<lambda>r)rrf)rA
field_dictr@r@rC_sorted_fieldskszQueryCompiler._sorted_fieldscCs|j|gfSr?)rorAr&rgconvr@r@rC_parse_defaultnszQueryCompiler._parse_defaultc
Cst|jtr|j}||j||\}}||j||\}}|jtjkrd|dkrd|sd|jr\dndgfS|jrndnd}|||	|j|f}	|	||fS)Nz()z0 = 1z(0 = 1)%s %s %s
(%s %s %s))
rQrr
parse_noder@rCrErrr)
rAr&rgrrZlparamsr@Zrparamstemplaterir@r@rCr{qszQueryCompiler._parse_expressioncCs*|jr|||j|dS|j|jgfSr?)rrr^rorr@r@rCr}|sz QueryCompiler._parse_passthroughcCs^|jr0|r|j|jkrd}|||j||S|dk	rL|||j|S|j|jgfSdSr?)rrrr^rorr@r@rCr|szQueryCompiler._parse_paramcCs8|jr
|pd}||j||\}}d|jt|f|fS)Nr)rtparse_node_listrrrrrrAr&rgrrirjr@r@rCr~szQueryCompiler._parse_funccCs2||j|||j\}}|jr*dt|}||fSN(%s))rrrrrrrr@r@rCrszQueryCompiler._parse_clausecCsdt|j|jgfSr)rrrrmrr@r@rCrszQueryCompiler._parse_entitycCs|jt|jfSr?)r^rrjrr@r@rCrszQueryCompiler._parse_sqlcCs<|r(d|||j||jf}n||j}|gfSr)rrr}r)rAr&rgrrir@r@rCrs
zQueryCompiler._parse_fieldcCsd}|jj|kr0|jj|kr0|j|j}}d}n|j|j}}d}|}|j|kr\|j|_|||\}	}
|||||\}}|r|||	|
f\}
}}}n|	|
||f\}
}}}|jjrd|
|j	|f}nd|
|j	|f}|||fS)NrzTFz((%s) %s (%s))r)
r@rQralias_map_classr^generate_selectcalculate_alias_maprcompound_select_parenthesesrX)rAr&rgrZcsqZfirst_qZsecond_qrBnew_mapfirstZfirst_prZsecond_prZlprZrprir@r@rCrs*

z*QueryCompiler._parse_compound_select_querycCsV|}|js6|r$t|tr$|j}n
|jjj}|f|_|	||\}}dt
||fSr)r_explicit_selectionrQr rr}rzr_selectrrr)rAr&rgrrZselect_fieldrrjr@r@rCrs
z!QueryCompiler._parse_select_querycCs ||j||\}}t||fSr?)rr&rrrr@r@rCrsz!QueryCompiler._parse_strip_parenscCsht|dd}d}||jkrP|j||||\}}||jkoJ|jdkoJ|dk}nt|tttfr|||||\}}d|}nt|t	r|j
}|rt|tr|j}t|tr|
|}	q|
t||j}	n|}	|	g}nt|rt|t	st|tr|||}
||
||\}}n@|dk	rH|
|}	||	|d\}}}n|||d\}}d}|||fS)NrQFrT)rrurvrrQrrVrrr*ror rrrrQr
r:rrr6r_parser)rAr&rgrZ	node_typerrirjrr^rl_r@r@rCrs@






zQueryCompiler._parsec
s|||\}}}|r6dk	r6|r6fdd|D}t|tr||jrNd|}|jrfd|d|jf}|jr|d||jf}|rtdd|Drg}g}t|D] \}	}
t|
tr|	|
\}}q||fS)Ncsg|]}|qSr@)rrrr@rCrsz,QueryCompiler.parse_node.<locals>.<listcomp>zNOT %srAScss|]}t|tVqdSr?)rQr%)rpr@r@rCr!sz+QueryCompiler.parse_node.<locals>.<genexpr>)
rrQr%r(r!rr*any	enumerater)
rAr&rgrrirjrZclean_paramsZ	clean_sqlidxrZcsqlZcparamsr@rrCrs"

zQueryCompiler.parse_noderc
CsFg}g}|D]*}||||\}}	||||	q|||fSr?)rr~r0r)
rArrgrrrirjr&Znode_sqlZnode_paramsr@r@rCrs
zQueryCompiler.parse_node_listcCs|}|dk	r|j|_||j|jjj|jD]V\}}|||jj|D]8}t|j	t
rv||j	|j	jqR||j	|j	jjqRq6||Sr?)
rr^ryr}rztable_alias_joinsrfrQrr%r6r)rArrgrrZ
joined_modelsZjoin_objr@r@rCrsz!QueryCompiler.calculate_alias_mapcCs|t||Sr?)rr)rAclausesrgr@r@rCbuild_query*szQueryCompiler.build_querycCsZg}t}|g}|rV|}||ks||kr0q||||D]}|}	|j}
t|jtttt	frv|j
}nl|j}|j
r|j}
|j}n|j}
|j}|j}|rt|
|j}t||jj}|j
r||}}||k}ntdt|
tr|
}n||
|
||
}|}||jkr2t|j|}nt|}|t||td|qBq|S)Nz Missing required join predicate.ON)rr#ryrrQrr>rorr rr6rrrrrrrrwr%r~rrjoin_mapr7)rAjoinsr}rgrrrcurrrrr
constraintrZfk_modelZpk_modelfkrr@Zdest_nrZjoin_sqlr@r@rCgenerate_joins-sN




zQueryCompiler.generate_joinscCs.|j}|jj}|||}t|tr0t|g}n|jsBtdg}n*tdg}|jdkrl|tdt	|jg7}t
|j}d|_|
|tdf|jdkr||||n|t|j|jdk	r|td|tdd	|jD||j||}|r|
||jdk	r4|
td
|jg|jrT|
tdt|jg|jrp|
td|jg|jr|
td
t|jg|jdk	s|jr|jr|jdk	r|jn|j}|td||jdk	r|td|j|j\}	}
|	r"|
rdnd}|t||||S)NZSELECTzSELECT DISTINCT)TFrrFROMZWINDOWcSs&g|]}tt|jtd|qS)r)rr7r!ry)rrzr@r@rCr}sz1QueryCompiler.generate_select.<locals>.<listcomp>WHEREzGROUP BYZHAVINGrzLIMIT %sz	OFFSET %szFOR UPDATE NOWAITz
FOR UPDATE)r}rzrrrQCompoundSelectr	_distinctr7rrrrr0_fromr~rr6r_windowsrr_where	_group_by_having	_order_by_limit_offset	limit_max_for_updater)rArrgrdbrZ
select_clauseZjoin_clauseslimit
for_updateZno_waitZstmtr@r@rCrbsT








zQueryCompiler.generate_selectc
	Cs|j}|}|||jj|jr0d|j}nd}t||tdg}g}||j	D]D\}}t
|ttfs~t
||jd}|t|jddtj|ddqZ|t||jr|td	|jg|jdk	rt|j}	d
|	_|td|	g|||S)NzUPDATE OR %sZUPDATEZSETrFrT)rrr	RETURNING)r}rryrzr_on_conflictr7rr_updaterQr%r*r.rr~r>rErrrr0
_returningrrr)
rArrrg	statementrrrr^returning_clauser@r@rCgenerate_updates2



zQueryCompiler.generate_updatecCs|dd|DS)NcSsg|]}|jddqS)Frrrrr@r@rCrsz3QueryCompiler._get_field_clause.<locals>.<listcomp>r@)rArclause_typer@r@rC_get_field_clauseszQueryCompiler._get_field_clausecCs|j}|j}|}|||jj|jr4|jj}n|jrFd|j}nd}t	||
g}|jdk	r|jr||
||j|
t|jn|jdk	rfgg}}d}	|D]n}
|	st|
tdd}d}	g}|D]4}|
|}
t|
ttfst|
|jd}
|
|
q|
t|q|rF|||t	dt|gn |jjjrf|
|j|j|j r|t	d	|j|!td
gn.|j"dk	rt#|j"}d|_$|t	d	|g|%||S)NzINSERT OR %s INTOzINSERT INTOFrrTrZVALUESr)rr)&r}rzrryr_upsertr
upsert_sqlrr7r_query_fieldsr~rr_rows
_iter_rowsrkeysrX
attrgetterrQr%r*r.rrr0rauto_incrementdefault_insert_clauseis_insert_returningget_primary_key_fieldsrrrr)rArrrIrgrrrZ
value_clausesZhave_fieldsrow_dictr|rr^rr@r@rCgenerate_insertsl




zQueryCompiler.generate_insertcCsf|j}td|g}|jr0|td|jg|jdk	r\t|j}d|_|td|g||S)NzDELETE FROMrrr)	r}r7rrr0rrrr)rArrrrr@r@rCgenerate_deletes

zQueryCompiler.generate_deletecCs ||}||}t|Sr?)rrrr)rArrrr@r@rCfield_definition
s
zQueryCompiler.field_definitioncCsjtdt|td|jt|jg}|jrH|td|j|jrb|td|jt|S)NzFOREIGN KEYZ
REFERENCESzON DELETE %szON UPDATE %s)	r7rrrrr>r~r?r)rArrr@r@rCforeign_key_constraints
z$QueryCompiler.foreign_key_constraintcsfdd}|S)Ncst|}||||Sr?)rr)rArrr
function_namer@rCr"s
z/QueryCompiler.return_parsed_node.<locals>.innerr@)rrr@rrCreturn_parsed_nodesz QueryCompiler.return_parsed_nodecCsN|pd|jj|j|jjjf}||}ttd|tdt|f|j	S)Nzfk_%s_%s_refs_%szALTER TABLEzADD CONSTRAINT)
rzrrrrrr7rr r)rAr}rrZ	fk_clauser@r@rC_create_foreign_key's
z!QueryCompiler._create_foreign_keyrFc	s|rdnd}|jgg}}jrPfddjjD}|ttdt|jD]4}||	|t
|trV|jsV||
|qV|jjr|jjD] }t
|tst|}||qtt||t||S)NzCREATE TABLE IF NOT EXISTSzCREATE TABLEcsg|]}j|qSr@)rrrrrIr@rCr;sz/QueryCompiler._create_table.<locals>.<listcomp>r)rz
composite_keyrrRr~rr7rdeclared_fieldsrrQr r=rrr%r)	rAr}safercolumnsrZpk_colsrrr@rrC
_create_table5s2




zQueryCompiler._create_tablercCs6|rdnd}t||g}|r.|tdt|S)NzDROP TABLE IF EXISTSz
DROP TABLECASCADEr7rr~r)rAr}
fail_silentlycascaderrr@r@rC_drop_tablePs
zQueryCompiler._drop_tablercCs<td|g}|r"|td|r4|tdt|S)NzTRUNCATE TABLEzRESTART IDENTITYrr)rAr}restart_identityrrr@r@rC_truncate_tableXszQueryCompiler._truncate_tablercCsRd|d|f}t|dkrNt|d}d|dd|ddf}|S)Nz%s_%sr@r7)rrhashlibZmd5rXZ	hexdigest)rAtablerrZ
index_hashr@r@rC
index_namebs
zQueryCompiler.index_namecGs^|jj}|rdnd}||dd|D}tt|t|td|tdd|Df|S)NzCREATE UNIQUE INDEXzCREATE INDEXcSsg|]
}|jqSr@rrr@r@rCrlsz/QueryCompiler._create_index.<locals>.<listcomp>rcSsg|]}|qSr@rrr@r@rCrrs)rzrrrr7r rr)rAr}rrr@tbl_namerrr@r@rC
_create_indexiszQueryCompiler._create_indexrcCs<|jj}|rdnd}||dd|D}tt|t|S)NzDROP INDEX IF EXISTSz
DROP INDEXcSsg|]
}|jqSr@rrr@r@rCrysz-QueryCompiler._drop_index.<locals>.<listcomp>)rzrrrr7r )rAr}rrrrrr@r@rC_drop_indexvszQueryCompiler._drop_indexrcCsttdt|S)NzCREATE SEQUENCErr7r rAZ
sequence_namer@r@rC_create_sequence}szQueryCompiler._create_sequencercCsttdt|S)Nz
DROP SEQUENCErrr@r@rC_drop_sequenceszQueryCompiler._drop_sequencer)rlrmNN)NN)Nr)N)N)N)N)F)FF)FF)F)YrErFrGrprErrrrrrrrrrrrrrrrrrrrrrrrrrrr&rrrrrr\rrrtrrrrrr{r}r|r~rrrrrrrrrrrrrrrrrrrrrrrcreate_foreign_keyrcreate_tabler
drop_tablertruncate_tablerrcreate_indexr
drop_indexrcreate_sequencer
drop_sequencer@r@r@rCrhs
	
	'

	

5
?>





rhc@seZdZdddZdS)SqliteQueryCompilerFcCs|Sr?)deleteri)rAr}rrr@r@rCrsz"SqliteQueryCompiler.truncate_tableN)FF)rErFrGrr@r@r@rCr
sr
c@s eZdZddZddZeZdS)ResultIteratorcCs||_d|_dSr)qrw_idx)rArr@r@rCrszResultIterator.__init__cCsf|j|jjkr|jj|j}n6|jjsP|j}|jj||jjd7_nt|jd7_|Sr')rr_ct
_result_cache
_populatediterater~
StopIterationrcr@r@rCnexts
zResultIterator.nextN)rErFrGrr__next__r@r@r@rCrsrc@sdeZdZdZdddZddZeddZd	d
ZddZ	d
dZ
ddZddZeZ
dddZdS)QueryResultWrapperz
    Provides an iterator over the results of a raw Query, additionally doing
    two things:
    - converts rows from the database into python representations
    - ensures that multiple iterations do not result in multiple queries
    NcCsP||_||_d|_d|_g|_d|_d|_|dk	r@|\|_|_nd|_|_dS)NrF)	rcursorrrrr_initializedcolumn_meta	join_meta)rArrrIr@r@rCrszQueryResultWrapper.__init__cCs|jrt|jSt|SdSr?)riterrrrr@r@rC__iter__s
zQueryResultWrapper.__iter__cCs||jSr?)
fill_cacherrr@r@rCrpszQueryResultWrapper.countcCs|jSr?)rprr@r@rC__len__szQueryResultWrapper.__len__cCs|Sr?r@rArowr@r@rCprocess_rowszQueryResultWrapper.process_rowcCsV|j}|s2d|_t|jdds,|jtn|jsL||jjd|_|	|S)NTr)
rfetchonerrcloserrrdescriptionr$r"r@r@rCrs

zQueryResultWrapper.iterateccs|VqdSr?)rrr@r@rCiteratorszQueryResultWrapper.iteratorcCsh|j|jkr*|j|j}|jd7_|S|jr4t|}|j||jd7_|jd7_|Sr')rrrrrrr~)rAr2rr@r@rCrszQueryResultWrapper.nextcCs`|p
td}|dkrtd|j|_|js\||jkr\zt|Wq$tk
rXYq\Yq$Xq$dS)NZInfrz"Negative values are not supported.)rrwrrrrrrAnr@r@rCr szQueryResultWrapper.fill_cache)N)N)rErFrGrrrrrpr!r$rr(rrr r@r@r@rCrs


rc@s$eZdZddZddZddZdS)ExtQueryResultWrappercCst|}g|_}|jdk	rht|j}t|jD](\}}|||s0|||d|q0||krldSnd}t||D]}|||d|qvdSr)rrrr_initialize_node_initialize_by_namer)rAr'Zn_colsrZn_metarr&r@r@rCrs


z ExtQueryResultWrapper.initializecCsH|jjj}||kr2||}|j||j|jfn|j||dfdSr?)rrzrrr~rr)rArrZ
model_colsrr@r@rCr-	s

z)ExtQueryResultWrapper._initialize_by_namecCst|tr*|j||jp|j|jfdSt|trt|j	r|j	d}t|tr|jpb|jpb|j}|j
rp|jprd}|j|||fdSdS)NTrF)rQrrr~r!rrrorrrrt)rAr&rargrrr@r@rCr,
	s


z&ExtQueryResultWrapper._initialize_nodeN)rErFrGrr-r,r@r@r@rCr+sr+c@seZdZddZdS)TuplesQueryResultWrappercstfddt|DS)Ncs8g|]0\}}j|ddkr"|nj|d|qS)rLNr)rrcolrr@rCr	sz8TuplesQueryResultWrapper.process_row.<locals>.<listcomp>)rVrr"r@rrCr$	sz$TuplesQueryResultWrapper.process_rowNrErFrGr$r@r@r@rCr/	sr/c@seZdZddZdS)NaiveQueryResultWrappercCsJ|}|jD].\}}}t|||dk	r2|||n||q||Sr?)rrr+_prepare_instance)rAr#r#rcolumnrr@r@rCr$!	s
&z#NaiveQueryResultWrapper.process_rowNr1r@r@r@rCr2 	sr2c@seZdZddZdS)DictQueryResultWrappercCs:i}|jD]*\}}}|dk	r(|||n||||<q
|Sr?r)rAr#rvrr4rr@r@rCr$,	s"z"DictQueryResultWrapper.process_rowNr1r@r@r@rCr5+	sr5c@s>eZdZddZddZddZddZdd
dZdd
Zd	S)ModelQueryResultWrappercCs4|\|_}tdd|jD|_|||_dS)Ncss|]}t|tr|VqdSr?)rQr)rr0r@r@rCr!8	s
z5ModelQueryResultWrapper.initialize.<locals>.<genexpr>)generate_column_map
column_maprr_col_setgenerate_join_list	join_list)rAr'Z	model_setr@r@rCr6	sz"ModelQueryResultWrapper.initializec	Csg}t|jg}t|jD]\}}d}}t|trrt|trT|j}|j}|jj	}n|j
}}|j	}|jpn|j}nL|j
dkr|j}}n
|j
}}t|tr|jr|j}nt|tr|jd}|||||f||q||fSN)rrrrrQrr_model_aliasfield_instancerr}r!rr)r%r rmr~ry)	rAr8rrr&rrrconstructorr@r@rCr7<	s,







z+ModelQueryResultWrapper.generate_column_mapcCsg}|j}|jg}|r|}||kr(q||D]|}|j}|j|ksN|j|kr0|jdk	r|j|jk}|j|jk}	|jj	o~|p~|	}
nd}
}}	|
||
||	f|
|jq0q|Sr')rrr#rrrrr9rrr~)rArr;rstackcurrentrr
fk_present
pk_presentZcheckr@r@rCr:X	s2
z*ModelQueryResultWrapper.generate_join_listcCs.||}||}|D]}|q|dSr)construct_instancesfollow_joinsr3)rAr#	collected	instancesrr@r@rCr$u	s



z#ModelQueryResultWrapper.process_rowNcCsi}t|jD]x\}\}}}}|dk	r0||kr0q||}	||krJ|||<||}
|dkrj|jj|d}t|
||dkr||	n||	q|Sr)rr8rr'r+)rAr#rZcollected_modelsrrr@rrr^r#r@r@rCrE|	s
z+ModelQueryResultWrapper.construct_instancesc
	CsN||jg}|jD]4\}}}}||j}z||j}Wntk
rV||j}YnXd}	|r|rv|j|jj	}	n|r|j|j
j	}	|	sq|j
dk	}
|
o|j|jkot||j
j	dk}|rt
||j
j	|j|j|jr0|
o|jdk	ot||j
j	dk	o|j|jj	dk}|r0t
||jj	|t
||j|||q|SNT)rr;rrKeyErrorrrrrrrrrr+rr~)
rArGpreparedrZ
check_nullrCrDr2joined_instZhas_fkZmpkZcan_populate_joined_pkZcan_populate_joined_fkr@r@rCrF	sX



z$ModelQueryResultWrapper.follow_joins)N)	rErFrGrr7r:r$rErFr@r@r@rCr65	s
r6	JoinCacherrcs8eZdZfddZfddZddZddZZS)	AggregateQueryResultWrappercsg|_tt|j||dSr?)_rowrrOrrrr@rCr	sz$AggregateQueryResultWrapper.__init__cstt||t|_|jD]\}}}}|j|qt|_i|_i|_	i|_
|jD]\}}}}|jrt|j
j}n|j}|jp|j}|r|j|jn&|j
|jt|j
|j|j|j	|jit||jp|d|j	|j|j<qXi|_i}t|jD]^\}\}}	}
}||jkrD|j|g|j|||
f||g||||
fq|jD]D}||jkrql|j
|d}|D]}
|j|||
qqldS)NrNr@)rrOrr
all_modelsr8ryZmodels_with_aggregateZback_referencessource_to_destZdest_to_sourcer;rrrArrrr&rrMr6columns_to_comparerr~rr0)rAr'rrrrrZkey_to_columnsrr}col_namerZsourcesZjoined_modelrr@rCr	sL


z&AggregateQueryResultWrapper.initializecCsDi}|jD]0\}}g||<|D]\}}||||q"q|Sr?)rSrfr~)rAr#rr}Zcolumn_datarrTr@r@rCread_model_data	sz+AggregateQueryResultWrapper.read_model_datac
Cs8|jr|j}n
|j}|sDd|_t|jdds>|jtn|js^|	|jj
d|_dd}i}||}||j}|
D]"\}}t||<|||||<q||}|j}	|	dkrʐq~t}
||	}|
D]\}}
|||
kr|
|q|
s|j|	q~|j|
}||	|}|
D]D\}}d}|jD]}|dk	rLd}qL|s6|||||<q6q|jg}|g}|r |}||jkrq|j|D]d}z|j||j\}}Wntk
rYqYnX|js|jr||D]}t||gq|j|kr0q||j
D]j\}}|dkrTq>z|||j|jj}Wntk
rYq>YnXt|||||q>n`|r|j|krq||
D]<\}}||j|j|jj}t||jj|||q||jqq|D]}|q$|S)NTrcs,jjr$tfddjjjDSS)Ncsg|]}j|qSr@)rrSrUr@rCr
szHAggregateQueryResultWrapper.iterate.<locals>._get_pk.<locals>.<listcomp>)rzrrVrrRrQrUr@rUrC_get_pk
s
z4AggregateQueryResultWrapper.iterate.<locals>._get_pkF) rPr#rr%rrr&rrrr'rErrfrrUrryr~rQrr|rrRrrJrrr+rrr3)rAr#rVZidentity_mapZ_constructedZprimary_instancerr#Z
model_dataZcur_rowZduplicate_modelsZcur_row_datar}dataZdifferent_modelsZ
new_instancesZall_noner^rArHrBrrrpkr2rLr@r@rCr
s










z#AggregateQueryResultWrapper.iterate)rErFrGrrrUrrr@r@rrCrO	s6rOcseZdZdZdZfddZddZddZd	d
ZddZ	d+ddZ
ddZeddZ
eddZed,ddZed-ddZd.ddZddZddZd d!Zd"d#Zd$d%Zd&d'Zd/d)d*ZZS)0Queryz?Base class representing a database query on one or more tables.Tcs@tt|||_|jj|_d|_||_|jgi|_d|_	dSrI)
rrYrr}rzrr
_query_ctxrrrAr}rr@rCrv
s
zQuery.__init__cCs|\}}d|j||fS)Nr)rir}rArirjr@r@rCra
szQuery.__repr__cCs t||j}|j|_||Sr?)rr}r_clone_attributesrr@r@rCr
szQuery.clonecCs,|jdk	r|j|_||_|j|_|Sr?)rr_clone_joinsrrZrr@r@rCr]
s


zQuery._clone_attributescCstdd|jDS)Ncss|]\}}|t|fVqdSr?)r)rZmcjr@r@rCr!
sz%Query._clone_joins.<locals>.<genexpr>)dictrrfrr@r@rCr^
szQuery._clone_joinsNcCs,ttj|}|dkr|S|p tj}|||Sr?)rPrXrY)rAinitialr[ZconjunctionZreducedr@r@rC_add_query_clauses
s

zQuery._add_query_clausescCsxg}|D]j}t|tr"||qt|tr8||qt|trR||qt|rt|t	r||j
jq|Sr?)rQr%r~rYrr0get_proxy_fieldsr
r:r*rzr)rAraccumr.r@r@rC_model_shorthand
s


zQuery._model_shorthandcGs||j||_dSr?)rbrrAr[r@r@rCr5
szQuery.wherecGs||j|tj|_dSr?)rbrrXor_rfr@r@rCorwhere
s
z
Query.orwherecCs|j}|s8t|tp(t|o(|j|}|rNtdnt|trN|jj|}|j	
|g|j	|t||||t|ts||_dS)Nz#A join condition must be specified.)
rZrQrr
rz
rel_existsrwrrrr&r~r)rArrrrZrequire_join_conditionr@r@rCr
s



z
Query.joincCs|p|j|_dS)z"Change or reset the query context.N)r}rZr[r@r@rCswitch
szQuery.switchcKsN|j}|j|gD]}|j|kr|Sq||j|fd|i||S)Nr)rZrrrrjr)rAlmrmrZjoin_kwargsZctxrr@r@rCensure_join
s


zQuery.ensure_joincCsg}g}ttf}t|D]\}}|j}d|kr`|dddtkr`|dd\}}t|}ntj}|	dD](}	t
||	}
t|
|rp|
j}|
|
qp|
t|
||q||fS)N__r)r r3rrfr}rsplit
DJANGO_MAPrErsplitrrQrr~r>)rAZqdictrdrZrelationshiprr^rrCpiece
model_attrr@r@rCconvert_dict_to_node
s 


zQuery.convert_dict_to_nodecOsHt}|r$|ttjdd|DM}|r6|tf|M}t|g}t}|r|}t|t	s^qFd|j
fd|jffD]`\}}t|tr||j
\}	}
||
ttj|	}|j|_|j|_t|||qr||qrqF|j}|}	|D]T}t|tr|j|j}
}|}n"t|tr.|jj|j}
}|j}|	|
||}	q|	|S)NcSsg|]}|qSr@r)rr5r@r@rCr
sz Query.filter.<locals>.<listcomp>rr@)r%rPrXrYrrrpopleftrQr>rr@rtrrr(r!r+r~rr r}rr3rrmr5)rArrZdq_noderZdq_joinsrZsiderrrrrOrrkrl	field_objr@r@rCrn
s>



zQuery.filtercCs
|jSr?)rrrr@r@rCr	szQuery.compilercCstdSr?rrr@r@rCrisz	Query.sqlcCs|\}}|j|||jSr?)rirexecute_sqlrequire_commitr\r@r@rC_executeszQuery._executecCstdSr?rwrr@r@rCexecutesz
Query.executeFcCs6|r|}n|}|r.|s.|dS|SdSr)tuplesrrzr%)rAZas_tupleconvertr#r@r@rCscalarszQuery.scalar)N)NN)N)N)FF)rErFrGrryrrarr]r^rbrerr5rhrrjrmrtrnrrirzr{r~rr@r@rrCrYr
s2




(rYcsteZdZdZfddZddZedZedZedZ	e
dd
dZe
ddd
ZddZ
ddZddZZS)RawQueryzh
    Execute a SQL query, returning a standard iterable interface that returns
    model instances.
    cs6||_t||_d|_d|_d|_tt||dSr')	_sqlr_params_qr_tuples_dictsrrr)rArrrjrr@rCr%s
zRawQuery.__init__cCs*t|j|jf|j}|j|_|j|_|Sr?)rr}rrrrrr@r@rCr-szRawQuery.clonejoiningr5rjTcCs
||_dSr?rrAr|r@r@rCr|7szRawQuery.tuplescCs
||_dSr?rrAdictsr@r@rCr;szRawQuery.dictscCs|j|jfSr?)rrrr@r@rCri?szRawQuery.sqlcCsX|jdkrR|jr|jt}n |jr2|jt}n|jt}||j|	d|_|jSr?)
rrrget_result_wrapperRESULTS_TUPLESr
RESULTS_DICTS
RESULTS_NAIVEr}rz)rAZQRWr@r@rCr{Bs
zRawQuery.executecCst|Sr?rr{rr@r@rCrMszRawQuery.__iter__)T)T)rErFrGrrrrrr5rjrr|rrir{rrr@r@rrCr srcKs8|dd}|rtd|r,|p"g|p*dS|r4|SdS)Nr0Fz,"extend" is the only valid keyword argument.)r#rw)ZorigZnew_valrr0r@r@rCallow_extendPsrcseZdZdZfddZfddZddZeeZedZ	ed	Z
ed
ZddZd
dZ
ddZeeZeddZeddZeddZeddZeddZeddZeddZedZd d!Zed[d#d$Zed\d&d'Zed]d(d)Zed^d*d+Zed_d,d-Zed`d.d/Zedad1d2Zdbd3d4Z dcd5d6Z!ddd7d8Z"ded9d:Z#dfd;d<Z$d=d>Z%d?d@Z&dgdBdCZ'dhdDdEZ(dFdGZ)dHdIZ*dJdKZ+dLdMZ,dNdOZ-dPdQZ.dRdSZ/dTdUZ0dVdWZ1e2rdXdYZ3Z4S)irrycstt|||jj|_|j|d|_d|_d|_	d|_
d|_d|_d|_
d|_d|_d|_d|_d|_d|_d|_d|_dS)NF)FF)rrrr
commit_selectry_SelectQuery__selectrrrrrrrrr_naiverr_aggregate_rowsr!r)rAr}	selectionrr@rCr\s$

zSelectQuery.__init__cstt||}|j|_t|j|_|jdk	rhg|_|jD],}t|trZ|j	|
q:|j	|q:|jdk	r~t|j|_|jr|j
|_|j
dk	rt|j
|_
|jdk	rt|j|_|j|_|j|_|j|_|j|_|j|_|j|_|j|_|j|_|j|_|Sr?)rrr]rrrrrQr%r~rrrrrrrrrrrrrr!)rArrrr@rCr]ps6





zSelectQuery._clone_attributescsfdd}|S)Ncs0|jjjj}|kr tdt|j||S)Nz!Your database does not support %s)r}rzrcompound_operationsrwr)rArZZ
supported_opsrXr@rCrsz&SelectQuery.compound_op.<locals>.innerr@)rXrr@rrCcompound_opszSelectQuery.compound_opUNION	INTERSECTEXCEPTcCs4|jtdt||@d}||B|S)Nrr)r}r4r7from_rr6rx)rAr@Zwrapped_rhsr@r@rCrYszSelectQuery.__xor__cCstd||S)N	UNION ALL)r_compound_op_staticr?r@r@rC	union_allszSelectQuery.union_allcGs,t|dk|_|p|jjj}|||_dSr)rrr}rzrrerrArr@r@rCZ__selectszSelectQuery.__selectcGs|rt|nd|_dSr?)rr)rArr@r@rCrszSelectQuery.from_cOs|r||nd|_dSr?)rerrr@r@rCgroup_byszSelectQuery.group_bycGs||j||_dSr?)rbrrfr@r@rChavingszSelectQuery.havingcOst|jt|f||_dSr?)rrrrr@r@rCrxszSelectQuery.order_bycOst|jt|f||_dSr?)rrr)rAZwindowsrr@r@rCrzszSelectQuery.windowcCs
||_dSr?)r)rAZlimr@r@rCrszSelectQuery.limitcCs
||_dSr?)r)rAZoffr@r@rCoffsetszSelectQuery.offsetcCs$|dkr|d8}||_|||_dSNrr)rr)rAZpageZpaginate_byr@r@rCpaginateszSelectQuery.paginateTcCs
||_dSr?)r)rAZis_distinctr@r@rCdistinctszSelectQuery.distinctFcCs||f|_dSr?)r)rArZnowaitr@r@rCrszSelectQuery.for_updatecCs
||_dSr?)r)rAnaiver@r@rCrszSelectQuery.naivecCs
||_dSr?rrr@r@rCr|szSelectQuery.tuplescCs
||_dSr?rrr@r@rCrszSelectQuery.dictscCs
||_dSr?)r)rAaggregate_rowsr@r@rCrszSelectQuery.aggregate_rowsNcCs
||_dSr?r4)rAr6r@r@rCr6szSelectQuery.aliascCsx|dkrt|jjd}|j|kr4||j}n|}|	|j|}|j
sbdd|jD|_
t|j|f|_|S)NrpcSsg|]}|qSr@)r6)rrtr@r@rCrsz(SelectQuery.annotate.<locals>.<listcomp>)
rCountrzrr6rZrjr}rrmrrrV)rArZ
annotationrr@r@rCannotates
zSelectQuery.annotatecCs*|dkrttd}|}|g|_|S)Nr)rrr7rxr)rAaggregationrr@r@rC
_aggregates
zSelectQuery._aggregatecCs||j|dS)Nr})rr~)rArr}r@r@rC	aggregateszSelectQuery.aggregatecCs4|js|js|js|jr$|j|dS|jddp2dS)Nclear_limitFrr)rrrr
wrapped_countrrArr@r@rCrpszSelectQuery.countcCsJ|}|rd|_|_|\}}d|}|jj|f|}|pHdS)Nz+SELECT COUNT(1) FROM (%s) AS wrapped_selectr)rxrrrir}rawr~)rArrrirjwrappedZrqr@r@rCrszSelectQuery.wrapped_countcCs$|dd}tdg|_t|S)Nr1)rr7rr/r~rr@r@rCexistsszSelectQuery.existscCsH|dd}zt|WStk
rB|jd|YnXdS)Nrz:Instance matching query does not exist:
SQL: %s
PARAMS: %s)rrr{rr}rrirr@r@rCrszSelectQuery.getrcCs<|}|||jd|}|r8|dkr4|dS|SdSNrr)r{r r)rAr*rvrr@r@rCpeeks

zSelectQuery.peekcCs"|j|kr||_d|_|j|dS)NT)r*)rrrr)r@r@rCr&s
zSelectQuery.firstcCs||Sr?)rrrr@r@rCri,szSelectQuery.sqlcCsT|j}|jD]B}t|tr*|j|kr*dSt|tr|jdk	r|j|krdSqdS)NFT)r}rrQrr%r))rAr}r&r@r@rCverify_naive/s

zSelectQuery.verify_naivecCs|j|jfSr?)rrrr@r@rCget_query_meta9szSelectQuery.get_query_metacCsf|jr|jtS|jr$|jtS|js8|jr8|rD|jt	S|j
rV|jtS|jtSdSr?)
rrrrrrrrrrrRESULTS_AGGREGATE_MODELSRESULTS_MODELSrr@r@rC_get_result_wrapper<szSelectQuery._get_result_wrappercCsN|js|jdkrD|j}|}|}|||||_d|_|jS|jSdSr')rrr}rrrz)rAr}Z
query_meta
ResultWrapperr@r@rCr{HszSelectQuery.executecCst|Sr?rrr@r@rCrSszSelectQuery.__iter__cCst|Sr?rr{r(rr@r@rCr(VszSelectQuery.iteratorcCsN|}t|tr|j}n|}|dk	r:|dkr6|dnd}|||j|Sr)r{rQslicestopr r)rAr^rvrr@r@rCrdYs

zSelectQuery.__getitem__cCst|Sr?)rr{rr@r@rCr!dszSelectQuery.__len__cCst|Sr?)idrr@r@rCrhszSelectQuery.__hash__)r)T)TF)T)T)T)T)N)N)N)NT)F)F)r)r)5rErFrGrQrr]rrrrTrSrVrYrrrr4rrrrxrzrrrrrrr|rrr6rrrrprrrrrrirrrr{rr(rdr!PY3rrr@r@rrCrYs|












	


rc@s$eZdZddZddZddZdS)NoopSelectQuerycCs|jdfSNr@)rget_noop_sqlrr@r@rCrilszNoopSelectQuery.sqlcCsdS)Nrr@rr@r@rCroszNoopSelectQuery.get_query_metacCs|jtSr?)rrrrr@r@rCrrsz#NoopSelectQuery._get_result_wrapperN)rErFrGrirrr@r@r@rCrksrcsPeZdZdZdfdd	ZfddZddd	Zd
dZdd
ZddZ	Z
S)rrzNcs(||_||_||_tt||gdSr?)rrXr@rrr)rAr}rrXr@rr@rCrxszCompoundSelect.__init__cs,tt||}|j|_|j|_|j|_|Sr?)rrr]rrXr@rrr@rCr]~s
z CompoundSelect._clone_attributesFcCs|j|dS)Nr)rrr@r@rCrpszCompoundSelect.countcCs
|jSr?)rrrr@r@rCrszCompoundSelect.get_query_metacCs|jo|jSr?)rrr@rr@r@rCrszCompoundSelect.verify_naivecCs|jr|jtS|jr$|jtS|jr6|jtS|jj	pD|j
j	}|jjpZ|j
jpZ|j}|sl|rl|rx|jt
S|jtSdSr?)rrrrrrrrrrr@rrrr)rAZ	has_joinsZis_naiver@r@rCrsz"CompoundSelect._get_result_wrapper)NNN)F)rErFrGrQrr]rprrrrr@r@rrCrus
rcsteZdZfddZfddZddZeeddZeedd
dZeeddd
Z	ddZ
ddZZS)_WriteQuerycs,d|_d|_d|_d|_tt||dSr')rrrrrrrr[rr@rCrs
z_WriteQuery.__init__cs6tt||}|jr2t|j|_|j|_|j|_|Sr?)rrr]rrrrrrr@rCr]sz_WriteQuery._clone_attributescsfdd}|S)Ncs0|jjj}|js tdt||f||S)Nz/RETURNING is not supported by your database: %s)r}rzrrrwr)rArrrr,r@rCrs
z-_WriteQuery.requires_returning.<locals>.innerr@)r,rr@rrCrequires_returningsz_WriteQuery.requires_returningcGs>t|dkr |ddkr d|_n|s.|jjj}|||_dSr)rrr}rzrrerr@r@rC	returnings

z_WriteQuery.returningTcCs
||_dSr?rrr@r@rCr|sz_WriteQuery.tuplescCs
||_dSr?rrr@r@rCrsz_WriteQuery.dictscCs:|jdk	r.|jr|jtS|jr.|jtS|jtSr?)rrrrrrrrrr@r@rCrs
z_WriteQuery.get_result_wrappercCs2|}|j|jgif}||j|||_|jSr?)rrr}rzr)rArrIr@r@rC_execute_with_result_wrappersz(_WriteQuery._execute_with_result_wrapper)T)T)
rErFrGrr]rrrr|rrrrr@r@rrCrs	rcs`eZdZdfdd	ZfddZedddZedZd	d
Z	ddZ
d
dZddZZ
S)UpdateQueryNcs ||_d|_tt||dSr?)rrrrr)rAr}rrr@rCrszUpdateQuery.__init__cs(tt||}t|j|_|j|_|Sr?)rrr]r`rrrrr@rCr]szUpdateQuery._clone_attributescCs
||_dSr?rrAactionr@r@rCon_conflictszUpdateQuery.on_conflictrcCs||Sr?)rrrr@r@rCriszUpdateQuery.sqlcCs@|jdk	r|jdkr|S|jdk	r,|jS|j|SdSr?rrrr
rows_affectedrzrr@r@rCr{s

zUpdateQuery.executecCs |jjjjstdt|S)NzwUPDATE queries cannot be iterated over unless they specify a RETURNING clause, which is not supported by your database.)r}rzrrrwrr{rr@r@rCrszUpdateQuery.__iter__cCst|Sr?rrr@r@rCr(szUpdateQuery.iterator)N)N)rErFrGrr]rrrrrir{rr(rr@r@rrCrsrcseZdZdfdd	ZddZfddZed	Zed
Ze	ddd
Z
e	dddZe	dddZe
ddZddZddZddZZS)InsertQueryNFcsftt||d|_|dk	p$|dk	|_d|_|dk	r>||_n|pDig|_||_||_||_	d|_
dSr')rrrr_is_multi_row_insert_return_id_listrrr_validate_fieldsr)rAr}rrowsrrvalidate_fieldsrr@rCr
szInsertQuery.__init__c
#s|jj}|jr |jfdd}|j}|j}|jD]}|}t}|D]B}|jrZ||||j	krp|j	|}	n|}	||||	<|
|	qH|r|D]}	|	|kr||	||	<q|Vq2dS)Ncs|krtd|dS)Nz"%s" is not a recognized field.)rJ)rvalid_fieldsr@rCvalidate_field
sz.InsertQuery._iter_rows.<locals>.validate_field)r}rzrr
_default_dict_default_callablesrrrrry)
rAZ
model_metardefaultsZ	callablesrZ	field_rowrrrr@rrCr
s,

zInsertQuery._iter_rowscsTtt||}|j|_|j|_|j|_|j|_|j|_|j|_|j	|_	|j
|_
|Sr?)rrr]rrrrrrrrrrr@rCr]/
szInsertQuery._clone_attributesrzwhere clauseTcCs
||_dSr?)r)rAupsertr@r@rCr>
szInsertQuery.upsertcCs
||_dSr?rrr@r@rCrB
szInsertQuery.on_conflictcCs
||_dSr?)r)rAreturn_id_listr@r@rCrF
szInsertQuery.return_id_listcCs|jjr|jr|jrdSdSNTF)rinsert_returningrrrr@r@rCrJ
szInsertQuery.is_insert_returningcCs||Sr?)rrrr@r@rCriQ
szInsertQuery.sqlcCsPg}d}|j}|jD]*}t|j||j}|r||q|rH|S|SdSr?)rrrr}rrr{r~)rAZid_listZlast_idrr#r@r@rC_insert_with_loopT
s
zInsertQuery._insert_with_loopcCs|jo"|jdko"|jdko"|jj}|r0|S|jdk	rL|jdkrL|S|jdk	r\|jS|}|js|jj	r|
}|jj}ddt
||D}|jjjr|S|dS|j||jS|jrttd|SdSdS)NcSsg|]\}}||qSr@)r)rrr4r@r@rCrw
sz'InsertQuery.execute.<locals>.<listcomp>rT)rrrrinsert_manyrrrrzrr%r}rzrWrrlast_insert_idrrrX
itemgetterfetchall)rAZinsert_with_looprZpk_rowrIZ
clean_datar@r@rCr{d
s8

zInsertQuery.execute)NNNNF)T)N)T)rErFrGrrr]rrr5rrrrrrrirr{rr@r@rrCr
s(
rc@s$eZdZedZddZddZdS)DeleteQueryrcCs||Sr?)rrrr@r@rCri
szDeleteQuery.sqlcCs@|jdk	r|jdkr|S|jdk	r,|jS|j|SdSr?rrr@r@rCr{
s

zDeleteQuery.executeN)rErFrGrrrir{r@r@r@rCr
sr
IndexMetadata)rrirrrColumnMetadata)rZ	data_typerrrForeignKeyMetadata)r4
dest_tabledest_columnrc@seZdZdS)PeeweeExceptionNrErFrGr@r@r@rCr
src@seZdZdS)r!Nrr@r@r@rCr!
sc@seZdZdS)rNrr@r@r@rCr
sc@seZdZdS)rNrr@r@r@rCr
sc@seZdZdS)r#Nrr@r@r@rCr#
sc@seZdZdS)r$Nrr@r@r@rCr$
sc@seZdZdS)r%Nrr@r@r@rCr%
sc@seZdZdS)r,Nrr@r@r@rCr,
sc@seZdZdS)r-Nrr@r@r@rCr-
sc@seZdZdS)r2Nrr@r@r@rCr2
sc@s*eZdZdgZddZddZddZdS)	ExceptionWrapper
exceptionscCs
||_dSr?)r)rArr@r@rCr
szExceptionWrapper.__init__cCsdSr?r@rr@r@rC	__enter__
rTzExceptionWrapper.__enter__cCsH|dkrdS|j|jkrD|j|j}tr.|}n|j}t||||dSr?)rErPY26rr`)rAexc_type	exc_value	tracebackZnew_typeZexc_argsr@r@rC__exit__
szExceptionWrapper.__exit__N)rErFrGrrrrr@r@r@rCr
srcseZdZfddZZS)_BaseConnectionLocalcs4tt|jf|d|_d|_d|_g|_g|_dSrI)rrr
autocommitclosedconn
context_stacktransactionsrrr@rCr
sz_BaseConnectionLocal.__init__)rErFrGrrr@r@rrCr
src@seZdZdS)_ConnectionLocalNrr@r@r@rCr
src
@s|eZdZdZeZddddgZdZdZdZ	iZ
dZdZdZ
dZdZdZdZiZd	ZgZdZdZdZdZdZdZeeeeeee e!e"d
	Z#d}ddZ$d
dZ%ddZ&ddZ'ddZ(ddZ)ddZ*ddZ+ddZ,ddZ-dd Z.e/d!d"Z0e/d#d$Z1d%d&Z2d'd(Z3d)d*Z4d+d,Z5d-d.Z6d~d/d0Z7d1d2Z8d3d4Z9d5d6Z:d7d8Z;d9d:Z<d;d<Z=d=d>Z>d?d@Z?ddAdBZ@dCdDZAdEdFZBdGdHZCdIdJZDdKdLZEddMdNZFdOdPZGddQdRZHddSdTZIddUdVZJddWdXZKddYdZZLd[d\ZMdd]d^ZNdd_d`ZOddadbZPddcddZQddedfZRdgdhZSddidjZTddkdlZUddmdnZVddodpZWdqdrZXdsdtZYdudvZZdwdxZ[dydzZ\d{d|Z]dS)DatabaseFrrrrTrmNrl)	ZConstraintErrorrrr#r$r%r,r-r2c	Ksni|_|rt|_nt|_|j|f|t|_||_||_	||_
t|j|pRi|_t|j
|pdi|_
dSr?)connect_kwargsr_localrinit	threadingZLock
_conn_lockrautorollbackuse_speedupsrrwrx)	rArZthreadlocalsrropsrrrr@r@rCr
s

zDatabase.__init__cKs0|s||dk|_||_|j|dSr?)	is_closedr&r=rrr)rArrr@r@rCr
s

z
Database.initcCs
t|jSr?)rrrr@r@rCexception_wrapperszDatabase.exception_wrapperc
Csd|jT|jrtd|2|j|jf|j|j_d|j_	|
|jjW5QRXW5QRXdS)NzBError, database not properly initialized before opening connectionF)rr=	Exceptionr
_connectrrrrrinitialize_connectionrr@r@rCconnects
zDatabase.connectcCsdSr?r@rArr@r@rCr
szDatabase.initialize_connectionc
CsN|j>|jrtd|||jjd|j_W5QRXW5QRXdS)NzBError, database not properly initialized before closing connectionT)rr=rr
_closerrrrr@r@rCr&s
zDatabase.closecCs:|jjr"|jjdj}|dk	r"|S|jjr2||jjSr<)rr
connectionrrrrr@r@rCget_conn szDatabase.get_conncCs|jjSr?)rrrr@r@rCr	)szDatabase.is_closedcCs|Sr?)rrrr@r@rC
get_cursor,szDatabase.get_cursorcCs|dSr?)r&rr@r@rCr/szDatabase._closecKstdSr?rw)rArrr@r@rCr2szDatabase._connectcCst|j||_dSr?)rrw)r.rr@r@rCregister_fields5szDatabase.register_fieldscCst|j||_dSr?)rrx)r.rr@r@rCregister_ops9szDatabase.register_opscCsl|tkr|jrtStS|tkr"tS|tkr8|jr4tStS|t	krN|jrJt
StS|tkrZt
S|jrdtStSdSr?)rrrr2rr6rrr/rrr5rrO)rAZwrapper_typer@r@rCr=s&



zDatabase.get_result_wrappercCs|jjr|jSdSr?)rzrZ	lastrowid)rArrr@r@rCrOszDatabase.last_insert_idcCs|jSr?)Zrowcount)rArr@r@rCrSszDatabase.rows_affectedcCs||j|j|j|jSr?)compiler_classrnrorwrxrr@r@rCrVszDatabase.compilercCs|j||Sr?)rxrr)rArr@r@rCr{[szDatabase.executec	Cst||f|d|}z|||p.dWn,tk
r`|rZ|jrZ|YnX|rv|rv|	W5QRX|Sr)
loggerdebugr
rr{rget_autocommitrrollbackcommit)rArirjryrr@r@rCrx^s
zDatabase.execute_sqlcCsdSr?r@rr@r@rCbeginmszDatabase.begincCs|dSr?)rrrr@r@rCrpszDatabase.commitcCs|dSr?)rrrr@r@rCrsszDatabase.rollbackcCs||j_dSr?)rr)rArr@r@rCset_autocommitvszDatabase.set_autocommitcCs |jjdkr||j|jjSr?)rrrrr@r@rCryszDatabase.get_autocommitcCs|jj|dSr?)rrr~rAtransactionr@r@rCpush_execution_context~szDatabase.push_execution_contextcCs|jjdSr?)rrr#rr@r@rCpop_execution_contextszDatabase.pop_execution_contextcCst|jjSr?)rrrrr@r@rCexecution_context_depthsz Database.execution_context_depthcCst||dS)N)with_transaction)ExecutionContext)rAr#r@r@rCexecution_contextszDatabase.execution_contextcCs|jj|dSr?)rrr~rr@r@rCpush_transactionszDatabase.push_transactioncCs|jjdSr?)rrr#rr@r@rCpop_transactionszDatabase.pop_transactioncCst|jjSr?)rrrrr@r@rCtransaction_depthszDatabase.transaction_depthcCst|Sr?rrr@r@rCrszDatabase.transactioncstfdd}|S)Nc
s*||W5QRSQRXdSr?r)r|rrAr@rCrs
z)Database.commit_on_success.<locals>.innerr)rArrr@r*rCcommit_on_successszDatabase.commit_on_successcCs|js
tt||Sr?)
savepointsr	savepointrAsidr@r@rCr-szDatabase.savepointcCst|Sr?)_atomicrr@r@rCatomicszDatabase.atomiccCstdSr?rwrArr@r@rC
get_tablesszDatabase.get_tablescCstdSr?rwrArrr@r@rCget_indexesszDatabase.get_indexescCstdSr?rwr4r@r@rCget_columnsszDatabase.get_columnscCstdSr?rwr4r@r@rCget_primary_keysszDatabase.get_primary_keyscCstdSr?rwr4r@r@rCget_foreign_keysszDatabase.get_foreign_keyscCstdSr?rw)rAseqr@r@rCsequence_existsszDatabase.sequence_existscCs|}|j|||Sr?)rrxr)rAr}rqcr@r@rCrszDatabase.create_tablecCst||ddS)N)r)create_model_tables)rArrr@r@rC
create_tablesszDatabase.create_tablescsH|}t|ttfs"td|fdd|D}|j|||S)Nz=Fields passed to "create_index" must be a list or tuple: "%s"cs&g|]}t|trjj|n|qSr@rQrrzrrr}r@rCrsz)Database.create_index.<locals>.<listcomp>)rrQrrVrwrxr	)rAr}rrr;fobjsr@r?rCr	s
zDatabase.create_indexcsH|}t|ttfs"td|fdd|D}|j|||S)Nz;Fields passed to "drop_index" must be a list or tuple: "%s"cs&g|]}t|trjj|n|qSr@r>rr?r@rCrsz'Database.drop_index.<locals>.<listcomp>)rrQrrVrwrxr
)rAr}rrr;r@r@r?rCr
s
zDatabase.drop_indexcCs|}|j||||Sr?)rrxr)rAr}rrr;r@r@rCrszDatabase.create_foreign_keycCs"|jr|}|j||SdSr?)	sequencesrrxrrAr9r;r@r@rCrszDatabase.create_sequencecCs|}|j||||Sr?)rrxr)rAr}rrr;r@r@rCrszDatabase.drop_tablecCst|||ddS)N)rr)drop_model_tables)rArrrr@r@rCdrop_tablesszDatabase.drop_tablescCs|}|j||||Sr?)rrxr)rAr}rrr;r@r@rCrszDatabase.truncate_tablecCs"tt|D]}|||qdSr?)rrqr)rArrrrr@r@rCtruncate_tablesszDatabase.truncate_tablescCs"|jr|}|j||SdSr?)rArrxrrBr@r@rCrszDatabase.drop_sequencecCstt|td|SNrrZEXTRACTrr4rArZ
date_fieldr@r@rCrszDatabase.extract_datecCst||Sr?)rZ
DATE_TRUNCrHr@r@rC
truncate_dateszDatabase.truncate_datecCstdS)NzDEFAULT VALUESrr[r@r@rCrszDatabase.default_insert_clausecCsdS)NzSELECT 0 WHERE 0r@rr@r@rCrszDatabase.get_noop_sqlcCstSr?)rrr@r@rCrszDatabase.get_binary_type)TTNNFT)NT)T)N)N)N)N)N)N)F)F)F)F)N)FF)FF)FF)FF)^rErFrGrrhrrrdistinct_ondrop_cascaderwforeign_keysrfor_update_nowaitrrrorrxrnreserved_tablesrr,rAsubquery_delete_same_tablerwindow_functionsr#rrr$r%r,r-r2rrrr
rr
r&rr	rrrrRrrrrrrr{rxrrrrrr r!r"r%r&r'r(rr+r-r1r3r5r6r7r8r:rr=r	r
rrrrDrrErrrIrrrr@r@r@rCr
s
		




















rcseZdZeZddddZdZeo(ejdkZ	dZ
ejdej
diZd	Zd*fdd	Zd
dZddZddZd+ddZd,ddZd-ddZd.ddZd/ddZd0ddZd1d d!Zd2d"d#Zd$d%Zd&d'Zd(d)ZZS)3r6rirj)r/rrF)rMrrr=ZGLOBrzINSERT OR REPLACE INTONcsF|pg|_|dd}|r*|jd|ftt|j|f||dS)Njournal_mode)_pragmasr#r~rr6r)rArZpragmasrrrRrr@rCrs

zSqliteDatabase.__init__cKsJtstdtj|f|}d|_z||Wn|YnX|S)Nz&pysqlite or sqlite3 must be installed.)sqlite3r!risolation_level_add_conn_hooksr&)rArrrr@r@rCrszSqliteDatabase._connectcCs8|||ddt|ddt|ddtdS)NrrLZ
date_truncr)_set_pragmasZcreate_functionrrrrr@r@rCrV&s
zSqliteDatabase._add_conn_hookscCs<|jr8|}|jD]\}}|d||fq|dS)NzPRAGMA %s = %s;)rSrr{r&)rArrZpragmar^r@r@rCrW,s
zSqliteDatabase._set_pragmasDEFERREDcCs|jd|dddS)NzBEGIN %sFryrx)rAZ	lock_typer@r@rCr3szSqliteDatabase.begincCstddS)NzBSQLite does not support ALTER TABLE statements to add constraints.)r-)rAr}rrr@r@rCr6sz!SqliteDatabase.create_foreign_keycCs|dd}dd|DS)Nz<SELECT name FROM sqlite_master WHERE type = ? ORDER BY name;rcSsg|]}|dqS)rr@rr#r@r@rCr=sz-SqliteDatabase.get_tables.<locals>.<listcomp>rxr)rArrr@r@rCr3:szSqliteDatabase.get_tablesc	sd}||df}t|t|d}|D]*}|d}t|ddk}|r<|q<itD](}|d|}dd|D|<qtfd	dtDS)
NzQSELECT name, sql FROM sqlite_master WHERE tbl_name = ? AND type = ? ORDER BY namerzPRAGMA index_list("%s")rrLzPRAGMA index_info("%s")cSsg|]}|dqS)rLr@r\r@r@rCrRsz.SqliteDatabase.get_indexes.<locals>.<listcomp>cs(g|] }t||||kqSr@rrrZ
index_columnsZindex_to_sqlrZunique_indexesr@rCrTs)rxr`rrrryr)	rArrrrr#r	is_uniquerr@r`rCr5?s"zSqliteDatabase.get_indexescs$|d}fdd|DS)NPRAGMA table_info("%s")c	s2g|]*}t|d|d|dt|dqS)rrLrMr)rr/r\r[r@rCr_sz.SqliteDatabase.get_columns.<locals>.<listcomp>r]rArrrr@r[rCr6]s
zSqliteDatabase.get_columnscCs |d|}dd|DS)NrbcSsg|]}|dr|dqS)r=rr@r\r@r@rCrdsz3SqliteDatabase.get_primary_keys.<locals>.<listcomp>r]rcr@r@rCr7bszSqliteDatabase.get_primary_keyscs$|d}fdd|DS)NzPRAGMA foreign_key_list("%s")cs&g|]}t|d|d|dqS)rMrLrrr\r[r@rCrhsz3SqliteDatabase.get_foreign_keys.<locals>.<listcomp>r]rcr@r[rCr8fs
zSqliteDatabase.get_foreign_keyscCs
t||Sr?)savepoint_sqliter.r@r@rCr-kszSqliteDatabase.savepointcCst||Sr?)rrrHr@r@rCrnszSqliteDatabase.extract_datecCstt||Sr?)rrrrHr@r@rCrIqszSqliteDatabase.truncate_datecCstjSr?)rTBinaryrr@r@rCrtszSqliteDatabase.get_binary_type)N)rX)N)N)N)N)N)N)N) rErFrGr
rrwrLrTsqlite_version_inforrrErrrxrrrrVrWrrr3r5r6r7r8r-rrIrrr@r@rrCr6s:







c@seZdZdZdZdZdZdddddddd	ZdZdZ	dZ
d
Zej
diZdgZdZdZdZdZd'ddZddZddZd(ddZd)ddZd*ddZd+ddZd,ddZdd Zd!d"Zd#d$Zd%d&Zd
S)-r/TZBYTEAZBOOLEAN	TIMESTAMPNUMERICDOUBLE PRECISIONZSERIALr)r
r/rurrrr%s~userNcKsTtstdtjfd|i|}|jrBttj|ttj||rP|||S)Nzpsycopg2 must be installed.r)	psycopg2r!rregister_unicode
pg_extensionsZ
register_typeUNICODEZUNICODEARRAYZset_client_encoding)rArrrrr@r@rCrs
zPostgresqlDatabase._connectcCs<|j}|jdk	r |jjr |jjS|jr8d|j|jjfSdS)NFz	%s_%s_seq)rzrrrrr)rArrIr@r@rC_get_pk_sequences
z#PostgresqlDatabase._get_pk_sequencecCs`||}|sdS|j}|jr*d|j}nd}|d||f|d}|r\||S)Nz%s.rzSELECT CURRVAL('%s"%s"')r)rrrzrr{r%rr)rArrrrIrresultr@r@rCrs
z!PostgresqlDatabase.last_insert_idpubliccCs d}dd|||fDS)NzSSELECT tablename FROM pg_catalog.pg_tables WHERE schemaname = %s ORDER BY tablenamecSsg|]
\}|qSr@r@)rrr@r@rCrsz1PostgresqlDatabase.get_tables.<locals>.<listcomp>r])rArrr@r@rCr3szPostgresqlDatabase.get_tablescs,d}||d|f}fdd|DS)Na
            SELECT
                i.relname, idxs.indexdef, idx.indisunique,
                array_to_string(array_agg(cols.attname), ',')
            FROM pg_catalog.pg_class AS t
            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)
            LEFT OUTER JOIN pg_catalog.pg_attribute AS cols ON
                (cols.attrelid = t.oid AND cols.attnum = ANY(idx.indkey))
            WHERE t.relname = %s AND t.relkind = %s AND idxs.schemaname = %s
            GROUP BY i.relname, idxs.indexdef, idx.indisunique
            ORDER BY idx.indisunique DESC, i.relname;rcs2g|]*}t|d|d|dd|dqS)rrrM,rL)rrqr\r[r@rCrsz2PostgresqlDatabase.get_indexes.<locals>.<listcomp>r]rArrrrr@r[rCr5s

zPostgresqlDatabase.get_indexescs<d}|||f}t||fdd|DS)Nz
            SELECT column_name, is_nullable, data_type
            FROM information_schema.columns
            WHERE table_name = %s AND table_schema = %s
            ORDER BY ordinal_positioncs*g|]"\}}}t|||dk|kqSZYESrrrrrpksrr@rCrsz2PostgresqlDatabase.get_columns.<locals>.<listcomp>rxrr7rrvr@rzrCr6szPostgresqlDatabase.get_columnscCs(d}||d||f}dd|DS)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 = %srcSsg|]
\}|qSr@r@r\r@r@rCrsz7PostgresqlDatabase.get_primary_keys.<locals>.<listcomp>r]rvr@r@rCr7sz#PostgresqlDatabase.get_primary_keyscs*d}|||f}fdd|DS)Na
            SELECT
                kcu.column_name, ccu.table_name, ccu.column_name
            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)
            JOIN information_schema.constraint_column_usage AS ccu
                ON (ccu.constraint_name = tc.constraint_name AND
                    ccu.constraint_schema = tc.constraint_schema)
            WHERE
                tc.constraint_type = 'FOREIGN KEY' AND
                tc.table_name = %s AND
                tc.table_schema = %scs&g|]}t|d|d|dqS)rrrLrdr\r[r@rCrsz7PostgresqlDatabase.get_foreign_keys.<locals>.<listcomp>r]rArrrirr@r[rCr8s

z#PostgresqlDatabase.get_foreign_keyscCs|d|f}t|dS)Nz
            SELECT COUNT(*) FROM pg_class, pg_namespace
            WHERE relkind='S'
                AND pg_class.relnamespace = pg_namespace.oid
                AND relname=%sr)rxr/r%)rArrvr@r@rCr:sz"PostgresqlDatabase.sequence_existscGs(ddgt|}|d||dS)NrurkzSET search_path TO %s)rrrx)rAZsearch_pathZpath_paramsr@r@rCset_search_pathsz"PostgresqlDatabase.set_search_pathcCsdS)NzSELECT 0 WHERE falser@rr@r@rCrszPostgresqlDatabase.get_noop_sqlcCstjSr?)rnrfrr@r@rCr
sz"PostgresqlDatabase.get_binary_type)N)rt)rt)rt)rt)rt) rErFrGrrrJrKrwrrMrrorErrxrNrrArProrrrrr3r5r6r7r8r:r~rrr@r@r@rCr/wsH	





c@seZdZdZddgZdddddd	d
dZdZdZd
Ze	j
de	jde	jdiZ
dZdZdZddZd+ddZd,ddZd-ddZd.ddZd/dd Zd!d"Zd#d$Zd%d&Zd'd(Zd)d*ZdS)0r+TrrZBOOLrirjZFLOATzINTEGER AUTO_INCREMENTZLONGTEXTzVARCHAR(40))r/rrrrr	rrklzLIKE BINARYrr`FzREPLACE INTOcKsJtstdddd}||d|kr6|d|d<tjfd|i|S)Nz%MySQLdb or PyMySQL must be installed.utf8T)charsetZuse_unicodeZpasswordZpasswdr)mysqlr!rr#r)rArrZconn_kwargsr@r@rCr%s
zMySQLDatabase._connectNcCsdd|dDS)NcSsg|]
\}|qSr@r@r\r@r@rCr2sz,MySQLDatabase.get_tables.<locals>.<listcomp>zSHOW TABLESrZr2r@r@rCr31szMySQLDatabase.get_tablescsx|d}ti|D]@}|ds:|d|dg|d|dq fddDS)NSHOW INDEX FROM `%s`rrLrcs$g|]}t|d||kqSr?r^r_indexesrrr@rCr=sz-MySQLDatabase.get_indexes.<locals>.<listcomp>)rxrrryr&r~)rArrrr#r@rrCr54szMySQLDatabase.get_indexescs8d}||f}t|fdd|DS)Nz
            SELECT column_name, is_nullable, data_type
            FROM information_schema.columns
            WHERE table_name = %s AND table_schema = DATABASE()cs*g|]"\}}}t|||dk|kqSrwrxryrzr@rCrGsz-MySQLDatabase.get_columns.<locals>.<listcomp>r|r}r@rzrCr6@szMySQLDatabase.get_columnscCs |d|}dd|DS)NrcSs g|]}|ddkr|dqS)rLZPRIMARYrr@r\r@r@rCrLsz2MySQLDatabase.get_primary_keys.<locals>.<listcomp>r]rcr@r@rCr7JszMySQLDatabase.get_primary_keyscs(d}||f}fdd|DS)Na@
            SELECT column_name, referenced_table_name, referenced_column_name
            FROM information_schema.key_column_usage
            WHERE table_name = %s
                AND table_schema = DATABASE()
                AND referenced_table_name IS NOT NULL
                AND referenced_column_name IS NOT NULLcs g|]\}}}t|||qSr@rd)rr4rrr[r@rCrWsz2MySQLDatabase.get_foreign_keys.<locals>.<listcomp>r]rvr@r[rCr8Ns

zMySQLDatabase.get_foreign_keyscCsttt|td|SrFrGrHr@r@rCr[szMySQLDatabase.extract_datecCst|t|Sr?)rZDATE_FORMATMYSQL_DATE_TRUNC_MAPPINGrHr@r@rCrI^szMySQLDatabase.truncate_datecCstt|jjtdS)NzVALUES (DEFAULT))rrrzrr7r[r@r@rCras
z#MySQLDatabase.default_insert_clausecCsdS)NzDO 0r@rr@r@rCrfszMySQLDatabase.get_noop_sqlcCstjSr?)rrfrr@r@rCriszMySQLDatabase.get_binary_type)N)N)N)N)N)rErFrGrrrwrrorrErrrrxrnrOrrr3r5r6r7r8rrIrrrr@r@r@rCr+
sD	






c@seZdZddZdS)_callable_context_managercstfdd}|S)Nc
s&||W5QRSQRXdSr?r@r|rrAr@rCrosz1_callable_context_manager.__call__.<locals>.innerr)rArrr@rrC__call__nsz"_callable_context_manager.__call__N)rErFrGrr@r@r@rCrmsrc@s&eZdZd	ddZddZddZdS)
r$TcCs||_||_d|_dSr?)rr#r)rArr#r@r@rCrvszExecutionContext.__init__c	CsZ|jjH|j||jj|jjf|jj|_|jrL|j|_|j	W5QRX|Sr?)
rrr rrrr#rtxnrrr@r@rCr{s
zExecutionContext.__enter__c
Cst|jjb|jdkr |jnFz*|jrH|s8|jd|j|||W5|j|j|jXW5QRXdSr')	rrrr!rr#rrrrArexc_valexc_tbr@r@rCrs


zExecutionContext.__exit__N)TrErFrGrrrr@r@r@rCr$us
r$cs6eZdZdfdd	ZfddZfddZZS)	r;Tcstt|||||_dSr?)rr;rr)rArrr#rr@rCrszUsing.__init__cs:g|_|jD]}|j|jj|j|j_qtt|Sr?)_origrr~rzrrr;rrArrr@rCrs

zUsing.__enter__cs:tt||||t|jD]\}}|j||j_qdSr?)rr;rrrrrzr)rArrrrrrr@rCrszUsing.__exit__)T)rErFrGrrrrr@r@rrCr;sc@s$eZdZddZddZddZdS)r0cCs
||_dSr?rrArr@r@rCrsz_atomic.__init__cCs2|jdkr|j|_n|j|_|jSr)rr(r_helperr-rrr@r@rCrsz_atomic.__enter__cCs|j|||Sr?)rrrr@r@rCrsz_atomic.__exit__Nrr@r@r@rCr0sr0c@s@eZdZddZddZdddZddd	Zd
dZdd
ZdS)rcCs
||_dSr?rrr@r@rCrsztransaction.__init__cCs|jdSr?)rrrr@r@rC_beginsztransaction._beginTcCs|j|r|dSr?)rrrrArr@r@rCrs
ztransaction.commitcCs|j|r|dSr?)rrrrr@r@rCrs
ztransaction.rollbackcCs>|j|_|jd|jdkr.||j||S)NFr)rrrrr(rr&rr@r@rCrsztransaction.__enter__c	CsjzJ|r|dn6|jdkrHz|dWn|dYnXW5|j|j|jXdSNFr)rrrr'rr(rrr@r@rCrs
ztransaction.__exit__N)T)T)	rErFrGrrrrrrr@r@r@rCrs

rc@s>eZdZdddZddZddZdd	Zd
dZdd
ZdS)r-NcCs4||_|}|pdtj|_||j|_dS)NrZ)rrrZuuid4rr/r
quoted_sid)rArr/Z	_compilerr@r@rCrszsavepoint.__init__cCs|jj|dddS)NFrY)rrxrr@r@rCrzszsavepoint._executecCs|d|jdS)NzRELEASE SAVEPOINT %s;rzrrr@r@rCrszsavepoint.commitcCs|d|jdS)NzROLLBACK TO SAVEPOINT %s;rrr@r@rCrszsavepoint.rollbackcCs,|j|_|jd|d|j|S)NFz
SAVEPOINT %s;)rr_orig_autocommitrrzrrr@r@rCrszsavepoint.__enter__c	CsLz6|r|n$z|Wn|YnXW5|j|jXdSr?)rrrrrrr@r@rCrs
zsavepoint.__exit__)N)	rErFrGrrzrrrrr@r@r@rCr-s
r-cs(eZdZfddZfddZZS)recs8|j}|jdk	r$|j|_d|_nd|_tt|Sr?)rrrU_orig_isolation_levelrrerrrr@rCrs

zsavepoint_sqlite.__enter__c	s8ztt||||WS|jdk	r2|j|j_XdSr?)rrrrUrrerrrr@rCr
s

zsavepoint_sqlite.__exit__)rErFrGrrrr@r@rrCresrec@s<eZdZddZddZddZddZd	d
ZddZd
S)rcCs||_|jj|_||_dSr?)r>r}rr?)rAr6r?r@r@rCrs
zFieldProxy.__init__cCst|j|jSr?)rr>r?rr@r@rCr1szFieldProxy.clone_basecCs|j|Sr?)r?rurr@r@rCruszFieldProxy.coercecCs|j|Sr?)r?rrr@r@rCrszFieldProxy.python_valuecCs|j|Sr?)r?rrr@r@rCr!szFieldProxy.db_valuecCs|dkr|jSt|j|SNr})r>rr?rr@r@rCr$szFieldProxy.__getattr__N)	rErFrGrr1rurrrr@r@r@rCrsrc@s>eZdZddZddZddZddd	Zd
dZdd
ZdS)rcCs||jd<dSr)rOr[r@r@rCr*szModelAlias.__init__cCs$t|j|}t|tr t||S|Sr?)rr}rQrr)rArrsr@r@rCr-s

zModelAlias.__getattr__cCstddS)Nz-Cannot set attributes on ModelAlias instances)r
rr@r@rCr
3szModelAlias.__setattr__Fcs*jj}|r|jn|j}fdd|DS)Ncsg|]}t|qSr@)rrrr@rCr9sz/ModelAlias.get_proxy_fields.<locals>.<listcomp>)r}rzr
sorted_fields)rArZmmrr@rrCrc6szModelAlias.get_proxy_fieldscGs4|s|}t|f|}|jjr0|j|jj}|Sr?)rcrrzrx)rArrr@r@rCr4;szModelAlias.selectcKs|jf|Sr?r?rr@r@rCrCszModelAlias.__call__N)F)	rErFrGrrr
rcr4rr@r@r@rCr)s
rc@sHeZdZdZddZddZddZdd	Zd
dZdd
Z	ddZ
dS)r_keys_itemscCsg|_g|_dSr?rrr@r@rCrJsz_SortedFieldList.__init__cCs
|j|Sr?)r)rArr@r@rCrdNsz_SortedFieldList.__getitem__cCs
t|jSr?)rrrr@r@rCrQsz_SortedFieldList.__iter__cCs0|j}t|j|}t|j|}||j||kSr?)rrrrr)rAitemkrr_r@r@rCreTsz_SortedFieldList.__contains__cCs|j|jSr?)rrrrr@r@rCrZsz_SortedFieldList.indexcCs2|j}t|j|}|j|||j||dSr?)rrrinsertr)rArrrr@r@rCr]sz_SortedFieldList.insertcCs||}|j|=|j|=dSr?)rrr)rArrr@r@rCremovecs
z_SortedFieldList.removeN)rErFrGrrrdrrerrrr@r@r@rCrGsrc@seZdZdS)rNrr@r@r@rCrhsz	peewee.dbc@s|eZdZdddZddZdd	Zd
dZdd
ZddZddZ	ddZ
ddZdddZd ddZ
ddZd!ddZdS)"ModelOptionsNTFc
Ks||_|j|_i|_i|_i|_i|_i|_i|_	g|_
t|_g|_
g|_t|_g|_|dk	rj|nt|_||_||_t|pg|_||_||_||_|	|_|
|_||_||_d|_d|_ i|_!i|_"|
#D]\}}t$|||qt|
%|_&|jr|js|||_dSr')'r}rErrrrr_default_by_namerr_default_callable_listr_sorted_field_listrsorted_field_namesrrrdefault_databaserr
db_table_funcrrrxrrrrrNonly_save_dirtyrrrPr{rfr+r_additional_keys)rAr.rrrrrxrrrrrNrrrr^r@r@rCrpsDzModelOptions.__init__cCsd|jj|jfS)Nz<%s: %s>)rrErrr@r@rCraszModelOptions.__repr__cCs~|jrzg}|jD]b}t|tr:|jdkr,dnd}||j}|j|d}|drd||	q||
q||_dS)Nr:rr)rxrQrr*rrlstriprMr~r;r9)rAZ
norm_order_byrrbrr@r@rCrKs



zModelOptions.preparedcCs^t|j|_dd|jD|_t|jt|jBt|jfB|_	dd|jD|_
dS)NcSsg|]
}|jqSr@rrr@r@rCrsz4ModelOptions._update_field_lists.<locals>.<listcomp>cSsg|]}t|ts|qSr@)rQrrr@r@rCrs
)rrrrrrrr|rrrrr@r@rC_update_field_listss
z ModelOptions._update_field_listscCs||j||j|j<||j|j<|j|||jdk	r|j|j	|<t
|jrz|j|j|<|j
|j|jfn|j|j|<|j|j|j<dSr?)remove_fieldrrrrrrrrrrFrrr~rrrr@r@rCrs

zModelOptions.add_fieldcCs||jkrdS|j|}|j|j=|j|||jdk	r|j|=|j	|drt
|jD]$\}\}}||krb|j|qqbn|j|d|j
|jddSr?)rr#rrrrrrrrrrrrr)rArTZoriginalrrrr@r@rCrs


zModelOptions.remove_fieldcCs(|j}|jD]\}}|||<q|Sr?)rrr)rAZddrTrr@r@rCget_default_dicts
zModelOptions.get_default_dictcCs*z|j|WStk
r$YdSXdSr<)rrrwrr@r@rCget_field_indexszModelOptions.get_field_indexcs$jrfddjjDSjgS)Ncsg|]}j|qSr@)rrSrr@rCrsz7ModelOptions.get_primary_key_fields.<locals>.<listcomp>)rrrRrr@rrCrs

z#ModelOptions.get_primary_key_fieldsc	Cst|t}|ot|t}|r"g}|jD]Z}t|tr(|j|kr(|dkpf|rX|j|jkpf|of|j|jk}|r(|sx|S||q(|r|SdSr?)	rQrr%rr rrr!r~)	rArrvmultiZis_fieldZis_noderdrZis_matchr@r@rCrs"

zModelOptions.rel_for_modelcCs|j|j||Sr?)rzrr})rArrvrr@r@rCrsz"ModelOptions.reverse_rel_for_modelcCs||p||Sr?)rrrr@r@rCriszModelOptions.rel_existscCsrg}|jg}|rn|}||kr"q|||jjD]}||jq8|r|jjD]}||jqZq|Sr?)r}r#r~rzrPr|rr{)rAbackrefsrrArrr@r@rCrelated_modelss
zModelOptions.related_models)NNNNNNNNNTF)NF)NF)F)rErFrGrrarKrrrrrrrrrirr@r@r@rCros,
+	

rc
s>eZdZeddddddddd	g	Zfd
dZdd
ZZS)	BaseModelrrrrrxrrrNrcs|tks|djtkr,tt|||Si}|dd}|rf|jD]\}}|dsJ|||<qJt	|dd}d}	|D]}
t
|
dsqzt	|
d}|	dkrt|j}	j
|jB}|jD] \}}||kr||kr|||<q|
jD]2\}}||krqt|tr|jjst|j||<qqztt||||dt}
|
f|_d_tjjj_jjstddjj_g}jD]P\}}t|tr|jr|rtdn"|jr||}}n|||fqd	}|dkr|	r|	|	j}}nt d
dd}}nt|t!r.d
}d
}|d	k	rn|"||j_t|t p`t#|j$j_%|j_&|D]\}}|"|qrt
drt'dfdddj}dj(i}t)|t*f|}|_*j+t
dr,t-.S)NrZMetarrrzZmodel_options_basez[^\w]+zprimary key is overdetermined.FT)rrZ_composite_key__unicode__racsdj|fS)Nz<%s: %r>)rErrr.r@rCrSisz#BaseModel.__new__.<locals>.<lambda>z%sDoesNotExistrFvalidate_model)/rHrErr__new__r#rOrfrMrrrrinheritablerrQrrrrrzrrrrrrrrrwr~rr1rrr/rrrr+rFrrrKrrr)r.rbasesZattrsZmeta_optionsrIrvZmodel_pkZ	parent_pkb	base_metaZall_inheritableZModelOptionsBaserrZpk_namerrZexc_nameZ	exc_attrsZexception_classrrrCrs














zBaseModel.__new__cCst|Sr?)rr4rr@r@rCryszBaseModel.__iter__)rErFrGrrrrrr@r@rrCrs`rc@seZdZddZeddZeddZedTdd	ZedUd
dZedVd
dZ	eddZ
eddZeddZeddZ
eddZeddZeddZeddZedd ZedWd"d#Zed$d%Zed&d'Zed(d)ZedXd*d+Zed,d-ZedYd.d/ZedZd0d1Zed2d3Zed4d5Zd6d7ZeZd8d9ZeZ d:d;Z!d<d=Z"d>d?Z#d@dAZ$dBdCZ%d[dDdEZ&dFdGZ'e(dHdIZ)d\dJdKZ*d]dLdMZ+dNdOZ,dPdQZ-dRdSZ.dS)^r*cOs@|j|_t|j|_i|_|D]\}}t|||q&dSr?)rzrrrrr1rfr+)rArrrrr@r@rCr}s
zModel.__init__cCst|Sr?)rrr@r@rCr6szModel.aliascGs(t|f|}|jjr$|j|jj}|Sr?)rrzrx)r.rrr@r@rCr4szModel.selectNcs,|pi}|fddDt|S)Ncs g|]}jj||fqSr@rzrrr.rr@rCrsz Model.update.<locals>.<listcomp>)rr)r._Model__datarfdictr@rrCrszModel.updatecs,|pi}|fddDt|S)Ncs g|]}jj||fqSr@rrr.rr@rCrsz Model.insert.<locals>.<listcomp>)rr)r.rrrr@rrCrszModel.insertTcCst|||dS)N)rrr)r.rrr@r@rCrszModel.insert_manycCst|||dS)N)rrr)r.rrr@r@rCinsert_fromszModel.insert_fromcCst|Sr?)rrr@r@rCrszModel.deletecGst||f|Sr?)r)r.rirjr@r@rCrsz	Model.rawcKs"|f|}|jdd||S)NT)force_insert)saver3)r.rr2r@r@rCcreates
zModel.createcOs2|}|r|j|}|r*|jf|}|Sr?)r4rr5rnr)r.rrsqr@r@rCrs
z	Model.getcKs8|di}|}|D]6\}}d|kr>|jf||i}q|t|||k}qz|dfWS|jk
r2zZtdd|D}|	||j
j$|j
f|dfW5QRWYSQRXWn\tk
r,}z<z|dfWWY&YS|jk
r|YnXW5d}~XYnXYnXdS)NrrnFcss"|]\}}d|kr||fVqdS)rnNr@)rrrr@r@rCr!sz&Model.get_or_create.<locals>.<genexpr>T)r#r4rfrnr5rrrr`rrzrr1rr#)r.rrrrr^rjexcr@r@rC
get_or_creates&
,zModel.get_or_createc
Ksz6|jj |jf|dfW5QRWSQRXWn\tk
rg}|D],\}}t||}|jsp|jrR|	||kqR|j
|dfYSXdSr)rzrr1rr#rfrrrr~r)r.rrrTr^rr@r@rC
create_or_gets(
zModel.create_or_getcOs|j||Sr?)r4rn)r.Zdqrr@r@rCrnszModel.filtercCs0i}|jjr|jj|d<|jj|jjjf|kS)Nr)rzrrrr3)r.rr@r@rCtable_existsszModel.table_existsFcCsb|r|rdS|jj}|jj}|jrL|dk	rL|jrL||jsL||j|||	dSr')
rrzrrrArr:rr_create_indexes)r.rrrXr@r@rCrs
zModel.create_tablecCsDg}|jjD]2}|jrqt|j|jt|tf}|r||q|Sr?)	rzrrrrrrQr r~)r.rrZrequires_indexr@r@rC_fields_to_indexszModel._fields_to_indexcCs"tdd|D|jjpdS)NcSsg|]}|f|jfqSr@)rrr@r@rCrsz%Model._index_data.<locals>.<listcomp>r@)	itertoolschainrrzrrr@r@rC_index_data	s
zModel._index_datacCs(|D]\}}|jj|||qdSr?)rrzrr	)r.
field_listrar@r@rCrszModel._create_indexescCs(|D]\}}|jj|||qdSr?)rrzrr
)r.rrrar@r@rC
_drop_indexesszModel._drop_indexescsg}jj}jj}jjjr:|jr:|||j||	D]}||
|g|jqRjjrjjD].\}}fdd|D}||
||qdd|DS)Ncsg|]}jj|qSr@rrrr@rCr%sz Model.sqlall.<locals>.<listcomp>cSsg|]\}}|qSr@r@)rrirr@r@rCr's)
rzrrrrArr~rrrr	rr)r.ZqueriesrrXrrRrrr@rrCsqlallszModel.sqlallcCs|jj|||dSr?)rzrr)r.rrr@r@rCr)szModel.drop_tablecCs|jj|||dSr?)rzrr)r.rrr@r@rCr-szModel.truncate_tablecCs&|jjrt|jj|jjSt|jjSr?)rzrr rrr@r@rCr1szModel.as_entitycOst|f||Sr?)r)r.rrr@r@rCnoop7sz
Model.noopcCst||jjjSr?)rrzrrrr@r@rCrQ;szModel._get_pk_valuecCs|jjst||jjj|dSr?)rzrr+rrrr@r@rC
_set_pk_value?szModel._set_pk_valuecCs|jj|kSr?)rzrrQrr@r@rC_pk_exprDszModel._pk_exprcCs|j|dSr?)rclearrKrr@r@rCr3Gs
zModel._prepare_instancecCsdSr?r@rr@r@rCrKKszModel.preparedcCs,i}|D]}|j|kr||j||j<q|Sr?r)rAronlyZnew_datarr@r@rC
_prune_fieldsNs

zModel._prune_fieldscCsd|jjD]V}||jko8||ko8||dko8|j|dk	}|rt||t|||j|||<qdSr?)rzrPrr1rr+rr)rArrZ
conditionsr@r@rC_populate_unsaved_relationsUs

z!Model._populate_unsaved_relationsc	Cs(t|j}|jjdk	r(|jj}|}nd}}|rB|||}n,|jjrn|sn|||j}|sn|j	dS|
||dk	r|s|jjr|jD]}|
|dqn|
|jd|jf||}nJ|dkr|jf|d}n,|jf|}|dk	r|}||d}|j	|Sr)r`rrzrrQrrdirty_fieldsrrrrrRr#rrr5rr{rr)	rArrrZpk_fieldZpk_valueZpk_part_namerZpk_from_cursorr@r@rCr`s@







z
Model.savecCs
t|jSr?)r/rrr@r@rCis_dirtyszModel.is_dirtycsfddjjDS)Ncsg|]}|jjkr|qSr@)rrrrr@rCrsz&Model.dirty_fields.<locals>.<listcomp>)rzrrr@rrCrszModel.dirty_fieldsccst|}||}t||fg}t}|r|\}}||krHq.|||jj	D]r\}}|j
}	|j|kr||j|j
jk}
|	|
}n||>}
|	|
}|jr|r||	|f|
|fVq^q.dSr?)rr4r5rrr#ryrzr{rfr}rrrrrr~)rAZsearch_nullabler}rrArklassZrel_namerrr&subqueryr@r@rCdependenciess&


zModel.dependenciescCsz|rd||}tt|D]H\}}|j}|jrP|sP|jf|jdi|q|	|q|	|
Sr?)rrrr}rrrr5r{rr)rA	recursiveZdelete_nullablerrrrr@r@rCdelete_instances

zModel.delete_instancecCst|j|fSr?)rrrQrr@r@rCrszModel.__hash__cCs(|j|jko&|dk	o&||kSr?)rrQrArZr@r@rCrFs

zModel.__eq__cCs
||kSr?r@rr@r@rCrGszModel.__ne__)N)N)T)F)F)FF)FF)FN)F)FF)/rErFrGrrRr6r4rrrrrrrrrrrnrrrrrrrrrrrrQZget_idrZset_idrr3rKrrrrrrrrrrFrGr@r@r@rCr*|s



















%


cCs|}d|_|_|Sr?)rrr)rr@r@rCclean_prefetch_subquerysrcst|g}t|D]\}}t|tr0|\}}nd}t|tsPt|trP|}|jd}}t	t
|dD]~}||}	|	j}
|	jj
jdd}|rfdd|D}fdd|D}nj
jdd}|s|rn|ks|dkrnqqn|s|s|rd|nd}
td	||
f|rht|
ttjfd
dt||D}||}|t||dq|rt|
ttjfdd|D}||}|t||dq|S)
NrT)rcsg|]}t|jqSr@)rrrr)subquery_modelr@rCrsz)prefetch_add_subquery.<locals>.<listcomp>csg|]}t|jjqSr@)rrrr)
last_modelr@rCrsz	 using %srz1Error: unable to find foreign key for query: %s%scsg|]\}}||>qSr@)r4)rrrXcleanedr@rCrsFcsg|]}|j|>qSr@)rr4)rrHrr@rCrs)PrefetchResultrrQrVrYr:r*r4r}rrrrrzrr
rrPrXrgrWr5r~)r
subqueries
fixed_queriesrrZtarget_modelZfksrr_prefetch_resultZ
last_queryZrelsr{Ztgt_errexprr@)rrrrCprefetch_add_subquerysZ




r__prefetched)rrrH
rel_models
field_to_namercs.eZdZdfdd	ZddZddZZS)	rNc	sr|rP|r&dd|D}dd|D}ndd|D}dd|D}tt||}|j}tt||||||||S)NcSsg|]
}|jqSr@r?rr@r@rCrsz*PrefetchResult.__new__.<locals>.<listcomp>cSsg|]}|jjqSr@)rrrr@r@rCrscSsg|]
}|jqSr@rGrr@r@rCrscSsg|]
}|jqSr@rrr@r@rCrs)rrWr}rrr)r.rrrHrrrZforeign_key_attrsrr@rCrs"
zPrefetchResult.__new__c
Cs|jrB|jD]2}|j|j}||f}||krt||j||qn^|jD]V\}}|j|jj}||f}||g}d|j}|D]}	t|	||qt|||qHdS)Nz%s_prefetch)	rHrrrr+rrrrA)
rAr#id_maprZ
identifierrattnameZ
rel_instancesrr2r@r@rCpopulate_instances

z PrefetchResult.populate_instancecCsX|jD]L\}}|j|j|}||f}|jr8|||<q||g|||qdSr?)rrrrrHr&r~)rAr#rrrZidentityrr@r@rCstore_instances
zPrefetchResult.store_instance)NNNNN)rErFrGrrrrr@r@rrCrsrcGs|s|St||}i}i}t|D]}|j}|jrX|jD]}||g|||q8i||<||}t||}	|j	D]:}
|jr|
|
||	r|||D]}||
||jqq|q"|j	Sr?)rrrrrr&r~r/rrrr)rrrZdepsZrel_maprZquery_modelrrZ
has_relationsr#rPr@r@rCr0s*


cKst|D]}|jf|qdS)z8Create tables for all given models (in the right order).N)rqr)rZcreate_table_kwargsrr@r@rCr<;sr<cKs"tt|D]}|jf|qdS)z6Drop tables for all given models (in the right order).N)rrqr)rZdrop_table_kwargsrr@r@rCrC@srC)N)N)r)r)rurrrZloggingrXrrbrrrr8ZbisectrrcollectionsrrrImportErrorr`rr	functoolsr	inspectr
__version____all__r>ZHandlerZ	getLoggerrZ
addHandlerrHobjectrKversion_infoZPY2rrbuiltinsrOrPrFrrrWrrrrerrr,r`ZunicodebufferexecRuntimeErrorrirlZ	pysqlite2rmZpysq3rTrgZpsycopg2cffirnregisterrnrorpZMySQLdbrZpymysqlZplayhouse._speedupsrprqrrrrrrZregister_adapterrrZDATETIME_PARTSrrrrrrrrrrEr&rr(rr)rr'rrrrrrrrrrrrrrrrrprrrr3rrr%r7r4r rorr>r.rrrrr=rrrrrrrrr"rr5r1rrrrrrrr8r
r<rrrrr9r:rr0r3r6r rr\rhr
rrr+r/r2r5r6rMrOrYrrrrrrrrrrrrrrr!rrr#r$r%r,r-r2rrZlocalrrr6r/r+rr$r;r0rr-rerrrrrrrr*rrrrr0r<rCr@r@r@rC<module>s
8






	"

%	
M{&	9" R'


4/0	
(<'	<u`'#
!&h@2+

Back to Directory File Manager