
     h<                         d dl m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  edej        d	z             Z ed
e
j        dz             Z	 G d de          ZdS )    )
namedtupleN)models)BaseDatabaseIntrospection)	FieldInfo)	TableInfo)cached_propertyr   )is_autofieldis_jsoncommentr   )r   c                   d     e Zd ZdZed             Z fdZd Zd Zd Z	ddZ
d	 Zd
 Zd Z xZS )DatabaseIntrospection   c                 j   | j         j        dk     rt          j        dt          j        dt          j        dt          j        dt          j        dt          j        dt          j	        dt          j
        dt          j        dt          j        dt          j        dt          j        d	iS t          j        dt          j        dt          j        dt          j        dt          j        dt          j        dt          j        dt          j        dt          j        dt          j        dt          j        d	t          j        diS )
N)   BinaryField	TextField	DateField	CharFieldDurationField
FloatFieldDecimalFieldDateTimeField)
connectioncx_oracle_version	cx_OracleBLOBCLOBDATETIME
FIXED_CHARFIXED_NCHARINTERVALNATIVE_FLOATNCHARNCLOBNUMBERSTRING	TIMESTAMP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)selfs    f/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/django/db/backends/oracle/introspection.pydata_types_reversez(DatabaseIntrospection.data_types_reverse   s    ?,t33"K$k%{"O& . +#_   &/&&&-''*K(.+_);     c                 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   r%   r	   r$   r
   superget_field_type)r4   	data_typedescription	precisionscale	__class__s        r5   rD   z$DatabaseIntrospection.get_field_type6   s    	(((*1Q3/Iuzzr>> '3/.
 &&&&Q&&&&&;+C&++!^^)> - *&;)>$#| )/))k.A);ww%%i===r7   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rowr4   s     r5   
<listcomp>z8DatabaseIntrospection.get_table_list.<locals>.<listcomp>g   sO     
 
 
 d//A77QQHH
 
 
r7   executefetchall)r4   cursors   ` r5   get_table_listz$DatabaseIntrospection.get_table_listO   sS    	
 	
 	
,
 
 
 
((
 
 
 	
r7   c                 B   |                     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.
        aS  
            SELECT
                user_tab_cols.column_name,
                user_tab_cols.data_default,
                CASE
                    WHEN user_tab_cols.collation = user_tables.default_collation
                    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_tables ON user_tables.table_name = user_tab_cols.table_name
            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           	      @    i | ]\  }}}}}}}|||d k    r|nd||||fS )NULLN )rO   columndefault	collationdisplay_sizer	   r
   r   s           r5   
<dictcomp>z?DatabaseIntrospection.get_table_description.<locals>.<dictcomp>   sd     
 
 
 "f,,$
 
 
r7   r   z,SELECT * FROM {} WHERE ROWNUM < 2 AND {} > 0r      r9      r:   N)rS   rT   cache_bust_counterformatr   ops
quote_namerF   appendr   rM   )r4   rU   
table_name	field_maprF   descnamer^   r\   r]   r	   r
   r   s                r5   get_table_descriptionz+DatabaseIntrospection.get_table_descriptionl   s    	&N LQ)	
 )	
 )	
T
 
" ""#
 
 
	& 	1$:AA#..z::D<S 	
 	
 	

 & 	 	D7D $BJD--d33G GGLqGLq !""X   !         r7   c                 *    |                                 S )z7Identifier comparison is case insensitive under Oracle.)lower)r4   rj   s     r5   rM   z*DatabaseIntrospection.identifier_converter   s    zz||r7   rZ   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   )rj   tabler[   )ro   r[   )rS   fetchonerM   
isinstancer   r@   r[   )r4   rU   rg   table_fieldsrP   fs         r5   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	r7   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 rZ   rM   )rO   
field_namerel_table_namerel_field_namer4   s       r5   r_   z7DatabaseIntrospection.get_relations.<locals>.<dictcomp>  sf     
 
 

 ;
NN	 %%j11)).99)).994
 
 
r7   )upperrS   rT   r4   rU   rg   s   `  r5   get_relationsz#DatabaseIntrospection.get_relations   sp    
  %%''
( L		
 		
 		

 
 
 

 ?Eoo>O>O
 
 
 	
r7   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   rw   rN   s     r5   rQ   zADatabaseIntrospection.get_primary_key_columns.<locals>.<listcomp>%  s+    OOOc))#a&11OOOr7   rR   r|   s   `  r5   get_primary_key_columnsz-DatabaseIntrospection.get_primary_key_columns  sL     L	
 	
 	
  POOOV__=N=NOOOOr7   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)r   r   r   r   r   r   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
            r   Tnormalidx)r   r   r   r   r   typer   orders)rS   rT   rM   split)r4   rU   rg   constraints
constraintr   pkr   r   other_tableother_columntype_r   s                r5   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
## r7   )rZ   )__name__
__module____qualname__rb   r   r6   rD   rV   rk   rM   rt   r}   r   r   __classcell__)rI   s   @r5   r   r      s           _@> > > > >2
 
 
:e e eN  " " " "H
 
 
2P P P&t t t t t t tr7   r   )collectionsr   r   	django.dbr   %django.db.backends.base.introspectionr   r   BaseFieldInfor   BaseTableInfodjango.utils.functionalr   _fieldsr   rZ   r7   r5   <module>r      s    " " " " " "           K K K K K K L L L L L L L L L L L L 3 3 3 3 3 3J&)OO 	 J{M$9L$HII	J J J J J5 J J J J Jr7   