
    Evgr<                         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  edej        dz             Z ed	e	j        d
z             Z G d de          ZdS )    )
namedtuple)models)BaseDatabaseIntrospection)	FieldInfo)	TableInfo)oracledbr   )is_autofieldis_jsoncommentr   )r   c                        e Zd ZdZej        dej        dej        dej        dej	        dej
        dej        dej        dej        dej        dej        d	ej        diZ fd
Zd Zd Zd ZddZd Zd Zd Z xZS )DatabaseIntrospection   	DateField
FloatFieldBinaryField	CharField	TextFieldDurationFieldDecimalFieldDateTimeFieldc                 L   |t           j        k    rY|dd         \  }}|dk    r=|dk    r|j        rdndS d|cxk     rdk     rn n	|j        rdS |dk    rd	S |j        rd
S dS |dk    rdS n|t           j        k    r	|j        rdS t                                          ||          S )N      r      BigAutoFieldBigIntegerFieldr   SmallAutoFieldBooleanField	AutoFieldIntegerFieldir   	JSONField)r   NUMBERr	   NCLOBr
   superget_field_type)self	data_typedescription	precisionscale	__class__s        d/var/www/pixelcanvas.ch/venv/lib/python3.11/site-packages/django/db/backends/oracle/introspection.pyr%   z$DatabaseIntrospection.get_field_type"   s    ''*1Q3/Iuzzr>> '3/.
 &&&&Q&&&&&;+C&++!^^)> - *&;)>$#| (.(([-@(;ww%%i===    c                 n     |                     d            fd|                                D             S )z>Return a list of table and view names in the current database.a  
            SELECT
                user_tables.table_name,
                't',
                user_tab_comments.comments
            FROM user_tables
            LEFT OUTER JOIN
                user_tab_comments
                ON user_tab_comments.table_name = user_tables.table_name
            WHERE
                NOT EXISTS (
                    SELECT 1
                    FROM user_mviews
                    WHERE user_mviews.mview_name = user_tables.table_name
                )
            UNION ALL
            SELECT view_name, 'v', NULL FROM user_views
            UNION ALL
            SELECT mview_name, 'v', NULL FROM user_mviews
        c                 |    g | ]8}t                              |d                    |d         |d                   9S )r   r      )r   identifier_converter.0rowr&   s     r,   
<listcomp>z8DatabaseIntrospection.get_table_list.<locals>.<listcomp>S   sO     
 
 
 d//A77QQHH
 
 
