Table of Contents

Class SqlDatabaseChangeTracker

Namespace
LfrlAnvil.Sql.Objects.Builders
Assembly
LfrlAnvil.Sql.Core.dll

Represents a tracker of changes applied to the attached database builder.

public abstract class SqlDatabaseChangeTracker : ISqlDatabaseChangeTracker
Inheritance
SqlDatabaseChangeTracker
Implements
Derived
Inherited Members
Extension Methods

Constructors

SqlDatabaseChangeTracker()

Creates a new SqlDatabaseChangeTracker instance.

protected SqlDatabaseChangeTracker()

Properties

ActionTimeout

Optional CommandTimeout for registered SqlDatabaseBuilderCommandAction instances.

public TimeSpan? ActionTimeout { get; }

Property Value

TimeSpan?

ActiveObject

Represents a currently tracked SQL object builder instance, whose changes will be aggregated.

public SqlObjectBuilder? ActiveObject { get; }

Property Value

SqlObjectBuilder

ActiveObjectExistenceState

Specifies the existence state of ActiveObject.

public SqlObjectExistenceState ActiveObjectExistenceState { get; }

Property Value

SqlObjectExistenceState

Database

Database that this instance tracks.

public SqlDatabaseBuilder Database { get; }

Property Value

SqlDatabaseBuilder

IsActive

Specifies whether or not this change tracker will register changes.

public bool IsActive { get; }

Property Value

bool

Remarks

See IsAttached and Mode for more information.

IsAttached

Specifies whether or not this change tracker is attached.

public bool IsAttached { get; }

Property Value

bool

Remarks

Change tracker will ignore all changes when IsAttached is equal to false.

Mode

Specifies the current SqlDatabaseCreateMode.

public SqlDatabaseCreateMode Mode { get; }

Property Value

SqlDatabaseCreateMode

Remarks

Change tracker will ignore all changes when Mode is equal to NoChanges.

Methods

AddAction(SqlDatabaseBuilderCommandAction)

Registers a pending SqlDatabaseBuilderCommandAction.

protected void AddAction(SqlDatabaseBuilderCommandAction action)

Parameters

action SqlDatabaseBuilderCommandAction

Pending action to add.

AddAction(Action<IDbCommand>, Action<IDbCommand>?)

Adds a custom SqlDatabaseBuilderCommandAction to this change tracker.

public SqlDatabaseChangeTracker AddAction(Action<IDbCommand> action, Action<IDbCommand>? setup = null)

Parameters

action Action<IDbCommand>

Custom delegate that executes the IDbCommand.

setup Action<IDbCommand>

Optional delegate that prepares the IDbCommand. Can be used to e.g. prepare a collection of parameters. Equal to null by default.

Returns

SqlDatabaseChangeTracker

this.

AddChange<T>(SqlObjectBuilder, SqlObjectBuilder, SqlObjectChangeDescriptor<T>, T, T)

Registers a change.

protected void AddChange<T>(SqlObjectBuilder activeObject, SqlObjectBuilder target, SqlObjectChangeDescriptor<T> descriptor, T originalValue, T newValue)

Parameters

activeObject SqlObjectBuilder

ActiveObject for which the change should be registered.

target SqlObjectBuilder

Target object.

descriptor SqlObjectChangeDescriptor<T>

Changed property descriptor.

originalValue T

Value of the changed property before the change.

newValue T

New value of the changed property.

Type Parameters

T

Property type.

AddComputationChange(SqlColumnBuilder, SqlColumnComputation?)

Callback for registration of column's Computation property change.

protected virtual void AddComputationChange(SqlColumnBuilder target, SqlColumnComputation? originalValue)

Parameters

target SqlColumnBuilder

Modified column.

originalValue SqlColumnComputation?

Column's Computation before the change.

AddDataTypeChange(SqlColumnBuilder, ISqlDataType)

Callback for registration of ISqlDataType of column's TypeDefinition property change.

protected virtual void AddDataTypeChange(SqlColumnBuilder target, ISqlDataType originalValue)

Parameters

target SqlColumnBuilder

Modified column.

originalValue ISqlDataType

ISqlDataType of column's TypeDefinition before the change.

AddDefaultValueChange(SqlColumnBuilder, SqlExpressionNode?)

Callback for registration of column's DefaultValue property change.

protected virtual void AddDefaultValueChange(SqlColumnBuilder target, SqlExpressionNode? originalValue)

Parameters

target SqlColumnBuilder

Modified column.

originalValue SqlExpressionNode

Column's DefaultValue before the change.

AddFilterChange(SqlIndexBuilder, SqlConditionNode?)

Callback for registration of index's Filter property change.

protected virtual void AddFilterChange(SqlIndexBuilder target, SqlConditionNode? originalValue)

Parameters

target SqlIndexBuilder

Modified index.

originalValue SqlConditionNode

Index's Filter before the change.

AddIsNullableChange(SqlColumnBuilder)

Callback for registration of column's IsNullable property change.

protected virtual void AddIsNullableChange(SqlColumnBuilder target)

