
    *hJ                        S r SSKJr  SSKJrJrJrJrJrJ	r	J
r
  SSKrSSKJr  SSKJrJrJr  SSKJr  SSKJr  SS	KJr  \(       a  SS
KJr  \" S\R8                  S-   5      r\S:  a
  \" SS5      rO	\" SS5      r " S S\5      rg)zDatabase Introspection.    )
namedtuple)TYPE_CHECKINGAnyDictListOptionalSetTupleN)VERSION)BaseDatabaseIntrospection	FieldInfo	TableInfo)Index)
OrderedSet)	FieldType)CursorWrapperr   )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                   |  ^  \ rS rSrSr0 \R                  S_\R                  S_\R                  S_\R                  S_\R                  S_\R                  S_\R                  S_\R                  S_\R                  S_\R                  S	_\R                   S
_\R"                  S_\R$                  S_\R&                  S_\R(                  S_\R*                  S_\R,                  S_\R.                  S\R0                  S0ErS\S\S\4U 4S jjrSSS\\   4S jrSSS\S\\   4S jr SSS\S\!\"\!\\#4   4   4S jr$SSS\S\%\"   4S jr& S"SSS\S\'S\\!\\4      4S jjr(SSS\S\!\\)\\4   4   4S jr*SSS\S\\)\\\4      4S jr+SSS\S\4S jr,S\'S\-\   S\.4S  jr/SSS\S\!\\'4   4S! jr0Sr1U =r2$ )#DatabaseIntrospectionS   z5Encapsulate backend-specific introspection utilities.	TextFieldDecimalField	DateFieldDateTimeField
FloatFieldIntegerFieldBigIntegerFieldSmallIntegerField	CharField	TimeField	data_typedescriptionreturnc                    > [         TU ]  X5      nSUR                  ;   a  US:X  a  gUS:X  a  gUS:X  a  gUR                  (       a  US:X  a  gUS:X  a  g	US:X  a  g
UR                  (       a  gU$ )Nauto_incrementr"   	AutoFieldr#   BigAutoFieldr$   SmallAutoFieldPositiveBigIntegerFieldPositiveIntegerFieldPositiveSmallIntegerField	JSONField)superget_field_typer   r   r   )selfr'   r(   
field_type	__class__s       \/var/www/auris/envauris/lib/python3.13/site-packages/mysql/connector/django/introspection.pyr4   $DatabaseIntrospection.get_field_typel   s    W+IC
{000^+"..%00'""..0^+-002 **    cursorr   c           
          UR                  S5        UR                  5        Vs/ s H'  n[        US   SSS.R                  US   5      5      PM)     sn$ s  snf )z>Return a list of table and view names in the current database.zSHOW FULL TABLESr   tv)z
BASE TABLEVIEW   )executefetchallr   get)r5   r;   rows      r8   get_table_list$DatabaseIntrospection.get_table_list   s\    )* (
( c!fS#>BB3q6JK(
 	
 
s   .A
table_namec           	         0 nUR                  SU/5        UR                  5       nU(       a  US   OSn[        S:  a  UR                  SU/5        OUR                  SXR/5        UR                  5        Vs0 s H  ofS   [	        U6 _M     nnUR                  SU R
                  R                  R                  U5       S35        S	[        S
[        [           4S jn/ n	UR                   GHs  nXvS      n
[        S:  a  U	R                  [        / USS QU" U
R                  5      =(       d    US   PU" U
R                  5      =(       d    US   PU" U
R                   5      =(       d    US   PUS   PU
R"                  PU
R$                  PU
R&                  PUS   U;   P76 5        M  U	R                  [        / USS QU" U
R                  5      =(       d    US   PU" U
R                  5      =(       d    US   PU" U
R                   5      =(       d    US   PUS   PU
R"                  PU
R(                  PU
R$                  PU
R&                  PUS   U;   P76 5        GMv     U	$ s  snf )zR
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()
            zSELECT * FROM z LIMIT 1ir)   c                 "    U b  [        U 5      $ U $ N)int)rJ   s    r8   to_int;DatabaseIntrospection.get_table_description.<locals>.to_int   s    ]3q611r:   Nr            )rA   fetchoneDJANGO_VERSIONrB   r   
connectionops
quote_namer   r   rM   r(   appendr   max_lennum_prec	num_scalecolumn_defaultr   r   	collation)r5   r;   rG   json_constraintsrD   default_column_collationline
field_inforN   fieldsinfos              r8   get_table_description+DatabaseIntrospection.get_table_description   s    ,. L	
 oo-03q6b  I%NN
  NN *6!$ <B??;LM;L41gx.;L
MT__00;;JGHQ	
	2c 	2hsm 	2 &&D1g&D	) 
bq
t||,7Q
 t}}-8a
 t~~.9$q'	

 Q
 ++
 


 ((
 Q#33
  bqt||,7Q t}}-8a t~~.9$q'	
 Q ++  

 (( Q#33# '> S Ns   7I&c                    UR                  SU R                  R                  R                  U5       35        [	        UR                  5       5      n[        5       nU H"  nUS   S:  d  M  UR                  US   5        M$     0 nU HJ  nUS   U;   a  M  US   U;  a
  SSS.XeS   '   US   S:X  a
  S	XeS      S
'   US   (       a  M@  S	XeS      S'   ML     U$ )zReturn indexes from table.SHOW INDEX FROM r   r@   r   rP   F)primary_keyuniquePRIMARYTrh   ri   )rA   rU   rV   rW   listrB   setadd)r5   r;   rG   rowsmulticol_indexesrD   indexess          r8   get_indexes!DatabaseIntrospection.get_indexes   s     	)$//*=*=*H*H*T)UVW FOO%&5C1vz $$SV,  /1C1v))1vW$275"IA 1v"15A.q66,0A)  r:   c                 x    U R                  X5      R                  5        H  nUS   S   (       d  M  US   s  $    g)z@
Returns the name of the primary key column for the given table
r@   rh   r   N)rq   items)r5   r;   rG   columns       r8   get_primary_key_column,DatabaseIntrospection.get_primary_key_column  sA     &&v:@@BFay''ay  C r:    table_fieldsc                 x    U R                  X5       H$  nSUR                  ;   d  M  X$R                  S./s  $    / $ )Nr+   )tableru   )rd   r   name)r5   r;   rG   ry   ra   s        r8   get_sequences#DatabaseIntrospection.get_sequences  s?     44VHJ:#3#33",HII I 	r:   c                 N    U R                  X5      n0 nU H  u  pVnXv4XE'   M     U$ )z
Return a dictionary of {field_name: (field_name_other_table, other_table)}
representing all relationships to the given table.
)get_key_columns)r5   r;   rG   constraints	relationsmy_fieldnameother_tableother_fields           r8   get_relations#DatabaseIntrospection.get_relations  s:     **6>	6A2L{'2&@I# 7Br:   c                 n    / nUR                  SU/5        UR                  UR                  5       5        U$ )zw
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)rA   extendrB   )r5   r;   rG   key_columnss       r8   r   %DatabaseIntrospection.get_key_columns,  s>     "$: L		
 	6??,-r:   c                     UR                  SU/5        UR                  5       nU(       d   U R                  R                  R                  $ US   $ )zn
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   )rA   rS   rU   features_mysql_storage_engine)r5   r;   rG   results       r8   get_storage_engine(DatabaseIntrospection.get_storage_engineA  sI    
 	PL	
 "??++AAAayr:   check_clausecolumnsc                    [        5       n[        R                  " U5      S   nS UR                  5        5       nU H  nUR                  [        R
                  R                  :X  d  M-  U R                  R                  R                  UR                  5      UR                  :X  d  Ml  UR                  SS U;   d  M  UR                  UR                  SS 5        M     U$ )Nr   c              3   J   #    U  H  oR                   (       a  M  Uv   M     g 7frL   )is_whitespace).0tokens     r8   	<genexpr>BDatabaseIntrospection._parse_constraint_columns.<locals>.<genexpr>V  s     T%8E@S@S%%%8s   #	#r@   )r   sqlparseparseflattenttypetokensNamerU   rV   rW   valuerm   )r5   r   r   check_columns	statementr   r   s          r8   _parse_constraint_columns/DatabaseIntrospection._parse_constraint_columnsQ  s     %/L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                 h   0 nSnUR                  XB/5        UR                  5        Hj  u  pVpxXS;  aI  [        5       SSSSU(       a  Xx4OSS.X5'   U R                  R                  R
                  (       a  / X5   S'   X5   S   R                  U5        Ml     Sn	UR                  X/5        UR                  5        HF  u  pZU
R                  5       S:X  a  S	X5   S
'   S	X5   S'   M)  U
R                  5       S:X  d  M?  S	X5   S'   MH     U R                  R                  R                  (       a  SnU R                  X5       Vs1 s H  oR                  iM     nnSn	UR                  X/5        UR                  5        H<  u  p^U R                  X5      n[        U5      U1:X  a  US-  nSU S3nUSSSS	SS.X5'   M>     UR                  SU R                  R                  R                  U5       35        UR                  5        Vs/ s H  nUSS US   4-   PM     sn H  u    nnnnnnUU;  a@  [        5       SSSSS.UU'   U R                  R                  R
                  (       a  / UU   S'   S	UU   S'   US:X  a  [        R                   OUR                  5       UU   S'   UU   S   R                  U5        U R                  R                  R
                  (       d  M  UU   S   R#                  US:X  a  SOS5        M     UR%                  5        H  n['        US   5      US'   M     U$ s  snf s  snf )z]
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)r   rh   ri   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 keyTrh   ri   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
            r@   __unnamed_constraint___rg   rR   
   )r   rh   ri   r   r   r   BTREEtypeDDESCASC)rA   rB   r   rU   r   supports_index_column_orderingrm   lower can_introspect_check_constraintsrd   r|   r   rl   rV   rW   r   suffixrX   valuesrk   )r5   r;   rG   r   
name_query
constraintru   	ref_table
ref_column
type_querykindunnamed_constraints_indexrc   r   r   constraint_columnsx_r   ordertype_s                        r8   get_constraints%DatabaseIntrospection.get_constraints`  sS    ')
 	z<09?9J5J	,)|#(#"">HI#:d+' ??++JJ8:K+H5#I.226: :K
 	z<0 & 1Jzz|},9='648'1)48'1 !2 ??##DD()%&*&@&@&T&Td		&T  J NN:|4,2OO,=(
%)%C%C &" )*zl:-2-#89R8SSU!VJ1#(#"!#'+' ->& 	)$//*=*=*H*H*T)UVW&,oo&75
&7AbqEQrUH&75
0Aq%FE5 K')|#(#"#'&E" ??++JJ35K&x0*.Kw' % 0ekkm v& y)--f5''FFFE"8,33eslFPUV'5
* &,,.J$(I)>$?Jy! /wH5
s   =L*L/)rx   )3__name__
__module____qualname____firstlineno____doc__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_reversestrr   r4   r   r   rE   rd   r   rM   boolrq   r   rv   r   r}   r
   r   r   r   r	   r   r   r   __static_attributes____classcell__)r7   s   @r8   r   r   S   s   ?> 	n 		
 	O 	, 	 	 	 	- 	, 	+ 	 	_ 	  	[!" 	{#$ 	[k', )  ,
_ 
i 
d%d36d	idL%36	c4T	?"	#6	%	36		#	 MO%36FI	d38n	%36	c5c?"	#%36	eCcM"	#* c c  *-c(	m%m36m	c3hm mr:   r   )r   collectionsr   typingr   r   r   r   r   r	   r
   r   djangor   rT   %django.db.backends.base.introspectionr   r   BaseFieldInfor   django.db.modelsr   django.utils.datastructuresr   mysql.connector.constantsr   mysql.connector.django.baser   _fieldsr   r   rx   r:   r8   <module>r      s   >  " G G G  , 
 # 2 / 9 KK	 I	H 	 Hz5 zr:   