tomdz       2004/08/08 14:11:08

  Modified:    sql/src/java/org/apache/commons/sql/builder SqlBuilder.java
                        PostgreSqlBuilder.java AxionBuilder.java
                        SqlBuilderFactory.java
  Added:       sql/src/java/org/apache/commons/sql/builder
                        FirebirdBuilder.java
  Log:
  Added initial support for Firebird
  
  Revision  Changes    Path
  1.22      +50 -17    
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.21
  retrieving revision 1.22
  diff -u -r1.21 -r1.22
  --- SqlBuilder.java   8 Aug 2004 11:23:44 -0000       1.21
  +++ SqlBuilder.java   8 Aug 2004 21:11:08 -0000       1.22
  @@ -354,20 +354,11 @@
           {
               dropDatabase(database);
           }
  -            
  -        for (Iterator it = database.getTables().iterator(); it.hasNext(); )
  -        {
  -            Table table = (Table)it.next();
   
  -            writeTableComment(table);
  -            createTable(table);
  -        }
  +        createTables(database);
   
           // we're writing the external foreignkeys last to ensure that all 
referenced tables are already defined
  -        for (Iterator it = database.getTables().iterator(); it.hasNext(); )
  -        {
  -            createExternalForeignKeys((Table)it.next());
  -        }
  +        createExternalForeignKeys(database);
       }
   
       /**
  @@ -549,6 +540,22 @@
       }
   
       /** 
  +     * Outputs the DDL to create all tables of the given database model.
  +     * 
  +     * @param database The database
  +     */
  +    public void createTables(Database database) throws IOException
  +    {
  +        for (Iterator it = database.getTables().iterator(); it.hasNext(); )
  +        {
  +            Table table = (Table)it.next();
  +
  +            writeTableComment(table);
  +            createTable(table);
  +        }
  +    }
  +
  +    /** 
        * Outputs the DDL to create the table along with any non-external constraints 
as well
        * as with external primary keys and indices (but not foreign keys).
        * 
  @@ -589,6 +596,19 @@
       }
   
       /**
  +     * Creates the external foreignkey creation statements for all tables in the 
database.
  +     * 
  +     * @param database The database
  +     */
  +    public void createExternalForeignKeys(Database database) throws IOException
  +    {
  +        for (Iterator it = database.getTables().iterator(); it.hasNext(); )
  +        {
  +            createExternalForeignKeys((Table)it.next());
  +        }
  +    }
  +
  +    /**
        * Creates external foreignkey creation statements if necessary.
        * 
        * @param table The table
  @@ -709,6 +729,18 @@
           }
       }
   
  +    /**
  +     * Writes the column name. This method allows builder implementations to e.g. 
escape
  +     * the name or similar.
  +     * 
  +     * @param table  The table of the column
  +     * @param column The column
  +     */
  +    protected void writeColumnName(Table table, Column column) throws IOException
  +    {
  +        print(column.getName());
  +    }
  +
       /** 
        * Outputs the DDL for the specified column.
        * 
  @@ -718,7 +750,7 @@
       protected void writeColumn(Table table, Column column) throws IOException
       {
           //see comments in columnsDiffer about null/"" defaults
  -        print(column.getName());
  +        writeColumnName(table, column);
           print(" ");
           print(getSqlType(column));
   
  @@ -769,7 +801,7 @@
       {
           writeTableAlterStmt(table);
           print("DROP COLUMN ");
  -        print(column.getName());
  +        writeColumnName(table, column);
           printEndOfStatement();
       }
   
  @@ -896,7 +928,7 @@
           {
               println(",");
               printIndent();
  -            writePrimaryKeyStmt(primaryKeyColumns);
  +            writePrimaryKeyStmt(table, primaryKeyColumns);
           }
       }
   
  @@ -917,7 +949,7 @@
               print("ADD CONSTRAINT ");
               print(table.getName());
               print("_PK ");
  -            writePrimaryKeyStmt(primaryKeyColumns);
  +            writePrimaryKeyStmt(table, primaryKeyColumns);
               printEndOfStatement();
           }
       }
  @@ -946,14 +978,15 @@
       /**
        * Writes a primary key statement for the given columns.
        * 
  +     * @param table             The table
        * @param primaryKeyColumns The primary columns
        */
  -    protected void writePrimaryKeyStmt(List primaryKeyColumns) throws IOException
  +    protected void writePrimaryKeyStmt(Table table, List primaryKeyColumns) throws 
