
    hr`              
         d dl mZ d dlZd dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d d	lm
Z
 d d
lmZ d dlmZ d dlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ erddlmZ ddlmZ ddlmZ  G d d      Z G d d      Z dZ!e		 	 	 	 	 	 d1d       Z"e		 d2	 	 	 	 	 d3d        Z"	 d2	 	 	 	 	 d4d!Z"d5d"Z#d6d#Z$d7d$Z%d%d&d'd(d)d*d+d,d-d.	Z& ejN                  d/jQ                  d0 e&D                    Z)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                  $    e Zd ZU dZded<   ddZy)ReflectedStatez;Stores raw information about a SHOW CREATE TABLE statement.Optional[str]charsetc                X    g | _         i | _        d | _        g | _        g | _        g | _        y N)columnstable_options
table_namekeysfk_constraintsck_constraints)selfs    b/var/www/html/eduruby.in/venv/lib/python3.12/site-packages/sqlalchemy/dialects/mysql/reflection.py__init__zReflectedState.__init__)   s/    .0-/)-*,	4646    NreturnNone)__name__
__module____qualname____doc____annotations__r)    r*   r(   r   r   $   s    E7r*   r   c                      e Zd ZdZ	 	 	 	 ddZ	 	 	 	 	 	 ddZddZddZddZddZ		 	 	 	 	 	 ddZ
dd	Z	 	 	 	 	 	 dd
Z	 	 	 	 ddZddZdZddZddZddZddZy)MySQLTableDefinitionParserz4Parses the results of a SHOW CREATE TABLE statement.c                @    || _         || _        | j                          y r    )dialectpreparer_prep_regexes)r'   r7   r8   s      r(   r)   z#MySQLTableDefinitionParser.__init__5   s      r*   c                   t               }||_        t        j                  d|      D ]:  }|j	                  d| j
                  j                  z         r| j                  ||       ?|j	                  d      r| j                  ||       c|dk(  ri|j	                  d      r| j                  ||       d|v r| j                  ||       |s| j                  |      \  }}|t        j                  d|z         |dk(  r|j                  j                  |       |d	k(  r|j                   j                  |       |d
k(  r|j"                  j                  |       ;= |S )Nz\r?\nz  z) )zCREATE 	PARTITIONzUnknown schema content: %rkeyfk_constraintck_constraint)r   r   resplit
startswithr8   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(   parsez MySQLTableDefinitionParser.parse<   s@     HHX{3 	Dtdmm&A&AAB""4/&))$6+&&tU3$--dE: "55d;t=II:TABe^JJ%%d+o-((//5o-((//59	: r*   c                J    t        | j                  j                  |            S r    )bool_re_is_viewmatch)r'   sqls     r(   _check_viewz&MySQLTableDefinitionParser._check_view`   s    D$$**3/00r*   c                   | j                   j                  |      }|r|j                         }| j                  |d         |d<   |d   rI| j                  j                  |d         }|r)|j                         d   r|j                         d   |d<   |d   r$| j
                  j                  |d         d   |d<   d|fS | j                  j                  |      }|r|j                         }| j
                  j                  |d         |d<   | j                  |d         D cg c]  }|d   	 c}|d<   | j                  |d         D cg c]  }|d   	 c}|d<   d	|fS | j                  j                  |      }|r|j                         }d
|fS | j                  j                  |      }|rd|fS d|fS c c}w c c}w )zaParse a KEY or CONSTRAINT line.

        :param line: A line of SHOW CREATE TABLE output
        r!   version_sqlparserr   r=   tablelocalforeignr>   r?   	partitionN)
_re_keyrT   	groupdict_parse_keyexprs_re_key_version_sqlr8   unformat_identifiers_re_fk_constraint_re_ck_constraint_re_partition)r'   rM   mrO   m2cs         r(   rH   z-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OaQqTODM"224	?C!DO #D(( ""((.;;=D"D(( $$T*$$ d|' Ps   $F8F=c                    | j                   \  }}|j                  |      }|r ||j                  d            |_        yy)zZExtract the table name.

        :param line: The first line of SHOW CREATE TABLE
        nameN)_pr_namerT   groupr#   )r'   rM   rL   regexcleanuprf   s         r(   rF   z,MySQLTableDefinitionParser._parse_table_name   s<     wKK&qwwv7E r*   c                   i }|r|dk7  r{|}| j                   D ]j  \  }}|j                  |      }|s|j                  d      |j                  d      }	}|r ||	      }	|	||j                         <   |j	                  d|      }l dD ]  }
