Ë
    5¾ªj†J  ã                   ó  — d Z ddlmZ ddlmZmZmZmZmZm	Z	m
Z
 ddl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 dd	lmZ erdd
lmZ  edej8                  dz   «      Zedk  r
 edd«      Zn	 edd«      Z G d„ de«      Zy)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                   óZ  ‡ — e Zd 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dededefˆ fd„Zdddee   fd„Zdddedee   fd„Zdddede e!e ee"f   f   fd„Z#dddede$e!   fd„Z%	 d dddede&dee eef      fd„Z'dddede ee(eef   f   fd„Z)dddedee(eeef      fd„Z*dddedefd„Z+de&de,e   de-fd„Z.dddede ee&f   fd„Z/ˆ xZ0S )!ÚDatabaseIntrospectionz5Encapsulate backend-specific introspection utilities.Ú	TextFieldÚDecimalFieldÚ	DateFieldÚDateTimeFieldÚ
FloatFieldÚIntegerFieldÚBigIntegerFieldÚSmallIntegerFieldÚ	CharFieldÚ	TimeFieldÚ	data_typeÚdescriptionÚreturnc                 ó¾   •— 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                  ry|S )NÚauto_incrementr!   Ú	AutoFieldr"   ÚBigAutoFieldr#   ÚSmallAutoFieldÚPositiveBigIntegerFieldÚPositiveIntegerFieldÚPositiveSmallIntegerFieldÚ	JSONField)ÚsuperÚget_field_typer   r   r   )Úselfr&   r'   Ú
field_typeÚ	__class__s       €úc/var/www/html/serviGia/entorno/lib/python3.12/site-packages/mysql/connector/django/introspection.pyr3   z$DatabaseIntrospection.get_field_typel   s…   ø€ Ü‘WÑ+¨I°{ÓCˆ
Ø˜{×0Ñ0Ñ0Ø˜^Ò+Ø"ØÐ.Ò.Ø%ØÐ0Ò0Ø'Ø×"Ò"ØÐ.Ò.Ø0Ø˜^Ò+Ø-ØÐ0Ò0Ø2ð ×*Ò*ØØÐó    Úcursorr   c           
      ó®   — |j                  d«       |j                  «       D �cg c]&  }t        |d   dddœj                  |d   «      «      ‘Œ( c}S c c}w )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)r4   r9   Úrows      r7   Úget_table_listz$DatabaseIntrospection.get_table_list‚   sW   € à�‰Ð)Ô*ð —‘Ó(ö
àô �c˜!‘f¨S¸#Ñ>×BÑBÀ3ÀqÁ6ÓJÕKò
ð 	
ùò 
s   ¤+AÚ
table_namec           	      ó€  — i }|j                  d|g«       |j                  «       }|r|d   nd}t        dk  r|j                  d|g«       n|j                  d||g«       |j                  «       D �ci c]  }|d   t	        |Ž “Œ }}|j                  d| j
                  j                  j                  |«      › d�«       d	t        d
t        t           fd„}g }	|j                  D �]Q  }||d      }
t        dk  r™|	j                  t        g |dd ¢ ||
j                  «      xs |d   ‘ ||
j                  «      xs |d   ‘ ||
j                   «      xs |d   ‘|d   ‘|
j"                  ‘|
j$                  ‘|
j&                  ‘|d   |v ‘­Ž «       Œ®|	j                  t        g |dd ¢ ||
j                  «      xs |d   ‘ ||
j                  «      xs |d   ‘ ||
j                   «      xs |d   ‘|d   ‘|
j"                  ‘|
j(                  ‘|
j$                  ‘|
j&                  ‘|d   |v ‘­Ž «       �ŒT |	S c c}w )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()
            zSELECT * FROM z LIMIT 1Úir(   c                 ó    — | �t        | «      S | S ©N)Úint)rG   s    r7   Úto_intz;DatabaseIntrospection.get_table_description.<locals>.to_intË   s   € Ø˜]”3�q“6Ð1°Ð1r8   Nr   é   é   é   )r?   ÚfetchoneÚDJANGO_VERSIONr@   r   Ú
