/// <summary> /// Initialize Maime with Options /// </summary> /// <param name="options">Options used for reparation</param> public static void Init(Options.Options options) { Logger.Common("Maime initializing"); _options = options; // If debugger attached, then locate folders in solution folder. if (System.Diagnostics.Debugger.IsAttached) { _projectPathFolder = Path.GetDirectoryName(Path.GetDirectoryName(Directory.GetCurrentDirectory())); _dataFolder = Path.GetFullPath(Path.Combine(_projectPathFolder, "..\\", "Data")); } else // Else locate in same folder as .exe file { _projectPathFolder = AppDomain.CurrentDomain.BaseDirectory; _dataFolder = Path.GetFullPath(Path.Combine(_projectPathFolder, "Data")); } Logger.Common($"Settings stored at {_projectPathFolder}"); Logger.Common($"Data folder location {_dataFolder}"); // ======== Settings ======== // Logger.Common("Loading settings"); SettingsStore.Init( new JsonSettingsProvider(_dataFolder), new JsonEDSProvider() ); Logger.Common("Settings loaded"); // ======== Metadata store ======== // Logger.Common("Initializing metadata store"); MetaDataStore.Init(new JSONSnapshotProvider()); Logger.Common("Metadata store initialized"); _application = new Application(); // ======== Fetch Changes ======== // Logger.Common("Fetching latest metadata changes"); _latestChanges = MetaDataStore.GetLatestChanges(SettingsStore.EDSSettings); if (_latestChanges.Count == 0) { Logger.Error("No database(s) or change(s) found. Please create a snapshot and rerun the program."); _databaseMetaChange = null; return; } _databaseMetaChange = _latestChanges.Values.First(); Logger.Common("Finished fetching metadata changes"); Logger.Common("Maime initialized"); }
private static void Main(string[] args) { // Traverse through every single EDS and save a snapshot of it //SaveSnapshot(); // Create dictionary of latest snapshot, argument is a list of relevant EDSs to include Dictionary <string, DatabaseMetaChange> databaseMetaChanges = MetaDataStore.GetLatestChanges(SettingsStore.EDSSettings); foreach (var databaseMetaChange in databaseMetaChanges.Values) { Console.WriteLine(databaseMetaChange); } Console.WriteLine("Done..."); Console.Read(); }
static void Main(string[] args) { string testDTSX = "LargeExample.dtsx"; string path = Path.Combine(SSISFolder, testDTSX); // Traverse through every single EDS and save a snapshot of it //foreach (EDSSettings EDS in SettingsStore.EDSSettings.Where(e => e.Name != "Template")) //{ // MetaDataSnapshot metaDataSnapshot = new MetaDataSnapshot(EDS.ConnectionString); // Console.WriteLine(metaDataSnapshot); // MetaDataStore.Provider.SaveSnapshot(EDS, metaDataSnapshot); //} // Key = EDS connection string Dictionary <string, DatabaseMetaChange> latestChanges = MetaDataStore.GetLatestChanges(SettingsStore.EDSSettings); _databaseMetaChange = latestChanges.Values.First(); //TODO: change this later. // Print out changes Console.WriteLine(_databaseMetaChange); // Create a new application to host packages, and load a package within it Application application = new Application(); Package package = application.LoadPackage(path, null); Graph g = new Graph(application, package, testDTSX, new Options.Options()) { Options = new Options.Options() }; // Print attributes, which is used in graph List <Dictionary <string, Attribute> > list = g.AttributeTable.Values.SelectMany(d => d.Values).ToList(); List <Attribute> attributes = list.SelectMany(d => d.Values).ToList(); string s = string.Join("\n", attributes.Select(a => $" -{a.Id}/{a.AttributeRef?.ID}: {a.Name}")); Console.WriteLine(s); // Iterate through all meta changes foreach (TableMetaChange tableMetaChange in _databaseMetaChange.Tables.Values) { foreach (ColumnMetaChange columnMetaChange in tableMetaChange.Columns.Values.Where(c => c.ColumnChanges > 0)) { foreach (ColumnChanges change in columnMetaChange.ListChanges()) { g.Alter(columnMetaChange, change); } } } // Validate package before saving it package.Validate(package.Connections, package.Variables, new PackageValidateErrorEvent(), null); // Save package application.SaveToXml(Path.Combine(TestOutputFolder, "packages", testDTSX), package, null); Console.WriteLine("Done"); Console.ReadKey(); }