public virtual string GenerateDescriptionStatement(Expressions.AlterColumnExpression expression) { if (string.IsNullOrEmpty(expression.Column.ColumnDescription)) { return(string.Empty); } string initialDescriptionStatement = GenerateColumnDescription(string.Empty, expression.SchemaName, expression.TableName, expression.Column.Name, "Description:" + expression.Column.ColumnDescription); if (expression.Column.AdditionalColumnDescriptions.Count == 0) { return(initialDescriptionStatement); } else { initialDescriptionStatement = "Description:" + expression.Column.ColumnDescription; var descriptionsList = new List <string> { initialDescriptionStatement }; descriptionsList.AddRange(from description in expression.Column.AdditionalColumnDescriptions let newDescriptionStatement = description.Key + ":" + description.Value select newDescriptionStatement); return(GenerateColumnDescription("Description", expression.SchemaName, expression.TableName, expression.Column.Name, string.Join("\r\n", descriptionsList))); } }
public virtual string GenerateDescriptionStatement(Expressions.AlterColumnExpression expression) { if (string.IsNullOrEmpty(expression.Column.ColumnDescription)) { return(string.Empty); } return(GenerateColumnDescription(expression.SchemaName, expression.TableName, expression.Column.Name, expression.Column.ColumnDescription)); }
public override string Generate(Expressions.AlterColumnExpression expression) { try { // throws an exception of an attempt is made to alter an identity column, as it is not supported by most version of DB2. return(string.Format("ALTER TABLE {0} {1}", Quoter.QuoteTableName(expression.TableName, expression.SchemaName), ((Db2Column)Column).GenerateAlterClause(expression.Column))); } catch (NotSupportedException e) { return(CompatibilityMode.HandleCompatibilty(e.Message)); } }
public override void Process(Expressions.AlterColumnExpression expression) { truncator.Truncate(expression); CheckColumn(expression.TableName, expression.Column.Name); FirebirdSchemaProvider schema = new FirebirdSchemaProvider(this); FirebirdTableSchema table = schema.GetTableSchema(expression.TableName); ColumnDefinition colDef = table.Definition.Columns.First(x => x.Name == quoter.ToFbObjectName(expression.Column.Name)); //Change nullable constraint if (colDef.IsNullable != expression.Column.IsNullable) { PerformDBOperationExpression unSet = new PerformDBOperationExpression(); unSet.Operation = (connection, transaction) => { string sql = (Generator as FirebirdGenerator).GenerateSetNull(colDef); Announcer.Sql(sql); using (var cmd = Factory.CreateCommand(sql, connection, transaction)) { cmd.CommandTimeout = Options.Timeout; cmd.ExecuteNonQuery(); } }; FirebirdProcessedExpressionBase fbExpression = new FirebirdProcessedExpression <AlterColumnExpression>(expression, this); if (this.FBOptions.UndoEnabled) { fbExpression.AddUndoExpression(unSet); } RegisterExpression(fbExpression); InternalProcess((Generator as FirebirdGenerator).GenerateSetNull(expression.Column)); } //Change default value if (!FirebirdGenerator.DefaultValuesMatch(colDef, expression.Column)) { IMigrationExpression defaultConstraint; IMigrationExpression unsetDefaultConstraint; if (expression.Column.DefaultValue is ColumnDefinition.UndefinedDefaultValue) { defaultConstraint = new DeleteDefaultConstraintExpression() { SchemaName = expression.SchemaName, TableName = expression.TableName, ColumnName = expression.Column.Name }; } else { defaultConstraint = new AlterDefaultConstraintExpression() { ColumnName = expression.Column.Name, DefaultValue = expression.Column.DefaultValue, TableName = expression.TableName, SchemaName = expression.SchemaName }; } if (colDef.DefaultValue is ColumnDefinition.UndefinedDefaultValue) { unsetDefaultConstraint = new DeleteDefaultConstraintExpression() { ColumnName = colDef.Name, TableName = expression.TableName, SchemaName = expression.SchemaName }; } else { unsetDefaultConstraint = new AlterDefaultConstraintExpression() { ColumnName = colDef.Name, DefaultValue = colDef.DefaultValue, TableName = expression.TableName, SchemaName = expression.SchemaName }; } FirebirdProcessedExpressionBase fbExpression = new FirebirdProcessedExpression(defaultConstraint, defaultConstraint.GetType(), this); if (this.FBOptions.UndoEnabled) { fbExpression.AddUndoExpression(unsetDefaultConstraint); } RegisterExpression(fbExpression); if (defaultConstraint is DeleteDefaultConstraintExpression) { InternalProcess(Generator.Generate(defaultConstraint as DeleteDefaultConstraintExpression)); } else if (defaultConstraint is AlterDefaultConstraintExpression) { InternalProcess(Generator.Generate(defaultConstraint as AlterDefaultConstraintExpression)); } else { throw new InvalidOperationException("No expression generated for alter default constraint"); } } //Change type if (!FirebirdGenerator.ColumnTypesMatch(colDef, expression.Column)) { PerformDBOperationExpression unSet = new PerformDBOperationExpression(); unSet.Operation = (connection, transaction) => { string sql = (Generator as FirebirdGenerator).GenerateSetType(colDef); Announcer.Sql(sql); using (var cmd = Factory.CreateCommand(sql, connection, transaction)) { cmd.CommandTimeout = Options.Timeout; cmd.ExecuteNonQuery(); } }; FirebirdProcessedExpressionBase fbExpression = new FirebirdProcessedExpression <AlterColumnExpression>(expression, this); if (this.FBOptions.UndoEnabled) { fbExpression.AddUndoExpression(unSet); } RegisterExpression(fbExpression); InternalProcess((Generator as FirebirdGenerator).GenerateSetType(expression.Column)); } bool identitySequenceExists; try { identitySequenceExists = SequenceExists(String.Empty, GetSequenceName(expression.TableName, expression.Column.Name)); } catch (ArgumentException) { identitySequenceExists = false; } //Adjust identity generators if (expression.Column.IsIdentity) { if (!identitySequenceExists) { CreateSequenceForIdentity(expression.TableName, expression.Column.Name); } } else { if (identitySequenceExists) { DeleteSequenceForIdentity(expression.TableName, expression.Column.Name); } } }
public void Process(Expressions.AlterColumnExpression expression) { Process(Generator.Generate(expression)); }
public override void Process(Expressions.AlterColumnExpression expression) { truncator.Truncate(expression); CheckColumn(expression.TableName, expression.Column.Name); FirebirdSchemaProvider schema = new FirebirdSchemaProvider(this, quoter); FirebirdTableSchema table = schema.GetTableSchema(expression.TableName); ColumnDefinition colDef = table.Definition.Columns.FirstOrDefault(x => x.Name == quoter.ToFbObjectName(expression.Column.Name)); var generator = (FirebirdGenerator)Generator; var tableName = expression.Column.TableName ?? expression.TableName; //Change nullable constraint if (colDef == null || colDef.IsNullable != expression.Column.IsNullable) { string nullConstraintCommand; if (IsFirebird3) { nullConstraintCommand = generator.GenerateSetNull3(tableName, expression.Column); } else { nullConstraintCommand = generator.GenerateSetNullPre3(tableName, expression.Column); } InternalProcess(nullConstraintCommand); } //Change default value if (colDef == null || !FirebirdGenerator.DefaultValuesMatch(colDef, expression.Column)) { IMigrationExpression defaultConstraint; if (expression.Column.DefaultValue is ColumnDefinition.UndefinedDefaultValue) { defaultConstraint = new DeleteDefaultConstraintExpression() { SchemaName = expression.SchemaName, TableName = expression.TableName, ColumnName = expression.Column.Name }; } else { defaultConstraint = new AlterDefaultConstraintExpression() { ColumnName = expression.Column.Name, DefaultValue = expression.Column.DefaultValue, TableName = expression.TableName, SchemaName = expression.SchemaName }; } if (defaultConstraint is DeleteDefaultConstraintExpression) { InternalProcess(Generator.Generate(defaultConstraint as DeleteDefaultConstraintExpression)); } else if (defaultConstraint is AlterDefaultConstraintExpression) { InternalProcess(Generator.Generate(defaultConstraint as AlterDefaultConstraintExpression)); } else { throw new InvalidOperationException("No expression generated for alter default constraint"); } } //Change type if (colDef == null || !FirebirdGenerator.ColumnTypesMatch(colDef, expression.Column)) { InternalProcess(generator.GenerateSetType(tableName, expression.Column)); } bool identitySequenceExists; try { identitySequenceExists = SequenceExists(String.Empty, GetSequenceName(expression.TableName, expression.Column.Name)); } catch (ArgumentException) { identitySequenceExists = false; } //Adjust identity generators if (expression.Column.IsIdentity) { if (!identitySequenceExists) { CreateSequenceForIdentity(expression.TableName, expression.Column.Name); } } else { if (identitySequenceExists) { DeleteSequenceForIdentity(expression.TableName, expression.Column.Name); } } }