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
U
¸ý°džZã
@sîddlZddlmZddlmZddlmZddlmZddlmZdd    lm    Z    dd
lmZ
dd lm Z Gd d „d ƒZ e    j Gdd„dƒƒZdZd'dd„Zdd„Zdd„Zeedœdd„Zddddddd d!d"d#œ    Ze d$ d%d&„eDƒ¡¡ZdS)(éNé)ÚENUM)ÚSET)ÚDATETIME)ÚTIME)Ú    TIMESTAMPé)Úlog)Útypes)Úutilc@seZdZdZdd„ZdS)ÚReflectedStatez;Stores raw information about a SHOW CREATE TABLE statement.cCs(g|_i|_d|_g|_g|_g|_dS©N)ÚcolumnsÚ table_optionsÚ
table_nameÚkeysÚfk_constraintsÚck_constraints)Úself©rú[d:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\sqlalchemy/dialects/mysql/reflection.pyÚ__init__s zReflectedState.__init__N)Ú__name__Ú
__module__Ú __qualname__Ú__doc__rrrrrr sr c@s”eZdZdZdd„Zdd„Zeedœdd„Zd    d
„Z    d d „Z
d d„Z dd„Z dd„Z dd„Zdd„Zdd„ZdZdd„Zdd„Zdd„Zd d!„Zd"S)#ÚMySQLTableDefinitionParserz4Parses the results of a SHOW CREATE TABLE statement.cCs||_||_| ¡dSr )ÚdialectÚpreparerÚ _prep_regexes)rrrrrrr&sz#MySQLTableDefinitionParser.__init__cCstƒ}||_t d|¡D]â}| d|jj¡r<| ||¡q| d¡rT| ||¡q|dkr^q| d¡rv|     ||¡qd|krŒ| 
||¡q|s’q|  |¡\}}|dkr¸t   d|¡q|dkrÎ|j |¡q|d    krä|j |¡q|d
kr|j |¡qq|S) Nz\r?\nz  z) ú)zCREATE Ú    PARTITIONzUnknown schema content: %rÚkeyÚ fk_constraintÚ ck_constraint)r ÚcharsetÚreÚsplitÚ
startswithrÚ initial_quoteÚ _parse_columnÚ_parse_table_optionsÚ_parse_table_nameÚ_parse_partition_optionsÚ_parse_constraintsr ÚwarnrÚappendrr)rZ show_creater%ÚstateÚlineÚtype_ÚspecrrrÚparse+s4
 
z MySQLTableDefinitionParser.parse)ÚsqlÚreturncCst|j |¡ƒSr )ÚboolÚ _re_is_viewÚmatch)rr6rrrÚ _check_viewMsz&MySQLTableDefinitionParser._check_viewcCs:|j |¡}|rŠ| ¡}| |d¡|d<|drb|j |d¡}|rb| ¡drb| ¡d|d<|dr‚|j |d¡d|d<d|fS|j |¡}|rö| ¡}|j |d¡|d<dd„| |d    ¡Dƒ|d    <d
d„| |d ¡Dƒ|d <d |fS|j |¡}|r| ¡}d |fS|j     |¡}|r2d|fSd|fS)zaParse a KEY or CONSTRAINT line.
 
        :param line: A line of SHOW CREATE TABLE output
        rZ version_sqlÚparserrr"ÚtablecSsg|] }|d‘qS©rr©Ú.0ÚcrrrÚ
<listcomp>mszAMySQLTableDefinitionParser._parse_constraints.<locals>.<listcomp>ÚlocalcSsg|] }|d‘qSr>rr?rrrrBnsZforeignr#r$Ú    partitionN)
Ú_re_keyr:Ú    groupdictÚ_parse_keyexprsÚ_re_key_version_sqlrZunformat_identifiersÚ_re_fk_constraintÚ_re_ck_constraintÚ _re_partition)rr2Úmr4Úm2rrrr.Ps@ ÿþ  ÿ
  z-MySQLTableDefinitionParser._parse_constraintscCs,|j\}}| |¡}|r(|| d¡ƒ|_dS)zZExtract the table name.
 
        :param line: The first line of SHOW CREATE TABLE
        ÚnameN)Ú_pr_namer:Úgroupr)rr2r1ÚregexÚcleanuprLrrrr,‚s
 
