
    Evg8                         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 d dlmZ  ed	ej        d
z             Z edd          Z ede
j        dz             Z	 G d de          ZdS )    )
namedtupleN)
FIELD_TYPE)BaseDatabaseIntrospection)	FieldInfo)	TableInfo)Index)
OrderedSetr   )extrais_unsignedhas_json_constraintcomment	data_typeInfoLinez`col_name data_type max_len num_prec num_scale extra column_default collation is_unsigned commentr   )r   c            	           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ej        dej        diZ fdZd Zd ZddZd Zd Zd Z d Z! xZ"S )DatabaseIntrospection	TextField	CharFieldDecimalField	DateFieldDateTimeField
FloatFieldIntegerField	JSONFieldBigIntegerFieldSmallIntegerField	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                                        dk    rdS |j        rdS |S )Nauto_incrementr   	AutoFieldr   BigAutoFieldr   SmallAutoFieldPositiveBigIntegerFieldPositiveIntegerFieldPositiveSmallIntegerFieldUUID	UUIDFieldr   )superget_field_typer
   r   r   upperr   )selfr   description
field_type	__class__s       c/var/www/pixelcanvas.ch/venv/lib/python3.11/site-packages/django/db/backends/mysql/introspection.pyr(   z$DatabaseIntrospection.get_field_type2   s    WW++I{CC
{000^++"{000%~222''" 	3...00~----22222 &&((F22; * 	;    c                 h    |                     d           d |                                D             S )z>Return a list of table and view names in the current database.z
            SELECT
                table_name,
                table_type,
                table_comment
            FROM information_schema.tables
            WHERE table_schema = DATABASE()
            c           	          g | ];}t          |d          ddd                    |d                   |d                   <S )r   tv)z
BASE TABLEVIEW      )r   get.0rows     r.   
<listcomp>z8DatabaseIntrospection.get_table_list.<locals>.<listcomp>V   sW     
 
 
 c!fS#>>BB3q6JJCPQFSS
 
 
r/   executefetchall)r*   cursors     r.   get_table_listz$DatabaseIntrospection.get_table_listJ   sH    		
 		
 		

 
((
 
 
 	
r/   c           	         i }| j         j        rF| j         j        j        r5|                    d|g           d |                                D             }|                    d|g           |                                }|r|d         nd}|                    d||g           d |                                D             }|                    d| j         j                            |          z             d	 }g }|j	        D ]}	||	d                  }
|
                    t          g |	d
d          ||
j                  p|	d          ||
j                  p|	d          ||
j                  p|	d          ||
j                  p|	d         |	d         |
j        |
j        |
j        |
j        |	d         |v |
j        |
j        R             |S )zj
        Return a description of the table with the DB-API cursor.description
        interface."
        av  
                SELECT c.constraint_name AS column_name
                FROM information_schema.check_constraints AS c
                WHERE
                    c.table_name = %s AND
                    LOWER(c.check_clause) =
                        'json_valid(`' + LOWER(c.constraint_name) + '`)' AND
                    c.constraint_schema = DATABASE()
                c                     h | ]
}|d          S r    r8   s     r.   	<setcomp>z>DatabaseIntrospection.get_table_description.<locals>.<setcomp>s   s    DDD3ADDDr/   z
            SELECT  table_collation
            FROM    information_schema.tables
            WHERE   table_schema = DATABASE()
            AND     table_name = %s
            r    ad  
            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,
                column_comment
            FROM information_schema.columns
            WHERE table_name = %s AND table_schema = DATABASE()
            c                 .    i | ]}|d          t          | S rC   )r   )r9   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/   Nr6               )
connectionmysql_is_mariadbfeaturescan_introspect_json_fieldr=   r>   fetchoneops
quote_namer+   appendr   max_lennum_prec	num_scalecolumn_default	collationr
   r   r   r   )r*   r?   
table_namejson_constraintsr:   default_column_collation
field_inforN   fieldsrH   infos              r.   get_table_descriptionz+DatabaseIntrospection.get_table_description[   s   
 O,	E(B	E NN     ED&//2C2CDDD L	
 	
 	
 oo-0#83q66b  	  &z2#	
 	
 	
& NM6??;L;LMMM
&)<)G)G
)S)SS	
 	
 	
	2 	2 	2 & 	 	Dd1g&DMM "1"XF4<((3DG F4<((3DG F4=))4T!W	
 F4>**5d1g G ' N J $ G// L N     " r/   rD   c                 d    |                      ||          D ]}d|j        v r||j        dgc S g S )Nr   )tablecolumn)rf   r
   name)r*   r?   r`   table_fieldsrc   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                 l    |                     d|g           d |                                D             S )z
        Return a dictionary of {field_name: (field_name_other_table, other_table)}
        representing all foreign keys in the given table.
        a  
            SELECT column_name, referenced_column_name, referenced_table_name
            FROM information_schema.key_column_usage
            WHERE table_name = %s
                AND table_schema = DATABASE()
                AND referenced_table_schema = DATABASE()
                AND referenced_table_name IS NOT NULL
                AND referenced_column_name IS NOT NULL
            c                      i | ]\  }}}|||fS rD   rD   )r9   
