[
https://issues.apache.org/jira/browse/DDLUTILS-268?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Colin Ritchie updated DDLUTILS-268:
-----------------------------------
Attachment: DDLUTILS-268.diff
Here is a fix for DDLUTILS-268. What I have done is:
Since MyISAM databases store a FK as an Index, the MySQL Modeler method
findCorrespondingIndex() will look for a corresponding ForeignKey with the same
name, and findCorrespondingForeignKey() will look for a corresponding Index
with the same name.
> Detect foreign keys on MySQL MyISAM showing up as indexes
> ----------------------------------------------------------
>
> Key: DDLUTILS-268
> URL: https://issues.apache.org/jira/browse/DDLUTILS-268
> Project: DdlUtils
> Issue Type: Improvement
> Components: Core - MySql
> Reporter: Eirik Bjorsnos
> Assignee: Thomas Dudziak
> Attachments: DDLUTILS-268.diff
>
>
> When reading a MyISAM MySQL database model from the database, DdlUtils will
> read in Index instead of a ForeignKey.
> As a result of this, DdlUtils suggests to remove the index and create the
> foreign key. After applying this change, DdlUtils will still not see the
> ForeignKey and thus suggests the same change all over again.
> We work around this by looking for all indexes in a table. If we find an
> equally named foreign key in our "wanted" model, we remove the index and add
> a foreign key:
> {code}
> public void transform(Database database, Database wanted, Platform platform) {
> if (platform instanceof MySqlPlatform) {
> for (Table table : database.getTables()) {
> for (Index index : table.getIndices()) {
> Table wantedTable = wanted.findTable(table.getName());
> if (wantedTable != null) {
> ForeignKey key =
> findCandidateForeignKey(platform.getSqlBuilder(), index, wantedTable);
> if (key != null) {
> table.removeIndex(index);
> table.addForeignKey(new CloneHelper().clone(key,
> table, database, true));
> }
> }
> }
> }
> }
> }
> {code}
> After this transformation, DdlUtils will not suggest removing the index and
> adding the foreign key.
> If this something that could be added to DdlUtils proper in some way?
> Here's the DB I used for testing this:
> {code}
> <database name="ddlutils-db" xmlns="http://db.apache.org/ddlutils/schema/1.1">
> <table name="orderTable">
> <column name="orderId" primaryKey="true" required="true"
> type="INTEGER" size="10" autoIncrement="true"/>
> <column name="CustomerName" required="false" type="VARCHAR"
> size="64"/>
> </table>
> <table name="orderLine">
> <column name="orderLineId" primaryKey="true" required="true"
> type="INTEGER" size="10" autoIncrement="true"/>
> <column name="orderId" required="true" type="INTEGER" size="10"/>
> <foreign-key foreignTable="orderTable">
> <reference local="orderId" foreign="orderId"/>
> </foreign-key>
> </table>
> </database>
> {code}
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira