public DropIndexOperation(CreateIndexOperation inverse, object anonymousArguments = null) : base(anonymousArguments) { Check.NotNull(inverse, "inverse"); _inverse = inverse; }
public DropIndexOperation(CreateIndexOperation inverse, object anonymousArguments = null) : base(anonymousArguments) { Contract.Requires(inverse != null); _inverse = inverse; }
public void DefaultName_is_restricted_to_128_chars() { var createIndexOperation = new CreateIndexOperation { Table = "T" }; createIndexOperation.Columns.Add(new string('C', 150)); Assert.Equal(128, createIndexOperation.DefaultName.Length); }
protected override void Generate( CreateIndexOperation createIndexOperation ) { if( createIndexOperation.IsUnique ) { createIndexOperation.Name = createIndexOperation.Name.Replace( @"IX_", @"UQ_" ); } base.Generate( createIndexOperation ); }
/// <summary> /// Gets an operation to create an index on the foreign key column(s). /// </summary> /// <returns> An operation to add the index. </returns> public virtual CreateIndexOperation CreateCreateIndexOperation() { var createIndexOperation = new CreateIndexOperation { Table = DependentTable }; DependentColumns.Each(c => createIndexOperation.Columns.Add(c)); return createIndexOperation; }
protected override void Generate(CreateIndexOperation createIndexOperation) { if (createIndexOperation == null) { throw new ArgumentNullException("createIndexOperation"); } //if (createIndexOperation.Table.Contains("AspNetRoles") && createIndexOperation.Name.Contains("RoleNameIndex")) //{ // createIndexOperation.Name = "IX_Host_Name"; //} if (createIndexOperation.Table.Contains("AspNetUsers") && createIndexOperation.Name.Contains("UserNameIndex")) { createIndexOperation.Name = "IX_Host_Name"; } base.Generate(createIndexOperation); }
public void Can_get_and_set_table_and_column_info() { var createIndexOperation = new CreateIndexOperation { Table = "T", IsUnique = true, Name = "Custom" }; createIndexOperation.Columns.Add("C"); Assert.Equal("T", createIndexOperation.Table); Assert.Equal("C", createIndexOperation.Columns.Single()); Assert.Equal("Custom", createIndexOperation.Name); Assert.True(createIndexOperation.IsUnique); Assert.Equal("IX_C", createIndexOperation.DefaultName); Assert.False(createIndexOperation.HasDefaultName); }
public void Inverse_should_return_drop_index_operation() { var createIndexOperation = new CreateIndexOperation { Table = "T", IsUnique = true, Name = "Custom" }; createIndexOperation.Columns.Add("C"); var inverse = (DropIndexOperation)createIndexOperation.Inverse; Assert.Same(createIndexOperation, inverse.Inverse); Assert.Equal("T", inverse.Table); Assert.Equal("Custom", inverse.Name); Assert.Equal("C", inverse.Columns.Single()); }
/// <summary> /// Generates SQL for a <see cref="CreateIndexOperation" />. /// Generated SQL should be added using the Statement method. /// </summary> /// <param name="createIndexOperation"> The operation to produce SQL for. </param> protected virtual void Generate(CreateIndexOperation createIndexOperation) { Check.NotNull(createIndexOperation, "createIndexOperation"); using (var writer = Writer()) { writer.Write("CREATE "); if (createIndexOperation.IsUnique) { writer.Write("UNIQUE "); } if (createIndexOperation.IsClustered) { writer.Write("CLUSTERED "); } writer.Write("INDEX "); writer.Write(Quote(createIndexOperation.Name)); writer.Write(" ON "); writer.Write(Name(createIndexOperation.Table)); writer.Write("("); writer.Write(createIndexOperation.Columns.Join(Quote)); writer.Write(")"); Statement(writer); } }
private void Convert(CreateIndexOperation createIndexOperation) { StringBuilder sql = new StringBuilder(); sql.Append("CREATE "); if (createIndexOperation.IsUnique) sql.Append("UNIQUE "); sql.Append("INDEX \""); sql.Append(GetTableNameFromFullTableName(createIndexOperation.Table) + "_" + createIndexOperation.Name); sql.Append("\" ON "); AppendTableName(createIndexOperation.Table, sql); sql.Append(" ("); foreach (var column in createIndexOperation.Columns) { sql.Append('"'); sql.Append(column); sql.Append("\","); } sql.Remove(sql.Length - 1, 1); sql.Append(")"); AddStatment(sql); }
/// <summary> /// Generates code to perform a <see cref="CreateIndexOperation" />. /// </summary> /// <param name="createIndexOperation"> The operation to generate code for. </param> /// <param name="writer"> Text writer to add the generated code to. </param> protected virtual void Generate(CreateIndexOperation createIndexOperation, IndentedTextWriter writer) { Check.NotNull(createIndexOperation, "createIndexOperation"); Check.NotNull(writer, "writer"); writer.Write("CreateIndex("); writer.Write(Quote(createIndexOperation.Table)); writer.Write(", "); var compositeIndex = createIndexOperation.Columns.Count() > 1; if (compositeIndex) { writer.Write("New String() { "); } writer.Write(createIndexOperation.Columns.Join(Quote)); if (compositeIndex) { writer.Write(" }"); } if (createIndexOperation.IsUnique) { writer.Write(", unique := True"); } if (!createIndexOperation.HasDefaultName) { writer.Write(", name := "); writer.Write(Quote(createIndexOperation.Name)); } writer.WriteLine(")"); }
protected override void GenerateInline(CreateIndexOperation createIndexOperation, IndentedTextWriter writer) { writer.WriteLine(); writer.Write(".Index("); Generate(createIndexOperation.Columns, writer); writer.Write(createIndexOperation.IsUnique ? ", unique: true" : ""); writer.Write(!createIndexOperation.HasDefaultName ? string.Format(", name: {0}", TrimSchemaPrefix(createIndexOperation.Name)) : ""); writer.Write(")"); }
public void Generate_create_table_operation_with_non_clustered_key_and_fully_configured_index() { var createTableOperation = new CreateTableOperation("Customers"); var idColumn = new ColumnModel(PrimitiveTypeKind.Int32) { Name = "I.d" }; createTableOperation.Columns.Add(idColumn); createTableOperation.PrimaryKey = new AddPrimaryKeyOperation { Name = "MyPK", IsClustered = false }; createTableOperation.PrimaryKey.Columns.Add(idColumn.Name); var createIndexOperation = new CreateIndexOperation { Table = createTableOperation.Name, Name = "MyIndex", IsClustered = true, IsUnique = true }; createIndexOperation.Columns.Add(idColumn.Name); var generatedMigration = new CSharpMigrationCodeGenerator().Generate( "Migration", new MigrationOperation[] { createTableOperation, createIndexOperation }, "Source", "Target", "Foo", "Bar"); Assert.Equal( @"namespace Foo { using System; using System.Data.Entity.Migrations; public partial class Bar : DbMigration { public override void Up() { CreateTable( ""Customers"", c => new { Id = c.Int(name: ""I.d""), }) .PrimaryKey(t => t.Id, name: ""MyPK"", clustered: false) .Index(t => t.Id, unique: true, clustered: true, name: ""MyIndex""); } public override void Down() { DropIndex(""Customers"", ""MyIndex""); DropTable(""Customers""); } } } ", generatedMigration.UserCode); }
private void WriteIndexParameters(CreateIndexOperation createIndexOperation, IndentedTextWriter writer) { if (createIndexOperation.IsUnique) { writer.Write(", unique := True"); } if (createIndexOperation.IsClustered) { writer.Write(", clustered := True"); } if (!createIndexOperation.HasDefaultName) { writer.Write(", name := "); writer.Write(Quote(createIndexOperation.Name)); } }
public void Generate_can_output_create_index_statement_clustered() { var createTableOperation = new CreateTableOperation("Customers"); var idColumn = new ColumnModel(PrimitiveTypeKind.Int32) { Name = "Id", IsNullable = true, IsIdentity = true }; createTableOperation.Columns.Add(idColumn); createTableOperation.Columns.Add( new ColumnModel(PrimitiveTypeKind.String) { Name = "Name", IsNullable = false }); createTableOperation.PrimaryKey = new AddPrimaryKeyOperation(); createTableOperation.PrimaryKey.Columns.Add(idColumn.Name); var migrationSqlGenerator = new SqlCeMigrationSqlGenerator(); var createIndexOperation = new CreateIndexOperation { Table = createTableOperation.Name, IsUnique = true, IsClustered = true }; createIndexOperation.Columns.Add(idColumn.Name); var sql = migrationSqlGenerator.Generate( new[] { createIndexOperation }, "4.0").Join(s => s.Sql, Environment.NewLine); Assert.Contains( @"CREATE UNIQUE CLUSTERED INDEX [IX_Id] ON [Customers]([Id])", sql); }
protected virtual MigrationStatement Generate(CreateIndexOperation op) { StringBuilder sb = new StringBuilder(); sb = sb.Append("CREATE "); if (op.IsUnique) { sb.Append("UNIQUE "); } //index_col_name specification can end with ASC or DESC. // sort order are permitted for future extensions for specifying ascending or descending index value storage //Currently, they are parsed but ignored; index values are always stored in ascending order. object sort; op.AnonymousArguments.TryGetValue("Sort", out sort); var sortOrder = sort != null && sort.ToString() == "Ascending" ? "ASC" : "DESC"; sb.AppendFormat("index `{0}` on `{1}` (", op.Name, op.Table); sb.Append(string.Join(",", op.Columns.Select(c => "`" + c + "` " + sortOrder)) + ") "); object indexTypeDefinition; op.AnonymousArguments.TryGetValue("Type", out indexTypeDefinition); var indexType = indexTypeDefinition != null && string.Compare(indexTypeDefinition.ToString(), "BTree", StringComparison.InvariantCultureIgnoreCase) > 0 ? "BTREE" : "HASH"; sb.Append("using " + indexType); return new MigrationStatement() { Sql = sb.ToString() }; }
public void GenerateCanOutputCreateIndexStatement() { var createTableOperation = new CreateTableOperation("Customers"); var idColumn = new ColumnModel(PrimitiveTypeKind.Int32) { Name = "Id", IsNullable = true, IsIdentity = true }; createTableOperation.Columns.Add(idColumn); createTableOperation.Columns.Add( new ColumnModel(PrimitiveTypeKind.String) { Name = "Name", IsNullable = false }); createTableOperation.PrimaryKey = new AddPrimaryKeyOperation(); createTableOperation.PrimaryKey.Columns.Add(idColumn.Name); var migrationSqlGenerator = new PostgreSqlMigrationSqlGenerator(); var createIndexOperation = new CreateIndexOperation { Table = createTableOperation.Name, IsUnique = true }; createIndexOperation.Columns.Add(idColumn.Name); var sql = migrationSqlGenerator.Generate( new[] { createIndexOperation }, "9.2").Join(s => s.Sql, Environment.NewLine); Assert.True( sql.Contains( @"CREATE UNIQUE INDEX ""IX_Customers_Id"" ON ""Customers""(""Id"")")); }
public void Generate_create_fully_configured_create_index_operation() { var createIndexOperation = new CreateIndexOperation { Table = "MyTable", Name = "MyIndex", IsClustered = true, IsUnique = true }; createIndexOperation.Columns.Add("MyColumn"); var generatedMigration = new VisualBasicMigrationCodeGenerator().Generate( "Migration", new MigrationOperation[] { createIndexOperation }, "Source", "Target", "Foo", "Bar"); Assert.Equal( @"Imports System Imports System.Data.Entity.Migrations Imports Microsoft.VisualBasic Namespace Foo Public Partial Class Bar Inherits DbMigration Public Overrides Sub Up() CreateIndex(""MyTable"", ""MyColumn"", unique := True, clustered := True, name := ""MyIndex"") End Sub Public Overrides Sub Down() DropIndex(""MyTable"", ""MyIndex"") End Sub End Class End Namespace ", generatedMigration.UserCode); }
public void Generate_create_table_operation_with_non_clustered_key_and_fully_configured_index() { var createTableOperation = new CreateTableOperation("Customers"); var idColumn = new ColumnModel(PrimitiveTypeKind.Int32) { Name = "I.d" }; createTableOperation.Columns.Add(idColumn); createTableOperation.PrimaryKey = new AddPrimaryKeyOperation { Name = "MyPK", IsClustered = false }; createTableOperation.PrimaryKey.Columns.Add(idColumn.Name); var createIndexOperation = new CreateIndexOperation { Table = createTableOperation.Name, Name = "MyIndex", IsClustered = true, IsUnique = true }; createIndexOperation.Columns.Add(idColumn.Name); var generatedMigration = new VisualBasicMigrationCodeGenerator().Generate( "Migration", new MigrationOperation[] { createTableOperation, createIndexOperation }, "Source", "Target", "Foo", "Bar"); Assert.Equal( @"Imports System Imports System.Data.Entity.Migrations Imports Microsoft.VisualBasic Namespace Foo Public Partial Class Bar Inherits DbMigration Public Overrides Sub Up() CreateTable( ""Customers"", Function(c) New With { .Id = c.Int(name := ""I.d"") }) _ .PrimaryKey(Function(t) t.Id, name := ""MyPK"", clustered := False) _ .Index(Function(t) t.Id, unique := True, clustered := True, name := ""MyIndex"") End Sub Public Overrides Sub Down() DropIndex(""Customers"", ""MyIndex"") DropTable(""Customers"") End Sub End Class End Namespace ", generatedMigration.UserCode); }
public void TestCreateIndexOperationUnique() { var operations = new List<MigrationOperation>(); var operation = new CreateIndexOperation(); operation.Table = "someTable"; operation.Name = "someIndex"; operation.Columns.Add("column1"); operation.Columns.Add("column2"); operation.Columns.Add("column3"); operation.IsUnique = true; operations.Add(operation); var statments = new NpgsqlMigrationSqlGenerator().Generate(operations, BackendVersion.ToString()); Assert.AreEqual(1, statments.Count()); Assert.AreEqual("CREATE UNIQUE INDEX \"someTable_someIndex\" ON \"someTable\" (\"column1\",\"column2\",\"column3\")", statments.ElementAt(0).Sql); }
public CreateIndexOperation CreateCreateIndexOperation() { var columnNames = Columns.ToArray(); Debug.Assert(columnNames.Length > 0); Debug.Assert(_index.Name != null || columnNames.Length == 1); var operation = new CreateIndexOperation { Name = _index.Name ?? IndexOperation.BuildDefaultName(columnNames), Table = _table }; foreach (var columnName in columnNames) { operation.Columns.Add(columnName); } if (_index.IsClusteredConfigured) { operation.IsClustered = _index.IsClustered; } if (_index.IsUniqueConfigured) { operation.IsUnique = _index.IsUnique; } return operation; }
/// <summary> /// Generates code to perform a <see cref="CreateIndexOperation" />. /// </summary> /// <param name="createIndexOperation"> The operation to generate code for. </param> /// <param name="writer"> Text writer to add the generated code to. </param> protected virtual void Generate(CreateIndexOperation createIndexOperation, IndentedTextWriter writer) { Check.NotNull(createIndexOperation, "createIndexOperation"); Check.NotNull(writer, "writer"); writer.Write("CreateIndex("); writer.Write(Quote(createIndexOperation.Table)); writer.Write(", "); var compositeIndex = createIndexOperation.Columns.Count() > 1; if (compositeIndex) { writer.Write("New String() { "); } writer.Write(createIndexOperation.Columns.Join(Quote)); if (compositeIndex) { writer.Write(" }"); } WriteIndexParameters(createIndexOperation, writer); writer.WriteLine(")"); }
protected override void Generate(CreateIndexOperation cio) { if (cio.HasDefaultName) cio.Name = GetIndexName(cio.Table, cio.Columns, cio.IsUnique); base.Generate(cio); }
/// <summary> /// Generates code to perform a <see cref="CreateIndexOperation" /> as part of a <see cref="CreateTableOperation" />. /// </summary> /// <param name="createIndexOperation"> The operation to generate code for. </param> /// <param name="writer"> Text writer to add the generated code to. </param> protected virtual void GenerateInline(CreateIndexOperation createIndexOperation, IndentedTextWriter writer) { Check.NotNull(createIndexOperation, "createIndexOperation"); Check.NotNull(writer, "writer"); writer.WriteLine(" _"); writer.Write(".Index("); Generate(createIndexOperation.Columns, writer); WriteIndexParameters(createIndexOperation, writer); writer.Write(")"); }
/// <summary> /// Generates code to perform a <see cref = "CreateIndexOperation" /> as part of a <see cref = "CreateTableOperation" />. /// </summary> /// <param name = "createIndexOperation">The operation to generate code for.</param> /// <param name = "writer">Text writer to add the generated code to.</param> protected virtual void GenerateInline(CreateIndexOperation createIndexOperation, IndentedTextWriter writer) { Contract.Requires(createIndexOperation != null); Contract.Requires(writer != null); writer.WriteLine(" _"); writer.Write(".Index("); Generate(createIndexOperation.Columns, writer); writer.Write(")"); }
/// <summary> /// Generates code to perform a <see cref = "CreateIndexOperation" />. /// </summary> /// <param name = "createIndexOperation">The operation to generate code for.</param> /// <param name = "writer">Text writer to add the generated code to.</param> protected virtual void Generate(CreateIndexOperation createIndexOperation, IndentedTextWriter writer) { //Contract.Requires(createIndexOperation != null); //Contract.Requires(writer != null); writer.Write("CreateIndex("); writer.Write(Quote(createIndexOperation.Table)); writer.Write(", "); var compositeIndex = createIndexOperation.Columns.Count() > 1; if (compositeIndex) { writer.Write("New String() { "); } writer.Write(createIndexOperation.Columns.Join(Quote)); if (compositeIndex) { writer.Write(" }"); } if (createIndexOperation.IsUnique) { writer.Write(", unique := True"); } if (!createIndexOperation.HasDefaultName) { writer.Write(", name := "); writer.Write(Quote(createIndexOperation.Name)); } writer.WriteLine(")"); }
public void Generate_create_fully_configured_create_index_operation() { var createIndexOperation = new CreateIndexOperation { Table = "MyTable", Name = "MyIndex", IsClustered = true, IsUnique = true }; createIndexOperation.Columns.Add("MyColumn"); var generatedMigration = new CSharpMigrationCodeGenerator().Generate( "Migration", new MigrationOperation[] { createIndexOperation }, "Source", "Target", "Foo", "Bar"); Assert.Equal( @"namespace Foo { using System; using System.Data.Entity.Migrations; public partial class Bar : DbMigration { public override void Up() { CreateIndex(""MyTable"", ""MyColumn"", unique: true, clustered: true, name: ""MyIndex""); } public override void Down() { DropIndex(""MyTable"", ""MyIndex""); } } } ", generatedMigration.UserCode); }
protected override void Generate(CreateIndexOperation createIndexOperation, IndentedTextWriter writer) { createIndexOperation.Table = TrimSchemaPrefix(createIndexOperation.Table); base.Generate(createIndexOperation, writer); }
protected override void Generate(CreateIndexOperation createIndexOperation) { string tableName, tableSchema; this.GetNameParts(createIndexOperation.Table, out tableSchema, out tableName); using (var writer = Writer()) { writer.WriteLine("IF NOT EXISTS(SELECT 1 FROM sys.indexes WHERE name = '{0}' and object_id = OBJECT_ID('{1}'))\r\nBEGIN", createIndexOperation.Name, this.Name(createIndexOperation.Table)); writer.Indent++; writer.Write("CREATE INDEX "); writer.Write(Name(createIndexOperation.Name)); writer.Write(" ON "); writer.Write(Name(createIndexOperation.Table)); writer.Write(" ( "); int i = 0; foreach (var column in createIndexOperation.Columns) { writer.Write(column); if (i < createIndexOperation.Columns.Count - 1) writer.Write(", "); i++; } writer.Write(" )"); //if (((column.IsNullable.HasValue && !column.IsNullable.Value) && ((column.DefaultValue == null) && string.IsNullOrWhiteSpace(column.DefaultValueSql))) && ((!column.IsIdentity && !column.IsTimestamp) && (!column.StoreType.Equals("rowversion", StringComparison.OrdinalIgnoreCase) && !column.StoreType.Equals("timestamp", StringComparison.OrdinalIgnoreCase)))) //{ // writer.Write(" DEFAULT "); // if (column.Type == PrimitiveTypeKind.DateTime) // { // writer.Write(this.Generate(DateTime.Parse("1900-01-01 00:00:00"))); // } // else // { // writer.Write(this.Generate((dynamic)column.ClrDefaultValue)); // } //} writer.Indent--; writer.Write("\r\nEND"); Statement(writer); } }
protected virtual IEnumerable<MigrationStatement> Generate(CreateIndexOperation operation) { using (var writer = SqlWriter()) { writer.Write("CREATE "); if (operation.IsUnique) { writer.Write("UNIQUE "); } writer.Write("INDEX "); writer.Write(Quote(string.Format("{0}_{1}", FixName(ObjectName(operation.Table)), FixName(operation.Name)))); writer.Write(" ON "); writer.Write(Quote(operation.Table)); writer.Write("("); WriteColumns(writer, operation.Columns.Select(Quote)); writer.Write(")"); yield return Statement(writer); } }
public DropIndexOperation(CreateIndexOperation inverse, object anonymousArguments = null) : base(anonymousArguments) { Check.NotNull <CreateIndexOperation>(inverse, nameof(inverse)); this._inverse = inverse; }