
    	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	d@d%            Z"e		 dAdBd(            Z"	 dAdCd+Z"dDd-Z#dEd1Z$dFd3Z%d4d5d6d7d8d9d:d;d<d=	Z& ej'        d>(                    d? e&D                                 Z)dS )G    )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dS )	ReflectedStatez;Stores raw information about a SHOW CREATE TABLE statement.Optional[str]charsetreturnNonec                Z    g | _         i | _        d | _        g | _        g | _        g | _        d S N)columnstable_options
table_namekeysfk_constraintsck_constraints)selfs    q/var/www/html/web-builder-api.evdpl.com/venv/lib/python3.11/site-packages/sqlalchemy/dialects/mysql/reflection.py__init__zReflectedState.__init__)   s5    .0-/)-*,	4646    Nr   r    )__name__
__module____qualname____doc____annotations__r+    r,   r*   r   r   $   s<         EE7 7 7 7 7 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d0d Zd1d!Zd"Zd2d$Zd2d%Zd2d&Zd3d(Zd)S )4MySQLTableDefinitionParserz4Parses the results of a SHOW CREATE TABLE statement.dialectr   preparerr   c                J    || _         || _        |                                  d S r"   )r6   r7   _prep_regexes)r)   r6   r7   s      r*   r+   z#MySQLTableDefinitionParser.__init__5   s*      r,   show_createstrr   r   r   r   c                    t                      }||_        t          j        d|          D ]Q}|                    d| j        j        z             r|                     ||           <|                    d          r|                     ||           h|dk    ro|                    d          r| 	                    ||           d|v r| 
                    ||           |s|                     |          \  }}|t          j        d|z             |dk    r|j                            |           |d	k    r|j                            |           /|d
k    r|j                            |           QS|S )Nz\r?\nz  z) )zCREATE 	PARTITIONzUnknown schema content: %rkeyfk_constraintck_constraint)r   r   resplit
startswithr7   initial_quote_parse_column_parse_table_options_parse_table_name_parse_partition_options_parse_constraintsr   warnr&   appendr'   r(   )r)   r:   r   statelinetype_specs          r*   parsez MySQLTableDefinitionParser.parse<   s      HX{33 	 	Dtdm&AABB ""4////&& ))$6666++ &&tU3333$$--dE::::  "55d;;t=I:TABBBBe^^J%%d++++o--(//5555o--(//5555r,   sqlboolc                P    t          | j                            |                    S r"   )rS   _re_is_viewmatch)r)   rR   s     r*   _check_viewz&MySQLTableDefinitionParser._check_view`   s!    D$**3//000r,   rN   Union[Tuple[None, str], Tuple[Literal['partition'], str], Tuple[Literal['ck_constraint', 'fk_constraint', 'key'], Dict[str, str]]]c                   | j                             |          }|r|                                }|                     |d                   |d<   |d         rY| j                            |d                   }|r7|                                d         r|                                d         |d<   |d         r)| j                            |d                   d         |d<   d|fS | j                            |          }|r|                                }| j                            |d                   |d<   d |                     |d                   D             |d<   d	 |                     |d
                   D             |d
<   d|fS | j                            |          }|r|                                }d|fS | j	                            |          }|rd|fS d|fS )zaParse a KEY or CONSTRAINT line.

        :param line: A line of SHOW CREATE TABLE output
        r#   version_sqlparserr   r?   tablec                    g | ]
}|d          S r   r3   .0cs     r*   
<listcomp>zAMySQLTableDefinitionParser._parse_constraints.<locals>.<listcomp>   s    OOOaQqTOOOr,   localc                    g | ]
}|d          S r^   r3   r_   s     r*   rb   zAMySQLTableDefinitionParser._parse_constraints.<locals>.<listcomp>   s)       !  r,   foreignr@   rA   	partitionN)
_re_keyrV   	groupdict_parse_keyexprs_re_key_version_sqlr7   unformat_identifiers_re_fk_constraint_re_ck_constraint_re_partition)r)   rN   mrP   m2s        r*   rJ   z-MySQLTableDefinitionParser._parse_constraintsc   s
    Lt$$ 	;;==D #224	?CCDOM" >-33D4GHH >",,..2 >%'\\^^H%=DNH~ !%!C!CN" ""X $; "((.. 	);;==D M>>tG}MMDMOO4+?+?W+N+NOOODM "224	?CC  DO #D(( "((.. 	);;==D"D(( $$T** 	%$$ d|r,   rM   r    c                    | j         \  }}|                    |          }|r% ||                    d                    |_        dS dS )zZExtract the table name.

        :param line: The first line of SHOW CREATE TABLE
        nameN)_pr_namerV   groupr%   )r)   rN   rM   regexcleanupro   s         r*   rH   z,MySQLTableDefinitionParser._parse_table_name   sT     wKK 	8&wqwwv77E	8 	8r,   c                   i }|r|dk    r|}| j         D ]\  }}|                    |          }|s|                    d          |                    d          }	}|r ||	          }	|	||                                <   |                    d|          }dD ]}
