Skip to content

Commit 45dcfbe

Browse files
authored
When creating databases, automatically use the latest database version that is supported by the current file extension. (#90)
1 parent 56bf71b commit 45dcfbe

File tree

7 files changed

+23
-12
lines changed

7 files changed

+23
-12
lines changed

src/EFCore.Jet.Data/AdoxDatabaseCreator.cs

+8-3
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ public class AdoxDatabaseCreator
88
{
99
public override void CreateDatabase(
1010
string fileNameOrConnectionString,
11-
DatabaseVersion version = DatabaseVersion.Newest,
11+
DatabaseVersion version = DatabaseVersion.NewestSupported,
1212
CollatingOrder collatingOrder = CollatingOrder.General,
1313
string databasePassword = null)
1414
{
@@ -20,10 +20,16 @@ public override void CreateDatabase(
2020

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

23+
if (version == DatabaseVersion.NewestSupported &&
24+
string.Equals(System.IO.Path.GetExtension(filePath), ".mdb"))
25+
{
26+
version = DatabaseVersion.Version40;
27+
}
28+
2329
try
2430
{
2531
using dynamic catalog = new ComObject("ADOX.Catalog");
26-
32+
2733
// ADOX is an ADO eXtension and ADO is build on top of OLE DB.
2834
var connectionString = GetConnectionString(filePath, version, collatingOrder, databasePassword);
2935
using var connection = catalog.Create(connectionString);
@@ -86,7 +92,6 @@ private static string GetConnectionString(string filePath, DatabaseVersion versi
8692
DatabaseVersion.Version30 => 5,
8793
DatabaseVersion.Version40 => 5,
8894
DatabaseVersion.Version120 => 6,
89-
DatabaseVersion.Newest => 0,
9095
_ => 0
9196
};
9297

src/EFCore.Jet.Data/DaoDatabaseCreator.cs

+7-2
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ public class DaoDatabaseCreator
99
{
1010
public override void CreateDatabase(
1111
string fileNameOrConnectionString,
12-
DatabaseVersion version = DatabaseVersion.Newest,
12+
DatabaseVersion version = DatabaseVersion.NewestSupported,
1313
CollatingOrder collatingOrder = CollatingOrder.General,
1414
string databasePassword = null)
1515
{
@@ -20,6 +20,12 @@ public override void CreateDatabase(
2020
}
2121

2222
var filePath = JetStoreDatabaseHandling.ExpandFileName(JetStoreDatabaseHandling.ExtractFileNameFromConnectionString(fileNameOrConnectionString));
23+
24+
if (version == DatabaseVersion.NewestSupported &&
25+
string.Equals(System.IO.Path.GetExtension(filePath), ".mdb"))
26+
{
27+
version = DatabaseVersion.Version40;
28+
}
2329

2430
try
2531
{
@@ -33,7 +39,6 @@ public override void CreateDatabase(
3339
DatabaseVersion.Version30 => (int) DatabaseTypeEnum.dbVersion30,
3440
DatabaseVersion.Version40 => (int) DatabaseTypeEnum.dbVersion40,
3541
DatabaseVersion.Version120 => (int) DatabaseTypeEnum.dbVersion120,
36-
DatabaseVersion.Newest => 0,
3742
_ => 0,
3843
};
3944

src/EFCore.Jet.Data/IJetDatabaseCreator.cs

+3-2
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@ public enum CollatingOrder
3131

3232
public enum DatabaseVersion
3333
{
34-
Newest = 0,
34+
Newest = -1,
35+
NewestSupported = 0,
3536
Version10 = 10,
3637
Version11 = 11,
3738
Version20 = 20,
@@ -44,7 +45,7 @@ public interface IJetDatabaseCreator
4445
{
4546
void CreateDatabase(
4647
string fileNameOrConnectionString,
47-
DatabaseVersion version = DatabaseVersion.Newest,
48+
DatabaseVersion version = DatabaseVersion.NewestSupported,
4849
CollatingOrder collatingOrder = CollatingOrder.General,
4950
string databasePassword = null);
5051

src/EFCore.Jet.Data/JetConnection.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -506,14 +506,14 @@ public static void ClearAllPools()
506506
=> InnerConnectionFactory.Instance.ClearAllPools();
507507

508508
public void CreateDatabase(
509-
DatabaseVersion version = DatabaseVersion.Newest,
509+
DatabaseVersion version = DatabaseVersion.NewestSupported,
510510
CollatingOrder collatingOrder = CollatingOrder.General,
511511
string databasePassword = null)
512512
=> CreateDatabase(DataSource, version, collatingOrder, databasePassword, SchemaProviderType);
513513

514514
public static void CreateDatabase(
515515
string fileNameOrConnectionString,
516-
DatabaseVersion version = DatabaseVersion.Newest,
516+
DatabaseVersion version = DatabaseVersion.NewestSupported,
517517
CollatingOrder collatingOrder = CollatingOrder.General,
518518
string databasePassword = null,
519519
SchemaProviderType schemaProviderType = SchemaProviderType.Precise)

src/EFCore.Jet.Data/JetDatabaseCreator.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public static JetDatabaseCreator CreateInstance(SchemaProviderType schemaProvide
1313
_ => throw new ArgumentOutOfRangeException(nameof(schemaProviderType))
1414
};
1515

16-
public abstract void CreateDatabase(string fileNameOrConnectionString, DatabaseVersion version = DatabaseVersion.Newest, CollatingOrder collatingOrder = CollatingOrder.General, string databasePassword = null);
16+
public abstract void CreateDatabase(string fileNameOrConnectionString, DatabaseVersion version = DatabaseVersion.NewestSupported, CollatingOrder collatingOrder = CollatingOrder.General, string databasePassword = null);
1717
public abstract void CreateDualTable(string fileNameOrConnectionString, string databasePassword = null);
1818
}
1919
}

src/EFCore.Jet.Data/PreciseDatabaseCreator.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ public class PreciseDatabaseCreator
55
{
66
public override void CreateDatabase(
77
string fileNameOrConnectionString,
8-
DatabaseVersion version = DatabaseVersion.Newest,
8+
DatabaseVersion version = DatabaseVersion.NewestSupported,
99
CollatingOrder collatingOrder = CollatingOrder.General,
1010
string databasePassword = null)
1111
=> new DaoDatabaseCreator().CreateDatabase(fileNameOrConnectionString, version, collatingOrder, databasePassword);

test/EFCore.Jet.Data.Tests/Helpers.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,7 @@ public static JetConnection CreateAndOpenDatabase(string storeName)
261261

262262
public static void CreateDatabase(
263263
string storeName,
264-
DatabaseVersion version = DatabaseVersion.Newest,
264+
DatabaseVersion version = DatabaseVersion.NewestSupported,
265265
CollatingOrder collatingOrder = CollatingOrder.General,
266266
string databasePassword = null)
267267
{

0 commit comments

Comments
 (0)