Пример #1
0
        private void Generate(AddDefaultConstraintOperation addDefaultConstraintOperation, IndentedStringBuilder builder)
        {
            var tableName  = addDefaultConstraintOperation.TableName;
            var columnName = addDefaultConstraintOperation.ColumnName;

            builder
            .Append("ALTER TABLE ")
            .Append(DelimitIdentifier(tableName))
            .Append(" ADD CONSTRAINT ")
            .Append(DelimitIdentifier("DF_" + tableName + "_" + columnName))
            .Append(" DEFAULT ");

            if (addDefaultConstraintOperation.DefaultSql != null)
            {
                builder.Append(addDefaultConstraintOperation.DefaultSql);
            }
            else
            {
                builder.Append(GenerateLiteral(addDefaultConstraintOperation.DefaultValue));
            }

            builder
            .Append(" FOR ")
            .Append(DelimitIdentifier(columnName));
        }
Пример #2
0
        public void ShouldAllowChangingConstraintName()
        {
            var op = new AddDefaultConstraintOperation("schema", "table", "name", "1", "expression", false);

            op.Name = "new name";
            Assert.That(op.Name, Is.EqualTo("new name"));
        }
        public override void Generate([NotNull] AddDefaultConstraintOperation addDefaultConstraintOperation, [NotNull] IndentedStringBuilder stringBuilder)
        {
            Check.NotNull(addDefaultConstraintOperation, "addDefaultConstraintOperation");
            Check.NotNull(stringBuilder, "stringBuilder");

            stringBuilder
            .Append("AddDefaultConstraint(")
            .Append(GenerateLiteral(addDefaultConstraintOperation.TableName))
            .Append(", ")
            .Append(GenerateLiteral(addDefaultConstraintOperation.ColumnName))
            .Append(", DefaultConstraint.");

            if (addDefaultConstraintOperation.DefaultValue != null)
            {
                stringBuilder
                .Append("Value(")
                .Append(GenerateLiteral((dynamic)addDefaultConstraintOperation.DefaultValue));
            }
            else
            {
                stringBuilder
                .Append("Sql(")
                .Append(GenerateLiteral(addDefaultConstraintOperation.DefaultSql));
            }

            stringBuilder.Append("))");
        }
 public override void Generate(
     AddDefaultConstraintOperation addDefaultConstraintOperation,
     IndentedStringBuilder stringBuilder)
 {
     // TODO: Rebuild table
     throw new NotImplementedException();
 }
        public void Generate_when_add_default_constraint_operation_with_default_value()
        {
            var operation = new AddDefaultConstraintOperation("dbo.MyTable", "Foo", 5, null);

            Assert.Equal(
                @"AddDefaultValue(""dbo.MyTable"", ""Foo"", 5)",
                CSharpMigrationCodeGenerator.Generate(operation));
        }
Пример #6
0
        public void ShouldDisableWhenMergedWithRemoveOperation()
        {
            var op       = new AddDefaultConstraintOperation("schema", "table", "name", "column", "expression", false);
            var removeOp = new RemoveDefaultConstraintOperation("SCHEMA", "TABLE", "COLUMN", "NAME");

            op.Merge(removeOp);
            Assert.That(op.Disabled, Is.True);
            Assert.That(removeOp.Disabled, Is.True);
        }
        public override void Visit(AddDefaultConstraintOperation operation, Context context)
        {
            Check.NotNull(operation, "operation");
            Check.NotNull(context, "context");

            var handler = context.EnsureHandler(operation.TableName, supported: false);

            handler.AddOperation(operation);
        }
