Skip to content

When creating databases, automatically use the latest database version that is supported by the current file extension #90

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Dec 10, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 8 additions & 3 deletions src/EFCore.Jet.Data/AdoxDatabaseCreator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ public class AdoxDatabaseCreator
{
public override void CreateDatabase(
string fileNameOrConnectionString,
DatabaseVersion version = DatabaseVersion.Newest,
DatabaseVersion version = DatabaseVersion.NewestSupported,
CollatingOrder collatingOrder = CollatingOrder.General,
string databasePassword = null)
{
Expand All @@ -20,10 +20,16 @@ public override void CreateDatabase(

var filePath = JetStoreDatabaseHandling.ExpandFileName(JetStoreDatabaseHandling.ExtractFileNameFromConnectionString(fileNameOrConnectionString));

if (version == DatabaseVersion.NewestSupported &&
string.Equals(System.IO.Path.GetExtension(filePath), ".mdb"))
{
version = DatabaseVersion.Version40;
}

try
{
using dynamic catalog = new ComObject("ADOX.Catalog");

// ADOX is an ADO eXtension and ADO is build on top of OLE DB.
var connectionString = GetConnectionString(filePath, version, collatingOrder, databasePassword);
using var connection = catalog.Create(connectionString);
Expand Down Expand Up @@ -86,7 +92,6 @@ private static string GetConnectionString(string filePath, DatabaseVersion versi
DatabaseVersion.Version30 => 5,
DatabaseVersion.Version40 => 5,
DatabaseVersion.Version120 => 6,
DatabaseVersion.Newest => 0,
_ => 0
};

Expand Down
9 changes: 7 additions & 2 deletions src/EFCore.Jet.Data/DaoDatabaseCreator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ public class DaoDatabaseCreator
{
public override void CreateDatabase(
string fileNameOrConnectionString,
DatabaseVersion version = DatabaseVersion.Newest,
DatabaseVersion version = DatabaseVersion.NewestSupported,
CollatingOrder collatingOrder = CollatingOrder.General,
string databasePassword = null)
{
Expand All @@ -20,6 +20,12 @@ public override void CreateDatabase(
}

var filePath = JetStoreDatabaseHandling.ExpandFileName(JetStoreDatabaseHandling.ExtractFileNameFromConnectionString(fileNameOrConnectionString));

if (version == DatabaseVersion.NewestSupported &&
string.Equals(System.IO.Path.GetExtension(filePath), ".mdb"))
{
version = DatabaseVersion.Version40;
}

try
{
Expand All @@ -33,7 +39,6 @@ public override void CreateDatabase(
DatabaseVersion.Version30 => (int) DatabaseTypeEnum.dbVersion30,
DatabaseVersion.Version40 => (int) DatabaseTypeEnum.dbVersion40,
DatabaseVersion.Version120 => (int) DatabaseTypeEnum.dbVersion120,
DatabaseVersion.Newest => 0,
_ => 0,
};

Expand Down
5 changes: 3 additions & 2 deletions src/EFCore.Jet.Data/IJetDatabaseCreator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,8 @@ public enum CollatingOrder

public enum DatabaseVersion
{
Newest = 0,
Newest = -1,
NewestSupported = 0,
Version10 = 10,
Version11 = 11,
Version20 = 20,
Expand All @@ -44,7 +45,7 @@ public interface IJetDatabaseCreator
{
void CreateDatabase(
string fileNameOrConnectionString,
DatabaseVersion version = DatabaseVersion.Newest,
DatabaseVersion version = DatabaseVersion.NewestSupported,
CollatingOrder collatingOrder = CollatingOrder.General,
string databasePassword = null);

Expand Down
4 changes: 2 additions & 2 deletions src/EFCore.Jet.Data/JetConnection.cs
Original file line number Diff line number Diff line change
Expand Up @@ -506,14 +506,14 @@ public static void ClearAllPools()
=> InnerConnectionFactory.Instance.ClearAllPools();

public void CreateDatabase(
DatabaseVersion version = DatabaseVersion.Newest,
DatabaseVersion version = DatabaseVersion.NewestSupported,
CollatingOrder collatingOrder = CollatingOrder.General,
string databasePassword = null)
=> CreateDatabase(DataSource, version, collatingOrder, databasePassword, SchemaProviderType);

public static void CreateDatabase(
string fileNameOrConnectionString,
DatabaseVersion version = DatabaseVersion.Newest,
DatabaseVersion version = DatabaseVersion.NewestSupported,
CollatingOrder collatingOrder = CollatingOrder.General,
string databasePassword = null,
SchemaProviderType schemaProviderType = SchemaProviderType.Precise)
Expand Down
2 changes: 1 addition & 1 deletion src/EFCore.Jet.Data/JetDatabaseCreator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ public static JetDatabaseCreator CreateInstance(SchemaProviderType schemaProvide
_ => throw new ArgumentOutOfRangeException(nameof(schemaProviderType))
};

public abstract void CreateDatabase(string fileNameOrConnectionString, DatabaseVersion version = DatabaseVersion.Newest, CollatingOrder collatingOrder = CollatingOrder.General, string databasePassword = null);
public abstract void CreateDatabase(string fileNameOrConnectionString, DatabaseVersion version = DatabaseVersion.NewestSupported, CollatingOrder collatingOrder = CollatingOrder.General, string databasePassword = null);
public abstract void CreateDualTable(string fileNameOrConnectionString, string databasePassword = null);
}
}
2 changes: 1 addition & 1 deletion src/EFCore.Jet.Data/PreciseDatabaseCreator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ public class PreciseDatabaseCreator
{
public override void CreateDatabase(
string fileNameOrConnectionString,
DatabaseVersion version = DatabaseVersion.Newest,
DatabaseVersion version = DatabaseVersion.NewestSupported,
CollatingOrder collatingOrder = CollatingOrder.General,
string databasePassword = null)
=> new DaoDatabaseCreator().CreateDatabase(fileNameOrConnectionString, version, collatingOrder, databasePassword);
Expand Down
2 changes: 1 addition & 1 deletion test/EFCore.Jet.Data.Tests/Helpers.cs
Original file line number Diff line number Diff line change
Expand Up @@ -261,7 +261,7 @@ public static JetConnection CreateAndOpenDatabase(string storeName)

public static void CreateDatabase(
string storeName,
DatabaseVersion version = DatabaseVersion.Newest,
DatabaseVersion version = DatabaseVersion.NewestSupported,
CollatingOrder collatingOrder = CollatingOrder.General,
string databasePassword = null)
{
Expand Down