connectionÚopsÚ
quote_namer   r   rJ   r'   Úappendr   Úmax_lenÚnum_precÚ	num_scaleÚcolumn_defaultr   r   Ú	collation)r4   r9   rD   Újson_constraintsrB   Údefault_column_collationÚlineÚ
field_inforK   ÚfieldsÚinfos              r7   Úget_table_descriptionz+DatabaseIntrospection.get_table_descriptionŠ   sÄ  € ð ,.Ðà�‰ðð ˆLô	
ð �o‰oÓˆÙ-0 3 q¢6°bÐ ô ˜IÒ%Ø�N‰Nð
ð �õð �N‰Nðð *¨:Ð6ô!ð$ <B¿?¹?Ó;LÖM°4�d˜1‘gœx¨˜Ñ.ÐMˆ
ÐMà�‰Ø˜TŸ_™_×0Ñ0×;Ñ;¸JÓGÐHÈÐQô	
ð	2”cð 	2œh¤s™mó 	2ð ˆØ×&Ñ&ó 	ˆDØ˜d 1™gÑ&ˆDÜ 	Ò)Ø—‘Üð 
Ø˜b˜q˜ð
á˜tŸ|™|Ó,Ò7°°Q±ð
ñ ˜tŸ}™}Ó-Ò8°°a±ð
ñ ˜tŸ~™~Ó.Ò9°$°q±'ð	
ð
 ˜Q™ð
ð ×+Ñ+ð
ð Ÿ
™
ð
ð ×(Ñ(ð
ð ˜Q™Ð#3Ð3ò
õð —‘Üð Ø˜b˜q˜ðá˜tŸ|™|Ó,Ò7°°Q±ðñ ˜tŸ}™}Ó-Ò8°°a±ðñ ˜tŸ~™~Ó.Ò9°$°q±'ð	ð
 ˜Q™ðð ×+Ñ+ðð Ÿ™ðð Ÿ
™
ðð ×(Ñ(ðð ˜Q™Ð#3Ð3òöð#	ð> ˆùòS Ns   Á2H;c                 ó�  — |j                  d| j                  j                  j                  |«      › �«       t	        |j                  «       «      }t        «       }|D ]  }|d   dkD  sŒ|j                  |d   «       Œ! i }|D ]@  }|d   |v rŒ|d   |vrdddœ||d   <   |d   dk(  rd	||d      d
<   |d   rŒ6d	||d      d<   ŒB |S )zReturn indexes from table.úSHOW INDEX FROM r   r>   r   rL   F)Úprimary_keyÚuniqueÚPRIMARYTrc   rd   )r?   rQ   rR   rS   Úlistr@   ÚsetÚadd)r4   r9   rD   ÚrowsÚmulticol_indexesrB   Úindexess          r7   Úget_indexesz!DatabaseIntrospection.get_indexesð   sù   € ð 	�‰Ð)¨$¯/©/×*=Ñ*=×*HÑ*HÈÓ*TÐ)UÐVÔWô �F—O‘OÓ%Ó&ˆÜ›5ÐØò 	-ˆCØ�1‰v˜‹zØ ×$Ñ$ S¨¡VÕ,ð	-ð /1ˆØò 
	1ˆCØ�1‰vÐ)Ñ)ØØ�1‰v˜WÑ$Ø27À5Ñ"I�˜˜A™‘ð �1‰v˜Ò"Ø15�˜˜A™‘ Ñ.Ø�q“6Ø,0�˜˜A™‘ Ò)ð
	1ð ˆr8   c                 ól   — | j                  ||«      j                  «       D ]  }|d   d   sŒ|d   c S  y)zP
        Returns the name of the primary key column for the given table
        r>   rc   r   N)rl   Úitems)r4   r9   rD   Úcolumns       r7   Úget_primary_key_columnz,DatabaseIntrospection.get_primary_key_column  sD   € ð ×&Ñ& v¨zÓ:×@Ñ@ÓBò 	!ˆFØ�a‰y˜Ó'Ø˜a‘yÒ ð	!ð r8   Útable_fieldsc                 ót   — | j                  ||«      D ]"  }d|j                  v sŒ||j                  dœgc S  g S )Nr*   )Útablero   )r`   r   Úname)r4   r9   rD   rq   r]   s        r7   Úget_sequencesz#DatabaseIntrospection.get_sequences  sI   € ð ×4Ñ4°V¸ZÓHò 	JˆJØ :×#3Ñ#3Ò3à",¸
