
    $j(*                    j   d dl mZ d dl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 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  ej         e!          Z"d8dZ#d9dZ$d:d)Z%d;d+Z&	 d<d=d0Z'd>d1Z(d>d2Z)d?d4Z*d@d7Z+dS )A    )annotationsN)NoneType)Any)cast)Optional)Sequence)TYPE_CHECKING)Union)schema)DefaultClause   )util)DispatchPriority)PriorityDispatchResult)sqla_compat)quoted_name)Column)AutogenContext)AlterColumnOp)Pluginmetadata_defaultOptional[Any]autogen_contextr   returnOptional[str]c                   t          | t          j                  rRt          | j        t                    r| j        } n0t	          | j                            |j        ddi                    } t          | t                    r| S d S )Nliteral_bindsTdialectcompile_kwargs)
isinstance	sa_schemar   argstrcompiler   )r   r   s     t/home/rurouni/.hermes/hermes-agent/venv/lib/python3.11/site-packages/alembic/autogenerate/compare/server_defaults.py"_render_server_default_for_comparer'       s     "I$;<< 	&*C00 	/3" $,,+3$3T#: -      "C(( t    sqltextr$   c                R    t          j        dd|                                           S )zwe want to warn if a computed sql expression has changed.  however
    we don't want false positives and the warning is not that critical.
    so filter out most forms of variability from the SQL text.

    z[ \(\)'\"`\[\]\t\r\n] )resublower)r)   s    r&   _normalize_computed_defaultr/   3   s%     6*B88>>@@@r(   alter_column_opr   r   tnamecnameconn_colColumn[Any]metadata_colr   c                   |j         }|j         }||t          j        S t          j        |          r0t          j        |          st          ||           t          j        S t          j        |          st          j        S t          t          t          j
        |j                   j                            | j        ddi                    }	t          |	          }	t          |j         t          j
                  rEt          |j         j                            | j        ddi                    }
t          |
          }
nd}
|	|
k    rt          ||           t          j        S )Nr   Tr   r+   )server_defaultr   CONTINUEr   _server_default_is_computed_warn_computed_not_supportedSTOPr$   r   r"   Computedr)   r%   r   r/   r!   )r   r0   r   r1   r2   r3   r5   r   conn_col_defaultrendered_metadata_defaultrendered_conn_defaults              r&   _compare_computed_defaultr@   =   s    $2.$4$<%...  +56FGG+ 	%UE222%**23CDD /%.. #Y!<==EMM#++T2 	N 	
 	
! ! !<!! ! ()9+=>> # ##+33'/ /6 4  !
 !
 !<!!
 !
 !# $999$UE222!&&r(   Nonec                <    t          j        d| d|d           d S )NzComputed default on .z cannot be modified)r   warn)r1   r2   s     r&   r:   r:   w   s'    IIuuuMNNNNNr(   orderon_nulloracle_orderoracle_on_nullUnion[quoted_name, str]skipSequence[str]c                .   |j         }|j         }	|	|t          j        ||	          st          j        S t          |j         t          j        t          j        t          f          sJ t          |j         t          j        t          j        t          f          sJ | j
        j        }
|
                    |j         |j                   \  }}}|r?||_        |r6t                              d||t!          |                     t          j        S t          j        S )NzIDetected server default on column '%s.%s': identity options attributes %s)r7   r   _server_default_is_identityr   r8   r!   r"   Identityr   r   migration_contextimpl_compare_identity_defaultmodify_server_defaultloginfosortedr;   )r   r0   r   r1   r2   r3   r5   rK   r   r=   rQ   diff_is_alters                 r&   rR   rR   {   s:     $2. $6.
 
 %
 &..#		Y/:     		Y/:    
 ,1D66#X%< D!X  /0@- 		/HH1t   *..!**r(   c                   |j         }|j         }||t          j        S ||_        | j        }	|	j        du rt          j        S t          |	j                  st          j        S t          ||           }
