Esempio n. 1
0
        private void Init(DwhBuilderConfiguration configuration, RelationalModel model)
        {
            var builder = new MsSqlDwhBuilder(PluginTopic, "run#1", EtlRunId1)
            {
                Configuration    = configuration,
                ConnectionString = TestConnectionString,
                Model            = model,
            };

            // BaseIsCurrentFinalizer + HasHistoryTable enabled
            builder.AddTables(model["dbo"]["Company"])
            .InputIsCustomProcess(CreateCompany1)
            .SetValidFromToDefault()
            .RemoveExistingRows(b => b
                                .MatchByPrimaryKey()
                                .CompareAllColumnsButValidity()
                                .AutoValidityIfValueChanged())
            .DisableConstraintCheck()
            .BaseIsCurrentFinalizer(b => b
                                    .MatchByPrimaryKey());

            var process = builder.Build();

            Context.ExecuteOne(true, process);

            var result = ReadRows("dbo", "Company");

            Assert.AreEqual(4, result.Count);
            Assert.That.ExactMatch(result, new List <CaseInsensitiveStringKeyDictionary <object> >()
            {
                new CaseInsensitiveStringKeyDictionary <object>()
                {
                    ["Id"] = 1, ["Name"] = "A", ["EtlRunInsert"] = new DateTime(2001, 1, 1, 1, 1, 1, 0), ["EtlRunUpdate"] = new DateTime(2001, 1, 1, 1, 1, 1, 0), ["EtlRunFrom"] = new DateTime(2001, 1, 1, 1, 1, 1, 0), ["_ValidFrom"] = new DateTimeOffset(new DateTime(1900, 1, 1, 0, 0, 0, 0), new TimeSpan(0, 0, 0, 0, 0))
                },
                new CaseInsensitiveStringKeyDictionary <object>()
                {
                    ["Id"] = 2, ["Name"] = "B", ["EtlRunInsert"] = new DateTime(2001, 1, 1, 1, 1, 1, 0), ["EtlRunUpdate"] = new DateTime(2001, 1, 1, 1, 1, 1, 0), ["EtlRunFrom"] = new DateTime(2001, 1, 1, 1, 1, 1, 0), ["_ValidFrom"] = new DateTimeOffset(new DateTime(1900, 1, 1, 0, 0, 0, 0), new TimeSpan(0, 0, 0, 0, 0))
                },
                new CaseInsensitiveStringKeyDictionary <object>()
                {
                    ["Id"] = 3, ["Name"] = "C", ["EtlRunInsert"] = new DateTime(2001, 1, 1, 1, 1, 1, 0), ["EtlRunUpdate"] = new DateTime(2001, 1, 1, 1, 1, 1, 0), ["EtlRunFrom"] = new DateTime(2001, 1, 1, 1, 1, 1, 0), ["_ValidFrom"] = new DateTimeOffset(new DateTime(1900, 1, 1, 0, 0, 0, 0), new TimeSpan(0, 0, 0, 0, 0))
                },
                new CaseInsensitiveStringKeyDictionary <object>()
                {
                    ["Id"] = 4, ["Name"] = "D", ["EtlRunInsert"] = new DateTime(2001, 1, 1, 1, 1, 1, 0), ["EtlRunUpdate"] = new DateTime(2001, 1, 1, 1, 1, 1, 0), ["EtlRunFrom"] = new DateTime(2001, 1, 1, 1, 1, 1, 0), ["_ValidFrom"] = new DateTimeOffset(new DateTime(1900, 1, 1, 0, 0, 0, 0), new TimeSpan(0, 0, 0, 0, 0))
                }
            });

            result = ReadRows("dbo", "Company_hist");
            Assert.AreEqual(4, result.Count);
            Assert.That.ExactMatch(result, new List <CaseInsensitiveStringKeyDictionary <object> >()
            {
                new CaseInsensitiveStringKeyDictionary <object>()
                {
                    ["Company_histID"] = 1, ["Id"] = 1, ["Name"] = "A", ["EtlRunInsert"] = new DateTime(2001, 1, 1, 1, 1, 1, 0), ["EtlRunUpdate"] = new DateTime(2001, 1, 1, 1, 1, 1, 0), ["EtlRunFrom"] = new DateTime(2001, 1, 1, 1, 1, 1, 0), ["_ValidFrom"] = new DateTimeOffset(new DateTime(1900, 1, 1, 0, 0, 0, 0), new TimeSpan(0, 0, 0, 0, 0)), ["_ValidTo"] = new DateTimeOffset(new DateTime(2500, 1, 1, 0, 0, 0, 0), new TimeSpan(0, 0, 0, 0, 0))
                },
                new CaseInsensitiveStringKeyDictionary <object>()
                {
                    ["Company_histID"] = 2, ["Id"] = 2, ["Name"] = "B", ["EtlRunInsert"] = new DateTime(2001, 1, 1, 1, 1, 1, 0), ["EtlRunUpdate"] = new DateTime(2001, 1, 1, 1, 1, 1, 0), ["EtlRunFrom"] = new DateTime(2001, 1, 1, 1, 1, 1, 0), ["_ValidFrom"] = new DateTimeOffset(new DateTime(1900, 1, 1, 0, 0, 0, 0), new TimeSpan(0, 0, 0, 0, 0)), ["_ValidTo"] = new DateTimeOffset(new DateTime(2500, 1, 1, 0, 0, 0, 0), new TimeSpan(0, 0, 0, 0, 0))
                },
                new CaseInsensitiveStringKeyDictionary <object>()
                {
                    ["Company_histID"] = 3, ["Id"] = 3, ["Name"] = "C", ["EtlRunInsert"] = new DateTime(2001, 1, 1, 1, 1, 1, 0), ["EtlRunUpdate"] = new DateTime(2001, 1, 1, 1, 1, 1, 0), ["EtlRunFrom"] = new DateTime(2001, 1, 1, 1, 1, 1, 0), ["_ValidFrom"] = new DateTimeOffset(new DateTime(1900, 1, 1, 0, 0, 0, 0), new TimeSpan(0, 0, 0, 0, 0)), ["_ValidTo"] = new DateTimeOffset(new DateTime(2500, 1, 1, 0, 0, 0, 0), new TimeSpan(0, 0, 0, 0, 0))
                },
                new CaseInsensitiveStringKeyDictionary <object>()
                {
                    ["Company_histID"] = 4, ["Id"] = 4, ["Name"] = "D", ["EtlRunInsert"] = new DateTime(2001, 1, 1, 1, 1, 1, 0), ["EtlRunUpdate"] = new DateTime(2001, 1, 1, 1, 1, 1, 0), ["EtlRunFrom"] = new DateTime(2001, 1, 1, 1, 1, 1, 0), ["_ValidFrom"] = new DateTimeOffset(new DateTime(1900, 1, 1, 0, 0, 0, 0), new TimeSpan(0, 0, 0, 0, 0)), ["_ValidTo"] = new DateTimeOffset(new DateTime(2500, 1, 1, 0, 0, 0, 0), new TimeSpan(0, 0, 0, 0, 0))
                }
            });

            result = ReadRows("dbo", "_temp_Company");
            Assert.AreEqual(4, result.Count);
        }
