db-ddlutils-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Vignesh Swaminathan (JIRA)" <j...@apache.org>
Subject [jira] Created: (DDLUTILS-73) SQL syntax bug in PostgreSQL 8.1 for ALTER COLUMN
Date Tue, 21 Feb 2006 05:46:24 GMT
SQL syntax bug in PostgreSQL 8.1 for ALTER COLUMN
-------------------------------------------------

         Key: DDLUTILS-73
         URL: http://issues.apache.org/jira/browse/DDLUTILS-73
     Project: DdlUtils
        Type: Bug
 Environment: PostgreSQL 8.1
    Reporter: Vignesh Swaminathan
 Assigned to: Thomas Dudziak 


The following code has to be added to PostgreSQLBuilder class to make it work for altering
columns in PostgreSQL

/**
     * Generates the alter statement to add or modify a single column on a table.
     *
     * @param table       The table the index is on
     * @param column      The column to drop
     * @param isNewColumn Whether the column should be added
     */
    public void writeColumnAlterStmt(Table table, Column column, boolean isNewColumn) throws
IOException
    {
        writeTableAlterStmt(table);
        print(isNewColumn ? "ADD " : "ALTER ");
        if(isNewColumn) 
        	writeColumn(table, column); 
		else
			writeAlterColumn(table, column);
        printEndOfStatement();
    }
    
    /** 
     * Outputs the DDL for the specified column.
     * 
     * @param table  The table containing the column
     * @param column The column
     */
    protected void writeAlterColumn(Table table, Column column) throws IOException
    {
        //see comments in columnsDiffer about null/"" defaults
        printIdentifier(getColumnName(column));
        print(" TYPE ");
        print(getSqlType(column));

        if ((column.getDefaultValue() != null) ||
            (getPlatformInfo().isIdentitySpecUsesDefaultValue() && column.isAutoIncrement()))
        {
            if (!getPlatformInfo().isSupportingDefaultValuesForLongTypes() && 
                ((column.getTypeCode() == Types.LONGVARBINARY) || (column.getTypeCode() ==
Types.LONGVARCHAR)))
            {
                throw new DynaSqlException("The platform does not support default values for
LONGVARCHAR or LONGVARBINARY columns");
            }
            print(" DEFAULT ");
            writeColumnDefaultValue(table, column);
        }
        if (column.isRequired())
        {
            print(" ");
            writeColumnNotNullableStmt();
        }
        else if (getPlatformInfo().isRequiringNullAsDefaultValue() &&
                 getPlatformInfo().hasNullDefault(column.getTypeCode()))
        {
            print(" ");
            writeColumnNullableStmt();
        }
        if (column.isAutoIncrement() && !getPlatformInfo().isIdentitySpecUsesDefaultValue())
        {
            if (!getPlatformInfo().isSupportingNonPKIdentityColumns() && !column.isPrimaryKey())
            {
                throw new DynaSqlException("Column "+column.getName()+" in table "+table.getName()+"
is auto-incrementing but not a primary key column, which is not supported by the platform");
            }
            print(" ");
            writeColumnAutoIncrementStmt(table, column);
        }
    }

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


Mime
View raw message