public override void Generate(RenameSequenceOperation operation, IModel model, SqlBatchBuilder builder) { Check.NotNull(operation, nameof(operation)); Check.NotNull(builder, nameof(builder)); var separate = false; var name = operation.Name; if (operation.NewName != null) { var qualifiedName = new StringBuilder(); if (operation.Schema != null) { qualifiedName .Append(operation.Schema) .Append("."); } qualifiedName.Append(operation.Name); Rename(qualifiedName.ToString(), operation.NewName, builder); separate = true; name = operation.NewName; } if (operation.NewSchema != null) { if (separate) { builder.AppendLine(_sql.BatchCommandSeparator); } Transfer(operation.NewSchema, operation.Schema, name, builder); } }
public void SqlBatchBuilder_correctly_produces_multiple_batches() { var batchBuilder = new SqlBatchBuilder(); batchBuilder.AppendLine("Statement1"); batchBuilder.EndBatch(); batchBuilder.AppendLine("Statement2"); batchBuilder.AppendLine("Statement3"); batchBuilder.EndBatch(); batchBuilder.AppendLine("Statement4"); batchBuilder.AppendLine("Statement5"); batchBuilder.AppendLine("Statement6"); batchBuilder.EndBatch(); Assert.Equal(3, batchBuilder.SqlBatches.Count); Assert.Equal( @"Statement1 ", batchBuilder.SqlBatches[0].Sql); Assert.Equal( @"Statement2 Statement3 ", batchBuilder.SqlBatches[1].Sql); Assert.Equal( @"Statement4 Statement5 Statement6 ", batchBuilder.SqlBatches[2].Sql); }
public void SqlBatchBuilder_correctly_groups_multiple_statements_into_one_batch() { var batchBuilder = new SqlBatchBuilder(); batchBuilder.AppendLine("Statement1"); batchBuilder.AppendLine("Statement2"); batchBuilder.AppendLine("Statement3"); batchBuilder.EndBatch(); Assert.Equal(1, batchBuilder.SqlBatches.Count); Assert.Equal( @"Statement1 Statement2 Statement3 ", batchBuilder.SqlBatches[0].Sql); }
public void SqlBatchBuilder_ignores_empty_batches() { var batchBuilder = new SqlBatchBuilder(); batchBuilder.AppendLine("Statement1"); batchBuilder.EndBatch(); batchBuilder.EndBatch(); batchBuilder.EndBatch(); batchBuilder.AppendLine("Statement2"); batchBuilder.AppendLine("Statement3"); batchBuilder.EndBatch(); batchBuilder.EndBatch(); Assert.Equal(2, batchBuilder.SqlBatches.Count); Assert.Equal( @"Statement1 ", batchBuilder.SqlBatches[0].Sql); Assert.Equal( @"Statement2 Statement3 ", batchBuilder.SqlBatches[1].Sql); }
public virtual void Generate([NotNull] CreateTableOperation createTableOperation, [NotNull] SqlBatchBuilder batchBuilder) { Check.NotNull(createTableOperation, "createTableOperation"); Check.NotNull(batchBuilder, "batchBuilder"); EnsureSchema(createTableOperation.TableName.Schema, batchBuilder); batchBuilder .Append("CREATE TABLE ") .Append(DelimitIdentifier(createTableOperation.TableName)) .AppendLine(" ("); using (batchBuilder.Indent()) { GenerateColumns(createTableOperation, batchBuilder); GenerateTableConstraints(createTableOperation, batchBuilder); } batchBuilder .AppendLine() .Append(")"); }
public override void ColumnDefinition( string schema, string table, string name, string type, bool nullable, object defaultValue, string defaultExpression, IAnnotatable annotatable, IModel model, SqlBatchBuilder builder) { Check.NotEmpty(name, nameof(name)); Check.NotEmpty(type, nameof(type)); Check.NotNull(annotatable, nameof(annotatable)); Check.NotNull(builder, nameof(builder)); var computedExpression = annotatable[SqlServerAnnotationNames.Prefix + SqlServerAnnotationNames.ColumnComputedExpression]; if (computedExpression != null) { builder .Append(_sql.DelimitIdentifier(name)) .Append(" AS ") .Append(computedExpression); return; } base.ColumnDefinition( schema, table, name, type, nullable, defaultValue, defaultExpression, annotatable, model, builder); var valueGeneration = (string)annotatable[SqlServerAnnotationNames.Prefix + SqlServerAnnotationNames.ValueGeneration]; if (valueGeneration == "Identity") { builder.Append(" IDENTITY"); } }
public virtual void Generate([NotNull] AlterColumnOperation alterColumnOperation, [NotNull] SqlBatchBuilder batchBuilder) { Check.NotNull(alterColumnOperation, "alterColumnOperation"); Check.NotNull(batchBuilder, "batchBuilder"); var newColumn = alterColumnOperation.NewColumn; batchBuilder .Append("ALTER TABLE ") .Append(DelimitIdentifier(alterColumnOperation.TableName)) .Append(" ALTER COLUMN ") .Append(DelimitIdentifier(newColumn.Name)) .Append(" "); GenerateColumnType(alterColumnOperation.TableName, newColumn, batchBuilder); batchBuilder .Append(newColumn.IsNullable ? " NULL" : " NOT NULL"); }
protected abstract void Generate( [NotNull] AlterColumnOperation operation, [CanBeNull] IModel model, [NotNull] SqlBatchBuilder builder);
protected abstract void Generate( [NotNull] EnsureSchemaOperation operation, [CanBeNull] IModel model, [NotNull] SqlBatchBuilder builder);
protected override void Generate(EnsureSchemaOperation operation, IModel model, SqlBatchBuilder builder) { }
protected override void Generate(AlterColumnOperation operation, IModel model, SqlBatchBuilder builder) { }
public virtual void Generate([NotNull] DropIndexOperation dropIndexOperation, [NotNull] SqlBatchBuilder batchBuilder) { Check.NotNull(dropIndexOperation, "dropIndexOperation"); Check.NotNull(batchBuilder, "batchBuilder"); batchBuilder .Append("DROP INDEX ") .Append(DelimitIdentifier(dropIndexOperation.IndexName)); }
public abstract void Generate([NotNull] RenameIndexOperation renameIndexOperation, [NotNull] SqlBatchBuilder batchBuilder);
public virtual void Generate([NotNull] DropForeignKeyOperation dropForeignKeyOperation, [NotNull] SqlBatchBuilder batchBuilder) { Check.NotNull(dropForeignKeyOperation, "dropForeignKeyOperation"); Check.NotNull(batchBuilder, "batchBuilder"); batchBuilder .Append("ALTER TABLE ") .Append(DelimitIdentifier(dropForeignKeyOperation.TableName)) .Append(" DROP CONSTRAINT ") .Append(DelimitIdentifier(dropForeignKeyOperation.ForeignKeyName)); }
public virtual void Generate([NotNull] CreateIndexOperation createIndexOperation, [NotNull] SqlBatchBuilder batchBuilder) { Check.NotNull(createIndexOperation, "createIndexOperation"); Check.NotNull(batchBuilder, "batchBuilder"); batchBuilder.Append("CREATE"); if (createIndexOperation.IsUnique) { batchBuilder.Append(" UNIQUE"); } // TODO: Move to SqlServer if (createIndexOperation.IsClustered) { batchBuilder.Append(" CLUSTERED"); } batchBuilder .Append(" INDEX ") .Append(DelimitIdentifier(createIndexOperation.IndexName)) .Append(" ON ") .Append(DelimitIdentifier(createIndexOperation.TableName)) .Append(" (") .Append(createIndexOperation.ColumnNames.Select(DelimitIdentifier).Join()) .Append(")"); }
public virtual void Generate([NotNull] AddForeignKeyOperation addForeignKeyOperation, [NotNull] SqlBatchBuilder batchBuilder) { Check.NotNull(addForeignKeyOperation, "addForeignKeyOperation"); Check.NotNull(batchBuilder, "batchBuilder"); batchBuilder .Append("ALTER TABLE ") .Append(DelimitIdentifier(addForeignKeyOperation.TableName)) .Append(" ADD "); GenerateForeignKey(addForeignKeyOperation, batchBuilder); }
public virtual void Generate([NotNull] DropDefaultConstraintOperation dropDefaultConstraintOperation, [NotNull] SqlBatchBuilder batchBuilder) { Check.NotNull(dropDefaultConstraintOperation, "dropDefaultConstraintOperation"); Check.NotNull(batchBuilder, "batchBuilder"); batchBuilder .Append("ALTER TABLE ") .Append(DelimitIdentifier(dropDefaultConstraintOperation.TableName)) .Append(" ALTER COLUMN ") .Append(DelimitIdentifier(dropDefaultConstraintOperation.ColumnName)) .Append(" DROP DEFAULT"); }
public virtual void Generate([NotNull] AddDefaultConstraintOperation addDefaultConstraintOperation, [NotNull] SqlBatchBuilder batchBuilder) { Check.NotNull(addDefaultConstraintOperation, "addDefaultConstraintOperation"); Check.NotNull(batchBuilder, "batchBuilder"); batchBuilder .Append("ALTER TABLE ") .Append(DelimitIdentifier(addDefaultConstraintOperation.TableName)) .Append(" ALTER COLUMN ") .Append(DelimitIdentifier(addDefaultConstraintOperation.ColumnName)) .Append(" SET DEFAULT "); batchBuilder.Append(addDefaultConstraintOperation.DefaultSql ?? GenerateLiteral((dynamic)addDefaultConstraintOperation.DefaultValue)); }
public override void Generate(RenameIndexOperation operation, IModel model, SqlBatchBuilder builder) { throw new NotImplementedException(); }
protected abstract void EnsureSchema([CanBeNull] string schema, [NotNull] SqlBatchBuilder batchBuilder);
public override void Generate(AlterColumnOperation operation, IModel model, SqlBatchBuilder builder) { throw new NotImplementedException(); }
protected virtual void GenerateColumnTraits(SchemaQualifiedName tableName, [NotNull] Column column, [NotNull] SqlBatchBuilder batchBuilder) { }
protected override void Generate(RenameIndexOperation operation, IModel model, SqlBatchBuilder builder) { }
protected virtual void GeneratePrimaryKeyTraits( [NotNull] AddPrimaryKeyOperation primaryKeyOperation, [NotNull] SqlBatchBuilder batchBuilder) { }
public override void GenerateSql( MigrationOperationSqlGenerator generator, SqlBatchBuilder batchBuilder) { }
protected override void Generate(RenameIndexOperation operation, IModel model, SqlBatchBuilder builder) { Check.NotNull(operation, nameof(operation)); Check.NotNull(builder, nameof(builder)); GenerateRename( _sql.EscapeLiteral(operation.Table) + "." + _sql.EscapeLiteral(operation.Name), operation.Schema, operation.NewName, "INDEX", builder); }
protected abstract void Generate( [NotNull] RenameTableOperation operation, [CanBeNull] IModel model, [NotNull] SqlBatchBuilder builder);
public override void ForeignKeyAction(ReferentialAction referentialAction, SqlBatchBuilder builder) { Check.NotNull(builder, nameof(builder)); if (referentialAction == ReferentialAction.Restrict) { builder.Append("NO ACTION"); } else { base.ForeignKeyAction(referentialAction, builder); } }
protected abstract void Generate( [NotNull] DropIndexOperation operation, [CanBeNull] IModel model, [NotNull] SqlBatchBuilder builder);
public virtual void Generate([NotNull] DropTableOperation dropTableOperation, [NotNull] SqlBatchBuilder batchBuilder) { Check.NotNull(dropTableOperation, "dropTableOperation"); Check.NotNull(batchBuilder, "batchBuilder"); batchBuilder .Append("DROP TABLE ") .Append(DelimitIdentifier(dropTableOperation.TableName)); }
public override void IndexTraits(MigrationOperation operation, IModel model, SqlBatchBuilder builder) { Check.NotNull(operation, nameof(operation)); Check.NotNull(builder, nameof(builder)); var clustered = (string)operation[SqlServerAnnotationNames.Prefix + SqlServerAnnotationNames.Clustered]; if (clustered != null) { builder.Append(clustered == "True" ? "CLUSTERED " : "NONCLUSTERED "); } }
public abstract void Generate([NotNull] MoveTableOperation moveTableOperation, [NotNull] SqlBatchBuilder batchBuilder);
protected override void GeneratePrimaryKeyTraits(AddPrimaryKeyOperation operation, SqlBatchBuilder builder) { Check.NotNull(operation, nameof(operation)); Check.NotNull(builder, nameof(builder)); if (operation[NpgsqlAnnotationNames.Prefix + NpgsqlAnnotationNames.Clustered] != bool.TrueString) { builder.Append(" NONCLUSTERED"); } }
protected virtual void GenerateTableConstraints([NotNull] CreateTableOperation createTableOperation, [NotNull] SqlBatchBuilder batchBuilder) { Check.NotNull(createTableOperation, "createTableOperation"); Check.NotNull(batchBuilder, "batchBuilder"); var addPrimaryKeyOperation = createTableOperation.PrimaryKey; if (addPrimaryKeyOperation != null) { batchBuilder.AppendLine(","); GeneratePrimaryKey(addPrimaryKeyOperation, batchBuilder); } foreach (var addUniqueConstraintOperation in createTableOperation.UniqueConstraints) { batchBuilder.AppendLine(","); GenerateUniqueConstraint(addUniqueConstraintOperation, batchBuilder); } }
protected override void Generate(MoveSequenceOperation operation, IModel model, SqlBatchBuilder builder) { Check.NotNull(operation, nameof(operation)); Check.NotNull(builder, nameof(builder)); GenerateMove(operation.Name, operation.Schema, operation.NewSchema, builder); }
protected override void Generate(RenameTableOperation operation, IModel model, SqlBatchBuilder builder) { Check.NotNull(operation, nameof(operation)); Check.NotNull(builder, nameof(builder)); GenerateRename(operation.Name, operation.Schema, operation.NewName, "OBJECT", builder); }
public void SqlBatchBuilder_correctly_splits_statements_to_multiple_batches_when_transaction_is_suppressed() { var batchBuilder = new SqlBatchBuilder(); batchBuilder.AppendLine("Statement1"); batchBuilder.AppendLine("Statement2"); batchBuilder.AppendLine("Statement3", suppressTransaction: true); batchBuilder.AppendLine("Statement4"); batchBuilder.AppendLine("Statement5"); batchBuilder.AppendLine("Statement6", suppressTransaction: true); batchBuilder.AppendLine("Statement7", suppressTransaction: true); batchBuilder.EndBatch(); Assert.Equal(2, batchBuilder.SqlBatches.Count); Assert.False(batchBuilder.SqlBatches[0].SuppressTransaction); Assert.Equal( @"Statement1 Statement2 ", batchBuilder.SqlBatches[0].Sql); Assert.True(batchBuilder.SqlBatches[1].SuppressTransaction); Assert.Equal( @"Statement3 Statement4 Statement5 Statement6 Statement7 ", batchBuilder.SqlBatches[1].Sql); }
public virtual void Generate([NotNull] AlterSequenceOperation alterSequenceOperation, [NotNull] SqlBatchBuilder batchBuilder) { Check.NotNull(alterSequenceOperation, "alterSequenceOperation"); Check.NotNull(batchBuilder, "batchBuilder"); batchBuilder .Append("ALTER SEQUENCE ") .Append(DelimitIdentifier(alterSequenceOperation.SequenceName)) .Append(" INCREMENT BY ") .Append(alterSequenceOperation.NewIncrementBy); }