MigrationMaxdb.java
上传用户:cccombo
上传日期:2021-01-31
资源大小:16445k
文件大小:53k
源码类别:

MySQL数据库

开发平台:

SQL

  1. package com.mysql.grt.modules;
  2. import com.mysql.grt.*;
  3. import com.mysql.grt.db.SimpleDatatypeList;
  4. import com.mysql.grt.db.migration.*;
  5. import com.mysql.grt.db.maxdb.*;
  6. /**
  7.  * GRT Migration Class for Maxdb 7.5/7.6
  8.  * 
  9.  * @author Mike
  10.  * @version 1.0, 01/11/05
  11.  * 
  12.  */
  13. public class MigrationMaxdb extends MigrationGeneric {
  14. /**
  15.  * Sequential number added to FK names to ensure their uniqueness
  16.  * 
  17.  */
  18. private int fkSeqNum = 0;
  19. /**
  20.  * Static function to return information about this class to the GRT
  21.  * environment
  22.  * 
  23.  * @return returns a GRT XML string containing the infos about this class
  24.  */
  25. public static String getModuleInfo() {
  26. return Grt.getModuleInfoXml(MigrationMaxdb.class, "MigrationGeneric");
  27. }
  28. /**
  29.  * Collects information about the migration methods to let the user choose
  30.  * which one to take
  31.  * 
  32.  * @return returns a Method with predefined migration parameters
  33.  */
  34. public static MethodList migrationMethods() {
  35. MethodList methods = MigrationGeneric.migrationMethods();
  36. // add methods to methodlist
  37. MigrationMaxdb mig = new MigrationMaxdb();
  38. methods.add(mig.getMigrateSchemaToMysqlInfo());
  39. methods.add(mig.getMigrateTableToMysqlInfo());
  40. methods.add(mig.getMigrateColumnToMysqlInfo());
  41. methods.add(mig.getMigrateForeignKeyToMysqlInfo());
  42. methods.add(mig.getMigrateViewToMysqlInfo());
  43. methods.add(mig.getMigrateRoutineToMysqlInfo());
  44. methods.add(mig.getMigrateSynonymToMysql());
  45. methods.add(mig.getMigrateTriggerToMysql());
  46. return methods;
  47. }
  48. /**
  49.  * Performs a migration based on a Migration object
  50.  * 
  51.  * @param migObj
  52.  *            migration object to migrate
  53.  * @param targetPackageName
  54.  *            name of the package that should be used to generate the target
  55.  *            objects, e.g. db.mysql
  56.  */
  57. public static void migrate(com.mysql.grt.db.migration.Migration migObj,
  58. com.mysql.grt.db.mgmt.Rdbms targetRdbms,
  59. com.mysql.grt.db.Version version) throws Exception {
  60. Grt.getInstance().addMsg("Starting MaxDB migration...");
  61. new MigrationMaxdb().migrateCatalog(migObj, targetRdbms, version);
  62. }
  63. /**
  64.  * Performs a data transfer from the given source catalog to the target
  65.  * catalog
  66.  * 
  67.  * @param sourceJdbcDriver
  68.  *            class name of the source jdbc driver
  69.  * @param sourceJdbcConnectionString
  70.  *            jdbc connection string to the source database
  71.  * @param sourceCatalog
  72.  *            the source catalog
  73.  * @param targetJdbcDriver
  74.  *            class name of the target jdbc driver
  75.  * @param targetJdbcConnectionString
  76.  *            jdbc connection string to the target database
  77.  * @param targetCatalog
  78.  *            the target catalog
  79.  * @param params
  80.  *            parameters that define how the migration is performed
  81.  */
  82. public static void dataBulkTransfer(
  83. com.mysql.grt.db.mgmt.Connection sourceDbConn,
  84. Catalog sourceCatalog,
  85. com.mysql.grt.db.mgmt.Connection targetDbConn,
  86. com.mysql.grt.db.Catalog targetCatalog, GrtStringHashMap params,
  87. com.mysql.grt.base.ObjectLogList logList) throws Exception {
  88. new MigrationMaxdb().doDataBulkTransfer(sourceDbConn, sourceCatalog,
  89. targetDbConn, targetCatalog, params, logList);
  90. }
  91. /**
  92.  * migrates the name of an identifier
  93.  * 
  94.  * @param name
  95.  *            the source name of the identifier
  96.  * @return the migrated identifier name
  97.  */
  98. protected String migrateIdentifier(String name) {
  99. return name.toLowerCase();
  100. }
  101. /**
  102.  * migrates the sourceSchema and stores the targetCatalog in the global
  103.  * migration object
  104.  * 
  105.  * @param migObj
  106.  *            migration object to migrate
  107.  * @param targetPackageName
  108.  *            name of the package that should be used to generate the target
  109.  *            objects, e.g. db.mysql
  110.  * @param sourceSchema
  111.  *            the source schema that should be migrated
  112.  * 
  113.  */
  114. protected com.mysql.grt.db.mysql.Schema migrateSchemaToMysql(
  115. com.mysql.grt.db.migration.Migration migObj, Schema sourceSchema,
  116. GrtStringHashMap migrationParams, GrtObject parent) {
  117. // call super migrate function to do basic migration
  118. com.mysql.grt.db.mysql.Schema targetSchema = super
  119. .migrateSchemaToMysql(migObj, sourceSchema, migrationParams,
  120. parent);
  121. for (int i = 0; i < sourceSchema.getSynonyms().size(); i++) {
  122. Synonym sourceSynonym = (Synonym)sourceSchema.getSynonyms().get(i);
  123. Grt.getInstance().addProgress(
  124. "Migrating synonym " + sourceSynonym.getName(),
  125. (i * 100) / sourceSchema.getSynonyms().size());
  126. if (Grt.getInstance().flushMessages() != 0) {
  127. Grt.getInstance().addMsg("Migration canceled by user.");
  128. return targetSchema;
  129. }
  130. com.mysql.grt.db.mysql.Synonym targetSynonym = (com.mysql.grt.db.mysql.Synonym) migUtils.migrateObject(this, migObj,
  131. sourceSynonym, targetSchema);
  132. if (targetSynonym != null)
  133. targetSchema.getSynonyms().add(targetSynonym);
  134. }
  135. return targetSchema;
  136. }
  137. /**
  138.  * Migrates an MaxDB table to a MySQL table
  139.  * 
  140.  * @param sourceTable
  141.  *            the object to migrate
  142.  * @param migrationParams
  143.  *            parameters used to define the target object
  144.  * 
  145.  * @return returns MySQL table object
  146.  */
  147. protected com.mysql.grt.db.mysql.Table migrateTableToMysql(
  148. com.mysql.grt.db.migration.Migration migObj, Table sourceTable,
  149. GrtStringHashMap migrationParams, GrtObject parent) {
  150. String comment = "";
  151. // call migration method from the super class
  152. com.mysql.grt.db.mysql.Table targetTable;
  153. targetTable = super.migrateTableToMysql(migObj, sourceTable,
  154. migrationParams, parent);
  155. // MaxDB specific things
  156. // MaxDB has some table stats and some flags, that can't be migrated
  157. // noFixedLenghtColumn() might go into ROWFORMAT, but InnoDB uses
  158. // COMPACT anyway.
  159. if (sourceTable.getComment() != null) {
  160. comment += " Comment: " + sourceTable.getComment();
  161. }
  162. comment += " Hints: ";
  163. if (sourceTable.getPrivileges() != null)
  164. comment += " Privileges: " + sourceTable.getPrivileges();
  165. comment += " Created: " + sourceTable.getCreateDate() + " / "
  166. + sourceTable.getCreateTime();
  167. comment += " Altered: " + sourceTable.getAlterDate() + " / "
  168. + sourceTable.getAlterTime();
  169. if (sourceTable.getUpdStatDate() != null)
  170. comment += " Statistics: " + sourceTable.getUpdStatDate() + " / "
  171. + sourceTable.getUpdStatTime();
  172. if (sourceTable.getSample() != null)
  173. comment += " Sample: " + sourceTable.getSample();
  174. if (sourceTable.getArchive() != null)
  175. comment += " Archive: " + sourceTable.getArchive();
  176. if (sourceTable.getVariableColumns() != null)
  177. comment += " Variable columns: " + sourceTable.getVariableColumns();
  178. if (sourceTable.getTableid() != null)
  179. comment += " TableId: " + sourceTable.getTableid();
  180. if (sourceTable.getNoFixedLengthColumn() > 0)
  181. comment += " No fixed length column "
  182. + sourceTable.getNoFixedLengthColumn();
  183. targetTable.setComment(comment);
  184. // Trigger
  185. for (int i = 0; i < sourceTable.getTriggers().size(); i++) {
  186. Trigger sourceTrigger = (Trigger)sourceTable.getTriggers().get(i);
  187. com.mysql.grt.db.mysql.Trigger targetTrigger = (com.mysql.grt.db.mysql.Trigger) migUtils.migrateObject(this, migObj,
  188. sourceTrigger, targetTable);
  189. if (targetTrigger != null)
  190. targetTable.getTriggers().add(targetTrigger);
  191. }
  192. // return new created, migrated object
  193. return targetTable;
  194. }
  195. /**
  196.  * Migrates a column to a MySQL column
  197.  * 
  198.  * @param sourceColumn
  199.  *            the object to migrate
  200.  * @param migrationParams
  201.  *            parameters used to define the target object
  202.  * @param parent
  203.  *            parent object of the migrated object
  204.  * 
  205.  * @return returns MySQL table object
  206.  */
  207. protected com.mysql.grt.db.mysql.Column migrateColumnToMysql(
  208. com.mysql.grt.db.migration.Migration migObj, Column sourceColumn,
  209. GrtStringHashMap migrationParams, GrtObject parent) {
  210. String comments = "";
  211. // create target table
  212. com.mysql.grt.db.mysql.Column targetColumn;
  213. targetColumn = new com.mysql.grt.db.mysql.Column(parent);
  214. // log creation of target object
  215. migUtils.addMigrationLogEntry(migObj, sourceColumn, targetColumn);
  216. // do migration
  217. targetColumn.setName(migUtils.getTargetName(migrationParams,
  218. migrateIdentifier(sourceColumn.getName())));
  219. targetColumn.setOldName(sourceColumn.getName());
  220. targetColumn.setIsNullable(sourceColumn.getIsNullable());
  221. targetColumn.setPrecision(sourceColumn.getPrecision());
  222. targetColumn.setScale(sourceColumn.getScale());
  223. targetColumn.setLength(sourceColumn.getLength());
  224. if (sourceColumn.getComment() != null) {
  225. comments += " Comment: " + sourceColumn.getComment();
  226. }
  227. comments += " Hints: ";
  228. comments += " Privileges: " + sourceColumn.getPrivileges();
  229. comments += " Created: " + sourceColumn.getCreateDate() + " / "
  230. + sourceColumn.getCreateTime();
  231. comments += " Altered: " + sourceColumn.getAlterDate() + " / "
  232. + sourceColumn.getAlterTime();
  233. if (sourceColumn.getDomainName() != null)
  234. comments += " Domain (name/owner): " + sourceColumn.getDomainName()
  235. + " / " + sourceColumn.getDomainOwner();
  236. if (sourceColumn.getDefaultFunction() != null)
  237. comments += " Default function: "
  238. + sourceColumn.getDefaultFunction();
  239. targetColumn.setComment(comments);
  240. String defaultValue = sourceColumn.getDefaultValue();
  241. if (sourceColumn.getDefaultValue() != null
  242. && !sourceColumn.getDefaultValue().startsWith("DEFAULT SERIAL")) {
  243. targetColumn.setDefaultValue(defaultValue);
  244. } else {
  245. targetColumn.setDefaultValue("");
  246. }
  247. // migrate datatype
  248. SimpleDatatypeList simpleDatatypes = migObj.getTargetCatalog()
  249. .getSimpleDatatypes();
  250. String sourceDatatypeName = sourceColumn.getDatatypeName();
  251. if (!migrateColumnParamsToMySql(targetColumn, migrationParams)) {
  252. if (sourceDatatypeName.equals("SMALLINT")) {
  253. // NUMERIC
  254. // -32768 - +32767 = FIXED(5.0) + CHECK
  255. // no counterpart to MySQL signed, unsigned is done by check
  256. // constraints
  257. targetColumn.setDatatypeName("SMALLINT");
  258. } else if (sourceDatatypeName.equals("INTEGER")) {
  259. // -2147483648 and 2147483647 = FIXED(10.0) + CHECK
  260. // no counterpart to MySQL signed, unsigned is done by check
  261. // constraints
  262. targetColumn.setDatatypeName("INT");
  263. } else if (sourceDatatypeName.equals("FLOAT")) {
  264. // The data type FLOAT (p) defines a floating point number
  265. // (floating_point_literal). A column is defined that has a
  266. // floating point number with precision p (0<p<=38).
  267. // TODO: MySQL DECIMAL cannot hold all MAXDB float values
  268. targetColumn.setDatatypeName("DECIMAL");
  269. if ((migObj.getTargetCatalog().getVersion().getMajor() == 5 && migObj
  270. .getTargetCatalog().getVersion().getMinor() == 0)
  271. && (migObj.getTargetCatalog().getVersion().getRelease() >= 3 && migObj
  272. .getTargetCatalog().getVersion().getRelease() <= 5)) {
  273. // From 5.0.3 - 5.0.5 the length was 64
  274. targetColumn.setPrecision(64);
  275. } else {
  276. // Prior to 5.0.3 the length was even higher (255), so 65
  277. // should be save.
  278. targetColumn.setPrecision(65);
  279. }
  280. if (sourceColumn.getLength() <= 30) {
  281. targetColumn.setScale(sourceColumn.getLength());
  282. } else {
  283. targetColumn.setScale(30);
  284. }
  285. } else if (sourceDatatypeName.equals("FIXED")) {
  286. // The data type FIXED (p,s) defines a fixed point number
  287. // (fixed_point_literal). A column is defined that has a fixed
  288. // point
  289. // number with precision p and s number of decimal places
  290. // (0<p<=38, s<=p).
  291. // If no s is specified, it is assumed that the decimal places
  292. // are 0.
  293. // TODO: MySQL can have upmost 30 decimals, whereas MaxDB can
  294. // have 37.
  295. targetColumn.setDatatypeName("DECIMAL");
  296. if (sourceColumn.getScale() <= 30) {
  297. targetColumn.setScale(sourceColumn.getScale());
  298. } else {
  299. targetColumn.setScale(30);
  300. }
  301. } else if (sourceDatatypeName.equals("VARCHAR")) {
  302. // STRING
  303. // VARCHAR [(n)]: 0<n<=8000, VARCHAR [(n)] UNICODE: 0<n<=4000
  304. // TODO: getRelease() seems broken!
  305. boolean haveLongCharAndBinary = ((migObj.getTargetCatalog()
  306. .getVersion().getMajor() > 5)
  307. || (migObj.getTargetCatalog().getVersion().getMajor() == 5 && migObj
  308. .getTargetCatalog().getVersion().getMinor() >= 1) || (migObj
  309. .getTargetCatalog().getVersion().getMajor() == 5
  310. && migObj.getTargetCatalog().getVersion().getMinor() == 0 && migObj
  311. .getTargetCatalog().getVersion().getRelease() >= 3));
  312. if (sourceColumn.getCodeType().equals("BYTE")) {
  313. // binary data
  314. if (haveLongCharAndBinary) {
  315. // MySQL 5.0.3+, VARBINARY = VARCHAR = max length 65535
  316. targetColumn.setDatatypeName("VARBINARY");
  317. } else {
  318. // prior to 5.0.3, we have VARCHAR + binary collation
  319. // but that's not equal
  320. // to MaxDB VARCHAR BYTE, VARCHAR BYTE = binary data
  321. if (sourceColumn.getLength() < 256) {
  322. targetColumn.setDatatypeName("TINYBLOB");
  323. } else {
  324. targetColumn.setDatatypeName("BLOB");
  325. }
  326. }
  327. } else {
  328. // non-binary data - ASCII or UNICODE
  329. if (sourceColumn.getLength() < 256) {
  330. targetColumn.setDatatypeName("VARCHAR");
  331. } else {
  332. if (haveLongCharAndBinary) {
  333. targetColumn.setDatatypeName("VARCHAR");
  334. } else {
  335. targetColumn.setDatatypeName("TEXT");
  336. }
  337. }
  338. // check for UNICODE - no special handling for ASCII,
  339. // let's use the server default character set for ASCII
  340. if (sourceColumn.getCodeType().equals("UNICODE")) {
  341. targetColumn.setCharacterSetName("ucs2");
  342. }
  343. }
  344. } else if (sourceDatatypeName.equals("CHAR")) {
  345. // CHAR[ACTER] [(n)]: 0<n<=8000, CHAR[ACTER] [(n)] UNICODE:
  346. // 0<n<=4000
  347. // TODO: getRelease() seems broken!
  348. boolean haveLongCharAndBinary = ((migObj.getTargetCatalog()
  349. .getVersion().getMajor() > 5)
  350. || (migObj.getTargetCatalog().getVersion().getMajor() == 5 && migObj
  351. .getTargetCatalog().getVersion().getMinor() >= 1) || (migObj
  352. .getTargetCatalog().getVersion().getMajor() == 5
  353. && migObj.getTargetCatalog().getVersion().getMinor() == 0 && migObj
  354. .getTargetCatalog().getVersion().getRelease() >= 3));
  355. if (sourceColumn.getCodeType().equals("BYTE")) {
  356. // binary data
  357. if (haveLongCharAndBinary) {
  358. // MySQL 5.0.3+, BINARY = CHAR = max length 255
  359. if (sourceColumn.getLength() < 256) {
  360. targetColumn.setDatatypeName("BINARY");
  361. } else {
  362. targetColumn.setDatatypeName("BLOB");
  363. }
  364. } else {
  365. // prior to 5.0.3, we have CHAR + binary collation but
  366. // that's not equal
  367. // to MaxDB CHAR BYTE, CHAR BYTE = binary data
  368. if (sourceColumn.getLength() < 256) {
  369. targetColumn.setDatatypeName("TINYBLOB");
  370. } else {
  371. targetColumn.setDatatypeName("BLOB");
  372. }
  373. }
  374. } else {
  375. // non-binary data - ASCII or UNICODE
  376. if (sourceColumn.getLength() < 256) {
  377. targetColumn.setDatatypeName("CHAR");
  378. } else {
  379. targetColumn.setDatatypeName("TEXT");
  380. }
  381. // check for UNICODE - no special handling for ASCII,
  382. // let's use the server default character set for ASCII
  383. if (sourceColumn.getCodeType().equals("UNICODE")) {
  384. targetColumn.setCharacterSetName("ucs2");
  385. }
  386. }
  387. } else if (sourceDatatypeName.equals("LONG")) {
  388. // TEXT and BLOB
  389. // LONG [VARCHAR] [ASCII | BYTE]: A maximum of 2 GB of
  390. // characters can be written in a LONG column.
  391. // LONG [VARCHAR] UNICODE: A maximum of 2 GB bytes can be
  392. // written in a LONG column.
  393. if (sourceColumn.getCodeType().equals("ASCII")) {
  394. targetColumn.setDatatypeName("LONGTEXT");
  395. } else if (sourceColumn.getCodeType().equals("UNICODE")) {
  396. targetColumn.setDatatypeName("LONGTEXT");
  397. targetColumn.setCharacterSetName("ucs2");
  398. } else if (sourceColumn.getCodeType().equals("BYTE")) {
  399. targetColumn.setDatatypeName("LONGBLOB");
  400. }
  401. } else if (sourceDatatypeName.equals("DATE")) {
  402. // DATETIME
  403. // MaxDB starts from 0001-01-01, MySQL says it supports only
  404. // 1001-01-01 and up.
  405. // All values below might work, but there's no warranty
  406. targetColumn.setDatatypeName("DATE");
  407. } else if (sourceDatatypeName.equals("TIME")) {
  408. targetColumn.setDatatypeName("TIME");
  409. } else if (sourceDatatypeName.equals("TIMESTAMP")) {
  410. // Possible data loss: MaxDB supports microseconds, MySQL does
  411. // not.
  412. targetColumn.setDatatypeName("DATETIME");
  413. } else if (sourceDatatypeName.equals("BOOLEAN")) {
  414. targetColumn.setDatatypeName("TINYINT");
  415. } else {
  416. // UNKNOWN
  417. targetColumn.setDatatypeName("VARCHAR");
  418. targetColumn.setLength(255);
  419. migUtils.addMigrationLogEntry(migObj, sourceColumn,
  420. targetColumn, "The datatype "
  421. + sourceColumn.getDatatypeName()
  422. + " cannot be migrated.",
  423. MigrationUtils.logError);
  424. }
  425. }
  426. // lookup the simple datatype and set it in the column
  427. int simpleDatatypeIndex = simpleDatatypes.getIndexOfName(targetColumn
  428. .getDatatypeName());
  429. if (simpleDatatypeIndex > -1)
  430. targetColumn
  431. .setSimpleType(simpleDatatypes.get(simpleDatatypeIndex));
  432. //  
  433. // return new created, migrated object
  434. return targetColumn;
  435. }
  436. /**
  437.  * Migrates a foreign key to MySQL
  438.  * 
  439.  * @param sourceRoutine
  440.  *            the object to migrate
  441.  * @param migrationParams
  442.  *            parameters used to define the target object
  443.  * 
  444.  * @return returns MySQL table object
  445.  */
  446. protected com.mysql.grt.db.mysql.ForeignKey migrateForeignKeyToMysql(
  447. com.mysql.grt.db.migration.Migration migObj,
  448. ForeignKey sourceForeignKey, GrtStringHashMap migrationParams,
  449. GrtObject parent) {
  450. // create foreign key
  451. com.mysql.grt.db.mysql.ForeignKey targetForeignKey;
  452. targetForeignKey = new com.mysql.grt.db.mysql.ForeignKey(parent);
  453. // log creation of target object
  454. migUtils.addMigrationLogEntry(migObj, sourceForeignKey,
  455. targetForeignKey);
  456. // do migration 
  457. // NOTE: we have to add a sequence number to the FK name to ensure that it's
  458. // unique within a schema. MaxDB does not require FK constraint names to be unique,
  459. // but InnoDB does
  460. targetForeignKey.setName(migUtils.getTargetName(migrationParams,
  461. migrateIdentifier(sourceForeignKey.getName().concat(Integer.toString(fkSeqNum++)))));
  462. targetForeignKey.setOldName(sourceForeignKey.getName());
  463. String overrideRules = migrationParams.get("overrideRules");
  464. if ((overrideRules != null)
  465. && (overrideRules.compareToIgnoreCase("yes") == 0)) {
  466. targetForeignKey.setDeleteRule(migrationParams
  467. .get("defaultDeleteRule"));
  468. targetForeignKey.setUpdateRule(migrationParams
  469. .get("defaultUpdateRule"));
  470. } else {
  471. targetForeignKey.setDeleteRule(sourceForeignKey.getDeleteRule());
  472. targetForeignKey.setUpdateRule(sourceForeignKey.getUpdateRule());
  473. }
  474. targetForeignKey.setDeferability(sourceForeignKey.getDeferability());
  475. targetForeignKey
  476. .setReferedTableSchemaName(migrateIdentifier(sourceForeignKey
  477. .getReferedTableSchemaName()));
  478. targetForeignKey.setReferedTableName(migrateIdentifier(sourceForeignKey
  479. .getReferedTableName()));
  480. Table sourceTable = (Table) sourceForeignKey.getOwner();
  481. // migrate FK columns names
  482. for (int i = 0; i < sourceForeignKey.getColumns().size(); i++) {
  483. Column sourceColumnRef = (Column) sourceForeignKey.getColumns()
  484. .get(i);
  485. // get original source column
  486. Column sourceColumn = (Column) sourceTable.getColumns().get(
  487. sourceTable.getColumns().getIndexOfName(
  488. sourceColumnRef.getName()));
  489. com.mysql.grt.db.mysql.Column targetColumn = (com.mysql.grt.db.mysql.Column) (migUtils
  490. .findTargetObject(sourceColumn));
  491. targetForeignKey.getColumns().add(targetColumn);
  492. }
  493. // find target refered table
  494. Table refTable = (Table) sourceForeignKey.getReferedTable();
  495. if (refTable != null) {
  496. com.mysql.grt.db.mysql.Table targetRefTable = (com.mysql.grt.db.mysql.Table) (migUtils.findTargetObject(refTable));
  497. if (targetRefTable != null)
  498. targetForeignKey.setReferedTable(targetRefTable);
  499. }
  500. // migrate FK columns refs
  501. for (int i = 0; i < sourceForeignKey.getColumns().size(); i++) {
  502. Column sourceColumnRef = (Column) sourceForeignKey
  503. .getReferedColumns().get(i);
  504. com.mysql.grt.db.mysql.Column targetColumn = (com.mysql.grt.db.mysql.Column) (migUtils
  505. .findTargetObject(sourceColumnRef));
  506. if (targetColumn != null)
  507. targetForeignKey.getReferedColumns().add(targetColumn);
  508. }
  509. for (int i = 0; i < sourceForeignKey.getReferedColumnNames().size(); i++) {
  510. targetForeignKey.getReferedColumnNames().add(
  511. migrateIdentifier(sourceForeignKey.getReferedColumnNames()
  512. .get(i)));
  513. }
  514. if (targetForeignKey.getDeleteRule().equalsIgnoreCase("SET NULL")) {
  515. // TODO: MikeZ says it's a known limitation of the MT that the messages
  516. // do not show up on the overview of the "Manual Editing" screen
  517. migUtils.addMigrationLogEntry(migObj, sourceForeignKey, targetForeignKey, 
  518. "Currently MySQL does not support the foreign key DELETE rule SET NULL. " +
  519. "The generated SQL statement will be invalid. Please correct the SQL statement.", 
  520. MigrationUtils.logError);
  521. }
  522. // return new created, migrated object
  523. return targetForeignKey;
  524. }
  525. /**
  526.  * Migrates an MaxDB view to a MySQL view
  527.  * 
  528.  * @param sourceView
  529.  *            the object to migrate
  530.  * @param migrationParams
  531.  *            parameters used to define the target object
  532.  * 
  533.  * @return returns MySQL view object
  534.  */
  535. protected com.mysql.grt.db.mysql.View migrateViewToMysql(
  536. com.mysql.grt.db.migration.Migration migObj, View sourceView,
  537. GrtStringHashMap migrationParams, GrtObject parent) {
  538. // create target view
  539. com.mysql.grt.db.mysql.View targetView = super.migrateViewToMysql(
  540. migObj, sourceView, migrationParams, parent);
  541. // return new created, migrated object
  542. return targetView;
  543. }
  544. /**
  545.  * Migrates an MaxDB Routine to a MySQL Routine
  546.  * 
  547.  * @param sourceView
  548.  *            the object to migrate
  549.  * @param migrationParams
  550.  *            parameters used to define the target object
  551.  * 
  552.  * @return returns MySQL view object
  553.  */
  554. protected com.mysql.grt.db.mysql.Routine migrateRoutineToMysql(
  555. com.mysql.grt.db.migration.Migration migObj, Routine sourceProc,
  556. GrtStringHashMap migrationParams, GrtObject parent) {
  557. // create target Routine
  558. com.mysql.grt.db.mysql.Routine targetProc = super
  559. .migrateRoutineToMysql(migObj, sourceProc, migrationParams,
  560. parent);
  561. // return new created, migrated object
  562. return targetProc;
  563. }
  564. /**
  565.  * Migrates an MaxDB Synonym to a MySQL Synonym which will be mapped to a View in the C code
  566.  * 
  567.  * @param sourceSynonym
  568.  *            the object to migrate
  569.  * @param migrationParams
  570.  *            parameters used to define the target object
  571.  * 
  572.  * @return returns MySQL synonym object
  573.  */
  574. protected com.mysql.grt.db.mysql.Synonym migrateSynonymToMysql(
  575. com.mysql.grt.db.migration.Migration migObj, Synonym sourceSynonym,
  576. GrtStringHashMap migrationParams, GrtObject parent) {
  577. com.mysql.grt.db.mysql.Synonym targetSynonym = new com.mysql.grt.db.mysql.Synonym(parent);
  578. //  skip build-in synonyms which do not belong to the "users schema"
  579. String skipBuildin = migrationParams.get("skipBuildinSynonyms");
  580. if (skipBuildin != null && skipBuildin.equalsIgnoreCase("yes") && 
  581. (
  582. sourceSynonym.getName().equals("ACTIVECONFIGURATION") ||
  583. sourceSynonym.getName().equals("ALLOCATORSTATISTIC") ||
  584. sourceSynonym.getName().equals("ALL_CATALOG") ||
  585. sourceSynonym.getName().equals("ALL_COL_COMMENTS") ||
  586. sourceSynonym.getName().equals("ALL_COL_PRIVS") ||
  587. sourceSynonym.getName().equals("ALL_COL_PRIVS_MADE") ||
  588. sourceSynonym.getName().equals("ALL_COL_PRIVS_RECD") ||
  589. sourceSynonym.getName().equals("ALL_CONSTRAINTS") ||
  590. sourceSynonym.getName().equals("ALL_CONS_COLUMNS") ||
  591. sourceSynonym.getName().equals("ALL_DB_LINKS") ||
  592. sourceSynonym.getName().equals("ALL_DEF_AUDIT_OPTS") ||
  593. sourceSynonym.getName().equals("ALL_DEPENDENCIES") ||
  594. sourceSynonym.getName().equals("ALL_ERRORS") ||
  595. sourceSynonym.getName().equals("ALL_INDEXES") ||
  596. sourceSynonym.getName().equals("ALL_IND_COLUMNS") ||
  597. sourceSynonym.getName().equals("ALL_OBJECTS") ||
  598. sourceSynonym.getName().equals("ALL_SEQUENCES") ||
  599. sourceSynonym.getName().equals("ALL_SNAPSHOTS") ||
  600. sourceSynonym.getName().equals("ALL_SOURCE") ||
  601. sourceSynonym.getName().equals("ALL_SYNONYMS") ||
  602. sourceSynonym.getName().equals("ALL_TABLES") ||
  603. sourceSynonym.getName().equals("ALL_TAB_COLUMNS") ||
  604. sourceSynonym.getName().equals("ALL_TAB_COMMENTS") ||
  605. sourceSynonym.getName().equals("ALL_TAB_PRIVS") ||
  606. sourceSynonym.getName().equals("ALL_TAB_PRIVS_MADE") ||
  607. sourceSynonym.getName().equals("ALL_TAB_PRIVS_RECD") ||
  608. sourceSynonym.getName().equals("ALL_TRIGGERS") ||
  609. sourceSynonym.getName().equals("ALL_TRIGGER_COLS") ||
  610. sourceSynonym.getName().equals("ALL_USERS") ||
  611. sourceSynonym.getName().equals("ALL_VIEWS") ||
  612. sourceSynonym.getName().equals("AUDIT_ACTIONS") ||
  613. sourceSynonym.getName().equals("BACKUPTHREADS") ||
  614. sourceSynonym.getName().equals("CACHESTATISTICS") ||
  615. sourceSynonym.getName().equals("CAT") ||
  616. sourceSynonym.getName().equals("CATALOGCACHESTATISTICS") ||
  617. sourceSynonym.getName().equals("CLASSCONTAINERS") ||
  618. sourceSynonym.getName().equals("CLASSCONTAINER_CHAINS") ||
  619. sourceSynonym.getName().equals("CLASSCONTAINER_KEYS") ||
  620. sourceSynonym.getName().equals("CLASSCONTAINER_ROOTS") ||
  621. sourceSynonym.getName().equals("CLU") ||
  622. sourceSynonym.getName().equals("COLS") ||
  623. sourceSynonym.getName().equals("COLUMNPRIVILEGES") ||
  624. sourceSynonym.getName().equals("COLUMNS") ||
  625. sourceSynonym.getName().equals("COMMANDCACHESTATISTICS") ||
  626. sourceSynonym.getName().equals("COMMANDSTATISTICS") ||
  627. sourceSynonym.getName().equals("CONFIGURATION") ||
  628. sourceSynonym.getName().equals("CONNECTEDUSERS") ||
  629. sourceSynonym.getName().equals("CONNECTPARAMETERS") ||
  630. sourceSynonym.getName().equals("CONSISTENTVIEWS") ||
  631. sourceSynonym.getName().equals("CONSTRAINTS") ||
  632. sourceSynonym.getName().equals("DATACACHE") ||
  633. sourceSynonym.getName().equals("DATASTATISTICS") ||
  634. sourceSynonym.getName().equals("DATASTATISTICSRESET") ||
  635. sourceSynonym.getName().equals("DATAVOLUMES") ||
  636. sourceSynonym.getName().equals("DBA_2PC_NEIGHBORS") ||
  637. sourceSynonym.getName().equals("DBA_2PC_PENDING") ||
  638. sourceSynonym.getName().equals("DBA_AUDIT_EXISTS") ||
  639. sourceSynonym.getName().equals("DBA_AUDIT_OBJECT") ||
  640. sourceSynonym.getName().equals("DBA_AUDIT_SESSION") ||
  641. sourceSynonym.getName().equals("DBA_AUDIT_STATEMENT") ||
  642. sourceSynonym.getName().equals("DBA_AUDIT_TRAIL") ||
  643. sourceSynonym.getName().equals("DBA_BLOCKERS") ||
  644. sourceSynonym.getName().equals("DBA_CATALOG") ||
  645. sourceSynonym.getName().equals("DBA_CLUSTERS") ||
  646. sourceSynonym.getName().equals("DBA_CLU_COLUMNS") ||
  647. sourceSynonym.getName().equals("DBA_COL_COMMENTS") ||
  648. sourceSynonym.getName().equals("DBA_COL_PRIVS") ||
  649. sourceSynonym.getName().equals("DBA_CONSTRAINTS") ||
  650. sourceSynonym.getName().equals("DBA_CONS_COLUMNS") ||
  651. sourceSynonym.getName().equals("DBA_DATA_FILES") ||
  652. sourceSynonym.getName().equals("DBA_DB_LINKS") ||
  653. sourceSynonym.getName().equals("DBA_DDL_LOCKS") ||
  654. sourceSynonym.getName().equals("DBA_DEPENDENCIES") ||
  655. sourceSynonym.getName().equals("DBA_DML_LOCKS") ||
  656. sourceSynonym.getName().equals("DBA_ERRORS") ||
  657. sourceSynonym.getName().equals("DBA_EXP_FILES") ||
  658. sourceSynonym.getName().equals("DBA_EXP_OBJECTS") ||
  659. sourceSynonym.getName().equals("DBA_EXP_VERSION") ||
  660. sourceSynonym.getName().equals("DBA_EXTENTS") ||
  661. sourceSynonym.getName().equals("DBA_FREE_SPACE") ||
  662. sourceSynonym.getName().equals("DBA_INDEXES") ||
  663. sourceSynonym.getName().equals("DBA_IND_COLUMNS") ||
  664. sourceSynonym.getName().equals("DBA_LOCKS") ||
  665. sourceSynonym.getName().equals("DBA_OBJECTS") ||
  666. sourceSynonym.getName().equals("DBA_OBJECT_SIZE") ||
  667. sourceSynonym.getName().equals("DBA_OBJ_AUDIT_OPTS") ||
  668. sourceSynonym.getName().equals("DBA_PRIV_AUDIT_OPTS") ||
  669. sourceSynonym.getName().equals("DBA_PROFILES") ||
  670. sourceSynonym.getName().equals("DBA_ROLES") ||
  671. sourceSynonym.getName().equals("DBA_ROLE_PRIVS") ||
  672. sourceSynonym.getName().equals("DBA_ROLLBACK_SEGS") ||
  673. sourceSynonym.getName().equals("DBA_SEGMENTS") ||
  674. sourceSynonym.getName().equals("DBA_SEQUENCES") ||
  675. sourceSynonym.getName().equals("DBA_SNAPSHOTS") ||
  676. sourceSynonym.getName().equals("DBA_SNAPSHOT_LOGS") ||
  677. sourceSynonym.getName().equals("DBA_SOURCE") ||
  678. sourceSynonym.getName().equals("DBA_STMT_AUDIT_OPTS") ||
  679. sourceSynonym.getName().equals("DBA_SYNONYMS") ||
  680. sourceSynonym.getName().equals("DBA_SYS_PRIVS") ||
  681. sourceSynonym.getName().equals("DBA_TABLES") ||
  682. sourceSynonym.getName().equals("DBA_TABLESPACES") ||
  683. sourceSynonym.getName().equals("DBA_TAB_COLUMNS") ||
  684. sourceSynonym.getName().equals("DBA_TAB_COMMENTS") ||
  685. sourceSynonym.getName().equals("DBA_TAB_PRIVS") ||
  686. sourceSynonym.getName().equals("DBA_TRIGGERS") ||
  687. sourceSynonym.getName().equals("DBA_TRIGGER_COLS") ||
  688. sourceSynonym.getName().equals("DBA_TS_QUOTAS") ||
  689. sourceSynonym.getName().equals("DBA_USERS") ||
  690. sourceSynonym.getName().equals("DBA_VIEWS") ||
  691. sourceSynonym.getName().equals("DBA_WAITERS") ||
  692. sourceSynonym.getName().equals("DBPARAMETERS") ||
  693. sourceSynonym.getName().equals("DBPROCEDURES") ||
  694. sourceSynonym.getName().equals("DBPROCPARAMINFO") ||
  695. sourceSynonym.getName().equals("DBPROCPARAMS") ||
  696. sourceSynonym.getName().equals("DBTIMES") ||
  697. sourceSynonym.getName().equals("DB_STATE") ||
  698. sourceSynonym.getName().equals("DICT") ||
  699. sourceSynonym.getName().equals("DICTIONARY") ||
  700. sourceSynonym.getName().equals("DICT_COLUMNS") ||
  701. sourceSynonym.getName().equals("DOMAINCONSTRAINTS") ||
  702. sourceSynonym.getName().equals("DOMAINS") ||
  703. sourceSynonym.getName().equals("DUAL") ||
  704. sourceSynonym.getName().equals("ESTIMATED_PAGES") ||
  705. sourceSynonym.getName().equals("EXCEPTIONS") ||
  706. sourceSynonym.getName().equals("FILEDIRECTORIES") ||
  707. sourceSynonym.getName().equals("FILES") ||
  708. sourceSynonym.getName().equals("FOREIGNKEYCOLUMNS") ||
  709. sourceSynonym.getName().equals("FOREIGNKEYS") ||
  710. sourceSynonym.getName().equals("FUNCTIONS") ||
  711. sourceSynonym.getName().equals("GARBAGECOLLECTOR_STATISTICS") ||
  712. sourceSynonym.getName().equals("GLOBAL_NAME") ||
  713. sourceSynonym.getName().equals("HISTORYINFO") ||
  714. sourceSynonym.getName().equals("HOTSTANDBYCOMPONENT") ||
  715. sourceSynonym.getName().equals("HOTSTANDBYGROUP") ||
  716. sourceSynonym.getName().equals("IND") ||
  717. sourceSynonym.getName().equals("INDEXCOLUMNS") ||
  718. sourceSynonym.getName().equals("INDEXES") ||
  719. sourceSynonym.getName().equals("INDEXPAGES") ||
  720. sourceSynonym.getName().equals("INDEXSTATISTICS") ||
  721. sourceSynonym.getName().equals("INSTANCE") ||
  722. sourceSynonym.getName().equals("INTERNAL_STATE") ||
  723. sourceSynonym.getName().equals("IOBUFFERCACHES") ||
  724. sourceSynonym.getName().equals("INDEXES") ||
  725. sourceSynonym.getName().equals("INDEXPAGES") ||
  726. sourceSynonym.getName().equals("INDEXSTATISTICS") ||
  727. sourceSynonym.getName().equals("INSTANCE") ||
  728. sourceSynonym.getName().equals("INTERNAL_STATE") ||
  729. sourceSynonym.getName().equals("IOBUFFERCACHES") ||
  730. sourceSynonym.getName().equals("IOTHREADSTATISTICS") ||
  731. sourceSynonym.getName().equals("IOTHREADSTATISTICSRESET") ||
  732. sourceSynonym.getName().equals("LOCKLISTSTATISTICS") ||
  733. sourceSynonym.getName().equals("LOCKS") ||
  734. sourceSynonym.getName().equals("LOCKSTATISTICS") ||
  735. sourceSynonym.getName().equals("LOCK_HOLDER") ||
  736. sourceSynonym.getName().equals("LOCK_REQUESTOR") ||
  737. sourceSynonym.getName().equals("LOCK_WAITS") ||
  738. sourceSynonym.getName().equals("LOGINFORMATION") ||
  739. sourceSynonym.getName().equals("LOGQUEUESTATISTICS") ||
  740. sourceSynonym.getName().equals("LOGSTATISTICS") ||
  741. sourceSynonym.getName().equals("LOGSTATISTICSRESET") ||
  742. sourceSynonym.getName().equals("LOGVOLUMES") ||
  743. sourceSynonym.getName().equals("MACHINECONFIGURATION") ||
  744. sourceSynonym.getName().equals("MACHINEUTILIZATION") ||
  745. sourceSynonym.getName().equals("MAPCHARSETS") ||
  746. sourceSynonym.getName().equals("MEMORYALLOCATORSTATISTICS") ||
  747. sourceSynonym.getName().equals("MEMORYHOLDERS") ||
  748. sourceSynonym.getName().equals("MEMORY_HOLDERS") ||
  749. sourceSynonym.getName().equals("MONITOR") ||
  750. sourceSynonym.getName().equals("MONITOR_CACHES") ||
  751. sourceSynonym.getName().equals("MONITOR_LOAD") ||
  752. sourceSynonym.getName().equals("MONITOR_LOCK") ||
  753. sourceSynonym.getName().equals("MONITOR_LOG") ||
  754. sourceSynonym.getName().equals("MONITOR_LONG") ||
  755. sourceSynonym.getName().equals("MONITOR_OMS") ||
  756. sourceSynonym.getName().equals("MONITOR_PAGES") ||
  757. sourceSynonym.getName().equals("MONITOR_ROW") ||
  758. sourceSynonym.getName().equals("MONITOR_TRANS") ||
  759. sourceSynonym.getName().equals("OBJ") ||
  760. sourceSynonym.getName().equals("OBJECTLOCKS") ||
  761. sourceSynonym.getName().equals("OMSDIAGNOSE") ||
  762. sourceSynonym.getName().equals("OMSLOCKS") ||
  763. sourceSynonym.getName().equals("OMS_HEAP_STATISTICS") ||
  764. sourceSynonym.getName().equals("OMS_LOCKOBJ_INFO") ||
  765. sourceSynonym.getName().equals("OMS_MEMORY_USAGE") ||
  766. sourceSynonym.getName().equals("OMS_VERSIONS") ||
  767. sourceSynonym.getName().equals("OPTIMIZERINFORMATION") ||
  768. sourceSynonym.getName().equals("OPTIMIZERSTATISTICS") ||
  769. sourceSynonym.getName().equals("PACKAGES") ||
  770. sourceSynonym.getName().equals("PAGES") ||
  771. sourceSynonym.getName().equals("PARAMETERS") ||
  772. sourceSynonym.getName().equals("PARSINFOS") ||
  773. sourceSynonym.getName().equals("PUBLIC_DEPENDENCY") ||
  774. sourceSynonym.getName().equals("READERWRITERLOCKINFORMATION") ||
  775. sourceSynonym.getName().equals("READERWRITERLOCKSTATISTICS") ||
  776. sourceSynonym.getName().equals("READERWRITERLOCKSTATISTICSRESET") ||
  777. sourceSynonym.getName().equals("READERWRITERLOCKWAITINGTASKS") ||
  778. sourceSynonym.getName().equals("RESOURCE_COST") ||
  779. sourceSynonym.getName().equals("RESTARTINFORMATION") ||
  780. sourceSynonym.getName().equals("ROLEPRIVILEGES") ||
  781. sourceSynonym.getName().equals("ROLES") ||
  782. sourceSynonym.getName().equals("ROLE_ROLE_PRIVS") ||
  783. sourceSynonym.getName().equals("ROLE_SYS_PRIVS") ||
  784. sourceSynonym.getName().equals("ROLE_TAB_PRIVS") ||
  785. sourceSynonym.getName().equals("ROOTS") ||
  786. sourceSynonym.getName().equals("RUNNING_COMMANDS") ||
  787. sourceSynonym.getName().equals("RUNNING_PARSEIDS") ||
  788. sourceSynonym.getName().equals("SCHEMAPRIVILEGES") ||
  789. sourceSynonym.getName().equals("SCHEMAS") ||
  790. sourceSynonym.getName().equals("SEQ") ||
  791. sourceSynonym.getName().equals("SEQUENCES") ||
  792. sourceSynonym.getName().equals("SERVERDBS") ||
  793. sourceSynonym.getName().equals("SERVERDBSTATISTICS") ||
  794. sourceSynonym.getName().equals("SERVERTASKS") ||
  795. sourceSynonym.getName().equals("SESSIONS") ||
  796. sourceSynonym.getName().equals("SESSION_PRIVS") ||
  797. sourceSynonym.getName().equals("SESSION_ROLES") ||
  798. sourceSynonym.getName().equals("SNAPSHOTS") ||
  799. sourceSynonym.getName().equals("SPINLOCKPOOLSTATISTICS") ||
  800. sourceSynonym.getName().equals("SPINLOCKS") ||
  801. sourceSynonym.getName().equals("SPINLOCKSTATISTICS") ||
  802. sourceSynonym.getName().equals("STMT_AUDIT_OPTION_MAP") ||
  803. sourceSynonym.getName().equals("SYN") ||
  804. sourceSynonym.getName().equals("SYNONYMS") ||
  805. sourceSynonym.getName().equals("SYSCHECKTABLELOG") ||
  806. sourceSynonym.getName().equals("SYSCMD_ANALYZE") ||
  807. sourceSynonym.getName().equals("SYSDATA_ANALYZE") ||
  808. sourceSynonym.getName().equals("SYSMONDATA") ||
  809. sourceSynonym.getName().equals("SYSMONITOR") ||
  810. sourceSynonym.getName().equals("SYSMON_ACTIVE_TASK") ||
  811. sourceSynonym.getName().equals("SYSMON_BACKUPIOACCESS") ||
  812. sourceSynonym.getName().equals("SYSMON_CONNECTION") ||
  813. sourceSynonym.getName().equals("SYSMON_DW") ||
  814. sourceSynonym.getName().equals("SYSMON_DW_ACTIVE") ||
  815. sourceSynonym.getName().equals("SYSMON_DW_RUNNABLE") ||
  816. sourceSynonym.getName().equals("SYSMON_IOACCESS") ||
  817. sourceSynonym.getName().equals("SYSMON_IOTHREAD") ||
  818. sourceSynonym.getName().equals("SYSMON_REGION") ||
  819. sourceSynonym.getName().equals("SYSMON_RUNNABLE") ||
  820. sourceSynonym.getName().equals("SYSMON_SPECIAL_THREAD") ||
  821. sourceSynonym.getName().equals("SYSMON_STORAGE") ||
  822. sourceSynonym.getName().equals("SYSMON_SV") ||
  823. sourceSynonym.getName().equals("SYSMON_SV_ACTIVE") ||
  824. sourceSynonym.getName().equals("SYSMON_SV_RUNNABLE") ||
  825. sourceSynonym.getName().equals("SYSMON_TASK") ||
  826. sourceSynonym.getName().equals("SYSMON_TASK_DETAIL") ||
  827. sourceSynonym.getName().equals("SYSMON_TOTALCOUNT") ||
  828. sourceSynonym.getName().equals("SYSMON_UKTHREAD") ||
  829. sourceSynonym.getName().equals("SYSMON_US") ||
  830. sourceSynonym.getName().equals("SYSMON_US_ACTIVE") ||
  831. sourceSynonym.getName().equals("SYSMON_US_RUNNABLE") ||
  832. sourceSynonym.getName().equals("SYSPARSEID") ||
  833. sourceSynonym.getName().equals("SYSSTATISTICS") ||
  834. sourceSynonym.getName().equals("SYSTEMTRIGGERS") ||
  835. sourceSynonym.getName().equals("SYSUPDSTATLOG") ||
  836. sourceSynonym.getName().equals("SYSUPDSTATWANTED") ||
  837. sourceSynonym.getName().equals("TABLEPRIVILEGES") ||
  838. sourceSynonym.getName().equals("TABLES") ||
  839. sourceSynonym.getName().equals("TABLESTATISTICS") ||
  840. sourceSynonym.getName().equals("TABLE_PRIVILEGE_MAP") ||
  841. sourceSynonym.getName().equals("TABS") ||
  842. sourceSynonym.getName().equals("TASKLOADBALANCINGINFORMATION") ||
  843. sourceSynonym.getName().equals("TASKLOADBALANCINGTASKGROUPSTATES") ||
  844. sourceSynonym.getName().equals("TASKLOADBALANCINGTASKGROUPSTATES") ||
  845. sourceSynonym.getName().equals("TASKLOADBALANCINGTASKMOVES") ||
  846. sourceSynonym.getName().equals("TRANSACTIONHISTORY") ||
  847. sourceSynonym.getName().equals("TRANSACTIONS") ||
  848. sourceSynonym.getName().equals("TRIGGERS") ||
  849. sourceSynonym.getName().equals("UNLOADEDSTATEMENTS") ||
  850. sourceSynonym.getName().equals("USERS") ||
  851. sourceSynonym.getName().equals("USERSTATISTICS") ||
  852. sourceSynonym.getName().equals("USER_AUDIT_OBJECT") ||
  853. sourceSynonym.getName().equals("USER_AUDIT_SESSION") ||
  854. sourceSynonym.getName().equals("USER_AUDIT_STATEMENT") ||
  855. sourceSynonym.getName().equals("USER_AUDIT_TRAIL") ||
  856. sourceSynonym.getName().equals("USER_CATALOG") ||
  857. sourceSynonym.getName().equals("USER_CLUSTERS") ||
  858. sourceSynonym.getName().equals("USER_CLU_COLUMNS") ||
  859. sourceSynonym.getName().equals("USER_COL_COMMENTS") ||
  860. sourceSynonym.getName().equals("USER_COL_PRIVS") ||
  861. sourceSynonym.getName().equals("USER_COL_PRIVS_MADE") ||
  862. sourceSynonym.getName().equals("USER_COL_PRIVS_RECD") ||
  863. sourceSynonym.getName().equals("USER_CONSTRAINTS") ||
  864. sourceSynonym.getName().equals("USER_CONS_COLUMNS") ||
  865. sourceSynonym.getName().equals("USER_DB_LINKS") ||
  866. sourceSynonym.getName().equals("USER_DEPENDENCIES") ||
  867. sourceSynonym.getName().equals("USER_ERRORS") ||
  868. sourceSynonym.getName().equals("USER_EXTENTS") ||
  869. sourceSynonym.getName().equals("USER_FREE_SPACE") ||
  870. sourceSynonym.getName().equals("USER_INDEXES") ||
  871. sourceSynonym.getName().equals("USER_IND_COLUMNS") ||
  872. sourceSynonym.getName().equals("USER_OBJECTS") ||
  873. sourceSynonym.getName().equals("USER_OBJECT_SIZE") ||
  874. sourceSynonym.getName().equals("USER_OBJ_AUDIT_OPTS") ||
  875. sourceSynonym.getName().equals("USER_RESOURCE_LIMITS") ||
  876. sourceSynonym.getName().equals("USER_ROLE_PRIVS") ||
  877. sourceSynonym.getName().equals("USER_SEGMENTS") ||
  878. sourceSynonym.getName().equals("USER_SEQUENCES") ||
  879. sourceSynonym.getName().equals("USER_SNAPSHOTS") ||
  880. sourceSynonym.getName().equals("USER_SNAPSHOT_LOGS") ||
  881. sourceSynonym.getName().equals("USER_SOURCE") ||
  882. sourceSynonym.getName().equals("USER_SYNONYMS") ||
  883. sourceSynonym.getName().equals("USER_SYS_PRIVS") ||
  884. sourceSynonym.getName().equals("USER_TABLES") ||
  885. sourceSynonym.getName().equals("USER_TABLESPACES") ||
  886. sourceSynonym.getName().equals("USER_TAB_COLUMNS") ||
  887. sourceSynonym.getName().equals("USER_TAB_COMMENTS") ||
  888. sourceSynonym.getName().equals("USER_TAB_PRIVS") ||
  889. sourceSynonym.getName().equals("USER_TAB_PRIVS_MADE") ||
  890. sourceSynonym.getName().equals("USER_TAB_PRIVS_RECD") ||
  891. sourceSynonym.getName().equals("USER_TRIGGERS") ||
  892. sourceSynonym.getName().equals("USER_TRIGGER_COLS") ||
  893. sourceSynonym.getName().equals("USER_TS_QUOTAS") ||
  894. sourceSynonym.getName().equals("USER_USERS") ||
  895. sourceSynonym.getName().equals("USER_VIEWS") ||
  896. sourceSynonym.getName().equals("V$NLS_PARAMETERS") ||
  897. sourceSynonym.getName().equals("VERSION") ||
  898. sourceSynonym.getName().equals("VERSIONS") ||
  899. sourceSynonym.getName().equals("VIEWCOLUMNS") ||
  900. sourceSynonym.getName().equals("VIEWDEFS") ||
  901. sourceSynonym.getName().equals("VIEWS")
  902. )
  903. ) {
  904. targetSynonym = null;
  905. } else {
  906. // Synonym name = View name
  907. targetSynonym.setName(sourceSynonym.getName());
  908. // Table that is refered by the Synonym
  909. Table refTable = (Table) sourceSynonym.getReferedObject();
  910. if (refTable != null) {
  911. com.mysql.grt.db.mysql.Table targetRefTable = (com.mysql.grt.db.mysql.Table) (migUtils.findTargetObject(refTable));
  912. if (targetRefTable != null)
  913. targetSynonym.setReferedObject(targetRefTable);
  914. }
  915. }
  916. return targetSynonym;
  917. }
  918. /**
  919.  * Migrates a column to a MySQL column
  920.  * 
  921.  * @param sourceTrigger
  922.  *            the object to migrate
  923.  * @param migrationParams
  924.  *            parameters used to define the target object
  925.  * @param parent
  926.  *            parent object of the migrated object
  927.  * 
  928.  * @return returns MySQL trigger object
  929.  */
  930. protected com.mysql.grt.db.mysql.Trigger migrateTriggerToMysql(
  931. com.mysql.grt.db.migration.Migration migObj, Trigger sourceTrigger,
  932. GrtStringHashMap migrationParams, GrtObject parent) {
  933. com.mysql.grt.db.mysql.Trigger targetTrigger = new com.mysql.grt.db.mysql.Trigger(parent);
  934. targetTrigger.setName(sourceTrigger.getName());
  935. targetTrigger.setOldName(sourceTrigger.getName());
  936. targetTrigger.setComment(sourceTrigger.getComment());
  937. targetTrigger.setTiming(sourceTrigger.getTiming());
  938. targetTrigger.setEvent(sourceTrigger.getEvent());
  939. targetTrigger.setStatement(sourceTrigger.getStatement());
  940. /*
  941.  
  942.  
  943. //  Table that is refered by the Synonym
  944. Table refTable = (Table) sourceSynonym.getReferedObject();
  945. if (refTable != null) {
  946. com.mysql.grt.db.mysql.Table targetRefTable = (com.mysql.grt.db.mysql.Table) (migUtils.findTargetObject(refTable));
  947. if (targetRefTable != null)
  948. targetSynonym.setReferedObject(targetRefTable);
  949. }
  950. */
  951. return targetTrigger;
  952. }
  953. /**
  954.  * Generates information about the schema to MySQL migration method
  955.  * 
  956.  * @return returns a Method with predefined migration parameters
  957.  */
  958. private Method getMigrateSchemaToMysqlInfo() {
  959. // create method description
  960. Method method = new Method(null);
  961. method.setName("migrateSchemaToMysql");
  962. method.setModuleName("MigrationMaxdb");
  963. method.setCaption("MaxDB Default");
  964. method.setDesc("Default method to migrate an MaxDB schema to MySQL.");
  965. method.setSourceStructName("db.maxdb.Schema");
  966. method.setTargetPackageName("db.mysql");
  967. method.setRating(1);
  968. addMigrateSchemaToMysqlInfoParameters(method);
  969. return method;
  970. }
  971. /**
  972.  * Generates information about the MaxDB Table to MySQL migration method
  973.  * 
  974.  * @return returns a Method with predefined migration parameters
  975.  */
  976. private Method getMigrateTableToMysqlInfo() {
  977. // create migrateMaxdbTable method
  978. Method method = new Method(null);
  979. method.setName("migrateTableToMysql");
  980. method.setModuleName("MigrationMaxdb");
  981. method.setCaption("MaxDB Default");
  982. method.setDesc("Default method to migrate an MaxDB table to MySQL.");
  983. method.setSourceStructName("db.maxdb.Table");
  984. method.setTargetPackageName("db.mysql");
  985. method.setRating(1);
  986. addMigrateTableToMysqlInfoParameters(method);
  987. return method;
  988. }
  989. protected void addMigrateTableToMysqlInfoParameters(Method method) {
  990. // specify the parameters the method understands
  991. GrtStringHashMap paramNames = new GrtStringHashMap();
  992. method.setParams(paramNames);
  993. paramNames.add("engine", "INNODB");
  994. paramNames.add("charset", "");
  995. paramNames.add("collation", "");
  996. paramNames.add("addAutoincrement", "yes");
  997. // create a list of parameter groups the user can choose from
  998. ParameterGroupList paramGroupList = new ParameterGroupList();
  999. method.setParamGroups(paramGroupList);
  1000. // add parameter group
  1001. ParameterGroup paramGroup = new ParameterGroup(method);
  1002. paramGroupList.add(paramGroup);
  1003. paramGroup.setName("Data consistency");
  1004. paramGroup
  1005. .setDesc("Standard parameter group. "
  1006. + "The migrated tables will use the "
  1007. + "InnoDB storage "
  1008. + "engine to offer transactional and "
  1009. + "foreign key support.");
  1010. GrtStringHashMap params = new GrtStringHashMap();
  1011. paramGroup.setParams(params);
  1012. params.add("engine", "INNODB");
  1013. params.add("addAutoincrement", "no");
  1014. // add parameter group
  1015. paramGroup = new ParameterGroup(method);
  1016. paramGroupList.add(paramGroup);
  1017. paramGroup.setName("Statistical data");
  1018. paramGroup.setDesc("Choose this parameter group for tables that "
  1019. + "contain lots of data which does not need "
  1020. + "transaction safety. This method is ideal "
  1021. + "for logging information or statistical data.");
  1022. params = new GrtStringHashMap();
  1023. paramGroup.setParams(params);
  1024. params.add("engine", "MyISAM");
  1025. params.add("addAutoincrement", "no");
  1026. // add parameter group
  1027. paramGroup = new ParameterGroup(method);
  1028. paramGroupList.add(paramGroup);
  1029. paramGroup.setName("Data consistency / multilanguage");
  1030. paramGroup.setDesc("The migrated tables will use the "
  1031. + "InnoDB storage " + "engine to offer transactional and "
  1032. + "foreign key support and use " + "UTF8 as default charset.");
  1033. params = new GrtStringHashMap();
  1034. paramGroup.setParams(params);
  1035. params.add("engine", "INNODB");
  1036. params.add("charset", "utf8");
  1037. params.add("collation", "utf8_general_ci");
  1038. params.add("addAutoincrement", "no");
  1039. // add parameter group
  1040. paramGroup = new ParameterGroup(method);
  1041. paramGroupList.add(paramGroup);
  1042. paramGroup.setName("Data consistency / UNICODE");
  1043. paramGroup.setDesc("The migrated tables will use the "
  1044. + "InnoDB storage " + "engine to offer transactional and "
  1045. + "foreign key support and use "
  1046. + "UNICODE as default charset.");
  1047. params = new GrtStringHashMap();
  1048. paramGroup.setParams(params);
  1049. params.add("engine", "INNODB");
  1050. params.add("charset", "ucs2");
  1051. params.add("collation", "ucs2_general_ci");
  1052. params.add("addAutoincrement", "no");
  1053. }
  1054. /**
  1055.  * Generates information about the Column to MySQL migration method
  1056.  * 
  1057.  * @return returns a Method with predefined migration parameters
  1058.  */
  1059. private Method getMigrateColumnToMysqlInfo() {
  1060. // create method description
  1061. Method method = new Method(null);
  1062. method.setName("migrateColumnToMysql");
  1063. method.setModuleName("MigrationMaxdb");
  1064. method.setCaption("MaxDB Default");
  1065. method.setDesc("Default method to migrate a MaxDB column to MySQL.");
  1066. method.setSourceStructName("db.maxdb.Column");
  1067. method.setTargetPackageName("db.mysql");
  1068. method.setRating(1);
  1069. addMigrateColumnToMysqlInfoParameters(method);
  1070. return method;
  1071. }
  1072. /**
  1073.  * Generates information about the ForeignKey to MySQL migration method
  1074.  * 
  1075.  * @return returns a Method with predefined migration parameters
  1076.  */
  1077. private Method getMigrateForeignKeyToMysqlInfo() {
  1078. // create method description
  1079. Method method = new Method(null);
  1080. method.setName("migrateForeignKeyToMysql");
  1081. method.setModuleName("MigrationMaxdb");
  1082. method.setCaption("MaxDB");
  1083. method.setDesc("MaxDB method to migrate a foreign key to MySQL.");
  1084. method.setSourceStructName("db.maxdb.ForeignKey");
  1085. method.setTargetPackageName("db.mysql");
  1086. method.setRating(1);
  1087. addMigrateForeignKeyToMysqlInfoParameters(method);
  1088. return method;
  1089. }
  1090. /**
  1091.  * Generates information about the View to MySQL migration method
  1092.  * 
  1093.  * @return returns a Method with predefined migration parameters
  1094.  */
  1095. private Method getMigrateViewToMysqlInfo() {
  1096. // create migrateMaxdbTable method
  1097. Method method = new Method(null);
  1098. method.setName("migrateViewToMysql");
  1099. method.setModuleName("MigrationMaxdb");
  1100. method.setCaption("MaxDB Default");
  1101. method.setDesc("Default method to migrate an MaxDB view to MySQL.");
  1102. method.setSourceStructName("db.maxdb.View");
  1103. method.setTargetPackageName("db.mysql");
  1104. method.setRating(1);
  1105. addMigrateViewToMysqlInfoParameters(method);
  1106. return method;
  1107. }
  1108. /**
  1109.  * Generates information about the View to MySQL migration method
  1110.  * 
  1111.  * @return returns a Method with predefined migration parameters
  1112.  */
  1113. private Method getMigrateRoutineToMysqlInfo() {
  1114. // create migrateMaxdbTable method
  1115. Method method = new Method(null);
  1116. method.setName("migrateRoutineToMysql");
  1117. method.setModuleName("MigrationMaxdb");
  1118. method.setCaption("MaxDB Default");
  1119. method.setDesc("Default method to migrate an MaxDB routine to MySQL.");
  1120. method.setSourceStructName("db.maxdb.Routine");
  1121. method.setTargetPackageName("db.mysql");
  1122. method.setRating(1);
  1123. addMigrateRoutineToMysqlInfoParameters(method);
  1124. return method;
  1125. }
  1126. /**
  1127.  * Generates information about the Synonym to MySQL migration method
  1128.  * 
  1129.  * @return returns a Method with predefined migration parameters
  1130.  */
  1131. private Method getMigrateSynonymToMysql() {
  1132. // create migrateMaxdbTable method
  1133. Method method = new Method(null);
  1134. method.setName("migrateSynonymToMysql");
  1135. method.setModuleName("MigrationMaxdb");
  1136. method.setCaption("MaxDB Default");
  1137. method.setDesc("Default method to migrate a MaxDB synonym to MySQL.");
  1138. method.setSourceStructName("db.maxdb.Synonym");
  1139. method.setTargetPackageName("db.mysql");
  1140. method.setRating(1);
  1141. addMigrateSynonymToMysqlInfoParameters(method);
  1142. return method;
  1143. }
  1144. protected void addMigrateSynonymToMysqlInfoParameters(Method method) {
  1145. // specify the parameters the method understands
  1146. GrtStringHashMap paramNames = new GrtStringHashMap();
  1147. method.setParams(paramNames);
  1148. paramNames.add("skipBuildinSynonyms", "yes");
  1149. // create a list of parameter groups the user can choose from
  1150. ParameterGroupList paramGroupList = new ParameterGroupList();
  1151. method.setParamGroups(paramGroupList);
  1152. // add parameter group
  1153. ParameterGroup paramGroup = new ParameterGroup(method);
  1154. paramGroupList.add(paramGroup);
  1155. paramGroup.setName("Skip build-in synonyms");
  1156. paramGroup
  1157. .setDesc("Standard parameter group. " +
  1158. "Build-in synonyms will be skipped."
  1159. );
  1160. GrtStringHashMap params = new GrtStringHashMap();
  1161. paramGroup.setParams(params);
  1162. params.add("skipBuildinSynonyms", "yes");
  1163. }
  1164. /**
  1165.  * Generates information about the Triger to MySQL migration method
  1166.  * 
  1167.  * @return returns a Method with predefined migration parameters
  1168.  */
  1169. private Method getMigrateTriggerToMysql() {
  1170. // create migrateMaxdbTable method
  1171. Method method = new Method(null);
  1172. method.setName("migrateTriggerToMysql");
  1173. method.setModuleName("MigrationMaxdb");
  1174. method.setCaption("MaxDB Default");
  1175. method.setDesc("Default method to migrate a MaxDB trigger to MySQL.");
  1176. method.setSourceStructName("db.maxdb.Trigger");
  1177. method.setTargetPackageName("db.mysql");
  1178. method.setRating(1);
  1179. return method;
  1180. }
  1181. }