
    h8u                         S SK r S SKrS SKJr  S SKJr  S SKJrJr  S SK	J
r
  S SKJrJrJr  S SKJr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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\
5      r'g)    N)	lru_cache)settings)DatabaseErrorNotSupportedError)BaseDatabaseOperations)split_tzname_deltastrip_quotestruncate_name)	AutoFieldExistsExpressionWrapperLookup)RawSQL)	WhereNode)timezone)force_bytes	force_str)cached_property)_lazy_re_compile   )Database)BulkInsertMapper	InsertVarOracle_datetimec            
          ^  \ rS rSrSSSSSSSSSS.	r0 \R                  ESS	0ErS
rSrSSS\S.r	S r
\" S5      rS rSKS jr\" S5      rS rS rS rS rS rS rS rSKS jrU 4S jrS rS rS  rS! rS" rS# rS$ r\ S% 5       r!\ S& 5       r"S' r#S( r$S) r%S* r&S+ r'S, r(SKS- jr)S. r*S/ r+S0 r,S1 r-S2 r.S3 r/S4 r0S5 r1S6 r2\3S7 5       r4S8S8S9.S: jr5S; r6S< r7S= r8SLS> jr9S? r:S@ r;SA r<SMSB jr=U 4SC jr>SD r?SE r@SF rAU 4SG jrBSH rCSI rDSJrEU =rF$ )NDatabaseOperations   )lg]    g] )l9V    9V )r   r   )r   r   )iayi )	SmallIntegerFieldIntegerFieldBigIntegerFieldPositiveBigIntegerFieldPositiveSmallIntegerFieldPositiveIntegerFieldSmallAutoFieldr   BigAutoField
differenceMINUSa  
DECLARE
    table_value integer;
    seq_value integer;
    seq_name user_tab_identity_cols.sequence_name%%TYPE;
BEGIN
    BEGIN
        SELECT sequence_name INTO seq_name FROM user_tab_identity_cols
        WHERE  table_name = '%(table_name)s' AND
               column_name = '%(column_name)s';
        EXCEPTION WHEN NO_DATA_FOUND THEN
            seq_name := '%(no_autofield_sequence_name)s';
    END;

    SELECT NVL(MAX(%(column)s), 0) INTO table_value FROM %(table)s;
    SELECT NVL(last_number - cache_size, 0) INTO seq_value FROM user_sequences
           WHERE sequence_name = seq_name;
    WHILE table_value > seq_value LOOP
        EXECUTE IMMEDIATE 'SELECT "'||seq_name||'".nextval%(suffix)s'
        INTO seq_value;
    END LOOP;
END;
/zNVARCHAR2(2000)z
NUMBER(11)z
NUMBER(19)z	NUMBER(5))r   r'   r&   	TextFieldc                 6    U R                  S5      nSU SU S3$ )N	cache_keyzSELECT z FROM %s ORDER BY z( OFFSET %%s ROWS FETCH FIRST 1 ROWS ONLY
quote_name)selfr,   s     V/var/www/html/env/lib/python3.13/site-packages/django/db/backends/oracle/operations.pycache_key_culling_sql(DatabaseOperations.cache_key_culling_sqlH   s/    OOK0	i[ !!{"JL	
    z[A-Z_]+c                    SU S3nS nUS:X  a  SnOtUS:X  a	  SU S3nSnOeUS:X  a  SnO\US	:X  a  S
nOSUS:X  a  SnOJUR                  5       nU R                  R                  U5      (       d  [        SU< 35      eSU SU S3U4$ U/ UQUP74$ )NzTO_CHAR(, %s)week_dayDiso_week_dayz	 - 1, %s)weekIWquarterQiso_yearIYYYzInvalid loookup type: zEXTRACT(z FROM ))upper_extract_format_re	fullmatch
ValueError)r/   lookup_typesqlparamsextract_sqlextract_params         r0   date_extract_sql#DatabaseOperations.date_extract_sqlS   s     U+*$MN*$SE3KMF" MI%MJ&"M%++-K**44[AA #9+!IJJk]&Q7??4f4m444r3   c                     U R                  X#U5      u  p#S nUS;   a  UR                  5       nOUS:X  a  SnOUS:X  a  SnOSU S3U4$ SU S3/ UQUP74$ )	Nyearmonthr;   r<   r9   r:   TRUNC(r?   r5   _convert_sql_to_tzr@   r/   rD   rE   rF   tznametrunc_params         r0   date_trunc_sql!DatabaseOperations.date_trunc_sqlk   s~    --c6B++%++-KI%KF"KC5?F**uE"$:f$:k$:::r3   z^[\w/:+-]+$c                 <    [        U5      u  pnU(       a  U U 3$ U$ N)r   )r/   rS   signoffsets       r0   _prepare_tzname_delta(DatabaseOperations._prepare_tzname_delta   s'    1&9f$*$x 66r3   c                 @   [         R                  (       a  U(       d  X4$ U R                  R                  U5      (       d  [	        SU-  5      eU R
                  R                  U:w  a5  U R
                  R                  nU R                  U5      nSU SU SU S3U4$ X4$ )NzInvalid time zone name: %szCAST((FROM_TZ(z, 'z') AT TIME ZONE 'z') AS TIMESTAMP))r   USE_TZ