¿¹ÑHÐIÒIð	Jð ˆ	r8   c                 óR   — | j                  ||«      }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)r4   r9   rD   ÚconstraintsÚ	relationsÚmy_fieldnameÚother_tableÚother_fields           r7   Úget_relationsz#DatabaseIntrospection.get_relations  sH   € ð ×*Ñ*¨6°:Ó>ˆØˆ	Ø6Aò 	AÑ2ˆL˜+ {Ø'2°KÐ&@ˆI�lÒ#ð	AàÐr8   c                 ón   — g }|j                  d|g«       |j                  |j                  «       «       |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@   )r4   r9   rD   Úkey_columnss       r7   rw   z%DatabaseIntrospection.get_key_columns,  s>   € ð "$ˆØ�‰ð:ð ˆLô		
ð 	×Ñ˜6Ÿ?™?Ó,Ô-ØÐr8   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.
        zBSELECT engine FROM information_schema.tables WHERE table_name = %sr   )r?   rO   rQ   ÚfeaturesÚ_mysql_storage_engine)r4   r9   rD   Úresults       r7   Úget_storage_enginez(DatabaseIntrospection.get_storage_engineA  sI   € ð
 	�‰ØPØˆLô	
ð —‘Ó"ˆáØ—?‘?×+Ñ+×AÑAÐAà�a‰yÐr8   Úcheck_clauseÚcolumnsc                 ó°  — 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rI   )Úis_whitespace)Ú.0Útokens     r7   ú	<genexpr>zBDatabaseIntrospection._parse_constraint_columns.<locals>.<genexpr>V  s   è ø€ ÒT˜EÀ×@SÓ@S”%ÑTùs   ‚”r>   éÿÿÿÿ)r   ÚsqlparseÚparseÚflattenÚttypeÚtokensÚNamerQ   rR   rS   Úvaluerh   )r4   r†   r‡   Úcheck_columnsÚ	statementr“   rŒ   s          r7   Ú_parse_constraint_columnsz/DatabaseIntrospection._parse_constraint_columnsQ  s¯   € ô %/£LˆÜ—N‘N <Ó0°Ñ3ˆ	ÙT Y×%6Ñ%6Ó%8ÔTˆØò 	5ˆEà—‘œxŸ™×3Ñ3Ó3Ø—O‘O×'Ñ'×2Ñ2°5·;±;Ó?À5Ç;Á;ÓNØ—K‘K  "Ð%¨Ò0à×!Ñ! %§+¡+¨a°Ð"3Õ4ð	5ð Ðr8   c                 ó$  — i }d}|j                  ||g«       |j                  «       D ]d  \  }}}}||vrBt        «       dddd|r||fnddœ||<   | j                  j                  j
                  rg ||   d<   ||   d   j                  |«       Œf d}	|j                  |	|g«       |j                  «       D ]E  \  }}
