Ë
    ¦#ij×;  ã                   ó²   — d dl Z d dlmZmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZmZmZmZmZ d dlmZ d dlmZ d d	lmZ d d
lmZ ed„ «       Z G d„ de«      Zy)é    N)Ú	lru_cacheÚpartial)Úsettings)ÚBaseDatabaseOperations)ÚInsertUnnest)ÚInetÚJsonbÚerrorsÚis_psycopg3Úmogrify©Úsplit_tzname_delta)Ú
OnConflict)ÚCast)Ú_lazy_re_compilec                 ó\   — | €t         j                  S t        t         j                  | ¬«      S )N)Úcls)ÚjsonÚdumpsr   )Úencoders    úb/var/www/html/office/venv/lib/python3.12/site-packages/django/db/backends/postgresql/operations.pyÚget_json_dumpsr      s"   € à€Ü�z‰zÐÜ”4—:‘: 7Ô+Ð+ó    c                   óþ  ‡ — e Zd ZdZdZdZ eg d¢«      ZddddœZe	rKd	d
l
mZ ej                  ej                  ej                  ej                  ej                  ej                  dœZd„ Z ed«      Zd„ Zd5d„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd5d„Zd„ Zˆ fd„Zd5d„Zd„ Z d„ Z!d„ Z"d„ Z#d„ Z$d d d!œd"„Z%d#„ Z&d6d$„Z'd%„ Z(d&„ Z)d'„ Z*d(„ Z+e	rd)„ Z,nd*„ Z,e	rd+„ Z-d,„ Z.d-„ Z/d.„ Z0d/„ Z1d0„ Z2ˆ fd1„Z3d5ˆ fd2„	Z4ˆ fd3„Z5ˆ fd4„Z6ˆ xZ7S )7ÚDatabaseOperationsz&django.db.backends.postgresql.compilerÚvarcharÚEXPLAIN)ÚANALYZEÚBUFFERSÚCOSTSÚGENERIC_PLANÚMEMORYÚSETTINGSÚ	SERIALIZEÚSUMMARYÚTIMINGÚVERBOSEÚWALÚintegerÚbigintÚsmallint)Ú	AutoFieldÚBigAutoFieldÚSmallAutoFieldr   )Únumeric)ÚSmallIntegerFieldÚIntegerFieldÚBigIntegerFieldÚPositiveSmallIntegerFieldÚPositiveIntegerFieldÚPositiveBigIntegerFieldc                 óŒ   — |j                  «       }|dv r0d|j                  | j                  «      j                  d«      d   z  S y)N)ÚGenericIPAddressFieldÚIPAddressFieldÚ	TimeFieldÚ	UUIDFieldzCAST(%%s AS %s)ú(r   ú%s)Úget_internal_typeÚdb_typeÚ
connectionÚsplit)ÚselfÚoutput_fieldÚinternal_types      r   Úunification_cast_sqlz'DatabaseOperations.unification_cast_sql@   sR   € Ø$×6Ñ6Ó8ˆØð 
ñ 
ð " L×$8Ñ$8¸¿¹Ó$I×$OÑ$OÐPSÓ$TÐUVÑ$WÑWðð r   z[A-Z_]+c                 óØ   — |dk(  rd|› d�|fS |dk(  rd|› d�|fS |dk(  rd|› d�|fS |j                  «       }| j                  j                  |«      st        d	|›�«      ‚d
|› d|› d�|fS )NÚweek_dayzEXTRACT(DOW FROM z) + 1Úiso_week_dayzEXTRACT(ISODOW FROM ú)Úiso_yearzEXTRACT(ISOYEAR FROM zInvalid lookup type: zEXTRACT(z FROM )ÚupperÚ_extract_format_reÚ	fullmatchÚ
ValueError©rA   Úlookup_typeÚsqlÚparamss       r   Údate_extract_sqlz#DatabaseOperations.date_extract_sqlW   s¥   € à˜*Ò$à& s e¨5Ð1°6Ð9Ð9Ø˜NÒ*Ø)¨#¨¨aÐ0°&Ð8Ð8Ø˜JÒ&Ø*¨3¨%¨qÐ1°6Ð9Ð9à!×'Ñ'Ó)ˆØ×&Ñ&×0Ñ0°Ô=ÜÐ4°[°OÐDÓEÐEØ˜+˜ f¨S¨E°Ð3°VÐ;Ð;r   c                 óF   — | j                  |||«      \  }}d|› d�|g|¢­fS ©NúDATE_TRUNC(%s, rH   ©Ú_convert_sql_to_tz©rA   rO   rP   rQ   Útznames        r   Údate_trunc_sqlz!DatabaseOperations.date_trunc_sqlf   ó6   € Ø×-Ñ-¨c°6¸6ÓB‰ˆˆVà    QÐ'¨+Ð)?¸Ñ)?Ð?Ð?r   c                 óJ   — t        |«      \  }}}|r|dk(  rdnd}|› |› |› �S |S )Nú+ú-r   )rA   rY   ÚsignÚoffsets       r   Ú_prepare_tzname_deltaz(DatabaseOperations._prepare_tzname_deltak   s;   € Ü1°&Ó9Ñˆ��fÙØ #š+‘3¨3ˆDØ�X˜d˜V F 8Ð,Ð,Øˆr   c                 óh   — |r-t         j                  r| j                  |«      }|› d�g |¢|‘­fS ||fS )Nz AT TIME ZONE %s)r   ÚUSE_TZra   )rA   rP   rQ   rY   Útzname_params        r   rW   z%DatabaseOperations._convert_sql_to_tzr   sC   € Ù”h—o’oØ×5Ñ5°fÓ=ˆLØ�UÐ*Ð+Ð-D¨vÐ-D°|Ñ-DÐDÐDØ�Fˆ{Ðr   c                 ó>   — | j                  |||«      \  }}d|› d�|fS )Nr;   z)::daterV   ©rA   rP   rQ   rY   s       r   Údatetime_cast_date_sqlz)DatabaseOperations.datetime_cast_date_sqlx   ó.   € Ø×-Ñ-¨c°6¸6ÓB‰ˆˆVØ�3�%�wÐ Ð'Ð'r   c                 ó>   — | j                  |||«      \  }}d|› d�|fS )Nr;   ú)::timerV   rf   s       r   Údatetime_cast_time_sqlz)DatabaseOperations.datetime_cast_time_sql|   rh   r   c                 óv   — | j                  |||«      \  }}|dk(  rd|› d�dg|¢­fS | j                  |||«      S ©NÚsecondz#EXTRACT(SECOND FROM DATE_TRUNC(%s, ú)))rW   rR   rX   s        r   Údatetime_extract_sqlz'DatabaseOperations.datetime_extract_sql€   sS   € Ø×-Ñ-¨c°6¸6ÓB‰ˆˆVØ˜(Ò"à8¸¸¸RÐ@À8ÐBUÈfÑBUÐUÐUØ×$Ñ$ [°#°vÓ>Ð>r   c                 óF   — | j                  |||«      \  }}d|› d�|g|¢­fS rT   rV   rX   s        r   Údatetime_trunc_sqlz%DatabaseOperations.datetime_trunc_sql‡   r[   r   c                 óJ   — |dk(  rd|› d�dg|¢­fS | j                  |||«      S rm   )rR   rN   s       r   Útime_extract_sqlz#DatabaseOperations.time_extract_sqlŒ   s;   € Ø˜(Ò"à8¸¸¸RÐ@À8ÐBUÈfÑBUÐUÐUØ×$Ñ$ [°#°vÓ>Ð>r   c                 óF   — | j                  |||«      \  }}d|› d�|g|¢­fS )NrU   rj   rV   rX   s        r   Útime_trunc_sqlz!DatabaseOperations.time_trunc_sql’   s6   € Ø×-Ñ-¨c°6¸6ÓB‰ˆˆVØ    WÐ-°Ð/E¸fÑ/EÐEÐEr   c                  ó   — y)Nz DEFERRABLE INITIALLY DEFERRED© ©rA   s    r   Údeferrable_sqlz!DatabaseOperations.deferrable_sql–   s   € Ø/r   c                 óN   •— t        |t        «      rd|› �S t        ‰| �  ||«      S )NzSELECT * FROM )Ú
isinstancer   ÚsuperÚbulk_insert_sql)rA   ÚfieldsÚplaceholder_rowsÚ	__class__s      €r   r~   z"DatabaseOperations.bulk_insert_sql™   s0   ø€ ÜÐ&¬Ô5Ø#Ð$4Ð#5Ð6Ð6Ü‰wÑ& vÐ/?Ó@Ð@r   c                 ó6   — d}|dv r	|dv rd}nd}|dv rd|z  }|S )Nr<   )	ÚiexactÚcontainsÚ	icontainsÚ
startswithÚistartswithÚendswithÚ	iendswithÚregexÚiregex)r8   r7   zHOST(%s)z%s::text)rƒ   r…   r‡   r‰   z	UPPER(%s)rx   )rA   rO   rC   Úlookups       r   Úlookup_castzDatabaseOperations.lookup_castž   sC   € Øˆàð 

