Skip to content

Commit

Permalink
feat: OLE DB connection for MS Access (#816)
Browse files Browse the repository at this point in the history
* feat: OLE DB connection for MS Access
* fix: correct color for brand of MS Access
* docs: update automatically generated documentation

---------

Co-authored-by: AppVeyor bot <[email protected]>
  • Loading branch information
Seddryck and AppVeyor bot authored Jan 28, 2024
1 parent 1b7af28 commit 1760f14
Show file tree
Hide file tree
Showing 12 changed files with 71 additions and 12 deletions.
2 changes: 1 addition & 1 deletion DubUrl.Core/Mapping/Database/MsAccessDatabase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,6 @@ namespace DubUrl.Mapping.Database;
, ["accdb", "access", "msaccess"]
, DatabaseCategory.FileBased
)]
[Brand("microsoftaccess", "#217346")]
[Brand("microsoftaccess", "#A4373A")]
public class MsAccessDatabase : IDatabase
{ }
6 changes: 5 additions & 1 deletion DubUrl.OleDb.Testing/ProviderLocatorFactoryTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,16 @@ public class ProviderLocatorFactoryTest
[TestCase("xlsx", typeof(AceXlsxProviderLocator))]
[TestCase("xlsm", typeof(AceXlsmProviderLocator))]
[TestCase("xlsb", typeof(AceXlsbProviderLocator))]
[TestCase("mdb", typeof(AceMsAccessProviderLocator))]
[TestCase("accdb", typeof(AceMsAccessProviderLocator))]
public void Instantiate_SchemeWithoutOptions_CorrectType(string scheme, Type expected)
{
var probeMock = new Mock<ITypesProbe>();
probeMock.Setup(x => x.Locate()).Returns(
new[] {typeof(MssqlOleDbProviderLocator), typeof(MySqlProviderLocator)
, typeof(AceXlsbProviderLocator), typeof(AceXlsmProviderLocator)
, typeof(AceXlsProviderLocator), typeof(AceXlsxProviderLocator)
, typeof(AceMsAccessProviderLocator)
, typeof(MySqlDatabase), typeof(MsSqlServerDatabase), typeof(MsExcelDatabase)
}
);
Expand All @@ -55,7 +58,8 @@ public void Instantiate_SchemeWithoutOptions_CorrectOptionsMapper(string scheme,
probeMock.Setup(x => x.Locate()).Returns(
new[] {typeof(MssqlOleDbProviderLocator), typeof(MySqlProviderLocator)
, typeof(AceXlsbProviderLocator), typeof(AceXlsmProviderLocator)
, typeof(AceXlsProviderLocator), typeof(AceXlsxProviderLocator)
, typeof(AceXlsProviderLocator), typeof(AceXlsxProviderLocator)
, typeof(AceMsAccessProviderLocator)
, typeof(MySqlDatabase), typeof(MsSqlServerDatabase), typeof(MsExcelDatabase)
}
);
Expand Down
5 changes: 4 additions & 1 deletion DubUrl.OleDb/ProviderAttribute.cs
Original file line number Diff line number Diff line change
Expand Up @@ -59,5 +59,8 @@ public class ProviderSpecializationAttribute<P> : ProviderSpecializationAttribut
where P : IProviderLocator
{
public ProviderSpecializationAttribute(string alias)
: base(typeof(P), alias) { }
: this([alias]) { }

public ProviderSpecializationAttribute(string[] aliases)
: base(typeof(P), aliases) { }
}
16 changes: 13 additions & 3 deletions DubUrl.OleDb/Providers/AceProviderLocator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,6 @@ public AceProviderRegex()
}
private Dictionary<string, decimal> Candidates { get; } = [];

public AceProviderLocator()
: base(GetRegexPattern<AceProviderLocator>()) { }

internal AceProviderLocator(ProviderLister providerLister)
: base(GetRegexPattern<AceProviderLocator>(), providerLister) { }

Expand All @@ -41,6 +38,13 @@ public AceProviderLocator(string value)
, new OleDbRewriter.DataSourceMapper()
]) { }

public AceProviderLocator()
: base(GetRegexPattern<AceProviderLocator>(),
[
new OleDbRewriter.DataSourceMapper()
])
{ }


