
    ,h:Y              
       F   S SK r SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SS	KJ	r	  SS
KJr
  SSKJr   " S S5      r\	R                   " S S5      5       rSrS#S jrS rS rS\S\4S jrSSSSSSSSSS .	r\ R,                  " S!R/                  S" \ 5       5      5      rg)$    N   )ENUM)SET)DATETIME)TIME)	TIMESTAMP   )log)types)utilc                       \ rS rSrSrS rSrg)ReflectedState   z;Stores raw information about a SHOW CREATE TABLE statement.c                 X    / U l         0 U l        S U l        / U l        / U l        / U l        g N)columnstable_options
table_namekeysfk_constraintsck_constraints)selfs    \/var/www/auris/envauris/lib/python3.13/site-packages/sqlalchemy/dialects/mysql/reflection.py__init__ReflectedState.__init__   s/    	      )r   r   r   r   r   r   N)__name__
__module____qualname____firstlineno____doc__r   __static_attributes__ r   r   r   r      s
    E!r   r   c                       \ rS rSrSrS rS rS\S\4S jr	S r
S	 rS
 rS rS rS rS rS rSrS rS rS rS rSrg)MySQLTableDefinitionParser"   z4Parses the results of a SHOW CREATE TABLE statement.c                 <    Xl         X l        U R                  5         g r   )dialectpreparer_prep_regexes)r   r(   r)   s      r   r   #MySQLTableDefinitionParser.__init__&   s     r   c                    [        5       nX#l        [        R                  " SU5       GH]  nUR	                  SU R
                  R                  -   5      (       a  U R                  XC5        MD  UR	                  S5      (       a  U R                  XC5        Mm  US:X  a  Mu  UR	                  S5      (       a  U R                  XC5        M  SU;   a  U R                  XC5        M  U(       d  M  U R                  U5      u  pVUc  [        R                  " SU-  5        M  US:X  a  UR                  R                  U5        GM  US	:X  a  UR                   R                  U5        GM9  US
:X  a  UR"                  R                  U5        GM]  GM`     U$ )Nz\r?\nz  z) )zCREATE 	PARTITIONzUnknown 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   appendr   r   )r   show_creater2   statelinetype_specs          r   parse MySQLTableDefinitionParser.parse+   s6    HHX{3Dtdmm&A&AABB""4/&&))$6++&&t3$--d: "55d;=II:TABe^JJ%%d+o-((//5o-((//59 4: r   sqlreturnc                 J    [        U R                  R                  U5      5      $ r   )bool_re_is_viewmatch)r   rE   s     r   _check_view&MySQLTableDefinitionParser._check_viewM   s    D$$**3/00r   c                    U R                   R                  U5      nU(       a  UR                  5       nU R                  US   5      US'   US   (       aS  U R                  R                  US   5      nU(       a.  UR                  5       S   (       a  UR                  5       S   US'   US   (       a$  U R
                  R                  US   5      S   US'   SU4$ U R                  R                  U5      nU(       a  UR                  5       nU R
                  R                  US   5      US'   U R                  US   5       Vs/ s H  oUS   PM	     snUS'   U R                  US   5       Vs/ s H  oUS   PM	     snUS'   S	U4$ U R                  R                  U5      nU(       a  UR                  5       nS
U4$ U R                  R                  U5      nU(       a  SU4$ SU4$ s  snf s  snf )zQParse a KEY or CONSTRAINT line.

:param line: A line of SHOW CREATE TABLE output
r   version_sqlparserr   r/   tablelocalforeignr0   r1   	partitionN)
_re_keyrJ   	groupdict_parse_keyexprs_re_key_version_sqlr)   unformat_identifiers_re_fk_constraint_re_ck_constraint_re_partition)r   r@   mrB   m2cs         r   r;   -MySQLTableDefinitionParser._parse_constraintsP   s    LLt$;;=D #224	?CDOM"--33D4GH",,.2%'\\^H%=DNH~!%!C!CN""X $; ""((.;;=D MM>>tG}MDM+/+?+?W+NO+NaqT+NODM"224	?CC!CDO #D(( ""((.;;=D"D(( $$T*$$ d|' Ps   G$,G)c                     U R                   u  p4UR                  U5      nU(       a  U" UR                  S5      5      Ul        gg)zJExtract the table name.

:param line: The first line of SHOW CREATE TABLE
nameN)_pr_namerJ   groupr   )r   r@   r?   regexcleanupr\   s         r   r9   ,MySQLTableDefinitionParser._parse_table_name   s:     KK&qwwv7E r   c                    0 nU(       a  US:w  a  UnU R                    Hs  u  pVUR                  U5      nU(       d  M  UR                  S5      UR                  S5      pU(       a  U" U	5      n	XUR                  5       '   UR	                  SU5      nMu     S H  n
UR                  U
S5        M     UR                  5        H.  u  pXR                  U R                  R                  < SU< 3'   M0     g)zsBuild a dictionary of all reflected table-level options.

:param line: The final line of SHOW CREATE TABLE output.
r-   	directiveval )auto_incrementzdata directoryzindex directoryN_)
_pr_optionssearchrc   lowersubpopitemsr   r(   ra   )r   r@   r?   optionsrest_of_linerd   re   r\   rh   valuenopeoptri   s                r   r8   /MySQLTableDefinitionParser._parse_table_options   s     DCKL"&"2"2LL.#$77;#75#ENE-2	)*$yy\: #3 LDKKd# L  HCFI4<<+<+<c BC (r   c                 
   0 nUS S  nUR                  S5      (       d  UR                  S5      (       a5  USS  nUR                  S5      (       a  M  UR                  S5      (       a  M5  U R                   GHH  u  pVUR                  U5      nU(       a  SUR                  ;  a  M0  UR	                  S5      nUR                  5       nUS:H  n	US:X  d  U	(       a  UR                  SS	5      nUR                  S
S	5      nU	(       a  UR                  S5      (       a  US S nU R                  R                  S:X  a-  UR                  S5      (       a  SU;   d  SU;   d  SU;   a  US S nU R                  R                  < SU< S3n
XCU
'   O6UR                  SS5      nUR	                  S5      nU(       a  U" U5      nXU'     O   UR                  5        H  u  pSU R                  R                  -  nSU R                  R                  -  nX:X  d  X:X  aD  XR                  ;  a  XR                  U'   M`  UR                  U   < SU< 3UR                  U'   M  XR                  U R                  R                  < SU< 3'   M     g )N( r   r.   rh   subpartitionrS   z) */rj   ,r-   mariadbMAXVALUEMINVALUEENGINErl   _definitionsri   z%s_partition_definitionsz%s_subpartition_definitionsz, )r5   rm   rn   patternrc   ro   replaceendswithr(   ra   rr   r   )r   r@   r?   rs   new_linerd   re   r\   rh   is_subpartitiondefsru   rw   ri   part_defsubpart_defs                   r   r:   3MySQLTableDefinitionParser._parse_partition_options   sD   7!!#&&(*=*=c*B*B|H !!#&&(*=*=c*B*B #..NEX&A5==8,I!)I'>9OK'?#++FB7#++C4"x'8'8'='='}H<<$$	1h6G6G6L6L"h.%1#x/ $,CR=.2ll.?.?K ( &--c37	#ENE%*	"A /D  HC1T\\5F5FGH74<<;L;LMK#"4111/2'', ++C00E'',
 KN##t||/@/@#$FG (r   c                 0   SnU R                   R                  U5      nU(       a  UR                  5       nSUS'   O7U R                  R                  U5      nU(       a  UR                  5       nSUS'   U(       d  [        R
                  " SU-  5        gUS   (       d  [        R
                  " SU-  5        US   US   US	   pvn U R                  R                  U   nUb  US:X  a  / n	ObUS   S:X  a%  US   S:X  a  U R                  R                  U5      n	O4U R                  R                  U5       V
s/ s H  n
[        U
5      PM     n	n
0 n[        U[         ["        [$        45      (       a  U	(       a  U	R'                  S5      US'   S H   nUR)                  US5      (       d  M  SX'   M"     S H"  nUR)                  US5      (       d  M  X<   X'   M$     [        U[*        [,        45      (       a+  [/        U	5      n	[        U[,        5      (       a  SU	;   a  SUS'   U" U	0 UD6n0 nSUS'   UR)                  SS5      S:X  a  SUS'   UR)                  SS5      S:X  a  SUS'   UR)                  SS5      (       a  SUS'   O$[        U[        R0                  5      (       a  SUS'   UR)                  SS5      nUS:X  a  SnUR)                  SS5      nUb  [3        U5      nUR)                  S5      nUb*  [5        US9nUR)                  S5      nUb  US :H  US!'   UUS"'   [5        X]UUS#9nUR7                  U5        UR8                  R;                  U5        g! [         a3    [        R
                  " S
U< SU< S35        [        R                  n GNf = fs  sn
f )$zExtract column details.

Falls back to a 'minimal support' variant if full parse fails.

:param line: Any column-bearing line from SHOW CREATE TABLE
NTfullFzUnknown column definition %rz-Incomplete reflection of column definition %rra   coltypeargzDid not recognize type 'z' of column ''rj   r   r~   fsp)unsignedzerofill)r2   collateretrieve_as_bitwisenullablenotnullNOT NULLnotnull_generatedautoincrautoincrementdefaultNULLcomment	generated)sqltextpersistenceSTORED	persistedcomputed)ra   typer   r   )
_re_columnrJ   rU   _re_column_looser   r<   r(   ischema_namesKeyErrorsqltypesNullType_re_csv_strfindall_re_csv_intint
issubclassr   r   r   rq   getr   r   _strip_valuesIntegercleanup_textdictupdater   r=   )r   r@   r?   rB   r\   ra   rA   argscol_type	type_argsvtype_kwkwtype_instancecol_kwr   r   r   r   r   col_ds                        r   r7   (MySQLTableDefinitionParser._parse_column   se    OO!!$';;=DDL%%++D1A{{}$VII4t;<F|IIELM L$y/4;T	)||11%8H <42:I!W^RC((006I)-)9)9)A)A$)GH)GAQ)GIH h4 ;<<!*q!1*BxxE""" + )BxxE"""h ) hs,,%i0I(C((R9_15-. )7w7 "z88Iu%3!&F:88'/:=!&F: 88J&&&*F?#("2"233&+F?# ((9d+fG((9d+"7+G((;'G,H/I$(1X(=%!)F:7G
 	VU#Y  	)II@EtL  ((H		) Is   M 5N9NNc                 N  ^
 / nU GH]  m
U
4S jS 5       u  pEpgnS/n	U	R                  U R                  R                  U5      5        U	R                  U5        U(       d  U	R                  S5        U(       a  SU;   a  OUR                  S5      (       a9  UR                  S5      (       a#  U	R                  S5        U	R                  U5        O^US	:X  a#  U	R                  S5        U	R                  U5        O5U	R                  S5        U	R                  S
UR	                  SS5      -  5        U(       a  U	R                  U5        UR                  SR                  U	5      5        GM`     SR                  SU R                  R                  U5      -  SR                  U5      S/5      $ )af  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.
c              3   .   >#    U  H
  nTU   v   M     g 7fr   r#   ).0irows     r   	<genexpr>AMySQLTableDefinitionParser._describe_to_create.<locals>.<genexpr>W  s      : /1As   )r   r            r{   r   rk   	timestampCDEFAULTr   z'%s'r   ''rj   zCREATE TABLE %s (
z,
z
) )r=   r)   quote_identifierr5   r   join)r   r   r   bufferra   r   r   r   extrar@   r   s             @r   _describe_to_create.MySQLTableDefinitionParser._describe_to_createI  sh    C: /:6TX 5DKK66t<=KK!J'#w.((55':L:L; ; KK	*KK(&KK	*KK(KK	*KKd)C CDE"MM#((4.)7 : ww *mm44Z@A 

6"	
 		
r   c           	          U R                   R                  U5       VVVs/ s H  u  p#nX#(       a  [        U5      OSU4PM     snnn$ s  snnnf )z8Unpack '"col"(2),"col" ASC'-ish strings into components.N)_re_keyexprsr   r   )r   identifierscolnamelength	modifierss        r   rV   *MySQLTableDefinitionParser._parse_keyexprs~  sU    
 /3.?.?.G.G/
/* Vc&kyA/
 	
 
s   #Ac                 8   / U l         / U l        U R                  R                  n[	        [        SU R                  R                  UU R                  R                  U5      4 Vs/ s H  n[        R                  " U5      PM     sn5      5      n[        SU-  U R                  R                  5      U l        [        S5      U l        [        SU-  5      U l        [        S5      U l        [        S5      U l        [        SU-  5      U l        [        SU-  5      U l        [        S	U-  5      U l        [        S
5      U l        UR-                  5       nSUS'   [        SU-  5      U l        [        SU-  5      U l        [        S5      U l        [4         H  nU R7                  U5        M     S H  nU R9                  U5        M     S H  nU R;                  U5        M     U R=                  SS5        U R=                  SS5        U R=                  SS5        gs  snf )z Pre-compile regular expressions.)iqfqesc_fqzM^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<notnull_generated>(?:NOT )?NULL))?)?(?: +(?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|SET DEFAULTonaJ    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>(?:%(iq)s[^%(fq)s]+%(fq)s(?: *, *)?)+)\)(?: +(?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(?:.*))r   TYPEAUTO_INCREMENTAVG_ROW_LENGTHzCHARACTER SETzDEFAULT CHARSETCHECKSUMCOLLATEDELAY_KEY_WRITEINSERT_METHODMAX_ROWSMIN_ROWS	PACK_KEYS
ROW_FORMATKEY_BLOCK_SIZESTATS_SAMPLE_PAGES)PARTITION BYSUBPARTITION BY
PARTITIONSSUBPARTITIONSr.   SUBPARTITIONUNIONz
\([^\)]+\)
TABLESPACEz.*? STORAGE DISK	RAID_TYPEz4\w+\s+RAID_CHUNKS\s*\=\s*\w+RAID_CHUNKSIZE\s*=\s*\w+N)_re_columnsrm   r)   final_quoter   zipr6   _escape_identifierr3   escape_pr_compile_unescape_identifierrb   _re_compilerI   r   r   r   r   r   rT   rW   copyrY   rZ   r[   _options_of_type_string_add_option_string_add_option_word_add_partition_option_word_add_option_regex)r   _finalsquotesr   options         r   r*   (MySQLTableDefinitionParser._prep_regexes  sT    **& 3388@ IIaL

 $DFLMMM..
 ''HI (9;AB
 ''GH 'v. &. /
8 !,- 06	6!
 #
 

  $/>$
  [[]D4!,
5 8:
:"
$ "-% (*	*"
 ))IJ
 .F##F+ .
F$ !!&)%
(
F ++F3
 	w6|-@AC	
_s   $ Hz(?:\s*(?:=\s*)|\s+)c                     S[         R                  " U5      < SU R                  < S3nU R                  R	                  [        U[        5      5        g )N(?P<directive>r-   z'(?P<val>(?:[^']|'')*?)'(?!'))r3   r   _optional_equalsrm   r=   r   r   r   rh   rd   s      r   r  -MySQLTableDefinitionParser._add_option_stringI  s;    IIi !!
 	E< @Ar   c                     S[         R                  " U5      < SU R                  < S3nU R                  R	                  [        U5      5        g )Nr  r-   z(?P<val>\w+)r3   r   r  rm   r=   r   r  s      r   r  +MySQLTableDefinitionParser._add_option_wordP  s9    IIi !!
 	E 23r   c                 Z   US:X  d  US:X  a*  S[         R                  " U5      < SU R                  < S3nOQUS:X  d  US:X  a*  S[         R                  " U5      < SU R                  < S3nOS[         R                  " U5      < S	3nU R                  R	                  [        U5      5        g )
Nr   r   z(?<!\S)(?P<directive>r-   z(?P<val>\w+.*)r   r   z(?P<val>\d+)z)(?!\S)r  r  s      r   r  5MySQLTableDefinitionParser._add_partition_option_wordW  s    &)7H*H		)$%%E /)Y,-F		)$%%E .G :<99MOEE 23r   c                     S[         R                  " U5      < SU R                  < SU< S3nU R                  R	                  [        U5      5        g )Nr  r-   z(?P<val>r  r  s      r   r  ,MySQLTableDefinitionParser._add_option_regexf  s<    IIi !!

 	E 23r   )rb   rm   rZ   r   r   r   r   r   rY   rI   rT   rW   r   r[   r(   r)   N)r   r   r   r    r!   r   rC   strrH   rK   r;   r9   r8   r:   r7   r   rV   r*   r  r  r  r  r  r"   r#   r   r   r%   r%   "   sq    >
 D1s 1t 10d	8J46Nph$T3
j
}
~ .B444r   r%   )COMMENTzDATA DIRECTORYzINDEX DIRECTORYPASSWORD
CONNECTIONc                     [        U 5      U4$ )z1Prepare a 2-tuple of compiled regex and callable.)r   )rd   re   s     r   r   r   x  s     ((r   c                 n    [         R                  " U [         R                  [         R                  -  5      $ )z)Compile a string to regex, I and UNICODE.)r3   compileIUNICODE)rd   s    r   r   r   ~  s"     ::eRTTBJJ.//r   c                     / nU  HD  nUSS S:X  d	  USS S:X  a  USS R                  US   S-  US   5      nUR                  U5        MF     U$ )zStrip reflected values quotesr   r   "r   r~   r   )r   r=   )valuesstrip_valuesas      r   r   r     sb    LQq6S=AaFcM!B!q!A$/AA	 
 r   raw_textrF   c                 l    SU ;   a  [         R                  " [        S U 5      n U R                  SS5      $ )N\c                     [         U S      $ )Nr   )_control_char_map)r  s    r   <lambda>cleanup_text.<locals>.<lambda>  s    ,=ad,Cr   r   r   )r3   rp   _control_char_regexpr   )r$  s    r   r   r     s5    x66 "CX
 D#&&r   r&   	
)	z\\z\0z\az\bz\tz\nz\vz\fz\r|c              #   N   #    U  H  n[         R                  " U5      v   M     g 7fr   )r3   r   )r   ks     r   r   r     s     5#4aRYYq\\#4s   #%r   )r3   
enumeratedr   r   r   r   r   r   rj   r
   r   r   r   class_loggerr%   r   r   r   r   r  r   r(  r  r   r+  r#   r   r   <module>r9     s    
       ! 	! 	! I	4 I	4 I	4X )0'3 '3 '   zzHH5#455 r   