ñ 

ð Ð KÑKØ#‘à#�ð ÐMÑMØ  6Ñ)ˆFàˆr   c                  ó   — y ©Nrx   ry   s    r   Úno_limit_valuez!DatabaseOperations.no_limit_value·   s   € Ør   c                 ó   — |gS r�   rx   )rA   rP   s     r   Úprepare_sql_scriptz%DatabaseOperations.prepare_sql_scriptº   s	   € Øˆuˆr   c                 óT   — |j                  d«      r|j                  d«      r|S d|z  S )Nú"z"%s")r†   rˆ   )rA   Únames     r   Ú
quote_namezDatabaseOperations.quote_name½   s(   € Ø�?‰?˜3Ô D§M¡M°#Ô$6ØˆKØ˜‰}Ðr   c                 ó0   — t        ||| j                  «      S r�   )r   r?   )rA   rP   rQ   s      r   Úcompose_sqlzDatabaseOperations.compose_sqlÂ   s   € Ü�s˜F D§O¡OÓ4Ð4r   c                  ó   — y)Nz(SELECT set_config('TimeZone', %s, false)rx   ry   s    r   Úset_time_zone_sqlz$DatabaseOperations.set_time_zone_sqlÅ   s   € Ø9r   F)Úreset_sequencesÚallow_cascadec                ó  ‡ ‡— |sg S ‰j                  d«      dj                  ˆ ˆfd„|D «       «      g}|r |j                  ‰j                  d«      «       |r |j                  ‰j                  d«      «       ddj                  |«      z  gS )NÚTRUNCATEú, c              3   ó^   •K  — | ]$  }‰j                  ‰j                  |«      «      –— Œ& y ­wr�   )Ú	SQL_FIELDr–   )Ú.0ÚtablerA   Ústyles     €€r   ú	<genexpr>z/DatabaseOperations.sql_flush.<locals>.<genexpr>Ð   s#   øè ø€ ÒRÀ%�e—o‘o d§o¡o°eÓ&<×=ÑRùs   ƒ*-zRESTART IDENTITYÚCASCADEz%s;ú )ÚSQL_KEYWORDÚjoinÚappend)rA   r¤   Útablesr›   rœ   Ú	sql_partss   ``    r   Ú	sql_flushzDatabaseOperations.sql_flushÈ   s†   ù€ ÙØˆIð
 ×Ñ˜jÓ)Ø�I‰IÔRÈ6ÔRÓRð
