
    Bhr`              
      2   S SK Jr  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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KJr  SSKJr  \(       a  SSKJr  SSKJr  SSKJr   " S S5      r " S S5      r Sr!\	      S1S j5       r"\	 S2     S3S  jj5       r" S2     S4S! jjr"S5S" jr#S6S# jr$S7S$ jr%S%S&S'S(S)S*S+S,S-S..	r&\RN                  " S/RQ                  S0 \& 5       5      5      r)g)8    )annotationsN)Any)Callable)Dict)List)Optional)overload)Sequence)Tuple)TYPE_CHECKING)Union   )ENUM)SET)DATETIME)TIME)	TIMESTAMP   )types)util)Literal)MySQLDialect)MySQLIdentifierPreparer)ReflectedColumnc                  .    \ rS rSr% SrS\S'   SS jrSrg)	ReflectedState$   z;Stores raw information about a SHOW CREATE TABLE statement.Optional[str]charsetc                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    g/home/kali/devsecops-assessor/venv/lib/python3.13/site-packages/sqlalchemy/dialects/mysql/reflection.py__init__ReflectedState.__init__)   s/    .0-/)-*,	4646    )r'   r"   r&   r%   r$   r#   NreturnNone)__name__
__module____qualname____firstlineno____doc____annotations__r*   __static_attributes__ r,   r)   r   r   $   s    E7r,   r   c                      \ rS rSrSr    SS jr      SS jrSS jrSS jrSS jr	SS jr
      SS	 jrSS
 jr      SS jr    SS jrSS jrSrSS jrSS jrSS jrSS jrSrg)MySQLTableDefinitionParser2   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__5   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   r   resplit
startswithr=   initial_quote_parse_column_parse_table_options_parse_table_name_parse_partition_options_parse_constraintsr   warnr%   appendr&   r'   )r(   show_creater   statelinetype_specs          r)   parse MySQLTableDefinitionParser.parse<   s8     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,   c                J    [        U R                  R                  U5      5      $ r!   )bool_re_is_viewmatch)r(   sqls     r)   _check_view&MySQLTableDefinitionParser._check_view`   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   rC   tablelocalforeignrD   rE   	partitionN)
_re_keyr[   	groupdict_parse_keyexprs_re_key_version_sqlr=   unformat_identifiers_re_fk_constraint_re_ck_constraint_re_partition)r(   rS   mrU   m2cs         r)   rN   -MySQLTableDefinitionParser._parse_constraintsc   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_namer[   groupr$   )r(   rS   rR   regexcleanuprn   s         r)   rL   ,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.
rA   	directiveval )auto_incrementzdata directoryzindex directoryN_)
_pr_optionssearchru   lowersubpopitemsr#   r<   rs   )r(   rS   rR   optionsrest_of_linerv   rw   rn   rz   valuenopeoptr{   s                r)   rK   /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   rB   rz   subpartitionre   z) */r|   ,rA   mariadbMAXVALUEMINVALUEENGINEr~   _definitionsr{   z%s_partition_definitionsz%s_subpartition_definitionsz, )rH   r   r   patternru   r   replaceendswithr<   rs   r   r#   )r(   rS   rR   r   new_linerv   rw   rn   rz   is_subpartitiondefsr   r   r{   part_defsubpart_defs                   r)   rM   3MySQLTableDefinitionParser._parse_partition_options   sF    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 %rrs   coltypeargzDid not recognize type 'z' of column ''r|   r   r   fsp)unsignedzerofill)r   collateretrieve_as_bitwisenullablenotnullNOT NULLnotnull_generatedautoincrautoincrementdefaultNULLcomment	generated)sqltextpersistenceSTORED	persistedcomputed)rs   typer   r   )
_re_columnr[   rg   _re_column_looser   rO   r<   ischema_namesKeyErrorsqltypesNullType_re_csv_strfindall_re_csv_intint
issubclassr   r   r   r   getr   r   _strip_valuesIntegercleanup_textdictupdater"   rP   )r(   rS   rR   rU   rn   rs   rT   argscol_type	type_argsvtype_kwkwtype_instancecol_kwr   r   r   r   r   col_ds                        r)   rJ   (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!   r7   ).0irows     r)   	<genexpr>AMySQLTableDefinitionParser._describe_to_create.<locals>.<genexpr>v  s      : /1As   )r   r            r   r   r}   	timestampCDEFAULTr   z'%s'r   ''r|   zCREATE TABLE %s (
z,
z
) )rP   r=   quote_identifierrH   r   join)r(   r$   r"   bufferrs   r   r   r   extrarS   r   s             @r)   _describe_to_create.MySQLTableDefinitionParser._describe_to_created  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)   rh   *MySQLTableDefinitionParser._parse_keyexprs  sU     /3.?.?.G.G/
/* Vc&kyA/
 	
 
s   #Ac                *   / 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        [2         H  nU R5                  U5        M     S H  nU R7                  U5        M     S H  nU R9                  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SUBPARTITIONSrB   SUBPARTITIONUNIONz
\([^\)]+\)
TABLESPACEz.*? STORAGE DISK	RAID_TYPEz4\w+\s+RAID_CHUNKS\s*\=\s*\w+RAID_CHUNKSIZE\s*=\s*\w+N)r   r=   final_quoter   ziprI   _escape_identifierrF   escape_pr_compile_unescape_identifierrt   _re_compilerZ   r   r   r   r   r   rf   ri   copyrk   rl   rm   _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  sQ   
  	 **& 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>rA   z'(?P<val>(?:[^']|'')*?)'(?!'))rF   r  _optional_equalsr   rP   r  r   r(   rz   rv   s      r)   r  -MySQLTableDefinitionParser._add_option_stringk  s;    IIi !!
 	E< @Ar,   c                    S[         R                  " U5      < SU R                  < S3nU R                  R	                  [        U5      5        g )Nr  rA   z(?P<val>\w+)rF   r  r  r   rP   r  r  s      r)   r  +MySQLTableDefinitionParser._add_option_wordr  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>rA   z(?P<val>\w+.*)r  r  z(?P<val>\d+)z)(?!\S)r!  r  s      r)   r  5MySQLTableDefinitionParser._add_partition_option_wordy  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  rA   z(?P<val>r!  r  s      r)   r  ,MySQLTableDefinitionParser._add_option_regex  s<    IIi !!

 	E 23r,   )rt   r   rl   r   r   r   r   rk   rZ   rf   ri   r   rm   r<   r=   N)r<   r   r=   r   )rQ   strr   r   r.   r   )r\   r'  r.   rY   )rS   r'  r.   zUnion[Tuple[None, str], Tuple[Literal['partition'], str], Tuple[Literal['ck_constraint', 'fk_constraint', 'key'], Dict[str, str]]])rS   r'  rR   r   r.   r/   )r$   r'  r"   z-Sequence[Tuple[str, str, str, str, str, str]]r.   r'  )r   r'  r.   z$List[Tuple[str, Optional[int], str]]r-   )rz   r'  r.   r/   )rz   r'  rv   r'  r.   r/   )r0   r1   r2   r3   r4   r*   rV   r]   rN   rL   rK   rM   rJ   r   rh   r>   r  r  r  r  r  r6   r7   r,   r)   r9   r9   2   s    >#/F"")6"	"H16p	8J48N8N .8N	8Nth$T7
7
 ?7
 
	7
r



	-

~
@ .B444r,   r9   )COMMENTzDATA DIRECTORYzINDEX DIRECTORYPASSWORD
CONNECTIONc                    g r!   r7   rv   rw   s     r)   r  r    s     47r,   c                    g r!   r7   r,  s     r)   r  r    s     $'r,   c                    [        U 5      U4$ )z1Prepare a 2-tuple of compiled regex and callable.)r  r,  s     r)   r  r    s    
 ((r,   c                n    [         R                  " U [         R                  [         R                  -  5      $ )z)Compile a string to regex, I and UNICODE.)rF   compileIUNICODE)rv   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   rP   )valuesstrip_valuesas      r)   r   r     sb     LQq6S=AaFcM!B!q!A$/AA	 
 r,   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    '!-r,   r   r   )rF   r   _control_char_regexpr   )raw_texts    r)   r   r     s6    x66 -

 D#&&r,   r9   	
)	z\\z\0z\az\bz\tz\nz\vz\fz\r|c              #  N   #    U  H  n[         R                  " U5      v   M     g 7fr!   )rF   r  )r   ks     r)   r   r     s     5#4aRYYq\\#4s   #%)rv   r'  rw   zCallable[[str], str]r.   z,Tuple[re.Pattern[Any], Callable[[str], str]]r!   )rv   r'  rw   r/   r.   zTuple[re.Pattern[Any], None])rv   r'  rw   zOptional[Callable[[str], str]]r.   z6Tuple[re.Pattern[Any], Optional[Callable[[str], str]]])rv   r'  r.   zre.Pattern[Any])r5  zSequence[str]r.   z	List[str])r?  r'  r.   r'  )*
__future__r   rF   typingr   r   r   r   r   r	   r
   r   r   r   
enumeratedr   r   r   r   r   r   r|   r   r   util.typingr   baser   r   engine.interfacesr   r   r9   r  r  r  r   r   r;  r0  r   r>  r7   r,   r)   <module>rQ     sC   # 	                 !  ""-47 7\	4 \	4~  
77-717 
7
 
 $'''!' 
' ;?))7);)0'   zzHH5#455 r,   