|rt          t          |          j        j        nd }|	                    |	||||j         |
          }|r5||_        t                              d|	j        ||           t          j        S |du rt          j        S t          j        S )NFzBUser defined function %s detected server default on column '%s.%s')r7   r   r8   existing_server_defaultrP   _user_compare_server_defaultr;   callabler'   r   r   r#   textrS   rT   rU   r   r0   r   r1   r2   r3   r5   r   r=   rP   r>   r?   is_diffs                r&   r\   r\      s:    $2.$4$<%...>O+'95>>%**%BCC /%.. B/! ! 1AJS"##',,d   <<#! G  +0@-/:	
 	
 	
 &**	E		 &**!**r(   c                   |j         }|j         }||t          j        S ||_        t	          |t
          t          f          rt	          |t
          t          f          st          j        S | j        }	t          ||           }
|rt          t          |          j        j        nd}|	j                            |||
|          }|r5||_        t                               d|	j        ||           t          j        S t          j        S )zuse dialect.impl.compare_server_default.

    This would in theory not be needed.  however we dont know if any
    third party libraries haven't made their own alembic dialect and
    implemented this method.

    Nz9Dialect impl %s detected server default on column '%s.%s')r7   r   r8   r[   r!   r   r   rP   r'   r   r   r#   r^   rQ   compare_server_defaultrS   rT   rU   r;   r_   s                r&   $_dialect_impl_compare_server_defaultrc      s)     $2.$4$<%..
 /?O+=(3  /(=(*CDD/ &..'9 B/! ! 1AJS"##',,d   $;;!	 G  +0@-G"		
 	
 	
 &**!**r(   r   c                    |j         j        |u rd|j        d<   n'|j        du rd|j        d<   n|j        du r
d|j        d<   t          j        S )NTautoincrementF)table_autoincrement_columnkwre   r   r8   )r   r0   r   r1   r2   r3   r5   s          r&   _setup_autoincrementri   (  sg     /<??.2?++		#t	+	+.2?++		#u	,	,.3?+!**r(   pluginr   c                N   |                      t          ddt          j                   |                      t          dd           |                      t
          dd           |                      t          dd           |                      t          ddt          j                   d S )Ncolumnr7   )priority)	add_autogenerate_comparatorr\   r   FIRSTr@   rR   ri   rc   LAST)rj   s    r&   setuprq   ;  s    
&&$!'	 '    &&!   &&!   &&  
 &&,!&	 '     r(   )r   r   r   r   r   r   )r)   r$   r   r$   )r   r   r0   r   r   r   r1   r$   r2   r$   r3   r4   r5   r4   r   r   )r1   r$   r2   r$   r   rA   )rE   )r   r   r0   r   r   r   r1   rJ   r2   rJ   r3   r4   r5   r4   rK   rL   r   r   )r   r   r0   r   r   r   r1   rJ   r2   rJ   r3   r4   r5   r4   r   r   )r   r   r0   r   r   r   r1   rJ   r2   r   r3   r4   r5   r4   r   r   )rj   r   r   rA   ),
__future__r   loggingr,   typesr   typingr   r   r   r   r	   r
   
sqlalchemyr   r"   sqlalchemy.sql.schemar   r+   r   r   r   r   sqlalchemy.sql.elementsr   r   autogenerate.apir   operations.opsr   runtime.pluginsr   	getLogger__name__rT   r'   r/   r@   r:   rR   r\   rc   ri   rq    r(   r&   <module>r      s[   " " " " " "  				                                                 * * * * * * / / / / / /       $ $ $ $ $ $ * * * * * *       *333333,,,,,,222222//////))))))g!!   &A A A A7' 7' 7' 7'tO O O O6+ 6+ 6+ 6+ 6+r7+ 7+ 7+ 7+t7+ 7+ 7+ 7+t+ + + +&     r(   