Пример #8
0
        public void ShouldRenameConstraintWhenMergedWithRename()
        {
            var op       = new AddDefaultConstraintOperation("schema", "table", "name", "column", "expression", false);
            var renameOp = new RenameObjectOperation("SCHEMA", "NAME", "NEW NAME");

            op.Merge(renameOp);
            Assert.That(op.Name, Is.EqualTo("NEW NAME"));
            Assert.That(op.Disabled, Is.False);
            Assert.That(renameOp.Disabled, Is.True);
        }
        public void Generate_when_add_default_constraint_operation_with_default_sql()
        {
            var operation = new AddDefaultConstraintOperation("dbo.MyTable", "Foo", null, "GETDATE()");

            Assert.Equal(
                @"AddDefaultExpression(""dbo.MyTable"", ""Foo"", ""GETDATE()"")",
                CSharpMigrationCodeGenerator.Generate(operation));

            GenerateAndValidateCode(operation);
        }
        public virtual void Visit(AddDefaultConstraintOperation addDefaultConstraintOperation, DatabaseModel databaseModel)
        {
            var table  = databaseModel.GetTable(addDefaultConstraintOperation.TableName);
            var column = table.GetColumn(addDefaultConstraintOperation.ColumnName);

            Contract.Assert(!column.HasDefault);

            column.DefaultValue = addDefaultConstraintOperation.DefaultValue;
            column.DefaultSql   = addDefaultConstraintOperation.DefaultSql;
        }
        public void Dispatches_visitor()
        {
            var addDefaultConstraintOperation = new AddDefaultConstraintOperation(
                "dbo.MyTable", "Foo", "MyDefault", null);
            var mockVisitor = new Mock <MigrationOperationSqlGenerator>(new RelationalTypeMapper());
            var builder     = new Mock <IndentedStringBuilder>();

            addDefaultConstraintOperation.GenerateSql(mockVisitor.Object, builder.Object);

            mockVisitor.Verify(g => g.Generate(addDefaultConstraintOperation, builder.Object), Times.Once());
        }
Пример #12
0
        public void Dispatches_visitor()
        {
            var addDefaultConstraintOperation = new AddDefaultConstraintOperation(
                "dbo.MyTable", "Foo", "MyDefault", null);
            var mockVisitor = MigrationsTestHelpers.MockSqlGenerator();
            var builder     = new Mock <SqlBatchBuilder>();

            addDefaultConstraintOperation.GenerateSql(mockVisitor.Object, builder.Object);

            mockVisitor.Verify(g => g.Generate(addDefaultConstraintOperation, builder.Object), Times.Once());
        }
Пример #13
0
        public override void Visit(AddDefaultConstraintOperation addDefaultConstraintOperation, DatabaseModel databaseModel)
        {
            Check.NotNull(addDefaultConstraintOperation, "addDefaultConstraintOperation");
            Check.NotNull(databaseModel, "databaseModel");

            var table  = databaseModel.GetTable(addDefaultConstraintOperation.TableName);
            var column = table.GetColumn(addDefaultConstraintOperation.ColumnName);

            Contract.Assert(!column.HasDefault);

            column.DefaultValue = addDefaultConstraintOperation.DefaultValue;
            column.DefaultSql   = addDefaultConstraintOperation.DefaultSql;
        }
Пример #14
0
        public virtual void Generate([NotNull] AddDefaultConstraintOperation addDefaultConstraintOperation, [NotNull] IndentedStringBuilder stringBuilder)
        {
            Check.NotNull(addDefaultConstraintOperation, "addDefaultConstraintOperation");

            stringBuilder
            .Append("ALTER TABLE ")
            .Append(DelimitIdentifier(addDefaultConstraintOperation.TableName))
            .Append(" ALTER COLUMN ")
            .Append(DelimitIdentifier(addDefaultConstraintOperation.ColumnName))
            .Append(" SET DEFAULT ");

            stringBuilder.Append(addDefaultConstraintOperation.DefaultSql ?? GenerateLiteral((dynamic)addDefaultConstraintOperation.DefaultValue));
        }
Пример #15
0
        public void Visit_with_add_default_constraint_operation()
        {
            var model     = new DatabaseModel();
            var column    = new Column("Foo", typeof(int));
            var table     = new Table("dbo.MyTable", new[] { column });
            var operation = new AddDefaultConstraintOperation("dbo.MyTable", "Foo", 5, "Sql");

            model.AddTable(table);

            operation.Accept(new DatabaseModelModifier(), model);

            Assert.Equal(5, column.DefaultValue);
            Assert.Equal("Sql", column.DefaultSql);
        }
