
    Pqh·              	         U d dl mZ d dl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 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rZd 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#l0m1Z1 d d$l2m3Z3 d d%l4m5Z5 d d&l4m6Z6 d d'l4m7Z7 d d(l4m8Z8  ejr                  e:      Z;	 	 	 	 	 	 dOd)Z< e jz                  d*+      Z>	 	 	 	 	 	 dPd,Z?e>j                  d-      	 	 	 	 	 	 	 	 dQd.       ZA	 	 	 	 	 	 	 	 	 	 	 	 dRd/ZB e j                  ej                  ej                  ej                  ej                  ej                  ej                  d0      ZHd1eId2<   	 	 	 	 	 	 	 	 dSd3ZJ	 	 	 	 	 	 	 	 dTd4ZK	 	 	 	 	 	 dUd5ZLej                  	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dVd6       ZN G d7 d8      ZO G d9 d:eO      ZP G d; d<eO      ZQ G d= d>eO      ZRe>j                  d?      	 	 	 	 	 	 	 	 	 	 	 	 	 	 dWd@       ZSdA ZTe>j                  dB      	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dXdC       ZUe>j                  dB      	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dYdD       ZVe>j                  dB      	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dXdE       ZW	 	 	 	 	 	 dZdFZXd[dGZY	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d\dHZZd]dIZ[dJ Z\e>j                  dB      	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d^dK       Z]e>j                  dB      	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d_dL       Z^e>j                  d?      	 	 	 	 	 	 	 	 	 	 	 	 	 	 d`dM       Z_e>j                  d?      	 	 	 	 	 	 	 	 	 	 	 	 	 	 d`dN       Z`y)a    )annotationsN)Any)cast)Dict)Iterator)List)Mapping)Optional)Set)Tuple)TYPE_CHECKING)Union)event)inspectschema)text)types)
expression)
OrderedSet)_fk_spec   )util)ops)sqla_compat)Literal)	Inspector)quoted_name)
TextClause)Column)ForeignKeyConstraint)Index)Table)UniqueConstraint)AutogenContext)DefaultImpl)AlterColumnOp)MigrationScript)ModifyTableOps)
UpgradeOpsc                z    |j                   d   }|j                  d   }t        | |       |j                  |       y )N)upgrade_ops_listdowngrade_ops_list_produce_net_changesreverse_into)autogen_contextmigration_scriptupgrade_opsdowngrade_opss       ]/srv/www/ollama/chat-ollama/venv/lib/python3.12/site-packages/alembic/autogenerate/compare.py_populate_migration_scriptr6   5   s<     #33B7K$77;M+6]+    T)uselistc                   | j                   }|J | j                  j                  dd      }t        |      }|j                  j
                  }|rMt        |j                               }|j                  d       |j                  |       |j                  d        nd h}|D ch c]  }| j                  |di       s| }}| j                  J t        j                  d| j                  j                        | ||       y c c}w )Ninclude_schemasFinformation_schemar   )
connectionoptsgetr   dialectdefault_schema_namesetget_schema_namesdiscardaddrun_name_filterscomparatorsdispatchname)r1   r3   r<   r:   	inspectordefault_schemaschemasss           r5   r/   r/   B   s     !++J!!!%**../@%HO":.I'';;Ni0023,-'D& o>>q(BOG  ""...?#:#:#?#?@gs   $D=Dr   c                   
  j                   }t               } j                  j                  } j                  j                  }|D ]c  
t        |j                  
            }