Parameters

target SqlColumnBuilder

Modified column.

AddIsRemovedChange(SqlObjectBuilder, SqlObjectBuilder)

Callback for registration of object's IsRemoved property change.

protected virtual void AddIsRemovedChange(SqlObjectBuilder activeObject, SqlObjectBuilder target)

Parameters

activeObject SqlObjectBuilder

ActiveObject for which the change should be registered.

target SqlObjectBuilder

Created or removed object.

AddIsUniqueChange(SqlIndexBuilder)

Callback for registration of index's IsUnique property change.

protected virtual void AddIsUniqueChange(SqlIndexBuilder target)

Parameters

target SqlIndexBuilder

Modified index.

AddIsVirtualChange(SqlIndexBuilder)

Callback for registration of index's IsVirtual property change.

protected virtual void AddIsVirtualChange(SqlIndexBuilder target)

Parameters

target SqlIndexBuilder

Modified index.

AddNameChange(SqlObjectBuilder, SqlObjectBuilder, string)

Callback for registration of object's Name property change.

protected virtual void AddNameChange(SqlObjectBuilder activeObject, SqlObjectBuilder target, string originalValue)

Parameters

activeObject SqlObjectBuilder

ActiveObject for which the change should be registered.

target SqlObjectBuilder

Renamed object.

originalValue string

Object's Name before the change.

AddOnDeleteBehaviorChange(SqlForeignKeyBuilder, ReferenceBehavior)

Callback for registration of foreign key's OnDeleteBehavior property change.

protected virtual void AddOnDeleteBehaviorChange(SqlForeignKeyBuilder target, ReferenceBehavior originalValue)

Parameters

target SqlForeignKeyBuilder

Modified foreign key.

originalValue ReferenceBehavior

Foreign key's OnDeleteBehavior before the change.

AddOnUpdateBehaviorChange(SqlForeignKeyBuilder, ReferenceBehavior)

Callback for registration of foreign key's OnUpdateBehavior property change.

protected virtual void AddOnUpdateBehaviorChange(SqlForeignKeyBuilder target, ReferenceBehavior originalValue)

Parameters

target SqlForeignKeyBuilder

Modified foreign key.

originalValue ReferenceBehavior

Foreign key's OnUpdateBehavior before the change.

AddParameterizedStatement(ISqlStatementNode, IEnumerable<SqlParameter>, SqlParameterBinderCreationOptions?)

Adds a custom parameterized SQL statement to this change tracker.

public SqlDatabaseChangeTracker AddParameterizedStatement(ISqlStatementNode statement, IEnumerable<SqlParameter> parameters, SqlParameterBinderCreationOptions? options = null)

Parameters

statement ISqlStatementNode

SQL statement node to add.

parameters IEnumerable<SqlParameter>

Source of parameters to bind.

options SqlParameterBinderCreationOptions?

Optional SqlParameterBinderCreationOptions.

Returns

SqlDatabaseChangeTracker

this.

AddParameterizedStatement<TSource>(ISqlStatementNode, TSource, SqlParameterBinderCreationOptions?)

Adds a custom parameterized SQL statement to this change tracker.

public SqlDatabaseChangeTracker AddParameterizedStatement<TSource>(ISqlStatementNode statement, TSource parameters, SqlParameterBinderCreationOptions? options = null) where TSource : notnull

Parameters

statement ISqlStatementNode

SQL statement node to add.

parameters TSource

Source of parameters to bind.

options SqlParameterBinderCreationOptions?

Optional SqlParameterBinderCreationOptions.

Returns

SqlDatabaseChangeTracker

this.

Type Parameters

TSource

Parameter source type.

AddPrimaryKeyChange(SqlIndexBuilder, SqlPrimaryKeyBuilder?)

Callback for registration of index's PrimaryKey property change.

protected virtual void AddPrimaryKeyChange(SqlIndexBuilder target, SqlPrimaryKeyBuilder? originalValue)

Parameters

target SqlIndexBuilder

Modified index.

originalValue SqlPrimaryKeyBuilder

Index's PrimaryKey before the change.

AddSqlAction(string)

Registers a pending SqlDatabaseBuilderCommandAction from the provided sql statement.

protected void AddSqlAction(string sql)

Parameters

sql string

Pending SQL statement to add.

AddStatement(ISqlStatementNode)

Adds a custom SQL statement to this change tracker.

public SqlDatabaseChangeTracker AddStatement(ISqlStatementNode statement)

Parameters

statement ISqlStatementNode

SQL statement node to add.

Returns

SqlDatabaseChangeTracker

this.

Exceptions

SqlObjectBuilderException

When statement contains parameters.

Attach(bool)

Changes IsAttached value for this change tracker.

public SqlDatabaseChangeTracker Attach(bool enabled = true)

Parameters

enabled bool

Value to set. Equal to true by default.

Returns

SqlDatabaseChangeTracker

this.

CompletePendingAlterObjectChanges(SqlObjectBuilder, SqlDatabaseChangeAggregator)

Callback for completing pending changes for a modified ActiveObject.