z,MySQLTableDefinitionParser._parse_table_namec Cs°i}|rn|dkrn|}|jD]R\}}| |¡}|s2q| d¡| d¡}}    |rT||    ƒ}    |    || ¡<| d|¡}qdD]}
| |
d¡qr| ¡D]\} } | |jd|jj    | f<qŒdS)zƒBuild a dictionary of all reflected table-level options.
 
        :param line: The final line of SHOW CREATE TABLE output.
        r Ú    directiveÚvalÚ)Úauto_incrementzdata directoryzindex directoryNú%s_%s)
Ú _pr_optionsÚsearchrPÚlowerÚsubÚpopÚitemsrrrN) rr2r1ÚoptionsZ rest_of_linerQrRrLrSÚvalueZnopeÚoptrTrrrr+s  
 z/MySQLTableDefinitionParser._parse_table_optionscCsÊi}|dd…}| d¡s$| d¡r2|dd…}q|jD]\}}| |¡}|r8d|jkr\q8| d¡}| ¡}|dk}    |dks„|    r
| dd    ¡}| d
d    ¡}|    r¶| d ¡r¶|dd …}|jj    d krð| d ¡rðd|ksäd|ksäd|krð|dd …}d|jj    |f}
|||
<n,| dd¡}| d¡} |r.|| ƒ} | ||<q>q8| 
¡D]~\} } d|jj    }d|jj    }| |ksz| |kr¬| |j kr’| |j | <nd|j | | f|j | <n| |j d|jj    | f<qFdS)Nú(ú rr!rSZ subpartitionrDz) */rUú,r éÿÿÿÿZmariadbZMAXVALUEZMINVALUEÚENGINEz%s_%s_definitionsÚ_rTz%s_partition_definitionsz%s_subpartition_definitionsz%s, %srW) r(rXrYÚpatternrPrZÚreplaceÚendswithrrNr]r)rr2r1r^Únew_linerQrRrLrSZis_subpartitionZdefsr_r`rTZpart_defZ subpart_defrrrr-§sV 
 
   ÿþý 
 
    þz3MySQLTableDefinitionParser._parse_partition_optionscCsÐd}|j |¡}|r&| ¡}d|d<n |j |¡}|rF| ¡}d|d<|s\t d|¡dS|dsrt d|¡|d|d|d    }}}z|jj|}Wn,tk
rÊt d
||f¡t    j
}YnX|dksÜ|d krâg}    n@|d d kr |dd kr |j   |¡}    ndd„|j   |¡Dƒ}    i}
t|tttfƒrL|    rL|     d ¡|
d<dD]} | | d¡rPd|
| <qPdD] } | | d¡rr|| |
| <qrt|ttfƒrÊt|    ƒ}    t|tƒrÊd |    krÊd|
d<||    |
Ž} i} d| d<| dd¡dkrúd| d<| dd¡rd| d<nt|t    jƒr(d| d<| dd¡}|dkrBd}| dd¡}|dk    r`t|ƒ}| d¡}|dk    r¦t|d}| d¡}|dk    rž|d k|d!<|| d"<t|| ||d#}| | ¡|j |¡dS)$z­Extract column details.
 
        Falls back to a 'minimal support' variant if full parse fails.
 
        :param line: Any column-bearing line from SHOW CREATE TABLE
        NTÚfullFzUnknown column definition %rz-Incomplete reflection of column definition %rrNZcoltypeÚargz*Did not recognize type '%s' of column '%s'rUrú'rdcSsg|] }t|ƒ‘qSr©Úint)r@ÚvrrrrBsz<MySQLTableDefinitionParser._parse_column.<locals>.<listcomp>Zfsp)ZunsignedZzerofill)r%ZcollateZretrieve_as_bitwiseÚnullableZnotnullúNOT NULLZautoincrZ autoincrementÚdefaultÚNULLÚcommentÚ    generated)ÚsqltextZ persistenceZSTOREDÚ    persistedÚcomputed)rNÚtypersru)Ú