r-   executefetchall)r&   cursors   ` r,   get_table_listz$DatabaseIntrospection.get_table_list;   sS    	
 	
 	
,
 
 
 
((
 
 
 	
r-   c                    |                     d|||g           |                                }|r|d         nd}|                     d||g           d |                                D             }| xj        dz  c_        |                     d                    | j        j                            |          | j                             g }|j        D ]}|d         }||         \  }	}
}}}}|i z  }|	                    t          |                     |          |d         |	|d         |d	         pd|d
         pdg|dd         |
||||R             |S )zi
        Return a description of the table with the DB-API cursor.description
        interface.
        a  
            SELECT user_tables.default_collation
            FROM user_tables
            WHERE
                user_tables.table_name = UPPER(%s) AND
                NOT EXISTS (
                    SELECT 1
                    FROM user_mviews
                    WHERE user_mviews.mview_name = user_tables.table_name
                )
            UNION ALL
            SELECT user_views.default_collation
            FROM user_views
            WHERE user_views.view_name = UPPER(%s)
            UNION ALL
            SELECT user_mviews.default_collation
            FROM user_mviews
            WHERE user_mviews.mview_name = UPPER(%s)
            r    a  
            SELECT
                user_tab_cols.column_name,
                user_tab_cols.data_default,
                CASE
                    WHEN user_tab_cols.collation = %s
                    THEN NULL
                    ELSE user_tab_cols.collation
                END collation,
                CASE
                    WHEN user_tab_cols.char_used IS NULL
                    THEN user_tab_cols.data_length
                    ELSE user_tab_cols.char_length
                END as display_size,
                CASE
                    WHEN user_tab_cols.identity_column = 'YES' THEN 1
                    ELSE 0
                END as is_autofield,
                CASE
                    WHEN EXISTS (
                        SELECT  1
                        FROM user_json_columns
                        WHERE
                            user_json_columns.table_name = user_tab_cols.table_name AND
                            user_json_columns.column_name = user_tab_cols.column_name
                    )
                    THEN 1
                    ELSE 0
                END as is_json,
                user_col_comments.comments as col_comment
            FROM user_tab_cols
            LEFT OUTER JOIN
                user_col_comments ON
                user_col_comments.column_name = user_tab_cols.column_name AND
                user_col_comments.table_name = user_tab_cols.table_name
            WHERE user_tab_cols.table_name = UPPER(%s)
            c           	      h    i | ]/\  }}}}}}}|||r|d k    r|                                 nd||||f0S )NULLN)rstrip)r3   columndefault	collationdisplay_sizer	   r
   r   s           r,   
<dictcomp>z?DatabaseIntrospection.get_table_description.<locals>.<dictcomp>   st     
 
 
 $+K60A0A   t
 
 
r-   r   z,SELECT * FROM {} WHERE ROWNUM < 2 AND {} > 0   r      r   N)r7   fetchoner8   cache_bust_counterformat
connectionops
quote_namer(   appendr   r1   )r&   r9   
table_namer4   default_table_collation	field_mapr(   descnamerC   rA   rB   r	   r
   r   s                  r,   get_table_descriptionz+DatabaseIntrospection.get_table_descriptionX   s    	& Z0)	
 	
 	
, oo,/"7#a&&R$J %j1M'	
 '	
 '	
P
 
" ""#
 
 
	& 	1$:AA#..z::D<S 	
 	
 	

 & 	 	D7D $BJD--d33G GGLqGLq !""X   !         r-   c                 *    |                                 S )z7Identifier comparison is case insensitive under Oracle.)lower)r&   rR   s     r,   r1   z*DatabaseIntrospection.identifier_converter   s    zz||r-    c                 P   |                     d|g           |                                }|rL|                     |d                   |                     |          |                     |d                   dgS |D ])}t          |t          j                  r||j        dgc S *g S )Na  
            SELECT
                user_tab_identity_cols.sequence_name,
                user_tab_identity_cols.column_name
            FROM
                user_tab_identity_cols,
                user_constraints,
                user_cons_columns cols
            WHERE
                user_constraints.constraint_name = cols.constraint_name
                AND user_constraints.table_name = user_tab_identity_cols.table_name
                AND cols.column_name = user_tab_identity_cols.column_name
                AND user_constraints.constraint_type = 'P'
                AND user_tab_identity_cols.table_name = UPPER(%s)
            r   r   )rR   tabler@   )rX   r@   )r7   rG   r1   
isinstancer   r   r@   )r&   r9   rN   table_fieldsr4   fs         r,   get_sequencesz#DatabaseIntrospection.get_sequences   s     L!	
 	
 	
& oo 	 !55c!f==!66zBB"77A??    	C 	CA!V-.. C",AABBBBC	r-   c                      |                                 }|                    d|g            fd|                                D             S )z
        Return a dictionary of {field_name: (field_name_other_table, other_table)}
        representing all foreign keys in the given table.
        ab  
    SELECT ca.column_name, cb.table_name, cb.column_name
    FROM   user_constraints, USER_CONS_COLUMNS ca, USER_CONS_COLUMNS cb
    WHERE  user_constraints.table_name = %s AND
           user_constraints.constraint_name = ca.constraint_name AND
           user_constraints.r_constraint_name = cb.constraint_name AND
           ca.position = cb.positionc                     i | ]D\  }}}                     |                               |                               |          fES rV   r1   )r3   
field_namerel_table_namerel_field_namer&   s       r,   rD   z7DatabaseIntrospection.get_relations.<locals>.<dictcomp>  sf     
 
 

 ;
NN	 %%j11)).99)).994
 
 
r-   )upperr7   r8   r&   r9   rN   s   `  r,   get_relationsz#DatabaseIntrospection.get_relations   sp    
  %%''
( L		
 		
 		

 
 
 

 ?Eoo>O>O
 
 
 	
r-   c                 r     |                     d|g            fd|                                D             S )Na  
            SELECT
                cols.column_name
            FROM
                user_constraints,
                user_cons_columns cols
            WHERE
                user_constraints.constraint_name = cols.constraint_name AND
                user_constraints.constraint_type = 'P' AND
                user_constraints.table_name = UPPER(%s)
            ORDER BY
                cols.position
            c                 F    g | ]}                     |d                    S )r   r_   r2   s     r,   r5   zADatabaseIntrospection.get_primary_key_columns.<locals>.<listcomp>(  s+    OOOc))#a&11OOOr-   r6   rd   s   `  r,   get_primary_key_columnsz-DatabaseIntrospection.get_primary_key_columns  sL     L	
 	
 	
  POOOV__=N=NOOOOr-   c                    i }|                     d|g           |                                D ]<\  }}}}}|                     |          }|                    d          ||d||d||<   =|                     d|g           |                                D ]=\  }}}	}