|k(  r&|j                   j                  j                  g      }|j                   
fd|D               e t         j                  D cg c]  }|j                  |j                  f c}      j                  ||fg      }	t        ||	||        y c c}w )Nr   c              3  P   K   | ]  }j                  |d di      r|f  yw)tableschema_nameN)rE   ).0tnamer1   rP   s     r5   	<genexpr>z&_autogen_for_tables.<locals>.<genexpr>w   s8       
//w < %  
s   #&)rI   rA   migration_contextversion_table_schemaversion_tableget_table_names
differenceupdater   sorted_tablesr   rH   _compare_tables)r1   r3   rK   rI   conn_table_namesrU   rV   tablesrO   metadata_table_namesrP   s   `         @r5   _autogen_for_tablesr_   a   s     ))I7:u 	))>>  $55CCM 
Y..k.BC..&& 22@@AF 	  
 
 	

 &1@1N1NO%,,

	#Oj'789   	Ps    Dc                h	   |j                   j                  j                  }t        |D cg c]  \  }}||k7  r|nd |f c}}      }t	        ||      D 	ci c],  \  }	\  }}|	|j
                  t        j                  ||         . }
}}	}|}|j                  |       D ]  \  }}|r|d|n|}|
||f   }|j                  ||ddd       s.|j                  j                  t        j                  j                  |             t        j                  d|       t        j                   |g |      }t#        j%                  d      ||||d |       |j'                         r|j                  j                  |        t        j(                         }| j                  |      D ]Z  \  }}t        j                  ||      }||j*                  v }t        j,                  |||      }|sPt/        j0                  |d|j2                  j4                  j7                  |             t9        j:                  ||       |j                  ||ddd       st        j                   |g |      }t#        j%                  d      |||||d        |j'                         s|j                  j                  |       |j                  j                  t        j<                  j                  |             t        j                  d|       ] | j?                  |      }t        j(                         }i }|D ]  \  }}t        j                  ||      }||j*                  v }t        j,                  |||      }|sPt/        j0                  |d|j2                  j4                  j7                  |             t9        j:                  ||       ||||f<    tA        |d	 
      D ]  \  }}|xs d }|r|d|n|}|
||f   }|j*                  |   }|j                  ||dd|      sCt        j                   |g |      }tC        |||||||      5  t#        j%                  d      ||||||       d d d        |j'                         r|j                  j                  |        y c c}}w c c}}}	w # 1 sw Y   ExY w)N.rO   FzDetected added table %rr   column_reflectTzDetected removed table %rc                    | d   xs d| d   fS )Nr        )xs    r5   <lambda>z!_compare_tables.<locals>.<lambda>   s    1Q4:2qt:L r7   )key)"bindr?   r@   r   ziptable_key_to_table	sa_schema_get_table_keyrX   run_object_filtersr   appendCreateTableOp
from_tableloginfor)   rF   rG   is_emptyMetaDatar]   r#   r   listenrT   impl_compat_autogen_column_reflectr   _reflect_tableDropTableOpintersectionsorted_compare_columns)r\   r^   rI   r3   r1   rJ   r   rR   #metadata_table_names_no_dflt_schemano_dflt_schematname_to_tablerL   rH   metadata_tablemodify_table_opsremoval_metadataexiststexisting_tablesexisting_metadataconn_column_info
conn_tables                         r5   r[   r[      s    ^^++??N +5 "6	
 /VT5A	
+' 03/1E0
	  ,NOVU 	::$$UF3
 	
N  ?(334DE 95'(!U#e'E
3--E7E4
 OO""!!,,^< HH.5"11%AF  )  $,,.&&'78+9. !))+$//0DE 85''q1)000OOE#3A>LL 1166.. &&y!4--atL"11%AF  )!11eQ $,,.&&'78OO""3??#=#=a#@AHH0$7588 '334HIO!**,# )5''q1*111OOE#4Q?LL 1166..y9 &&y!4'(!U$)  ?0LM 95I'(!U#e'E
3&--d3
--E7E:
  #11%AF!   $$W-#$"$ $,,.&&'78;9w	
x s   R
1R! R((R1	)ascdescnulls_first
nulls_last
nullsfirst	nullslastzMapping[str, Any]_IndexColumnSortingOpsc                   g }|j                  d      }t        |d         D ]j  \  }}|d|v sJ |d   |   }t        |      }n|}|j                  |   }|r%||v r!||   D ]  }	|	t        v st	        |	   |      } |j                  |       l t        j                  |d   g||d   |d| j                  |d      }
d|v r|d   |
j                  d<   |
S )	Ncolumn_sortingcolumn_namesexpressionsrH   unique)r   _tableindexduplicates_constraint)
r>   	enumerater   cr   rp   rm   r"    adjust_reflected_dialect_optionsrt   )rx   paramsr   exprssortingnumcol_namerH   itemoperatorixs              r5   _make_indexr   "  s$    35Ejj)*G"6.#9: X F***-(-D:DD<<)Dtw#DM B551(;DADB 	T 
v
	
 h	

 
/
/
@
B &(+12I+J'(Ir7   c                    t        j                  |d   D cg c]  }|j                  |    c}d|d   i| j                  |d      }d|v r|d   |j                  d<   |S c c}w )Nr   rH   unique_constraintduplicates_index)rm   r$   r   r   rt   )rx   r   r   cnameuqs        r5   _make_unique_constraintr   B  s~     
	#	#+1.+A	B%*,,u
	B
F^
 
/
/8K
L
B
 V#&,-?&@"#I 
Cs   A!c           
        | d   }| d   r
| d   d|}| j                  di       }t        j                  | d   D cg c]  }|j                  |    c}| d   D cg c]	  }|d| c}|j                  d      |j                  d      |j                  d	      |j                  d
      | d         }|j	                  |       |S c c}w c c}w )Nreferred_tablereferred_schemara   optionsconstrained_columnsreferred_columnsonupdateondelete
deferrable	initiallyrH   )r   r   r   r   rH   )r>   rm   r!   r   append_constraint)r   r   rR   r   r   nconsts          r5   _make_foreign_keyr   P  s     #$E !"34e<jjB'G***01F*GHe	H'-.@'AB!E1	BZ(Z(;;|,++k*F^E   'L 	IBs   C	C
c           
   #    K   | r| d|n|}t        d |j                  D              }|j                  D 	ci c]  }	|	j                  r|	j                  |	 }
}	|j                  D 	ci c]/  }	|j	                  |	j                  d|| d      r|	j                  |	1 }}	|j                  |      D ]o  }|j                  |
|   |ddd       s|j                  j                  t        j                  j                  | ||
|                t        j                  d||       q |j                  |      D ]  }|
|   }|j                  |   }|j                  ||dd|      s-t        j                  |||       }t        j!                  d      ||| ||||       |j#                         sv|j                  j                  |        d  t%        |      j                  |      D ]  }|j                  |j                  |   |ddd       s&|j                  j                  t        j&                  j                  | ||j                  |                t        j                  d	||        y c c}	w c c}	w w)
Nra   c              3  N   K   | ]  }|j                   r|j                    y wN)systemrH   )rQ   r   s     r5   rS   z#_compare_columns.<locals>.<genexpr>r  s      $$s   %%column
table_namerP   FzDetected added column '%s.%s'r   TzDetected removed column '%s.%s')r   r   r   rH   rE   rX   ro   r   rp   AddColumnOpfrom_column_and_tablenamers   rt   r|   r'   rF   rG   has_changesrA   DropColumnOp)r   rR   r   r   r   r1   rI   rH   metadata_col_namesr   metadata_cols_by_nameconn_col_namesr   colnamemetadata_colconn_colalter_column_ops                    r5   r~   r~   g  s     )/fe$ED# $&(($  *++188	  ++FFHU6J
 	
	N  $..~> 	C--!%(%5$
   ''99E#8#?
 HH4dEB	C &22>B 9,W5<<(11'8UH
 ++E76JX&	
 &&(  ''8)9, 
^$//0BC 	E--LL$
   ''  ::E:<<#6
 HH6eD	E_s7   6I5I+
I+I5)4I0.I5CI5)A I5
A+I5c                  4    e Zd ZU ded<   ddZd Zd Zd	dZy)
_constraint_sigz4Union[UniqueConstraint, ForeignKeyConstraint, Index]r   c                V    t        j                  | j                  |j                        S r   r   _get_constraint_final_namer   r?   selfcontexts     r5   md_name_to_sql_namez#_constraint_sig.md_name_to_sql_name  "    55JJ
 	
r7   c                4    | j                   |j                   k(  S r   r   r   others     r5   __eq__z_constraint_sig.__eq__      zzU[[((r7   c                4    | j                   |j                   k7  S r   r   r   s     r5   __ne__z_constraint_sig.__ne__  r   r7   c                ,    t        | j                        S r   )hashr   r   s    r5   __hash__z_constraint_sig.__hash__  s    DJJr7   Nr   r%   returnOptional[str])r   int)__name__
__module____qualname____annotations__r   r   r   r   rf   r7   r5   r   r     s    ??

)) r7   r   c                  .    e Zd ZdZdZddZedd       Zy)_uq_constraint_sigFTc                f    || _         |j                  | _        d|j                  |      z   | _        y )N)UNIQUE_CONSTRAINT)r   rH   create_unique_constraint_sigsigr   r   rx   s      r5   __init__z_uq_constraint_sig.__init__  s0    
JJ	)D,M,M-
 
r7   c                h    | j                   j                  D cg c]  }|j                   c}S c c}w r   )r   columnsrH   )r   cols     r5   r   z_uq_constraint_sig.column_names  s$    $(JJ$6$67S777s   /N)r   r$   rx   r&   r   None)r   z	List[str])r   r   r   is_index	is_uniquer   propertyr   rf   r7   r5   r   r     s%    HI
 8 8r7   r   c                  2    e Zd ZdZddZddZedd       Zy)	_ix_constraint_sigTc                    || _         |j                  | _        d|j                  |      z   | _        t	        |j
                        | _        y )N)INDEX)r   rH   create_index_sigr   boolr   r   r   s      r5   r   z_ix_constraint_sig.__init__  s;    
JJ	 5 5e <<ell+r7   c                V    t        j                  | j                  |j                        S r   r   r   s     r5   r   z&_ix_constraint_sig.md_name_to_sql_name  r   r7   c                @    t        j                  | j                        S r   )r   _get_index_column_namesr   r   s    r5   r   z_ix_constraint_sig.column_names  s    224::>>r7   N)r   r"   rx   r&   r   r   r   )r   z$Union[List[quoted_name], List[None]])r   r   r   r   r   r   r   r   rf   r7   r5   r   r     s%    H,

 ? ?r7   r   c                  "    e Zd Z	 d	 	 	 	 	 ddZy)_fk_constraint_sigc                Z   || _         |j                  | _        t        |      \
  | _        | _        | _        | _        | _        | _        }}}}| j                  | j                  t        | j
                        | j                  | j                  t        | j                        f| _
        |r| xj                  |r%|j                         dk(  rd n|j                         nd |r%|j                         dk(  rd n|j                         nd |r|j                         dk(  rdn|rdndfz  c_
        y y )Nz	no actiondeferredinitially_deferrabler   znot deferrable)r   rH   r   source_schemasource_tablesource_columnstarget_schematarget_tabletarget_columnstupler   lower)r   r   include_optionsr   r   r   r   s          r5   r   z_fk_constraint_sig.__init__  s%    
JJ	 UO	
 $%%&$%%&%
 HH ")[8hnn>N ")[8hnn>N !2j!@ '  "% H r7   N)F)r   r!   r  r   r   r   )r   r   r   r   rf   r7   r5   r  r    s"    CH)))<@)	)r7   r  rO   c           
        ,-./  j                   }d u -|d u . j                  j                  ,|I|j                  D ch c]  }t	        |t
        j                        r|  }}t        |j                        }	nt               }t               }	t               x}
}d/d}t        |d      rZ	 |j                  |      }
d/|
D cg c]  } j                  |d   d|d      r| }
}|
D ]  }|j                  d      sd} 	 	 |j!                  |      }|D cg c]  } j                  |d   d	|d      r| }}.rt               }
n|
D ch c]  }t#        ,|       }
},fd
|D        D ch c]  }|| }}|rt%        |
|||	 j&                  ,        j                  j                  j)                  |
|||	       |D ch c]  }t+        |,       }}|	D ch c]  }t-        |,       }}|
D ch c]  }t+        |,       }}|D ch c]  }t-        |,       }}|j/                  |      D ci c]\  }t	        |t,              s*t1        j2                  |j4                   j&                        r t7        t8        |j;                               |^ }}|D ci c]  }|j<                  | }}|D ci c]  }|j<                  | }}|j/                  |      D ci c].  }t1        j>                  |j<                        r|j<                  |0 }}t        |      jA                  |      D ci c]  }|||   ||   f }}|D ci c]  }|jB                  | }}|D ci c]  }|jB                  | }}|D ci c]  }|jB                  | }}|D ci c]9  }t1        j2                  |j4                   j&                        s|jB                  |; }} -./fd} -./fd}  fd}!tE        t        |      jG                  |            D ]e  }"||"   }#|#jH                  s|#jB                  |v r#|"|v r7||"   \  }$}%|%jB                  |vs>|$jB                  |vsM | |$        | |%       ^ | |#       g tE        t        |      jA                  |            D ]  }&||&   }'|&|v r||&   \  }$}%|'jH                  r|%}#n|$}#n||&   }#|#jH                  |'jH                  k7  r | |#        ||'       Ug }(|#jJ                  |'jJ                  k7  r+|(jM                  d|#jJ                  d|'jJ                         |#jB                  |'jB                  k7  r+|(jM                  d|#jB                  d|'jB                         |(s |!|#|'|(        tE        t        |      jG                  |            D ]  })||)   }* ||*        |D ]  }+|+|vs |||+           y c c}w c c}w # t        $ r Y t        $ r Y w xY wc c}w # t        $ r Y w xY wc c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w )NFget_unique_constraintsr   TrH   r   r   r   r   c              3  8   K   | ]  }t        |        y wr   )r   )rQ   r   r   rx   s     r5   rS   z/_compare_indexes_and_uniques.<locals>.<genexpr>l  s      68D"j1s   c                   | j                   rj                  | j                  | j                  ddd       rj                  j                  t        j                  j                  | j                               t        j                  d| j                  dj                  d| j                  z  g             y y sy sry j                  | j                  | j                  ddd       rj                  j                  t        j                  j                  | j                               t        j                  d| j                  dj                  d| j                  z  g             y y )Nr   FzDetected added index '%s' on %s, z'%s'r   z+Detected added unique constraint '%s' on %s)r   ro   r   rH   r   rp   CreateIndexOp
from_indexrs   rt   joinr   AddConstraintOpfrom_constraint)objr1   is_create_tableis_drop_table
modify_opssupports_unique_constraintss    r5   	obj_addedz/_compare_indexes_and_uniques.<locals>.obj_added  s    <<11		388WeT %%c&7&7&B&B399&MN5HHIIv(8(889:	 / -11		388%8% %%''77		B AHHIIv(8(889:r7   c                |   | j                   r| j                  rsy j                  | j                  | j                  ddd       rdj
                  j                  t
        j                  j                  | j                               t        j                  d| j                         y y sry j                  | j                  | j                  ddd       rdj
                  j                  t
        j                  j                  | j                               t        j                  d| j                         y y )Nr   Tz#Detected removed index '%s' on '%s'r   z/Detected removed unique constraint '%s' on '%s')r   r   ro   r   rH   r   rp   DropIndexOpr  rs   rt   DropConstraintOpr  )r  r1   r  r  r  r  rR   s    r5   obj_removedz1_compare_indexes_and_uniques.<locals>.obj_removed  s    <<}}%@ 11		388WdD %%coo&@&@&KL9388U	 - 11		388%8$ %%((88C EHHr7   c                   | j                   rj                  |j                  |j                  dd| j                        rt        j                  d| j                  dj                  |             j                  j                  t        j                  j                  | j                               j                  j                  t        j                  j                  |j                               y y j                  |j                  |j                  dd| j                        rt        j                  d| j                  dj                  |             j                  j                  t        j                  j                  | j                               j                  j                  t        j                  j                  |j                               y y )Nr   Fz&Detected changed index '%s' on '%s':%sr  r   z2Detected changed unique constraint '%s' on '%s':%s)r   ro   r   rH   rs   rt   r  r   rp   r!  r  r  r"  r  r  )oldnewmsgr1   r  rR   s      r5   obj_changedz1_compare_indexes_and_uniques.<locals>.obj_changed  sS   <<11		388WeSYY <HHIIcN	 %%coo&@&@&KL%%c&7&7&B&B399&MN 11		388%8% HHHIIcN	 %%((88C %%''77		Br7   z unique=z to unique=z expression z to )'rI   rT   rx   constraints
isinstancerm   r$   rA   indexes	frozensethasattrr  rE   r>   NotImplementedError	TypeErrorget_indexesr   _correct_for_uq_duplicates_uixr?   correct_for_autogen_constraintsr   r   unionr   _constraint_is_namedr   r   strr   rH   constraint_name_stringr|   r   r}   rX   r   r   rp   )0r1   r  r   rR   r   r   rI   r   metadata_unique_constraintsmetadata_indexesconn_uniquesconn_indexes+unique_constraints_duplicate_unique_indexesr   uq_defr   metadata_unique_constraints_sigmetadata_indexes_sigconn_unique_constraintsconn_indexes_sigr   metadata_namesconn_uniques_by_nameconn_indexes_by_name
conn_namesrH   doubled_constraintsconn_uniques_by_sigmetadata_uniques_by_sigmetadata_indexes_by_sigunnamed_metadata_uniquesr  r#  r(  removed_nameconn_objconn_uqconn_idxexisting_namemetadata_objr'  
added_namer  uq_sigrx   r  r  r  s0   `` ``                                       @@@@r5   _compare_indexes_and_uniquesrR    sq     ))I D(O"d*M,,11D ! %00'
"i889 '
# '

 ~556&)e#5"++-L<"'27/967K(??&  @   /3+ + &776
+',VD     ' KBvv01FJCK	$00f 1 L '"33vJ#(@ L  5L + (fjAL <H
  	 
 
 3&'##	
 %%**JJ#	 0K')+2t$'# '
 0@)+2t$ 
 0<)+2t$  @LL*2t4LL
 166 
 a+,++AGG_5L5LM 	S!''891<N  0GG!AFFAIGG/?@!AFFAI@@ )../?@--aff5 	
	J  ,-:: 
 	#D)+?+EFF  1HH"2662:HH<
  5IIbrvvrzII 2 //HHo--
 	
     > @< s:99.IJ "BLC
   X\\5M%M00 3L AGX$;;KK'>>G$H%!""  N 3 @ @ LM 9%m4// 3M BGX$$#"!-0H 5 55!l#C!!\%;%;;

))<+A+AC |||///

.6llL<L<LM HlC899< S0;;JGH 
Z(# + 8,,.v678y	'
@  '   	2 # 		&

F' M H@ I J s   #W'1W1 
"W,X ""XX!;X&X+)X0X5X:A!X?*YY	-3Y>YY0Y
Y"$>Y'1	X	=X	X		XXc                   |D cg c]  }t        j                  ||      |f }}|D ch c]
  \  }}|	| }	}}|D ch c]  \  }}|t        ||      j                   }
}}|D ch c]$  }|j                  rt        j                  ||      & }}|D ci c]  }|j                  s|j
                  | }}| D ci c]  }|j                  d   r|j
                  |  }}|D ]P  }||	vr1t        ||   |      j                  |
vs#| j                  ||          8||vs=|j                  ||          R y c c}w c c}}w c c}}w c c}w c c}w c c}w )Nr   )r   r   r   r   r   rH   rt   rC   )r?  r:  r7  r8  r?   rx   consmetadata_cons_namesrH   metadata_uq_namesunnamed_metadata_uqsmetadata_ix_namesconn_ix_namesuqs_dupe_indexesoverlaps                  r5   r1  r1  c  s   * 0 
	/	/g	>E   3td6F  .D$< 	4&**  %;; 	..tW=  2>MTYY_MMM ,99'( 			4  $ 9++"#3G#<dCGG+, (//0@0IJ--  w!789?
 Ns-   D<
EE"E+)EE,E#Er   c                   |j                   }|j                   }||_        ||urt        j                  |j                  |j                        rt        j
                  |      s*t        j                  |j                  |j                        rt        j                  d||       y ||_	        t        j                  d|rdnd||       y y )Nz3Ignoring nullable change on identity column '%s.%s'zDetected %s on column '%s.%s'NULLzNOT NULL)
nullableexisting_nullabler   _server_default_is_computedserver_default_nullability_might_be_unset_server_default_is_identityrs   rt   modify_nullable)	r1   r   r   rR   r   r   r   metadata_col_nullableconn_col_nullables	            r5   _compare_nullablerg    s     )11 ))(9O% 5533++X-D-D 77E77 //1H1H
 HHE /DO+HH//Z	' 6r7   c                    |j                   j                  |u rd|j                  d<   y |j                  du rd|j                  d<   y |j                  du rd|j                  d<   y y )NTautoincrementF)rO   _autoincrement_columnkwri  )r1   r   r   rR   r   r   r   s          r5   _setup_autoincrementrl    si     //<?.2?+		#	#t	+.2?+		#	#u	,.3?+ 
-r7   c                   |j                   }||_        |j                   }|j                  t        j                  u rt
        j                  d||       y |j                  t        j                  u rt
        j                  d||       y | j                  j                  ||      }	|	r!||_	        t
        j                  d||||       y y )Nz3Couldn't determine database type for column '%s.%s'z:Column '%s.%s' has no type within the model; can't comparez-Detected type change from %r to %r on '%s.%s')
typeexisting_type_type_affinitysqltypesNullTypers   rt   rT   _compare_typemodify_type)
r1   r   r   rR   r   r   r   	conn_typemetadata_typeisdiffs
             r5   rs  rs    s     I$-O! %%M8#4#44D	

 	##x'8'88K	

 	..<<,F &3#;	
 r7   c                   t        | t        j                        rYt        | j                  t              r| j                  } n2t	        | j                  j                  |j                  ddi            } t        | t              r| S y )Nliteral_bindsTr?   compile_kwargs)r*  rm   DefaultClauseargr5  compiler?   )metadata_defaultr1   s     r5   "_render_server_default_for_comparer    s}     "I$;$;<&**C0/33" $$,,+33$3T#: -   "C(r7   c                L    t        j                  dd|       j                         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[ \(\)'\"`\[\]]rd   )resubr  )sqltexts    r5   _normalize_computed_defaultr    s!     66$b'288::r7   c                   t        t        t        j                  |j                        j
                  j                  | j                  ddi            }t        |      }t        |j                  t        j                        rMt        |j                  j
                  j                  | j                  ddi            }|d}nt        |      }nd}||k7  rt        ||       y y )Nry  Trz  rd   )r5  r   rm   Computedra  r  r~  r?   r  r*  _warn_computed_not_supported)	r1   r   r   rR   r   r   r   rendered_metadata_defaultrendered_conn_defaults	            r5   _compare_computed_defaultr  #  s     !$Y!<!<=EEMM#+++T2 	N 	