IOException
       {
           print("PRIMARY KEY (");
           for (Iterator it = primaryKeyColumns.iterator(); it.hasNext();)
           {
  -            print(((Column)it.next()).getName());
  +            writeColumnName(table, (Column)it.next());
               if (it.hasNext())
               {
                   print(", ");
  
  
  
  1.12      +2 -2      
jakarta-commons-sandbox/sql/src/java/org/apache/commons/sql/builder/PostgreSqlBuilder.java
  
  Index: PostgreSqlBuilder.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons-sandbox/sql/src/java/org/apache/commons/sql/builder/PostgreSqlBuilder.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- PostgreSqlBuilder.java    8 Aug 2004 11:23:44 -0000       1.11
  +++ PostgreSqlBuilder.java    8 Aug 2004 21:11:08 -0000       1.12
  @@ -62,7 +62,7 @@
        */
       public void writeColumn(Table table, Column column) throws IOException
       {
  -        print(column.getName());
  +        writeColumnName(table, column);
           print(" ");
           if (column.isAutoIncrement())
           {
  
  
  
  1.13      +1 -1      
jakarta-commons-sandbox/sql/src/java/org/apache/commons/sql/builder/AxionBuilder.java
  
  Index: AxionBuilder.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons-sandbox/sql/src/java/org/apache/commons/sql/builder/AxionBuilder.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- AxionBuilder.java 8 Aug 2004 11:23:44 -0000       1.12
  +++ AxionBuilder.java 8 Aug 2004 21:11:08 -0000       1.13
  @@ -74,7 +74,7 @@
        * default from the Axion column builder.
        */
       public void writeColumn(Table table, Column column) throws IOException {
  -        print(column.getName());
  +        writeColumnName(table, column);
           print(" ");
           print(getSqlType(column));
           print(" ");
  
  
  
  1.10      +1 -0      
jakarta-commons-sandbox/sql/src/java/org/apache/commons/sql/builder/SqlBuilderFactory.java
  
  Index: SqlBuilderFactory.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons-sandbox/sql/src/java/org/apache/commons/sql/builder/SqlBuilderFactory.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- SqlBuilderFactory.java    1 Aug 2004 21:43:36 -0000       1.9
  +++ SqlBuilderFactory.java    8 Aug 2004 21:11:08 -0000       1.10
  @@ -91,6 +91,7 @@
       {
           registerDatabase("axion",      AxionBuilder.class);
           registerDatabase("db2",        Db2Builder.class);
  +        registerDatabase("firebird",   FirebirdBuilder.class);
           registerDatabase("hsqldb",     HsqlDbBuilder.class);
           registerDatabase("maxdb",      MaxDbBuilder.class);
           registerDatabase("mckoi",      MckoiSqlBuilder.class);
  
  
  
  1.1                  
jakarta-commons-sandbox/sql/src/java/org/apache/commons/sql/builder/FirebirdBuilder.java
  
  Index: FirebirdBuilder.java
  ===================================================================
  package org.apache.commons.sql.builder;
  
  /*
   * Copyright 1999-2004 The Apache Software Foundation.
   * 
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   * 
   *      http://www.apache.org/licenses/LICENSE-2.0
   * 
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  
  import java.io.IOException;
  import java.sql.Types;
  
  import org.apache.commons.sql.model.Column;
  import org.apache.commons.sql.model.Database;
  import org.apache.commons.sql.model.ForeignKey;
  import org.apache.commons.sql.model.Table;
  
  /**
   * An SQL Builder for the Firebird database.
   * 
   * @author <a href="mailto:[EMAIL PROTECTED]">Thomas Dudziak</a>
   */
  public class FirebirdBuilder extends SqlBuilder
  {
      public FirebirdBuilder()
      {
          setPrimaryKeyEmbedded(true);
          setForeignKeysEmbedded(false);
          setCommentPrefix("/*");
          setCommentSuffix("*/");
          addNativeTypeMapping(Types.BIGINT,        "DECIMAL(18,0)");
          addNativeTypeMapping(Types.BINARY,        "BLOB");
          addNativeTypeMapping(Types.BIT,           "DECIMAL(1,0)");
          addNativeTypeMapping(Types.BOOLEAN,       "DECIMAL(1,0)");
          addNativeTypeMapping(Types.CLOB,          "BLOB SUB_TYPE TEXT");
          addNativeTypeMapping(Types.DOUBLE,        "DOUBLE PRECISION");
          addNativeTypeMapping(Types.LONGVARBINARY, "BLOB");
          addNativeTypeMapping(Types.LONGVARCHAR,   "BLOB SUB_TYPE TEXT");
          addNativeTypeMapping(Types.REAL,          "FLOAT");
          addNativeTypeMapping(Types.TINYINT,       "SMALLINT");
          addNativeTypeMapping(Types.VARBINARY,     "BLOB");
      }
  
      /* (non-Javadoc)
       * @see org.apache.commons.sql.builder.SqlBuilder#getDatabaseName()
       */
      public String getDatabaseName()
      {
          return "Firebird";
      }
  
      /* (non-Javadoc)
       * @see 
org.apache.commons.sql.builder.SqlBuilder#dropDatabase(org.apache.commons.sql.model.Database)
       */
      public void dropDatabase(Database database) throws IOException
      {
          super.dropDatabase(database);
          print("COMMIT");
          printEndOfStatement();
      }
  
      /* (non-Javadoc)
       * @see 
org.apache.commons.sql.builder.SqlBuilder#createTables(org.apache.commons.sql.model.Database)
       */
      public void createTables(Database database) throws IOException
      {
          super.createTables(database);
          print("COMMIT");
          printEndOfStatement();
      }
  
      /* (non-Javadoc)
       * @see 
org.apache.commons.sql.builder.SqlBuilder#writeExternalForeignKeyCreateStmt(org.apache.commons.sql.model.Table,
 org.apache.commons.sql.model.ForeignKey, int)
       */
      protected void writeExternalForeignKeyCreateStmt(Table table, ForeignKey key, 
int numKey) throws IOException
      {
          super.writeExternalForeignKeyCreateStmt(table, key, numKey);
          if (key.getForeignTable() != null)
          {
              print("COMMIT");
              printEndOfStatement();
          }
      }
  
      /* (non-Javadoc)
       * @see 
org.apache.commons.sql.builder.SqlBuilder#createTable(org.apache.commons.sql.model.Table)
       */
      public void createTable(Table table) throws IOException
      {
          super.createTable(table);
  
          // creating generator and trigger for auto-increment
          Column column = table.getAutoIncrementColumn();
  
          if (column != null)
          {
              print("CREATE GENERATOR gen_");
              print(table.getName());
              print("_");
              print(column.getName());
              printEndOfStatement();
              print("CREATE TRIGGER trg_");
              print(table.getName());
              print("_");
              print(column.getName());
              print(" FOR ");
              println(table.getName());
              println("ACTIVE BEFORE INSERT POSITION 0");
              println("AS");
              println("BEGIN");
              print("IF (NEW.");
              print(column.getName());
              println(" IS NULL) THEN");
              print("NEW.");
              print(column.getName());
              print(" = GEN_ID(gen_");
              print(table.getName());
              print("_");
              print(column.getName());
              println(", 1);");
              print("END");
              printEndOfStatement();
          }
      }
  
      /* (non-Javadoc)
       * @see 
org.apache.commons.sql.builder.SqlBuilder#dropTable(org.apache.commons.sql.model.Table)
       */
      public void dropTable(Table table) throws IOException
      {
          // dropping generator and trigger for auto-increment
          Column column = table.getAutoIncrementColumn();
  
          if (column != null)
          {
              print("DROP TRIGGER trg_");
              print(table.getName());
              print("_");
              print(column.getName());
              printEndOfStatement();
              print("DROP GENERATOR gen_");
              print(table.getName());
              print("_");
              print(column.getName());
              printEndOfStatement();
          }
          super.dropTable(table);
      }
  
      /* (non-Javadoc)
       * @see 
org.apache.commons.sql.builder.SqlBuilder#printAutoIncrementColumn(Table,Column)
       */
      protected void writeColumnAutoIncrementStmt(Table table, Column column) throws 
IOException
      {
          // we're using a generator
      }
  }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to