public override void CommmenceTrackingChanges(SourceTableConfiguration table) { var detector = new SqlChangeDetector(_config.SourceDatabaseConnectionString.Value, table, _destination, Log.ForContext <SqlChangeDetector>()); _detectors.Add(detector); detector.CommenceTracking(); }
public SqlChangeDetector(string connectionString, SourceTableConfiguration table, IDestinationOfData destination, ILogger log) { Ensure.That(() => connectionString).IsNotNullOrWhiteSpace(); Ensure.That(() => table).IsNotNull(); Ensure.That(() => destination).IsNotNull(); _connectionString = connectionString; _table = table; _destination = destination; _log = log; }
public static ActionTaken SetChangeTrackingOnTable(SourceTableConfiguration currTable, SqlConnection conn) { Ensure.That(() => currTable).IsNotNull(); Ensure.That(() => conn).IsNotNull(); conn.EnsureOpen(); var cmdText = $@" DECLARE @actionTaken INT SET @actionTaken = {(int) ActionTaken.Unknown} IF NOT EXISTS (SELECT sys.tables.name FROM sys.tables JOIN sys.schemas ON sys.schemas.schema_id = sys.tables.schema_id WHERE sys.tables.name = '{currTable.TableName}' AND sys.schemas.name = '{currTable.SchemaName}') BEGIN SET @actionTaken = {ActionTakenErrorTableNotFound} END ELSE BEGIN IF NOT EXISTS (SELECT sys.tables.name FROM sys.change_tracking_tables JOIN sys.tables ON sys.tables.object_id = sys.change_tracking_tables.object_id JOIN sys.schemas ON sys.schemas.schema_id = sys.tables.schema_id WHERE sys.tables.name = '{currTable.TableName}' AND sys.schemas.name = '{currTable.SchemaName}') BEGIN ALTER TABLE [{currTable.SchemaName}].[{currTable.TableName}] ENABLE CHANGE_TRACKING WITH (TRACK_COLUMNS_UPDATED = OFF) SET @actionTaken = {(int) ActionTaken.Successful} END ELSE BEGIN SET @actionTaken = {(int) ActionTaken.None} END END SELECT @actionTaken "; var cmd = new SqlCommand(cmdText, conn); var res = Convert.ToInt32(cmd.ExecuteScalar()); if (res == ActionTakenErrorTableNotFound) { throw new ApplicationException( $"{SqlServerSourceDatabase.ExceptionMessagePrefixTableNotExists} - [{currTable.SchemaName}].[{currTable.TableName}]"); } return((ActionTaken)res); }
public override void RunQualityCheck(SourceTableConfiguration table) { }
public override void PollForChanges(SourceTableConfiguration table) { }