g2Y BddlZddlmZddlmZddlmZddlmZddlmZdd lm Z dd lmZ dd lm Z Gd d Z e jGddZdZd#dZdZdZdedefdZdddddddddd Zej,d!j/d"eDZy)$N)ENUM)SET)DATETIME)TIME) TIMESTAMP)log)types)utilceZdZdZdZy)ReflectedStatez;Stores raw information about a SHOW CREATE TABLE statement.cXg|_i|_d|_g|_g|_g|_yN)columns table_options table_namekeysfk_constraintsck_constraints)selfs U/opt/hc_python/lib64/python3.12/site-packages/sqlalchemy/dialects/mysql/reflection.py__init__zReflectedState.__init__s/    N)__name__ __module__ __qualname____doc__rrrrrs E!rrcxeZdZdZdZdZdedefdZdZ dZ d Z d Z d Z d Zd ZdZdZdZdZdZdZy)MySQLTableDefinitionParserz4Parses the results of a SHOW CREATE TABLE statement.c@||_||_|jyr)dialectpreparer _prep_regexes)rr#r$s rrz#MySQLTableDefinitionParser.__init__&s    rct}||_tjd|D]:}|j d|j j zr|j||?|j dr|j||c|dk(ri|j dr|j||d|vr|j|||s|j|\}}|tjd|z|dk(r|jj||d k(r|j j||d k(r|j"j|;=|S) Nz\r?\nz z) )zCREATE PARTITIONzUnknown schema content: %rkey fk_constraint ck_constraint)rcharsetresplit startswithr$ initial_quote _parse_column_parse_table_options_parse_table_name_parse_partition_options_parse_constraintsr warnrappendrr)r show_creater,statelinetype_specs rparsez MySQLTableDefinitionParser.parse+s9  HHX{3Dtdmm&A&AAB""4/&))$6+&&tU3$--dE:"55d; t=II:TABe^JJ%%d+o-((//5o-((//594: rsqlreturncJt|jj|Sr)bool _re_is_viewmatch)rr>s r _check_viewz&MySQLTableDefinitionParser._check_viewMsD$$**3/00rc|jj|}|r|j}|j|d|d<|drI|jj|d}|r)|jdr|jd|d<|dr$|j j |dd|d<d|fS|jj|}|r|j}|j j |d|d<|j|dDcgc]}|d c}|d<|j|dDcgc]}|d c}|d<d |fS|jj|}|r|j}d |fS|jj|}|rd |fSd |fScc}wcc}w) zaParse a KEY or CONSTRAINT line. :param line: A line of SHOW CREATE TABLE output r version_sqlparserrr)tablelocalforeignr*r+ partitionN) _re_keyrC groupdict_parse_keyexprs_re_key_version_sqlr$unformat_identifiers_re_fk_constraint_re_ck_constraint _re_partition)rr:mr<m2cs rr5z-MySQLTableDefinitionParser._parse_constraintsPs LL  t $ ;;=D#224 ?CDOM"--33D4GH",,.2%'\\^H%=DNH~!%!C!CN""X$;   " " ( ( . ;;=D MM>>tG}MDM+/+?+?W +NO+NaQqT+NODM"224 ?CC!CDO#D( (  " " ( ( . ;;=D"D( (    $ $T * $ $d|'Ps $ F8 F=c|j\}}|j|}|r||jd|_yy)zZExtract the table name. :param line: The first line of SHOW CREATE TABLE nameN)_pr_namerCgroupr)rr:r9regexcleanuprTs rr3z,MySQLTableDefinitionParser._parse_table_names< w KK  &qwwv7E  rci}|r|dk7r{|}|jD]j\}}|j|}|s|jd|jd} }|r|| } | ||j<|j d|}ldD]} |j | d|j D]-\} } | |j|jjd| </y)zBuild a dictionary of all reflected table-level options. :param line: The final line of SHOW CREATE TABLE output. r' directiveval)auto_incrementzdata directoryzindex directoryN_) _pr_optionssearchrZlowersubpopitemsrr#rX) rr:r9options rest_of_liner[r\rTr^valuenopeoptr_s rr2z/MySQLTableDefinitionParser._parse_table_optionss  DCKL"&"2"2wLL.#$77;#75 #ENE-2 )*$yy\: #3LD KKd #L HCFIE  4<<+<+9OK'?#++FB7#++C4"x'8'8'='}H<<$$ 1h6G6G6L"h.%1#x/$,CR=.2ll.?.?K ( &--c37 #ENE%* " A/D HC1T\\5F5FGH74<<;L;LMKh#"4e111/2E'',++C00E'', KN##t||/@/@#$FG(rcd}|jj|}|r|j}d|d<n2|jj|}|r|j}d|d<|st j d|zy|dst j d|z|d|d|d }}} |j j|}||d k(rg} n]|dd k(r$|dd k(r|jj|} n1|jj|D cgc] } t| } } i} t|t t"t$fr| r| j'd| d<dD]} |j)| dsd| | <dD]} |j)| ds|| | | <t|t*t,fr$t/| } t|t,r d | vrd| d<|| i| } i}d|d<|j)dddk(rd|d<|j)dddk(rd|d<|j)ddrd|d<nt|tj0rd|d<|j)dd}|dk(rd}|j)dd}| t3|}|j)d}|,t5|}|j)d}||d k(|d!<||d"<t5|| ||#}|j7||j8j;|y#t$r0t j d |d |d tj}YzwxYwcc} w)$zExtract column details. Falls back to a 'minimal support' variant if full parse fails. :param line: Any column-bearing line from SHOW CREATE TABLE NTfullFzUnknown column definition %rz-Incomplete reflection of column definition %rrXcoltypeargzDid not recognize type 'z ' of column ''r`rrsfsp)unsignedzerofill)r,collateretrieve_as_bitwisenullablenotnullNOT NULLnotnull_generatedautoincr autoincrementdefaultNULLcomment generated)sqltext persistenceSTORED persistedcomputed)rXtyperr) _re_columnrCrM_re_column_looser r6r# ischema_namesKeyErrorsqltypesNullType _re_csv_strfindall _re_csv_intint issubclassrrrrggetrr _strip_valuesInteger cleanup_textdictupdaterr7)rr:r9r<rTrXr;argscol_type type_argsvtype_kwkw type_instancecol_kwrrrrrcol_ds rr1z(MySQLTableDefinitionParser._parse_columnsZ OO ! !$ ' ;;=DDL%%++D1A{{}$V  II4t; < F| IIEL M L$y/4;Te )||11%8H <42:I !W^RC((006I)-)9)9)A)A$)GH)GAQ)GIH h4 ; <!*q!1*BxxE"" +)BxxE""2h ) hs ,%i0I(C(R9_15-. )7w7 "z 88Iu % 3!&F:  88' /: =!&F:  88J &&*F? # ("2"2 3&+F? #((9d+ f G((9d+  "7+G((;'  G,H/I$(1X(=%!)F: M7G   V U#Y ) II@EtL  ((H  )Is0L M 5MMc g}|D]A fddD\}}}}}dg} | j|jj|| j||s| jd|rd|vrn|jdr4|jdr#| jd| j|n]|d k(r#| jd| j|n5| jd| jd |j d d z|r| j||jdj | Dd j d|jj|zdj |dgS)aRe-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. c3(K|] }| ywrr).0irows r zAMySQLTableDefinitionParser._describe_to_create..Ws: /1As)rrrprra timestampCDEFAULTrz'%s'r''r`zCREATE TABLE %s ( z, z ) )r7r$quote_identifierr/rzjoin) rrrbufferrXrrrextrar:rs @r_describe_to_createz.MySQLTableDefinitionParser._describe_to_createIsdC: /: 6T8Xw5D KK 66t< = KK ! J'#w.((5':L:L;KK *KK(&KK *KK(KK *KKd)C CD E" MM#((4. )7:ww*mm44Z@A 6"    rc |jj|Dcgc]\}}}||r t|nd|fc}}}Scc}}}w)z8Unpack '"col"(2),"col" ASC'-ish strings into components.N) _re_keyexprsrr)r identifierscolnamelength modifierss rrNz*MySQLTableDefinitionParser._parse_keyexprs~sW /3.?.?.G.G/ /*Vc&ky A/   sAc $g|_g|_|jj}t t d|jj ||jj|fDcgc]}tj|c}}td|z|jj|_ td|_td|z|_td|_td|_td|z|_td|z|_td |z|_td |_|j-}d |d <td |z|_td|z|_td|_t4D]}|j7|dD]}|j9|dD]}|j;||j=dd|j=dd|j=ddycc}w)z Pre-compile regular expressions.)iqfqesc_fqzM^CREATE (?:\w+ +)?TABLE +%(iq)s(?P(?:%(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(?:%(esc_fq)s|[^%(fq)s])+)%(fq)s +(?P\w+)(?:\((?P(?:\d+|\d+,\d+|(?:'(?:''|[^'])*',?)+))\))?(?: +(?PUNSIGNED))?(?: +(?PZEROFILL))?(?: +CHARACTER SET +(?P[\w_]+))?(?: +COLLATE +(?P[\w_]+))?(?: +(?P(?:NOT )?NULL))?(?: +DEFAULT +(?P(?:NULL|'(?:''|[^'])*'|[\-\w\.\(\)]+(?: +ON UPDATE [\-\w\.\(\)]+)?)))?(?: +(?:GENERATED ALWAYS)? ?AS +(?P\(.*\))? ?(?PVIRTUAL|STORED)?(?: +(?P(?:NOT )?NULL))?)?(?: +(?PAUTO_INCREMENT))?(?: +COMMENT +'(?P(?:''|[^'])*)')?(?: +COLUMN_FORMAT +(?P\w+))?(?: +STORAGE +(?P\w+))?(?: +(?P.*))?,?$z %(iq)s(?P(?:%(esc_fq)s|[^%(fq)s])+)%(fq)s +(?P\w+)(?:\((?P(?:\d+|\d+,\d+|\x27(?:\x27\x27|[^\x27])+\x27))\))?.*?(?P(?:NOT )NULL)?aX (?:(?P\S+) )?KEY(?: +%(iq)s(?P(?:%(esc_fq)s|[^%(fq)s])+)%(fq)s)?(?: +USING +(?P\S+))? +\((?P.+?)\)(?: +USING +(?P\S+))?(?: +KEY_BLOCK_SIZE *[ =]? *(?P\S+))?(?: +WITH PARSER +(?P\S+))?(?: +COMMENT +(?P(\x27\x27|\x27([^\x27])*?\x27)+))?(?: +/\*(?P.+)\*/ *)?,?$z+\!\d+ (?: *WITH PARSER +(?P\S+) *)?z/RESTRICT|CASCADE|SET NULL|NO ACTION|SET DEFAULTonaJ CONSTRAINT +%(iq)s(?P(?:%(esc_fq)s|[^%(fq)s])+)%(fq)s +FOREIGN KEY +\((?P[^\)]+?)\) REFERENCES +(?P%(iq)s[^%(fq)s]+%(fq)s(?:\.%(iq)s[^%(fq)s]+%(fq)s)?) +\((?P(?:%(iq)s[^%(fq)s]+%(fq)s(?: *, *)?)+)\)(?: +(?PMATCH \w+))?(?: +ON DELETE (?P%(on)s))?(?: +ON UPDATE (?P%(on)s))?z[ CONSTRAINT +%(iq)s(?P(?:%(esc_fq)s|[^%(fq)s])+)%(fq)s +CHECK +\((?P.+)\),?z(?:.*)(?:SUB)?PARTITION(?:.*))rwTYPEAUTO_INCREMENTAVG_ROW_LENGTHz CHARACTER SETzDEFAULT CHARSETCHECKSUMCOLLATEDELAY_KEY_WRITE INSERT_METHODMAX_ROWSMIN_ROWS PACK_KEYS ROW_FORMATKEY_BLOCK_SIZESTATS_SAMPLE_PAGES) PARTITION BYSUBPARTITION BY PARTITIONS SUBPARTITIONSr( SUBPARTITIONUNIONz \([^\)]+\) TABLESPACEz.*? STORAGE DISK RAID_TYPEz4\w+\s+RAID_CHUNKS\s*\=\s*\w+RAID_CHUNKSIZE\s*=\s*\w+N) _re_columnsrcr$ final_quoterzipr0_escape_identifierr-escape _pr_compile_unescape_identifierrY _re_compilerBrrrrrrLrOcopyrQrRrS_options_of_type_string_add_option_string_add_option_word_add_partition_option_word_add_option_regex)r_finalsquotesroptions rr%z(MySQLTableDefinitionParser._prep_regexessT** & 33 88@IIaL   $ DFL M MM . .  ''HI( 9;A B ''GH'v.& ./  8!, -06  6! #     $/ >$  [[]D4!, 58: : " $"- %(*  *" ))IJ .F  # #F +. F$  ! !& )% ( F  + +F 3  w 6 |-@A   C _s$H z(?:\s*(?:=\s*)|\s+)cdtj|d|jd}|jj t |t y)N(?Pr'z'(?P(?:[^']|'')*?)'(?!'))r-r_optional_equalsrcr7rrrr^r[s rrz-MySQLTableDefinitionParser._add_option_stringIs; IIi  ! !   E< @Arcdtj|d|jd}|jj t |y)Nrr'z (?P\w+)r-rrrcr7rrs rrz+MySQLTableDefinitionParser._add_option_wordPs9 IIi  ! !   E 23rcB|dk(s|dk(r'dtj|d|jd}nJ|dk(s|dk(r'dtj|d|jd}ndtj|d }|jj t |y) Nrrz(?r'z(?P\w+.*)rrz (?P\d+)z)(?!\S)rrs rrz5MySQLTableDefinitionParser._add_partition_option_wordWs  &)7H*H )$%%E/ )Y,-F )$%%E.G :<99MOE  E 23rcdtj|d|jd|d}|jj t |y)Nrr'z(?Prrs rrz,MySQLTableDefinitionParser._add_option_regexfs< IIi  ! !    E 23rN)rrrrrr=strrArDr5r3r2r4r1rrNr%rrrrrrrrr!r!"sq> D1s1t10d 8J46Nph$T3 j } ~.B4 44rr!)COMMENTzDATA DIRECTORYzINDEX DIRECTORYPASSWORD CONNECTIONct||fS)z1Prepare a 2-tuple of compiled regex and callable.)r)r[r\s rrrxs   ((rcltj|tjtjzS)z)Compile a string to regex, I and UNICODE.)r-compileIUNICODE)r[s rrr~s" ::eRTTBJJ. //rcg}|D]A}|dddk(s|dddk(r|ddj|ddz|d}|j|C|S)zStrip reflected values quotesrr"rrsr)rzr7)values strip_valuesas rrrsbL  Qq6S=AaFcM!B!q!A$/AA  rraw_textr?cfd|vrtjtd|}|jddS)N\ct|dS)Nr)_control_char_map)rs rzcleanup_text..s,=ad,Crrr)r-rf_control_char_regexprz)rs rrrs5 x66 "CX    D# &&rr     ) z\\z\0z\az\bz\tz\nz\vz\fz\r|c#FK|]}tj|ywr)r-r)rks rrrs 5#4aRYYq\#4s!r)r- enumeratedrrr rrrr`r rr r class_loggerr!rrrrrrrrrrrrrr#s ! ! !I 4I 4I 4X) 0 '3'3'          "rzzHH 5#4 55r