! !<!! ())9+=+=> ###++33'// /6 4 !
 !($&!$?%%! !# $99$UE2 :r7   c                <    t        j                  d| d|d       y )NzComputed default on ra   z cannot be modified)r   warn)rR   r   s     r5   r  r  O  s    IIuMNr7   c                    | j                   j                  }|j                  |j                  |j                        \  }}	}
||
fS r   )rT   rx   _compare_identity_defaultra  )r1   r   r   rR   r   r   r   rx   diffignored_attris_alters              r5   r  r  S  sI     ,,11D#'#A#A##X%<%<$ D, >r7   c           	        |j                   }|j                   }||yt        j                  |      r"t        j                  syt	        | ||||||      S t        j                  |      rt        ||       yt        j                  ||      rH||_        t        | ||||||      \  }	}
|
r*||_	        |	r!t        j                  d||t        |	             y t        ||       }|r$t        t        |      j                   j"                  nd }||_        | j$                  j'                  ||||      }|r||_	        t        j                  d||       y )NFzIDetected server default on column '%s.%s': identity options attributes %sz)Detected server default on column '%s.%s')ra  r   r`  has_computed_reflectionr  r  rc  existing_server_defaultr  modify_server_defaultrs   rt   r}   r  r   r   r}  r   rT   _compare_server_default)r1   r   r   rR   r   r   r   r  conn_col_defaultr  r  r  r  is_diffs                 r5   r  r  d  s    $22..$4$<../?@ 22 *## 
 ../?@$UE2..* 3C/2