Пример #16
0
        public void ShouldSetPropertiesForAddDefaultConstraintWithNoValues()
        {
            const string schemaName = "schemaName";
            const string tableName  = "tableName";
            const string columnName = "columnName";
            const string expression = "expression";
            const string name       = "name";
            const bool   withValues = false;

            var op = new AddDefaultConstraintOperation(schemaName, tableName, name, columnName, expression, withValues);

            Assert.AreEqual(withValues, op.WithValues);
            var expectedQuery = $"alter table [{schemaName}].[{tableName}] add constraint [{name}] default {expression} for [{columnName}]";

            Assert.AreEqual(expectedQuery, op.ToQuery());
        }
Пример #17
0
        public void ShouldNotAddDefaultExpressionIfUsingWithValuesClauseWhenMerging()
        {
            var columns = new Column[]
            {
                Column.Int("id", null, "description"),
                Column.VarChar("column", new CharacterLength(50), "collation", Nullable.Null, null, null, "description")
            };
            var op = new AddTableOperation("schema", "table", columns, false, "file group", "text image file group", "filestreamfilegroup", new string[0]);
            var addDefaultConstraintOp =
                new AddDefaultConstraintOperation("SCHEMA", "TABLE", "NAME", "COLUMN", "default", true);

            op.Merge(addDefaultConstraintOp);
            Assert.That(op.Disabled, Is.False);
            Assert.That(addDefaultConstraintOp.Disabled, Is.False);
            Assert.That(columns[0].DefaultExpression, Is.Null);
            Assert.That(columns[1].DefaultExpression, Is.Null);
        }
        public void ShouldAddDefaultExpressionAndConstraintNameToAddedColumnsAndDisableAddDefaultConstraint()
        {
            var columns = new[]
            {
                Column.Int("column1", Nullable.NotNull, null, null, "description"),
                Column.Int("column2", Nullable.NotNull, null, null, "description"),
            };
            var op = new UpdateTableOperation("schema", "table", columns, new Column[0], new string[0]);
            var addDefaultConstraintOp =
                new AddDefaultConstraintOperation("SCHEMA", "TABLE", "NAME", "COLUMN2", "expression", false);

            op.Merge(addDefaultConstraintOp);
            Assert.That(op.Disabled, Is.False);
            Assert.That(addDefaultConstraintOp.Disabled, Is.True);
            Assert.That(op.AddColumns[0].DefaultExpression, Is.Null);
            Assert.That(op.AddColumns[0].DefaultConstraintName, Is.Null);
            Assert.That(op.AddColumns[1].DefaultExpression, Is.EqualTo("expression"));
            Assert.That(op.AddColumns[1].DefaultConstraintName, Is.EqualTo("NAME"));
        }
        public void ShouldNotAddDefaultExpressionToUpdatedColumnsWhenDefaultConstraintWithValues()
        {
            var columns = new Column[]
            {
                Column.Int("column1", Nullable.NotNull, null, null, "description"),
                Column.Int("column2", Nullable.NotNull, null, null, "description"),
            };
            var op = new UpdateTableOperation("schema", "table", new Column[0], columns, new string[0]);
            var addDefaultConstraintOp =
                new AddDefaultConstraintOperation("SCHEMA", "TABLE", "NAME", "COLUMN2", "expression", true);

            op.Merge(addDefaultConstraintOp);
            Assert.That(op.Disabled, Is.False);
            Assert.That(addDefaultConstraintOp.Disabled, Is.False);
            Assert.That(op.UpdateColumns[0].DefaultExpression, Is.Null);
            Assert.That(op.UpdateColumns[0].DefaultConstraintName, Is.Null);
            Assert.That(op.UpdateColumns[1].DefaultExpression, Is.Null);
            Assert.That(op.UpdateColumns[1].DefaultConstraintName, Is.Null);
        }
