• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

HicServices / RDMP / 13304867964

13 Feb 2025 09:47AM UTC coverage: 57.394% (-0.002%) from 57.396%
13304867964

push

github

web-flow
Feature/spillchuck (#2133)

* Fix non-UTF8 character in version text

* Fix a few typos.

* Fix link filename

* Update URL for Atlassian HIC docs

---------

Co-authored-by: James A Sutherland <>

11341 of 21308 branches covered (53.22%)

Branch coverage included in aggregate %.

20 of 39 new or added lines in 16 files covered. (51.28%)

1 existing line in 1 file now uncovered.

32238 of 54621 relevant lines covered (59.02%)

17036.59 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

82.5
/Rdmp.Core/DataLoad/Engine/Migration/MigrationConfiguration.cs
1
// Copyright (c) The University of Dundee 2018-2019
2
// This file is part of the Research Data Management Platform (RDMP).
3
// RDMP is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
4
// RDMP is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
5
// You should have received a copy of the GNU General Public License along with RDMP. If not, see <https://www.gnu.org/licenses/>.
6

7
using System;
8
using System.Collections.Generic;
9
using System.Collections.ObjectModel;
10
using System.Linq;
11
using FAnsi.Discovery;
12
using FAnsi.Discovery.Constraints;
13
using Rdmp.Core.Curation.Data;
14
using Rdmp.Core.Curation.Data.EntityNaming;
15
using Rdmp.Core.ReusableLibraryCode.DataAccess;
16

17
namespace Rdmp.Core.DataLoad.Engine.Migration;
18

19
/// <summary>
20
/// Converts a list of TableInfos into MigrationColumnSets to achieve migration of records from STAGING to LIVE during a DLE execution.
21
/// </summary>
22
public class MigrationConfiguration
23
{
24
    private readonly DiscoveredDatabase _fromDatabaseInfo;
25
    private readonly LoadBubble _fromBubble;
26
    private readonly LoadBubble _toBubble;
27
    private readonly INameDatabasesAndTablesDuringLoads _namer;
28

29
    public MigrationConfiguration(DiscoveredDatabase fromDatabaseInfo, LoadBubble fromBubble, LoadBubble toBubble,
82✔
30
        INameDatabasesAndTablesDuringLoads namer)
82✔
31
    {
32
        _fromDatabaseInfo = fromDatabaseInfo;
82✔
33
        _fromBubble = fromBubble;
82✔
34
        _toBubble = toBubble;
82✔
35
        _namer = namer;
82✔
36
    }
82✔
37

38
    public IList<MigrationColumnSet> CreateMigrationColumnSetFromTableInfos(List<ITableInfo> tableInfos,
39
        List<ITableInfo> lookupTableInfos, IMigrationFieldProcessor migrationFieldProcessor)
40
    {
41
        //treat null values as empty
42
        tableInfos ??= new List<ITableInfo>();
118!
43
        lookupTableInfos ??= new List<ITableInfo>();
118✔
44

45
        var columnSet = new List<MigrationColumnSet>();
118✔
46

47
        foreach (var tableInfo in tableInfos.Union(lookupTableInfos))
480✔
48
        {
49
            var fromTableName = tableInfo.GetRuntimeName(_fromBubble, _namer);
122✔
50
            var toTableName = tableInfo.GetRuntimeName(_toBubble, _namer);
122✔
51

52
            var fromTable =
122✔
53
                _fromDatabaseInfo
122✔
54
                    .ExpectTable(
122✔
55
                        fromTableName); //Staging doesn't have schema e.g. even if live schema is not dbo STAGING will be
122✔
56

57
            var toTable = DataAccessPortal
122✔
58
                .ExpectDatabase(tableInfo, DataAccessContext.DataLoad)
122✔
59
                .ExpectTable(toTableName, tableInfo.Schema);
122✔
60

61
            if (!fromTable.Exists())
122!
62
                if (lookupTableInfos
×
63
                    .Contains(tableInfo)) //its a lookup table which doesn't exist in from (Staging) - nevermind
×
64
                    continue;
65
                else
66
                    throw new Exception(
×
NEW
67
                        $"Table {fromTableName} was not found on on server {_fromDatabaseInfo.Server} (Database {_fromDatabaseInfo})"); //its not a lookup table if it isn't in STAGING that's a problem!
×
68

69
            columnSet.Add(new MigrationColumnSet(fromTable, toTable, migrationFieldProcessor));
122✔
70
        }
71

72
        var sorter = new RelationshipTopologicalSort(columnSet.Select(c => c.DestinationTable));
240✔
73
        columnSet = columnSet
118✔
74
            .OrderBy(s => ((ReadOnlyCollection<DiscoveredTable>)sorter.Order).IndexOf(s.DestinationTable)).ToList();
126✔
75

76
        return columnSet;
118✔
77
    }
78
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc