public void DeleteTreeDefaultValue(TreeDefaultValue tdv)
 {
     Database.Execute2("DELETE FROM TreeDefaultValue WHERE CruiseID = @CruiseID AND ifnull(SpeciesCode, '') = ifnull(@SpeciesCode, '') AND ifnull(PrimaryProduct, '') = ifnull(@PrimaryProduct, '')",
                       new
     {
         CruiseID,
         tdv.SpeciesCode,
         tdv.PrimaryProduct,
     });
 }
        public void SyncDesign_Test_PullTreeDefaults()
        {
            var(master, compDbs) = MakeFiles(numComponents: 2);

            var components = compDbs.Select((x, i) => { return(new ComponentFile()
                {
                    Database = x, Component_CN = i
                }); })
                             .ToArray();
            var commandBuilders = MergeComponentsPresenter.MakeCommandBuilders(master)
                                  .ToDictionary(x => x.ClientTableName);

            var comp1     = compDbs.First();
            var comp1TDV1 = new TreeDefaultValue()
            {
                TreeDefaultValue_CN = 1000,
                Species             = "nsp1",
                PrimaryProduct      = "01",
                LiveDead            = "L",
            };

            comp1.Insert(comp1TDV1);

            MergeSyncWorker.SyncDesign(
                master,
                components,
                new System.Threading.CancellationToken(),
                (IProgress <int>)null,
                TestMergeLogWriter);

            var mastTDV1 = master.From <TreeDefaultValue>().Where($"Species = 'nsp1'").Query().FirstOrDefault();

            mastTDV1.Should().NotBeNull();
            ValidateTDVSame(mastTDV1, comp1TDV1);

            // because there should be no conflict with the CN values between the master and the component
            // the synced tdv should have the same cn value
            mastTDV1.TreeDefaultValue_CN.Should().Be(comp1TDV1.TreeDefaultValue_CN);

            var comp2     = compDbs.ElementAt(1);
            var comp2TDV1 = comp2.From <TreeDefaultValue>().Where("Species = 'nsp1'").Query().FirstOrDefault();

            ValidateTDVSame(comp2TDV1, comp2TDV1);
            comp2TDV1.TreeDefaultValue_CN.Should().Be(comp1TDV1.TreeDefaultValue_CN);

            void ValidateTDVSame(TreeDefaultValue tdv1, TreeDefaultValue tdv2)
            {
                tdv1.Species.Should().Be(tdv2.Species);
                tdv1.PrimaryProduct.Should().Be(tdv2.PrimaryProduct);
                tdv1.LiveDead.Should().Be(tdv2.LiveDead);
            }
        }
Exemple #3
0
        public void SyncTreeDefaultValues_Add()
        {
            var fromPath = base.GetTempFilePath(".crz3", "SyncTreeDefaultValues_Add_fromFile");
            var toPath   = base.GetTempFilePath(".crz3", "SyncTreeDefaultValues_Add_toFile");

            var syncOptions = new CruiseSyncOptions()
            {
                Processing = SyncFlags.Insert,
            };

            var init = new DatabaseInitializer()
            {
                TreeDefaults = null,
            };
            var cruiseID = init.CruiseID;
            var saleID   = init.SaleID;

            using var fromDb = init.CreateDatabaseFile(fromPath);

            fromDb.CopyTo(toPath, true);
            using var toDb = new CruiseDatastore_V3(toPath);

            var tdv = new TreeDefaultValue
            {
                CruiseID       = cruiseID,
                SpeciesCode    = "sp1",
                PrimaryProduct = "01",
            };

            fromDb.Insert(tdv);

            var syncer = new CruiseSyncer();

            syncer.Sync(cruiseID, fromDb, toDb, syncOptions);

            toDb.From <TreeDefaultValue>().Count().Should().Be(1);
        }
        public void UpsertTreeDefaultValue(TreeDefaultValue tdv)
        {
            var changes = Database.Execute2(
                @"INSERT INTO TreeDefaultValue (
    CruiseID,
    SpeciesCode,
    PrimaryProduct,
    CullPrimary,
    CullPrimaryDead,
    HiddenPrimary,
    HiddenPrimaryDead,
    TreeGrade,
    TreeGradeDead,
    CullSecondary,
    HiddenSecondary,
    Recoverable,
    MerchHeightLogLength,
    MerchHeightType,
    FormClass,
    BarkThicknessRatio,
    AverageZ,
    ReferenceHeightPercent,
    CreatedBy
) VALUES (
    @CruiseID,
    @SpeciesCode,
    @PrimaryProduct,
    @CullPrimary,
    @CullPrimaryDead,
    @HiddenPrimary,
    @HiddenPrimaryDead,
    @TreeGrade,
    @TreeGradeDead,
    @CullSecondary,
    @HiddenSecondary,
    @Recoverable,
    @MerchHeightLogLength,
    @MerchHeightType,
    @FormClass,
    @BarkThicknessRatio,
    @AverageZ,
    @ReferenceHeightPercent,
    @DeviceID)
ON CONFLICT (CruiseID, ifnull(SpeciesCode, '') COLLATE NOCASE, ifnull(PrimaryProduct, '') COLLATE NOCASE) DO
UPDATE SET
    CullPrimary = @CullPrimary,
    CullPrimaryDead = @CullPrimaryDead,
    HiddenPrimary = @HiddenPrimary,
    HiddenPrimaryDead = @HiddenPrimaryDead,
    TreeGrade = @TreeGrade,
    TreeGradeDead = @TreeGradeDead,
    CullSecondary = @CullSecondary,
    HiddenSecondary = @HiddenSecondary,
    Recoverable = @Recoverable,
    MerchHeightLogLength = @MerchHeightLogLength,
    MerchHeightType = @MerchHeightType,
    FormClass = @FormClass,
    BarkThicknessRatio = @BarkThicknessRatio,
    AverageZ = @AverageZ,
    ReferenceHeightPercent = @ReferenceHeightPercent,
    CreatedBy = @DeviceID
WHERE CruiseID = @CruiseID
AND ifnull(SpeciesCode, '') = ifnull(@SpeciesCode, '')
AND ifnull(PrimaryProduct, '') = ifnull(@PrimaryProduct, '');",
                new
            {
                CruiseID,
                tdv.SpeciesCode,
                tdv.PrimaryProduct,
                tdv.CullPrimary,
                tdv.CullPrimaryDead,
                tdv.HiddenPrimary,
                tdv.HiddenPrimaryDead,
                tdv.TreeGrade,
                tdv.TreeGradeDead,
                tdv.CullSecondary,
                tdv.HiddenSecondary,
                tdv.Recoverable,
                tdv.MerchHeightLogLength,
                tdv.MerchHeightType,
                tdv.FormClass,
                tdv.BarkThicknessRatio,
                tdv.AverageZ,
                tdv.ReferenceHeightPercent,
                DeviceID,
            });

            if (changes == 0)
            {
                throw new Exception("Expected changes to be greater than 0");
            }
        }
        public void AddTreeDefaultValue(TreeDefaultValue tdv)
        {
            Database.Execute2(
                @"INSERT INTO TreeDefaultValue (
    CruiseID,
    SpeciesCode,
    PrimaryProduct,
    CullPrimary,
    CullPrimaryDead,
    HiddenPrimary,
    HiddenPrimaryDead,
    TreeGrade,
    TreeGradeDead,
    CullSecondary,
    HiddenSecondary,
    Recoverable,
    MerchHeightLogLength,
    MerchHeightType,
    FormClass,
    BarkThicknessRatio,
    AverageZ,
    ReferenceHeightPercent,
    CreatedBy
) VALUES (
    @CruiseID,
    @SpeciesCode,
    @PrimaryProduct,
    @CullPrimary,
    @CullPrimaryDead,
    @HiddenPrimary,
    @HiddenPrimaryDead,
    @TreeGrade,
    @TreeGradeDead,
    @CullSecondary,
    @HiddenSecondary,
    @Recoverable,
    @MerchHeightLogLength,
    @MerchHeightType,
    @FormClass,
    @BarkThicknessRatio,
    @AverageZ,
    @ReferenceHeightPercent,
    @DeviceID
);",
                new
            {
                CruiseID,
                tdv.SpeciesCode,
                tdv.PrimaryProduct,
                tdv.CullPrimary,
                tdv.CullPrimaryDead,
                tdv.HiddenPrimary,
                tdv.HiddenPrimaryDead,
                tdv.TreeGrade,
                tdv.TreeGradeDead,
                tdv.CullSecondary,
                tdv.HiddenSecondary,
                tdv.Recoverable,
                tdv.MerchHeightLogLength,
                tdv.MerchHeightType,
                tdv.FormClass,
                tdv.BarkThicknessRatio,
                tdv.AverageZ,
                tdv.ReferenceHeightPercent,
                DeviceID,
            });
        }
        public void SyncDesign_Test_PullTreeDefaults_master_has_cn_conflict()
        {
            var(master, comps) = MakeFiles(numComponents: 2);

            var compVMs = comps.Select((x, i) => { return(new ComponentFile()
                {
                    Database = x, Component_CN = i
                }); })
                          .ToArray();

            var comp1     = comps.First();
            var comp1TDV1 = new TreeDefaultValue()
            {
                TreeDefaultValue_CN = 1000,
                Species             = "nsp1",
                PrimaryProduct      = "01",
                LiveDead            = "L",
            };

            comp1.Insert(comp1TDV1);

            var mastTDV2 = new TreeDefaultValue()
            {
                TreeDefaultValue_CN = 1000,
                Species             = "nsp2",
                PrimaryProduct      = "01",
                LiveDead            = "L",
            };

            master.Insert(mastTDV2);

            MergeSyncWorker.SyncDesign(
                master,
                compVMs,
                new System.Threading.CancellationToken(),
                (IProgress <int>)null,
                TestMergeLogWriter);

            var mastTDV1 = master.From <TreeDefaultValue>().Where($"Species = 'nsp1'").Query().FirstOrDefault();

            mastTDV1.Should().NotBeNull();
            ValidateTDVSame(mastTDV1, comp1TDV1);

            mastTDV1.TreeDefaultValue_CN.Should().NotBe(comp1TDV1.TreeDefaultValue_CN);

            var comp2     = comps.ElementAt(1);
            var comp2TDV1 = comp2.From <TreeDefaultValue>().Where("Species = 'nsp1'").Query().FirstOrDefault();

            ValidateTDVSame(comp2TDV1, comp2TDV1);
            comp2TDV1.TreeDefaultValue_CN.Should().NotBe(comp1TDV1.TreeDefaultValue_CN);

            var comp1TDV1Again = comp1.From <TreeDefaultValue>().Where("Species = 'nsp1'").Query().FirstOrDefault();

            ValidateTDVSame(comp2TDV1, mastTDV1);
            comp1TDV1Again.TreeDefaultValue_CN.Should().Be(mastTDV1.TreeDefaultValue_CN);

            void ValidateTDVSame(TreeDefaultValue tdv1, TreeDefaultValue tdv2)
            {
                tdv1.Species.Should().Be(tdv2.Species);
                tdv1.PrimaryProduct.Should().Be(tdv2.PrimaryProduct);
                tdv1.LiveDead.Should().Be(tdv2.LiveDead);
            }
        }