|j                  |
d        |j                         D ]-  \  }}||j                  | j                  j                  d|<   / y)zBuild 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searchrl   lowersubpopitemsr"   r7   rj   )r'   rM   rL   optionsrest_of_linerm   rn   rf   rp   valuenopeoptrq   s                r(   rE   z/MySQLTableDefinitionParser._parse_table_options   s     DCKL"&"2"2 ;wLL.#$77;#75	#ENE-2	)*$yy\:; L 	$DKKd#	$   	JHCFIE4<<+<+<c BC	Jr*   c                   i }|d d  }|j                  d      s|j                  d      r)|dd  }|j                  d      r|j                  d      r)| j                  D ]   \  }}|j                  |      }|rd|j                  vr)|j	                  d      }|j                         }|dk(  }	|dk(  s|	r|j                  dd	      }|j                  d
d	      }|	r|j                  d      r|d d }| j                  j                  dk(  r"|j                  d      rd|v sd|v sd|v r|d d }| j                  j                  d|d}
|||
<   n2|j                  dd      }|j	                  d      }|r ||      }|||<    n |j                         D ]  \  }}d| j                  j                  z  }d| j                  j                  z  }||k(  s||k(  r@||j                  vr||j                  |<   `|j                  |   d||j                  |<   ||j                  | j                  j                  d|<    y )N( r   r<   rp   subpartitionr]   z) */rr   ,r;   mariadbMAXVALUEMINVALUEENGINErt   _definitionsrq   z%s_partition_definitionsz%s_subpartition_definitionsz, )rB   ru   rv   patternrl   rw   replaceendswithr7   rj   rz   r"   )r'   rM   rL   r{   new_linerm   rn   rf   rp   is_subpartitiondefsr}   r   rq   part_defsubpart_defs                   r(   rG   z3MySQLTableDefinitionParser._parse_partition_options   sR    7!!#&(*=*=c*B|H !!#&(*=*=c*B #..  	NE7X&A5==8,I!)I'>9OK'?#++FB7#++C4"x'8'8'='}H<<$$	1h6G6G6L"h.%1#x/ $,CR=.2ll.?.?K ( &--c37	#ENE%*	"A 	D   	NHC1T\\5F5FGH74<<;L;LMKh#"4e111/2E'', ++C00E'',
 KN##t||/@/@#$FG	Nr*   c                   d}| j                   j                  |      }|r|j                         }d|d<   n2| j                  j                  |      }|r|j                         }d|d<   |st	        j
                  d|z         y|d   st	        j
                  d|z         |d   |d   |d	   }}}	 | j                  j                  |   }||dk(  rg }	n]|d   dk(  r$|d   dk(  r| j                  j                  |      }	n1| j                  j                  |      D 
cg c]  }
t        |
       }	}
i }t        |t         t"        t$        f      r|	r|	j'                  d      |d<   dD ]  }|j)                  |d      sd||<    dD ]  }|j)                  |d      s||   ||<    t        |t*        t,        f      r$t/        |	      }	t        |t,              r	d|	v rd|d<    ||	i |}i }d|d<   |j)                  dd      dk(  rd|d<   |j)                  dd      dk(  rd|d<   |j)                  dd      rd|d<   nt        |t        j0                        rd|d<   |j)                  dd      }|dk(  rd}|j)                  dd      }|t3        |      }|j)                  d      }|,t5        |      }|j)                  d      }||d k(  |d!<   ||d"<   t5        ||||#      }|j7                  |       |j8                  j;                  |       y# t        $ r0 t	        j
                  d
|d|d       t        j                  }Y zw xY wc c}
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
        NTfullFzUnknown column definition %rz-Incomplete reflection of column definition %rrj   coltypeargzDid not recognize type 'z' of column ''rr   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)rj   typer   r   )
_re_columnrT   r_   _re_column_looser   rI   r7   ischema_namesKeyErrorsqltypesNullType_re_csv_strfindall_re_csv_intint
issubclassr   r   r   ry   getr   r   _strip_valuesIntegercleanup_textdictupdater!   rJ   )r'   rM   rL   rO   rf   rj   rN   argscol_type	type_argsvtype_kwkwtype_instancecol_kwr   r   r   r   r   col_ds                        r(   rD   z(MySQLTableDefinitionParser._parse_column   sa    OO!!$';;=DDL%%++D1A{{}$VII4t;<F|IIELM L$y/4;Te	)||11%8H <42:I!W^RC((006I)-)9)9)A)A$)GHAQHIH h4 ;<!*q!1* 	#BxxE""	# ) 	'BxxE""2h	' hs,%i0I(C(R9_15-. )7w7!# "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@EtL  ((H		) Is   0L M5MMc                  
 g }|D ]A  

fddD        \  }}}}}dg}	|	j                  | j                  j                  |             |	j                  |       |s|	j                  d       |rd|v rn|j                  d      r4|j                  d      r#|	j                  d       |	j                  |       n]|d	k(  r#|	j                  d       |	j                  |       n5|	j                  d       |	j                  d
|j	                  dd      z         |r|	j                  |       |j                  dj                  |	             D dj                  d| j                  j                  |      z  dj                  |      dg      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.
        c              3  (   K   | ]	  }|     y wr    r3   ).0irows     r(   	<genexpr>zAMySQLTableDefinitionParser._describe_to_create.<locals>.<genexpr>v  s      :A:s   )r   r            r   r   rs   	timestampCDEFAULTr   z'%s'r   ''rr   zCREATE TABLE %s (
z,
z
) )rJ   r8   quote_identifierrB   r   join)r'   r#   r!   bufferrj   r   r   r   extrarM   r   s             @r(   _describe_to_createz.MySQLTableDefinitionParser._describe_to_created  si      	*C: /:6T8Xw 5DKK66t<=KK!J'#w.((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           	         | j                   j                  |      D cg c]  \  }}}||rt        |      nd|f c}}}S c c}}}w )z8Unpack '"col"(2),"col" ASC'-ish strings into components.N)_re_keyexprsr   r   )r'   identifierscolnamelength	modifierss        r(   r`   z*MySQLTableDefinitionParser._parse_keyexprs  sR     /3.?.?.G.G/
 
* Vc&kyA
 	
 
s   Ac                   g | _         | j                  j                  }t        t	        d| j                  j
                  || j                  j                  |      fD cg c]  }t        j                  |       c}            }t        d|z  | j                  j                        | _        t        d      | _        t        d|z        | _        t        d      | _        t        d      | _        t        d|z        | _        t        d|z        | _        t        d	|z        | _        t        d
      | _        |j+                         }d|d<   t        d|z        | _        t        d|z        | _        t        d      | _        t2        D ]  }| j5                  |        dD ]  }| j7                  |        dD ]  }| j9                  |        | j;                  dd       | j;                  dd       | j;                  dd       yc c}w )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)ru   r8   final_quoter   ziprC   _escape_identifierr@   escape_pr_compile_unescape_identifierrk   _re_compilerS   r   r   r   r   r   r^   ra   copyrc   rd   re   _options_of_type_string_add_option_string_add_option_word_add_partition_option_word_add_option_regex)r'   _finalsquotesr   options         r(   r9   z(MySQLTableDefinitionParser._prep_regexes  sW   
  	 **& 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$ !!&)%	*(
 	4F ++F3	4 	w6|-@AC	
_s   Hz(?:\s*(?:=\s*)|\s+)c                    dt        j                  |      d| j                  d}| j                  j	                  t        |t                     y )N(?P<directive>r;   z'(?P<val>(?:[^']|'')*?)'(?!'))r@   r   _optional_equalsru   rJ   r   r   r'   rp   rm   s      r(   r  z-MySQLTableDefinitionParser._add_option_stringk  s;    IIi !!
 	E< @Ar*   c                    dt        j                  |      d| j                  d}| j                  j	                  t        |             y )Nr  r;   z(?P<val>\w+)r@   r   r  ru   rJ   r   r  s      r(   r  z+MySQLTableDefinitionParser._add_option_wordr  s9    IIi !!
 	E 23r*   c                B   |dk(  s|dk(  r'dt        j                  |      d| j                  d}nJ|dk(  s|dk(  r'dt        j                  |      d| j                  d}ndt        j                  |      d	}| j                  j	                  t        |             y )
