429ead837f
Widens the two provider gates so an authored `{"provider":"Postgres"}` or
`{"provider":"Oracle"}` binds that provider's own dialect instead of failing
"not available in this build":
- `SqlDriverFactoryExtensions.CreateDialect` gains a Postgres and an Oracle
arm. There is deliberately no fallback arm — a default resolving to
SqlServerDialect would construct happily and then emit T-SQL at a Postgres
or Oracle server. The rejection message now names the three supported and
the two still-reserved providers.
- `SqlDriverBrowser.DefaultDialectSelector` widens identically, so a provider
the runtime constructs is also browsable; MySql/Odbc keep resolving to null
and the caller keeps reporting them as unavailable.
Tests: the existing rejected-provider controls flip from Postgres to MySql
(factory) and Odbc (browser) so the reserved half stays falsifiable, and the
new legs assert the bound dialect TYPE rather than mere construction —
"no throw" alone would pass against a SqlServer fallback.
Doc-comment sweep (contract addition, one line each): the "v1 constructs
SqlServer only" / "reserved for P2" claims in SqlProvider, SqlDriverConfigDto,
ISqlDialect.Provider and SqlServerDialect are now false and were corrected in
the same change.
44 lines
1.7 KiB
C#
44 lines
1.7 KiB
C#
namespace ZB.MOM.WW.OtOpcUa.Driver.Sql.Contracts;
|
|
|
|
/// <summary>
|
|
/// Which ADO.NET provider/dialect backs a Sql driver instance. <b>Constructed:</b> SqlServer, Postgres,
|
|
/// Oracle — each over a fully managed provider package, no native client install. <b>Reserved:</b> MySql
|
|
/// and Odbc are declared names only; authoring one fails at driver construction and at browse.
|
|
/// </summary>
|
|
public enum SqlProvider
|
|
{
|
|
/// <summary>Microsoft SQL Server via <c>Microsoft.Data.SqlClient</c>.</summary>
|
|
SqlServer,
|
|
|
|
/// <summary>PostgreSQL via the managed <c>Npgsql</c> provider.</summary>
|
|
Postgres,
|
|
|
|
/// <summary>MySQL / MariaDB — reserved; no dialect ships, so this is not constructed.</summary>
|
|
MySql,
|
|
|
|
/// <summary>Generic ODBC — reserved; no dialect ships, so this is not constructed.</summary>
|
|
Odbc,
|
|
|
|
/// <summary>Oracle Database via the fully managed <c>Oracle.ManagedDataAccess.Core</c> provider.</summary>
|
|
Oracle,
|
|
}
|
|
|
|
/// <summary>Tag→value mapping model. v1 ships KeyValue + WideRow; Query is deferred (design §5.4 / P3).</summary>
|
|
public enum SqlTagModel
|
|
{
|
|
/// <summary>
|
|
/// Key-value (EAV) table: one row per tag, selected by <c>keyColumn = keyValue</c>, value read from
|
|
/// <c>valueColumn</c>.
|
|
/// </summary>
|
|
KeyValue,
|
|
|
|
/// <summary>
|
|
/// Wide row: one row holds many signals as columns; the tag names its <c>columnName</c> and the row is
|
|
/// picked by a row selector (a <c>whereColumn</c>/<c>whereValue</c> pair, or newest-by-timestamp).
|
|
/// </summary>
|
|
WideRow,
|
|
|
|
/// <summary>Named arbitrary-SELECT query (design §5.4). <b>Deferred to P3 — not accepted by v1's parser.</b></summary>
|
|
Query,
|
|
}
|