protected override void AddCandidate(string provider, string[] matches)
{
Expand Down Expand Up @@ -76,3 +80,9 @@ public class AceXlsbProviderLocator : AceProviderLocator
{
public AceXlsbProviderLocator() : base("Excel 12.0") { }
}

[ProviderSpecialization<AceProviderLocator>(["mdb", "accdb"])]
public class AceMsAccessProviderLocator : AceProviderLocator
{
public AceMsAccessProviderLocator() : base() { }
}
1 change: 1 addition & 0 deletions DubUrl.QA/MsAccess/OdbcDriverMsAccess.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
namespace DubUrl.QA.MsAccess;

[Category("MsAccess")]
[Category("ODBC")]
[FixtureLifeCycle(LifeCycle.SingleInstance)]
public class OdbcDriverMsAccess : BaseOdbcDriver
{
Expand Down
19 changes: 19 additions & 0 deletions DubUrl.QA/MsAccess/OleDbProviderMsAccess.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
using NUnit.Framework;

namespace DubUrl.QA.MsAccess;

[Category("MsAccess")]
[Category("OleDB")]
public class OleDbProviderMsAccess : BaseOleDbProvider
{
public override string ConnectionString
=> $"oledb+accdb:///MsAccess/DubUrl.accdb";

[Test]
public override void QueryCustomer()
=> QueryCustomer("select[FullName] from [Customer] where [CustomerId]=1");

[Test]
public override void QueryCustomerWithParams()
=> QueryCustomerWithParams("select [FullName] from [Customer] where [CustomerId]=?");
}
3 changes: 2 additions & 1 deletion DubUrl.QA/MsExcel/OdbcDriverMsExcel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
namespace DubUrl.QA.MsExcel;

[Category("MsExcel")]
[Category("ODBC")]
[FixtureLifeCycle(LifeCycle.SingleInstance)]
public class OdbcDriverMsExcel : BaseOdbcDriver
{
Expand All @@ -29,4 +30,4 @@ public override void QueryCustomer()
[Test]
public override void QueryCustomerWithParams()
=> QueryCustomerWithParams("select [FullName] from [Customer$] where [CustomerId]=?");
}
}
3 changes: 2 additions & 1 deletion DubUrl.QA/MsExcel/OleDbProviderMsExcel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
namespace DubUrl.QA.MsExcel;

[Category("MsExcel")]
[Category("OleDB")]
public class OleDbProviderMsExcel : BaseOleDbProvider
{
public override string ConnectionString
Expand All @@ -17,4 +18,4 @@ public override void QueryCustomer()
[Test]
public override void QueryCustomerWithParams()
=> QueryCustomerWithParams("select [FullName] from [Customer$] where [CustomerId]=?");
}
}
3 changes: 2 additions & 1 deletion DubUrl.QA/Postgresql/OdbcDriverPostgresql.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,11 @@
namespace DubUrl.QA.Postgresql;