Esempio n. 2
0
        private void Init(DwhBuilderConfiguration configuration, RelationalModel model)
        {
            var builder = new MsSqlDwhBuilder(PluginTopic, "run#1", EtlRunId1)
            {
                Configuration    = configuration,
                ConnectionString = TestConnectionString,
                Model            = model,
            };

            builder.AddTables(model["dbo"]["People"])
            .InputIsCustomProcess(CreatePeople1)
            .SetValidFromToDefault()
            .SetValidFromToRecordTimestampIfAvailable()
            .AddMutators(PeopleMutators)
            .RemoveExistingRows(b => b
                                .MatchByPrimaryKey()
                                .CompareAllColumnsButValidity())
            .DisableConstraintCheck()
            .BaseIsCurrentFinalizer(b => b
                                    .MatchByPrimaryKey());

            builder.AddTables(model["sec"]["Pet"])
            .InputIsCustomProcess(CreatePet1)
            .SetValidFromToDefault()
            .SetValidFromToRecordTimestampIfAvailable()
            .AddMutators(PetMutators)
            .RemoveExistingRows(b => b
                                .MatchByPrimaryKey()
                                .CompareAllColumnsButValidity())
            .DisableConstraintCheck()
            .BaseIsCurrentFinalizer(b => b
                                    .MatchByPrimaryKey());

            var process = builder.Build();

            Context.ExecuteOne(true, process);

            var result = ReadRows("dbo", "People");

            Assert.AreEqual(5, result.Count);
            Assert.That.ExactMatch(result, new List <CaseInsensitiveStringKeyDictionary <object> >()
            {
                new CaseInsensitiveStringKeyDictionary <object>()
                {
                    ["Id"] = 0, ["Name"] = "A", ["FavoritePetId"] = 2, ["LastChangedOn"] = new DateTime(2000, 1, 1, 1, 1, 1, 0), ["_ValidFrom"] = new DateTimeOffset(new DateTime(2000, 1, 1, 1, 1, 1, 0), new TimeSpan(0, 0, 0, 0, 0))
                },
                new CaseInsensitiveStringKeyDictionary <object>()
                {
                    ["Id"] = 1, ["Name"] = "B", ["LastChangedOn"] = new DateTime(2000, 1, 1, 1, 1, 1, 0), ["_ValidFrom"] = new DateTimeOffset(new DateTime(2000, 1, 1, 1, 1, 1, 0), new TimeSpan(0, 0, 0, 0, 0))
                },
                new CaseInsensitiveStringKeyDictionary <object>()
                {
                    ["Id"] = 2, ["Name"] = "C", ["FavoritePetId"] = 3, ["LastChangedOn"] = new DateTime(2000, 1, 1, 1, 1, 1, 0), ["_ValidFrom"] = new DateTimeOffset(new DateTime(2000, 1, 1, 1, 1, 1, 0), new TimeSpan(0, 0, 0, 0, 0))
                },
                new CaseInsensitiveStringKeyDictionary <object>()
                {
                    ["Id"] = 3, ["Name"] = "D", ["LastChangedOn"] = new DateTime(2000, 1, 1, 1, 1, 1, 0), ["_ValidFrom"] = new DateTimeOffset(new DateTime(2000, 1, 1, 1, 1, 1, 0), new TimeSpan(0, 0, 0, 0, 0))
                },
                new CaseInsensitiveStringKeyDictionary <object>()
                {
                    ["Id"] = 4, ["Name"] = "E", ["LastChangedOn"] = new DateTime(2000, 1, 1, 1, 1, 1, 0), ["_ValidFrom"] = new DateTimeOffset(new DateTime(2000, 1, 1, 1, 1, 1, 0), new TimeSpan(0, 0, 0, 0, 0))
                }
            });

            result = ReadRows("dbo", "People_hist");
            Assert.AreEqual(5, result.Count);
            Assert.That.ExactMatch(result, new List <CaseInsensitiveStringKeyDictionary <object> >()
            {
                new CaseInsensitiveStringKeyDictionary <object>()
                {
                    ["People_histID"] = 1, ["Id"] = 0, ["Name"] = "A", ["FavoritePetId"] = 2, ["LastChangedOn"] = new DateTime(2000, 1, 1, 1, 1, 1, 0), ["_ValidFrom"] = new DateTimeOffset(new DateTime(2000, 1, 1, 1, 1, 1, 0), new TimeSpan(0, 0, 0, 0, 0)), ["_ValidTo"] = new DateTimeOffset(new DateTime(2500, 1, 1, 0, 0, 0, 0), new TimeSpan(0, 0, 0, 0, 0))
                },
                new CaseInsensitiveStringKeyDictionary <object>()
                {
                    ["People_histID"] = 2, ["Id"] = 1, ["Name"] = "B", ["LastChangedOn"] = new DateTime(2000, 1, 1, 1, 1, 1, 0), ["_ValidFrom"] = new DateTimeOffset(new DateTime(2000, 1, 1, 1, 1, 1, 0), new TimeSpan(0, 0, 0, 0, 0)), ["_ValidTo"] = new DateTimeOffset(new DateTime(2500, 1, 1, 0, 0, 0, 0), new TimeSpan(0, 0, 0, 0, 0))
                },
                new CaseInsensitiveStringKeyDictionary <object>()
                {
                    ["People_histID"] = 3, ["Id"] = 2, ["Name"] = "C", ["FavoritePetId"] = 3, ["LastChangedOn"] = new DateTime(2000, 1, 1, 1, 1, 1, 0), ["_ValidFrom"] = new DateTimeOffset(new DateTime(2000, 1, 1, 1, 1, 1, 0), new TimeSpan(0, 0, 0, 0, 0)), ["_ValidTo"] = new DateTimeOffset(new DateTime(2500, 1, 1, 0, 0, 0, 0), new TimeSpan(0, 0, 0, 0, 0))
                },
                new CaseInsensitiveStringKeyDictionary <object>()
                {
                    ["People_histID"] = 4, ["Id"] = 3, ["Name"] = "D", ["LastChangedOn"] = new DateTime(2000, 1, 1, 1, 1, 1, 0), ["_ValidFrom"] = new DateTimeOffset(new DateTime(2000, 1, 1, 1, 1, 1, 0), new TimeSpan(0, 0, 0, 0, 0)), ["_ValidTo"] = new DateTimeOffset(new DateTime(2500, 1, 1, 0, 0, 0, 0), new TimeSpan(0, 0, 0, 0, 0))
                },
                new CaseInsensitiveStringKeyDictionary <object>()
                {
                    ["People_histID"] = 5, ["Id"] = 4, ["Name"] = "E", ["LastChangedOn"] = new DateTime(2000, 1, 1, 1, 1, 1, 0), ["_ValidFrom"] = new DateTimeOffset(new DateTime(2000, 1, 1, 1, 1, 1, 0), new TimeSpan(0, 0, 0, 0, 0)), ["_ValidTo"] = new DateTimeOffset(new DateTime(2500, 1, 1, 0, 0, 0, 0), new TimeSpan(0, 0, 0, 0, 0))
                }
            });

            result = ReadRows("sec", "Pet");
            Assert.AreEqual(3, result.Count);
            Assert.That.ExactMatch(result, new List <CaseInsensitiveStringKeyDictionary <object> >()
            {
                new CaseInsensitiveStringKeyDictionary <object>()
                {
                    ["Id"] = 1, ["Name"] = "pet#1", ["OwnerPeopleId"] = 0, ["LastChangedOn"] = new DateTime(2000, 1, 1, 1, 1, 1, 0)
                },
                new CaseInsensitiveStringKeyDictionary <object>()
                {
                    ["Id"] = 2, ["Name"] = "pet#2", ["OwnerPeopleId"] = 0, ["LastChangedOn"] = new DateTime(2000, 1, 1, 1, 1, 1, 0)
                },
                new CaseInsensitiveStringKeyDictionary <object>()
                {
                    ["Id"] = 3, ["Name"] = "pet#3", ["OwnerPeopleId"] = 2, ["LastChangedOn"] = new DateTime(2000, 1, 1, 1, 1, 1, 0)
                }
            });

            result = ReadRows("dbo", "_temp_People");
            Assert.AreEqual(5, result.Count);

            result = ReadRows("sec", "_temp_Pet");
            Assert.AreEqual(3, result.Count);
        }
        private void Update(DwhBuilderConfiguration configuration, RelationalModel model)
        {
            var builder = new MsSqlDwhBuilder(PluginTopic, "run#2", EtlRunId2)
            {
                Configuration    = configuration,
                ConnectionString = TestConnectionString,
                Model            = model,
            };

            builder.AddTables(model["dbo"]["People"])
            .InputIsCustomProcess(CreatePeople2)
            .AddMutators(PeopleMutators)
            .RemoveExistingRows(b => b
                                .MatchByPrimaryKey()
                                .CompareAllColumnsButValidity())
            .DisableConstraintCheck()
            .BaseIsCurrentFinalizer(b => b
                                    .MatchByPrimaryKey());

            builder.AddTables(model["sec"]["Pet"])
            .InputIsCustomProcess(CreatePet2)
            .AddMutators(PetMutators)
            .RemoveExistingRows(b => b
                                .MatchByPrimaryKey()
                                .CompareAllColumnsButValidity())
            .DisableConstraintCheck()
            .BaseIsCurrentFinalizer(b => b
                                    .MatchByPrimaryKey());

            var process = builder.Build();

            Context.ExecuteOne(true, process);

            var result = ReadRows("dbo", "People");

            Assert.AreEqual(5, result.Count);
            Assert.That.ExactMatch(result, new List <CaseInsensitiveStringKeyDictionary <object> >()
            {
                new CaseInsensitiveStringKeyDictionary <object>()
                {
                    ["Id"] = 0, ["Name"] = "A", ["FavoritePetId"] = 2, ["LastChangedOn"] = new DateTime(2000, 1, 1, 1, 1, 1, 0), ["EtlRunInsert"] = new DateTime(2001, 1, 1, 1, 1, 1, 0), ["EtlRunUpdate"] = new DateTime(2001, 1, 1, 1, 1, 1, 0), ["EtlRunFrom"] = new DateTime(2001, 1, 1, 1, 1, 1, 0)
                },
                new CaseInsensitiveStringKeyDictionary <object>()
                {
                    ["Id"] = 1, ["Name"] = "Bx", ["LastChangedOn"] = new DateTime(2010, 1, 1, 1, 1, 1, 0), ["EtlRunInsert"] = new DateTime(2001, 1, 1, 1, 1, 1, 0), ["EtlRunUpdate"] = new DateTime(2022, 2, 2, 2, 2, 2, 0), ["EtlRunFrom"] = new DateTime(2001, 1, 1, 1, 1, 1, 0)
                },
                new CaseInsensitiveStringKeyDictionary <object>()
                {
                    ["Id"] = 2, ["Name"] = "C", ["FavoritePetId"] = 3, ["LastChangedOn"] = new DateTime(2000, 1, 1, 1, 1, 1, 0), ["EtlRunInsert"] = new DateTime(2001, 1, 1, 1, 1, 1, 0), ["EtlRunUpdate"] = new DateTime(2001, 1, 1, 1, 1, 1, 0), ["EtlRunFrom"] = new DateTime(2001, 1, 1, 1, 1, 1, 0)
                },
                new CaseInsensitiveStringKeyDictionary <object>()
                {
                    ["Id"] = 3, ["Name"] = "Dx", ["LastChangedOn"] = new DateTime(2010, 1, 1, 1, 1, 1, 0), ["EtlRunInsert"] = new DateTime(2001, 1, 1, 1, 1, 1, 0), ["EtlRunUpdate"] = new DateTime(2022, 2, 2, 2, 2, 2, 0), ["EtlRunFrom"] = new DateTime(2001, 1, 1, 1, 1, 1, 0)
                },
                new CaseInsensitiveStringKeyDictionary <object>()
                {
                    ["Id"] = 4, ["Name"] = "E", ["LastChangedOn"] = new DateTime(2000, 1, 1, 1, 1, 1, 0), ["EtlRunInsert"] = new DateTime(2001, 1, 1, 1, 1, 1, 0), ["EtlRunUpdate"] = new DateTime(2001, 1, 1, 1, 1, 1, 0), ["EtlRunFrom"] = new DateTime(2001, 1, 1, 1, 1, 1, 0)
                }
            });

            result = ReadRows("sec", "Pet");
            Assert.AreEqual(4, result.Count);
            Assert.That.ExactMatch(result, new List <CaseInsensitiveStringKeyDictionary <object> >()
            {
                new CaseInsensitiveStringKeyDictionary <object>()
                {
                    ["Id"] = 1, ["Name"] = "pet#1", ["OwnerPeopleId"] = 0, ["LastChangedOn"] = new DateTime(2000, 1, 1, 1, 1, 1, 0)
                },
                new CaseInsensitiveStringKeyDictionary <object>()
                {
                    ["Id"] = 2, ["Name"] = "pet#2x", ["OwnerPeopleId"] = 0, ["LastChangedOn"] = new DateTime(2010, 1, 1, 1, 1, 1, 0)
                },
                new CaseInsensitiveStringKeyDictionary <object>()
                {
                    ["Id"] = 3, ["Name"] = "pet#3", ["OwnerPeopleId"] = 2, ["LastChangedOn"] = new DateTime(2000, 1, 1, 1, 1, 1, 0)
                },
                new CaseInsensitiveStringKeyDictionary <object>()
                {
                    ["Id"] = 4, ["Name"] = "pet#4x", ["OwnerPeopleId"] = 0, ["LastChangedOn"] = new DateTime(2010, 1, 1, 1, 1, 1, 0)
                }
            });

            result = ReadRows("dbo", "_temp_People");
            Assert.AreEqual(2, result.Count);

            result = ReadRows("sec", "_temp_Pet");
            Assert.AreEqual(2, result.Count);
        }