|                    |
d           |                                D ]\  }}||j        | j        j	        d|<   dS )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searchrt   lowersubpopitemsr$   r6   rr   )r)   rN   rM   optionsrest_of_lineru   rv   ro   rx   valuenopeoptry   s                r*   rG   z/MySQLTableDefinitionParser._parse_table_options   s     
	;DCKKL"&"2 ; ;wLL.. #$77;#7#75	 +#GENNE-2	))*$yy\::K 	$ 	$DKKd#### 	J 	JHCFIE4<+<+<+<cc BCC	J 	Jr,   c                x   i }|d d          }|                     d          s|                     d          r4|dd          }|                     d          |                     d          4| j        D ]:\  }}|                    |          }|r	d|j        vr'|                    d          }|                                }|dk    }	|dk    s|	r|                    dd	          }|                    d
d	          }|	r|                    d          r
|d d         }| j        j	        dk    r+|                    d          rd|v sd|v sd|v r
|d d         }| j        j	        d|d}
|||
<   n=|                    dd          }|                    d          }|r ||          }|||<    |
                                D ]w\  }}d| j        j	        z  }d| j        j	        z  }||k    s||k    r/||j        vr||j        |<   C|j        |         d||j        |<   ^||j        | j        j	        d|<   xd S )N( r   r>   rx   subpartitionrf   z) */rz   ,r=   mariadbMAXVALUEMINVALUEENGINEr|   _definitionsry   z%s_partition_definitionsz%s_subpartition_definitionsz, )rD   r}   r~   patternrt   r   replaceendswithr6   rr   r   r$   )r)   rN   rM   r   new_lineru   rv   ro   rx   is_subpartitiondefsr   r   ry   part_defsubpart_defs                   r*   rI   z3MySQLTableDefinitionParser._parse_partition_options   s    7!!#&& 	$(*=*=c*B*B 	$|H !!#&& 	$(*=*=c*B*B 	$ #.  	  	NE7X&&A 5=88,,I!))I'>9OK''?'#++FB77#++C44" -x'8'8'='= -'}H<$	11h6G6G6L6L1"h..%11#x// $,CRC=.2l.?.?.?K ( &--c377	 +#GENNE%*	" 	N 	NHC1T\5FGH74<;LMKh#"4"4e111/2E',, +C0000E',,
 KN#t|/@/@/@##$FGG	N 	Nr,   c                .   d}| j                             |          }|r|                                }d|d<   n5| j                            |          }|r|                                }d|d<   |st	          j        d|z             dS |d         st	          j        d|z             |d         |d         |d	         }}}	 | j        j        |         }n7# t          $ r* t	          j        d
|d|d           t          j
        }Y nw xY w||dk    rg }	nW|d         dk    r'|d         dk    r| j                            |          }	n$d | j                            |          D             }	i }
t          |t          t           t"          f          r|	r|	                    d          |
d<   dD ]}|                    |d          rd|
|<   dD ]#}|                    |d          r||         |
|<   $t          |t(          t*          f          r-t-          |	          }	t          |t*                    r	d|	v rd|
d<    ||	i |
}i }d|d<   |                    dd          dk    rd|d<   |                    dd          dk    rd|d<   |                    dd          rd|d<   nt          |t          j                  rd|d<   |                    dd          }|dk    rd}|                    dd          }|t1          |          }|                    d          }|5t3          |          }|                    d           }|	|d!k    |d"<   ||d#<   t3          ||||$          }|                    |           |j                            |           dS )%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 %rrr   coltypeargzDid not recognize type 'z' of column ''rz   r   r   c                ,    g | ]}t          |          S r3   int)r`   vs     r*   rb   z<MySQLTableDefinitionParser._parse_column.<locals>.<listcomp>"  s    HHHAQHHHr,   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)rr   typer   r   )
_re_columnrV   rh   _re_column_looser   rK   r6   ischema_namesKeyErrorsqltypesNullType_re_csv_strfindall_re_csv_int
issubclassr   r   r   r   getr   r   _strip_valuesIntegercleanup_textdictupdater#   rL   )r)   rN   rM   rP   ro   rr   rO   argscol_type	type_argstype_kwkwtype_instancecol_kwr   r   r   r   r   col_ds                       r*   rF   z(MySQLTableDefinitionParser._parse_column   s'    O!!$'' 	%;;==DDLL%++D11A %{{}}$V 	I4t;<<<FF| 	NIELMMM L$y/4;Te	)|1%8HH 	) 	) 	)II@EtttL    (HHH		) <42::II!W^^RC(0066IIHH)9)A)A$)G)GHHHI h4 ;<< 	2 2!*q!1!1* 	# 	#BxxE"" #"( 	' 	'BxxE"" '"2hhs,, 	6%i00I(C(( 6R9__15-. )7w77!# "z88Iu%%33!&F:88'//:==!&F: 88J&& 	,&*F?##("233 	,&+F?# ((9d++fG((9d++"7++G((;''G,,,H//I$(1X(=%!)F:M7G
 
 
 	VU#####s   C 1DDr%   r#   -Sequence[Tuple[str, str, str, str, str, str]]c                  
 g }|D ]