_re_columnr:rFÚ_re_column_looser r/rZ ischema_namesÚKeyErrorÚsqltypesZNullTypeÚ _re_csv_strÚfindallÚ _re_csv_intÚ
issubclassrrrr\ÚgetrrÚ _strip_valuesZIntegerÚ cleanup_textÚdictÚupdaterr0)rr2r1r4rLrNr3ÚargsÚcol_typeZ    type_argsZtype_kwÚkwZ type_instanceZcol_kwrsrurwryrxZcol_drrrr*ßsŽ 
 
ÿ  
 
 
 
 
 
 
 
 
 ÿ
z(MySQLTableDefinitionParser._parse_columnc
sg}|D]䉇fdd„dDƒ\}}}}}dg}    |     |j |¡¡|     |¡|sX|     d¡|rÎd|krfnh| d¡r| d¡r|     d    ¡|     |¡n>|d
kr®|     d    ¡|     |¡n |     d    ¡|     d | d d ¡¡|rÜ|     |¡| d |    ¡¡qd d|j |¡d |¡dg¡S)ažRe-format DESCRIBE output as a SHOW CREATE TABLE string.
 
        DESCRIBE is a much simpler reflection and is sufficient for
        reflecting views for runtime use.  This method formats DDL
        for columns only- keys are omitted.
 
        :param columns: A sequence of DESCRIBE or SHOW COLUMNS 6-tuples.
          SHOW FULL COLUMNS FROM rows must be rearranged for use with
          this function.
        c3s|]}ˆ|VqdSr r)r@Úi©ÚrowrrÚ    <genexpr>TszAMySQLTableDefinitionParser._describe_to_create.<locals>.<genexpr>)rrééérbrrrVÚ    timestampÚCÚDEFAULTrtz'%s'rmú''rUzCREATE TABLE %s (
z,
z
) )r0rZquote_identifierr(rhÚjoin)
rrrÚbufferrNr‰rqrsÚextrar2rrŒrÚ_describe_to_createFsD 
ÿ
 