ˆ	ñ Ø×Ñ˜U×.Ñ.Ð/AÓBÔCÙØ×Ñ˜U×.Ñ.¨yÓ9Ô:Ø˜Ÿ™ Ó+Ñ+Ð,Ð,r   c           
      óà   — g }|D ]f  }|d   }|d   xs d}|j                  |j                  d«      ›d|j                  | j                  |«      «      ›d|j	                  |«      ›d�«       Œh |S )Nr£   ÚcolumnÚidÚSELECTú  setval(pg_get_serial_sequence('ú','z'), 1, false);)rª   r¨   Ú	SQL_TABLEr–   r¡   )rA   r¤   Ú	sequencesrP   Úsequence_infoÚ
table_nameÚcolumn_names          r   Úsequence_reset_by_name_sqlz-DatabaseOperations.sequence_reset_by_name_sqlØ   s|   € ð ˆØ&ò 	ˆMØ& wÑ/ˆJð (¨Ñ1Ò9°TˆKØ�J‰Jð ×%Ñ% hÕ/Ø—O‘O D§O¡O°JÓ$?Õ@Ø—O‘O KÕ0ð	õð	ð ˆ
r   c                 óV   — |rd| j                  |«      z  S d| j                  |«      z  S )NzUSING INDEX TABLESPACE %szTABLESPACE %s)r–   )rA   Ú
tablespaceÚinlines      r   Útablespace_sqlz!DatabaseOperations.tablespace_sqlë   s-   € ÙØ.°·±ÀÓ1LÑLÐLà" T§_¡_°ZÓ%@Ñ@Ð@r   c                 ó¨  — ddl m} g }| j                  }|D �]7  }|j                  j                  D �]  }t        ||j                  «      sŒ|j                  |j                  d«      ›d|j                   ||j                  j                  «      «      ›d|j                  |j                  «      ›d|j                   ||j                  «      «      ›d|j                   ||j                  «      «      ›d|j                  d	«      ›d
|j                  d«      ›d|j                   ||j                  j                  «      «      ›d�«        �Œ7 �Œ: |S )Nr   )Úmodelsr±   r²   r³   z'), coalesce(max(z), 1), max(z) zIS NOTz null) ÚFROMr§   ú;)Ú	django.dbr¿   r–   Ú_metaÚlocal_fieldsr|   r,   rª   r¨   r´   Údb_tabler¡   r¯   )rA   r¤   Ú
model_listr¿   ÚoutputÚqnÚmodelÚfs           r   Úsequence_reset_sqlz%DatabaseOperations.sequence_reset_sqlñ   s  € Ý$àˆØ�_‰_ˆØó 	ˆEð —[‘[×-Ñ-ó �Ü˜a ×!1Ñ!1Õ2Ø—M‘Mð "×-Ñ-¨hÕ7Ø!ŸO™O©B¨u¯{©{×/CÑ/CÓ,DÕEØ!ŸO™O¨A¯H©HÕ5Ø!ŸO™O©B¨q¯x©x«LÕ9Ø!ŸO™O©B¨q¯x©x«LÕ9Ø!×-Ñ-¨hÕ7Ø!×-Ñ-¨fÕ5Ø!ŸO™O©B¨u¯{©{×/CÑ/CÓ,DÕEðôò  ò%ð	ð6 ˆr   c                 ó   — |S r�   rx   )rA   Úxs     r   Úprep_for_iexact_queryz(DatabaseOperations.prep_for_iexact_query  s   € Øˆr   c                  ó   — y)a–  
        Return the maximum length of an identifier.

        The maximum length of an identifier is 63 by default, but can be
        changed by recompiling PostgreSQL after editing the NAMEDATALEN
        macro in src/include/pg_config_manual.h.

        This implementation returns 63, but can be overridden by a custom
        database backend that inherits most of its behavior from this one.
        é?   rx   ry   s    r   Úmax_name_lengthz"DatabaseOperations.max_name_length  s   € ð r   c                 óz   — |r/|D ��cg c]  }|D ]  }|‘Œ Œ }}}ddj                  |«      z  g|fS dgg fS c c}}w )NzDISTINCT ON (%s)rŸ   ÚDISTINCT)r©   )rA   r   rQ   Ú
param_listÚparams        r   Údistinct_sqlzDatabaseOperations.distinct_sql#  sS   € ÙØ.4×M 
À*ÒM¸’eÐM�eÐMˆFÑMØ'¨$¯)©)°FÓ*;Ñ;Ð<¸fÐEÐEà�< Ð#Ð#ùó Ns   ˆ7c                 ó(  — | j                   j                  j                  r	 | j                  ||«      S |j                  r:|j                  j                  �$|j                  j                  j                  «       S y # t        j
                  $ r Y y w xY wr�   )	r?   ÚfeaturesÚuses_server_side_bindingr˜   r
   Ú	DataErrorÚ_queryÚqueryÚdecode©rA   ÚcursorrP   rQ   s       r   Úlast_executed_queryz&DatabaseOperations.last_executed_query,  s{   € Ø�‰×'Ñ'×@Ò@ð Ø×+Ñ+¨C°Ó8Ð8ð —=’= V§]¡]×%8Ñ%8Ð%DØ!Ÿ=™=×.Ñ.×5Ñ5Ó7Ð7Øøô ×'Ñ'ò  Ùð ús   ¢A; Á;BÂBc                 óP   — |j                   �|j                   j                  «       S y r�   )rÜ   rÝ   rÞ   s       r   rà   z&DatabaseOperations.last_executed_query9  s$   € ð �|‰|Ð'Ø—|‘|×*Ñ*Ó,Ð,Ør   c                 óL   — |�t        |d«      r|S  | j                  |   |«      S )NÚresolve_expression)ÚhasattrÚintegerfield_type_map)rA   ÚvaluerC   s      r   Úadapt_integerfield_valuez+DatabaseOperations.adapt_integerfield_valueB  s.   € Øˆ}¤¨Ð/CÔ DØ�Ø<�4×-Ñ-¨mÑ<¸UÓCÐCr   c                 ó   — |S r�   rx   ©rA   ræ   s     r   Úadapt_datefield_valuez(DatabaseOperations.adapt_datefield_valueG  ó   € Øˆr   c                 ó   — |S r�   rx   ré   s     r   Úadapt_datetimefield_valuez,DatabaseOperations.adapt_datetimefield_valueJ  rë   r   c                 ó   — |S r�   rx   ré   s     r   Úadapt_timefield_valuez(DatabaseOperations.adapt_timefield_valueM  rë   r   c                 ó   — |rt        |«      S y r�   )r   ré   s     r   Úadapt_ipaddressfield_valuez-DatabaseOperations.adapt_ipaddressfield_valueP  s   € ÙÜ˜“;ÐØr   c                 ó.   — t        |t        |«      ¬«      S )N)r   )r	   r   )rA   ræ   r   s      r   Úadapt_json_valuez#DatabaseOperations.adapt_json_valueU  s   € Ü�U¤.°Ó"9Ô:Ð:r   c                 óh   •— |dk(  r|\  }}|\  }}g |¢|¢­}d|›d|›d�|fS t         ‰	| �  |||«      S )NÚ	DateFieldz(interval '1 day' * (z - ro   )r}   Úsubtract_temporals)
