bg UddlmZddlZddlZddlZddlmZddlmZddlmZddlm Z ddlm Z ddlm Z dd lm Z dd lm Z dd lmZdd lmZdd lmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlm Z ddl!m"Z"ddl m#Z#erZddlm$Z$ddl%m&Z&ddl'm(Z(ddl'm)Z)ddl*m+Z+ddl*m,Z,dd l*m-Z-dd!l*m.Z.dd"l*m/Z/dd#l0m1Z1dd$l2m3Z3dd%l4m5Z5dd&l4m6Z6dd'l4m7Z7dd(l4m8Z8ej9e:Z;d{d/Z<e j=d01Z>d|d4Z?e>@d5d}d8ZAd~d>ZBe jCejDejEejFejGejFejGd?ZHd@eIdA<ddGZJddIZKddKZLejMddSZNGdTdUZOGdVdWeOZPGdXdYeOZQGdZd[eOZRe>@d\dd_ZSd`ZTe>@daddhZUe>@daddjZVe>@daddkZWddnZXddqZYddrZZddsZ[dtZ\e>@daddvZ]e>@daddxZ^e>@d\ddyZ_e>@d\ddzZ`dS)) annotationsN)Any)cast)Dict)Iterator)List)Mapping)Optional)Set)Tuple) TYPE_CHECKING)Union)event)inspectschema)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) UpgradeOpsautogen_contextr%migration_scriptr(returnNonec|jd}|jd}t||||dS)N)upgrade_ops_listdowngrade_ops_list_produce_net_changes reverse_into)r+r, upgrade_ops downgrade_opss S/opt/cloudlinux/venv/lib64/python3.11/site-packages/alembic/autogenerate/compare.py_populate_migration_scriptr85sH#3B7K$7;M+666]+++++T)uselistr5r*cj}|Jjdd}t|}|jj}|rat |}|d||| dndh}fd|D}jJt djj ||dS)Ninclude_schemasFinformation_schemacBh|]}|di|Srrun_name_filters).0sr+s r7 z'_produce_net_changes..Xs@o>>q(BOO r9r) connectionoptsgetrdialectdefault_schema_namesetget_schema_namesdiscardadd comparatorsdispatchname)r+r5rDr< inspectordefault_schemaschemass` r7r3r3Bs!+J  ! ! !%*../@%HHO":..I';Ni002233,---''' D&G  " . . .?#:#?@@gr9rrR$Union[Set[None], Set[Optional[str]]]c j}t}jj}jj}|D]m t| } |kr |jjg}| fd|Dntdj D||fg}t||||dS)Nrc3RK|]!}|ddi|fV"dS)table schema_nameNr?)rAtnamer+rWs r7 z&_autogen_for_tables..xs^  //w < %       r9c*g|]}|j|jfS)rrO)rArVs r7 z'_autogen_for_tables..s!OOO%, #OOOr9) rPrImigration_contextversion_table_schema version_tableget_table_names differenceupdater sorted_tables_compare_tables) r+r5rRrPconn_table_namesr^r_tablesmetadata_table_namesrWs ` @r7_autogen_for_tablesrhbsD  )I7:uu )>$5CM   Y..k.BBCC . . .&& 2@AF             &OO1NOOOj'7899 r9rerIrgrPrc  |jjjtfd|D}fdt ||D}|}||D]\}}|r|d|n|} |||f} | |dddr|jtj | t d| tj |g|} td| ||d| | s|j| t#j} ||D]\\}}t#j||} | | jv} t#j|| |}| sHt-j|djj|t7j||||dd drtj |g|} td| |||d| s|j| |jtj |t d | ^||}t#j}i}|D]\}}t#j||} | |jv} t#j|||}| sHt-j|djj|t7j||||||f<t?|d D]\}}|pd}|r|d|n|} |||f} |j| }| |dd|rtj |g|} tA|||| | |5td| |||| dddn #1swxYwY| s|j| dS) Nc.g|]\}}|kr|nd|fSNr[)rArrXrQs r7r\z#_compare_tables..s@   //VVT5 A   r9c^i|])\}\}}|jtj||*Sr[)table_key_to_table sa_schema_get_table_key)rAno_dflt_schemarrXr+s r7 z#_compare_tables..sM ,NOVU :  $UF 3 3 r9.rVFzDetected added table %rrcolumn_reflectTzDetected removed table %rc&|dpd|dfS)Nrr[)xs r7z!_compare_tables..s1Q4:2qt:Lr9)key)!bindrGrHrziprarun_object_filtersrappend CreateTableOp from_tableloginfor)rMrNis_emptyrnMetaDatarorfr#rlistenr]impl_compat_autogen_column_reflectr_reflect_table DropTableOp intersectionsorted_compare_columns)rergrPr5r+#metadata_table_names_no_dflt_schematname_to_tablerBrXrOmetadata_tablemodify_table_opsremoval_metadataexiststexisting_tablesexisting_metadataconn_column_info conn_tablerQs ` @r7rdrds^+?N+5    !5   ++'03 /1E0 0 N?(334DEE995'(3!!!UU##e'E 3  - - E7E4   9 O " "!,,^<<    HH. 5 5 5"1%AFFF    ) )     $,,.. 9&&'7888 )++$//0DEE885'q11)00 OE#3A > > > 5 L 16..      &y! 4 4 4  - -at L L 8"1%AFFF    ) )!11eQ   $,,.. 9&&'7888 O " "3?#=#=a#@#@ A A A HH0$ 7 7 7&334HIIO!*,,#))5'q11*11 OE#4Q ? ? ? 5 L 16..y99      &y! 4 4 4'(!U$$?0L0LMMM995 I'(3!!!UU##e'E 3&-d3  - - E7E:   9 #1%AFFF !   $$W--#$"                &$,,.. 9&&'7888?99s(QQ Q )ascdesc nulls_first nulls_last nullsfirst nullslastzMapping[str, Any]_IndexColumnSortingOpsparamsDict[str, Any]rr#Optional[Index]cg}|d}t|dD]~\}}|$d|vsJ|d|}t|}n|}|j|}|r-||vr)||D] }|tvrt ||}!||t j|dg|R|d|d} d|vr|d| jd<| S)Ncolumn_sorting column_names expressionsrOunique)r_tableduplicates_constraint) rF enumeratercrr}rnr"r) rrexprssortingnumcol_namerOitemoperatorixs r7 _make_indexr's524Ejj)**G"6.#9::   X   F****-(-D::DDD<)D  Btw#DM B B5551(;DAAD T v   '-h'7    B&((+12I+J'( Ir9r$ctjfd|dDd|di}d|vr|d|jd<|S)Nc*g|]}j|Sr[rrAcnamers r7r\z+_make_unique_constraint..Es B B B%*,u  B B Br9rrOduplicates_index)rnr$r)rruqs ` r7_make_unique_constraintrAsd  # B B B B6.+A B B B  F^  BV##&,-?&@"# Ir9r!c |d|dr |dd|di}tjfd|dDfd|dD|d |d |d |d |d }||S)Nreferred_tablereferred_schemarroptionsc*g|]}j|Sr[rrs r7r\z%_make_foreign_key..Xs HHHe HHHr9constrained_columnscg|] }d| S)rrr[)rAnrXs r7r\z%_make_foreign_key..Ys$BBB!EEE11 BBBr9referred_columnsonupdateondelete deferrable initiallyrO)rrrrrO)rFrnr!append_constraint)rrrconstrXs ` @r7_make_foreign_keyrNs # $E  =!"3444ee<jjB''G  *HHHH&1F*GHHHBBBBv.@'ABBBZ((Z((;;|,,++k** F^   E  ''' Lr9 Optional[str]rXUnion[quoted_name, str]rrr)Iterator[None]c #Krdn}td|jD}d|jD} fd|jD} || D]|} | | | dddr[|jtj| | t d|| }| | D]} | | } |j| }| | dd|s1t j | }t d|| || |r|j|dVt| |D]} |j| | dd dr`|jtj|j| t d || dS) Nrrc32K|]}|j |jVdSrksystemrOrArs r7rYz#_compare_columns..ps?$$$ $$$$$$r9c,i|]}|j |j|Sr[rrs r7rqz$_compare_columns..ss318 r9c ^i|])}|jdd!|j|*S)column table_namerW)r@rO)rArr+rrXs r7rqz$_compare_columns..wsT  + + FHU6JJ   r9rFzDetected added column '%s.%s'rTzDetected removed column '%s.%s')rrrar|rr} AddColumnOpfrom_column_and_tablenamerrrr'rMrN has_changesrI DropColumnOp)rrXrrrr+rPrOmetadata_col_namesmetadata_cols_by_nameconn_col_namesrcolname metadata_colconn_colalter_column_ops`` ` r7rres)/ 9fffee $ $ED#$$&($$$)+N$..~>> C C  - - !% (%5$   C  ' '99E#8#?    HH4dE B B B%22>BB99,W5 <(11 '8UH    +E76JJJX&&            & & ( ( 9  ' ' 8 8 8 EEE^$$//0BCC E E  - - L $   E  ' ' ::E:<#6    HH6e D D D E Er9c6eZdZUded<d dZdZd Zdd Zd S)_constraint_sigz4Union[UniqueConstraint, ForeignKeyConstraint, Index]rcontextr%r-rc@tj|j|jSrkr_get_constraint_final_namerrGselfrs r7md_name_to_sql_namez#_constraint_sig.md_name_to_sql_name 5 J   r9c"|j|jkSrkrrothers r7__eq__z_constraint_sig.__eq__zU[((r9c"|j|jkSrkrrs r7__ne__z_constraint_sig.__ne__rr9intc*t|jSrk)hashrrs r7__hash__z_constraint_sig.__hash__sDJr9Nrr%r-r)r-r)__name__ __module__ __qualname____annotations__rrrrr[r9r7rrsh????    ))))))      r9rc6eZdZdZdZd dZed d Zd S) _uq_constraint_sigFTrr$r-r.c||_|j|_dttd|jDz|_dS)N)UNIQUE_CONSTRAINTcg|] }|j Sr[rOrAcols r7r\z/_uq_constraint_sig.__init__..s666CH666r9)rrOtuplercolumnssig)rrs r7__init__z_uq_constraint_sig.__init__sJ J )E 66 666 7 7- -  r9 List[str]c.d|jjDS)Ncg|] }|j Sr[rrs r7r\z3_uq_constraint_sig.column_names..s777S777r9)rrrs r7rz_uq_constraint_sig.column_namess77DJ$67777r9N)rr$r-r.)r-r )rrris_index is_uniquer propertyrr[r9r7rrsRHI    888X888r9rc:eZdZdZddZdd ZeddZdS)_ix_constraint_sigTrr"rr&r-r.c||_|j|_d||z|_t |j|_dS)N)INDEX)rrOcreate_index_sigrboolrr)rrrs r7r z_ix_constraint_sig.__init__sA J  5 5e < <<el++r9rr%rc@tj|j|jSrkrrs r7rz&_ix_constraint_sig.md_name_to_sql_namerr9$Union[List[quoted_name], List[None]]c4tj|jSrk)r_get_index_column_namesrrs r7rz_ix_constraint_sig.column_namess24:>>>r9N)rr"rr&r-r.r)r-r)rrrr r rrrr[r9r7rrsaH,,,,     ???X???r9rceZdZ d d dZd S) _fk_constraint_sigFrr!include_optionsrr-r.c T||_|j|_t|\ |_|_|_|_|_|_}}}}|j|jt|j|j|jt|jf|_ |r|xj |r.| dkrdn| nd|r.| dkrdn| nd|r| dkrdn|rdndfz c_ dSdS)Nz no actiondeferredinitially_deferrablerznot deferrable) rrOr source_schema source_tablesource_columns target_schema target_tabletarget_columnsrrlower)rrrrrrrs r7r z_fk_constraint_sig.__init__s\ J  UOO                     $% & &     $% & & %    HH))[88hnn>N>N>N))[88hnn>N>N>N&!*!2!2j!@!@'&&\\%  HHHH  r9N)F)rr!rrr-r.)rrrr r[r9r7rrs0CH)))))))r9rrV modify_opsOptional[Table]c* %&'()*j}du(|du)|&d|jD}t|j}nt}t}t x} } d*d} t |drb |} d*fd| D} | D]} | drd} n#t$rYnt$rYnwxYw | } fd| D} n#t$rYnwxYw)rt} nfd | D} d fd | DD} | rt| | ||j j j| | ||d |D} j j''fd |D}d| D}'fd| D}fd| |D}d|D&d|D%d||D}%&fdt&%D}d|D}d| D}d|D}fd| D}()*fd}()*fd}fd}t%t||D]^}||}|js |j|vr||vr4||\}}|j|vr|j|vr||||S||_t%t||D]}||} ||vr||\}}| jr|}n |}n||}|j| jkr|||| Ug}!|j| jkr%|!d|jd| j|j| jkr%|!d|jd| j|!r ||| |!t%t||D]}"||"}#||#|D]}$|$|vr|||$dS) NcFh|]}t|tj|Sr[) isinstancernr$rArs r7rCz/_compare_indexes_and_uniques.. s;' ' ' "i899' ' ' ' r9Fget_unique_constraintsrTc Tg|]$}|ddd"|%S)rOunique_constraintrr?)rArr+rrXs r7r\z0_compare_indexes_and_uniques..@sT   &776 +',VDD    r9rc Tg|]$}|ddd"|%S)rOindexrr?)rArr+rrXs r7r\z0_compare_indexes_and_uniques..SsT"33vJ#(@@r9c0h|]}t|Sr[)r)rAuq_defrs r7rCz/_compare_indexes_and_uniques..cs3( ;;r9ch|]}||Srkr[)rAr1s r7rCz/_compare_indexes_and_uniques..hs(        r9c38K|]}t|VdSrk)r)rArrs r7rYz/_compare_indexes_and_uniques..js-MM"+b*55MMMMMMr9c,h|]}t|Sr[rr,s r7rCz/_compare_indexes_and_uniques..s.'''#%2'''r9c0h|]}t|Sr[rrArrs r7rCz/_compare_indexes_and_uniques..s1)+2t$$r9c,h|]}t|Sr[r7r,s r7rCz/_compare_indexes_and_uniques..s!MMM"1"55MMMr9c0h|]}t|Sr[r9r:s r7rCz/_compare_indexes_and_uniques..s$LLL*2t44LLLr9ci|]_}t|tstj|jj6t t||`Sr[) r+rr_constraint_is_namedrrGrstrr)rArr+s r7rqz0_compare_indexes_and_uniques..sr  a+ , ,   +AG_5L M M  S!''88991r9ci|] }|j| Sr[rrs r7rqz0_compare_indexes_and_uniques..sGGG!AFAGGGr9ci|] }|j| Sr[rrs r7rqz0_compare_indexes_and_uniques..s@@@!AFA@@@r9cPi|]#}tj|j|j|$Sr[)rconstraint_name_stringrOrs r7rqz0_compare_indexes_and_uniques..s?  -af 5 5 r9c2i|]}|||fSr[r[)rArOconn_indexes_by_nameconn_uniques_by_names r7rqz0_compare_indexes_and_uniques..s<  #D)+?+EFr9ci|] }|j| Sr[rr,s r7rqz0_compare_indexes_and_uniques..sHHH"262HHHr9ci|] }|j| Sr[rHr,s r7rqz0_compare_indexes_and_uniques..s)r9ci|] }|j| Sr[rH)rArs r7rqz0_compare_indexes_and_uniques..sIIIbrvrIIIr9c^i|])}tj|jj!|j|*Sr[)rr>rrGr)rArr+s r7rqz0_compare_indexes_and_uniques..sJ    / Ho-       r9c|jr|j|jdddr{jtj|jt d|jd d|j zgdSdSsdSsrdS|j|jdddr{jtj |jt d|jd d|j zgdSdS)Nr1FzDetected added index '%s' on %s, z'%s'r/z+Detected added unique constraint '%s' on %s)r r|rrOrr} CreateIndexOp from_indexrrjoinrAddConstraintOpfrom_constraint)objr+is_create_table is_drop_tabler'supports_unique_constraintss r7 obj_addedz/_compare_indexes_and_uniques..obj_addedsx < 11 38WeT %%c&7&B&B39&M&MNNN5HIIv(889::   /  - 11 38%8% %%'77 BBAHIIv(889::  r9cD|jr|jrsdS|j|jdddr_jt j|jt d|jdSdSsrdS|j|jdddr_jt j |jt d|jdSdS)Nr1Tz#Detected removed index '%s' on '%s'r/z/Detected removed unique constraint '%s' on '%s') r rr|rrOrr} DropIndexOprOrrDropConstraintOprR)rSr+rTrUr'rVrXs r7 obj_removedz1_compare_indexes_and_uniques..obj_removedsS < } %@ 11 38WdD %%co&@&@&K&KLLL938U    - 11 38%8$ %%(88CCEH  r9cv|jrى|j|jdd|jrtd|jd|jtj |jjtj |jdSdS|j|jdd|jrtd|jd|jtj |jjtj |jdSdS)Nr1Fz&Detected changed index '%s' on '%s':%srMr/z2Detected changed unique constraint '%s' on '%s':%s)r r|rrOrrrPrr}rYrOrNrZrRrQ)oldnewmsgr+r'rXs r7 obj_changedz1_compare_indexes_and_uniques..obj_changeds < 11 38WeSY O<HIIcNN  %%co&@&@&K&KLLL%%c&7&B&B39&M&MNNNNN O O11 38%8% HHIIcNN  %%(88CC%%'77 BB  r9z unique=z to unique=z expression z to )rP constraintsrIindexes frozensethasattrr-rFNotImplementedError TypeError get_indexes_correct_for_uq_duplicates_uixrGr]rcorrect_for_autogen_constraintsunionrrrar rrr})+r+r'rrXrrrPmetadata_unique_constraintsmetadata_indexes conn_uniques conn_indexes+unique_constraints_duplicate_unique_indexesrmetadata_unique_constraints_sigmetadata_indexes_sigconn_unique_constraintsconn_indexes_sigmetadata_names conn_namesdoubled_constraintsconn_uniques_by_sigmetadata_uniques_by_sigmetadata_indexes_by_sigunnamed_metadata_uniquesrWr[r` removed_nameconn_objconn_uqconn_idx existing_name metadata_objr_ added_namerSuq_sigrErFrrTrUrVs+````` @@@@@@r7_compare_indexes_and_uniquesrs )I D(O"d*M!' ' $0' ' ' # ~566&)ee#55"+++-L<"'27/ 96 7 7 K K(??& @   /3+      *    'KKBvv011KFJCK#'        $ $00f1L &LL#    D   55LL*L   MMMM MMM   3 &   '   #    %*JJ# '')D'''#  , 1D/?NM MMMLLLL|LLL066   NHG/FGGG@@/?@@@(../?@@J ,--::   IH0GHHH<JI4HIII    1    >@<s:99.IIJJ"" BL C  "X\5M%M%M  0 0 0 3L A GX $;;;K'>>> G$$$ H%%% K ! ! ! !N 3 3 @ @ L LMM99 %m4 / / / 3M B GX$ ##"!-0H   5 5 5 K ! ! ! Il # # # #C!\%;;; )))<+A+AC||/// .6lllL| |vr|| | ^dS)Nc>g|]}tj||fSr[)rrrAconsrGs r7r\z2_correct_for_uq_duplicates_uix..os;   /g > >Er9ch|] \}}|| Srkr[rArOrs r7rCz1_correct_for_uq_duplicates_uix..ts(td6F6F6F6Fr9c@h|]\}}|t|jSrk)rrrs r7rCz1_correct_for_uq_duplicates_uix..xs4 D$ < 4  $ <.~s>  ;.tW==r9c,i|]}|j |j|Sr[)rrOrArs r7rqz2_correct_for_uq_duplicates_uix..s#MMMMTYMMMr9c8i|]}|jd|j|S)r)rrOrs r7rqz2_correct_for_uq_duplicates_uix..s:  9' ( 4r9)rrrK) rrrnrkrlrGmetadata_cons_namesmetadata_uq_namesunnamed_metadata_uqsmetadata_ix_names conn_ix_namesuqs_dupe_indexesoverlaps ` r7rhrh]sS$/ 2- $NMMMMM+ $ 9 9 + + +"#3G#<==A+,,(//0@0IJJJ - - -  w!7 8 8 8 9 9r9rrr'rr Column[Any]rcl|j}|j}||_||urtj|j|jrtj|stj|j|jrtd||dS||_ td|rdnd||dSdS)Nz3Ignoring nullable change on identity column '%s.%s'zDetected %s on column '%s.%s'NULLzNOT NULL) nullableexisting_nullabler_server_default_is_computedserver_default_nullability_might_be_unset_server_default_is_identityrrmodify_nullable) r+rrrXrrrmetadata_col_nullableconn_col_nullables r7_compare_nullablers)1 )(9O% 555  3+X-D   7 EE   7 /1H   HHE      /DO + HH//?Z      '65r9rc|jj|ur d|jd<dS|jdur d|jd<dS|jdur d|jd<dSdS)NT autoincrementF)rV_autoincrement_columnkwr)r+rrrXrrrs r7_setup_autoincrementrsr/<??.2?+++  #t + +.2?+++  #u , ,.3?+++ - ,r9c||j}||_|j}|jtjurt d||dS|jtjurt d||dS|j||} | r'||_ t d||||dSdS)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_affinitysqltypesNullTyperrr] _compare_type modify_type) r+rrrXrrr conn_type metadata_typeisdiffs r7rrs I$-O! %M8#444  D     #x'888  K       . < <,F &3#  ;            r9metadata_default Optional[Any]c t|tjrRt|jtr|j}n0t |j|jddi}t|tr|SdS)N literal_bindsTrGcompile_kwargs)r+rn DefaultClauseargr?compilerG)rr+s r7"_render_server_default_for_comparers"I$;<<  &*C 0 0 /3  " $,,+3$3T#:-    "C((tr9sqltextr?cRtjdd|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[ \(\)'\"`\[\]]ru)resubr&)rs r7_normalize_computed_defaultrs% 6$b' 2 2 8 8 : ::r9ctttj|jj|jddi}t|}t|jtjrJt|jj|jddi}|d}nt|}nd}||krt||dSdS)NrTrru) r?rrnComputedrrrrGrr+_warn_computed_not_supported) r+rrrXrrrrendered_metadata_defaultrendered_conn_defaults r7_compare_computed_defaultr!s!$ Y !<==EMM#++T2 N  !!!<!!!()9+=>># #  # + 3 3'/ /6 4  ! !  ! ($& ! !$?%%% ! !!# $999$UE22222:9r9c<tjd|d|ddS)NzComputed default on rrz cannot be modified)rwarn)rXrs r7rrMs'IIuuuMNNNNNr9cj|jj}||j|j\}} } || fSrk)r]r_compare_identity_defaultr) r+rrrXrrrrdiff ignored_attris_alters r7rrQsB  , 1D#'#A#A#X%<$$ D, >r9Optional[bool]c |j}|j}||dStj|r#tjsdSt |||||||Stj|rt ||dStj||rU||_t|||||||\} } | r3||_ | r*t d||t| n|t||} |rtt|jjnd} ||_|j||| | } | r#||_ t d||dS)NFzIDetected server default on column '%s.%s': identity options attributes %sz)Detected server default on column '%s.%s')rrrhas_computed_reflectionrrrexisting_server_defaultrmodify_server_defaultrrrrrrrrr]_compare_server_default)r+rrrXrrrrconn_col_defaultrrrris_diffs r7rrbs$2.$4$<u./?@@2 5*##  ./?@@$UE222u.**P3C/2         h  4DO 1 54LL %G o% % ! 5E ND& ' ' + 0 0$ 3C/!3KK   % !     P4DO 1 HH@% O O O 4r9Optional[Literal[False]]c|jJ|jjsdS|j}|j}||dS||_||kr#||_t d||dS)NFzDetected column comment '%s.%s')rGsupports_commentscommentexisting_commentmodify_commentrr) r+rrrXrrrmetadata_commentconn_col_comments r7_compare_column_commentrs  " . . .  " 4t#+'$4$<u'7O$+++)9& 2E5AAA 4r9cB|dSj}d|jD}fd|D}t|o d|dvfd|D} jj| |fd|D} fd| D} d | D} d | D} d | D}d | D}fd }fd}t| | D]7}| ||| vr)j |vr|j j nd}||8t| | D]7}| ||| vr)j |vr|j j nd}||8dS)NcFh|]}t|tj|Sr[)r+rnr!)rAfks r7rCz(_compare_foreign_keys..s;  b)8 9 9 r9c Tg|]$}|ddd"|%S)rOforeign_key_constraintrr?)rArr+rrXs r7r\z)_compare_foreign_keys..sT   + + vJ $  8 8   r9rrrc0h|]}t|Sr[)r)rArrs r7rCz(_compare_foreign_keys..s3  %,,r9c2h|]}t|S)rrrArbackend_reflects_fk_optionss r7rCz(_compare_foreign_keys..s7  2/JKKKr9c2h|]}t|Srrrs r7rCz(_compare_foreign_keys.. s7  2/JKKKr9ci|] }|j| Sr[rHrs r7rqz)_compare_foreign_keys..s666Aqua666r9ci|] }|j| Sr[rHrs r7rqz)_compare_foreign_keys..s>>>15!>>>r9c,i|]}|j |j|Srkrrs r7rqz)_compare_foreign_keys..s*qv/A/A/A/Ar9c,i|]}|j |j|Srkrrs r7rqz)_compare_foreign_keys..s#NNNa16;M;M;M;Mr9c|j|jdd|rjtjjtdd |j d |j |j r d|j znd|j dSdS)NrFz1Detected added foreign key (%s)(%s) on table %s%srM%s.ru)r|rrOrr}CreateForeignKeyOprRrrrPr"r%r r!)rS compare_tor+rrs r7_add_fkz&_compare_foreign_keys.._add_fks  - - Isx!95*    ' '&66u{CC    HHC #,-- #,---0->F)))B        r9c|j|jdd|rjtj|jtdd |j d |j |j r d|j znd|j dSdS)NrTz3Detected removed foreign key (%s)(%s) on table %s%srMrru)r|rrOrr}rZrRrrrPr"r%r r!)rSrr+rs r7 _remove_fkz)_compare_foreign_keys.._remove_fk)s  - - Isx!94    ' '$44SY??    HHE #,-- #,---0->F)))B        r9) rPraget_foreign_keysrr]rcorrect_for_autogen_foreignkeysrIrarOr)r+rrrXrrrP metadata_fks conn_fks_listconn_fksmetadata_fks_sig conn_fks_sigconn_fks_by_sigmetadata_fks_by_sigmetadata_fks_by_nameconn_fks_by_namerr removed_sigr added_sigrrs````` @@r7_compare_foreign_keysrs^3)I ,L ,,U6,BBM#'7)}Q'77##"H%*JJ, L 76666O>>-=>>>+ON<NNN      $?++667JKK**  , 1 1 1:!555%UZ066  Juj ) ) ),--88II'' #I. O + +:!111!,22  GE: & & &''r9c|jJ|jjsdS||dS|j |jdS|j=|j6|jtj||j|dS|j|jkr<|jtj||j|j|dSdS)N)rr)rGrrrr}DropTableCommentOpCreateTableCommentOp)r+rrrXrrs r7_compare_table_commentrPs   " . . .  " 4^3!n&<&D%**<*H##  " (:6         :#5 5 5##  $&!+!3          6 5r9)r+r%r,r(r-r.)r+r%r5r*r-r.)r+r%r5r*rRrSr-r.) rerIrgrIrPrr5r*r+r%r-r.)rrrr#r-r)rrrr#r-r$)rrrr#r-r!)rrrXrrr#rr#rr)r+r%rPrr-r)r+r%r'r)rrrXrrr(rr(r-r.)r+r%rr'rrrXrrrrrrrr-r.)r+r%rr'rrrXrrrrrrrr-r.)rrr+r%r-r)rr?r-r?)r+r%rr'rrrXr?rr?rrrrr-r.)rXr?rr?r-r.)r+r%rr'rrrXrrrrrrrr-r)r+r%rr'rrrXrrrrrrrr-r)r+r%rr)rrrXrrr(rr(r-r.)a __future__r contextlibloggingrtypingrrrrrr r r r r r sqlalchemyrrrrnrrrsqlalchemy.sqlrsqlalchemy.utilralembic.ddl.baserrur operationsrrrsqlalchemy.engine.reflectionrsqlalchemy.sql.elementsrrsqlalchemy.sql.schemar r!r"r#r$alembic.autogenerate.apir%alembic.ddl.implr&alembic.operations.opsr'r(r)r* getLoggerrrr8 DispatcherrMr3 dispatch_forrhrd immutabledictrrrrrrrrrcontextmanagerrrrrrrrhrrrrrrrrrrrrr[r9r7rs"""""""  ******((((((%%%%%%&&&&&&%%%%%%2666666333333222222,,,,,,::::::++++++++++++666666777777,,,,,,444444666666555555111111g!!,,,,dod+++ @ (##'''$#'TK9K9K9K9\-?D,>~!, * +)  - -    4    . EEEEEEEEP        $ 8 8 8 8 8 8 8 8 ????????&********Z '""I8I8I8#"I8X :9:9:9z (##&&&$#&R (##444$#4$ (##( ( ( $#( V(;;;;)3)3)3)3XOOOO" (##UUU$#Up (##$#8 '""t't't'#"t'n '""# # # #"# # # r9