Skip to content

Commit 4b3dcf5

Browse files
authored
Improvements to migrations (#256)
* Improve the migrations. - Missing index sort order in model and sql - When altering a column to non-nullable, have an UPDATE to make any NULL values the default value * Changes to comments produce no SQL output as we don't handle comments
1 parent bf6e8a1 commit 4b3dcf5

7 files changed

Lines changed: 484 additions & 472 deletions

File tree

src/EFCore.Jet/Migrations/JetMigrationsSqlGenerator.cs

Lines changed: 339 additions & 271 deletions
Large diffs are not rendered by default.

src/EFCore.Jet/Migrations/Operations/JetCreateDatabaseOperation.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public class JetCreateDatabaseOperation : MigrationOperation
1313
/// <summary>
1414
/// The name of the database.
1515
/// </summary>
16-
public virtual string? Name { get; set; } = null!;
16+
public virtual string Name { get; set; } = null!;
1717
public virtual string? Password { get; [param: CanBeNull] set; }
1818
}
1919
}

src/EFCore.Jet/Scaffolding/Internal/JetDatabaseModelFactory.cs

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
using System.Diagnostics;
99
using System.Globalization;
1010
using System.Linq;
11-
using System.Runtime.InteropServices;
1211
using System.Text.RegularExpressions;
1312
using EntityFrameworkCore.Jet.Internal;
1413
using JetBrains.Annotations;
@@ -21,6 +20,7 @@
2120
using EntityFrameworkCore.Jet.Utilities;
2221
using Microsoft.EntityFrameworkCore.Storage;
2322
using Microsoft.EntityFrameworkCore.Metadata.Internal;
23+
using System.Reflection;
2424

2525
namespace EntityFrameworkCore.Jet.Scaffolding.Internal
2626
{
@@ -500,11 +500,22 @@ private void GetIndexes(DbConnection connection, IReadOnlyList<DatabaseTable> ta
500500
continue;
501501
}
502502

503+
string? filter = null;
504+
if (!nullable)
505+
{
506+
filter = "DISALLOW NULL";
507+
}
508+
509+
if (ignoresNulls)
510+
{
511+
filter = "IGNORE NULLS";
512+
}
503513
var index = new DatabaseIndex
504514
{
505515
Table = table,
506516
Name = indexName,
507517
IsUnique = isUnique,
518+
Filter = filter
508519
};
509520

510521
_logger.IndexFound(indexName!, tableName!, index.IsUnique);
@@ -535,6 +546,7 @@ private void GetIndexes(DbConnection connection, IReadOnlyList<DatabaseTable> ta
535546

536547
case DatabaseIndex index:
537548
index.Columns.Add(column);
549+
index.IsDescending.Add(descending);
538550
break;
539551
}
540552
}

src/EFCore.Jet/Storage/Internal/JetDatabaseCreator.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ private IReadOnlyList<MigrationCommand> CreateCreateOperations()
120120
{
121121
new JetCreateDatabaseOperation
122122
{
123-
Name = dataSource,
123+
Name = dataSource!,
124124
Password = databasePassword
125125
}
126126
});