rA   rC   ÚlhsÚrhsÚlhs_sqlÚ
lhs_paramsÚrhs_sqlÚ
rhs_paramsrQ   r�   s
            €r   rö   z%DatabaseOperations.subtract_temporalsX  sR   ø€ Ø˜KÒ'Ø"%ÑˆG�ZØ"%ÑˆG�ZØ/�zÐ/ JÑ/‰FÚ7>ÂÐHÈ&ÐPÐPÜ‰wÑ)¨-¸¸cÓBÐBr   c                 óØ  •— i }|j                  dd «      x}r%|j                  «       dv r|j                  «       |d<   |r`|j                  «       D ��ci c]  \  }}|j                  «       |rdnd“Œ }}}| j                  D ]  }|j                  |d «      }|€Œ|||<   Œ t	        ‰	| �  |fi |¤Ž}|r||d<   |r,|ddj                  d	„ |j                  «       D «       «      z  z  }|S c c}}w )
NÚ	serialize>   ÚTEXTÚBINARYr$   ÚtrueÚfalseÚFORMATz (%s)rŸ   c              3   ó&   K  — | ]	  }d |z  –— Œ y­w)z%s %sNrx   )r¢   Úis     r   r¥   z:DatabaseOperations.explain_query_prefix.<locals>.<genexpr>s  s   è ø€ Ò)M¸!¨'°A­+Ñ)Mùs   ‚)ÚpoprJ   ÚitemsÚexplain_optionsr}   Úexplain_query_prefixr©   )
rA   ÚformatÚoptionsÚextrarþ   r•   ræ   Úvalid_optionÚprefixr�   s
            €r   r	  z'DatabaseOperations.explain_query_prefix`  s  ø€ ØˆØŸ™ K°Ó6Ð6ˆ9Ð6Ø�‰Ó Ð$6Ñ6Ø%.§_¡_Ó%6��kÑ"áð $+§=¡=£?÷á�D˜%ð —
‘
“©™f°7Ñ:ðˆGñ ð !%× 4Ñ 4ò 0�ØŸ™ L°$Ó7�ØÑ$Ø*/�E˜,Ò'ð0ô ‘Ñ-¨fÑ@¸Ñ@ˆÙØ$ˆE�(‰OÙØ�g §	¡	Ñ)M¸u¿{¹{»}Ô)MÓ MÑMÑMˆFØˆùós   ÁC&c                 óB  •— |t         j                  k(  ry|t         j                  k(  raddj                  t	        | j
                  |«      «      ›ddj                  t	        | j
                  |«      D �cg c]	  }|› d|› �‘Œ c}«      ›�S t        ‰| �  ||||«      S c c}w )NzON CONFLICT DO NOTHINGzON CONFLICT(rŸ   z) DO UPDATE SET z = EXCLUDED.)r   ÚIGNOREÚUPDATEr©   Úmapr–   r}   Úon_conflict_suffix_sql)rA   r   Úon_conflictÚupdate_fieldsÚunique_fieldsÚfieldr�   s         €r   r  z)DatabaseOperations.on_conflict_suffix_sqlv  s¢   ø€ Øœ*×+Ñ+Ò+Ø+Øœ*×+Ñ+Ó+à—	‘	œ#˜dŸo™o¨}Ó=Õ>Ø—	‘	ô &)¨¯©¸-Ó%Höà!ð !˜' ¨e¨WÒ5òôðð ô ‰wÑ-ØØØØó	
