Table of Contents

Class SqlDatabaseFactory<TDatabase>

Namespace
LfrlAnvil.Sql
Assembly
LfrlAnvil.Sql.Core.dll

Represents a factory of SQL databases.

public abstract class SqlDatabaseFactory<TDatabase> : ISqlDatabaseFactory where TDatabase : SqlDatabase

Type Parameters

TDatabase

SQL database type.

Inheritance
SqlDatabaseFactory<TDatabase>
Implements
Derived
Inherited Members

Constructors

SqlDatabaseFactory(SqlDialect)

Creates a new SqlDatabaseFactory<TDatabase> instance.

protected SqlDatabaseFactory(SqlDialect dialect)

Parameters

dialect SqlDialect

Properties

Dialect

Specifies the SQL dialect of this factory.

public SqlDialect Dialect { get; }

Property Value

SqlDialect

Methods

Create(string, SqlDatabaseVersionHistory, SqlCreateDatabaseOptions)

Attempts to create a new ISqlDatabase instance from the provided history of versions.

public SqlCreateDatabaseResult<TDatabase> Create(string connectionString, SqlDatabaseVersionHistory versionHistory, SqlCreateDatabaseOptions options = default)

Parameters

connectionString string

Connection string to the database.

versionHistory SqlDatabaseVersionHistory

Collection of DB versions.

options SqlCreateDatabaseOptions

DB creation options.

Returns

SqlCreateDatabaseResult<TDatabase>

New SqlCreateDatabaseResult<TDatabase> instance.

CreateCommitVersionsContext(SqlParameterBinderFactory, SqlCreateDatabaseOptions)

Creates a new SqlDatabaseCommitVersionsContext instance, used for managing application of versions to the database.

[Pure]
protected virtual SqlDatabaseCommitVersionsContext CreateCommitVersionsContext(SqlParameterBinderFactory parameterBinders, SqlCreateDatabaseOptions options)

Parameters

parameterBinders SqlParameterBinderFactory

Parameter binder factory.

options SqlCreateDatabaseOptions

DB creation options.

Returns

SqlDatabaseCommitVersionsContext

New SqlDatabaseCommitVersionsContext instance.

CreateConnection(DbConnectionStringBuilder)

Creates a new unopened DbConnection instance.

[Pure]
protected abstract DbConnection CreateConnection(DbConnectionStringBuilder connectionString)

Parameters

connectionString DbConnectionStringBuilder

Connection string builder.

Returns

DbConnection

New DbConnection instance.

CreateConnectionStringBuilder(string)

Creates a new DbConnectionStringBuilder instance.

[Pure]
protected abstract DbConnectionStringBuilder CreateConnectionStringBuilder(string connectionString)

Parameters

connectionString string

Connection string.

Returns

DbConnectionStringBuilder

New DbConnectionStringBuilder instance.

CreateDatabase(SqlDatabaseBuilder, DbConnectionStringBuilder, DbConnection, DbConnectionEventHandler, SqlQueryReaderExecutor<SqlDatabaseVersionRecord>, Version)

Creates a new SqlDatabase instance.

protected abstract TDatabase CreateDatabase(SqlDatabaseBuilder builder, DbConnectionStringBuilder connectionString, DbConnection connection, DbConnectionEventHandler eventHandler, SqlQueryReaderExecutor<SqlDatabaseVersionRecord> versionHistoryRecordsQuery, Version version)

Parameters

builder SqlDatabaseBuilder

Source database builder.

connectionString DbConnectionStringBuilder

Connection string builder.

connection DbConnection

Opened connection to the database.

eventHandler DbConnectionEventHandler

Collection of SqlDatabaseConnectionChangeEvent callbacks.

versionHistoryRecordsQuery SqlQueryReaderExecutor<SqlDatabaseVersionRecord>

Query reader's executor capable of reading metadata of all versions applied to the database.

version Version

Current version of the database.

Returns

TDatabase

New SqlDatabase instance.

CreateDatabaseBuilder(string, DbConnection)

Creates a new SqlDatabaseBuilder instance.