field_nameother_fieldother_tables       r.   rI   z7DatabaseIntrospection.get_relations.<locals>.<dictcomp>   s5     
 
 
4
K k2
 
 
r/   r<   )r*   r?   r`   s      r.   get_relationsz#DatabaseIntrospection.get_relations   sQ    
 	 L	
 	
 	

 
8>8I8I
 
 
 	
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.
        z
            SELECT engine
            FROM information_schema.tables
            WHERE
                table_name = %s AND
                table_schema = DATABASE()
            r   )r=   rW   rS   rU   _mysql_storage_engine)r*   r?   r`   results       r.   get_storage_enginez(DatabaseIntrospection.get_storage_engine   sX    
 	 L		
 		
 		
 "" 	B?+AAayr/   c                    t                      }t          j        |          d         }d |                                D             }|D ]|}|j        t          j        j        k    r`| j        j        	                    |j
                  |j
        k    r3|j
        dd         |v r"|                    |j
        dd                    }|S )Nr   c              3   (   K   | ]}|j         	|V  d S rK   )is_whitespace)r9   tokens     r.   	<genexpr>zBDatabaseIntrospection._parse_constraint_columns.<locals>.<genexpr>   s*      TTE@ST%TTTTTTr/   r5   )r	   sqlparseparseflattenttypetokensNamerS   rX   rY   valueadd)r*   check_clausecolumnscheck_columns	statementr   rz   s          r.   _parse_constraint_columnsz/DatabaseIntrospection._parse_constraint_columns   s    "N<003	TTY%6%6%8%8TTT 	5 	5Ex333O'225;??5;NNK"%00!!%+ad"3444r/   c                 ^   i }d}|                     ||g           |                                D ]m\  }}}}}	||vr@t                      |	dk    |	dv dd|r||fndd||<   | j        j        j        rg ||         d<   ||         d                             |           n| j        j        j        rd	}
d
 |                     ||          D             }| j        j	        rd}n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r4t                      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.
        a  
            SELECT kc.`constraint_name`, kc.`column_name`,
                kc.`referenced_table_name`, kc.`referenced_column_name`,
                c.`constraint_type`
            FROM
                information_schema.key_column_usage AS kc,
                information_schema.table_constraints AS c
            WHERE
                kc.table_schema = DATABASE() AND
                (
                    kc.referenced_table_schema = DATABASE() OR
                    kc.referenced_table_schema IS NULL
                ) AND
                c.table_schema = kc.table_schema AND
                c.constraint_name = kc.constraint_name AND
                c.constraint_type != 'CHECK' AND
                kc.table_name = %s
            ORDER BY kc.`ordinal_position`
        PRIMARY KEY>   UNIQUEr   FN)r   primary_keyuniqueindexcheckforeign_keyordersr   r   c                     h | ]	}|j         
S rD   )rj   )r9   re   s     r.   rE   z8DatabaseIntrospection.get_constraints.<locals>.<setcomp>   s'       "	  r/   a  
                    SELECT c.constraint_name, c.check_clause
                    FROM information_schema.check_constraints AS c
                    WHERE
                        c.constraint_schema = DATABASE() AND
                        c.table_name = %s
                a3  
                    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__TzSHOW INDEX FROM %sc                 6    g | ]}|d d         |d         fz   S )NrR   
   rD   )r9   xs     r.   r;   z9DatabaseIntrospection.get_constraints.<locals>.<listcomp>O  s>     G
 G
 G
!"AbqbEQrUHG
 G
 G
r/   )r   r   r   r   r   r   BTREEtypeDDESCASC)r=   r>   r	   rS   rU   supports_index_column_orderingr    can_introspect_check_constraintsrf   rT   r   setrX   rY   r   suffixlowerrZ   valueslist)r*   r?   r`   constraints
name_query
constraintri   	ref_table
ref_columnkindunnamed_constraints_indexr   
type_queryr   constraint_columnsrh   
non_uniquer   colseqordertype_s                        r.   get_constraintsz%DatabaseIntrospection.get_constraints   s   
 
& 	zJ<000?E?P?P 	; 	;;J	:t,,)||#'=#8"&??"">H#RIz#:#:d+ +J' ?+J ;8:K
+H5
#I.226::::?#D ,	()% &*&@&@&T&T  G / 


 NN:
|444,2OO,=,=  (
L%)%C%C '& &" )**zl::-2-!<?X!XJ1#(#"!#'+ +J'' 	 4?#6#A#A*#M#MM	
 	
 	
G
 G
&,oo&7&7G
 G
 G
 	W 	WBE:uffeU K'')||#(",n"#'& &E" ?+J 635K&x0*.Kw' % 0 0ekkmm v& y)--f555'F WE"8,33esllFFPUVVV%,,.. 	@ 	@J$(I)>$?$?Jy!!r/   )rD   )#__name__
__module____qualname__r   BLOBCHARDECIMAL
NEWDECIMALDATEDATETIMEDOUBLEFLOATINT24JSONLONGLONGLONGSHORTSTRINGTIME	TIMESTAMPTINY	TINY_BLOBMEDIUM_BLOB	LONG_BLOB
VAR_STRINGdata_types_reverser(   r@   rf   rl   rr   rv   r   r   __classcell__)r-   s   @r.   r   r      s        	N 	~	
 	 	_ 	< 	, 	. 	 	 	. 	- 	; 	  	o!" 	#$ 	kk{+ 0    0
 
 
"Z Z Zx   
 
 
,  (  q q q q q q qr/   r   )collectionsr   r}   MySQLdb.constantsr   %django.db.backends.base.introspectionr   r   BaseFieldInfor   BaseTableInfodjango.db.modelsr   django.utils.datastructuresr	   _fieldsr   r   rD   r/   r.   <module>r      s$   " " " " " "  ( ( ( ( ( ( K K K K K K L L L L L L L L L L L L " " " " " " 2 2 2 2 2 2JMN 	
 :$ 
 J{M$9L$HII	M M M M M5 M M M M Mr/   