protected abstract void CompletePendingAlterObjectChanges(SqlObjectBuilder obj, SqlDatabaseChangeAggregator changeAggregator)

Parameters

obj SqlObjectBuilder

Modified ActiveObject.

changeAggregator SqlDatabaseChangeAggregator

SqlDatabaseChangeAggregator populated with all ActiveObject changes.

CompletePendingChanges()

Completes all pending changes and registers appropriate SqlDatabaseBuilderCommandAction instances for them.

public SqlDatabaseChangeTracker CompletePendingChanges()

Returns

SqlDatabaseChangeTracker

this.

CompletePendingCreateObjectChanges(SqlObjectBuilder)

Callback for completing pending changes for a created ActiveObject.

protected abstract void CompletePendingCreateObjectChanges(SqlObjectBuilder obj)

Parameters

obj SqlObjectBuilder

Created ActiveObject.

CompletePendingRemoveObjectChanges(SqlObjectBuilder)

Callback for completing pending changes for a removed ActiveObject.

protected abstract void CompletePendingRemoveObjectChanges(SqlObjectBuilder obj)

Parameters

obj SqlObjectBuilder

Removed ActiveObject.

ContainsChange(SqlObjectBuilder, SqlObjectChangeDescriptor)

Checks whether or not a change for the given target and its property's descriptor is currently pending.

[Pure]
public bool ContainsChange(SqlObjectBuilder target, SqlObjectChangeDescriptor descriptor)

Parameters

target SqlObjectBuilder

Object to check.

descriptor SqlObjectChangeDescriptor

Property change descriptor.

Returns

bool

true when the change is pending, otherwise false.

CreateAlterObjectChangeAggregator()

Creates a new empty SqlDatabaseChangeAggregator instance.

[Pure]
protected abstract SqlDatabaseChangeAggregator CreateAlterObjectChangeAggregator()

Returns

SqlDatabaseChangeAggregator

New SqlDatabaseChangeAggregator instance.

Remarks

This method should only be invoked once, the first time an aggregator is required.

CreateNodeInterpreter()

Creates a new SqlNodeInterpreter instance.

protected SqlNodeInterpreter CreateNodeInterpreter()

Returns

SqlNodeInterpreter

New SqlNodeInterpreter instance.

GetExistenceState(SqlObjectBuilder)

Returns SqlObjectExistenceState value for the given ISqlObjectBuilder instance.

[Pure]
public SqlObjectExistenceState GetExistenceState(SqlObjectBuilder target)

Parameters

target SqlObjectBuilder

Object to check.

Returns

SqlObjectExistenceState

One of three possible values:

  • Unchanged when target does not exist or a pending action for its creation or removal does not exist,
  • Created when pending creation action for target exists,
  • Removed when pending removal action for target exists.

Remarks

Use ActiveObjectExistenceState instead, for reading current state of the ActiveObject.

GetNodeInterpreterContext()

Creates a new empty SqlNodeInterpreterContext instance or returns a cached instance.

protected SqlNodeInterpreterContext GetNodeInterpreterContext()

Returns

SqlNodeInterpreterContext

New SqlNodeInterpreterContext or cached instance.

GetOrCreateAlterObjectChangeAggregator()

Creates a new empty SqlDatabaseChangeAggregator instance or returns a cached instance.

protected SqlDatabaseChangeAggregator GetOrCreateAlterObjectChangeAggregator()

Returns

SqlDatabaseChangeAggregator

New SqlDatabaseChangeAggregator or cached instance.

Remarks

See CreateAlterObjectChangeAggregator() for method that creates a new instance.

GetPendingActions()

Returns a collection of all pending SqlDatabaseBuilderCommandAction instances.

public ReadOnlySpan<SqlDatabaseBuilderCommandAction> GetPendingActions()

Returns

ReadOnlySpan<SqlDatabaseBuilderCommandAction>

Collection of all pending SqlDatabaseBuilderCommandAction instances.

SetActionTimeout(TimeSpan?)

Changes ActionTimeout value for this change tracker.

public SqlDatabaseChangeTracker SetActionTimeout(TimeSpan? value)

Parameters

value TimeSpan?

Value to set.

Returns

SqlDatabaseChangeTracker

this.

SetModeAndAttach(SqlDatabaseCreateMode)

Sets Mode and marks this change tracker as attached.

protected void SetModeAndAttach(SqlDatabaseCreateMode mode)

Parameters

mode SqlDatabaseCreateMode

Mode to set.

Remarks

Internal use only.

TryGetOriginalValue(SqlObjectBuilder, SqlObjectChangeDescriptor, out object?)

Attempts to return a value before the change associated with the given target and its property's descriptor.

public bool TryGetOriginalValue(SqlObjectBuilder target, SqlObjectChangeDescriptor descriptor, out object? result)

Parameters

target SqlObjectBuilder

Object to check.

descriptor SqlObjectChangeDescriptor

Property change descriptor.

result object

out parameter that returns the value before the change was made.

Returns

bool

true when the change is pending and original value was retrieved, otherwise false.