zmc
2023-10-12 ed135d79df12a2466b52dae1a82326941211dcc9
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
U
£ý°dWJã@sÒdZddlmZddlmZmZmZmZmZm    Z    m
Z
ddl Z ddl m ZddlmZmZmZddlmZddlmZdd    lmZerdd
lmZed ejd ƒZed kr´eddƒZn
eddƒZGdd„deƒZdS)zDatabase 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&s¨eZdZdZejdejdejdejdej    dej
dej dej dej dejdejd    ejd
ejd ejdejdejdejdejdejd
iZeeed œ‡fd d„ Zdeedœdd„Zdeeedœdd„Zdee e!e ee"ffdœdd„Z#dee$e!dœdd„Z%d)dee&ee eefdœdd„Z'dee ee(eeffdœdd„Z)deee(eeefdœd d!„Z*deedœd"d#„Z+e&e,ee-d$œd%d&„Z.dee ee&fdœd'd(„Z/‡Z0S)*ÚDatabaseIntrospectionz5Encapsulate backend-specific introspection utilities.Z    TextFieldZ DecimalFieldZ    DateFieldZ DateTimeFieldZ
FloatFieldÚ IntegerFieldÚBigIntegerFieldÚSmallIntegerFieldZ    CharFieldZ    TimeField)Ú    data_typeÚ descriptionÚreturncsttƒ ||¡}d|jkr<|dkr$dS|dkr0dS|dkr<dS|jrf|dkrNdS|dkrZd    S|dkrfd
S|jrpd S|S) NÚauto_incrementrZ    AutoFieldrZ BigAutoFieldrZSmallAutoFieldZPositiveBigIntegerFieldZPositiveIntegerFieldZPositiveSmallIntegerFieldZ    JSONField)ÚsuperÚget_field_typerrr)ÚselfrrZ
field_type©Ú    __class__©ú[d:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\mysql/connector/django/introspection.pyr"ls$
z$DatabaseIntrospection.get_field_typer)ÚcursorrcCs| d¡dd„| ¡DƒS)z>Return a list of table and view names in the current database.zSHOW FULL TABLEScSs*g|]"}t|ddddœ |d¡ƒ‘qS)rÚtÚv)z
BASE TABLEZVIEWé)r Úget)Ú.0Úrowr&r&r'Ú
<listcomp>…sÿz8DatabaseIntrospection.get_table_list.<locals>.<listcomp>)ÚexecuteÚfetchall)r#r(r&r&r'Úget_table_list‚s
þz$DatabaseIntrospection.get_table_list)r(Ú
table_namerc Cs–i}| d|g¡| ¡}|r&|dnd}tdkrB| d|g¡n| d||g¡dd„| ¡Dƒ}| d    |jj |¡›d
¡ttt    d œd d „}g}|j
D]ò}    ||    d}
tdkr |  t |    dd…||
j ƒpØ|    d||
jƒpè|    d||
jƒpø|    d|    d|
j|
j|
j|    d|kfžŽ¡qž|  t |    dd…||
j ƒpB|    d||
jƒpT|    d||
jƒpf|    d|    d|
j|
j|
j|
j|    d|kf    žŽ¡qž|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ÚraÍ
                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()
            cSsi|]}|dt|Ž“qS)r)r)r-Úliner&r&r'Ú
<dictcomp>Åsz?DatabaseIntrospection.get_table_description.<locals>.<dictcomp>zSELECT * FROM z LIMIT 1)ÚircSs|dk    rt|ƒS|S©N)Úint)r7r&r&r'Úto_intËsz;DatabaseIntrospection.get_table_description.<locals>.to_intNrééé)r0ÚfetchoneÚDJANGO_VERSIONr1Ú
connectionÚopsÚ
quote_namerrr9rÚappendr Úmax_lenZnum_precZ    num_scaleZcolumn_defaultrrZ    collation) r#r(r3Zjson_constraintsr.Zdefault_column_collationÚ
field_infor:Úfieldsr5Úinfor&r&r'Úget_table_descriptionŠsjù     ôðÿ
 
 
 
÷ÿ
 
öÿz+DatabaseIntrospection.get_table_descriptioncCsÂ| d|jj |¡›¡t| ¡ƒ}tƒ}|D]}|ddkr0| |d¡q0i}|D]d}|d|krjqX|d|krˆdddœ||d<|ddkr¤d    ||dd
<|dsXd    ||dd <qX|S) zReturn indexes from table.úSHOW INDEX FROM rr+rr;F)Ú primary_keyÚuniqueZPRIMARYTrJrK)r0r@rArBÚlistr1ÚsetÚadd)r#r(r3ÚrowsZmulticol_indexesr.Zindexesr&r&r'Ú get_indexesðs"     z!DatabaseIntrospection.get_indexescCs2| ||¡ ¡D]}|ddr|dSqdS)zP
        Returns the name of the primary key column for the given table
        r+rJrN)rPÚitems)r#r(r3Úcolumnr&r&r'Úget_primary_key_column s z,DatabaseIntrospection.get_primary_key_columnr&)r(r3Ú table_fieldsrcCs2| ||¡D] }d|jkr ||jdœgSq gS)Nr )ÚtablerR)rHrÚname)r#r(r3rTrEr&r&r'Ú get_sequencess