ÿ
 
 
 
 
ÿúÿz.MySQLTableDefinitionParser._describe_to_createcCsdd„|j |¡DƒS)z8Unpack '"col"(2),"col" ASC'-ish strings into components.cSs(g|] \}}}||rt|ƒnd|f‘qSr rn)r@ZcolnameÚlengthÚ    modifiersrrrrB~sÿz>MySQLTableDefinitionParser._parse_keyexprs.<locals>.<listcomp>)Ú _re_keyexprsr€)rZ identifiersrrrrG{s
ÿþz*MySQLTableDefinitionParser._parse_keyexprsc    CsPg|_g|_|jj}ttddd„|jj||j |¡fDƒƒƒ}td||jj    ƒ|_
t dƒ|_ t d|ƒ|_ t dƒ|_t dƒ|_t d    |ƒ|_t d
|ƒ|_t d |ƒ|_t d ƒ|_| ¡}d |d<t d|ƒ|_t d|ƒ|_t dƒ|_tD]}| |¡qìdD]}| |¡qdD]}| |¡q| dd¡| dd¡| dd¡dS)z Pre-compile regular expressions.)ZiqZfqZesc_fqcSsg|]}t |¡‘qSr©r&Úescape)r@ÚsrrrrBsÿz<MySQLTableDefinitionParser._prep_regexes.<locals>.<listcomp>zM^CREATE (?:\w+ +)?TABLE +%(iq)s(?P<name>(?:%(esc_fq)s|[^%(fq)s])+)%(fq)s +\($z^CREATE(?! TABLE)(\s.*)?\sVIEWzW(?:(?:%(iq)s((?:%(esc_fq)s|[^%(fq)s])+)%(fq)s)(?:\((\d+)\))?(?: +(ASC|DESC))?(?=\,|$))+z\x27(?:\x27\x27|[^\x27])*\x27z\d+a…  %(iq)s(?P<name>(?:%(esc_fq)s|[^%(fq)s])+)%(fq)s +(?P<coltype>\w+)(?:\((?P<arg>(?:\d+|\d+,\d+|(?:'(?:''|[^'])*',?)+))\))?(?: +(?P<unsigned>UNSIGNED))?(?: +(?P<zerofill>ZEROFILL))?(?: +CHARACTER SET +(?P<charset>[\w_]+))?(?: +COLLATE +(?P<collate>[\w_]+))?(?: +(?P<notnull>(?:NOT )?NULL))?(?: +DEFAULT +(?P<default>(?:NULL|'(?:''|[^'])*'|[\-\w\.\(\)]+(?: +ON UPDATE [\-\w\.\(\)]+)?)))?(?: +(?:GENERATED ALWAYS)? ?AS +(?P<generated>\(.*\))? ?(?P<persistence>VIRTUAL|STORED)?)?(?: +(?P<autoincr>AUTO_INCREMENT))?(?: +COMMENT +'(?P<comment>(?:''|[^'])*)')?(?: +COLUMN_FORMAT +(?P<colfmt>\w+))?(?: +STORAGE +(?P<storage>\w+))?(?: +(?P<extra>.*))?,?$zŸ  %(iq)s(?P<name>(?:%(esc_fq)s|[^%(fq)s])+)%(fq)s +(?P<coltype>\w+)(?:\((?P<arg>(?:\d+|\d+,\d+|\x27(?:\x27\x27|[^\x27])+\x27))\))?.*?(?P<notnull>(?:NOT )NULL)?aX  (?:(?P<type>\S+) )?KEY(?: +%(iq)s(?P<name>(?:%(esc_fq)s|[^%(fq)s])+)%(fq)s)?(?: +USING +(?P<using_pre>\S+))? +\((?P<columns>.+?)\)(?: +USING +(?P<using_post>\S+))?(?: +KEY_BLOCK_SIZE *[ =]? *(?P<keyblock>\S+))?(?: +WITH PARSER +(?P<parser>\S+))?(?: +COMMENT +(?P<comment>(\x27\x27|\x27([^\x27])*?\x27)+))?(?: +/\*(?P<version_sql>.+)\*/ *)?,?$z+\!\d+ (?: *WITH PARSER +(?P<parser>\S+) *)?z#RESTRICT|CASCADE|SET NULL|NO ACTIONÚona,  CONSTRAINT +%(iq)s(?P<name>(?:%(esc_fq)s|[^%(fq)s])+)%(fq)s +FOREIGN KEY +\((?P<local>[^\)]+?)\) REFERENCES +(?P<table>%(iq)s[^%(fq)s]+%(fq)s(?:\.%(iq)s[^%(fq)s]+%(fq)s)?) +\((?P<foreign>[^\)]+?)\)(?: +(?P<match>MATCH \w+))?(?: +ON DELETE (?P<ondelete>%(on)s))?(?: +ON UPDATE (?P<onupdate>%(on)s))?z[  CONSTRAINT +%(iq)s(?P<name>(?:%(esc_fq)s|[^%(fq)s])+)%(fq)s +CHECK +\((?P<sqltext>.+)\),?z(?:.*)(?:SUB)?PARTITION(?:.*))reZTYPEZAUTO_INCREMENTZAVG_ROW_LENGTHz CHARACTER SETzDEFAULT CHARSETZCHECKSUMZCOLLATEZDELAY_KEY_WRITEZ INSERT_METHODZMAX_ROWSZMIN_ROWSZ    PACK_KEYSZ
ROW_FORMATZKEY_BLOCK_SIZEZSTATS_SAMPLE_PAGES)ú PARTITION BYúSUBPARTITION BYÚ
PARTITIONSÚ SUBPARTITIONSr!Z SUBPARTITIONZUNIONz
\([^\)]+\)Z
TABLESPACEz.*? STORAGE DISKZ    RAID_TYPEz4\w+\s+RAID_CHUNKS\s*\=\s*\w+RAID_CHUNKSIZE\s*=\s*\w+N)Z _re_columnsrXrZ final_quoter†Úzipr)Z_escape_identifierÚ _pr_compileZ_unescape_identifierrOÚ _re_compiler9rœrrr{r|rErHÚcopyrIrJrKÚ_options_of_type_stringÚ_add_option_stringÚ_add_option_wordÚ_add_partition_option_wordÚ_add_option_regex)rZ_finalÚquotesrŠÚoptionrrrr…sŽ
ýþþÿÿý
þÿ
 
