
    ci.                    f   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 ddlmZ er$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ee'eee   f   Z( G d de      Z) G d  d!e)      Z* G d" d#e)      Z+ G d$ d%e+      Z, G d& d'e+      Z- G d( d)e+      Z. G d* d+e+      Z/ G d, d-e+      Z0 G d. d/e+      Z1 G d0 d1e)      Z2 G d2 d3e)      Z3 G d4 d5e+      Z4 ee*      	 	 	 	 	 	 dHd6       Z5 ee2      dId7       Z6 ee3      dJd8       Z7 ee,      	 	 	 	 	 	 dKd9       Z8 ee-      dLd:       Z9 ee.      dMd;       Z: ee/      	 	 	 	 	 	 dNd<       Z; ee0      	 	 	 	 dOd=       Z< ee1      	 	 	 	 dPd>       Z=	 	 	 	 	 	 dQd?Z>	 	 	 	 	 	 	 	 dRd@Z?	 	 	 	 	 	 dSdAZ@	 	 	 	 	 	 dTdBZAdUdCZB	 	 	 	 	 	 	 	 dVdDZC	 dW	 	 	 	 	 	 	 dXdEZDdYdFZE	 	 	 dZ	 	 	 	 	 	 	 	 	 	 	 d[dGZFy)\    )annotationsN)Any)Optional)TYPE_CHECKING)Union)exc)Integer)types)compiles)Column)
DDLElement)ColumnElement)quoted_name)
TextClause)FetchedValue   )_columns_for_constraint)_find_columns)_fk_spec)_is_type_bound)_table_for_constraint)Computed)Identity)Compiled)DDLCompiler)
TypeEngine   )DefaultImplc                  &    e Zd ZdZ	 d	 	 	 	 	 ddZy)
AlterTablezRepresent an ALTER TABLE statement.

    Only the string name and optional schema name of the table
    is required, not a full Table object.

    Nc                     || _         || _        y N)
table_nameschema)selfr#   r$   s      7/tmp/pip-target-z3e9_cxr/lib/python/alembic/ddl/base.py__init__zAlterTable.__init__2   s    
 %    r"   )r#   strr$   !Optional[Union[quoted_name, str]]returnNone)__name__
