
    ihe                        d Z ddlZddlZddlZddlZddlmZ ddlmZ ddl	m
Z
 ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZmZ ddlmZ ddlmZ 	 ddlmZ n# e$ rZ e
de           dZ[ww xY wd Z  e ddg           ddl!m"Z" ddl#m$Z$ ddl%m&Z& ddl'm(Z( ddl)m*Z* ddl+m,Z, ddl-m.Z.m/Z/ ddl0m1Z1 ed             Z2 G d d          Z3 G d d e          Z4 G d! d"          Z5 G d# d$          Z6 G d% d&          Z7dS )'zc
Oracle database backend for Django.

Requires oracledb: https://oracle.github.io/python-oracledb/
    N)contextmanager)settings)ImproperlyConfigured)IntegrityError)BaseDatabaseWrapper)is_oracledb)debug_transaction)async_unsafe)force_bytes	force_str)cached_property)get_version_tuple)oracledbzError loading oracledb module: c                 r   t          j                                                                        d          r_	 dd l}n$# t
          $ r}t          d|z            d }~ww xY w|                    d          }| D ]\  }}|                    ||           d S t          j
                            |            d S )NCYGWINr   z_Error loading ctypes: %s; the Oracle backend requires ctypes to operate correctly under Cygwin.kernel32)platformsystemupper
startswithctypesImportErrorr   CDLLSetEnvironmentVariableAosenvironupdate)r   r   er   namevalues         U/var/www/histauto/venv/lib/python3.11/site-packages/django/db/backends/oracle/base.py_setup_environmentr"      s       ++H55 #	MMMM 	 	 	&2456  	 ;;z**" 	: 	:KD%,,T59999	: 	: 	
'"""""s   ? 
A 	AA )NLS_LANGz	.AL32UTF8)ORA_NCHAR_LITERAL_REPLACETRUE   )DatabaseClient)DatabaseCreation)DatabaseFeatures)DatabaseIntrospection)DatabaseOperations)DatabaseSchemaEditor)Oracle_datetimedsn)DatabaseValidationc               #     K   	 d V  d S # t           j        $ rk} | j        d         }t          |d          rHt          |d          r8|j        dk    r-d|j        v s	d|j        v rt          t          | j                    d } ~ ww xY w)Nr   codemessagei+  z	ORA-02291z	ORA-00001)DatabaseDatabaseErrorargshasattrr1   r2   r   tuple)r   xs     r!   wrap_oracle_errorsr9   H   s      !    F1IAv	19%%	1 $	))[AI-E-E %--00's   
 BA&A??Bc                       e Zd ZddZdS )!_UninitializedOperatorsDescriptorNc                     |t          d          |                                                                 |j        d         S )Nz*operators not available as class attribute	operators)AttributeErrorcursorclose__dict__)selfinstanceclss      r!   __get__z)_UninitializedOperatorsDescriptor.__get__c   sC      !MNNN!!! --    N)__name__
