
    Hwg<                         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y)    )
namedtupleN)models)BaseDatabaseIntrospection)	FieldInfo)	TableInfo)cached_propertyr   )is_autofieldis_jsoncommentr   )r   c                   ^     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                  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        j0                  dt        j2                  d	t        j4                  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    ^/var/www/horilla/myenv/lib/python3.12/site-packages/django/db/backends/oracle/introspection.pydata_types_reversez(DatabaseIntrospection.data_types_reverse   s*   ??,,t3""K$$k%%{""O&&  .  +##_   &&//&&&&&&--''''**K((.++_));     c                 8   |t         j                  k(  rW|dd \  }}|dk(  rD|dkD  r|j                  rdS dS d|cxk  rdk  rn n|j                  ry|dk(  ry	|j                  ry
y|dk(  r!y|t         j                  k(  r|j                  ry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    	(((*1Q/Iuzr> '33 ' /
 &Q&;+C+C+!^) --&)$#)//)k.A.Aw%i==r7   c           	          |j                  d       |j                         D cg c]'  }t        | j                  |d         |d   |d         ) c}S c c}w )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
        r   r      )executefetchallr   identifier_converter)r4   cursorrows      r5   get_table_listz$DatabaseIntrospection.get_table_listO   s\    	
0 (
 d//A7QQH
 	
 
s   ,Ac                 x   |j                  d|g       |j                         D 	ci c]  \  }}}}}}}	|||dk7  r|nd||||	f }
}}}}}}}	| xj                  dz  c_        |j                  dj                  | j                  j
                  j                  |      | j                               g }|j                  D ]h  }|d   }|
|   \  }}}}}}	|i z  }|j                  t        | j                  |      |d   ||d   |d   xs d|d	   xs dg|d
d |||||	        j |S c c}	}}}}}}w )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)
            NULLNr   z,SELECT * FROM {} WHERE ROWNUM < 2 AND {} > 0r      r9      r:   )rL   rM   cache_bust_counterformatr   ops
quote_namerF   appendr   rN   )r4   rO   
table_namecolumndefault	collationdisplay_sizer	   r
   r   	field_maprF   descnames                 r5   get_table_descriptionz+DatabaseIntrospection.get_table_descriptionl   s    	&N LQ)	
v "#
 
 "f,$ 
	 
& 	1$:AA##..z:D<S<S	

 && 	D7D $BJD--d3G GGLqGLq !"X   !  	6 k
 
s   D1c                 "    |j                         S )z7Identifier comparison is case insensitive under Oracle.)lower)r4   rb   s     r5   rN   z*DatabaseIntrospection.identifier_converter   s    zz|r7   c                 *   |j                  d|g       |j                         }|r:| j                  |d         | j                  |      | j                  |d         dgS |D ].  }t        |t        j
                        s||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   )rb   tabler\   )rg   r\   )rL   fetchonerN   
isinstancer   r@   r\   )r4   rO   r[   table_fieldsrP   fs         r5   get_sequencesz#DatabaseIntrospection.get_sequences   s     L!	
& oo !55c!f=!66zB"77A?   	CA!V--.",ABB	C 	r7   c           
         |j                         }|j                  d|g       |j                         D ci c]8  \  }}}| j                  |      | j                  |      | j                  |      f: c}}}S c c}}}w )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.position)upperrL   rM   rN   )r4   rO   r[   
field_namerel_table_namerel_field_names         r5   get_relationsz#DatabaseIntrospection.get_relations   s    
  %%'
( L		
  ?Eoo>O
 

 ;
NN	 %%j1)).9)).94 
 	
 
s   =A:c                     |j                  d|g       |j                         D cg c]  }| j                  |d          c}S c c}w )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
            r   )rL   rM   rN   )r4   rO   r[   rP   s       r5   get_primary_key_columnsz-DatabaseIntrospection.get_primary_key_columns  sG     L	
  >D__=NOc))#a&1OOOs   Ac                 ^   i }|j                  d|g       |j                         D ]4  \  }}}}}| j                  |      }|j                  d      ||d||d||<   6 |j                  d|g       |j                         D ]5  \  }}}	}
| j                  |      }dd|	|
fdd|j                  d      d||<   7 |j                  d|g       |j                         D ]O  \  }}}}}| j                  |      }d|d	k(  ddd
|dk(  rdn||j                  d      |j                  d      d||<   Q |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)rx   ry   rz   r{   r|   rw   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
            ry   Tnormalidx)rx   ry   rz   r{   r|   typerw   orders)rL   rM   rN   split)r4   rO   r[   constraints
constraintrw   pkry   r{   other_tableother_columntype_r   s                r5   get_constraintsz%DatabaseIntrospection.get_constraints'  s   
 6 L9	
< 7=oo6G 		2JVU22:>J"==-! #'K
#		 	( L+	
. ?Eoo>O 		:Jl22:>J$ +\:"==-'K
#		 	& L)	
, ;A//:K 	6Jvw22:>J$ H,#!&(!2"==- ,,s+	'K
#	 r7   ) )__name__
__module____qualname__rV   r   r6   rD   rQ   rc   rN   rl   rr   rt   r   __classcell__)rI   s   @r5   r   r      sK      @>2
:eN"H
2P&tr7   r   )collectionsr   r   	django.dbr   %django.db.backends.base.introspectionr   r   BaseFieldInfor   BaseTableInfodjango.utils.functionalr   _fieldsr   r   r7   r5   <module>r      s]    "   K L L 3&&)OO	 {M$9$9L$HI	J5 Jr7   