private static void BuildAction(ITypeResolver typeResolver, ObjectName tableName, IAlterActionNode action, SqlCodeObjectBuilder builder) { if (action is AddColumnNode) { var column = ((AddColumnNode) action).Column; var constraints = new List<SqlTableConstraint>(); var columnInfo = column.BuildColumn(typeResolver, tableName.FullName, constraints); builder.AddObject(new AlterTableStatement(tableName, new AddColumnAction(columnInfo))); foreach (var constraint in constraints) { builder.AddObject(new AlterTableStatement(tableName, new AddConstraintAction(constraint))); } } else if (action is AddConstraintNode) { var constraint = ((AddConstraintNode) action).Constraint; var constraintInfo = constraint.BuildConstraint(); builder.AddObject(new AlterTableStatement(tableName, new AddConstraintAction(constraintInfo))); } else if (action is DropColumnNode) { var columnName = ((DropColumnNode) action).ColumnName; builder.AddObject(new AlterTableStatement(tableName, new DropColumnAction(columnName))); } else if (action is DropConstraintNode) { var constraintName = ((DropConstraintNode) action).ConstraintName; builder.AddObject(new AlterTableStatement(tableName, new DropConstraintAction(constraintName))); } else if (action is SetDefaultNode) { var actionNode = ((SetDefaultNode) action); var columnName = actionNode.ColumnName; var expression = ExpressionBuilder.Build(actionNode.Expression); builder.AddObject(new AlterTableStatement(tableName, new SetDefaultAction(columnName, expression))); } else if (action is DropDefaultNode) { var columnName = ((DropDefaultNode) action).ColumnName; builder.AddObject(new AlterTableStatement(tableName, new DropDefaultAction(columnName))); } else if (action is AlterColumnNode) { var column = ((AlterColumnNode) action).Column; var constraints = new List<SqlTableConstraint>(); var columnInfo = column.BuildColumn(typeResolver, tableName.FullName, constraints); // CHECK: Here we do a drop and add column: is there a better way on the back-end? builder.AddObject(new AlterTableStatement(tableName, new DropColumnAction(columnInfo.ColumnName))); builder.AddObject(new AlterTableStatement(tableName, new AddColumnAction(columnInfo))); foreach (var constraint in constraints) { builder.AddObject(new AlterTableStatement(tableName, new AddConstraintAction(constraint))); } } }
public virtual void VisitAlterTableAction(IAlterActionNode action) { }
private static void BuildAction(ITypeResolver typeResolver, ObjectName tableName, IAlterActionNode action, SqlCodeObjectBuilder builder) { if (action is AddColumnNode) { var column = ((AddColumnNode)action).Column; var constraints = new List <SqlTableConstraint>(); var columnInfo = column.BuildColumn(typeResolver, tableName.FullName, constraints); builder.AddObject(new AlterTableStatement(tableName, new AddColumnAction(columnInfo))); foreach (var constraint in constraints) { builder.AddObject(new AlterTableStatement(tableName, new AddConstraintAction(constraint))); } } else if (action is AddConstraintNode) { var constraint = ((AddConstraintNode)action).Constraint; var constraintInfo = constraint.BuildConstraint(); builder.AddObject(new AlterTableStatement(tableName, new AddConstraintAction(constraintInfo))); } else if (action is DropColumnNode) { var columnName = ((DropColumnNode)action).ColumnName; builder.AddObject(new AlterTableStatement(tableName, new DropColumnAction(columnName))); } else if (action is DropConstraintNode) { var constraintName = ((DropConstraintNode)action).ConstraintName; builder.AddObject(new AlterTableStatement(tableName, new DropConstraintAction(constraintName))); } else if (action is SetDefaultNode) { var actionNode = ((SetDefaultNode)action); var columnName = actionNode.ColumnName; var expression = ExpressionBuilder.Build(actionNode.Expression); builder.AddObject(new AlterTableStatement(tableName, new SetDefaultAction(columnName, expression))); } else if (action is DropDefaultNode) { var columnName = ((DropDefaultNode)action).ColumnName; builder.AddObject(new AlterTableStatement(tableName, new DropDefaultAction(columnName))); } else if (action is AlterColumnNode) { var column = ((AlterColumnNode)action).Column; var constraints = new List <SqlTableConstraint>(); var columnInfo = column.BuildColumn(typeResolver, tableName.FullName, constraints); // CHECK: Here we do a drop and add column: is there a better way on the back-end? builder.AddObject(new AlterTableStatement(tableName, new DropColumnAction(columnInfo.ColumnName))); builder.AddObject(new AlterTableStatement(tableName, new AddColumnAction(columnInfo))); foreach (var constraint in constraints) { builder.AddObject(new AlterTableStatement(tableName, new AddConstraintAction(constraint))); } } }