__module____qualname____doc__r'    r(   r&   r    r    *   s-     59 2 
	r(   r    c                  2     e Zd Z	 d	 	 	 	 	 	 	 d fdZ xZS )RenameTablec                6    t         |   ||       || _        y N)r$   )superr'   new_table_name)r%   old_table_namer7   r$   	__class__s       r&   r'   zRenameTable.__init__<   s     	7,r(   r"   )r8   r)   r7   Union[quoted_name, str]r$   r*   r+   r,   r-   r.   r/   r'   __classcell__r9   s   @r&   r3   r3   ;   s8    
 59	-- 0- 2	-
 
- -r(   r3   c                  J     e Zd Z	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d fdZ xZS )AlterColumnc                    t         |   ||       || _        |t        j                  |      nd | _        || _        || _        || _        y r5   )	r6   r'   column_namesqltypesto_instanceexisting_typeexisting_nullableexisting_server_defaultexisting_comment)	r%   namerA   r$   rD   rE   rF   rG   r9   s	           r&   r'   zAlterColumn.__init__G   s\     	f-& (   / 	
 "3'>$ 0r(   )NNNNN)rH   r)   rA   r)   r$   Optional[str]rD   zOptional[TypeEngine]rE   Optional[bool]rF   Optional[_ServerDefaultType]rG   rI   r+   r,   r;   r=   s   @r&   r?   r?   F   sl    
 !%.2,0@D*.11 1 	1
 ,1 *1 ">1 (1 
1 1r(   r?   c                  0     e Zd Z	 	 	 	 	 	 	 	 d fdZ xZS )ColumnNullablec                6    t        |   ||fi | || _        y r"   )r6   r'   nullable)r%   rH   rA   rO   kwr9   s        r&   r'   zColumnNullable.__init__^   s      	{1b1 r(   )rH   r)   rA   r)   rO   boolr+   r,   r;   r=   s   @r&   rM   rM   ]   s-    !!&)!59!	! !r(   rM   c                  0     e Zd Z	 	 	 	 	 	 	 	 d fdZ xZS )
ColumnTypec                \    t        |   ||fi | t        j                  |      | _        y r"   )r6   r'   rB   rC   type_)r%   rH   rA   rU   rP   r9   s        r&   r'   zColumnType.__init__f   s+     	{1b1))%0
r(   )rH   r)   rA   r)   rU   r   r+   r,   r;   r=   s   @r&   rS   rS   e   s-    11&)12<1	1 1r(   rS   c                  0     e Zd Z	 	 	 	 	 	 	 	 d fdZ xZS )
ColumnNamec                6    t        |   ||fi | || _        y r"   )r6   r'   newname)r%   rH   rA   rY   rP   r9   s        r&   r'   zColumnName.__init__n         	{1b1r(   )rH   r)   rA   r)   rY   r)   r+   r,   r;   r=   s   @r&   rW   rW   m   s-    &)47	 r(   rW   c                  0     e Zd Z	 	 	 	 	 	 	 	 d fdZ xZS )ColumnDefaultc                6    t        |   ||fi | || _        y r"   r6   r'   defaultr%   rH   rA   r_   rP   r9   s        r&   r'   zColumnDefault.__init__v   s      	{1b1r(   )rH   r)   rA   r)   r_   rK   r+   r,   r;   r=   s   @r&   r\   r\   u   s3      .	 
 r(   r\   c                  0     e Zd Z	 	 	 	 	 	 	 	 d fdZ xZS )ComputedColumnDefaultc                6    t        |   ||fi | || _        y r"   r^   r`   s        r&   r'   zComputedColumnDefault.__init__   rZ   r(   )rH   r)   rA   r)   r_   zOptional[Computed]r+   r,   r;   r=   s   @r&   rb   rb      s-    &)4F	 r(   rb   c                  4     e Zd Z	 	 	 	 	 	 	 	 	 	 d fdZ xZS )IdentityColumnDefaultc                D    t        |   ||fi | || _        || _        y r"   )r6   r'   r_   impl)r%   rH   rA   r_   rg   rP   r9   s         r&   r'   zIdentityColumnDefault.__init__   s'     	{1b1	r(   )
rH   r)   rA   r)   r_   zOptional[Identity]rg   r   r+   r,   r;   r=   s   @r&   re   re      s=    

 
 $	

 
 

 
