示例#1
0
        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)));
                }
            }
        }
示例#2
0
 public virtual void VisitAlterTableAction(IAlterActionNode action)
 {
 }
示例#3
0
 public virtual void VisitAlterTableAction(IAlterActionNode action)
 {
 }
示例#4
0
        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)));
                }
            }
        }