_tzname_rematchrC   
connectiontimezone_namer[   )r/   rE   rF   rS   from_timezone_nameto_timezone_names         r0   rQ   %DatabaseOperations._convert_sql_to_tz   s    F;$$V,,9FBCC ??((F2!%!>!>#99&A S);(< =$%%57 
 {r3   c                 :    U R                  XU5      u  pSU S3U4$ )NrO   r?   rQ   )r/   rE   rF   rS   s       r0   datetime_cast_date_sql)DatabaseOperations.datetime_cast_date_sql   s)    --c6BuA&&r3   c                 V    U R                  XU5      u  pSU S3nSU SU S3/ UQUQ74$ )Nz+TO_TIMESTAMP(CONCAT('1900-01-01 ', TO_CHAR(z0, 'HH24:MI:SS.FF')), 'YYYY-MM-DD HH24:MI:SS.FF')z
CASE WHEN z IS NOT NULL THEN z ELSE NULL ENDrg   )r/   rE   rF   rS   convert_datetime_sqls        r0   datetime_cast_time_sql)DatabaseOperations.datetime_cast_time_sql   s\     --c6B9# ?* + 	
 /0D/E^Tfv
 	
r3   c                 j    U R                  X#U5      u  p#US:X  a  SU S3U4$ U R                  XU5      $ NsecondzFLOOR(EXTRACT(SECOND FROM z)))rQ   rI   )r/   rD   rE   rF   rS   s        r0   datetime_extract_sql'DatabaseOperations.datetime_extract_sql   sE    --c6B("/uB7??$$[v>>r3   c                     U R                  X#U5      u  p#S nUS;   a  UR                  5       nO:US:X  a  SnO1US:X  a  SnO(US:X  a  SnOUS:X  a  S	nOUS
:X  a  SU S3U4$ SU S3U4$ SU S3/ UQUP74$ )NrL   r;   r<   r9   r:   hourHH24minuteMIdayrO   r?   CAST(	 AS DATE)r5   rP   rR   s         r0   datetime_trunc_sql%DatabaseOperations.datetime_trunc_sql   s    --c6B++%++-KI%KF"KF" KH$KE!C5?F** 3%y)611uE"$:f$:k$:::r3   c                 B    US:X  a  SU S3U4$ U R                  XU5      $ ro   )rI   )r/   rD   rE   rF   s       r0   time_extract_sql#DatabaseOperations.time_extract_sql   s1    ("/uB7??$$[v>>r3   c                     U R                  X#U5      u  p#S nUS:X  a  SnOUS:X  a  SnOUS:X  a  SU S3U4$ SU S	3/ UQUP74$ )
Nrt   ru   rv   rw   rp   ry   rz   rO   r5   rg   rR   s         r0   time_trunc_sql!DatabaseOperations.time_trunc_sql   sr     --c6B&  KH$KH$3%y)611uE"$:f$:k$:::r3   c                   > [         TU ]  U5      nUR                  R                  5       nUS;   a  UR	                  U R
                  5        OUS:X  a  UR	                  U R                  5        OUS:X  a  UR	                  U R                  5        OUS:X  a1  [        R                  (       a  UR	                  U R                  5        OeUS:X  a  UR	                  U R                  5        OCUS:X  a  UR	                  U R                  5        O!US:X  a  UR	                  U R                  5        UR                  R                  (       a-  UR	                  US:X  a  U R                  OU R                   5        U$ )N)	JSONFieldr*   BinaryFieldBooleanFieldDateTimeField	DateField	TimeField	UUIDField)superget_db_convertersoutput_fieldget_internal_typeappendconvert_textfield_valueconvert_binaryfield_valueconvert_booleanfield_valuer   r^   convert_datetimefield_valueconvert_datefield_valueconvert_timefield_valueconvert_uuidfield_valueempty_strings_allowedconvert_empty_bytesconvert_empty_string)r/   