r(   re   c                  D     e Zd Z	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 d fdZ xZS )	AddColumnc                `    t         |   ||       || _        || _        || _        || _        y r5   )r6   r'   columnif_not_existsinline_referencesinline_primary_key)r%   rH   rk   r$   rl   rm   rn   r9   s          r&   r'   zAddColumn.__init__   s6     	f-*!2"4r(   )NNNN)rH   r)   rk   Column[Any]r$   r*   rl   rJ   rm   rJ   rn   rJ   r+   r,   r;   r=   s   @r&   ri   ri      s_    
 59(,,0-155 5 2	5
 &5 *5 +5 
5 5r(   ri   c                  8     e Zd Z	 	 d	 	 	 	 	 	 	 	 	 d fdZ xZS )
DropColumnc                D    t         |   ||       || _        || _        y r5   )r6   r'   rk   	if_exists)r%   rH   rk   r$   rs   r9   s        r&   r'   zDropColumn.__init__   s%     	f-"r(   )NN)
rH   r)   rk   ro   r$   rI   rs   rJ   r+   r,   r;   r=   s   @r&   rq   rq      sE    
 !%$(	#	# 	# 		#
 "	# 
	# 	#r(   rq   c                  0     e Zd Z	 	 	 	 	 	 	 	 d fdZ xZS )ColumnCommentc                6    t        |   ||fi | || _        y r"   )r6   r'   comment)r%   rH   rA   rw   rP   r9   s        r&   r'   zColumnComment.__init__   rZ   r(   )rH   r)   rA   r)   rw   rI   r+   r,   r;   r=   s   @r&   ru   ru      s-    &)4A	 r(   ru   c                    t        || j                  | j                        dt        || j                  | j                        S )Nz RENAME TO )alter_tabler#   r$   format_table_namer7   elementcompilerrP   s      r&   visit_rename_tabler~      s:    
 	Hg00'..A(G$:$:GNNK r(   c           	         t        || j                  | j                        dt        || j                  f| j
                  | j                  | j                  d|S )N )rl   rm   rn   )ry   r#   r$   
add_columnrk   rl   rm   rn   r{   s      r&   visit_add_columnr      sb     	Hg00'..ANN	
 "//%77&99	
 	

 
r(   c                    t        || j                  | j                        dt        || j                  j
                  fd| j                  i|S )Nr   rs   )ry   r#   r$   drop_columnrk   rH   rs   r{   s      r&   visit_drop_columnr      sQ     	Hg00'..Agnn))	
5<5F5F	
JL	
 r(   c                    t        || j                  | j                        dt        || j                        d| j
                  rdS dS )Nr   zDROP NOT NULLzSET NOT NULL)ry   r#   r$   alter_columnrA   rO   r{   s      r&   visit_column_nullabler      sU    
 	Hg00'..AXw223"++?  2@? r(   c           	         t        || j                  | j                        dt        || j                        ddt        || j                        z  S )Nr   zTYPE %s)ry   r#   r$   r   rA   format_typerU   r{   s      r&   visit_column_typer      sG     	Hg00'..AXw223K'--88 r(   c                    t        || j                  | j                        dt        || j                        dt        || j
                        S )Nz RENAME z TO )ry   r#   r$   format_column_namerA   rY   r{   s      r&   visit_column_namer      sB     	Hg00'..A8W%8%898W__5 r(   c           	         t        || j                  | j                        dt        || j                        d| j
                  dt        || j
                        z  S dS )Nr   zSET DEFAULT %szDROP DEFAULT)ry   r#   r$   r   rA   r_   format_server_defaultr{   s      r&   visit_column_defaultr      so    
 	Hg00'..AXw223 * 4XwOO  	    	 r(   c                ,    t        j                  d      )NztAdding or removing a "computed" construct, e.g. GENERATED ALWAYS AS, to or from an existing column is not supported.r   CompileErrorr{   s      r&   visit_computed_columnr     s     

	E r(   c                ,    t        j                  d      )NzAdding, removing or modifying an "identity" construct, e.g. GENERATED AS IDENTITY, to or from an existing column is not supported in this dialect.r   r{   s      r&   visit_identity_columnr     s     

	3 r(   c                    t        | t              r ||       S dj                  | j                  d      D cg c]
  } ||       c}      }|S c c}w )z#quote the elements of a dotted name.)
isinstancer   joinsplit)rH   quotexresults       r&   quote_dottedr   !  sG    
 $$T{XXC9AuQx9:FM :s   Ac                    t        j                  | j                  j                        }|rt	        ||      dz    ||      z   S  ||      S )Nr   )	functoolspartialpreparerr   r   )r}   rH   r$   r   s       r&   rz   rz   ,  sH    
 h//556EFE*S05;>>T{r(   c                8    | j                   j                  |      S r"   )r   r   r}   rH   s     r&   r   r   8  s     ""4((r(   c                P    | j                  t        dt        |            }|J |S )Nr   )server_default)get_column_default_stringr   r	   )r}   r_   default_strs      r&   r   r   >  s4     44sGG4K """r(   c                L    | j                   j                  j                  |      S r"   )dialecttype_compilerprocess)r}   rU   s     r&   r   r   K  s    ))11%88r(   c                "    dt        | ||      z  S )NzALTER TABLE %s)rz   )r}   rH   r$   s      r&   ry   ry   O  s    
 /$GGGr(   c                ,    d|rdndt        | |      S )NzDROP COLUMN z
IF EXISTS  r   )r}   rH   rs   rP   s       r&   r   r   W  s"     "r)8T* r(   c                     dt        | |      z  S )NzALTER COLUMN %sr   r   s     r&   r   r   `  s    1(DAAAr(   c                    d|rdnd  j                   |fi |}|r|j                  r|dz  }|r't        |j                        dk(  rt	        |j                        d   x}r|j
                  t        |j
                  j                        dk(  r|j                  }|j                  }	|	j                  rN j                  j                  |	j                        d j                  j                  |	j                        }
