/// <summary>
        /// Alters the column.
        /// </summary>
        /// <param name="databaseTable">The database table.</param><param name="databaseColumn">The database column.</param><param name="originalColumn">The original column.</param>
        /// <returns/>
        public override string AlterColumn(DatabaseTable databaseTable, DatabaseColumn databaseColumn, DatabaseColumn originalColumn)
        {
            var tableGenerator = CreateTableGenerator(databaseTable);

            if (!AlterColumnIncludeDefaultValue)
            {
                tableGenerator.IncludeDefaultValues = false;
            }
            var columnDefinition   = tableGenerator.WriteColumn(databaseColumn).Trim();
            var originalDefinition = "?";

            if (originalColumn != null)
            {
                originalDefinition = tableGenerator.WriteColumn(originalColumn).Trim();
            }

            //add a nice comment
            var comment = string.Format(CultureInfo.InvariantCulture,
                                        "-- {0} from {1} to {2}",
                                        databaseTable.Name,
                                        originalDefinition,
                                        columnDefinition);

            if (!SupportsAlterColumn)
            {
                //SQLite does not have modify column
                return(comment + Environment.NewLine + "-- TODO: change manually (no ALTER COLUMN)");
            }
            if (databaseColumn.IsPrimaryKey || databaseColumn.IsForeignKey)
            {
                //you can't change primary keys
                //you can't change foreign key columns
                return(comment + Environment.NewLine + "-- TODO: change manually (PK or FK)");
            }

            var dtw      = new DataTypeWriter();
            var dataType = dtw.WriteDataType(databaseColumn);

            var columnDef = Escape(databaseColumn.Name) + " TYPE " +
                            dataType.TrimEnd();

            return(comment +
                   Environment.NewLine +
                   string.Format(CultureInfo.InvariantCulture,
                                 AlterColumnFormat,
                                 TableName(databaseTable),
                                 columnDef.Replace("NOT NULL", String.Empty)) +
                   string.Format("\r\nALTER TABLE {0} ALTER COLUMN {1} {2} NOT NULL;",
                                 TableName(databaseTable), Escape(databaseColumn.Name), (databaseColumn.Nullable ? "DROP" : "SET")));
        }
Example #2
0
 public TableGenerator(DatabaseTable table)
     : base(table)
 {
     DataTypeWriter = new DataTypeWriter();
 }