U ÂÏ a§Jã@s°ddlZddlmZddlmZddlmZddlmZddlmZdd lm Z dd lmZ dd lm Z Gd d „d e ƒZ e jGdd„de ƒƒZdZddd„Zdd„Zdd„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úeC:\Users\vtejo\AppData\Local\Temp\pip-unpacked-wheel-nyjtotrf\sqlalchemy\dialects\mysql\reflection.pyÚ__init__s zReflectedState.__init__N)Ú__name__Ú __module__Ú __qualname__Ú__doc__rrrrrr sr c@steZdZdZdd„Zdd„Zdd„Zdd „Zd d „Zd d „Z dd„Z dd„Z dd„Z dZ dd„Zdd„Zdd„ZdS)ÚMySQLTableDefinitionParserz4Parses the results of a SHOW CREATE TABLE statement.cCs||_||_| ¡dSr )ÚdialectÚpreparerÚ _prep_regexes)rrrrrrr$sz#MySQLTableDefinitionParser.__init__cCsêtƒ}||_t d|¡D]Ì}| d|jj¡r<| ||¡q| d¡rT| ||¡q|dkr^q| d¡rv|  ||¡q|s|q|  |¡\}}|dkr¢t   d|¡q|dkr¸|j  |¡q|dkrÎ|j |¡q|d kr|j |¡qq|S) Nz\r?\nz z) ú)zCREATE zUnknown schema content: %rÚkeyÚ fk_constraintÚ ck_constraint)r ÚcharsetÚreÚsplitÚ startswithrÚ initial_quoteÚ _parse_columnÚ_parse_table_optionsÚ_parse_table_nameÚ_parse_constraintsr ÚwarnrÚappendrr)rZ show_creater$ÚstateÚlineÚtype_ÚspecrrrÚparse)s0  z MySQLTableDefinitionParser.parsecCs:|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Ú fszAMySQLTableDefinitionParser._parse_constraints..ÚlocalcSsg|] }|d‘qSr6rr7rrrr:gsZforeignr"r#Ú partitionN) Ú_re_keyÚmatchÚ groupdictÚ_parse_keyexprsÚ_re_key_version_sqlrZunformat_identifiersÚ_re_fk_constraintÚ_re_ck_constraintÚ _re_partition)rr0Úmr2Úm2rrrr,Is@ ÿþ  ÿ   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)rr0r/ÚregexÚcleanuprErrrr+{s  z,MySQLTableDefinitionParser._parse_table_namec Csºi}|rx|dkrnf|dd…}|jD]R\}}| |¡}|s.Zfsp)ZunsignedZzerofill)r$ZcollateZretrieve_as_bitwiseÚnullableZnotnullúNOT NULLZautoincrZ autoincrementÚdefaultÚNULLÚcommentú\\ú\ú''Ú generated)ÚsqltextZ persistenceZSTOREDÚ persistedÚcomputed)rGÚtyperarc)Ú _re_columnr>r?Ú_re_column_looser r-rZ ischema_namesÚKeyErrorÚsqltypesZNullTypeÚ _re_csv_strÚfindallÚ _re_csv_intÚ issubclassrrrrTÚgetrrÚ _strip_valuesZIntegerÚreplaceÚdictÚupdaterr.)rr0r/r2rErGr1ÚargsÚcol_typeZ type_argsZtype_kwÚkwZ type_instanceZcol_kwrarcrhrjriZcol_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. csg|] }ˆ|‘qSrr)r8Úi©Úrowrrr:szBMySQLTableDefinitionParser._describe_to_create..)rréééú r`rOÚ timestampÚCÚDEFAULTrbz'%s'r[rfrNzCREATE TABLE %s ( z, z ) )r.rZquote_identifierr'rvÚjoin) rrrÚbufferrGrzr_raÚextrar0rr}rÚ_describe_to_create sD  ÿ  ÿ       ÿúÿz.MySQLTableDefinitionParser._describe_to_createcCs |j |¡S)z8Unpack '"col"(2),"col" ASC'-ish strings into components.)Ú _re_keyexprsrq)rZ identifiersrrrr@?sz*MySQLTableDefinitionParser._parse_keyexprsc Cs.g|_g|_|jj}ttddd„|jj||j |¡fDƒƒƒ}td||jj ƒ|_ 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]}| |¡qö| dd¡| dd¡| dd¡dS)z Pre-compile regular expressions.)ZiqZfqZesc_fqcSsg|]}t |¡‘qSr)r%Úescape)r8Úsrrrr:Osÿz.zM^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|NO ACTIONÚona, 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(?:.*))ZENGINEZTYPEZAUTO_INCREMENTZAVG_ROW_LENGTHz CHARACTER SETzDEFAULT CHARSETZCHECKSUMZCOLLATEZDELAY_KEY_WRITEZ INSERT_METHODZMAX_ROWSZMIN_ROWSZ PACK_KEYSZ ROW_FORMATZKEY_BLOCK_SIZEZUNIONz \([^\)]+\)Z TABLESPACEz.*? STORAGE DISKZ RAID_TYPEz4\w+\s+RAID_CHUNKS\s*\=\s*\w+RAID_CHUNKSIZE\s*=\s*\w+N)Z _re_columnsrPrZ final_quoterwÚzipr(Z_escape_identifierÚ _pr_compileZ_unescape_identifierrHÚ _re_compilerŠrprrrlrmr=rAÚcopyrBrCrDÚ_options_of_type_stringÚ_add_option_stringÚ_add_option_wordÚ_add_option_regex)rZ_finalÚquotesr{ÚoptionrrrrDsˆ ýþþÿÿýþÿ  ëÿüÿ  öÿÿ  öÿüÿ     þz(MySQLTableDefinitionParser._prep_regexesz(?:\s*(?:=\s*)|\s+)cCs.dt |¡|jf}|j t|dd„ƒ¡dS)Nz0(?P%s)%s'(?P(?:[^']|'')*?)'(?!')cSs| dd¡ dd¡S)Nrdrerfr[)rv)r^rrrÚýóz?MySQLTableDefinitionParser._add_option_string..©r%r‹Ú_optional_equalsrPr.r©rrLrJrrrr“ösþÿÿz-MySQLTableDefinitionParser._add_option_stringcCs(dt |¡|jf}|j t|ƒ¡dS)Nz(?P%s)%s(?P\w+)ršrœrrrr”s þz+MySQLTableDefinitionParser._add_option_wordcCs*dt |¡|j|f}|j t|ƒ¡dS)Nz(?P%s)%s(?P%s)ršrœrrrr•s ýz,MySQLTableDefinitionParser._add_option_regexN)rrrrrr3r,r+r*r)r‰r@rr›r“r”r•rrrrr s 2 g51 r)ÚCOMMENTzDATA DIRECTORYzINDEX DIRECTORYZPASSWORDZ CONNECTIONcCs t|ƒ|fS)z1Prepare a 2-tuple of compiled regex and callable.)r)rJrKrrrrsrcCst |tjtjB¡S)z)Compile a string to regex, I and UNICODE.)r%ÚcompileÚIÚUNICODE)rJrrrr srcCs\g}|D]N}|dd…dks,|dd…dkrL|dd… |dd|d¡}| |¡q|S)zStrip reflected values quotesrrú"r[r\r)rvr.)ÚvaluesZ strip_valuesÚarrrru&s    ru)N)r%Z enumeratedrrr rrrrNr ror Úobjectr Z class_loggerrr’rrrurrrrÚs$         s