XׯdxddlmZddlmZddlZdZdZdZeddd Zda ia Gd d e Z e Z eejd Zeejejejjd ZeejjejjejjdZeejjejjejjejjdZeejjejjejjejjdZeejejjejjejjdZeejjejjejjejjdZeejj ejjejj!ejjdZ"eejj#ejjejj$ejjdZ%eejj&ejjejj'ejjdZ(eejjejjejjdZ)eej*ejj+fejjdZ,dS)) DefineModule)find_object_with_old_nameNgUUUUUo@iDbGenericMigrationz Oracle Corp.z1.0)nameauthorversionceZdZdZdZdZddZdZdZdZ d Z d Z d Z d Z d ZdZdZdZdZdZdZdZdZdZdZdS)GenericMigrationc|jD]}t|jt|krt|jjt|jkra|jjj|jjkrB|jj|jkr |jcSdS)z\Finds the matching target object for a given source object, by searching in the migrationLogN) migrationLogtype logObjectownerrlower refObject)selfstate sourceObjectlogs &..\modules\db_generic_migration_grt.pyfindMatchingTargetObjectz)GenericMigration.findMatchingTargetObject&s% % %CCM""d<&8&888 +,,\5G0H0HHH=&+|/A/FFF=%++--1B1H1H1J1JJJ}$$$tc*|jr|jD]}|j|krR|jdkr|jdkr|j|jksX|jdkr|jdkr|j|jks|cSdSNr)genericDatatypeMappingssourceDatatypeNameupperlengthConditionFromlengthlengthConditionTo)rrcolumndatatypetypemaps rfindDatatypeMappingz$GenericMigration.findDatatypeMapping0s  ( # 8 # #-33559I9III2Q666=1;L;LV]Vqu{vCWCWC 01449J9JT[Tmqwq~T~T~ "NNN J trcbd|z|jvs |d|jjd|j|jvrdSdS)Nz%s:*:.FT) ignoreListrr)rrotypeobjects r shouldMigratezGenericMigration.shouldMigrate;sI E>U- - -uuuflFWFWFWY_YdYd1einiy1y1y5trFc |}t|dkrxtdz a|ddttz}|rMtj}d|_d|d|d|_|j ||S)N@>z Identifier `z$` is too long and was truncated to ``) lentruncated_identifier_serialstrgrtclasses GrtLogEntry entryTyperentriesappend)rrr dots_allowed mysql_nameentrys rmigrateIdentifierz"GenericMigration.migrateIdentifier@s z??R   '1 , '#CRC-H)I)IIJ * //11"#X\X\X\^h^h^hi  ""5)))rc \|j}td|jD}|j}|s7|jr0|jj}|j|jj|r|j}|}| |||} | r| j |vrGtj dd| j d|d|d||d| j d|d d S|| j |_| jd kr | j|_| jd kr | j|_| jd kr | j|_| jd kr#d |jvr|jd no| |vr || |_n9tj dd|d|d|d||d|zd SdS|d||d|jd|jjd|jdd S)Nc3LK|]}|j|fV dSN)rr).0r"s r z.Qs5 s s8=#6#6#8#8("C s s s s s srmigrateTableColumnsToMySQLzCan't find mapped datatype z for type  zUnknown mapped datatype "z" for source type "z" (check type mapping table)FrUNSIGNEDzCan't find datatype zUnknown datatype "%s"Tz"Could not migrate type of column "z" in "z" ()) targetCatalogdictsimpleDatatypes simpleTypeuserType actualTypeflagsextendrr$targetDatatypeNamerr4 log_warningaddMigrationLogEntryrscale precision isUnsignedr9rformattedRawType) rr source_column target_columnrImysql_simpleTypes source_typesource_datatypetarget_datatyper#s rmigrateDatatypeForColumnz)GenericMigration.migrateDatatypeForColumnNs+  s sTaTq s s sss#.  E}5 E'0;K   & &}'='C D D D & ).O-O..um_UUG -3355=NNNO$@$@sztNtNtNP_P_P_C`aaa..q-jqkEkEkEGVGVGVWYYY 5+B&&+2>M(=2%%*1-M'$r)).5.?M+%))!)<<<%+22:>>>!&&((,===+<_=R=R=T=T+U (( < | j<| j D]G} |!|d | s|"|| } |#|| | Hmtjd d|S)Nrz%d.%d.%dTz Migrating...g?绽|=r.zMigrating schema %s...z#Finalizing foreign key migration...tables?zMigration finished)$r4r5db_mysql_CatalogrSr=roldNametargetConnectiondriverrrKrPrI targetVersion GrtVersion majorNumber minorNumber releaseNumber buildNumberrrootwbinfo send_progressschematabegin_progress_stepr1 migrateSchemar9end_progress_stepset key_namesrrr+rmigrateTableToMySQL2ndPass) rrsource_catalogrcr targetRdbmsaTargetVersionrxi sourceSchema targetSchema sourceTable targetTables rmigrateCatalogzGenericMigration.migrateCatalogs5577((NNBOO"44^5H#NN!/!4,39 &--k.IJJJ,   3"0NK2244M"0M |J|VXfXrtBtPR`Rl|l xM %}'@-B]_l_x!/!4M %2N " "K2244M"0M {~|D|G|L|T|`bebjbmbrbzbFHKHPHSHXH`Hnpspxp{p@pHpT|T xM %}'@-B]_l_x!+}/H-JcerfA/B"BM %2N " 9  c> 2 2 2A . 7   'A^5L1M1Me1S(TVY\]^_\_V`dghvheAeABGeGWHIII!#'S1H-I-I%-O"PRjmym~R~#11%~VV A"+22<@@@%'''Q  c#H I I I!/ 7 U U /2uu ,+,#/#6UUK--eX{KK! "&"?"?{"S"SK33E; TTTT U  c#7 8 8 8rc tj}||_|d||d}|||j|j||\|_|_||j ||_ |j |_ |j |_ tj dd|j z tj dd||||tj|S)Nrrog?z'Migrating schema contents for schema %sTrs)r4r5db_mysql_SchemarrSrmdefaultCharacterSetNamedefaultCollationNamer=rrucommentrrmigrateSchemaContentsr)rrrrIrrs rrzGenericMigration.migrateSchemas{2244 * ((L,KKRVRnRnotwCw[]i]~@LNZS[S[O ,l.O 22<3DcJJ +0 +3  #Hz:GenericMigration.migrateSchemaContents..s3lllASASTY[cejAkAklulllrcBg|]}d||S)viewsr)rAviewrrs rrz:GenericMigration.migrateSchemaContents..s3gggd>P>PQVX_ae>f>fgtgggrcBg|]}d||S)routinesr)rAroutinerrs rrz:GenericMigration.migrateSchemaContents..s3vvv7tGYGYZ_akmtGuGuvwvvvrrqrprrzTable r'z migratedr.rzView rzRoutine ) r1rrrrr+migrateTableToMySQLr9r4rrmigrateViewToMySQLmigrateRoutineToMySQL) rrrrtotalr source_table target_table source_view target_viewsource_routinetarget_routines `` rrz&GenericMigration.migrateSchemaContentssxlllll,*=lllmmggggg (:ggghhivvvvvl.Cvvvwwx (/  L!!%<@@ #77|\ZZ = '..|<<<!!E''\EVEVEVXdXiXiXi+jkkkQ'-  K!!%+>> "55e[,WW ; &--k:::!!E''LDUDUDUWbWgWgWg+hiiiQ*3  N!!%^DD !%!;!;E>S_!`!`!A )00@@@!!E''|GXGXGXZhZmZmZm+noooQ   rctj}|d||d}||_||j||_|j|_|j|_|j |_ t}|j D]V}| |||}|r;|j ||jr||jWt!|dkr5|jdkr*|j D] } d| _ ||_|jD]5} ||| |} | r|j | 6|||||jr}t!|jj dkr`d} t/|jj D]"\} } | jjr| | } d| j_#| |jj | d|jr$td|jj D}ng}|j D]9} | jr0| j|vr'd| _|d||d| jz:|jD]L}||d|r3||||}|r|j |M|S)NrroTr.c3.K|]}|jjVdSr@)referencedColumnr)rAr!s rrBz7GenericMigration.migrateTableToMySQL..5s(hhvf5:hhhhhhrzdAutoincrement unset for column %s: Autoincrement for non primary key columns is not allowed in MySQLtriggers)r4r5db_mysql_TablerSrr=rrurisStubrcolumnsmigrateTableColumnToMySQLr9 collationNameaddr1rpopindicesmigrateTableIndexToMySQLmigrateTablePrimaryKeyToMySQL primaryKey enumerater autoIncrementreorderrr+migrateTriggerToMySQL)rrrrrrcolumn_collations sourceColumn targetColumnr! sourceIndex targetIndexfirst_autoinc_columnidxpk_cols sourceTrigger targetTriggers rrz$GenericMigration.migrateTableToMySQLs`k0022 ((KbII( 11+2BCHH ). )1 (/ 8 C #  + 3 J J #==e\S^__ J'..|<<<#1J)--l.HIII$%%**{/OSU/U/U)1..F+-F((3D3H3H3J3J 0 +2 < < ";;E;P[\\ <'..{;;;  . .uk; O O O% T#k.D.L*M*MPQ*Q*Q'+$#,[-C-K#L#LFFKC.<F/73600DEF3A(3*2::;OQRSSS% hhI_Ighhhhh%- J J'JFKw,F,F+,F(..q+{z~D~IIJJJ"-!5 C C %%eZGGC$($>$>umU`$a$aM$C#,33MBBBrc|jD]5}||||}|r|j|6dSr) foreignKeysmigrateTableForeignKeyToMySQLr9)rrrrsourceFKtargetFKs rrz+GenericMigration.migrateTableToMySQL2ndPassHsP#/ 9 9H99%;WWH 9'..x888qrch|jro|jjdkrY|jdkrP|jjD]E}||krdS|jr/|jjdkr|d||dd|_BdSdSdSt jd|jd|jjjd|jjdS) N TIMESTAMPCURRENT_TIMESTAMPr.zmDEFAULT CURRENT_TIMESTAMP can only be used in the first TIMESTAMP column of the table. Default value removed.roz%Could not migrate datatype of column z in table r')rLr defaultValuerrrSr4 send_warning)rrrXrYr!s r"secondary_default_value_validationz3GenericMigration.secondary_default_value_validationOs6  # h', ;; @Z^q@q@q+1988F..(8V->-C{-R-R221m]LMMM68 2<;@q@q88   YfYkYkYkmznAnGnLnLnLN[NaNfNfg h h h h hrcF|jj}tj}||_|d||d}||j|d|_|j|_|jD]%}||jvr|j |&|j |_ |j |_ |j |_ |j |_ |j|_|j|_|||j|j||\|_|_|j|_||||s |||j|||_|jj|jj|jjfdkr|||||S)NrroTr:)r)rr4r5db_mysql_ColumnrSr=rrurOr9defaultValueIsNull isNotNullrrTrUdatatypeExplicitParamsrmcharacterSetNamerrr^rgrrrzr{r|r)rrrXrrcrYrflags rrz*GenericMigration.migrateTableColumnToMySQL`s$*0 3355 ) ((M="MM!33M4FZ^3__  - 2 !' 1 1D=...#**4000+8+K ("/"9 ,3 +1 "/"9 /{?RT_TjTo%p%pK "qrc |j}t|jdkst|jdkr"|d|dd|jzdSt j}|d||d}||_||j|d|_|j|_ |j |_ |j |_ |j |_ |j |_ |j|_|jD]}t|j|jj}|s1|d||d|jd|jd |jd t j} || _|| _|j| _|j| _|jr|jjjd vr|jdkrt-|jt.nt.} | jdkrt-| | j| _n^| jdkr9|jdkr| |jkr| | _n5|jjjd vr| | _nt-| |j| _| j|jkr0|d ||d|jd|jd| j|j| _|j| _|j| |S)NrrEzrThe migration of table %s indices was attempted but either the source or the target table has no columns attributeroTr The column "z" is part of source table "z " index "z1" but there is no such column in the target table)stringtextblob)rrr.z'Truncated key column length for column z from z to )rr1rrSrr4r5db_mysql_Indexr=ru isPrimary deferabilityunique indexTyperrrdb_mysql_IndexColumn columnLengthrLgrouprmin&MYSQL_MAX_INDEX_KEY_LENGTH_INNODB_UTF8descendr9) rr source_indexrr target_indexrsource_index_columnreferenced_index_coltarget_index_columnprefix_length_limits rrz)GenericMigration.migrateTableIndexToMySQLs"( {" # #q ( (C 0C,D,D,I,I  & &q,ILWL\\ ] ] ]4{1133 ((L,KK(  22<3DcX\2]] +0 !-!7 $0$= !*1 !-!7 +3 #/#7# =# = #<[=PReRvR{#|#| ' D**1lLLDWD\D\D\^i^n^n^np|pApApABDDD#&+"B"B"D"D (4  %3G  0':'?  $/B/O  ,#. v3G3R3X3]a{3{3{sGsNQRsRsRc*>*EGm&n&n&nX~#&3a777:;NPcPp7q7q'44(5::+2Q66;NQeQl;l;l;N+88.8>CGWWW;N+87:;NPdPk7l7l'4&37J7WWW..q, WjWoWoWorErRrRrRTgTtTtuvvv+>*E  '*=*E  '  ' '(; < < < <rc 6 |j}|j}t|jdkst|jdkr"|d|dd|jzdS|jdkrdSt j}||_|d||d}|j}|t|jvrOd} |jd| zz}|t|jvrn| dz } (|d||d|jd |d | ||d |_t|j ||j|_ |j d d |_ |jd d |_|j|_d|_|j|_|j|_|j|_|j|_ |||jj} | st/dnO#t0$rB} |d||d t3| d|jjd |cYd} ~ Sd} ~ wwxYw |||j} | st/d| |_nJ#t0$r=} |d||d t3| d|jd |cYd} ~ Sd} ~ wwxYwd} |jD]} |||}|s6t/d| |jdd d|jd |j|l#t0$r=} |d||d t3| d|jd d} Yd} ~ d} ~ wwxYw| r|Sd} |jD]} |||}|s;t/d| |jdd d|jjd |j|q#t0$r=} |d||dt3| d|jd d} Yd} ~ d} ~ wwxYw| r|S|jr |||j|_|S)NrrEzwThe migration of table %s foreign keys was attempted but either the source or the target table has no columns attributer.roTz_%dz!The foreign key constraint name "z" is duplicated. Changed to ""r_ z=The referenced schema does not refer to a valid schema objectz0" while trying to get the schema for the table "z;The referenced table does not refer to a valid table objectz@" while trying to get the referenced table for the foreign key "Frz" was not found in table "z>" while trying to get the target columns for the foreign key "z!migrateTableForeignKeysToMySQL: "zI" while trying to get the referenced target columns for the foreign key ")rr1rrSr modelOnlyr4r5db_mysql_ForeignKeyrr=rru deleteRulereplace updateRuler mandatoryreferencedMandatorymanyrrreferencedTable ValueError Exceptionr3r9referencedColumnsindex)rr source_fkrrr target_fkrfk_namerreferenced_schemaerrreferenced_table column_errorssource_fk_column target_fk_cols rrz.GenericMigration.migrateTableForeignKeyToMySQLso "( {" # #q ( (C 0C,D,D,I,I  & &q)TNQ\Qaa b b b4  ! # #4K3355 % ((Iy"EE. i 12 2 2C #.53;6)L,=">>>q    & &q)YYYbYgYgYgipipipq s s s//4/PP ,#$((111%N (3;;CEE (3;;CEE !*!7  '1 (1(E %" %-   $ = =eYE^Ed e e $ b !`aaa b     & &q)YYTWX[T\T\T\T\^g^w^|^|^|} @ @ @         #<sJJJ 5577, ""1nnbIII C CA NAw~q'A'A B B B B&'#rN)F)__name__ __module__ __qualname__rr$r+r=r^r`rdrgrmrrrrrrrrrrrrrrbrrr r #sv       333jAAA  """666r$BDDDNhhh"D777t^^^B           rr cdS)NGenericrbrbrrgetTargetDBMSNamer+Ms 9rc8t||Sr@)instancer=)rrs rr=r=Qs  % %dC 0 00rc8t||Sr@)r-r)rrs rrrVs  " "5. 9 99rc:t|||Sr@)r-r)rrrIs rrr[s  ! !%} E EErc:t|||Sr@)r-r)rrr"s rrr`s  ' '{M J JJrc:t|||Sr@)r-r)rrrs rrres  . .uk; O OOrc:t|||Sr@)r-r)rrrs rrrjs  1 1%K P PPrc:t|||Sr@)r-r)rrrs rrros  ) )% N NNrc:t|||Sr@)r-r)rrr"s rrrts  & &uk= I IIrc:t|||Sr@)r-r)rrr"s rrrys  ) )% O OOrc8t||Sr@)r-rd)rrcs rrdrd~s  + +E> B BBrcltjtjtjjj}|Sr@)r4ListOBJECTr5db_migration_MigrationParameter__grtclassname__)rlists rgetMigrationOptionsr=s" 8CJ K \ ] ]D Kr)-rrworkbench.utilsrr4r(MYSQL_MAX_INDEX_KEY_LENGTH_INNODB_LATIN1%MYSQL_MAX_INDEX_KEY_LENGTH_NDBCLUSTER ModuleInfor2rr*r r-exportSTRINGr+r5 GrtLogObjectr= db_Catalogdb_migration_Migrationr db_Schemardb_TablerINTrr db_ForeignKeyrr db_Triggerrr!db_Viewrr% db_RoutinerrdLISTr:r=rbrrrOs,555555 ).&+.(()% \ 4nV[ \ \ \   eeeeeveeeP     3: 3:sz3;+CDD11ED1 3;)3;+Ms{Oeff::gf: 3;(#+*LckNcehepe{||FF}|F 3;')KS[MacfcncxyyKKzyK 37CK> @TVYVaVjkkPPlkP 3;2CK4VX[XcXqsvs~tHIIQQIIQ 3;/1SUXU`UkmpmxnBCCOOCCO 3;,ck.PRUR]Regjgrg|}}JJ~}J 3;/1SUXU`UkmpmxnCDDPPDDP 3;)3;+Ms{OeffCCgfC CHckIJCKLnoopor