|                     |          }dd|	|
fdd|                    d          d||<   >|                     d|g           |                                D ]]\  }}}}}|                     |          }d|d	k    ddd
|dk    rdn||                    d          |                    d          d||<   ^|S )zu
        Retrieve any constraints or keys (unique, pk, fk, check, index) across
        one or more columns.
        aL  
            SELECT
                user_constraints.constraint_name,
                LISTAGG(LOWER(cols.column_name), ',')
                    WITHIN GROUP (ORDER BY cols.position),
                CASE user_constraints.constraint_type
                    WHEN 'P' THEN 1
                    ELSE 0
                END AS is_primary_key,
                CASE
                    WHEN user_constraints.constraint_type IN ('P', 'U') THEN 1
                    ELSE 0
                END AS is_unique,
                CASE user_constraints.constraint_type
                    WHEN 'C' THEN 1
                    ELSE 0
                END AS is_check_constraint
            FROM
                user_constraints
            LEFT OUTER JOIN
                user_cons_columns cols
                ON user_constraints.constraint_name = cols.constraint_name
            WHERE
                user_constraints.constraint_type = ANY('P', 'U', 'C')
                AND user_constraints.table_name = UPPER(%s)
            GROUP BY user_constraints.constraint_name, user_constraints.constraint_type
            ,N)columnsprimary_keyuniqueforeign_keycheckindexa  
            SELECT
                cons.constraint_name,
                LISTAGG(LOWER(cols.column_name), ',')
                    WITHIN GROUP (ORDER BY cols.position),
                LOWER(rcols.table_name),
                LOWER(rcols.column_name)
            FROM
                user_constraints cons
            INNER JOIN
                user_cons_columns rcols
                ON rcols.constraint_name = cons.r_constraint_name AND rcols.position = 1
            LEFT OUTER JOIN
                user_cons_columns cols
                ON cons.constraint_name = cols.constraint_name
            WHERE
                cons.constraint_type = 'R' AND
                cons.table_name = UPPER(%s)
            GROUP BY cons.constraint_name, rcols.table_name, rcols.column_name
            F)rl   rm   rn   ro   rp   rk   a  
            SELECT
                ind.index_name,
                LOWER(ind.index_type),
                LOWER(ind.uniqueness),
                LISTAGG(LOWER(cols.column_name), ',')
                    WITHIN GROUP (ORDER BY cols.column_position),
                LISTAGG(cols.descend, ',') WITHIN GROUP (ORDER BY cols.column_position)
            FROM
                user_ind_columns cols, user_indexes ind
            WHERE
                cols.table_name = UPPER(%s) AND
                NOT EXISTS (
                    SELECT 1
                    FROM user_constraints cons
                    WHERE ind.index_name = cons.index_name
                ) AND cols.index_name = ind.index_name
            GROUP BY ind.index_name, ind.index_type, ind.uniqueness
            rm   Tnormalidx)rl   rm   rn   ro   rp   typerk   orders)r7   r8   r1   split)r&   r9   rN   constraints
constraintrk   pkrm   ro   other_tableother_columntype_rt   s                r,   get_constraintsz%DatabaseIntrospection.get_constraints*  s   
 6 L9	
 	
 	
< 7=oo6G6G 		 		2JVU22:>>J"==--! #' 'K
## 	( L+	
 	
 	
. ?Eoo>O>O 		 		:Jl22:>>J$ +\:"==--' 'K
## 	& L)	
 	
 	
, ;A//:K:K 	 	6Jvw22:>>J$ H,#!&(!2!2"==-- ,,s++	' 	'K
## r-   )rV   )__name__
__module____qualname__rH   r   DB_TYPE_DATEDB_TYPE_BINARY_DOUBLEDB_TYPE_BLOBDB_TYPE_CHARDB_TYPE_CLOBDB_TYPE_INTERVAL_DSDB_TYPE_NCHARDB_TYPE_NCLOBDB_TYPE_NVARCHARDB_TYPE_NUMBERDB_TYPE_TIMESTAMPDB_TYPE_VARCHARdata_types_reverser%   r:   rS   r1   r\   re   rh   r|   __classcell__)r+   s   @r,   r   r      s%        	{&}{{$o!;"O +> > > > >2
 
 
:| | ||  " " " "H
 
 
2P P P&t t t t t t tr-   r   N)collectionsr   	django.dbr   %django.db.backends.base.introspectionr   r   BaseFieldInfor   BaseTableInfo&django.db.backends.oracle.oracledb_anyr   _fieldsr   rV   r-   r,   <module>r      s    " " " " " "       K K K K K K L L L L L L L L L L L L ; ; ; ; ; ;J&)OO 	 J{M$9L$HII	O O O O O5 O O O O Or-   