[Pure]
protected abstract SqlDatabaseBuilder CreateDatabaseBuilder(string defaultSchemaName, DbConnection connection)

Parameters

defaultSchemaName string

Initial name of the Default schema. Version history table will belong to this schema.

connection DbConnection

Opened connection to the database.

Returns

SqlDatabaseBuilder

New SqlDatabaseBuilder instance.

FinalizeConnectionPreparations(DbConnectionStringBuilder, DbConnection, SqlNodeInterpreter, ref SqlDatabaseFactoryStatementExecutor)

Finalizes DB connection preparations. This method is invoked right before version history table initialization.

protected virtual void FinalizeConnectionPreparations(DbConnectionStringBuilder connectionString, DbConnection connection, SqlNodeInterpreter nodeInterpreter, ref SqlDatabaseFactoryStatementExecutor executor)

Parameters

connectionString DbConnectionStringBuilder

Connection string builder.

connection DbConnection

Opened connection to the database.

nodeInterpreter SqlNodeInterpreter

SqlNodeInterpreter instance.

executor SqlDatabaseFactoryStatementExecutor

Decorator for executing SQL statements on the database.

GetChangeTrackerAttachmentForVersionHistoryTableInit(SqlDatabaseChangeTracker, SqlSchemaObjectName, SqlNodeInterpreter, DbConnection, ref SqlDatabaseFactoryStatementExecutor)

Checks whether or not the version history table should be attached as a change from which an SQL statement should be created and executed.

protected abstract bool GetChangeTrackerAttachmentForVersionHistoryTableInit(SqlDatabaseChangeTracker changeTracker, SqlSchemaObjectName versionHistoryTableName, SqlNodeInterpreter nodeInterpreter, DbConnection connection, ref SqlDatabaseFactoryStatementExecutor executor)

Parameters

changeTracker SqlDatabaseChangeTracker

Database builder's change tracker.

versionHistoryTableName SqlSchemaObjectName

Name of the version history table.

nodeInterpreter SqlNodeInterpreter

SqlNodeInterpreter instance.

connection DbConnection

Opened connection to the database.

executor SqlDatabaseFactoryStatementExecutor

Decorator for executing SQL statements on the database.

Returns

bool

true when version history table should be created in the database, otherwise false.

Remarks

This method can also be used for registering other common database objects.

GetDefaultVersionHistoryName()

Creates a new SqlSchemaObjectName instance that represents default version history table name.

[Pure]
protected abstract SqlSchemaObjectName GetDefaultVersionHistoryName()

Returns

SqlSchemaObjectName

New SqlSchemaObjectName instance.

GetVersionHistoryRecordsQueryDelegate(SqlQueryReaderFactory)

Creates a delegate capable of reading metadata of all versions applied to this database.

[Pure]
protected virtual Func<IDataReader, SqlQueryReaderOptions, SqlQueryResult<SqlDatabaseVersionRecord>> GetVersionHistoryRecordsQueryDelegate(SqlQueryReaderFactory queryReaders)

Parameters

queryReaders SqlQueryReaderFactory

Query reader factory.

Returns

Func<IDataReader, SqlQueryReaderOptions, SqlQueryResult<SqlDatabaseVersionRecord>>

Delegate capable of reading metadata of all versions applied to this database.

OnUncaughtException(Exception, DbConnection)

Allows to react to an unexpected exception.

protected virtual void OnUncaughtException(Exception exception, DbConnection connection)

Parameters

exception Exception

Thrown exception.

connection DbConnection

Opened connection to the database.

VersionHistoryTableBuilderInit(SqlTableBuilder)

Initializes the version history table builder.

protected virtual void VersionHistoryTableBuilderInit(SqlTableBuilder builder)

Parameters

builder SqlTableBuilder

Version history table builder.

Remarks

By default, this method adds the following columns:

  • VersionMajor (int)
  • VersionMinor (int)
  • VersionBuild (nullable int)
  • VersionRevision (nullable int)
  • Description (string)
  • CommitDateUtc (DateTime)
  • CommitDurationInTicks (long)