Nr   r   z(?<!\S)(?P<directive>r;   z(?P<val>\w+.*)r   r   z(?P<val>\d+)z)(?!\S)r  r  s      r(   r  z5MySQLTableDefinitionParser._add_partition_option_wordy  s    &)7H*H		)$%%E /)Y,-F		)$%%E .G :<99MOEE 23r*   c                    dt        j                  |      d| j                  d|d}| j                  j	                  t        |             y )Nr  r;   z(?P<val>r  r  s      r(   r  z,MySQLTableDefinitionParser._add_option_regex  s<    IIi !!

 	E 23r*   N)r7   r   r8   r   )rK   strr   r   r,   r   )rU   r  r,   rR   )rM   r  r,   zUnion[Tuple[None, str], Tuple[Literal['partition'], str], Tuple[Literal['ck_constraint', 'fk_constraint', 'key'], Dict[str, str]]])rM   r  rL   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+   )rp   r  r,   r-   )rp   r  rm   r  r,   r-   )r.   r/   r0   r1   r)   rP   rV   rH   rF   rE   rG   rD   r   r`   r9   r  r  r  r  r  r3   r*   r(   r5   r5   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*   r5   )COMMENTzDATA DIRECTORYzINDEX DIRECTORYPASSWORD
CONNECTIONc                     y r    r3   rm   rn   s     r(   r   r     s     47r*   c                     y r    r3   r  s     r(   r   r     s     $'r*   c                    t        |       |fS )z1Prepare a 2-tuple of compiled regex and callable.)r   r  s     r(   r   r     s    
 ((r*   c                l    t        j                  | t         j                  t         j                  z        S )z)Compile a string to regex, I and UNICODE.)r@   compileIUNICODE)rm   s    r(   r   r     s"     ::eRTTBJJ.//r*   c                    g }| D ]A  }|dd dk(  s|dd dk(  r|dd j                  |d   dz  |d         }|j                  |       C |S )zStrip reflected values quotesr   r   "r   r   r   )r   rJ   )valuesstrip_valuesas      r(   r   r     sg     L Qq6S=AaFcM!B!q!A$/AA	
 r*   c                f    d| v rt        j                  t        d |       } | j                  dd      S )N\c                    t         | d      S )Nr   )_control_char_map)r  s    r(   <lambda>zcleanup_text.<locals>.<lambda>  s    '!- r*   r   r   )r@   rx   _control_char_regexpr   )raw_texts    r(   r   r     s6    x66 -

 D#&&r*   r$   	
)	z\\z\0z\az\bz\tz\nz\vz\fz\r|c              #  F   K   | ]  }t        j                  |        y wr    )r@   r   )r   ks     r(   r   r     s     5aRYYq\5s   !)rm   r  rn   zCallable[[str], str]r,   z,Tuple[re.Pattern[Any], Callable[[str], str]]r    )rm   r  rn   r-   r,   zTuple[re.Pattern[Any], None])rm   r  rn   zOptional[Callable[[str], str]]r,   z6Tuple[re.Pattern[Any], Optional[Callable[[str], str]]])rm   r  r,   zre.Pattern[Any])r   zSequence[str]r,   z	List[str])r)  r  r,   r  )*
__future__r   r@   typingr   r   r   r   r   r	   r
   r   r   r   
enumeratedr   r   r   r   r   r   rr   r   r   util.typingr   baser   r   engine.interfacesr   r   r5   r  r   r   r   r   r&  r  r   r(  r3   r*   r(   <module>r;     sE   # 	                 !  ""-47 7\	4 \	4~  
77-717 
7
 
 $'''!' 
' ;?))7);)0'   "rzzHH5#455 r*   