You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by to...@apache.org on 2004/07/15 23:45:57 UTC

cvs commit: jakarta-commons-sandbox/sql/src/java/org/apache/commons/sql/builder SqlBuilder.java HsqlDbBuilder.java

tomdz       2004/07/15 14:45:56

  Modified:    sql/src/java/org/apache/commons/sql/builder SqlBuilder.java
                        HsqlDbBuilder.java
  Log:
  Moved foreignkey generation at the end of the generated sql (for dbs that want external foreignkeys) to avoid references to yet-undefined tables
  
  Revision  Changes    Path
  1.17      +26 -5     jakarta-commons-sandbox/sql/src/java/org/apache/commons/sql/builder/SqlBuilder.java
  
  Index: SqlBuilder.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/sql/src/java/org/apache/commons/sql/builder/SqlBuilder.java,v
  retrieving revision 1.16
  retrieving revision 1.17
  diff -u -r1.16 -r1.17
  --- SqlBuilder.java	2 Mar 2004 13:18:31 -0000	1.16
  +++ SqlBuilder.java	15 Jul 2004 21:45:56 -0000	1.17
  @@ -19,6 +19,7 @@
   import java.io.Writer;
   import java.sql.Connection;
   import java.sql.SQLException;
  +import java.util.ArrayList;
   import java.util.Iterator;
   import java.util.List;
   
  @@ -111,6 +112,10 @@
               tableComment(table);
               createTable(table);
           }
  +        // we're writing the foreignkeys last to ensure that all referenced tables are already defined
  +        for (Iterator iter = database.getTables().iterator(); iter.hasNext(); ) {
  +            createExternalForeignKey((Table) iter.next());
  +        }
       }
   
       /**
  @@ -147,7 +152,7 @@
       }
   
       /** 
  -     * Outputs the DDL to create the table along with any constraints
  +     * Outputs the DDL to create the table along with any non-external constraints
        */
       public void createTable(Table table) throws IOException {
           print("create table ");
  @@ -172,15 +177,21 @@
           if (!isPrimaryKeyEmbedded()) {
               writePrimaryKeysAlterTable(table);
           }
  -        if (!isForeignKeysEmbedded()) {
  -            writeForeignKeysAlterTable(table);
  -        }
           if (!isIndexesEmbedded()) {
               writeIndexes(table);
           }
       }
   
       /** 
  +     * Creates an external foreignkey definition.
  +     */
  +    public void createExternalForeignKey(Table table) throws IOException {
  +        if (!isForeignKeysEmbedded()) {
  +            writeForeignKeysAlterTable(table);
  +        }
  +    }
  +
  +    /** 
        * Outputs the DDL to add a column to a table.
        */
       public void createColumn(Table table, Column column) throws IOException {
  @@ -698,7 +709,8 @@
        */
       public void alterDatabase(Database desiredDb, Connection cn, boolean doDrops, boolean modifyColumns) throws IOException, SQLException {
   
  -        Database currentDb = new JdbcModelReader(cn).getDatabase();
  +        Database  currentDb      = new JdbcModelReader(cn).getDatabase();
  +        ArrayList deferredTables = new ArrayList();
   
           for (Iterator iter = desiredDb.getTables().iterator(); iter.hasNext(); ) {
               Table desiredTable = (Table) iter.next();
  @@ -711,6 +723,8 @@
               if ( currentTable == null ) {
                   log.info( "creating table " + desiredTable.getName() );
                   createTable( desiredTable );
  +                // we're deferring foreignkey generation
  +                deferredTables.add(desiredTable);
               } else {
                   //add any columns, indices, or constraints
   
  @@ -797,6 +811,13 @@
   
               } //table exists?
           } //for tables create
  +
  +        // generating deferred foreignkeys
  +        for (Iterator iter = deferredTables.iterator(); iter.hasNext();)
  +        {
  +            createExternalForeignKey((Table)iter.next());
  +        }
  +        
   
           //check for table drops
           for (Iterator iter = currentDb.getTables().iterator(); iter.hasNext(); ) {
  
  
  
  1.5       +0 -4      jakarta-commons-sandbox/sql/src/java/org/apache/commons/sql/builder/HsqlDbBuilder.java
  
  Index: HsqlDbBuilder.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/sql/src/java/org/apache/commons/sql/builder/HsqlDbBuilder.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- HsqlDbBuilder.java	28 Feb 2004 03:35:47 -0000	1.4
  +++ HsqlDbBuilder.java	15 Jul 2004 21:45:56 -0000	1.5
  @@ -27,8 +27,4 @@
    * @version $Revision$
    */
   public class HsqlDbBuilder extends SqlBuilder {
  -    
  -    public HsqlDbBuilder() {
  -        setForeignKeysEmbedded(true);
  -    }
   }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org