L ir` ddlmZddlZddlmZddlmZddlmZddlmZddlmZddlm Z dd lm Z dd lm Z dd lm Z dd lm Z d dlmZd dlmZd dlmZd dlmZd dlmZddlmZddlmZddlmZe rd dlmZd dlmZddlmZGddZGddZ dZ!e d1dZ"e d2 d3d Z" d2 d4d!Z"d5d"Z#d6d#Z$d7d$Z%d%d&d'd(d)d*d+d,d-d. Z&ejNd/jQd0e&DZ)y)8) annotationsN)Any)Callable)Dict)List)Optional)overload)Sequence)Tuple) TYPE_CHECKING)Union)ENUM)SET)DATETIME)TIME) TIMESTAMP)types)util)Literal) MySQLDialect)MySQLIdentifierPreparer)ReflectedColumnc$eZdZUdZded<ddZy)ReflectedStatez;Stores raw information about a SHOW CREATE TABLE statement. Optional[str]charsetcXg|_i|_d|_g|_g|_g|_yN)columns table_options table_namekeysfk_constraintsck_constraints)selfs j/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/sqlalchemy/dialects/mysql/reflection.py__init__zReflectedState.__init__)s/.0 -/)-*, 4646NreturnNone)__name__ __module__ __qualname____doc____annotations__r)r*r(rr$sE 7r*rceZdZdZ ddZ ddZddZddZddZddZ ddZ dd Z dd Z dd Z dd Zd ZddZddZddZddZy)MySQLTableDefinitionParserz4Parses the results of a SHOW CREATE TABLE statement.c@||_||_|jyr )dialectpreparer _prep_regexes)r'r7r8s r(r)z#MySQLTableDefinitionParser.__init__5s    r*ct}||_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)rrresplit startswithr8 initial_quote _parse_column_parse_table_options_parse_table_name_parse_partition_options_parse_constraintsrwarnr$appendr%r&)r' show_createrstatelinetype_specs r(parsez MySQLTableDefinitionParser.parse<s@  HHX{3 Dtdmm&A&AAB""4/&))$6+&&tU3$--dE:"55d; t=II:TABe^JJ%%d+o-((//5o-((//59 : r*cJt|jj|Sr )bool _re_is_viewmatch)r'sqls r( _check_viewz&MySQLTableDefinitionParser._check_view`sD$$**3/00r*c|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_keyrT groupdict_parse_keyexprs_re_key_version_sqlr8unformat_identifiers_re_fk_constraint_re_ck_constraint _re_partition)r'rMmrOm2cs r(rHz-MySQLTableDefinitionParser._parse_constraintscs LL  t $ ;;=D#224 ?CDOM"--33D4GH",,.2%'\\^H%=DNH~!%!C!CN""X$;   " " ( ( . ;;=D MM>>tG}MDM+/+?+?W +NOaQqTODM"224 ?C!DO#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_namerTgroupr#)r'rMrLregexcleanuprfs r(rFz,MySQLTableDefinitionParser._parse_table_names< w KK  &qwwv7E  r*ci}|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_optionssearchrllowersubpopitemsr"r7rj) r'rMrLoptions rest_of_linermrnrfrpvaluenopeoptrqs r(rEz/MySQLTableDefinitionParser._parse_table_optionss  DCKL"&"2"2 ;wLL.#$77;#75 #ENE-2 )*$yy\:  ;L $D KKd # $  JHCFIE  4<<+<+9OK'?#++FB7#++C4"x'8'8'='}H<<$$ 1h6G6G6L"h.%1#x/$,CR=.2ll.?.?K ( &--c37 #ENE%* " A D  NHC1T\\5F5FGH74<<;L;LMKh#"4e111/2E'',++C00E'', KN##t||/@/@#$FG Nr*cd}|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 %rrjcoltypeargzDid not recognize type 'z ' of column ''rrrrfsp)unsignedzerofill)rcollateretrieve_as_bitwisenullablenotnullNOT NULLnotnull_generatedautoincr autoincrementdefaultNULLcomment generated)sqltext persistenceSTORED persistedcomputed)rjtyperr) _re_columnrTr__re_column_looserrIr7 ischema_namesKeyErrorsqltypesNullType _re_csv_strfindall _re_csv_intint issubclassrrrrygetrr _strip_valuesInteger cleanup_textdictupdater!rJ)r'rMrLrOrfrjrNargscol_type type_argsvtype_kwkw type_instancecol_kwrrrrrcol_ds r(rDz(MySQLTableDefinitionParser._parse_columnsa OO ! !$ ' ;;=DDL%%++D1A{{}$V  II4t; < F| IIEL M L$y/4;Te )||11%8H <42:I !W^RC((006I)-)9)9)A)A$)GHAQHIH 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|] }| ywr r3).0irows r( zAMySQLTableDefinitionParser._describe_to_create..vs:A:s)rrrrrs timestampCDEFAULTrz'%s'r''rrzCREATE TABLE %s ( z, z ) )rJr8quote_identifierrBrjoin) r'r#r!bufferrjrrrextrarMrs @r(_describe_to_createz.MySQLTableDefinitionParser._describe_to_createdsi  *C: /: 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"    r*c |jj|Dcgc]\}}}||r t|nd|fc}}}Scc}}}w)z8Unpack '"col"(2),"col" ASC'-ish strings into components.N) _re_keyexprsrr)r' identifierscolnamelength modifierss r(r`z*MySQLTableDefinitionParser._parse_keyexprssR/3.?.?.G.G/  *Vc&ky A   sAc g|_|jj}tt 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|_t2D]}|j5|dD]}|j7|dD]}|j9||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(?:.*))rTYPEAUTO_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)rur8 final_quoterziprC_escape_identifierr@escape _pr_compile_unescape_identifierrk _re_compilerSrrrrrr^racopyrcrdre_options_of_type_string_add_option_string_add_option_word_add_partition_option_word_add_option_regex)r'_finalsquotesroptions r(r9z(MySQLTableDefinitionParser._prep_regexessW  ** & 33 88@IIaL   $ DFL M MM . .  ''HI( 9;A B ''GH'v.& ./  8!, -06  6! #     $/ >$  [[]D4!, 58: : " $"- %(*  *" ))IJ . ,F  # #F + ,  *F$  ! !& )% *(  4F  + +F 3 4 w 6 |-@A   C _sHz(?:\s*(?:=\s*)|\s+)cdtj|d|jd}|jj t |t y)N(?Pr;z'(?P(?:[^']|'')*?)'(?!'))r@r_optional_equalsrurJrrr'rprms r(rz-MySQLTableDefinitionParser._add_option_stringks; IIi  ! !   E< @Ar*cdtj|d|jd}|jj t |y)Nr r;z (?P\w+)r@rr rurJrr s r(rz+MySQLTableDefinitionParser._add_option_wordrs9 IIi  ! !   E 23r*cB|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)rr s r(rz5MySQLTableDefinitionParser._add_partition_option_wordys  &)7H*H )$%%E/ )Y,-F )$%%E.G :<99MOE  E 23r*cdtj|d|jd|d}|jj t |y)Nr r;z(?Prr s r(rz,MySQLTableDefinitionParser._add_option_regexs< IIi  ! !    E 23r*N)r7rr8r)rKstrrrr,r)rUrr,rR)rMrr,zUnion[Tuple[None, str], Tuple[Literal['partition'], str], Tuple[Literal['ck_constraint', 'fk_constraint', 'key'], Dict[str, str]]])rMrrLrr,r-)r#rr!z-Sequence[Tuple[str, str, str, str, str, str]]r,r)rrr,z$List[Tuple[str, Optional[int], str]]r+)rprr,r-)rprrmrr,r-)r.r/r0r1r)rPrVrHrFrErGrDrr`r9r rrrrr3r*r(r5r52s>#/F"")6" "H16p 8J48N8N .8N 8Nth$T7 7 ?7  7 r    -  ~ @.B4 44r*r5)COMMENTzDATA DIRECTORYzINDEX DIRECTORYPASSWORD CONNECTIONcyr r3rmrns r(rrs47r*cyr r3rs r(rrs$'r*ct||fS)z1Prepare a 2-tuple of compiled regex and callable.)rrs r(rrs   ((r*cltj|tjtjzS)z)Compile a string to regex, I and UNICODE.)r@compileIUNICODE)rms r(rrs" ::eRTTBJJ. //r*cg}|D]A}|dddk(s|dddk(r|ddj|ddz|d}|j|C|S)zStrip reflected values quotesrr"rrr)rrJ)values strip_valuesas r(rrsg L  Qq6S=AaFcM!B!q!A$/AA  r*cfd|vrtjtd|}|jddS)N\ct|dS)Nr)_control_char_map)rs r(zcleanup_text..s'!-r*rr)r@rx_control_char_regexpr)raw_texts r(rrs6 x66 -     D# &&r*r$     ) z\\z\0z\az\bz\tz\nz\vz\fz\r|c#FK|]}tj|ywr )r@r)rks r(rrs 5aRYYq\ 5s!)rmrrnzCallable[[str], str]r,z,Tuple[re.Pattern[Any], Callable[[str], str]]r )rmrrnr-r,zTuple[re.Pattern[Any], None])rmrrnzOptional[Callable[[str], str]]r,z6Tuple[re.Pattern[Any], Optional[Callable[[str], str]]])rmrr,zre.Pattern[Any])r z Sequence[str]r,z List[str])r)rr,r)* __future__rr@typingrrrrrr r r r r enumeratedrrrrrrrrrr util.typingrbaserrengine.interfacesrrr5rrrrrr&rrr(r3r*r(r;sE#  !""-4 7 7\ 4\ 4~ 7 7-717 7  $' ''!' ' ;?) )7);)0 '          "rzzHH 5#4 55r*