protected override void Generate(DropIndexOperation operation, IModel model, RelationalCommandListBuilder builder) { Check.NotNull(operation, nameof(operation)); Check.NotNull(builder, nameof(builder)); builder .Append("DROP INDEX ") .Append(SqlGenerator.DelimitIdentifier(operation.Name)); }
protected override void Generate(RenameTableOperation operation, IModel model, RelationalCommandListBuilder builder) { Check.NotNull(operation, nameof(operation)); Check.NotNull(builder, nameof(builder)); if (operation.NewName != null) { builder .Append("ALTER TABLE ") .Append(SqlGenerator.DelimitIdentifier(operation.Name)) .Append(" RENAME TO ") .Append(SqlGenerator.DelimitIdentifier(operation.NewName)); } }
public virtual IReadOnlyList<IRelationalCommand> Generate( IReadOnlyList<MigrationOperation> operations, IModel model = null) { Check.NotNull(operations, nameof(operations)); var builder = new RelationalCommandListBuilder(_commandBuilderFactory); foreach (var operation in operations) { Generate(operation, model, builder); builder .AppendLine(SqlGenerator.BatchCommandSeparator) .EndCommand(); } return builder.GetCommands(); }
protected override void Generate( AlterColumnOperation operation, IModel model, RelationalCommandListBuilder builder) { Check.NotNull(operation, nameof(operation)); Check.NotNull(builder, nameof(builder)); DropDefaultConstraint(operation.Schema, operation.Table, operation.Name, builder); builder .Append("ALTER TABLE ") .Append(SqlGenerator.DelimitIdentifier(operation.Table, operation.Schema)) .Append(" ALTER COLUMN "); ColumnDefinition( operation.Schema, operation.Table, operation.Name, operation.ClrType, operation.ColumnType, operation.IsNullable, /*defaultValue:*/ null, /*defaultValueSql:*/ null, operation.ComputedColumnSql, /*identity:*/ false, operation, model, builder); if (operation.DefaultValue != null || operation.DefaultValueSql != null) { builder .AppendLine(";") .Append("ALTER TABLE ") .Append(SqlGenerator.DelimitIdentifier(operation.Table, operation.Schema)) .Append(" ADD"); DefaultValue(operation.DefaultValue, operation.DefaultValueSql, builder); builder .Append(" FOR ") .Append(SqlGenerator.DelimitIdentifier(operation.Name)); } }
protected override void Generate(MigrationOperation operation, IModel model, RelationalCommandListBuilder builder) { Check.NotNull(operation, nameof(operation)); Check.NotNull(builder, nameof(builder)); var createDatabaseOperation = operation as SqlServerCreateDatabaseOperation; var dropDatabaseOperation = operation as SqlServerDropDatabaseOperation; if (createDatabaseOperation != null) { Generate(createDatabaseOperation, model, builder); } else if (dropDatabaseOperation != null) { Generate(dropDatabaseOperation, model, builder); } else { base.Generate(operation, model, builder); } }
protected override void Generate(CreateTableOperation operation, IModel model, RelationalCommandListBuilder builder) { Check.NotNull(operation, nameof(operation)); Check.NotNull(builder, nameof(builder)); // Lifts a primary key definition into the typename. // This handles the quirks of creating integer primary keys using autoincrement, not default rowid behavior. if (operation.PrimaryKey?.Columns.Length == 1) { var columnOp = operation.Columns.FirstOrDefault(o => o.Name == operation.PrimaryKey.Columns[0]); if (columnOp != null) { columnOp.AddAnnotation(SqliteAnnotationNames.Prefix + SqliteAnnotationNames.InlinePrimaryKey, true); if (!string.IsNullOrEmpty(operation.PrimaryKey.Name)) { columnOp.AddAnnotation(SqliteAnnotationNames.Prefix + SqliteAnnotationNames.InlinePrimaryKeyName, operation.PrimaryKey.Name); } operation.PrimaryKey = null; } } base.Generate(operation, model, builder); }
protected override void Generate(EnsureSchemaOperation operation, IModel model, RelationalCommandListBuilder builder) { }
protected override void Generate(EnsureSchemaOperation operation, IModel model, RelationalCommandListBuilder builder) { Check.NotNull(operation, nameof(operation)); Check.NotNull(builder, nameof(builder)); if (string.Equals(operation.Name, "DBO", StringComparison.OrdinalIgnoreCase)) { return; } builder .Append("IF SCHEMA_ID(N") .Append(SqlGenerator.GenerateLiteral(operation.Name)) .Append(") IS NULL EXEC(N'CREATE SCHEMA ") .Append(SqlGenerator.DelimitIdentifier(operation.Name)) .Append("')"); }
protected override void Generate(CreateIndexOperation operation, IModel model, RelationalCommandListBuilder builder) { base.Generate(operation, model, builder); var clustered = operation[SqlServerAnnotationNames.Prefix + SqlServerAnnotationNames.Clustered] as bool?; if (operation.IsUnique && clustered != true) { builder.Append(" WHERE "); for (var i = 0; i < operation.Columns.Length; i++) { if (i != 0) { builder.Append(" AND "); } builder .Append(SqlGenerator.DelimitIdentifier(operation.Columns[i])) .Append(" IS NOT NULL"); } } }
protected override void Generate(EnsureSchemaOperation operation, IModel model, RelationalCommandListBuilder builder) { throw new NotSupportedException(SqliteStrings.SchemasNotSupported); }
protected override void Generate(DropSequenceOperation operation, IModel model, RelationalCommandListBuilder builder) { throw new NotSupportedException(SqliteStrings.SequencesNotSupported); }
protected override void Generate(DropUniqueConstraintOperation operation, IModel model, RelationalCommandListBuilder builder) { throw new NotSupportedException(SqliteStrings.InvalidMigrationOperation); }
protected override void Generate(AlterColumnOperation operation, IModel model, RelationalCommandListBuilder builder) { throw new NotSupportedException(SqliteStrings.InvalidMigrationOperation); }
protected override void Generate(AlterColumnOperation operation, IModel model, RelationalCommandListBuilder builder) { }
protected override void ColumnDefinition( string schema, string table, string name, Type clrType, string type, bool nullable, object defaultValue, string defaultValueSql, string computedColumnSql, IAnnotatable annotatable, IModel model, RelationalCommandListBuilder builder) { base.ColumnDefinition( schema, table, name, clrType, type, nullable, defaultValue, defaultValueSql, computedColumnSql, annotatable, model, builder); var inlinePk = annotatable[SqliteAnnotationNames.Prefix + SqliteAnnotationNames.InlinePrimaryKey] as bool?; if (inlinePk == true) { var inlinePkName = annotatable[ SqliteAnnotationNames.Prefix + SqliteAnnotationNames.InlinePrimaryKeyName] as string; if (!string.IsNullOrEmpty(inlinePkName)) { builder .Append(" CONSTRAINT ") .Append(SqlGenerator.DelimitIdentifier(inlinePkName)); } builder.Append(" PRIMARY KEY"); var autoincrement = annotatable[SqliteAnnotationNames.Prefix + SqliteAnnotationNames.Autoincrement] as bool?; if (autoincrement == true) { builder.Append(" AUTOINCREMENT"); } } }
protected override void Generate( RenameTableOperation operation, IModel model, RelationalCommandListBuilder 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(SqlGenerator.BatchCommandSeparator); } Transfer(operation.NewSchema, operation.Schema, name, builder); } }
protected override void Generate(RenameIndexOperation operation, IModel model, RelationalCommandListBuilder builder) { }
protected override void Generate( RenameIndexOperation operation, IModel model, RelationalCommandListBuilder builder) { Check.NotNull(operation, nameof(operation)); Check.NotNull(builder, nameof(builder)); var qualifiedName = new StringBuilder(); if (operation.Schema != null) { qualifiedName .Append(operation.Schema) .Append("."); } qualifiedName .Append(operation.Table) .Append(".") .Append(operation.Name); Rename(qualifiedName.ToString(), operation.NewName, "INDEX", builder); }
protected override void Generate( DropColumnOperation operation, IModel model, RelationalCommandListBuilder builder) { Check.NotNull(operation, nameof(operation)); Check.NotNull(builder, nameof(builder)); DropDefaultConstraint(operation.Schema, operation.Table, operation.Name, builder); base.Generate(operation, model, builder); }
protected override void ForeignKeyAction(ReferentialAction referentialAction, RelationalCommandListBuilder builder) { Check.NotNull(builder, nameof(builder)); if (referentialAction == ReferentialAction.Restrict) { builder.Append("NO ACTION"); } else { base.ForeignKeyAction(referentialAction, builder); } }
protected override void IndexTraits(MigrationOperation operation, IModel model, RelationalCommandListBuilder builder) { Check.NotNull(operation, nameof(operation)); Check.NotNull(builder, nameof(builder)); var clustered = operation[SqlServerAnnotationNames.Prefix + SqlServerAnnotationNames.Clustered] as bool?; if (clustered.HasValue) { builder.Append(clustered.Value ? "CLUSTERED " : "NONCLUSTERED "); } }
protected override void ColumnDefinition( string schema, string table, string name, Type clrType, string type, bool nullable, object defaultValue, string defaultValueSql, string computedColumnSql, IAnnotatable annotatable, IModel model, RelationalCommandListBuilder builder) { var valueGenerationStrategy = annotatable[ SqlServerAnnotationNames.Prefix + SqlServerAnnotationNames.ValueGenerationStrategy] as SqlServerValueGenerationStrategy?; ColumnDefinition( schema, table, name, clrType, type, nullable, defaultValue, defaultValueSql, computedColumnSql, valueGenerationStrategy == SqlServerValueGenerationStrategy.IdentityColumn, annotatable, model, builder); }