
    "i?                         d dl mZ d dlZd dlmZ d dlmZ d dlm	Z	m
ZmZ d dlmZ d dlmZ  edej        d	z             Z
ed
k     r edd          Zn edd          Z G d de	          ZdS )    )
namedtupleN)	FieldType)VERSION)BaseDatabaseIntrospection	FieldInfo	TableInfo)Index)
OrderedSetr   )extrais_unsignedhas_json_constraint      r   InfoLinezNcol_name data_type max_len num_prec num_scale extra column_default is_unsignedzXcol_name data_type max_len num_prec num_scale extra column_default collation is_unsignedc                       e Zd Zi 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	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 ZddZd Zd Zd Z d Z! xZ"S )DatabaseIntrospection	TextFieldDecimalField	DateFieldDateTimeField
FloatFieldIntegerFieldBigIntegerFieldSmallIntegerField	CharField	TimeFieldc                     t                                          ||          }d|j        v r|dk    rdS |dk    rdS |dk    rdS |j        r|dk    rdS |dk    rd	S |dk    rd
S |j        rdS |S )Nauto_incrementr   	AutoFieldr   BigAutoFieldr   SmallAutoFieldPositiveBigIntegerFieldPositiveIntegerFieldPositiveSmallIntegerField	JSONField)superget_field_typer   r   r   )self	data_typedescription
field_type	__class__s       \/srv/django_bis/venv311/lib/python3.11/site-packages/mysql/connector/django/introspection.pyr(   z$DatabaseIntrospection.get_field_typeT   s    WW++I{CC
{000^++"{000%~222''" 	3...00~----22222 * 	;    c                 h    |                     d           d |                                D             S )z>Return a list of table and view names in the current database.zSHOW FULL TABLESc           	      r    g | ]4}t          |d          ddd                    |d                             5S )r   tv)z
BASE TABLEVIEW   )r   get).0rows     r.   
<listcomp>z8DatabaseIntrospection.get_table_list.<locals>.<listcomp>m   sP     . . . #a&c"B"B"F"Fs1v"N"NOO . . .r/   )executefetchall)r)   cursors     r.   get_table_listz$DatabaseIntrospection.get_table_listj   s@    )***. .!??,,. . . 	.r/   c           	      P   i }|                     d|g           |                                }|r|d         nd}t          dk     r|                     d|g           n|                     d||g           d |                                D             }|                     d| j        j                            |          z             d	 }g }|j        D ]P}	||	d                  }
t          dk     r|                    t          g |	d
d          ||
j
                  p|	d          ||
j                  p|	d          ||
j                  p|	d         |	d         |
j        |
j        |
j        |	d         |v R             |                    t          g |	d
d          ||
j
                  p|	d          ||
j                  p|	d          ||
j                  p|	d         |	d         |
j        |
j        |
j        |
j        |	d         |v R             R|S )zj
        Return a description of the table with the DB-API cursor.description
        interface."
        z
            SELECT  table_collation
            FROM    information_schema.tables
            WHERE   table_schema = DATABASE()
            AND     table_name = %s
        r    r   a  
                SELECT
                    column_name, data_type, character_maximum_length,
                    numeric_precision, numeric_scale, extra, column_default,
                    CASE
                        WHEN column_type LIKE '%% unsigned' THEN 1
                        ELSE 0
                    END AS is_unsigned
                FROM information_schema.columns
                WHERE table_name = %s AND table_schema = DATABASE()
            ax  
                SELECT
                    column_name, data_type, character_maximum_length,
                    numeric_precision, numeric_scale, extra, column_default,
                    CASE
                        WHEN collation_name = %s THEN NULL
                        ELSE collation_name
                    END AS collation_name,
                    CASE
                        WHEN column_type LIKE '%% unsigned' THEN 1
                        ELSE 0
                    END AS is_unsigned
                FROM information_schema.columns
                WHERE table_name = %s AND table_schema = DATABASE()
            c                 .    i | ]}|d          t          | S )r   )r   )r7   lines     r.   
<dictcomp>z?DatabaseIntrospection.get_table_description.<locals>.<dictcomp>   s"    MMM4d1gxMMMr/   zSELECT * FROM %s LIMIT 1c                 (    | t          |           n| S )N)int)is    r.   to_intz;DatabaseIntrospection.get_table_description.<locals>.to_int   s    ]3q6661r/   Nr            )r:   fetchoneDJANGO_VERSIONr;   
connectionops
quote_namer+   appendr   max_lennum_prec	num_scalecolumn_defaultr   r   	collation)r)   r<   
table_namejson_constraintsr8   default_column_collation
field_inforF   fieldsrA   infos              r.   get_table_descriptionz+DatabaseIntrospection.get_table_descriptionp   s   
  
 \	 	 	 oo-0#83q66b  I%%NN 
 
 
 
 
 NN  +J79 9 9 NM6??;L;LMMM