h 4DO154L8 ) %Go%
!
 5ED&'++00$ 	 3C/!33KK%!	
 4DO1HH@%Or7   c                    | j                   J | j                   j                  sy |j                  }|j                  }||y||_        ||k7  r||_        t
        j                  d||       y )NFzDetected column comment '%s.%s')r?   supports_commentscommentexisting_commentmodify_commentrs   rt   )	r1   r   r   rR   r   r   r   metadata_commentconn_col_comments	            r5   _compare_column_commentr    s|     ""...""44#++''$4$<'7O$++)9&2E5Ar7   c           
         ||y  j                   }|j                  D ch c]  }t        |t        j                        r|  }}|j                  ||      D cg c]  } j                  |d   d||d      r| }	}t        |	xr d|	d   v       }
|	D ch c]  }t        ||       }} j                  j                  j                  ||       |D ch c]  }t        ||
       }}|D ch c]  }t        ||
       }}|D ci c]  }|j                  | }}|D ci c]  }|j                  | }}|D ci c]  }|j                  |j                  | }}|D ci c]  }|j                  |j                  | }} fd} fd	}t        |      j!                  |      D ]>  }||   ||vsj                  |v r|j                     j"                  nd } ||       @ t        |      j!                  |      D ]>  }||   ||vsj                  |v r|j                     j"                  nd } ||       @ y c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w )
