idcGddlZddlmZddlmZddlmZddlmZddlmZdd lm Z dd lmZ dd lm Z Gd d e Z e jGdde ZdZddZdZdS)N)_EnumeratedValues)SET)DATETIME)TIME) TIMESTAMP)log)types)utilceZdZdZdZdS)ReflectedStatez;Stores raw information about a SHOW CREATE TABLE statement.cZg|_i|_d|_g|_g|_g|_dSN)columns table_options table_namekeysfk_constraintsck_constraints)selfs Y/opt/cloudlinux/venv/lib/python3.11/site-packages/sqlalchemy/dialects/mysql/reflection.py__init__zReflectedState.__init__s5    N)__name__ __module__ __qualname____doc__rrrrrs)EE!!!!!rrc^eZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d Zd ZdZdS)MySQLTableDefinitionParserz4Parses the results of a SHOW CREATE TABLE statement.cJ||_||_|dSr)dialectpreparer _prep_regexes)rr#r$s rrz#MySQLTableDefinitionParser.__init__$s(    rct}||_tjd|D]5}|d|jjzr|||<|dr|||h|dkro|dr| |||s| |\}}|tj d|z|dkr|j ||dkr|j||d kr|j|57|S) Nz\r?\nz z) )zCREATE zUnknown schema content: %rkey fk_constraint ck_constraint)rcharsetresplit startswithr$ initial_quote _parse_column_parse_table_options_parse_table_name_parse_constraintsr warnrappendrr)r show_creater+statelinetype_specs rparsez MySQLTableDefinitionParser.parse)s   HX{33  Dtdm&AABB ""4////&& ))$6666++ &&tU3333 "55d;; t=I:TABBBBe^^J%%d++++o--(//5555o--(//5555 rc|j|}|r|}||d|d<|drY|j|d}|r7|dr|d|d<|dr)|j|dd|d<d|fS|j|}|r|}|j|d|d<d||dD|d<d ||d D|d <d |fS|j|}|r|}d |fS|j |}|rd |fSd|fS)zaParse a KEY or CONSTRAINT line. :param line: A line of SHOW CREATE TABLE output r version_sqlparserrr(tablecg|] }|d Srr.0cs r zAMySQLTableDefinitionParser._parse_constraints..fsOOOaQqTOOOrlocalcg|] }|d SrArrBs rrEzAMySQLTableDefinitionParser._parse_constraints..gs)!rforeignr)r* partitionN) _re_keymatch groupdict_parse_keyexprs_re_key_version_sqlr$unformat_identifiers_re_fk_constraint_re_ck_constraint _re_partition)rr8mr:m2s rr3z-MySQLTableDefinitionParser._parse_constraintsIs  L  t $ $  ;;==D#224 ?CCDOM" >-33D4GHH>",,..2>%'\\^^H%=DNH~ !%!C!CN"""X$;   " ( ( . .  );;==D M>>tG}MMDMOO4+?+?W +N+NOOODM"224 ?CCDO#D( (  " ( ( . .  );;==D"D( (   $ $T * *  %$ $d|rc|j\}}||}|r%||d|_dSdS)zZExtract the table name. :param line: The first line of SHOW CREATE TABLE nameN)_pr_namerKgroupr)rr8r7regexcleanuprSs rr2z,MySQLTableDefinitionParser._parse_table_name{sT w KK    8&wqwwv77E    8 8rci}|r|dkrn|dd}|jD]\}}||}|s|d|d} }|r || } | ||<|d|}dD]} || d|D]\} } | |j|jj d| <dS)zBuild a dictionary of all reflected table-level options. :param line: The final line of SHOW CREATE TABLE output. r'N directiveval)auto_incrementzdata directoryzindex directory_) _pr_optionssearchrXlowersubpopitemsrr#rV) rr8r7options rest_of_linerYrZrSr\valuenopeoptr]s rr1z/MySQLTableDefinitionParser._parse_table_optionss+  ;ts{{  7L"&"2 ; ;wLL..#$77;#7#75 +#GENNE-2 ))*$yy\:: K $ $D KKd # # # #  J JHCFIE 4<+<+<+.sHHHAQHHHrfsp)unsignedzerofill)r+collateretrieve_as_bitwisenullablenotnullNOT NULLautoincr autoincrementdefaultNULLcomment\\\'' generated)sqltext persistenceSTORED persistedcomputed)rVtyperr) _re_columnrKrL_re_column_looser r4r# ischema_namesKeyErrorsqltypesNullType _re_csv_strfindall _re_csv_int issubclassrrrregetr _strip_valuesrIntegerreplacedictupdaterr5)rr8r7r:rSrVr9argscol_type type_argstype_kwkw type_instancecol_kwrrrrrcol_ds rr0z(MySQLTableDefinitionParser._parse_columns O ! !$ ' '  %;;==DDLL%++D11A %{{}}$V   I4t; < < < FF| N IEL M M M L$y/4;Te )|1%8HH ) ) ) II@EtttL    (HHH  ) <42::II !W^^RC(0066IIHH)9)A)A$)G)GHHHI h4 ; < < 2 2!*q!1!1* # #BxxE"" #" ( ' 'BxxE"" '"2h h 1 2 2 6)7 BBI(C(( 6R9__15-. )7w77 "z 88Iu % % 3 3!&F:  88J & & ,&*F? # # ("2 3 3 ,&+F? #((9d++ f  G((9d++  oofd33;;D#FFG((;''  G,,,H//I$(1X(=%!)F: M7G     V U#####sC1DDc g}|D] fddD\}}}}}dg} | |j|| ||s| d|rd|vrn|dr@|dr+| d| |nr|d kr+| d| |nA| d| d |d d z|r| ||d| d d|j|zd|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. c g|] }| Srr)rCirows rrEzBMySQLTableDefinitionParser._describe_to_create..s*:::A:::r)rr r|r_ timestampCDEFAULTrz'%s'rprr^zCREATE TABLE %s ( z, z ) )r5r$quote_identifierr.rjoin) rrrbufferrVrrzrextrar8rs @r_describe_to_createz.MySQLTableDefinitionParser._describe_to_create s * *C:::: /::: 6T8Xw5D KK 66t<< = = = KK ! ! ! ( J''' E#w..((55 E':L:L;; EKK ***KK((((&&KK ***KK((((KK ***KKd)C)C CDDD # E""" MM#((4.. ) ) ) )ww*m44Z@@A 6""     rc6|j|S)z8Unpack '"col"(2),"col" ASC'-ish strings into components.) _re_keyexprsr)r identifierss rrMz*MySQLTableDefinitionParser._parse_keyexprs?s ((555rc g|_g|_|jj}t t dd|jj||j|fD}td|z|jj |_ td|z|_ td|_ td|_td|z|_td|z|_td |z|_td |_|}d |d <td |z|_td|z|_td|_t.D]}||dD]}|||dd|dd|dddS)z Pre-compile regular expressions.)iqfqesc_fqc6g|]}tj|Sr)r,escape)rCss rrEz.Os0IaLLrzM^CREATE (?:\w+ +)?TABLE +%(iq)s(?P(?:%(esc_fq)s|[^%(fq)s])+)%(fq)s +\($zW(?:(?:%(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)?)?(?: +(?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|NOACTIONona, 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[^\)]+?)\)(?: +(?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(?:.*))ENGINETYPEAUTO_INCREMENTAVG_ROW_LENGTHz CHARACTER SETzDEFAULT CHARSETCHECKSUMCOLLATEDELAY_KEY_WRITE INSERT_METHODMAX_ROWSMIN_ROWS PACK_KEYS ROW_FORMATKEY_BLOCK_SIZEUNIONz \([^\)]+\) TABLESPACEz.*? STORAGE DISK RAID_TYPEz4\w+\s+RAID_CHUNKS\s*\=\s*\w+RAID_CHUNKSIZE\s*=\s*\w+N) _re_columnsrar$ final_quoterzipr/_escape_identifier _pr_compile_unescape_identifierrW _re_compilerrrrrrJrNcopyrPrQrR_options_of_type_string_add_option_string_add_option_word_add_option_regex)r_finalquotesroptions rr%z(MySQLTableDefinitionParser._prep_regexesDs* & 3 88@@     $ DFL M M .   ( 9;A B  ''GHH'v..& *+   4!, -06  6! ! #      $/ >$ $  [[]]74!, 58: : " " $"- %(*  *" " ))IJJ . , ,F  # #F + + + +  * *F"  ! !& ) ) ) ) w 666 |-@AAA   C     rz(?:\s*(?:=\s*)|\s+)cdtj|d|jd}|jt |ddS)N(?Pr'z'(?P(?:[^']|'')*?)'(?!')cV|ddddS)Nrrrrp)r)rts rz?MySQLTableDefinitionParser._add_option_string..s$64!8!8!@!@s!K!Krr,r_optional_equalsrar5rrr\rYs rrz-MySQLTableDefinitionParser._add_option_stringsg Ii  ! ! !   KK       rcdtj|d|jd}|jt |dS)Nrr'z (?P\w+)rrs rrz+MySQLTableDefinitionParser._add_option_wordsQ Ii  ! ! !   E 2 233333rcdtj|d|jd|d}|jt |dS)Nrr'z(?Prrs rrz,MySQLTableDefinitionParser._add_option_regexsX Ii  ! ! ! EE   E 2 233333rN)rrrrrr;r3r2r1r0rrMr%rrrrrrrr!r! s>> @000d 8 8 8JJJ:e$e$e$N3 3 3 j666 n n n `.    44444444rr!)COMMENTzDATA DIRECTORYzINDEX DIRECTORYPASSWORD CONNECTIONc$t||fS)z1Prepare a 2-tuple of compiled regex and callable.)r)rYrZs rrrs    ((rcZtj|tjtjzS)z)Compile a string to regex, I and UNICODE.)r,compileIUNICODE)rYs rrr s :eRTBJ. / //rr)r, enumeratedrrr rrrr^r rr objectr class_loggerr!rrrrrrrsB ))))))!!!!!! ! ! ! ! !V ! ! !m4m4m4m4m4m4m4m4`)))) 00000r