__module____qualname__rE    rF   r!   r;   r;   b   s(        . . . . . .rF   r;   c                       e Zd ZdZdZi ddddddd	d
dddddddddddddddddddddddd d!d"dddddd#dddd$d%d&Zd'd(d)d)d)d*Zd+Z e            Z	d,d-d.d/d0d1d2d3d.d.d/d/d4Z
i e
d5d6d5d5d6d6d7Zd8Zd9d:d;d<d=d>d?Zd@ e                                D             ZdA e                                D             ZeZeZeZeZeZeZeZeZi Z  fdBZ!e"dC             Z#e"dD             Z$dE Z%dF Z&dG Z'e(dH             Z) fdIZ*e(dTdK            Z+dL Z,dM Z-dN Z.dTdOZ/dP Z0 fdQZ1e2dR             Z3e2dS             Z4 xZ5S )UDatabaseWrapperoracleOracle	AutoFieldz3NUMBER(11) GENERATED BY DEFAULT ON NULL AS IDENTITYBigAutoFieldz3NUMBER(19) GENERATED BY DEFAULT ON NULL AS IDENTITYBinaryFieldBLOBBooleanFieldz	NUMBER(1)	CharFieldzNVARCHAR2(%(max_length)s)	DateFieldDATEDateTimeField	TIMESTAMPDecimalFieldz*NUMBER(%(max_digits)s, %(decimal_places)s)DurationFieldzINTERVAL DAY(9) TO SECOND(6)	FileFieldFilePathField
FloatFieldzDOUBLE PRECISIONIntegerFieldz
NUMBER(11)	JSONFieldNCLOBBigIntegerFieldz
NUMBER(19)IPAddressFieldzVARCHAR2(15)GenericIPAddressFieldzVARCHAR2(39)z2NUMBER(5) GENERATED BY DEFAULT ON NULL AS IDENTITYzVARCHAR2(%(max_length)s)zVARCHAR2(32))OneToOneFieldPositiveBigIntegerFieldPositiveIntegerFieldPositiveSmallIntegerField	SlugFieldSmallAutoFieldSmallIntegerField	TextField	TimeFieldURLField	UUIDFieldz%(qn_column)s IN (0,1)z%(qn_column)s IS JSONz%(qn_column)s >= 0)rT   r`   rf   rg   rh   )clobnclobblobz= %sz= UPPER(%s)zFLIKE TRANSLATE(%s USING NCHAR_CS) ESCAPE TRANSLATE('\' USING NCHAR_CS)zMLIKE UPPER(TRANSLATE(%s USING NCHAR_CS)) ESCAPE TRANSLATE('\' USING NCHAR_CS)z> %sz>= %sz< %sz<= %s)exactiexactcontains	icontainsgtgteltlter   endswithistartswith	iendswithzLIKEC %s ESCAPE '\'zLIKEC UPPER(%s) ESCAPE '\')ru   rv   r   r{   r|   r}   z@REPLACE(REPLACE(REPLACE({}, '\', '\\'), '%%', '\%%'), '_', '\_')z'%%' || {} || '%%'z'%%' || UPPER({}) || '%%'z
{} || '%%'zUPPER({}) || '%%'z
'%%' || {}z'%%' || UPPER({}))ru   rv   r   r|   r{   r}   c                 &    i | ]\  }}|d |z   dz   S )zLIKE TRANSLATE( z5 USING NCHAR_CS) ESCAPE TRANSLATE('\' USING NCHAR_CS)rK   .0kvs      r!   
<dictcomp>zDatabaseWrapper.<dictcomp>   s@        Aq 	
! %1 1  rF   c                 &    i | ]\  }}|d |z   dz   S )zLIKEC z ESCAPE '\'rK   r   s      r!   r   zDatabaseWrapper.<dictcomp>   s4       -1Q8a<.(  rF   c                      t                      j        |i | | j        d                             dd          }|| j        _        d S )NOPTIONSuse_returning_intoT)super__init__settings_dictgetfeaturescan_return_columns_from_insert)rB   r5   kwargsr   	__class__s       r!   r   zDatabaseWrapper.__init__   sU    $)&)))!/	:>> $
 
 8J444rF   c                 D    | j         d                             dd          S )Nr   poolF)r   r   rB   s    r!   is_poolzDatabaseWrapper.is_pool   s     !),00???rF   c                    | j         sd S | j                            dd          dk    rt          d          | j        | j        d         f}|| j        vr|                                 }|                    d          }|dur|                    |           t          j
        d	| j        d         | j        d         t          | j                  d|}| j                            ||           | j        |         S )
NCONN_MAX_AGEr   z/Pooling doesn't support persistent connections.USERr   TPASSWORDuserpasswordr.   rK   )r   r   r   r   alias_connection_poolsget_connection_paramspopr   r3   create_poolr.   
setdefault)rB   pool_keyconnect_kwargspool_optionsr   s        r!   r   zDatabaseWrapper.pool   s   | 	4!!.!4499&A   J 26 :;4111!7799N)--f55L4''%%l333' '/+J7*++  !	 D "--h===%h//rF   c                     | j         r9| j                             d           | j        | j        d         f}| j        |= d S d S )NT)forcer   )r   r@   r   r   r   )rB   r   s     r!   
close_poolzDatabaseWrapper.close_pool  sQ    9 	1IOO$O'''
D$6v$>?H&x000	1 	1rF   c                     | j         S rG   )oracle_versionr   s    r!   get_database_versionz$DatabaseWrapper.get_database_version  s    ""rF   c                     | j         rt          st          d          | j        d                                         }d|v r|d= |S )NzBPooling isn't supported by cx_Oracle. Use python-oracledb instead.r   r   )r   r   r   r   copyrB   conn_paramss     r!   r   z%DatabaseWrapper.get_connection_params   s]    < 	 	&T   (388::;..01rF   c                     | j         r| j                                         S t          j        d| j        d         | j        d         t          | j                  d|S )Nr   r   r   rK   )r   acquirer3   connectr   r.   r   s     r!   get_new_connectionz"DatabaseWrapper.get_new_connection+  sm    9 	'9$$&&& 
#F+'
3D&''
 
 	
 
 	
rF   c                    t                                                       |                                 }|                    d           |                    dt          j        rdndz              |                                 d| j        vr|                                 }	 |                    d| j        d         z  dg           | j        | _	        | j
        | _        n-# t          j        $ r | j        | _	        | j        | _        Y nw xY w|                                 d	| j        _        |                                 s|                                  d S d S )
Nz+ALTER SESSION SET NLS_TERRITORY = 'AMERICA'zmALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS' NLS_TIMESTAMP_FORMAT = 'YYYY-MM-DD HH24:MI:SS.FF'z TIME_ZONE = 'UTC' r=   z!SELECT 1 FROM DUAL WHERE DUMMY %sru   X   )r   init_connection_statecreate_cursorexecuter   USE_TZr@   rA   _standard_operatorsr=   _standard_pattern_opspattern_opsr3   r4   _likec_operators_likec_pattern_ops
connectionstmtcachesizeget_autocommitcommit)rB   r?   r   s     r!   r   z%DatabaseWrapper.init_connection_state6  sr   %%'''##%%
 	DEEE
 	A'/>##B@	
 	
 	

 	dm++ ''))F>7.z:;E   "&!9#'#=   ) ; ; ;!%!6#'#:   ; LLNNN(*%""$$ 	KKMMMMM	 	s   #%C! !'D
DNc                 ,    t          | j        |           S rG   )FormatStylePlaceholderCursorr   )rB   r   s     r!   r   zDatabaseWrapper.create_cursora  s    +DOTBBBrF   c                     | j         vt          | d          5  t                      5  | j                                         cd d d            cd d d            S # 1 swxY w Y   d d d            d S # 1 swxY w Y   d S d S )NCOMMIT)r   r	   r9   r   r   s    r!   _commitzDatabaseWrapper._commite  s    ?&"422 0 04F4H4H 0 0--//0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 '&s4   A1A A1A	A1 A	!A11A58A5c                     | j         r:| j                            d| j                            |          z  dd           d S d S )Nz-- RELEASE SAVEPOINT %s (faked)z0.000)sqltime)queries_loggedqueries_logappendops
quote_name)rB   sids     r!   _savepoint_commitz!DatabaseWrapper._savepoint_commitl  sb     	##<tx?R?RSV?W?WW#     	 	rF   c                 ^    | j         5  || j        _        d d d            d S # 1 swxY w Y   d S rG   )wrap_database_errorsr   
autocommit)rB   r   s     r!   _set_autocommitzDatabaseWrapper._set_autocommitu  sy    & 	4 	4)3DO&	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4s   "&&c                     |                                  5 }|                    d           |                    d           ddd           dS # 1 swxY w Y   dS )zl
        Check constraints by setting them to immediate. Return them to deferred
        afterward.
        zSET CONSTRAINTS ALL IMMEDIATEzSET CONSTRAINTS ALL DEFERREDN)r?   r   )rB   table_namesr?   s      r!   check_constraintsz!DatabaseWrapper.check_constraintsy  s    
 [[]] 	;fNN:;;;NN9:::	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	;s   +AAAc                 f    	 | j                                          dS # t          j        $ r Y dS w xY w)NTF)r   pingr3   Errorr   s    r!   	is_usablezDatabaseWrapper.is_usable  sH    	O  """ 4 ~ 	 	 	55	    00c                 V    | j         rd S t                                                      S rG   )r   r   close_if_health_check_failed)rB   r   s    r!   r   z,DatabaseWrapper.close_if_health_check_failed  s(    9 	Fww33555rF   c                     |                                  5  t          d | j        j                            d          D                       cd d d            S # 1 swxY w Y   d S )Nc              3   4   K   | ]}t          |          V  d S rG   )int)r   r8   s     r!   	<genexpr>z1DatabaseWrapper.oracle_version.<locals>.<genexpr>  s(      LLAQLLLLLLrF   .)temporary_connectionr7   r   versionsplitr   s    r!   r   zDatabaseWrapper.oracle_version  s    &&(( 	M 	MLL)@)F)Fs)K)KLLLLL	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	Ms   6AAAc                 4    t          t          j                  S rG   )r   r3   __version__r   s    r!   oracledb_versionz DatabaseWrapper.oracledb_version  s     !5666rF   rG   )6rH   rI   rJ   vendordisplay_name
data_typesdata_type_check_constraints_limited_data_typesr;   r=   r   r   pattern_esc_pattern_opsitemsr   r   r3   r,   SchemaEditorClassr'   client_classr(   creation_classr)   features_classr*   introspection_classr+   	ops_classr/   validation_classr   r   propertyr   r   r   r   r   r
   r   r   r   r   r   r   r   r   r   r   r   r   __classcell__)r   s   @r!   rM   rM   n   s       FLJM 	v 		
 	0 	V 	 	D 	7 	0 	4 	( 	 	W 	<  	.!" 	 #$ &#/ ,%10N) .#9  J> 1,#7 4%9# # 41133I U4 U V443 <
*2,*42  $ VK(0"* ( L  !&&((  
 5A5G5G5I5I   H,!L%N%N/"I)J J J J J @ @ X@ 0 0 X041 1 1# # #	 	 	 
 
 \
) ) ) ) )V C C C \C0 0 0  4 4 4; ; ; ;  6 6 6 6 6 M M _M 7 7 _7 7 7 7 7rF   rM   c                       e Zd ZdZddZdS )OracleParama  
    Wrapper object for formatting parameters for Oracle. If the string
    representation of the value is large enough (greater than 4000 characters)
    the input size needs to be set as CLOB. Alternatively, if the parameter
    has an `input_size` attribute, then the value of the `input_size` attribute
    will be used instead. Otherwise, no input size will be set for the
    parameter when executing the query.
    Fc                 t   t           j        rCt          |t          j                  r)t          |t                    st	          j        |          }d}|j        j        j        }|s|du rd}n|du rd}t          |d          r|
                    |          | _        nt          |t          j        t          j        f          r|| _        nXt          ||j        |          | _        t          | j        t"                    r#t%          t          ||j        |                    }t          |d          r|j        | _        d S |dk    rt          j        | _        d S t          |t          j                  rt          j        | _        d S |r(t          |t,                    rt          j        | _        d S d | _        d S )Nr   Tr&   Fbind_parameter
input_sizei  )r   r   
isinstancedatetimer-   from_datetimedatabaser   &supports_boolean_expr_in_select_clauser6   r   r   r3   Binary	timedeltar   charsetstrlenr   DB_TYPE_CLOBDB_TYPE_TIMESTAMPboolDB_TYPE_BOOLEAN)rB   paramr?   strings_onlystring_sizehas_boolean_data_types         r!   r   zOracleParam.__init__  s    ? 	9uh/00	9uo66	9 $1%88EO$K 	 % 	}}%5*++ 
	T$33F;;D1CDEE 	T$D  )MMD$*C00 T!+eV^\"R"RSS5,'' 	##.DOOO4&3DOOOx011 	#&8DOOO" 	#z%'>'> 	#&6DOOO"DOOOrF   NF)rH   rI   rJ   __doc__r   rK   rF   r!   r   r     s2         )# )# )# )# )# )#rF   r   c                   *    e Zd ZdZd Zd Zd Zd ZdS )VariableWrappera	  
    An adapter class for cursor variables that prevents the wrapped object
    from being converted into a string when used to instantiate an OracleParam.
    This can be used generally for any other object that should be passed into
    Cursor.execute as-is.
    c                     || _         d S rG   var)rB   r  s     r!   r   zVariableWrapper.__init__  s    rF   c                     | j         S rG   r  )rB   r?   s     r!   r   zVariableWrapper.bind_parameter  s	    xrF   c                 ,    t          | j        |          S rG   )getattrr  )rB   keys     r!   __getattr__zVariableWrapper.__getattr__  s    tx%%%rF   c                 V    |dk    r|| j         |<   d S t          | j        ||           d S )Nr  )rA   setattrr  )rB   r  r    s      r!   __setattr__zVariableWrapper.__setattr__  s7    %<<!&DM#DHc5)))))rF   N)rH   rI   rJ   r  r   r   r  r!  rK   rF   r!   r  r    sZ             & & &* * * * *rF   r  c                       e Zd ZdZdZd Zed             Zed             Zed             Z	d Z
d Zd	 ZddZddZddZd Zd Zd Zd Zd ZdS )r   z
    Django uses "format" (e.g. '%s') style placeholders, but Oracle uses ":var"
    style. This fixes it -- but note that if you want to use a literal "%s" in
    a query, you'll need to use "%%s".
    zutf-8c                 h    |                                 | _         | j        | j         _        || _        d S rG   )r?   _output_type_handleroutputtypehandlerr  )rB   r   r  s      r!   r   z%FormatStylePlaceholderCursor.__init__  s-     ''))(,(A% rF   c                 P    d| v rt          j        |           nt          |           S )Nr   )decimalDecimalr   )r    s    r!   _output_number_converterz5FormatStylePlaceholderCursor._output_number_converter  s%    ),wu%%%3u::ErF   c                     |dk    rt           S t          j        |           t          j        d                              |           fdS )Nr   )precr&   c                 V    t          j        |                                         S )N)context)r'  r(  quantize)r   r-  quantize_values    r!   <lambda>zEFormatStylePlaceholderCursor._get_decimal_converter.<locals>.<lambda>   s$    ++44^W4UU rF   )r   r'  Contextr(  scaleb)	precisionscaler-  r/  s     @@r!   _get_decimal_converterz3FormatStylePlaceholderCursor._get_decimal_converter  sU    A::J/y111 ++22E6::UUUUUUrF   c                    |t           j        k    rw|dk    r|dk    rt          j        }n6t          }n.|dk    rt                              ||          }nt          j        }|                     t           j        d| j        |          S |t           j	        k    r&|                     t           j	        | j                  S dS )z
        Called for each db column fetched from cursors. Return numbers as the
        appropriate Python type, and NCLOB with JSON as strings.
        ir      )size	arraysizeoutconverter)r9  N)
r3   NUMBERr   r)  floatr5  r  STRINGr9  DB_TYPE_NCLOB)r?   r   defaultTypelengthr3  r4  r:  s          r!   r$  z1FormatStylePlaceholderCursor._output_type_handler  s     (/))}}>> $@#XLL $)LLQ  <RRu     <T:: *)	     H222::h4@P:QQQ 32rF   c                      	  fd|                                 D             S # t          $ r t           fd|D                       cY S w xY w)Nc                 :    i | ]\  }}|t          |d           S )Tr   )r   r   r   rB   s      r!   r   z?FormatStylePlaceholderCursor._format_params.<locals>.<dictcomp>+  s+    MMMdaA{1dD11MMMrF   c              3   :   K   | ]}t          |d           V  dS )TNrC  r   prB   s     r!   r   z>FormatStylePlaceholderCursor._format_params.<locals>.<genexpr>-  s/      DDQd33DDDDDDrF   )r   r>   r7   rB   paramss   ` r!   _format_paramsz+FormatStylePlaceholderCursor._format_params)  ss    	EMMMMfllnnMMMM 	E 	E 	EDDDDVDDDDDDDD	Es   # %A
Ac                 `   t          |d         d          rEi }|D ]-}|                                D ]\  }}|j        r
|j        ||<   .|r | j        di | d S d S d gt	          |d                   z  }|D ](}t          |          D ]\  }}|j        r
|j        ||<   )|r | j        |  d S d S )Nr   keysrK   )r6   r   r   setinputsizesr
  	enumerate)rB   params_listsizesrH  r   r    is          r!   _guess_input_sizesz/FormatStylePlaceholderCursor._guess_input_sizes/  s"   ;q>6** 	+E% 4 4 & 4 4HAu' 4#(#3a4  ,""++U+++++, , FSQ000E% 4 4 )& 1 1 4 4HAu' 4#(#3a4  +""E****+ +rF   c                 v    t          |d          rd |                                D             S d |D             S )Nr   c                 $    i | ]\  }}||j         S rK   r   r   s      r!   r   zAFormatStylePlaceholderCursor._param_generator.<locals>.<dictcomp>F  s     @@@AAq}@@@rF   c                     g | ]	}|j         
S rK   rT  )r   rF  s     r!   
<listcomp>zAFormatStylePlaceholderCursor._param_generator.<locals>.<listcomp>H  s    222aAM222rF   )r6   r   rG  s     r!   _param_generatorz-FormatStylePlaceholderCursor._param_generatorC  sD    67## 	3@@@@@@2262222rF   Fc                 X   |                     d          s|                     d          r
|d d         }|g }nt          |d          rd |D             }||z  }n|r~|r|d |D             }d t          t                              |                    D             fd|D             }d	                                 D             }|t          |          z  }n8d
 t          t          |                    D             }|t          |          z  }|| 	                    |          fS )N;/rK  c                     i | ]}|d |z  	S )z:%srK   )r   r   s     r!   r   z@FormatStylePlaceholderCursor._fix_for_params.<locals>.<dictcomp>U  s    111QAuqy111rF   c                 0    g | ]}t          |          |fS rK   )type)r   r  s     r!   rV  z@FormatStylePlaceholderCursor._fix_for_params.<locals>.<listcomp>e  s#    DDDEDKK/DDDrF   c                      i | ]\  }}|d |z  S z:arg%drK   )r   rP  
param_types      r!   r   z@FormatStylePlaceholderCursor._fix_for_params.<locals>.<dictcomp>f  s2       !Az HqL  rF   c                      g | ]
}|         S rK   rK   )r   ra  params_dicts     r!   rV  z@FormatStylePlaceholderCursor._fix_for_params.<locals>.<listcomp>j  s    JJJ
K
+JJJrF   c                      i | ]\  \  }}}||S rK   rK   )r   _r  placeholders       r!   r   z@FormatStylePlaceholderCursor._fix_for_params.<locals>.<dictcomp>k  s/       '>z5;U  rF   c                     g | ]}d |z  S r`  rK   )r   rP  s     r!   rV  z@FormatStylePlaceholderCursor._fix_for_params.<locals>.<listcomp>q  s    ???qX\???rF   )
r{   r6   rM  dictfromkeysr   r7   ranger
  rI  )rB   queryrH  unify_by_valuesr5   param_typesrc  s         @r!   _fix_for_paramsz,FormatStylePlaceholderCursor._fix_for_paramsJ  ss   
 >># 	%.."5"5 	#2#JE>FFVV$$ 	!11&111DTMEE 	! 	! EDVDDDK %.t}}[/I/I%J%J  K KJJJkJJJD BMBSBSBUBU  F U4[[ EE @?E#f++,>,>???DU4[[ Ed))&1111rF   Nc                    |                      ||d          \  }}|                     |g           t                      5  | j                            ||                     |                    cd d d            S # 1 swxY w Y   d S )NT)rl  )rn  rQ  r9   r?   r   rW  )rB   rk  rH  s      r!   r   z$FormatStylePlaceholderCursor.executeu  s    ,,UFD,QQv)))!! 	M 	M;&&ud.C.CF.K.KLL	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	Ms    .A;;A?A?c                 b    |sd S t          |          }                     |t          |                    \  }}|g fd|D             z   }                     |           t	                      5   j                            | fd|D                       cd d d            S # 1 swxY w Y   d S )Nc                 :    g | ]}                     |          S rK   )rI  rE  s     r!   rV  z<FormatStylePlaceholderCursor.executemany.<locals>.<listcomp>  s'    $Q$Q$QT%8%8%;%;$Q$Q$QrF   c                 :    g | ]}                     |          S rK   )rW  rE  s     r!   rV  z<FormatStylePlaceholderCursor.executemany.<locals>.<listcomp>  s'    DDDQ--a00DDDrF   )iterrn  nextrQ  r9   r?   executemany)rB   rk  rH  params_iterfirstparams	formatteds   `     r!   ru  z(FormatStylePlaceholderCursor.executemany{  s    	46ll!11%k9J9JKK{ !M$Q$Q$Q$Q[$Q$Q$QQ		***!! 	 	;**DDDD)DDD 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   0'B$$B(+B(c                 f    	 | j                                          d S # t          j        $ r Y d S w xY wrG   )r?   r@   r3   InterfaceErrorr   s    r!   r@   z"FormatStylePlaceholderCursor.close  sF    	K& 	 	 	DD	r   c                 :    t           | j        j        |           S rG   )r  r?   r  rB   r5   s     r!   r  z FormatStylePlaceholderCursor.var  s    t{5666rF   c                 :    t           | j        j        |           S rG   )r  r?   arrayvarr|  s     r!   r~  z%FormatStylePlaceholderCursor.arrayvar  s    3t{3T:;;;rF   c                 ,    t          | j        |          S rG   )r  r?   )rB   attrs     r!   r  z(FormatStylePlaceholderCursor.__getattr__  s    t{D)))rF   c                 *    t          | j                  S rG   )rs  r?   r   s    r!   __iter__z%FormatStylePlaceholderCursor.__iter__  s    DK   rF   r  rG   )rH   rI   rJ   r  r  r   staticmethodr)  r5  r$  rI  rQ  rW  rn  r   ru  r@   r  r~  r  r  rK   rF   r!   r   r     sK         G! ! !
 F F \F V V \V $R $R \$RLE E E+ + +(3 3 3)2 )2 )2 )2VM M M M      7 7 7< < <* * *! ! ! ! !rF   r   )8r  r  r'  r   r   