n% j                  j                  |	j                        }
|d|
d	 j                  j                  |j                        d
z  }dj                   fd|j                  D              }|r|d|z   z  }|S )NzADD COLUMN zIF NOT EXISTS r   z PRIMARY KEYr   r   r   z REFERENCES z ()r   c              3  @   K   | ]  }j                  |        y wr"   )r   ).0
constraintr}   s     r&   	<genexpr>zadd_column.<locals>.<genexpr>  s!      )3$s   )get_column_specificationprimary_keylenforeign_keyslistr   columnsrk   tabler$   r   quote_schemar   rH   r   constraints)r}   rk   rl   rm   rn   rP   textfkref_col	ref_tabler#   consts   `           r&   r   r   d  sn    *r1)))&7B7D
 f00 	##$)++,Q//R/MM%%%&!+))MM	 !!..y/?/?@!!''	7J
 "**00@J##GLL1
 	

 HH 7=7I7I E eKr(   )r|   r3   r}   r   r+   r)   )r|   ri   r}   r   r+   r)   )r|   rq   r}   r   r+   r)   )r|   rM   r}   r   r+   r)   )r|   rS   r}   r   r+   r)   )r|   rW   r}   r   r+   r)   )r|   r\   r}   r   r+   r)   )r|   rb   r}   r   )r|   re   r}   r   )rH   r:   r   zfunctools.partialr+   r:   )r}   r   rH   r:   r$   r*   r+   r:   )r}   r   rH   r*   r+   r:   )r}   r   r_   rK   r+   r)   )r}   r   rU   r   r+   r)   )r}   r   rH   r)   r$   rI   r+   r)   r"   )r}   r   rH   r)   rs   rJ   r+   r)   )r}   r   rH   r)   r+   r)   )NNN)r}   r   rk   ro   rl   rJ   rm   rJ   rn   rJ   r+   r)   )G
__future__r   r   typingr   r   r   r   
sqlalchemyr   r	   r
   rB   sqlalchemy.ext.compilerr   sqlalchemy.schemar   r   sqlalchemy.sql.elementsr   r   r   sqlalchemy.sql.schemar   util.sqla_compatr   r   r   r   r   r   r   sqlalchemy.sql.compilerr   r   sqlalchemy.sql.type_apir   rg   r   r)   _ServerDefaultTyper    r3   r?   rM   rS   rW   r\   rb   re   ri   rq   ru   r~   r   r   r   r   r   r   r   r   r   rz   r   r   r   ry   r   r   r   r1   r(   r&   <module>r      s~   #         ( , $ ( 1 / . . 6 , ' - 4##032!<j-:LLM  "-* -1* 1.![ !1 1 	K 	K K 5
 5"
# 
#K  
+$/  
)  
*  
.'2  
*  
*  
-&1  

 ".9 ! 

 ".9 !
!*;		
!	 .	 		))!B))

)
 	
9HH
H H 		H CG!$1?B %)(,)-222 "2 &	2
 '2 	2r(   