
    g8                         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y)    )
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            	       l    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j0                  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y|dk(  ry|dk(  ry|j                  r|dk(  ry|dk(  ry	|dk(  ry
|j                  j                         dk(  ry|j                  ry|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       ~/var/www/python.vincentserveurtest.ovh/public_html/venv/lib/python3.12/site-packages/django/db/backends/mysql/introspection.pyr(   z$DatabaseIntrospection.get_field_type2   s    W+I{C
{000^+"00%22'""..0~--222  &&(F2 **    c           
          |j                  d       |j                         D cg c]*  }t        |d   dddj                  |d         |d         , c}S c c}w )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()
            r   tv)z
BASE TABLEVIEW      )executefetchallr   get)r*   cursorrows      r.   get_table_listz$DatabaseIntrospection.get_table_listJ   sg    		
 (
( c!fS#>BB3q6JCPQFS(
 	
 
s   /Ac           	         i }| j                   j                  rS| j                   j                  j                  r3|j	                  d|g       |j                         D ch c]  }|d   	 }}|j	                  d|g       |j                         }|r|d   nd}|j	                  d||g       |j                         D ci c]  }|d   t        |  }}|j	                  d| j                   j                  j                  |      z         d }g }	|j                  D ]  }||d      }
|	j                  t        g |dd	  ||
j                        xs |d	    ||
j                        xs |d
    ||
j                        xs |d    ||
j                        xs |d   |d   |
j                   |
j"                  |
j$                  |
j&                  |d   |v |
j(                  |
j*                           |	S c c}w c c}w )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()
                r   z
            SELECT  table_collation
            FROM    information_schema.tables
            WHERE   table_schema = DATABASE()
            AND     table_name = %s
             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()
            zSELECT * FROM %s LIMIT 1c                      | t        |       S | S N)int)is    r.   to_intz;DatabaseIntrospection.get_table_description.<locals>.to_int   s    ]3q611r/   Nr5               )
connectionmysql_is_mariadbfeaturescan_introspect_json_fieldr6   r7   fetchoner   ops
quote_namer+   appendr   max_lennum_prec	num_scalecolumn_default	collationr
   r   r   r   )r*   r9   
table_namejson_constraintsr:   default_column_collationline
field_inforB   fieldsinfos              r.   get_table_descriptionz+DatabaseIntrospection.get_table_description[   sX   
 OO,,((BB NN  39//2CD2C3A2CD L	
 oo-03q6b  	  &z2#	
& <B??;LM;L4d1gx.;L
M&)<)<)G)G
)SS	
	2 &&Dd1g&DMM "1X4<<(3DG 4<<(3DG 4==)4T!W	
 4>>*5d1g G '' NN JJ $$ G// LL NN '& E  EJ Ns   G?>Hc                 t    | j                  ||      D ]"  }d|j                  v s||j                  dgc S  g S )Nr   )tablecolumn)r[   r
   name)r*   r9   rT   table_fieldsrX   s        r.   get_sequencesz#DatabaseIntrospection.get_sequences   sA    44VZHJ:#3#33",
HII I 	r/   c                     |j                  d|g       |j                         D ci c]  \  }}}|||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.
        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
            )r6   r7   )r*   r9   rT   
field_nameother_fieldother_tables         r.   get_relationsz#DatabaseIntrospection.get_relations   s[    
 	 L	
 9?8I
8I4
K k228I
 	
 
s   =c                     |j                  d|g       |j                         }|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   )r6   rK   rG   rI   _mysql_storage_engine)r*   r9   rT   results       r.   get_storage_enginez(DatabaseIntrospection.get_storage_engine   sM    
 	 L		
 "??++AAAayr/   c                    t               }t        j                  |      d   }d |j                         D        }|D ]  }|j                  t        j
                  j                  k(  s+| j                  j                  j                  |j                        |j                  k(  sh|j                  dd |v sz|j                  |j                  dd         |S )Nr   c              3   :   K   | ]  }|j                   r|  y wr?   )is_whitespace).0tokens     r.   	<genexpr>zBDatabaseIntrospection._parse_constraint_columns.<locals>.<genexpr>   s     T%8E@S@S%%8s   r4   )r	   sqlparseparseflattenttypetokensNamerG   rL   rM   valueadd)r*   check_clausecolumnscheck_columns	statementrv   ro   s          r.   _parse_constraint_columnsz/DatabaseIntrospection._parse_constraint_columns   s    "NN<03	TY%6%6%8TEx333OO''225;;?5;;NKK"%0!!%++a"34  r/   c                    i }d}|j                  ||g       |j                         D ]j  \  }}}}}	||vrGt               |	dk(  |	dv dd|r||fndd||<   | j                  j                  j
                  rg ||   d<   ||   d   j                  |       l | j                  j                  j                  rd	}
| j                  ||      D ch c]  }|j                   }}| j                  j                  rd
}nd}|j                  ||g       |j                         D ]<  \  }}| j                  ||      }t        |      |hk(  r
|
dz  }
d|
z  }|dddddd||<   > |j                  d| j                  j                  j                  |      z         |j                         D cg c]  }|dd |d   fz    c}D ]  \  }}}}}}}||vr<t               d| ddd||<   | j                  j                  j
                  rg ||   d<   d||   d<   |dk(  rt        j                   n|j#                         ||   d<   ||   d   j                  |       | j                  j                  j
                  s||   d   j%                  |dk(  rdnd        |j'                         D ]  }t)        |d         |d<    |S c c}w c c}w )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   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
                r4   z__unnamed_constraint_%s__TzSHOW INDEX FROM %srF   
   )r{   r   r   r   r   r   BTREEtypeDDESCASC)r6   r7   r	   rG   rI   supports_index_column_orderingry    can_introspect_check_constraintsr[   r_   rH   r~   setrL   rM   r   suffixlowerrN   valueslist)r*   r9   rT   constraints
name_query
constraintr^   	ref_table
ref_columnkindunnamed_constraints_indexrZ   r{   
type_queryrz   constraint_columnsxr]   
non_uniquer   colseqordertype_s                          r.   get_constraintsz%DatabaseIntrospection.get_constraints   s#   
 
& 	zJ<0?E?P;J	:t,)|#'=#8"&??"">HIz#:d+J' ??++JJ8:K
+H5
#I.226: @Q ??##DD()%&*&@&@&T&Td		&T   //

 NN:
|4,2OO,=(
L%)%C%C '&" )*zl:-2-!<?X!XJ1#(#"!#'+J' ->& 	 4??#6#6#A#A*#MM	
 '-oo&7G
&7AbqEQrUH&7G
BE:uffeU K')|#(",n"#'&E" ??++JJ35K&x0*.Kw' % 0ekkm v& y)--f5''FFE"8,33eslFPUV'G
* &,,.J$(I)>$?Jy! /M^G
s   J:&J?) )#__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;   r[   ra   rf   rj   r~   r   __classcell__)r-   s   @r.   r   r      s    	N 	~	
 	 	_ 	< 	, 	. 	 	 	. 	- 	; 	  	o!" 	#$ 	kk{+00
"Zx
,(qr/   r   )collectionsr   rr   MySQLdb.constantsr   %django.db.backends.base.introspectionr   r   BaseFieldInfor   BaseTableInfodjango.db.modelsr   django.utils.datastructuresr	   _fieldsr   r   r   r/   r.   <module>r      sx    "  ( K L L " 2MN	
 $
 {M$9$9L$HI	M5 Mr/   