[Category("Postgresql")]
[Category("ODBC")]
public class OdbcDriverPostgresql : BaseOdbcDriverPostgresql
{
public override string ConnectionString
{
get => $"odbc+pgsql://postgres:Password12!@localhost/DubUrl?TrustServerCertificate=Yes";
}
}
}
10 changes: 8 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ DubUrl provides a standard, URL style mechanism for parsing database connection
<!-- START BADGES -->
[![Mappers for ADO.Net Provider implemented badge](https://img.shields.io/badge/Mappers%20for%20ADO.Net%20Provider-16%20implemented-green)](https://seddryck.github.io/DubUrl/docs/native-ado-net-providers)
[![Mappers for ODBC drivers implemented badge](https://img.shields.io/badge/Mappers%20for%20ODBC%20drivers-12%20implemented-green)](https://seddryck.github.io/DubUrl/docs/odbc-driver-locators)
[![Mappers for OLE DB providers implemented badge](https://img.shields.io/badge/Mappers%20for%20OLE%20DB%20providers-6%20implemented-green)](https://seddryck.github.io/DubUrl/docs/oledb-provider-locators)
[![Mappers for OLE DB providers implemented badge](https://img.shields.io/badge/Mappers%20for%20OLE%20DB%20providers-7%20implemented-green)](https://seddryck.github.io/DubUrl/docs/oledb-provider-locators)
[![Mappers for ADOMD.NET providers implemented badge](https://img.shields.io/badge/Mappers%20for%20ADOMD.NET%20providers-5%20implemented-green)](https://seddryck.github.io/DubUrl/docs/adomd-providers)
<!-- END BADGES -->

Expand Down Expand Up @@ -151,7 +151,7 @@ The following databases and their associated schemes are supported out of the bo
|![DuckDB](https://img.shields.io/badge/DuckDB-FFF000?logo=duckdb&logoColor=000000&style=flat-square) | duck, duckdb | ^\bDuckDB\s\bDriver$ |
|![Apache Drill](https://img.shields.io/badge/Apache%20Drill-333333?logo=&logoColor=ffffff&style=flat-square) | drill | ^\bMapR Drill ODBC Driver$ |
|![Trino](https://img.shields.io/badge/Trino-DD00A1?logo=trino&logoColor=ffffff&style=flat-square) | tr, trino | ^(Simba)\s\bTrino ODBC Driver$ |
|![Microsoft Access](https://img.shields.io/badge/Microsoft%20Access-217346?logo=microsoftaccess&logoColor=ffffff&style=flat-square) | accdb, access, msaccess | ^\bMicrosoft Access Driver\s\(\*\.mdb, \*\.accdb\)$ |
|![Microsoft Access](https://img.shields.io/badge/Microsoft%20Access-A4373A?logo=microsoftaccess&logoColor=ffffff&style=flat-square) | accdb, access, msaccess | ^\bMicrosoft Access Driver\s\(\*\.mdb, \*\.accdb\)$ |
|![Microsoft Excel](https://img.shields.io/badge/Microsoft%20Excel-217346?logo=microsoftexcel&logoColor=ffffff&style=flat-square) | xls, xlsx, xlsb, xlsm | ^\bMicrosoft Excel Driver\s\(\*\.xls, \*\.xlsx, \*\.xlsm, \*\.xlsb\)$ |
|![Text files](https://img.shields.io/badge/Text%20files-333333?logo=&logoColor=ffffff&style=flat-square) | txt, csv, tsv | ^\bMicrosoft Access Text Driver\s\(\*\.txt, \*\.csv\)$ |
|![QuestDb](https://img.shields.io/badge/QuestDb-333333?logo=&logoColor=ffffff&style=flat-square) | quest, questdb | ^\bPostgreSQL\s(ANSI\|Unicode)(\(x64\))?$ |
Expand All @@ -171,6 +171,7 @@ The following databases and their associated schemes are supported through the O
|![Microsoft Excel](https://img.shields.io/badge/Microsoft%20Excel-217346?logo=microsoftexcel&logoColor=ffffff&style=flat-square) | xlsx | ^\bMicrosoft\.ACE\.OLEDB\.([0-9]{1,2}(?:\.[0-9]{1,2}){0,2})$|
|![Microsoft Excel](https://img.shields.io/badge/Microsoft%20Excel-217346?logo=microsoftexcel&logoColor=ffffff&style=flat-square) | xlsm | ^\bMicrosoft\.ACE\.OLEDB\.([0-9]{1,2}(?:\.[0-9]{1,2}){0,2})$|
|![Microsoft Excel](https://img.shields.io/badge/Microsoft%20Excel-217346?logo=microsoftexcel&logoColor=ffffff&style=flat-square) | xlsb | ^\bMicrosoft\.ACE\.OLEDB\.([0-9]{1,2}(?:\.[0-9]{1,2}){0,2})$|
|![Microsoft Excel](https://img.shields.io/badge/Microsoft%20Excel-217346?logo=microsoftexcel&logoColor=ffffff&style=flat-square) | mdb, accdb | ^\bMicrosoft\.ACE\.OLEDB\.([0-9]{1,2}(?:\.[0-9]{1,2}){0,2})$|
<!-- END OLEDB TABLE -->

### Extension for ADOMD.NET data provider
Expand Down Expand Up @@ -222,3 +223,8 @@ Please note that `DubUrl` does not install actual drivers, and only provides a s








2 changes: 1 addition & 1 deletion docs/_data/odbc.json
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@
"NamePattern": "^\\bMicrosoft Access Driver\\s\\(\\*\\.mdb, \\*\\.accdb\\)$",
"Options": [],
"Slug": "microsoftaccess",
"MainColor": "#217346",
"MainColor": "#A4373A",
"SecondaryColor": "#ffffff"
},
{
Expand Down
13 changes: 13 additions & 0 deletions docs/_data/oledb.json
Original file line number Diff line number Diff line change
Expand Up @@ -74,5 +74,18 @@
"MainColor": "#217346",
"SecondaryColor": "#ffffff",
"Options": "VersionOption"
},
{
"Class": "AceMsAccessProviderLocator",
"Database": "Microsoft Excel",
"Aliases": [
"mdb",
"accdb"
],
"NamePattern": "^\\bMicrosoft\\.ACE\\.OLEDB\\.([0-9]{1,2}(?:\\.[0-9]{1,2}){0,2})$",
"Slug": "microsoftexcel",
"MainColor": "#217346",
"SecondaryColor": "#ffffff",
"Options": "VersionOption"
}
]

0 comments on commit 1760f14

Please sign in to comment.