|
j                  «       dk(  rd	||   d
<   d	||   d<   Œ*|
j                  «       dk(  sŒ>d	||   d<   ŒG | j                  j                  j                  r�d}| j                  ||«      D �ch c]  }|j                  ’Œ }}d}	|j                  |	|g«       |j                  «       D ]=  \  }}| j                  ||«      }t        |«      |hk(  r|dz  }d|› d�}|dddd	ddœ||<   Œ? |j                  d| j                  j                  j                  |«      › �«       |j                  «       D �cg c]  }|dd |d   fz   ‘Œ c}D ]Ò  \  }}}}}}}||vr;t        «       d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.
        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‡   rc   rd   Ú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 keyTrc   rd   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_Ú__rb   rN   é
   )r‡   rc   rd   r›   rœ   rš   ÚBTREEÚtypeÚDÚDESCÚASC)r?   r@   r   rQ   r‚   Úsupports_index_column_orderingrh   ÚlowerÚ can_introspect_check_constraintsr`   rt   r˜   rg   rR   rS   r   ÚsuffixrT   Úvaluesrf   )r4   r9   rD   rx   Ú
name_queryÚ
constraintro   Ú	ref_tableÚ
ref_columnÚ
type_queryÚkindÚunnamed_constraints_indexr_   r‡   r†   Úconstraint_columnsÚxÚ_rš   ÚorderÚtype_s                        r7   Úget_constraintsz%DatabaseIntrospection.get_constraints`  sŠ  € ð ')ˆðˆ
ð 	�‰�z J <Ô0Ø9?¿¹Ó9Jò 	;Ñ5ˆJ˜ 	¨:Ø Ñ,ä)›|Ø#(Ø#Ø"Ø"Ù>H I¨zÑ#:Èdñ+�˜JÑ'ð —?‘?×+Ñ+×JÒJØ8:�K 
Ñ+¨HÑ5Ø˜
Ñ# IÑ.×2Ñ2°6Õ:ð	;ðˆ
ð 	�‰�z J <Ô0Ø &§¡Ó 1ò 	9ÑˆJ˜Ø�z‰z‹|˜}Ò,Ø9=�˜JÑ'¨Ñ6Ø48�˜JÑ'¨Ò1Ø—‘“ Ó)Ø48�˜JÑ'¨Ò1ð	9ð �?‰?×#Ñ#×DÒDØ()Ð%à&*×&@Ñ&@ÀÈÓ&TöØ"�—	“	ðˆGð ðˆJð �N‰N˜:¨
 |Ô4Ø,2¯O©OÓ,=ò Ñ(�
˜LØ%)×%CÑ%CØ  'ó&Ð"ô Ð)Ó*¨z¨lÒ:Ø-°Ñ2Ð-Ø#8Ð9RÐ8SÐSUÐ!V�Jà1Ø#(Ø#Ø"Ø!Ø#'ñ+�˜JÒ'ðð& 	�‰Ð)¨$¯/©/×*=Ñ*=×*HÑ*HÈÓ*TÐ)UÐVÔWà&,§o¡oÓ&7ö5
Ø!"ˆAˆbˆqˆE�Q�r‘U�HÓò5
ò 	WÑ0ˆAˆq�%˜˜F E¨5ð ˜KÑ'ä)›|Ø#(Ø#Ø"Ø#'ñ&�˜EÑ"ð —?‘?×+Ñ+×JÒJØ35�K Ñ& xÑ0Ø*.ˆK˜Ñ˜wÑ'à %¨Ò 0”—’°e·k±k³mð ˜Ñ˜vÑ&ð ˜Ñ˜yÑ)×-Ñ-¨fÔ5Ø�‰×'Ñ'×FÓFØ˜EÑ" 8Ñ,×3Ñ3¸eÀsºl±FÐPUÕVð'	Wð* &×,Ñ,Ó.ò 	@ˆJÜ$(¨°IÑ)>Ó$?ˆJ�yÒ!ð	@àÐùòwùòH5
s   Ä2LÇ5L)© )1Ú__name__Ú
__module__Ú__qualname__Ú__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   r3   r   r   rC   r`   r   rJ   Úboolrl   r   rp   r   ru   r
   r}   rw   r…   r	   r   r˜   r·   Ú__classcell__)r6   s   @r7   r   r   S   së  ø„ Ù?ðØ�‰˜ðà×Ñ˜>ðð 	×Ñ˜nðð 	�‰˜ð	ð
 	×Ñ˜Oðð 	×Ñ˜,ðð 	�‰˜ðð 	�‰˜ðð 	�‰˜ðð 	×ÑÐ-ðð 	�‰Ð,ðð 	×Ñ˜+ðð 	�‰˜ðð 	×Ñ˜_ðð 	�‰˜ðð  	×Ñ˜[ð!ð" 	×Ñ˜{ð#ð$ 	×Ñ˜[Ø×Ñ˜kñ'Ðð,¨ð ¸)ð Èõ ð,
 _ð 
¸¸i¹ó 
ðdØ%ðdØ36ðdà	ˆi‰ódðLØ%ðØ36ðà	ˆc�4˜˜T˜	‘?Ð"Ñ	#óð6	Ø%ð	Ø36ð	à	�#‰ó	ð MOñØ%ðØ36ðØFIðà	ˆd�3˜�8‰nÑ	óðØ%ðØ36ðà	ˆc�5˜˜c˜‘?Ð"Ñ	#óðØ%ðØ36ðà	ˆe�C˜˜c�MÑ"Ñ	#óð*¨ð Àcð Ècó ð ØðØ*-¨c©(ðà	óðmØ%ðmØ36ðmà	ˆc�3ˆh‰÷mr8   r   )r¼   Úcollectionsr   Útypingr   r   r   r   r   r	   r
   r�   Údjangor   rP   Ú%django.db.backends.base.introspectionr   r   ÚBaseFieldInfor   Údjango.db.modelsr   Údjango.utils.datastructuresr   Úmysql.connector.constantsr   Úmysql.connector.django.baser   Ú_fieldsr   r   r¸   r8   r7   ú<module>rÞ      s–   ðñ> å "ß G× GÑ Gã å ,÷ñ õ
 #Ý 2å /ñ å9ñ ØØ×ÑÐKÑKó€	ð �IÒÙØð	ó�Hñ Øð	 ó€HôzÐ5õ zr8   