expression
convertersinternal_type	__class__s       r0   r   $DatabaseOperations.get_db_converters   s6   W.z:
"//AAC66d::;m+d<<=n,d==>o-!!$"B"BCk)d::;k)d::;k)d::; ""88 M1 ((..
 r3   c                 d    [        U[        R                  5      (       a  UR                  5       nU$ rX   )
isinstancer   LOBreadr/   valuer   ra   s       r0   r   *DatabaseOperations.convert_textfield_value   s#    eX\\**JJLEr3   c                 v    [        U[        R                  5      (       a  [        UR	                  5       5      nU$ rX   )r   r   r   r   r   r   s       r0   r   ,DatabaseOperations.convert_binaryfield_value   s(    eX\\**

-Er3   c                 (    US;   a  [        U5      nU$ )N)r   r   )boolr   s       r0   r   -DatabaseOperations.convert_booleanfield_value   s    F?KEr3   c                 `    Ub*  [         R                  " XR                  R                   5      nU$ rX   )r   
make_awarera   r   s       r0   r   .DatabaseOperations.convert_datetimefield_value  s'    ''/G/GHEr3   c                 d    [        U[        R                  5      (       a  UR                  5       nU$ rX   )r   r   	Timestampdater   s       r0   r   *DatabaseOperations.convert_datefield_value  %    eX//00JJLEr3   c                 d    [        U[        R                  5      (       a  UR                  5       nU$ rX   )r   r   r   timer   s       r0   r   *DatabaseOperations.convert_timefield_value  r   r3   c                 8    Ub  [         R                  " U5      nU$ rX   )uuidUUIDr   s       r0   r   *DatabaseOperations.convert_uuidfield_value  s    IIe$Er3   c                     U c  S$ U $ N  r   r   ra   s      r0   r   'DatabaseOperations.convert_empty_string  s    ]r--r3   c                     U c  S$ U $ )Nr3   r   r   s      r0   r   &DatabaseOperations.convert_empty_bytes  s    ms..r3   c                     g)Nz DEFERRABLE INITIALLY DEFERREDr   r/   s    r0   deferrable_sql!DatabaseOperations.deferrable_sql#  s    /r3   c                     / nU H8  nUR                  5       nU/ :X  a  [        S5      eUR                  US   5        M:     [        U5      $ )NzThe database did not return a new row id. Probably "ORA-1403: no data found" was raised internally but was hidden by the Oracle OCI library (see https://code.djangoproject.com/ticket/28859).r   )	get_valuer   r   tuple)r/   cursorreturning_paramscolumnsparamr   s         r0   fetch_returned_insert_columns0DatabaseOperations.fetch_returned_insert_columns&  sW    %EOO%E {#D  NN58$ & W~r3   c                     g rX   r   r   s    r0   no_limit_value!DatabaseOperations.no_limit_value6      r3   c                     U R                  X5      u  p4SR                  S U(       a  SU-  OS U(       a  SU-  OS 4 5       5      $ )N c              3   8   #    U  H  nU(       d  M  Uv   M     g 7frX   r   ).0rE   s     r0   	<genexpr>6DatabaseOperations.limit_offset_sql.<locals>.<genexpr>;  s"      
  Cs   	zOFFSET %d ROWSzFETCH FIRST %d ROWS ONLY)_get_limit_offset_paramsjoin)r/   low_mark	high_markfetchrZ   s        r0   limit_offset_sql#DatabaseOperations.limit_offset_sql9  sP    55hJxx 
 06!F*48=+e34
 
 	
r3   c           	         UR                   nU(       a  [        U[        [        45      (       a7  [	        [
        R                  U5      5       VVs0 s H  u  pVSU 3U_M     nnnO=[        U[
        5      (       a(  UR                  5        VVs0 s H  u  pxSU 3U_M     nnn[        U[        SS9 H  nUR                  U[        X7   SS95      nM!     U$ s  snnf s  snnf )Nz:arg:T)keyreversereplace)errors)	statementr   r   list	enumeratedictfromkeysitemssortedlenr   r   )	r/   r   rE   rF   r   ir   r   vals	            r0   last_executed_query&DatabaseOperations.last_executed_queryD  s     $$	 &5$-006?f@U6V6V(!d1#J%6V   FD));A<<>J>ZcAcU)S.>Jf#t<%--6;yA	 =  Ks   CCc                     U R                  U[        U5      U5      nUR                  SU-  5        UR                  5       S   $ )Nz"%s".currvalr   )_get_sequence_namer	   executefetchone)r/   r   
table_namepk_namesq_names        r0   last_insert_id!DatabaseOperations.last_insert_idX  s>    ))&,z2JGT~/0 ##r3   c                 ,    US;   a  gUS:w  a  US;   a  gg)N)iexact	icontainsistartswith	iendswithz	UPPER(%s)isnull)r   r*   zDBMS_LOB.SUBSTR(%s)%sr   )r/   rD   r   s      r0   lookup_castDatabaseOperations.lookup_cast]  s*    MM("} 9
 (
 )r3   c                     g)Ni  r   r   s    r0   max_in_list_size#DatabaseOperations.max_in_list_sizeg  r   r3   c                     g)N   r   r   s    r0   max_name_length"DatabaseOperations.max_name_lengthj      r3   c                     g)NNULLr   r   s    r0   pk_default_value#DatabaseOperations.pk_default_valuem  s    r3   c                     U$ rX   r   )r/   xs     r0   prep_for_iexact_query(DatabaseOperations.prep_for_iexact_queryp  s    r3   c                 *    Uc  gUR                  5       $ r   )r   r/   r   s     r0   process_clobDatabaseOperations.process_clobs  s    =zz|r3   c                     UR                  S5      (       d2  UR                  S5      (       d  S[        XR                  5       5      -  nUR	                  SS5      nUR                  5       $ )N"z"%s"%%%)
startswithendswithr
   r	  r   r@   )r/   names     r0   r.   DatabaseOperations.quote_namex  sW    
 s##DMM#,>,>M$0D0D0FGGD ||C&zz|r3   c                 *    US:X  a  SnSU-  $ SnSU-  $ )Nregexz'c'z'i'zREGEXP_LIKE(%%s, %%s, %s)r   )r/   rD   match_options      r0   regex_lookupDatabaseOperations.regex_lookup  s.    '! L +\99 !L*\99r3   c           	         U(       d  g/ n/ nU H{  nUR                  U R                  UR                  R                  R                  5      < SU R                  UR
                  5      < 35        UR                  [        U5      5        M}     SSR                  U5      < SSR                  S/[        U5      -  5      < 3[        U5      4$ )N)r   r   .z
RETURNING , z INTO r  )
r   r.   model_metadb_tablecolumnr   r   r   r   )r/   fieldsfield_namesrF   fields        r0   return_insert_columns(DatabaseOperations.return_insert_columns  s    E OOEKK$5$5$>$>?OOELL1 MM)E*+  IIk"IItfs6{*+
 = 	r3   c                     U R                   R                  5        nU(       a  UR                  SX45        OUR                  SU45        UR                  5       sS S S 5        $ ! , (       d  f       g = f)Na  
                    SELECT
                        user_tables.table_name, rcons.constraint_name
                    FROM
                        user_tables
                    JOIN
                        user_constraints cons
                        ON (user_tables.table_name = cons.table_name
                        AND cons.constraint_type = ANY('P', 'U'))
                    LEFT JOIN
                        user_constraints rcons
                        ON (user_tables.table_name = rcons.table_name
                        AND rcons.constraint_type = 'R')
                    START WITH user_tables.table_name = UPPER(%s)
                    CONNECT BY
                        NOCYCLE PRIOR cons.constraint_name = rcons.r_constraint_name
                    GROUP BY
                        user_tables.table_name, rcons.constraint_name
                    HAVING user_tables.table_name != UPPER(%s)
                    ORDER BY MAX(level) DESC
                    a:  
                    SELECT
                        cons.table_name, cons.constraint_name
                    FROM
                        user_constraints cons
                    WHERE
                        cons.constraint_type = 'R'
                        AND cons.table_name = UPPER(%s)
                    )ra   r   r   fetchall)r/   r   	recursiver   s       r0   __foreign_key_constraints,DatabaseOperations.__foreign_key_constraints  sc    __##%*  ,-2   M ??$O &%%s   >A##
A1c                 4    [        SS9" U R                  5      $ )Ni   )maxsize)r   ,_DatabaseOperations__foreign_key_constraintsr   s    r0   _foreign_key_constraints+DatabaseOperations._foreign_key_constraints  s     %d&D&DEEr3   F)reset_sequencesallow_cascadec                   U(       d  / $ U Vs1 s H  oUR                  5       iM     nn[        5       nU HE  nU R                  XTS9 H/  u  pU(       a  UR                  U5        UR                  X45        M1     MG     U VV	s/ s H  u  pYUR	                  S5      < SUR	                  S5      < SUR                  U R                  U5      5      < SUR	                  S5      < SUR	                  S5      < SUR                  U R                  U	5      5      < SUR	                  S5      < SUR	                  S5      < S	3PM     sn	nU Vs/ s HM  nUR	                  S
5      < SUR	                  S5      < SUR                  U R                  U5      5      < S	3PMO     sn-   U VV	s/ s H  u  pYUR	                  S5      < SUR	                  S5      < SUR                  U R                  U5      5      < SUR	                  S5      < SUR	                  S5      < SUR                  U R                  U	5      5      < S	3PM     sn	n-   n
U(       am  U R                  R                  R                  5        Vs/ s H  nUS   R                  5       U;   d  M  UPM      nnU
R                  U R                  X5      5        U
$ s  snf s  sn	nf s  snf s  sn	nf s  snf )N)r3  ALTERr   TABLEDISABLE
CONSTRAINTKEEPINDEX;TRUNCATEENABLEtable)r@   setr9  addSQL_KEYWORD	SQL_FIELDr.   ra   introspectionsequence_listextendsequence_reset_by_name_sql)r/   styletablesr;  r<  rG  truncated_tablesconstraintsforeign_table
constraintrE   sequence	sequencess                r0   	sql_flushDatabaseOperations.sql_flush  s   I7=>veKKMv>e
 E-1-J-J .K .) !$((7 ;<. ( *5 *5%E %%g.%%g.OODOOE$:;%%i0%%l3OODOOJ$?@%%f-%%g.
 *5* . .E	 %%j1%%g.OODOOE$:;	 .B *5 *5%E %%g.%%g.OODOOE$:;%%h/%%l3OODOOJ$?@ *5/" 	J  !% = = K K M MHG$**,0@@  M   JJt66uHI
w ?s&   KCK
AK+BK<KKc           	      T   / nU H  nU R                  US   5      nU R                  US   5      nU R                  US   =(       d    S5      nU R                  UUU[        U5      [        U5      U R                  R
                  R                  S.-  nUR                  U5        M     U$ )NrG  r+  idno_autofield_sequence_namerG  r+  r   column_namesuffix)_get_no_autofield_sequence_namer.   _sequence_reset_sqlr	   ra   featuresbare_select_suffixr   )	r/   rP  rW  rE   sequence_infor]  rG  r+  querys	            r0   rO  -DatabaseOperations.sequence_reset_by_name_sql  s    &M)-)M)Mg&*& OOM'$:;E__]8%<%DEF,,.H *51+F3//22EE0 E JJu ' 
r3   c                    / nU R                   nU H  nUR                  R                   H  n[        U[        5      (       d  M  U R                  UR                  R                  5      nU R                  UR                  R                  5      nU R                  UR                  5      n	UR                  UUUU	[        U5      [        U	5      U R                  R                  R                  S.-  5          M     M     U$ )Nr\  )ra  r)  local_fieldsr   r   r`  r*  r.   r+  r   r	   ra   rb  rc  )
r/   rP  
model_listoutputre  r(  fr]  rG  r+  s
             r0   sequence_reset_sql%DatabaseOperations.sequence_reset_sql#  s    ((E[[--a++151U1U,,2. !OOEKK,@,@AE!__QXX6FMM:T%*&,*6u*=+7+?&*oo&>&>&Q&Q
 ) .  , r3   c                     gr   r   r   s    r0   start_transaction_sql(DatabaseOperations.start_transaction_sql>  r  r3   c                 `    U(       a  SU R                  U5      -  $ SU R                  U5      -  $ )NzUSING INDEX TABLESPACE %szTABLESPACE %sr-   )r/   
tablespaceinlines      r0   tablespace_sql!DatabaseOperations.tablespace_sqlA  s-    .1LLL"T__Z%@@@r3   c                     U$ )z
Transform a date value to an object compatible with what is expected
by the backend driver for date columns.
The default implementation transforms the date to text, but that is not
necessary for Oracle.
r   r  s     r0   adapt_datefield_value(DatabaseOperations.adapt_datefield_valueG  s	     r3   c                    Uc  g[         R                  " U5      (       aK  [        R                  (       a+  [         R                  " XR
                  R                   5      nO[        S5      e[        R                  " U5      $ )a  
Transform a datetime value to an object compatible with what is expected
by the backend driver for datetime columns.

If naive datetime is passed assumes that is in UTC. Normally Django
models.DateTimeField makes sure that if USE_TZ is True passed datetime
is timezone aware.
NzNOracle backend does not support timezone-aware datetimes when USE_TZ is False.)	r   is_awarer   r^   
make_naivera   rC   r   from_datetimer  s     r0   adapt_datetimefield_value,DatabaseOperations.adapt_datetimefield_valueP  se     = U## ++E??3K3KL ' 
 ,,U33r3   c           	      2   Uc  g [        U[        5      (       a   [        R                  R                  US5      $ [        R
                  " U5      (       a  [        S5      e[        SSSUR                  UR                  UR                  UR                  5      $ )Nz%H:%M:%Sz5Oracle backend does not support timezone-aware times.il  r   )r   strdatetimestrptimer   rz  rC   r   rt   rv   rp   microsecondr  s     r0   adapt_timefield_value(DatabaseOperations.adapt_timefield_valuei  s}    =eS!!$$--eZ@@ U##TUU!Q

ELL%,,@Q@Q
 	
r3   c                     U$ rX   r   )r/   r   
max_digitsdecimal_placess       r0   adapt_decimalfield_value+DatabaseOperations.adapt_decimalfield_valuex  s    r3   c                 6  > Uu  p4US:X  a  SSR                  U5      -  $ US:X  a  SSR                  U5      -  $ US:X  a  SX4S.-  $ US	:X  a  S
X4S.-  $ US:X  a  SX4S.-  $ US:X  a  SSR                  U5      -  $ US:X  a  [        S5      e[        TU ]  X5      $ )Nr  zMOD(%s),&z
BITAND(%s)|z"BITAND(-%(lhs)s-1,%(rhs)s)+%(lhs)s)lhsrhsz<<z(%(lhs)s * POWER(2, %(rhs)s))z>>z"FLOOR(%(lhs)s / POWER(2, %(rhs)s))^z	POWER(%s)#z'Bitwise XOR is not supported in Oracle.)r   r   r   combine_expression)r/   	connectorsub_expressionsr  r  r   s        r0   r  %DatabaseOperations.combine_expression{  s    "sxx888##((?";;;#7#:RRR$2S5MMM$7#:RRR#/!:::##$MNNw))EEr3   c                 t    U R                  5       S-
  nS[        [        U5      U5      R                  5       -  $ )zs
Manually created sequence name to keep backward compatibility for
AutoFields that aren't Oracle identity columns.
   z%s_SQ)r	  r
   r	   r@   )r/   rG  name_lengths      r0   r`  2DatabaseOperations._get_no_autofield_sequence_name  s7    
 **,q0|E':KHNNPPPr3   c                 z    UR                  SX#/5        UR                  5       nUc  U R                  U5      $ US   $ )Nz
            SELECT sequence_name
            FROM user_tab_identity_cols
            WHERE table_name = UPPER(%s)
            AND column_name = UPPER(%s)r   )r   r   r`  )r/   r   rG  r   rows        r0   r   %DatabaseOperations._get_sequence_name  sH    +
 	
 oo>Akt33E:UsSTvUr3   c           
         U Vs/ s HE  nU(       d  M  [         R                  R                  [        USU5      R	                  5       S5      PMG     nn/ nU H  n/ n[        U5       H6  u  pX   (       a  XH   U	-  n	U(       d	  U	< SU< 3n	UR                  U	5        M8     U R                  R                  R                  n
UR                  SU
 3SR                  U5      -  5        M     SSR                  U5      -  $ s  snf )Ntarget_fieldr  z col_z	SELECT %sr'  zSELECT * FROM (%s)z UNION ALL )r   typesgetgetattrr   r   r   ra   rb  rc  r   )r/   r,  placeholder_rowsr.  field_placeholdersre  r  selectr   placeholderr_  s              r0   bulk_insert_sql"DatabaseOperations.bulk_insert_sql  s    
  	
  	""&&~u5GGI4  	 	 
 #CF"+C.9"4"7+"EK 1<a"@Kk* #1 __--@@FLL9VH-		&0AAB $" $m&8&8&???3
s
   C?=C?c                 h   > US:X  a  Uu  pEUu  pg/ UQUQ7nSU< SU< S3U4$ [         T	U ]  XU5      $ )Nr   zNUMTODSINTERVAL(TO_NUMBER(z - z	), 'DAY'))r   subtract_temporals)
r/   r   r  r  lhs_sql
lhs_paramsrhs_sql
rhs_paramsrF   r   s
            r0   r  %DatabaseOperations.subtract_temporals  sS    K'"%G"%G/z/J/F@GQ  w)-cBBr3   c                 ~    U(       a,  U R                   R                  R                  [        U5      -  $ [        U5      $ )z5Oracle restricts the number of parameters in a query.)ra   rb  max_query_paramsr   )r/   r,  objss      r0   bulk_batch_size"DatabaseOperations.bulk_batch_size  s.    ??++<<FKK4yr3   c                    [        U[        [        [        45      (       a  g[        U[        5      (       a,  UR
                  (       a  U R                  UR                  5      $ [        U[        5      (       a  UR
                  (       a  gg)ze
Oracle supports only EXISTS(...) or filters in the WHERE clause, others
must be compared with True.
TF)	r   r   r   r   r   conditional0conditional_expression_supported_in_where_clauser   r   )r/   r   s     r0   r  CDatabaseOperations.conditional_expression_supported_in_where_clause  sj    
 j669"=>>j"3449O9OHH%%  j&))j.D.Dr3   r   rX   )F)NN)G__name__
__module____qualname____firstlineno__integer_field_rangesr   set_operatorsra  "cast_char_field_without_max_lengthcast_data_typesr1   r   rA   rI   rU   r_   r[   rQ   rh   rl   rq   r{   r~   r   r   r   r   r   r   r   r   r   staticmethodr   r   r   r   r   r   r   r   r  r  r	  r  r  r  r.   r#  r/  r8  r   r9  rX  rO  rl  ro  rt  rw  r}  r  r  r  r`  r   r  r  r  r  __static_attributes____classcell__)r   s   @r0   r   r      s   
 93F#;%5 0)0C
 T-;;S\7SM2 *;&!$%7	O
 **550;$ ".1J7$'
?;*?;:





 . . / /0 	
($

:&(%T F F
 ;@u ?B&6A42
F$Q
V@8	C r3   r   )(r  r   	functoolsr   django.confr   	django.dbr   r   "django.db.backends.base.operationsr   django.db.backends.utilsr   r	   r
   django.db.modelsr   r   r   r   django.db.models.expressionsr   django.db.models.sql.wherer   django.utilsr   django.utils.encodingr   r   django.utils.functionalr   django.utils.regex_helperr   baser   utilsr   r   r   r   r   r3   r0   <module>r     sM         6 E T T I I / 0 ! 8 3 6  ? ?F/ Fr3   