
    hhC                         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   " 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                   d  ^  \ rS rSrSrSSS.rSr\" / SQ5      rS r	S r
S	 rS
 rS rS1S jrS1S 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% r&S& r'S' r(U 4S( jr)S) r*S* r+S+ r,S1U 4S, jjr-S- r.U 4S. jr/S/ r0S0r1U =r2$ )2DatabaseOperations   textTEXT)	DateFieldDateTimeFieldzEXPLAIN QUERY PLAN)nullfalsetruec                     [        [        R                  " S U 5       5      5      n[        U5      S:X  a  g[        U5      S:  a,  U R                  R
                  R                  [        U5      -  $ [        U5      $ )z
SQLite has a compile-time default (SQLITE_LIMIT_VARIABLE_NUMBER) of
999 variables per query.

If there's only a single field to insert, the limit is 500
(SQLITE_MAX_COMPOUND_SELECT).
c              3   ~   #    U  H3  n[        U[        R                  5      (       a  UR                  OU/v   M5     g 7fN)
isinstancer	   CompositePrimaryKeyfields).0fields     `D:\Anime\Ugyen\janka_web_project\venv\Lib\site-packages\django/db/backends/sqlite3/operations.py	<genexpr>5DatabaseOperations.bulk_batch_size.<locals>.<genexpr>(   s>        $E "%)C)CDD LL! $s   ;=r   i  )listr   from_iterablelen
connectionfeaturesmax_query_params)selfr#   objss      r&   bulk_batch_size"DatabaseOperations.bulk_batch_size   sp        $  	
 v;![1_??++<<FKKt9    c                 V   [         R                  [         R                  [         R                  4n[         R                  [         R
                  [         R                  [         R                  4n[        X5      (       a?  UR                  5        H+  n UR                  n[        XR5      (       a  [        S5      eM-     [        U[         R                  5      (       a7  UR                  (       a%  [!        UR"                  5      S:  a  [        S5      eg g g ! [        [        4 a     M  f = f)Nz{You cannot use Sum, Avg, StdDev, and Variance aggregations on date/time fields in sqlite3 since date/time is saved as text.r   zTSQLite doesn't support DISTINCT on aggregate functions accepting multiple arguments.)r	   r   r   	TimeFieldSumAvgVarianceStdDevr!   get_source_expressionsoutput_fieldr   AttributeErrorr   	Aggregatedistinctr+   source_expressions)r/   
expression
bad_fieldsbad_aggregatesexprr;   s         r&   check_expression_support+DatabaseOperations.check_expression_support8   s    &&(<(<f>N>NO
 **fjj&//6==Qj11"99;#'#4#4L ",;;/@  < < z6#3#344##J112Q6#0  7 $ 5 '
3  s   DD('D(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_sqlT   s)     *#a0;3D3D3F2P2PPPr3   c                 "    UR                  5       $ )z
Given a cursor object that has just performed an INSERT...RETURNING
statement into a table, return the list of returned data.
)fetchall)r/   cursors     r&   fetch_returned_insert_rows-DatabaseOperations.fetch_returned_insert_rows\   s    
   r3   c                     U$ )z>Do nothing since formatting is handled in the custom function. )r/   rL   s     r&   format_for_duration_arithmetic1DatabaseOperations.format_for_duration_arithmeticc   s    
r3   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)rI   _convert_tznames_to_sqlr/   rK   rL   rM   tznames        r&   date_trunc_sql!DatabaseOperations.date_trunc_sqlg   F    'uI69
9
 ))&19
 
 	
r3   c                 X    SU S3UR                  5       /UQU R                  U5      Q74$ )Nzdjango_time_trunc(%s, rZ   r[   r]   s        r&   time_trunc_sql!DatabaseOperations.time_trunc_sqln   ra   r3   c                 j    U(       a,  [         R                  (       a  XR                  R                  4$ g)N)NN)r   USE_TZr,   timezone_name)r/   r^   s     r&   r\   *DatabaseOperations._convert_tznames_to_sqlu   s!    hoo??8888r3   c                 :    SU S3/ UQU R                  U5      Q74$ )Nzdjango_datetime_cast_date(rZ   r\   r/   rL   rM   r^   s       r&   datetime_cast_date_sql)DatabaseOperations.datetime_cast_date_sqlz   8    +C5	: =
=
))&1=
 
 	
r3   c                 :    SU S3/ UQU R                  U5      Q74$ )Nzdjango_datetime_cast_time(rZ   rj   rk   s       r&   datetime_cast_time_sql)DatabaseOperations.datetime_cast_time_sql   rn   r3   c                 X    SU S3UR                  5       /UQU R                  U5      Q74$ )Nzdjango_datetime_extract(%s, rZ   r[   r]   s        r&   datetime_extract_sql'DatabaseOperations.datetime_extract_sql   sF    -cU)<?
?
 ))&1?
 
 	
r3   c                 X    SU S3UR                  5       /UQU R                  U5      Q74$ )Nzdjango_datetime_trunc(%s, rZ   r[   r]   s        r&   datetime_trunc_sql%DatabaseOperations.datetime_trunc_sql   sF    +C5	:=
=
 ))&1=
 
 	
r3   c                 6    SU S3UR                  5       /UQ74$ )Nzdjango_time_extract(%s, rG   rH   rJ   s       r&   time_extract_sql#DatabaseOperations.time_extract_sql   s'    )#a0;3D3D3F2P2PPPr3   c                     g)NNULLrV   r/   s    r&   pk_default_value#DatabaseOperations.pk_default_value   s    r3   c                    Sn[        U5      U:  a:  Sn[        S[        U5      U5       H  nXXB-    nX0R                  U5      -  nM     U$ SSR                  S/[        U5      -  5      -   nU R                  R                  R                  5       n UR                  Xa5      R                  5       UR                  5         $ ! UR                  5         f = f)zF
Only for last_executed_query! Don't use this to execute SQL queries!
i  rV   r   zSELECT , zQUOTE(?))	r+   range%_quote_params_for_last_executed_queryjoinr,   rR   executefetchoneclose)r/   rM   
BATCH_SIZEresultsindexchunkrL   rR   s           r&   r   8DatabaseOperations._quote_params_for_last_executed_query   s     
v;#Gq#f+z:u'9:EEeLL ; N$))ZL3v;$>?? ++224	>>#.779LLNFLLNs   C C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$ r    )r!   r)   tupler   valuesdictzip)r/   rR   rL   rM   r   s        r&   last_executed_query&DatabaseOperations.last_executed_query   sr    
 &4-00CCFK
 < v}}/CCFKc&12< Jr3   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}r3   c                     g)NrV   r}   s    r&   no_limit_value!DatabaseOperations.no_limit_value   s    r3   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   )r,   rR   r   rQ   )r/   
table_namequeryrM   rR   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_graphr}   s    r&   _references_graph$DatabaseOperations._references_graph   s     %d&=&=>>r3   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   )r$   tabler/   s     r&   r'   /DatabaseOperations.sql_flush.<locals>.<genexpr>   s     #VveD$:$:5$A$Avs   !DELETE FROM;r   )setr   r*   SQL_KEYWORD	SQL_FIELDr   extendsequence_reset_by_name_sql)r/   styletablesr   r   r   rL   	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 (r   '%s'r   z);)r   	SQL_TABLEr   r   r   )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   rf   
make_naiver,   
ValueErrorstrr/   values     r&   adapt_datetimefield_value,DatabaseOperations.adapt_datetimefield_value  s\    = U## ++E??3K3KL ' 
 5zr3   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r3   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   r5   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_type	__class__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==>r3   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   rf   r   r   
make_awarer,   r/   r   r@   r,   s       r&   r   .DatabaseOperations.convert_datetimefield_value;  s[    eX%6%677&u-x'8'8'?'? ++E??3K3KLr3   c                 `    Ub*  [        U[        R                  5      (       d  [        U5      nU$ r    )r!   r   dater   r   s       r&   r   *DatabaseOperations.convert_datefield_valueC  (    eX]]33"5)r3   c                 `    Ub*  [        U[        R                  5      (       d  [        U5      nU$ r    )r!   r   timer   r   s       r&   r   *DatabaseOperations.convert_timefield_valueI  r   r3   c                   ^^ [         R                  " SS9R                  m[        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$ )N   )precr   c                 `   > U b*  T" U 5      R                  TUR                  R                  S9$ g )N)context)quantizer;   r   )r   r@   r,   create_decimalquantize_values      r&   	converter@DatabaseOperations.get_decimalfield_converter.<locals>.converterX  s<    $)%099&
0G0G0O0O :   %r3   c                    > U b  T" U 5      $ g r    rV   )r   r@   r,   r   s      r&   r   r   `  s    $)%00 %r3   )	decimalContextcreate_decimal_from_floatr!   r   Decimalscalebr;   decimal_places)r/   r@   r   r   r   s      @@r&   r   -DatabaseOperations.get_decimalfield_converterO  sk     !b1KKj#&&$__Q/66((777N 	1 r3   c                 8    Ub  [         R                  " U5      nU$ r    )uuidUUIDr   s       r&   r   *DatabaseOperations.convert_uuidfield_valuef  s    IIe$Er3   c                 (    US;   a  [        U5      $ U$ )N)r   r   )boolr   s       r&   r   -DatabaseOperations.convert_booleanfield_valuek  s    #votE{858r3   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))r   r   combine_expression)r/   	connectorsub_expressionsr   s      r&   r  %DatabaseOperations.combine_expressionn  sM     /!:::##((?";;;w))EEr3   c                     US;  a  [        SU-  5      eSU-  /U-   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)r   )r   r+   r   r   )r/   r  r  	fn_paramss       r&   combine_duration_expression.DatabaseOperations.combine_duration_expressionw  sZ    00 F RSSi'(?:	y>AHII*TYYy-AAAr3   c                     US;   a  gg)N)PositiveBigIntegerFieldPositiveIntegerFieldPositiveSmallIntegerField)r       )l         r!  rV   )r/   r   s     r&   integer_field_range&DatabaseOperations.integer_field_range  s      
 

 ,:r3   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$ )Nr5   zdjango_time_diff(r   rG   zdjango_timestamp_diff(rV   )	r/   r   lhsrhslhs_sql
lhs_paramsrhs_sql
rhs_paramsrM   s	            r&   subtract_temporals%DatabaseOperations.subtract_temporals  sN    !!+:+
+K'18'BFJJ (297CVKKr3   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&   r0  #DatabaseOperations.insert_statement  s'    *+++*w'K'@@r3   c                    U(       d  gU Vs/ s HR  nU R                  UR                  R                  R                  5      < SU R                  UR                  5      < 3PMT     nnSSR                  U5      -  S4$ s  snf )N) rV   .zRETURNING %sr   rV   )r   model_metadb_tablecolumnr   )r/   r#   r%   columnss       r&   return_insert_columns(DatabaseOperations.return_insert_columns  s|      
    1 1 : :;-
   	 
 		' 22B66
s   AA>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(r   z) DO UPDATE SET z = EXCLUDED.)
r   r   r,   r-   %supports_update_conflicts_with_targetr   mapr   r   on_conflict_suffix_sql)r/   r#   r.  update_fieldsunique_fieldsr%   r   s         r&   r?  )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_infor}   s    r&   force_group_by!DatabaseOperations.force_group_by  s    $,$@$@7$J RPRRr3   rV   r    )3__name__
__module____qualname____firstlineno__"cast_char_field_without_max_lengthcast_data_typesexplain_prefix	frozensetjsonfield_datatype_valuesr1   rD   rN   rS   rW   r_   rc   r\   rl   rp   rs   rv   ry   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r"  r+  r0  r:  r?  rF  __static_attributes____classcell__)r   s   @r&   r   r      s   )/&O *N !**C D28Q!






Q6$
:& ? ?
 ;@u *
& ".
9FB	;LA
7
*S Sr3   r   ) r   r   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   r   rV   r3   r&   <module>r_     sI           - > > E 1 , ! I I 3 gS/ gSr3   