XׯdnddlZddlZddlmZddlZddlmZddlmZm Z edddZ gd Z da Gd d eZ e Ze ejd Ze ejejejjd Ze ejjejjejjdZe ejjejjejjejjdZe ejjejjejjejjdZe ejejjejjejjdZe ejjejjejjejjdZ e ejj!ejjejj"ejjdZ#e ejj$ejjejj%ejjdZ&e ejj'ejjejj(ejjdZ)e ejjejjejjdZ*e ej+ejj,fejjdZ-dS)N) DefineModule)GenericMigration)find_object_with_nameVersionDbMssqlMigrationz Oracle Corp.z1.0)nameauthorversion)d)SQL_Latin1_General_Cp437_BINutf8_general_ciF)SQL_Latin1_General_Cp437_CS_ASr F)SQL_Latin1_General_Cp437_CI_ASr F)#SQL_Latin1_General_Pref_CP437_CI_ASr F)SQL_Latin1_General_Cp437_CI_AIr F)SQL_Latin1_General_Cp850_BINutf8_binT)SQL_Latin1_General_Cp850_CS_ASr F)SQL_Latin1_General_Cp850_CI_ASr F)#SQL_Latin1_General_Pref_CP850_CI_ASr F)SQL_Latin1_General_Cp850_CI_AIr F)SQL_1Xcompat_CP850_CI_ASr F)Latin1_General_BIN latin1_binT)SQL_Latin1_General_Cp1_CS_ASr F)SQL_Latin1_General_Cp1_CI_ASr T)!SQL_Latin1_General_Pref_CP1_CI_ASr F)SQL_Latin1_General_Cp1_CI_AIr T)SQL_AltDiction_Cp850_CS_ASr F)SQL_AltDiction_Pref_CP850_CI_ASr F)SQL_AltDiction_Cp850_CI_AIr F)!SQL_Scandinavian_Pref_Cp850_CI_ASutf8_swedish_ciF)SQL_Scandinavian_Cp850_CS_ASr"F)SQL_Scandinavian_Cp850_CI_ASr"F)SQL_AltDiction_Cp850_CI_ASr F)Latin1_General_CS_ASr F)Latin1_General_CI_ASr F)Danish_Norwegian_CS_ASutf8_danish_ciF)Finnish_Swedish_CS_ASr"F)Icelandic_CS_ASutf8_icelandic_ciF) Hungarian_BINrT)SQL_Latin1_General_Cp1250_CS_AScp1250_general_ciF)SQL_Latin1_General_Cp1250_CI_ASr/T)SQL_Czech_Cp1250_CS_AScp1250_czech_csT)SQL_Czech_Cp1250_CI_ASr2F)SQL_Hungarian_Cp1250_CS_ASr/F)SQL_Hungarian_Cp1250_CI_ASr/F)SQL_Polish_Cp1250_CS_ASsql_polish_cp1250_cs_asF)SQL_Polish_Cp1250_CI_ASsql_polish_cp1250_ci_asF)SQL_Romanian_Cp1250_CS_ASsql_romanian_cp1250_cs_asF)SQL_Romanian_Cp1250_CI_ASsql_romanian_cp1250_ci_asF)SQL_Croatian_Cp1250_CS_ASsql_croatian_cp1250_cs_asF)SQL_Croatian_Cp1250_CI_ASsql_croatian_cp1250_ci_asF)SQL_Slovak_Cp1250_CS_ASsql_slovak_cp1250_cs_asF)SQL_Slovak_Cp1250_CI_ASsql_slovak_cp1250_ci_asF)SQL_Slovenian_Cp1250_CS_ASsql_slovenian_cp1250_cs_asF)SQL_Slovenian_Cp1250_CI_ASsql_slovenian_cp1250_ci_asF)Cyrillic_General_BINcyrillic_general_binF)SQL_Latin1_General_Cp1251_CS_ASsql_latin1_general_cp1251_cs_asF)SQL_Latin1_General_Cp1251_CI_ASsql_latin1_general_cp1251_ci_asF)SQL_Ukrainian_Cp1251_CS_ASsql_ukrainian_cp1251_cs_asF)SQL_Ukrainian_Cp1251_CI_ASsql_ukrainian_cp1251_ci_asF) Greek_BIN greek_binF)SQL_Latin1_General_Cp1253_CS_ASsql_latin1_general_cp1253_cs_asF)SQL_Latin1_General_Cp1253_CI_ASsql_latin1_general_cp1253_ci_asF)SQL_MixDiction_Cp1253_CS_ASsql_mixdiction_cp1253_cs_asF)SQL_AltDiction_Cp1253_CS_ASsql_altdiction_cp1253_cs_asF)SQL_Latin1_General_Cp1253_CI_AIsql_latin1_general_cp1253_ci_aiF) Turkish_BIN turkish_binF)SQL_Latin1_General_Cp1254_CS_ASsql_latin1_general_cp1254_cs_asF)SQL_Latin1_General_Cp1254_CI_ASsql_latin1_general_cp1254_ci_asF) Hebrew_BIN hebrew_binF)SQL_Latin1_General_Cp1255_CS_ASsql_latin1_general_cp1255_cs_asF)SQL_Latin1_General_Cp1255_CI_ASsql_latin1_general_cp1255_ci_asF) Arabic_BIN arabic_binF)SQL_Latin1_General_Cp1256_CS_ASsql_latin1_general_cp1256_cs_asF)SQL_Latin1_General_Cp1256_CI_ASsql_latin1_general_cp1256_ci_asF)SQL_Latin1_General_Cp1257_CS_ASsql_latin1_general_cp1257_cs_asF)SQL_Latin1_General_Cp1257_CI_ASsql_latin1_general_cp1257_ci_asF)SQL_Estonian_Cp1257_CS_ASsql_estonian_cp1257_cs_asF)SQL_Estonian_Cp1257_CI_ASsql_estonian_cp1257_ci_asF)SQL_Latvian_Cp1257_CS_ASsql_latvian_cp1257_cs_asF)SQL_Latvian_Cp1257_CI_ASsql_latvian_cp1257_ci_asF)SQL_Lithuanian_Cp1257_CS_ASsql_lithuanian_cp1257_cs_asF)SQL_Lithuanian_Cp1257_CI_ASsql_lithuanian_cp1257_ci_asF)SQL_Danish_Pref_Cp1_CI_ASsql_danish_pref_cp1_ci_asF)SQL_SwedishPhone_Pref_Cp1_CI_ASsql_swedishphone_pref_cp1_ci_asF)SQL_SwedishStd_Pref_Cp1_CI_ASsql_swedishstd_pref_cp1_ci_asF)SQL_Icelandic_Pref_Cp1_CI_ASsql_icelandic_pref_cp1_ci_asF) Japanese_BIN japanese_binF)Japanese_CI_ASjapanese_ci_asF)Korean_Wansung_BINkorean_wansung_binF)Korean_Wansung_CI_ASkorean_wansung_ci_asF)Chinese_Taiwan_Stroke_BINchinese_taiwan_stroke_binF)Chinese_Taiwan_Stroke_CI_ASchinese_taiwan_stroke_ci_asF)Chinese_PRC_BINchinese_prc_binF)Chinese_PRC_CI_ASchinese_prc_ci_asF)Japanese_CS_ASjapanese_cs_asF)Korean_Wansung_CS_ASkorean_wansung_cs_asF)Chinese_Taiwan_Stroke_CS_ASchinese_taiwan_stroke_cs_asF)Chinese_PRC_CS_ASchinese_prc_cs_asF)Thai_BINthai_binF) Thai_CI_AS thai_ci_asF) Thai_CS_AS thai_cs_asF)SQL_EBCDIC037_CP1_CS_ASsql_ebcdic037_cp1_cs_asF)SQL_EBCDIC273_CP1_CS_ASsql_ebcdic273_cp1_cs_asF)SQL_EBCDIC277_CP1_CS_ASsql_ebcdic277_cp1_cs_asF)SQL_EBCDIC278_CP1_CS_ASsql_ebcdic278_cp1_cs_asF)SQL_EBCDIC280_CP1_CS_ASsql_ebcdic280_cp1_cs_asF)SQL_EBCDIC284_CP1_CS_ASsql_ebcdic284_cp1_cs_asF)SQL_EBCDIC285_CP1_CS_ASsql_ebcdic285_cp1_cs_asF)SQL_EBCDIC297_CP1_CS_ASsql_ebcdic297_cp1_cs_asFcJeZdZd dZfdZdZdZdZdZdZ d Z xZ S) MSSQLMigrationFctjdtj}|}d}|dr|ds*|dr|dr |dd}|sF||s1|tjdd }d |d |d }t|d kr7tdz a |}|ddttz}|d|d|dz }|rH|rFtj }d|_||_|j||S)Nz ^[^/\\.]+$"[]z/\.___zySchema and table names cannot contain "/", "\", ".", or characters that are not permitted in file names. The identifier [z] was changed to `z`. @>z Identifier `z` is too long, truncated to ``)recompileU startswithendswithmatch translatestring maketranslentruncated_identifier_serialstrgrtclasses GrtLogEntry entryTyperentriesappend) self mssql_namelog dots_allowedmysql_valid_regex mysql_name log_messageoriginal_mysql_nameentrys $..\modules\db_mssql_migration_grt.pymigrateIdentifierz MSSQLMigration.migrateIdentifiersJ}bd;;   " "3 ' ' *J,?,?,D,D *  " "3 ' ' *,6,?,?,D,D *#AbD)J @$5$;$;J$G$G @#--f.>vu.M.MNNJJgqgqgqs}s}s}K z??R   '1 , '", #CRC-H)I)IIJ KObObObdndndno oK  &; &K++--EEO$EJ K  u % % %ctt||||}|||jj|jj||\|_|_|SN)superrmigrateTableToMySQLmigrateCharsetCollationownerdefaultCharacterSetNamedefaultCollationName)rstate sourceTable targetSchema targetTable __class__s rrz"MSSQLMigration.migrateTableToMySQLsND11EEe[Zfgg QUQmQmnsvAvGv_alaraGITVaRbRbM +[-Mrc |}|jr|jj}|dkr |dkrd}nV|dvrR|jdkrGd}t|jjd|_d|_|d||d|d|d |rP|d s;||kr5 t|n$#d }|d ||d |zYnxYw|S)N TIMESTAMPz getdate()CURRENT_TIMESTAMP)DATETIME SMALLDATETIMErrzDefault value is z, so type was changed from z to TIMESTAMP'rrz!Default value %s is not supported) simpleTyper defaultValuer targetCatalogsimpleDatatypeslengthaddMigrationLogEntryrfloat)rr default_value source_column target_columntarget_default_valuesource_datatypes rmigrateColumnDefaultValuez(MSSQLMigration.migrateColumnDefaultValuesL,  # S+6;O+-- K//+>( $AAA -<<+>(0EUEXEhju/v/vM,+-M(..q-anananpppABBB S]%=%=c%B%B SG[_lGlGlS-((((S+-(..q-AMQSSSSS$#s B))C c N |j}td|jD}|j}|s7|jr0|jj}|j|jj|rtj |j }|j }tjdd|j d|d|jdd} |dvr|d d d rd |_|d vr>|jd krd} nd |jcxkrdkrnnd} n|j jd krdnd} n|dvrd} n|dvrd |jcxkrdkrnnd} nd} n|dvr |} d |_n|dkr.|} d |_d|jvr|jdnu|dkr2d} d|_|d ||d|d| d|jdn=|dkr2d} d|_|d ||d|d| d|jdn|d vrC|jd kr4d!} |jd krd"} n|jd#krd$} n |jd%krd&} d |_nd'} n|d(krd)} n|d)kr|jd*kr d+} d |_n|d,vr&d'} |jj|_|jj|_nn|d-krd.} nd|d/kr|jd krd.} nO|d0vrAd1} d |_|d d2d3r|d4kr|jd#kr|jnd2|_n |d5vr |jrd6nd/} n|d7kr d7} d |_n|d8kr:d8} d |_|d d2d3r|jd#kr|jnd2|_n|d9kr"d} d:|_|d ||d;n|dvrd?} nZ|d@kr"d} dA|_|d:||dBn2|dCkr*d} |d:||d|d| d|jdn|} | |vr|| |_nPtjddDdE| dF|d|dG||dH|j dI|jj dJ|dKdLSdMS|dG||dN|j dI|jj dO|jddLS)PNc3LK|]}|j|fV dSr)rupper).0datatypes r z:MSSQLMigration.migrateDatatypeForColumn..s5 s s8=#6#6#8#8("C s s s s s sr MigrationzMigrating source column 'z ' - type: z , length:  r)NCHARNVARCHARrutf8mb4VARCHARr rLONGTEXTrTEXTrNTEXTCHARr r)BIGINTINTSMALLINTTINYINTUNSIGNEDUNIQUEIDENTIFIERrzSource column type z was migrated to ()SYSNAMEDECIMALNUMERICrr MEDIUMINT rr#REALFLOATDOUBLE)MONEY SMALLMONEYIMAGELONGBLOB VARBINARY)rr DATETIME2DATETIMEOFFSETrr)r ROWVERSIONBINARYDATETIMEBITrz1Source column type BIT was migrated to TINYINT(1)XMLz+Source column type XML was migrated to TEXTGEOMETRY GEOGRAPHYr< HIERARCHYIDz;Source column type HIERARCHYID was migrated to VARCHAR(255) SQL_VARIANTz MSSQL migrateTableColumnsToMySQLzCan't find datatype z for type zCould not migrate column "z" in "z": Unknown datatype "rFTz"Could not migrate type of column "z" ()rdictrruserType actualTypeflagsextendrfromgrtr rrr log_debug3r#is_supported_mysql_version_at_leastcharacterSetName majorNumber precisionrrscalenumericPrecision numericScale isNotNull log_warningrformattedRawType) rrrrrmysql_simpleTypes source_typetarget_versionrtarget_datatypes rmigrateDatatypeForColumnz'MSSQLMigration.migrateDatatypeForColumns+  s sTaTq s s sss#.  E}5 E'0;K   & &}'='C D D D ~ $_]-BCCN).4466O N;;cpcucucuxGxGxGHUH\H\H\)] ^ ^ ^ O"777N&K ## G++", K//M4HB4N4N", $```",') $!EEa!LLiQ`dsQsQsFSF]`aFaFa=+B+BghM(!$???.;.E"V((; F**"(*, '' F**"(*, '!EEa!LLlIVI`cdIdIdm.E.EjkM+ E))"+'( $**1m]IKKKK E))"(**1m]CEEEE $===", M11"+'* $**1m]UWWWW M11"(**1m]]JY//[j[j[jlymAmAmABCCCC#2"333+<_+M (( -O-O|K|K|KM\M\M\R]^^^**1m]]VcVhVhVhjwj}kCkCkCETETETUWWWu4  & &q-LYL^L^L^`m`s`x`x`x{H{Y{Y{YZ \ \ \5rcx|jD]0}|jD]$}|jD]}d}d}||}|rt j||}|r|r|jj} |dvr*|dkr#|j dks |j dkrd}nd|j z}ny|dvr |d krd }nl|d vr|d kr d |j z}nW|dkrd}nN|dkrd}nE|dvr|j dkr d| dkrdn| z}n(|dkrd}n|dvrd}n|dkrd}n|dkrd}n|dvrd}|rd |z|j j d!|jz<&2|S)"z] Create datatype cast expression for target column based on source datatype. NrrirzCAST(? as NVARCHAR(MAX))zCAST(? as NVARCHAR(%d))rrzCAST(? as NTEXT)rrzCAST(? as NCHAR(%d))rzCAST(? as VARCHAR(64))r zCAST(? as VARCHAR(128))r"rz CAST(? as %s)r&rr:zCAST(? as NVARCHAR(max))r;z ?.STAsText()r>zCAST(? as VARCHAR(max))r@)r6r0rr5zCONVERT(VARBINARY(MAX), ?, 0)z%s as ?zcolumnTypeCastExpression:%s) schematatablescolumnslookupSourceObjectrgetColumnDataTyperrrrrMr customData) rrtarget_catalogrrrtype_cast_expressionrrrVs rmigrateUpdateForChangesz&MSSQLMigration.migrateUpdateForChangesZsG+3, R, RL+2+ R+ R %0%8*R*RM,0(&*O$)$<$<]$K$KM$b*:*LTS`*a*a$"R"R*7*B*G*M*M*O*O*.EEE.);;#0#7$#>#>-BVZ\B\B\;U$8$8;TWdWk;k$8,0AAA.&887I 4,0AAA.&887MP]Pd7d 4,0BBB3K00, 993L00,0FFF,2a777FSbfqSqSq%%xG8H 4,553M00,0III3A00, ==3L00, ==3M00,0bbb3R0/Rqz~RrRM/:;X[h[m;mnU*R+ RZrcH|r|d||d|zdS||fS)Nrz(Collation %s migrated to utf8_general_ci)rr )r)rrcharset collation source_object target_objects rrz&MSSQLMigration.migrateCharsetCollationsD  )  & &q->)L N N N(( !!rc~tj||||}|r#|jr|jj}|dvr |j|_|S)N)rrrr)rmigrateTableColumnToMySQLrridentity autoIncrement)rrrrrrs rrhz(MSSQLMigration.migrateTableColumnToMySQLsY(B4P]_jkk  I' I"/":"?"&NNN2?2HM/ rc4tj||||}|Sr)rmigrateTableForeignKeyToMySQL)rr source_fkr target_fks rrlz,MSSQLMigration.migrateTableForeignKeyToMySQLs $B4PY[fgg r)F) __name__ __module__ __qualname__rrrrWrarrhrl __classcell__)rs@rrrs: $$$ B BBrcltjtjtjjj}|Sr)rListOBJECTrdb_migration_MigrationParameter__grtclassname__)rlists rgetMigrationOptionsrs$ 8CJ K \ ] ]D Kr).rrwbrrdb_generic_migration_grtrworkbench.utilsrr ModuleInfoMSSQL_COLLATION_MAPrrrxexportSTRINGrvr GrtLogObjectr db_Catalogdb_migration_Migrationrz db_Schemar}db_Tablerrrdb_mysql_ForeignKey db_ForeignKeyrldb_mysql_Trigger db_Triggerr db_mysql_Viewdb_Viewrdb_mysql_Routine db_RoutinerraLISTrrrurrrs2,  555555:::::::: \ 2NTY Z Z Z eeeN ccccc%cccN >   3: 3:sz3;+CDD11ED1 3;)3;+Ms{Oeff99gf9 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