fddD             \  }}}}}dg}	|	                     | j                            |                     |	                     |           |s|	                     d           |rd|v rn|                    d          r@|                    d          r+|	                     d           |	                     |           nr|d	k    r+|	                     d           |	                     |           nA|	                     d           |	                     d
|                    dd          z             |r|	                     |           |                     d                    |	                     d                    d| j                            |          z  d                    |          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   | ]}|         V  d S r"   r3   )r`   irows     r*   	<genexpr>zAMySQLTableDefinitionParser._describe_to_create.<locals>.<genexpr>v  s8       : :A: : : : : :r,   )r   r            r   r   r{   	timestampCDEFAULTr   z'%s'r   ''rz   zCREATE TABLE %s (
z,
z
) )rL   r7   quote_identifierrD   r   join)r)   r%   r#   bufferrr   r   r   r   extrarN   r   s             @r*   _describe_to_createz.MySQLTableDefinitionParser._describe_to_created  s      	* 	*C: : : : /: : :6T8Xw 5DKK66t<<===KK!!! (J''' E#w..((55 
E':L:L; ; 
E KK	***KK((((&&KK	***KK((((KK	***KKd)C)C CDDD #E"""MM#((4..))))ww *m44Z@@A 

6""	
 	
 		
r,   identifiers$List[Tuple[str, Optional[int], str]]c                J    d | j                             |          D             S )z8Unpack '"col"(2),"col" ASC'-ish strings into components.c                B    g | ]\  }}}||rt          |          nd |fS r"   r   )r`   colnamelength	modifierss       r*   rb   z>MySQLTableDefinitionParser._parse_keyexprs.<locals>.<listcomp>  sD     
 
 
* V5c&kkkyA
 
 
r,   )_re_keyexprsr   )r)   r   s     r*   ri   z*MySQLTableDefinitionParser._parse_keyexprs  s9    

 
.2.?.G.G/ /
 
 
 	