Nr   rH   foreign_key_constraintr   r   r   )r  c                   j                  | j                  | j                  dd|      rj                  j	                  t        j
                  j                  j                               t        j                  ddj                  | j                        dj                  | j                        | j                  rd| j                  z  nd| j                         y y )Nr  Fz1Detected added foreign key (%s)(%s) on table %s%sr  %s.rd   )ro   r   rH   r   rp   CreateForeignKeyOpr  rs   rt   r  r	  r  r  r  )r  
compare_tor1   r   r   s     r5   _add_fkz&_compare_foreign_keys.<locals>._add_fk  s    --IIsxx!95*
   ''&&66u{{C HHC		#,,-		#,,--0->->)))B  
r7   c                   j                  | j                  | j                  dd|      rj                  j	                  t        j
                  j                  | j                               t        j                  ddj                  | j                        dj                  | j                        | j                  rd| j                  z  nd| j                         y y )Nr  Tz3Detected removed foreign key (%s)(%s) on table %s%sr  r  rd   )ro   r   rH   r   rp   r"  r  rs   rt   r  r	  r  r  r  )r  r  r1   r   s     r5   
_remove_fkz)_compare_foreign_keys.<locals>._remove_fk(  s    --IIsxx!94
   ''$$44SYY? HHE		#,,-		#,,--0->->)))B  
r7   )rI   r)  r*  rm   r!   get_foreign_keysrE   r   r   rT   rx   correct_for_autogen_foreignkeysr  r   rH   rA   rX   r   )r1   r   r   rR   r   r   rI   fkmetadata_fksconn_fks_listbackend_reflects_fk_optionsr   conn_fksmetadata_fks_sigconn_fks_sigr   conn_fks_by_sigmetadata_fks_by_sigmetadata_fks_by_nameconn_fks_by_namer  r  removed_sigr  	added_sigs   ``         `             r5   _compare_foreign_keysr    s    ^3))I !,,b)889 	L  ,,U6,B++vJ$ 8
 	M  #'7)}Q'77# # 	%,H  %%**JJ,  	2/JK   	2/JKL 
 *66Aquuax6O6-=>155!8>> ,qvv/A	  ,8Na166;M	NN $ ?+667JK *,11 ::!55 %UZZ066 
 uj)* ,-88I '	#I.O+ ::!11 !,22 
 E:&'{

 7> OsA   #I"III2I"I'&I, I1I1'I69I6c                   | j                   J | j                   j                  sy ||y |j                  |j                  y |j                  H|j                  <|j                  j	                  t        j
                  ||j                  |             y |j                  |j                  k7  rG|j                  j	                  t        j                  ||j                  |j                  |             y y )N)r  r   )r?   r  r  r   rp   DropTableCommentOpCreateTableCommentOp)r1   r   r   rR   r   r   s         r5   _compare_table_commentr  O  s     ""...""44 ^3!n&<&<&D%**<*<*H##""
(:(:6	

 
		:#5#5	5##$$&&!+!3!3		
 
6r7   )r1   r%   r2   r(   r   r   )r1   r%   r3   r*   r   r   )r1   r%   r3   r*   rK   z$Union[Set[None], Set[Optional[str]]]r   r   )r\   rA   r^   rA   rI   r   r3   r*   r1   r%   r   r   )rx   r&   r   Dict[str, Any]r   r#   r   zOptional[Index])rx   r&   r   r  r   r#   r   r$   )r   r  r   r#   r   r!   )r   r   rR   Union[quoted_name, str]r   r#   r   r#   r   r)   r1   r%   rI   r   r   zIterator[None])r1   r%   r  r)   r   r   rR   r  r   Optional[Table]r   r  r   r   )r1   r%   r   r'   r   r   rR   r  r   r  r   Column[Any]r   r  r   r   )r1   r%   r   r'   r   r   rR   r  r   r   r   r  r   r  r   r   )r  zOptional[Any]r1   r%   r   r   )r  r5  r   r5  )r1   r%   r   r'   r   r   rR   r5  r   r5  r   r  r   r  r   r   )rR   r5  r   r5  r   r   )r1   r%   r   r'   r   r   rR   r  r   r  r   r  r   r  r   zOptional[bool])r1   r%   r   r'   r   r   rR   r  r   r   r   r  r   r  r   zOptional[Literal[False]])r1   r%   r   r)   r   r   rR   r  r   r  r   r  r   r   )a
__future__r   
contextlibloggingr  typingr   r   r   r   r   r	   r
   r   r   r   r   
sqlalchemyr   r   r   rm   r   r   rq  sqlalchemy.sqlr   sqlalchemy.utilr   alembic.ddl.baser   rd   r   
operationsr   r   r   sqlalchemy.engine.reflectionr   sqlalchemy.sql.elementsr   r   sqlalchemy.sql.schemar    r!   r"   r#   r$   alembic.autogenerate.apir%   alembic.ddl.implr&   alembic.operations.opsr'   r(   r)   r*   	getLoggerr   rs   r6   
DispatcherrF   r/   dispatch_forr_   r[   immutabledictr   r   r   r   r   r   r   r   r   contextmanagerr~   r   r   r   r  rR  r1  rg  rl  rs  r  r  r  r  r  r  r  r  r  rf   r7   r5   <module>r     s   "   	               *  ( % & %   632,:++67,4651g!,#,7F,	, dood+#2<	> (#'#'' 2' 
	' $'TG9G9G9 G9 	G9
 $G9 
G9T -?D,>,>~~!,, ** ++))	- ) 	
-;@@
-;@(-. EEEE"EE EE 	EE
 %EE $EE EE EE EEP   $8 8 ? ?&* *Z '"M8#M8M8 M8 #	M8
  M8 $M8 
M8 #M8`
:9z (#%#%"% % #	%
 #% % % 
% $%P (#4#4"4 4 #	4
 4 4 4 
4 $4" (#'
#'
"'
 '
 #	'

 #'
 '
 '
 
'
 $'
T#6D&;)3#)3")3 )3 	)3
 )3 )3 )3 
)3XO" (#T#T"T T #	T
 #T T T T $Tn (##"  #	
     $6 '"s'#s'$s' s' #	s'
  s' $s' 
s' #s'l '""
#"
$"
 "
 #	"

  "
 $"
 
"
 #"
r7   