[ https://issues.apache.org/jira/browse/DDLUTILS-159?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Thomas Dudziak updated DDLUTILS-159: ------------------------------------ Fix Version/s: 1.0 > primary key column change causes exception > ------------------------------------------ > > Key: DDLUTILS-159 > URL: https://issues.apache.org/jira/browse/DDLUTILS-159 > Project: DdlUtils > Issue Type: Bug > Components: Core (No specific database) > Environment: Windows, SapDB 7.4 and Oracle 8 > Reporter: Stefan Huber > Assigned To: Thomas Dudziak > Fix For: 1.0 > > > I have the folowing table definition: > <?xml version="1.0"?> > <!DOCTYPE database SYSTEM "http://db.apache.org/torque/dtd/database"> > <database name="rmdb"> > <table name="ADDRESS"> > <column name="ID" primaryKey="true" required="true" type="INTEGER"/> > <column name="TOWN" primaryKey="false" required="false" type="VARCHAR" > size="40"/> > </table> > </database> > I want to change the name of the primary key column. The new schema > definition is: > <?xml version="1.0"?> > <!DOCTYPE database SYSTEM "http://db.apache.org/torque/dtd/database"> > <database name="rmdb"> > <table name="ADDRESS"> > <column name="ADDRESSID" primaryKey="true" required="true" > type="INTEGER"/> > <column name="TOWN" primaryKey="false" required="false" type="VARCHAR" > size="40"/> > </table> > </database> > DdlUtils throws the following exception in the alter table process: > Exception in thread "main" java.lang.NullPointerException > at > org.apache.ddlutils.alteration.AddPrimaryKeyChange.apply(AddPrimaryKeyChange.java:69) > at > org.apache.ddlutils.platform.SqlBuilder.processChange(SqlBuilder.java:1160) > at > org.apache.ddlutils.platform.sapdb.SapDbBuilder.processTableStructureChanges(SapDbBuilder.java:180) > at > org.apache.ddlutils.platform.SqlBuilder.processTableStructureChanges(SqlBuilder.java:921) > at > org.apache.ddlutils.platform.SqlBuilder.processTableStructureChanges(SqlBuilder.java:797) > at > org.apache.ddlutils.platform.SqlBuilder.processChanges(SqlBuilder.java:576) > at > org.apache.ddlutils.platform.SqlBuilder.alterDatabase(SqlBuilder.java:469) > at > org.apache.ddlutils.platform.PlatformImplBase.getAlterTablesSql(PlatformImplBase.java:756) > The reason is, that an alteration of the table name is not supported via > 'alter table' so DdlUtils recreates the table. But in > 'SapDbBuilder.processTableStructureChanges' the new primary key is created > before the table is recreated in the super-Method. So 'AddPrimaryKeyChange > refers to a column that is not present and throws an exception. > The behaviour is the same with Oracle: > Exception in thread "main" java.lang.NullPointerException > at > org.apache.ddlutils.alteration.AddPrimaryKeyChange.apply(AddPrimaryKeyChange.java:69) > at > org.apache.ddlutils.platform.SqlBuilder.processChange(SqlBuilder.java:1160) > at > org.apache.ddlutils.platform.oracle.Oracle8Builder.processTableStructureChanges(Oracle8Builder.java:488) > at > org.apache.ddlutils.platform.SqlBuilder.processTableStructureChanges(SqlBuilder.java:921) > at > org.apache.ddlutils.platform.SqlBuilder.processTableStructureChanges(SqlBuilder.java:797) > at > org.apache.ddlutils.platform.SqlBuilder.processChanges(SqlBuilder.java:576) > at > org.apache.ddlutils.platform.SqlBuilder.alterDatabase(SqlBuilder.java:469) > at > org.apache.ddlutils.platform.PlatformImplBase.getAlterTablesSql(PlatformImplBase.java:756) -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.