
    j>                     |   S SK r S SKrS SKrS SKrS SKJr  S SKJr  S SKJ	r	  S SK
Jr  S SKJrJrJr  S SKJr  S SKJr  S S	KJr  S S
KJr  S SKJrJrJr  S SKJr  SSKJr  \R@                  \RB                  \RD                  \RF                  4r$\RJ                  \RL                  \RN                  4r( " S S\5      r)g)    N)	lru_cache)chain)settings)
FieldError)DatabaseErrorNotSupportedErrormodels)BaseDatabaseOperations)
OnConflict)Col)timezone)
parse_dateparse_datetime
parse_time)cached_property   )Databasec                   n  ^  \ rS rSrSrSSS.rSr\" / SQ5      rS r	S r
S	 rS0S
 jrS0S jrS rS rS rS rS rS rS rS rS rS rS rS r\S 5       rSSS.S jrS rS rS rU 4S jr S  r!S! r"S" r#\$S# 5       r%S$ r&S% r'S& r(U 4S' jr)S( r*S) r+S* r,S0U 4S+ jjr-U 4S, jr.S- r/U 4S. jr0S/r1U =r2$ )1DatabaseOperations   textTEXT)	DateFieldDateTimeFieldzEXPLAIN QUERY PLAN)nullfalsetruec                    [        U[        5      (       a^  UR                  5        HJ  n UR                  n[        U[        5      (       a%  UR
                  R                  n[        SU S35      eML     [        U[        R                  5      (       a7  UR                  (       a%  [        UR                  5      S:  a  [        S5      eg g g ! [        [        4 a     M  f = f)NzSQLite does not support z9 on date or time fields, because they are stored as text.r   zTSQLite doesn't support DISTINCT on aggregate functions accepting multiple arguments.)
isinstanceUNSUPPORTED_DATETIME_AGGREGATESget_source_expressionsoutput_fieldDATETIME_FIELDS	__class____name__r   AttributeErrorr   r	   	Aggregatedistinctlensource_expressions)self
expressionexprr"   klasss        ]/var/www/html/KUNJ/venv/lib/python3.13/site-packages/django/db/backends/sqlite3/operations.pycheck_expression_support+DatabaseOperations.check_expression_support(   s    j"ABB"99;#'#4#4L ",@@ * 4 4 = =/6ug >G G  A < z6#3#344##J112Q6#0  7 $ 5 '
3  s   CCCc                 6    SU S3UR                  5       /UQ74$ )z
Support EXTRACT with a user-defined function django_date_extract()
that's registered in connect(). Use single quotes because this is a
string and could otherwise cause a collision with a field name.
zdjango_date_extract(%s, )lowerr+   lookup_typesqlparamss       r/   date_extract_sql#DatabaseOperations.date_extract_sqlB   s)     *#a0;3D3D3F2P2PPP    c                     U$ )z>Do nothing since formatting is handled in the custom function. )r+   r8   s     r/   format_for_duration_arithmetic1DatabaseOperations.format_for_duration_arithmeticJ   s    
r<   c                 X    SU S3UR                  5       /UQU R                  U5      Q74$ )Nzdjango_date_trunc(%s, 	, %s, %s)r5   _convert_tznames_to_sqlr+   r7   r8   r9   tznames        r/   date_trunc_sql!DatabaseOperations.date_trunc_sqlN   F    'uI69
9
 ))&19
 
 	
r<   c                 X    SU S3UR                  5       /UQU R                  U5      Q74$ )Nzdjango_time_trunc(%s, rB   rC   rE   s        r/   time_trunc_sql!DatabaseOperations.time_trunc_sqlU   rI   r<   c                 j    U(       a,  [         R                  (       a  XR                  R                  4$ g)N)NN)r   USE_TZ
connectiontimezone_name)r+   rF   s     r/   rD   *DatabaseOperations._convert_tznames_to_sql\   s!    hoo??8888r<   c                 :    SU S3/ UQU R                  U5      Q74$ )Nzdjango_datetime_cast_date(rB   rD   r+   r8   r9   rF   s       r/   datetime_cast_date_sql)DatabaseOperations.datetime_cast_date_sqla   8    +C5	: =
=
))&1=
 
 	
r<   c                 :    SU S3/ UQU R                  U5      Q74$ )Nzdjango_datetime_cast_time(rB   rS   rT   s       r/   datetime_cast_time_sql)DatabaseOperations.datetime_cast_time_sqlg   rW   r<   c                 X    SU S3UR                  5       /UQU R                  U5      Q74$ )Nzdjango_datetime_extract(%s, rB   rC   rE   s        r/   datetime_extract_sql'DatabaseOperations.datetime_extract_sqlm   sF    -cU)<?
?
 ))&1?
 
 	
