public void DeleteHierarchyAndLevelTest() { var handler = new TabularModelHandler("localhost", "AdventureWorks"); handler.Tree = new MockTree(handler.Model); var hierarchy = handler.Model.Tables["Date"].Hierarchies["Calendar"]; hierarchy.Delete(); handler.SaveDB(); Assert.IsFalse(handler.Model.Tables["Date"].Hierarchies.Contains("Calendar")); handler.UndoManager.Rollback(); handler.SaveDB(); Assert.IsTrue(handler.Model.Tables["Date"].Hierarchies.Contains("Calendar")); hierarchy.Levels["Quarter"].Delete(); hierarchy.Levels["Day"].Delete(); hierarchy.Levels["Year"].Delete(); handler.SaveDB(); Assert.AreEqual(0, hierarchy.Levels["Semester"].Ordinal); Assert.AreEqual(1, hierarchy.Levels["Month"].Ordinal); hierarchy.Delete(); handler.SaveDB(); handler.UndoManager.Rollback(); handler.SaveDB(); Assert.AreEqual(0, hierarchy.Levels["Year"].Ordinal); Assert.AreEqual(1, hierarchy.Levels["Semester"].Ordinal); Assert.AreEqual(2, hierarchy.Levels["Quarter"].Ordinal); Assert.AreEqual(3, hierarchy.Levels["Month"].Ordinal); Assert.AreEqual(4, hierarchy.Levels["Day"].Ordinal); }
public void TestNewDeploymentNoErrors() { var handler = new TabularModelHandler("localhost", "AdventureWorks"); var model = handler.Model; var table = model.Tables["Reseller Sales"]; var column = table.Columns["Gross Profit"] as CalculatedColumn; var measure = table.Measures["Reseller Total Gross Profit"]; measure.Expression = orgDax; column.Name = "GP"; Assert.AreEqual("SUM([GP]) +\n SUM('Reseller Sales'[GP])", measure.Expression); handler.UndoManager.Undo(); Assert.AreEqual(orgDaxNoCr, measure.Expression); handler.SaveDB(); column.Name = "Gross Profit XXX"; Assert.AreEqual("SUM([Gross Profit XXX]) +\n SUM('Reseller Sales'[Gross Profit XXX])", measure.Expression); handler.SaveDB(); column.Name = "GP"; Assert.AreEqual("SUM([GP]) +\n SUM('Reseller Sales'[GP])", measure.Expression); handler.SaveDB(); column.Name = "Gross Profit"; Assert.AreEqual(orgDaxNoCr, measure.Expression); handler.SaveDB(); }
public void MinimalPerspectiveTest() { DeleteTestPerspectives(); var handler = new TabularModelHandler("localhost", "AdventureWorks"); handler.Tree = new MockTree(handler.Model); var m = handler.Model; // Perspective which includes everything except a few select items: var pnEx = "Test Perspective Exclusive"; Perspective.CreateNew(pnEx); m.Tables["Date 6"].InPerspective[pnEx] = true; m.Tables["Currency"].InPerspective[pnEx] = true; //m.Tables.InPerspective(pnEx, true); //m.Tables["Reseller Sales"].InPerspective[pnEx] = true; //m.Tables["Employee"].InPerspective[pnEx] = false; //m.Tables["Date"].Hierarchies.InPerspective(pnEx, false); //m.Tables["Internet Sales"].Measures.InPerspective(pnEx, false); //m.Tables["Product"].Columns.InPerspective(pnEx, false); //m.Tables["Reseller Sales"].Measures["Reseller Total Sales"].InPerspective[pnEx] = false; handler.SaveDB(); handler.UndoManager.Rollback(); handler.SaveDB(); // Check that perspectives were succesfully deleted: Assert.IsFalse(m.Perspectives.Contains(pnEx)); }
public void DeleteHierarchyAndLevelTest() { var handler = new TabularModelHandler(Constants.ServerName, "TomWrapperTest"); var hierarchy = handler.Model.Tables["Date"].Hierarchies["Calendar"]; hierarchy.Delete(); handler.SaveDB(); Assert.IsFalse(handler.Model.Tables["Date"].Hierarchies.Contains("Calendar")); handler.UndoManager.Rollback(); handler.SaveDB(); Assert.IsTrue(handler.Model.Tables["Date"].Hierarchies.Contains("Calendar")); hierarchy.Levels["Quarter"].Delete(); hierarchy.Levels["Day"].Delete(); hierarchy.Levels["Year"].Delete(); handler.SaveDB(); Assert.AreEqual(0, hierarchy.Levels["Semester"].Ordinal); Assert.AreEqual(1, hierarchy.Levels["Month"].Ordinal); hierarchy.Delete(); handler.SaveDB(); handler.UndoManager.Rollback(); handler.SaveDB(); Assert.AreEqual(0, hierarchy.Levels["Year"].Ordinal); Assert.AreEqual(1, hierarchy.Levels["Semester"].Ordinal); Assert.AreEqual(2, hierarchy.Levels["Quarter"].Ordinal); Assert.AreEqual(3, hierarchy.Levels["Month"].Ordinal); Assert.AreEqual(4, hierarchy.Levels["Day"].Ordinal); }
public void ColumnsAndDataTypeVisibleInTreeAlphabeticalTest() { var handler = new TabularModelHandler("localhost", "TestModel"); handler.Tree.Options = LogicalTreeOptions.Columns | LogicalTreeOptions.DisplayFolders | LogicalTreeOptions.OrderByName; var model = handler.Model; var table = model.AddCalculatedTable(); table.Expression = "ROW(\"Int64\", 1, \"String\", \"ABC\", \"Double\", 1.0)"; handler.SaveDB(); var itemsFromTree = handler.Tree.GetChildren(table).ToList(); Assert.AreEqual(3, itemsFromTree.Count); Assert.AreEqual("Double", itemsFromTree[0].Name); Assert.AreEqual("Int64", itemsFromTree[1].Name); Assert.AreEqual("String", itemsFromTree[2].Name); Assert.AreEqual(3, table.Columns.Count); Assert.AreEqual(DataType.Int64, table.Columns["Int64"].DataType); Assert.AreEqual(DataType.String, table.Columns["String"].DataType); Assert.AreEqual(DataType.Double, table.Columns["Double"].DataType); handler.UndoManager.Rollback(); handler.SaveDB(); }
public void ColumnsAndDataTypeNotVisibleInTreeTest() { var handler = new TabularModelHandler("localhost", "TestModel"); handler.Tree.Options = 0; // Hide everything var model = handler.Model; var table = model.AddCalculatedTable(); table.Expression = "ROW(\"Int64\", 1, \"String\", \"ABC\", \"Double\", 1.0)"; handler.SaveDB(); var itemsFromTree = handler.Tree.GetChildren(table).ToList(); Assert.AreEqual(0, itemsFromTree.Count); Assert.AreEqual(3, table.Columns.Count); Assert.AreEqual(DataType.Int64, table.Columns["Int64"].DataType); Assert.AreEqual(DataType.String, table.Columns["String"].DataType); Assert.AreEqual(DataType.Double, table.Columns["Double"].DataType); handler.UndoManager.Rollback(); handler.SaveDB(); }
public void DeleteTableTest() { var handler = new TabularModelHandler("localhost", "AdventureWorks"); handler.Model.Tables["Currency"].Delete(); handler.SaveDB(); handler.UndoManager.Rollback(); handler.SaveDB(); Assert.IsTrue(handler.Model.Tables.Contains("Currency")); }
public void DeleteTableTest() { var handler = new TabularModelHandler(Constants.ServerName, "TomWrapperTest"); handler.Model.Tables["Currency"].Delete(); handler.SaveDB(); handler.UndoManager.Rollback(); handler.SaveDB(); Assert.IsTrue(handler.Model.Tables.Contains("Currency")); }
public void DeleteHierarchyTest() { var handler = new TabularModelHandler(Constants.ServerName, "TomWrapperTest"); handler.Model.Tables["Date"].Hierarchies["Calendar"].Delete(); handler.SaveDB(); Assert.IsFalse(handler.Model.Tables["Date"].Hierarchies.Contains("Calendar")); handler.UndoManager.Rollback(); handler.SaveDB(); Assert.IsTrue(handler.Model.Tables["Date"].Hierarchies.Contains("Calendar")); }
public void DeleteHierarchyTest() { var handler = new TabularModelHandler("localhost", "AdventureWorks"); handler.Model.Tables["Date"].Hierarchies["Calendar"].Delete(); handler.SaveDB(); Assert.IsFalse(handler.Model.Tables["Date"].Hierarchies.Contains("Calendar")); handler.UndoManager.Rollback(); handler.SaveDB(); Assert.IsTrue(handler.Model.Tables["Date"].Hierarchies.Contains("Calendar")); }
public void CreateHierarchyTest() { var handler = new TabularModelHandler(Constants.ServerName, "TomWrapperTest"); var table = handler.Model.Tables["Employee"]; table.AddHierarchy("Test Hierarchy", null, "Base Rate", "Birth Date", "Department Name"); handler.SaveDB(); Assert.AreEqual(3, table.Hierarchies["Test Hierarchy"].Levels.Count); handler.UndoManager.Rollback(); handler.SaveDB(); Assert.IsFalse(table.Hierarchies.Contains("Test Hierarchy")); }
public void RenameHierarchyTest() { var handler = new TabularModelHandler("localhost", "AdventureWorks"); handler.Tree = new MockTree(handler.Model); handler.Model.Tables["Date"].Hierarchies["Calendar"].Name = "Calendar Renamed"; handler.SaveDB(); Assert.IsTrue(handler.Model.Tables["Date"].Hierarchies.Contains("Calendar Renamed")); handler.UndoManager.Rollback(); handler.SaveDB(); Assert.IsFalse(handler.Model.Tables["Date"].Hierarchies.Contains("Calendar Renamed")); }
public void DeleteMeasureTest() { var handler = new TabularModelHandler(Constants.ServerName, "TomWrapperTest"); handler.Model.Tables["Internet Sales"].Measures["Internet Total Sales"].Delete(); handler.SaveDB(); Assert.IsFalse(handler.Model.Tables["Internet Sales"].Measures.Contains("Internet Total Sales")); // Rollback: handler.UndoManager.Rollback(); handler.SaveDB(); Assert.IsTrue(handler.Model.Tables["Internet Sales"].Measures.Contains("Internet Total Sales")); }
public void AddMeasureTest() { var handler = new TabularModelHandler("localhost", "AdventureWorks"); handler.Model.Tables["Internet Sales"].AddMeasure("TestMeasure", "SUM('Internet Sales'[Sales Amount])", "Test folder"); handler.SaveDB(); Assert.AreEqual("", handler.Model.Tables["Internet Sales"].Measures["TestMeasure"].ErrorMessage); // Rollback: handler.UndoManager.Rollback(); handler.SaveDB(); Assert.IsFalse(handler.Model.Tables["Internet Sales"].Measures.Contains("TestMeasure")); }
public void AddMeasureTest() { var handler = new TabularModelHandler(Constants.ServerName, "TomWrapperTest"); handler.Model.Tables["Internet Sales"].AddMeasure("TestMeasure", "SUM('Internet Sales'[Sales Amount])", "Test folder"); handler.SaveDB(); Assert.AreEqual("", handler.Model.Tables["Internet Sales"].Measures["TestMeasure"].ErrorMessage); // Rollback: handler.UndoManager.Rollback(); handler.SaveDB(); Assert.IsFalse(handler.Model.Tables["Internet Sales"].Measures.Contains("TestMeasure")); }
public void DeleteMeasureTest() { var handler = new TabularModelHandler("localhost", "AdventureWorks"); handler.Model.Tables["Internet Sales"].Measures["Internet Total Sales"].Delete(); handler.SaveDB(); Assert.IsFalse(handler.Model.Tables["Internet Sales"].Measures.Contains("Internet Total Sales")); // Rollback: handler.UndoManager.Rollback(); handler.SaveDB(); Assert.IsTrue(handler.Model.Tables["Internet Sales"].Measures.Contains("Internet Total Sales")); }
public void UpdateTomTests() { Ensure1500ModelExists(); var handler = new TabularModelHandler(Constants.AasServerName, "TomWrapperTest1500"); var cg1 = handler.Model.AddCalculationGroup("CG1"); var ci1 = cg1.AddCalculationItem("CI1", "SELECTEDMEASURE()"); Assert.AreEqual(handler.Model, ci1.Model); handler.SaveDB(); handler.RefreshTom(); cg1 = handler.Model.CalculationGroups.First(); ci1 = (handler.Model.Tables["CG1"] as CalculationGroupTable).CalculationItems[0]; Assert.AreEqual(cg1, ci1.Parent.Table); Assert.AreEqual(handler.Model, cg1.Model); Assert.AreEqual(handler.Model, ci1.Model); var jsonRep = Serializer.SerializeObjects(cg1.CalculationItems); var objContainer = Serializer.ParseObjectJsonContainer(jsonRep); Assert.IsTrue(objContainer[typeof(CalculationItem)].Length > 0, "JsonContainer empty after serializing calc items (this will prevent CTRL+C operations on calc items)"); cg1.Delete(); handler.UndoManager.Undo(); cg1 = handler.Model.CalculationGroups.First(); ci1 = (handler.Model.Tables["CG1"] as CalculationGroupTable).CalculationItems[0]; Assert.AreEqual(cg1, ci1.Parent.Table); Assert.AreEqual(handler.Model, cg1.Model); Assert.AreEqual(handler.Model, ci1.Model); }
public void CreateHierarchyTest() { var handler = new TabularModelHandler("localhost", "AdventureWorks"); handler.Tree = new MockTree(handler.Model); var table = handler.Model.Tables["Employee"]; table.AddHierarchy("Test Hierarchy", null, "Base Rate", "Birth Date", "Department Name"); handler.SaveDB(); Assert.AreEqual(3, table.Hierarchies["Test Hierarchy"].Levels.Count); handler.UndoManager.Rollback(); handler.SaveDB(); Assert.IsFalse(table.Hierarchies.Contains("Test Hierarchy")); }
public void DuplicateTest() { var handler = new TabularModelHandler("localhost", "AdventureWorks"); var c = handler.Model.Tables["Date"].AddCalculatedColumn(); c.Clone("Cloned Column"); var m = handler.Model.Tables["Date"].AddMeasure(); m.Clone("Cloned Measure"); handler.SaveDB(); Assert.IsTrue(handler.Model.Tables["Date"].Columns.Contains("Cloned Column")); Assert.IsTrue(handler.Model.Tables["Date"].Measures.Contains("Cloned Measure")); handler.UndoManager.Rollback(); handler.SaveDB(); }
public void DuplicateTest() { var handler = new TabularModelHandler(Constants.ServerName, "TomWrapperTest"); var c = handler.Model.Tables["Date"].AddCalculatedColumn(); c.Clone("Cloned Column"); var m = handler.Model.Tables["Date"].AddMeasure(); m.Clone("Cloned Measure"); handler.SaveDB(); Assert.IsTrue(handler.Model.Tables["Date"].Columns.Contains("Cloned Column")); Assert.IsTrue(handler.Model.Tables["Date"].Measures.Contains("Cloned Measure")); handler.UndoManager.Rollback(); handler.SaveDB(); }
public void ColumnsAndDataTypeTest() { var handler = new TabularModelHandler("localhost", "TestModel"); var model = handler.Model; var table = model.AddCalculatedTable(); table.Expression = "ROW(\"Int64\", 1, \"String\", \"ABC\", \"Double\", 1.0)"; handler.SaveDB(); Assert.AreEqual(3, table.Columns.Count); Assert.AreEqual(DataType.Int64, table.Columns["Int64"].DataType); Assert.AreEqual(DataType.String, table.Columns["String"].DataType); Assert.AreEqual(DataType.Double, table.Columns["Double"].DataType); handler.UndoManager.Rollback(); handler.SaveDB(); }
public void DeleteTestPerspectives() { var handler = new TabularModelHandler("localhost", "AdventureWorks"); foreach (var p in handler.Model.Perspectives.ToList()) { if (p.Name.Contains("Test")) { p.Delete(); } } handler.SaveDB(); }
public void DeleteTestPerspectives() { var handler = new TabularModelHandler(Constants.ServerName, "TomWrapperTest"); foreach (var p in handler.Model.Perspectives.ToList()) { if (p.Name.Contains("Test")) { p.Delete(); } } handler.SaveDB(); }
public void CultureTest() { var handler = new TabularModelHandler("localhost", "AdventureWorks"); handler.Tree = new MockTree(handler.Model); var model = handler.Model; var measure = model.Tables["Reseller Sales"].Measures["Reseller Total Sales"]; measure.DisplayFolder = "Test Folder"; model.AddTranslation("da-DK"); Assert.AreEqual("", measure.TranslatedNames["da-DK"]); Assert.AreEqual("", measure.TranslatedDisplayFolders["da-DK"]); measure.TranslatedNames["da-DK"] = "Reseller Total Sales"; Assert.AreEqual("Reseller Total Sales", measure.TranslatedNames["da-DK"]); measure.Name = "Changed Name"; handler.SaveDB(); Assert.AreEqual("Changed Name", measure.TranslatedNames["da-DK"]); handler.UndoManager.Undo(); measure.TranslatedNames["da-DK"] = "XXX"; measure.Name = "Changed Name"; handler.SaveDB(); Assert.AreEqual("XXX", measure.TranslatedNames["da-DK"]); measure.TranslatedNames.Reset(); measure.TranslatedDisplayFolders.Reset(); handler.SaveDB(); Assert.AreEqual("", measure.TranslatedNames["da-DK"]); Assert.AreEqual(measure.DisplayFolder, measure.TranslatedDisplayFolders["da-DK"]); handler.UndoManager.Rollback(); handler.SaveDB(); Assert.IsFalse(model.Cultures.Contains("da-DK")); }
public void DeleteLevelTest() { var handler = new TabularModelHandler("localhost", "AdventureWorks"); handler.Model.Tables["Date"].Hierarchies["Calendar"].Levels["Quarter"].Delete(); handler.SaveDB(); var h = handler.Model.Tables["Date"].Hierarchies["Calendar"]; Assert.AreEqual(0, h.Levels["Year"].Ordinal); Assert.AreEqual(1, h.Levels["Semester"].Ordinal); Assert.AreEqual(2, h.Levels["Month"].Ordinal); Assert.AreEqual(3, h.Levels["Day"].Ordinal); // Rollback: handler.UndoManager.Rollback(); handler.SaveDB(); Assert.AreEqual(0, h.Levels["Year"].Ordinal); Assert.AreEqual(1, h.Levels["Semester"].Ordinal); Assert.AreEqual(2, h.Levels["Quarter"].Ordinal); Assert.AreEqual(3, h.Levels["Month"].Ordinal); Assert.AreEqual(4, h.Levels["Day"].Ordinal); }
public void PerspectiveTest() { DeleteTestPerspectives(); var handler = new TabularModelHandler("localhost", "AdventureWorks"); handler.Tree = new MockTree(handler.Model); var m = handler.Model; // Perspective which only includes a few select items: var pnIn = "Test Perspective Inclusive"; Perspective.CreateNew(pnIn); m.Tables["Employee"].InPerspective[pnIn] = true; m.Tables["Date"].Hierarchies.InPerspective(pnIn, true); m.Tables["Internet Sales"].Measures.InPerspective(pnIn, true); m.Tables["Product"].Columns.InPerspective(pnIn, true); m.Tables["Reseller Sales"].Measures["Reseller Total Sales"].InPerspective[pnIn] = true; // Perspective which includes everything except a few select items: var pnEx = "Test Perspective Exclusive"; Perspective.CreateNew(pnEx); m.Tables.InPerspective(pnEx, true); m.Tables["Employee"].InPerspective[pnEx] = false; m.Tables["Date"].Hierarchies.InPerspective(pnEx, false); m.Tables["Internet Sales"].Measures.InPerspective(pnEx, false); m.Tables["Product"].Columns.InPerspective(pnEx, false); m.Tables["Reseller Sales"].Measures["Reseller Total Sales"].InPerspective[pnEx] = false; handler.SaveDB(); // Check on included perspective: Assert.IsTrue(m.Tables["Employee"].GetChildren().OfType <ITabularPerspectiveObject>().All(obj => obj.InPerspective[pnIn])); Assert.IsTrue(m.Tables["Employee"].InPerspective[pnIn]); Assert.IsTrue(m.Tables["Date"].Hierarchies.All(obj => obj.InPerspective[pnIn])); Assert.IsTrue(m.Tables["Internet Sales"].Measures.All(obj => obj.InPerspective[pnIn])); Assert.IsTrue(m.Tables["Product"].Columns.All(obj => obj.InPerspective[pnIn])); Assert.IsTrue(m.Tables["Reseller Sales"].Measures["Reseller Total Sales"].InPerspective[pnIn]); Assert.AreEqual(1, m.Tables["Reseller Sales"].Measures.Count(obj => obj.InPerspective[pnIn])); Assert.IsTrue(m.Tables["Reseller Sales"].InPerspective[pnIn]); Assert.IsFalse(m.Tables["Geography"].GetChildren().OfType <ITabularPerspectiveObject>().Any(obj => obj.InPerspective[pnIn])); Assert.IsFalse(m.Tables["Geography"].InPerspective[pnIn]); Assert.IsFalse(m.Tables["Date"].Columns.Any(obj => obj.InPerspective[pnIn])); // Check on excluded perspective: Assert.IsFalse(m.Tables["Employee"].GetChildren().OfType <ITabularPerspectiveObject>().Any(obj => obj.InPerspective[pnEx])); Assert.IsFalse(m.Tables["Employee"].InPerspective[pnEx]); Assert.IsFalse(m.Tables["Date"].Hierarchies.Any(obj => obj.InPerspective[pnEx])); Assert.IsFalse(m.Tables["Internet Sales"].Measures.Any(obj => obj.InPerspective[pnEx])); Assert.IsFalse(m.Tables["Product"].Columns.Any(obj => obj.InPerspective[pnEx])); Assert.IsFalse(m.Tables["Reseller Sales"].Measures["Reseller Total Sales"].InPerspective[pnEx]); Assert.AreEqual(1, m.Tables["Reseller Sales"].Measures.Count(obj => !obj.InPerspective[pnEx])); Assert.IsTrue(m.Tables["Reseller Sales"].InPerspective[pnEx]); Assert.IsTrue(m.Tables["Geography"].GetChildren().OfType <ITabularPerspectiveObject>().All(obj => obj.InPerspective[pnEx])); Assert.IsTrue(m.Tables["Geography"].InPerspective[pnEx]); Assert.IsTrue(m.Tables["Date"].Columns.All(obj => obj.InPerspective[pnEx])); handler.UndoManager.Rollback(); handler.SaveDB(); // Check that perspectives were succesfully deleted: Assert.IsFalse(m.Perspectives.Contains(pnIn)); Assert.IsFalse(m.Perspectives.Contains(pnEx)); }
void Deploy(string serverName, string databaseID, int doDeploy) { // Perform direct save: if (serverName == null) { var nextSwitch = upperArgList.Skip(doDeploy + 1).FirstOrDefault(); var deploySwitches = new[] { "-L", "-LOGIN", "-O", "-OVERWRITE", "-C", "-CONNECTIONS", "-P", "-PARTITIONS", "-Y", "-SKIPPOLICY", "-R", "-ROLES", "-M", "-MEMBERS", "-X", "-XMLA" }; if (deploySwitches.Contains(nextSwitch)) { Error("Invalid argument syntax."); OutputUsage(); throw new CommandLineException(); } Console.WriteLine("Saving model metadata back to source..."); if (Handler.SourceType == ModelSourceType.Database) { try { Handler.SaveDB(); Console.WriteLine("Model metadata saved."); var deploymentResult = Handler.GetLastDeploymentResults(); foreach (var err in deploymentResult.Issues) { if (errorOnDaxErr) { Error(err); } else { Warning(err); } } foreach (var err in deploymentResult.Warnings) { Warning(err); } foreach (var err in deploymentResult.Unprocessed) { if (warnOnUnprocessed) { Warning(err); } else { Console.WriteLine(err); } } } catch (Exception ex) { Error("Save failed: " + ex.Message); } } else { try { Handler.Save(Handler.Source, Handler.SourceType == ModelSourceType.Folder ? SaveFormat.TabularEditorFolder : Handler.SourceType == ModelSourceType.Pbit ? SaveFormat.PowerBiTemplate : SaveFormat.ModelSchemaOnly, Handler.SerializeOptions, true); Console.WriteLine("Model metadata saved."); } catch (Exception ex) { Error("Save failed: " + ex.Message); } } throw new CommandLineException(); } var conn = upperArgList.IndexOf("-CONNECTIONS"); if (conn == -1) { conn = upperArgList.IndexOf("-C"); } if (conn > -1) { var replaces = argList.Skip(conn + 1).TakeWhile(s => s[0] != '-').ToList(); if (replaces.Count > 0 && replaces.Count % 2 == 0) { // Placeholder replacing: for (var index = 0; index < replaces.Count; index = index + 2) { replaceMap.Add(replaces[index], replaces[index + 1]); } } } string userName = null; string password = null; var options = DeploymentOptions.StructureOnly; var switches = argList.Skip(doDeploy + 1).Where(arg => arg.StartsWith("-")).Select(arg => arg.ToUpper()).ToList(); if (string.IsNullOrEmpty(serverName) || string.IsNullOrEmpty(databaseID)) { Error("Invalid argument syntax.\n"); OutputUsage(); throw new CommandLineException(); } if (switches.Contains("-L") || switches.Contains("-LOGIN")) { var switchPos = upperArgList.IndexOf("-LOGIN"); if (switchPos == -1) { switchPos = upperArgList.IndexOf("-L"); } userName = argList.Skip(switchPos + 1).FirstOrDefault(); if (userName != null && userName.StartsWith("-")) { userName = null; } password = argList.Skip(switchPos + 2).FirstOrDefault(); if (password != null && password.StartsWith("-")) { password = null; } if (string.IsNullOrEmpty(userName) || string.IsNullOrEmpty(password)) { Error("Missing username or password.\n"); OutputUsage(); throw new CommandLineException(); } switches.Remove("-L"); switches.Remove("-LOGIN"); } if (switches.Contains("-O") || switches.Contains("-OVERWRITE")) { options.DeployMode = DeploymentMode.CreateOrAlter; switches.Remove("-O"); switches.Remove("-OVERWRITE"); } else { options.DeployMode = DeploymentMode.CreateDatabase; } if (switches.Contains("-P") || switches.Contains("-PARTITIONS")) { options.DeployPartitions = true; switches.Remove("-P"); switches.Remove("-PARTITIONS"); if (switches.Contains("-Y") || switches.Contains("-SKIPPOLICY")) { options.SkipRefreshPolicyPartitions = true; switches.Remove("-Y"); switches.Remove("-SKIPPOLICY"); } } if (switches.Contains("-C") || switches.Contains("-CONNECTIONS")) { options.DeployConnections = true; switches.Remove("-C"); switches.Remove("-CONNECTIONS"); } if (switches.Contains("-R") || switches.Contains("-ROLES")) { options.DeployRoles = true; switches.Remove("-R"); switches.Remove("-ROLES"); if (switches.Contains("-M") || switches.Contains("-MEMBERS")) { options.DeployRoleMembers = true; switches.Remove("-M"); switches.Remove("-MEMBERS"); } } var xmla_scripting_only = switches.Contains("-X") || switches.Contains("-XMLA"); string xmla_script_file = null; if (xmla_scripting_only) { var switchPos = upperArgList.IndexOf("-XMLA"); if (switchPos == -1) { switchPos = upperArgList.IndexOf("-X"); } xmla_script_file = argList.Skip(switchPos + 1).FirstOrDefault(); if (String.IsNullOrWhiteSpace(xmla_script_file) || xmla_script_file.StartsWith("-")) { xmla_script_file = null; } if (string.IsNullOrEmpty(xmla_script_file)) { Error("Missing xmla_script_file.\n"); OutputUsage(); throw new CommandLineException(); } switches.Remove("-X"); switches.Remove("-XMLA"); } try { if (replaceMap.Count > 0) { Console.WriteLine("Switching connection string placeholders..."); foreach (var map in replaceMap) { Handler.Model.DataSources.SetPlaceholder(map.Key, map.Value); } } var cs = string.IsNullOrEmpty(userName) ? TabularConnection.GetConnectionString(serverName, Program.ApplicationName) : TabularConnection.GetConnectionString(serverName, userName, password, Program.ApplicationName); if (xmla_scripting_only) { Console.WriteLine("Generating XMLA/TMSL script..."); var s = new TOM.Server(); s.Connect(cs); var xmla = Handler.TabularDeployer.GetTMSL(Handler.Database, s, databaseID, options); using (var sw = new StreamWriter(xmla_script_file)) { sw.Write(xmla); } Console.WriteLine("XMLA/TMSL script generated."); } else { Console.WriteLine("Deploying..."); Handler.Model.UpdateDeploymentMetadata(DeploymentModeMetadata.CLI); var deploymentResult = Handler.TabularDeployer.Deploy(Handler.Database, cs, databaseID, options, CancellationToken.None); Console.WriteLine("Deployment succeeded."); foreach (var err in deploymentResult.Issues) { if (errorOnDaxErr) { Error(err); } else { Warning(err); } } foreach (var err in deploymentResult.Warnings) { Warning(err); } foreach (var err in deploymentResult.Unprocessed) { if (warnOnUnprocessed) { Warning(err); } else { Console.WriteLine(err); } } } } catch (Exception ex) { Error($"{(xmla_scripting_only ? "Script generation" : "Deployment")} failed! {ex.Message}"); } }