public override void CommmenceTrackingChanges(SourceTableConfiguration table)
        {
            var detector = new SqlChangeDetector(_config.SourceDatabaseConnectionString.Value,
                                                 table, _destination, Log.ForContext <SqlChangeDetector>());

            _detectors.Add(detector);
            detector.CommenceTracking();
        }
Esempio n. 2
0
        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;
        }
Esempio n. 3
0
        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)
 {
 }