ð 	
ùòs   Á3Bc                 ó¼   •— t         ‰| �  ||||«      \  }}|j                  | j                  «      |j                  | j                  «      k7  rt	        ||«      }||fS r�   )r}   Úprepare_join_on_clauser>   r?   r   )rA   Ú	lhs_tableÚ	lhs_fieldÚ	rhs_tableÚ	rhs_fieldÚlhs_exprÚrhs_exprr�   s          €r   r  z)DatabaseOperations.prepare_join_on_clauseŠ  s_   ø€ Ü"™WÑ;Ø�y )¨Yó
Ñˆ�(ð ×Ñ˜TŸ_™_Ó-°×1BÑ1BÀ4Ç?Á?Ó1SÒSÜ˜H iÓ0ˆHà˜Ð!Ð!r   r�   )F)8Ú__name__Ú
__module__Ú__qualname__Úcompiler_moduleÚ"cast_char_field_without_max_lengthÚexplain_prefixÚ	frozensetr  Úcast_data_typesr   Úpsycopg.typesr/   ÚInt2ÚInt4ÚInt8rå   rD   r   rK   rR   rZ   ra   rW   rg   rk   rp   rr   rt   rv   rz   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  Ú__classcell__)r�   s   @r   r   r      sZ  ø„ Ø>€OØ)2Ð&Ø€NÙò	
ó€Oð  Ø Ø$ñ€Oñ Ý)ð ")§¡Ø#ŸL™LØ&Ÿ|™|Ø)0¯©Ø$+§L¡LØ'.§|¡|ñ!
Ðòñ* *¨*Ó5Ðò<ó@ò
òò(ò(ò?ò@ò
?óFò0ôAó
ò2òòò
5ò:ð ;@Èuô -ò ó&Aò òDòò$ñ ó		ò	ñ ò	Dò
òòòò
;ôCõô,
÷("ð "r   r   )r   Ú	functoolsr   r   Údjango.confr   Ú"django.db.backends.base.operationsr   Ú&django.db.backends.postgresql.compilerr   Ú)django.db.backends.postgresql.psycopg_anyr   r	   r
   r   r   Údjango.db.backends.utilsr   Údjango.db.models.constantsr   Údjango.db.models.functionsr   Údjango.utils.regex_helperr   r   r   rx   r   r   ú<module>r6     sO   ðÛ ß (å  Ý EÝ ?÷õ õ 8Ý 1Ý +Ý 6ð ñ,ó ð,ôw"Ð/õ w"r   