o 3a @sddlmZddlmZmZddlmZgdZGdddeZGdddeZ Gd d d eZ Gd d d eZ Gd ddeZ GdddeZ GdddeZGdddeZGdddeZdS))NotSupportedError)FuncIndex)cached_property) BloomIndex BrinIndex BTreeIndexGinIndex GistIndex HashIndex SpGistIndexcs:eZdZeddZd fdd ZddZdd ZZS) PostgresIndexcCstjttjt|jSN)rmax_name_lengthlensuffixselfrA/usr/lib/python3/dist-packages/django/contrib/postgres/indexes.pyr szPostgresIndex.max_name_lengthc sX||tj||fdd|ji|}|}|r*dd||jdf|jd<|S)Nusingz USING %sz WITH (%s) %sz, extra)check_supportedsuper create_sqlrget_with_paramsjoinparts)rmodel schema_editorrkwargs statement with_params __class__rrrs   zPostgresIndex.create_sqlcCsdSrrrr rrrr zPostgresIndex.check_supportedcCsgSrrrrrrr#r'zPostgresIndex.get_with_params)r) __name__ __module__ __qualname__rrrrr __classcell__rrr$rr s   r cs<eZdZdZdddfdd ZfddZd d ZZS) rbloomNr)lengthcolumnscstj|i|t|jdkrtdt|ttfstdt|t|jkr,tdtdd|Ds9td|durOd|krJd ksOtd td ||_ ||_ dS) N z-Bloom indexes support a maximum of 32 fields.z+BloomIndex.columns must be a list or tuple.z7BloomIndex.columns cannot have more values than fields.css(|]}d|ko dknVqdS)riNr).0colrrr 4s&z&BloomIndex.__init__..z8BloomIndex.columns must contain integers from 1 to 4095.rizt\}}}|jdur|j|d<|jr|j|d<|||fS)Nr-r.)r deconstructr-r.rpathargsr!r$rrr;?s     zBloomIndex.deconstructcCsFg}|jdur|d|j|jr!|ddt|jddD|S)Nz length = %dcss |] \}}d||fVqdS)z col%d = %dNr)r0ivrrrr2Ls  z-BloomIndex.get_with_params..)start)r-appendr.extend enumeraterr#rrrrGs   zBloomIndex.get_with_paramsr(r)r*rr3r;rr+rrr$rr's  rcDeZdZdZdddfdd ZfddZdd Zd d ZZS) rbrinN) autosummarizepages_per_rangecs:|dur |dkr td||_||_tj|i|dS)Nrz2pages_per_range must be None or a positive integer)r5rJrKrr3)rrJrKr:r!r$rrr3Vs zBrinIndex.__init__cBt\}}}|jdur|j|d<|jdur|j|d<|||fS)NrJrK)rr;rJrKr<r$rrr;]      zBrinIndex.deconstructcC |jr |jjjstddSdS)Nz2BRIN option autosummarize requires PostgreSQL 10+.)rJ connectionfeatureshas_brin_autosummarizerr&rrrrezBrinIndex.check_supportedcCDg}|jdur|d|jrdnd|jdur |d|j|S)Nzautosummarize = %sonoffzpages_per_range = %d)rJrCrKrFrrrri   zBrinIndex.get_with_params) r(r)r*rr3r;rrr+rrr$rrSs  rc:eZdZdZddfdd ZfddZdd ZZS) rbtreeN fillfactorc||_tj|i|dSrrZrr3rrZr:r!r$rrr3uzBTreeIndex.__init__c.t\}}}|jdur|j|d<|||fSNrZrr;rZr<r$rrr;y   zBTreeIndex.deconstructcC"g}|jdur|d|j|SNfillfactor = %drZrCrFrrrr zBTreeIndex.get_with_paramsrGrrr$rrr  rcs<eZdZdZdddfdd ZfddZdd ZZS) r ginN) fastupdategin_pending_list_limitc"||_||_tj|i|dSr)rjrkrr3)rrjrkr:r!r$rrr3zGinIndex.__init__crL)Nrjrk)rr;rjrkr<r$rrr;rMzGinIndex.deconstructcCsDg}|jdur|d|j|jdur |d|jrdnd|S)Nzgin_pending_list_limit = %dzfastupdate = %srTrU)rkrCrjrFrrrrs   zGinIndex.get_with_paramsrGrrr$rr s  r crH) r gistN) bufferingrZcrlr)rorZrr3)rrorZr:r!r$rrr3rmzGistIndex.__init__crL)NrorZ)rr;rorZr<r$rrr;rMzGistIndex.deconstructcCrS)Nzbuffering = %srTrUre)rorCrZrFrrrrrVzGistIndex.get_with_paramscCrN)Nz.Covering GiST indexes requires PostgreSQL 12+.)includerOrPsupports_covering_gist_indexesrr&rrrrrRzGistIndex.check_supported) r(r)r*rr3r;rrr+rrr$rr s  r crW) r hashNrYcr[rr\r]r$rrr3r^zHashIndex.__init__cr_r`rar<r$rrr;rbzHashIndex.deconstructcCrcrdrfrFrrrrrgzHashIndex.get_with_paramsrGrrr$rr rhr crW) r spgistNrYcr[rr\r]r$rrr3r^zSpGistIndex.__init__cr_r`rar<r$rrr;rbzSpGistIndex.deconstructcCrcrdrfrFrrrrrgzSpGistIndex.get_with_paramsrGrrr$rr rhr cs eZdZdZfddZZS)OpClassz%(expressions)s %(name)scstj||ddS)N)name)rr3)r expressionrur$rrr3szOpClass.__init__)r(r)r*templater3r+rrr$rrtsrtN) django.dbrdjango.db.modelsrrdjango.utils.functionalr__all__r rrrr r r r rtrrrrs  ,