r,   c                @   g | _         | j        j        }t          t	          dd | j        j        || j                            |          fD                                 }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          | _        |                                }d|d<   t          d|z            | _        t          d|z            | _        t          d          | _        t.          D ]}|                     |           dD ]}|                     |           dD ]}|                     |           |                     dd           |                     dd           |                     dd           dS )z Pre-compile regular expressions.)iqfqesc_fqc                6    g | ]}t          j        |          S r3   rB   escape)r`   ss     r*   rb   z<MySQLTableDefinitionParser._prep_regexes.<locals>.<listcomp>  s0        IaLL  r,   zM^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)r}   r7   final_quoter   ziprE   _escape_identifier_pr_compile_unescape_identifierrs   _re_compilerU   r   r   r   r   r   rg   rj   copyrl   rm   rn   _options_of_type_string_add_option_string_add_option_word_add_partition_option_word_add_option_regex)r)   _finalquotesr   options        r*   r9   z(MySQLTableDefinitionParser._prep_regexes  s   
  	 *&  388@@  
 

 
 $DFLMM.
 
 ''HII (9;AB
 
 ''GHH 'v.. &. /
 
8 !,- 06	6!
 !
 #
 

 
  $/>$
 $
  [[]]D4!,
5 8:
:"
 "
$ "-% (*	*"
 "
 ))IJJ
 . 	, 	,F##F++++
 	* 	*F$ !!&))))
 	4 	4F ++F3333w666|-@AAAC	
 	
 	
 	
 	
r,   z(?:\s*(?:=\s*)|\s+)rx   c                    dt          j        |          d| j        d}| j                            t          |t                               d S )N(?P<directive>r=   z'(?P<val>(?:[^']|'')*?)'(?!'))rB   r   _optional_equalsr}   rL   r  r   r)   rx   ru   s      r*   r  z-MySQLTableDefinitionParser._add_option_stringk  sS     Ii    !!!
 	E< @ @AAAAAr,   c                    dt          j        |          d| j        d}| j                            t          |                     d S )Nr  r=   z(?P<val>\w+)rB   r   r  r}   rL   r  r  s      r*   r  z+MySQLTableDefinitionParser._add_option_wordr  sQ     Ii    !!!
 	E 2 233333r,   c                8   |dk    s|dk    r!dt          j        |          d| j        d}nE|dk    s|dk    r!dt          j        |          d| j        d}ndt          j        |          d	}| j                            t          |                     d S )
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*H	)$$$$%%%EE /))Y,-F-F	)$$$$%%%EE .G :<99M9M9M9MOEE 2 233333r,   ru   c                    dt          j        |          d| j        d|d}| j                            t          |                     d S )Nr  r=   z(?P<val>r  r  s      r*   r  z,MySQLTableDefinitionParser._add_option_regex  sX     Ii    !!!EE

 	E 2 233333r,   N)r6   r   r7   r   )r:   r;   r   r   r   r   )rR   r;   r   rS   )rN   r;   r   rX   )rN   r;   rM   r   r   r    )r%   r;   r#   r   r   r;   )r   r;   r   r   r-   )rx   r;   r   r    )rx   r;   ru   r;   r   r    )r.   r/   r0   r1   r+   rQ   rW   rJ   rH   rG   rI   rF   r   ri   r9   r  r  r  r  r  r3   r,   r*   r5   r5   2   sh       >>   " " " "H1 1 1 16 6 6 6p	8 	8 	8 	8J J J J48N 8N 8N 8Nth$ h$ h$ h$T7
 7
 7
 7
r

 

 

 

~
 ~
 ~
 ~
@ .B B B B4 4 4 44 4 4 44 4 4 4 4 4r,   r5   )COMMENTzDATA DIRECTORYzINDEX DIRECTORYPASSWORD
CONNECTIONru   r;   rv   Callable[[str], str]r   ,Tuple[re.Pattern[Any], Callable[[str], str]]c                    d S r"   r3   ru   rv   s     r*   r  r    s	     473r,   r    Tuple[re.Pattern[Any], None]c                    d S r"   r3   r&  s     r*   r  r    s	     $'3r,   Optional[Callable[[str], str]]6Tuple[re.Pattern[Any], Optional[Callable[[str], str]]]c                $    t          |           |fS )z1Prepare a 2-tuple of compiled regex and callable.)r  r&  s     r*   r  r    s    
 ((r,   re.Pattern[Any]c                Z    t          j        | t           j        t           j        z            S )z)Compile a string to regex, I and UNICODE.)rB   compileIUNICODE)ru   s    r*   r  r    s     :eRTBJ.///r,   valuesSequence[str]	List[str]c                    g }| D ]`}|dd         dk    s|dd         dk    r-|dd                              |d         dz  |d                   }|                    |           a|S )zStrip reflected values quotesr   r   "r   r   r   )r   rL   )r1  strip_valuesas      r*   r   r     s{     L  QqS6S==AacFcMM!B$!q!A$//AAr,   raw_textc                n    d| v rt          j        t          d |           } |                     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   )rB   r   _control_char_regexpr   )r8  s    r*   r   r     sB    x6 --
 

 D#&&&r,   r:   	
)	z\\z\0z\az\bz\tz\nz\vz\fz\r|c              #  >   K   | ]}t          j        |          V  d S r"   r   )r`   ks     r*   r   r     s*      55aRYq\\555555r,   )ru   r;   rv   r#  r   r$  r"   )ru   r;   rv   r    r   r'  )ru   r;   rv   r)  r   r*  )ru   r;   r   r,  )r1  r2  r   r3  )r8  r;   r   r;   )*
__future__r   rB   typingr   r   r   r   r   r	   r
   r   r   r   
enumeratedr   r   r   r   r   r   rz   r   r   util.typingr   baser   r   engine.interfacesr   r   r5   r  r  r  r   r   r<  r.  r   r>  r3   r,   r*   <module>rP     s   # " " " " " 				                                                                                                 ! ! ! ! ! !       " " " " " " 5""""""------4444447 7 7 7 7 7 7 7\	4 \	4 \	4 \	4 \	4 \	4 \	4 \	4~  
7 7 7 
7
 
 $' ' ' ' 
' ;?) ) ) ) )0 0 0 0   ' ' ' '    "rzHH55#455555    r,   