Пример #20
0
        public void ShouldNotMergeDefaultConstraintNameWhenMergingAddDefaultConstraintWithValuesOp()
        {
            var columns = new[]
            {
                Column.Int("ID", Nullable.NotNull, null, null, null),
                Column.VarChar("Name", new CharacterLength(500), null, Nullable.NotNull, null, null, null),
            };
            var op = new AddTableOperation("schema", "table", columns, false, null, null, null, new string[0]);
            var addDefaultConstraintOp =
                new AddDefaultConstraintOperation("SCHEMA", "TABLE", "DF_NAME", "NAME", "expression", true);

            op.Merge(addDefaultConstraintOp);
            Assert.That(op.Disabled, Is.False);
            Assert.That(addDefaultConstraintOp.Disabled, Is.False);
            Assert.That(op.Columns[0].DefaultExpression, Is.Null);
            Assert.That(op.Columns[0].DefaultConstraintName, Is.Null);
            Assert.That(op.Columns[1].DefaultExpression, Is.Null);
            Assert.That(op.Columns[1].DefaultConstraintName, Is.Null);
        }
Пример #21
0
        public void Create_and_initialize_operation()
        {
            var addDefaultConstraintOperation = new AddDefaultConstraintOperation(
                "dbo.MyTable", "Foo", "MyDefault", null);

            Assert.Equal("dbo.MyTable", addDefaultConstraintOperation.TableName);
            Assert.Same("Foo", addDefaultConstraintOperation.ColumnName);
            Assert.Equal("MyDefault", addDefaultConstraintOperation.DefaultValue);
            Assert.Null(addDefaultConstraintOperation.DefaultSql);
            Assert.False(addDefaultConstraintOperation.IsDestructiveChange);

            var addDefaultConstraintOperation2 = new AddDefaultConstraintOperation(
                "dbo.MyTable", "Foo", null, "GETDATE()");

            Assert.Equal("dbo.MyTable", addDefaultConstraintOperation2.TableName);
            Assert.Same("Foo", addDefaultConstraintOperation2.ColumnName);
            Assert.Null(addDefaultConstraintOperation2.DefaultValue);
            Assert.Equal("GETDATE()", addDefaultConstraintOperation2.DefaultSql);
            Assert.False(addDefaultConstraintOperation2.IsDestructiveChange);
        }
        public override void Generate(AddDefaultConstraintOperation addDefaultConstraintOperation, IndentedStringBuilder stringBuilder)
        {
            Check.NotNull(addDefaultConstraintOperation, "addDefaultConstraintOperation");
            Check.NotNull(stringBuilder, "stringBuilder");

            var tableName  = addDefaultConstraintOperation.TableName;
            var columnName = addDefaultConstraintOperation.ColumnName;

            stringBuilder
            .Append("ALTER TABLE ")
            .Append(DelimitIdentifier(tableName))
            .Append(" ADD CONSTRAINT ")
            .Append(DelimitIdentifier("DF_" + tableName + "_" + columnName))
            .Append(" DEFAULT ");

            stringBuilder.Append(addDefaultConstraintOperation.DefaultSql ?? GenerateLiteral(addDefaultConstraintOperation.DefaultValue));

            stringBuilder
            .Append(" FOR ")
            .Append(DelimitIdentifier(columnName));
        }
Пример #23
0
        public override void Generate(AddDefaultConstraintOperation addDefaultConstraintOperation, IndentedStringBuilder stringBuilder, bool generateIdempotentSql)
        {
            Check.NotNull(addDefaultConstraintOperation, "addDefaultConstraintOperation");
            Check.NotNull(stringBuilder, "stringBuilder");

            if (generateIdempotentSql)
            {
                GenerateColumnDefaultPresenceCheck(
                    addDefaultConstraintOperation.TableName,
                    addDefaultConstraintOperation.ColumnName,
                    negative: true,
                    builder: stringBuilder);

                using (stringBuilder.AppendLine().Indent())
                {
                    Generate(addDefaultConstraintOperation, stringBuilder);
                }
            }
            else
            {
                Generate(addDefaultConstraintOperation, stringBuilder);
            }
        }
Пример #24
0
 public abstract void Generate([NotNull] AddDefaultConstraintOperation addDefaultConstraintOperation, [NotNull] IndentedStringBuilder stringBuilder);