r<   c                 X    SU S3UR                  5       /UQU R                  U5      Q74$ )Nzdjango_datetime_trunc(%s, rB   rC   rE   s        r/   datetime_trunc_sql%DatabaseOperations.datetime_trunc_sqlt   sF    +C5	:=
=
 ))&1=
 
 	
r<   c                 6    SU S3UR                  5       /UQ74$ )Nzdjango_time_extract(%s, r3   r4   r6   s       r/   time_extract_sql#DatabaseOperations.time_extract_sql{   s'    )#a0;3D3D3F2P2PPPr<   c                     g)NNULLr>   r+   s    r/   pk_default_value#DatabaseOperations.pk_default_value~   s    r<   c                 h   U R                   R                   nU R                   R                  R                  nUR                  [        R
                  5      n[        X45      n[        U5      U:  a:  Sn[        S[        U5      U5       H  nXXu-    nX`R                  U5      -  nM     U$ SSR                  S/[        U5      -  5      -   n	U R                   R                   R                  5       n
 U
R                  X5      R                  5       U
R                  5         $ ! U
R                  5         f = f)zF
Only for last_executed_query! Don't use this to execute SQL queries!
r>   r   zSELECT , zQUOTE(?))rO   featuresmax_query_paramsgetlimitsqlite3SQLITE_LIMIT_COLUMNminr)   range%_quote_params_for_last_executed_queryjoincursorexecutefetchoneclose)r+   r9   rO   variable_limitcolumn_limit
batch_sizeresultsindexchunkr8   rt   s              r/   rr   8DatabaseOperations._quote_params_for_last_executed_query   s     __//
11BB!**7+F+FG6
v;#Gq#f+z:u'9:EEeLL ; N$))ZL3v;$>?? ++224	>>#.779LLNFLLNs   0D D1c                     U(       ar  [        U[        [        45      (       a  U R                  U5      nX#-  $ [        UR	                  5       5      nU R                  U5      n[        [        X45      5      nX#-  $ U$ N)r   listtuplerr   valuesdictzip)r+   rt   r8   r9   r   s        r/   last_executed_query&DatabaseOperations.last_executed_query   sr    
 &4-00CCFK
 < v}}/CCFKc&12< Jr<   c                 h    UR                  S5      (       a  UR                  S5      (       a  U$ SU-  $ )N"z"%s")
startswithendswith)r+   names     r/   
quote_nameDatabaseOperations.quote_name   s.    ??3DMM#$6$6K}r<   c                     g)Nr>   rf   s    r/   no_limit_value!DatabaseOperations.no_limit_value   s    r<   c                     SnUSS4nU R                   R                  5        nUR                  X#5      nUR                  5        Vs/ s H  ofS   PM	     snsS S S 5        $ s  snf ! , (       d  f       g = f)Nz
        WITH tables AS (
            SELECT %s name
            UNION
            SELECT sqlite_master.name
            FROM sqlite_master
            JOIN tables ON (sql REGEXP %s || tables.name || %s)
        ) SELECT name FROM tables;
        z(?i)\s+references\s+("|\')?z("|\')?\s*\(r   )rO   rt   ru   fetchall)r+   
table_namequeryr9   rt   r{   rows          r/   __references_graph%DatabaseOperations.__references_graph   sp     *

 __##%nnU3G&-&6&6&89&8sF&89 &%9 &%s   $A%A A% A%%
A3c                 4    [        SS9" U R                  5      $ )Ni   )maxsize)r   %_DatabaseOperations__references_graphrf   s    r/   _references_graph$DatabaseOperations._references_graph   s     %d&=&=>>r<   F)reset_sequencesallow_cascadec                  ^  U(       a0  U(       a)  [        [        R                  " U 4S jU 5       5      5      nU Vs/ s HM  nUR                  S5      < SUR                  S5      < SUR	                  T R                  U5      5      < S3PMO     nnU(       a4  U Vs/ s H  nSU0PM	     nnUR                  T R                  X5      5        U$ s  snf s  snf )Nc              3   F   >#    U  H  nTR                  U5      v   M     g 7fr   )r   ).0tabler+   s     r/   	<genexpr>/DatabaseOperations.sql_flush.<locals>.<genexpr>   s     #VveD$:$:5$A$Avs   !DELETE FROM;r   )setr   from_iterableSQL_KEYWORD	SQL_FIELDr   extendsequence_reset_by_name_sql)r+   styletablesr   r   r   r8   	sequencess   `       r/   	sql_flushDatabaseOperations.sql_flush   s    m ###Vv#VVF  
  	 !!(+!!&) 67	   	 
 7=>ve'5)vI>JJt66uHI

 ?s   ACCc                    U(       d  / $ UR                  S5      < SUR                  U R                  S5      5      < SUR                  S5      < SUR                  U R                  S5      5      < SUR                  S5      < SUR                  U R                  S5      5      < SUR                  S	5      < S
SR	                  U Vs/ s H  nSUS   -  PM     sn5      < S3/$ s  snf )NUPDATEr   sqlite_sequenceSETseqz = 0 WHEREr   INz (rj   '%s'r   z);)r   	SQL_TABLEr   r   rs   )r+   r   r   sequence_infos       r/   r   -DatabaseOperations.sequence_reset_by_name_sql   s    I !!(+0A BC!!%( 67!!'* 78!!$'		JST)VmG44)T
 	
 Us   C)$c                     Uc  g [         R                  " U5      (       aK  [        R                  (       a+  [         R                  " XR
                  R                   5      nO[        S5      e[        U5      $ )NzNSQLite backend does not support timezone-aware datetimes when USE_TZ is False.)r   is_awarer   rN   
make_naiverO   
ValueErrorstrr+   values     r/   adapt_datetimefield_value,DatabaseOperations.adapt_datetimefield_value   s\    = U## ++E??3K3KL ' 
 5zr<   c                 l    Uc  g [         R                  " U5      (       a  [        S5      e[        U5      $ )Nz5SQLite backend does not support timezone-aware times.)r   r   r   r   r   s     r/   adapt_timefield_value(DatabaseOperations.adapt_timefield_value  s3    = U##TUU5zr<   c                   > [         TU ]  U5      nUR                  R                  5       nUS:X  a  UR	                  U R
                  5        U$ US:X  a  UR	                  U R                  5        U$ US:X  a  UR	                  U R                  5        U$ US:X  a"  UR	                  U R                  U5      5        U$ US:X  a  UR	                  U R                  5        U$ US:X  a  UR	                  U R                  5        U$ )Nr   r   	TimeFieldDecimalField	UUIDFieldBooleanField)superget_db_convertersr"   get_internal_typeappendconvert_datetimefield_valueconvert_datefield_valueconvert_timefield_valueget_decimalfield_converterconvert_uuidfield_valueconvert_booleanfield_value)r+   r,   
convertersinternal_typer$   s       r/   r   $DatabaseOperations.get_db_converters  s   W.z:
"//AACO+d>>?  k)d::;  k)d::;  n,d==jIJ
 	 k)d::;  n,d==>r<   c                    Ub  [        U[        R                  5      (       d  [        U5      n[        R                  (       aE  [
        R                  " U5      (       d*  [
        R                  " XR                  R
                  5      nU$ r   )	r   datetimer   r   rN   r   r   
make_awarerO   r+   r   r,   rO   s       r/   r   .DatabaseOperations.convert_datetimefield_value!  s[    eX%6%677&u-x'8'8'?'? ++E??3K3KLr<   c                 `    Ub*  [        U[        R                  5      (       d  [        U5      nU$ r   )r   r   dater   r   s       r/   r   *DatabaseOperations.convert_datefield_value)  (    eX]]33"5)r<   c                 `    Ub*  [        U[        R                  5      (       d  [        U5      nU$ r   )r   r   timer   r   s       r/   r   *DatabaseOperations.convert_timefield_value/  r   r<   c                     [        U [        [        45      (       a  [        R                  " U 5      $ [        R
                  " SS9R                  U 5      $ )N   )prec)r   intr   decimalDecimalContextcreate_decimal_from_float)r   s    r/   _create_decimal"DatabaseOperations._create_decimal5  s<    ec3Z((??5))B'AA%HHr<   c                    ^ ^ [        U[        5      (       aC  [        R                  " S5      R	                  UR
                  R                  * 5      mUU 4S jnU$ U 4S jnU$ )Nr   c                 r   > U b3  TR                  U 5      R                  TUR                  R                  S9$ g )N)context)r   quantizer"   r   )r   r,   rO   quantize_valuer+   s      r/   	converter@DatabaseOperations.get_decimalfield_converter.<locals>.converterC  sC    $//6??&
0G0G0O0O @   %r<   c                 .   > U b  TR                  U 5      $ g r   )r   )r   r,   rO   r+   s      r/   r   r   K  s    $//66 %r<   )r   r   r   r   scalebr"   decimal_places)r+   r,   r   r   s   `  @r/   r   -DatabaseOperations.get_decimalfield_converter;  sW     j#&&$__Q/66((777N 	7 r<   c                 8    Ub  [         R                  " U5      nU$ r   )uuidUUIDr   s       r/   r   *DatabaseOperations.convert_uuidfield_valueQ  s    IIe$Er<   c                 (    US;   a  [        U5      $ U$ )N)r   r   )boolr   s       r/   r   -DatabaseOperations.convert_booleanfield_valueV  s    #votE{858r<   c                    > US:X  a  SSR                  U5      -  $ US:X  a  SSR                  U5      -  $ [        TU ]	  X5      $ )N^z	POWER(%s),#z
BITXOR(%s))rs   r   combine_expression)r+   	connectorsub_expressionsr$   s      r/   r  %DatabaseOperations.combine_expressionY  sM     /!:::##((?";;;w))EEr<   c                     US;  a  [        SU-  5      eSU-  /UQn[        U5      S:  a  [        S5      eSSR                  U5      -  $ )N)+-*/z$Invalid connector for timedelta: %s.r      z)Too many params for timedelta operations.zdjango_format_dtdelta(%s)rj   )r   r)   r   rs   )r+   r  r  	fn_paramss       r/   combine_duration_expression.DatabaseOperations.combine_duration_expressionb  sZ    00 F RSSi':/:	y>AHII*TYYy-AAAr<   c                     US;   a  gg)N)PositiveBigIntegerFieldPositiveIntegerFieldPositiveSmallIntegerField)r       )l         r  r>   )r+   r   s     r/   integer_field_range&DatabaseOperations.integer_field_rangej  s      
 

 ,:r<   c                 `    Uu  pEUu  pg/ UQUQ7nUS:X  a  SU< SU< S3U4$ SU< SU< S3U4$ )Nr   zdjango_time_diff(rj   r3   zdjango_timestamp_diff(r>   )	r+   r   lhsrhslhs_sql
lhs_paramsrhs_sql
rhs_paramsr9   s	            r/   subtract_temporals%DatabaseOperations.subtract_temporalsu  sN    !!+:+
+K'18'BFJJ (297CVKKr<   c                 H   > U[         R                  :X  a  g[        TU ]  US9$ )NzINSERT OR IGNORE INTO)on_conflict)r   IGNOREr   insert_statement)r+   r)  r$   s     r/   r+  #DatabaseOperations.insert_statement}  s'    *+++*w'K'@@r<   c                 p  > U[         R                  :X  a  U R                  R                  R                  (       af  SSR                  [        U R                  U5      5      < SSR                  [        U R                  U5       Vs/ s H
  nU SU 3PM     sn5      < 3$ [        TU ]%  UUUU5      $ s  snf )NzON CONFLICT(rj   z) DO UPDATE SET z = EXCLUDED.)
r   r   rO   rk   %supports_update_conflicts_with_targetrs   mapr   r   on_conflict_suffix_sql)r+   fieldsr)  update_fieldsunique_fieldsfieldr$   s         r/   r0  )DatabaseOperations.on_conflict_suffix_sql  s    :,,,((NNN 		#doo}=>		 &)-%H%HE !'eW5%H  w-	
 	
s   B3c                 4    [         R                  S:  a  S/$ / $ )N)r  '   zGROUP BY TRUE)r   sqlite_version_inforf   s    r/   force_group_by!DatabaseOperations.force_group_by  s    $,$@$@7$J RPRRr<   c                 8   > US:  a  SU-  $ [         TU ]  U5      $ )Nr   z[#%s])r   format_json_path_numeric_index)r+   numr$   s     r/   r<  1DatabaseOperations.format_json_path_numeric_index  s#     #aw}XUW-STW-XXr<   r>   r   )3r%   
__module____qualname____firstlineno__"cast_char_field_without_max_lengthcast_data_typesexplain_prefix	frozensetjsonfield_datatype_valuesr0   r:   r?   rG   rK   rD   rU   rY   r\   r_   rb   rg   rr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   staticmethodr   r   r   r   r  r  r  r&  r+  r0  r9  r<  __static_attributes____classcell__)r$   s   @r/   r   r      s   )/&O *N !**C D4Q






Q4$
:& ? ?
 ;@u *
& " I I
,
9FB	;LA

*SY Yr<   r   )*r   r   rn   r  	functoolsr   	itertoolsr   django.confr   django.core.exceptionsr   	django.dbr   r   r	   "django.db.backends.base.operationsr
   django.db.models.constantsr   django.db.models.expressionsr   django.utilsr   django.utils.dateparser   r   r   django.utils.functionalr   baser   SumAvgVarianceStdDevr    r   r   r   r#   r   r>   r<   r/   <module>rZ     s            - > > E 1 , ! I I 3  JJ
JJ
OO
MM	#  ##V%9%96;K;KL~Y/ ~Yr<   