ëÿüÿ 
öÿÿ
 
öÿüÿ
   þz(MySQLTableDefinitionParser._prep_regexesz(?:\s*(?:=\s*)|\s+)cCs*dt |¡|jf}|j t|tƒ¡dS)Nz0(?P<directive>%s)%s'(?P<val>(?:[^']|'')*?)'(?!'))r&ržÚ_optional_equalsrXr0r¦r…©rrSrQrrrrªDs
þz-MySQLTableDefinitionParser._add_option_stringcCs(dt |¡|jf}|j t|ƒ¡dS)Nz(?P<directive>%s)%s(?P<val>\w+)©r&ržr°rXr0r¦r±rrrr«Ks
þz+MySQLTableDefinitionParser._add_option_wordcCsp|dks|dkr&dt |¡|jf}n6|dks6|dkrLdt |¡|jf}ndt |¡f}|j t|ƒ¡dS)Nr¡r¢z((?<!\S)(?P<directive>%s)%s(?P<val>\w+.*)r¤r£z&(?<!\S)(?P<directive>%s)%s(?P<val>\d+)z(?<!\S)(?P<directive>%s)(?!\S)r²r±rrrr¬Rsþþz5MySQLTableDefinitionParser._add_partition_option_wordcCs*dt |¡|j|f}|j t|ƒ¡dS)Nz(?P<directive>%s)%s(?P<val>%s)r²r±rrrr­as ýz,MySQLTableDefinitionParser._add_option_regexN)rrrrrr5Ústrr8r;r.r,r+r-r*r™rGrr°rªr«r¬r­rrrrr"s$"2 8g5
>r)ÚCOMMENTzDATA DIRECTORYzINDEX DIRECTORYZPASSWORDZ
CONNECTIONcCs t|ƒ|fS)z1Prepare a 2-tuple of compiled regex and callable.)r§)rQrRrrrr¦ssr¦cCst |tjtjB¡S)z)Compile a string to regex, I and UNICODE.)r&ÚcompileÚIÚUNICODE)rQrrrr§ysr§cCs\g}|D]N}|dd…dks,|dd…dkrL|dd… |dd|d¡}| |¡q|S)zStrip reflected values quotesrrú"rmrdr)rhr0)ÚvaluesZ strip_valuesÚarrrr„s    r„)Úraw_textr7cCs&d|krt tdd„|¡}| dd¡S)Nú\cSs t|dS)Nr)Ú_control_char_map)rŸrrrÚ<lambda>ózcleanup_text.<locals>.<lambda>r•rm)r&r[Ú_control_char_regexprh)r»rrrr…Šsÿr…r¼úúúú    Ú
ú ú ú )    z\\z\0z\az\bz\tz\nz\vz\fz\rú|ccs|]}t |¡VqdSr r)r@ÚkrrrrŽŸsrŽ)N)r&Z
enumeratedrrr
rrrrUr    r~r r Z class_loggerrr©r¦r§r„r³r…r½rµr–rÀrrrrÚ<module>
sB         K    
     ÷ ÿ