Skip to content

Commit

Permalink
Improvements to migrations (#256)
Browse files Browse the repository at this point in the history
* 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
  • Loading branch information
ChrisJollyAU authored Aug 25, 2024
1 parent bf6e8a1 commit 4b3dcf5
Show file tree
Hide file tree
Showing 7 changed files with 484 additions and 472 deletions.
610 changes: 339 additions & 271 deletions src/EFCore.Jet/Migrations/JetMigrationsSqlGenerator.cs

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ public class JetCreateDatabaseOperation : MigrationOperation
/// <summary>
/// The name of the database.
/// </summary>
public virtual string? Name { get; set; } = null!;
public virtual string Name { get; set; } = null!;
public virtual string? Password { get; [param: CanBeNull] set; }
}
}
14 changes: 13 additions & 1 deletion src/EFCore.Jet/Scaffolding/Internal/JetDatabaseModelFactory.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
using System.Diagnostics;
using System.Globalization;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text.RegularExpressions;
using EntityFrameworkCore.Jet.Internal;
using JetBrains.Annotations;
Expand All @@ -21,6 +20,7 @@
using EntityFrameworkCore.Jet.Utilities;
using Microsoft.EntityFrameworkCore.Storage;
using Microsoft.EntityFrameworkCore.Metadata.Internal;
using System.Reflection;

namespace EntityFrameworkCore.Jet.Scaffolding.Internal
{
Expand Down Expand Up @@ -500,11 +500,22 @@ private void GetIndexes(DbConnection connection, IReadOnlyList<DatabaseTable> ta
continue;
}

string? filter = null;
if (!nullable)
{
filter = "DISALLOW NULL";
}

if (ignoresNulls)
{
filter = "IGNORE NULLS";
}
var index = new DatabaseIndex
{
Table = table,
Name = indexName,
IsUnique = isUnique,
Filter = filter
};

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

case DatabaseIndex index:
index.Columns.Add(column);
index.IsDescending.Add(descending);
break;
}
}
Expand Down
2 changes: 1 addition & 1 deletion src/EFCore.Jet/Storage/Internal/JetDatabaseCreator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ private IReadOnlyList<MigrationCommand> CreateCreateOperations()
{
new JetCreateDatabaseOperation
{
Name = dataSource,
Name = dataSource!,
Password = databasePassword
}
});
Expand Down
19 changes: 19 additions & 0 deletions test/EFCore.Jet.FunctionalTests/GreenTests/ace_2010_odbc_x86.txt
Original file line number Diff line number Diff line change
Expand Up @@ -8251,6 +8251,7 @@ EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_optiona
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_primary_key_composite_with_name
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_primary_key_int
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_primary_key_string
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_primary_key_with_name
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_required_primitive_collection_to_existing_table
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_required_primitive_collection_with_custom_converter_and_custom_default_value_to_existing_table
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_required_primitive_collection_with_custom_default_value_sql_to_existing_table
Expand All @@ -8265,13 +8266,28 @@ EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_check
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_column_add_comment
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_column_add_identity
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_column_change_comment
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_column_change_default
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_column_change_type
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_column_make_required
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_column_make_required_with_composite_index
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_column_make_required_with_index
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_column_make_required_with_null_data
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_column_remove_comment
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_column_remove_identity
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_computed_column_add_comment
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_index_change_sort_order
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_table_add_comment
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_table_add_comment_non_default_schema
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_table_change_comment
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_table_remove_comment
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Convert_json_entities_to_regular_owned
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Convert_regular_owned_entities_to_json
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Convert_string_column_to_a_json_column_containing_required_reference
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Create_index
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Create_index_descending
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Create_index_descending_mixed
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Create_schema
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Create_schema_dbo_is_ignored
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Create_table
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Create_table_no_key
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Create_table_with_comments
Expand All @@ -8286,12 +8302,15 @@ EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.DeleteDataO
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.DeleteDataOperation_simple_key
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Drop_check_constraint
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Drop_column
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Drop_column_primary_key
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Drop_foreign_key
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Drop_index
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Drop_json_columns_from_existing_table
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Drop_primary_key_int
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Drop_primary_key_string
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Drop_table
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Drop_unique_constraint
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.InsertDataOperation
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Rename_column
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Rename_json_column
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.UpdateDataOperation_composite_key
Expand Down
19 changes: 19 additions & 0 deletions test/EFCore.Jet.FunctionalTests/GreenTests/ace_2010_oledb_x86.txt
Original file line number Diff line number Diff line change
Expand Up @@ -8323,6 +8323,7 @@ EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_optiona
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_primary_key_composite_with_name
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_primary_key_int
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_primary_key_string
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_primary_key_with_name
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_required_primitive_collection_to_existing_table
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_required_primitive_collection_with_custom_converter_and_custom_default_value_to_existing_table
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Add_required_primitive_collection_with_custom_default_value_sql_to_existing_table
Expand All @@ -8337,13 +8338,28 @@ EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_check
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_column_add_comment
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_column_add_identity
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_column_change_comment
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_column_change_default
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_column_change_type
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_column_make_required
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_column_make_required_with_composite_index
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_column_make_required_with_index
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_column_make_required_with_null_data
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_column_remove_comment
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_column_remove_identity
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_computed_column_add_comment
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_index_change_sort_order
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_table_add_comment
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_table_add_comment_non_default_schema
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_table_change_comment
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Alter_table_remove_comment
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Convert_json_entities_to_regular_owned
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Convert_regular_owned_entities_to_json
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Convert_string_column_to_a_json_column_containing_required_reference
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Create_index
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Create_index_descending
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Create_index_descending_mixed
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Create_schema
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Create_schema_dbo_is_ignored
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Create_table
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Create_table_no_key
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Create_table_with_comments
Expand All @@ -8358,12 +8374,15 @@ EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.DeleteDataO
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.DeleteDataOperation_simple_key
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Drop_check_constraint
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Drop_column
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Drop_column_primary_key
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Drop_foreign_key
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Drop_index
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Drop_json_columns_from_existing_table
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Drop_primary_key_int
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Drop_primary_key_string
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Drop_table
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Drop_unique_constraint
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.InsertDataOperation
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Rename_column
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.Rename_json_column
EntityFrameworkCore.Jet.FunctionalTests.Migrations.MigrationsJetTest.UpdateDataOperation_composite_key
Expand Down
Loading

0 comments on commit 4b3dcf5

Please sign in to comment.