test/EFCore.Jet.FunctionalTests/GreenTests/ace_2010_odbc_x86.txt

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8251,6 +8251,7 @@ EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_optiona
82518251
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_primary_key_composite_with_name
82528252
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_primary_key_int
82538253
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_primary_key_string
8254+
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_primary_key_with_name
82548255
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_required_primitive_collection_to_existing_table
82558256
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_required_primitive_collection_with_custom_converter_and_custom_default_value_to_existing_table
82568257
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_required_primitive_collection_with_custom_default_value_sql_to_existing_table
@@ -8265,13 +8266,28 @@ EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_check
82658266
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_column_add_comment
82668267
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_column_add_identity
82678268
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_column_change_comment
8269+
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_column_change_default
82688270
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_column_change_type
8271+
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_column_make_required
8272+
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_column_make_required_with_composite_index
8273+
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_column_make_required_with_index
8274+
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_column_make_required_with_null_data
8275+
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_column_remove_comment
82698276
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_column_remove_identity
82708277
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_computed_column_add_comment
8278+
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_index_change_sort_order
82718279
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_table_add_comment
82728280
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_table_add_comment_non_default_schema
82738281
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_table_change_comment
8282+
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_table_remove_comment
8283+
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Convert_json_entities_to_regular_owned
8284+
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Convert_regular_owned_entities_to_json
8285+
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Convert_string_column_to_a_json_column_containing_required_reference
8286+
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Create_index
8287+
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Create_index_descending
8288+
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Create_index_descending_mixed
82748289
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Create_schema
8290+
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Create_schema_dbo_is_ignored
82758291
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Create_table
82768292
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Create_table_no_key
82778293
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Create_table_with_comments
@@ -8286,12 +8302,15 @@ EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.DeleteDataO
82868302
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.DeleteDataOperation_simple_key
82878303
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Drop_check_constraint
82888304
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Drop_column
8305+
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Drop_column_primary_key
82898306
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Drop_foreign_key
82908307
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Drop_index
8308+
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Drop_json_columns_from_existing_table
82918309
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Drop_primary_key_int
82928310
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Drop_primary_key_string
82938311
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Drop_table
82948312
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Drop_unique_constraint
8313+
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.InsertDataOperation
82958314
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Rename_column
82968315
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Rename_json_column
82978316
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.UpdateDataOperation_composite_key

test/EFCore.Jet.FunctionalTests/GreenTests/ace_2010_oledb_x86.txt

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8323,6 +8323,7 @@ EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_optiona
83238323
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_primary_key_composite_with_name
83248324
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_primary_key_int
83258325
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_primary_key_string
8326+
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_primary_key_with_name
83268327
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_required_primitive_collection_to_existing_table
83278328
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_required_primitive_collection_with_custom_converter_and_custom_default_value_to_existing_table
83288329
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_required_primitive_collection_with_custom_default_value_sql_to_existing_table
@@ -8337,13 +8338,28 @@ EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_check
83378338
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_column_add_comment
83388339
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_column_add_identity
83398340
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_column_change_comment
8341+
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_column_change_default
83408342
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_column_change_type
8343+
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_column_make_required
8344+
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_column_make_required_with_composite_index
8345+
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_column_make_required_with_index
8346+
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_column_make_required_with_null_data
8347+
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_column_remove_comment
83418348
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_column_remove_identity
83428349
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_computed_column_add_comment
8350+
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_index_change_sort_order
83438351
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_table_add_comment
83448352
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_table_add_comment_non_default_schema
83458353
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_table_change_comment
8354+
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_table_remove_comment
8355+
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Convert_json_entities_to_regular_owned
8356+
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Convert_regular_owned_entities_to_json
8357+
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Convert_string_column_to_a_json_column_containing_required_reference
8358+
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Create_index
8359+
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Create_index_descending
8360+
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Create_index_descending_mixed
83468361
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Create_schema
8362+
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Create_schema_dbo_is_ignored
83478363
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Create_table
83488364
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Create_table_no_key
83498365
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Create_table_with_comments
@@ -8358,12 +8374,15 @@ EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.DeleteDataO
83588374
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.DeleteDataOperation_simple_key
83598375
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Drop_check_constraint
83608376
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Drop_column
8377+
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Drop_column_primary_key
83618378
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Drop_foreign_key
83628379
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Drop_index
8380+
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Drop_json_columns_from_existing_table
83638381
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Drop_primary_key_int
83648382
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Drop_primary_key_string
83658383
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Drop_table
83668384
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Drop_unique_constraint
8385+
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.InsertDataOperation
83678386
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Rename_column
83688387
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Rename_json_column
83698388
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.UpdateDataOperation_composite_key

0 commit comments

Comments
 (0)