contextlibr   django.confr   django.core.exceptionsr   	django.dbr   django.db.backends.base.baser   &django.db.backends.oracle.oracledb_anyr   django.db.backends.utilsr	   django.utils.asyncior
   django.utils.encodingr   r   django.utils.functionalr   django.utils.versionr   r   r3   r   r   r"   clientr'   creationr(   r   r)   introspectionr*   
operationsr+   schemar,   utilsr-   r.   
validationr/   r9   r;   rM   r   r  r   rK   rF   r!   <module>r     s*      				  % % % % % %             7 7 7 7 7 7 $ $ $ $ $ $ < < < < < < > > > > > > 6 6 6 6 6 6 - - - - - - 8 8 8 8 8 8 8 8 3 3 3 3 3 3 2 2 2 2 2 2FKKKKKKK F F F

DDD
E
EEF# # #&   	" 	.   # " " " " " & & & & & & & & & & & & 0 0 0 0 0 0 * * * * * * ( ( ( ( ( ( ' ' ' ' ' ' ' ' * * * * * *   2	. 	. 	. 	. 	. 	. 	. 	.i7 i7 i7 i7 i7) i7 i7 i7X	3# 3# 3# 3# 3# 3# 3# 3#l* * * * * * * *0t! t! t! t! t! t! t! t! t! t!s   A A7$A22A7