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

HicServices / RDMP / 13298053371

13 Feb 2025 12:57AM UTC coverage: 57.393%. First build
13298053371

push

github

jas88
Fix a few typos.

11340 of 21308 branches covered (53.22%)

Branch coverage included in aggregate %.

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

32238 of 54621 relevant lines covered (59.02%)

8521.5 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,
41✔
30
        INameDatabasesAndTablesDuringLoads namer)
41✔
31
    {
32
        _fromDatabaseInfo = fromDatabaseInfo;
41✔
33
        _fromBubble = fromBubble;
41✔
34
        _toBubble = toBubble;
41✔
35
        _namer = namer;
41✔
36
    }
41✔
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>();
59!
43
        lookupTableInfos ??= new List<ITableInfo>();
59✔
44

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

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

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

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

61
            if (!fromTable.Exists())
61!
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));
61✔
70
        }
71

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

76
        return columnSet;
59✔
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