1DO4G4R4RS]4^4^^___	2 	2 	2 & 	 	Dd1g&D	))i 
"1"X
F4<((3DG
 F4=))4T!W
 F4>**5d1g	

 G
 '
 J
 $
 G//
 
 
 
 
 
 
 i "1"XF4<((3DG F4=))4T!W F4>**5d1g	
 G ' N J $ G//       r/   c                    |                     d                    | j        j                            |                               t          |                                          }t                      }|D ])}|d         dk    r|                    |d                    *i }|D ][}|d         |v r|d         |vrddd||d         <   |d         dk    rd	||d                  d
<   |d         sd	||d                  d<   \|S )NzSHOW INDEX FROM {0}r   r5   r   rG   F)primary_keyuniquePRIMARYTr]   r^   )	r:   formatrL   rM   rN   listr;   setadd)r)   r<   rU   rowsmulticol_indexesr8   indexess          r.   get_indexesz!DatabaseIntrospection.get_indexes   s*     &!4!?!?
!K!KLL	N 	N 	N
 FOO%%&&55 	- 	-C1vzz $$SV,,, 
	1 
	1C1v)))1vW$$275"I"IA 1v""15A.q6 1,0A)r/   c                     |                      ||                                          D ]}|d         d         r
|d         c S dS )zP
        Returns the name of the primary key column for the given table
        r5   r]   r   N)rg   items)r)   r<   rU   columns       r.   get_primary_key_columnz,DatabaseIntrospection.get_primary_key_column   sZ     &&vz::@@BB 	! 	!Fay' !ay   !tr/    c                 d    |                      ||          D ]}d|j        v r||j        dgc S g S )Nr   )tablerj   )r[   r   name)r)   r<   rU   table_fieldsrX   s        r.   get_sequencesz#DatabaseIntrospection.get_sequences   sV    44VZHH 	J 	JJ:#333",
HHIIII 4 	r/   c                 V    |                      ||          }i }|D ]\  }}}||f||<   |S )z
        Return a dictionary of {field_name: (field_name_other_table, other_table)}
        representing all relationships to the given table.
        )get_key_columns)r)   r<   rU   constraints	relationsmy_fieldnameother_tableother_fields           r.   get_relationsz#DatabaseIntrospection.get_relations   sN    
 **6:>>	6A 	A 	A2L+{'2K&@Il##r/   c                     g }|                     d|g           |                    |                                           |S )z
        Return a list of (column_name, referenced_table_name, referenced_column_name)
        for all key columns in the given table.
        a@  
            SELECT column_name, referenced_table_name, referenced_column_name
            FROM information_schema.key_column_usage
            WHERE table_name = %s
                AND table_schema = DATABASE()
                AND referenced_table_name IS NOT NULL
                AND referenced_column_name IS NOT NULL)r:   extendr;   )r)   r<   rU   key_columnss       r.   rs   z%DatabaseIntrospection.get_key_columns   sU    
  : =G<	I 	I 	I 	6??,,---r/   c                     |                     d|g           |                                }|s| j        j        j        S |d         S )z
        Retrieve the storage engine for a given table. Return the default
        storage engine if the table doesn't exist.
        zBSELECT engine FROM information_schema.tables WHERE table_name = %sr   )r:   rJ   rL   features_mysql_storage_engine)r)   r<   rU   results       r.   get_storage_enginez(DatabaseIntrospection.get_storage_engine	  sV    
 	$&0\	3 	3 	3 "" 	B?+AAayr/   c                 :   i }d}|                     ||g           |                                D ]f\  }}}}||vr:t                      dddd|r||fndd||<   | j        j        j        rg ||         d<   ||         d                             |           gd}	|                     |	|g           |                                D ]W\  }}
|
                                dk    rd	||         d
<   d	||         d<   4|
                                dk    rd	||         d<   X| j        j        j        rd}d | 	                    ||          D             }d}	|                     |	|g           |                                D ]E\  }}| 
                    ||          }t          |          |hk    r