z#DatabaseIntrospection.get_sequencescCs0| ||¡}i}|D]\}}}||f||<q|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(r3Ú constraintsZ    relationsZ my_fieldnameZ other_tableZ other_fieldr&r&r'Ú get_relationss
 z#DatabaseIntrospection.get_relationscCs$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)r0Úextendr1)r#r(r3Z key_columnsr&r&r'rX,sø
z%DatabaseIntrospection.get_key_columnscCs,| d|g¡| ¡}|s$|jjjS|dS)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)r0r>r@ÚfeaturesZ_mysql_storage_engine)r#r(r3Úresultr&r&r'Úget_storage_engineAsþ
z(DatabaseIntrospection.get_storage_engine)Ú check_clauseÚcolumnsrcCs~tƒ}t |¡d}dd„| ¡Dƒ}|D]N}|jtjjkr*|jj     |j
¡|j
kr*|j
dd…|kr*|  |j
dd…¡q*|S)Nrcss|]}|js|VqdSr8)Z is_whitespace)r-Útokenr&r&r'Ú    <genexpr>VszBDatabaseIntrospection._parse_constraint_columns.<locals>.<genexpr>r+éÿÿÿÿ) rÚsqlparseÚparseÚflattenÚttypeÚtokensÚNamer@rArBÚvaluerN)r#r_r`Z check_columnsZ    statementrhrar&r&r'Ú_parse_constraint_columnsQs ÿþýz/DatabaseIntrospection._parse_constraint_columnscCs|i}d}| ||g¡| ¡D]`\}}}}||krltƒdddd|rJ||fnddœ||<|jjjrlg||d<||d |¡qd}    | |    |g¡| ¡D]F\}}
|
 ¡dkrÈd    ||d
<d    ||d <qš|
 ¡d kršd    ||d <qš|jjjrtd } d d„|     ||¡Dƒ} d}    | |    |g¡| ¡D]P\}} | 
| | ¡}t |ƒ|hkrZ| d7} d| ›d}|dddd    ddœ||<q"| d|jj   |¡›¡dd„| ¡DƒD]¶\}}}}}}}||krêtƒdddddœ||<|jjjrêg||d<d    ||d<|dkrtjn| ¡||d<||d |¡|jjjr ||d |dkrNdnd¡q | ¡D]}t|dƒ|d<q`|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)r`rJrKÚindexÚcheckÚ foreign_keyZordersr`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 keyTrJrKrcSsh|]
}|j’qSr&)rV)r-rGr&r&r'Ú    <setcomp>’sz8DatabaseIntrospection.get_constraints.<locals>.<setcomp>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+Z__unnamed_constraint_Ú__rIcSs"g|]}|dd…|df‘qS)Nr=é
r&)r-Úxr&r&r'r/¶sz9DatabaseIntrospection.get_constraints.<locals>.<listcomp>)r`rJrKrmrnrlZBTREEÚtypeÚDZDESCÚASC)r0r1rr@r\Zsupports_index_column_orderingrNÚlowerZ can_introspect_check_constraintsrHrkrMrArBrÚsuffixrCÚvaluesrL)r#r(r3rYZ
name_queryÚ
constraintrRZ    ref_tableZ
ref_columnZ
type_queryÚkindZunnamed_constraints_indexr`r_Zconstraint_columnsÚ_rlÚorderÚtype_r&r&r'Úget_constraints`s†    ú
 
 
ÿ ÿ ú    ÿ
û
   ÿ
 $ z%DatabaseIntrospection.get_constraints)r&)1Ú__name__Ú
__module__Ú __qualname__Ú__doc__rZBLOBZDECIMALZ
NEWDECIMALZDATEZDATETIMEÚDOUBLEÚFLOATZINT24ÚLONGZLONGLONGÚSHORTÚSTRINGZTIMEÚ    TIMESTAMPZTINYZ    TINY_BLOBZ MEDIUM_BLOBZ    LONG_BLOBZ
VAR_STRINGZdata_types_reverseÚstrr r"rr r2rHrr9ÚboolrPrrSrrWr    rZrXr^rrrkr~Ú __classcell__r&r&r$r'rSsœí    þ gþ þ ÿþ
þ þ þ 
þr)r‚Ú collectionsrÚtypingrrrrrrr    rdZdjangor
r?Z%django.db.backends.base.introspectionr r Z BaseFieldInfor Zdjango.db.modelsrZdjango.utils.datastructuresrZmysql.connector.constantsrZmysql.connector.django.baserÚ_fieldsrrr&r&r&r'Ú<module>s0 $         þþþ