File: //lib/python3/dist-packages/django/db/backends/oracle/__pycache__/introspection.cpython-310.pyc
o
3�a@7 � @ sd d dl mZ d dlZd dlmZ d dlmZmZm Z d dl
mZ edejd �ZG dd � d e�Z
dS )
� )�
namedtupleN)�models)�BaseDatabaseIntrospection� FieldInfo� TableInfo)�cached_propertyr )�is_autofield�is_jsonc sn e Zd ZdZedd� �Z� fdd�Zdd� Zdd � Zd
d� Z dd
d�Z
dd� Zdd� Zdd� Z
dd� Z� ZS )�DatabaseIntrospection� c C s� | j jdk r,tjdtjdtjdtjdtjdtjdtj dtj
dtjdtjdtj
dtjd iS tjdtjdtjdtjdtjdtjdtjdtjdtjdtjdtjd tjdiS )
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��self� r2 �I/usr/lib/python3/dist-packages/django/db/backends/oracle/introspection.py�data_types_reverse s6 ��z(DatabaseIntrospection.data_types_reversec s� |t jkrA|dd� \}}|dkr:|dkr|jrdS dS d| k r&dk r-n n|jr-dS |dkr3d S |jr8d
S dS |dkr@d
S n
|t jkrK|jrKdS t� �||�S )N� � r � �BigAutoField�BigIntegerFieldr �SmallAutoField�BooleanField� AutoField�IntegerFieldi����r � JSONField)r r! r r r �super�get_field_type)r1 � data_type�description� precision�scale�� __class__r2 r3 r@ 3 s$
�z$DatabaseIntrospection.get_field_typec s |� d� � fdd�|�� D �S )z>Return a list of table and view names in the current database.a�
SELECT table_name, 't'
FROM user_tables
WHERE
NOT EXISTS (
SELECT 1
FROM user_mviews
WHERE user_mviews.mview_name = user_tables.table_name
)
UNION ALL
SELECT view_name, 'v' FROM user_views
UNION ALL
SELECT mview_name, 'v' FROM user_mviews
c s$ g | ]}t � �|d �|d ��qS )r r )r �identifier_converter��.0�rowr0 r2 r3 �
<listcomp>X s $ z8DatabaseIntrospection.get_table_list.<locals>.<listcomp>)�execute�fetchall)r1 �cursorr2 r0 r3 �get_table_listH s
z$DatabaseIntrospection.get_table_listc C s� |� d|g� dd� |�� D �}| jd7 _|� d�| jj�|�| j�� g }|jD ]A}|d }|| \}}} }
}|i }|�t | �
|�g|dd� �|�|d pSd�|d pYd�|d
d� �|�| �|
�|�R � � q+|S )zi
Return a description of the table with the DB-API cursor.description
interface.
a>
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 internal_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
FROM user_tab_cols
LEFT OUTER JOIN
user_tables ON user_tables.table_name = user_tab_cols.table_name
WHERE user_tab_cols.table_name = UPPER(%s)
c S s4 i | ]\}}}}}}|||d kr|nd|||f�qS )�NULLNr2 )rI �column�default� collation�
internal_sizer r r2 r2 r3 �
<dictcomp>� s ��z?DatabaseIntrospection.get_table_description.<locals>.<dictcomp>r z,SELECT * FROM {} WHERE ROWNUM < 2 AND {} > 0r � r5 � r6 N)rL rM �cache_bust_counter�formatr �ops�
quote_namerB �appendr rG )r1 rN �
table_name� field_maprB �desc�namerT rR rS r r r2 r2 r3 �get_table_descriptionZ sL !�"��
�
��
�
�
�����z+DatabaseIntrospection.get_table_descriptionc C s |� � S )z7Identifier comparison is case insensitive under Oracle.)�lower)r1 r` r2 r2 r3 rG � s z*DatabaseIntrospection.identifier_converterr2 c C sn |� d|g� |�� }|r!| �|d �| �|�| �|d �d�gS |D ]}t|tj�r4||jd�g S q#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 )r` �tablerQ )rc rQ )rL �fetchonerG �
isinstancer r<