|dz  }d|z  }|dddd	dd||<   F|                     d| j        j                            |          z             d |                                D             D ]\  }}}}}}}||vr3t                      ddddd||<   | j        j        j        rg ||         d<   d	||         d<   |dk    rt          j        n|                                ||         d<   ||         d                             |           | j        j        j        r)||         d                             |dk    rdnd           |                                D ]}t%          |d                   |d<   |S )zu
        Retrieve any constraints or keys (unique, pk, fk, check, index) across
        one or more columns.
        aX  
            SELECT kc.`constraint_name`, kc.`column_name`,
                kc.`referenced_table_name`, kc.`referenced_column_name`
            FROM information_schema.key_column_usage AS kc
            WHERE
                kc.table_schema = DATABASE() AND
                kc.table_name = %s
            ORDER BY kc.`ordinal_position`
        FN)columnsr]   r^   indexcheckforeign_keyordersr   z
            SELECT c.constraint_name, c.constraint_type
            FROM information_schema.table_constraints AS c
            WHERE
                c.table_schema = DATABASE() AND
                c.table_name = %s
        zprimary keyTr]   r^   r   c                     h | ]	}|j         
S rl   )ro   )r7   rZ   s     r.   	<setcomp>z8DatabaseIntrospection.get_constraints.<locals>.<setcomp>G  s    \\\Tty\\\r/   a  
                SELECT cc.constraint_name, cc.check_clause
                FROM
                    information_schema.check_constraints AS cc,
                    information_schema.table_constraints AS tc
                WHERE
                    cc.constraint_schema = DATABASE() AND
                    tc.table_schema = cc.constraint_schema AND
                    cc.constraint_name = tc.constraint_name AND
                    tc.constraint_type = 'CHECK' AND
                    tc.table_name = %s
            r5   z__unnamed_constraint_%s__zSHOW INDEX FROM %sc                 6    g | ]}|d d         |d         fz   S )NrI   
   rl   )r7   xs     r.   r9   z9DatabaseIntrospection.get_constraints.<locals>.<listcomp>g  s>     G
 G
 G
!"AbqbEQrUHG
 G
 G
r/   )r   r]   r^   r   r   r   BTREEtypeDDESCASC)r:   r;   r
   rL   r~   supports_index_column_orderingrc   lower can_introspect_check_constraintsr[   _parse_constraint_columnsrb   rM   rN   r	   suffixrO   valuesra   )r)   r<   rU   rt   
name_query
constraintrj   	ref_table
ref_column
type_querykindunnamed_constraints_indexr   check_clauseconstraint_columnsrn   
non_uniquer   colseqordertype_s                        r.   get_constraintsz%DatabaseIntrospection.get_constraints  s   
 
 	zJ<0009?9J9J 	; 	;5J	:,,)||#(#"">H#RIz#:#:d+ +J' ?+J ;8:K
+H5
#I.226::::
 	zJ<000 & 1 1 	9 	9Jzz||},,9=J'648J'11))48J'1?#D 	()%\\T-G-GPZ-[-[\\\GJ NN:
|444,2OO,=,=  (
L%)%C%CLRY%Z%Z" )**zl::-2-!<?X!XJ1#(#"!#'+ +J'' 	+do.A.L.LZ.X.XXYYYG
 G
&,oo&7&7G
 G
 G
 	W 	WBE:uffeU K'')||#(#"#'& &E" ?+J 635K&x0*.Kw'9>'9I9Iu{{}}Kv&y)--f555'F WE"8,33esllFFPUVVV%,,.. 	@ 	@J$(I)>$?$?Jy!!r/   )rl   )#__name__
__module____qualname__r   BLOBDECIMAL
NEWDECIMALDATEDATETIMEDOUBLEFLOATINT24LONGLONGLONGSHORTSTRINGTIME	TIMESTAMPTINY	TINY_BLOBMEDIUM_BLOB	LONG_BLOB
VAR_STRINGdata_types_reverser(   r=   r[   rg   rk   rq   ry   rs   r   r   __classcell__)r-   s   @r.   r   r   <   s       > 	n 		
 	O 	, 	 	 	 	- 	, 	+ 	 	_ 	  	[!" 	{#$ 	[k' ,    ,. . .S S Sj  2     	 	 	     e e e e e e er/   r   )collectionsr   sqlparsemysql.connector.constantsr   djangor   rK   %django.db.backends.base.introspectionr   r   BaseFieldInfor   django.db.modelsr	   django.utils.datastructuresr
   _fieldsr   r   rl   r/   r.   <module>r      s@  : # " " " " "  / / / / / / , , , , , ,          # " " " " " 2 2 2 2 2 2JKK 	 Iz	 HH z	  H@ @ @ @ @5 @ @ @ @ @r/   